aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/conf_merge/confdiffmerge.php169
-rw-r--r--sql/updates/world/2014_05_07_00_world_gossip_menu_option.sql1
-rw-r--r--sql/updates/world/2014_05_08_00_world_smart_scripts.sql2
-rw-r--r--sql/updates/world/2014_05_09_00_world_misc.sql11
-rw-r--r--sql/updates/world/2014_05_09_01_world_gossip.sql15
-rw-r--r--sql/updates/world/2014_05_09_02_world_creature_template.sql1
-rw-r--r--sql/updates/world/2014_05_10_00_world_player_factionchange_items.sql2
-rw-r--r--sql/updates/world/2014_05_10_01_world_halls_of_reflection.sql218
-rw-r--r--sql/updates/world/2014_05_11_00_world_gameobject.sql289
-rw-r--r--sql/updates/world/2014_05_11_01_world_misc.sql39
-rw-r--r--sql/updates/world/2014_05_11_02_world_gameobject.sql4
-rw-r--r--sql/updates/world/2014_05_11_03_world_gameobject.sql2
-rw-r--r--sql/updates/world/2014_05_12_00_world_misc.sql77
-rw-r--r--sql/updates/world/2014_05_12_01_world_creature_template.sql2
-rw-r--r--sql/updates/world/2014_05_13_00_world_conditions.sql2
-rw-r--r--sql/updates/world/2014_05_18_00_world_misc.sql17
-rw-r--r--sql/updates/world/2014_05_18_01_world_misc.sql37
-rw-r--r--sql/updates/world/2014_05_18_02_world_gameobject.sql4
-rw-r--r--sql/updates/world/2014_05_18_03_world_misc.sql48
-rw-r--r--sql/updates/world/2014_05_18_04_world_misc.sql28
-rw-r--r--sql/updates/world/2014_05_19_00_world_misc.sql10
-rw-r--r--sql/updates/world/2014_05_19_01_world_misc.sql8
-rw-r--r--sql/updates/world/2014_05_23_00_world_spell_script_names.sql3
-rw-r--r--sql/updates/world/2014_05_23_01_world_trinity_string.sql3
-rw-r--r--sql/updates/world/2014_05_30_00_world_quest_update.sql1
-rw-r--r--src/server/authserver/Authentication/AuthCodes.cpp2
-rw-r--r--src/server/authserver/Authentication/AuthCodes.h2
-rw-r--r--src/server/collision/Maps/MapTree.cpp3
-rw-r--r--src/server/collision/Models/GameObjectModel.cpp3
-rw-r--r--src/server/collision/Models/GameObjectModel.h3
-rw-r--r--src/server/game/AI/CoreAI/PetAI.cpp6
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.cpp5
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.cpp15
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.h2
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp10
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp12
-rw-r--r--src/server/game/Battlefield/Battlefield.cpp12
-rw-r--r--src/server/game/Battlefield/Battlefield.h4
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp6
-rw-r--r--src/server/game/Battlegrounds/Battleground.h2
-rw-r--r--src/server/game/Calendar/CalendarMgr.cpp23
-rw-r--r--src/server/game/Calendar/CalendarMgr.h3
-rw-r--r--src/server/game/Chat/Channels/Channel.h2
-rw-r--r--src/server/game/DataStores/DBCStores.cpp2
-rw-r--r--src/server/game/DataStores/DBCStores.h1
-rw-r--r--src/server/game/DataStores/DBCStructure.h12
-rw-r--r--src/server/game/DataStores/DBCfmt.h1
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp6
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp14
-rw-r--r--src/server/game/Entities/Item/Item.cpp2
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.cpp46
-rw-r--r--src/server/game/Entities/Player/Player.h22
-rw-r--r--src/server/game/Entities/Player/SocialMgr.cpp2
-rw-r--r--src/server/game/Entities/Transport/Transport.cpp15
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp33
-rw-r--r--src/server/game/Entities/Unit/Unit.h3
-rwxr-xr-xsrc/server/game/Entities/Vehicle/Vehicle.cpp39
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp4
-rw-r--r--src/server/game/Globals/ObjectMgr.h2
-rw-r--r--src/server/game/Grids/GridStates.cpp12
-rw-r--r--src/server/game/Grids/GridStates.h7
-rw-r--r--src/server/game/Guilds/Guild.cpp8
-rw-r--r--src/server/game/Handlers/ArenaTeamHandler.cpp6
-rw-r--r--src/server/game/Handlers/CalendarHandler.cpp21
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp12
-rw-r--r--src/server/game/Handlers/ChatHandler.cpp2
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp13
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp16
-rw-r--r--src/server/game/Handlers/QueryHandler.cpp16
-rw-r--r--src/server/game/Handlers/TradeHandler.cpp5
-rw-r--r--src/server/game/Handlers/VehicleHandler.cpp4
-rw-r--r--src/server/game/Instances/InstanceScript.h4
-rw-r--r--src/server/game/Maps/Map.cpp44
-rw-r--r--src/server/game/Maps/MapUpdater.cpp30
-rw-r--r--src/server/game/Miscellaneous/Language.h2
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h4
-rw-r--r--src/server/game/Quests/QuestDef.cpp2
-rw-r--r--src/server/game/Reputation/ReputationMgr.cpp2
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h19
-rw-r--r--src/server/game/Server/WorldSession.cpp264
-rw-r--r--src/server/game/Server/WorldSession.h17
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.cpp12
-rw-r--r--src/server/game/Spells/Spell.cpp19
-rw-r--r--src/server/game/Spells/SpellEffects.cpp4
-rw-r--r--src/server/game/Spells/SpellInfo.cpp13
-rw-r--r--src/server/game/Spells/SpellMgr.cpp12
-rw-r--r--src/server/game/Spells/SpellScript.h4
-rw-r--r--src/server/game/Tickets/TicketMgr.cpp2
-rw-r--r--src/server/game/Warden/Warden.cpp2
-rw-r--r--src/server/game/Weather/Weather.cpp2
-rw-r--r--src/server/game/Weather/WeatherMgr.cpp2
-rw-r--r--src/server/scripts/Commands/cs_modify.cpp7
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp1
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp30
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp26
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp32
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp18
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp246
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp18
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp18
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp15
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/zone_duskwood.cpp56
-rw-r--r--src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/zone_undercity.cpp2
-rw-r--r--src/server/scripts/Events/childrens_week.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp12
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp8
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp32
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp72
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp4
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp22
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp2
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp10
-rw-r--r--src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_durotar.cpp6
-rw-r--r--src/server/scripts/Kalimdor/zone_silithus.cpp6
-rw-r--r--src/server/scripts/Kalimdor/zone_tanaris.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_the_barrens.cpp6
-rw-r--r--src/server/scripts/Kalimdor/zone_ungoro_crater.cpp2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp4
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp20
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp4
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp2
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp8
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp10
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp4
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp18
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp2
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp2
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp5
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp2
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp28
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp162
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp164
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp3333
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h275
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp1168
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp4
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp52
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp8
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp6
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp16
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp10
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp22
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp4
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp18
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp6
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp212
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp44
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp8
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp10
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp6
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp2
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp4
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp6
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp2
-rw-r--r--src/server/scripts/Northrend/VioletHold/violet_hold.cpp2
-rw-r--r--src/server/scripts/Northrend/zone_borean_tundra.cpp20
-rw-r--r--src/server/scripts/Northrend/zone_crystalsong_forest.cpp2
-rw-r--r--src/server/scripts/Northrend/zone_grizzly_hills.cpp26
-rw-r--r--src/server/scripts/Northrend/zone_icecrown.cpp42
-rw-r--r--src/server/scripts/Northrend/zone_zuldrak.cpp2
-rw-r--r--src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp2
-rw-r--r--src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp2
-rw-r--r--src/server/scripts/Outland/BlackTemple/black_temple.cpp4
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp4
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_illidan.cpp20
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp2
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp8
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp10
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_supremus.cpp2
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp12
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp2
-rw-r--r--src/server/scripts/Outland/BlackTemple/illidari_council.cpp18
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp16
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp16
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp24
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp4
-rw-r--r--src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp10
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp10
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp6
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp4
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp22
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp4
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp36
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp2
-rw-r--r--src/server/scripts/Outland/zone_hellfire_peninsula.cpp2
-rw-r--r--src/server/scripts/Outland/zone_netherstorm.cpp4
-rw-r--r--src/server/scripts/Outland/zone_shadowmoon_valley.cpp49
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp55
-rw-r--r--src/server/scripts/Spells/spell_holiday.cpp2
-rw-r--r--src/server/scripts/Spells/spell_hunter.cpp9
-rw-r--r--src/server/scripts/Spells/spell_item.cpp3
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp4
-rw-r--r--src/server/scripts/Spells/spell_shaman.cpp2
-rw-r--r--src/server/scripts/World/areatrigger_scripts.cpp4
-rw-r--r--src/server/scripts/World/boss_emerald_dragons.cpp2
-rw-r--r--src/server/scripts/World/guards.cpp4
-rw-r--r--src/server/scripts/World/npcs_special.cpp12
-rw-r--r--src/server/shared/Containers.h28
-rw-r--r--src/server/shared/Database/DatabaseWorkerPool.h6
-rw-r--r--src/server/shared/Logging/Log.cpp15
-rw-r--r--src/server/shared/Logging/Log.h54
-rw-r--r--src/server/shared/Packets/ByteBuffer.cpp7
-rw-r--r--src/server/shared/Packets/ByteBuffer.h19
-rw-r--r--src/tools/mmaps_generator/TerrainBuilder.cpp2
260 files changed, 5474 insertions, 3579 deletions
diff --git a/contrib/conf_merge/confdiffmerge.php b/contrib/conf_merge/confdiffmerge.php
new file mode 100644
index 00000000000..7bcaef5042e
--- /dev/null
+++ b/contrib/conf_merge/confdiffmerge.php
@@ -0,0 +1,169 @@
+<!--
+ @title Configuration file merger/differ.
+ @about This script allows you to diff two config files and select which value to pick between the two.
+ It will then give you an updated configuration file with the settings you chose.
+ How-to: a) Paste both versions of your config file, submit the form.
+ b) Select values you want to keep in the next form, then submit said form.
+ c) Copy the output'd config file and profit!
+ Note: if either one of your config file has custom values, make sure that it is set to be the NEW
+ config file on the first step (right hand textarea). This will be adressed at a later date.
+ @author Warpten
+ @date 05/17/2014
+ @license GNU GPL v2(GPL)
+ @version 0.0.1
+-->
+<!DOCTYPE html>
+<html>
+<head>
+ <title>&lt;world/auth&gt;server.conf diff</title>
+ <style type="text/css">
+ form * { font-family: Verdana; font-size: 11px; }
+ form#step1 { position: relative; width: 800px; }
+ form#step2 { width: 500px; }
+ form > div { position: absolute; width: 50%; height: 500px; }
+ form > div:nth-child(1) { right: 0px; }
+ textarea { width: 90%; height: 500px; }
+ h3 { display: block; margin: 3px; padding: auto; text-align: center; }
+ input.valueName { border: 0px; background-color: white; }
+ form > p { margin: 0; padding: 3px; border-bottom: 1px solid black; }
+ textarea#result { width: 1000px; }
+ </style>
+</head>
+
+<body>
+<?php
+
+function printIndent($string, $indent = 1)
+{
+ echo str_pad("\r\n" . $string, $indent, " ");
+}
+
+if (!isset($_POST['step']))
+{
+?>
+ <form action="" method="POST" id="step1">
+ <div>
+ <h3>Paste the new configuration file</h3>
+ <textarea name="leftFile"></textarea>
+ </div><div>
+ <h3>Paste the old configuration file</h3>
+ <textarea name="rightFile"></textarea>
+ <input type="submit" value="Compare files" />
+ </div>
+ <input type="hidden" name="step" value="0" />
+ </form>
+<?php
+}
+else if ($_POST['step'] == 0)
+{
+ if (@empty($_POST['leftFile']) || @empty($_POST['rightFile']))
+ printf("You did not provide either the old or the new configuration file.<br />");
+
+ define('EOL', "\n\n");
+ $settingsData = array();
+
+ // Process them
+ $newFile = explode(EOL, $_POST['leftFile']);
+ $oldFile = explode(EOL, $_POST['rightFile']);
+
+ for ($i = 0, $o = count($oldFile); $i < $o; ++$i)
+ {
+ $oldFile[$i] = explode(PHP_EOL, $oldFile[$i]);
+ for ($j = 0, $p = count($oldFile[$i]); $j < $p; ++$j)
+ {
+ $currentLine = $oldFile[$i][$j];
+ if (preg_match("#^([A-Z.]+) = (?:\"?)(.*)(?:\"?)$#iU", $currentLine, $data) !== false)
+ if (strlen($data[1]) != 0)
+ $settingsData[$data[1]]["oldValue"] = str_replace('"', '', trim($data[2]));
+ }
+ }
+
+ for ($i = 0, $o = count($newFile); $i < $o; ++$i)
+ {
+ $newFile[$i] = explode(PHP_EOL, $newFile[$i]);
+ for ($j = 0, $p = count($newFile[$i]); $j < $p; ++$j)
+ {
+ $currentLine = $newFile[$i][$j];
+ if (preg_match("#^([A-Z.]+) = (?:\"?)(.*)(?:\"?)$#iU", $currentLine, $data) !== false)
+ if (strlen($data[1]) != 0)
+ $settingsData[$data[1]]["newValue"] = str_replace('"', '', trim($data[2]));
+ }
+ }
+
+ printIndent("<p>Please select values you want to keep. Note the script will default to new values, unless said <i>new</i> value does not exist.<br />You also can take advantage of this form and edit fields.</p>", 1);
+ printIndent('<form action="" method="POST" id="step2">', 1);
+
+ foreach ($settingsData as $itemName => &$values)
+ {
+ $displayOld = isset($values['oldValue']) ? $values['oldValue'] : "Value missing";
+ $displayNew = isset($values['newValue']) ? $values['newValue'] : "Value missing";
+
+ if ($displayOld == $displayNew)
+ continue;
+
+ $line = '<p><input type="text" class="valueName" name="nameCross[]" value="' . $itemName . '" />';
+ $line .= '<input type="radio" name="optionSelector[' . $itemName . ']" value="oldValue" ' . ($displayOld != "Value missing" ? "checked" : "") . '/>';
+ $line .= '<input type="text" name="oldValue[]" value="' . $displayOld . '" /> ';
+ $line .= '<input type="radio" name="optionSelector[' . $itemName . ']" value="newValue" ' . ($displayNew != "Value missing" ? "checked" : "") . '/>';
+ $line .= '<input type="text" name="newValue[]" value="' . $displayNew . '" /></p>';
+ printIndent($line, 2);
+ }
+ printIndent('<input type="hidden" name="step" value="1" />', 2);
+ printIndent('<input type="submit" value="Gief resulting configuration file" />', 2);
+ printIndent('<input type="hidden" name="file" value="' . htmlspecialchars($_POST['rightFile']) . '" />', 2);
+ printIndent('</form>', 1);
+}
+else if ($_POST['step'] == 1)
+{
+ $errors = array();
+
+ $confFile = $_POST['file'];
+
+ foreach ($_POST['optionSelector'] as $valueName => &$keyName)
+ {
+ $definiteValueIndex = -1;
+ foreach ($_POST['nameCross'] as $index => &$key)
+ {
+ if ($key == $valueName)
+ {
+ $definiteValueIndex = $index;
+ break;
+ }
+ }
+
+ if ($definiteValueIndex == -1)
+ {
+ // TODO: Handle custom values that get lost
+ continue;
+ }
+
+ $newStr = $_POST[$keyName][$definiteValueIndex];
+ $oldStr = $_POST[$keyName == "oldValue" ? "newValue" : "oldValue"][$definiteValueIndex];
+ if (!ctype_digit($newStr))
+ $newStr = '"' . $newStr . '"';
+ if (!ctype_digit($oldStr))
+ $oldStr = '"' . $oldStr . '"';
+
+ $newValueString = $valueName . " = " . $newStr;
+ $oldValueString = $valueName . " = " . $oldStr;
+ $confFile = str_replace($oldValueString, $newValueString, $confFile);
+ }
+ echo "<p>Here is your new configuration file:</p>";
+ echo '<form><textarea id="result">';
+ printf('%s', $confFile);
+ echo '</textarea></form>';
+
+ if (!empty($errors))
+ {
+ echo "<p>The following errors happened during processing:</p><ul><li>";
+ echo implode("</li><li>", $errors);
+ echo "</li>";
+ }
+}
+?>
+
+<script type="text/javascript">
+
+</script>
+</body>
+</html>
diff --git a/sql/updates/world/2014_05_07_00_world_gossip_menu_option.sql b/sql/updates/world/2014_05_07_00_world_gossip_menu_option.sql
new file mode 100644
index 00000000000..2939237dc7d
--- /dev/null
+++ b/sql/updates/world/2014_05_07_00_world_gossip_menu_option.sql
@@ -0,0 +1 @@
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=8903 AND `id`=1;
diff --git a/sql/updates/world/2014_05_08_00_world_smart_scripts.sql b/sql/updates/world/2014_05_08_00_world_smart_scripts.sql
new file mode 100644
index 00000000000..ebf971d512d
--- /dev/null
+++ b/sql/updates/world/2014_05_08_00_world_smart_scripts.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `smart_scripts` SET `target_type`=1 WHERE `entryorguid`=28256 AND `source_type`=0;
diff --git a/sql/updates/world/2014_05_09_00_world_misc.sql b/sql/updates/world/2014_05_09_00_world_misc.sql
new file mode 100644
index 00000000000..8f4971f771f
--- /dev/null
+++ b/sql/updates/world/2014_05_09_00_world_misc.sql
@@ -0,0 +1,11 @@
+SET @OGUID := 6100;
+
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+1;
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@OGUID+0, 191849, 619, 3, 1, 523.5123, -301.1218, 68.84955, -1.570796, -0.004628658, 0.003181458, -0.7086, 0.705588, 7200, 255, 1), -- 191849 (Area: 4627)
+(@OGUID+1, 191848, 619, 3, 1, 523.4318, -300.7111, 68.82808, -1.575045, 0, 0, -0.7071066, 0.7071069, 7200, 255, 1); -- 191848 (Area: 4627)
+
+
+DELETE FROM `areatrigger_teleport` WHERE `id`=5235;
+INSERT INTO `areatrigger_teleport` (`id`, `name`, `target_map`, `target_position_x`, `target_position_y`, `target_position_z`, `target_orientation`) VALUES
+(5235, 'Ahn''Kahet (exit)', 571, 3817.4,2032.82, 11.0133, 3.612832);
diff --git a/sql/updates/world/2014_05_09_01_world_gossip.sql b/sql/updates/world/2014_05_09_01_world_gossip.sql
new file mode 100644
index 00000000000..7e2a1b040fc
--- /dev/null
+++ b/sql/updates/world/2014_05_09_01_world_gossip.sql
@@ -0,0 +1,15 @@
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup` IN (10026,10025,10024);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15, 10026, 0, 0, 0, 8, 0, 13419, 0, 0, 0, 0, 0, '', 'Sky-Reaver Klum - Show Gossip if player Has rewarded Quest Preparations for War'),
+(15, 10026, 1, 0, 0, 28, 0, 13419, 0, 0, 0, 0, 0, '', 'Sky-Reaver Klum - Show Gossip if player Has completed Quest Preparations for War'),
+(15, 10025, 0, 0, 0, 8, 0, 13418, 0, 0, 0, 0, 0, '', 'Officer Van Rossem - Show Gossip if player Has rewarded Quest Preparations for War'),
+(15, 10025, 1, 0, 0, 28, 0, 13418, 0, 0, 0, 0, 0, '', 'Officer Van Rossem - Show Gossip if player Has completed Quest Preparations for War'),
+(15, 10024, 0, 0, 0, 8, 0, 12521, 0, 0, 0, 0, 0, '', 'Archmage Pentarus - Show Gossip if player Has rewarded Quest Where in the World is Hemet Nesingwary?'),
+(15, 10024, 1, 0, 0, 28, 0, 12521, 0, 0, 0, 0, 0, '', 'Archmage Pentarus - Show Gossip if player Has completed Quest Where in the World is Hemet Nesingwary?');
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (10025,10024) AND `id` IN (0,1);
+INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextID`) VALUES
+(10025, 0, 0, 'Take me to the ship.', 31625, 1, 1, 0, 0, 0, 0, '', 0),
+(10025, 1, 0, 'Take me to the ship.', 31625, 1, 1, 0, 0, 0, 0, '', 0),
+(10024, 0, 0, 'I''m ready to fly to Sholazar Basin.', 31594, 1, 1, 0, 0, 0, 0, '', 0),
+(10024, 1, 0, 'I''m ready to fly to Sholazar Basin.', 31594, 1, 1, 0, 0, 0, 0, '', 0);
diff --git a/sql/updates/world/2014_05_09_02_world_creature_template.sql b/sql/updates/world/2014_05_09_02_world_creature_template.sql
new file mode 100644
index 00000000000..5520ca5d6f8
--- /dev/null
+++ b/sql/updates/world/2014_05_09_02_world_creature_template.sql
@@ -0,0 +1 @@
+UPDATE `creature_template` SET `faction`=14 WHERE `entry`=15625;
diff --git a/sql/updates/world/2014_05_10_00_world_player_factionchange_items.sql b/sql/updates/world/2014_05_10_00_world_player_factionchange_items.sql
new file mode 100644
index 00000000000..febb1032de3
--- /dev/null
+++ b/sql/updates/world/2014_05_10_00_world_player_factionchange_items.sql
@@ -0,0 +1,2 @@
+--
+DELETE FROM `player_factionchange_items` WHERE `alliance_id` BETWEEN 48357 AND 48370;
diff --git a/sql/updates/world/2014_05_10_01_world_halls_of_reflection.sql b/sql/updates/world/2014_05_10_01_world_halls_of_reflection.sql
new file mode 100644
index 00000000000..6d6c8feb956
--- /dev/null
+++ b/sql/updates/world/2014_05_10_01_world_halls_of_reflection.sql
@@ -0,0 +1,218 @@
+SET @CGUID := 142975; -- need 93
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+92;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+-- The Skybreaker
+(@CGUID+0, 30351, 712, 3, 1, 40.85356, 44.65979, 25.11708, 2.617994, 7200, 0, 0),
+(@CGUID+1, 30867, 712, 3, 1, -32.58828, 22.11204, 21.78542, 1.762783, 7200, 0, 0),
+(@CGUID+2, 30867, 712, 3, 1, -11.11922, 23.02313, 21.71026, 1.727876, 7200, 0, 0),
+(@CGUID+3, 30867, 712, 3, 1, 36.80393, 45.60984, 25.11626, 1.43117, 7200, 0, 0),
+(@CGUID+4, 30351, 712, 3, 1, 1.432831, 22.45517, 21.75367, 3.193953, 7200, 0, 0),
+(@CGUID+5, 30394, 712, 3, 1, -57.66117, -6.004808, 23.56313, 4.956735, 7200, 0, 0),
+(@CGUID+6, 30351, 712, 3, 1, 1.032896, 9.635975, 20.53982, 3.211406, 7200, 0, 0),
+(@CGUID+7, 30351, 712, 3, 1, -36.27486, -6.711545, 20.53283, 1.53589, 7200, 0, 0),
+(@CGUID+8, 30351, 712, 3, 1, -36.26366, 6.612509, 20.5329, 4.642576, 7200, 0, 0),
+(@CGUID+9, 30352, 712, 3, 1, -16.93313, 2.497342, 20.87589, 3.106686, 7200, 0, 0),
+(@CGUID+10, 30352, 712, 3, 1, -49.00542, 0.003014, 20.75066, 0.01745329, 7200, 0, 0),
+(@CGUID+11, 30352, 712, 3, 1, 16.73826, 2.378118, 20.50117, 3.159046, 7200, 0, 0),
+(@CGUID+12, 30352, 712, 3, 1, 48.81408, 8.76864, 40.16452, 1.675516, 7200, 0, 0),
+(@CGUID+13, 30352, 712, 3, 1, -16.85414, -2.518523, 20.87587, 3.263766, 7200, 0, 0),
+(@CGUID+14, 30351, 712, 3, 1, 4.010166, -22.42914, 21.77942, 0.2617994, 7200, 0, 0),
+(@CGUID+15, 30351, 712, 3, 1, 0.778628, -9.484917, 20.5411, 3.036873, 7200, 0, 0),
+(@CGUID+16, 30867, 712, 3, 1, -9.599308, -23.15501, 21.71576, 4.782202, 7200, 0, 0),
+(@CGUID+17, 30352, 712, 3, 1, 48.82674, -8.803922, 40.16443, 4.712389, 7200, 0, 0),
+(@CGUID+18, 30867, 712, 3, 1, -32.99351, -22.17393, 21.7879, 4.502949, 7200, 0, 0),
+(@CGUID+19, 30867, 712, 3, 1, 37.14339, -45.94594, 25.11639, 4.014257, 7200, 0, 0),
+(@CGUID+20, 30344, 712, 3, 1, -2.700737, 12.2316, 20.52945, 1.727876, 7200, 0, 0),
+(@CGUID+21, 22515, 712, 3, 1, -27.09398, 38.85326, 1.366914, 1.256637, 7200, 0, 0),
+(@CGUID+22, 22515, 712, 3, 1, -6.396934, 39.80114, 1.470398, 1.256637, 7200, 0, 0),
+(@CGUID+23, 22515, 712, 3, 1, 4.017809, 38.32001, 1.533938, 1.256637, 7200, 0, 0),
+(@CGUID+24, 30392, 712, 3, 1, 28.1948, 7.542603, 23.37183, 5.8294, 7200, 0, 0),
+(@CGUID+25, 30833, 712, 3, 1, 6.518055, 0.003965, 20.66434, 0, 7200, 0, 0),
+(@CGUID+26, 30350, 712, 3, 1, 16.36582, -2.323581, 20.49201, 3.141593, 7200, 0, 0),
+(@CGUID+27, 30347, 712, 3, 1, 28.24817, -7.667989, 23.37183, 0.4363323, 7200, 0, 0),
+-- Orgrim Hammer
+(@CGUID+28, 30755, 713, 3, 1, -18.96152, 27.52218, 90.04992, 6.213372, 7200, 0, 0),
+(@CGUID+29, 30754, 713, 3, 1, -54.68485, 15.01545, 34.49284, 2.338741, 7200, 0, 0),
+(@CGUID+30, 30752, 713, 3, 1, -10.94232, 32.12282, 10.65215, 1.518436, 7200, 0, 0),
+(@CGUID+31, 30754, 713, 3, 1, -8.504885, -0.019059, 86.17371, 3.159046, 7200, 0, 0),
+(@CGUID+32, 30866, 713, 3, 1, -36.03656, 23.91632, 34.00398, 1.937315, 7200, 0, 0),
+(@CGUID+33, 30754, 713, 3, 1, 29.97084, 29.32993, 89.84912, 0.122173, 7200, 0, 0),
+(@CGUID+34, 30753, 713, 3, 1, 15.19238, -0.108369, 86.17371, 3.071779, 7200, 0, 0),
+(@CGUID+35, 30752, 713, 3, 1, 7.702429, 25.23042, 35.08076, 4.764749, 7200, 0, 0),
+(@CGUID+36, 30755, 713, 3, 1, 8.555423, 5.155768, 84.79706, 3.560472, 7200, 0, 0),
+(@CGUID+37, 30755, 713, 3, 1, -4.588624, 27.91955, 34.27925, 4.729842, 7200, 0, 0),
+(@CGUID+38, 30754, 713, 3, 1, -19.19535, -27.024, 90.05069, 3.124139, 7200, 0, 0),
+(@CGUID+39, 30754, 713, 3, 1, -54.63672, -15.29832, 34.48149, 3.717551, 7200, 0, 0),
+(@CGUID+40, 30753, 713, 3, 1, -26.19901, -10.37834, 35.63048, 1.64061, 7200, 0, 0),
+(@CGUID+41, 30755, 713, 3, 1, -56.79522, -3.870484, 13.31639, 0.1047198, 7200, 0, 0),
+(@CGUID+42, 30755, 713, 3, 1, -56.8364, 3.557915, 13.3138, 6.178465, 7200, 0, 0),
+(@CGUID+43, 30753, 713, 3, 1, -34.95441, 11.84717, 11.5961, 1.082104, 7200, 0, 0),
+(@CGUID+44, 30752, 713, 3, 1, 1.994709, 31.96335, 10.09305, 1.448623, 7200, 0, 0),
+(@CGUID+45, 30753, 713, 3, 1, -26.06219, 10.57757, 35.58858, 4.712389, 7200, 0, 0),
+(@CGUID+46, 30752, 713, 3, 1, 15.2307, 31.76827, 10.66515, 1.466077, 7200, 0, 0),
+(@CGUID+47, 30753, 713, 3, 1, 1.994774, 17.06817, 9.246212, 1.500983, 7200, 0, 0),
+(@CGUID+48, 30755, 713, 3, 1, -4.484874, 18.00111, 8.70937, 4.729842, 7200, 0, 0),
+(@CGUID+49, 30755, 713, 3, 1, 8.521951, 17.92888, 8.777781, 4.625123, 7200, 0, 0),
+(@CGUID+50, 30755, 713, 3, 1, -26.0374, 6.533113, 9.42994, 3.124139, 7200, 0, 0),
+(@CGUID+51, 30755, 713, 3, 1, -19.30323, 6.17474, 6.879124, 0, 7200, 0, 0),
+(@CGUID+52, 30755, 713, 3, 1, 8.786416, -5.037911, 84.79706, 2.740167, 7200, 0, 0),
+(@CGUID+53, 30755, 713, 3, 1, 8.557505, 5.72448, 34.52152, 3.106686, 7200, 0, 0),
+(@CGUID+54, 30755, 713, 3, 1, 8.450569, -5.609207, 34.52058, 2.792527, 7200, 0, 0),
+(@CGUID+55, 30866, 713, 3, 1, -36.32559, -23.21568, 34.04234, 4.39823, 7200, 0, 0),
+(@CGUID+56, 30753, 713, 3, 1, -35.48437, -11.9256, 11.71411, 5.986479, 7200, 0, 0),
+(@CGUID+57, 30752, 713, 3, 1, 8.472344, -22.36673, 34.99833, 1.780236, 7200, 0, 0),
+(@CGUID+58, 30755, 713, 3, 1, -4.738312, -28.17381, 34.26831, 1.466077, 7200, 0, 0),
+(@CGUID+59, 30755, 713, 3, 1, 31.3718, -29.84369, 89.84172, 2.96706, 7200, 0, 0),
+(@CGUID+60, 30755, 713, 3, 1, 37.59615, -9.010085, 30.1788, 0.05235988, 7200, 0, 0),
+(@CGUID+61, 30755, 713, 3, 1, 37.52684, 8.718971, 30.17881, 5.969026, 7200, 0, 0),
+(@CGUID+62, 30755, 713, 3, 1, -25.42656, -6.577197, 9.33257, 2.932153, 7200, 0, 0),
+(@CGUID+63, 30755, 713, 3, 1, 23.24178, 6.302864, 7.032903, 3.176499, 7200, 0, 0),
+(@CGUID+64, 30755, 713, 3, 1, -19.45751, -6.235432, 6.89157, 6.265732, 7200, 0, 0),
+(@CGUID+65, 30752, 713, 3, 1, -11.36508, -29.14235, 10.01249, 4.642576, 7200, 0, 0),
+(@CGUID+66, 30753, 713, 3, 1, 46.41658, 7.696208, 10.48851, 4.101524, 7200, 0, 0),
+(@CGUID+67, 30752, 713, 3, 1, 15.44485, -29.7788, 9.977043, 4.694936, 7200, 0, 0),
+(@CGUID+68, 30754, 713, 3, 1, 38.01897, -12.83605, 30.17452, 0.6108652, 7200, 0, 0),
+(@CGUID+69, 30866, 713, 3, 1, 17.22244, -26.63993, 35.64188, 4.817109, 7200, 0, 0),
+(@CGUID+70, 30752, 713, 3, 1, 2.069969, -29.66959, 9.395721, 4.677482, 7200, 0, 0),
+(@CGUID+71, 30753, 713, 3, 1, 2.036507, -17.18819, 9.245911, 4.764749, 7200, 0, 0),
+(@CGUID+72, 30753, 713, 3, 1, 46.33955, -7.35728, 10.47599, 2.391101, 7200, 0, 0),
+(@CGUID+73, 30755, 713, 3, 1, 8.592517, -17.94128, 8.77952, 1.553343, 7200, 0, 0),
+(@CGUID+74, 30755, 713, 3, 1, -4.406364, -17.97099, 8.709299, 1.48353, 7200, 0, 0),
+(@CGUID+75, 30755, 713, 3, 1, 22.90693, -6.745431, 7.115322, 3.124139, 7200, 0, 0),
+(@CGUID+76, 30824, 713, 3, 1, 17.28272, 21.73325, 35.37741, 1.623156, 7200, 0, 0),
+(@CGUID+77, 30827, 713, 3, 1, 45.76886, -8.964413, 30.17881, 1.396263, 7200, 0, 0),
+(@CGUID+78, 30825, 713, 3, 1, 38.55754, -0.025193, 10.27214, 3.106686, 7200, 0, 0),
+(@CGUID+79, 30826, 713, 3, 1, 55.08521, -3.344726, 30.1788, 2.687807, 7200, 0, 0),
+(@CGUID+80, 37593, 713, 3, 1, 2.015905, 34.44526, 10.09305, 1.64061, 7200, 0, 0),
+(@CGUID+81, 37593, 713, 3, 1, 14.85607, 33.80163, 9.849781, 1.64061, 7200, 0, 0),
+(@CGUID+82, 37593, 713, 3, 1, -10.84229, 34.34502, 10.6434, 1.64061, 7200, 0, 0),
+-- Others
+(@CGUID+83, 22515, 668, 3, 1, 5274.933, 1693.941, 797.2499, 0, 7200, 0, 0),
+(@CGUID+84, 36736, 668, 3, 1, 5415.332, 2080.358, 720.5068, 1.64061, 7200, 0, 0),
+(@CGUID+85, 36736, 668, 3, 1, 5376.905, 2115.425, 720.3566, 6.126106, 7200, 0, 0),
+(@CGUID+86, 36736, 668, 3, 1, 5445.525, 2099.37, 720.3999, 2.600541, 7200, 0, 0),
+(@CGUID+87, 36736, 668, 3, 1, 5431.74, 2087.503, 720.3914, 2.076942, 7200, 0, 0),
+(@CGUID+88, 36736, 668, 3, 1, 5395.38, 2146.632, 720.2123, 5.305801, 7200, 0, 0),
+(@CGUID+89, 36736, 668, 3, 1, 5380.971, 2134.462, 720.6889, 5.637414, 7200, 0, 0),
+(@CGUID+90, 36736, 668, 3, 1, 5449.623, 2117.587, 720.4929, 3.176499, 7200, 0, 0),
+(@CGUID+91, 36736, 668, 3, 1, 5412.493, 2150.627, 720.3359, 4.502949, 7200, 0, 0),
+(@CGUID+92, 37071, 668, 3, 1, 5408.362, 2110.33, 726.9917, 3.630285, 7200, 0, 0);
+
+DELETE FROM `creature_template_addon` WHERE `entry`=36736;
+INSERT INTO `creature_template_addon` (`entry`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES
+(36736, 0, 0x0, 0x1, '69174'); -- Invisible Stalker (Icecrown Dungeon Trap) - Reflection Window Beam Visual
+
+DELETE FROM `creature_text` WHERE `entry` IN (30344, 30824, 36954);
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES
+-- High Captain Justin Bartlett
+(30344, 0, 0, 'FIRE! FIRE!', 14, 0, 100, 0, 0, 16721, 'High Captain Justin Bartlett - Fire', 36993),
+(30344, 1, 0, 'Quickly, climb aboard! We mustn''t tarry here! There''s no telling when this whole mountainside will collapse.', 14, 0, 100, 0, 0, 16722, 'High Captain Justin Bartlett - Final', 37213),
+-- Sky-Reaver Korm Blackscar
+(30824, 0, 0, 'FIRE! FIRE!', 14, 0, 100, 0, 0, 16732, 'Sky-Reaver Korm Blackscar - Fire', 38681),
+(30824, 1, 0, 'Get on board, now! This whole mountainside could collapse at any moment.', 14, 0, 100, 0, 0, 16733, 'Sky-Reaver Korm Blackscar - Final', 37212),
+-- Lich King
+(36954, 0, 0, 'Your allies have arrived, Jaina, just as you promised. You will all become powerful agents of the Scourge..', 14, 0, 100, 0, 0, 17212, 'Lich King SAY_LICH_KING_AGGRO_A', 37172),
+(36954, 1, 0, 'I will not make the same mistake again, Sylvanas. This time there will be no escape. You will all serve me in death!', 14, 0, 100, 0, 0, 17213, 'Lich King SAY_LICH_KING_AGGRO_H', 37173),
+(36954, 2, 0, 'There is no escape!', 14, 0, 100, 0, 0, 17217, 'Lich King SAY_LICH_KING_WALL_01', 37177),
+(36954, 3, 0, 'Succumb to the chill of the grave.', 14, 0, 100, 0, 0, 17218, 'Lich King SAY_LICH_KING_WALL_02', 37175),
+(36954, 4, 0, 'Another dead end.', 14, 0, 100, 0, 0, 17219, 'Lich King SAY_LICH_KING_WALL_03', 37176),
+(36954, 5, 0, 'How long can you fight it?', 14, 0, 100, 0, 0, 17220, 'Lich King SAY_LICH_KING_WALL_04', 38668),
+(36954, 6, 0, 'Arise minions. Do not let them pass.', 14, 0, 100, 0, 0, 17216, 'Lich King SAY_LICH_KING_GHOUL', 38669),
+(36954, 7, 0, 'Minions, sieze them. Bring their corpses back to me.', 14, 0, 100, 0, 0, 17222, 'Lich King SAY_LICH_KING_ABON', 38670),
+(36954, 8, 0, 'Death''s cold embrace awaits.', 14, 0, 100, 0, 0, 17221, 'Lich King SAY_LICH_KING_WINTER', 37174),
+(36954, 9, 0, 'Nowhere to run! You''re mine now...', 14, 0, 100, 0, 0, 17223, 'Lich King SAY_LICH_KING_END_DUN', 36994);
+
+DELETE FROM `areatrigger_scripts` WHERE `entry` IN (5605,5740);
+INSERT INTO `areatrigger_scripts` (`entry`,`scriptname`) VALUES
+(5605, 'at_hor_shadow_throne'),
+(5740, 'at_hor_impenetrable_door');
+
+DELETE FROM `areatrigger_teleport` WHERE `id`=5740;
+INSERT INTO `areatrigger_teleport` (`id`, `name`, `target_map`, `target_position_x`, `target_position_y`, `target_position_z`, `target_orientation`) VALUES
+(5740, 'Halls of Reflection (The Impenetrable Door)', 668, 5354.01, 2053.53, 707.695, 0.7853982);
+
+DELETE FROM `lfg_entrances` WHERE `dungeonId` IN(255,256);
+INSERT INTO `lfg_entrances` (`dungeonId`, `name`, `position_x`, `position_y`, `position_z`, `orientation`) VALUES
+(255, 'Halls of Reflection (Normal)', 5239.01, 1932.64, 707.695, 0.800565),
+(256, 'Halls of Reflection (Heroic)', 5239.01, 1932.64, 707.695, 0.800565);
+
+-- Lady Jaina Proudmoore
+UPDATE `creature_template` SET `ScriptName`='npc_jaina_or_sylvanas_intro_hor' WHERE `entry`=37221;
+-- Lady Sylvanas Windrunner
+UPDATE `creature_template` SET `ScriptName`='npc_jaina_or_sylvanas_intro_hor' WHERE `entry`=37223;
+-- Frostsworn General
+UPDATE `creature_template` SET `ScriptName`='npc_frostsworn_general' WHERE `entry`=36723;
+-- The Lich King
+UPDATE `creature_template` SET `ScriptName`='npc_the_lich_king_escape_hor', `mechanic_immune_mask`=617299839 WHERE `entry` = 36954;
+-- Icecrown Dungeon Horde Gunship Cannon
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=37593;
+
+UPDATE `gameobject_template` SET `faction`=2102,`flags`=32 WHERE `entry`=201385;
+UPDATE `gameobject_template` SET `faction`=1375,`flags`=32 WHERE `entry` IN (201596,201709,202211);
+UPDATE `gameobject_template` SET `flags`=40 WHERE `entry` IN (201598,201599);
+UPDATE `gameobject_template` SET `faction`=35,`flags`=16 WHERE `entry` IN (201710,202212,202336,202337);
+
+ -- Lady Jaina Proudmoore
+UPDATE `creature_template` SET `spell1`=0, `gossip_menu_id`=10860 WHERE `entry`=36955;
+ -- Lady Sylvanas Windrunner
+UPDATE `creature_template` SET `gossip_menu_id`=10909 WHERE `entry`=37554;
+
+DELETE FROM `gossip_menu` WHERE `entry`=10931;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
+(10931, 15190); -- 37554 -- outro gossip
+
+UPDATE `gossip_menu_option` SET `option_id`=1, `npc_option_npcflag`=1 WHERE `menu_id`=10860 AND `id`=0;
+
+-- skip intro
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup` IN (11031,10950);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(15,11031,1,0,0,14,0,24500,0,0,1,0,0,'','Show options only if quest 24500 taken/complete/rewarded'),
+(15,10950,1,0,0,14,0,24802,0,0,1,0,0,'','Show options only if quest 24802 taken/complete/rewarded');
+
+DELETE FROM `spell_script_names` WHERE `spell_id` IN (72900,70190,70017,72368,72369);
+INSERT INTO `spell_script_names` (`spell_id` ,`ScriptName`) VALUES
+(72900, 'spell_hor_start_halls_of_reflection_quest_ae'),
+(70190, 'spell_hor_evasion'),
+(70017, 'spell_hor_gunship_cannon_fire'),
+(72368, 'spell_marwyn_shared_suffering'),
+(72369, 'spell_marwyn_shared_suffering');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (69857,70199,70021,70246);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13,1,69857,0,0,31,0,3,36954,0,0,0,0,'','Taunt Arthas targets The Lich King'),
+(13,2,70199,0,0,31,0,3,36954,0,0,0,0,'','Blinding Retreat targets The Lich King'),
+(13,1,70021,0,0,31,0,3,22515,0,0,0,0,'','Gunship Cannon Fire targets World Trigger'),
+(13,1,70021,0,0,1,0,70017,0,0,1,0,0,'','Gunship Cannon Fire target not has aura Gunship Cannon Fire'),
+(13,1,70246,0,0,31,0,3,22515,0,0,0,0,'','Gunship Cannon Fire targets World Trigger'),
+(13,1,70246,0,0,1,0,70017,0,0,1,0,0,'','Gunship Cannon Fire target not has aura Gunship Cannon Fire');
+
+-- Cloak of Darkness proc on dodge
+DELETE FROM `spell_proc_event` WHERE `entry`=70188;
+INSERT INTO `spell_proc_event` (`entry`,`procEx`) VALUES
+(70188,0x10);
+
+SET @OGUID := 21620; -- need 12
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+11;
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@OGUID+0, 201709, 668, 3, 1, 5228.354, 1640.958, 783.7306, 5.585054, 0, 0, 0, 1, -7200, 255, 1),
+(@OGUID+1, 201709, 668, 3, 1, 5215.889, 1626.078, 796.4562, 5.585054, 0, 0, 0, 1, -7200, 255, 1),
+(@OGUID+2, 202211, 668, 3, 1, 5242.835, 1623.45, 784.1498, 5.811947, 0, 0, 0, 1, -7200, 255, 1),
+(@OGUID+3, 202211, 668, 3, 1, 5225.201, 1589.099, 808.5507, 5.811947, 0, 0, 0, 1, -7200, 255, 1),
+(@OGUID+4, 202211, 668, 3, 1, 5233.985, 1606.311, 796.2543, 5.811947, 0, 0, 0, 1, -7200, 255, 1),
+(@OGUID+5, 195682, 712, 3, 1, 4.395291, 13.68329, 20.80389, 4.19445, 0, 0, 0, 1, 7200, 255, 1),
+(@OGUID+6, 201710, 712, 1, 1, -11.7548, 12.02463, 20.40827, 3.217069, 0, 0, 0, 1, 7200, 255, 1),
+(@OGUID+7, 202336, 712, 2, 1, -11.7548, 12.02463, 20.40827, 3.217069, 0, 0, 0, 1, 7200, 255, 1),
+(@OGUID+8, 202212, 713, 1, 1, 12.23327, 22.47315, 35.07432, 1.239183, 0, 0, 0, 1, 7200, 255, 1),
+(@OGUID+9, 202337, 713, 2, 1, 12.23327, 22.47315, 35.07432, 1.239183, 0, 0, 0, 1, 7200, 255, 1),
+(@OGUID+10, 195682, 713, 3, 1, 22.17697, 22.95274, 35.65761, 1.919862, 0, 0, 0, 1, 7200, 255, 1),
+(@OGUID+11, 191640, 713, 3, 1, 42.08455, 14.60723, 10.65548, 4.244588, 0, 0, 0, 1, 7200, 255, 1);
+
+DELETE FROM `spelldifficulty_dbc` WHERE `id` IN(72395,72396,72397);
+INSERT INTO `spelldifficulty_dbc` (`id`,`spellid0`,`spellid1`) VALUES
+(72395,72395,72390), -- Hopelessness
+(72396,72396,72391), -- Hopelessness
+(72397,72397,72393); -- Hopelessness
+
+DELETE FROM `spell_custom_attr` WHERE `entry` = 74117;
+INSERT INTO `spell_custom_attr` (`entry`,`attributes`) VALUES
+(74117, 2);
diff --git a/sql/updates/world/2014_05_11_00_world_gameobject.sql b/sql/updates/world/2014_05_11_00_world_gameobject.sql
new file mode 100644
index 00000000000..a25755671a5
--- /dev/null
+++ b/sql/updates/world/2014_05_11_00_world_gameobject.sql
@@ -0,0 +1,289 @@
+ALTER TABLE `gameobject` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+
+SET @OGUID := 76921;
+
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+282;
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `VerifiedBuild`) VALUES
+(@OGUID+0, 186519, 571, 1, 1, 2017.644, -4887.931, 214.6985, 5.244714, 0, 0, 0, 1, 120, 255, 1, 15595), -- Fort Wildervar
+(@OGUID+1, 186520, 571, 1, 1, 2014.79, -4890.302, 214.6067, 2.434729, 0, 0, 0, 1, 120, 255, 1, 15595), -- Vengeance Landing
+(@OGUID+2, 186526, 571, 1, 1, 2017.778, -4887.679, 211.9238, 5.218536, 0, 0, 0, 1, 120, 255, 1, 15595), -- Camp Winterhoof
+(@OGUID+3, 186666, 571, 1, 1, 2978.301, -4561.268, 265.7909, 1.090829, 0, 0, 0, 1, 120, 255, 1, 17658), -- Frozen Waterfall
+(@OGUID+4, 186798, 571, 1, 1, 2597.174, -3735.528, 244.6674, 3.769912, 0, 0, 0, 1, 120, 255, 1, 17658), -- Gjalerbron Cage
+(@OGUID+5, 187106, 571, 1, 1, 1916.92, 5820.15, 8.111198, 2.303831, 0, 0, 0, 1, 120, 255, 1, 15595), -- Brazier
+(@OGUID+6, 187251, 571, 1, 1, 2853.868, 5838.515, 100.9134, 4.699066, 0, 0, 0, 1, 120, 255, 1, 17658), -- Campfire
+(@OGUID+7, 187453, 571, 1, 1, 3489.599, 6303.194, -125.5745, 6.26304, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bubbly Fissure
+(@OGUID+8, 187454, 571, 1, 1, 3830.716, 5984.776, -126.78, 0.7966011, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bubbly Fissure
+(@OGUID+9, 187455, 571, 1, 1, 4007.937, 6009.374, -125.0908, 0.1617281, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bubbly Fissure
+(@OGUID+10, 188265, 571, 1, 1, 3095.937, -2048.806, 89.02545, 0.5235979, 0, 0, 0, 1, 120, 255, 1, 15595), -- Venture Bay
+(@OGUID+11, 188266, 571, 1, 1, 3183.273, -1991.391, 90.70473, 2.024579, 0, 0, 0, 1, 120, 255, 1, 15595), -- Conquest Hold
+(@OGUID+12, 188267, 571, 1, 1, 3183.291, -1991.38, 89.82629, 2.024579, 0, 0, 0, 1, 120, 255, 1, 15595), -- Amberpine Lodge
+(@OGUID+13, 188268, 571, 1, 1, 3185.445, -1990.872, 90.65273, 4.721116, 0, 0, 0, 1, 120, 255, 1, 15595), -- Zul''Drak
+(@OGUID+14, 188269, 571, 1, 1, 3184.378, -1989.682, 90.62007, 6.178466, 0, 0, 0, 1, 120, 255, 1, 15595), -- Dragonblight
+(@OGUID+15, 188270, 571, 1, 1, 3096.181, -2050.726, 89.68048, 2.95833, 0, 0, 0, 1, 120, 255, 1, 15595), -- Amberpine Lodge
+(@OGUID+16, 188271, 571, 1, 1, 3096.269, -2050.634, 88.82845, 2.975771, 0, 0, 0, 1, 120, 255, 1, 15595), -- Conquest Hold
+(@OGUID+17, 188330, 571, 1, 1, 3785.572, -4975.321, 119.4001, 2.74889, 0, 0, 0, 1, 120, 255, 1, 15595), -- Dun Argol
+(@OGUID+18, 188331, 571, 1, 1, 3785.993, -4975.519, 119.3407, 5.916667, 0, 0, 0, 1, 120, 255, 1, 15595), -- Thor Modan
+(@OGUID+19, 188332, 571, 1, 1, 3785.9, -4975.272, 119.3984, 1.160642, 0, 0, 0, 1, 120, 255, 1, 15595), -- Grizzlemaw
+(@OGUID+20, 188336, 571, 1, 1, 4359.022, -4089.576, 188.5192, 4.869471, 0, 0, 0, 1, 120, 255, 1, 15595), -- Dragonblight
+(@OGUID+21, 188387, 571, 1, 1, 4460.03, -1060.602, 169.3596, 4.878196, 0, 0, 0, 1, 120, 255, 1, 15595), -- Grizzly Hills
+(@OGUID+22, 188388, 571, 1, 1, 4459.658, -1058.771, 169.4787, 1.850049, 0, 0, 0, 1, 120, 255, 1, 15595), -- Wyrmrest Temple
+(@OGUID+23, 188389, 571, 1, 1, 4460.785, -1059.484, 169.2406, 0.1483503, 0, 0, 0, 1, 120, 255, 1, 15595), -- Light''s Trust
+(@OGUID+24, 188405, 571, 1, 1, 4458.938, -1059.854, 169.1528, 3.150327, 0, 0, 0, 1, 120, 255, 1, 15595), -- Wintergarde Keep
+(@OGUID+25, 188406, 571, 1, 1, 4460.755, -1059.488, 168.8691, 0.08726409, 0, 0, 0, 1, 120, 255, 1, 15595), -- Zul''Drak
+(@OGUID+26, 188542, 571, 1, 1, 4319.167, 580.9983, -6.637729, 2.853604, 0, 0, 0, 1, 120, 255, 1, 15595), -- Scourge Bonfire
+(@OGUID+27, 188545, 571, 1, 1, 4295.252, 376.5208, -6.531718, 2.897245, 0, 0, 0, 1, 120, 255, 1, 15595), -- Scourge Bonfire
+(@OGUID+28, 188547, 571, 1, 1, 4222.608, 514.5868, 11.47814, 2.495818, 0, 0, 0, 1, 120, 255, 1, 15595), -- Scourge Bonfire
+(@OGUID+29, 188551, 571, 1, 1, 4924.042, 1250.615, 226.7416, 5.646141, 0, 0, 0, 1, 120, 255, 1, 15595), -- Bonfire
+(@OGUID+30, 188565, 571, 1, 1, 4872.197, -1268.828, 168.1219, 4.047813, 0, 0, 0, 1, 120, 255, 1, 15595), --
+(@OGUID+31, 188566, 571, 1, 1, 4869.077, -1266.7, 168.1245, 4.053197, 0, 0, 0, 1, 120, 255, 1, 15595), --
+(@OGUID+32, 188567, 571, 1, 1, 4887.115, -1319.99, 169.8827, 2.763404, 0, 0, 0, 1, 120, 255, 1, 15595), --
+(@OGUID+33, 188568, 571, 1, 1, 4843.478, -1238.389, 168.1355, 3.189116, 0, 0, 0, 1, 120, 255, 1, 15595), --
+(@OGUID+34, 188569, 571, 1, 1, 4843.253, -1234.773, 168.0832, 3.001129, 0, 0, 0, 1, 120, 255, 1, 15595), --
+(@OGUID+35, 188570, 571, 1, 1, 4834.089, -1278.816, 168.0286, 1.95314, 0, 0, 0, 1, 120, 255, 1, 15595), --
+(@OGUID+36, 188571, 571, 1, 1, 4839.024, -1277.866, 168.0992, 1.88234, 0, 0, 0, 1, 120, 255, 1, 15595), --
+(@OGUID+37, 188576, 571, 1, 1, 4830.733, -1281.578, 168.0519, 3.001428, 0, 0, 0, 1, 120, 255, 1, 15595), --
+(@OGUID+38, 188577, 571, 1, 1, 4813.866, -1379.148, 168.2439, 1.575411, 0, 0, 0, 1, 120, 255, 1, 15595), --
+(@OGUID+39, 188578, 571, 1, 1, 4759.164, -1324.038, 168.0459, 0.9814962, 0, 0, 0, 1, 120, 255, 1, 15595), --
+(@OGUID+40, 188579, 571, 1, 1, 4756.252, -1322.118, 167.9957, 0.9735442, 0, 0, 0, 1, 120, 255, 1, 15595), --
+(@OGUID+41, 188580, 571, 1, 1, 4594.677, -1384.538, 157.1768, 3.218987, 0, 0, 0, 1, 120, 255, 1, 15595), --
+(@OGUID+42, 189294, 571, 1, 1, 3471.479, 940.9305, 153.8268, 1.727875, 0, 0, 0, 1, 120, 255, 1, 15595), -- Campfire
+(@OGUID+43, 189324, 571, 1, 1, 1946.168, -5494.583, 206.8149, 4.319691, 0, 0, 0, 1, 120, 255, 1, 15595), -- Bonfire
+(@OGUID+44, 189961, 571, 1, 1, 2734.848, -3931.597, 374.5498, 3.001947, 0, 0, 0, 1, 120, 255, 1, 17658), -- Campfire
+(@OGUID+45, 189962, 571, 1, 1, 2710.609, -3917.27, 375.0239, 3.141593, 0, 0, 0, 1, 120, 255, 1, 17658), -- Campfire
+(@OGUID+46, 189963, 571, 1, 1, 2687.596, -3977.962, 375.6875, 2.91469, 0, 0, 0, 1, 120, 255, 1, 17658), -- Campfire
+(@OGUID+47, 189964, 571, 1, 1, 2674.4, -4011.544, 374.0872, 3.141593, 0, 0, 0, 1, 120, 255, 1, 15595), -- Campfire
+(@OGUID+48, 189965, 571, 1, 1, 2640.501, -4069.877, 352.7829, 3.316144, 0, 0, 0, 1, 120, 255, 1, 15595), -- Campfire
+(@OGUID+49, 189966, 571, 1, 1, 2652.039, -4094.349, 352.7137, 2.696529, 0, 0, 0, 1, 120, 255, 1, 15595), -- Campfire
+(@OGUID+50, 190017, 571, 1, 1, 3886.404, -3854.78, 178.6396, 3.298687, 0, 0, 0, 1, 120, 255, 1, 15595), -- Bonfire
+(@OGUID+51, 190018, 571, 1, 1, 3879.928, -3898.141, 177.3041, 3.298687, 0, 0, 0, 1, 120, 255, 1, 15595), -- Bonfire
+(@OGUID+52, 190129, 571, 1, 1, 4093.27, -814.5311, 312.8538, 3.141593, 0, 0, 0, 1, 120, 255, 1, 17658), -- Campfire
+(@OGUID+53, 190132, 571, 1, 1, 4067.972, -1217.099, 129.8714, 2.33874, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bonfire
+(@OGUID+54, 190134, 571, 1, 1, 4039.465, -1295.785, 130.3643, 3.194002, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bonfire
+(@OGUID+55, 190136, 571, 1, 1, 2901.714, -4730.744, 322.4269, 0.06981169, 0, 0, 0, 1, 120, 255, 1, 15595), -- Campfire
+(@OGUID+56, 190137, 571, 1, 1, 2916.552, -4763.382, 324.672, 1.48353, 0, 0, 0, 1, 120, 255, 1, 15595), -- Campfire
+(@OGUID+57, 190138, 571, 1, 1, 2929.887, -4738.271, 322.2895, 0.2967051, 0, 0, 0, 1, 120, 255, 1, 15595), -- Campfire
+(@OGUID+58, 190275, 571, 1, 1, 3285.183, 1226.998, 137.6425, 2.050762, 0, 0, 0, 1, 120, 255, 1, 15595), -- Bonfire
+(@OGUID+59, 190281, 571, 1, 1, 3167.204, 977.7576, 113.9504, 1.84132, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bonfire
+(@OGUID+60, 190662, 571, 1, 1, 2013.997, -4888.311, 211.8739, 1.413715, 0, 0, 0, 1, 120, 255, 1, 15595), -- Westguard Keep
+(@OGUID+61, 191201, 571, 1, 1, 4352.986, -4139.897, 183.2539, 0.9250238, 0, 0, 0, 1, 120, 255, 1, 15595), -- Bonfire
+(@OGUID+62, 191223, 571, 1, 1, 3395.608, 3933.193, 28.70841, 0.3316107, 0, 0, 0, 1, 120, 255, 1, 15595), -- Taunka''le Village
+(@OGUID+63, 191224, 571, 1, 1, 3396.677, 3930.758, 28.65611, 3.47321, 0, 0, 0, 1, 120, 255, 1, 15595), -- Dragonblight
+(@OGUID+64, 191241, 571, 1, 1, 3200.345, -1976.016, 85.20889, 3.036875, 0, 0, 0, 1, 120, 255, 1, 15595), -- Bonfire
+(@OGUID+65, 191242, 571, 1, 1, 3201.704, -1965.061, 85.96173, 1.431168, 0, 0, 0, 1, 120, 255, 1, 15595), -- Chair
+(@OGUID+66, 191243, 571, 1, 1, 3210.138, -1984.84, 85.72446, 5.471607, 0, 0, 0, 1, 120, 255, 1, 15595), -- Chair
+(@OGUID+67, 191245, 571, 1, 1, 3192.13, -1984.083, 85.71163, 3.857178, 0, 0, 0, 1, 120, 255, 1, 15595), -- Chair
+(@OGUID+68, 191256, 571, 1, 1, 3501.222, -4490.944, 225.8872, 2.897245, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bonfire
+(@OGUID+69, 191257, 571, 1, 1, 3510.455, -4590.846, 221.0397, 2.565629, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bonfire
+(@OGUID+70, 191333, 571, 1, 1, 3072.524, -512.8351, 124.2693, 0.8203033, 0, 0, 0, 1, 120, 255, 1, 15595), -- Bonfire
+(@OGUID+71, 191791, 571, 1, 1, 5798.875, -1597.493, 234.2027, 2.10312, 0, 0, 0, 1, 120, 255, 0, 15595), --
+(@OGUID+72, 192256, 571, 1, 1, 9025.685, -1178.616, 1058.108, 3.141593, 0, 0, 0, 1, 120, 255, 1, 17658), -- Gravestone
+(@OGUID+73, 192555, 571, 1, 1, 6137.667, -322.4479, 436.2447, 0.1414226, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bonfire
+(@OGUID+74, 192722, 571, 1, 4, 7355.991, -2967.411, 906.3082, 1.727875, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne
+(@OGUID+75, 192723, 571, 1, 4, 7352.724, -2973.597, 938.7529, 2.033306, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne
+(@OGUID+76, 192724, 571, 1, 4, 7354.643, -2973.122, 921.2005, 5.009097, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne
+(@OGUID+77, 192725, 571, 1, 4, 7348.135, -2967.436, 911.3059, 0.7417646, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne
+(@OGUID+78, 192726, 571, 1, 4, 7355.149, -2969.905, 920.3154, 3.281227, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne
+(@OGUID+79, 192727, 571, 1, 4, 7360.083, -2966.736, 911.498, 0.4014239, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne
+(@OGUID+80, 192728, 571, 1, 4, 7360.628, -2971.285, 912.2922, 2.556908, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne
+(@OGUID+81, 192729, 571, 1, 4, 7347.269, -2971.479, 912.0352, 0.1483528, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne
+(@OGUID+82, 192730, 571, 1, 4, 7347.157, -2963.165, 907.7184, 2.801247, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne
+(@OGUID+83, 192731, 571, 1, 4, 7362.757, -2961.672, 907.7986, 3.42085, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne
+(@OGUID+84, 193196, 571, 1, 2, 4840.929, 1494.97, 209.6041, 2.103119, 0, 0, 0, 1, 120, 255, 1, 17658), -- Fordragon''s Shield
+(@OGUID+85, 193197, 571, 1, 2, 4875.424, 1486.991, 209.5768, 2.120576, 0, 0, 0, 1, 120, 255, 1, 17658), -- Saurfang''s Battle Armor
+(@OGUID+86, 193198, 571, 1, 2, 4875.969, 1487.23, 209.6242, 5.707228, 0, 0, 0, 1, 120, 255, 1, 17658), -- Shoulder [PH]
+(@OGUID+87, 193220, 571, 1, 2, 4901.706, 1501.568, 214.8973, 0.0005237369, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+88, 193221, 571, 1, 2, 4899.952, 1499.167, 214.9082, 5.41925, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+89, 193222, 571, 1, 2, 4867.967, 1505.212, 209.1965, 1.82941, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+90, 193223, 571, 1, 2, 4867.679, 1501.424, 209.7898, 0.969179, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+91, 193224, 571, 1, 2, 4867.233, 1510.344, 210.8179, 2.48454, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+92, 193225, 571, 1, 2, 4869.894, 1498.136, 209.9754, 2.077466, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+93, 193226, 571, 1, 2, 4868.827, 1515.047, 210.5834, 1.567609, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+94, 193227, 571, 1, 2, 4872.966, 1514.59, 212.3312, 4.885982, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+95, 193228, 571, 1, 2, 4867.919, 1513.521, 211.374, 4.224219, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+96, 193229, 571, 1, 2, 4899.046, 1500.026, 213.7757, 4.281601, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+97, 193230, 571, 1, 2, 4875.33, 1483.97, 209.321, 1.099933, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+98, 193231, 571, 1, 2, 4875.167, 1482.726, 209.5813, 3.899255, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+99, 193232, 571, 1, 2, 4873.677, 1479.37, 209.2619, 6.044956, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+100, 193233, 571, 1, 2, 4878.027, 1483.453, 209.3674, 3.726801, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+101, 193234, 571, 1, 2, 4874.569, 1482.123, 209.5809, 5.821372, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+102, 193235, 571, 1, 2, 4874.725, 1480.063, 209.5809, 3.477762, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+103, 193236, 571, 1, 2, 4877.155, 1482.281, 209.5077, 6.219547, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+104, 193237, 571, 1, 2, 4879.968, 1484.747, 209.8505, 4.501981, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+105, 193238, 571, 1, 2, 4876.323, 1484.97, 208.3138, 2.230834, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+106, 193239, 571, 1, 2, 4877.1, 1484.656, 209.1863, 2.269449, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+107, 193240, 571, 1, 2, 4871.932, 1485.224, 209.3937, 1.457871, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+108, 193241, 571, 1, 2, 4868.574, 1498.977, 210.52, 0.1396255, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+109, 193242, 571, 1, 2, 4868.924, 1496.627, 210.149, 3.220151, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+110, 193243, 571, 1, 2, 4866.884, 1497.613, 209.2193, 5.581869, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+111, 193244, 571, 1, 2, 4870.409, 1485.929, 208.8148, 2.012669, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+112, 193245, 571, 1, 2, 4873.674, 1463.747, 209.9446, 1.692968, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+113, 193246, 571, 1, 2, 4867.43, 1463.248, 208.1823, 3.382769, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+114, 193247, 571, 1, 2, 4870.533, 1463.094, 209.2539, 2.985031, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+115, 193248, 571, 1, 2, 4872.965, 1463.778, 208.817, 0.3284273, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+116, 193249, 571, 1, 2, 4866.135, 1454.382, 209.254, 2.906489, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+117, 193250, 571, 1, 2, 4863.497, 1511.99, 211.0073, 5.427976, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+118, 193251, 571, 1, 2, 4862.127, 1509.542, 210.2737, 4.765272, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+119, 193252, 571, 1, 2, 4865.178, 1507.217, 210.3379, 5.044526, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+120, 193253, 571, 1, 2, 4853.508, 1504.255, 209.7053, 1.998924, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+121, 193254, 571, 1, 2, 4849.161, 1504.778, 210.4205, 4.066619, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+122, 193255, 571, 1, 2, 4835.896, 1488.719, 209.5815, 3.416903, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+123, 193256, 571, 1, 2, 4841.354, 1482.227, 209.5805, 1.850049, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+124, 193257, 571, 1, 2, 4841.196, 1489.903, 209.5813, 5.725396, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+125, 193258, 571, 1, 2, 4840.608, 1484.361, 209.5813, 2.016231, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+126, 193259, 571, 1, 2, 4839.124, 1486.542, 209.2619, 1.978337, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+127, 193260, 571, 1, 2, 4843.821, 1489.113, 209.283, 5.184155, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+128, 193261, 571, 1, 2, 4842.286, 1483.191, 209.5809, 0.3759405, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+129, 193262, 571, 1, 2, 4845.386, 1486.806, 209.4725, 1.254085, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+130, 193263, 571, 1, 2, 4835.046, 1490.908, 209.2909, 1.831047, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+131, 193264, 571, 1, 2, 4838.369, 1493.165, 209.3897, 2.568887, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+132, 193265, 571, 1, 2, 4842.897, 1491.009, 209.5809, 5.959332, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+133, 193266, 571, 1, 2, 4844.97, 1489.892, 209.3359, 3.932379, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+134, 193267, 571, 1, 2, 4847.749, 1488.823, 209.301, 5.789437, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+135, 193268, 571, 1, 2, 4841.975, 1486.234, 209.4944, 5.791942, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+136, 193269, 571, 1, 2, 4844.339, 1484.116, 209.4908, 3.889533, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+137, 193270, 571, 1, 2, 4840.96, 1481.422, 209.4966, 4.98909, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+138, 193271, 571, 1, 2, 4844.502, 1486.135, 209.3802, 1.443149, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+139, 193272, 571, 1, 2, 4836.853, 1488.425, 209.4966, 3.060501, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+140, 193273, 571, 1, 2, 4844.616, 1493.514, 209.3608, 3.11481, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+141, 193274, 571, 1, 2, 4847.851, 1486.434, 209.3608, 1.151302, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+142, 193275, 571, 1, 2, 4841.349, 1488.082, 208.3138, 3.749274, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+143, 193276, 571, 1, 2, 4842.697, 1487.741, 209.3854, 3.587177, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+144, 193277, 571, 1, 2, 4847.485, 1488.835, 207.9903, 0.485505, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+145, 193278, 571, 1, 2, 4856.974, 1498.668, 210.0112, 5.593781, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+146, 193279, 571, 1, 2, 4860.162, 1499.833, 209.4969, 5.515764, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+147, 193280, 571, 1, 2, 4862.285, 1462.604, 209.3651, 4.037887, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+148, 193281, 571, 1, 2, 4862.758, 1457.965, 209.9445, 0.4537852, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+149, 193282, 571, 1, 2, 4859.121, 1463.345, 209.3854, 5.777565, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+150, 193283, 571, 1, 2, 4861.292, 1455.554, 209.3854, 5.742657, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+151, 193284, 571, 1, 2, 4865.374, 1460.495, 209.1164, 0.3146807, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+152, 193285, 571, 1, 2, 4865.479, 1453.684, 209.7114, 5.969027, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+153, 193286, 571, 1, 2, 4840.913, 1402.094, 192.9591, 5.131985, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+154, 193287, 571, 1, 2, 4837.317, 1400.465, 192.6397, 1.384923, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+155, 193288, 571, 1, 2, 4842.942, 1402.059, 192.9587, 5.365919, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+156, 193289, 571, 1, 2, 4836.487, 1403.299, 192.8744, 2.467085, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+157, 193290, 571, 1, 2, 4840.022, 1400.498, 191.6916, 3.15663, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+158, 193291, 571, 1, 2, 4854.309, 1417.488, 193.4538, 2.059487, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+159, 193292, 571, 1, 2, 4848.659, 1414.785, 191.6916, 3.749274, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+160, 193293, 571, 1, 2, 4852.316, 1415.811, 192.7632, 2.889032, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+161, 193294, 571, 1, 2, 4856.42, 1416.295, 192.7632, 1.702218, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+162, 193295, 571, 1, 2, 4838.964, 1398.37, 192.9591, 1.928963, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+163, 193296, 571, 1, 2, 4842.648, 1399.972, 192.6608, 4.590742, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+164, 193297, 571, 1, 2, 4842.655, 1397.182, 192.8535, 0.6606718, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+165, 193298, 571, 1, 2, 4844.037, 1399.976, 192.7137, 3.338978, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+166, 193299, 571, 1, 2, 4844.027, 1397.335, 192.6788, 4.733513, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+167, 193300, 571, 1, 2, 4839.507, 1398.616, 192.8744, 5.198529, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+168, 193301, 571, 1, 2, 4840.949, 1399.462, 192.7632, 2.993751, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+169, 193302, 571, 1, 2, 4844.576, 1399.304, 191.3681, 5.878576, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+170, 193303, 571, 1, 2, 4819.022, 1437.061, 195.9568, 0.7853968, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+171, 193304, 571, 1, 2, 4814.786, 1441.675, 193.9325, 2.475178, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+172, 193305, 571, 1, 2, 4816.835, 1438.477, 195.4229, 1.614948, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+173, 193306, 571, 1, 2, 4818.494, 1434.955, 194.9861, 6.227641, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+174, 193307, 571, 1, 2, 4804.619, 1464.389, 193.2142, 0.8726636, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+175, 193308, 571, 1, 2, 4802.317, 1465.608, 192.5236, 1.702218, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+176, 193309, 571, 1, 2, 4838.382, 1400.665, 192.9736, 0.165805, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+177, 193310, 571, 1, 2, 4804.275, 1462.243, 192.1949, 0.03171997, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+178, 193311, 571, 1, 2, 4818.627, 1432.585, 195.6188, 0.7931821, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+179, 193312, 571, 1, 2, 4818.935, 1434.288, 194.9375, 6.100451, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+180, 193313, 571, 1, 2, 4802.595, 1414.417, 193.2174, 5.02655, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+181, 193314, 571, 1, 2, 4808.629, 1416.099, 191.6722, 0.4331469, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+182, 193315, 571, 1, 2, 4805.602, 1422.391, 192.5222, 3.915716, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+183, 193316, 571, 1, 2, 4806.971, 1413.819, 192.5371, 0.8470061, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+184, 193317, 571, 1, 2, 4800.958, 1415.844, 192.1961, 4.185608, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+185, 193318, 571, 1, 2, 4814.53, 1421.677, 193.837, 4.031712, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+186, 193319, 571, 1, 2, 4818.464, 1416.958, 192.3035, 0.1713461, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+187, 193320, 571, 1, 2, 4816.804, 1417.587, 192.5431, 2.827954, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+188, 193321, 571, 1, 2, 4813.185, 1424.823, 193.4423, 2.793048, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+189, 193322, 571, 1, 2, 4810.121, 1419.193, 193.3252, 3.648265, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+190, 193323, 571, 1, 2, 4807.363, 1428.156, 193.9222, 3.0194, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+191, 193324, 571, 1, 2, 4806.887, 1426.839, 192.9712, 0.3234065, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+192, 193325, 571, 1, 2, 4822.01, 1384.936, 193.2164, 4.05789, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+193, 193326, 571, 1, 2, 4821.838, 1389.484, 192.8276, 1.342961, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+194, 193327, 571, 1, 2, 4826.813, 1380.915, 191.5601, 5.747677, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+195, 193328, 571, 1, 2, 4824.364, 1383.818, 192.6317, 4.887444, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+196, 193329, 571, 1, 2, 4822.135, 1389.366, 192.6317, 3.831524, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+197, 193330, 571, 1, 2, 4823.995, 1380.991, 192.6317, 6.161535, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+198, 193331, 571, 1, 2, 4822.26, 1387.094, 192.1949, 3.21697, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+199, 193332, 571, 1, 2, 4799.996, 1468.615, 191.452, 2.562449, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+200, 193333, 571, 1, 2, 4792.137, 1470.661, 193.0653, 6.161014, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+201, 193334, 571, 1, 2, 4794.401, 1474.757, 192.7633, 4.957259, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+202, 193335, 571, 1, 2, 4790.183, 1467.854, 192.762, 4.922352, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+203, 193336, 571, 1, 2, 4796.58, 1468.24, 192.1685, 5.777565, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+204, 193337, 571, 1, 2, 4784.452, 1470.938, 192.9553, 4.127707, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+205, 193338, 571, 1, 2, 4784.479, 1470.891, 192.5763, 0.9255483, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+206, 193339, 571, 1, 2, 4772.658, 1434.781, 193.2318, 3.691376, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+207, 193340, 571, 1, 2, 4774.897, 1439.738, 192.737, 3.725339, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+208, 193341, 571, 1, 2, 4775.096, 1434.278, 192.5412, 4.040963, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+209, 193342, 571, 1, 2, 4796.264, 1462.712, 192.9666, 6.045015, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+210, 193343, 571, 1, 2, 4790.44, 1461.151, 192.981, 5.148722, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+211, 193344, 571, 1, 2, 4791.811, 1461.446, 192.6317, 2.452708, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+212, 193345, 571, 1, 2, 4796.167, 1458.012, 192.8273, 4.96452, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+213, 193346, 571, 1, 2, 4778.761, 1431.167, 191.4696, 5.21535, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+214, 193347, 571, 1, 2, 4772.64, 1435.917, 192.8096, 5.940294, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+215, 193348, 571, 1, 2, 4774.135, 1431.061, 192.5412, 5.821197, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+216, 193349, 571, 1, 2, 4772.312, 1368.96, 179.3861, 0.8115751, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+217, 193350, 571, 1, 2, 4768.762, 1368.182, 178.913, 1.444671, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+218, 193351, 571, 1, 2, 4768.806, 1368.814, 178.492, 0.1401508, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+219, 193352, 571, 1, 2, 4773.032, 1368.717, 178.4498, 6.18401, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+220, 193353, 571, 1, 2, 4769.212, 1371.894, 177.5704, 3.96744, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+221, 193354, 571, 1, 2, 4753.28, 1340.752, 168.824, 5.942847, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+222, 193355, 571, 1, 2, 4755.793, 1348.842, 171.9237, 2.460914, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+223, 193356, 571, 1, 2, 4748.543, 1338.941, 166.3824, 5.994266, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+224, 193357, 571, 1, 2, 4755.62, 1346.563, 169.7958, 1.349443, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+225, 193358, 571, 1, 2, 4753.616, 1343.335, 168.9523, 0.4892147, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+226, 193359, 571, 1, 2, 4756.417, 1343.859, 170.2456, 1.763303, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+227, 193360, 571, 1, 2, 4751.151, 1340.321, 166.6075, 5.101904, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+228, 193361, 571, 1, 2, 4734.48, 1318.531, 157.1364, 1.850571, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+229, 193362, 571, 1, 2, 4729.611, 1321.644, 157.5598, 3.769916, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+230, 193363, 571, 1, 2, 4730.31, 1318.991, 155.5435, 4.299054, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+231, 193364, 571, 1, 2, 4730.522, 1317.274, 156.2261, 2.566151, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+232, 193365, 571, 1, 2, 4845.421, 1487.394, 209.5798, 3.621566, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+233, 193366, 571, 1, 2, 4873.986, 1482.95, 209.5806, 2.321287, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+234, 193367, 571, 1, 2, 4877.768, 1484.813, 209.6253, 0.9861118, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+235, 193368, 571, 1, 2, 4843.112, 1399.606, 192.9736, 4.04044, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+236, 193369, 571, 1, 2, 4733.987, 1316.142, 156.3821, 4.214973, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+237, 193370, 571, 1, 2, 4771.53, 1370.231, 177.6764, 3.473215, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+238, 193371, 571, 1, 2, 4747.052, 1371.73, 174.6061, 3.272515, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+239, 193372, 571, 1, 2, 4745.647, 1372.851, 180.6194, 0.2879769, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+240, 193373, 571, 1, 2, 4748.801, 1370.48, 177.2103, 1.125736, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+241, 193374, 571, 1, 2, 4739.766, 1375.458, 175.0408, 5.899213, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+242, 193375, 571, 1, 2, 4747.372, 1376.691, 177.1419, 4.241152, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+243, 193376, 571, 1, 2, 4729.662, 1338.746, 165.7118, 1.483528, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+244, 193377, 571, 1, 2, 4724.683, 1339.089, 165.6361, 0.9512024, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+245, 193378, 571, 1, 2, 4722.371, 1315.175, 153.0163, 4.712391, 0, 0, 0, 1, 120, 255, 1, 15595),
+(@OGUID+246, 193379, 571, 1, 2, 4722.186, 1312.745, 151.8177, 2.207837, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+247, 193380, 571, 1, 2, 4721.955, 1313.016, 155.3777, 4.267334, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+248, 193381, 571, 1, 2, 4828.909, 1364.957, 187.7651, 3.141593, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+249, 193382, 571, 1, 2, 4767.654, 1414.143, 182.9588, 3.141593, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+250, 193383, 571, 1, 2, 4885.875, 1446.399, 197.2411, 3.141593, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+251, 193384, 571, 1, 2, 4967.423, 1382.576, 280.6783, 3.141593, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+252, 193385, 571, 1, 2, 4819.641, 1494.38, 197.8983, 3.141593, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+253, 193386, 571, 1, 2, 4760.751, 1331.356, 166.7298, 1.483529, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+254, 193388, 571, 1, 2, 4841.913, 1491.074, 209.5806, 5.026549, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+255, 193389, 571, 1, 2, 4854.66, 1501.157, 209.4814, 2.347464, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+256, 193390, 571, 1, 2, 4867.81, 1503.073, 209.8845, 4.398232, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+257, 193391, 571, 1, 2, 4806.318, 1418.541, 192.7293, 3.996809, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+258, 193392, 571, 1, 2, 4809.103, 1418.015, 192.8921, 1.754055, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+259, 193393, 571, 1, 2, 4866.126, 1504.92, 209.6104, 3.586657, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+260, 193394, 571, 1, 2, 4822.109, 1385.169, 190.8455, 0.5934095, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+261, 193395, 571, 1, 2, 4770.155, 1370.927, 176.3797, 2.809977, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+262, 193396, 571, 1, 2, 4794.685, 1457.065, 192.5883, 2.644167, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+263, 193397, 571, 1, 2, 4733.944, 1315.556, 156.3676, 5.009097, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+264, 193398, 571, 1, 2, 4848.95, 1412.977, 192.9511, 4.468044, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+265, 193399, 571, 1, 2, 4859.428, 1457.759, 209.3438, 3.168109, 0, 0, 0, 1, 120, 255, 1, 17658),
+(@OGUID+266, 193986, 571, 1, 1, 7917.546, -2461.021, 1135.937, 3.071766, 0, 0, 0, 1, 120, 255, 1, 15595), -- Gravestone
+(@OGUID+267, 194127, 571, 1, 1, 6099.222, -1077.966, 404.2272, 2.948969, 0, 0, 0, 1, 120, 255, 1, 17658), -- Anvil
+(@OGUID+268, 194128, 571, 1, 1, 6096.169, -1074.005, 404.5583, 0.5148721, 0, 0, 0, 1, 120, 255, 1, 17658), -- Forge
+(@OGUID+269, 194155, 571, 1, 1, 3848.472, -4069.614, 200.835, 6.058595, 0, 0, 0, 1, 120, 255, 1, 15595), -- Mysterious Wreckage
+(@OGUID+270, 194535, 571, 1, 1, 4957.066, 1291.01, 234.8064, 4.06662, 0, 0, 0, 1, 120, 255, 1, 15595), -- Campfire
+(@OGUID+271, 194540, 571, 1, 1, 6219.549, 1.6977, 410.1644, 0.6981294, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bonfire
+(@OGUID+272, 194545, 571, 1, 1, 3833.437, 1629.639, 89.75687, 3.028127, 0, 0, 0, 1, 120, 255, 1, 17658), -- Brazier
+(@OGUID+273, 194546, 571, 1, 1, 3823.038, 1623.943, 89.76097, 3.865906, 0, 0, 0, 1, 120, 255, 1, 17658), -- Brazier
+(@OGUID+274, 194547, 571, 1, 1, 3887.406, 1585.241, 90.91903, 1.204277, 0, 0, 0, 1, 120, 255, 1, 17658), -- Brazier
+(@OGUID+275, 194548, 571, 1, 1, 3887.188, 1596.438, 90.96321, 2.10312, 0, 0, 0, 1, 120, 255, 1, 17658), -- Brazier
+(@OGUID+276, 194832, 571, 1, 1, 6452.789, 2345.028, 464.2545, 4.497677, 0, 0, 0, 1, 120, 255, 1, 15595),
+(@OGUID+277, 194833, 571, 1, 1, 6454.819, 2346.186, 464.1093, 6.165739, 0, 0, 0, 1, 120, 255, 1, 15595),
+(@OGUID+278, 194834, 571, 1, 1, 6424.471, 2383.731, 466.7144, 6.260079, 0, 0, 0, 1, 120, 255, 1, 15595),
+(@OGUID+279, 194835, 571, 1, 1, 6422.702, 2385.566, 466.9037, 4.598919, 0, 0, 0, 1, 120, 255, 1, 15595),
+(@OGUID+280, 194836, 571, 1, 1, 6429.28, 2385.773, 466.5732, 3.505927, 0, 0, 0, 1, 120, 255, 1, 15595),
+(@OGUID+281, 194837, 571, 1, 1, 6425.83, 2383.571, 466.5943, 3.120276, 0, 0, 0, 1, 120, 255, 1, 15595),
+(@OGUID+282, 194838, 571, 1, 1, 6425.671, 2386.106, 465.9078, 5.982333, 0, 0, 0, 1, 120, 255, 1, 15595);
diff --git a/sql/updates/world/2014_05_11_01_world_misc.sql b/sql/updates/world/2014_05_11_01_world_misc.sql
new file mode 100644
index 00000000000..8f8dfc4567b
--- /dev/null
+++ b/sql/updates/world/2014_05_11_01_world_misc.sql
@@ -0,0 +1,39 @@
+ALTER TABLE `broadcast_text` CHANGE COLUMN `WDBVerified` `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `creature_equip_template` CHANGE COLUMN `WDBVerified` `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `creature_template` CHANGE COLUMN `WDBVerified` `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `gameobject_template` CHANGE COLUMN `WDBVerified` `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `item_set_names` CHANGE COLUMN `WDBVerified` `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `item_template` CHANGE COLUMN `WDBVerified` `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `npc_text` CHANGE COLUMN `WDBVerified` `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `page_text` CHANGE COLUMN `WDBVerified` `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `quest_template` CHANGE COLUMN `WDBVerified` `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+
+ALTER TABLE `areatrigger_teleport` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `creature` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `lfg_entrances` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `locales_broadcast_text` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `locales_creature` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `locales_gameobject` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `locales_item` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `locales_item_set_names` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `locales_quest` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `npc_vendor` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `quest_poi_points` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `quest_poi` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+
+UPDATE `locales_broadcast_text` SET `VerifiedBuild`=18019;
+UPDATE `locales_creature` SET `VerifiedBuild`=18019;
+UPDATE `locales_gameobject` SET `VerifiedBuild`=18019;
+UPDATE `locales_item` SET `VerifiedBuild`=15050;
+UPDATE `locales_item_set_names` SET `VerifiedBuild`=15050;
+UPDATE `locales_quest` SET `VerifiedBuild`=18019;
+
+UPDATE `creature_template` SET `VerifiedBuild`=0 WHERE `VerifiedBuild`=1;
+UPDATE `gameobject_template` SET `VerifiedBuild`=0 WHERE `VerifiedBuild`=1;
+UPDATE `item_set_names` SET `VerifiedBuild`=0 WHERE `VerifiedBuild`=1;
+UPDATE `item_template` SET `VerifiedBuild`=0 WHERE `VerifiedBuild`=1;
+UPDATE `npc_text` SET `VerifiedBuild`=0 WHERE `VerifiedBuild`=1;
+UPDATE `page_text` SET `VerifiedBuild`=0 WHERE `VerifiedBuild`=1;
+UPDATE `item_template` SET `VerifiedBuild`=0 WHERE `VerifiedBuild`=1;
+
+UPDATE `locales_item` SET `VerifiedBuild`=-12340 WHERE `entry` IN (1019, 5022, 5084, 5085, 5096, 5512, 5530, 5544, 5798, 6712, 6949, 6950, 6951, 7675, 8925, 8926, 8927, 8928, 8984, 8985, 9250, 9315, 9577, 10920, 10921, 10922, 10958, 11163, 11168, 11223, 11367, 11368, 12368, 12708, 13466, 16051, 16209, 16262, 16263, 16306, 16310, 16972, 17414, 17683, 17771, 18224, 18256, 18562, 18947, 19004, 19005, 20310, 20844, 21214, 21279, 21280, 21281, 21282, 21283, 21284, 21285, 21287, 21288, 21289, 21290, 21291, 21292, 21293, 21294, 21295, 21296, 21297, 21298, 21299, 21300, 21302, 21303, 21304, 21306, 21307, 21927, 22053, 22054, 22055, 22146, 22153, 22530, 22540, 22549, 22550, 22890, 22891, 22897, 23094, 23096, 23099, 23100, 23105, 23106, 23108, 23109, 23113, 23114, 23115, 23116, 23121, 23130, 23133, 23136, 23137, 23142, 23143, 23144, 23145, 23148, 23149, 23150, 23151, 23155, 23320, 23778, 23815, 23902, 24029, 24030, 24031, 24032, 24037, 24047, 24050, 24051, 24052, 24056, 24057, 24060, 24061, 24062, 24065, 24162, 24192, 24195, 24196, 24197, 24201, 24203, 24205, 24206, 24207, 24211, 24212, 24215, 24216, 24217, 24219, 27679, 27689, 27774, 27777, 27785, 27786, 27809, 27811, 27812, 27820, 28048, 28117, 28118, 28120, 28122, 28274, 28360, 28361, 28362, 28363, 28460, 28461, 28462, 28465, 28466, 28468, 28469, 28470, 28557, 28595, 28596, 2874, 2893, 2939, 29468, 29549, 29550, 29553, 30467, 30547, 30548, 30550, 30551, 30552, 30553, 30555, 30556, 30558, 30559, 30560, 30563, 30564, 30565, 30572, 30573, 30574, 30575, 30581, 30583, 30585, 30586, 30589, 30590, 30591, 30593, 30594, 30600, 30601, 30603, 30605, 30606, 31116, 31117, 31118, 31359, 31501, 31837, 31860, 31861, 31862, 31863, 31864, 31865, 31866, 31867, 31868, 31869, 31870, 31871, 31872, 31873, 31874, 31875, 31876, 31877, 31878, 31879, 32195, 32196, 32197, 32198, 32202, 32204, 32206, 32207, 32208, 32210, 32213, 32214, 32215, 32216, 32219, 32220, 32221, 32222, 32223, 32225, 32281, 32282, 32283, 32284, 32288, 32290, 32292, 32293, 32294, 32296, 32299, 32300, 32301, 32302, 32305, 32306, 32307, 32308, 32309, 32311, 3238, 32634, 32635, 32636, 32637, 32638, 32639, 32640, 32735, 33139, 33141, 3371, 3372, 33804, 34060, 34061, 34200, 34201, 34218, 3460, 35238, 35239, 35240, 35241, 35245, 35248, 35249, 35250, 35251, 35252, 35255, 35256, 35257, 35259, 35261, 35262, 35266, 35268, 35270, 35271, 35304, 35305, 35306, 35307, 35396, 35397, 35398, 35399, 35400, 35417, 35418, 35419, 35420, 35421, 35422, 35423, 35424, 35425, 35426, 35427, 35428, 35429, 35430, 35431, 35432, 35433, 35434, 35435, 35436, 35437, 35438, 35439, 35440, 35441, 35442, 35443, 35444, 35445, 35446, 35447, 35448, 35449, 35450, 35451, 35452, 35453, 35454, 35455, 35456, 35457, 35458, 35459, 35460, 35461, 35462, 35487, 35488, 35489, 35500, 35707, 35708, 35756, 36766, 37347, 37602, 37603, 3776, 3819, 38545, 38546, 38547, 38549, 38679, 38682, 38766, 38767, 38768, 38769, 38770, 38771, 38772, 38773, 38774, 38775, 38776, 38777, 38778, 38779, 38780, 38781, 38782, 38783, 38784, 38785, 38786, 38787, 38788, 38789, 38790, 38791, 38792, 38793, 38794, 38795, 38796, 38797, 38798, 38799, 38800, 38801, 38802, 38803, 38804, 38805, 38806, 38807, 38808, 38809, 38810, 38811, 38812, 38813, 38814, 38815, 38816, 38817, 38818, 38819, 38820, 38821, 38822, 38823, 38824, 38825, 38826, 38827, 38828, 38829, 38830, 38831, 38832, 38833, 38834, 38835, 38836, 38837, 38838, 38839, 38840, 38841, 38842, 38843, 38844, 38845, 38846, 38847, 38848, 38849, 38850, 38851, 38852, 38853, 38854, 38855, 38856, 38857, 38858, 38859, 38860, 38861, 38862, 38863, 38864, 38865, 38866, 38867, 38868, 38869, 38870, 38871, 38872, 38873, 38874, 38875, 38876, 38877, 38878, 38879, 38880, 38881, 38882, 38883, 38884, 38885, 38886, 38887, 38888, 38889, 38890, 38891, 38892, 38893, 38894, 38895, 38896, 38897, 38898, 38899, 38900, 38901, 38902, 38903, 38904, 38905, 38906, 38907, 38908, 38909, 38910, 38911, 38912, 38913, 38914, 38915, 38917, 38918, 38919, 38920, 38921, 38922, 38923, 38924, 38925, 38926, 38927, 38928, 38929, 38930, 38931, 38932, 38933, 38934, 38935, 38936, 38937, 38938, 38939, 38940, 38941, 38942, 38943, 38944, 38945, 38946, 38947, 38948, 38949, 38950, 38951, 38953, 38954, 38955, 38956, 38958, 38959, 38960, 38961, 38962, 38963, 38964, 38965, 38966, 38967, 38968, 38969, 38971, 38972, 38973, 38974, 38975, 38976, 38977, 38978, 38979, 38980, 38981, 38982, 38983, 38984, 38985, 38986, 38987, 38988, 38989, 38990, 38991, 38992, 38993, 38994, 38995, 38997, 38998, 38999, 39000, 39001, 39002, 39003, 39004, 39005, 39006, 39349, 39350, 39906, 39907, 39909, 39911, 39912, 39915, 39916, 39927, 39933, 39936, 39937, 39938, 39942, 39943, 39944, 39946, 39948, 39953, 39957, 39958, 39960, 39961, 39962, 39963, 39965, 39966, 39968, 39975, 39976, 39979, 39981, 39983, 39984, 39985, 39986, 39988, 39991, 39998, 39999, 40000, 40002, 40010, 40012, 40014, 40015, 40023, 40024, 40025, 40027, 40029, 40030, 40031, 40032, 40033, 40038, 40044, 40047, 40049, 40050, 40052, 40053, 40054, 40055, 40057, 40058, 40085, 40088, 40089, 40092, 40094, 40096, 40099, 40100, 40101, 40103, 40104, 40113, 40114, 40115, 40117, 40121, 40123, 40125, 40126, 40131, 40132, 40134, 40136, 40137, 40138, 40140, 40143, 40148, 40151, 40153, 40154, 40156, 40157, 40158, 40159, 40161, 40162, 40164, 40166, 40167, 40170, 40172, 40174, 40175, 40176, 40177, 40178, 40181, 40411, 40899, 40901, 40903, 40920, 41094, 41096, 41098, 41100, 41101, 41104, 41105, 41106, 41107, 41109, 41110, 41170, 41377, 41429, 41433, 41436, 41438, 41439, 41440, 41444, 41447, 41449, 41450, 41452, 41454, 41456, 41458, 41459, 41462, 41463, 41464, 41467, 41469, 41471, 41473, 41475, 41477, 41478, 41479, 41481, 41482, 41486, 41487, 41488, 41490, 41491, 41494, 41496, 41501, 41502, 41524, 41535, 41538, 41541, 41563, 41564, 41567, 41568, 41570, 41573, 41580, 41581, 41582, 41687, 41688, 41689, 41694, 41696, 41697, 41698, 41699, 41701, 41702, 41703, 41705, 41718, 41719, 41721, 41722, 41724, 41725, 41730, 41732, 41736, 41739, 41747, 41777, 41782, 41785, 41791, 41795, 41796, 41817, 41818, 41820, 42144, 42146, 42153, 42157, 42299, 42303, 42304, 42309, 42315, 42397, 42403, 42405, 42407, 42416, 42417, 42456, 42465, 42466, 42469, 42471, 42734, 42740, 42743, 42747, 42750, 42753, 42754, 42899, 42901, 42906, 42907, 42909, 42910, 42912, 42915, 42916, 42917, 42965, 42971, 43145, 43146, 43230, 43231, 43232, 43233, 43234, 43235, 43237, 43335, 43339, 43350, 43354, 43355, 43357, 43359, 43360, 43366, 43368, 43369, 43380, 43386, 43391, 43394, 43396, 43397, 43398, 43412, 43414, 43416, 43417, 43418, 43420, 43423, 43424, 43425, 43426, 43428, 43429, 43432, 43441, 43534, 43538, 43545, 43548, 43549, 43553, 4361, 4363, 43671, 43672, 43673, 43826, 43867, 43868, 43869, 43952, 43987, 44449, 44453, 44455, 44456, 44457, 44458, 44463, 44465, 44466, 44467, 44469, 44470, 44493, 44497, 44511, 44512, 44815, 44842, 44843, 44944, 44946, 44947, 45056, 45060, 45603, 45628, 45733, 45737, 45743, 45744, 45757, 45758, 45760, 45761, 45776, 45789, 45793, 45794, 45803, 45804, 45805, 45883, 46026, 46098, 46372, 46767, 46897, 46899, 46900, 46902, 46903, 46906, 46907, 46908, 46909, 46910, 46914, 46916, 46919, 46921, 46922, 46927, 46928, 46930, 46931, 46934, 46936, 46939, 46940, 46944, 46945, 46946, 46947, 46951, 46952, 46953, 46956, 47008, 47010, 47011, 47012, 47016, 47023, 47179, 48720, 49084, 50045, 50077, 50125, 50166, 50167, 50168, 50816, 52022, 52023);
diff --git a/sql/updates/world/2014_05_11_02_world_gameobject.sql b/sql/updates/world/2014_05_11_02_world_gameobject.sql
new file mode 100644
index 00000000000..e4648d78f50
--- /dev/null
+++ b/sql/updates/world/2014_05_11_02_world_gameobject.sql
@@ -0,0 +1,4 @@
+ALTER TABLE `points_of_interest` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+ALTER TABLE `spell_target_position` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0';
+
+UPDATE `gameobject` SET `phasemask`=256 WHERE `guid`=76992;
diff --git a/sql/updates/world/2014_05_11_03_world_gameobject.sql b/sql/updates/world/2014_05_11_03_world_gameobject.sql
new file mode 100644
index 00000000000..4fd5f7d6fc5
--- /dev/null
+++ b/sql/updates/world/2014_05_11_03_world_gameobject.sql
@@ -0,0 +1,2 @@
+UPDATE `gameobject` SET `VerifiedBuild`=15595 WHERE `guid` IN (61, 72, 74, 1583, 2214, 4309, 5494, 6974, 6976, 6995, 7003, 7005, 7006, 7009, 7048, 10049, 10135, 10645, 11525, 11620, 11820, 11822, 11829, 12024, 13215, 13540, 13704, 13762, 13763, 13764, 13767, 14261, 15686, 16534, 16821, 16822, 16826, 17761, 21009, 21016, 21103, 21622, 21623, 21624, 22316, 22507, 22989, 23168, 24324, 26190, 26207, 26208, 26264, 26284, 26319, 26320, 26325, 26346, 26347, 26350, 26361, 26365, 26367, 26368, 26369, 26375, 26379, 26381, 26384, 26392, 26394, 26410, 26446, 26447, 26453, 28367, 30037, 30041, 30112, 30537, 31990, 31991, 31992, 31995, 31996, 31997, 31998, 31999, 32000, 32001, 32002, 32005, 32006, 32020, 33327, 33328, 33329, 33335, 33353, 33356, 33358, 33362, 33383, 33384, 33393, 33396, 33403, 33418, 33449, 33483, 34293, 34852, 35590, 35591, 35593, 35594, 35596, 35597, 35598, 35600, 35601, 35606, 35607, 35612, 35613, 35616, 35617, 35618, 35619, 40665, 42980, 43150, 44738, 44745, 44757, 44759, 44761, 44764, 44777, 44783, 44790, 44791, 44799, 44807, 45011, 45308, 45309, 45310, 45313, 45314, 47579, 47581, 47583, 47585, 48006, 49396, 49434, 49832, 50458, 50489, 50576, 50584, 50587, 50593, 50595, 50596, 50597, 50598, 50600, 50608, 50609, 50614, 50631, 50636, 51054, 51059, 51060, 51082, 51083, 51084, 51085, 51086, 51087, 51265, 51266, 51268, 51269, 51312, 51314, 51315, 51316, 51317, 51318, 51320, 51323, 51376, 51377, 51378, 51456, 51457, 51459, 51460, 51462, 51468, 51469, 51472, 51473, 51474, 51497, 51498, 51501, 51502, 51536, 51538, 51546, 51547, 51549, 51550, 51556, 51559, 51561, 51562, 51569, 51572, 51643, 51644, 51685, 51686, 51698, 51700, 51703, 51708, 51709, 51736, 51737, 51751, 51752, 51754, 51755, 51826, 51827, 51828, 51836, 51842, 51843, 51891, 51892, 51923, 51935, 51936, 51957, 52005, 52008, 52013, 52015, 52047, 52061, 52062, 52066, 52067, 52092, 52108, 52109, 52110, 52596, 52605, 52634, 52645, 52647, 52668, 52675, 52682, 52683, 52684, 52689, 52690, 52705, 52706, 52707, 52713, 52714, 52716, 52717, 52735, 52739, 52740, 52743, 52751, 52752, 52753, 52754, 52755, 52760, 52772, 52773, 52787, 52844, 52928, 52929, 52939, 52940, 52942, 52950, 52951, 52952, 52961, 52985, 52986, 52989, 52990, 52994, 52995, 53021, 53023, 53024, 53035, 53036, 53042, 53046, 53047, 53048, 53052, 53053, 53090, 53097, 53098, 53099, 53139, 53140, 53142, 53147, 53152, 53161, 53162, 53167, 53168, 53171, 53187, 53189, 53190, 53223, 53238, 53246, 53247, 53248, 53251, 53252, 53253, 53254, 53263, 53264, 53265, 53266, 53267, 53292, 53293, 53294, 53295, 53307, 53322, 53323, 53352, 53363, 53364, 53365, 53366, 53375, 53384, 53410, 53415, 53471, 53484, 53529, 53531, 53532, 53552, 53553, 53554, 53555, 53597, 53605, 53606, 53611, 53616, 53617, 53618, 53624, 53644, 53648, 53649, 53650, 53704, 53705, 53706, 53707, 53737, 53742, 53746, 53760, 53761, 53764, 53773, 53780, 53812, 53842, 53843, 53844, 53845, 53846, 53847, 53848, 53849, 53854, 53855, 53856, 53882, 53890, 53891, 53908, 53915, 53916, 53917, 53918, 53919, 53944, 53945, 53950, 53951, 53962, 53964, 53975, 53987, 54000, 54005, 54052, 54053, 54054, 54070, 54073, 54074, 54075, 54076, 54078, 54088, 54089, 54091, 54096, 54098, 54109, 54110, 54112, 54116, 54117, 54118, 54119, 54136, 54141, 54142, 54156, 54157, 54162, 54197, 54198, 54202, 54203, 54204, 54209, 54212, 54213, 54214, 54223, 54225, 54235, 54241, 54243, 54244, 54253, 54257, 54265, 54266, 54267, 54331, 54332, 54346, 54361, 54362, 54367, 54379, 54380, 54387, 54406, 54506, 54522, 54531, 54532, 54543, 54546, 54554, 54555, 54567, 54595, 54769, 54770, 54771, 54778, 54780, 54781, 54782, 54795, 54805, 54808, 54812, 54818, 54819, 54820, 54822, 54843, 54856, 54859, 54862, 54863, 54867, 54869, 54870, 54878, 54879, 54880, 54890, 54891, 54902, 54906, 54907, 54934, 54936, 55992, 55995, 55998, 56003, 56005, 56006, 56008, 56009, 56011, 56015, 56016, 56019, 56022, 56024, 56025, 56027, 56029, 56030, 56031, 56129, 56134, 56136, 56142, 56143, 56144, 56145, 56146, 56147, 56151, 56527, 57021, 57057, 57086, 57097, 57101, 57102, 57103, 57105, 57107, 57109, 57112, 57113, 57114, 57115, 57118, 57121, 57125, 57126, 57127, 57129, 57130, 57131, 58703, 58711, 58731, 58732, 58738, 58745, 58752, 58754, 58763, 58766, 58958, 59831, 60019, 60173, 60184, 60186, 60654, 60657, 60660, 60662, 60665, 60666, 60667, 61077, 61079, 62044, 63374, 63394, 63740, 63742, 63747, 63752, 63756, 63759, 63766, 63777, 63819, 63870, 64160, 64164, 64170, 64180, 64182, 64183, 64197, 64203, 64240, 64260, 64265, 64268, 64269, 64271, 64272, 64275, 64277, 64283, 64284, 64285, 64290, 64291, 64294, 64295, 64299, 64304, 64305, 64306, 64307, 64308, 64309, 64312, 64313, 64316, 64318, 64319, 64321, 64322, 64329, 64330, 64334, 64341, 64343, 64344, 64345, 64348, 64350, 64354, 64358, 64364, 64366, 64367, 64368, 64371, 64372, 64374, 64378, 64379, 64380, 64382, 64389, 64390, 64392, 64393, 64394, 64396, 64399, 64401, 64406, 64409, 64411, 64412, 64413, 64418, 64419, 64420, 64421, 64422, 64424, 64425, 64426, 64429, 64456, 64463, 64478, 66846, 66854, 66855, 66883, 66907, 70541, 85938, 85944, 85945, 85953, 85955, 85957, 85958, 85959, 86512, 86513, 86514, 86518, 86522, 86540, 86542, 86543, 86545, 86547, 86557, 87007, 87078, 87082, 87088, 87089, 87115, 87137, 87319, 87320, 87406, 87409, 120696, 121574, 150454, 150708, 150709, 150720, 160002, 160011, 160015, 160016, 160018, 160028, 160035, 160042, 160045, 160047, 160052, 160063, 160064, 160069, 160176, 160209, 160304, 160306, 160311, 160313, 160317, 160318, 160321, 160323, 160324, 160327, 160332, 160334, 160339, 160340, 160343, 160359, 160361, 160362, 160365, 160374, 160379, 160381, 160382, 160385, 160387, 160389, 160390, 160391, 160392, 160393, 160394, 160397, 160399, 160521, 160549, 160609, 160614, 160615, 160618, 160621, 160622, 160624, 160626, 160631, 160632, 160633, 160634, 160637, 160639, 160645, 160646, 160648, 160650, 160718, 160730, 160735);
+UPDATE `gameobject` SET `VerifiedBuild`=17658 WHERE `guid` IN (364, 393, 1507, 1953, 2102, 3586, 3953, 4314, 4510, 4516, 4517, 4518, 4519, 4520, 4596, 6783, 6955, 6960, 6965, 6973, 6994, 7034, 9948, 10053, 10069, 10096, 10100, 10218, 10678, 10679, 11832, 11833, 12209, 12450, 12634, 12641, 12642, 12645, 13635, 15421, 17230, 17269, 17337, 21059, 21631, 22655, 23169, 25326, 26351, 26354, 26427, 27677, 28892, 28908, 28911, 28913, 28915, 28952, 28954, 28956, 28991, 29008, 29024, 29027, 29562, 29565, 32320, 32511, 32644, 33486, 35351, 40661, 40663, 40664, 40666, 40667, 40668, 41471, 42079, 42080, 42081, 42082, 42083, 42084, 42085, 42086, 42087, 42088, 42089, 42486, 42507, 42652, 43240, 43393, 44762, 44763, 44787, 44997, 44998, 44999, 45000, 45288, 45612, 46106, 49390, 49391, 49532, 50022, 50044, 50065, 50169, 50171, 50186, 55989, 56012, 56018, 56026, 56037, 56038, 56157, 56956, 57084, 57100, 57104, 57106, 57110, 57119, 57120, 57123, 57124, 58357, 58521, 60596, 60824, 62024, 62371, 63175, 63314, 63757, 64172, 64181, 64198, 64223, 64264, 64286, 64292, 64296, 64298, 64314, 64315, 64320, 64336, 64349, 64376, 64384, 64400, 64405, 64415, 64741, 65119, 65353, 65354, 65516, 65549, 66634, 66635, 66841, 67636, 85947, 85949, 85950, 86556, 86892, 87138, 87318, 87359, 87972, 121573, 121575, 160017, 160021, 160024, 160041, 160061, 160079, 160084, 160320, 160333, 160352, 160383, 160396, 160602, 160638, 160644, 160654);
diff --git a/sql/updates/world/2014_05_12_00_world_misc.sql b/sql/updates/world/2014_05_12_00_world_misc.sql
new file mode 100644
index 00000000000..4273921e1b6
--- /dev/null
+++ b/sql/updates/world/2014_05_12_00_world_misc.sql
@@ -0,0 +1,77 @@
+--
+-- Add missing gossip menus for horde npcs
+DELETE FROM `gossip_menu` WHERE `entry` in (10419,10420,10421,10425,10426);
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
+(10419, 14458),-- Thunder Bluff
+(10420, 14459), -- Undercity
+(10421, 14460), -- Ogrimmar
+(10425, 14464), -- Sen'Jin
+(10426, 14465); -- Silvermoon
+
+-- add missing gossip options to horde vendors and remove a duplicate menu option from one of the alliance vendors which all have same text and this option is never displayed to players anyway its just for the condition for vendor.
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=10417 AND `id`=1 OR `menu_id` in (10419,10420,10421,10425,10426);
+INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`) VALUES
+(10419, 0, 1, 'I want to browse your goods.', 3, 128, 0, 0, 0, 0, ''),
+(10420, 0, 1, 'I want to browse your goods.', 3, 128, 0, 0, 0, 0, ''),
+(10421, 0, 1, 'I want to browse your goods.', 3, 128, 0, 0, 0, 0, ''),
+(10425, 0, 1, 'I want to browse your goods.', 3, 128, 0, 0, 0, 0, ''),
+(10426, 0, 1, 'I want to browse your goods.', 3, 128, 0, 0, 0, 0, '');
+
+-- Update creature template with missing gossip menu ids for horde vendors
+UPDATE `creature_template` SET `gossip_menu_id`=10426 WHERE `entry`=33557;
+UPDATE `creature_template` SET `gossip_menu_id`=10420 WHERE `entry`=33555;
+UPDATE `creature_template` SET `gossip_menu_id`=10421 WHERE `entry`=33553;
+UPDATE `creature_template` SET `gossip_menu_id`=10419 WHERE `entry`=33556;
+UPDATE `creature_template` SET `gossip_menu_id`=10425 WHERE `entry`=33554;
+
+-- Conditions for argent tournament vendors so they will not allow player to use vendor until they are a champion of that faction
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup` IN(10417,10418,10422,10423,10424);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15, 10419, 0, 0, 0, 17, 0, 2786, 0, 0, 0, 0, 0, '', 'Only allow champions of Thunderbluff to access vendor'),
+(15, 10420, 0, 0, 0, 17, 0, 2787, 0, 0, 0, 0, 0, '', 'Only allow champions of Undercity to access vendor'),
+(15, 10421, 0, 0, 0, 17, 0, 2783, 0, 0, 0, 0, 0, '', 'Only allow champions of Ogrimmar to access vendor'),
+(15, 10425, 0, 0, 0, 17, 0, 2784, 0, 0, 0, 0, 0, '', 'Only allow champions of Sen Jin to access vendor'),
+(15, 10426, 0, 0, 0, 17, 0, 2785, 0, 0, 0, 0, 0, '', 'Only allow champions of Silvermoon to access vendor'),
+(15, 10417, 0, 0, 0, 17, 0, 2781, 0, 0, 0, 0, 0, '', 'Only allow champions of Stowmwind to access vendor'),
+(15, 10418, 0, 0, 0, 17, 0, 2780, 0, 0, 0, 0, 0, '', 'Only allow champions of Ironforge to access vendor'),
+(15, 10422, 0, 0, 0, 17, 0, 2778, 0, 0, 0, 0, 0, '', 'Only allow champions of Exodar to access vendor'),
+(15, 10423, 0, 0, 0, 17, 0, 2779, 0, 0, 0, 0, 0, '', 'Only allow champions of Gnomeregan to access vendor'),
+(15, 10424, 0, 0, 0, 17, 0, 2777, 0, 0, 0, 0, 0, '', 'Only allow champions of Darnassus to access vendor');
+
+-- Add missing versions of mounts for 5 champions seals and 500g to vendors, the versions which require rep to buy which are intended for player who is not member of that faction
+DELETE FROM `npc_vendor` WHERE `item` IN(46758,46756,46759,46762,46763,46761,46764,46755,46760,46757);
+INSERT INTO `npc_vendor` (`entry`, `slot`, `item`, `maxcount`, `incrtime`, `ExtendedCost`) VALUES
+(33307, 0, 46758, 0, 0, 2671), -- Stormwind (Non Human) - Human version 46752
+(33657, 0, 46756, 0, 0, 2671), -- Exodar (Non Dreanei) - Dreanei version 46745
+(33653, 0, 46759, 0, 0, 2671), -- Darnassus (Non Night elf) - Night elf version 46744
+(33310, 0, 46762, 0, 0, 2671), -- Iron Forge (Non Dwarf) - Dwarf version 46748
+(33650, 0, 46763, 0, 0, 2671), -- Gnomeregan (Non Gnome) - Gnome version 46747
+(33557, 0, 46761, 0, 0, 2671), -- Silvermoon (Non Blood elf) - Blood Elf version 46751
+(33555, 0, 46764, 0, 0, 2671), -- Undercity (Non Undead) - Undead version 46746
+(33556, 0, 46755, 0, 0, 2671), -- Thunderbluff (Non Tauren) - Tauren version 46750
+(33554, 0, 46760, 0, 0, 2671), -- Sen Jin (Non Troll) - Troll version 46743
+(33553, 0, 46757, 0, 0, 2671); -- Orgrimmar (Non Orc) - Orchish version 46749
+
+-- Conditions to specify which version of mounts to sell, no restriction if own race, requires exhalted if not this only applys to the mounts for 5 seals and 500g not the ones for 100 seals
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=23 AND `SourceGroup` IN(33307,33657,33653,33310,33650,33557,33555,33556,33554,33555);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(23, 33307, 46758, 0, 0, 16, 0, 1, 0, 0, 1, 0, 0, '', 'Only Sell to Non Humans'),
+(23, 33307, 46752, 0, 0, 16, 0, 1, 0, 0, 0, 0, 0, '', 'Only Sell to Humans'),
+(23, 33657, 46756, 0, 0, 16, 0, 1024, 0, 0, 1, 0, 0, '', 'Only Sell to Non Dreanei'),
+(23, 33657, 46745, 0, 0, 16, 0, 1024, 0, 0, 0, 0, 0, '', 'Only Sell to Dreanei'),
+(23, 33653, 46759, 0, 0, 16, 0, 8, 0, 0, 1, 0, 0, '', 'Only Sell to Non Night elf'),
+(23, 33653, 46744, 0, 0, 16, 0, 8, 0, 0, 0, 0, 0, '', 'Only Sell to Night elf'),
+(23, 33310, 46762, 0, 0, 16, 0, 4, 0, 0, 1, 0, 0, '', 'Only Sell to Non Dwarf'),
+(23, 33310, 46748, 0, 0, 16, 0, 4, 0, 0, 0, 0, 0, '', 'Only Sell to Dwarf'),
+(23, 33650, 46753, 0, 0, 16, 0, 64, 0, 0, 1, 0, 0, '', 'Only Sell to Non Gnome'),
+(23, 33650, 46747, 0, 0, 16, 0, 64, 0, 0, 0, 0, 0, '', 'Only Sell to Gnome'),
+(23, 33557, 46761, 0, 0, 16, 0, 512, 0, 0, 1, 0, 0, '', 'Only Sell to Non Blood elf'),
+(23, 33557, 46751, 0, 0, 16, 0, 512, 0, 0, 0, 0, 0, '', 'Only Sell to Blood elf'),
+(23, 33555, 46764, 0, 0, 16, 0, 16, 0, 0, 1, 0, 0, '', 'Only Sell to Non Undead'),
+(23, 33555, 46746, 0, 0, 16, 0, 16, 0, 0, 0, 0, 0, '', 'Only Sell to Undead'),
+(23, 33556, 46755, 0, 0, 16, 0, 32, 0, 0, 1, 0, 0, '', 'Only Sell to Non Tauren'),
+(23, 33556, 46750, 0, 0, 16, 0, 32, 0, 0, 0, 0, 0, '', 'Only Sell to Tauren'),
+(23, 33554, 46760, 0, 0, 16, 0, 128, 0, 0, 1, 0, 0, '', 'Only Sell to Non Troll'),
+(23, 33554, 46743, 0, 0, 16, 0, 128, 0, 0, 0, 0, 0, '', 'Only Sell to Troll'),
+(23, 33657, 46757, 0, 0, 16, 0, 2, 0, 0, 1, 0, 0, '', 'Only Sell to Non Orc'),
+(23, 33653, 46749, 0, 0, 16, 0, 2, 0, 0, 0, 0, 0, '', 'Only Sell to Orc');
diff --git a/sql/updates/world/2014_05_12_01_world_creature_template.sql b/sql/updates/world/2014_05_12_01_world_creature_template.sql
new file mode 100644
index 00000000000..2367789b6e4
--- /dev/null
+++ b/sql/updates/world/2014_05_12_01_world_creature_template.sql
@@ -0,0 +1,2 @@
+-- update Antipersonnel Cannon (1) immune mask to be the same as lvl 70 version
+UPDATE `creature_template` SET `mechanic_immune_mask`=`mechanic_immune_mask`|2|8|32|64|256|512|1024|4096|8192|65536|262144|8388608|268435456 WHERE `entry`=32795;
diff --git a/sql/updates/world/2014_05_13_00_world_conditions.sql b/sql/updates/world/2014_05_13_00_world_conditions.sql
new file mode 100644
index 00000000000..75fd2e1a950
--- /dev/null
+++ b/sql/updates/world/2014_05_13_00_world_conditions.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `conditions` SET `SourceEntry`=46763 WHERE `SourceEntry`=46753;
diff --git a/sql/updates/world/2014_05_18_00_world_misc.sql b/sql/updates/world/2014_05_18_00_world_misc.sql
new file mode 100644
index 00000000000..fe0b59dc32f
--- /dev/null
+++ b/sql/updates/world/2014_05_18_00_world_misc.sql
@@ -0,0 +1,17 @@
+--
+UPDATE `creature_template` SET `npcflag`=3, `AIName`='SmartAI' WHERE `entry`=37120;
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=10910 AND `id`=1;
+INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`) VALUES
+(10910, 1, 'I must ask that you reforge Shadow''s Edge for me, Highlord Mograine.', 37855, 1, 1);
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=37120;
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(37120, 0, 0, 0, 62, 0, 100, 0, 10910, 1, 0, 0, 11, 72995, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Highlord Darion Mograine - On Gossip Option 1 Selected - Cast Shadow''s Edge'),
+(37120, 0, 1, 0, 62, 0, 100, 0, 10910, 1, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Highlord Darion Mograine - On Gossip Option 1 Selected - Close Gossip');
+
+DELETE FROM `conditions` WHERE `SourceGroup`=10910;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15, 10910, 1, 0, 0, 8, 0, 24912, 0, 0, 1, 0, 0, '', 'Highlord Darion Mograine: Hide Gossip option if player has quest 24912 rewarded'),
+(15, 10910, 1, 0, 0, 8, 0, 24743, 0, 0, 0, 0, 0, '', 'Highlord Darion Mograine: Show Gossip option if player has quest 24743 rewarded'),
+(15, 10910, 1, 0, 0, 2, 0, 49888, 1, 0, 1, 0, 0, '', 'Highlord Darion Mograine: Show Gossip option if player does not have Shadow''s Edge');
diff --git a/sql/updates/world/2014_05_18_01_world_misc.sql b/sql/updates/world/2014_05_18_01_world_misc.sql
new file mode 100644
index 00000000000..66df66dc7b5
--- /dev/null
+++ b/sql/updates/world/2014_05_18_01_world_misc.sql
@@ -0,0 +1,37 @@
+--
+SET @ENTRY := 27914;
+UPDATE `creature_template` SET `gossip_menu_id`=9619, `npcflag`=129 WHERE `entry`=@ENTRY;
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=9619;
+INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextID`) VALUES
+(9619, 0, 0, 'How does this work?', 27298, 1, 1, 9620, 0, 0, 0, '', 0),
+(9619, 1, 1, 'Show me what you have to trade.', 27299, 3, 128, 0, 0, 0, 0, '', 0);
+
+DELETE FROM `gossip_menu` WHERE `entry` IN (9619,9620) AND `text_id` IN (13005,13006);
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
+(9619, 13005),
+(9620, 13006);
+
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES
+(@ENTRY, 0, 0, 'I have arrived. Shall we set to work, then?', 12, 0, 100, 0, 0, 0, 'Ethereal Soul-Trader', 27295),
+(@ENTRY, 1, 0, 'Ah, more essence to capture...', 12, 0, 100, 0, 0, 0, 'Ethereal Soul-Trader', 27336),
+(@ENTRY, 2, 0, 'Here is your share.', 12, 0, 100, 0, 0, 0, 'Ethereal Soul-Trader', 27341);
+
+DELETE FROM `npc_text` WHERE `ID` IN (13005,13006);
+INSERT INTO `npc_text` (`ID`, `text0_0`, `text0_1`, `BroadcastTextID0`, `lang0`, `prob0`, `em0_0`, `em0_1`, `em0_2`, `em0_3`, `em0_4`, `em0_5`, `text1_0`, `text1_1`, `BroadcastTextID1`, `lang1`, `prob1`, `em1_0`, `em1_1`, `em1_2`, `em1_3`, `em1_4`, `em1_5`, `text2_0`, `text2_1`, `BroadcastTextID2`, `lang2`, `prob2`, `em2_0`, `em2_1`, `em2_2`, `em2_3`, `em2_4`, `em2_5`, `text3_0`, `text3_1`, `BroadcastTextID3`, `lang3`, `prob3`, `em3_0`, `em3_1`, `em3_2`, `em3_3`, `em3_4`, `em3_5`, `text4_0`, `text4_1`, `BroadcastTextID4`, `lang4`, `prob4`, `em4_0`, `em4_1`, `em4_2`, `em4_3`, `em4_4`, `em4_5`, `text5_0`, `text5_1`, `BroadcastTextID5`, `lang5`, `prob5`, `em5_0`, `em5_1`, `em5_2`, `em5_3`, `em5_4`, `em5_5`, `text6_0`, `text6_1`, `BroadcastTextID6`, `lang6`, `prob6`, `em6_0`, `em6_1`, `em6_2`, `em6_3`, `em6_4`, `em6_5`, `text7_0`, `text7_1`, `BroadcastTextID7`, `lang7`, `prob7`, `em7_0`, `em7_1`, `em7_2`, `em7_3`, `em7_4`, `em7_5`, `VerifiedBuild`) VALUES
+(13005, 'How may this one help you, $gsir:madame;?', '', 27296, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 18019),
+(13006, 'My business partner slays things; I drain a portion of their essence... a pittance, really; the slightest of slivers. It won''t be missed.$B$BStill, to fulfil my portion of the contract, I pay in Ethereal Credits.$B$BOne may redeem these credits for items I sell at any time. I''m bound to have something that will interest you...', '', 27300, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 18019);
+
+DELETE FROM `npc_vendor` WHERE `entry`=@ENTRY;
+INSERT INTO `npc_vendor` (`entry`, `slot`, `item`, `maxcount`, `incrtime`, `ExtendedCost`) VALUES
+(@ENTRY, 0, 38308, 0, 0, 2411), -- Ethereal Essence Sphere
+(@ENTRY, 1, 38300, 0, 0, 2411), -- Diluted Ethereum Essence
+(@ENTRY, 2, 38294, 0, 0, 2412), -- Ethereal Liqueur
+(@ENTRY, 3, 38291, 0, 0, 2408), -- Ethereal Mutagen
+(@ENTRY, 4, 38163, 0, 0, 2408), -- Soul-Trader's Head Wrap
+(@ENTRY, 5, 38160, 0, 0, 2410), -- Soul-trader's Bindings
+(@ENTRY, 6, 38286, 0, 0, 2407), -- Soul-Trader's Pauldrons
+(@ENTRY, 7, 38285, 0, 0, 2408), -- Soul-Trader's Waistband
+(@ENTRY, 8, 38161, 0, 0, 2409), -- Soul-Trader's Gloves
+(@ENTRY, 9, 38162, 0, 0, 2409); -- Soul-Trader's Boots
diff --git a/sql/updates/world/2014_05_18_02_world_gameobject.sql b/sql/updates/world/2014_05_18_02_world_gameobject.sql
new file mode 100644
index 00000000000..0d3357de2a1
--- /dev/null
+++ b/sql/updates/world/2014_05_18_02_world_gameobject.sql
@@ -0,0 +1,4 @@
+--
+UPDATE `gameobject` SET `position_x`=914.3752, `position_y`=-146.9912, `position_z`=-49.75655, `orientation`=3.68265, `VerifiedBuild`=15595 WHERE `guid`=43097;
+UPDATE `gameobject` SET `position_x`=915.7144, `position_y`=-149.2887, `position_z`=-49.75705, `orientation`=3.647741, `VerifiedBuild`=15595 WHERE `guid`=43098;
+UPDATE `gameobject` SET `position_x`=917.0272, `position_y`=-151.5825, `position_z`=-49.75756, `orientation`=3.647741, `VerifiedBuild`=15595 WHERE `guid`=43099;
diff --git a/sql/updates/world/2014_05_18_03_world_misc.sql b/sql/updates/world/2014_05_18_03_world_misc.sql
new file mode 100644
index 00000000000..86d018dd7b0
--- /dev/null
+++ b/sql/updates/world/2014_05_18_03_world_misc.sql
@@ -0,0 +1,48 @@
+--
+-- Nesingwary Lackey Ear (35188) drop chance fix by nelegalno
+-- Needed for Can't Get Ear-nough... (11867) "turn in only" repeatable quest
+SET @EAR := 35188;
+
+UPDATE `creature_loot_template` SET `ChanceOrQuestChance` = ABS(`ChanceOrQuestChance`) WHERE `item`=@EAR;
+
+-- Clam Master K
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=1 AND `SourceGroup`=25800 AND `SourceEntry`=@EAR;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(1,25800,@EAR,0,0,9,0,11866,0,0,0,0,'',"Nesingwary Lackey Ear drops from Clam Master K only if Ears of Our Enemies quest taken"),
+(1,25800,@EAR,0,1,8,0,11866,0,0,0,0,'',"Nesingwary Lackey Ear drops from Clam Master K only if Ears of Our Enemies quest rewarded");
+
+-- Loot Crazed Poacher
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=1 AND `SourceGroup`=25806 AND `SourceEntry`=@EAR;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(1,25806,@EAR,0,0,9,0,11866,0,0,0,0,'',"Nesingwary Lackey Ear drops from Loot Crazed Poacher only if Ears of Our Enemies quest taken"),
+(1,25806,@EAR,0,1,8,0,11866,0,0,0,0,'',"Nesingwary Lackey Ear drops from Loot Crazed Poacher only if Ears of Our Enemies quest rewarded");
+
+-- Loot Crazed Diver
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=1 AND `SourceGroup`=25836 AND `SourceEntry`=@EAR;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(1,25836,@EAR,0,0,9,0,11866,0,0,0,0,'',"Nesingwary Lackey Ear drops from Loot Crazed Diver only if Ears of Our Enemies quest taken"),
+(1,25836,@EAR,0,1,8,0,11866,0,0,0,0,'',"Nesingwary Lackey Ear drops from Loot Crazed Diver only if Ears of Our Enemies quest rewarded");
+
+-- Northsea Mercenary
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=1 AND `SourceGroup`=25839 AND `SourceEntry`=@EAR;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(1,25839,@EAR,0,0,9,0,11866,0,0,0,0,'',"Nesingwary Lackey Ear drops from Northsea Mercenary only if Ears of Our Enemies quest taken"),
+(1,25839,@EAR,0,1,8,0,11866,0,0,0,0,'',"Nesingwary Lackey Ear drops from Northsea Mercenary only if Ears of Our Enemies quest rewarded");
+
+-- Northsea Thug
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=1 AND `SourceGroup`=25843 AND `SourceEntry`=@EAR;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(1,25843,@EAR,0,0,9,0,11866,0,0,0,0,'',"Nesingwary Lackey Ear drops from Northsea Thug only if Ears of Our Enemies quest taken"),
+(1,25843,@EAR,0,1,8,0,11866,0,0,0,0,'',"Nesingwary Lackey Ear drops from Northsea Thug only if Ears of Our Enemies quest rewarded");
+
+ -- Minion of Kaw
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=1 AND `SourceGroup`=25880 AND `SourceEntry`=@EAR;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(1,25880,@EAR,0,0,9,0,11866,0,0,0,0,'',"Nesingwary Lackey Ear drops from Minion of Kaw only if Ears of Our Enemies quest taken"),
+(1,25880,@EAR,0,1,8,0,11866,0,0,0,0,'',"Nesingwary Lackey Ear drops from Minion of Kaw only if Ears of Our Enemies quest rewarded");
+
+ -- Loot Crazed Hunter
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=1 AND `SourceGroup`=25979 AND `SourceEntry`=@EAR;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(1,25979,@EAR,0,0,9,0,11866,0,0,0,0,'',"Nesingwary Lackey Ear drops from Loot Crazed Hunter only if Ears of Our Enemies quest taken"),
+(1,25979,@EAR,0,1,8,0,11866,0,0,0,0,'',"Nesingwary Lackey Ear drops from Loot Crazed Hunter only if Ears of Our Enemies quest rewarded");
diff --git a/sql/updates/world/2014_05_18_04_world_misc.sql b/sql/updates/world/2014_05_18_04_world_misc.sql
new file mode 100644
index 00000000000..89dc227f7ca
--- /dev/null
+++ b/sql/updates/world/2014_05_18_04_world_misc.sql
@@ -0,0 +1,28 @@
+--
+SET @CGUID := 68279; -- set by TDB team (3)
+SET @OGUID := 6134; -- set by TDB team (2)
+
+DELETE FROM `spell_area` WHERE `spell`=71314;
+INSERT INTO `spell_area` (`spell`, `area`, `quest_start`, `quest_end`, `aura_spell`, `racemask`, `gender`, `autocast`, `quest_start_status`, `quest_end_status`) VALUES
+(71314, 4862, 24559, 24562, 0, 0, 2, 1, 74, 11);
+
+DELETE FROM `creature_addon` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+2;
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(@CGUID+0, 0, 0, 0x10000, 0x1, 0, '71312'),
+(@CGUID+1, 0, 0, 0x10000, 0x1, 0, '71312'),
+(@CGUID+2, 0, 0, 0x10000, 0x1, 0, '71312');
+
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+2;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 36657, 571, 1, 1, 5630.028, 2082.906, 798.1375, 0, 120, 0, 0), -- Sunreaver War Mage (Area: 210)
+(@CGUID+1, 36642, 571, 1, 1, 5630.374, 2087.88, 798.1375, 6.213372, 120, 0, 0), -- Myralion Sunblaze (Area: 210)
+(@CGUID+2, 36657, 571, 1, 1, 5631.038, 2092.561, 798.1375, 6.143559, 120, 0, 0); -- Sunreaver War Mage (Area: 210)
+
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+1;
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@OGUID+0, 202192, 571, 1, 1, 5628.946, 2079.644, 798.0542, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- Sunreaver Banner (Area: 210)
+(@OGUID+1, 202192, 571, 1, 1, 5630.607, 2096.247, 798.0542, 5.881761, 0, 0, 0, 1, 120, 255, 1); -- Sunreaver Banner (Area: 210)
+
+DELETE FROM `gameobject_template` WHERE `entry`=202192;
+INSERT INTO `gameobject_template` (`entry`, `type`, `displayId`, `name`, `IconName`, `castBarCaption`, `unk1`, `faction`, `flags`, `size`, `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `data0`, `data1`, `data2`, `data3`, `data4`, `data5`, `data6`, `data7`, `data8`, `data9`, `data10`, `data11`, `data12`, `data13`, `data14`, `data15`, `data16`, `data17`, `data18`, `data19`, `data20`, `data21`, `data22`, `data23`, `AIName`, `ScriptName`, `VerifiedBuild`) VALUES
+(202192, 5, 6794, 'Sunreaver Banner', '', '', '', 0, 0, 0.8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 16992);
diff --git a/sql/updates/world/2014_05_19_00_world_misc.sql b/sql/updates/world/2014_05_19_00_world_misc.sql
new file mode 100644
index 00000000000..7879aca132d
--- /dev/null
+++ b/sql/updates/world/2014_05_19_00_world_misc.sql
@@ -0,0 +1,10 @@
+--
+UPDATE `smart_scripts` SET `event_phase_mask`=0 WHERE `entryorguid`=24539 AND `source_type`=0 AND `id` IN(5,6) AND `link`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=2453900 AND `source_type`=9 AND `id`=5 AND `link`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=2453901 AND `source_type`=9 AND `id`=4 AND `link`=0;
+UPDATE `smart_scripts` SET `event_param3`=0, `event_param4`=0 WHERE `entryorguid`=24539 AND `source_type`=0 AND `id`=4 AND `link`=0;
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=24539;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(22, 6, 24539, 0, 0, 38, 1, 50, 4, 0, 0, 0, 0, '', 'Silvermoon Harry - Only run SAI if silvermoon harry hp at 50% or lower'),
+(22, 6, 24539, 0, 0, 9, 0, 11464, 0, 0, 0, 0, 0, '', 'Silvermoon Harry - Only run SAI if player has gambling debt taken');
diff --git a/sql/updates/world/2014_05_19_01_world_misc.sql b/sql/updates/world/2014_05_19_01_world_misc.sql
new file mode 100644
index 00000000000..d25e73f245e
--- /dev/null
+++ b/sql/updates/world/2014_05_19_01_world_misc.sql
@@ -0,0 +1,8 @@
+--
+DELETE FROM `smart_scripts` WHERE `entryorguid`=26737 AND `source_type`=0 AND `id`=5;
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(26737, 0, 5, 0, 25, 0, 100, 0, 0, 0, 0, 0, 19, 537133824, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Crazed Mana-Surge - On Reset - Remove Unit Flags (UNK_29 / STUNNED / IMMUNE TO NPC / IMMUNE TO PC)');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=26737;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(22, 6, 26737, 0, 0, 1, 1, 29266, 0, 0, 1, 0, 0, '', 'Crazed Mana Surge only run SAI if Crazed mana surge does not have aura Permanent Feign Death');
diff --git a/sql/updates/world/2014_05_23_00_world_spell_script_names.sql b/sql/updates/world/2014_05_23_00_world_spell_script_names.sql
new file mode 100644
index 00000000000..22d792e6f72
--- /dev/null
+++ b/sql/updates/world/2014_05_23_00_world_spell_script_names.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_script_names` WHERE `spell_id`=69232;
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(69232,'spell_tyrannus_rimefang_icy_blast');
diff --git a/sql/updates/world/2014_05_23_01_world_trinity_string.sql b/sql/updates/world/2014_05_23_01_world_trinity_string.sql
new file mode 100644
index 00000000000..e05d36f601c
--- /dev/null
+++ b/sql/updates/world/2014_05_23_01_world_trinity_string.sql
@@ -0,0 +1,3 @@
+DELETE FROM `trinity_string` WHERE `entry`=11008;
+INSERT INTO `trinity_string` (`entry`, `content_default`) VALUES
+(11008, 'InhabitType: %u');
diff --git a/sql/updates/world/2014_05_30_00_world_quest_update.sql b/sql/updates/world/2014_05_30_00_world_quest_update.sql
new file mode 100644
index 00000000000..a44baf75074
--- /dev/null
+++ b/sql/updates/world/2014_05_30_00_world_quest_update.sql
@@ -0,0 +1 @@
+UPDATE `quest_template` SET `NextQuestId`=1106,`ExclusiveGroup`=-1104 WHERE `Id` IN (1104,1105);
diff --git a/src/server/authserver/Authentication/AuthCodes.cpp b/src/server/authserver/Authentication/AuthCodes.cpp
index bb278dd6653..55517884b8e 100644
--- a/src/server/authserver/Authentication/AuthCodes.cpp
+++ b/src/server/authserver/Authentication/AuthCodes.cpp
@@ -79,4 +79,4 @@ namespace AuthHelper
return NULL;
}
-};
+}
diff --git a/src/server/authserver/Authentication/AuthCodes.h b/src/server/authserver/Authentication/AuthCodes.h
index 5e6522f8981..97b4779da0e 100644
--- a/src/server/authserver/Authentication/AuthCodes.h
+++ b/src/server/authserver/Authentication/AuthCodes.h
@@ -92,6 +92,6 @@ namespace AuthHelper
bool IsAcceptedClientBuild(int build);
bool IsPostBCAcceptedClientBuild(int build);
bool IsPreBCAcceptedClientBuild(int build);
-};
+}
#endif
diff --git a/src/server/collision/Maps/MapTree.cpp b/src/server/collision/Maps/MapTree.cpp
index bb57079c389..d592d795125 100644
--- a/src/server/collision/Maps/MapTree.cpp
+++ b/src/server/collision/Maps/MapTree.cpp
@@ -157,8 +157,7 @@ namespace VMAP
{
float maxDist = (pos2 - pos1).magnitude();
// return false if distance is over max float, in case of cheater teleporting to the end of the universe
- if (maxDist == std::numeric_limits<float>::max() ||
- maxDist == std::numeric_limits<float>::infinity())
+ if (maxDist == std::numeric_limits<float>::max() || !std::isfinite(maxDist))
return false;
// valid map coords should *never ever* produce float overflow, but this would produce NaNs too
diff --git a/src/server/collision/Models/GameObjectModel.cpp b/src/server/collision/Models/GameObjectModel.cpp
index 1b99e282132..de97943bb37 100644
--- a/src/server/collision/Models/GameObjectModel.cpp
+++ b/src/server/collision/Models/GameObjectModel.cpp
@@ -140,6 +140,7 @@ bool GameObjectModel::initialize(const GameObject& go, const GameObjectDisplayIn
}
#endif
+ owner = &go;
return true;
}
@@ -161,7 +162,7 @@ GameObjectModel* GameObjectModel::Create(const GameObject& go)
bool GameObjectModel::intersectRay(const G3D::Ray& ray, float& MaxDist, bool StopAtFirstHit, uint32 ph_mask) const
{
- if (!(phasemask & ph_mask))
+ if (!(phasemask & ph_mask) || !owner->isSpawned())
return false;
float time = ray.intersectionTime(iBound);
diff --git a/src/server/collision/Models/GameObjectModel.h b/src/server/collision/Models/GameObjectModel.h
index 6088b924343..99c9b1337b3 100644
--- a/src/server/collision/Models/GameObjectModel.h
+++ b/src/server/collision/Models/GameObjectModel.h
@@ -44,8 +44,9 @@ class GameObjectModel /*, public Intersectable*/
float iInvScale;
float iScale;
VMAP::WorldModel* iModel;
+ GameObject const* owner;
- GameObjectModel() : phasemask(0), iInvScale(0), iScale(0), iModel(NULL) { }
+ GameObjectModel() : phasemask(0), iInvScale(0), iScale(0), iModel(NULL), owner(NULL) { }
bool initialize(const GameObject& go, const GameObjectDisplayInfoEntry& info);
public:
diff --git a/src/server/game/AI/CoreAI/PetAI.cpp b/src/server/game/AI/CoreAI/PetAI.cpp
index e2eeaf880ad..7c640f9a66d 100644
--- a/src/server/game/AI/CoreAI/PetAI.cpp
+++ b/src/server/game/AI/CoreAI/PetAI.cpp
@@ -89,7 +89,8 @@ void PetAI::UpdateAI(uint32 diff)
if (me->GetVictim() && me->EnsureVictim()->IsAlive())
{
// is only necessary to stop casting, the pet must not exit combat
- if (me->EnsureVictim()->HasBreakableByDamageCrowdControlAura(me))
+ if (!me->GetCurrentSpell(CURRENT_CHANNELED_SPELL) && // ignore channeled spells (Pin, Seduction)
+ me->EnsureVictim()->HasBreakableByDamageCrowdControlAura(me))
{
me->InterruptNonMeleeSpells(false);
return;
@@ -459,9 +460,6 @@ void PetAI::DoAttack(Unit* target, bool chase)
if (me->Attack(target, true))
{
- if (Unit* owner = me->GetOwner())
- owner->SetInCombatWith(target);
-
// Play sound to let the player know the pet is attacking something it picked on its own
if (me->HasReactState(REACT_AGGRESSIVE) && !me->GetCharmInfo()->IsCommandAttack())
me->SendPetAIReaction(me->GetGUID());
diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp
index 8bf34527769..cb32740e068 100644
--- a/src/server/game/AI/CoreAI/UnitAI.cpp
+++ b/src/server/game/AI/CoreAI/UnitAI.cpp
@@ -28,7 +28,6 @@
void UnitAI::AttackStart(Unit* victim)
{
-
if (victim && me->Attack(victim, true))
me->GetMotionMaster()->MoveChase(victim);
}
@@ -104,7 +103,7 @@ void UnitAI::DoAddAuraToAllHostilePlayers(uint32 spellid)
ThreatContainer::StorageType threatlist = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
{
- if (Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid()))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()))
if (unit->GetTypeId() == TYPEID_PLAYER)
me->AddAura(spellid, unit);
}
@@ -118,7 +117,7 @@ void UnitAI::DoCastToAllHostilePlayers(uint32 spellid, bool triggered)
ThreatContainer::StorageType threatlist = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
{
- if (Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid()))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()))
if (unit->GetTypeId() == TYPEID_PLAYER)
me->CastSpell(unit, spellid, triggered);
}
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
index 36c1d384693..06820b03218 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
@@ -37,7 +37,7 @@ void SummonList::DoZoneInCombat(uint32 entry)
{
for (StorageType::iterator i = storage_.begin(); i != storage_.end();)
{
- Creature* summon = Unit::GetCreature(*me, *i);
+ Creature* summon = ObjectAccessor::GetCreature(*me, *i);
++i;
if (summon && summon->IsAIEnabled
&& (!entry || summon->GetEntry() == entry))
@@ -51,7 +51,7 @@ void SummonList::DespawnEntry(uint32 entry)
{
for (StorageType::iterator i = storage_.begin(); i != storage_.end();)
{
- Creature* summon = Unit::GetCreature(*me, *i);
+ Creature* summon = ObjectAccessor::GetCreature(*me, *i);
if (!summon)
i = storage_.erase(i);
else if (summon->GetEntry() == entry)
@@ -68,7 +68,7 @@ void SummonList::DespawnAll()
{
while (!storage_.empty())
{
- Creature* summon = Unit::GetCreature(*me, storage_.front());
+ Creature* summon = ObjectAccessor::GetCreature(*me, storage_.front());
storage_.pop_front();
if (summon)
summon->DespawnOrUnsummon();
@@ -79,7 +79,7 @@ void SummonList::RemoveNotExisting()
{
for (StorageType::iterator i = storage_.begin(); i != storage_.end();)
{
- if (Unit::GetCreature(*me, *i))
+ if (ObjectAccessor::GetCreature(*me, *i))
++i;
else
i = storage_.erase(i);
@@ -90,7 +90,7 @@ bool SummonList::HasEntry(uint32 entry) const
{
for (StorageType::const_iterator i = storage_.begin(); i != storage_.end(); ++i)
{
- Creature* summon = Unit::GetCreature(*me, *i);
+ Creature* summon = ObjectAccessor::GetCreature(*me, *i);
if (summon && summon->GetEntry() == entry)
return true;
}
@@ -271,7 +271,7 @@ void ScriptedAI::DoResetThreat()
for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
{
- Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (unit && DoGetThreat(unit))
DoModifyThreatPercent(unit, -100);
}
@@ -478,10 +478,7 @@ void BossAI::_JustDied()
events.Reset();
summons.DespawnAll();
if (instance)
- {
instance->SetBossState(_bossId, DONE);
- instance->SaveToDB();
- }
}
void BossAI::_EnterCombat()
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
index cee6ba3c379..c9f7f342183 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
@@ -98,7 +98,7 @@ public:
Trinity::Containers::RandomResizeList<uint64, Predicate>(listCopy, predicate, max);
for (StorageType::iterator i = listCopy.begin(); i != listCopy.end(); )
{
- Creature* summon = Unit::GetCreature(*me, *i++);
+ Creature* summon = ObjectAccessor::GetCreature(*me, *i++);
if (summon && summon->IsAIEnabled)
summon->AI()->DoAction(info);
}
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp
index 098f3130fed..ecaa20284d7 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -437,8 +437,11 @@ void SmartAI::EnterEvadeMode()
}
else if (mFollowGuid)
{
- if (Unit* target = me->GetUnit(*me, mFollowGuid))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, mFollowGuid))
me->GetMotionMaster()->MoveFollow(target, mFollowDist, mFollowAngle);
+
+ // evade is not cleared in MoveFollow, so we can't keep it
+ me->ClearUnitState(UNIT_STATE_EVADE);
}
else
me->GetMotionMaster()->MoveTargetedHome();
@@ -618,10 +621,7 @@ void SmartAI::DamageTaken(Unit* doneBy, uint32& damage)
{
GetScript()->ProcessEventsFor(SMART_EVENT_DAMAGED, doneBy, damage);
if (mInvincibilityHpLevel && (damage >= me->GetHealth() - mInvincibilityHpLevel))
- {
- damage = 0;
- me->SetHealth(mInvincibilityHpLevel);
- }
+ damage = me->GetHealth() - mInvincibilityHpLevel; // damage should not be nullified, because of player damage req.
}
void SmartAI::HealReceived(Unit* doneBy, uint32& addhealth)
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index dff9ddbaf2f..2647368559c 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -429,7 +429,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
ThreatContainer::StorageType threatList = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator i = threatList.begin(); i != threatList.end(); ++i)
{
- if (Unit* target = Unit::GetUnit(*me, (*i)->getUnitGuid()))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()))
{
me->getThreatManager().modifyThreatPercent(target, e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_THREAT_ALL_PCT: Creature guidLow %u modify threat for unit %u, value %i",
@@ -2602,7 +2602,7 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder const& e, Unit* invoker /*
{
ThreatContainer::StorageType threatList = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator i = threatList.begin(); i != threatList.end(); ++i)
- if (Unit* temp = Unit::GetUnit(*me, (*i)->getUnitGuid()))
+ if (Unit* temp = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()))
l->push_back(temp);
}
break;
@@ -3462,16 +3462,10 @@ void SmartScript::OnInitialize(WorldObject* obj, AreaTriggerEntry const* at)
void SmartScript::OnMoveInLineOfSight(Unit* who)
{
- ProcessEventsFor(SMART_EVENT_OOC_LOS, who);
-
if (!me)
return;
- if (me->GetVictim())
- return;
-
- ProcessEventsFor(SMART_EVENT_IC_LOS, who);
-
+ ProcessEventsFor(me->IsInCombat() ? SMART_EVENT_IC_LOS : SMART_EVENT_OOC_LOS, who);
}
/*
diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp
index 96f13dcd0ac..3f9c6cf0617 100644
--- a/src/server/game/Battlefield/Battlefield.cpp
+++ b/src/server/game/Battlefield/Battlefield.cpp
@@ -54,7 +54,7 @@ Battlefield::Battlefield()
m_uiKickAfkPlayersTimer = 1000;
- m_LastResurectTimer = 30 * IN_MILLISECONDS;
+ m_LastResurrectTimer = 30 * IN_MILLISECONDS;
m_StartGroupingTimer = 0;
m_StartGrouping = false;
StalkerGuid = 0;
@@ -184,15 +184,15 @@ bool Battlefield::Update(uint32 diff)
}
- if (m_LastResurectTimer <= diff)
+ if (m_LastResurrectTimer <= diff)
{
for (uint8 i = 0; i < m_GraveyardList.size(); i++)
if (GetGraveyardById(i))
m_GraveyardList[i]->Resurrect();
- m_LastResurectTimer = RESURRECTION_INTERVAL;
+ m_LastResurrectTimer = RESURRECTION_INTERVAL;
}
else
- m_LastResurectTimer -= diff;
+ m_LastResurrectTimer -= diff;
return objective_changed;
}
@@ -632,7 +632,7 @@ void Battlefield::RemovePlayerFromResurrectQueue(uint64 playerGuid)
void Battlefield::SendAreaSpiritHealerQueryOpcode(Player* player, uint64 guid)
{
WorldPacket data(SMSG_AREA_SPIRIT_HEALER_TIME, 12);
- uint32 time = m_LastResurectTimer; // resurrect every 30 seconds
+ uint32 time = m_LastResurrectTimer; // resurrect every 30 seconds
data << guid << time;
ASSERT(player && player->GetSession());
@@ -711,7 +711,7 @@ void BfGraveyard::Resurrect()
if (Creature* spirit = m_Bf->GetCreature(m_SpiritGuide[m_ControlTeam]))
spirit->CastSpell(spirit, SPELL_SPIRIT_HEAL, true);
- // Resurect player
+ // Resurrect player
player->CastSpell(player, SPELL_RESURRECTION_VISUAL, true);
player->ResurrectPlayer(1.0f);
player->CastSpell(player, 6962, true);
diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h
index 6c9e653c510..296c48b0697 100644
--- a/src/server/game/Battlefield/Battlefield.h
+++ b/src/server/game/Battlefield/Battlefield.h
@@ -173,7 +173,7 @@ class BfGraveyard
// Check if this graveyard has a spirit guide
bool HasNpc(uint64 guid);
- // Check if a player is in this graveyard's ressurect queue
+ // Check if a player is in this graveyard's resurrect queue
bool HasPlayer(uint64 guid) { return m_ResurrectQueue.find(guid) != m_ResurrectQueue.end(); }
// Get the graveyard's ID.
@@ -383,7 +383,7 @@ class Battlefield : public ZoneScript
// Graveyard variables
GraveyardVect m_GraveyardList; // Vector witch contain the different GY of the battle
- uint32 m_LastResurectTimer; // Timer for resurect player every 30 sec
+ uint32 m_LastResurrectTimer; // Timer for resurrect player every 30 sec
uint32 m_StartGroupingTimer; // Timer for invite players in area 15 minute before start battle
bool m_StartGrouping; // bool for know if all players in area has been invited
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index 97320373e16..ca48ffb3a14 100644
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -269,7 +269,7 @@ void Battleground::Update(uint32 diff)
}
else
{
- _ProcessRessurect(diff);
+ _ProcessResurrect(diff);
if (sBattlegroundMgr->GetPrematureFinishTime() && (GetPlayersCountByTeam(ALLIANCE) < GetMinPlayersPerTeam() || GetPlayersCountByTeam(HORDE) < GetMinPlayersPerTeam()))
_ProcessProgress(diff);
else if (m_PrematureCountDown)
@@ -334,10 +334,10 @@ inline void Battleground::_ProcessOfflineQueue()
}
}
-inline void Battleground::_ProcessRessurect(uint32 diff)
+inline void Battleground::_ProcessResurrect(uint32 diff)
{
// *********************************************************
- // *** BATTLEGROUND RESSURECTION SYSTEM ***
+ // *** BATTLEGROUND RESURRECTION SYSTEM ***
// *********************************************************
// this should be handled by spell system
m_LastResurrectTime += diff;
diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h
index 2cbf8bd0918..4256e2fc094 100644
--- a/src/server/game/Battlegrounds/Battleground.h
+++ b/src/server/game/Battlegrounds/Battleground.h
@@ -556,7 +556,7 @@ class Battleground
Player* _GetPlayerForTeam(uint32 teamId, BattlegroundPlayerMap::const_iterator itr, const char* context) const;
void _ProcessOfflineQueue();
- void _ProcessRessurect(uint32 diff);
+ void _ProcessResurrect(uint32 diff);
void _ProcessProgress(uint32 diff);
void _ProcessLeave(uint32 diff);
void _ProcessJoin(uint32 diff);
diff --git a/src/server/game/Calendar/CalendarMgr.cpp b/src/server/game/Calendar/CalendarMgr.cpp
index 52ed50f3948..a4cb972e625 100644
--- a/src/server/game/Calendar/CalendarMgr.cpp
+++ b/src/server/game/Calendar/CalendarMgr.cpp
@@ -17,7 +17,6 @@
#include "CalendarMgr.h"
#include "QueryResult.h"
-#include "DatabaseEnv.h"
#include "Log.h"
#include "Player.h"
#include "GuildMgr.h"
@@ -128,6 +127,12 @@ void CalendarMgr::AddEvent(CalendarEvent* calendarEvent, CalendarSendEventType s
void CalendarMgr::AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite)
{
+ SQLTransaction dummy;
+ AddInvite(calendarEvent, invite, dummy);
+}
+
+void CalendarMgr::AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite, SQLTransaction& trans)
+{
if (!calendarEvent->IsGuildAnnouncement())
SendCalendarEventInvite(*invite);
@@ -137,7 +142,7 @@ void CalendarMgr::AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite
if (!calendarEvent->IsGuildAnnouncement())
{
_invites[invite->GetEventId()].push_back(invite);
- UpdateInvite(invite);
+ UpdateInvite(invite, trans);
}
}
@@ -221,7 +226,6 @@ void CalendarMgr::RemoveInvite(uint64 inviteId, uint64 eventId, uint64 /*remover
void CalendarMgr::UpdateEvent(CalendarEvent* calendarEvent)
{
- SQLTransaction trans = CharacterDatabase.BeginTransaction();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_CALENDAR_EVENT);
stmt->setUInt64(0, calendarEvent->GetEventId());
stmt->setUInt32(1, GUID_LOPART(calendarEvent->GetCreatorGUID()));
@@ -232,13 +236,17 @@ void CalendarMgr::UpdateEvent(CalendarEvent* calendarEvent)
stmt->setUInt32(6, uint32(calendarEvent->GetEventTime()));
stmt->setUInt32(7, calendarEvent->GetFlags());
stmt->setUInt32(8, calendarEvent->GetTimeZoneTime()); // correct?
- trans->Append(stmt);
- CharacterDatabase.CommitTransaction(trans);
+ CharacterDatabase.Execute(stmt);
}
void CalendarMgr::UpdateInvite(CalendarInvite* invite)
{
- SQLTransaction trans = CharacterDatabase.BeginTransaction();
+ SQLTransaction dummy;
+ UpdateInvite(invite, dummy);
+}
+
+void CalendarMgr::UpdateInvite(CalendarInvite* invite, SQLTransaction& trans)
+{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_CALENDAR_INVITE);
stmt->setUInt64(0, invite->GetInviteId());
stmt->setUInt64(1, invite->GetEventId());
@@ -248,8 +256,7 @@ void CalendarMgr::UpdateInvite(CalendarInvite* invite)
stmt->setUInt32(5, uint32(invite->GetStatusTime()));
stmt->setUInt8(6, invite->GetRank());
stmt->setString(7, invite->GetText());
- trans->Append(stmt);
- CharacterDatabase.CommitTransaction(trans);
+ CharacterDatabase.ExecuteOrAppend(trans, stmt);
}
void CalendarMgr::RemoveAllPlayerEventsAndInvites(uint64 guid)
diff --git a/src/server/game/Calendar/CalendarMgr.h b/src/server/game/Calendar/CalendarMgr.h
index da185d519d5..8f44b013e5c 100644
--- a/src/server/game/Calendar/CalendarMgr.h
+++ b/src/server/game/Calendar/CalendarMgr.h
@@ -20,6 +20,7 @@
#include <ace/Singleton.h>
#include "Common.h"
+#include "DatabaseEnv.h"
#include "WorldPacket.h"
enum CalendarMailAnswers
@@ -305,8 +306,10 @@ class CalendarMgr
void UpdateEvent(CalendarEvent* calendarEvent);
void AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite);
+ void AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite, SQLTransaction& trans);
void RemoveInvite(uint64 inviteId, uint64 eventId, uint64 remover);
void UpdateInvite(CalendarInvite* invite);
+ void UpdateInvite(CalendarInvite* invite, SQLTransaction& trans);
void RemoveAllPlayerEventsAndInvites(uint64 guid);
void RemovePlayerGuildEventsAndSignups(uint64 guid, uint32 guildId);
diff --git a/src/server/game/Chat/Channels/Channel.h b/src/server/game/Chat/Channels/Channel.h
index 9ad6877d929..115e340762e 100644
--- a/src/server/game/Chat/Channels/Channel.h
+++ b/src/server/game/Chat/Channels/Channel.h
@@ -25,7 +25,7 @@
#include "Common.h"
-#include "Opcodes.h"
+#include "WorldSession.h"
#include "WorldPacket.h"
class Player;
diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp
index 9b0465a4536..44f03b6978d 100644
--- a/src/server/game/DataStores/DBCStores.cpp
+++ b/src/server/game/DataStores/DBCStores.cpp
@@ -139,6 +139,7 @@ DBCStorage <MovieEntry> sMovieStore(MovieEntryfmt);
DBCStorage <OverrideSpellDataEntry> sOverrideSpellDataStore(OverrideSpellDatafmt);
+DBCStorage <PowerDisplayEntry> sPowerDisplayStore(PowerDisplayfmt);
DBCStorage <PvPDifficultyEntry> sPvPDifficultyStore(PvPDifficultyfmt);
DBCStorage <QuestSortEntry> sQuestSortStore(QuestSortEntryfmt);
@@ -391,6 +392,7 @@ void LoadDBCStores(const std::string& dataPath)
LoadDBC(availableDbcLocales, bad_dbc_files, sOverrideSpellDataStore, dbcPath, "OverrideSpellData.dbc");
+ LoadDBC(availableDbcLocales, bad_dbc_files, sPowerDisplayStore, dbcPath, "PowerDisplay.dbc");
LoadDBC(availableDbcLocales, bad_dbc_files, sPvPDifficultyStore, dbcPath, "PvpDifficulty.dbc");
for (uint32 i = 0; i < sPvPDifficultyStore.GetNumRows(); ++i)
if (PvPDifficultyEntry const* entry = sPvPDifficultyStore.LookupEntry(i))
diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h
index b77db950541..fe775dfda19 100644
--- a/src/server/game/DataStores/DBCStores.h
+++ b/src/server/game/DataStores/DBCStores.h
@@ -141,6 +141,7 @@ extern DBCStorage <MapEntry> sMapStore;
extern MapDifficultyMap sMapDifficultyMap;
extern DBCStorage <MovieEntry> sMovieStore;
extern DBCStorage <OverrideSpellDataEntry> sOverrideSpellDataStore;
+extern DBCStorage <PowerDisplayEntry> sPowerDisplayStore;
extern DBCStorage <QuestSortEntry> sQuestSortStore;
extern DBCStorage <QuestXPEntry> sQuestXPStore;
extern DBCStorage <QuestFactionRewEntry> sQuestFactionRewardStore;
diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h
index abe7bde4bf5..5d6c8c7aa89 100644
--- a/src/server/game/DataStores/DBCStructure.h
+++ b/src/server/game/DataStores/DBCStructure.h
@@ -1398,6 +1398,16 @@ struct OverrideSpellDataEntry
//uint32 unk0; // 11
};
+struct PowerDisplayEntry
+{
+ uint32 Id; // 0
+ uint32 PowerType; // 1
+ //char* Name; // 2
+ //uint32 R; // 3
+ //uint32 G; // 4
+ //uint32 B; // 5
+};
+
struct PvPDifficultyEntry
{
//uint32 id; // 0 m_ID
@@ -1982,7 +1992,7 @@ struct VehicleEntry
uint32 m_uiLocomotionType; // 34
float m_msslTrgtImpactTexRadius; // 35
uint32 m_uiSeatIndicatorType; // 36
- uint32 m_powerType; // 37, new in 3.1
+ uint32 m_powerDisplayId; // 37, new in 3.1
// 38, new in 3.1
// 39, new in 3.1
};
diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h
index 35a8eecb708..222353467f4 100644
--- a/src/server/game/DataStores/DBCfmt.h
+++ b/src/server/game/DataStores/DBCfmt.h
@@ -91,6 +91,7 @@ char const OverrideSpellDatafmt[] = "niiiiiiiiiix";
char const QuestFactionRewardfmt[] = "niiiiiiiiii";
char const QuestSortEntryfmt[] = "nxxxxxxxxxxxxxxxxx";
char const QuestXPfmt[] = "niiiiiiiiii";
+char const PowerDisplayfmt[] = "nixxxx";
char const PvPDifficultyfmt[] = "diiiii";
char const RandomPropertiesPointsfmt[] = "niiiiiiiiiiiiiii";
char const ScalingStatDistributionfmt[] = "niiiiiiiiiiiiiiiiiiiii";
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 36997eb884a..90527912efd 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -111,11 +111,11 @@ uint32 CreatureTemplate::GetFirstValidModelId() const
bool AssistDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
{
- if (Unit* victim = Unit::GetUnit(m_owner, m_victim))
+ if (Unit* victim = ObjectAccessor::GetUnit(m_owner, m_victim))
{
while (!m_assistants.empty())
{
- Creature* assistant = Unit::GetCreature(m_owner, *m_assistants.begin());
+ Creature* assistant = ObjectAccessor::GetCreature(m_owner, *m_assistants.begin());
m_assistants.pop_front();
if (assistant && assistant->CanAssistTo(&m_owner, victim))
@@ -569,7 +569,7 @@ void Creature::Update(uint32 diff)
if (getPowerType() == POWER_ENERGY)
{
- if (!IsVehicle() || GetVehicleKit()->GetVehicleInfo()->m_powerType != POWER_PYRITE)
+ if (!IsVehicle() || GetVehicleKit()->GetVehicleInfo()->m_powerDisplayId != POWER_PYRITE)
Regenerate(POWER_ENERGY);
}
else
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 8051c757bf2..4cf7d34cc11 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -526,7 +526,7 @@ void GameObject::Update(uint32 diff)
{
case GAMEOBJECT_TYPE_DOOR:
case GAMEOBJECT_TYPE_BUTTON:
- if (GetGOInfo()->GetAutoCloseTime() && (m_cooldownTime < time(NULL)))
+ if (m_cooldownTime && (m_cooldownTime < time(NULL)))
ResetDoorOrButton();
break;
case GAMEOBJECT_TYPE_GOOBER:
@@ -561,17 +561,19 @@ void GameObject::Update(uint32 diff)
CastSpell(NULL, goInfo->trap.spellId);
SetLootState(GO_JUST_DEACTIVATED);
}
- else if (Unit* target = Unit::GetUnit(*this, m_lootStateUnitGUID))
+ else if (Unit* target = ObjectAccessor::GetUnit(*this, m_lootStateUnitGUID))
{
// Some traps do not have a spell but should be triggered
if (goInfo->trap.spellId)
CastSpell(target, goInfo->trap.spellId);
// Template value or 4 seconds
- m_cooldownTime = time(NULL) + (goInfo->trap.cooldown ? goInfo->trap.cooldown : uint32(4));
+ m_cooldownTime = time(NULL) + (goInfo->trap.cooldown ? goInfo->trap.cooldown : uint32(4));
if (goInfo->trap.type == 1)
SetLootState(GO_JUST_DEACTIVATED);
+ else if (!goInfo->trap.type)
+ SetLootState(GO_READY);
// Battleground gameobjects have data2 == 0 && data5 == 3
if (!goInfo->trap.diameter && goInfo->trap.cooldown == 3)
@@ -1098,7 +1100,7 @@ void GameObject::UseDoorOrButton(uint32 time_to_restore, bool alternative /* = f
SwitchDoorOrButton(true, alternative);
SetLootState(GO_ACTIVATED, user);
- m_cooldownTime = time(NULL) + time_to_restore;
+ m_cooldownTime = time_to_restore ? (time(NULL) + time_to_restore) : 0;
}
void GameObject::SetGoArtKit(uint8 kit)
@@ -2011,6 +2013,10 @@ void GameObject::SetLootState(LootState state, Unit* unit)
m_lootStateUnitGUID = unit ? unit->GetGUID() : 0;
AI()->OnStateChanged(state, unit);
sScriptMgr->OnGameObjectLootStateChanged(this, state, unit);
+
+ if (GetGoType() == GAMEOBJECT_TYPE_DOOR) // only set collision for doors on SetGoState
+ return;
+
if (m_model)
{
bool collision = false;
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index ee389ed7311..4573b85c7f3 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -27,7 +27,7 @@
#include "ScriptMgr.h"
#include "ConditionMgr.h"
#include "Player.h"
-#include "Opcodes.h"
+#include "WorldSession.h"
void AddItemsSetItem(Player* player, Item* item)
{
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index eb4e2fcf2ee..768f5907c19 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -30,7 +30,7 @@
#include "Unit.h"
#include "Util.h"
#include "Group.h"
-#include "Opcodes.h"
+#include "WorldSession.h"
#define PET_XP_FACTOR 0.05f
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index a241242662e..433551104b9 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -144,6 +144,8 @@ enum CharacterCustomizeFlags
static uint32 copseReclaimDelay[MAX_DEATH_COUNT] = { 30, 60, 120 };
+uint32 const MAX_MONEY_AMOUNT = static_cast<uint32>(std::numeric_limits<int32>::max());
+
// == PlayerTaxi ================================================
PlayerTaxi::PlayerTaxi()
@@ -364,6 +366,12 @@ void TradeData::SetMoney(uint32 money)
if (m_money == money)
return;
+ if (!m_player->HasEnoughMoney(money))
+ {
+ m_player->GetSession()->SendTradeStatus(TRADE_STATUS_BUSY);
+ return;
+ }
+
m_money = money;
SetAccepted(false);
@@ -681,6 +689,8 @@ Player::Player(WorldSession* session): Unit(true)
m_areaUpdateId = 0;
m_team = 0;
+
+ m_needsZoneUpdate = false;
m_nextSave = sWorld->getIntConfig(CONFIG_INTERVAL_SAVE);
@@ -6748,6 +6758,15 @@ bool Player::UpdatePosition(float x, float y, float z, float orientation, bool t
// mover->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TURNING);
//AURA_INTERRUPT_FLAG_JUMP not sure
+ // Update player zone if needed
+ if (m_needsZoneUpdate)
+ {
+ uint32 newZone, newArea;
+ GetZoneAndAreaId(newZone, newArea);
+ UpdateZone(newZone, newArea);
+ m_needsZoneUpdate = false;
+ }
+
// group update
if (GetGroup())
SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POSITION);
@@ -7471,6 +7490,19 @@ void Player::UpdateArea(uint32 newArea)
}
else
RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_SANCTUARY);
+
+ uint32 const areaRestFlag = (GetTeam() == ALLIANCE) ? AREA_FLAG_REST_ZONE_ALLIANCE : AREA_FLAG_REST_ZONE_HORDE;
+ if (area && area->flags & areaRestFlag)
+ {
+ SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING);
+ SetRestType(REST_TYPE_IN_FACTION_AREA);
+ InnEnter(time(0), GetMapId(), 0, 0, 0);
+ }
+ else if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) && GetRestType() == REST_TYPE_IN_FACTION_AREA)
+ {
+ RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING);
+ SetRestType(REST_TYPE_NO);
+ }
}
void Player::UpdateZone(uint32 newZone, uint32 newArea)
@@ -7556,8 +7588,9 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea)
SetRestType(REST_TYPE_NO);
}
}
- else // Recently left a capital city
+ else if (GetRestType() != REST_TYPE_IN_FACTION_AREA) // handled in UpdateArea
{
+ // Recently left a capital city
RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING);
SetRestType(REST_TYPE_NO);
}
@@ -8192,7 +8225,12 @@ void Player::_ApplyWeaponDependentAuraDamageMod(Item* item, WeaponAttackType att
{
HandleStatModifier(unitMod, unitModType, float(aura->GetAmount()), apply);
if (unitModType == TOTAL_VALUE)
- ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS, aura->GetAmount(), apply);
+ {
+ if (aura->GetAmount() > 0)
+ ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS, aura->GetAmount(), apply);
+ else
+ ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG, aura->GetAmount(), apply);
+ }
}
}
@@ -22638,7 +22676,7 @@ bool Player::ModifyMoney(int32 amount, bool sendError /*= true*/)
SetMoney (GetMoney() > uint32(-amount) ? GetMoney() + amount : 0);
else
{
- if (GetMoney() < uint32(MAX_MONEY_AMOUNT - amount))
+ if (GetMoney() < MAX_MONEY_AMOUNT - static_cast<uint32>(amount))
SetMoney(GetMoney() + amount);
else
{
@@ -23918,7 +23956,7 @@ uint32 Player::GetBaseWeaponSkillValue (WeaponAttackType attType) const
return GetBaseSkillValue(skill);
}
-void Player::ResurectUsingRequestData()
+void Player::ResurrectUsingRequestData()
{
/// Teleport before resurrecting by player, otherwise the player might get attacked from creatures near his corpse
TeleportTo(m_resurrectMap, m_resurrectX, m_resurrectY, m_resurrectZ, GetOrientation());
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 92691c3fd45..52674032c0a 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -29,6 +29,7 @@
#include "SpellMgr.h"
#include "Unit.h"
+#include <limits>
#include <string>
#include <vector>
@@ -728,9 +729,10 @@ class InstanceSave;
enum RestType
{
- REST_TYPE_NO = 0,
- REST_TYPE_IN_TAVERN = 1,
- REST_TYPE_IN_CITY = 2
+ REST_TYPE_NO = 0,
+ REST_TYPE_IN_TAVERN = 1,
+ REST_TYPE_IN_CITY = 2,
+ REST_TYPE_IN_FACTION_AREA = 3 // used with AREA_FLAG_REST_ZONE_*
};
enum TeleportToOptions
@@ -824,7 +826,8 @@ enum PlayerDelayedOperations
// Player summoning auto-decline time (in secs)
#define MAX_PLAYER_SUMMON_DELAY (2*MINUTE)
-#define MAX_MONEY_AMOUNT (0x7FFFFFFF-1)
+// Maximum money amount : 2^31 - 1
+extern uint32 const MAX_MONEY_AMOUNT;
struct InstancePlayerBind
{
@@ -1652,9 +1655,9 @@ class Player : public Unit, public GridObject<Player>
void setResurrectRequestData(uint64 guid, uint32 mapId, float X, float Y, float Z, uint32 health, uint32 mana);
void clearResurrectRequestData() { setResurrectRequestData(0, 0, 0.0f, 0.0f, 0.0f, 0, 0); }
- bool isRessurectRequestedBy(uint64 guid) const { return m_resurrectGUID == guid; }
- bool isRessurectRequested() const { return m_resurrectGUID != 0; }
- void ResurectUsingRequestData();
+ bool isResurrectRequestedBy(uint64 guid) const { return m_resurrectGUID == guid; }
+ bool isResurrectRequested() const { return m_resurrectGUID != 0; }
+ void ResurrectUsingRequestData();
uint8 getCinematic() { return m_cinematic; }
void setCinematic(uint8 cine) { m_cinematic = cine; }
@@ -1672,7 +1675,8 @@ class Player : public Unit, public GridObject<Player>
void UpdatePvP(bool state, bool override=false);
void UpdateZone(uint32 newZone, uint32 newArea);
void UpdateArea(uint32 newArea);
-
+ void SetNeedsZoneUpdate(bool needsUpdate) { m_needsZoneUpdate = needsUpdate; }
+
void UpdateZoneDependentAuras(uint32 zone_id); // zones
void UpdateAreaDependentAuras(uint32 area_id); // subzones
@@ -2558,6 +2562,8 @@ class Player : public Unit, public GridObject<Player>
bool IsAlwaysDetectableFor(WorldObject const* seer) const;
uint8 m_grantableLevels;
+
+ bool m_needsZoneUpdate;
private:
// internal common parts for CanStore/StoreItem functions
diff --git a/src/server/game/Entities/Player/SocialMgr.cpp b/src/server/game/Entities/Player/SocialMgr.cpp
index 8c8e470f80b..25315a30da1 100644
--- a/src/server/game/Entities/Player/SocialMgr.cpp
+++ b/src/server/game/Entities/Player/SocialMgr.cpp
@@ -19,7 +19,7 @@
#include "SocialMgr.h"
#include "DatabaseEnv.h"
-#include "Opcodes.h"
+#include "WorldSession.h"
#include "WorldPacket.h"
#include "Player.h"
#include "ObjectMgr.h"
diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp
index fd45c3fc596..8bc07732bb6 100644
--- a/src/server/game/Entities/Transport/Transport.cpp
+++ b/src/server/game/Entities/Transport/Transport.cpp
@@ -85,8 +85,8 @@ bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, floa
_triggeredDepartureEvent = false;
m_goValue.Transport.PathProgress = 0;
- SetFloatValue(OBJECT_FIELD_SCALE_X, goinfo->size);
- SetUInt32Value(GAMEOBJECT_FACTION, goinfo->faction);
+ SetObjectScale(goinfo->size);
+ SetFaction(goinfo->faction);
SetUInt32Value(GAMEOBJECT_FLAGS, goinfo->flags);
SetPeriod(tInfo->pathTime);
SetEntry(goinfo->entry);
@@ -210,8 +210,14 @@ void Transport::Update(uint32 diff)
3. transport moves from active to inactive grid
4. the grid that transport is currently in unloads
*/
- if (_staticPassengers.empty() && GetMap()->IsGridLoaded(GetPositionX(), GetPositionY())) // 2.
+ bool gridActive = GetMap()->IsGridLoaded(GetPositionX(), GetPositionY());
+
+ if (_staticPassengers.empty() && gridActive) // 2.
LoadStaticPassengers();
+ else if (!_staticPassengers.empty() && !gridActive)
+ // 4. - if transports stopped on grid edge, some passengers can remain in active grids
+ // unload all static passengers otherwise passengers won't load correctly when the grid that transport is currently in becomes active
+ UnloadStaticPassengers();
}
}
@@ -450,6 +456,7 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu
void Transport::UpdatePosition(float x, float y, float z, float o)
{
bool newActive = GetMap()->IsGridLoaded(x, y);
+ Cell oldCell(GetPositionX(), GetPositionY());
Relocate(x, y, z, o);
UpdateModelPosition();
@@ -464,7 +471,7 @@ void Transport::UpdatePosition(float x, float y, float z, float o)
*/
if (_staticPassengers.empty() && newActive) // 1.
LoadStaticPassengers();
- else if (!_staticPassengers.empty() && !newActive && Cell(x, y).DiffGrid(Cell(GetPositionX(), GetPositionY()))) // 3.
+ else if (!_staticPassengers.empty() && !newActive && oldCell.DiffGrid(Cell(GetPositionX(), GetPositionY()))) // 3.
UnloadStaticPassengers();
else
UpdatePassengerPositions(_staticPassengers);
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 00172face5f..8b09df988cf 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -774,7 +774,8 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam
if (damagetype != NODAMAGE && damage)
{
- if (victim != this && victim->GetTypeId() == TYPEID_PLAYER) // does not support creature push_back
+ if (victim != this && victim->GetTypeId() == TYPEID_PLAYER && // does not support creature push_back
+ (!spellProto || !(spellProto->AttributesEx7 & SPELL_ATTR7_NO_PUSHBACK_ON_DAMAGE)))
{
if (damagetype != DOT)
if (Spell* spell = victim->m_currentSpells[CURRENT_GENERIC_SPELL])
@@ -1834,14 +1835,15 @@ void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffe
splitDamage = RoundToInterval(splitDamage, uint32(0), uint32(dmgInfo.GetDamage()));
dmgInfo.AbsorbDamage(splitDamage);
- uint32 splitted = splitDamage;
uint32 split_absorb = 0;
- DealDamageMods(caster, splitted, &split_absorb);
+ DealDamageMods(caster, splitDamage, &split_absorb);
- SendSpellNonMeleeDamageLog(caster, (*itr)->GetSpellInfo()->Id, splitted, schoolMask, split_absorb, 0, false, 0, false);
+ SendSpellNonMeleeDamageLog(caster, (*itr)->GetSpellInfo()->Id, splitDamage, schoolMask, split_absorb, 0, false, 0, false);
- CleanDamage cleanDamage = CleanDamage(splitted, 0, BASE_ATTACK, MELEE_HIT_NORMAL);
- DealDamage(caster, splitted, &cleanDamage, DIRECT_DAMAGE, schoolMask, (*itr)->GetSpellInfo(), false);
+ CleanDamage cleanDamage = CleanDamage(splitDamage, 0, BASE_ATTACK, MELEE_HIT_NORMAL);
+ DealDamage(caster, splitDamage, &cleanDamage, DIRECT_DAMAGE, schoolMask, (*itr)->GetSpellInfo(), false);
+ // break 'Fear' and similar auras
+ caster->ProcDamageAndSpellFor(true, this, PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG, PROC_EX_NORMAL_HIT, BASE_ATTACK, (*itr)->GetSpellInfo(), splitDamage);
}
}
@@ -12988,21 +12990,6 @@ float Unit::GetSpellMinRangeForTarget(Unit const* target, SpellInfo const* spell
return spellInfo->GetMinRange(!IsHostileTo(target));
}
-Unit* Unit::GetUnit(WorldObject& object, uint64 guid)
-{
- return ObjectAccessor::GetUnit(object, guid);
-}
-
-Player* Unit::GetPlayer(WorldObject& object, uint64 guid)
-{
- return ObjectAccessor::GetPlayer(object, guid);
-}
-
-Creature* Unit::GetCreature(WorldObject& object, uint64 guid)
-{
- return object.GetMap()->GetCreature(guid);
-}
-
uint32 Unit::GetCreatureType() const
{
if (GetTypeId() == TYPEID_PLAYER)
@@ -15248,8 +15235,8 @@ void Unit::Kill(Unit* victim, bool durabilityLoss)
// update get killing blow achievements, must be done before setDeathState to be able to require auras on target
// and before Spirit of Redemption as it also removes auras
- if (player)
- player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS, 1, 0, victim);
+ if (Player* killerPlayer = GetCharmerOrOwnerPlayerOrPlayerItself())
+ killerPlayer->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS, 1, 0, victim);
// if talent known but not triggered (check priest class for speedup check)
bool spiritOfRedemption = false;
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 9926403f7af..1735d1a8b8c 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -2028,9 +2028,6 @@ class Unit : public WorldObject
void addFollower(FollowerReference* pRef) { m_FollowingRefManager.insertFirst(pRef); }
void removeFollower(FollowerReference* /*pRef*/) { /* nothing to do yet */ }
- static Unit* GetUnit(WorldObject& object, uint64 guid);
- static Player* GetPlayer(WorldObject& object, uint64 guid);
- static Creature* GetCreature(WorldObject& object, uint64 guid);
MotionMaster* GetMotionMaster() { return i_motionMaster; }
const MotionMaster* GetMotionMaster() const { return i_motionMaster; }
diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp
index fae4f0c6b6a..4c3724a8860 100755
--- a/src/server/game/Entities/Vehicle/Vehicle.cpp
+++ b/src/server/game/Entities/Vehicle/Vehicle.cpp
@@ -76,42 +76,9 @@ Vehicle::~Vehicle()
void Vehicle::Install()
{
- if (Creature* creature = _me->ToCreature())
- {
- switch (_vehicleInfo->m_powerType)
- {
- case POWER_STEAM:
- case POWER_HEAT:
- case POWER_BLOOD:
- case POWER_OOZE:
- case POWER_WRATH:
- _me->setPowerType(POWER_ENERGY);
- _me->SetMaxPower(POWER_ENERGY, 100);
- break;
- case POWER_PYRITE:
- _me->setPowerType(POWER_ENERGY);
- _me->SetMaxPower(POWER_ENERGY, 50);
- break;
- default:
- for (uint32 i = 0; i < MAX_SPELL_VEHICLE; ++i)
- {
- if (!creature->m_spells[i])
- continue;
-
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(creature->m_spells[i]);
- if (!spellInfo)
- continue;
-
- if (spellInfo->PowerType == POWER_ENERGY && spellInfo->CalcPowerCost(_me, spellInfo->GetSchoolMask()) > 0)
- {
- _me->setPowerType(POWER_ENERGY);
- _me->SetMaxPower(POWER_ENERGY, 100);
- break;
- }
- }
- break;
- }
- }
+ if (_me->GetTypeId() == TYPEID_UNIT)
+ if (PowerDisplayEntry const* powerDisplay = sPowerDisplayStore.LookupEntry(_vehicleInfo->m_powerDisplayId))
+ _me->setPowerType(Powers(powerDisplay->PowerType));
_status = STATUS_INSTALLED;
if (GetBase()->GetTypeId() == TYPEID_UNIT)
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 2905b0454c4..207f80eabe7 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -3822,8 +3822,8 @@ void ObjectMgr::LoadQuests()
"RequiredItemId1, RequiredItemId2, RequiredItemId3, RequiredItemId4, RequiredItemId5, RequiredItemId6, RequiredItemCount1, RequiredItemCount2, RequiredItemCount3, RequiredItemCount4, RequiredItemCount5, RequiredItemCount6, "
// 117 118 119 120 121 122 123 124 125 126 127 128 129
"Unknown0, ObjectiveText1, ObjectiveText2, ObjectiveText3, ObjectiveText4, DetailsEmote1, DetailsEmote2, DetailsEmote3, DetailsEmote4, DetailsEmoteDelay1, DetailsEmoteDelay2, DetailsEmoteDelay3, DetailsEmoteDelay4, "
- // 130 131 132 133 134 135 136 137 138 139 140
- "EmoteOnIncomplete, EmoteOnComplete, OfferRewardEmote1, OfferRewardEmote2, OfferRewardEmote3, OfferRewardEmote4, OfferRewardEmoteDelay1, OfferRewardEmoteDelay2, OfferRewardEmoteDelay3, OfferRewardEmoteDelay4, WDBVerified"
+ // 130 131 132 133 134 135 136 137 138 139
+ "EmoteOnIncomplete, EmoteOnComplete, OfferRewardEmote1, OfferRewardEmote2, OfferRewardEmote3, OfferRewardEmote4, OfferRewardEmoteDelay1, OfferRewardEmoteDelay2, OfferRewardEmoteDelay3, OfferRewardEmoteDelay4"
" FROM quest_template");
if (!result)
{
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index 48c9e618a1d..ba5940d7e12 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -432,7 +432,7 @@ struct BroadcastText
uint32 SoundId;
uint32 Unk1;
uint32 Unk2;
- // uint32 WDBVerified;
+ // uint32 VerifiedBuild;
std::string const& GetText(LocaleConstant locale = DEFAULT_LOCALE, uint8 gender = GENDER_MALE, bool forceGender = false) const
{
diff --git a/src/server/game/Grids/GridStates.cpp b/src/server/game/Grids/GridStates.cpp
index 8b57c382cd7..3e085f1f381 100644
--- a/src/server/game/Grids/GridStates.cpp
+++ b/src/server/game/Grids/GridStates.cpp
@@ -20,18 +20,6 @@
#include "GridNotifiers.h"
#include "Log.h"
-#ifdef TRINITY_DEBUG
-bool GridState::checkMagic()
-{
- if (i_Magic != MAGIC_TESTVAL)
- {
- TC_LOG_ERROR("misc", "!!! GridState: Magic value gone !!!");
- return false;
- }
- return true;
-}
-#endif
-
void InvalidState::Update(Map&, NGridType&, GridInfo&, uint32) const
{ }
diff --git a/src/server/game/Grids/GridStates.h b/src/server/game/Grids/GridStates.h
index 016df4dc3d4..af11ab08d5e 100644
--- a/src/server/game/Grids/GridStates.h
+++ b/src/server/game/Grids/GridStates.h
@@ -27,13 +27,6 @@ class Map;
class GridState
{
public:
-#ifdef TRINITY_DEBUG
-#define MAGIC_TESTVAL 0xFBE823BA
- GridState() { i_Magic = MAGIC_TESTVAL; }
- bool checkMagic();
- void setMagic() { i_Magic = MAGIC_TESTVAL; }
- unsigned int i_Magic;
-#endif
virtual ~GridState() { };
virtual void Update(Map &, NGridType&, GridInfo &, uint32 t_diff) const = 0;
};
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index f448fbb9f19..db0a196dec6 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -754,7 +754,7 @@ int32 Guild::Member::GetBankWithdrawValue(uint8 tabId) const
{
// Guild master has unlimited amount.
if (IsRank(GR_GUILDMASTER))
- return tabId == GUILD_BANK_MAX_TABS ? GUILD_WITHDRAW_MONEY_UNLIMITED : GUILD_WITHDRAW_SLOT_UNLIMITED;
+ return static_cast<int32>(tabId == GUILD_BANK_MAX_TABS ? GUILD_WITHDRAW_MONEY_UNLIMITED : GUILD_WITHDRAW_SLOT_UNLIMITED);
return m_bankWithdraw[tabId];
}
@@ -1760,7 +1760,7 @@ void Guild::HandleMemberDepositMoney(WorldSession* session, uint32 amount)
bool Guild::HandleMemberWithdrawMoney(WorldSession* session, uint32 amount, bool repair)
{
//clamp amount to MAX_MONEY_AMOUNT, Players can't hold more than that anyway
- amount = std::min(amount, uint32(MAX_MONEY_AMOUNT));
+ amount = std::min(amount, MAX_MONEY_AMOUNT);
if (m_bankMoney < amount) // Not enough money in bank
return false;
@@ -2581,7 +2581,7 @@ inline int32 Guild::_GetMemberRemainingSlots(Member const* member, uint8 tabId)
{
uint8 rankId = member->GetRankId();
if (rankId == GR_GUILDMASTER)
- return GUILD_WITHDRAW_SLOT_UNLIMITED;
+ return static_cast<int32>(GUILD_WITHDRAW_SLOT_UNLIMITED);
if ((_GetRankBankTabRights(rankId, tabId) & GUILD_BANK_RIGHT_VIEW_TAB) != 0)
{
int32 remaining = _GetRankBankTabSlotsPerDay(rankId, tabId) - member->GetBankWithdrawValue(tabId);
@@ -2598,7 +2598,7 @@ inline int32 Guild::_GetMemberRemainingMoney(Member const* member) const
{
uint8 rankId = member->GetRankId();
if (rankId == GR_GUILDMASTER)
- return GUILD_WITHDRAW_MONEY_UNLIMITED;
+ return static_cast<int32>(GUILD_WITHDRAW_MONEY_UNLIMITED);
if ((_GetRankRights(rankId) & (GR_RIGHT_WITHDRAW_REPAIR | GR_RIGHT_WITHDRAW_GOLD)) != 0)
{
diff --git a/src/server/game/Handlers/ArenaTeamHandler.cpp b/src/server/game/Handlers/ArenaTeamHandler.cpp
index 632bd02def0..3bb3edac500 100644
--- a/src/server/game/Handlers/ArenaTeamHandler.cpp
+++ b/src/server/game/Handlers/ArenaTeamHandler.cpp
@@ -121,6 +121,12 @@ void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket& recvData)
return;
}
+ if (GetPlayer()->GetArenaTeamId(arenaTeam->GetSlot()) != arenaTeamId)
+ {
+ SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", "", ERR_ARENA_TEAM_PERMISSIONS);
+ return;
+ }
+
// OK result but don't send invite
if (player->GetSocial()->HasIgnore(GetPlayer()->GetGUIDLow()))
return;
diff --git a/src/server/game/Handlers/CalendarHandler.cpp b/src/server/game/Handlers/CalendarHandler.cpp
index 45d4d221d06..278c180c380 100644
--- a/src/server/game/Handlers/CalendarHandler.cpp
+++ b/src/server/game/Handlers/CalendarHandler.cpp
@@ -255,7 +255,14 @@ void WorldSession::HandleCalendarAddEvent(WorldPacket& recvData)
uint32 inviteCount;
recvData >> inviteCount;
- for (uint32 i = 0; i < inviteCount; ++i)
+ SQLTransaction trans;
+ if (inviteCount > 1)
+ trans = CharacterDatabase.BeginTransaction();
+
+ // client limits the amount of players to be invited to 100
+ const uint32 MaxPlayerInvites = 100;
+
+ for (uint32 i = 0; i < inviteCount && i < MaxPlayerInvites; ++i)
{
uint64 invitee = 0;
uint8 status = 0;
@@ -265,8 +272,11 @@ void WorldSession::HandleCalendarAddEvent(WorldPacket& recvData)
// 946684800 is 01/01/2000 00:00:00 - default response time
CalendarInvite* invite = new CalendarInvite(sCalendarMgr->GetFreeInviteId(), calendarEvent.GetEventId(), invitee, guid, 946684800, CalendarInviteStatus(status), CalendarModerationRank(rank), "");
- sCalendarMgr->AddInvite(&calendarEvent, invite);
+ sCalendarMgr->AddInvite(&calendarEvent, invite, trans);
}
+
+ if (inviteCount > 1)
+ CharacterDatabase.CommitTransaction(trans);
}
sCalendarMgr->AddEvent(new CalendarEvent(calendarEvent, calendarEvent.GetEventId()), CALENDAR_SENDTYPE_ADD);
@@ -350,10 +360,15 @@ void WorldSession::HandleCalendarCopyEvent(WorldPacket& recvData)
sCalendarMgr->AddEvent(newEvent, CALENDAR_SENDTYPE_COPY);
CalendarInviteStore invites = sCalendarMgr->GetEventInvites(eventId);
+ SQLTransaction trans;
+ if (invites.size() > 1)
+ trans = CharacterDatabase.BeginTransaction();
for (CalendarInviteStore::const_iterator itr = invites.begin(); itr != invites.end(); ++itr)
- sCalendarMgr->AddInvite(newEvent, new CalendarInvite(**itr, sCalendarMgr->GetFreeInviteId(), newEvent->GetEventId()));
+ sCalendarMgr->AddInvite(newEvent, new CalendarInvite(**itr, sCalendarMgr->GetFreeInviteId(), newEvent->GetEventId()), trans);
+ if (invites.size() > 1)
+ CharacterDatabase.CommitTransaction(trans);
// should we change owner when somebody makes a copy of event owned by another person?
}
else
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index f4ea4971190..7d9d83abfde 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -243,8 +243,6 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result)
void WorldSession::HandleCharEnumOpcode(WorldPacket & /*recvData*/)
{
- AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, false);
-
// remove expired bans
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_EXPIRED_BANS);
CharacterDatabase.Execute(stmt);
@@ -681,7 +679,6 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
data << uint8(CHAR_CREATE_SUCCESS);
SendPacket(&data);
- AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, true);
std::string IP_str = GetRemoteAddress();
TC_LOG_INFO("entities.player.character", "Account: %d (IP: %s) Create Character:[%s] (GUID: %u)", GetAccountId(), IP_str.c_str(), createInfo->Name.c_str(), newChar.GetGUIDLow());
sScriptMgr->OnPlayerCreate(&newChar);
@@ -758,8 +755,6 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket& recvData)
WorldPacket data(SMSG_CHAR_DELETE, 1);
data << uint8(CHAR_DELETE_SUCCESS);
SendPacket(&data);
-
- AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, true);
}
void WorldSession::HandlePlayerLoginOpcode(WorldPacket& recvData)
@@ -767,6 +762,7 @@ void WorldSession::HandlePlayerLoginOpcode(WorldPacket& recvData)
if (PlayerLoading() || GetPlayer() != NULL)
{
TC_LOG_ERROR("network", "Player tryes to login again, AccountId = %d", GetAccountId());
+ KickPlayer();
return;
}
@@ -1168,7 +1164,6 @@ void WorldSession::HandleCharRenameOpcode(WorldPacket& recvData)
void WorldSession::HandleChangePlayerNameOpcodeCallBack(PreparedQueryResult result, std::string const& newName)
{
- AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, true);
if (!result)
{
WorldPacket data(SMSG_CHAR_RENAME, 1);
@@ -1426,8 +1421,6 @@ void WorldSession::HandleCharCustomize(WorldPacket& recvData)
stmt->setUInt32(0, GUID_LOPART(guid));
// TODO: Make async with callback
- // TODO 2: Allow opcode at end of callback
- AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, true);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (!result)
@@ -1682,8 +1675,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData)
uint8 playerClass = nameData->m_class;
uint8 level = nameData->m_level;
- // TO Do: Make async and allow opcode on callback
- AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, true);
+ // TO Do: Make async
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_AT_LOGIN_TITLES);
stmt->setUInt32(0, lowGuid);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp
index e0b29523a3a..eccf7a6fd38 100644
--- a/src/server/game/Handlers/ChatHandler.cpp
+++ b/src/server/game/Handlers/ChatHandler.cpp
@@ -269,7 +269,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
}
Player* receiver = sObjectAccessor->FindPlayerByName(to);
- if (!receiver || (!receiver->isAcceptWhispers() && receiver->GetSession()->HasPermission(rbac::RBAC_PERM_CAN_FILTER_WHISPERS) && !receiver->IsInWhisperWhiteList(sender->GetGUID())))
+ if (!receiver || (lang != LANG_ADDON && !receiver->isAcceptWhispers() && receiver->GetSession()->HasPermission(rbac::RBAC_PERM_CAN_FILTER_WHISPERS) && !receiver->IsInWhisperWhiteList(sender->GetGUID())))
{
SendPlayerNotFoundNotice(to);
return;
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp
index c4b4b35bf37..0ca7885b82b 100644
--- a/src/server/game/Handlers/ItemHandler.cpp
+++ b/src/server/game/Handlers/ItemHandler.cpp
@@ -470,19 +470,6 @@ void WorldSession::HandleReadItem(WorldPacket& recvData)
_player->SendEquipError(EQUIP_ERR_ITEM_NOT_FOUND, NULL, NULL);
}
-void WorldSession::HandlePageQuerySkippedOpcode(WorldPacket& recvData)
-{
- TC_LOG_DEBUG("network", "WORLD: Received CMSG_PAGE_TEXT_QUERY");
-
- uint32 itemid;
- uint64 guid;
-
- recvData >> itemid >> guid;
-
- TC_LOG_INFO("network", "Packet Info: itemid: %u guidlow: %u guidentry: %u guidhigh: %u",
- itemid, GUID_LOPART(guid), GUID_ENPART(guid), GUID_HIPART(guid));
-}
-
void WorldSession::HandleSellItemOpcode(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "WORLD: Received CMSG_SELL_ITEM");
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index 1b04c89b338..11fa89d9d6b 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -186,11 +186,6 @@ void WorldSession::HandleWhoOpcode(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_WHO Message");
- time_t now = time(NULL);
- if (now - timeLastWhoCommand < 5)
- return;
- else timeLastWhoCommand = now;
-
uint32 matchcount = 0;
uint32 level_min, level_max, racemask, classmask, zones_count, str_count;
@@ -505,10 +500,9 @@ void WorldSession::HandleZoneUpdateOpcode(WorldPacket& recvData)
TC_LOG_DEBUG("network", "WORLD: Recvd ZONE_UPDATE: %u", newZone);
- // use server size data
- uint32 newzone, newarea;
- GetPlayer()->GetZoneAndAreaId(newzone, newarea);
- GetPlayer()->UpdateZone(newzone, newarea);
+ // use server side data, but only after update the player position. See Player::UpdatePosition().
+ GetPlayer()->SetNeedsZoneUpdate(true);
+
//GetPlayer()->SendInitWorldStates(true, newZone);
}
@@ -793,10 +787,10 @@ void WorldSession::HandleResurrectResponseOpcode(WorldPacket& recvData)
return;
}
- if (!GetPlayer()->isRessurectRequestedBy(guid))
+ if (!GetPlayer()->isResurrectRequestedBy(guid))
return;
- GetPlayer()->ResurectUsingRequestData();
+ GetPlayer()->ResurrectUsingRequestData();
}
void WorldSession::SendAreaTriggerMessage(const char* Text, ...)
diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp
index de08392b86a..dbcfb1c4970 100644
--- a/src/server/game/Handlers/QueryHandler.cpp
+++ b/src/server/game/Handlers/QueryHandler.cpp
@@ -405,19 +405,23 @@ void WorldSession::HandleQuestPOIQuery(WorldPacket& recvData)
uint32 count;
recvData >> count; // quest count, max=25
- if (count >= MAX_QUEST_LOG_SIZE)
+ if (count > MAX_QUEST_LOG_SIZE)
{
recvData.rfinish();
return;
}
- WorldPacket data(SMSG_QUEST_POI_QUERY_RESPONSE, 4+(4+4)*count);
- data << uint32(count); // count
-
+ // Read quest ids and add the in a unordered_set so we don't send POIs for the same quest multiple times
+ std::unordered_set<uint32> questIds;
for (uint32 i = 0; i < count; ++i)
+ questIds.insert(recvData.read<uint32>()); // quest id
+
+ WorldPacket data(SMSG_QUEST_POI_QUERY_RESPONSE, 4 + (4 + 4)*questIds.size());
+ data << uint32(questIds.size()); // count
+
+ for (auto itr = questIds.begin(); itr != questIds.end(); ++itr)
{
- uint32 questId;
- recvData >> questId; // quest id
+ uint32 questId = *itr;
bool questOk = false;
diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp
index 4372de9eafe..884c4a83b15 100644
--- a/src/server/game/Handlers/TradeHandler.cpp
+++ b/src/server/game/Handlers/TradeHandler.cpp
@@ -299,14 +299,14 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPacket& /*recvPacket*/)
return;
}
- if (_player->GetMoney() >= uint32(MAX_MONEY_AMOUNT) - his_trade->GetMoney())
+ if (_player->GetMoney() >= MAX_MONEY_AMOUNT - his_trade->GetMoney())
{
_player->SendEquipError(EQUIP_ERR_TOO_MUCH_GOLD, NULL, NULL);
my_trade->SetAccepted(false, true);
return;
}
- if (trader->GetMoney() >= uint32(MAX_MONEY_AMOUNT) - my_trade->GetMoney())
+ if (trader->GetMoney() >= MAX_MONEY_AMOUNT - my_trade->GetMoney())
{
trader->SendEquipError(EQUIP_ERR_TOO_MUCH_GOLD, NULL, NULL);
his_trade->SetAccepted(false, true);
@@ -686,7 +686,6 @@ void WorldSession::HandleSetTradeGoldOpcode(WorldPacket& recvPacket)
if (!my_trade)
return;
- // gold can be incorrect, but this is checked at trade finished.
my_trade->SetMoney(gold);
}
diff --git a/src/server/game/Handlers/VehicleHandler.cpp b/src/server/game/Handlers/VehicleHandler.cpp
index 3973b23eab4..b3fa240e2d2 100644
--- a/src/server/game/Handlers/VehicleHandler.cpp
+++ b/src/server/game/Handlers/VehicleHandler.cpp
@@ -96,7 +96,7 @@ void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket &recvData)
if (!accessory)
GetPlayer()->ChangeSeat(-1, seatId > 0); // prev/next
- else if (Unit* vehUnit = Unit::GetUnit(*GetPlayer(), accessory))
+ else if (Unit* vehUnit = ObjectAccessor::GetUnit(*GetPlayer(), accessory))
{
if (Vehicle* vehicle = vehUnit->GetVehicleKit())
if (vehicle->HasEmptySeat(seatId))
@@ -114,7 +114,7 @@ void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket &recvData)
if (vehicle_base->GetGUID() == guid)
GetPlayer()->ChangeSeat(seatId);
- else if (Unit* vehUnit = Unit::GetUnit(*GetPlayer(), guid))
+ else if (Unit* vehUnit = ObjectAccessor::GetUnit(*GetPlayer(), guid))
if (Vehicle* vehicle = vehUnit->GetVehicleKit())
if (vehicle->HasEmptySeat(seatId))
vehUnit->HandleSpellClick(GetPlayer(), seatId);
diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h
index 3050443edc0..9e11c566c22 100644
--- a/src/server/game/Instances/InstanceScript.h
+++ b/src/server/game/Instances/InstanceScript.h
@@ -243,7 +243,7 @@ AI* GetInstanceAI(T* obj, char const* scriptName)
return new AI(obj);
return NULL;
-};
+}
template<class AI, class T>
AI* GetInstanceAI(T* obj)
@@ -253,6 +253,6 @@ AI* GetInstanceAI(T* obj)
return new AI(obj);
return NULL;
-};
+}
#endif // TRINITY_INSTANCE_DATA_H
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index cd391299785..ba271235330 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -1544,11 +1544,8 @@ void Map::UnloadAll()
Transport* transport = *itr;
++itr;
- transport->RemoveFromWorld();
- delete transport;
+ RemoveFromMap<Transport>(transport, true);
}
-
- _transports.clear();
}
// *****************************
@@ -2648,24 +2645,27 @@ void Map::RemoveAllObjectsInRemoveList()
RemoveFromMap(corpse, true);
break;
}
- case TYPEID_DYNAMICOBJECT:
- RemoveFromMap((DynamicObject*)obj, true);
- break;
- case TYPEID_GAMEOBJECT:
- if (Transport* transport = obj->ToGameObject()->ToTransport())
- RemoveFromMap(transport, true);
- else
- RemoveFromMap(obj->ToGameObject(), true);
- break;
- case TYPEID_UNIT:
- // in case triggered sequence some spell can continue casting after prev CleanupsBeforeDelete call
- // make sure that like sources auras/etc removed before destructor start
- obj->ToCreature()->CleanupsBeforeDelete();
- RemoveFromMap(obj->ToCreature(), true);
- break;
- default:
- TC_LOG_ERROR("maps", "Non-grid object (TypeId: %u) is in grid object remove list, ignored.", obj->GetTypeId());
- break;
+ case TYPEID_DYNAMICOBJECT:
+ RemoveFromMap(obj->ToDynObject(), true);
+ break;
+ case TYPEID_GAMEOBJECT:
+ {
+ GameObject* go = obj->ToGameObject();
+ if (Transport* transport = go->ToTransport())
+ RemoveFromMap(transport, true);
+ else
+ RemoveFromMap(go, true);
+ break;
+ }
+ case TYPEID_UNIT:
+ // in case triggered sequence some spell can continue casting after prev CleanupsBeforeDelete call
+ // make sure that like sources auras/etc removed before destructor start
+ obj->ToCreature()->CleanupsBeforeDelete();
+ RemoveFromMap(obj->ToCreature(), true);
+ break;
+ default:
+ TC_LOG_ERROR("maps", "Non-grid object (TypeId: %u) is in grid object remove list, ignored.", obj->GetTypeId());
+ break;
}
i_objectsToRemove.erase(itr);
diff --git a/src/server/game/Maps/MapUpdater.cpp b/src/server/game/Maps/MapUpdater.cpp
index f3a5a66bf66..dd697719d54 100644
--- a/src/server/game/Maps/MapUpdater.cpp
+++ b/src/server/game/Maps/MapUpdater.cpp
@@ -6,34 +6,6 @@
#include <ace/Guard_T.h>
#include <ace/Method_Request.h>
-class WDBThreadStartReq1 : public ACE_Method_Request
-{
- public:
-
- WDBThreadStartReq1()
- {
- }
-
- virtual int call()
- {
- return 0;
- }
-};
-
-class WDBThreadEndReq1 : public ACE_Method_Request
-{
- public:
-
- WDBThreadEndReq1()
- {
- }
-
- virtual int call()
- {
- return 0;
- }
-};
-
class MapUpdateRequest : public ACE_Method_Request
{
private:
@@ -67,7 +39,7 @@ MapUpdater::~MapUpdater()
int MapUpdater::activate(size_t num_threads)
{
- return m_executor.start((int)num_threads, new WDBThreadStartReq1, new WDBThreadEndReq1);
+ return m_executor.start((int)num_threads);
}
int MapUpdater::deactivate()
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index eabc15d6ee7..34871085157 100644
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -1224,6 +1224,8 @@ enum TrinityStrings
LANG_BAN_ACCOUNT_YOUBANNEDMESSAGE_WORLD = 11006,
LANG_BAN_ACCOUNT_YOUPERMBANNEDMESSAGE_WORLD = 11007,
+ LANG_NPCINFO_INHABIT_TYPE = 11008
+
// NOT RESERVED IDS 12000-1999999999
// `db_script_string` table index 2000000000-2000009999 (MIN_DB_SCRIPT_STRING_ID-MAX_DB_SCRIPT_STRING_ID)
// For other tables maybe 2000010000-2147483647 (max index)
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index b52e640afc7..fdf06a8f7e3 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -533,7 +533,7 @@ enum SpellAttr7
SPELL_ATTR7_IS_CHEAT_SPELL = 0x00000008, // 3 Cannot cast if caster doesn't have UnitFlag2 & UNIT_FLAG2_ALLOW_CHEAT_SPELLS
SPELL_ATTR7_UNK4 = 0x00000010, // 4 Only 47883 (Soulstone Resurrection) and test spell.
SPELL_ATTR7_SUMMON_PLAYER_TOTEM = 0x00000020, // 5 Only Shaman player totems.
- SPELL_ATTR7_UNK6 = 0x00000040, // 6 Dark Surge, Surge of Light, Burning Breath triggers (boss spells).
+ SPELL_ATTR7_NO_PUSHBACK_ON_DAMAGE = 0x00000040, // 6 Does not cause spell pushback on damage
SPELL_ATTR7_UNK7 = 0x00000080, // 7 66218 (Launch) spell.
SPELL_ATTR7_HORDE_ONLY = 0x00000100, // 8 Teleports, mounts and other spells.
SPELL_ATTR7_ALLIANCE_ONLY = 0x00000200, // 9 Teleports, mounts and other spells.
@@ -1129,7 +1129,7 @@ enum SpellCustomErrors
SPELL_CUSTOM_ERROR_95 = 95, // ""
SPELL_CUSTOM_ERROR_MAX_NUMBER_OF_RECRUITS = 96, // You already have the max number of recruits.
SPELL_CUSTOM_ERROR_MAX_NUMBER_OF_VOLUNTEERS = 97, // You already have the max number of volunteers.
- SPELL_CUSTOM_ERROR_FROSTMOURNE_RENDERED_RESSURECT = 98, // Frostmourne has rendered you unable to ressurect.
+ SPELL_CUSTOM_ERROR_FROSTMOURNE_RENDERED_RESURRECT = 98, // Frostmourne has rendered you unable to resurrect.
SPELL_CUSTOM_ERROR_CANT_MOUNT_WITH_SHAPESHIFT = 99 // You can't mount while affected by that shapeshift.
};
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index 9b3732d232b..099275ba8dc 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -137,7 +137,7 @@ Quest::Quest(Field* questRecord)
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
OfferRewardEmoteDelay[i] = questRecord[136+i].GetInt32();
- //int32 WDBVerified = questRecord[140].GetInt32();
+ //int32 VerifiedBuild = questRecord[140].GetInt32();
if (SpecialFlags & QUEST_SPECIAL_FLAGS_AUTO_ACCEPT)
Flags |= QUEST_FLAGS_AUTO_ACCEPT;
diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp
index 69e677bd89d..46b73e74068 100644
--- a/src/server/game/Reputation/ReputationMgr.cpp
+++ b/src/server/game/Reputation/ReputationMgr.cpp
@@ -24,7 +24,7 @@
#include "World.h"
#include "ObjectMgr.h"
#include "ScriptMgr.h"
-#include "Opcodes.h"
+#include "WorldSession.h"
const int32 ReputationMgr::PointsInRank[MAX_REPUTATION_RANK] = {36000, 3000, 3000, 3000, 6000, 12000, 21000, 1000};
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index e581d7d1544..7b07abdf962 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -25,12 +25,6 @@
#include "Common.h"
-// Note: this include need for be sure have full definition of class WorldSession
-// if this class definition not complete then VS for x64 release use different size for
-// struct OpcodeHandler in this header and Opcode.cpp and get totally wrong data from
-// table opcodeTable in source when Opcode.h included but WorldSession.h not included
-#include "WorldSession.h"
-
/// List of Opcodes
enum Opcodes
{
@@ -1366,8 +1360,15 @@ enum PacketProcessing
PROCESS_THREADSAFE //packet is thread-safe - process it in Map::Update()
};
+class WorldSession;
class WorldPacket;
+#if defined(__GNUC__)
+#pragma pack(1)
+#else
+#pragma pack(push, 1)
+#endif
+
struct OpcodeHandler
{
char const* name;
@@ -1378,6 +1379,12 @@ struct OpcodeHandler
extern OpcodeHandler opcodeTable[NUM_MSG_TYPES];
+#if defined(__GNUC__)
+#pragma pack()
+#else
+#pragma pack(pop)
+#endif
+
/// Lookup opcode name for human understandable logging
inline const char* LookupOpcodeName(uint16 id)
{
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 89242bada6e..9f052b75386 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -121,7 +121,6 @@ WorldSession::WorldSession(uint32 id, WorldSocket* sock, AccountTypes sec, uint8
m_TutorialsChanged(false),
recruiterId(recruiter),
isRecruiter(isARecruiter),
- timeLastWhoCommand(0),
_RBACData(NULL)
{
memset(m_Tutorials, 0, sizeof(m_Tutorials));
@@ -277,12 +276,13 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
//! loop caused by re-enqueueing the same packets over and over again, we stop updating this session
//! and continue updating others. The re-enqueued packets will be handled in the next Update call for this session.
uint32 processedPackets = 0;
+ time_t currentTime = time(NULL);
while (m_Socket && !m_Socket->IsClosed() &&
!_recvQueue.empty() && _recvQueue.peek(true) != firstDelayedPacket &&
_recvQueue.next(packet, updater))
{
- if (!AntiDOS.EvaluateOpcode(*packet))
+ if (!AntiDOS.EvaluateOpcode(*packet, currentTime))
{
KickPlayer();
}
@@ -569,7 +569,6 @@ void WorldSession::LogoutPlayer(bool save)
m_playerLogout = false;
m_playerSave = false;
m_playerRecentlyLogout = true;
- AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, true);
LogoutRequest(0);
}
@@ -1236,14 +1235,39 @@ void WorldSession::InvalidateRBACData()
_RBACData = NULL;
}
-bool WorldSession::DosProtection::EvaluateOpcode(WorldPacket& p) const
+bool WorldSession::DosProtection::EvaluateOpcode(WorldPacket& p, time_t time) const
{
- if (IsOpcodeAllowed(p.GetOpcode()))
- return true;
+ PacketCounter& packetCounter = _PacketThrottlingMap[p.GetOpcode()];
+ if (packetCounter.lastReceiveTime != time)
+ {
+ packetCounter.lastReceiveTime = time;
+ packetCounter.amountCounter = 0;
+ }
+
+ uint32 maxPacketCounterAllowed = GetMaxPacketCounterAllowed(p.GetOpcode());
+
+ bool dosTriggered = false;
+ // Check if player is flooding some packets
+ if (++packetCounter.amountCounter > maxPacketCounterAllowed)
+ {
+ dosTriggered = true;
+ TC_LOG_WARN("network", "AntiDOS: Account %u, IP: %s, Character: %s, flooding packet (opc: %s (0x%X), count: %u)",
+ Session->GetAccountId(), Session->GetRemoteAddress().c_str(), Session->GetPlayerName().c_str(),
+ opcodeTable[p.GetOpcode()].name, p.GetOpcode(), packetCounter.amountCounter);
+ }
+
+ // Then check if player is sending packets not allowed
+ if (!IsOpcodeAllowed(p.GetOpcode()))
+ {
+ dosTriggered = true;
+ // Opcode not allowed, let the punishment begin
+ TC_LOG_WARN("network", "AntiDOS: Account %u, IP: %s, sent unacceptable packet (opc: %u, size: %u)",
+ Session->GetAccountId(), Session->GetRemoteAddress().c_str(), p.GetOpcode(), (uint32)p.size());
+ }
- // Opcode not allowed, let the punishment begin
- TC_LOG_INFO("network", "AntiDOS: Account %u, IP: %s, sent unacceptable packet (opc: %u, size: %u)",
- Session->GetAccountId(), Session->GetRemoteAddress().c_str(), p.GetOpcode(), (uint32)p.size());
+ // Return true if everything is fine, otherwise apply the configured policy
+ if (!dosTriggered)
+ return true;
switch (_policy)
{
@@ -1272,3 +1296,225 @@ bool WorldSession::DosProtection::EvaluateOpcode(WorldPacket& p) const
return true;
}
}
+
+
+uint32 WorldSession::DosProtection::GetMaxPacketCounterAllowed(uint16 opcode) const
+{
+ uint32 maxPacketCounterAllowed;
+ switch (opcode)
+ {
+ // These opcodes are spammed by few addons so a very high limit is required
+ case CMSG_QUEST_QUERY:
+ case CMSG_MESSAGECHAT:
+ case CMSG_ITEM_QUERY_SINGLE:
+ case CMSG_ITEM_NAME_QUERY:
+ case CMSG_GAMEOBJECT_QUERY:
+ case CMSG_NAME_QUERY:
+ case CMSG_PET_NAME_QUERY:
+ case CMSG_CREATURE_QUERY:
+ case CMSG_NPC_TEXT_QUERY:
+ case CMSG_QUESTGIVER_STATUS_QUERY:
+ {
+ maxPacketCounterAllowed = 5000;
+ break;
+ }
+
+ case CMSG_ATTACKSTOP:
+ case CMSG_GUILD_QUERY:
+ case CMSG_ARENA_TEAM_QUERY:
+ case CMSG_TAXINODE_STATUS_QUERY:
+ case CMSG_TAXIQUERYAVAILABLENODES:
+ case CMSG_QUESTGIVER_QUERY_QUEST:
+ case CMSG_QUESTGIVER_STATUS_MULTIPLE_QUERY:
+ case CMSG_QUERY_QUESTS_COMPLETED:
+ case CMSG_QUEST_POI_QUERY:
+ case CMSG_QUERY_TIME:
+ case CMSG_PAGE_TEXT_QUERY:
+ case CMSG_PETITION_QUERY:
+ case CMSG_QUERY_INSPECT_ACHIEVEMENTS:
+ case CMSG_AREA_SPIRIT_HEALER_QUERY:
+ case CMSG_CORPSE_MAP_POSITION_QUERY:
+ case CMSG_MOVE_TIME_SKIPPED:
+ case CMSG_GUILD_BANK_QUERY_TAB:
+ case MSG_GUILD_BANK_LOG_QUERY:
+ case MSG_QUERY_GUILD_BANK_TEXT:
+ case MSG_CORPSE_QUERY:
+ case MSG_QUERY_NEXT_MAIL_TIME:
+ case MSG_GUILD_EVENT_LOG_QUERY:
+ case MSG_MOVE_SET_FACING:
+ case CMSG_INSPECT:
+ {
+ maxPacketCounterAllowed = 500;
+ break;
+ }
+
+ case CMSG_REQUEST_PARTY_MEMBER_STATS:
+ case CMSG_WHO:
+ case CMSG_SETSHEATHED:
+ case CMSG_CONTACT_LIST:
+ case CMSG_GUILD_SET_PUBLIC_NOTE:
+ case CMSG_GUILD_SET_OFFICER_NOTE:
+ {
+ maxPacketCounterAllowed = 50;
+ break;
+ }
+
+ case CMSG_SPELLCLICK:
+ case CMSG_GAMEOBJ_USE:
+ case CMSG_GAMEOBJ_REPORT_USE:
+ case MSG_RAID_TARGET_UPDATE:
+ case CMSG_QUESTGIVER_COMPLETE_QUEST:
+ case CMSG_PLAYER_VEHICLE_ENTER:
+ case CMSG_PETITION_SIGN:
+ {
+ maxPacketCounterAllowed = 20;
+ break;
+ }
+
+ case CMSG_PLAYER_LOGOUT:
+ case CMSG_LOGOUT_REQUEST:
+ case CMSG_LOGOUT_CANCEL:
+ case CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE:
+ case CMSG_REQUEST_VEHICLE_PREV_SEAT:
+ case CMSG_REQUEST_VEHICLE_NEXT_SEAT:
+ case CMSG_REQUEST_VEHICLE_SWITCH_SEAT:
+ case CMSG_TOGGLE_PVP:
+ case CMSG_ADD_FRIEND:
+ case CMSG_DEL_FRIEND:
+ case CMSG_SET_CONTACT_NOTES:
+ case CMSG_RESET_INSTANCES:
+ case CMSG_HEARTH_AND_RESURRECT:
+ case CMSG_CHAR_CREATE:
+ case CMSG_READY_FOR_ACCOUNT_DATA_TIMES:
+ case CMSG_CHAR_ENUM:
+ case CMSG_REALM_SPLIT:
+ case CMSG_CHAR_DELETE:
+ case CMSG_PLAYER_LOGIN:
+ case CMSG_PET_ABANDON:
+ case CMSG_PET_RENAME:
+ case CMSG_CHAR_RENAME:
+ case CMSG_CHAR_CUSTOMIZE:
+ case CMSG_CHAR_RACE_CHANGE:
+ case CMSG_CHAR_FACTION_CHANGE:
+ case CMSG_GMTICKET_CREATE:
+ case CMSG_GMTICKET_UPDATETEXT:
+ case CMSG_GMTICKET_DELETETICKET:
+ case CMSG_GMSURVEY_SUBMIT:
+ case CMSG_GM_REPORT_LAG:
+ case CMSG_BUG:
+ case CMSG_GMRESPONSE_RESOLVE:
+ case CMSG_ACTIVATETAXIEXPRESS:
+ case CMSG_ACTIVATETAXI:
+ case CMSG_SELF_RES:
+ case CMSG_INITIATE_TRADE:
+ case CMSG_BEGIN_TRADE:
+ case CMSG_UNLEARN_SKILL:
+ case CMSG_DISMISS_CONTROLLED_VEHICLE:
+ case CMSG_REQUEST_VEHICLE_EXIT:
+ case CMSG_LEARN_PREVIEW_TALENTS:
+ case CMSG_LEARN_PREVIEW_TALENTS_PET:
+ case CMSG_CONTROLLER_EJECT_PASSENGER:
+ case CMSG_EQUIPMENT_SET_SAVE:
+ case CMSG_DELETEEQUIPMENT_SET:
+ case CMSG_REMOVE_GLYPH:
+ case CMSG_ALTER_APPEARANCE:
+ case CMSG_QUESTGIVER_ACCEPT_QUEST:
+ case CMSG_QUESTGIVER_CHOOSE_REWARD:
+ case CMSG_QUESTGIVER_REQUEST_REWARD:
+ case CMSG_QUESTGIVER_CANCEL:
+ case CMSG_QUESTLOG_REMOVE_QUEST:
+ case CMSG_QUEST_CONFIRM_ACCEPT:
+ case CMSG_DISMISS_CRITTER:
+ case CMSG_REPOP_REQUEST:
+ case CMSG_PETITION_BUY:
+ case CMSG_TURN_IN_PETITION:
+ case CMSG_COMPLETE_CINEMATIC:
+ case CMSG_ITEM_REFUND:
+ case CMSG_SOCKET_GEMS:
+ case CMSG_WRAP_ITEM:
+ case CMSG_BUY_BANK_SLOT:
+ case CMSG_GROUP_ACCEPT:
+ case CMSG_GROUP_DECLINE:
+ case CMSG_GROUP_UNINVITE_GUID:
+ case CMSG_GROUP_UNINVITE:
+ case CMSG_GROUP_SET_LEADER:
+ case CMSG_GROUP_DISBAND:
+ case CMSG_GROUP_RAID_CONVERT:
+ case CMSG_GROUP_CHANGE_SUB_GROUP:
+ case CMSG_GROUP_ASSISTANT_LEADER:
+ case CMSG_OPT_OUT_OF_LOOT:
+ case CMSG_BATTLEMASTER_JOIN_ARENA:
+ case CMSG_LEAVE_BATTLEFIELD:
+ case CMSG_REPORT_PVP_AFK:
+ case CMSG_DUEL_ACCEPTED:
+ case CMSG_DUEL_CANCELLED:
+ case CMSG_CALENDAR_GET_CALENDAR:
+ case CMSG_CALENDAR_ADD_EVENT:
+ case CMSG_CALENDAR_UPDATE_EVENT:
+ case CMSG_CALENDAR_REMOVE_EVENT:
+ case CMSG_CALENDAR_COPY_EVENT:
+ case CMSG_CALENDAR_EVENT_INVITE:
+ case CMSG_CALENDAR_EVENT_SIGNUP:
+ case CMSG_CALENDAR_EVENT_RSVP:
+ case CMSG_CALENDAR_EVENT_REMOVE_INVITE:
+ case CMSG_CALENDAR_EVENT_MODERATOR_STATUS:
+ case CMSG_CALENDAR_COMPLAIN:
+ case CMSG_ARENA_TEAM_INVITE:
+ case CMSG_ARENA_TEAM_ACCEPT:
+ case CMSG_ARENA_TEAM_DECLINE:
+ case CMSG_ARENA_TEAM_LEAVE:
+ case CMSG_ARENA_TEAM_DISBAND:
+ case CMSG_ARENA_TEAM_REMOVE:
+ case CMSG_ARENA_TEAM_LEADER:
+ case CMSG_LOOT_METHOD:
+ case CMSG_GUILD_INVITE:
+ case CMSG_GUILD_ACCEPT:
+ case CMSG_GUILD_DECLINE:
+ case CMSG_GUILD_LEAVE:
+ case CMSG_GUILD_DISBAND:
+ case CMSG_GUILD_LEADER:
+ case CMSG_GUILD_MOTD:
+ case CMSG_GUILD_RANK:
+ case CMSG_GUILD_ADD_RANK:
+ case CMSG_GUILD_DEL_RANK:
+ case CMSG_GUILD_INFO_TEXT:
+ case CMSG_GUILD_BANK_DEPOSIT_MONEY:
+ case CMSG_GUILD_BANK_WITHDRAW_MONEY:
+ case CMSG_GUILD_BANK_BUY_TAB:
+ case CMSG_GUILD_BANK_UPDATE_TAB:
+ case CMSG_SET_GUILD_BANK_TEXT:
+ case MSG_SAVE_GUILD_EMBLEM:
+ case MSG_PETITION_RENAME:
+ case MSG_PETITION_DECLINE:
+ case MSG_TALENT_WIPE_CONFIRM:
+ case MSG_SET_DUNGEON_DIFFICULTY:
+ case MSG_SET_RAID_DIFFICULTY:
+ case MSG_RANDOM_ROLL:
+ case MSG_PARTY_ASSIGNMENT:
+ case MSG_RAID_READY_CHECK:
+ {
+ maxPacketCounterAllowed = 3;
+ break;
+ }
+
+ case CMSG_SET_ACTION_BUTTON:
+ {
+ maxPacketCounterAllowed = MAX_ACTION_BUTTONS;
+ break;
+ }
+
+ case CMSG_ITEM_REFUND_INFO:
+ {
+ maxPacketCounterAllowed = PLAYER_SLOTS_COUNT;
+ break;
+ }
+
+ default:
+ {
+ maxPacketCounterAllowed = 100;
+ break;
+ }
+ }
+
+ return maxPacketCounterAllowed;
+}
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 9d1a05ae753..968f5a229ba 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -28,9 +28,11 @@
#include "AddonMgr.h"
#include "DatabaseEnv.h"
#include "World.h"
+#include "Opcodes.h"
#include "WorldPacket.h"
#include "Cryptography/BigNumber.h"
#include "AccountMgr.h"
+#include <unordered_set>
class Creature;
class GameObject;
@@ -196,6 +198,12 @@ class CharacterCreateInfo
uint8 CharCount;
};
+struct PacketCounter
+{
+ time_t lastReceiveTime;
+ uint32 amountCounter;
+};
+
/// Player session in the World
class WorldSession
{
@@ -721,7 +729,6 @@ class WorldSession
void HandleCompleteCinematic(WorldPacket& recvPacket);
void HandleNextCinematicCamera(WorldPacket& recvPacket);
- void HandlePageQuerySkippedOpcode(WorldPacket& recvPacket);
void HandlePageTextQueryOpcode(WorldPacket& recvPacket);
void HandleTutorialFlag (WorldPacket& recvData);
@@ -929,7 +936,7 @@ class WorldSession
friend class World;
public:
DosProtection(WorldSession* s) : Session(s), _policy((Policy)sWorld->getIntConfig(CONFIG_PACKET_SPOOF_POLICY)) { }
- bool EvaluateOpcode(WorldPacket& p) const;
+ bool EvaluateOpcode(WorldPacket& p, time_t time) const;
void AllowOpcode(uint16 opcode, bool allow) { _isOpcodeAllowed[opcode] = allow; }
protected:
enum Policy
@@ -948,12 +955,17 @@ class WorldSession
return itr->second;
}
+ uint32 GetMaxPacketCounterAllowed(uint16 opcode) const;
+
WorldSession* Session;
private:
typedef std::unordered_map<uint16, bool> OpcodeStatusMap;
OpcodeStatusMap _isOpcodeAllowed; // could be bool array, but wouldn't be practical for game versions with non-linear opcodes
Policy _policy;
+ typedef std::unordered_map<uint16, PacketCounter> PacketThrottlingMap;
+ // mark this member as "mutable" so it can be modified even in const functions
+ mutable PacketThrottlingMap _PacketThrottlingMap;
DosProtection(DosProtection const& right) = delete;
DosProtection& operator=(DosProtection const& right) = delete;
@@ -1008,7 +1020,6 @@ class WorldSession
uint32 recruiterId;
bool isRecruiter;
ACE_Based::LockedQueue<WorldPacket*, ACE_Thread_Mutex> _recvQueue;
- time_t timeLastWhoCommand;
rbac::RBACData* _RBACData;
WorldSession(WorldSession const& right) = delete;
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index 8e7edfc5355..3e1763e6c5b 100644
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -1343,17 +1343,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
if (target->HasAura(61988) && !target->HasAura(25771))
target->RemoveAura(61988);
break;
- case 72368: // Shared Suffering
- case 72369:
- if (caster)
- {
- if (AuraEffect* aurEff = GetEffect(0))
- {
- int32 remainingDamage = aurEff->GetAmount() * (aurEff->GetTotalTicks() - aurEff->GetTickNumber());
- if (remainingDamage > 0)
- caster->CastCustomSpell(caster, 72373, NULL, &remainingDamage, NULL, true);
- }
- }
+ default:
break;
}
break;
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 7c6f2552b44..efdc3ca532f 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -1251,8 +1251,12 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffIndex effIndex, SpellImplici
float angle = float(rand_norm()) * static_cast<float>(M_PI * 35.0f / 180.0f) - static_cast<float>(M_PI * 17.5f / 180.0f);
m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE, dist, angle);
- float ground = z;
- float liquidLevel = m_caster->GetMap()->GetWaterOrGroundLevel(x, y, z, &ground);
+ float ground = m_caster->GetMap()->GetHeight(m_caster->GetPhaseMask(), x, y, z, true, 50.0f);
+ float liquidLevel = VMAP_INVALID_HEIGHT_VALUE;
+ LiquidData liquidData;
+ if (m_caster->GetMap()->getLiquidStatus(x, y, z, MAP_ALL_LIQUIDS, &liquidData))
+ liquidLevel = liquidData.level;
+
if (liquidLevel <= ground) // When there is no liquid Map::GetWaterOrGroundLevel returns ground level
{
SendCastResult(SPELL_FAILED_NOT_HERE);
@@ -1288,10 +1292,7 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffIndex effIndex, SpellImplici
dist = objSize + (dist - objSize) * float(rand_norm());
Position pos = dest._position;
- if (targetType.GetTarget() == TARGET_DEST_CASTER_FRONT_LEAP)
- m_caster->MovePositionToFirstCollision(pos, dist, angle);
- else
- m_caster->MovePosition(pos, dist, angle);
+ m_caster->MovePositionToFirstCollision(pos, dist, angle);
dest.Relocate(pos);
break;
@@ -1324,7 +1325,7 @@ void Spell::SelectImplicitTargetDestTargets(SpellEffIndex effIndex, SpellImplici
dist = objSize + (dist - objSize) * float(rand_norm());
Position pos = dest._position;
- target->MovePosition(pos, dist, angle);
+ target->MovePositionToFirstCollision(pos, dist, angle);
dest.Relocate(pos);
break;
@@ -1363,7 +1364,7 @@ void Spell::SelectImplicitDestDestTargets(SpellEffIndex effIndex, SpellImplicitT
dist *= float(rand_norm());
Position pos = dest._position;
- m_caster->MovePosition(pos, dist, angle);
+ m_caster->MovePositionToFirstCollision(pos, dist, angle);
dest.Relocate(pos);
break;
@@ -4187,7 +4188,7 @@ void Spell::SendChannelStart(uint32 duration)
void Spell::SendResurrectRequest(Player* target)
{
- // get ressurector name for creature resurrections, otherwise packet will be not accepted
+ // get resurrector name for creature resurrections, otherwise packet will be not accepted
// for player resurrections the name is looked up by guid
std::string const sentName(m_caster->GetTypeId() == TYPEID_PLAYER
? ""
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 65530b4b282..5b68d244457 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -259,7 +259,7 @@ void Spell::EffectResurrectNew(SpellEffIndex effIndex)
Player* target = unitTarget->ToPlayer();
- if (target->isRessurectRequested()) // already have one active request
+ if (target->isResurrectRequested()) // already have one active request
return;
uint32 health = damage;
@@ -4542,7 +4542,7 @@ void Spell::EffectResurrect(SpellEffIndex effIndex)
Player* target = unitTarget->ToPlayer();
- if (target->isRessurectRequested()) // already have one active request
+ if (target->isResurrectRequested()) // already have one active request
return;
uint32 health = target->CountPctFromMaxHealth(damage);
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index 21c36510a32..ba4c3deca85 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -24,6 +24,7 @@
#include "Player.h"
#include "Battleground.h"
#include "Vehicle.h"
+#include "Pet.h"
uint32 GetTargetFlagMask(SpellTargetObjectTypes objType)
{
@@ -1505,8 +1506,16 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* ta
// creature/player specific target checks
if (unitTarget)
{
- if (AttributesEx & SPELL_ATTR1_CANT_TARGET_IN_COMBAT && unitTarget->IsInCombat())
- return SPELL_FAILED_TARGET_AFFECTING_COMBAT;
+ if (AttributesEx & SPELL_ATTR1_CANT_TARGET_IN_COMBAT)
+ {
+ if (unitTarget->IsInCombat())
+ return SPELL_FAILED_TARGET_AFFECTING_COMBAT;
+ // player with active pet counts as a player in combat
+ else if (Player const* player = unitTarget->ToPlayer())
+ if (Pet* pet = player->GetPet())
+ if (pet->GetVictim() && !pet->HasUnitState(UNIT_STATE_CONTROLLED))
+ return SPELL_FAILED_TARGET_AFFECTING_COMBAT;
+ }
// only spells with SPELL_ATTR3_ONLY_TARGET_GHOSTS can target ghosts
if (((AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_GHOSTS) != 0) != unitTarget->HasAuraType(SPELL_AURA_GHOST))
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index ba5b8856323..501cb1e77f2 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -3375,6 +3375,18 @@ void SpellMgr::LoadSpellInfoCorrections()
break;
// ENDOF TRIAL OF THE CRUSADER SPELLS
//
+ // HALLS OF REFLECTION SPELLS
+ //
+ case 72435: // Defiling Horror
+ case 72452: // Defiling Horror
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_60_YARDS); // 60yd
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_60_YARDS); // 60yd
+ break;
+ case 72900: // Start Halls of Reflection Quest AE
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
+ break;
+ // ENDOF HALLS OF REFLECTION SPELLS
+ //
// ICECROWN CITADEL SPELLS
//
// THESE SPELLS ARE WORKING CORRECTLY EVEN WITHOUT THIS HACK
diff --git a/src/server/game/Spells/SpellScript.h b/src/server/game/Spells/SpellScript.h
index 75a191a9801..32b8781fb89 100644
--- a/src/server/game/Spells/SpellScript.h
+++ b/src/server/game/Spells/SpellScript.h
@@ -249,7 +249,7 @@ class SpellScript : public _SpellScript
class HitHandlerFunction : public SpellScript::HitHandler { public: HitHandlerFunction(SpellHitFnType _pHitHandlerScript) : SpellScript::HitHandler((SpellScript::SpellHitFnType)_pHitHandlerScript) { } }; \
class ObjectAreaTargetSelectHandlerFunction : public SpellScript::ObjectAreaTargetSelectHandler { public: ObjectAreaTargetSelectHandlerFunction(SpellObjectAreaTargetSelectFnType _pObjectAreaTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::ObjectAreaTargetSelectHandler((SpellScript::SpellObjectAreaTargetSelectFnType)_pObjectAreaTargetSelectHandlerScript, _effIndex, _targetType) { } }; \
class ObjectTargetSelectHandlerFunction : public SpellScript::ObjectTargetSelectHandler { public: ObjectTargetSelectHandlerFunction(SpellObjectTargetSelectFnType _pObjectTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::ObjectTargetSelectHandler((SpellScript::SpellObjectTargetSelectFnType)_pObjectTargetSelectHandlerScript, _effIndex, _targetType) { } }; \
- class DestinationTargetSelectHandlerFunction : public SpellScript::DestinationTargetSelectHandler { public: DestinationTargetSelectHandlerFunction(SpellDestinationTargetSelectFnType _DestinationTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::DestinationTargetSelectHandler((SpellScript::SpellDestinationTargetSelectFnType)_DestinationTargetSelectHandlerScript, _effIndex, _targetType) { } };
+ class DestinationTargetSelectHandlerFunction : public SpellScript::DestinationTargetSelectHandler { public: DestinationTargetSelectHandlerFunction(SpellDestinationTargetSelectFnType _DestinationTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::DestinationTargetSelectHandler((SpellScript::SpellDestinationTargetSelectFnType)_DestinationTargetSelectHandlerScript, _effIndex, _targetType) { } }
#define PrepareSpellScript(CLASSNAME) SPELLSCRIPT_FUNCTION_TYPE_DEFINES(CLASSNAME) SPELLSCRIPT_FUNCTION_CAST_DEFINES(CLASSNAME)
public:
@@ -623,7 +623,7 @@ class AuraScript : public _SpellScript
class EffectSplitFunction : public AuraScript::EffectSplitHandler { public: EffectSplitFunction(AuraEffectSplitFnType _pEffectHandlerScript, uint8 _effIndex) : AuraScript::EffectSplitHandler((AuraScript::AuraEffectSplitFnType)_pEffectHandlerScript, _effIndex) { } }; \
class CheckProcHandlerFunction : public AuraScript::CheckProcHandler { public: CheckProcHandlerFunction(AuraCheckProcFnType handlerScript) : AuraScript::CheckProcHandler((AuraScript::AuraCheckProcFnType)handlerScript) { } }; \
class AuraProcHandlerFunction : public AuraScript::AuraProcHandler { public: AuraProcHandlerFunction(AuraProcFnType handlerScript) : AuraScript::AuraProcHandler((AuraScript::AuraProcFnType)handlerScript) { } }; \
- class EffectProcHandlerFunction : public AuraScript::EffectProcHandler { public: EffectProcHandlerFunction(AuraEffectProcFnType effectHandlerScript, uint8 effIndex, uint16 effName) : AuraScript::EffectProcHandler((AuraScript::AuraEffectProcFnType)effectHandlerScript, effIndex, effName) { } }; \
+ class EffectProcHandlerFunction : public AuraScript::EffectProcHandler { public: EffectProcHandlerFunction(AuraEffectProcFnType effectHandlerScript, uint8 effIndex, uint16 effName) : AuraScript::EffectProcHandler((AuraScript::AuraEffectProcFnType)effectHandlerScript, effIndex, effName) { } }
#define PrepareAuraScript(CLASSNAME) AURASCRIPT_FUNCTION_TYPE_DEFINES(CLASSNAME) AURASCRIPT_FUNCTION_CAST_DEFINES(CLASSNAME)
diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp
index b9ecfffb8c3..71d51153b4c 100644
--- a/src/server/game/Tickets/TicketMgr.cpp
+++ b/src/server/game/Tickets/TicketMgr.cpp
@@ -233,7 +233,7 @@ void GmTicket::SetChatLog(std::list<uint32> time, std::string const& log)
std::stringstream ss(log);
std::stringstream newss;
std::string line;
- while (std::getline(ss, line))
+ while (std::getline(ss, line) && !time.empty())
{
newss << secsToTimeString(time.front()) << ": " << line << "\n";
time.pop_front();
diff --git a/src/server/game/Warden/Warden.cpp b/src/server/game/Warden/Warden.cpp
index 42872bba22e..0810295c0cc 100644
--- a/src/server/game/Warden/Warden.cpp
+++ b/src/server/game/Warden/Warden.cpp
@@ -223,7 +223,7 @@ std::string Warden::Penalty(WardenCheck* check /*= NULL*/)
void WorldSession::HandleWardenDataOpcode(WorldPacket& recvData)
{
- if (!_warden)
+ if (!_warden || recvData.empty())
return;
_warden->DecryptData(recvData.contents(), recvData.size());
diff --git a/src/server/game/Weather/Weather.cpp b/src/server/game/Weather/Weather.cpp
index cb332df9a41..8d39f553910 100644
--- a/src/server/game/Weather/Weather.cpp
+++ b/src/server/game/Weather/Weather.cpp
@@ -28,7 +28,7 @@
#include "ObjectMgr.h"
#include "Util.h"
#include "ScriptMgr.h"
-#include "Opcodes.h"
+#include "WorldSession.h"
/// Create the Weather object
Weather::Weather(uint32 zone, WeatherData const* weatherChances)
diff --git a/src/server/game/Weather/WeatherMgr.cpp b/src/server/game/Weather/WeatherMgr.cpp
index 59dc591ccd0..5cf5cde75fd 100644
--- a/src/server/game/Weather/WeatherMgr.cpp
+++ b/src/server/game/Weather/WeatherMgr.cpp
@@ -27,7 +27,7 @@
#include "AutoPtr.h"
#include "Player.h"
#include "WorldPacket.h"
-#include "Opcodes.h"
+#include "WorldSession.h"
namespace WeatherMgr
{
diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp
index f2f11801229..5dbe95b3e54 100644
--- a/src/server/scripts/Commands/cs_modify.cpp
+++ b/src/server/scripts/Commands/cs_modify.cpp
@@ -1020,7 +1020,7 @@ public:
}
else
{
- if (newmoney > MAX_MONEY_AMOUNT)
+ if (newmoney > static_cast<int32>(MAX_MONEY_AMOUNT))
newmoney = MAX_MONEY_AMOUNT;
handler->PSendSysMessage(LANG_YOU_TAKE_MONEY, abs(moneyToAdd), handler->GetNameLink(target).c_str());
@@ -1035,10 +1035,7 @@ public:
if (handler->needReportToTarget(target))
ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOURS_MONEY_GIVEN, handler->GetNameLink().c_str(), moneyToAdd);
- if (moneyToAdd >= MAX_MONEY_AMOUNT)
- moneyToAdd = MAX_MONEY_AMOUNT;
-
- if (targetMoney >= uint32(MAX_MONEY_AMOUNT) - moneyToAdd)
+ if (targetMoney >= MAX_MONEY_AMOUNT - moneyToAdd)
moneyToAdd -= targetMoney;
target->ModifyMoney(moneyToAdd);
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index a0df1292210..28d49fe11aa 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -715,6 +715,7 @@ public:
handler->PSendSysMessage(LANG_NPCINFO_LEVEL, target->getLevel());
handler->PSendSysMessage(LANG_NPCINFO_EQUIPMENT, target->GetCurrentEquipmentId(), target->GetOriginalEquipmentId());
handler->PSendSysMessage(LANG_NPCINFO_HEALTH, target->GetCreateHealth(), target->GetMaxHealth(), target->GetHealth());
+ handler->PSendSysMessage(LANG_NPCINFO_INHABIT_TYPE, cInfo->InhabitType);
handler->PSendSysMessage(LANG_NPCINFO_UNIT_FIELD_FLAGS, target->GetUInt32Value(UNIT_FIELD_FLAGS));
for (uint8 i = 0; i < MAX_UNIT_FLAGS; ++i)
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp
index 83b716728ea..47e91cac63d 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp
@@ -82,7 +82,7 @@ public:
// check if creature is not outside of building
if (resetTimer < diff)
{
- if (Creature* pBalinda = Unit::GetCreature(*me, balindaGUID))
+ if (Creature* pBalinda = ObjectAccessor::GetCreature(*me, balindaGUID))
if (me->GetDistance2d(pBalinda->GetHomePosition().GetPositionX(), pBalinda->GetHomePosition().GetPositionY()) > 50)
EnterEvadeMode();
resetTimer = 5 * IN_MILLISECONDS;
@@ -212,4 +212,4 @@ void AddSC_boss_balinda()
{
new boss_balinda;
new npc_water_elemental;
-};
+}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
index 1ab2d746aa5..3eab75cfd76 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
@@ -229,7 +229,7 @@ public:
if (RingBossGUID)
{
- Creature* boss = Unit::GetCreature(*me, RingBossGUID);
+ Creature* boss = ObjectAccessor::GetCreature(*me, RingBossGUID);
if (boss && !boss->IsAlive() && boss->isDead())
{
RingBossGUID = 0;
@@ -242,7 +242,7 @@ public:
for (uint8 i = 0; i < MAX_NPC_AMOUNT; ++i)
{
- Creature* mob = Unit::GetCreature(*me, RingMobGUID[i]);
+ Creature* mob = ObjectAccessor::GetCreature(*me, RingMobGUID[i]);
if (mob && !mob->IsAlive() && mob->isDead())
{
RingMobGUID[i] = 0;
@@ -1304,7 +1304,7 @@ public:
DoGo(DATA_GO_BAR_KEG_TRAP, 0); //doesn't work very well, leaving code here for future
//spell by trap has effect61, this indicate the bar go hostile
- if (Unit* tmp = Unit::GetUnit(*me, instance->GetData64(DATA_PHALANX)))
+ if (Unit* tmp = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_PHALANX)))
tmp->setFaction(14);
//for later, this event(s) has alot more to it.
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
index ab065f62bbb..94bf3e991f4 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
@@ -243,37 +243,37 @@ public:
switch (eventId)
{
case EVENT_START_1:
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_0);
events.ScheduleEvent(EVENT_START_2, 4000);
break;
case EVENT_START_2:
events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->HandleEmoteCommand(EMOTE_ONESHOT_POINT);
events.ScheduleEvent(EVENT_START_3, 4000);
break;
case EVENT_START_3:
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_1);
events.ScheduleEvent(EVENT_WAVE_1, 2000);
events.ScheduleEvent(EVENT_TURN_TO_REND, 4000);
events.ScheduleEvent(EVENT_WAVES_TEXT_1, 20000);
break;
case EVENT_TURN_TO_REND:
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
{
victor->SetFacingToObject(me);
victor->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
}
break;
case EVENT_TURN_TO_PLAYER:
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
if (Unit* player = victor->SelectNearestPlayer(60.0f))
victor->SetFacingToObject(player);
break;
case EVENT_TURN_TO_FACING_1:
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->SetFacingTo(1.518436f);
break;
case EVENT_TURN_TO_FACING_2:
@@ -283,7 +283,7 @@ public:
me->SetFacingTo(1.500983f);
break;
case EVENT_WAVES_EMOTE_1:
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->HandleEmoteCommand(EMOTE_ONESHOT_QUESTION);
break;
case EVENT_WAVES_EMOTE_2:
@@ -291,7 +291,7 @@ public:
break;
case EVENT_WAVES_TEXT_1:
events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_2);
me->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000);
@@ -301,7 +301,7 @@ public:
break;
case EVENT_WAVES_TEXT_2:
events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_3);
events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000);
events.ScheduleEvent(EVENT_WAVE_3, 2000);
@@ -309,7 +309,7 @@ public:
break;
case EVENT_WAVES_TEXT_3:
events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_4);
events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000);
events.ScheduleEvent(EVENT_WAVE_4, 2000);
@@ -324,7 +324,7 @@ public:
break;
case EVENT_WAVES_TEXT_5:
events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_5);
events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000);
events.ScheduleEvent(EVENT_WAVE_6, 2000);
@@ -332,26 +332,26 @@ public:
break;
case EVENT_WAVES_COMPLETE_TEXT_1:
events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_6);
events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000);
events.ScheduleEvent(EVENT_WAVES_COMPLETE_TEXT_2, 13000);
break;
case EVENT_WAVES_COMPLETE_TEXT_2:
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_7);
Talk(SAY_BLACKHAND_2);
events.ScheduleEvent(EVENT_PATH_REND, 1000);
events.ScheduleEvent(EVENT_WAVES_COMPLETE_TEXT_3, 4000);
break;
case EVENT_WAVES_COMPLETE_TEXT_3:
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_8);
events.ScheduleEvent(EVENT_PATH_NEFARIUS, 1000);
events.ScheduleEvent(EVENT_PATH_REND, 1000);
break;
case EVENT_PATH_NEFARIUS:
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->GetMotionMaster()->MovePath(NEFARIUS_PATH_1, true);
break;
case EVENT_PATH_REND:
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp
index e645dd383f2..b3a55e1fe4a 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp
@@ -26,7 +26,7 @@
#include "ScriptedCreature.h"
#include "blackrock_spire.h"
-uint32 const DragonspireRunes[7] = { GO_HALL_RUNE_1, GO_HALL_RUNE_2, GO_HALL_RUNE_3, GO_HALL_RUNE_4, GO_HALL_RUNE_5, GO_HALL_RUNE_6, GO_HALL_RUNE_7 };
+//uint32 const DragonspireRunes[7] = { GO_HALL_RUNE_1, GO_HALL_RUNE_2, GO_HALL_RUNE_3, GO_HALL_RUNE_4, GO_HALL_RUNE_5, GO_HALL_RUNE_6, GO_HALL_RUNE_7 };
uint32 const DragonspireMobs[3] = { NPC_BLACKHAND_DREADWEAVER, NPC_BLACKHAND_SUMMONER, NPC_BLACKHAND_VETERAN };
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp
index ea4784bb5a4..8d4a84197b1 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp
@@ -167,7 +167,7 @@ public:
{
if (InstanceScript* instance = go->GetInstanceScript())
if (instance->GetData(DATA_EGG_EVENT) != DONE)
- if (Creature* razor = Unit::GetCreature(*go, instance->GetData64(DATA_RAZORGORE_THE_UNTAMED)))
+ if (Creature* razor = ObjectAccessor::GetCreature(*go, instance->GetData64(DATA_RAZORGORE_THE_UNTAMED)))
{
razor->Attack(player, true);
player->CastSpell(razor, SPELL_MINDCONTROL);
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp
index c00029bea50..bbe70947901 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp
@@ -146,8 +146,8 @@ public:
break;
case EVENT_SPEECH_4:
me->setFaction(103);
- if (PlayerGUID && Unit::GetUnit(*me, PlayerGUID))
- AttackStart(Unit::GetUnit(*me, PlayerGUID));;
+ if (PlayerGUID && ObjectAccessor::GetUnit(*me, PlayerGUID))
+ AttackStart(ObjectAccessor::GetUnit(*me, PlayerGUID));;
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp
index 048e6149b4b..6eafb41a8fa 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp
@@ -147,7 +147,7 @@ class boss_ragnaros : public CreatureScript
break;
case EVENT_INTRO_4:
Talk(SAY_ARRIVAL5_RAG);
- if (Creature* executus = Unit::GetCreature(*me, instance->GetData64(BOSS_MAJORDOMO_EXECUTUS)))
+ if (Creature* executus = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MAJORDOMO_EXECUTUS)))
me->Kill(executus);
break;
case EVENT_INTRO_5:
diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
index 1398f959e46..b171bf014c7 100644
--- a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
+++ b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
@@ -198,7 +198,7 @@ public:
if (!SummonList.empty())
for (std::list<uint64>::const_iterator itr = SummonList.begin(); itr != SummonList.end(); ++itr)
{
- if (Creature* summon = Unit::GetCreature(*me, *itr))
+ if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr))
{
if (summon->IsAlive())
summon->DisappearAndDie();
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
index 59a04d6a457..b130ac74be3 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
@@ -101,7 +101,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
- if (Unit* midnight = Unit::GetUnit(*me, Midnight))
+ if (Unit* midnight = ObjectAccessor::GetUnit(*me, Midnight))
midnight->Kill(midnight);
}
@@ -149,7 +149,7 @@ public:
{
if (Phase == 2)
{
- if (Unit* unit = Unit::GetUnit(*me, Attumen))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, Attumen))
Talk(SAY_MIDNIGHT_KILL, unit);
}
}
@@ -172,7 +172,7 @@ public:
}
else if (Phase == 2 && HealthBelowPct(25))
{
- if (Unit* pAttumen = Unit::GetUnit(*me, Attumen))
+ if (Unit* pAttumen = ObjectAccessor::GetUnit(*me, Attumen))
Mount(pAttumen);
}
else if (Phase == 3)
@@ -184,7 +184,7 @@ public:
Mount_Timer = 0;
me->SetVisible(false);
me->GetMotionMaster()->MoveIdle();
- if (Unit* pAttumen = Unit::GetUnit(*me, Attumen))
+ if (Unit* pAttumen = ObjectAccessor::GetUnit(*me, Attumen))
{
pAttumen->SetDisplayId(MOUNTED_DISPLAYID);
pAttumen->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -242,7 +242,7 @@ void boss_attumen::boss_attumenAI::UpdateAI(uint32 diff)
if (ResetTimer <= diff)
{
ResetTimer = 0;
- Unit* pMidnight = Unit::GetUnit(*me, Midnight);
+ Unit* pMidnight = ObjectAccessor::GetUnit(*me, Midnight);
if (pMidnight)
{
pMidnight->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -288,7 +288,7 @@ void boss_attumen::boss_attumenAI::UpdateAI(uint32 diff)
std::vector<Unit*> target_list;
for (ThreatContainer::StorageType::const_iterator itr = t_list.begin(); itr != t_list.end(); ++itr)
{
- target = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (target && !target->IsWithinDist(me, ATTACK_DISTANCE, false))
target_list.push_back(target);
target = NULL;
@@ -304,7 +304,7 @@ void boss_attumen::boss_attumenAI::UpdateAI(uint32 diff)
{
if (HealthBelowPct(25))
{
- Creature* pMidnight = Unit::GetCreature(*me, Midnight);
+ Creature* pMidnight = ObjectAccessor::GetCreature(*me, Midnight);
if (pMidnight && pMidnight->GetTypeId() == TYPEID_UNIT)
{
CAST_AI(boss_midnight::boss_midnightAI, (pMidnight->AI()))->Mount(me);
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp
index 5d52cc62f8a..0ca7ee90986 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp
@@ -236,7 +236,7 @@ public:
{
if (AddGUID[i])
{
- Creature* temp = Creature::GetCreature((*me), AddGUID[i]);
+ Creature* temp = ObjectAccessor::GetCreature((*me), AddGUID[i]);
if (temp && temp->IsAlive())
{
temp->AI()->AttackStart(me->GetVictim());
@@ -270,7 +270,7 @@ public:
{
if (AddGUID[i])
{
- Creature* temp = Unit::GetCreature((*me), AddGUID[i]);
+ Creature* temp = ObjectAccessor::GetCreature((*me), AddGUID[i]);
if (temp && temp->IsAlive())
if (!temp->GetVictim())
temp->AI()->AttackStart(me->GetVictim());
@@ -350,7 +350,7 @@ struct boss_moroes_guestAI : public ScriptedAI
void AcquireGUID()
{
- if (Creature* Moroes = Unit::GetCreature(*me, instance->GetData64(DATA_MOROES)))
+ if (Creature* Moroes = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MOROES)))
for (uint8 i = 0; i < 4; ++i)
if (uint64 GUID = CAST_AI(boss_moroes::boss_moroesAI, Moroes->AI())->AddGUID[i])
GuestGUID[i] = GUID;
@@ -361,7 +361,7 @@ struct boss_moroes_guestAI : public ScriptedAI
uint64 TempGUID = GuestGUID[rand()%4];
if (TempGUID)
{
- Unit* unit = Unit::GetUnit(*me, TempGUID);
+ Unit* unit = ObjectAccessor::GetUnit(*me, TempGUID);
if (unit && unit->IsAlive())
return unit;
}
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp
index 33ea71f81e1..010b7223f97 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp
@@ -158,9 +158,9 @@ public:
{
for (int i=0; i<3; ++i)
{
- if (Creature* portal = Unit::GetCreature(*me, PortalGUID[i]))
+ if (Creature* portal = ObjectAccessor::GetCreature(*me, PortalGUID[i]))
portal->DisappearAndDie();
- if (Creature* portal = Unit::GetCreature(*me, BeamerGUID[i]))
+ if (Creature* portal = ObjectAccessor::GetCreature(*me, BeamerGUID[i]))
portal->DisappearAndDie();
PortalGUID[i] = 0;
BeamTarget[i] = 0;
@@ -170,10 +170,10 @@ public:
void UpdatePortals() // Here we handle the beams' behavior
{
for (int j=0; j<3; ++j) // j = color
- if (Creature* portal = Unit::GetCreature(*me, PortalGUID[j]))
+ if (Creature* portal = ObjectAccessor::GetCreature(*me, PortalGUID[j]))
{
// the one who's been cast upon before
- Unit* current = Unit::GetUnit(*portal, BeamTarget[j]);
+ Unit* current = ObjectAccessor::GetUnit(*portal, BeamTarget[j]);
// temporary store for the best suitable beam reciever
Unit* target = me;
@@ -205,7 +205,7 @@ public:
{
BeamTarget[j] = target->GetGUID();
// remove currently beaming portal
- if (Creature* beamer = Unit::GetCreature(*portal, BeamerGUID[j]))
+ if (Creature* beamer = ObjectAccessor::GetCreature(*portal, BeamerGUID[j]))
{
beamer->CastSpell(target, PortalBeam[j], false);
beamer->DisappearAndDie();
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
index cf13863f84b..befe72a6403 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
@@ -146,7 +146,7 @@ public:
void KilledUnit(Unit* who) override
{
- if (Unit* unit = Unit::GetUnit(*me, malchezaar))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, malchezaar))
if (Creature* creature = unit->ToCreature())
creature->AI()->KilledUnit(who);
}
@@ -273,7 +273,7 @@ public:
{
//Infernal Cleanup
for (std::vector<uint64>::const_iterator itr = infernals.begin(); itr != infernals.end(); ++itr)
- if (Unit* pInfernal = Unit::GetUnit(*me, *itr))
+ if (Unit* pInfernal = ObjectAccessor::GetUnit(*me, *itr))
if (pInfernal->IsAlive())
{
pInfernal->SetVisible(false);
@@ -287,7 +287,7 @@ public:
{
for (uint8 i = 0; i < 2; ++i)
{
- Unit* axe = Unit::GetUnit(*me, axes[i]);
+ Unit* axe = ObjectAccessor::GetUnit(*me, axes[i]);
if (axe && axe->IsAlive())
axe->Kill(axe);
axes[i] = 0;
@@ -316,7 +316,7 @@ public:
ThreatContainer::StorageType::const_iterator itr = t_list.begin();
std::advance(itr, 1);
for (; itr != t_list.end(); ++itr) //store the threat list in a different container
- if (Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid()))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()))
if (target->IsAlive() && target->GetTypeId() == TYPEID_PLAYER)
targets.push_back(target);
@@ -340,7 +340,7 @@ public:
{
for (uint8 i = 0; i < 5; ++i)
{
- Unit* target = Unit::GetUnit(*me, enfeeble_targets[i]);
+ Unit* target = ObjectAccessor::GetUnit(*me, enfeeble_targets[i]);
if (target && target->IsAlive())
target->SetHealth(enfeeble_health[i]);
enfeeble_targets[i] = 0;
@@ -480,7 +480,7 @@ public:
{
for (uint8 i = 0; i < 2; ++i)
{
- if (Unit* axe = Unit::GetUnit(*me, axes[i]))
+ if (Unit* axe = ObjectAccessor::GetUnit(*me, axes[i]))
{
if (axe->GetVictim())
DoModifyThreatPercent(axe->GetVictim(), -100);
@@ -583,7 +583,7 @@ public:
void netherspite_infernal::netherspite_infernalAI::Cleanup()
{
- Creature* pMalchezaar = Unit::GetCreature(*me, malchezaar);
+ Creature* pMalchezaar = ObjectAccessor::GetCreature(*me, malchezaar);
if (pMalchezaar && pMalchezaar->IsAlive())
CAST_AI(boss_malchezaar::boss_malchezaarAI, pMalchezaar->AI())->Cleanup(me, point);
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
index 0a3a697c6a7..9bda41b03a1 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
@@ -184,7 +184,7 @@ public:
//store the threat list in a different container
for (ThreatContainer::StorageType::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)
{
- Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
//only on alive players
if (target && target->IsAlive() && target->GetTypeId() == TYPEID_PLAYER)
targets.push_back(target);
@@ -450,7 +450,7 @@ public:
if (!FlameWreathTarget[i])
continue;
- Unit* unit = Unit::GetUnit(*me, FlameWreathTarget[i]);
+ Unit* unit = ObjectAccessor::GetUnit(*me, FlameWreathTarget[i]);
if (unit && !unit->IsWithinDist2d(FWTargPosX[i], FWTargPosY[i], 3))
{
unit->CastSpell(unit, 20476, true, 0, 0, me->GetGUID());
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
index 65c3522ea9a..3b499b649cf 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
@@ -103,7 +103,7 @@ public:
uint64 TerestianGUID = instance->GetData64(DATA_TERESTIAN);
if (TerestianGUID)
{
- Unit* Terestian = Unit::GetUnit(*me, TerestianGUID);
+ Unit* Terestian = ObjectAccessor::GetUnit(*me, TerestianGUID);
if (Terestian && Terestian->IsAlive())
DoCast(Terestian, SPELL_BROKEN_PACT, true);
}
@@ -158,7 +158,7 @@ public:
{
if (SacrificeGUID)
{
- Unit* Sacrifice = Unit::GetUnit(*me, SacrificeGUID);
+ Unit* Sacrifice = ObjectAccessor::GetUnit(*me, SacrificeGUID);
if (Sacrifice)
Sacrifice->RemoveAurasDueToSpell(SPELL_SACRIFICE);
}
@@ -280,7 +280,7 @@ public:
{
if (PortalGUID[i])
{
- if (Creature* pPortal = Unit::GetCreature(*me, PortalGUID[i]))
+ if (Creature* pPortal = ObjectAccessor::GetCreature(*me, PortalGUID[i]))
{
CAST_AI(npc_fiendish_portal::npc_fiendish_portalAI, pPortal->AI())->DespawnAllImp();
pPortal->DespawnOrUnsummon();
@@ -345,7 +345,7 @@ public:
{
if (PortalGUID[i])
{
- if (Creature* pPortal = Unit::GetCreature((*me), PortalGUID[i]))
+ if (Creature* pPortal = ObjectAccessor::GetCreature((*me), PortalGUID[i]))
pPortal->DespawnOrUnsummon();
PortalGUID[i] = 0;
@@ -396,7 +396,7 @@ public:
if (PortalGUID[0] && PortalGUID[1])
{
- if (Creature* pPortal = Unit::GetCreature(*me, PortalGUID[urand(0, 1)]))
+ if (Creature* pPortal = ObjectAccessor::GetCreature(*me, PortalGUID[urand(0, 1)]))
pPortal->CastSpell(me->GetVictim(), SPELL_SUMMON_FIENDISIMP, false);
SummonTimer = 5000;
}
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
index 010e06d67cb..c0e6a8d3b90 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
@@ -109,7 +109,7 @@ void SummonCroneIfReady(InstanceScript* instance, Creature* creature)
pCrone->AI()->AttackStart(creature->GetVictim());
}
}
-};
+}
class boss_dorothee : public CreatureScript
{
@@ -254,7 +254,7 @@ public:
{
if (DorotheeGUID)
{
- Creature* Dorothee = (Unit::GetCreature((*me), DorotheeGUID));
+ Creature* Dorothee = (ObjectAccessor::GetCreature((*me), DorotheeGUID));
if (Dorothee && Dorothee->IsAlive())
{
CAST_AI(boss_dorothee::boss_dorotheeAI, Dorothee->AI())->TitoDied = true;
@@ -893,7 +893,7 @@ public:
{
IsChasing = false;
- if (Unit* target = Unit::GetUnit(*me, HoodGUID))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, HoodGUID))
{
HoodGUID = 0;
if (DoGetThreat(target))
@@ -1186,7 +1186,7 @@ public:
IsFakingDeath = true;
Phase = PHASE_BOTH;
- if (Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID)))
+ if (Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID)))
{
CAST_AI(boss_julianne::boss_julianneAI, Julianne->AI())->RomuloDead = true;
CAST_AI(boss_julianne::boss_julianneAI, Julianne->AI())->ResurrectSelfTimer = 10000;
@@ -1200,7 +1200,7 @@ public:
{
if (JulianneDead)
{
- if (Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID)))
+ if (Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID)))
{
Julianne->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
Julianne->GetMotionMaster()->Clear();
@@ -1212,7 +1212,7 @@ public:
return;
}
- if (Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID)))
+ if (Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID)))
{
PretendToDie(me);
IsFakingDeath = true;
@@ -1231,7 +1231,7 @@ public:
Talk(SAY_ROMULO_AGGRO);
if (JulianneGUID)
{
- Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID));
+ Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID));
if (Julianne && Julianne->GetVictim())
{
me->AddThreat(Julianne->GetVictim(), 1.0f);
@@ -1275,7 +1275,7 @@ public:
{
if (ResurrectTimer <= diff)
{
- Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID));
+ Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID));
if (Julianne && CAST_AI(boss_julianne::boss_julianneAI, Julianne->AI())->IsFakingDeath)
{
Talk(SAY_ROMULO_RESURRECT);
@@ -1395,7 +1395,7 @@ void boss_julianne::boss_julianneAI::UpdateAI(uint32 diff)
{
if (ResurrectTimer <= diff)
{
- Creature* Romulo = (Unit::GetCreature((*me), RomuloGUID));
+ Creature* Romulo = (ObjectAccessor::GetCreature((*me), RomuloGUID));
if (Romulo && CAST_AI(boss_romulo::boss_romuloAI, Romulo->AI())->IsFakingDeath)
{
Talk(SAY_JULIANNE_RESURRECT);
@@ -1430,7 +1430,7 @@ void boss_julianne::boss_julianneAI::UpdateAI(uint32 diff)
{
if (urand(0, 1) && SummonedRomulo)
{
- Creature* Romulo = (Unit::GetCreature((*me), RomuloGUID));
+ Creature* Romulo = (ObjectAccessor::GetCreature((*me), RomuloGUID));
if (Romulo && Romulo->IsAlive() && !RomuloDead)
DoCast(Romulo, SPELL_ETERNAL_AFFECTION);
} else DoCast(me, SPELL_ETERNAL_AFFECTION);
@@ -1460,7 +1460,7 @@ void boss_julianne::boss_julianneAI::DamageTaken(Unit* /*done_by*/, uint32 &dama
DoCast(me, SPELL_DRINK_POISON);
IsFakingDeath = true;
- //IS THIS USEFULL? Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID));
+ //IS THIS USEFULL? Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID));
return;
}
@@ -1476,7 +1476,7 @@ void boss_julianne::boss_julianneAI::DamageTaken(Unit* /*done_by*/, uint32 &dama
//if this is true then we have to kill romulo too
if (RomuloDead)
{
- if (Creature* Romulo = (Unit::GetCreature((*me), RomuloGUID)))
+ if (Creature* Romulo = (ObjectAccessor::GetCreature((*me), RomuloGUID)))
{
Romulo->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
Romulo->GetMotionMaster()->Clear();
@@ -1490,7 +1490,7 @@ void boss_julianne::boss_julianneAI::DamageTaken(Unit* /*done_by*/, uint32 &dama
}
//if not already returned, then romulo is alive and we can pretend die
- if (Creature* Romulo = (Unit::GetCreature((*me), RomuloGUID)))
+ if (Creature* Romulo = (ObjectAccessor::GetCreature((*me), RomuloGUID)))
{
PretendToDie(me);
IsFakingDeath = true;
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
index 9db4c4b2bfa..976a83a98c2 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
@@ -286,7 +286,7 @@ public:
{
if (TalkCount > 3)
{
- if (Creature* pSpotlight = Unit::GetCreature(*me, m_uiSpotlightGUID))
+ if (Creature* pSpotlight = ObjectAccessor::GetCreature(*me, m_uiSpotlightGUID))
pSpotlight->DespawnOrUnsummon();
SetEscortPaused(false);
@@ -539,7 +539,7 @@ public:
uint32 NextStep(uint32 Step)
{
- Creature* arca = Unit::GetCreature(*me, ArcanagosGUID);
+ Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID);
Map* map = me->GetMap();
switch (Step)
{
@@ -630,7 +630,7 @@ public:
if (Step >= 7 && Step <= 12)
{
- Unit* arca = Unit::GetUnit(*me, ArcanagosGUID);
+ Unit* arca = ObjectAccessor::GetUnit(*me, ArcanagosGUID);
if (FireArcanagosTimer <= diff)
{
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
index e0c902427c2..3c4b372808b 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
@@ -196,7 +196,7 @@ public:
ThreatContainer::StorageType::const_iterator i = threatlist.begin();
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && unit->IsAlive())
{
float threat = me->getThreatManager().getThreat(unit);
@@ -214,7 +214,7 @@ public:
ThreatContainer::StorageType::const_iterator i = threatlist.begin();
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && (unit->GetTypeId() == TYPEID_PLAYER))
unit->CastSpell(unit, SPELL_TELEPORT_CENTER, true);
}
@@ -227,7 +227,7 @@ public:
ThreatContainer::StorageType::const_iterator i = threatlist.begin();
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && (unit->GetTypeId() == TYPEID_PLAYER))
// Knockback into the air
unit->CastSpell(unit, SPELL_GRAVITY_LAPSE_DOT, true, 0, 0, me->GetGUID());
@@ -240,7 +240,7 @@ public:
ThreatContainer::StorageType::const_iterator i = threatlist.begin();
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && (unit->GetTypeId() == TYPEID_PLAYER))
{
// Also needs an exception in spell system.
@@ -260,7 +260,7 @@ public:
ThreatContainer::StorageType::const_iterator i = threatlist.begin();
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && (unit->GetTypeId() == TYPEID_PLAYER))
{
unit->RemoveAurasDueToSpell(SPELL_GRAVITY_LAPSE_FLY);
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
index 046db7fc654..8dc8ff799ba 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
@@ -162,7 +162,7 @@ public:
for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
{
- if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[i]))
+ if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUID[i]))
{
if (!pAdd->GetVictim())
{
@@ -210,7 +210,7 @@ public:
{
for (std::vector<uint32>::const_iterator itr = LackeyEntryList.begin(); itr != LackeyEntryList.end(); ++itr)
{
- Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[j]);
+ Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUID[j]);
//object already removed, not exist
if (!pAdd)
@@ -271,7 +271,7 @@ public:
Unit* target = me;
for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
{
- if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[i]))
+ if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUID[i]))
{
if (pAdd->IsAlive() && pAdd->GetHealth() < health)
target = pAdd;
@@ -287,7 +287,7 @@ public:
Unit* target = me;
if (urand(0, 1))
- if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[rand()%MAX_ACTIVE_LACKEY]))
+ if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUID[rand()%MAX_ACTIVE_LACKEY]))
if (pAdd->IsAlive())
target = pAdd;
@@ -300,7 +300,7 @@ public:
Unit* target = me;
if (urand(0, 1))
- if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[rand()%MAX_ACTIVE_LACKEY]))
+ if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUID[rand()%MAX_ACTIVE_LACKEY]))
if (pAdd->IsAlive() && !pAdd->HasAura(SPELL_SHIELD))
target = pAdd;
@@ -319,7 +319,7 @@ public:
if (urand(0, 1))
target = me;
else
- if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[rand()%MAX_ACTIVE_LACKEY]))
+ if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUID[rand()%MAX_ACTIVE_LACKEY]))
if (pAdd->IsAlive())
target = pAdd;
}
@@ -390,7 +390,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
{
- if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUIDs[i]))
+ if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUIDs[i]))
{
if (!pAdd->GetVictim() && pAdd != me)
{
@@ -400,7 +400,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
}
}
- if (Creature* pDelrissa = Unit::GetCreature(*me, instance->GetData64(DATA_DELRISSA)))
+ if (Creature* pDelrissa = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DELRISSA)))
{
if (pDelrissa->IsAlive() && !pDelrissa->GetVictim())
{
@@ -412,7 +412,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
void JustDied(Unit* /*killer*/) override
{
- Creature* pDelrissa = Unit::GetCreature(*me, instance->GetData64(DATA_DELRISSA));
+ Creature* pDelrissa = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DELRISSA));
uint32 uiLackeyDeathCount = instance->GetData(DATA_DELRISSA_DEATH_COUNT);
if (!pDelrissa)
@@ -441,13 +441,13 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
void KilledUnit(Unit* victim) override
{
- if (Creature* Delrissa = Unit::GetCreature(*me, instance->GetData64(DATA_DELRISSA)))
+ if (Creature* Delrissa = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DELRISSA)))
Delrissa->AI()->KilledUnit(victim);
}
void AcquireGUIDs()
{
- if (Creature* Delrissa = (Unit::GetCreature(*me, instance->GetData64(DATA_DELRISSA))))
+ if (Creature* Delrissa = (ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DELRISSA))))
{
for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
m_auiLackeyGUIDs[i] = CAST_AI(boss_priestess_delrissa::boss_priestess_delrissaAI, Delrissa->AI())->m_auiLackeyGUID[i];
@@ -832,7 +832,7 @@ public:
ThreatContainer::StorageType const &t_list = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)
{
- if (Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid()))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()))
{
//if in melee range
if (target->IsWithinDistInMap(me, 5))
@@ -918,7 +918,7 @@ public:
ThreatContainer::StorageType const &t_list = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)
{
- if (Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid()))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()))
{
//if in melee range
if (target->IsWithinDistInMap(me, ATTACK_DISTANCE))
@@ -1022,7 +1022,7 @@ public:
Wing_Clip_Timer = 4000;
Freezing_Trap_Timer = 15000;
- Unit* pPet = Unit::GetUnit(*me, m_uiPetGUID);
+ Unit* pPet = ObjectAccessor::GetUnit(*me, m_uiPetGUID);
if (!pPet)
me->SummonCreature(NPC_SLIVER, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_CORPSE_DESPAWN, 0);
@@ -1171,7 +1171,7 @@ public:
// uint64 guid = (*itr)->guid;
// if (guid)
// {
- // Unit* pAdd = Unit::GetUnit(*me, (*itr)->guid);
+ // Unit* pAdd = ObjectAccessor::GetUnit(*me, (*itr)->guid);
// if (pAdd && pAdd->IsAlive())
// {
DoCast(me, SPELL_LESSER_HEALING_WAVE);
@@ -1256,7 +1256,7 @@ public:
{
for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
{
- if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUIDs[i]))
+ if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUIDs[i]))
{
if (pAdd->IsPolymorphed())
{
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
index 74e9321d08c..d77f5db9cea 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
@@ -107,8 +107,8 @@ public:
//for (uint8 i = 0; i < CRYSTALS_NUMBER; ++i)
for (std::list<uint64>::const_iterator itr = Crystals.begin(); itr != Crystals.end(); ++itr)
{
- //Unit* unit = Unit::GetUnit(*me, FelCrystals[i]);
- if (Creature* creature = Unit::GetCreature(*me, *itr))
+ //Unit* unit = ObjectAccessor::GetUnit(*me, FelCrystals[i]);
+ if (Creature* creature = ObjectAccessor::GetCreature(*me, *itr))
{
if (!creature->IsAlive())
creature->Respawn(); // Let the core handle setting death state, etc.
@@ -148,8 +148,8 @@ public:
for (std::list<uint64>::const_iterator itr = Crystals.begin(); itr != Crystals.end(); ++itr)
{
pCrystal = NULL;
- //pCrystal = Unit::GetUnit(*me, FelCrystals[i]);
- pCrystal = Unit::GetUnit(*me, *itr);
+ //pCrystal = ObjectAccessor::GetUnit(*me, FelCrystals[i]);
+ pCrystal = ObjectAccessor::GetUnit(*me, *itr);
if (pCrystal && pCrystal->IsAlive())
{
// select nearest
@@ -184,8 +184,8 @@ public:
//for (uint8 i = 0; i < CRYSTALS_NUMBER; ++i)
for (std::list<uint64>::const_iterator itr = Crystals.begin(); itr != Crystals.end(); ++itr)
{
- //Creature* pCrystal = (Unit::GetCreature(*me, FelCrystals[i]));
- Creature* pCrystal = Unit::GetCreature(*me, *itr);
+ //Creature* pCrystal = (ObjectAccessor::GetCreature(*me, FelCrystals[i]));
+ Creature* pCrystal = ObjectAccessor::GetCreature(*me, *itr);
if (pCrystal && pCrystal->IsAlive())
pCrystal->Kill(pCrystal);
}
@@ -206,7 +206,7 @@ public:
{
if (type == POINT_MOTION_TYPE && id == 1)
{
- Unit* CrystalChosen = Unit::GetUnit(*me, CrystalGUID);
+ Unit* CrystalChosen = ObjectAccessor::GetUnit(*me, CrystalGUID);
if (CrystalChosen && CrystalChosen->IsAlive())
{
// Make the crystal attackable
@@ -292,7 +292,7 @@ public:
Talk(SAY_EMPOWERED);
- Unit* CrystalChosen = Unit::GetUnit(*me, CrystalGUID);
+ Unit* CrystalChosen = ObjectAccessor::GetUnit(*me, CrystalGUID);
if (CrystalChosen && CrystalChosen->IsAlive())
// Use Deal Damage to kill it, not setDeathState.
CrystalChosen->Kill(CrystalChosen);
@@ -335,7 +335,7 @@ public:
{
if (InstanceScript* instance = me->GetInstanceScript())
{
- Creature* Selin = (Unit::GetCreature(*me, instance->GetData64(DATA_SELIN)));
+ Creature* Selin = (ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SELIN)));
if (Selin && Selin->IsAlive())
{
if (CAST_AI(boss_selin_fireheart::boss_selin_fireheartAI, Selin->AI())->CrystalGUID == me->GetGUID())
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
index 5602a2a50e0..46c566f62bd 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
@@ -314,7 +314,7 @@ public:
{
if (Creature* anchor = go->FindNearestCreature(29521, 15))
if (uint64 prisonerGUID = anchor->AI()->GetGUID())
- if (Creature* prisoner = Creature::GetCreature(*player, prisonerGUID))
+ if (Creature* prisoner = ObjectAccessor::GetCreature(*player, prisonerGUID))
CAST_AI(npc_unworthy_initiate::npc_unworthy_initiateAI, prisoner->AI())->EventStart(anchor, player);
return false;
@@ -467,7 +467,7 @@ public:
{
me->setFaction(FACTION_HOSTILE);
- if (Unit* unit = Unit::GetUnit(*me, m_uiDuelerGUID))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, m_uiDuelerGUID))
AttackStart(unit);
}
else
@@ -1047,14 +1047,14 @@ class npc_scarlet_miner : public CreatureScript
{
if (IntroPhase == 1)
{
- if (Creature* car = Unit::GetCreature(*me, carGUID))
+ if (Creature* car = ObjectAccessor::GetCreature(*me, carGUID))
DoCast(car, SPELL_CART_DRAG);
IntroTimer = 800;
IntroPhase = 2;
}
else
{
- if (Creature* car = Unit::GetCreature(*me, carGUID))
+ if (Creature* car = ObjectAccessor::GetCreature(*me, carGUID))
car->AI()->DoAction(0);
IntroPhase = 0;
}
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
index 88c30efdf71..09377f20bed 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
@@ -307,7 +307,7 @@ public:
break;
case 4:
{
- Creature* temp = Unit::GetCreature(*me, valrothGUID);
+ Creature* temp = ObjectAccessor::GetCreature(*me, valrothGUID);
if (!temp || !temp->IsAlive())
{
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
index 8d5e10679ec..40773c87b68 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
@@ -400,15 +400,15 @@ public:
//UpdateWorldState(me->GetMap(), WORLD_STATE_COUNTDOWN, 0);
UpdateWorldState(me->GetMap(), WORLD_STATE_EVENT_BEGIN, 0);
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->setDeathState(JUST_DIED);
- if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID))
temp->setDeathState(JUST_DIED);
- if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID))
temp->setDeathState(JUST_DIED);
- if (Creature* temp = Unit::GetCreature(*me, uiEligorGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID))
temp->setDeathState(JUST_DIED);
- if (Creature* temp = Unit::GetCreature(*me, uiRayneGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiRayneGUID))
temp->setDeathState(JUST_DIED);
uiTirionGUID = 0;
@@ -419,24 +419,24 @@ public:
for (uint8 i = 0; i < ENCOUNTER_DEFENDER_NUMBER; ++i)
{
- if (Creature* temp = Unit::GetCreature(*me, uiDefenderGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDefenderGUID[i]))
temp->setDeathState(JUST_DIED);
uiDefenderGUID[i] = 0;
}
for (uint8 i = 0; i < ENCOUNTER_EARTHSHATTER_NUMBER; ++i)
{
- if (Creature* temp = Unit::GetCreature(*me, uiEarthshatterGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEarthshatterGUID[i]))
temp->setDeathState(JUST_DIED);
uiEarthshatterGUID[i] = 0;
}
- if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID))
temp->Respawn();
- if (Creature* temp = Unit::GetCreature(*me, uiOrbazGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiOrbazGUID))
temp->Respawn();
- if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID))
temp->Respawn();
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->Respawn();
uiKoltiraGUID = 0;
@@ -445,25 +445,25 @@ public:
uiLichKingGUID = 0;
for (uint8 i = 0; i < ENCOUNTER_ABOMINATION_NUMBER; ++i)
{
- if (Creature* temp = Unit::GetCreature(*me, uiAbominationGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAbominationGUID[i]))
temp->setDeathState(JUST_DIED);
uiAbominationGUID[i] = 0;
}
for (uint8 i = 0; i < ENCOUNTER_BEHEMOTH_NUMBER; ++i)
{
- if (Creature* temp = Unit::GetCreature(*me, uiBehemothGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiBehemothGUID[i]))
temp->setDeathState(JUST_DIED);
uiBehemothGUID[i] = 0;
}
for (uint8 i = 0; i < ENCOUNTER_GHOUL_NUMBER; ++i)
{
- if (Creature* temp = Unit::GetCreature(*me, uiGhoulGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiGhoulGUID[i]))
temp->setDeathState(JUST_DIED);
uiGhoulGUID[i] = 0;
}
for (uint8 i = 0; i < ENCOUNTER_WARRIOR_NUMBER; ++i)
{
- if (Creature* temp = Unit::GetCreature(*me, uiWarriorGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiWarriorGUID[i]))
temp->setDeathState(JUST_DIED);
uiWarriorGUID[i] = 0;
}
@@ -514,9 +514,9 @@ public:
case 1:
SetHoldState(true);
SpawnNPC();
- if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN07);
- if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN08);
for (uint8 i = 0; i < ENCOUNTER_GHOUL_NUMBER; ++i)
@@ -534,9 +534,9 @@ public:
me->Dismount();
me->CastSpell(me, SPELL_THE_MIGHT_OF_MOGRAINE, true); // need to fix, on player only
- if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID))
temp->Dismount();
- if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID))
temp->Dismount();
bIsBattle = true;
@@ -547,37 +547,37 @@ public:
break;
case 3:
{
- //Unit* pTirion = Unit::GetCreature(*me, uiTirionGUID);
+ //Unit* pTirion = ObjectAccessor::GetCreature(*me, uiTirionGUID);
Talk(EMOTE_LIGHT_OF_DAWN05);
if (me->HasAura(SPELL_THE_LIGHT_OF_DAWN, 0))
me->RemoveAurasDueToSpell(SPELL_THE_LIGHT_OF_DAWN);
- if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID))
{
if (temp->HasAura(SPELL_THE_LIGHT_OF_DAWN, 0))
temp->RemoveAurasDueToSpell(SPELL_THE_LIGHT_OF_DAWN);
temp->SetWalk(true);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[19].x, LightofDawnLoc[19].y, LightofDawnLoc[19].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID))
{
if (temp->HasAura(SPELL_THE_LIGHT_OF_DAWN, 0))
temp->RemoveAurasDueToSpell(SPELL_THE_LIGHT_OF_DAWN);
temp->SetWalk(true);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[21].x, LightofDawnLoc[21].y, LightofDawnLoc[21].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID))
{
temp->SetWalk(true);
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[10].x, LightofDawnLoc[10].y, LightofDawnLoc[10].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID))
{
temp->SetWalk(true);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[13].x, LightofDawnLoc[13].y, LightofDawnLoc[13].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiEligorGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID))
{
temp->SetWalk(true);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[16].x, LightofDawnLoc[16].y, LightofDawnLoc[16].z);
@@ -589,9 +589,9 @@ public:
Talk(SAY_LIGHT_OF_DAWN27);
me->SetStandState(UNIT_STAND_STATE_KNEEL);
- if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID))
temp->SetStandState(UNIT_STAND_STATE_KNEEL);
- if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID))
temp->SetStandState(UNIT_STAND_STATE_KNEEL);
SetHoldState(true);
break;
@@ -610,7 +610,7 @@ public:
break;
case 8:
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(EQUIP_UNEQUIP));
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
me->CastSpell(temp, SPELL_ASHBRINGER, true);
Talk(EMOTE_LIGHT_OF_DAWN14);
SetHoldState(true);
@@ -743,51 +743,51 @@ public:
case 9: // charge begins
SetHoldState(false);
- if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID))
{
temp->SetWalk(false);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiOrbazGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiOrbazGUID))
{
temp->SetWalk(false);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID))
{
temp->SetWalk(false);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z);
}
for (uint8 i = 0; i < ENCOUNTER_ABOMINATION_NUMBER; ++i)
- if (Creature* temp = Unit::GetCreature(*me, uiAbominationGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAbominationGUID[i]))
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z);
for (uint8 i = 0; i < ENCOUNTER_BEHEMOTH_NUMBER; ++i)
- if (Creature* temp = Unit::GetCreature(*me, uiBehemothGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiBehemothGUID[i]))
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z);
for (uint8 i = 0; i < ENCOUNTER_GHOUL_NUMBER; ++i)
- if (Creature* temp = Unit::GetCreature(*me, uiGhoulGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiGhoulGUID[i]))
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z);
for (uint8 i = 0; i < ENCOUNTER_WARRIOR_NUMBER; ++i)
- if (Creature* temp = Unit::GetCreature(*me, uiWarriorGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiWarriorGUID[i]))
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z);
JumpToNextStep(5000);
break;
// ******* After battle *****************************************************************
case 11: // Tirion starts to speak
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN28);
JumpToNextStep(21000);
break;
case 12:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN29);
JumpToNextStep(13000);
break;
case 13:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN30);
JumpToNextStep(13000);
break;
@@ -810,7 +810,7 @@ public:
break;
case 16: // Alexandros out
- if (Creature* temp = Unit::GetCreature(*me, uiAlexandrosGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID))
{
temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[23].x, LightofDawnLoc[23].y, LightofDawnLoc[23].z);
@@ -837,7 +837,7 @@ public:
break;
case 19: // runs to father
- if (Creature* temp = Unit::GetCreature(*me, uiDarionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDarionGUID))
{
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN07);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[25].x, LightofDawnLoc[25].y, LightofDawnLoc[25].z);
@@ -846,59 +846,59 @@ public:
break;
case 20:
- if (Creature* temp = Unit::GetCreature(*me, uiDarionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDarionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN36);
JumpToNextStep(4000);
break;
case 21:
- if (Creature* temp = Unit::GetCreature(*me, uiDarionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDarionGUID))
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN08);
JumpToNextStep(4000);
break;
case 22:
- if (Creature* temp = Unit::GetCreature(*me, uiAlexandrosGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN37);
JumpToNextStep(8000);
break;
case 23:
- if (Creature* temp = Unit::GetCreature(*me, uiDarionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDarionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN38);
JumpToNextStep(8000);
break;
case 24:
- if (Creature* temp = Unit::GetCreature(*me, uiAlexandrosGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN39);
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) // Tirion moves forward here
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) // Tirion moves forward here
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[1].x, LightofDawnLoc[1].y, LightofDawnLoc[1].z);
JumpToNextStep(15000);
break;
case 25:
- if (Creature* temp = Unit::GetCreature(*me, uiDarionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDarionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN40);
JumpToNextStep(11000);
break;
case 26:
- if (Creature* temp = Unit::GetCreature(*me, uiAlexandrosGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN41);
JumpToNextStep(5000);
break;
case 27:
- if (Creature* temp = Unit::GetCreature(*me, uiDarionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDarionGUID))
temp->setDeathState(JUST_DIED);
JumpToNextStep(24000);
break;
case 28:
- if (Creature* temp = Unit::GetCreature(*me, uiAlexandrosGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN42);
JumpToNextStep(6000);
break;
@@ -908,19 +908,19 @@ public:
{
temp->AI()->Talk(SAY_LIGHT_OF_DAWN43);
uiLichKingGUID = temp->GetGUID();
- if (Unit* pAlex = Unit::GetCreature(*me, uiAlexandrosGUID))
+ if (Unit* pAlex = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID))
temp->CastSpell(pAlex, SPELL_SOUL_FEAST_ALEX, false);
}
JumpToNextStep(2000);
break;
case 30:
- if (Creature* temp = Unit::GetCreature(*me, uiAlexandrosGUID)) // just hide him
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID)) // just hide him
{
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN09);
temp->SetVisible(false);
}
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
{
temp->InterruptNonMeleeSpells(false);
temp->AI()->Talk(SAY_LIGHT_OF_DAWN45);
@@ -936,13 +936,13 @@ public:
break;
case 32:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[27].x, LightofDawnLoc[27].y, LightofDawnLoc[27].z);
JumpToNextStep(6000);
break;
case 33: // Darion supports to jump to lich king here
- if (Unit::GetCreature(*me, uiLichKingGUID))
+ if (ObjectAccessor::GetCreature(*me, uiLichKingGUID))
DoCast(me, SPELL_MOGRAINE_CHARGE); // jumping charge
// doesn't make it looks well, so workarounds, Darion charges, looks better
me->SetSpeed(MOVE_RUN, 3.0f);
@@ -952,7 +952,7 @@ public:
break;
case 35: // Lich king counterattacks
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
{
temp->HandleEmoteCommand(EMOTE_ONESHOT_KICK);
temp->AI()->Talk(SAY_LIGHT_OF_DAWN46);
@@ -969,29 +969,29 @@ public:
break;
case 38:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN47);
JumpToNextStep(8000);
break;
case 39:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN48);
JumpToNextStep(15000);
break;
case 40:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN49);
JumpToNextStep(17000);
break;
case 41: // Lich king - Apocalypse
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
{
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN11);
temp->AI()->Talk(SAY_LIGHT_OF_DAWN51);
- if (Creature* pTirion = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* pTirion = ObjectAccessor::GetCreature(*me, uiTirionGUID))
{
pTirion->SetStandState(UNIT_STAND_STATE_KNEEL);
//temp->CastSpell(pTirion, SPELL_APOCALYPSE, false); // not working
@@ -1007,7 +1007,7 @@ public:
float fLichPositionX = 0,
fLichPositionY = 0,
fLichPositionZ = 0;
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
{
fLichPositionX = temp->GetPositionX();
fLichPositionY = temp->GetPositionY();
@@ -1032,7 +1032,7 @@ public:
temp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ);
uiEarthshatterGUID[0] = temp->GetGUID();
}
- if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID))
{
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED);
temp->SetWalk(false);
@@ -1040,7 +1040,7 @@ public:
temp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ);
temp->AI()->Talk(SAY_LIGHT_OF_DAWN50);
}
- if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID))
{
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED);
temp->SetWalk(false);
@@ -1048,7 +1048,7 @@ public:
temp->HandleEmoteCommand(EMOTE_STATE_ATTACK_UNARMED);
temp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ);
}
- if (Creature* temp = Unit::GetCreature(*me, uiEligorGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID))
{
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED);
temp->SetWalk(false);
@@ -1060,37 +1060,37 @@ public:
break;
case 43: // They all got kicked
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN13);
- if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID))
{
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
temp->SetSpeed(MOVE_RUN, 6.0f);
temp->SetStandState(UNIT_STAND_STATE_DEAD);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[14].x, LightofDawnLoc[14].y, LightofDawnLoc[14].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID))
{
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
temp->SetSpeed(MOVE_RUN, 6.0f);
temp->SetStandState(UNIT_STAND_STATE_DEAD);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[11].x, LightofDawnLoc[11].y, LightofDawnLoc[11].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiEligorGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID))
{
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
temp->SetSpeed(MOVE_RUN, 6.0f);
temp->SetStandState(UNIT_STAND_STATE_DEAD);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[17].x, LightofDawnLoc[17].y, LightofDawnLoc[17].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiDefenderGUID[0]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDefenderGUID[0]))
{
temp->SetSpeed(MOVE_RUN, 6.0f);
temp->SetStandState(UNIT_STAND_STATE_DEAD);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%10, LightofDawnLoc[0].y+rand()%10, LightofDawnLoc[0].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiEarthshatterGUID[0]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEarthshatterGUID[0]))
{
temp->SetSpeed(MOVE_RUN, 6.0f);
temp->SetStandState(UNIT_STAND_STATE_DEAD);
@@ -1100,11 +1100,11 @@ public:
break;
case 44: // make them stand up
- if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID))
temp->SetStandState(UNIT_STAND_STATE_STAND);
- if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID))
temp->SetStandState(UNIT_STAND_STATE_STAND);
- if (Creature* temp = Unit::GetCreature(*me, uiEligorGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID))
temp->SetStandState(UNIT_STAND_STATE_STAND);
JumpToNextStep(1000);
break;
@@ -1126,7 +1126,7 @@ public:
case 47: // Ashbringer rebirth
me->SetStandState(UNIT_STAND_STATE_KNEEL);
Talk(EMOTE_LIGHT_OF_DAWN15);
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
{
temp->SetStandState(UNIT_STAND_STATE_STAND);
temp->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(EQUIP_HIGHLORD_TIRION_FORDRING));
@@ -1139,38 +1139,38 @@ public:
//if (GameObject* go = me->GetMap()->GetGameObject(uiDawnofLightGUID))
// go->SetPhaseMask(128, true);
me->SummonGameObject(GO_LIGHT_OF_DAWN, 2283.896f, -5287.914f, 83.066f, 0, 0, 0, 0, 0, 30000);
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
{
if (temp->HasAura(SPELL_REBIRTH_OF_THE_ASHBRINGER, 0))
temp->RemoveAurasDueToSpell(SPELL_REBIRTH_OF_THE_ASHBRINGER);
temp->CastSpell(temp, 41542, false); // workarounds, light expoded, makes it cool
temp->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
}
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->InterruptNonMeleeSpells(false);
JumpToNextStep(2500);
break;
case 49:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN54);
JumpToNextStep(4000);
break;
case 50:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN55);
JumpToNextStep(5000);
break;
case 51:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN56);
JumpToNextStep(1000);
break;
case 52: // Tiron charges
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
{
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN16);
temp->CastSpell(temp, SPELL_TIRION_CHARGE, false); // jumping charge
@@ -1178,20 +1178,20 @@ public:
temp->SetSpeed(MOVE_RUN, 3.0f); // workarounds, make Tirion still running
temp->SetWalk(false);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[2].x, LightofDawnLoc[2].y, LightofDawnLoc[2].z);
- if (Creature* lktemp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* lktemp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
lktemp->Relocate(LightofDawnLoc[28].x, LightofDawnLoc[28].y, LightofDawnLoc[28].z); // workarounds, he should kick back by Tirion, but here we relocate him
}
JumpToNextStep(1500);
break;
case 53:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN57);
JumpToNextStep(1000);
break;
case 54:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
{
temp->SetSpeed(MOVE_RUN, 1.0f);
me->SetWalk(true);
@@ -1201,33 +1201,33 @@ public:
break;
case 55:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->SetStandState(UNIT_STAND_STATE_KNEEL);
JumpToNextStep(2000);
break;
case 56:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->SetStandState(UNIT_STAND_STATE_STAND);
JumpToNextStep(1500);
break;
case 57:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN58);
JumpToNextStep(10000);
break;
case 58:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN59);
JumpToNextStep(10000);
break;
case 59:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->CastSpell(temp, SPELL_TELEPORT_VISUAL, false);
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) // Tirion runs to Darion
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) // Tirion runs to Darion
{
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
temp->SetSpeed(MOVE_RUN, 1.0f);
@@ -1237,7 +1237,7 @@ public:
break;
case 60:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) // Lich king disappears here
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) // Lich king disappears here
{
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN17);
temp->Kill(temp);
@@ -1246,13 +1246,13 @@ public:
break;
case 61:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN60);
JumpToNextStep(3000);
break;
case 62:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
{
temp->SetWalk(true);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[7].x, LightofDawnLoc[7].y, LightofDawnLoc[7].z);
@@ -1261,7 +1261,7 @@ public:
break;
case 63:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
{
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[8].x, LightofDawnLoc[8].y, LightofDawnLoc[8].z);
temp->AI()->Talk(SAY_LIGHT_OF_DAWN61);
@@ -1270,37 +1270,37 @@ public:
break;
case 64:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN62);
JumpToNextStep(7000);
break;
case 65:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN63);
JumpToNextStep(10000);
break;
case 66:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN64);
JumpToNextStep(11000);
break;
case 67:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN65);
JumpToNextStep(10000);
break;
case 68:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN66);
JumpToNextStep(8000);
break;
case 69:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN67);
JumpToNextStep(10000);
break;
@@ -1335,13 +1335,13 @@ public:
break;
case 73:
- if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID))
temp->DespawnOrUnsummon();
- if (Creature* temp = Unit::GetCreature(*me, uiOrbazGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiOrbazGUID))
temp->DespawnOrUnsummon();
- if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID))
temp->DespawnOrUnsummon();
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->DespawnOrUnsummon();
me->DespawnOrUnsummon();
break;
@@ -1452,7 +1452,7 @@ public:
for (uint8 i = 0; i < ENCOUNTER_WARRIOR_NUMBER; ++i)
DespawnNPC(uiWarriorGUID[i]);
- if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID))
{
temp->RemoveAllAuras();
temp->DeleteThreatList();
@@ -1463,7 +1463,7 @@ public:
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[9].x, LightofDawnLoc[9].y, LightofDawnLoc[9].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID))
{
temp->RemoveAllAuras();
temp->DeleteThreatList();
@@ -1474,7 +1474,7 @@ public:
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[12].x, LightofDawnLoc[12].y, LightofDawnLoc[12].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiEligorGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID))
{
temp->RemoveAllAuras();
temp->DeleteThreatList();
@@ -1486,7 +1486,7 @@ public:
}
DespawnNPC(uiRayneGUID);
- if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID))
{
temp->RemoveAllAuras();
temp->DeleteThreatList();
@@ -1498,10 +1498,10 @@ public:
temp->CastSpell(temp, SPELL_THE_LIGHT_OF_DAWN, false);
}
- if (Creature* temp = Unit::GetCreature(*me, uiOrbazGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiOrbazGUID))
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN04);
- if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID))
{
temp->RemoveAllAuras();
temp->DeleteThreatList();
@@ -1513,7 +1513,7 @@ public:
temp->CastSpell(temp, SPELL_THE_LIGHT_OF_DAWN, false);
}
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN26);
SetHoldState(false);
@@ -1532,7 +1532,7 @@ public:
void NPCChangeTarget(uint64 ui_GUID)
{
- if (Creature* temp = Unit::GetCreature(*me, ui_GUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, ui_GUID))
if (temp->IsAlive())
if (Unit* pTarger = SelectTarget(SELECT_TARGET_RANDOM, 0))
if (pTarger->IsAlive())
@@ -1553,7 +1553,7 @@ public:
// Death
for (uint8 i = 0; i < ENCOUNTER_GHOUL_NUMBER; ++i)
{
- temp = Unit::GetCreature(*me, uiGhoulGUID[i]);
+ temp = ObjectAccessor::GetCreature(*me, uiGhoulGUID[i]);
if (!temp)
{
temp = me->SummonCreature(NPC_ACHERUS_GHOUL, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
@@ -1563,7 +1563,7 @@ public:
}
for (uint8 i = 0; i < ENCOUNTER_ABOMINATION_NUMBER; ++i)
{
- temp = Unit::GetCreature(*me, uiAbominationGUID[i]);
+ temp = ObjectAccessor::GetCreature(*me, uiAbominationGUID[i]);
if (!temp)
{
temp = me->SummonCreature(NPC_WARRIOR_OF_THE_FROZEN_WASTES, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
@@ -1573,7 +1573,7 @@ public:
}
for (uint8 i = 0; i < ENCOUNTER_WARRIOR_NUMBER; ++i)
{
- temp = Unit::GetCreature(*me, uiWarriorGUID[i]);
+ temp = ObjectAccessor::GetCreature(*me, uiWarriorGUID[i]);
if (!temp)
{
temp = me->SummonCreature(NPC_RAMPAGING_ABOMINATION, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
@@ -1583,7 +1583,7 @@ public:
}
for (uint8 i = 0; i < ENCOUNTER_BEHEMOTH_NUMBER; ++i)
{
- temp = Unit::GetCreature(*me, uiBehemothGUID[i]);
+ temp = ObjectAccessor::GetCreature(*me, uiBehemothGUID[i]);
if (!temp)
{
temp = me->SummonCreature(NPC_FLESH_BEHEMOTH, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
@@ -1595,7 +1595,7 @@ public:
// Dawn
for (uint8 i = 0; i < ENCOUNTER_DEFENDER_NUMBER; ++i)
{
- temp = Unit::GetCreature(*me, uiDefenderGUID[i]);
+ temp = ObjectAccessor::GetCreature(*me, uiDefenderGUID[i]);
if (!temp)
{
temp = me->SummonCreature(NPC_DEFENDER_OF_THE_LIGHT, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
@@ -1606,7 +1606,7 @@ public:
}
for (uint8 i = 0; i < ENCOUNTER_EARTHSHATTER_NUMBER; ++i)
{
- temp = Unit::GetCreature(*me, uiEarthshatterGUID[i]);
+ temp = ObjectAccessor::GetCreature(*me, uiEarthshatterGUID[i]);
if (!temp)
{
temp = me->SummonCreature(NPC_RIMBLAT_EARTHSHATTER, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
@@ -1615,7 +1615,7 @@ public:
uiEarthshatterGUID[i] = temp->GetGUID();
}
}
- temp = Unit::GetCreature(*me, uiKorfaxGUID);
+ temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID);
if (!temp)
{
temp = me->SummonCreature(NPC_KORFAX_CHAMPION_OF_THE_LIGHT, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 600000);
@@ -1623,7 +1623,7 @@ public:
me->AddThreat(temp, 0.0f);
uiKorfaxGUID = temp->GetGUID();
}
- temp = Unit::GetCreature(*me, uiMaxwellGUID);
+ temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID);
if (!temp)
{
temp = me->SummonCreature(NPC_LORD_MAXWELL_TYROSUS, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 600000);
@@ -1631,7 +1631,7 @@ public:
me->AddThreat(temp, 0.0f);
uiMaxwellGUID = temp->GetGUID();
}
- temp = Unit::GetCreature(*me, uiEligorGUID);
+ temp = ObjectAccessor::GetCreature(*me, uiEligorGUID);
if (!temp)
{
temp = me->SummonCreature(NPC_COMMANDER_ELIGOR_DAWNBRINGER, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 600000);
@@ -1639,7 +1639,7 @@ public:
me->AddThreat(temp, 0.0f);
uiEligorGUID = temp->GetGUID();
}
- temp = Unit::GetCreature(*me, uiRayneGUID);
+ temp = ObjectAccessor::GetCreature(*me, uiRayneGUID);
if (!temp)
{
temp = me->SummonCreature(NPC_RAYNE, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
@@ -1651,7 +1651,7 @@ public:
void DespawnNPC(uint64 pGUID)
{
- if (Creature* temp = Unit::GetCreature(*me, pGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, pGUID))
if (temp->IsAlive())
{
temp->SetVisible(false);
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp
index e5be2cb6eb7..43dee1338ef 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp
@@ -99,7 +99,7 @@ public:
FlyBackTimer = 4500;
break;
case 2:
- if (!player->isRessurectRequested())
+ if (!player->isResurrectRequested())
{
me->HandleEmoteCommand(EMOTE_ONESHOT_CUSTOM_SPELL_01);
DoCast(player, SPELL_REVIVE, true);
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
index 423f8f26130..0be681af915 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
@@ -356,7 +356,7 @@ public:
if (wait <= diff)
{
die = false;
- if (Unit* body = Unit::GetUnit(*me, bodyGUID))
+ if (Unit* body = ObjectAccessor::GetUnit(*me, bodyGUID))
body->Kill(body);
me->Kill(me);
}
@@ -428,7 +428,7 @@ public:
DoCast(me, SPELL_HEAD);
if (headGUID)
{
- if (Creature* Head = Unit::GetCreature((*me), headGUID))
+ if (Creature* Head = ObjectAccessor::GetCreature((*me), headGUID))
Head->DisappearAndDie();
headGUID = 0;
@@ -483,7 +483,7 @@ public:
wp_reached = false;
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
SaySound(SAY_ENTRANCE);
- if (Unit* player = Unit::GetUnit(*me, PlayerGUID))
+ if (Unit* player = ObjectAccessor::GetUnit(*me, PlayerGUID))
DoStartMovement(player);
break;
}
@@ -516,7 +516,7 @@ public:
if (withhead)
SaySound(SAY_PLAYER_DEATH);
//maybe possible when player dies from conflagration
- else if (Creature* Head = Unit::GetCreature((*me), headGUID))
+ else if (Creature* Head = ObjectAccessor::GetCreature((*me), headGUID))
CAST_AI(npc_head::npc_headAI, Head->AI())->SaySound(SAY_PLAYER_DEATH);
}
}
@@ -601,7 +601,7 @@ public:
ThreatContainer::StorageType threatlist = caster->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
{
- Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (unit && unit->IsAlive() && unit != caster)
me->AddThreat(unit, caster->getThreatManager().getThreat(unit));
}
@@ -621,7 +621,7 @@ public:
if (!headGUID)
headGUID = DoSpawnCreature(HEAD, float(rand()%6), float(rand()%6), 0, 0, TEMPSUMMON_DEAD_DESPAWN, 0)->GetGUID();
- Unit* Head = Unit::GetUnit(*me, headGUID);
+ Unit* Head = ObjectAccessor::GetUnit(*me, headGUID);
if (Head && Head->IsAlive())
{
Head->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -746,7 +746,7 @@ public:
--Phase;
else
Phase = 1;
- Creature* Head = Unit::GetCreature((*me), headGUID);
+ Creature* Head = ObjectAccessor::GetCreature((*me), headGUID);
if (Head && Head->IsAlive())
{
CAST_AI(npc_head::npc_headAI, Head->AI())->Phase = Phase;
@@ -837,7 +837,7 @@ public:
if (!debuffGUID)
return;
- Unit* debuff = Unit::GetUnit(*me, debuffGUID);
+ Unit* debuff = ObjectAccessor::GetUnit(*me, debuffGUID);
if (debuff)
{
debuff->SetVisible(false);
@@ -909,7 +909,7 @@ void npc_head::npc_headAI::Disappear()
if (bodyGUID)
{
- Creature* body = Unit::GetCreature((*me), bodyGUID);
+ Creature* body = ObjectAccessor::GetCreature((*me), bodyGUID);
if (body && body->IsAlive())
{
withbody = true;
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp
index e345dc60074..a7c795a81f6 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp
@@ -84,7 +84,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
//Any other Actions to do with vorrel? setStandState?
- if (Creature* vorrel = Creature::GetCreature(*me, instance->GetData64(DATA_VORREL)))
+ if (Creature* vorrel = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_VORREL)))
vorrel->AI()->Talk(SAY_TRIGGER_VORREL);
}
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp
index a8d1f91c443..25bb08620a1 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp
@@ -33,12 +33,12 @@ enum Says
//Mograine says
SAY_MO_AGGRO = 0,
SAY_MO_KILL = 1,
- SAY_MO_RESSURECTED = 2,
+ SAY_MO_RESURRECTED = 2,
//Whitemane says
SAY_WH_INTRO = 0,
SAY_WH_KILL = 1,
- SAY_WH_RESSURECT = 2,
+ SAY_WH_RESURRECT = 2,
};
enum Spells
@@ -127,7 +127,7 @@ public:
return;
//On first death, fake death and open door, as well as initiate whitemane if exist
- if (Unit* Whitemane = Unit::GetUnit(*me, instance->GetData64(DATA_WHITEMANE)))
+ if (Unit* Whitemane = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_WHITEMANE)))
{
instance->SetData(TYPE_MOGRAINE_AND_WHITE_EVENT, IN_PROGRESS);
@@ -157,10 +157,10 @@ public:
void SpellHit(Unit* /*who*/, const SpellInfo* spell) override
{
- //When hit with ressurection say text
+ //When hit with resurrection say text
if (spell->Id == SPELL_SCARLETRESURRECTION)
{
- Talk(SAY_MO_RESSURECTED);
+ Talk(SAY_MO_RESURRECTED);
_bFakeDeath = false;
instance->SetData(TYPE_MOGRAINE_AND_WHITE_EVENT, SPECIAL);
@@ -174,8 +174,8 @@ public:
if (_bHasDied && !_bHeal && instance->GetData(TYPE_MOGRAINE_AND_WHITE_EVENT) == SPECIAL)
{
- //On ressurection, stop fake death and heal whitemane and resume fight
- if (Unit* Whitemane = Unit::GetUnit(*me, instance->GetData64(DATA_WHITEMANE)))
+ //On resurrection, stop fake death and heal whitemane and resume fight
+ if (Unit* Whitemane = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_WHITEMANE)))
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetStandState(UNIT_STAND_STATE_STAND);
@@ -294,7 +294,7 @@ public:
if (Creature* mograine = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MOGRAINE)))
{
DoCast(mograine, SPELL_SCARLETRESURRECTION);
- Talk(SAY_WH_RESSURECT);
+ Talk(SAY_WH_RESURRECT);
_bCanResurrect = false;
}
}
@@ -325,7 +325,7 @@ public:
if (!HealthAbovePct(75))
target = me;
- if (Creature* mograine = Unit::GetCreature(*me, instance->GetData64(DATA_MOGRAINE)))
+ if (Creature* mograine = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MOGRAINE)))
{
// checking _bCanResurrectCheck prevents her healing Mograine while he is "faking death"
if (_bCanResurrectCheck && mograine->IsAlive() && !mograine->HealthAbovePct(75))
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp
index 9bcf67bce8c..4109328afda 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp
@@ -187,7 +187,7 @@ public:
{
if (Die_Timer <= diff)
{
- if (Unit* temp = Unit::GetUnit(*me, Tagger))
+ if (Unit* temp = ObjectAccessor::GetUnit(*me, Tagger))
{
if (Player* player = temp->ToPlayer())
player->KilledMonsterCredit(NPC_RESTLESS, me->GetGUID());
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
index 5bca936d5b4..8a9699ed1be 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
@@ -280,7 +280,7 @@ public:
{
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150, true);
if (!target)
- target = Unit::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID));
+ target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID));
if (!target)
{
@@ -306,7 +306,7 @@ public:
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150, true);
if (!target)
- target = Unit::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID));
+ target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID));
if (!target)
{
@@ -335,7 +335,7 @@ public:
{
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150, true);
if (!target)
- target = Unit::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID));
+ target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID));
if (!target)
{
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
index 5562559786d..d300703152c 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
@@ -679,13 +679,16 @@ public:
if (!map->IsDungeon())
return;
- Map::PlayerList const &PlayerList = map->GetPlayers();
- for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
+ Map::PlayerList const &playerList = map->GetPlayers();
+ Position homePos = me->GetHomePosition();
+ for (Map::PlayerList::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr)
{
- if (i->GetSource()->GetPositionZ() <= DRAGON_REALM_Z-5)
+ Player* player = itr->GetSource();
+ if (player->IsInDist(&homePos, 50.0f) && player->GetPositionZ() <= DEMON_REALM_Z + 10.f)
{
- i->GetSource()->RemoveAura(AURA_SPECTRAL_REALM);
- i->GetSource()->TeleportTo(me->GetMap()->GetId(), i->GetSource()->GetPositionX(), i->GetSource()->GetPositionY(), DRAGON_REALM_Z+5, i->GetSource()->GetOrientation());
+ player->RemoveAura(AURA_SPECTRAL_REALM);
+ player->TeleportTo(me->GetMap()->GetId(), player->GetPositionX(),
+ player->GetPositionY(), DRAGON_REALM_Z + 5, player->GetOrientation());
}
}
}
@@ -763,7 +766,7 @@ public:
ThreatContainer::StorageType threatlist = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
{
- if (Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid()))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()))
if (unit->GetPositionZ() > me->GetPositionZ() + 5)
me->getThreatManager().modifyThreatPercent(unit, -100);
}
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
index 179a649aab4..565d40a802e 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
@@ -956,7 +956,7 @@ public:
ThreatContainer::StorageType const &threatlist = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
{
- Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (unit)
pPortal->AddThreat(unit, 1.0f);
}
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
index 9d9232b774d..faecb2ca2f0 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
@@ -603,7 +603,7 @@ public:
{
if (SpellTimer <= diff)
{
- Unit* Victim = Unit::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID));
+ Unit* Victim = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID));
switch (NeedForAHack)
{
case 0:
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
index 9134f15959f..f06dc247883 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
+++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
@@ -94,7 +94,7 @@ class boss_archaedas : public CreatureScript
void ActivateMinion(uint64 uiGuid, bool flag)
{
- Unit* minion = Unit::GetUnit(*me, uiGuid);
+ Unit* minion = ObjectAccessor::GetUnit(*me, uiGuid);
if (minion && minion->IsAlive())
{
@@ -139,7 +139,7 @@ class boss_archaedas : public CreatureScript
} else if (bWakingUp && iAwakenTimer <= 0)
{
bWakingUp = false;
- AttackStart(Unit::GetUnit(*me, instance->GetData64(0)));
+ AttackStart(ObjectAccessor::GetUnit(*me, instance->GetData64(0)));
return; // dont want to continue until we finish the AttackStart method
}
@@ -285,7 +285,7 @@ class npc_archaedas_minions : public CreatureScript
{
bWakingUp = false;
bAmIAwake = true;
- // AttackStart(Unit::GetUnit(*me, instance->GetData64(0))); // whoWokeArchaedasGUID
+ // AttackStart(ObjectAccessor::GetUnit(*me, instance->GetData64(0))); // whoWokeArchaedasGUID
return; // dont want to continue until we finish the AttackStart method
}
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp
index 717406e6750..56c84677181 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp
+++ b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp
@@ -252,7 +252,7 @@ class instance_uldaman : public InstanceMapScript
if (!archaedas)
return;
- if (Unit::GetUnit(*archaedas, target))
+ if (ObjectAccessor::GetUnit(*archaedas, target))
{
archaedas->CastSpell(archaedas, SPELL_ARCHAEDAS_AWAKEN, false);
whoWokeuiArchaedasGUID = target;
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp
index 3adca160720..9810c42bdfb 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp
@@ -304,13 +304,13 @@ class boss_akilzon : public CreatureScript
break;
case EVENT_STORM_SEQUENCE:
{
- Unit* target = Unit::GetUnit(*me, CloudGUID);
+ Unit* target = ObjectAccessor::GetUnit(*me, CloudGUID);
if (!target || !target->IsAlive())
{
EnterEvadeMode();
return;
}
- else if (Unit* Cyclone = Unit::GetUnit(*me, CycloneGUID))
+ else if (Unit* Cyclone = ObjectAccessor::GetUnit(*me, CycloneGUID))
Cyclone->CastSpell(target, SPELL_SAND_STORM, true); // keep casting or...
HandleStormSequence(target);
break;
@@ -323,7 +323,7 @@ class boss_akilzon : public CreatureScript
for (uint8 i = 0; i < 8; ++i)
{
- Unit* bird = Unit::GetUnit(*me, BirdGUIDs[i]);
+ Unit* bird = ObjectAccessor::GetUnit(*me, BirdGUIDs[i]);
if (!bird) //they despawned on die
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
@@ -406,7 +406,7 @@ class npc_akilzon_eagle : public CreatureScript
arrived = true;
if (TargetGUID)
{
- if (Unit* target = Unit::GetUnit(*me, TargetGUID))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, TargetGUID))
DoCast(target, SPELL_EAGLE_SWOOP, true);
TargetGUID = 0;
me->SetSpeed(MOVE_RUN, 1.2f);
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp
index 2da0201e060..74ce267441f 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp
@@ -152,7 +152,7 @@ class boss_halazzi : public CreatureScript
me->Attack(me->GetVictim(), true);
me->GetMotionMaster()->MoveChase(me->GetVictim());
}
- if (Creature* Lynx = Unit::GetCreature(*me, LynxGUID))
+ if (Creature* Lynx = ObjectAccessor::GetCreature(*me, LynxGUID))
Lynx->DisappearAndDie();
me->SetMaxHealth(600000);
me->SetHealth(600000 - 150000 * TransformCount);
@@ -174,7 +174,7 @@ class boss_halazzi : public CreatureScript
TotemTimer = 12000;
break;
case PHASE_MERGE:
- if (Unit* pLynx = Unit::GetUnit(*me, LynxGUID))
+ if (Unit* pLynx = ObjectAccessor::GetUnit(*me, LynxGUID))
{
Talk(SAY_MERGE);
pLynx->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -259,7 +259,7 @@ class boss_halazzi : public CreatureScript
EnterPhase(PHASE_MERGE);
else
{
- Unit* Lynx = Unit::GetUnit(*me, LynxGUID);
+ Unit* Lynx = ObjectAccessor::GetUnit(*me, LynxGUID);
if (Lynx && !Lynx->HealthAbovePct(20) /*Lynx->HealthBelowPct(10)*/)
EnterPhase(PHASE_MERGE);
}
@@ -272,7 +272,7 @@ class boss_halazzi : public CreatureScript
{
if (CheckTimer <= diff)
{
- Unit* Lynx = Unit::GetUnit(*me, LynxGUID);
+ Unit* Lynx = ObjectAccessor::GetUnit(*me, LynxGUID);
if (Lynx)
{
Lynx->GetMotionMaster()->MoveFollow(me, 0, 0);
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
index a7afa93e835..6e5517e82a6 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
@@ -303,7 +303,7 @@ class boss_hexlord_malacrass : public CreatureScript
for (uint8 i = 0; i < 4; ++i)
{
- Creature* creature = Unit::GetCreature(*me, AddGUID[i]);
+ Creature* creature = ObjectAccessor::GetCreature(*me, AddGUID[i]);
if (creature && creature->IsAlive())
creature->AI()->AttackStart(me->GetVictim());
else
@@ -338,7 +338,7 @@ class boss_hexlord_malacrass : public CreatureScript
for (uint8 i = 0; i < 4; ++i)
{
- Unit* Temp = Unit::GetUnit(*me, AddGUID[i]);
+ Unit* Temp = ObjectAccessor::GetUnit(*me, AddGUID[i]);
if (Temp && Temp->IsAlive())
Temp->DealDamage(Temp, Temp->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
}
@@ -363,7 +363,7 @@ class boss_hexlord_malacrass : public CreatureScript
{
for (uint8 i = 0; i < 4; ++i)
{
- Creature* creature = (Unit::GetCreature((*me), AddGUID[i]));
+ Creature* creature = (ObjectAccessor::GetCreature((*me), AddGUID[i]));
if (!creature || !creature->IsAlive())
{
if (creature) creature->setDeathState(DEAD);
@@ -397,7 +397,7 @@ class boss_hexlord_malacrass : public CreatureScript
if (CheckAddState_Timer <= diff)
{
for (uint8 i = 0; i < 4; ++i)
- if (Creature* temp = Unit::GetCreature(*me, AddGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, AddGUID[i]))
if (temp->IsAlive() && !temp->GetVictim())
temp->AI()->AttackStart(me->GetVictim());
@@ -462,7 +462,7 @@ class boss_hexlord_malacrass : public CreatureScript
if (PlayerAbility_Timer <= diff)
{
- //Unit* target = Unit::GetUnit(*me, PlayerGUID);
+ //Unit* target = ObjectAccessor::GetUnit(*me, PlayerGUID);
//if (target && target->IsAlive())
//{
UseAbility();
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp
index 47ca91ec591..f264b12ca23 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp
@@ -292,7 +292,7 @@ class boss_janalai : public CreatureScript
{
if (BombCount < 40)
{
- if (Unit* FireBomb = Unit::GetUnit(*me, FireBombGUIDs[BombCount]))
+ if (Unit* FireBomb = ObjectAccessor::GetUnit(*me, FireBombGUIDs[BombCount]))
{
FireBomb->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
DoCast(FireBomb, SPELL_FIRE_BOMB_THROW, true);
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp
index 179b29b70d8..6b0fc05ba3d 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp
@@ -229,7 +229,7 @@ class boss_zuljin : public CreatureScript
Talk(YELL_DEATH);
Summons.DespawnEntry(CREATURE_COLUMN_OF_FIRE);
- if (Unit* Temp = Unit::GetUnit(*me, SpiritGUID[3]))
+ if (Unit* Temp = ObjectAccessor::GetUnit(*me, SpiritGUID[3]))
Temp->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_DEAD);
}
@@ -284,7 +284,7 @@ class boss_zuljin : public CreatureScript
{
if (SpiritGUID[i])
{
- if (Unit* temp = Unit::GetUnit(*me, SpiritGUID[i]))
+ if (Unit* temp = ObjectAccessor::GetUnit(*me, SpiritGUID[i]))
{
temp->SetVisible(false);
temp->setDeathState(DEAD);
@@ -322,10 +322,10 @@ class boss_zuljin : public CreatureScript
Talk(Transform[Phase].text);
if (Phase > 0)
{
- if (Unit* Temp = Unit::GetUnit(*me, SpiritGUID[Phase - 1]))
+ if (Unit* Temp = ObjectAccessor::GetUnit(*me, SpiritGUID[Phase - 1]))
Temp->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_DEAD);
}
- if (Unit* Temp = Unit::GetUnit(*me, SpiritGUID[NextPhase - 1]))
+ if (Unit* Temp = ObjectAccessor::GetUnit(*me, SpiritGUID[NextPhase - 1]))
Temp->CastSpell(me, SPELL_SIPHON_SOUL, false); // should m cast on temp
if (NextPhase == 2)
{
@@ -442,7 +442,7 @@ class boss_zuljin : public CreatureScript
if (Claw_Loop_Timer <= diff)
{
Unit* target = me->GetVictim();
- if (!target || !target->isTargetableForAttack()) target = Unit::GetUnit(*me, TankGUID);
+ if (!target || !target->isTargetableForAttack()) target = ObjectAccessor::GetUnit(*me, TankGUID);
if (!target || !target->isTargetableForAttack()) target = SelectTarget(SELECT_TARGET_RANDOM, 0);
if (target)
{
@@ -455,7 +455,7 @@ class boss_zuljin : public CreatureScript
{
Claw_Rage_Timer = urand(15000, 20000);
me->SetSpeed(MOVE_RUN, 1.2f);
- AttackStart(Unit::GetUnit(*me, TankGUID));
+ AttackStart(ObjectAccessor::GetUnit(*me, TankGUID));
TankGUID = 0;
return;
}
@@ -503,7 +503,7 @@ class boss_zuljin : public CreatureScript
{
Lynx_Rush_Timer = urand(15000, 20000);
me->SetSpeed(MOVE_RUN, 1.2f);
- AttackStart(Unit::GetUnit(*me, TankGUID));
+ AttackStart(ObjectAccessor::GetUnit(*me, TankGUID));
TankGUID = 0;
}
else
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
index efd18472a52..4ac34615498 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
@@ -344,7 +344,7 @@ class npc_zulian_prowler : public CreatureScript
DoCast(me, SPELL_SNEAK_RANK_1_1);
DoCast(me, SPELL_SNEAK_RANK_1_2);
- if (Unit* arlokk = me->GetUnit(*me, _instance->GetData64(NPC_ARLOKK)))
+ if (Unit* arlokk = ObjectAccessor::GetUnit(*me, _instance->GetData64(NPC_ARLOKK)))
me->GetMotionMaster()->MovePoint(0, arlokk->GetPositionX(), arlokk->GetPositionY(), arlokk->GetPositionZ());
_events.ScheduleEvent(EVENT_ATTACK, 6000);
}
diff --git a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp
index 236455137dc..4eaf98d0a0e 100644
--- a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp
@@ -29,18 +29,19 @@ EndScriptData */
enum TwilightCorrupter
{
- ITEM_FRAGMENT = 21149,
NPC_TWILIGHT_CORRUPTER = 15625,
- YELL_TWILIGHTCORRUPTOR_RESPAWN = 0,
- YELL_TWILIGHTCORRUPTOR_AGGRO = 1,
- YELL_TWILIGHTCORRUPTOR_KILL = 2,
+ YELL_TWILIGHT_CORRUPTOR_RESPAWN = 0,
+ YELL_TWILIGHT_CORRUPTOR_AGGRO = 1,
+ YELL_TWILIGHT_CORRUPTOR_KILL = 2,
+
SPELL_SOUL_CORRUPTION = 25805,
SPELL_CREATURE_OF_NIGHTMARE = 25806,
SPELL_LEVEL_UP = 24312,
EVENT_SOUL_CORRUPTION = 1,
EVENT_CREATURE_OF_NIGHTMARE = 2,
- FACTION_HOSTILE = 14
+
+ QUEST_NIGHTMARES_CORRUPTION = 8735
};
/*######
@@ -58,12 +59,13 @@ public:
void Reset() override
{
- KillCount = 0;
+ _events.Reset();
+ KillCount = 0;
}
void EnterCombat(Unit* /*who*/) override
{
- Talk(YELL_TWILIGHTCORRUPTOR_AGGRO);
+ Talk(YELL_TWILIGHT_CORRUPTOR_AGGRO);
_events.ScheduleEvent(EVENT_SOUL_CORRUPTION, 15000);
_events.ScheduleEvent(EVENT_CREATURE_OF_NIGHTMARE, 30000);
}
@@ -73,7 +75,7 @@ public:
if (victim->GetTypeId() == TYPEID_PLAYER)
{
++KillCount;
- Talk(YELL_TWILIGHTCORRUPTOR_KILL, victim);
+ Talk(YELL_TWILIGHT_CORRUPTOR_KILL, victim);
if (KillCount == 3)
{
@@ -90,22 +92,27 @@ public:
_events.Update(diff);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_SOUL_CORRUPTION:
- DoCastVictim(SPELL_SOUL_CORRUPTION);
- _events.ScheduleEvent(EVENT_SOUL_CORRUPTION, rand()%4000+15000);
+ DoCastAOE(SPELL_SOUL_CORRUPTION);
+ _events.ScheduleEvent(EVENT_SOUL_CORRUPTION, urand(15000, 19000));
break;
case EVENT_CREATURE_OF_NIGHTMARE:
- DoCastVictim(SPELL_CREATURE_OF_NIGHTMARE);
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
+ DoCast(target, SPELL_CREATURE_OF_NIGHTMARE);
_events.ScheduleEvent(EVENT_CREATURE_OF_NIGHTMARE, 45000);
break;
default:
break;
}
}
+
DoMeleeAttackIfReady();
}
@@ -124,27 +131,22 @@ public:
# at_twilight_grove
######*/
+Position const TwillightCorrupter = { -10328.16f, -489.57f, 49.95f, 0.0f };
+
class at_twilight_grove : public AreaTriggerScript
{
-public:
- at_twilight_grove() : AreaTriggerScript("at_twilight_grove") { }
+ public:
+ at_twilight_grove() : AreaTriggerScript("at_twilight_grove") { }
- bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override
- {
- if (player->HasQuestForItem(ITEM_FRAGMENT))
+ bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override
{
- if (Unit* corrupter = player->SummonCreature(NPC_TWILIGHT_CORRUPTER, -10328.16f, -489.57f, 49.95f, 0, TEMPSUMMON_MANUAL_DESPAWN, 60000))
- corrupter->setFaction(FACTION_HOSTILE);
+ if (player->GetQuestStatus(QUEST_NIGHTMARES_CORRUPTION) == QUEST_STATUS_INCOMPLETE)
+ if (!player->FindNearestCreature(NPC_TWILIGHT_CORRUPTER, 500.0f, true))
+ if (Creature* corrupter = player->SummonCreature(NPC_TWILIGHT_CORRUPTER, TwillightCorrupter, TEMPSUMMON_MANUAL_DESPAWN, 60000))
+ corrupter->AI()->Talk(YELL_TWILIGHT_CORRUPTOR_RESPAWN, player);
- if (Creature* CorrupterSpeaker = player->SummonCreature(1, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()-1, 0, TEMPSUMMON_TIMED_DESPAWN, 15000))
- {
- CorrupterSpeaker->SetName("Twilight Corrupter");
- CorrupterSpeaker->SetVisible(true);
- CorrupterSpeaker->AI()->Talk(YELL_TWILIGHTCORRUPTOR_RESPAWN, player);
- }
- }
- return false;
- };
+ return false;
+ };
};
void AddSC_duskwood()
diff --git a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
index ecf2bd95cbe..e7e374ea26e 100644
--- a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
@@ -252,7 +252,7 @@ public:
{
me->DisappearAndDie();
- if (Creature* pMarzon = Unit::GetCreature(*me, MarzonGUID))
+ if (Creature* pMarzon = ObjectAccessor::GetCreature(*me, MarzonGUID))
{
if (pMarzon->IsAlive())
pMarzon->DisappearAndDie();
@@ -261,7 +261,7 @@ public:
void EnterCombat(Unit* who) override
{
- if (Creature* pMarzon = Unit::GetCreature(*me, MarzonGUID))
+ if (Creature* pMarzon = ObjectAccessor::GetCreature(*me, MarzonGUID))
{
if (pMarzon->IsAlive() && !pMarzon->IsInCombat())
pMarzon->AI()->AttackStart(who);
@@ -335,7 +335,7 @@ public:
uiPhase = 0;
break;
case 5:
- if (Creature* pMarzon = Unit::GetCreature(*me, MarzonGUID))
+ if (Creature* pMarzon = ObjectAccessor::GetCreature(*me, MarzonGUID))
pMarzon->AI()->Talk(SAY_MARZON_1);
uiTimer = 3000;
uiPhase = 6;
@@ -350,7 +350,7 @@ public:
case 7:
if (Creature* pTyrion = me->FindNearestCreature(NPC_TYRION, 20.0f, true))
pTyrion->AI()->Talk(SAY_TYRION_2);
- if (Creature* pMarzon = Unit::GetCreature(*me, MarzonGUID))
+ if (Creature* pMarzon = ObjectAccessor::GetCreature(*me, MarzonGUID))
pMarzon->setFaction(14);
me->setFaction(14);
uiTimer = 0;
diff --git a/src/server/scripts/EasternKingdoms/zone_undercity.cpp b/src/server/scripts/EasternKingdoms/zone_undercity.cpp
index 07cdcefcbbb..0958a9141f0 100644
--- a/src/server/scripts/EasternKingdoms/zone_undercity.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_undercity.cpp
@@ -130,7 +130,7 @@ public:
{
if (summoned->GetEntry() == ENTRY_HIGHBORNE_BUNNY)
{
- if (Creature* target = Unit::GetCreature(*summoned, targetGUID))
+ if (Creature* target = ObjectAccessor::GetCreature(*summoned, targetGUID))
{
target->MonsterMoveWithSpeed(target->GetPositionX(), target->GetPositionY(), me->GetPositionZ()+15.0f, 0);
target->SetPosition(target->GetPositionX(), target->GetPositionY(), me->GetPositionZ()+15.0f, 0.0f);
diff --git a/src/server/scripts/Events/childrens_week.cpp b/src/server/scripts/Events/childrens_week.cpp
index eeda208f0e1..353b5ab9501 100644
--- a/src/server/scripts/Events/childrens_week.cpp
+++ b/src/server/scripts/Events/childrens_week.cpp
@@ -1036,7 +1036,7 @@ class npc_grizzlemaw_cw_trigger : public CreatureScript
if (who && who->GetDistance2d(me) < 10.0f)
if (Player* player = who->ToPlayer())
if (player->GetQuestStatus(QUEST_HOME_OF_THE_BEAR_MEN) == QUEST_STATUS_INCOMPLETE)
- if (Creature* orphan = Creature::GetCreature(*me, getOrphanGUID(player, ORPHAN_WOLVAR)))
+ if (Creature* orphan = ObjectAccessor::GetCreature(*me, getOrphanGUID(player, ORPHAN_WOLVAR)))
{
player->AreaExploredOrEventHappens(QUEST_HOME_OF_THE_BEAR_MEN);
orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_10);
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
index ebe9939390f..7aaa2239745 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
@@ -94,7 +94,7 @@ public:
{
if (waypointId == 7)
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
index c0f3ea35004..d86e3342cf0 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
@@ -118,7 +118,7 @@ public:
{
if (CheckTimer <= diff)
{
- if (Unit* Archimonde = Unit::GetUnit(*me, ArchimondeGUID))
+ if (Unit* Archimonde = ObjectAccessor::GetUnit(*me, ArchimondeGUID))
{
if (Archimonde->HealthBelowPct(2) || !Archimonde->IsAlive())
DoCast(me, SPELL_DENOUEMENT_WISP);
@@ -205,7 +205,7 @@ public:
{
if (ChangeTargetTimer <= diff)
{
- if (Unit* temp = Unit::GetUnit(*me, TargetGUID))
+ if (Unit* temp = ObjectAccessor::GetUnit(*me, TargetGUID))
{
me->GetMotionMaster()->MoveFollow(temp, 0.0f, 0.0f);
TargetGUID = 0;
@@ -364,7 +364,7 @@ public:
ThreatContainer::StorageType::const_iterator itr = threatlist.begin();
for (; itr != threatlist.end(); ++itr)
{
- Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (unit && unit->IsAlive())
targets.push_back(unit);
}
@@ -406,7 +406,7 @@ public:
summoned->CastSpell(summoned, SPELL_DOOMFIRE_SPAWN, false);
summoned->CastSpell(summoned, SPELL_DOOMFIRE, true, 0, 0, me->GetGUID());
- if (Unit* DoomfireSpirit = Unit::GetUnit(*me, DoomfireSpiritGUID))
+ if (Unit* DoomfireSpirit = ObjectAccessor::GetUnit(*me, DoomfireSpiritGUID))
{
summoned->GetMotionMaster()->MoveFollow(DoomfireSpirit, 0.0f, 0.0f);
DoomfireSpiritGUID = 0;
@@ -487,7 +487,7 @@ public:
if (temp)
WorldTreeGUID = temp->GetGUID();
- if (Unit* Nordrassil = Unit::GetUnit(*me, WorldTreeGUID))
+ if (Unit* Nordrassil = ObjectAccessor::GetUnit(*me, WorldTreeGUID))
{
Nordrassil->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
Nordrassil->SetDisplayId(11686);
@@ -496,7 +496,7 @@ public:
}
}
- if (Unit* Nordrassil = Unit::GetUnit(*me, WorldTreeGUID))
+ if (Unit* Nordrassil = ObjectAccessor::GetUnit(*me, WorldTreeGUID))
{
Nordrassil->CastSpell(me, SPELL_DRAIN_WORLD_TREE_2, true);
DrainNordrassilTimer = 1000;
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp
index d7c48541315..c9e010e4159 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp
@@ -99,7 +99,7 @@ public:
{
if (waypointId == 7 && instance)
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
index 193b8bfe483..5266f2b22c5 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
@@ -94,7 +94,7 @@ public:
{
if (waypointId == 7 && instance)
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp
index 21fe3ab946b..9ac5034d954 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp
@@ -89,7 +89,7 @@ public:
{
if (waypointId == 7 && instance)
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp
index c8006158ef1..4e6da7dcac2 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp
@@ -665,7 +665,7 @@ void hyjalAI::DeSpawnVeins()
{
if (Faction == 1)
{
- Creature* unit=Unit::GetCreature((*me), instance->GetData64(DATA_JAINAPROUDMOORE));
+ Creature* unit=ObjectAccessor::GetCreature((*me), instance->GetData64(DATA_JAINAPROUDMOORE));
if (!unit)return;
hyjalAI* ai = CAST_AI(hyjalAI, unit->AI());
if (!ai)return;
@@ -676,7 +676,7 @@ void hyjalAI::DeSpawnVeins()
}
} else if (Faction)
{
- Creature* unit=Unit::GetCreature((*me), instance->GetData64(DATA_THRALL));
+ Creature* unit=ObjectAccessor::GetCreature((*me), instance->GetData64(DATA_THRALL));
if (!unit)return;
hyjalAI* ai = CAST_AI(hyjalAI, unit->AI());
if (!ai)return;
@@ -804,7 +804,7 @@ void hyjalAI::UpdateAI(uint32 diff)
{
if (BossGUID[i])
{
- Unit* unit = Unit::GetUnit(*me, BossGUID[i]);
+ Unit* unit = ObjectAccessor::GetUnit(*me, BossGUID[i]);
if (unit && (!unit->IsAlive()))
{
if (BossGUID[i] == BossGUID[0])
@@ -937,7 +937,7 @@ void hyjalAI::WaypointReached(uint32 waypointId)
DoCast(me, SPELL_MASS_TELEPORT, false);
if (me->GetEntry() == THRALL && DummyGuid)
{
- if (Creature* creature = Unit::GetCreature(*me, DummyGuid))
+ if (Creature* creature = ObjectAccessor::GetCreature(*me, DummyGuid))
{
hyjalAI* ai = CAST_AI(hyjalAI, creature->AI());
ai->DoMassTeleport = true;
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
index 038b7ab69ce..85de43cb4c4 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
@@ -447,7 +447,7 @@ public:
{
if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
@@ -486,7 +486,7 @@ public:
CanMove = true;
if (instance->GetData(DATA_ALLIANCE_RETREAT) && !instance->GetData(DATA_HORDE_RETREAT))
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
} else if (instance->GetData(DATA_ALLIANCE_RETREAT) && instance->GetData(DATA_HORDE_RETREAT)){
@@ -563,13 +563,13 @@ public:
{
if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
else
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
@@ -662,13 +662,13 @@ public:
{
if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
else
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
@@ -773,13 +773,13 @@ public:
{
if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
else
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
@@ -886,13 +886,13 @@ public:
{
if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
else
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
@@ -982,13 +982,13 @@ public:
{
if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
else
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
@@ -1068,13 +1068,13 @@ public:
{
if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
else
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
@@ -1155,7 +1155,7 @@ public:
{
if (waypointId == 2 && !IsOverrun)
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
{
me->AddThreat(target, 0.0f);
@@ -1276,7 +1276,7 @@ public:
{
if (waypointId == 2 && !IsOverrun)
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
{
me->AddThreat(target, 0.0f);
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
index 0e6d60395d8..fd832051421 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
@@ -627,7 +627,7 @@ public:
JumpToNextStep(2000);
break;
case 3:
- if (Creature* uther = Unit::GetCreature(*me, utherGUID))
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID))
{
uther->AI()->Talk(SAY_PHASE102);
}
@@ -642,13 +642,13 @@ public:
break;
//After waypoint 1
case 5:
- if (Creature* jaina = Unit::GetCreature(*me, jainaGUID))
+ if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID))
jaina->SetTarget(me->GetGUID());
Talk(SAY_PHASE104);
JumpToNextStep(10000);
break;
case 6:
- if (Creature* uther = Unit::GetCreature(*me, utherGUID))
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID))
uther->AI()->Talk(SAY_PHASE105);
JumpToNextStep(1000);
break;
@@ -657,7 +657,7 @@ public:
JumpToNextStep(4000);
break;
case 8:
- if (Creature* uther = Unit::GetCreature(*me, utherGUID))
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID))
uther->AI()->Talk(SAY_PHASE107);
JumpToNextStep(6000);
break;
@@ -666,7 +666,7 @@ public:
JumpToNextStep(4000);
break;
case 10:
- if (Creature* uther = Unit::GetCreature(*me, utherGUID))
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID))
uther->AI()->Talk(SAY_PHASE109);
JumpToNextStep(8000);
break;
@@ -675,7 +675,7 @@ public:
JumpToNextStep(4000);
break;
case 12:
- if (Creature* uther = Unit::GetCreature(*me, utherGUID))
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID))
uther->AI()->Talk(SAY_PHASE111);
JumpToNextStep(4000);
break;
@@ -684,7 +684,7 @@ public:
JumpToNextStep(11000);
break;
case 14:
- if (Creature* jaina = Unit::GetCreature(*me, jainaGUID))
+ if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID))
jaina->AI()->Talk(SAY_PHASE113);
JumpToNextStep(3000);
break;
@@ -693,12 +693,12 @@ public:
JumpToNextStep(9000);
break;
case 16:
- if (Creature* uther = Unit::GetCreature(*me, utherGUID))
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID))
uther->AI()->Talk(SAY_PHASE115);
JumpToNextStep(4000);
break;
case 17:
- if (Creature* uther = Unit::GetCreature(*me, utherGUID))
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID))
{
uther->SetWalk(true);
uther->GetMotionMaster()->MovePoint(0, 1794.357f, 1272.183f, 140.558f);
@@ -706,7 +706,7 @@ public:
JumpToNextStep(1000);
break;
case 18:
- if (Creature* jaina = Unit::GetCreature(*me, jainaGUID))
+ if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID))
{
me->SetTarget(jainaGUID);
jaina->SetWalk(true);
@@ -719,7 +719,7 @@ public:
JumpToNextStep(1000);
break;
case 20:
- if (Creature* jaina = Unit::GetCreature(*me, jainaGUID))
+ if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID))
jaina->AI()->Talk(SAY_PHASE117);
JumpToNextStep(3000);
break;
@@ -740,10 +740,10 @@ public:
bStepping = false;
SetRun(true);
- if (Creature* jaina = Unit::GetCreature(*me, jainaGUID))
+ if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID))
jaina->DisappearAndDie();
- if (Creature* uther = Unit::GetCreature(*me, utherGUID))
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID))
uther->DisappearAndDie();
me->SetTarget(0);
@@ -772,7 +772,7 @@ public:
//After waypoint 9
case 27:
me->SetTarget(citymenGUID[0]);
- if (Creature* cityman = Unit::GetCreature(*me, citymenGUID[0]))
+ if (Creature* cityman = ObjectAccessor::GetCreature(*me, citymenGUID[0]))
{
cityman->SetTarget(me->GetGUID());
cityman->SetWalk(true);
@@ -781,7 +781,7 @@ public:
JumpToNextStep(2000);
break;
case 28:
- if (Creature* cityman = Unit::GetCreature(*me, citymenGUID[0]))
+ if (Creature* cityman = ObjectAccessor::GetCreature(*me, citymenGUID[0]))
cityman->AI()->Talk(SAY_PHASE202);
JumpToNextStep(4000);
break;
@@ -799,11 +799,11 @@ public:
case 31:
SetEscortPaused(false);
bStepping = false;
- if (Creature* cityman1 = Unit::GetCreature(*me, citymenGUID[1]))
+ if (Creature* cityman1 = ObjectAccessor::GetCreature(*me, citymenGUID[1]))
{
cityman1->AI()->Talk(SAY_PHASE204);
cityman1->SetTarget(me->GetGUID());
- if (Creature* cityman0 = Unit::GetCreature(*me, citymenGUID[0]))
+ if (Creature* cityman0 = ObjectAccessor::GetCreature(*me, citymenGUID[0]))
cityman0->Kill(cityman0);
me->SetTarget(citymenGUID[1]);
}
@@ -815,7 +815,7 @@ public:
JumpToNextStep(1000);
break;
case 33:
- if (Creature* cityman1 = Unit::GetCreature(*me, citymenGUID[1]))
+ if (Creature* cityman1 = ObjectAccessor::GetCreature(*me, citymenGUID[1]))
cityman1->Kill(cityman1);
JumpToNextStep(1000);
break;
@@ -839,7 +839,7 @@ public:
case 36:
if (Creature* malganis = me->SummonCreature(NPC_MAL_GANIS, 2117.349f, 1288.624f, 136.271f, 1.37f, TEMPSUMMON_TIMED_DESPAWN, 60000))
{
- if (Creature* pStalkerM = Unit::GetCreature(*me, stalkerGUID))
+ if (Creature* pStalkerM = ObjectAccessor::GetCreature(*me, stalkerGUID))
malganis->CastSpell(pStalkerM, 63793, false);
malganisGUID = malganis->GetGUID();
@@ -850,7 +850,7 @@ public:
JumpToNextStep(11000);
break;
case 37:
- if (Creature* malganis = Unit::GetCreature(*me, malganisGUID))
+ if (Creature* malganis = ObjectAccessor::GetCreature(*me, malganisGUID))
{
Creature* pZombie = GetClosestCreatureWithEntry(malganis, NPC_CITY_MAN, 100.0f);
if (!pZombie)
@@ -865,12 +865,12 @@ public:
phaseTimer = 500;
break;
case 38:
- if (Creature* malganis = Unit::GetCreature(*me, malganisGUID))
+ if (Creature* malganis = ObjectAccessor::GetCreature(*me, malganisGUID))
malganis->AI()->Talk(SAY_PHASE207);
JumpToNextStep(17000);
break;
case 39:
- if (Creature* malganis = Unit::GetCreature(*me, malganisGUID))
+ if (Creature* malganis = ObjectAccessor::GetCreature(*me, malganisGUID))
malganis->SetVisible(false);
Talk(SAY_PHASE208);
JumpToNextStep(7000);
@@ -922,7 +922,7 @@ public:
if (waveGUID[i] == 0)
break;
++mobCounter;
- Unit* temp = Unit::GetCreature(*me, waveGUID[i]);
+ Unit* temp = ObjectAccessor::GetCreature(*me, waveGUID[i]);
if (!temp || temp->isDead())
++deadCounter;
}
@@ -976,16 +976,16 @@ public:
//After Gossip 2 (waypoint 22)
case 61:
me->SetReactState(REACT_AGGRESSIVE);
- if (Creature* disguised0 = Unit::GetCreature(*me, infiniteDraconianGUID[0]))
+ if (Creature* disguised0 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[0]))
disguised0->SetTarget(me->GetGUID());
- if (Creature* disguised1 = Unit::GetCreature(*me, infiniteDraconianGUID[1]))
+ if (Creature* disguised1 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[1]))
disguised1->SetTarget(me->GetGUID());
- if (Creature* disguised2 = Unit::GetCreature(*me, infiniteDraconianGUID[2]))
+ if (Creature* disguised2 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[2]))
disguised2->SetTarget(me->GetGUID());
JumpToNextStep(1000);
break;
case 62:
- if (Creature* disguised0 = Unit::GetCreature(*me, infiniteDraconianGUID[0]))
+ if (Creature* disguised0 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[0]))
disguised0->AI()->Talk(SAY_PHASE302);
JumpToNextStep(7000);
break;
@@ -1001,7 +1001,7 @@ public:
JumpToNextStep(1000);
break;
case 65:
- if (Creature* disguised0 = Unit::GetCreature(*me, infiniteDraconianGUID[0]))
+ if (Creature* disguised0 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[0]))
disguised0->HandleEmoteCommand(11);
JumpToNextStep(1000);
break;
@@ -1010,12 +1010,12 @@ public:
JumpToNextStep(2000);
break;
case 67:
- if (Creature* disguised0 = Unit::GetCreature(*me, infiniteDraconianGUID[0]))
+ if (Creature* disguised0 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[0]))
disguised0->AI()->Talk(SAY_PHASE305);
JumpToNextStep(1000);
break;
case 68:
- if (Creature* disguised2 = Unit::GetCreature(*me, infiniteDraconianGUID[2]))
+ if (Creature* disguised2 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[2]))
{
disguised2->UpdateEntry(NPC_INFINITE_HUNTER);
//Make them unattackable
@@ -1025,7 +1025,7 @@ public:
JumpToNextStep(2000);
break;
case 69:
- if (Creature* disguised1 = Unit::GetCreature(*me, infiniteDraconianGUID[1]))
+ if (Creature* disguised1 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[1]))
{
disguised1->UpdateEntry(NPC_INFINITE_AGENT);
//Make them unattackable
@@ -1035,7 +1035,7 @@ public:
JumpToNextStep(2000);
break;
case 70:
- if (Creature* disguised0 = Unit::GetCreature(*me, infiniteDraconianGUID[0]))
+ if (Creature* disguised0 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[0]))
{
disguised0->UpdateEntry(NPC_INFINITE_ADVERSARY);
//Make them unattackable
@@ -1051,7 +1051,7 @@ public:
case 77:
//Make cratures attackable
for (uint32 i = 0; i< ENCOUNTER_DRACONIAN_NUMBER; ++i)
- if (Creature* temp = Unit::GetCreature(*me, infiniteDraconianGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[i]))
{
temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
temp->SetReactState(REACT_AGGRESSIVE);
@@ -1091,7 +1091,7 @@ public:
if (instance->GetData(DATA_EPOCH_EVENT) != DONE)
{
SpawnTimeRift(17, &epochGUID);
- if (Creature* epoch = Unit::GetCreature(*me, epochGUID))
+ if (Creature* epoch = ObjectAccessor::GetCreature(*me, epochGUID))
epoch->AI()->Talk(SAY_PHASE314);
me->SetTarget(epochGUID);
}
@@ -1105,7 +1105,7 @@ public:
case 82:
if (instance->GetData(DATA_EPOCH_EVENT) != DONE)
{
- if (Creature* epoch = Unit::GetCreature(*me, epochGUID))
+ if (Creature* epoch = ObjectAccessor::GetCreature(*me, epochGUID))
{
//Make Epoch attackable
epoch->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
@@ -1157,7 +1157,7 @@ public:
me->SetTarget(malganisGUID);
break;
case 87:
- if (Creature* malganis = Unit::GetCreature(*me, malganisGUID))
+ if (Creature* malganis = ObjectAccessor::GetCreature(*me, malganisGUID))
{
malganis->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_UNK_6 | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_UNK_15);
malganis->SetReactState(REACT_AGGRESSIVE);
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
index f6ff1719391..14f9bfb2e2f 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
@@ -402,7 +402,7 @@ public:
case 94:
if (uint64 TarethaGUID = instance->GetData64(DATA_TARETHA))
{
- if (Creature* Taretha = Creature::GetCreature(*me, TarethaGUID))
+ if (Creature* Taretha = ObjectAccessor::GetCreature(*me, TarethaGUID))
Taretha->AI()->Talk(SAY_TA_ESCAPED, me);
}
break;
@@ -590,7 +590,7 @@ public:
if (instance->GetData64(DATA_EPOCH) == 0)
creature->SummonCreature(ENTRY_EPOCH, 2639.13f, 698.55f, 65.43f, 4.59f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000);
- if (Creature* thrall = (Unit::GetCreature(*creature, instance->GetData64(DATA_THRALL))))
+ if (Creature* thrall = (ObjectAccessor::GetCreature(*creature, instance->GetData64(DATA_THRALL))))
CAST_AI(npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI, thrall->AI())->StartWP();
}
}
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
index 35086afa42e..21da920e4fd 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
@@ -545,7 +545,7 @@ public:
while (i != Stomach_Map.end())
{
//Check for valid player
- Unit* unit = Unit::GetUnit(*me, i->first);
+ Unit* unit = ObjectAccessor::GetUnit(*me, i->first);
//Only units out of stomach
if (unit && i->second == false)
@@ -640,7 +640,7 @@ public:
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
//Emerging phase
- //AttackStart(Unit::GetUnit(*me, HoldpPlayer));
+ //AttackStart(ObjectAccessor::GetUnit(*me, HoldpPlayer));
DoZoneInCombat();
//Place all units in threat list on outside of stomach
@@ -686,7 +686,7 @@ public:
while (i != Stomach_Map.end())
{
//Check for valid player
- Unit* unit = Unit::GetUnit(*me, i->first);
+ Unit* unit = ObjectAccessor::GetUnit(*me, i->first);
//Only move units in stomach
if (unit && i->second == true)
@@ -717,7 +717,7 @@ public:
while (i != Stomach_Map.end())
{
//Check for valid player
- Unit* unit = Unit::GetUnit(*me, i->first);
+ Unit* unit = ObjectAccessor::GetUnit(*me, i->first);
//Only apply to units in stomach
if (unit && i->second == true)
@@ -767,7 +767,7 @@ public:
if (StomachEnterVisTimer <= diff)
{
//Check for valid player
- Unit* unit = Unit::GetUnit(*me, StomachEnterTarget);
+ Unit* unit = ObjectAccessor::GetUnit(*me, StomachEnterTarget);
if (unit)
{
@@ -917,7 +917,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- if (Unit* p = Unit::GetUnit(*me, Portal))
+ if (Unit* p = ObjectAccessor::GetUnit(*me, Portal))
p->Kill(p);
}
@@ -998,7 +998,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- if (Unit* p = Unit::GetUnit(*me, Portal))
+ if (Unit* p = ObjectAccessor::GetUnit(*me, Portal))
p->Kill(p);
}
@@ -1026,7 +1026,7 @@ public:
{
if (EvadeTimer <= diff)
{
- if (Unit* p = Unit::GetUnit(*me, Portal))
+ if (Unit* p = ObjectAccessor::GetUnit(*me, Portal))
p->Kill(p);
//Dissapear and reappear at new position
@@ -1115,7 +1115,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- if (Unit* p = Unit::GetUnit(*me, Portal))
+ if (Unit* p = ObjectAccessor::GetUnit(*me, Portal))
p->Kill(p);
}
@@ -1144,7 +1144,7 @@ public:
{
if (EvadeTimer <= diff)
{
- if (Unit* p = Unit::GetUnit(*me, Portal))
+ if (Unit* p = ObjectAccessor::GetUnit(*me, Portal))
p->Kill(p);
//Dissapear and reappear at new position
@@ -1234,7 +1234,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- if (Unit* p = Unit::GetUnit(*me, Portal))
+ if (Unit* p = ObjectAccessor::GetUnit(*me, Portal))
p->Kill(p);
}
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
index 6775d84d435..acf0215f9ff 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
@@ -103,7 +103,7 @@ struct boss_twinemperorsAI : public ScriptedAI
Creature* GetOtherBoss()
{
- return Unit::GetCreature(*me, instance->GetData64(IAmVeklor() ? DATA_VEKNILASH : DATA_VEKLOR));
+ return ObjectAccessor::GetCreature(*me, instance->GetData64(IAmVeklor() ? DATA_VEKNILASH : DATA_VEKLOR));
}
void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp
index aa9180d79c2..0614303515c 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp
@@ -132,7 +132,7 @@ public:
void SendMyListToBuddies()
{
for (int i=0; i<3; ++i)
- if (Creature* pNearby = Unit::GetCreature(*me, NearbyGUID[i]))
+ if (Creature* pNearby = ObjectAccessor::GetCreature(*me, NearbyGUID[i]))
GiveBuddyMyList(pNearby);
}
@@ -140,7 +140,7 @@ public:
{
for (int i=0; i<3; ++i)
{
- Creature* c = Unit::GetCreature(*me, NearbyGUID[i]);
+ Creature* c = ObjectAccessor::GetCreature(*me, NearbyGUID[i]);
if (c)
{
if (!c->IsInCombat())
@@ -195,7 +195,7 @@ public:
if (!NearbyGUID[bli])
break;
- Creature* pNearby = Unit::GetCreature(*me, NearbyGUID[bli]);
+ Creature* pNearby = ObjectAccessor::GetCreature(*me, NearbyGUID[bli]);
if (!pNearby)
break;
@@ -221,7 +221,7 @@ public:
{
if (!NearbyGUID[i])
continue;
- if (Creature* pNearby = Unit::GetCreature(*me, NearbyGUID[i]))
+ if (Creature* pNearby = ObjectAccessor::GetCreature(*me, NearbyGUID[i]))
{
if (pNearby->isDead())
pNearby->Respawn();
@@ -250,7 +250,7 @@ public:
{
for (int ni=0; ni<3; ++ni)
{
- Creature* sent = Unit::GetCreature(*me, NearbyGUID[ni]);
+ Creature* sent = ObjectAccessor::GetCreature(*me, NearbyGUID[ni]);
if (!sent)
continue;
if (sent->isDead())
diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
index 67e3801f842..be70b2e9fa4 100644
--- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
@@ -443,7 +443,7 @@ public:
uint32 NextStep(uint8 Step)
{
- Creature* Spark = Unit::GetCreature(*me, SparkGUID);
+ Creature* Spark = ObjectAccessor::GetCreature(*me, SparkGUID);
if (!Spark)
return 99999999;
diff --git a/src/server/scripts/Kalimdor/zone_durotar.cpp b/src/server/scripts/Kalimdor/zone_durotar.cpp
index 8d6ae347b85..358814d440a 100644
--- a/src/server/scripts/Kalimdor/zone_durotar.cpp
+++ b/src/server/scripts/Kalimdor/zone_durotar.cpp
@@ -447,7 +447,7 @@ class spell_mount_check : public SpellScriptLoader
class spell_mount_check_AuraScript : public AuraScript
{
- PrepareAuraScript(spell_mount_check_AuraScript)
+ PrepareAuraScript(spell_mount_check_AuraScript);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
@@ -495,7 +495,7 @@ class spell_voljin_war_drums : public SpellScriptLoader
class spell_voljin_war_drums_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_voljin_war_drums_SpellScript)
+ PrepareSpellScript(spell_voljin_war_drums_SpellScript);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
@@ -552,7 +552,7 @@ class spell_voodoo : public SpellScriptLoader
class spell_voodoo_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_voodoo_SpellScript)
+ PrepareSpellScript(spell_voodoo_SpellScript);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
diff --git a/src/server/scripts/Kalimdor/zone_silithus.cpp b/src/server/scripts/Kalimdor/zone_silithus.cpp
index 3f4fb31a11d..04cec70b7ad 100644
--- a/src/server/scripts/Kalimdor/zone_silithus.cpp
+++ b/src/server/scripts/Kalimdor/zone_silithus.cpp
@@ -706,7 +706,7 @@ public:
break;
case 65:
me->SetVisible(false);
- if (Creature* AnachronosQuestTrigger = (Unit::GetCreature(*me, AnachronosQuestTriggerGUID)))
+ if (Creature* AnachronosQuestTrigger = (ObjectAccessor::GetCreature(*me, AnachronosQuestTriggerGUID)))
{
Talk(ARYGOS_YELL_1);
AnachronosQuestTrigger->AI()->EnterEvadeMode();
@@ -1002,11 +1002,11 @@ void npc_qiraj_war_spawn::npc_qiraj_war_spawnAI::JustDied(Unit* /*slayer*/)
if (!MobGUID)
return;
- if (Creature* mob = Unit::GetCreature(*me, MobGUID))
+ if (Creature* mob = ObjectAccessor::GetCreature(*me, MobGUID))
if (npc_anachronos_quest_trigger::npc_anachronos_quest_triggerAI* triggerAI = CAST_AI(npc_anachronos_quest_trigger::npc_anachronos_quest_triggerAI, mob->AI()))
triggerAI->LiveCounter();
-};
+}
/*#####
# go_crystalline_tear
diff --git a/src/server/scripts/Kalimdor/zone_tanaris.cpp b/src/server/scripts/Kalimdor/zone_tanaris.cpp
index 4ac4e502363..23e8e2f26ff 100644
--- a/src/server/scripts/Kalimdor/zone_tanaris.cpp
+++ b/src/server/scripts/Kalimdor/zone_tanaris.cpp
@@ -584,7 +584,7 @@ public:
{
PostEventTimer = 5000;
- Creature* torta = Creature::GetCreature(*me, TortaGUID);
+ Creature* torta = ObjectAccessor::GetCreature(*me, TortaGUID);
if (!torta || !torta->IsAlive())
{
//something happened, so just complete
diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp
index ae8c279947d..dabfee00065 100644
--- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp
+++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp
@@ -380,7 +380,7 @@ public:
{
if (AffrayChallenger[i])
{
- Creature* creature = Unit::GetCreature((*me), AffrayChallenger[i]);
+ Creature* creature = ObjectAccessor::GetCreature((*me), AffrayChallenger[i]);
if (creature && creature->IsAlive())
creature->DisappearAndDie();
}
@@ -388,7 +388,7 @@ public:
if (BigWill) // unsummon bigWill
{
- Creature* creature = Unit::GetCreature((*me), BigWill);
+ Creature* creature = ObjectAccessor::GetCreature((*me), BigWill);
if (creature && creature->IsAlive())
creature->DisappearAndDie();
}
@@ -429,7 +429,7 @@ public:
{
if (AffrayChallenger[i])
{
- Creature* creature = Unit::GetCreature((*me), AffrayChallenger[i]);
+ Creature* creature = ObjectAccessor::GetCreature((*me), AffrayChallenger[i]);
if ((!creature || (!creature->IsAlive())) && !ChallengerDown[i])
{
Talk(SAY_TWIGGY_FLATHEAD_DOWN);
diff --git a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp
index d6d45d72f5b..09f82b0417c 100644
--- a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp
+++ b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp
@@ -270,7 +270,7 @@ public:
{
if (EndEventTimer <= Diff)
{
- Creature* spraggle = Creature::GetCreature(*me, SpraggleGUID);
+ Creature* spraggle = ObjectAccessor::GetCreature(*me, SpraggleGUID);
if (!spraggle || !spraggle->IsAlive())
{
SetFollowComplete();
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp
index 09fdbcbce70..1c042f4d185 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp
@@ -211,7 +211,7 @@ public:
// Check if all summons in this phase killed
for (SummonList::const_iterator iter = Summons.begin(); iter != Summons.end(); ++iter)
{
- if (Creature* visage = Unit::GetCreature(*me, *iter))
+ if (Creature* visage = ObjectAccessor::GetCreature(*me, *iter))
{
// Not all are dead
if (phase == visage->GetPhaseMask())
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
index aab0f22169f..b78bdae5c87 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
@@ -212,7 +212,7 @@ public:
}
else
{
- if (Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_PL_JEDOGA_TARGET)))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_PL_JEDOGA_TARGET)))
{
AttackStart(target);
instance->SetData(DATA_JEDOGA_RESET_INITIANDS, 0);
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
index a4c3edb85f3..bf5855c3318 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
@@ -188,7 +188,7 @@ public:
}
break;
case IMPALE_PHASE_ATTACK:
- if (Creature* impaleTarget = Unit::GetCreature(*me, ImpaleTarget))
+ if (Creature* impaleTarget = ObjectAccessor::GetCreature(*me, ImpaleTarget))
{
impaleTarget->CastSpell(impaleTarget, SPELL_IMPALE_SPIKE, false);
impaleTarget->RemoveAurasDueToSpell(SPELL_IMPALE_SHAKEGROUND);
@@ -197,7 +197,7 @@ public:
ImpaleTimer = 1*IN_MILLISECONDS;
break;
case IMPALE_PHASE_DMG:
- if (Creature* impaleTarget = Unit::GetCreature(*me, ImpaleTarget))
+ if (Creature* impaleTarget = ObjectAccessor::GetCreature(*me, ImpaleTarget))
me->CastSpell(impaleTarget, SPELL_IMPALE_DMG, true);
ImpalePhase = IMPALE_PHASE_TARGET;
ImpaleTimer = 9*IN_MILLISECONDS;
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
index 12c3c580cae..81e124cf5bc 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
@@ -178,15 +178,15 @@ public:
Talk(SAY_SARTHARION_DEATH);
_JustDied();
- if (Creature* tenebron = Unit::GetCreature(*me, instance->GetData64(DATA_TENEBRON)))
+ if (Creature* tenebron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_TENEBRON)))
if (tenebron->IsAlive())
tenebron->DisappearAndDie();
- if (Creature* shadron = Unit::GetCreature(*me, instance->GetData64(DATA_SHADRON)))
+ if (Creature* shadron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADRON)))
if (shadron->IsAlive())
shadron->DisappearAndDie();
- if (Creature* vesperon = Unit::GetCreature(*me, instance->GetData64(DATA_VESPERON)))
+ if (Creature* vesperon = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_VESPERON)))
if (vesperon->IsAlive())
vesperon->DisappearAndDie();
}
@@ -211,7 +211,7 @@ public:
void DrakeRespawn() // Drakes respawning system
{
- if (Creature* tenebron = Unit::GetCreature(*me, instance->GetData64(DATA_TENEBRON)))
+ if (Creature* tenebron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_TENEBRON)))
{
tenebron->SetHomePosition(3239.07f, 657.235f, 86.8775f, 4.74729f);
if (tenebron->IsAlive())
@@ -231,7 +231,7 @@ public:
}
}
- if (Creature* shadron = Unit::GetCreature(*me, instance->GetData64(DATA_SHADRON)))
+ if (Creature* shadron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADRON)))
{
shadron->SetHomePosition(3363.06f, 525.28f, 98.362f, 4.76475f);
if (shadron->IsAlive())
@@ -251,7 +251,7 @@ public:
}
}
- if (Creature* vesperon = Unit::GetCreature(*me, instance->GetData64(DATA_VESPERON)))
+ if (Creature* vesperon = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_VESPERON)))
{
vesperon->SetHomePosition(3145.68f, 520.71f, 89.7f, 4.64258f);
if (vesperon->IsAlive())
@@ -280,7 +280,7 @@ public:
//if at least one of the dragons are alive and are being called
bool _canUseWill = false;
- if (Creature* fetchTene = Unit::GetCreature(*me, instance->GetData64(DATA_TENEBRON)))
+ if (Creature* fetchTene = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_TENEBRON)))
{
if (fetchTene->IsAlive() && !fetchTene->GetVictim())
{
@@ -298,7 +298,7 @@ public:
}
}
- if (Creature* fetchShad = Unit::GetCreature(*me, instance->GetData64(DATA_SHADRON)))
+ if (Creature* fetchShad = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADRON)))
{
if (fetchShad->IsAlive() && !fetchShad->GetVictim())
{
@@ -316,7 +316,7 @@ public:
}
}
- if (Creature* fetchVesp = Unit::GetCreature(*me, instance->GetData64(DATA_VESPERON)))
+ if (Creature* fetchVesp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_VESPERON)))
{
if (fetchVesp && fetchVesp->IsAlive() && !fetchVesp->GetVictim())
{
@@ -340,7 +340,7 @@ public:
void CallDragon(uint32 dataId)
{
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(dataId)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(dataId)))
{
if (temp->IsAlive() && !temp->GetVictim())
{
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
index cb0cba21d6c..7e9e351ae9c 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
@@ -292,7 +292,7 @@ public:
bHealth = false;
bDone = false;
- if (Creature* pMemory = Unit::GetCreature(*me, MemoryGUID))
+ if (Creature* pMemory = ObjectAccessor::GetCreature(*me, MemoryGUID))
if (pMemory->IsAlive())
pMemory->RemoveFromWorld();
}
@@ -373,7 +373,7 @@ public:
DoCast(me, SPELL_RENEW);
break;
case 1:
- if (Creature* pMemory = Unit::GetCreature(*me, MemoryGUID))
+ if (Creature* pMemory = ObjectAccessor::GetCreature(*me, MemoryGUID))
if (pMemory->IsAlive())
DoCast(pMemory, SPELL_RENEW);
break;
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp
index 46817e46512..a8aff70b034 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp
@@ -140,7 +140,7 @@ public:
for (std::list<uint64>::const_iterator itr = SummonList.begin(); itr != SummonList.end(); ++itr)
{
- if (Creature* temp = Unit::GetCreature(*me, *itr))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, *itr))
if (temp)
temp->DisappearAndDie();
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
index 2b1d582bcd4..2e24398d49a 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
@@ -126,9 +126,9 @@ bool GrandChampionsOutVehicle(Creature* me)
if (!instance)
return false;
- Creature* pGrandChampion1 = Unit::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_1));
- Creature* pGrandChampion2 = Unit::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_2));
- Creature* pGrandChampion3 = Unit::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_3));
+ Creature* pGrandChampion1 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_1));
+ Creature* pGrandChampion2 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_2));
+ Creature* pGrandChampion3 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_3));
if (pGrandChampion1 && pGrandChampion2 && pGrandChampion3)
{
@@ -829,7 +829,7 @@ public:
if (bShoot && uiMultiShotTimer <= uiDiff)
{
me->InterruptNonMeleeSpells(true);
- Unit* target = Unit::GetUnit(*me, uiTargetGUID);
+ Unit* target = ObjectAccessor::GetUnit(*me, uiTargetGUID);
if (target && me->IsInRange(target, 5.0f, 30.0f, false))
{
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp
index faeb92e4595..e22ee040599 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp
@@ -161,7 +161,7 @@ public:
}
for (std::list<uint64>::const_iterator itr = TempList.begin(); itr != TempList.end(); ++itr)
- if (Creature* summon = Unit::GetCreature(*me, *itr))
+ if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr))
AggroAllPlayers(summon);
}else if (uiLesserChampions == 9)
StartGrandChampionsAttack();
@@ -173,9 +173,9 @@ public:
void StartGrandChampionsAttack()
{
- Creature* pGrandChampion1 = Unit::GetCreature(*me, uiVehicle1GUID);
- Creature* pGrandChampion2 = Unit::GetCreature(*me, uiVehicle2GUID);
- Creature* pGrandChampion3 = Unit::GetCreature(*me, uiVehicle3GUID);
+ Creature* pGrandChampion1 = ObjectAccessor::GetCreature(*me, uiVehicle1GUID);
+ Creature* pGrandChampion2 = ObjectAccessor::GetCreature(*me, uiVehicle2GUID);
+ Creature* pGrandChampion3 = ObjectAccessor::GetCreature(*me, uiVehicle3GUID);
if (pGrandChampion1 && pGrandChampion2 && pGrandChampion3)
{
@@ -417,7 +417,7 @@ public:
if (!Champion1List.empty())
{
for (std::list<uint64>::const_iterator itr = Champion1List.begin(); itr != Champion1List.end(); ++itr)
- if (Creature* summon = Unit::GetCreature(*me, *itr))
+ if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr))
AggroAllPlayers(summon);
NextStep(0, false);
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
index 77e4e740333..6a664ec7f8d 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
@@ -344,7 +344,7 @@ class boss_anubarak_trial : public CreatureScript
uint32 at = urand(0, _burrowGUID.size()-1);
for (uint32 k = 0; k < at; k++)
++i;
- if (Creature* pBurrow = Unit::GetCreature(*me, *i))
+ if (Creature* pBurrow = ObjectAccessor::GetCreature(*me, *i))
pBurrow->CastSpell(pBurrow, 66340, false);
events.ScheduleEvent(EVENT_SUMMON_SCARAB, 4*IN_MILLISECONDS, 0, PHASE_SUBMERGED);
@@ -377,7 +377,7 @@ class boss_anubarak_trial : public CreatureScript
uint8 i = startAt;
do
{
- if (Unit* pSphere = Unit::GetCreature(*me, _sphereGUID[i]))
+ if (Unit* pSphere = ObjectAccessor::GetCreature(*me, _sphereGUID[i]))
{
if (!pSphere->HasAura(SPELL_FROST_SPHERE))
{
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
index 71df7d05378..77697cdb3e8 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
@@ -479,7 +479,7 @@ class boss_toc_champion_controller : public CreatureScript
case 1:
for (std::list<uint64>::iterator i = _summons.begin(); i != _summons.end(); ++i)
{
- if (Creature* temp = Unit::GetCreature(*me, *i))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, *i))
{
temp->SetReactState(REACT_AGGRESSIVE);
temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
@@ -559,7 +559,7 @@ struct boss_faction_championsAI : public BossAI
void JustReachedHome() override
{
- if (Creature* pChampionController = Unit::GetCreature((*me), instance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
+ if (Creature* pChampionController = ObjectAccessor::GetCreature((*me), instance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
pChampionController->AI()->SetData(2, FAIL);
me->DespawnOrUnsummon();
}
@@ -577,7 +577,7 @@ struct boss_faction_championsAI : public BossAI
std::list<HostileReference*> const& tList = me->getThreatManager().getThreatList();
for (std::list<HostileReference*>::const_iterator itr = tList.begin(); itr != tList.end(); ++itr)
{
- Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (unit && me->getThreatManager().getThreat(unit))
{
if (unit->GetTypeId() == TYPEID_PLAYER)
@@ -609,7 +609,7 @@ struct boss_faction_championsAI : public BossAI
void JustDied(Unit* /*killer*/) override
{
if (_aiType != AI_PET)
- if (Creature* pChampionController = Unit::GetCreature((*me), instance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
+ if (Creature* pChampionController = ObjectAccessor::GetCreature((*me), instance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
pChampionController->AI()->SetData(2, DONE);
}
@@ -617,7 +617,7 @@ struct boss_faction_championsAI : public BossAI
{
DoCast(me, SPELL_ANTI_AOE, true);
_EnterCombat();
- if (Creature* pChampionController = Unit::GetCreature((*me), instance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
+ if (Creature* pChampionController = ObjectAccessor::GetCreature((*me), instance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
pChampionController->AI()->SetData(2, IN_PROGRESS);
}
@@ -634,11 +634,11 @@ struct boss_faction_championsAI : public BossAI
if (TeamInInstance == ALLIANCE)
{
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(NPC_VARIAN)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(NPC_VARIAN)))
temp->AI()->Talk(SAY_KILL_PLAYER);
}
else
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(NPC_GARROSH)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(NPC_GARROSH)))
temp->AI()->Talk(SAY_KILL_PLAYER);
@@ -663,7 +663,7 @@ struct boss_faction_championsAI : public BossAI
Unit* target;
for (iter = tList.begin(); iter!=tList.end(); ++iter)
{
- target = Unit::GetUnit(*me, (*iter)->getUnitGuid());
+ target = ObjectAccessor::GetUnit(*me, (*iter)->getUnitGuid());
if (target && target->getPowerType() == POWER_MANA)
return target;
}
@@ -678,7 +678,7 @@ struct boss_faction_championsAI : public BossAI
Unit* target;
for (iter = tList.begin(); iter != tList.end(); ++iter)
{
- target = Unit::GetUnit(*me, (*iter)->getUnitGuid());
+ target = ObjectAccessor::GetUnit(*me, (*iter)->getUnitGuid());
if (target && me->GetDistance2d(target) < distance)
++count;
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
index abeafe156ad..c0f7b2f1856 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
@@ -553,7 +553,7 @@ class spell_mistress_kiss_area : public SpellScriptLoader
class spell_mistress_kiss_area_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_mistress_kiss_area_SpellScript)
+ PrepareSpellScript(spell_mistress_kiss_area_SpellScript);
void FilterTargets(std::list<WorldObject*>& targets)
{
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
index f45a57bd0bc..9e75bef9735 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
@@ -508,7 +508,7 @@ struct boss_jormungarAI : public BossAI
void JustDied(Unit* /*killer*/) override
{
- if (Creature* otherWorm = Unit::GetCreature(*me, instance->GetData64(OtherWormEntry)))
+ if (Creature* otherWorm = ObjectAccessor::GetCreature(*me, instance->GetData64(OtherWormEntry)))
{
if (!otherWorm->IsAlive())
{
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
index 00eb970b57b..e40cd9d5f41 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
@@ -245,7 +245,7 @@ struct boss_twin_baseAI : public BossAI
// Called when sister pointer needed
Creature* GetSister()
{
- return Unit::GetCreature((*me), instance->GetData64(SisterNpcId));
+ return ObjectAccessor::GetCreature((*me), instance->GetData64(SisterNpcId));
}
void EnterCombat(Unit* /*who*/) override
@@ -673,8 +673,7 @@ class spell_powering_up : public SpellScriptLoader
class spell_powering_up_SpellScript : public SpellScript
{
- public:
- PrepareSpellScript(spell_powering_up_SpellScript)
+ PrepareSpellScript(spell_powering_up_SpellScript);
uint32 spellId;
uint32 poweringUp;
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
index 64afe8d5b2e..7cab84ee4a7 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
@@ -95,7 +95,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
// make sure Anub'arak isnt missing and floor is destroyed after a crash
if (GetBossState(BOSS_LICH_KING) == DONE && TrialCounter && GetBossState(BOSS_ANUBARAK) != DONE)
{
- Creature* anubArak = Unit::GetCreature(*player, GetData64(NPC_ANUBARAK));
+ Creature* anubArak = ObjectAccessor::GetCreature(*player, GetData64(NPC_ANUBARAK));
if (!anubArak)
anubArak = player->SummonCreature(NPC_ANUBARAK, AnubarakLoc[0].GetPositionX(), AnubarakLoc[0].GetPositionY(), AnubarakLoc[0].GetPositionZ(), 3, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME);
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
index 74e4f4caa9d..11548ba4b1c 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
@@ -173,7 +173,7 @@ class npc_announcer_toc10 : public CreatureScript
else if (instance->GetBossState(BOSS_JARAXXUS) != DONE)
{
// if Jaraxxus is spawned, but the raid wiped
- if (Creature* jaraxxus = Unit::GetCreature(*player, instance->GetData64(NPC_JARAXXUS)))
+ if (Creature* jaraxxus = ObjectAccessor::GetCreature(*player, instance->GetData64(NPC_JARAXXUS)))
{
jaraxxus->RemoveAurasDueToSpell(SPELL_JARAXXUS_CHAINS);
jaraxxus->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -207,7 +207,7 @@ class npc_announcer_toc10 : public CreatureScript
creature->CastSpell(creature, SPELL_CORPSE_TELEPORT, false);
creature->CastSpell(creature, SPELL_DESTROY_FLOOR_KNOCKUP, false);
- Creature* anubArak = Unit::GetCreature(*creature, instance->GetData64(NPC_ANUBARAK));
+ Creature* anubArak = ObjectAccessor::GetCreature(*creature, instance->GetData64(NPC_ANUBARAK));
if (!anubArak || !anubArak->IsAlive())
anubArak = creature->SummonCreature(NPC_ANUBARAK, AnubarakLoc[0].GetPositionX(), AnubarakLoc[0].GetPositionY(), AnubarakLoc[0].GetPositionZ(), 3, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME);
@@ -330,7 +330,7 @@ class boss_lich_king_toc : public CreatureScript
me->CastSpell(me, SPELL_DESTROY_FLOOR_KNOCKUP, false);
_instance->SetBossState(BOSS_LICH_KING, DONE);
- Creature* temp = Unit::GetCreature(*me, _instance->GetData64(NPC_ANUBARAK));
+ Creature* temp = ObjectAccessor::GetCreature(*me, _instance->GetData64(NPC_ANUBARAK));
if (!temp || !temp->IsAlive())
temp = me->SummonCreature(NPC_ANUBARAK, AnubarakLoc[0].GetPositionX(), AnubarakLoc[0].GetPositionY(), AnubarakLoc[0].GetPositionZ(), 3, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME);
@@ -377,7 +377,7 @@ class npc_fizzlebang_toc : public CreatureScript
{
Talk(SAY_STAGE_1_06, killer);
_instance->SetData(TYPE_EVENT, 1180);
- if (Creature* temp = Unit::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS)))
{
temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
temp->SetReactState(REACT_AGGRESSIVE);
@@ -484,23 +484,23 @@ class npc_fizzlebang_toc : public CreatureScript
_updateTimer = 5*IN_MILLISECONDS;
break;
case 1142:
- if (Creature* temp = Unit::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS)))
temp->SetTarget(me->GetGUID());
- if (Creature* pTrigger = Unit::GetCreature(*me, _triggerGUID))
+ if (Creature* pTrigger = ObjectAccessor::GetCreature(*me, _triggerGUID))
pTrigger->DespawnOrUnsummon();
- if (Creature* pPortal = Unit::GetCreature(*me, _portalGUID))
+ if (Creature* pPortal = ObjectAccessor::GetCreature(*me, _portalGUID))
pPortal->DespawnOrUnsummon();
_instance->SetData(TYPE_EVENT, 1144);
_updateTimer = 10*IN_MILLISECONDS;
break;
case 1144:
- if (Creature* temp = Unit::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS)))
temp->AI()->Talk(SAY_STAGE_1_05);
_instance->SetData(TYPE_EVENT, 1150);
_updateTimer = 5*IN_MILLISECONDS;
break;
case 1150:
- if (Creature* temp = Unit::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS)))
{
//1-shot Fizzlebang
temp->CastSpell(me, 67888, false);
@@ -699,7 +699,7 @@ class npc_tirion_toc : public CreatureScript
_instance->SetData(TYPE_EVENT, 3092);
break;
case 3092:
- if (Creature* pChampionController = Unit::GetCreature((*me), _instance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
+ if (Creature* pChampionController = ObjectAccessor::GetCreature((*me), _instance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
pChampionController->AI()->SetData(1, NOT_STARTED);
_instance->SetData(TYPE_EVENT, 3095);
break;
@@ -735,12 +735,12 @@ class npc_tirion_toc : public CreatureScript
break;
case 4015:
_instance->DoUseDoorOrButton(_instance->GetData64(GO_MAIN_GATE_DOOR));
- if (Creature* temp = Unit::GetCreature((*me), _instance->GetData64(NPC_LIGHTBANE)))
+ if (Creature* temp = ObjectAccessor::GetCreature((*me), _instance->GetData64(NPC_LIGHTBANE)))
{
temp->GetMotionMaster()->MovePoint(1, ToCCommonLoc[8].GetPositionX(), ToCCommonLoc[8].GetPositionY(), ToCCommonLoc[8].GetPositionZ());
temp->SetVisible(true);
}
- if (Creature* temp = Unit::GetCreature((*me), _instance->GetData64(NPC_DARKBANE)))
+ if (Creature* temp = ObjectAccessor::GetCreature((*me), _instance->GetData64(NPC_DARKBANE)))
{
temp->GetMotionMaster()->MovePoint(1, ToCCommonLoc[9].GetPositionX(), ToCCommonLoc[9].GetPositionY(), ToCCommonLoc[9].GetPositionZ());
temp->SetVisible(true);
@@ -779,7 +779,7 @@ class npc_tirion_toc : public CreatureScript
_instance->SetData(TYPE_EVENT, 6005);
break;
case 6005:
- if (Creature* tirionFordring = Unit::GetCreature((*me), _instance->GetData64(NPC_TIRION_FORDRING)))
+ if (Creature* tirionFordring = ObjectAccessor::GetCreature((*me), _instance->GetData64(NPC_TIRION_FORDRING)))
tirionFordring->AI()->Talk(SAY_STAGE_4_06);
_updateTimer = 20*IN_MILLISECONDS;
_instance->SetData(TYPE_EVENT, 6010);
@@ -787,7 +787,7 @@ class npc_tirion_toc : public CreatureScript
case 6010:
if (IsHeroic())
{
- if (Creature* tirionFordring = Unit::GetCreature((*me), _instance->GetData64(NPC_TIRION_FORDRING)))
+ if (Creature* tirionFordring = ObjectAccessor::GetCreature((*me), _instance->GetData64(NPC_TIRION_FORDRING)))
tirionFordring->AI()->Talk(SAY_STAGE_4_07);
_updateTimer = 1*MINUTE*IN_MILLISECONDS;
_instance->SetBossState(BOSS_ANUBARAK, SPECIAL);
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
index 72e4b0b5eb9..63b1359a406 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
@@ -314,7 +314,7 @@ public:
{
if (InstanceScript* instance = me->GetInstanceScript())
if (uint64 guid = instance->GetData64(DATA_NOVOS))
- if (Creature* novos = Creature::GetCreature(*me, guid))
+ if (Creature* novos = ObjectAccessor::GetCreature(*me, guid))
novos->AI()->JustSummoned(summon);
if (summon)
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp
index 9cf61058bd9..a5577b6a0ea 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp
@@ -25,7 +25,7 @@ enum Texts
SAY_SLAY = 1,
SAY_DEATH = 2,
SAY_IMPENDING_DESPAIR = 3,
- SAY_DEFILING_HORROR = 4,
+ SAY_DEFILING_HORROR = 4
};
enum Spells
@@ -33,8 +33,9 @@ enum Spells
SPELL_QUIVERING_STRIKE = 72422,
SPELL_IMPENDING_DESPAIR = 72426,
SPELL_DEFILING_HORROR = 72435,
- SPELL_HOPELESSNESS = 72395,
- H_SPELL_HOPELESSNESS = 72390, /// @todo not in dbc. Add in DB.
+ SPELL_HOPELESSNESS_1 = 72395,
+ SPELL_HOPELESSNESS_2 = 72396,
+ SPELL_HOPELESSNESS_3 = 72397
};
enum Events
@@ -42,99 +43,106 @@ enum Events
EVENT_NONE,
EVENT_QUIVERING_STRIKE,
EVENT_IMPENDING_DESPAIR,
- EVENT_DEFILING_HORROR,
+ EVENT_DEFILING_HORROR
};
+uint32 const HopelessnessHelper[3] = { SPELL_HOPELESSNESS_1, SPELL_HOPELESSNESS_2, SPELL_HOPELESSNESS_3 };
+
class boss_falric : public CreatureScript
{
-public:
- boss_falric() : CreatureScript("boss_falric") { }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<boss_falricAI>(creature);
- }
-
- struct boss_falricAI : public boss_horAI
- {
- boss_falricAI(Creature* creature) : boss_horAI(creature) { }
-
- uint8 uiHopelessnessCount;
-
- void Reset() override
- {
- boss_horAI::Reset();
-
- uiHopelessnessCount = 0;
+ public:
+ boss_falric() : CreatureScript("boss_falric") { }
- instance->SetBossState(DATA_FALRIC_EVENT, NOT_STARTED);
- }
-
- void EnterCombat(Unit* /*who*/) override
+ struct boss_falricAI : public boss_horAI
{
- Talk(SAY_AGGRO);
- instance->SetBossState(DATA_FALRIC_EVENT, IN_PROGRESS);
-
- events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 23000);
- events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 9000);
- events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(25000, 45000)); /// @todo adjust timer.
- }
+ boss_falricAI(Creature* creature) : boss_horAI(creature, DATA_FALRIC) { }
- void JustDied(Unit* /*killer*/) override
- {
- Talk(SAY_DEATH);
-
- instance->SetBossState(DATA_FALRIC_EVENT, DONE);
- }
+ void Reset() override
+ {
+ boss_horAI::Reset();
+ _hopelessnessCount = 0;
+ }
- void KilledUnit(Unit* /*victim*/) override
- {
- Talk(SAY_SLAY);
- }
+ void EnterCombat(Unit* /*who*/) override
+ {
+ Talk(SAY_AGGRO);
+ DoZoneInCombat();
+ instance->SetBossState(DATA_FALRIC, IN_PROGRESS);
- void UpdateAI(uint32 diff) override
- {
- // Return since we have no target
- if (!UpdateVictim())
- return;
+ events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 23000);
+ events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 9000);
+ events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(21000, 39000));
+ }
- events.Update(diff);
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
+ {
+ if ((_hopelessnessCount < 1 && me->HealthBelowPctDamaged(66, damage))
+ || (_hopelessnessCount < 2 && me->HealthBelowPctDamaged(33, damage))
+ || (_hopelessnessCount < 3 && me->HealthBelowPctDamaged(10, damage)))
+ {
+ if (_hopelessnessCount)
+ me->RemoveOwnedAura(sSpellMgr->GetSpellIdForDifficulty(HopelessnessHelper[_hopelessnessCount - 1], me));
+ DoCast(me, HopelessnessHelper[_hopelessnessCount]);
+ ++_hopelessnessCount;
+ }
+ }
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ void JustDied(Unit* /*killer*/) override
+ {
+ Talk(SAY_DEATH);
+ events.Reset();
+ instance->SetBossState(DATA_FALRIC, DONE);
+ }
- switch (events.ExecuteEvent())
+ void KilledUnit(Unit* who) override
{
- case EVENT_QUIVERING_STRIKE:
- DoCast(SPELL_QUIVERING_STRIKE);
- events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 10000);
- break;
- case EVENT_IMPENDING_DESPAIR:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- {
- Talk(SAY_IMPENDING_DESPAIR);
- DoCast(target, SPELL_IMPENDING_DESPAIR);
- }
- events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 13000);
- break;
- case EVENT_DEFILING_HORROR:
- DoCast(SPELL_DEFILING_HORROR);
- events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(25000, 45000)); /// @todo adjust timer.
- break;
+ if (who->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_SLAY);
}
- if ((uiHopelessnessCount < 1 && HealthBelowPct(66))
- || (uiHopelessnessCount < 2 && HealthBelowPct(33))
- || (uiHopelessnessCount < 3 && HealthBelowPct(10)))
+ void UpdateAI(uint32 diff) override
{
- uiHopelessnessCount++;
- DoCast(DUNGEON_MODE(SPELL_HOPELESSNESS, H_SPELL_HOPELESSNESS));
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ switch (events.ExecuteEvent())
+ {
+ case EVENT_QUIVERING_STRIKE:
+ DoCastVictim(SPELL_QUIVERING_STRIKE);
+ events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 10000);
+ break;
+ case EVENT_IMPENDING_DESPAIR:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
+ {
+ Talk(SAY_IMPENDING_DESPAIR);
+ DoCast(target, SPELL_IMPENDING_DESPAIR);
+ }
+ events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 13000);
+ break;
+ case EVENT_DEFILING_HORROR:
+ DoCastAOE(SPELL_DEFILING_HORROR);
+ events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(21000, 39000));
+ break;
+ default:
+ break;
+ }
+
+ DoMeleeAttackIfReady();
}
- DoMeleeAttackIfReady();
- }
- };
+ private:
+ uint8 _hopelessnessCount;
+ };
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfReflectionAI<boss_falricAI>(creature);
+ }
};
void AddSC_boss_falric()
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp
index cf267ff1079..902a917c594 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp
@@ -17,6 +17,8 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "SpellScript.h"
+#include "SpellAuraEffects.h"
#include "halls_of_reflection.h"
enum Texts
@@ -33,6 +35,7 @@ enum Spells
SPELL_WELL_OF_CORRUPTION = 72362,
SPELL_CORRUPTED_FLESH = 72363,
SPELL_SHARED_SUFFERING = 72368,
+ SPELL_SHARED_SUFFERING_DISPEL = 72373
};
enum Events
@@ -41,93 +44,130 @@ enum Events
EVENT_OBLITERATE,
EVENT_WELL_OF_CORRUPTION,
EVENT_CORRUPTED_FLESH,
- EVENT_SHARED_SUFFERING,
+ EVENT_SHARED_SUFFERING
};
class boss_marwyn : public CreatureScript
{
-public:
- boss_marwyn() : CreatureScript("boss_marwyn") { }
+ public:
+ boss_marwyn() : CreatureScript("boss_marwyn") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<boss_marwynAI>(creature);
- }
-
- struct boss_marwynAI : public boss_horAI
- {
- boss_marwynAI(Creature* creature) : boss_horAI(creature) { }
-
- void Reset() override
+ struct boss_marwynAI : public boss_horAI
{
- boss_horAI::Reset();
+ boss_marwynAI(Creature* creature) : boss_horAI(creature, DATA_MARWYN) { }
- instance->SetBossState(DATA_MARWYN_EVENT, NOT_STARTED);
- }
+ void Reset() override
+ {
+ boss_horAI::Reset();
+ }
- void EnterCombat(Unit* /*who*/) override
- {
- Talk(SAY_AGGRO);
- instance->SetBossState(DATA_MARWYN_EVENT, IN_PROGRESS);
+ void EnterCombat(Unit* /*who*/) override
+ {
+ Talk(SAY_AGGRO);
+ DoZoneInCombat();
+ instance->SetBossState(DATA_MARWYN, IN_PROGRESS);
+
+ events.ScheduleEvent(EVENT_OBLITERATE, urand(8000, 13000));
+ events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000);
+ events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000);
+ events.ScheduleEvent(EVENT_SHARED_SUFFERING, urand(14000, 15000));
+ }
- events.ScheduleEvent(EVENT_OBLITERATE, 30000); /// @todo Check timer
- events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000);
- events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000);
- events.ScheduleEvent(EVENT_SHARED_SUFFERING, 20000); /// @todo Check timer
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ Talk(SAY_DEATH);
+ events.Reset();
+ instance->SetBossState(DATA_MARWYN, DONE);
+ }
- void JustDied(Unit* /*killer*/) override
- {
- Talk(SAY_DEATH);
+ void KilledUnit(Unit* who) override
+ {
+ if (who->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_SLAY);
+ }
- instance->SetBossState(DATA_MARWYN_EVENT, DONE);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ switch (events.ExecuteEvent())
+ {
+ case EVENT_OBLITERATE:
+ DoCastVictim(SPELL_OBLITERATE);
+ events.ScheduleEvent(EVENT_OBLITERATE, urand(8000, 13000));
+ break;
+ case EVENT_WELL_OF_CORRUPTION:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
+ DoCast(target, SPELL_WELL_OF_CORRUPTION);
+ events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000);
+ break;
+ case EVENT_CORRUPTED_FLESH:
+ Talk(SAY_CORRUPTED_FLESH);
+ DoCastAOE(SPELL_CORRUPTED_FLESH);
+ events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000);
+ break;
+ case EVENT_SHARED_SUFFERING:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
+ DoCast(target, SPELL_SHARED_SUFFERING);
+ events.ScheduleEvent(EVENT_SHARED_SUFFERING, urand(14000, 15000));
+ break;
+ default:
+ break;
+ }
+
+ DoMeleeAttackIfReady();
+ }
+ };
- void KilledUnit(Unit* /*victim*/) override
+ CreatureAI* GetAI(Creature* creature) const override
{
- Talk(SAY_SLAY);
+ return GetHallsOfReflectionAI<boss_marwynAI>(creature);
}
+};
- void UpdateAI(uint32 diff) override
- {
- // Return since we have no target
- if (!UpdateVictim())
- return;
+// 72368, 72369 - Shared Suffering
+class spell_marwyn_shared_suffering : public SpellScriptLoader
+{
+ public:
+ spell_marwyn_shared_suffering() : SpellScriptLoader("spell_marwyn_shared_suffering") { }
- events.Update(diff);
+ class spell_marwyn_shared_suffering_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_marwyn_shared_suffering_AuraScript);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ {
+ if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_ENEMY_SPELL)
+ return;
+
+ if (Unit* caster = GetCaster())
+ {
+ int32 remainingDamage = aurEff->GetAmount() * (aurEff->GetTotalTicks() - aurEff->GetTickNumber());
+ if (remainingDamage > 0)
+ caster->CastCustomSpell(SPELL_SHARED_SUFFERING_DISPEL, SPELLVALUE_BASE_POINT1, remainingDamage, GetTarget(), TRIGGERED_FULL_MASK);
+ }
+ }
- switch (events.ExecuteEvent())
+ void Register() override
{
- case EVENT_OBLITERATE:
- DoCast(SPELL_OBLITERATE);
- events.ScheduleEvent(EVENT_OBLITERATE, 30000);
- break;
- case EVENT_WELL_OF_CORRUPTION:
- DoCast(SPELL_WELL_OF_CORRUPTION);
- events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000);
- break;
- case EVENT_CORRUPTED_FLESH:
- Talk(SAY_CORRUPTED_FLESH);
- DoCast(SPELL_CORRUPTED_FLESH);
- events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000);
- break;
- case EVENT_SHARED_SUFFERING:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_SHARED_SUFFERING);
- events.ScheduleEvent(EVENT_SHARED_SUFFERING, 20000);
- break;
+ AfterEffectRemove += AuraEffectRemoveFn(spell_marwyn_shared_suffering_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
}
+ };
- DoMeleeAttackIfReady();
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_marwyn_shared_suffering_AuraScript();
}
- };
-
};
void AddSC_boss_marwyn()
{
new boss_marwyn();
+ new spell_marwyn_shared_suffering();
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
index ca2a181a48a..ccdd92ae4ba 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
@@ -18,6 +18,8 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
+#include "SpellScript.h"
+#include "Transport.h"
#include "Player.h"
#include "halls_of_reflection.h"
@@ -36,17 +38,6 @@ enum Text
SAY_JAINA_INTRO_11 = 10,
SAY_JAINA_INTRO_END = 11,
- SAY_JAINA_ESCAPE_1 = 0,
- SAY_JAINA_ESCAPE_2 = 1,
- SAY_JAINA_ESCAPE_3 = 2,
- SAY_JAINA_ESCAPE_4 = 3,
- SAY_JAINA_ESCAPE_5 = 4,
- SAY_JAINA_ESCAPE_6 = 5,
- SAY_JAINA_ESCAPE_7 = 6,
- SAY_JAINA_ESCAPE_8 = 7,
- SAY_JAINA_ESCAPE_9 = 8,
- SAY_JAINA_ESCAPE_10 = 9,
-
SAY_SYLVANAS_INTRO_1 = 0,
SAY_SYLVANAS_INTRO_2 = 1,
SAY_SYLVANAS_INTRO_3 = 2,
@@ -57,16 +48,6 @@ enum Text
SAY_SYLVANAS_INTRO_8 = 7,
SAY_SYLVANAS_INTRO_END = 8,
- SAY_SYLVANAS_ESCAPE_1 = 0,
- SAY_SYLVANAS_ESCAPE_2 = 1,
- SAY_SYLVANAS_ESCAPE_3 = 2,
- SAY_SYLVANAS_ESCAPE_4 = 3,
- SAY_SYLVANAS_ESCAPE_5 = 4,
- SAY_SYLVANAS_ESCAPE_6 = 5,
- SAY_SYLVANAS_ESCAPE_7 = 6,
- SAY_SYLVANAS_ESCAPE_8 = 7,
- SAY_SYLVANAS_ESCAPE_9 = 8,
-
SAY_UTHER_INTRO_A2_1 = 0,
SAY_UTHER_INTRO_A2_2 = 1,
SAY_UTHER_INTRO_A2_3 = 2,
@@ -90,27 +71,40 @@ enum Text
SAY_LK_JAINA_INTRO_END = 3,
SAY_LK_SYLVANAS_INTRO_END = 4,
+ SAY_JAINA_SYLVANAS_ESCAPE_1 = 0,
+ SAY_JAINA_SYLVANAS_ESCAPE_2 = 1,
+ SAY_JAINA_SYLVANAS_ESCAPE_3 = 2,
+ SAY_JAINA_SYLVANAS_ESCAPE_4 = 3,
+ SAY_JAINA_SYLVANAS_ESCAPE_5 = 4,
+ SAY_JAINA_SYLVANAS_ESCAPE_6 = 5,
+ SAY_JAINA_SYLVANAS_ESCAPE_7 = 6, // unused
+ SAY_JAINA_SYLVANAS_ESCAPE_8 = 7,
+
+ SAY_JAINA_ESCAPE_9 = 8,
+ SAY_JAINA_ESCAPE_10 = 9,
+
+ SAY_SYLVANAS_ESCAPE_9 = 8,
+
SAY_LK_ESCAPE_1 = 0,
SAY_LK_ESCAPE_2 = 1,
- SAY_LK_ESCAPE_3 = 2,
- SAY_LK_ESCAPE_4 = 3,
- SAY_LK_ESCAPE_5 = 4,
- SAY_LK_ESCAPE_6 = 5,
- SAY_LK_ESCAPE_7 = 6,
- SAY_LK_ESCAPE_8 = 7,
- SAY_LK_ESCAPE_9 = 8,
- SAY_LK_ESCAPE_10 = 9,
- SAY_LK_ESCAPE_11 = 10,
+ SAY_LK_ESCAPE_ICEWALL_SUMMONED_1 = 2,
+ SAY_LK_ESCAPE_ICEWALL_SUMMONED_2 = 3,
+ SAY_LK_ESCAPE_ICEWALL_SUMMONED_3 = 4,
+ SAY_LK_ESCAPE_ICEWALL_SUMMONED_4 = 5,
+ SAY_LK_ESCAPE_GHOULS = 6,
+ SAY_LK_ESCAPE_ABOMINATION = 7,
+ SAY_LK_ESCAPE_WINTER = 8,
+ SAY_LK_ESCAPE_HARVEST_SOUL = 9,
SAY_FALRIC_INTRO_1 = 5,
SAY_FALRIC_INTRO_2 = 6,
- SAY_MARWYN_INTRO_1 = 4,
+ SAY_MARWYN_INTRO_1 = 4
};
enum Events
{
- EVENT_WALK_INTRO1 = 1,
+ EVENT_WALK_INTRO1 = 1,
EVENT_WALK_INTRO2,
EVENT_START_INTRO,
EVENT_SKIP_INTRO,
@@ -181,21 +175,17 @@ enum Events
EVENT_ESCAPE_13,
EVENT_ESCAPE_14,
EVENT_ESCAPE_15,
- //EVENT_ESCAPE_16,
+ EVENT_ESCAPE_16,
EVENT_ESCAPE_17,
- EVENT_ESCAPE_18,
- EVENT_ESCAPE_19,
- EVENT_ESCAPE_20,
- EVENT_ESCAPE_21,
- EVENT_ESCAPE_22,
- EVENT_ESCAPE_23,
- EVENT_ESCAPE_24,
- EVENT_ESCAPE_25,
- EVENT_ESCAPE_26,
- EVENT_ESCAPE_27,
-
- EVENT_OPEN_FROSTWORN_DOOR,
- EVENT_CLOSE_FROSTWORN_DOOR,
+
+ EVENT_REMORSELESS_WINTER,
+ EVENT_ESCAPE_SUMMON_GHOULS,
+ EVENT_ESCAPE_SUMMON_WITCH_DOCTOR,
+ EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION,
+
+ EVENT_OPEN_IMPENETRABLE_DOOR,
+ EVENT_CLOSE_IMPENETRABLE_DOOR,
+ EVENT_KORELN_LORALEN_DEATH
};
enum Misc
@@ -203,907 +193,1151 @@ enum Misc
ACTION_START_INTRO,
ACTION_SKIP_INTRO,
- QUEST_DELIVRANCE_FROM_THE_PIT_A2 = 24710,
- QUEST_DELIVRANCE_FROM_THE_PIT_H2 = 24712,
- QUEST_WRATH_OF_THE_LICH_KING_A2 = 24500,
- QUEST_WRATH_OF_THE_LICH_KING_H2 = 24802,
+ JAINA_SYLVANAS_MAX_HEALTH = 252000,
+
+ POINT_SHADOW_THRONE_DOOR = 1,
+ POINT_ATTACK_ICEWALL = 2,
+ POINT_TRAP = 3,
+
+ SOUND_LK_SLAY_1 = 17214,
+ SOUND_LK_SLAY_2 = 17215,
+ SOUND_LK_FURY_OF_FROSTMOURNE = 17224
};
enum Spells
{
- SPELL_CAST_VISUAL = 65633, // Jaina/Sylavana
- SPELL_BOSS_SPAWN_AURA = 72712, // Falric and Marwyn
- SPELL_UTHER_DESPAWN = 70693,
+ // Misc
SPELL_TAKE_FROSTMOURNE = 72729,
SPELL_FROSTMOURNE_DESPAWN = 72726,
SPELL_FROSTMOURNE_VISUAL = 73220,
SPELL_FROSTMOURNE_SOUNDS = 70667,
- SPELL_JAINA_ICEBARRIER = 69787, // Jaina Ice Barrier
- SPELL_JAINA_ICEPRISON = 69708, // Jaina Ice Prison
- SPELL_SYLVANAS_CLOAKOFDARKNESS = 70188, // Sylvanas Cloak of Darkness
- SPELL_SYLVANAS_DARKBINDING = 70194, // Sylvanas Dark Binding
- SPELL_REMORSELESS_WINTER = 69780, // Lich King Remorseless Winter
- SPELL_SOUL_REAPER = 69409, // Lich King Soul Reaper
- SPELL_FURY_OF_FROSTMOURNE = 70063, // Lich King Fury of FrostMourne
+ SPELL_BOSS_SPAWN_AURA = 72712, // Falric and Marwyn
+ SPELL_UTHER_DESPAWN = 70693,
+
+ // Jaina, Sylvanas
+ SPELL_CAST_VISUAL = 65633, // wrong
+ SPELL_SUMMON_SOULS = 72711,
+ SPELL_TAUNT_ARTHAS = 69857,
+ SPELL_JAINA_ICE_BARRIER = 69787, // Jaina Ice Barrier
+ SPELL_JAINA_ICE_PRISON = 69708, // Jaina Ice Prison
SPELL_JAINA_DESTROY_ICE_WALL = 69784, // Jaina
+ SPELL_SYLVANAS_CLOAK_OF_DARKNESS = 70188, // Sylvanas Cloak of Darkness
+ SPELL_SYLVANAS_DARK_BINDING = 70194, // Sylvanas Dark Binding
SPELL_SYLVANAS_DESTROY_ICE_WALL = 70224, // Sylvanas
- SPELL_SYLVANAS_JUMP = 68339, // Sylvanas Jump
+ SPELL_SYLVANAS_BLINDING_RETREAT = 70199, // Sylvanas Blinding Retreat
+
+ // Lich King
+ SPELL_REMORSELESS_WINTER = 69780, // Lich King Remorseless Winter
+ SPELL_SOUL_REAPER = 69409, // Lich King Soul Reaper
+ SPELL_FURY_OF_FROSTMOURNE = 70063, // Lich King Fury of Frostmourne
SPELL_RAISE_DEAD = 69818,
- SPELL_HARVEST_SOUL = 70070,
- SPELL_SUMMON_RISE_WITCH_DOCTOR = 69836,
+ SPELL_SUMMON_RISEN_WITCH_DOCTOR = 69836,
SPELL_SUMMON_LUMBERING_ABOMINATION = 69835,
SPELL_SUMMON_ICE_WALL = 69768, // Visual effect and icewall summoning
+ SPELL_PAIN_AND_SUFFERING = 74115, // Lich King Pain and Suffering
+ SPELL_STUN_BREAK_JAINA = 69764, // Lich King visual spell, another Stun Break is 69763, should remove the stun effect
+ SPELL_STUN_BREAK_SYLVANAS = 70200,
+ SPELL_HARVEST_SOUL = 69866, // Lich King Harvest Soul
+
+ // Koreln, Loralen
+ SPELL_FEIGN_DEATH = 29266,
// Raging Ghoul
- SPELL_EMERGE_VISUAL = 50142,
SPELL_GHOUL_JUMP = 70150,
+ SPELL_RAGING_GHOUL_SPAWN = 69636,
- // Witch Doctor
- SPELL_COURSE_OF_DOOM = 70144,
+ // Risen Witch Doctor
+ SPELL_CURSE_OF_DOOM = 70144,
SPELL_SHADOW_BOLT_VOLLEY = 70145,
SPELL_SHADOW_BOLT = 70080,
+ SPELL_RISEN_WITCH_DOCTOR_SPAWN = 69639,
// Lumbering Abomination
- SPELL_ABON_STRIKE = 40505,
- SPELL_VOMIT_SPRAY = 70176,
+ SPELL_CLEAVE = 40505,
+ SPELL_VOMIT_SPRAY = 70176
};
-const Position HallsofReflectionLocs[] =
+enum HorGossipMenu
{
- {5283.234863f, 1990.946777f, 707.695679f, 0.929097f}, // 2 Loralen Follows
- {5408.031250f, 2102.918213f, 707.695251f, 0.792756f}, // 9 Sylvanas Follows
- {5401.866699f, 2110.837402f, 707.695251f, 0.800610f}, // 10 Loralen follows
+ GOSSIP_MENU_JAINA_FINAL = 10930,
+ GOSSIP_MENU_SYLVANAS_FINAL = 10931
};
-const Position NpcJainaOrSylvanasEscapeRoute[] =
+Position const NpcJainaOrSylvanasEscapeRoute[] =
{
- {5601.217285f, 2207.652832f, 731.541931f, 5.223304f}, // leave the throne room
- {5607.224375f, 2173.913330f, 731.126038f, 2.608723f}, // adjust route
- {5583.427246f, 2138.784180f, 731.150391f, 4.260901f}, // stop for talking
- {5560.281738f, 2104.025635f, 731.410889f, 4.058383f}, // attack the first icewall
- {5510.990723f, 2000.772217f, 734.716064f, 3.973213f}, // attack the second icewall
- {5452.641113f, 1905.762329f, 746.530579f, 4.118834f}, // attack the third icewall
- {5338.126953f, 1768.429810f, 767.237244f, 3.855189f}, // attack the fourth icewall
- {5257.712402f, 1669.379395f, 784.300110f, 0.908373f}, // face the Lich king
- {5261.191895f, 1681.901611f, 784.285278f, 4.410465f}, // final position
+ { 5601.217285f, 2207.652832f, 731.541931f, 5.223304f }, // leave the throne room
+ { 5607.224375f, 2173.913330f, 731.126038f, 2.608723f }, // adjust route
+ { 5583.427246f, 2138.784180f, 731.150391f, 4.260901f }, // stop for talking
+ { 5560.281738f, 2104.025635f, 731.410889f, 4.058383f }, // attack the first icewall
+ { 5510.990723f, 2000.772217f, 734.716064f, 3.973213f }, // attack the second icewall
+ { 5452.641113f, 1905.762329f, 746.530579f, 4.118834f }, // attack the third icewall
+ { 5338.126953f, 1768.429810f, 767.237244f, 3.855189f }, // attack the fourth icewall
+ { 5259.06f, 1669.27f, 784.3008f, 0.0f }, // trap (sniffed)
+ { 5265.53f, 1681.6f, 784.2947f, 4.13643f } // final position (sniffed)
};
-const Position IceWalls[] =
+Position const LichKingMoveAwayPos = { 5400.069824f, 2102.7131689f, 707.69525f, 0.843803f }; // Lich King walks away
+Position const LichKingFirstSummon = { 5600.076172f, 2192.270996f, 731.750488f, 4.330935f }; // Lich King First summons
+Position const JainaSylvanasShadowThroneDoor = { 5577.243f, 2235.852f, 733.0128f, 2.209562f }; // Jaina/Sylvanas move to door
+Position const LichKingFinalPos = { 5283.742188f, 1706.335693f, 783.293518f, 4.138510f }; // Lich King Final Pos
+
+// sniffed
+Position const KorelnOrLoralenPos[] =
{
- {5547.833f, 2083.701f,731.4332f,4.24115f}, // first icewall
- {5503.213f, 1969.547f,737.0245f,4.293779f},// second icewall
- {5439.976f, 1879.005f,752.7048f,4.207591f},// third icewall
- {5318.289f, 1749.184f,771.9423f,4.054276f},// fourth icewall
+ { 5253.061f, 1953.616f, 707.6948f, 0.8377581f },
+ { 5283.226f, 1992.300f, 707.7445f, 0.8377581f },
+ { 5360.711f, 2064.797f, 707.6948f, 0.0f }
};
-const Position IntroPos = {5265.89f, 1952.98f, 707.6978f, 0.0f}; // Jaina/Sylvanas Intro Start Position
-const Position MoveThronePos = {5306.952148f, 1998.499023f, 709.341431f, 1.277278f}; // Jaina/Sylvanas walks to throne
-const Position UtherSpawnPos = {5308.310059f, 2003.857178f, 709.341431f, 4.650315f};
-const Position LichKingSpawnPos = {5362.917480f, 2062.307129f, 707.695374f, 3.945812f};
-const Position LichKingMoveThronePos = {5312.080566f, 2009.172119f, 709.341431f, 3.973301f}; // Lich King walks to throne
-const Position LichKingMoveAwayPos = {5400.069824f, 2102.7131689f, 707.69525f, 0.843803f}; // Lich King walks away
-const Position LichKingSpawnPos2 = {5552.733398f, 2262.718506f, 733.011047f, 4.009696f}; // Lich King Spawn Position 2
-const Position LichKingFirstSummon = {5600.076172f, 2192.270996f, 731.750488f, 4.330935f}; // Lich King First summons
-const Position JainaShadowThroneDoor = {5577.243f, 2235.852f, 733.0128f, 2.209562f}; // Jaina Spawn Position 2
-const Position SylvanasShadowThroneDoor = {5577.243f, 2235.852f, 733.0128f, 2.209562f}; // Sylvanas Spawn Position 2
-const Position FalricStartPos = {5283.878906f, 2030.459595f, 709.319641f, 5.506670f}; // Falric start position
-const Position MarwynStartPos = {5334.979980f, 1982.399536f, 709.320129f, 2.347014f}; // Marwyn start position
-const Position LichKingFinalPos = {5283.742188f, 1706.335693f, 783.293518f, 4.138510f}; // Lich King Final Pos
-const Position ChestPos = {5246.187500f, 1649.079468f, 784.301758f, 0.901268f}; // Chest position
-const Position FinalPortalPos = {5270.634277f ,1639.101196f, 784.303040f, 1.682743f}; // Final portal position
-
-class npc_jaina_or_sylvanas_hor : public CreatureScript
+Position const SylvanasIntroPosition[] =
{
- public:
- npc_jaina_or_sylvanas_hor() : CreatureScript("npc_jaina_or_sylvanas_hor") { }
-
- // AI of Part1
- struct npc_jaina_or_sylvanas_horAI : public ScriptedAI
- {
- npc_jaina_or_sylvanas_horAI(Creature* creature) : ScriptedAI(creature)
- {
- _instance = me->GetInstanceScript();
- }
-
- InstanceScript* _instance;
- uint64 _utherGUID;
- uint64 _lichkingGUID;
+ { 0.0f, 0.0f, 0.0f, 0.0f }, // 0 - Spawn
+ { 5263.2f, 1950.96f, 707.6948f, 0.8028514f }, // 1 - Move to Door
+ { 5306.82f, 1998.17f, 709.341f, 1.239184f }, // 2 - Move to Frostmourne
+};
- EventMap _events;
+Position const JainaIntroPosition[] =
+{
+ { 0.0f, 0.0f, 0.0f, 0.0f }, // 0 - Spawn
+ { 5265.89f, 1952.98f, 707.6978f, 0.0f }, // 1 - Move to Door
+ { 5306.95f, 1998.49f, 709.3414f, 1.277278f } // 2 - Move to Frostmourne
+};
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) override
- {
- player->PlayerTalkClass->ClearMenus();
- switch (action)
- {
- case 0:
- player->CLOSE_GOSSIP_MENU();
- _events.ScheduleEvent(EVENT_START_INTRO, 1000);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER);
- break;
- case 1:
- player->CLOSE_GOSSIP_MENU();
- _events.ScheduleEvent(EVENT_SKIP_INTRO, 1000);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER);
- break;
- }
- }
+Position const UtherSpawnPos = { 5307.814f, 2003.168f, 709.4244f, 4.537856f };
- void Reset() override
- {
- _events.Reset();
+Position const LichKingIntroPosition[] =
+{
+ { 5362.463f, 2062.693f, 707.7781f, 3.944444f }, // 0 - Spawn
+ { 5332.83f, 2031.24f, 707.6948f, 0.0f }, // 1 - Door
+ { 5312.93f, 2010.24f, 709.34f, 0.0f }, // 2 - Move to Frostmourne
+ { 5319.028f, 2016.662f, 707.6948f, 0.0f }, // 3 - Move back
+ { 5332.285f, 2030.832f, 707.6948f, 0.0f }, // 4 - Move back 2
+ { 5355.488f, 2055.149f, 707.6907f, 0.0f } // 5 - Move back 3
+};
- _utherGUID = 0;
- _lichkingGUID = 0;
+Position const FalricPosition[] =
+{
+ { 5276.583f, 2037.45f, 709.4025f, 5.532694f }, // 0 - Spawn
+ { 5283.95f, 2030.53f, 709.3191f, 0.0f } // 1 - Intro
+};
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER);
- me->SetStandState(UNIT_STAND_STATE_STAND);
- _events.ScheduleEvent(EVENT_WALK_INTRO1, 3000);
- }
+Position const MarwynPosition[] =
+{
+ { 5342.232f, 1975.696f, 709.4025f, 2.391101f }, // 0 - Spawn
+ { 5335.01f, 1982.37f, 709.3191f, 0.0f } // 1 - Intro
+};
- void UpdateAI(uint32 diff) override
- {
- _events.Update(diff);
+Position const SylvanasShadowThroneDoorPosition = { 5576.79f, 2235.73f, 733.0029f, 2.687807f };
- switch (_events.ExecuteEvent())
- {
- case EVENT_WALK_INTRO1:
- me->GetMotionMaster()->MovePoint(0, IntroPos);
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- {
- Talk(SAY_JAINA_INTRO_1);
- _events.ScheduleEvent(EVENT_WALK_INTRO2, 7000);
- }
- else
- {
- Talk(SAY_SYLVANAS_INTRO_1);
- _events.ScheduleEvent(EVENT_WALK_INTRO2, 9000);
- }
- break;
- case EVENT_WALK_INTRO2:
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- Talk(SAY_JAINA_INTRO_2);
- else
- Talk(SAY_SYLVANAS_INTRO_2);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER);
- break;
- case EVENT_START_INTRO:
- me->GetMotionMaster()->MovePoint(0, MoveThronePos);
- // Begining of intro is differents between fActions as the speech sequence and timers are differents.
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- _events.ScheduleEvent(EVENT_INTRO_A2_1, 0);
- else
- _events.ScheduleEvent(EVENT_INTRO_H2_1, 0);
- break;
- // A2 Intro Events
- case EVENT_INTRO_A2_1:
- Talk(SAY_JAINA_INTRO_3);
- _events.ScheduleEvent(EVENT_INTRO_A2_2, 7000);
- break;
- case EVENT_INTRO_A2_2:
- Talk(SAY_JAINA_INTRO_4);
- _events.ScheduleEvent(EVENT_INTRO_A2_3, 10000);
- break;
- case EVENT_INTRO_A2_3:
- me->CastSpell(me, SPELL_CAST_VISUAL, false);
- me->CastSpell(me, SPELL_FROSTMOURNE_SOUNDS, true);
- _instance->HandleGameObject(_instance->GetData64(DATA_FROSTMOURNE), true);
- _events.ScheduleEvent(EVENT_INTRO_A2_4, 10000);
- break;
- case EVENT_INTRO_A2_4:
- if (Creature* uther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN))
- {
- uther->GetMotionMaster()->MoveIdle();
- _utherGUID = uther->GetGUID();
- }
- _events.ScheduleEvent(EVENT_INTRO_A2_5, 2000);
- break;
- case EVENT_INTRO_A2_5:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_A2_1);
- _events.ScheduleEvent(EVENT_INTRO_A2_6, 3000);
- break;
- case EVENT_INTRO_A2_6:
- Talk(SAY_JAINA_INTRO_5);
- _events.ScheduleEvent(EVENT_INTRO_A2_7, 7000);
- break;
- case EVENT_INTRO_A2_7:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_A2_2);
- _events.ScheduleEvent(EVENT_INTRO_A2_8, 7000);
- break;
- case EVENT_INTRO_A2_8:
- Talk(SAY_JAINA_INTRO_6);
- _events.ScheduleEvent(EVENT_INTRO_A2_9, 1200);
- break;
- case EVENT_INTRO_A2_9:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_A2_3);
- _events.ScheduleEvent(EVENT_INTRO_A2_10, 11000);
- break;
- case EVENT_INTRO_A2_10:
- Talk(SAY_JAINA_INTRO_7);
- _events.ScheduleEvent(EVENT_INTRO_A2_11, 6000);
- break;
- case EVENT_INTRO_A2_11:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_A2_4);
- _events.ScheduleEvent(EVENT_INTRO_A2_12, 12000);
- break;
- case EVENT_INTRO_A2_12:
- Talk(SAY_JAINA_INTRO_8);
- _events.ScheduleEvent(EVENT_INTRO_A2_13, 6000);
- break;
- case EVENT_INTRO_A2_13:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_A2_5);
- _events.ScheduleEvent(EVENT_INTRO_A2_14, 13000);
- break;
- case EVENT_INTRO_A2_14:
- Talk(SAY_JAINA_INTRO_9);
- _events.ScheduleEvent(EVENT_INTRO_A2_15, 12000);
- break;
- case EVENT_INTRO_A2_15:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_A2_6);
- _events.ScheduleEvent(EVENT_INTRO_A2_16, 25000);
- break;
- case EVENT_INTRO_A2_16:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_A2_7);
- _events.ScheduleEvent(EVENT_INTRO_A2_17, 6000);
- break;
- case EVENT_INTRO_A2_17:
- Talk(SAY_JAINA_INTRO_10);
- _events.ScheduleEvent(EVENT_INTRO_A2_18, 5000);
- break;
- case EVENT_INTRO_A2_18:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- {
- uther->HandleEmoteCommand(EMOTE_ONESHOT_NO);
- uther->AI()->Talk(SAY_UTHER_INTRO_A2_8);
- }
- _events.ScheduleEvent(EVENT_INTRO_A2_19, 12000);
- break;
- case EVENT_INTRO_A2_19:
- Talk(SAY_JAINA_INTRO_11);
- _events.ScheduleEvent(EVENT_INTRO_LK_1, 3000);
- break;
- // H2 Intro Events
- case EVENT_INTRO_H2_1:
- Talk(SAY_SYLVANAS_INTRO_1);
- _events.ScheduleEvent(EVENT_INTRO_H2_2, 8000);
- break;
- case EVENT_INTRO_H2_2:
- Talk(SAY_SYLVANAS_INTRO_2);
- _events.ScheduleEvent(EVENT_INTRO_H2_3, 6000);
- break;
- case EVENT_INTRO_H2_3:
- Talk(SAY_SYLVANAS_INTRO_3);
- me->CastSpell(me, SPELL_CAST_VISUAL, false);
- me->CastSpell(me, SPELL_FROSTMOURNE_SOUNDS, true);
- _instance->HandleGameObject(_instance->GetData64(DATA_FROSTMOURNE), true);
- _events.ScheduleEvent(EVENT_INTRO_H2_4, 6000);
- break;
- case EVENT_INTRO_H2_4:
- // spawn UTHER during speach 2
- if (Creature* uther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN))
- {
- uther->GetMotionMaster()->MoveIdle();
- _utherGUID = uther->GetGUID();
- }
- _events.ScheduleEvent(EVENT_INTRO_H2_5, 2000);
- break;
- case EVENT_INTRO_H2_5:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_H2_1);
- _events.ScheduleEvent(EVENT_INTRO_H2_6, 11000);
- break;
- case EVENT_INTRO_H2_6:
- Talk(SAY_SYLVANAS_INTRO_4);
- _events.ScheduleEvent(EVENT_INTRO_H2_7, 3000);
- break;
- case EVENT_INTRO_H2_7:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_H2_2);
- _events.ScheduleEvent(EVENT_INTRO_H2_8, 6000);
- break;
- case EVENT_INTRO_H2_8:
- Talk(SAY_SYLVANAS_INTRO_5);
- _events.ScheduleEvent(EVENT_INTRO_H2_9, 5000);
- break;
- case EVENT_INTRO_H2_9:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_H2_3);
- _events.ScheduleEvent(EVENT_INTRO_H2_10, 19000);
- break;
- case EVENT_INTRO_H2_10:
- Talk(SAY_SYLVANAS_INTRO_6);
- _events.ScheduleEvent(EVENT_INTRO_H2_11, 1500);
- break;
- case EVENT_INTRO_H2_11:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_H2_4);
- _events.ScheduleEvent(EVENT_INTRO_H2_12, 19500);
- break;
- case EVENT_INTRO_H2_12:
- Talk(SAY_SYLVANAS_INTRO_7);
- _events.ScheduleEvent(EVENT_INTRO_H2_13, 2000);
- break;
- case EVENT_INTRO_H2_13:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- {
- uther->HandleEmoteCommand(EMOTE_ONESHOT_NO);
- uther->AI()->Talk(SAY_UTHER_INTRO_H2_5);
- }
- _events.ScheduleEvent(EVENT_INTRO_H2_14, 12000);
- break;
- case EVENT_INTRO_H2_14:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_H2_6);
- _events.ScheduleEvent(EVENT_INTRO_H2_15, 8000);
- break;
- case EVENT_INTRO_H2_15:
- Talk(SAY_SYLVANAS_INTRO_8);
- _events.ScheduleEvent(EVENT_INTRO_LK_1, 2000);
- break;
- // Remaining Intro Events common for both faction
- case EVENT_INTRO_LK_1:
- // Spawn LK in front of door, and make him move to the sword.
- if (Creature* lichking = me->SummonCreature(NPC_LICH_KING_PART1, LichKingSpawnPos, TEMPSUMMON_MANUAL_DESPAWN))
- {
- lichking->SetWalk(true);
- lichking->GetMotionMaster()->MovePoint(0, LichKingMoveThronePos);
- _lichkingGUID = lichking->GetGUID();
- _events.ScheduleEvent(EVENT_OPEN_FROSTWORN_DOOR, 0);
- _events.ScheduleEvent(EVENT_CLOSE_FROSTWORN_DOOR, 4000);
- }
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- {
- uther->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_COWER);
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- uther->AI()->Talk(SAY_UTHER_INTRO_A2_9);
- else
- uther->AI()->Talk(SAY_UTHER_INTRO_H2_7);
- }
- _events.ScheduleEvent(EVENT_INTRO_LK_2, 10000);
- break;
- case EVENT_INTRO_LK_2:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- lichking->AI()->Talk(SAY_LK_INTRO_1);
- _events.ScheduleEvent(EVENT_INTRO_LK_3, 1000);
- break;
- case EVENT_INTRO_LK_3:
- // The Lich King banishes Uther to the abyss.
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- {
- uther->CastSpell(uther, SPELL_UTHER_DESPAWN, true);
- uther->DespawnOrUnsummon(5000);
- _utherGUID = 0;
- }
- _events.ScheduleEvent(EVENT_INTRO_LK_4, 9000);
- break;
- case EVENT_INTRO_LK_4:
- // He steps forward and removes the runeblade from the heap of skulls.
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- {
- if (GameObject* frostmourne = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_FROSTMOURNE)))
- frostmourne->SetPhaseMask(2, true);
- lichking->CastSpell(lichking, SPELL_TAKE_FROSTMOURNE, true);
- lichking->CastSpell(lichking, SPELL_FROSTMOURNE_VISUAL, true);
- }
- _events.ScheduleEvent(EVENT_INTRO_LK_5, 8000);
- break;
- case EVENT_INTRO_LK_5:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- lichking->AI()->Talk(SAY_LK_INTRO_2);
- _events.ScheduleEvent(EVENT_INTRO_LK_6, 10000);
- break;
- case EVENT_INTRO_LK_6:
- // summon Falric and Marwyn. then go back to the door
- if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC_EVENT)))
- {
- falric->CastSpell(falric, SPELL_BOSS_SPAWN_AURA, true);
- falric->SetVisible(true);
- }
- if (Creature* marwyn = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MARWYN_EVENT)))
- {
- marwyn->CastSpell(marwyn, SPELL_BOSS_SPAWN_AURA, true);
- marwyn->SetVisible(true);
- }
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- {
- lichking->AI()->Talk(SAY_LK_INTRO_3);
- lichking->SetWalk(true);
- lichking->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos);
- }
- _events.ScheduleEvent(EVENT_INTRO_LK_7, 10000);
- _events.ScheduleEvent(EVENT_OPEN_FROSTWORN_DOOR, 5000);
- break;
- case EVENT_INTRO_LK_7:
- if (Creature* marwyn = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MARWYN_EVENT)))
- {
- marwyn->AI()->Talk(SAY_MARWYN_INTRO_1);
- marwyn->SetWalk(true);
- marwyn->GetMotionMaster()->MovePoint(0, MarwynStartPos);
- }
- _events.ScheduleEvent(EVENT_INTRO_LK_8, 1000);
- break;
- case EVENT_INTRO_LK_8:
- if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC_EVENT)))
- {
- falric->AI()->Talk(SAY_FALRIC_INTRO_1);
- falric->SetWalk(true);
- falric->GetMotionMaster()->MovePoint(0, FalricStartPos);
- }
- _events.ScheduleEvent(EVENT_INTRO_LK_9, 5000);
- break;
- case EVENT_INTRO_LK_9:
- if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC_EVENT)))
- falric->AI()->Talk(SAY_FALRIC_INTRO_2);
- _instance->ProcessEvent(0, EVENT_SPAWN_WAVES);
- _events.ScheduleEvent(EVENT_INTRO_LK_10, 4000);
- break;
- case EVENT_INTRO_LK_10:
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- Talk(SAY_JAINA_INTRO_END);
- else
- Talk(SAY_SYLVANAS_INTRO_END);
- me->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos);
- /// @todo Loralen/Koreln shall run also
- _events.ScheduleEvent(EVENT_INTRO_LK_11, 5000);
- break;
- case EVENT_INTRO_LK_11:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- {
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- lichking->AI()->Talk(SAY_LK_JAINA_INTRO_END);
- else
- lichking->AI()->Talk(SAY_LK_SYLVANAS_INTRO_END);
- }
- _events.ScheduleEvent(EVENT_INTRO_END, 5000);
- break;
- case EVENT_INTRO_END:
- _instance->SetData(DATA_INTRO_EVENT, DONE);
- // Loralen or Koreln disappearAndDie()
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- {
- lichking->DespawnOrUnsummon(5000);
- _lichkingGUID = 0;
- }
- me->DespawnOrUnsummon(10000);
- _events.ScheduleEvent(EVENT_CLOSE_FROSTWORN_DOOR, 7000);
- break;
- case EVENT_SKIP_INTRO:
- me->GetMotionMaster()->MovePoint(0, MoveThronePos);
- /// @todo Loralen/Koreln shall run also
- if (Creature* lichking = me->SummonCreature(NPC_LICH_KING_PART1, LichKingSpawnPos, TEMPSUMMON_MANUAL_DESPAWN))
- {
- lichking->SetWalk(true);
- lichking->GetMotionMaster()->MovePoint(0, LichKingMoveThronePos);
- lichking->SetReactState(REACT_PASSIVE);
- _lichkingGUID = lichking->GetGUID();
- _events.ScheduleEvent(EVENT_OPEN_FROSTWORN_DOOR, 0);
- _events.ScheduleEvent(EVENT_CLOSE_FROSTWORN_DOOR, 4000);
- }
- _events.ScheduleEvent(EVENT_INTRO_LK_4, 15000);
- break;
- case EVENT_OPEN_FROSTWORN_DOOR:
- if (GameObject* gate = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_FROSTWORN_DOOR)))
- _instance->HandleGameObject(0, true, gate);
- break;
- case EVENT_CLOSE_FROSTWORN_DOOR:
- if (GameObject* gate = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_FROSTWORN_DOOR)))
- _instance->HandleGameObject(0, false, gate);
- break;
- }
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetHallsOfReflectionAI<npc_jaina_or_sylvanas_horAI>(creature);
- }
+Position const IceWallTargetPosition[] =
+{
+ { 5547.833f, 2083.701f, 731.4332f, 1.029744f }, // 1st Icewall
+ { 5503.213f, 1969.547f, 737.0245f, 1.27409f }, // 2nd Icewall
+ { 5439.976f, 1879.005f, 752.7048f, 1.064651f }, // 3rd Icewall
+ { 5318.289f, 1749.184f, 771.9423f, 0.8726646f } // 4th Icewall
};
-class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
+class npc_jaina_or_sylvanas_intro_hor : public CreatureScript
{
public:
- npc_jaina_or_sylvanas_escape_hor() : CreatureScript("npc_jaina_or_sylvanas_escape_hor") { }
-
- // AI of Part2
- struct npc_jaina_or_sylvanas_escape_horAI : public ScriptedAI
- {
- npc_jaina_or_sylvanas_escape_horAI(Creature* creature) : ScriptedAI(creature),
- _instance(creature->GetInstanceScript()), _lichkingGUID(0), _walltargetGUID(0),
- _icewallGUID(0), _icewall(0)
- {
- }
-
- InstanceScript* _instance;
- uint64 _lichkingGUID;
- uint64 _walltargetGUID; // dummy
- uint64 _icewallGUID; // object
- uint32 _icewall; // icewall number
-
- EventMap _events;
+ npc_jaina_or_sylvanas_intro_hor() : CreatureScript("npc_jaina_or_sylvanas_intro_hor") { }
- void Reset() override
+ struct npc_jaina_or_sylvanas_intro_horAI : public ScriptedAI
{
- _events.Reset();
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- lichking->DespawnOrUnsummon(1);
- _lichkingGUID = 0;
- _walltargetGUID = 0;
- _icewallGUID = 0;
- _icewall = 0;
- _events.ScheduleEvent(EVENT_ESCAPE, 0);
- }
-
- void JustDied(Unit* /*Killer*/) override
- {
- _instance->SetData(DATA_ESCAPE_EVENT, FAIL);
- }
-
- void DoAction(int32 actionId) override
- {
- switch (actionId)
- {
- case ACTION_START_ESCAPING: // called by InstanceScript when we need to start the escaping event
- _events.ScheduleEvent(EVENT_ESCAPE_1, 1000);
- break;
- case ACTION_WALL_BROKEN:
- _icewall++;
- if (_icewall != 4)
- _events.ScheduleEvent(EVENT_ESCAPE_17, 3000);
- else
- _events.ScheduleEvent(EVENT_ESCAPE_23, 3000);
- break;
+ npc_jaina_or_sylvanas_intro_horAI(Creature* creature) : ScriptedAI(creature)
+ {
+ _instance = me->GetInstanceScript();
+ _utherGUID = 0;
+ _lichkingGUID = 0;
}
- }
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) override
- {
- player->PlayerTalkClass->ClearMenus();
- switch (action)
+ void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- case 0:
- player->CLOSE_GOSSIP_MENU();
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER);
- _events.ScheduleEvent(EVENT_ESCAPE_7, 0);
- break;
- }
- }
+ player->PlayerTalkClass->ClearMenus();
- void DestroyIceWall()
- {
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- me->RemoveAurasDueToSpell(SPELL_JAINA_DESTROY_ICE_WALL);
- else
- me->RemoveAurasDueToSpell(SPELL_SYLVANAS_DESTROY_ICE_WALL);
+ switch (gossipListId)
+ {
+ case 0:
+ player->PlayerTalkClass->SendCloseGossip();
+ _events.ScheduleEvent(EVENT_START_INTRO, 1000);
+ me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
+ break;
+ case 1:
+ player->PlayerTalkClass->SendCloseGossip();
+ _events.ScheduleEvent(EVENT_SKIP_INTRO, 1000);
+ me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
+ break;
+ default:
+ break;
+ }
+ }
- _instance->HandleGameObject(_icewallGUID, true);
+ void Reset() override
+ {
+ _events.Reset();
- if (Creature* wallTarget = ObjectAccessor::GetCreature(*me, _walltargetGUID))
- wallTarget->DespawnOrUnsummon();
- }
+ _utherGUID = 0;
+ _lichkingGUID = 0;
- void UpdateAI(uint32 diff) override
- {
- _events.Update(diff);
+ me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
+ me->SetStandState(UNIT_STAND_STATE_STAND);
+ _events.ScheduleEvent(EVENT_WALK_INTRO1, 3000);
+ }
- while (uint32 event = _events.ExecuteEvent())
+ void UpdateAI(uint32 diff) override
{
- switch (event)
+ _events.Update(diff);
+
+ switch (_events.ExecuteEvent())
{
- case EVENT_ESCAPE:
- if (Creature* lichking = me->SummonCreature(NPC_LICH_KING_PART2, LichKingSpawnPos2, TEMPSUMMON_MANUAL_DESPAWN))
+ case EVENT_WALK_INTRO1:
+ if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN)))
+ korelnOrLoralen->GetMotionMaster()->MovePoint(0, KorelnOrLoralenPos[0]);
+
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
{
- me->Attack(lichking, true);
- lichking->Attack(me, true);
- me->SetReactState(REACT_PASSIVE);
- lichking->SetReactState(REACT_PASSIVE);
- _lichkingGUID = lichking->GetGUID();
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- DoCast(me, SPELL_JAINA_ICEBARRIER);
- else
- DoCast(me, SPELL_SYLVANAS_CLOAKOFDARKNESS);
+ me->GetMotionMaster()->MovePoint(0, JainaIntroPosition[1]);
+ Talk(SAY_JAINA_INTRO_1);
+ _events.ScheduleEvent(EVENT_WALK_INTRO2, 7000);
}
- me->SetHealth(252000);
- break;
- case EVENT_ESCAPE_1:
- _instance->SetData(DATA_ESCAPE_EVENT, IN_PROGRESS);
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
+ else
{
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- lichking->AI()->Talk(SAY_LK_ESCAPE_1);
- else
- lichking->AI()->Talk(SAY_LK_ESCAPE_2);
- _events.ScheduleEvent(EVENT_ESCAPE_2, 8000);
+ me->GetMotionMaster()->MovePoint(0, SylvanasIntroPosition[1]);
+ Talk(SAY_SYLVANAS_INTRO_1);
+ _events.ScheduleEvent(EVENT_WALK_INTRO2, 9000);
}
break;
- case EVENT_ESCAPE_2:
+ case EVENT_WALK_INTRO2:
if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- DoCast(me, SPELL_CAST_VISUAL, true);
+ Talk(SAY_JAINA_INTRO_2);
else
- DoCast(me, SPELL_SYLVANAS_JUMP, true);
- _events.ScheduleEvent(EVENT_ESCAPE_3, 1000);
+ Talk(SAY_SYLVANAS_INTRO_2);
+ me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
break;
- case EVENT_ESCAPE_3:
+ case EVENT_START_INTRO:
+ if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN)))
+ korelnOrLoralen->GetMotionMaster()->MovePoint(0, KorelnOrLoralenPos[1]);
+ // Begining of intro is differents between factions as the speech sequence and timers are differents.
if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- DoCastAOE(SPELL_JAINA_ICEPRISON, true);
+ {
+ me->GetMotionMaster()->MovePoint(0, JainaIntroPosition[2]);
+ _events.ScheduleEvent(EVENT_INTRO_A2_1, 0);
+ }
else
- DoCastAOE(SPELL_SYLVANAS_DARKBINDING, true);
- _events.ScheduleEvent(EVENT_ESCAPE_4, 2000);
+ {
+ me->GetMotionMaster()->MovePoint(0, SylvanasIntroPosition[2]);
+ _events.ScheduleEvent(EVENT_INTRO_H2_1, 0);
+ }
break;
- case EVENT_ESCAPE_4:
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- Talk(SAY_JAINA_ESCAPE_1);
- else
- Talk(SAY_SYLVANAS_ESCAPE_1);
- _events.ScheduleEvent(EVENT_ESCAPE_5, 2000);
+ // A2 Intro Events
+ case EVENT_INTRO_A2_1:
+ Talk(SAY_JAINA_INTRO_3);
+ _events.ScheduleEvent(EVENT_INTRO_A2_2, 7000);
break;
- case EVENT_ESCAPE_5:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- lichking->CombatStop();
- me->GetMotionMaster()->MovePoint(0, JainaShadowThroneDoor);
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- me->RemoveAurasDueToSpell(SPELL_JAINA_ICEBARRIER);
- else
- me->RemoveAurasDueToSpell(SPELL_SYLVANAS_CLOAKOFDARKNESS);
- _events.ScheduleEvent(EVENT_ESCAPE_6, 5000);
+ case EVENT_INTRO_A2_2:
+ Talk(SAY_JAINA_INTRO_4);
+ _events.ScheduleEvent(EVENT_INTRO_A2_3, 10000);
break;
- case EVENT_ESCAPE_6:
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER);
+ case EVENT_INTRO_A2_3:
+ me->CastSpell(me, SPELL_CAST_VISUAL, false);
+ me->CastSpell(me, SPELL_FROSTMOURNE_SOUNDS, true);
+ _instance->HandleGameObject(_instance->GetData64(DATA_FROSTMOURNE), true);
+ _events.ScheduleEvent(EVENT_INTRO_A2_4, 10000);
break;
- case EVENT_ESCAPE_7:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- {
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- lichking->RemoveAurasDueToSpell(SPELL_JAINA_ICEPRISON);
- else
- lichking->RemoveAurasDueToSpell(SPELL_SYLVANAS_DARKBINDING);
- }
- _events.ScheduleEvent(EVENT_ESCAPE_8, 1000);
+ case EVENT_INTRO_A2_4:
+ if (Creature* uther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN))
+ _utherGUID = uther->GetGUID();
+ _events.ScheduleEvent(EVENT_INTRO_A2_5, 2000);
break;
- case EVENT_ESCAPE_8:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- lichking->HandleEmoteCommand(TEXT_EMOTE_ROAR);
- me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[0]);
- _events.ScheduleEvent(EVENT_ESCAPE_9, 3000);
+ case EVENT_INTRO_A2_5:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_A2_1);
+ _events.ScheduleEvent(EVENT_INTRO_A2_6, 3000);
break;
- case EVENT_ESCAPE_9:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- lichking->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[0]);
- _events.ScheduleEvent(EVENT_ESCAPE_10, 1000);
+ case EVENT_INTRO_A2_6:
+ Talk(SAY_JAINA_INTRO_5);
+ _events.ScheduleEvent(EVENT_INTRO_A2_7, 7000);
break;
- case EVENT_ESCAPE_10:
- me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[1]);
- _events.ScheduleEvent(EVENT_ESCAPE_11, 5000);
+ case EVENT_INTRO_A2_7:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_A2_2);
+ _events.ScheduleEvent(EVENT_INTRO_A2_8, 7000);
break;
- case EVENT_ESCAPE_11:
- me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[2]);
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- lichking->GetMotionMaster()->MovePoint(0, LichKingFirstSummon);
- _events.ScheduleEvent(EVENT_ESCAPE_12, 6000);
+ case EVENT_INTRO_A2_8:
+ Talk(SAY_JAINA_INTRO_6);
+ _events.ScheduleEvent(EVENT_INTRO_A2_9, 1200);
break;
- case EVENT_ESCAPE_12:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
+ case EVENT_INTRO_A2_9:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_A2_3);
+ _events.ScheduleEvent(EVENT_INTRO_A2_10, 11000);
+ break;
+ case EVENT_INTRO_A2_10:
+ Talk(SAY_JAINA_INTRO_7);
+ _events.ScheduleEvent(EVENT_INTRO_A2_11, 6000);
+ break;
+ case EVENT_INTRO_A2_11:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_A2_4);
+ _events.ScheduleEvent(EVENT_INTRO_A2_12, 12000);
+ break;
+ case EVENT_INTRO_A2_12:
+ Talk(SAY_JAINA_INTRO_8);
+ _events.ScheduleEvent(EVENT_INTRO_A2_13, 6000);
+ break;
+ case EVENT_INTRO_A2_13:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_A2_5);
+ _events.ScheduleEvent(EVENT_INTRO_A2_14, 13000);
+ break;
+ case EVENT_INTRO_A2_14:
+ Talk(SAY_JAINA_INTRO_9);
+ _events.ScheduleEvent(EVENT_INTRO_A2_15, 12000);
+ break;
+ case EVENT_INTRO_A2_15:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_A2_6);
+ _events.ScheduleEvent(EVENT_INTRO_A2_16, 25000);
+ break;
+ case EVENT_INTRO_A2_16:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_A2_7);
+ _events.ScheduleEvent(EVENT_INTRO_A2_17, 6000);
+ break;
+ case EVENT_INTRO_A2_17:
+ Talk(SAY_JAINA_INTRO_10);
+ _events.ScheduleEvent(EVENT_INTRO_A2_18, 5000);
+ break;
+ case EVENT_INTRO_A2_18:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
{
- lichking->AI()->Talk(SAY_LK_ESCAPE_3);
- lichking->CastSpell(me, SPELL_RAISE_DEAD);
- lichking->Attack(me, true);
+ uther->HandleEmoteCommand(EMOTE_ONESHOT_NO);
+ uther->AI()->Talk(SAY_UTHER_INTRO_A2_8);
}
- _events.ScheduleEvent(EVENT_ESCAPE_13, 4000);
+ _events.ScheduleEvent(EVENT_INTRO_A2_19, 12000);
break;
- case EVENT_ESCAPE_13:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
+ case EVENT_INTRO_A2_19:
+ Talk(SAY_JAINA_INTRO_11);
+ _events.ScheduleEvent(EVENT_INTRO_LK_1, 3000);
+ break;
+ // H2 Intro Events
+ case EVENT_INTRO_H2_1:
+ Talk(SAY_SYLVANAS_INTRO_1);
+ _events.ScheduleEvent(EVENT_INTRO_H2_2, 8000);
+ break;
+ case EVENT_INTRO_H2_2:
+ Talk(SAY_SYLVANAS_INTRO_2);
+ _events.ScheduleEvent(EVENT_INTRO_H2_3, 6000);
+ break;
+ case EVENT_INTRO_H2_3:
+ Talk(SAY_SYLVANAS_INTRO_3);
+ me->CastSpell(me, SPELL_CAST_VISUAL, false);
+ me->CastSpell(me, SPELL_FROSTMOURNE_SOUNDS, true);
+ _instance->HandleGameObject(_instance->GetData64(DATA_FROSTMOURNE), true);
+ _events.ScheduleEvent(EVENT_INTRO_H2_4, 6000);
+ break;
+ case EVENT_INTRO_H2_4:
+ // spawn UTHER during speach 2
+ if (Creature* uther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN))
+ _utherGUID = uther->GetGUID();
+ _events.ScheduleEvent(EVENT_INTRO_H2_5, 2000);
+ break;
+ case EVENT_INTRO_H2_5:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_H2_1);
+ _events.ScheduleEvent(EVENT_INTRO_H2_6, 11000);
+ break;
+ case EVENT_INTRO_H2_6:
+ Talk(SAY_SYLVANAS_INTRO_4);
+ _events.ScheduleEvent(EVENT_INTRO_H2_7, 3000);
+ break;
+ case EVENT_INTRO_H2_7:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_H2_2);
+ _events.ScheduleEvent(EVENT_INTRO_H2_8, 6000);
+ break;
+ case EVENT_INTRO_H2_8:
+ Talk(SAY_SYLVANAS_INTRO_5);
+ _events.ScheduleEvent(EVENT_INTRO_H2_9, 5000);
+ break;
+ case EVENT_INTRO_H2_9:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_H2_3);
+ _events.ScheduleEvent(EVENT_INTRO_H2_10, 19000);
+ break;
+ case EVENT_INTRO_H2_10:
+ Talk(SAY_SYLVANAS_INTRO_6);
+ _events.ScheduleEvent(EVENT_INTRO_H2_11, 1500);
+ break;
+ case EVENT_INTRO_H2_11:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_H2_4);
+ _events.ScheduleEvent(EVENT_INTRO_H2_12, 19500);
+ break;
+ case EVENT_INTRO_H2_12:
+ Talk(SAY_SYLVANAS_INTRO_7);
+ _events.ScheduleEvent(EVENT_INTRO_H2_13, 2000);
+ break;
+ case EVENT_INTRO_H2_13:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
{
- lichking->CastSpell(lichking, SPELL_REMORSELESS_WINTER, true);
- lichking->CastSpell(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR);
- lichking->GetMotionMaster()->MoveIdle();
- lichking->GetMotionMaster()->MoveChase(me);
+ uther->HandleEmoteCommand(EMOTE_ONESHOT_NO);
+ uther->AI()->Talk(SAY_UTHER_INTRO_H2_5);
}
- if (Creature* walltarget = me->SummonCreature(NPC_ICE_WALL, IceWalls[0], TEMPSUMMON_MANUAL_DESPAWN, 720000))
+ _events.ScheduleEvent(EVENT_INTRO_H2_14, 12000);
+ break;
+ case EVENT_INTRO_H2_14:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_H2_6);
+ _events.ScheduleEvent(EVENT_INTRO_H2_15, 8000);
+ break;
+ case EVENT_INTRO_H2_15:
+ Talk(SAY_SYLVANAS_INTRO_8);
+ _events.ScheduleEvent(EVENT_INTRO_LK_1, 2000);
+ break;
+ // Remaining Intro Events common for both faction
+ case EVENT_INTRO_LK_1:
+ // Spawn LK in front of door, and make him move to the sword.
+ if (Creature* lichking = me->SummonCreature(NPC_THE_LICH_KING_INTRO, LichKingIntroPosition[0], TEMPSUMMON_MANUAL_DESPAWN))
{
- _walltargetGUID = walltarget->GetGUID();
- walltarget->CastSpell(walltarget, SPELL_SUMMON_ICE_WALL);
- walltarget->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
- me->Attack(walltarget, false);
+ lichking->SetWalk(true);
+ lichking->GetMotionMaster()->MovePoint(0, LichKingIntroPosition[2]);
+ _lichkingGUID = lichking->GetGUID();
+ _events.ScheduleEvent(EVENT_OPEN_IMPENETRABLE_DOOR, 0);
+ _events.ScheduleEvent(EVENT_CLOSE_IMPENETRABLE_DOOR, 4000);
}
- me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[3]);
- _events.ScheduleEvent(EVENT_ESCAPE_14, 8000);
- break;
- case EVENT_ESCAPE_14:
- if (Creature* walltarget = ObjectAccessor::GetCreature(*me, _walltargetGUID))
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
{
- if (GameObject* icewall = walltarget->FindNearestGameObject(GO_ICE_WALL, 50.00f))
- {
- _icewallGUID = icewall->GetGUID();
- icewall->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
- _instance->HandleGameObject(0, false, icewall);
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- Talk(SAY_JAINA_ESCAPE_2);
- else
- Talk(SAY_SYLVANAS_ESCAPE_2);
- }
+ uther->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_COWER);
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ uther->AI()->Talk(SAY_UTHER_INTRO_A2_9);
+ else
+ uther->AI()->Talk(SAY_UTHER_INTRO_H2_7);
}
- _events.ScheduleEvent(EVENT_ESCAPE_15, 1000);
+ _events.ScheduleEvent(EVENT_INTRO_LK_2, 10000);
break;
- case EVENT_ESCAPE_15:
+ case EVENT_INTRO_LK_2:
if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
+ lichking->AI()->Talk(SAY_LK_INTRO_1);
+ _events.ScheduleEvent(EVENT_INTRO_LK_3, 1000);
+ break;
+ case EVENT_INTRO_LK_3:
+ // The Lich King banishes Uther to the abyss.
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
{
- lichking->GetMotionMaster()->MoveIdle();
- lichking->GetMotionMaster()->MoveChase(me);
- lichking->SetReactState(REACT_PASSIVE);
+ uther->CastSpell(uther, SPELL_UTHER_DESPAWN, true);
+ uther->DespawnOrUnsummon(5000);
+ _utherGUID = 0;
}
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- DoCast(me, SPELL_JAINA_DESTROY_ICE_WALL, true);
- else
- DoCast(me, SPELL_SYLVANAS_DESTROY_ICE_WALL, true);
+ _events.ScheduleEvent(EVENT_INTRO_LK_4, 9000);
break;
- case EVENT_ESCAPE_17:// ICEWALL BROKEN
- me->GetMotionMaster()->MoveIdle();
+ case EVENT_INTRO_LK_4:
+ // He steps forward and removes the runeblade from the heap of skulls.
if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
{
- lichking->StopMoving();
- lichking->AI()->Talk(SAY_LK_ESCAPE_3);
- lichking->CastSpell(me, SPELL_RAISE_DEAD);
+ if (GameObject* frostmourne = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_FROSTMOURNE)))
+ frostmourne->SetPhaseMask(2, true);
+ lichking->CastSpell(lichking, SPELL_TAKE_FROSTMOURNE, true);
+ lichking->CastSpell(lichking, SPELL_FROSTMOURNE_VISUAL, true);
}
-
- DestroyIceWall();
-
- if (_icewall && _icewall < 4)
- me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[_icewall + 3]);
- _events.ScheduleEvent(EVENT_ESCAPE_18, 2000);
+ _events.ScheduleEvent(EVENT_INTRO_LK_5, 8000);
break;
- case EVENT_ESCAPE_18:
+ case EVENT_INTRO_LK_5:
if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
+ lichking->AI()->Talk(SAY_LK_INTRO_2);
+ _events.ScheduleEvent(EVENT_INTRO_LK_6, 10000);
+ break;
+ case EVENT_INTRO_LK_6:
+ // summon Falric and Marwyn. then go back to the door
+ if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC)))
{
- lichking->GetMotionMaster()->MoveIdle();
- lichking->GetMotionMaster()->MoveChase(me);
+ falric->CastSpell(falric, SPELL_BOSS_SPAWN_AURA, true);
+ falric->SetVisible(true);
}
- _events.ScheduleEvent(EVENT_ESCAPE_19, 6000);
- break;
- case EVENT_ESCAPE_19:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
+ if (Creature* marwyn = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MARWYN)))
{
- if (_icewall && _icewall < 4)
- lichking->CastSpell(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR);
- lichking->GetMotionMaster()->MoveIdle();
- lichking->GetMotionMaster()->MoveChase(me);
- lichking->SetReactState(REACT_PASSIVE);
- lichking->Attack(me, true);
+ marwyn->CastSpell(marwyn, SPELL_BOSS_SPAWN_AURA, true);
+ marwyn->SetVisible(true);
}
- if (_icewall < 4)
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
{
- if (Creature* walltarget = me->SummonCreature(NPC_ICE_WALL, IceWalls[_icewall], TEMPSUMMON_MANUAL_DESPAWN, 720000))
- {
- _walltargetGUID = walltarget->GetGUID();
- walltarget->CastSpell(walltarget, SPELL_SUMMON_ICE_WALL);
- walltarget->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
- me->Attack(walltarget, false);
- }
+ lichking->AI()->Talk(SAY_LK_INTRO_3);
+ lichking->SetWalk(true);
+ lichking->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos);
}
- _events.ScheduleEvent(EVENT_ESCAPE_20, 3000);
+ _events.ScheduleEvent(EVENT_INTRO_LK_7, 10000);
+ _events.ScheduleEvent(EVENT_OPEN_IMPENETRABLE_DOOR, 5000);
break;
- case EVENT_ESCAPE_20:
- if (Creature* walltarget = ObjectAccessor::GetCreature(*me, _walltargetGUID))
+ case EVENT_INTRO_LK_7:
+ if (Creature* marwyn = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MARWYN)))
{
- if (GameObject* icewall = walltarget->FindNearestGameObject(GO_ICE_WALL, 50.00f))
- {
- _icewallGUID = icewall->GetGUID();
- _instance->HandleGameObject(0, false, icewall);
- icewall->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- {
- if (_icewall == 1)
- Talk(SAY_JAINA_ESCAPE_3);
- else if (_icewall == 2)
- Talk(SAY_JAINA_ESCAPE_4);
- else if (_icewall == 3)
- Talk(SAY_JAINA_ESCAPE_5);
- }
- else if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE)
- {
- if (_icewall == 1)
- Talk(SAY_SYLVANAS_ESCAPE_3);
- else if (_icewall == 2)
- Talk(SAY_SYLVANAS_ESCAPE_4);
- else if (_icewall == 3)
- Talk(SAY_SYLVANAS_ESCAPE_5);
- }
- }
+ marwyn->AI()->Talk(SAY_MARWYN_INTRO_1);
+ marwyn->SetWalk(true);
+ marwyn->GetMotionMaster()->MovePoint(0, MarwynPosition[1]);
}
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
+ _events.ScheduleEvent(EVENT_INTRO_LK_8, 1000);
+ break;
+ case EVENT_INTRO_LK_8:
+ if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC)))
{
- if (_icewall && _icewall < 3)
- lichking->CastSpell(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR);
- else
- lichking->CastSpell(lichking, SPELL_SUMMON_LUMBERING_ABOMINATION);
+ falric->AI()->Talk(SAY_FALRIC_INTRO_1);
+ falric->SetWalk(true);
+ falric->GetMotionMaster()->MovePoint(0, FalricPosition[1]);
}
- if (_icewall == 3)
- _events.ScheduleEvent(EVENT_ESCAPE_21, 16000); // last wall, really far
- else
- _events.ScheduleEvent(EVENT_ESCAPE_21, 9000);
+ _events.ScheduleEvent(EVENT_INTRO_LK_9, 5000);
+ break;
+ case EVENT_INTRO_LK_9:
+ if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC)))
+ falric->AI()->Talk(SAY_FALRIC_INTRO_2);
+ _instance->ProcessEvent(0, EVENT_SPAWN_WAVES);
+ _events.ScheduleEvent(EVENT_INTRO_LK_10, 4000);
break;
- case EVENT_ESCAPE_21:
+ case EVENT_INTRO_LK_10:
if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- DoCast(me, SPELL_JAINA_DESTROY_ICE_WALL, true);
+ Talk(SAY_JAINA_INTRO_END);
else
- DoCast(me, SPELL_SYLVANAS_DESTROY_ICE_WALL, true);
-
+ Talk(SAY_SYLVANAS_INTRO_END);
+ me->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos);
+ /// @todo: needs some improvements
+ if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN)))
+ korelnOrLoralen->GetMotionMaster()->MovePoint(1, KorelnOrLoralenPos[2]);
+ _events.ScheduleEvent(EVENT_INTRO_LK_11, 5000);
+ break;
+ case EVENT_INTRO_LK_11:
if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
{
- if (_icewall == 1)
- lichking->CastSpell(lichking, SPELL_SUMMON_LUMBERING_ABOMINATION);
- else if (_icewall > 1 && _icewall < 4)
- {
- lichking->CastSpell(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR);
- _events.ScheduleEvent(EVENT_ESCAPE_22, 1000);
- }
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ lichking->AI()->Talk(SAY_LK_JAINA_INTRO_END);
+ else
+ lichking->AI()->Talk(SAY_LK_SYLVANAS_INTRO_END);
}
+ _events.ScheduleEvent(EVENT_INTRO_END, 5000);
break;
- case EVENT_ESCAPE_22:
+ case EVENT_INTRO_END:
+ _instance->SetData(DATA_INTRO_EVENT, DONE);
+ _events.ScheduleEvent(EVENT_KORELN_LORALEN_DEATH, 8000);
if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
{
- if (_icewall >= 2 && _icewall < 4)
- lichking->CastSpell(lichking, SPELL_SUMMON_LUMBERING_ABOMINATION);
+ lichking->DespawnOrUnsummon(5000);
+ _lichkingGUID = 0;
}
+ me->DespawnOrUnsummon(10000);
+ _events.ScheduleEvent(EVENT_CLOSE_IMPENETRABLE_DOOR, 7000);
break;
- case EVENT_ESCAPE_23: // FINAL PART
- DestroyIceWall();
-
+ case EVENT_SKIP_INTRO:
if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- Talk(SAY_JAINA_ESCAPE_6);
+ me->GetMotionMaster()->MovePoint(0, JainaIntroPosition[2]);
else
- Talk(SAY_SYLVANAS_ESCAPE_6);
+ me->GetMotionMaster()->MovePoint(0, SylvanasIntroPosition[2]);
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
+ if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN)))
+ korelnOrLoralen->GetMotionMaster()->MovePoint(0, KorelnOrLoralenPos[1]);
+
+ if (Creature* lichking = me->SummonCreature(NPC_THE_LICH_KING_INTRO, LichKingIntroPosition[0], TEMPSUMMON_MANUAL_DESPAWN))
{
- lichking->GetMotionMaster()->MovePoint(0, LichKingFinalPos);
- lichking->AI()->Talk(SAY_LK_ESCAPE_11);
+ lichking->SetWalk(true);
+ lichking->GetMotionMaster()->MovePoint(0, LichKingIntroPosition[2]);
+ lichking->SetReactState(REACT_PASSIVE);
+ _lichkingGUID = lichking->GetGUID();
+ _events.ScheduleEvent(EVENT_OPEN_IMPENETRABLE_DOOR, 0);
+ _events.ScheduleEvent(EVENT_CLOSE_IMPENETRABLE_DOOR, 4000);
}
- me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[8]);
- _events.ScheduleEvent(EVENT_ESCAPE_24, 10000);
+ _events.ScheduleEvent(EVENT_INTRO_LK_4, 15000);
break;
- case EVENT_ESCAPE_24:
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- Talk(SAY_JAINA_ESCAPE_8);
- else
- Talk(SAY_SYLVANAS_ESCAPE_8);
- _events.ScheduleEvent(EVENT_ESCAPE_25, 5000);
+ case EVENT_OPEN_IMPENETRABLE_DOOR:
+ _instance->HandleGameObject(_instance->GetData64(DATA_IMPENETRABLE_DOOR), true);
break;
- case EVENT_ESCAPE_25:
- if (GameObject* cave = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_CAVE_IN)))
- cave->SetGoState(GO_STATE_READY);
- _events.ScheduleEvent(EVENT_ESCAPE_26, 4000);
+ case EVENT_CLOSE_IMPENETRABLE_DOOR:
+ _instance->HandleGameObject(_instance->GetData64(DATA_IMPENETRABLE_DOOR), false);
break;
- case EVENT_ESCAPE_26:
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- Talk(SAY_JAINA_ESCAPE_10);
+ case EVENT_KORELN_LORALEN_DEATH:
+ if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN)))
+ korelnOrLoralen->CastSpell(korelnOrLoralen, SPELL_FEIGN_DEATH);
+ break;
+ default:
+ break;
+ }
+ }
+
+ private:
+ InstanceScript* _instance;
+ EventMap _events;
+ uint64 _utherGUID;
+ uint64 _lichkingGUID;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfReflectionAI<npc_jaina_or_sylvanas_intro_horAI>(creature);
+ }
+};
+
+class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
+{
+ public:
+ npc_jaina_or_sylvanas_escape_hor() : CreatureScript("npc_jaina_or_sylvanas_escape_hor") { }
+
+ bool OnGossipHello(Player* player, Creature* creature) override
+ {
+ // override default gossip
+ if (InstanceScript* instance = creature->GetInstanceScript())
+ if (instance->GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE)
+ {
+ player->PrepareGossipMenu(creature, creature->GetEntry() == NPC_JAINA_ESCAPE ? GOSSIP_MENU_JAINA_FINAL : GOSSIP_MENU_SYLVANAS_FINAL, true);
+ player->SendPreparedGossip(creature);
+ return true;
+ }
+
+ // load default gossip
+ return false;
+ }
+
+ struct npc_jaina_or_sylvanas_escape_horAI : public ScriptedAI
+ {
+ npc_jaina_or_sylvanas_escape_horAI(Creature* creature) : ScriptedAI(creature),
+ _instance(creature->GetInstanceScript()), _icewall(0), _prefight(false), _invincibility(true) { }
+
+ void Reset() override
+ {
+ _events.Reset();
+ _icewall = 0;
+ _events.ScheduleEvent(EVENT_ESCAPE, 1000);
+ _instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_NOT_RETREATING_EVENT);
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ lichking->AI()->EnterEvadeMode(); // event failed
+ }
+
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
+ {
+ if (damage >= me->GetHealth() && _invincibility)
+ damage = me->GetHealth() - 1;
+ }
+
+ void DoAction(int32 actionId) override
+ {
+ switch (actionId)
+ {
+ case ACTION_START_PREFIGHT:
+ if (_prefight)
+ return;
+ _prefight = true;
+ _events.ScheduleEvent(EVENT_ESCAPE_1, 1000);
+ break;
+ case ACTION_WALL_BROKEN:
+ ++_icewall;
+ if (_icewall < 4)
+ _events.ScheduleEvent(EVENT_ESCAPE_13, 3000);
else
- Talk(SAY_SYLVANAS_ESCAPE_9);
- _events.ScheduleEvent(EVENT_ESCAPE_27, 4000);
+ _events.ScheduleEvent(EVENT_ESCAPE_15, 3000);
break;
- case EVENT_ESCAPE_27:
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- me->SummonGameObject(IsHeroic() ? GO_CAPTAIN_CHEST_ALLIANCE_HEROIC : GO_CAPTAIN_CHEST_ALLIANCE_NORMAL, ChestPos.GetPositionX(), ChestPos.GetPositionY(), ChestPos.GetPositionZ(), ChestPos.GetOrientation(), 0, 0, 0, 0, 720000);
+ case ACTION_GUNSHIP_ARRIVAL:
+ _events.ScheduleEvent(EVENT_ESCAPE_16, 5000);
+ break;
+ case ACTION_GUNSHIP_ARRIVAL_2:
+ _events.ScheduleEvent(EVENT_ESCAPE_17, 5000);
+ break;
+ default:
+ break;
+ }
+ }
+
+ void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ player->PlayerTalkClass->ClearMenus();
+
+ switch (gossipListId)
+ {
+ case 0:
+ player->PlayerTalkClass->SendCloseGossip();
+ me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ _events.ScheduleEvent(EVENT_ESCAPE_6, 0);
+ break;
+ default:
+ break;
+ }
+ }
+
+ void DestroyIceWall()
+ {
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ me->RemoveAurasDueToSpell(SPELL_JAINA_DESTROY_ICE_WALL);
+ else
+ me->RemoveAurasDueToSpell(SPELL_SYLVANAS_DESTROY_ICE_WALL);
+
+ _instance->HandleGameObject(_instance->GetData64(DATA_ICEWALL), true);
+ me->m_Events.AddEvent(new GameObjectDeleteDelayEvent(me, _instance->GetData64(DATA_ICEWALL)), me->m_Events.CalculateTime(5000));
+
+ if (Creature* wallTarget = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ICEWALL_TARGET)))
+ wallTarget->DespawnOrUnsummon();
+ }
+
+ void SummonIceWall()
+ {
+ if (_icewall < 4)
+ {
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ {
+ lichking->StopMoving();
+ if (Creature* wallTarget = me->SummonCreature(NPC_ICE_WALL_TARGET, IceWallTargetPosition[_icewall], TEMPSUMMON_MANUAL_DESPAWN, 720000))
+ lichking->CastSpell(wallTarget, SPELL_SUMMON_ICE_WALL);
+
+ lichking->AI()->SetData(DATA_ICEWALL, _icewall);
+ }
+ }
+ }
+
+ void AttackIceWall()
+ {
+ if (_icewall < 4)
+ Talk(SAY_JAINA_SYLVANAS_ESCAPE_2 + _icewall);
+
+ if (Creature* wallTarget = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ICEWALL_TARGET)))
+ me->SetFacingToObject(wallTarget);
+
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ DoCast(me, SPELL_JAINA_DESTROY_ICE_WALL, true);
+ else
+ DoCast(me, SPELL_SYLVANAS_DESTROY_ICE_WALL, true);
+ }
+
+ void MovementInform(uint32 type, uint32 pointId) override
+ {
+ if (type != POINT_MOTION_TYPE)
+ return;
+
+ switch (pointId)
+ {
+ case POINT_SHADOW_THRONE_DOOR:
+ if (me->GetEntry() == NPC_JAINA_ESCAPE)
+ me->RemoveAurasDueToSpell(SPELL_JAINA_ICE_BARRIER);
else
- me->SummonGameObject(IsHeroic() ? GO_CAPTAIN_CHEST_HORDE_HEROIC : GO_CAPTAIN_CHEST_HORDE_NORMAL, ChestPos.GetPositionX(), ChestPos.GetPositionY(), ChestPos.GetPositionZ(), ChestPos.GetOrientation(), 0, 0, 0, 0, 720000);
- me->SummonGameObject(GO_PORTAL, FinalPortalPos.GetPositionX(), FinalPortalPos.GetPositionY(), FinalPortalPos.GetPositionZ(), FinalPortalPos.GetOrientation(), 0, 0, 0, 0, 720000);
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- lichking->DespawnOrUnsummon(1);
+ me->RemoveAurasDueToSpell(SPELL_SYLVANAS_CLOAK_OF_DARKNESS);
+ me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->SetHealth(JAINA_SYLVANAS_MAX_HEALTH);
+ me->SetFacingTo(SylvanasShadowThroneDoorPosition.GetOrientation());
+ break;
+ case POINT_ATTACK_ICEWALL:
+ AttackIceWall();
+ break;
+ case POINT_TRAP:
+ Talk(SAY_JAINA_SYLVANAS_ESCAPE_8);
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ me->SetFacingToObject(lichking);
break;
+ default:
+ break;
+ }
+ }
+
+ void DeleteAllFromThreatList(Unit* target, uint64 except)
+ {
+ ThreatContainer::StorageType threatlist = target->getThreatManager().getThreatList();
+ for (auto i : threatlist)
+ {
+ if (i->getUnitGuid() == except)
+ continue;
+
+ i->removeReference();
+ }
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ _events.Update(diff);
+
+ while (uint32 event = _events.ExecuteEvent())
+ {
+ switch (event)
+ {
+ case EVENT_ESCAPE:
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ DoCast(me, SPELL_JAINA_ICE_BARRIER);
+ else
+ DoCast(me, SPELL_SYLVANAS_CLOAK_OF_DARKNESS);
+
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ {
+ AttackStart(lichking);
+ lichking->AI()->AttackStart(me);
+ me->CastSpell(lichking, SPELL_TAUNT_ARTHAS, true);
+ }
+ me->SetHealth(JAINA_SYLVANAS_MAX_HEALTH);
+ me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
+ break;
+ case EVENT_ESCAPE_1:
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ {
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ lichking->AI()->Talk(SAY_LK_ESCAPE_1);
+ else
+ lichking->AI()->Talk(SAY_LK_ESCAPE_2);
+ _events.ScheduleEvent(EVENT_ESCAPE_2, 8000);
+ }
+ break;
+ case EVENT_ESCAPE_2:
+ me->AttackStop();
+ me->StopMoving();
+ me->SetReactState(REACT_PASSIVE);
+
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ DoCast(me, SPELL_JAINA_ICE_PRISON, false);
+ else
+ DoCast(me, SPELL_SYLVANAS_BLINDING_RETREAT, true);
+
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ {
+ lichking->SetReactState(REACT_PASSIVE);
+ lichking->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED);
+ }
+
+ _events.ScheduleEvent(EVENT_ESCAPE_3, 1500);
+ break;
+ case EVENT_ESCAPE_3:
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE)
+ DoCastAOE(SPELL_SYLVANAS_DARK_BINDING, true);
+ _events.ScheduleEvent(EVENT_ESCAPE_4, 1000);
+ break;
+ case EVENT_ESCAPE_4:
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ DoCast(me, SPELL_CREDIT_FINDING_JAINA);
+ else
+ DoCast(me, SPELL_CREDIT_FINDING_SYLVANAS);
+ Talk(SAY_JAINA_SYLVANAS_ESCAPE_1);
+
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ {
+ lichking->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ lichking->RemoveAllAttackers();
+
+ DeleteAllFromThreatList(lichking, me->GetGUID());
+ }
+
+ _events.ScheduleEvent(EVENT_ESCAPE_5, 2000);
+ break;
+ case EVENT_ESCAPE_5:
+ me->GetMotionMaster()->MovePoint(POINT_SHADOW_THRONE_DOOR, SylvanasShadowThroneDoorPosition);
+ break;
+ case EVENT_ESCAPE_6:
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ {
+ lichking->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_PACIFIED);
+
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ {
+ lichking->CastSpell(lichking, SPELL_STUN_BREAK_JAINA);
+ lichking->RemoveAurasDueToSpell(SPELL_JAINA_ICE_PRISON);
+ }
+ else
+ {
+ lichking->CastSpell(lichking, SPELL_STUN_BREAK_SYLVANAS);
+ lichking->RemoveAurasDueToSpell(SPELL_SYLVANAS_DARK_BINDING);
+ }
+ }
+ _invincibility = false;
+ _instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_NOT_RETREATING_EVENT);
+ _events.ScheduleEvent(EVENT_ESCAPE_7, 1000);
+ break;
+ case EVENT_ESCAPE_7:
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ lichking->HandleEmoteCommand(TEXT_EMOTE_ROAR);
+ me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[0]);
+ _events.ScheduleEvent(EVENT_ESCAPE_8, 3000);
+ break;
+ case EVENT_ESCAPE_8:
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ lichking->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[0]);
+ _events.ScheduleEvent(EVENT_ESCAPE_9, 1000);
+ break;
+ case EVENT_ESCAPE_9:
+ me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[1]);
+ _events.ScheduleEvent(EVENT_ESCAPE_10, 5000);
+ break;
+ case EVENT_ESCAPE_10:
+ me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[2]);
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ lichking->GetMotionMaster()->MovePoint(1, LichKingFirstSummon);
+ _events.ScheduleEvent(EVENT_ESCAPE_11, 6000);
+ break;
+ case EVENT_ESCAPE_11:
+ SummonIceWall();
+ _events.ScheduleEvent(EVENT_ESCAPE_12, 4000);
+ break;
+ case EVENT_ESCAPE_12:
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ lichking->CastSpell(lichking, SPELL_PAIN_AND_SUFFERING, true);
+
+ me->GetMotionMaster()->MovePoint(POINT_ATTACK_ICEWALL, NpcJainaOrSylvanasEscapeRoute[3]);
+ break;
+ case EVENT_ESCAPE_13: // ICEWALL BROKEN
+ DestroyIceWall();
+
+ if (_icewall && _icewall < 4)
+ me->GetMotionMaster()->MovePoint(POINT_ATTACK_ICEWALL, NpcJainaOrSylvanasEscapeRoute[_icewall + 3]);
+ _events.ScheduleEvent(EVENT_ESCAPE_14, 8000);
+ break;
+ case EVENT_ESCAPE_14:
+ SummonIceWall();
+ break;
+ case EVENT_ESCAPE_15: // FINAL PART
+ DestroyIceWall();
+
+ Talk(SAY_JAINA_SYLVANAS_ESCAPE_6);
+
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ {
+ lichking->GetMotionMaster()->MovePoint(2, LichKingFinalPos);
+ lichking->RemoveAurasDueToSpell(SPELL_REMORSELESS_WINTER);
+ }
+ me->GetMotionMaster()->MovePoint(POINT_TRAP, NpcJainaOrSylvanasEscapeRoute[7]);
+ break;
+ case EVENT_ESCAPE_16:
+ me->RemoveAurasDueToSpell(SPELL_HARVEST_SOUL);
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ Talk(SAY_JAINA_ESCAPE_9);
+ if (Transport* gunship = ObjectAccessor::GetTransport(*me, _instance->GetData64(DATA_GUNSHIP)))
+ gunship->EnableMovement(true);
+ _instance->SetBossState(DATA_THE_LICH_KING_ESCAPE, DONE);
+ break;
+ case EVENT_ESCAPE_17:
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ Talk(SAY_JAINA_ESCAPE_10);
+ else
+ Talk(SAY_SYLVANAS_ESCAPE_9);
+ DoCast(me, SPELL_CREDIT_ESCAPING_ARTHAS);
+ me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
+ break;
+ default:
+ break;
}
}
+
+ DoMeleeAttackIfReady();
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetHallsOfReflectionAI<npc_jaina_or_sylvanas_escape_horAI>(creature);
- }
+ private:
+ InstanceScript* _instance;
+ EventMap _events;
+ uint32 _icewall; // icewall number
+ bool _prefight;
+ bool _invincibility;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfReflectionAI<npc_jaina_or_sylvanas_escape_horAI>(creature);
+ }
+};
+
+class npc_the_lich_king_escape_hor : public CreatureScript
+{
+ public:
+ npc_the_lich_king_escape_hor() : CreatureScript("npc_the_lich_king_escape_hor") { }
+
+ struct npc_the_lich_king_escape_horAI : public ScriptedAI
+ {
+ npc_the_lich_king_escape_horAI(Creature* creature) : ScriptedAI(creature)
+ {
+ _instance = me->GetInstanceScript();
+ _instance->SetBossState(DATA_THE_LICH_KING_ESCAPE, NOT_STARTED);
+ _summonsCount = 0;
+ _icewall = 0;
+ _despawn = false;
+ }
+
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
+ {
+ if (damage >= me->GetHealth())
+ damage = me->GetHealth() - 1;
+ }
+
+ void MovementInform(uint32 type, uint32 pointId) override
+ {
+ if (type == POINT_MOTION_TYPE)
+ {
+ switch (pointId)
+ {
+ case 1:
+ if (Creature* target = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER)))
+ me->GetMotionMaster()->MoveChase(target);
+ break;
+ case 2:
+ Talk(SAY_LK_ESCAPE_HARVEST_SOUL);
+
+ if (Creature* target = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER)))
+ DoCast(target, SPELL_HARVEST_SOUL);
+
+ if (Transport* gunship = ObjectAccessor::GetTransport(*me, _instance->GetData64(DATA_GUNSHIP)))
+ gunship->EnableMovement(true);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ void JustSummoned(Creature* /*summon*/) override
+ {
+ ++_summonsCount;
+ }
+
+ void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) override
+ {
+ // should never happen
+ if (!_summonsCount)
+ return;
+
+ --_summonsCount;
+
+ // All summons dead and no summon events scheduled
+ if (!_summonsCount && _events.Empty())
+ {
+ if (Creature* jainaOrSylvanas = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER)))
+ jainaOrSylvanas->AI()->DoAction(ACTION_WALL_BROKEN);
+ }
+ }
+
+ void KilledUnit(Unit* who) override
+ {
+ if (who->GetTypeId() == TYPEID_PLAYER)
+ DoPlaySoundToSet(me, RAND(SOUND_LK_SLAY_1, SOUND_LK_SLAY_2));
+ }
+
+ void SetData(uint32 type, uint32 data) override
+ {
+ if (type != DATA_ICEWALL)
+ return;
+
+ _icewall = data;
+
+ switch (_icewall)
+ {
+ case 0: // 6 Ghouls, 1 Witch Doctor
+ DoZoneInCombat();
+ _events.ScheduleEvent(EVENT_REMORSELESS_WINTER, 0);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 8000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 14000);
+ Talk(SAY_LK_ESCAPE_ICEWALL_SUMMONED_1);
+ break;
+ case 1: // 6 Ghouls, 2 Witch Doctor, 1 Lumbering Abomination
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 8000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 13000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 16000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 18000);
+ Talk(SAY_LK_ESCAPE_ICEWALL_SUMMONED_2);
+ break;
+ case 2: // 6 Ghouls, 2 Witch Doctor, 2 Lumbering Abomination
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 9000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 14000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 17000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 19000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 39000);
+ Talk(SAY_LK_ESCAPE_ICEWALL_SUMMONED_3);
+ break;
+ case 3: // 12 Ghouls, 4 Witch Doctor, 3 Lumbering Abomination
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 9000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 17000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 19000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 40000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 46000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 55000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 62000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 66000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 14000);
+ Talk(SAY_LK_ESCAPE_ICEWALL_SUMMONED_4);
+ break;
+ default:
+ break;
+ }
+ }
+
+ void EnterEvadeMode() override
+ {
+ if (_despawn)
+ return;
+
+ _instance->SetBossState(DATA_THE_LICH_KING_ESCAPE, FAIL);
+ me->StopMoving();
+ DoPlaySoundToSet(me, SOUND_LK_FURY_OF_FROSTMOURNE);
+ DoCastAOE(SPELL_FURY_OF_FROSTMOURNE);
+ me->DespawnOrUnsummon(12000);
+ _despawn = true;
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!SelectVictim())
+ return;
+
+ _events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 event = _events.ExecuteEvent())
+ {
+ switch (event)
+ {
+ case EVENT_REMORSELESS_WINTER:
+ me->StopMoving();
+ Talk(SAY_LK_ESCAPE_WINTER);
+ DoCast(me, SPELL_REMORSELESS_WINTER);
+ break;
+ case EVENT_ESCAPE_SUMMON_GHOULS:
+ me->StopMoving();
+ Talk(SAY_LK_ESCAPE_GHOULS);
+ DoCast(me, SPELL_RAISE_DEAD);
+ break;
+ case EVENT_ESCAPE_SUMMON_WITCH_DOCTOR:
+ DoCast(me, SPELL_SUMMON_RISEN_WITCH_DOCTOR);
+ break;
+ case EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION:
+ Talk(SAY_LK_ESCAPE_ABOMINATION);
+ DoCast(me, SPELL_SUMMON_LUMBERING_ABOMINATION);
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
+ }
+
+ private:
+ bool SelectVictim()
+ {
+ if (!me->IsInCombat())
+ return false;
+
+ if (!me->HasReactState(REACT_PASSIVE))
+ {
+ if (Unit* victim = me->SelectVictim())
+ AttackStart(victim);
+ return me->GetVictim();
+ }
+ else if (me->getThreatManager().getThreatList().size() < 2 && me->HasAura(SPELL_REMORSELESS_WINTER))
+ {
+ EnterEvadeMode();
+ return false;
+ }
+
+ return true;
+ }
+
+ InstanceScript* _instance;
+ EventMap _events;
+ uint8 _icewall;
+ uint32 _summonsCount;
+ bool _despawn;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfReflectionAI<npc_the_lich_king_escape_horAI>(creature);
+ }
};
enum TrashSpells
@@ -1140,7 +1374,7 @@ enum TrashSpells
SPELL_SHOOT = 72208,
SPELL_CURSED_ARROW = 72222,
SPELL_FROST_TRAP = 72215,
- SPELL_ICE_SHOT = 72268,
+ SPELL_ICE_SHOT = 72268
};
enum TrashEvents
@@ -1175,19 +1409,16 @@ enum TrashEvents
EVENT_SHOOT,
EVENT_CURSED_ARROW,
EVENT_FROST_TRAP,
- EVENT_ICE_SHOT,
+ EVENT_ICE_SHOT
};
struct npc_gauntlet_trash : public ScriptedAI
{
- npc_gauntlet_trash(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript())
- {
- InternalWaveId = 0;
- }
+ npc_gauntlet_trash(Creature* creature) : ScriptedAI(creature),
+ _instance(creature->GetInstanceScript()), InternalWaveId(0) { }
void Reset() override
{
- InternalWaveId = 0;
me->CastSpell(me, SPELL_WELL_OF_SOULS, true);
_events.Reset();
}
@@ -1222,352 +1453,362 @@ protected:
class npc_ghostly_priest : public CreatureScript
{
-public:
- npc_ghostly_priest() : CreatureScript("npc_ghostly_priest") { }
-
- struct npc_ghostly_priestAI : public npc_gauntlet_trash
- {
- npc_ghostly_priestAI(Creature* creature) : npc_gauntlet_trash(creature) { }
+ public:
+ npc_ghostly_priest() : CreatureScript("npc_ghostly_priest") { }
- void EnterCombat(Unit* /*who*/) override
+ struct npc_ghostly_priestAI : public npc_gauntlet_trash
{
- _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 8000); /// @todo adjust timers
- _events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 12000);
- _events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10000);
- _events.ScheduleEvent(EVENT_DARK_MENDING, 20000);
- }
+ npc_ghostly_priestAI(Creature* creature) : npc_gauntlet_trash(creature) { }
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
-
- _events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- switch (_events.ExecuteEvent())
- {
- case EVENT_SHADOW_WORD_PAIN:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_SHADOW_WORD_PAIN);
- _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 8000);
- break;
- case EVENT_CIRCLE_OF_DESTRUCTION:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_CIRCLE_OF_DESTRUCTION);
- _events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 12000);
- break;
- case EVENT_COWER_IN_FEAR:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_COWER_IN_FEAR);
- _events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10000);
- break;
- case EVENT_DARK_MENDING:
- // find an ally with missing HP
- if (Unit* target = DoSelectLowestHpFriendly(40, DUNGEON_MODE(30000, 50000)))
- {
- DoCast(target, SPELL_DARK_MENDING);
- _events.ScheduleEvent(EVENT_DARK_MENDING, 20000);
- }
- else
- {
- // no friendly unit with missing hp. re-check in just 5 sec.
- _events.ScheduleEvent(EVENT_DARK_MENDING, 5000);
- }
- break;
+ void EnterCombat(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(6000, 15000));
+ _events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 12000);
+ _events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10000);
+ _events.ScheduleEvent(EVENT_DARK_MENDING, 20000);
}
- DoMeleeAttackIfReady();
- }
- };
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_ghostly_priestAI>(creature);
- }
-};
+ _events.Update(diff);
-class npc_phantom_mage : public CreatureScript
-{
-public:
- npc_phantom_mage() : CreatureScript("npc_phantom_mage") { }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- struct npc_phantom_mageAI : public npc_gauntlet_trash
- {
- npc_phantom_mageAI(Creature* creature) : npc_gauntlet_trash(creature) { }
+ switch (_events.ExecuteEvent())
+ {
+ case EVENT_SHADOW_WORD_PAIN:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true))
+ DoCast(target, SPELL_SHADOW_WORD_PAIN);
+ _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(6000, 15000));
+ break;
+ case EVENT_CIRCLE_OF_DESTRUCTION:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 10.0f, true))
+ DoCast(target, SPELL_CIRCLE_OF_DESTRUCTION);
+ _events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 12000);
+ break;
+ case EVENT_COWER_IN_FEAR:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 20.0f, true))
+ DoCast(target, SPELL_COWER_IN_FEAR);
+ _events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10000);
+ break;
+ case EVENT_DARK_MENDING:
+ // find an ally with missing HP
+ if (Unit* target = DoSelectLowestHpFriendly(40, DUNGEON_MODE(30000, 50000)))
+ {
+ DoCast(target, SPELL_DARK_MENDING);
+ _events.ScheduleEvent(EVENT_DARK_MENDING, 20000);
+ }
+ else
+ {
+ // no friendly unit with missing hp. re-check in just 5 sec.
+ _events.ScheduleEvent(EVENT_DARK_MENDING, 5000);
+ }
+ break;
+ default:
+ break;
+ }
+
+ DoMeleeAttackIfReady();
+ }
+ };
- void EnterEvadeMode() override
+ CreatureAI* GetAI(Creature* creature) const override
{
- if (!me->HasAura(AURA_HALLUCINATION))
- npc_gauntlet_trash::EnterEvadeMode();
+ return GetHallsOfReflectionAI<npc_ghostly_priestAI>(creature);
}
+};
- void EnterCombat(Unit* /*who*/) override
+class npc_phantom_mage : public CreatureScript
+{
+ public:
+ npc_phantom_mage() : CreatureScript("npc_phantom_mage") { }
+
+ struct npc_phantom_mageAI : public npc_gauntlet_trash
{
- _events.ScheduleEvent(EVENT_FIREBALL, 3000); /// @todo adjust timers
- _events.ScheduleEvent(EVENT_FLAMESTRIKE, 6000);
- _events.ScheduleEvent(EVENT_FROSTBOLT, 9000);
- _events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 12000);
- _events.ScheduleEvent(EVENT_HALLUCINATION, 40000);
- }
+ npc_phantom_mageAI(Creature* creature) : npc_gauntlet_trash(creature) { }
+
+ void EnterEvadeMode() override
+ {
+ if (!me->HasAura(AURA_HALLUCINATION))
+ npc_gauntlet_trash::EnterEvadeMode();
+ }
- void UpdateAI(uint32 diff) override
+ void EnterCombat(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_FIREBALL, 3000);
+ _events.ScheduleEvent(EVENT_FLAMESTRIKE, 6000);
+ _events.ScheduleEvent(EVENT_FROSTBOLT, 9000);
+ _events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 12000);
+ _events.ScheduleEvent(EVENT_HALLUCINATION, 40000);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ _events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ switch (_events.ExecuteEvent())
+ {
+ case EVENT_FIREBALL:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true))
+ DoCast(target, SPELL_FIREBALL);
+ _events.ScheduleEvent(EVENT_FIREBALL, 15000);
+ break;
+ case EVENT_FLAMESTRIKE:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true))
+ DoCast(target, SPELL_FLAMESTRIKE);
+ _events.ScheduleEvent(EVENT_FLAMESTRIKE, 15000);
+ break;
+ case EVENT_FROSTBOLT:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true))
+ DoCast(target, SPELL_FROSTBOLT);
+ _events.ScheduleEvent(EVENT_FROSTBOLT, 15000);
+ break;
+ case EVENT_CHAINS_OF_ICE:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
+ DoCast(target, SPELL_CHAINS_OF_ICE);
+ _events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 15000);
+ break;
+ case EVENT_HALLUCINATION:
+ // removing any dots on mage or else the invisibility spell will break duration
+ me->RemoveAllAuras();
+ DoCast(me, SPELL_HALLUCINATION);
+ break;
+ default:
+ break;
+ }
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
{
- if (!UpdateVictim())
- return;
-
- _events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- switch (_events.ExecuteEvent())
- {
- case EVENT_FIREBALL:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_FIREBALL);
- _events.ScheduleEvent(EVENT_FIREBALL, 15000);
- break;
- case EVENT_FLAMESTRIKE:
- DoCast(SPELL_FLAMESTRIKE);
- _events.ScheduleEvent(EVENT_FLAMESTRIKE, 15000);
- break;
- case EVENT_FROSTBOLT:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_FROSTBOLT);
- _events.ScheduleEvent(EVENT_FROSTBOLT, 15000);
- break;
- case EVENT_CHAINS_OF_ICE:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_CHAINS_OF_ICE);
- _events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 15000);
- break;
- case EVENT_HALLUCINATION:
- // removing any dots on mage or else the invisibility spell will break duration
- me->RemoveAllAuras();
- DoCast(SPELL_HALLUCINATION);
- break;
- }
-
- DoMeleeAttackIfReady();
+ return GetHallsOfReflectionAI<npc_phantom_mageAI>(creature);
}
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_phantom_mageAI>(creature);
- }
};
class npc_phantom_hallucination : public CreatureScript
{
-public:
- npc_phantom_hallucination() : CreatureScript("npc_phantom_hallucination") { }
-
- struct npc_phantom_hallucinationAI : public npc_phantom_mage::npc_phantom_mageAI
- {
- npc_phantom_hallucinationAI(Creature* creature) : npc_phantom_mage::npc_phantom_mageAI(creature) { }
+ public:
+ npc_phantom_hallucination() : CreatureScript("npc_phantom_hallucination") { }
- void Reset() override
+ struct npc_phantom_hallucinationAI : public npc_phantom_mage::npc_phantom_mageAI
{
- if (Unit* unit = me->SelectNearestTarget())
- AttackStart(unit);
- DoZoneInCombat();
- }
+ npc_phantom_hallucinationAI(Creature* creature) : npc_phantom_mage::npc_phantom_mageAI(creature) { }
- void EnterEvadeMode() override
- {
- if (me->GetOwner() && !me->GetOwner()->HasAura(AURA_HALLUCINATION))
- npc_phantom_mage::npc_phantom_mageAI::EnterEvadeMode();
- }
+ void Reset() override
+ {
+ DoZoneInCombat(me, 150.0f);
+ }
+
+ void EnterEvadeMode() override
+ {
+ if (me->GetOwner() && !me->GetOwner()->HasAura(AURA_HALLUCINATION))
+ npc_phantom_mage::npc_phantom_mageAI::EnterEvadeMode();
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ DoCastAOE(SPELL_HALLUCINATION_2);
+ }
+ };
- void JustDied(Unit* /*killer*/) override
+ CreatureAI* GetAI(Creature* creature) const override
{
- DoCast(SPELL_HALLUCINATION_2);
+ return new npc_phantom_hallucinationAI(creature);
}
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_phantom_hallucinationAI(creature);
- }
};
class npc_shadowy_mercenary : public CreatureScript
{
-public:
- npc_shadowy_mercenary() : CreatureScript("npc_shadowy_mercenary") { }
-
- struct npc_shadowy_mercenaryAI : public npc_gauntlet_trash
- {
- npc_shadowy_mercenaryAI(Creature* creature) : npc_gauntlet_trash(creature) { }
+ public:
+ npc_shadowy_mercenary() : CreatureScript("npc_shadowy_mercenary") { }
- void EnterCombat(Unit* /*who*/) override
+ struct npc_shadowy_mercenaryAI : public npc_gauntlet_trash
{
- _events.ScheduleEvent(EVENT_SHADOW_STEP, 8000); /// @todo adjust timers
- _events.ScheduleEvent(EVENT_DEADLY_POISON, 5000);
- _events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10000);
- _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 12000);
- }
+ npc_shadowy_mercenaryAI(Creature* creature) : npc_gauntlet_trash(creature) { }
+
+ void EnterCombat(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_SHADOW_STEP, 23000);
+ _events.ScheduleEvent(EVENT_DEADLY_POISON, 5000);
+ _events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10000);
+ _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 12000);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ _events.Update(diff);
- void UpdateAI(uint32 diff) override
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ switch (_events.ExecuteEvent())
+ {
+ case EVENT_SHADOW_STEP:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
+ DoCast(target, SPELL_SHADOW_STEP);
+ _events.ScheduleEvent(EVENT_SHADOW_STEP, 8000);
+ break;
+ case EVENT_DEADLY_POISON:
+ DoCastVictim(SPELL_DEADLY_POISON);
+ _events.ScheduleEvent(EVENT_DEADLY_POISON, 10000);
+ break;
+ case EVENT_ENVENOMED_DAGGER_THROW:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true))
+ DoCast(target, SPELL_ENVENOMED_DAGGER_THROW);
+ _events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10000);
+ break;
+ case EVENT_KIDNEY_SHOT:
+ DoCastVictim(SPELL_KIDNEY_SHOT);
+ _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 10000);
+ break;
+ default:
+ break;
+ }
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
{
- if (!UpdateVictim())
- return;
-
- _events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- switch (_events.ExecuteEvent())
- {
- case EVENT_SHADOW_STEP:
- DoCast(SPELL_SHADOW_STEP);
- _events.ScheduleEvent(EVENT_SHADOW_STEP, 8000);
- break;
- case EVENT_DEADLY_POISON:
- DoCastVictim(SPELL_DEADLY_POISON);
- _events.ScheduleEvent(EVENT_DEADLY_POISON, 10000);
- break;
- case EVENT_ENVENOMED_DAGGER_THROW:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_ENVENOMED_DAGGER_THROW);
- _events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10000);
- break;
- case EVENT_KIDNEY_SHOT:
- DoCastVictim(SPELL_KIDNEY_SHOT);
- _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 10000);
- break;
- }
-
- DoMeleeAttackIfReady();
+ return GetHallsOfReflectionAI<npc_shadowy_mercenaryAI>(creature);
}
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_shadowy_mercenaryAI>(creature);
- }
};
class npc_spectral_footman : public CreatureScript
{
-public:
- npc_spectral_footman() : CreatureScript("npc_spectral_footman") { }
-
- struct npc_spectral_footmanAI : public npc_gauntlet_trash
- {
- npc_spectral_footmanAI(Creature* creature) : npc_gauntlet_trash(creature) { }
+ public:
+ npc_spectral_footman() : CreatureScript("npc_spectral_footman") { }
- void EnterCombat(Unit* /*who*/) override
+ struct npc_spectral_footmanAI : public npc_gauntlet_trash
{
- _events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 5000); /// @todo adjust timers
- _events.ScheduleEvent(EVENT_SHIELD_BASH, 10000);
- _events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000);
- }
+ npc_spectral_footmanAI(Creature* creature) : npc_gauntlet_trash(creature) { }
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void EnterCombat(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 14000);
+ _events.ScheduleEvent(EVENT_SHIELD_BASH, 10000);
+ _events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- _events.Update(diff);
+ _events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- switch (_events.ExecuteEvent())
- {
- case EVENT_SPECTRAL_STRIKE:
- DoCastVictim(SPELL_SPECTRAL_STRIKE);
- _events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 5000);
- break;
- case EVENT_SHIELD_BASH:
- DoCastVictim(SPELL_SHIELD_BASH);
- _events.ScheduleEvent(EVENT_SHIELD_BASH, 5000);
- break;
- case EVENT_TORTURED_ENRAGE:
- DoCast(SPELL_TORTURED_ENRAGE);
- _events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000);
- break;
+ switch (_events.ExecuteEvent())
+ {
+ case EVENT_SPECTRAL_STRIKE:
+ DoCastVictim(SPELL_SPECTRAL_STRIKE);
+ _events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 5000);
+ break;
+ case EVENT_SHIELD_BASH:
+ DoCastVictim(SPELL_SHIELD_BASH);
+ _events.ScheduleEvent(EVENT_SHIELD_BASH, 5000);
+ break;
+ case EVENT_TORTURED_ENRAGE:
+ DoCast(me, SPELL_TORTURED_ENRAGE);
+ _events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000);
+ break;
+ default:
+ break;
+ }
+
+ DoMeleeAttackIfReady();
}
+ };
- DoMeleeAttackIfReady();
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfReflectionAI<npc_spectral_footmanAI>(creature);
}
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_spectral_footmanAI>(creature);
- }
};
class npc_tortured_rifleman : public CreatureScript
{
-public:
- npc_tortured_rifleman() : CreatureScript("npc_tortured_rifleman") { }
-
- struct npc_tortured_riflemanAI : public npc_gauntlet_trash
- {
- npc_tortured_riflemanAI(Creature* creature) : npc_gauntlet_trash(creature) { }
+ public:
+ npc_tortured_rifleman() : CreatureScript("npc_tortured_rifleman") { }
- void EnterCombat(Unit* /*who*/) override
+ struct npc_tortured_riflemanAI : public npc_gauntlet_trash
{
- _events.ScheduleEvent(EVENT_SHOOT, 1); /// @todo adjust timers
- _events.ScheduleEvent(EVENT_CURSED_ARROW, 7000);
- _events.ScheduleEvent(EVENT_FROST_TRAP, 10000);
- _events.ScheduleEvent(EVENT_ICE_SHOT, 15000);
- }
+ npc_tortured_riflemanAI(Creature* creature) : npc_gauntlet_trash(creature) { }
+
+ void EnterCombat(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_SHOOT, 1);
+ _events.ScheduleEvent(EVENT_CURSED_ARROW, 7000);
+ _events.ScheduleEvent(EVENT_FROST_TRAP, 10000);
+ _events.ScheduleEvent(EVENT_ICE_SHOT, 15000);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- void UpdateAI(uint32 diff) override
+ _events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ switch (_events.ExecuteEvent())
+ {
+ case EVENT_SHOOT:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true))
+ DoCast(target, SPELL_SHOOT);
+ _events.ScheduleEvent(EVENT_SHOOT, 2000);
+ break;
+ case EVENT_CURSED_ARROW:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true))
+ DoCast(target, SPELL_CURSED_ARROW);
+ _events.ScheduleEvent(EVENT_CURSED_ARROW, 10000);
+ break;
+ case EVENT_FROST_TRAP:
+ DoCast(me, SPELL_FROST_TRAP);
+ _events.ScheduleEvent(EVENT_FROST_TRAP, 30000);
+ break;
+ case EVENT_ICE_SHOT:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true))
+ DoCast(target, SPELL_ICE_SHOT);
+ _events.ScheduleEvent(EVENT_ICE_SHOT, 15000);
+ break;
+ default:
+ break;
+ }
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
{
- if (!UpdateVictim())
- return;
-
- _events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- switch (_events.ExecuteEvent())
- {
- case EVENT_SHOOT:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_SHOOT);
- _events.ScheduleEvent(EVENT_SHOOT, 2000);
- break;
- case EVENT_CURSED_ARROW:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_CURSED_ARROW);
- _events.ScheduleEvent(EVENT_CURSED_ARROW, 10000);
- break;
- case EVENT_FROST_TRAP:
- DoCast(SPELL_FROST_TRAP);
- _events.ScheduleEvent(EVENT_FROST_TRAP, 30000);
- break;
- case EVENT_ICE_SHOT:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_ICE_SHOT);
- _events.ScheduleEvent(EVENT_ICE_SHOT, 15000);
- break;
- }
- DoMeleeAttackIfReady();
+ return GetHallsOfReflectionAI<npc_tortured_riflemanAI>(creature);
}
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_tortured_riflemanAI>(creature);
- }
};
-
-enum GeneralEvents
+enum FrostswornGeneral
{
- //General
+ // General
EVENT_SHIELD = 1,
EVENT_SPIKE = 2,
EVENT_CLONE = 3,
@@ -1575,554 +1816,652 @@ enum GeneralEvents
SAY_AGGRO = 0,
SAY_DEATH = 1,
- SPELL_SHIELD_THROWN = 69222, // 73076 on hc
- SPELL_SPIKE = 69184, // 70399 on hc
- SPELL_CLONE_NAME = 57507,
- SPELL_CLONE_MODEL = 45204,
+ SPELL_SHIELD_THROWN = 69222,
+ SPELL_SPIKE = 69184,
+ SPELL_CLONE = 69828,
+ SPELL_GHOST_VISUAL = 69861,
// Reflection
EVENT_BALEFUL_STRIKE = 1,
- SPELL_BALEFUL_STRIKE = 69933, // 70400 on hc
- SPELL_SPIRIT_BURST = 69900, // 73046 on hc
+ SPELL_BALEFUL_STRIKE = 69933,
+ SPELL_SPIRIT_BURST = 69900
};
-class npc_frostworn_general : public CreatureScript
+class npc_frostsworn_general : public CreatureScript
{
-public:
- npc_frostworn_general() : CreatureScript("npc_frostworn_general") { }
+ public:
+ npc_frostsworn_general() : CreatureScript("npc_frostsworn_general") { }
- struct npc_frostworn_generalAI : public ScriptedAI
- {
- npc_frostworn_generalAI(Creature* creature) : ScriptedAI(creature)
+ struct npc_frostsworn_generalAI : public ScriptedAI
{
- _instance = me->GetInstanceScript();
- Reset();
- }
+ npc_frostsworn_generalAI(Creature* creature) : ScriptedAI(creature)
+ {
+ _instance = creature->GetInstanceScript();
+ }
- InstanceScript* _instance;
- EventMap _events;
+ void Reset() override
+ {
+ _events.Reset();
+ _instance->SetData(DATA_FROSTSWORN_GENERAL, NOT_STARTED);
+ }
- void Reset() override
- {
- _events.Reset();
- _instance->SetData(DATA_FROSWORN_EVENT, NOT_STARTED);
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ Talk(SAY_DEATH);
+ _events.Reset();
+ _instance->SetData(DATA_FROSTSWORN_GENERAL, DONE);
+ }
- void JustDied(Unit* /*killer*/) override
- {
- Talk(SAY_DEATH);
- _instance->SetData(DATA_FROSWORN_EVENT, DONE);
- }
+ void EnterCombat(Unit* /*victim*/) override
+ {
+ Talk(SAY_AGGRO);
+ DoZoneInCombat();
+ _events.ScheduleEvent(EVENT_SHIELD, 5000);
+ _events.ScheduleEvent(EVENT_SPIKE, 14000);
+ _events.ScheduleEvent(EVENT_CLONE, 22000);
+ _instance->SetData(DATA_FROSTSWORN_GENERAL, IN_PROGRESS);
+ }
- void EnterCombat(Unit* /*victim*/) override
- {
- Talk(SAY_AGGRO);
- _events.ScheduleEvent(EVENT_SHIELD, 5000);
- _events.ScheduleEvent(EVENT_SPIKE, 14000);
- _events.ScheduleEvent(EVENT_CLONE, 22000);
- _instance->SetData(DATA_FROSWORN_EVENT, IN_PROGRESS);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ _events.Update(diff);
- _events.Update(diff);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ while (uint32 event = _events.ExecuteEvent())
+ {
+ switch (event)
+ {
+ case EVENT_SHIELD:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
+ DoCast(target, SPELL_SHIELD_THROWN);
+ _events.ScheduleEvent(EVENT_SHIELD, urand(8000, 12000));
+ break;
+ case EVENT_SPIKE:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
+ DoCast(target, SPELL_SPIKE);
+ _events.ScheduleEvent(EVENT_SPIKE, urand(15000, 20000));
+ break;
+ case EVENT_CLONE:
+ SummonClones();
+ _events.ScheduleEvent(EVENT_CLONE, 60000);
+ break;
+ default:
+ break;
+ }
+ }
+ DoMeleeAttackIfReady();
+ }
- while (uint32 event = _events.ExecuteEvent())
+ void SummonClones()
{
- switch (event)
+ std::list<Unit*> playerList;
+ SelectTargetList(playerList, 5, SELECT_TARGET_TOPAGGRO, 0.0f, true);
+ for (Unit* target : playerList)
{
- case EVENT_SHIELD:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_SHIELD_THROWN);
- _events.ScheduleEvent(EVENT_SHIELD, urand(8000, 12000));
- break;
- case EVENT_SPIKE:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_SPIKE);
- _events.ScheduleEvent(EVENT_SPIKE, urand(15000, 20000));
- break;
- case EVENT_CLONE:
- SummonClones();
- _events.ScheduleEvent(EVENT_CLONE, 60000);
- break;
+ if (Creature* reflection = me->SummonCreature(NPC_REFLECTION, *target, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000))
+ {
+ target->CastSpell(reflection, SPELL_CLONE, true);
+ target->CastSpell(reflection, SPELL_GHOST_VISUAL, true);
+ reflection->AI()->AttackStart(target);
+ }
}
}
- DoMeleeAttackIfReady();
- }
- void SummonClones()
+ private:
+ InstanceScript* _instance;
+ EventMap _events;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
{
- std::list<Unit *> playerList;
- SelectTargetList(playerList, 5, SELECT_TARGET_TOPAGGRO, 0, true);
- for (std::list<Unit*>::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr)
- {
- Unit* temp = (*itr);
- Creature* reflection = me->SummonCreature(NPC_REFLECTION, temp->GetPositionX(), temp->GetPositionY(), temp->GetPositionZ(), temp->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000);
- reflection->SetName(temp->GetName());
- temp->CastSpell(reflection, SPELL_CLONE_NAME, true);
- temp->CastSpell(reflection, SPELL_CLONE_MODEL, true);
- reflection->setFaction(me->getFaction());
- reflection->AI()->AttackStart(temp);
- }
+ return GetHallsOfReflectionAI<npc_frostsworn_generalAI>(creature);
}
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_frostworn_generalAI>(creature);
- }
};
class npc_spiritual_reflection : public CreatureScript
{
-public:
- npc_spiritual_reflection() : CreatureScript("npc_spiritual_reflection") { }
+ public:
+ npc_spiritual_reflection() : CreatureScript("npc_spiritual_reflection") { }
- struct npc_spiritual_reflectionAI : public ScriptedAI
- {
- npc_spiritual_reflectionAI(Creature *creature) : ScriptedAI(creature)
+ struct npc_spiritual_reflectionAI : public ScriptedAI
{
- Reset();
- }
+ npc_spiritual_reflectionAI(Creature *creature) : ScriptedAI(creature) { }
- EventMap _events;
+ void Reset() override
+ {
+ _events.Reset();
+ }
- void Reset() override
- {
- _events.Reset();
- }
+ void EnterCombat(Unit* /*victim*/) override
+ {
+ _events.ScheduleEvent(EVENT_BALEFUL_STRIKE, 3000);
+ }
- void EnterCombat(Unit* /*victim*/) override
- {
- _events.ScheduleEvent(EVENT_BALEFUL_STRIKE, 3000);
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ DoCastAOE(SPELL_SPIRIT_BURST);
+ }
- void JustDied(Unit* killer) override
- {
- DoCast(killer, SPELL_SPIRIT_BURST);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ _events.Update(diff);
- _events.Update(diff);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ switch (_events.ExecuteEvent())
+ {
+ case EVENT_BALEFUL_STRIKE:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 8.0f, true))
+ DoCast(target, SPELL_BALEFUL_STRIKE);
+ _events.ScheduleEvent(EVENT_BALEFUL_STRIKE, urand(3000, 8000));
+ break;
+ default:
+ break;
+ }
- switch (_events.ExecuteEvent())
- {
- case EVENT_BALEFUL_STRIKE:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_BALEFUL_STRIKE);
- _events.ScheduleEvent(EVENT_BALEFUL_STRIKE, urand(3000, 8000));
+ DoMeleeAttackIfReady();
}
- DoMeleeAttackIfReady();
- }
- };
+ private:
+ EventMap _events;
+ };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_spiritual_reflectionAI(creature);
- }
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_spiritual_reflectionAI(creature);
+ }
};
+// 5689
class at_hor_intro_start : public AreaTriggerScript
{
-public:
- at_hor_intro_start() : AreaTriggerScript("at_hor_intro_start") { }
+ public:
+ at_hor_intro_start() : AreaTriggerScript("at_hor_intro_start") { }
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override
- {
- InstanceScript* _instance = player->GetInstanceScript();
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override
+ {
+ if (player->IsGameMaster())
+ return true;
- if (player->IsGameMaster())
- return true;
+ InstanceScript* _instance = player->GetInstanceScript();
- if (_instance->GetData(DATA_INTRO_EVENT) == NOT_STARTED)
- _instance->SetData(DATA_INTRO_EVENT, IN_PROGRESS);
+ if (_instance->GetData(DATA_INTRO_EVENT) == NOT_STARTED)
+ _instance->SetData(DATA_INTRO_EVENT, IN_PROGRESS);
- return true;
- }
+ return true;
+ }
};
class at_hor_waves_restarter : public AreaTriggerScript
{
-public:
- at_hor_waves_restarter() : AreaTriggerScript("at_hor_waves_restarter") { }
+ public:
+ at_hor_waves_restarter() : AreaTriggerScript("at_hor_waves_restarter") { }
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override
- {
- InstanceScript* _instance = player->GetInstanceScript();
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override
+ {
+ if (player->IsGameMaster())
+ return true;
- if (player->IsGameMaster())
- return true;
+ InstanceScript* _instance = player->GetInstanceScript();
+
+ if (_instance->GetData(DATA_WAVE_COUNT))
+ return true;
- if (_instance->GetData(DATA_WAVE_COUNT))
+ if (_instance->GetData(DATA_INTRO_EVENT) == DONE && _instance->GetBossState(DATA_MARWYN) != DONE)
+ {
+ _instance->ProcessEvent(0, EVENT_SPAWN_WAVES);
+
+ if (Creature* falric = ObjectAccessor::GetCreature(*player, _instance->GetData64(DATA_FALRIC)))
+ {
+ falric->CastSpell(falric, SPELL_BOSS_SPAWN_AURA, true);
+ falric->SetVisible(true);
+ }
+ if (Creature* marwyn = ObjectAccessor::GetCreature(*player, _instance->GetData64(DATA_MARWYN)))
+ {
+ marwyn->CastSpell(marwyn, SPELL_BOSS_SPAWN_AURA, true);
+ marwyn->SetVisible(true);
+ }
+ }
return true;
+ }
+};
- if (_instance->GetData(DATA_INTRO_EVENT) == DONE && _instance->GetBossState(DATA_MARWYN_EVENT) != DONE)
+// 5740
+class at_hor_impenetrable_door : public AreaTriggerScript
+{
+ public:
+ at_hor_impenetrable_door() : AreaTriggerScript("at_hor_impenetrable_door") { }
+
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*at*/) override
{
- _instance->ProcessEvent(0, EVENT_SPAWN_WAVES);
+ if (player->IsGameMaster())
+ return true;
- if (Creature* falric = player->GetCreature(*player, _instance->GetData64(DATA_FALRIC_EVENT)))
- {
- falric->CastSpell(falric, SPELL_BOSS_SPAWN_AURA, true);
- falric->SetVisible(true);
- }
- if (Creature* marwyn = player->GetCreature(*player, _instance->GetData64(DATA_MARWYN_EVENT)))
- {
- marwyn->CastSpell(marwyn, SPELL_BOSS_SPAWN_AURA, true);
- marwyn->SetVisible(true);
- }
+ InstanceScript* _instance = player->GetInstanceScript();
+ if (_instance->GetBossState(DATA_MARWYN) == DONE)
+ return true;
+
+ /// return false to handle teleport by db
+ return false;
}
- return true;
- }
};
-class at_shadow_throne : public AreaTriggerScript
+// 5605
+class at_hor_shadow_throne : public AreaTriggerScript
{
-public:
- at_shadow_throne() : AreaTriggerScript("at_shadow_throne") { }
+ public:
+ at_hor_shadow_throne() : AreaTriggerScript("at_hor_shadow_throne") { }
- bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override
- {
- InstanceScript* _instance = player->GetInstanceScript();
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*at*/) override
+ {
+ if (player->IsGameMaster())
+ return true;
+
+ InstanceScript* _instance = player->GetInstanceScript();
+
+ if (_instance->GetBossState(DATA_THE_LICH_KING_ESCAPE) == NOT_STARTED)
+ _instance->SetBossState(DATA_THE_LICH_KING_ESCAPE, IN_PROGRESS);
- if (player->IsGameMaster())
return true;
+ }
+};
- if (_instance->GetData(DATA_ESCAPE_EVENT) == NOT_STARTED)
- _instance->SetData(DATA_ESCAPE_EVENT, IN_PROGRESS);
+enum EscapeEvents
+{
+ // Raging Ghoul
+ EVENT_RAGING_GHOUL_JUMP = 1,
- return true;
- }
+ // Risen Witch Doctor
+ EVENT_RISEN_WITCH_DOCTOR_CURSE,
+ EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT,
+ EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT_VOLLEY,
+
+ // Lumbering Abomination
+ EVENT_LUMBERING_ABOMINATION_VOMIT_SPRAY,
+ EVENT_LUMBERING_ABOMINATION_CLEAVE
};
-class npc_raging_ghoul : public CreatureScript
+namespace hor
{
-public:
- npc_raging_ghoul() : CreatureScript("npc_raging_ghoul") { }
- struct npc_raging_ghoulAI : public ScriptedAI
- {
- npc_raging_ghoulAI(Creature* creature) : ScriptedAI(creature)
+class StartMovementEvent : public BasicEvent
+{
+ public:
+ StartMovementEvent(Creature* owner) : _owner(owner) { }
+
+ bool Execute(uint64 /*execTime*/, uint32 /*diff*/) override
{
- _instance = me->GetInstanceScript();
+ _owner->SetReactState(REACT_AGGRESSIVE);
+ if (Unit* target = _owner->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
+ _owner->AI()->AttackStart(target);
+ return true;
}
- InstanceScript* _instance;
- uint32 _emergeTimer;
- bool _doEmerge;
- bool _doJump;
- uint64 _leaderGUID;
+ private:
+ Creature* _owner;
+};
- void Reset() override
- {
- _emergeTimer = 4000;
- _doEmerge = false;
- _doJump = false;
- if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS)
- _instance->SetData(DATA_SUMMONS, 1);
+} // namespace hor
- }
+struct npc_escape_event_trash : public ScriptedAI
+{
+ npc_escape_event_trash(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
- void IsSummonedBy(Unit*) override
- {
- DoCast(me, SPELL_EMERGE_VISUAL);
- }
+ void Reset() override
+ {
+ _events.Reset();
+ }
- void JustDied(Unit* /*killer*/) override
+ void UpdateAI(uint32 /*diff*/) override
+ {
+ if (_instance->GetBossState(DATA_THE_LICH_KING_ESCAPE) == FAIL || _instance->GetBossState(DATA_THE_LICH_KING_ESCAPE) == NOT_STARTED)
+ me->DespawnOrUnsummon();
+ }
+
+ void IsSummonedBy(Unit* /*summoner*/) override
+ {
+ DoZoneInCombat(me, 0.0f);
+ if (Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER)))
{
- _instance->SetData(DATA_SUMMONS, 0);
+ me->SetInCombatWith(leader);
+ leader->SetInCombatWith(me);
+ me->AddThreat(leader, 0.0f);
}
+ }
- void AttackStart(Unit* who) override
+protected:
+ EventMap _events;
+ InstanceScript* _instance;
+};
+
+class npc_raging_ghoul : public CreatureScript
+{
+ public:
+ npc_raging_ghoul() : CreatureScript("npc_raging_ghoul") { }
+
+ struct npc_raging_ghoulAI : public npc_escape_event_trash
{
- if (!who)
- return;
+ npc_raging_ghoulAI(Creature* creature) : npc_escape_event_trash(creature) { }
- if (!_doEmerge)
- return;
+ void Reset() override
+ {
+ npc_escape_event_trash::Reset();
+ _events.ScheduleEvent(EVENT_RAGING_GHOUL_JUMP, 5000);
+ }
- ScriptedAI::AttackStart(who);
- }
+ void IsSummonedBy(Unit* summoner) override
+ {
+ me->CastSpell(me, SPELL_RAGING_GHOUL_SPAWN, true);
+ me->SetReactState(REACT_PASSIVE);
+ me->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE);
+ me->m_Events.AddEvent(new hor::StartMovementEvent(me), me->m_Events.CalculateTime(5000));
- void UpdateAI(uint32 diff) override
- {
- if (!_instance)
- return;
+ npc_escape_event_trash::IsSummonedBy(summoner);
+ }
- if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS)
+ void UpdateAI(uint32 diff) override
{
- _leaderGUID = _instance->GetData64(DATA_ESCAPE_LEADER);
- Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER));
+ npc_escape_event_trash::UpdateAI(diff);
+
+ if (!UpdateVictim())
+ return;
+
+ _events.Update(diff);
- if (_doEmerge != true)
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ switch (_events.ExecuteEvent())
{
- if (_emergeTimer < diff)
- {
- _doEmerge = true;
- if (leader)
+ case EVENT_RAGING_GHOUL_JUMP:
+ if (Unit* victim = me->GetVictim())
{
- DoResetThreat();
- me->GetMotionMaster()->MoveIdle();
- me->GetMotionMaster()->MoveChase(leader);
+ if (me->IsInRange(victim, 5.0f, 30.0f))
+ {
+ DoCast(victim, SPELL_GHOUL_JUMP);
+ return;
+ }
}
- }
- else
- _emergeTimer -= diff;
+ _events.ScheduleEvent(EVENT_RAGING_GHOUL_JUMP, 500);
+ break;
+ default:
+ break;
}
- if (me->Attack(leader,true))/*(Unit *target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150.0f))*/
- {
- if (!_doJump && me->IsWithinDistInMap(leader, 30.0f) && !me->IsWithinDistInMap(leader, 5.0f))
- {
- _doJump = true;
- DoCast(leader, SPELL_GHOUL_JUMP);
- }
- }
+ DoMeleeAttackIfReady();
}
- else if (_instance->GetData(DATA_ESCAPE_EVENT) == FAIL || _instance->GetData(DATA_ESCAPE_EVENT) == NOT_STARTED)
- me->DespawnOrUnsummon();
- DoMeleeAttackIfReady();
- }
- };
+ };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_raging_ghoulAI>(creature);
- }
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfReflectionAI<npc_raging_ghoulAI>(creature);
+ }
};
class npc_risen_witch_doctor : public CreatureScript
{
-public:
- npc_risen_witch_doctor() : CreatureScript("npc_risen_witch_doctor") { }
+ public:
+ npc_risen_witch_doctor() : CreatureScript("npc_risen_witch_doctor") { }
- struct npc_risen_witch_doctorAI : public ScriptedAI
- {
- npc_risen_witch_doctorAI(Creature* creature) : ScriptedAI(creature)
+ struct npc_risen_witch_doctorAI : public npc_escape_event_trash
{
- _instance = me->GetInstanceScript();
- }
+ npc_risen_witch_doctorAI(Creature* creature) : npc_escape_event_trash(creature) { }
- InstanceScript* _instance;
- uint32 _emergeTimer;
- bool _doEmerge;
- uint64 _leaderGUID;
- uint32 _boltTimer;
- uint32 _boltVolleyTimer;
- uint32 _curseTimer;
+ void Reset() override
+ {
+ npc_escape_event_trash::Reset();
+ _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT, 6000);
+ _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT_VOLLEY, 15000);
+ _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_CURSE, 7000);
+ }
- void Reset() override
- {
- _emergeTimer = 5000;
- _boltTimer = 6000;
- _boltVolleyTimer = 15000;
- _curseTimer = 7000;
- _doEmerge = false;
- if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS)
- _instance->SetData(DATA_SUMMONS, 1);
- }
+ void IsSummonedBy(Unit* summoner) override
+ {
+ me->CastSpell(me, SPELL_RISEN_WITCH_DOCTOR_SPAWN, true);
+ me->SetReactState(REACT_PASSIVE);
+ me->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE);
+ me->m_Events.AddEvent(new hor::StartMovementEvent(me), me->m_Events.CalculateTime(5000));
- void IsSummonedBy(Unit*) override
- {
- DoCast(me, SPELL_EMERGE_VISUAL);
- DoZoneInCombat(me, 100.00f);
- }
+ npc_escape_event_trash::IsSummonedBy(summoner);
+ }
- void JustDied(Unit* /*killer*/) override
- {
- _instance->SetData(DATA_SUMMONS, 0);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ npc_escape_event_trash::UpdateAI(diff);
- void AttackStart(Unit* who) override
- {
- if (!who)
- return;
+ if (!UpdateVictim())
+ return;
+
+ _events.Update(diff);
- if (_doEmerge == false)
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- ScriptedAI::AttackStart(who);
+ switch (_events.ExecuteEvent())
+ {
+ case EVENT_RISEN_WITCH_DOCTOR_CURSE:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true))
+ DoCast(target, SPELL_CURSE_OF_DOOM);
+ _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_CURSE, urand(10000, 15000));
+ break;
+ case EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT:
+ if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 0, 20.0f, true))
+ DoCast(target, SPELL_SHADOW_BOLT);
+ _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT, urand(2000, 3000));
+ break;
+ case EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT_VOLLEY:
+ if (SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true))
+ DoCastAOE(SPELL_SHADOW_BOLT_VOLLEY);
+ _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT_VOLLEY, urand(15000, 22000));
+ break;
+ default:
+ break;
+ }
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfReflectionAI<npc_risen_witch_doctorAI>(creature);
}
+};
+
+class npc_lumbering_abomination : public CreatureScript
+{
+ public:
+ npc_lumbering_abomination() : CreatureScript("npc_lumbering_abomination") { }
- void UpdateAI(uint32 diff) override
+ struct npc_lumbering_abominationAI : public npc_escape_event_trash
{
- if (!_instance)
- return;
+ npc_lumbering_abominationAI(Creature* creature) : npc_escape_event_trash(creature) { }
- if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS)
+ void Reset() override
{
- if (_doEmerge != true)
- {
- if (_emergeTimer < diff)
- {
- _doEmerge = true;
- _leaderGUID = _instance->GetData64(DATA_ESCAPE_LEADER);
+ npc_escape_event_trash::Reset();
+ _events.ScheduleEvent(EVENT_LUMBERING_ABOMINATION_VOMIT_SPRAY, 15000);
+ _events.ScheduleEvent(EVENT_LUMBERING_ABOMINATION_CLEAVE, 6000);
+ }
- if (Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER)))
- {
- DoResetThreat();
- me->GetMotionMaster()->MoveIdle();
- me->GetMotionMaster()->MoveChase(leader);
- }
- }
- else
- _emergeTimer -= diff;
- }
+ void UpdateAI(uint32 diff) override
+ {
+ npc_escape_event_trash::UpdateAI(diff);
- if (_curseTimer < diff)
- {
- if (Unit *target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_COURSE_OF_DOOM);
- _curseTimer = urand(10000, 15000);
- }
- else
- _curseTimer -= diff;
+ if (!UpdateVictim())
+ return;
- if (_boltTimer < diff)
- {
- if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO))
- DoCast(target, SPELL_SHADOW_BOLT);
- _boltTimer = urand(2000, 3000);
- }
- else
- _boltTimer -= diff;
+ _events.Update(diff);
- if (_boltVolleyTimer < diff)
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ switch (_events.ExecuteEvent())
{
- if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO))
- DoCast(target, SPELL_SHADOW_BOLT_VOLLEY);
- _boltVolleyTimer = urand(15000, 22000);
+ case EVENT_LUMBERING_ABOMINATION_VOMIT_SPRAY:
+ DoCastVictim(SPELL_VOMIT_SPRAY);
+ _events.ScheduleEvent(EVENT_LUMBERING_ABOMINATION_VOMIT_SPRAY, urand(15000, 20000));
+ break;
+ case EVENT_LUMBERING_ABOMINATION_CLEAVE:
+ DoCastVictim(SPELL_CLEAVE);
+ _events.ScheduleEvent(EVENT_LUMBERING_ABOMINATION_CLEAVE, urand(7000, 9000));
+ break;
+ default:
+ break;
}
- else
- _boltVolleyTimer -= diff;
+
+ DoMeleeAttackIfReady();
}
- else if (_instance->GetData(DATA_ESCAPE_EVENT) == FAIL || _instance->GetData(DATA_ESCAPE_EVENT) == NOT_STARTED)
- me->DespawnOrUnsummon();
- DoMeleeAttackIfReady();
- }
- };
+ };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_risen_witch_doctorAI>(creature);
- }
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfReflectionAI<npc_lumbering_abominationAI>(creature);
+ }
};
-
-class npc_lumbering_abomination : public CreatureScript
+// 72900 - Start Halls of Reflection Quest AE
+class spell_hor_start_halls_of_reflection_quest_ae : public SpellScriptLoader
{
-public:
- npc_lumbering_abomination() : CreatureScript("npc_lumbering_abomination") { }
+ public:
+ spell_hor_start_halls_of_reflection_quest_ae() : SpellScriptLoader("spell_hor_start_halls_of_reflection_quest_ae") { }
- struct npc_lumbering_abominationAI : public ScriptedAI
- {
- npc_lumbering_abominationAI(Creature* creature) : ScriptedAI(creature)
+ class spell_hor_start_halls_of_reflection_quest_ae_SpellScript : public SpellScript
{
- _instance = me->GetInstanceScript();
- }
+ PrepareSpellScript(spell_hor_start_halls_of_reflection_quest_ae_SpellScript);
+
+ void StartQuests(SpellEffIndex /*effIndex*/)
+ {
+ if (Player* target = GetHitPlayer())
+ {
+ // CanTakeQuest and CanAddQuest checks done in spell effect execution
+ if (target->GetTeam() == ALLIANCE)
+ target->CastSpell(target, SPELL_START_HALLS_OF_REFLECTION_QUEST_A, true);
+ else
+ target->CastSpell(target, SPELL_START_HALLS_OF_REFLECTION_QUEST_H, true);
+ }
+ }
- InstanceScript* _instance;
- uint64 _leaderGUID;
- bool _doWalk;
- uint32 _strikeTimer;
- uint32 _vomitTimer;
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_hor_start_halls_of_reflection_quest_ae_SpellScript::StartQuests, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
- void Reset() override
+ SpellScript* GetSpellScript() const override
{
- _doWalk = false;
- _vomitTimer = 15000;
- _strikeTimer = 6000;
- if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS)
- _instance->SetData(DATA_SUMMONS, 1);
+ return new spell_hor_start_halls_of_reflection_quest_ae_SpellScript();
}
+};
+
+// 70190 - Evasion
+class spell_hor_evasion : public SpellScriptLoader
+{
+ public:
+ spell_hor_evasion() : SpellScriptLoader("spell_hor_evasion") { }
+
+ class spell_hor_evasion_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_hor_evasion_SpellScript);
+
+ bool Load() override
+ {
+ return GetCaster()->GetTypeId() == TYPEID_UNIT;
+ }
+
+ void SetDest(SpellDestination& dest)
+ {
+ WorldObject* target = GetExplTargetWorldObject();
+ Position pos(*target);
+ Position home = GetCaster()->ToCreature()->GetHomePosition();
+
+ // prevent evasion outside the room
+ if (pos.IsInDist2d(&home, 15.0f))
+ return;
+
+ float angle = pos.GetAngle(&home);
+ float dist = GetSpellInfo()->Effects[EFFECT_0].CalcRadius(GetCaster());
+ target->MovePosition(pos, dist, angle);
+
+ dest.Relocate(pos);
+ }
+
+ void Register() override
+ {
+ OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_hor_evasion_SpellScript::SetDest, EFFECT_0, TARGET_DEST_TARGET_RADIUS);
+ }
+ };
- void IsSummonedBy(Unit*) override
+ SpellScript* GetSpellScript() const override
{
- DoCast(me, SPELL_EMERGE_VISUAL);
- DoZoneInCombat(me, 100.00f);
+ return new spell_hor_evasion_SpellScript();
}
+};
+
+// 70017 - Gunship Cannon Fire
+class spell_hor_gunship_cannon_fire : public SpellScriptLoader
+{
+ public:
+ spell_hor_gunship_cannon_fire() : SpellScriptLoader("spell_hor_gunship_cannon_fire") { }
- void UpdateAI(uint32 diff) override
+ class spell_hor_gunship_cannon_fire_AuraScript : public AuraScript
{
- if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS)
+ PrepareAuraScript(spell_hor_gunship_cannon_fire_AuraScript);
+
+ void HandlePeriodic(AuraEffect const* /*aurEff*/)
{
- if (_doWalk != true)
+ if (!urand(0, 2))
{
- _doWalk = true;
- _leaderGUID = _instance->GetData64(DATA_ESCAPE_LEADER);
- if (Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER)))
- {
- DoResetThreat();
- me->GetMotionMaster()->MoveIdle();
- me->GetMotionMaster()->MoveChase(leader);
- }
- }
- if (_strikeTimer < diff)
- {
- if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO))
- DoCast(target, SPELL_ABON_STRIKE);
- _strikeTimer = urand(7000, 9000);
+ if (GetTarget()->GetEntry() == NPC_GUNSHIP_CANNON_HORDE)
+ GetTarget()->CastSpell((Unit*)NULL, SPELL_GUNSHIP_CANNON_FIRE_MISSILE_HORDE, true);
+ else
+ GetTarget()->CastSpell((Unit*)NULL, SPELL_GUNSHIP_CANNON_FIRE_MISSILE_ALLIANCE, true);
}
- else
- _strikeTimer -= diff;
+ }
- if (_vomitTimer < diff)
- {
- if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO))
- DoCast(target, SPELL_VOMIT_SPRAY);
- _vomitTimer = urand(15000, 20000);
- }
- else
- _vomitTimer -= diff;
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_hor_gunship_cannon_fire_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
- else if (_instance->GetData(DATA_ESCAPE_EVENT) == FAIL || _instance->GetData(DATA_ESCAPE_EVENT) == NOT_STARTED)
- me->DespawnOrUnsummon();
- DoMeleeAttackIfReady();
- }
+ };
- void JustDied(Unit* /*killer*/) override
+ AuraScript* GetAuraScript() const override
{
- _instance->SetData(DATA_SUMMONS, 0);
+ return new spell_hor_gunship_cannon_fire_AuraScript();
}
-
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_lumbering_abominationAI>(creature);
- }
};
void AddSC_halls_of_reflection()
{
new at_hor_intro_start();
new at_hor_waves_restarter();
- new at_shadow_throne();
- new npc_jaina_or_sylvanas_hor();
+ new at_hor_impenetrable_door();
+ new at_hor_shadow_throne();
+ new npc_jaina_or_sylvanas_intro_hor();
new npc_jaina_or_sylvanas_escape_hor();
+ new npc_the_lich_king_escape_hor();
new npc_ghostly_priest();
new npc_phantom_mage();
new npc_phantom_hallucination();
new npc_shadowy_mercenary();
new npc_spectral_footman();
new npc_tortured_rifleman();
+ new npc_frostsworn_general();
+ new npc_spiritual_reflection();
new npc_raging_ghoul();
new npc_risen_witch_doctor();
new npc_lumbering_abomination();
- new npc_frostworn_general();
- new npc_spiritual_reflection();
+ new spell_hor_start_halls_of_reflection_quest_ae();
+ new spell_hor_evasion();
+ new spell_hor_gunship_cannon_fire();
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h
index c4776c3cfcd..a05035f7b44 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h
@@ -15,170 +15,231 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef DEF_HALLS_OF_REFLECTION_H
-#define DEF_HALLS_OF_REFLECTION_H
+#ifndef HALLS_OF_REFLECTION_H_
+#define HALLS_OF_REFLECTION_H_
#define HoRScriptName "instance_halls_of_reflection"
-#define MAX_ENCOUNTER 3
+
+uint32 const EncounterCount = 3;
/* Halls of Reflection encounters:
-0- Falric
-1- Marwyn
-2- The Lich King
+ 0 - Falric
+ 1 - Marwyn
+ 2 - The Lich King
*/
-enum Data
+enum DataTypes
{
- DATA_FALRIC_EVENT = 0,
- DATA_MARWYN_EVENT = 1,
- DATA_LICHKING_EVENT = 2,
+ DATA_FALRIC = 0,
+ DATA_MARWYN = 1,
+ DATA_THE_LICH_KING_ESCAPE = 2,
+
DATA_INTRO_EVENT = 3,
- DATA_FROSWORN_EVENT = 4,
+ DATA_FROSTSWORN_GENERAL = 4,
- DATA_WAVE_COUNT = 5,
- DATA_TEAM_IN_INSTANCE = 6,
- DATA_FROSTMOURNE = 7,
- DATA_FROSTWORN_DOOR = 8,
- DATA_ESCAPE_EVENT = 9,
+ DATA_KORELN_LORALEN = 5,
+ DATA_WAVE_COUNT = 6,
+ DATA_TEAM_IN_INSTANCE = 7,
+ DATA_FROSTMOURNE = 8,
+ DATA_IMPENETRABLE_DOOR = 9,
DATA_ESCAPE_LEADER = 10,
- DATA_SUMMONS = 11,
- DATA_ICEWALL = 12,
- DATA_CAVE_IN = 13
+ DATA_ICEWALL = 11,
+ DATA_ICEWALL_TARGET = 12,
+ DATA_GUNSHIP = 13
};
-enum Creatures
+enum CreatureIds
{
- NPC_JAINA_PART1 = 37221,
- NPC_SYLVANAS_PART1 = 37223,
- NPC_UTHER = 37225,
- NPC_LICH_KING_PART1 = 37226,
- NPC_LORALEN = 37779,
- NPC_KORELN = 37582,
-
- NPC_FALRIC = 38112,
- NPC_MARWYN = 38113,
- NPC_WAVE_MERCENARY = 38177,
- NPC_WAVE_FOOTMAN = 38173,
- NPC_WAVE_RIFLEMAN = 38176,
- NPC_WAVE_PRIEST = 38175,
- NPC_WAVE_MAGE = 38172,
-
- NPC_FROSTWORN_GENERAL = 36723,
- NPC_REFLECTION = 37068, // 37107 for tank only?
-
- NPC_JAINA_PART2 = 36955,
- NPC_SYLVANAS_PART2 = 37554,
- NPC_LICH_KING_PART2 = 36954,
- NPC_BARTLETT = 37182, // High Captain Justin Bartlett
- NPC_KORM = 37833, // Sky-Reaver Korm Blackscar
- NPC_ICE_WALL = 37014, // Ice Wall Target
-
- NPC_RAGING_GNOUL = 36940,
- NPC_RISEN_WITCH_DOCTOR = 36941,
- NPC_ABON = 37069
+ NPC_JAINA_INTRO = 37221,
+ NPC_SYLVANAS_INTRO = 37223,
+ NPC_UTHER = 37225,
+ NPC_THE_LICH_KING_INTRO = 37226,
+ NPC_KORELN = 37582,
+ NPC_LORALEN = 37779,
+ NPC_FROSTMOUNRE_ALTAR_BUNNY = 37704,
+
+ NPC_FALRIC = 38112,
+ NPC_MARWYN = 38113,
+ NPC_WAVE_MERCENARY = 38177,
+ NPC_WAVE_FOOTMAN = 38173,
+ NPC_WAVE_RIFLEMAN = 38176,
+ NPC_WAVE_PRIEST = 38175,
+ NPC_WAVE_MAGE = 38172,
+
+ NPC_FROSTSWORN_GENERAL = 36723,
+ NPC_REFLECTION = 37068, // 37107 for tank only?
+
+ NPC_JAINA_ESCAPE = 36955,
+ NPC_SYLVANAS_ESCAPE = 37554,
+ NPC_THE_LICH_KING_ESCAPE = 36954,
+ NPC_ICE_WALL_TARGET = 37014,
+
+ NPC_RAGING_GHOUL = 36940,
+ NPC_RISEN_WITCH_DOCTOR = 36941,
+ NPC_LUMBERING_ABOMINATION = 37069,
+
+ NPC_GUNSHIP_CANNON_HORDE = 37593,
+ NPC_JUSTIN_BARTLETT = 30344,
+ NPC_KORM_BLACKSCAR = 30824,
+
+ NPC_WORLD_TRIGGER = 22515
};
-enum GameObjects
+enum GameObjectIds
{
- GO_FROSTMOURNE = 202302,
- GO_ENTRANCE_DOOR = 201976,
- GO_FROSTWORN_DOOR = 197341,
- GO_ARTHAS_DOOR = 197342,
- //GO_ESCAPE_DOOR = 197343, // always open ?
-
- GO_ICE_WALL = 201385,
- GO_CAVE = 201596,
-
- GO_STAIRS_SKYBREAKER = 201709,
- GO_SKYBREAKER = 201598,
- GO_STAIRS_ORGRIM_HAMMER = 202211,
- GO_ORGRIM_HAMMER = 201599,
- GO_PORTAL = 202079,
-
- GO_CAPTAIN_CHEST_HORDE_NORMAL = 202212, //3145
- GO_CAPTAIN_CHEST_ALLIANCE_NORMAL = 201710, //30357
- GO_CAPTAIN_CHEST_HORDE_HEROIC = 202337, //3246
- GO_CAPTAIN_CHEST_ALLIANCE_HEROIC = 202336, //3333
+ GO_FROSTMOURNE = 202302,
+ GO_ENTRANCE_DOOR = 201976,
+ GO_IMPENETRABLE_DOOR = 197341,
+ GO_SHADOW_THRONE_DOOR = 197342,
+ GO_ESCAPE_DOOR = 197343, // always open ?
+
+ GO_ICE_WALL = 201385,
+ GO_CAVE_IN = 201596,
+
+ GO_THE_SKYBREAKER = 201598,
+ GO_ORGRIMS_HAMMER = 201599,
+ GO_THE_SKYBREAKER_STAIRS = 201709,
+ GO_ORGRIMS_HAMMER_STAIRS = 202211,
+ GO_PORTAL_TO_DALARAN = 195682,
+
+ GO_THE_CAPTAIN_CHEST_ALLIANCE_NORMAL = 201710,
+ GO_THE_CAPTAIN_CHEST_HORDE_NORMAL = 202212,
+ GO_THE_CAPTAIN_CHEST_ALLIANCE_HEROIC = 202336,
+ GO_THE_CAPTAIN_CHEST_HORDE_HEROIC = 202337
};
-enum HorWorldStates
+enum Achievements
{
- WORLD_STATE_HOR_WAVES_ENABLED = 4884,
- WORLD_STATE_HOR_WAVE_COUNT = 4882,
+ ACHIEV_NOT_RETREATING_EVENT = 22615,
+ SPELL_ACHIEV_CHECK = 72830
};
// Common actions from Instance Script to Boss Script
enum Actions
{
- ACTION_ENTER_COMBAT,
- ACTION_START_ESCAPING,
- ACTION_WALL_BROKEN
+ ACTION_ENTER_COMBAT = -668001,
+ ACTION_START_PREFIGHT = -668002,
+ ACTION_WALL_BROKEN = -668003,
+ ACTION_GUNSHIP_ARRIVAL = -668004,
+ ACTION_GUNSHIP_ARRIVAL_2 = -668005
};
-enum TrashGeneralSpells
+enum InstanceEvents
{
- // General spells
- SPELL_WELL_OF_SOULS = 72630, // cast when spawn(become visible)
- SPELL_SPIRIT_ACTIVATE = 72130, // cast when unit activates
+ EVENT_SPAWN_WAVES = 1,
+ EVENT_NEXT_WAVE = 2,
+ EVENT_DO_WIPE = 3,
+ EVENT_ADD_WAVE = 4,
+ EVENT_SPAWN_ESCAPE_EVENT = 5
};
-enum InstanceEvents
+enum InstanceEventIds
{
- EVENT_SPAWN_WAVES = 1,
- EVENT_NEXT_WAVE = 2,
- EVENT_DO_WIPE = 3,
- EVENT_ADD_WAVE = 4,
+ EVENT_GUNSHIP_ARRIVAL = 22709,
+ EVENT_GUNSHIP_ARRIVAL_2 = 22714,
+ EVENT_ICE_WALL_SUMMONED = 22795
};
-// Base class for FALRIC and MARWYN
-// handled the summonList and the notification events to/from the InstanceScript
-struct boss_horAI : ScriptedAI
+enum InstanceSpells
{
- boss_horAI(Creature* creature) : ScriptedAI(creature), summons(creature)
- {
- instance = me->GetInstanceScript();
- }
+ // Trash
+ SPELL_WELL_OF_SOULS = 72630, // cast when spawn (become visible)
+ SPELL_SPIRIT_ACTIVATE = 72130, // cast when unit activates
+
+ // Start Quests
+ SPELL_START_HALLS_OF_REFLECTION_QUEST_A = 71351,
+ SPELL_START_HALLS_OF_REFLECTION_QUEST_H = 71542,
+ SPELL_START_HALLS_OF_REFLECTION_QUEST_AE = 72900,
+
+ // Quest Credits
+ SPELL_CREDIT_FINDING_SYLVANAS = 71536,
+ SPELL_CREDIT_FINDING_JAINA = 71538,
+ SPELL_CREDIT_ESCAPING_ARTHAS = 71352,
+
+ // Gunship
+ SPELL_GUNSHIP_CANNON_FIRE = 70017,
+ SPELL_GUNSHIP_CANNON_FIRE_MISSILE_ALLIANCE = 70021,
+ SPELL_GUNSHIP_CANNON_FIRE_MISSILE_HORDE = 70246
+};
- InstanceScript* instance;
- EventMap events;
- SummonList summons;
+enum InstanceWorldStates
+{
+ WORLD_STATE_HOR_WAVES_ENABLED = 4884,
+ WORLD_STATE_HOR_WAVE_COUNT = 4882
+};
+
+enum InstanceYells
+{
+ SAY_CAPTAIN_FIRE = 0,
+ SAY_CAPTAIN_FINAL = 1
+};
+
+// Base class for FALRIC and MARWYN
+struct boss_horAI : BossAI
+{
+ boss_horAI(Creature* creature, uint32 bossId) : BossAI(creature, bossId) { }
- void Reset()
+ void Reset() override
{
- events.Reset();
+ _Reset();
me->SetVisible(false);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetReactState(REACT_PASSIVE);
if (instance->GetData(DATA_WAVE_COUNT) != NOT_STARTED)
- instance->ProcessEvent(0, EVENT_DO_WIPE);
+ instance->ProcessEvent(NULL, EVENT_DO_WIPE);
}
- void DoAction(int32 actionID)
+ void DoAction(int32 actionId) override
{
- switch (actionID)
+ switch (actionId)
{
- case ACTION_ENTER_COMBAT: // called by InstanceScript when boss shall enter in combat.
+ case ACTION_ENTER_COMBAT: // called by InstanceScript when boss shall enter in combat.
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetReactState(REACT_AGGRESSIVE);
-
- if (Unit* unit = me->SelectNearestTarget())
- AttackStart(unit);
-
- DoZoneInCombat();
+ DoZoneInCombat(me, 150.0f);
+ break;
+ default:
break;
}
}
- void JustSummoned(Creature* summoned)
+ void JustSummoned(Creature* summon) override
{
- summons.Summon(summoned);
+ summons.Summon(summon);
}
};
+class GameObjectDeleteDelayEvent : public BasicEvent
+{
+ public:
+ GameObjectDeleteDelayEvent(Unit* owner, uint64 gameObjectGUID) : _owner(owner), _gameObjectGUID(gameObjectGUID) { }
+
+ void DeleteGameObject()
+ {
+ if (GameObject* go = ObjectAccessor::GetGameObject(*_owner, _gameObjectGUID))
+ go->Delete();
+ }
+
+ bool Execute(uint64 /*execTime*/, uint32 /*diff*/) override
+ {
+ DeleteGameObject();
+ return true;
+ }
+
+ void Abort(uint64 /*execTime*/) override
+ {
+ DeleteGameObject();
+ }
+
+ private:
+ Unit* _owner;
+ uint64 _gameObjectGUID;
+};
+
template<class AI>
AI* GetHallsOfReflectionAI(Creature* creature)
{
return GetInstanceAI<AI>(creature, HoRScriptName);
}
-#endif
+#endif // HALLS_OF_REFLECTION_H_
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
index ab5168dd34a..6f33e80b92b 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
@@ -19,590 +19,792 @@
#include "ScriptedCreature.h"
#include "InstanceScript.h"
#include "Player.h"
+#include "Transport.h"
#include "WorldPacket.h"
#include "halls_of_reflection.h"
-Position const JainaSpawnPos = {5236.659f, 1929.894f, 707.7781f, 0.8726646f}; // Jaina Spawn Position
-Position const SylvanasSpawnPos = {5236.667f, 1929.906f, 707.7781f, 0.8377581f}; // Sylvanas Spawn Position
-Position const GeneralSpawnPos = {5415.538f, 2117.842f, 707.7781f, 3.944444f}; // Frostsworn General
-Position const JainaSpawnPos2 = {5549.011f, 2257.041f, 733.0120f, 1.153993f}; // Jaina Spawn Position 2
-Position const SylvanasSpawnPos2 = {5549.011f, 2257.041f, 733.0120f, 1.153993f}; // Sylvanas Spawn Position 2
+Position const JainaSpawnPos = { 5236.659f, 1929.894f, 707.7781f, 0.8726646f }; // Jaina Spawn Position
+Position const SylvanasSpawnPos = { 5236.667f, 1929.906f, 707.7781f, 0.8377581f }; // Sylvanas Spawn Position (sniffed)
+Position const JainaSpawnPos2 = { 5549.011f, 2257.041f, 733.0120f, 1.153993f }; // Jaina Spawn Position 2
+Position const SylvanasSpawnPos2 = { 5549.29f, 2257.353f, 733.0943f, 0.8901179f }; // Sylvanas Spawn Position 2 (sniffed)
+Position const KorelnOrLoralenSpawnPos = { 5232.68f, 1931.46f, 707.7781f, 0.8377581f };
+
+Position const TheLichKingEscapePosition[] =
+{
+ { 5557.017f, 2266.103f, 733.0943f, 3.892084f }, // 0 - Spawn (Horde)
+ { 5552.733f, 2262.718f, 733.0110f, 4.009696f } // 1 - Spawn (Alliance)
+};
Position const SpawnPos[] =
{
- {5309.577f, 2042.668f, 707.7781f, 4.694936f},
- {5295.885f, 2040.342f, 707.7781f, 5.078908f},
- {5340.836f, 1992.458f, 707.7781f, 2.757620f},
- {5325.072f, 1977.597f, 707.7781f, 2.076942f},
- {5277.365f, 1993.229f, 707.7781f, 0.401426f},
- {5275.479f, 2001.135f, 707.7781f, 0.174533f},
- {5302.448f, 2042.222f, 707.7781f, 4.904375f},
- {5343.293f, 1999.384f, 707.7781f, 2.914700f},
- {5295.635f, 1973.757f, 707.7781f, 1.186824f},
- {5311.031f, 1972.229f, 707.7781f, 1.640610f},
- {5275.076f, 2008.724f, 707.7781f, 6.213372f},
- {5316.701f, 2041.550f, 707.7781f, 4.502949f},
- {5344.150f, 2007.168f, 707.7781f, 3.159046f},
- {5319.158f, 1973.998f, 707.7781f, 1.919862f},
- {5302.247f, 1972.415f, 707.7781f, 1.378810f},
- {5277.739f, 2016.882f, 707.7781f, 5.969026f},
- {5322.964f, 2040.288f, 707.7781f, 4.345870f},
- {5343.467f, 2015.951f, 707.7781f, 3.490659f},
- {5313.820f, 1978.146f, 707.7781f, 1.745329f},
- {5279.649f, 2004.656f, 707.7781f, 0.069814f},
- {5306.057f, 2037.002f, 707.7781f, 4.817109f},
- {5337.865f, 2003.403f, 707.7781f, 2.984513f},
- {5299.434f, 1979.009f, 707.7781f, 1.239184f},
- {5312.752f, 2037.122f, 707.7781f, 4.590216f},
- {5335.724f, 1996.859f, 707.7781f, 2.740167f},
- {5280.632f, 2012.156f, 707.7781f, 6.056293f},
- {5320.369f, 1980.125f, 707.7781f, 2.007129f},
- {5306.572f, 1977.474f, 707.7781f, 1.500983f},
- {5336.599f, 2017.278f, 707.7781f, 3.473205f},
- {5282.897f, 2019.597f, 707.7781f, 5.881760f},
- {5318.704f, 2036.108f, 707.7781f, 4.223697f},
- {5280.513f, 1997.842f, 707.7781f, 0.296706f},
- {5337.833f, 2010.057f, 707.7781f, 3.228859f},
- {5299.250f, 2035.998f, 707.7781f, 5.026548f},
+ { 5309.577f, 2042.668f, 707.7781f, 4.694936f },
+ { 5295.885f, 2040.342f, 707.7781f, 5.078908f },
+ { 5340.836f, 1992.458f, 707.7781f, 2.757620f },
+ { 5325.072f, 1977.597f, 707.7781f, 2.076942f },
+ { 5277.365f, 1993.229f, 707.7781f, 0.401426f },
+ { 5275.479f, 2001.135f, 707.7781f, 0.174533f },
+ { 5302.448f, 2042.222f, 707.7781f, 4.904375f },
+ { 5343.293f, 1999.384f, 707.7781f, 2.914700f },
+ { 5295.635f, 1973.757f, 707.7781f, 1.186824f },
+ { 5311.031f, 1972.229f, 707.7781f, 1.640610f },
+ { 5275.076f, 2008.724f, 707.7781f, 6.213372f },
+ { 5316.701f, 2041.550f, 707.7781f, 4.502949f },
+ { 5344.150f, 2007.168f, 707.7781f, 3.159046f },
+ { 5319.158f, 1973.998f, 707.7781f, 1.919862f },
+ { 5302.247f, 1972.415f, 707.7781f, 1.378810f },
+ { 5277.739f, 2016.882f, 707.7781f, 5.969026f },
+ { 5322.964f, 2040.288f, 707.7781f, 4.345870f },
+ { 5343.467f, 2015.951f, 707.7781f, 3.490659f },
+ { 5313.820f, 1978.146f, 707.7781f, 1.745329f },
+ { 5279.649f, 2004.656f, 707.7781f, 0.069814f },
+ { 5306.057f, 2037.002f, 707.7781f, 4.817109f },
+ { 5337.865f, 2003.403f, 707.7781f, 2.984513f },
+ { 5299.434f, 1979.009f, 707.7781f, 1.239184f },
+ { 5312.752f, 2037.122f, 707.7781f, 4.590216f },
+ { 5335.724f, 1996.859f, 707.7781f, 2.740167f },
+ { 5280.632f, 2012.156f, 707.7781f, 6.056293f },
+ { 5320.369f, 1980.125f, 707.7781f, 2.007129f },
+ { 5306.572f, 1977.474f, 707.7781f, 1.500983f },
+ { 5336.599f, 2017.278f, 707.7781f, 3.473205f },
+ { 5282.897f, 2019.597f, 707.7781f, 5.881760f },
+ { 5318.704f, 2036.108f, 707.7781f, 4.223697f },
+ { 5280.513f, 1997.842f, 707.7781f, 0.296706f },
+ { 5337.833f, 2010.057f, 707.7781f, 3.228859f },
+ { 5299.250f, 2035.998f, 707.7781f, 5.026548f }
};
class instance_halls_of_reflection : public InstanceMapScript
{
-public:
- instance_halls_of_reflection() : InstanceMapScript("instance_halls_of_reflection", 668) { }
-
- struct instance_halls_of_reflection_InstanceMapScript : public InstanceScript
- {
- instance_halls_of_reflection_InstanceMapScript(Map* map) : InstanceScript(map) { }
+ public:
+ instance_halls_of_reflection() : InstanceMapScript(HoRScriptName, 668) { }
- void Initialize() override
+ struct instance_halls_of_reflection_InstanceMapScript : public InstanceScript
{
- SetBossNumber(MAX_ENCOUNTER);
- events.Reset();
-
- _falricGUID = 0;
- _marwynGUID = 0;
- _jainaOrSylvanasPart1GUID = 0;
- _jainaOrSylvanasPart2GUID = 0;
- _lichkingPart1GUID = 0;
- _frostwornGeneralGUID = 0;
-
- _frostmourneGUID = 0;
- _entranceDoorGUID = 0;
- _frostwornDoorGUID = 0;
- _arthasDoorGUID = 0;
- _escapeDoorGUID = 0;
- _caveGUID = 0;
-
- _teamInInstance = 0;
- _waveCount = 0;
- _introEvent = NOT_STARTED;
- _frostwornGeneral = NOT_STARTED;
- _escapeevent = NOT_STARTED;
- _mobsaticewall = 0;
- }
+ instance_halls_of_reflection_InstanceMapScript(Map* map) : InstanceScript(map)
+ {
+ SetBossNumber(EncounterCount);
+
+ JainaOrSylvanasIntroGUID = 0;
+ KorelnOrLoralenGUID = 0;
+ TheLichkingIntroGUID = 0;
+ FalricGUID = 0;
+ MarwynGUID = 0;
+ FrostmourneAltarBunnyGUID = 0;
+ FrostswornGeneralGUID = 0;
+ JainaOrSylvanasEscapeGUID = 0;
+ TheLichKingEscapeGUID = 0;
+
+ FrostmourneGUID = 0;
+ EntranceDoorGUID = 0;
+ ImpenetrableDoorGUID = 0;
+ ShadowThroneDoorGUID = 0;
+ CaveInGUID = 0;
+ GunshipGUID = 0;
+ CaptainsChestGUID = 0;
+ CaptainGUID = 0;
+ IcewallGUID = 0;
+ IcewallTargetGUID = 0;
+
+ _teamInInstance = 0;
+ _waveCount = 0;
+ _introState = NOT_STARTED;
+ _frostswornGeneralState = NOT_STARTED;
+
+ events.Reset();
+ }
- void OnPlayerEnter(Player* player) override
- {
- if (!_teamInInstance)
- _teamInInstance = player->GetTeam();
- }
+ void OnPlayerEnter(Player* player) override
+ {
+ if (!_teamInInstance)
+ _teamInInstance = player->GetTeam();
- void OnCreatureCreate(Creature* creature) override
- {
- if (!_teamInInstance)
+ if (GetBossState(DATA_MARWYN) == DONE)
+ {
+ SpawnGunship();
+
+ if (!JainaOrSylvanasEscapeGUID && GetBossState(DATA_THE_LICH_KING_ESCAPE) != DONE)
+ SpawnEscapeEvent();
+ }
+ }
+
+ void OnCreatureCreate(Creature* creature) override
{
- Map::PlayerList const& players = instance->GetPlayers();
- if (!players.isEmpty())
- if (Player* player = players.begin()->GetSource())
- _teamInInstance = player->GetTeam();
+ switch (creature->GetEntry())
+ {
+ case NPC_JAINA_INTRO:
+ case NPC_SYLVANAS_INTRO:
+ JainaOrSylvanasIntroGUID = creature->GetGUID();
+ break;
+ case NPC_KORELN:
+ case NPC_LORALEN:
+ if (GetBossState(DATA_MARWYN) != DONE)
+ creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
+ KorelnOrLoralenGUID = creature->GetGUID();
+ break;
+ case NPC_THE_LICH_KING_INTRO:
+ TheLichkingIntroGUID = creature->GetGUID();
+ break;
+ case NPC_FALRIC:
+ FalricGUID = creature->GetGUID();
+ break;
+ case NPC_MARWYN:
+ MarwynGUID = creature->GetGUID();
+ break;
+ case NPC_FROSTMOUNRE_ALTAR_BUNNY:
+ FrostmourneAltarBunnyGUID = creature->GetGUID();
+ break;
+ case NPC_FROSTSWORN_GENERAL:
+ FrostswornGeneralGUID = creature->GetGUID();
+ if (GetBossState(DATA_MARWYN) == DONE)
+ creature->SetPhaseMask(1, true);
+ break;
+ case NPC_JAINA_ESCAPE:
+ case NPC_SYLVANAS_ESCAPE:
+ JainaOrSylvanasEscapeGUID = creature->GetGUID();
+ break;
+ case NPC_THE_LICH_KING_ESCAPE:
+ TheLichKingEscapeGUID = creature->GetGUID();
+ break;
+ case NPC_JUSTIN_BARTLETT:
+ case NPC_KORM_BLACKSCAR:
+ CaptainGUID = creature->GetGUID();
+ break;
+ case NPC_WORLD_TRIGGER:
+ if (!creature->GetTransport())
+ break;
+ // no break
+ case NPC_GUNSHIP_CANNON_HORDE:
+ GunshipCannonGUIDs.insert(creature->GetGUID());
+ break;
+ case NPC_ICE_WALL_TARGET:
+ IcewallTargetGUID = creature->GetGUID();
+ break;
+ default:
+ break;
+ }
}
- switch (creature->GetEntry())
+ void OnCreatureRemove(Creature* creature) override
{
- case NPC_JAINA_PART1:
- case NPC_SYLVANAS_PART1:
- _jainaOrSylvanasPart1GUID = creature->GetGUID();
- break;
- case NPC_FALRIC:
- _falricGUID = creature->GetGUID();
- break;
- case NPC_MARWYN:
- _marwynGUID = creature->GetGUID();
- break;
- case NPC_FROSTWORN_GENERAL:
- _frostwornGeneralGUID = creature->GetGUID();
- if (GetBossState(DATA_MARWYN_EVENT) == DONE)
- if (Creature* general = instance->GetCreature(_frostwornGeneralGUID))
- general->SetPhaseMask(1, true);
- break;
- case NPC_JAINA_PART2:
- case NPC_SYLVANAS_PART2:
- _jainaOrSylvanasPart2GUID = creature->GetGUID();
- break;
+ switch (creature->GetEntry())
+ {
+ case NPC_WAVE_MERCENARY:
+ case NPC_WAVE_FOOTMAN:
+ case NPC_WAVE_RIFLEMAN:
+ case NPC_WAVE_PRIEST:
+ case NPC_WAVE_MAGE:
+ {
+ uint32 internalWaveId = creature->AI()->GetData(0);
+ waveGuidList[internalWaveId].erase(creature->GetGUID());
+ break;
+ }
+ case NPC_ICE_WALL_TARGET:
+ IcewallTargetGUID = 0;
+ break;
+ case NPC_WORLD_TRIGGER:
+ case NPC_GUNSHIP_CANNON_HORDE:
+ GunshipCannonGUIDs.erase(creature->GetGUID());
+ break;
+ default:
+ break;
+ }
}
- }
- void OnCreatureRemove(Creature* creature) override
- {
- switch (creature->GetEntry())
+ uint32 GetGameObjectEntry(uint32 /*guidLow*/, uint32 entry) override
{
- case NPC_WAVE_MERCENARY:
- case NPC_WAVE_FOOTMAN:
- case NPC_WAVE_RIFLEMAN:
- case NPC_WAVE_PRIEST:
- case NPC_WAVE_MAGE:
+ if (!_teamInInstance)
+ {
+ Map::PlayerList const& players = instance->GetPlayers();
+ if (!players.isEmpty())
+ if (Player* player = players.begin()->GetSource())
+ _teamInInstance = player->GetTeam();
+ }
+
+ switch (entry)
{
- uint32 internalWaveId = creature->AI()->GetData(0);
- waveGuidList[internalWaveId].erase(creature->GetGUID());
- break;
+ case GO_THE_CAPTAIN_CHEST_ALLIANCE_NORMAL:
+ case GO_THE_CAPTAIN_CHEST_ALLIANCE_HEROIC:
+ case GO_THE_SKYBREAKER_STAIRS:
+ if (_teamInInstance == HORDE)
+ return 0;
+ break;
+ case GO_THE_CAPTAIN_CHEST_HORDE_NORMAL:
+ case GO_THE_CAPTAIN_CHEST_HORDE_HEROIC:
+ case GO_ORGRIMS_HAMMER_STAIRS:
+ if (_teamInInstance == ALLIANCE)
+ return 0;
+ break;
+ default:
+ break;
}
+
+ return entry;
}
- }
- void OnGameObjectCreate(GameObject* go) override
- {
- switch (go->GetEntry())
+ void OnGameObjectCreate(GameObject* go) override
{
- case GO_FROSTMOURNE:
- _frostmourneGUID = go->GetGUID();
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
- HandleGameObject(0, false, go);
- if (GetData(DATA_INTRO_EVENT) == DONE)
- go->SetPhaseMask(2, true);
- break;
- case GO_ENTRANCE_DOOR:
- _entranceDoorGUID = go->GetGUID();
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
- HandleGameObject(0, true, go);
- break;
- case GO_FROSTWORN_DOOR:
- _frostwornDoorGUID = go->GetGUID();
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
- if (GetBossState(DATA_MARWYN_EVENT) == DONE)
- HandleGameObject(0, true, go);
- else
- HandleGameObject(0, false, go);
- break;
- case GO_ARTHAS_DOOR:
- _arthasDoorGUID = go->GetGUID();
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
- if (GetData(DATA_FROSWORN_EVENT) == DONE)
- HandleGameObject(0, true, go);
- else
+ switch (go->GetEntry())
+ {
+ case GO_FROSTMOURNE:
+ FrostmourneGUID = go->GetGUID();
+ if (GetData(DATA_INTRO_EVENT) == DONE)
+ go->SetPhaseMask(2, true);
+ break;
+ case GO_ENTRANCE_DOOR:
+ EntranceDoorGUID = go->GetGUID();
+ break;
+ case GO_IMPENETRABLE_DOOR:
+ ImpenetrableDoorGUID = go->GetGUID();
+ HandleGameObject(0, GetBossState(DATA_MARWYN) == DONE, go);
+ break;
+ case GO_SHADOW_THRONE_DOOR:
+ ShadowThroneDoorGUID = go->GetGUID();
+ HandleGameObject(0, GetData(DATA_FROSTSWORN_GENERAL) == DONE, go);
+ break;
+ case GO_CAVE_IN:
+ CaveInGUID = go->GetGUID();
+ break;
+ case GO_THE_SKYBREAKER:
+ case GO_ORGRIMS_HAMMER:
+ GunshipGUID = go->GetGUID();
+ break;
+ case GO_THE_SKYBREAKER_STAIRS:
+ case GO_ORGRIMS_HAMMER_STAIRS:
+ if (GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE)
+ go->SetRespawnTime(DAY);
+ GunshipStairGUIDs.insert(go->GetGUID());
+ break;
+ case GO_THE_CAPTAIN_CHEST_ALLIANCE_NORMAL:
+ case GO_THE_CAPTAIN_CHEST_HORDE_NORMAL:
+ case GO_THE_CAPTAIN_CHEST_ALLIANCE_HEROIC:
+ case GO_THE_CAPTAIN_CHEST_HORDE_HEROIC:
+ CaptainsChestGUID = go->GetGUID();
+ break;
+ case GO_ICE_WALL:
HandleGameObject(0, false, go);
- break;
- case GO_CAVE:
- _caveGUID = go->GetGUID();
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
- break;
+ IcewallGUID = go->GetGUID();
+ break;
+ default:
+ break;
+ }
}
- }
- void FillInitialWorldStates(WorldPacket& data) override
- {
- data << uint32(WORLD_STATE_HOR_WAVES_ENABLED) << uint32(0);
- data << uint32(WORLD_STATE_HOR_WAVE_COUNT) << uint32(0);
- }
-
- bool SetBossState(uint32 type, EncounterState state) override
- {
- if (!InstanceScript::SetBossState(type, state))
- return false;
-
- switch (type)
+ void OnGameObjectRemove(GameObject* go) override
{
- case DATA_FALRIC_EVENT:
- if (state == DONE)
- {
- ++_waveCount;
- events.ScheduleEvent(EVENT_NEXT_WAVE, 60000);
- }
- break;
- case DATA_MARWYN_EVENT:
- if (state == DONE)
- {
- HandleGameObject(_entranceDoorGUID, true);
- HandleGameObject(_frostwornDoorGUID, true);
- DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 0);
- if (Creature* general = instance->GetCreature(_frostwornGeneralGUID))
- general->SetPhaseMask(1, true);
- }
- break;
- case DATA_LICHKING_EVENT:
- default:
- break;
+ switch (go->GetEntry())
+ {
+ case GO_THE_SKYBREAKER_STAIRS:
+ case GO_ORGRIMS_HAMMER_STAIRS:
+ GunshipStairGUIDs.erase(go->GetGUID());
+ break;
+ default:
+ break;
+ }
}
- return true;
- }
+ void FillInitialWorldStates(WorldPacket& data) override
+ {
+ data << uint32(WORLD_STATE_HOR_WAVES_ENABLED) << uint32(_introState == DONE && GetBossState(DATA_MARWYN) != DONE);
+ data << uint32(WORLD_STATE_HOR_WAVE_COUNT) << uint32(_waveCount);
+ }
- void SetData(uint32 type, uint32 data) override
- {
- switch (type)
+ bool SetBossState(uint32 type, EncounterState state) override
{
- case DATA_INTRO_EVENT:
- if (data == IN_PROGRESS)
- {
- if (!_introEvent)
+ if (!InstanceScript::SetBossState(type, state))
+ return false;
+
+ switch (type)
+ {
+ case DATA_FALRIC:
+ if (state == DONE)
{
- if (_teamInInstance == ALLIANCE)
- instance->SummonCreature(NPC_JAINA_PART1, JainaSpawnPos);
- else
- instance->SummonCreature(NPC_SYLVANAS_PART1, SylvanasSpawnPos);
+ ++_waveCount;
+ events.ScheduleEvent(EVENT_NEXT_WAVE, 60000);
}
- }
- _introEvent = data;
- break;
- case DATA_WAVE_COUNT:
- if (_waveCount && data == NOT_STARTED)
- ProcessEvent(NULL, EVENT_DO_WIPE);
- break;
- case DATA_FROSWORN_EVENT:
- if (data == DONE)
- {
- HandleGameObject(_arthasDoorGUID, true);
- if (_teamInInstance == ALLIANCE)
- instance->SummonCreature(NPC_JAINA_PART2, JainaSpawnPos2);
- else
- instance->SummonCreature(NPC_SYLVANAS_PART2, SylvanasSpawnPos2);
- }
- _frostwornGeneral = data;
- break;
- case DATA_ESCAPE_EVENT:
- if (data == IN_PROGRESS)
- {
- if (!_escapeevent)
- if (Creature* jaina_or_sylvanas = instance->GetCreature(_jainaOrSylvanasPart2GUID))
- jaina_or_sylvanas->AI()->DoAction(ACTION_START_ESCAPING);
- }
- else if (data == NOT_STARTED)
- {
- if (Creature* jaina_or_sylvanas = instance->GetCreature(_jainaOrSylvanasPart2GUID))
- jaina_or_sylvanas->DespawnOrUnsummon(1);
- if (_teamInInstance == ALLIANCE)
- instance->SummonCreature(NPC_JAINA_PART2, JainaSpawnPos2);
- else
- instance->SummonCreature(NPC_SYLVANAS_PART2, SylvanasSpawnPos2);
- SetData(DATA_ESCAPE_EVENT,IN_PROGRESS);
- }
- _escapeevent = data;
- break;
- case DATA_SUMMONS:
- if (data == 0)
- {
- _mobsaticewall--;
- if (_mobsaticewall == 0)
+ break;
+ case DATA_MARWYN:
+ if (state == DONE)
{
- if (Creature* jaina_or_sylvanas = instance->GetCreature(_jainaOrSylvanasPart2GUID))
- jaina_or_sylvanas->AI()->DoAction(ACTION_WALL_BROKEN);
+ if (Creature* bunny = instance->GetCreature(FrostmourneAltarBunnyGUID))
+ bunny->CastSpell(bunny, SPELL_START_HALLS_OF_REFLECTION_QUEST_AE, true);
+
+ if (Creature* korelnOrLoralen = instance->GetCreature(KorelnOrLoralenGUID))
+ korelnOrLoralen->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
+
+ HandleGameObject(EntranceDoorGUID, true);
+ HandleGameObject(ImpenetrableDoorGUID, true);
+ DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 0);
+ if (Creature* general = instance->GetCreature(FrostswornGeneralGUID))
+ general->SetPhaseMask(1, true);
+
+ SpawnGunship();
+ SpawnEscapeEvent();
}
- }
- else if (data == 1)
- _mobsaticewall++;
- break;
+ break;
+ case DATA_THE_LICH_KING_ESCAPE:
+ switch (state)
+ {
+ case NOT_STARTED:
+ break;
+ case IN_PROGRESS:
+ if (Creature* jainaOrSylvanas = instance->GetCreature(JainaOrSylvanasEscapeGUID))
+ jainaOrSylvanas->AI()->DoAction(ACTION_START_PREFIGHT);
+ break;
+ case DONE:
+ if (GameObject* chest = instance->GetGameObject(CaptainsChestGUID))
+ chest->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN);
+
+ DoUseDoorOrButton(CaveInGUID, 15);
+
+ if (Creature* lichking = instance->GetCreature(TheLichKingEscapeGUID))
+ {
+ lichking->CastSpell((Unit*)NULL, SPELL_ACHIEV_CHECK, true);
+ lichking->DespawnOrUnsummon(1);
+ }
+ break;
+ case FAIL:
+ DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_NOT_RETREATING_EVENT);
+
+ if (Creature* jainaOrSylvanas = instance->GetCreature(JainaOrSylvanasEscapeGUID))
+ jainaOrSylvanas->DespawnOrUnsummon(10000);
+
+ if (Creature* icewallTarget = instance->GetCreature(IcewallTargetGUID))
+ icewallTarget->DespawnOrUnsummon();
+
+ if (GameObject* icewall = instance->GetGameObject(IcewallGUID))
+ icewall->Delete();
+
+ events.ScheduleEvent(EVENT_SPAWN_ESCAPE_EVENT, 30000);
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+
+ return true;
}
- SaveToDB();
- }
+ void SpawnGunship()
+ {
+ // don't spawn gunship twice
+ if (GunshipGUID)
+ return;
+ if (!_teamInInstance)
+ {
+ Map::PlayerList const& players = instance->GetPlayers();
+ if (!players.isEmpty())
+ if (Player* player = players.begin()->GetSource())
+ _teamInInstance = player->GetTeam();
+ }
- // wave scheduling,checked when wave npcs die
- void OnUnitDeath(Unit* unit) override
- {
- Creature* creature = unit->ToCreature();
- if (!creature)
- return;
+ if (Transport* gunship = sTransportMgr->CreateTransport(_teamInInstance == HORDE ? GO_ORGRIMS_HAMMER : GO_THE_SKYBREAKER, 0, instance))
+ gunship->EnableMovement(GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE);
+ }
- switch (creature->GetEntry())
+ void SpawnEscapeEvent()
{
- case NPC_WAVE_MERCENARY:
- case NPC_WAVE_FOOTMAN:
- case NPC_WAVE_RIFLEMAN:
- case NPC_WAVE_PRIEST:
- case NPC_WAVE_MAGE:
+ if (!_teamInInstance)
{
- uint32 deadNpcs = 0;
- uint32 waveId = creature->AI()->GetData(0);
- for (std::set<uint64>::const_iterator itr = waveGuidList[waveId].begin(); itr != waveGuidList[waveId].end(); ++itr)
- {
- Creature* npc = instance->GetCreature(*itr);
- if (!npc || !npc->IsAlive())
- ++deadNpcs;
- }
- // because the current npc returns IsAlive when OnUnitDeath happens
- // we check if the number of dead npcs is equal to the list-1
- if (deadNpcs == waveGuidList[waveId].size() - 1)
+ Map::PlayerList const& players = instance->GetPlayers();
+ if (!players.isEmpty())
+ if (Player* player = players.begin()->GetSource())
+ _teamInInstance = player->GetTeam();
+ }
+
+ if (_teamInInstance == ALLIANCE)
+ {
+ instance->SummonCreature(NPC_JAINA_ESCAPE, JainaSpawnPos2);
+ instance->SummonCreature(NPC_THE_LICH_KING_ESCAPE, TheLichKingEscapePosition[1]);
+ }
+ else
+ {
+ instance->SummonCreature(NPC_SYLVANAS_ESCAPE, SylvanasSpawnPos2);
+ instance->SummonCreature(NPC_THE_LICH_KING_ESCAPE, TheLichKingEscapePosition[0]);
+ }
+ }
+
+ void SetData(uint32 type, uint32 data) override
+ {
+ switch (type)
+ {
+ case DATA_INTRO_EVENT:
+ if (data == IN_PROGRESS)
+ {
+ if (_introState == NOT_STARTED)
+ {
+ if (_teamInInstance == ALLIANCE)
+ {
+ instance->SummonCreature(NPC_JAINA_INTRO, JainaSpawnPos);
+ instance->SummonCreature(NPC_KORELN, KorelnOrLoralenSpawnPos);
+ }
+ else
+ {
+ instance->SummonCreature(NPC_SYLVANAS_INTRO, SylvanasSpawnPos);
+ instance->SummonCreature(NPC_LORALEN, KorelnOrLoralenSpawnPos);
+ }
+ }
+ }
+ _introState = data;
+ break;
+ case DATA_WAVE_COUNT:
+ if (_waveCount && data == NOT_STARTED)
+ ProcessEvent(NULL, EVENT_DO_WIPE);
+ break;
+ case DATA_FROSTSWORN_GENERAL:
+ if (data == DONE)
+ HandleGameObject(ShadowThroneDoorGUID, true);
+ _frostswornGeneralState = data;
+ break;
+ default:
+ break;
+ }
+
+ SaveToDB();
+ }
+
+ // wave scheduling, checked when wave npcs die
+ void OnUnitDeath(Unit* unit) override
+ {
+ Creature* creature = unit->ToCreature();
+ if (!creature)
+ return;
+
+ switch (creature->GetEntry())
+ {
+ case NPC_WAVE_MERCENARY:
+ case NPC_WAVE_FOOTMAN:
+ case NPC_WAVE_RIFLEMAN:
+ case NPC_WAVE_PRIEST:
+ case NPC_WAVE_MAGE:
{
+ uint32 waveId = creature->AI()->GetData(0);
+ for (uint64 guid : waveGuidList[waveId])
+ {
+ if (Creature* npc = instance->GetCreature(guid))
+ if (npc->IsAlive())
+ return;
+ }
+
++_waveCount;
events.ScheduleEvent(EVENT_NEXT_WAVE, 3000);
+ break;
}
- break;
}
}
- }
- void Update(uint32 diff) override
- {
- if (!instance->HavePlayers())
- return;
+ void Update(uint32 diff) override
+ {
+ if (!instance->HavePlayers())
+ return;
- events.Update(diff);
+ events.Update(diff);
- switch (events.ExecuteEvent())
- {
- case EVENT_NEXT_WAVE:
- ProcessEvent(NULL, EVENT_ADD_WAVE);
- break;
+ switch (events.ExecuteEvent())
+ {
+ case EVENT_NEXT_WAVE:
+ ProcessEvent(NULL, EVENT_ADD_WAVE);
+ break;
+ case EVENT_SPAWN_ESCAPE_EVENT:
+ SpawnEscapeEvent();
+ break;
+ }
}
- }
- void ProcessEvent(WorldObject* /*go*/, uint32 eventId) override
- {
- switch (eventId)
+ void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) override
{
- // spawning all wave npcs at once
- case EVENT_SPAWN_WAVES:
- _waveCount = 1;
- DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1);
- DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount);
- {
- std::list<uint32> possibilityList, tempList;
- uint32 posIndex = 0;
+ switch (eventId)
+ {
+ // spawning all wave npcs at once
+ case EVENT_SPAWN_WAVES:
+ _waveCount = 1;
+ DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1);
+ DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount);
+ {
+ std::list<uint32> possibilityList, tempList;
+ uint32 posIndex = 0;
- possibilityList.push_back(NPC_WAVE_MERCENARY);
- possibilityList.push_back(NPC_WAVE_FOOTMAN);
- possibilityList.push_back(NPC_WAVE_RIFLEMAN);
- possibilityList.push_back(NPC_WAVE_PRIEST);
- possibilityList.push_back(NPC_WAVE_MAGE);
+ possibilityList.push_back(NPC_WAVE_MERCENARY);
+ possibilityList.push_back(NPC_WAVE_FOOTMAN);
+ possibilityList.push_back(NPC_WAVE_RIFLEMAN);
+ possibilityList.push_back(NPC_WAVE_PRIEST);
+ possibilityList.push_back(NPC_WAVE_MAGE);
- // iterate each wave
- for (uint8 i = 0; i < 8; ++i)
- {
- tempList = possibilityList;
+ // iterate each wave
+ for (uint8 i = 0; i < 8; ++i)
+ {
+ tempList = possibilityList;
- uint64 bossGuid = i <= 3 ? _falricGUID : _marwynGUID;
+ uint64 bossGuid = i <= 3 ? FalricGUID : MarwynGUID;
- if (!i)
- Trinity::Containers::RandomResizeList(tempList, 3);
- else if (i < 6 && i != 3)
- Trinity::Containers::RandomResizeList(tempList, 4);
+ if (!i)
+ Trinity::Containers::RandomResizeList(tempList, 3);
+ else if (i < 6 && i != 3)
+ Trinity::Containers::RandomResizeList(tempList, 4);
- for (std::list<uint32>::const_iterator itr = tempList.begin(); itr != tempList.end(); ++itr)
- {
- if (Creature* boss = instance->GetCreature(bossGuid))
+ for (uint32 entry : tempList)
{
- if (Creature* temp = boss->SummonCreature(*itr, SpawnPos[posIndex], TEMPSUMMON_DEAD_DESPAWN))
+ if (Creature* boss = instance->GetCreature(bossGuid))
{
- temp->AI()->SetData(0, i);
- waveGuidList[i].insert(temp->GetGUID());
+ if (Creature* temp = boss->SummonCreature(entry, SpawnPos[posIndex], TEMPSUMMON_DEAD_DESPAWN))
+ {
+ temp->AI()->SetData(0, i);
+ waveGuidList[i].insert(temp->GetGUID());
+ }
}
- }
- ++posIndex;
+ ++posIndex;
+ }
}
}
- }
- events.ScheduleEvent(EVENT_NEXT_WAVE, 5000);
- break;
- case EVENT_ADD_WAVE:
- DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1);
- DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount);
- HandleGameObject(_entranceDoorGUID, false);
-
- if (_waveCount % 5)
- {
- uint32 internalWaveId = _waveCount - ((_waveCount < 5) ? 1 : 2);
- for (std::set<uint64>::const_iterator itr = waveGuidList[internalWaveId].begin(); itr != waveGuidList[internalWaveId].end(); ++itr)
+ events.ScheduleEvent(EVENT_NEXT_WAVE, 5000);
+ break;
+ case EVENT_ADD_WAVE:
+ DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1);
+ DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount);
+ HandleGameObject(EntranceDoorGUID, false);
+
+ if (_waveCount % 5)
{
- if (Creature* temp = instance->GetCreature(*itr))
+ uint32 internalWaveId = _waveCount - ((_waveCount < 5) ? 1 : 2);
+ for (uint64 guid : waveGuidList[internalWaveId])
{
- temp->CastSpell(temp, SPELL_SPIRIT_ACTIVATE, true);
- temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC|UNIT_FLAG_NOT_SELECTABLE);
- temp->AI()->DoZoneInCombat(temp, 100.00f);
+ if (Creature* temp = instance->GetCreature(guid))
+ {
+ temp->CastSpell(temp, SPELL_SPIRIT_ACTIVATE, false);
+ temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE);
+ temp->AI()->DoZoneInCombat(temp, 100.00f);
+ }
}
}
- }
- else
- {
- uint32 bossIndex = (_waveCount / 5) - 1;
- if (GetBossState(DATA_FALRIC_EVENT + bossIndex) != DONE)
+ else
+ {
+ uint32 bossIndex = (_waveCount / 5) - 1;
+ if (GetBossState(DATA_FALRIC + bossIndex) != DONE)
+ {
+ if (Creature* boss = instance->GetCreature(bossIndex ? MarwynGUID : FalricGUID))
+ boss->AI()->DoAction(ACTION_ENTER_COMBAT);
+ }
+ else if (_waveCount != 10)
+ {
+ ++_waveCount;
+ events.ScheduleEvent(EVENT_NEXT_WAVE, 5000);
+ }
+ }
+ break;
+ case EVENT_DO_WIPE:
+ _waveCount = 0;
+ events.Reset();
+ DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1);
+ DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount);
+ HandleGameObject(EntranceDoorGUID, true);
+
+ if (Creature* falric = instance->GetCreature(FalricGUID))
+ falric->SetVisible(false);
+ if (Creature* marwyn = instance->GetCreature(MarwynGUID))
+ marwyn->SetVisible(false);
+ // despawn wave npcs
+ for (uint8 i = 0; i < 8; ++i)
{
- if (Creature* boss = instance->GetCreature(bossIndex ? _marwynGUID : _falricGUID))
- boss->AI()->DoAction(ACTION_ENTER_COMBAT);
+ for (uint64 guid : waveGuidList[i])
+ if (Creature* creature = instance->GetCreature(guid))
+ creature->DespawnOrUnsummon(1);
+ waveGuidList[i].clear();
}
- else if (_waveCount != 10)
+ break;
+ // Gunship Outro
+ case EVENT_GUNSHIP_ARRIVAL:
+ if (GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE)
+ break;
+
+ if (Transport* gunship = instance->GetTransport(GunshipGUID))
+ gunship->EnableMovement(false);
+
+ if (Creature* jainaOrSylvanas = instance->GetCreature(JainaOrSylvanasEscapeGUID))
+ jainaOrSylvanas->AI()->DoAction(ACTION_GUNSHIP_ARRIVAL);
+
+ if (Creature* captain = instance->GetCreature(CaptainGUID))
+ captain->AI()->Talk(SAY_CAPTAIN_FIRE);
+
+ for (uint64 guid : GunshipCannonGUIDs)
{
- ++_waveCount;
- events.ScheduleEvent(EVENT_NEXT_WAVE, 5000);
+ uint32 entry = GUID_ENPART(guid);
+ if ((entry == NPC_WORLD_TRIGGER && _teamInInstance == ALLIANCE) || (entry == NPC_GUNSHIP_CANNON_HORDE && _teamInInstance == HORDE))
+ if (Creature* cannon = instance->GetCreature(guid))
+ cannon->CastSpell(cannon, SPELL_GUNSHIP_CANNON_FIRE, true);
}
- }
- break;
- case EVENT_DO_WIPE:
- _waveCount = 0;
- events.Reset();
- DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1);
- DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount);
- HandleGameObject(_entranceDoorGUID, true);
-
- if (Creature* falric = instance->GetCreature(_falricGUID))
- falric->SetVisible(false);
- if (Creature* marwyn = instance->GetCreature(_marwynGUID))
- marwyn->SetVisible(false);
- //despawn wave npcs
- for (uint8 i = 0; i < 8; ++i)
- {
- for (std::set<uint64>::const_iterator itr = waveGuidList[i].begin(); itr != waveGuidList[i].end(); ++itr)
- if (Creature* creature = instance->GetCreature(*itr))
- creature->DespawnOrUnsummon(1);
- waveGuidList[i].clear();
- }
- break;
+ break;
+ case EVENT_GUNSHIP_ARRIVAL_2:
+ if (Transport* gunship = instance->GetTransport(GunshipGUID))
+ gunship->EnableMovement(false);
+
+ for (uint64 guid : GunshipStairGUIDs)
+ if (GameObject* stairs = instance->GetGameObject(guid))
+ stairs->SetRespawnTime(DAY);
+
+ if (Creature* jainaOrSylvanas = instance->GetCreature(JainaOrSylvanasEscapeGUID))
+ jainaOrSylvanas->AI()->DoAction(ACTION_GUNSHIP_ARRIVAL_2);
+
+ if (Creature* captain = instance->GetCreature(CaptainGUID))
+ captain->AI()->Talk(SAY_CAPTAIN_FINAL);
+
+ break;
+ default:
+ break;
+ }
}
- }
- uint32 GetData(uint32 type) const override
- {
- switch (type)
+ uint32 GetData(uint32 type) const override
{
- case DATA_WAVE_COUNT:
- return _waveCount;
- case DATA_TEAM_IN_INSTANCE:
- return _teamInInstance;
- case DATA_INTRO_EVENT:
- return _introEvent;
- case DATA_FROSWORN_EVENT:
- return _frostwornGeneral;
- case DATA_ESCAPE_EVENT:
- return _escapeevent;
- case DATA_SUMMONS:
- return _mobsaticewall;
- default:
- break;
- }
+ switch (type)
+ {
+ case DATA_WAVE_COUNT:
+ return _waveCount;
+ case DATA_TEAM_IN_INSTANCE:
+ return _teamInInstance;
+ case DATA_INTRO_EVENT:
+ return _introState;
+ case DATA_FROSTSWORN_GENERAL:
+ return _frostswornGeneralState;
+ default:
+ break;
+ }
- return 0;
- }
+ return 0;
+ }
- uint64 GetData64(uint32 type) const override
- {
- switch (type)
+ uint64 GetData64(uint32 type) const override
{
- case DATA_FALRIC_EVENT:
- return _falricGUID;
- case DATA_MARWYN_EVENT:
- return _marwynGUID;
- case DATA_FROSWORN_EVENT:
- return _frostwornGeneralGUID;
- case DATA_FROSTWORN_DOOR:
- return _frostwornDoorGUID;
- case DATA_FROSTMOURNE:
- return _frostmourneGUID;
- case DATA_ESCAPE_LEADER:
- return _jainaOrSylvanasPart2GUID;
- case DATA_CAVE_IN:
- return _caveGUID;
- default:
- break;
- }
+ switch (type)
+ {
+ case DATA_FALRIC:
+ return FalricGUID;
+ case DATA_MARWYN:
+ return MarwynGUID;
+ case DATA_FROSTSWORN_GENERAL:
+ return FrostswornGeneralGUID;
+ case DATA_IMPENETRABLE_DOOR:
+ return ImpenetrableDoorGUID;
+ case DATA_FROSTMOURNE:
+ return FrostmourneGUID;
+ case DATA_ESCAPE_LEADER:
+ return JainaOrSylvanasEscapeGUID;
+ case DATA_KORELN_LORALEN:
+ return KorelnOrLoralenGUID;
+ case DATA_THE_LICH_KING_ESCAPE:
+ return TheLichKingEscapeGUID;
+ case DATA_GUNSHIP:
+ return GunshipGUID;
+ case DATA_ICEWALL:
+ return IcewallGUID;
+ case DATA_ICEWALL_TARGET:
+ return IcewallTargetGUID;
+ default:
+ break;
+ }
- return 0;
- }
+ return 0;
+ }
- std::string GetSaveData() override
- {
- OUT_SAVE_INST_DATA;
+ std::string GetSaveData() override
+ {
+ OUT_SAVE_INST_DATA;
- std::ostringstream saveStream;
- saveStream << "H R " << GetBossSaveData() << _introEvent << ' ' << _frostwornGeneral << ' ' << _escapeevent;
+ std::ostringstream saveStream;
+ saveStream << "H R " << GetBossSaveData() << _introState << ' ' << _frostswornGeneralState;
- OUT_SAVE_INST_DATA_COMPLETE;
- return saveStream.str();
- }
+ OUT_SAVE_INST_DATA_COMPLETE;
+ return saveStream.str();
+ }
- void Load(char const* in) override
- {
- if (!in)
+ void Load(char const* in) override
{
- OUT_LOAD_INST_DATA_FAIL;
- return;
- }
+ if (!in)
+ {
+ OUT_LOAD_INST_DATA_FAIL;
+ return;
+ }
- OUT_LOAD_INST_DATA(in);
+ OUT_LOAD_INST_DATA(in);
- char dataHead1, dataHead2;
+ char dataHead1, dataHead2;
- std::istringstream loadStream(in);
- loadStream >> dataHead1 >> dataHead2;
+ std::istringstream loadStream(in);
+ loadStream >> dataHead1 >> dataHead2;
- if (dataHead1 == 'H' && dataHead2 == 'R')
- {
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
+ if (dataHead1 == 'H' && dataHead2 == 'R')
{
- uint32 tmpState;
- loadStream >> tmpState;
- if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
- tmpState = NOT_STARTED;
+ for (uint8 i = 0; i < EncounterCount; ++i)
+ {
+ uint32 tmpState;
+ loadStream >> tmpState;
+ if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
+ tmpState = NOT_STARTED;
- SetBossState(i, EncounterState(tmpState));
- }
+ SetBossState(i, EncounterState(tmpState));
+ }
- uint32 temp = 0;
- loadStream >> temp;
- if (temp == DONE)
- SetData(DATA_INTRO_EVENT, DONE);
- else
- SetData(DATA_INTRO_EVENT, NOT_STARTED);
+ uint32 temp = 0;
+ loadStream >> temp;
+ if (temp == DONE)
+ SetData(DATA_INTRO_EVENT, DONE);
+ else
+ SetData(DATA_INTRO_EVENT, NOT_STARTED);
- loadStream >> temp;
- if (temp == DONE)
- SetData(DATA_FROSWORN_EVENT, DONE);
+ loadStream >> temp;
+ if (temp == DONE)
+ SetData(DATA_FROSTSWORN_GENERAL, DONE);
+ else
+ SetData(DATA_FROSTSWORN_GENERAL, NOT_STARTED);
+ }
else
- SetData(DATA_FROSWORN_EVENT, NOT_STARTED);
+ OUT_LOAD_INST_DATA_FAIL;
- loadStream >> temp;
- if (temp == DONE)
- SetData(DATA_ESCAPE_EVENT, DONE);
- else
- SetData(DATA_ESCAPE_EVENT, NOT_STARTED);
+ OUT_LOAD_INST_DATA_COMPLETE;
}
- else
- OUT_LOAD_INST_DATA_FAIL;
- OUT_LOAD_INST_DATA_COMPLETE;
+ private:
+ uint64 JainaOrSylvanasIntroGUID; // unused
+ uint64 KorelnOrLoralenGUID;
+ uint64 TheLichkingIntroGUID; // unused
+ uint64 FalricGUID;
+ uint64 MarwynGUID;
+ uint64 FrostmourneAltarBunnyGUID;
+ uint64 FrostswornGeneralGUID;
+ uint64 JainaOrSylvanasEscapeGUID;
+ uint64 TheLichKingEscapeGUID;
+
+ uint64 FrostmourneGUID;
+ uint64 EntranceDoorGUID;
+ uint64 ImpenetrableDoorGUID;
+ uint64 ShadowThroneDoorGUID;
+ uint64 CaveInGUID;
+
+ uint32 _teamInInstance;
+ uint32 _waveCount;
+ uint32 _introState;
+ uint32 _frostswornGeneralState;
+
+ EventMap events;
+ std::set<uint64> waveGuidList[8];
+
+ uint64 GunshipGUID;
+ uint64 CaptainsChestGUID;
+ uint64 CaptainGUID;
+ uint64 IcewallGUID;
+ uint64 IcewallTargetGUID;
+
+ std::set<uint64> GunshipCannonGUIDs;
+ std::set<uint64> GunshipStairGUIDs;
+ };
+
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
+ {
+ return new instance_halls_of_reflection_InstanceMapScript(map);
}
-
- private:
- uint64 _falricGUID;
- uint64 _marwynGUID;
- uint64 _jainaOrSylvanasPart1GUID;
- uint64 _jainaOrSylvanasPart2GUID;
- uint64 _lichkingPart1GUID;
- uint64 _frostwornGeneralGUID;
-
- uint64 _frostmourneGUID;
- uint64 _entranceDoorGUID;
- uint64 _frostwornDoorGUID;
- uint64 _arthasDoorGUID;
- uint64 _escapeDoorGUID;
- uint64 _caveGUID;
-
- uint32 _teamInInstance;
- uint32 _waveCount;
- uint32 _introEvent;
- uint32 _frostwornGeneral;
- uint32 _escapeevent;
- uint32 _mobsaticewall;
-
- EventMap events;
-
- std::set<uint64> waveGuidList[8];
- };
-
- InstanceScript* GetInstanceScript(InstanceMap* map) const override
- {
- return new instance_halls_of_reflection_InstanceMapScript(map);
- }
};
void AddSC_instance_halls_of_reflection()
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp
index 9cbd296d69e..783f9e245c8 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp
@@ -113,7 +113,7 @@ class boss_garfrost : public CreatureScript
Talk(SAY_DEATH);
me->RemoveAllGameObjects();
- if (Creature* tyrannus = me->GetCreature(*me, instance->GetData64(DATA_TYRANNUS)))
+ if (Creature* tyrannus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_TYRANNUS)))
tyrannus->AI()->Talk(SAY_TYRANNUS_DEATH);
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
index 26ab1f61ae8..1c126bc54fd 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
@@ -362,7 +362,7 @@ class boss_krick : public CreatureScript
{
case EVENT_OUTRO_1:
{
- if (Creature* temp = me->GetCreature(*me, _instanceScript->GetData64(DATA_JAINA_SYLVANAS_1)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, _instanceScript->GetData64(DATA_JAINA_SYLVANAS_1)))
temp->DespawnOrUnsummon();
Creature* jainaOrSylvanas = NULL;
@@ -410,7 +410,7 @@ class boss_krick : public CreatureScript
_events.ScheduleEvent(EVENT_OUTRO_6, 1000);
break;
case EVENT_OUTRO_6:
- if (Creature* tyrannus = me->GetCreature(*me, _instanceScript->GetData64(DATA_TYRANNUS_EVENT)))
+ if (Creature* tyrannus = ObjectAccessor::GetCreature(*me, _instanceScript->GetData64(DATA_TYRANNUS_EVENT)))
{
tyrannus->SetSpeed(MOVE_FLIGHT, 3.5f, true);
tyrannus->GetMotionMaster()->MovePoint(1, outroPos[4]);
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
index a501bf4ea55..c4f46136bd9 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
@@ -25,12 +25,12 @@
enum Yells
{
- //Gorkun
+ // Gorkun
SAY_GORKUN_INTRO_2 = 0,
SAY_GORKUN_OUTRO_1 = 1,
SAY_GORKUN_OUTRO_2 = 2,
- //Tyrannus
+ // Tyrannus
SAY_AMBUSH_1 = 3,
SAY_AMBUSH_2 = 4,
SAY_GAUNTLET_START = 5,
@@ -44,12 +44,12 @@ enum Yells
SAY_DARK_MIGHT_1 = 13,
SAY_DARK_MIGHT_2 = 14,
- //Jaina
+ // Jaina
SAY_JAYNA_OUTRO_3 = 3,
SAY_JAYNA_OUTRO_4 = 4,
SAY_JAYNA_OUTRO_5 = 5,
- //Sylvanas
+ // Sylvanas
SAY_SYLVANAS_OUTRO_3 = 3,
SAY_SYLVANAS_OUTRO_4 = 4
};
@@ -121,7 +121,7 @@ static const Position rimefangPos[10] =
{1012.601f, 142.4965f, 665.0453f, 0.000000f},
};
-static const Position miscPos = {1018.376f, 167.2495f, 628.2811f, 0.000000f}; //tyrannus combat start position
+static Position const miscPos = { 1018.376f, 167.2495f, 628.2811f, 0.000000f }; // tyrannus combat start position
class boss_tyrannus : public CreatureScript
{
@@ -235,7 +235,7 @@ class boss_tyrannus : public CreatureScript
me->GetMotionMaster()->MovePoint(0, miscPos);
break;
case EVENT_COMBAT_START:
- if (Creature* rimefang = me->GetCreature(*me, instance->GetData64(DATA_RIMEFANG)))
+ if (Creature* rimefang = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_RIMEFANG)))
rimefang->AI()->DoAction(ACTION_START_RIMEFANG); //set rimefang also infight
events.SetPhase(PHASE_COMBAT);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -357,7 +357,7 @@ class boss_rimefang : public CreatureScript
_events.ScheduleEvent(EVENT_ICY_BLAST, 15000, 0, PHASE_COMBAT);
break;
case EVENT_HOARFROST:
- if (Unit* target = me->GetUnit(*me, _hoarfrostTargetGUID))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, _hoarfrostTargetGUID))
{
DoCast(target, SPELL_HOARFROST);
_hoarfrostTargetGUID = 0;
@@ -490,6 +490,43 @@ class spell_tyrannus_mark_of_rimefang : public SpellScriptLoader
}
};
+// 69232 - Icy Blast
+class spell_tyrannus_rimefang_icy_blast : public SpellScriptLoader
+{
+ public:
+ spell_tyrannus_rimefang_icy_blast() : SpellScriptLoader("spell_tyrannus_rimefang_icy_blast") { }
+
+ class spell_tyrannus_rimefang_icy_blast_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_tyrannus_rimefang_icy_blast_SpellScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_ICY_BLAST_AURA))
+ return false;
+ return true;
+ }
+
+ void HandleTriggerMissile(SpellEffIndex effIndex)
+ {
+ PreventHitDefaultEffect(effIndex);
+ if (Position const* pos = GetHitDest())
+ if (TempSummon* summon = GetCaster()->SummonCreature(NPC_ICY_BLAST, *pos, TEMPSUMMON_TIMED_DESPAWN, 60000))
+ summon->CastSpell(summon, SPELL_ICY_BLAST_AURA, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_tyrannus_rimefang_icy_blast_SpellScript::HandleTriggerMissile, EFFECT_1, SPELL_EFFECT_TRIGGER_MISSILE);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_tyrannus_rimefang_icy_blast_SpellScript();
+ }
+};
+
class at_tyrannus_event_starter : public AreaTriggerScript
{
public:
@@ -518,5 +555,6 @@ void AddSC_boss_tyrannus()
new boss_rimefang();
new spell_tyrannus_overlord_brand();
new spell_tyrannus_mark_of_rimefang();
+ new spell_tyrannus_rimefang_icy_blast();
new at_tyrannus_event_starter();
}
diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp
index f0affa66d0f..b02a319abdc 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp
@@ -278,7 +278,7 @@ class boss_drakkari_elemental : public CreatureScript
if (killer == me)
return;
- if (Creature* colossus = Unit::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))
+ if (Creature* colossus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))
killer->Kill(colossus);
}
@@ -314,7 +314,7 @@ class boss_drakkari_elemental : public CreatureScript
{
case ACTION_RETURN_TO_COLOSSUS:
DoCast(SPELL_SURGE_VISUAL);
- if (Creature* colossus = Unit::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))
+ if (Creature* colossus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))
// what if the elemental is more than 80 yards from drakkari colossus ?
DoCast(colossus, SPELL_MERGE, true);
break;
@@ -325,7 +325,7 @@ class boss_drakkari_elemental : public CreatureScript
{
if (HealthBelowPct(50) && instance)
{
- if (Creature* colossus = Unit::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))
+ if (Creature* colossus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))
{
if (colossus->AI()->GetData(DATA_COLOSSUS_PHASE) == COLOSSUS_PHASE_FIRST_ELEMENTAL_SUMMON)
{
@@ -423,7 +423,7 @@ public:
if (id == 1)
{
- if (Creature* colossus = Unit::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))
+ if (Creature* colossus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))
{
colossus->AI()->DoAction(ACTION_UNFREEZE_COLOSSUS);
if (!colossus->AI()->GetData(DATA_INTRO_DONE))
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
index 9847d7191c6..4e45d72cadf 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
@@ -345,7 +345,7 @@ class npc_stinky_icc : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
- if (Creature* festergut = me->GetCreature(*me, _instance->GetData64(DATA_FESTERGUT)))
+ if (Creature* festergut = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FESTERGUT)))
if (festergut->IsAlive())
festergut->AI()->Talk(SAY_STINKY_DEAD);
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
index c408c486b30..3bf8fd8d305 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
@@ -372,7 +372,7 @@ class boss_professor_putricide : public CreatureScript
instance->SetBossState(DATA_FESTERGUT, IN_PROGRESS); // needed here for delayed gate close
me->SetSpeed(MOVE_RUN, _baseSpeed, true);
DoAction(ACTION_FESTERGUT_GAS);
- if (Creature* festergut = Unit::GetCreature(*me, instance->GetData64(DATA_FESTERGUT)))
+ if (Creature* festergut = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_FESTERGUT)))
festergut->CastSpell(festergut, SPELL_GASEOUS_BLIGHT_LARGE, false, NULL, NULL, festergut->GetGUID());
break;
case POINT_ROTFACE:
@@ -442,7 +442,7 @@ class boss_professor_putricide : public CreatureScript
_oozeFloodStage = 0;
DoZoneInCombat(me);
// init random sequence of floods
- if (Creature* rotface = Unit::GetCreature(*me, instance->GetData64(DATA_ROTFACE)))
+ if (Creature* rotface = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ROTFACE)))
{
std::list<Creature*> list;
GetCreatureListWithEntryInGrid(list, rotface, NPC_PUDDLE_STALKER, 50.0f);
@@ -469,7 +469,7 @@ class boss_professor_putricide : public CreatureScript
}
case ACTION_ROTFACE_OOZE:
Talk(SAY_ROTFACE_OOZE_FLOOD);
- if (Creature* dummy = Unit::GetCreature(*me, _oozeFloodDummyGUIDs[_oozeFloodStage]))
+ if (Creature* dummy = ObjectAccessor::GetCreature(*me, _oozeFloodDummyGUIDs[_oozeFloodStage]))
dummy->CastSpell(dummy, oozeFloodSpells[_oozeFloodStage], true, NULL, NULL, me->GetGUID()); // cast from self for LoS (with prof's GUID for logs)
if (++_oozeFloodStage == 4)
_oozeFloodStage = 0;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
index 8766781de7c..c1ee616218c 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
@@ -126,7 +126,7 @@ class boss_rotface : public CreatureScript
me->setActive(true);
Talk(SAY_AGGRO);
- if (Creature* professor = Unit::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
+ if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
professor->AI()->DoAction(ACTION_ROTFACE_COMBAT);
DoZoneInCombat();
@@ -138,7 +138,7 @@ class boss_rotface : public CreatureScript
instance->DoRemoveAurasDueToSpellOnPlayers(MUTATED_INFECTION);
_JustDied();
Talk(SAY_DEATH);
- if (Creature* professor = Unit::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
+ if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
professor->AI()->DoAction(ACTION_ROTFACE_DEATH);
}
@@ -158,7 +158,7 @@ class boss_rotface : public CreatureScript
void EnterEvadeMode() override
{
ScriptedAI::EnterEvadeMode();
- if (Creature* professor = Unit::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
+ if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
professor->AI()->EnterEvadeMode();
}
@@ -176,7 +176,7 @@ class boss_rotface : public CreatureScript
void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() == NPC_VILE_GAS_STALKER)
- if (Creature* professor = Unit::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
+ if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
professor->CastSpell(summon, SPELL_VILE_GAS_H, true);
}
@@ -308,13 +308,13 @@ class npc_big_ooze : public CreatureScript
DoCast(me, SPELL_GREEN_ABOMINATION_HITTIN__YA_PROC, true);
events.ScheduleEvent(EVENT_STICKY_OOZE, 5000);
// register in Rotface's summons - not summoned with Rotface as owner
- if (Creature* rotface = Unit::GetCreature(*me, instance->GetData64(DATA_ROTFACE)))
+ if (Creature* rotface = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ROTFACE)))
rotface->AI()->JustSummoned(me);
}
void JustDied(Unit* /*killer*/) override
{
- if (Creature* rotface = Unit::GetCreature(*me, instance->GetData64(DATA_ROTFACE)))
+ if (Creature* rotface = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ROTFACE)))
rotface->AI()->SummonedCreatureDespawn(me);
me->DespawnOrUnsummon();
}
@@ -395,7 +395,7 @@ class npc_precious_icc : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
_summons.DespawnAll();
- if (Creature* rotface = Unit::GetCreature(*me, _instance->GetData64(DATA_ROTFACE)))
+ if (Creature* rotface = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ROTFACE)))
if (rotface->IsAlive())
rotface->AI()->Talk(SAY_PRECIOUS_DIES);
}
@@ -657,7 +657,7 @@ class spell_rotface_large_ooze_buff_combine : public SpellScriptLoader
GetCaster()->RemoveAurasDueToSpell(SPELL_LARGE_OOZE_BUFF_COMBINE);
GetCaster()->RemoveAurasDueToSpell(SPELL_LARGE_OOZE_COMBINE);
if (InstanceScript* instance = GetCaster()->GetInstanceScript())
- if (Creature* rotface = Unit::GetCreature(*GetCaster(), instance->GetData64(DATA_ROTFACE)))
+ if (Creature* rotface = ObjectAccessor::GetCreature(*GetCaster(), instance->GetData64(DATA_ROTFACE)))
if (rotface->IsAlive())
{
rotface->AI()->Talk(EMOTE_UNSTABLE_EXPLOSION);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
index 25cc47b358c..592c44940a4 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -1800,7 +1800,7 @@ class spell_icc_sprit_alarm : public SpellScriptLoader
}
if (GameObject* trap = GetCaster()->FindNearestGameObject(trapId, 5.0f))
- trap->SetRespawnTime(trap->GetGOInfo()->trap.autoCloseTime);
+ trap->SetRespawnTime(trap->GetGOInfo()->GetAutoCloseTime());
std::list<Creature*> wards;
GetCaster()->GetCreatureListWithEntryInGrid(wards, NPC_DEATHBOUND_WARD, 150.0f);
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
index 0543b0274b5..77486c37498 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
@@ -138,10 +138,10 @@ public:
bool DoEncounteraction(Unit* who, bool attack, bool reset, bool checkAllDead)
{
- Creature* Thane = Unit::GetCreature(*me, instance->GetData64(DATA_THANE));
- Creature* Lady = Unit::GetCreature(*me, instance->GetData64(DATA_LADY));
- Creature* Baron = Unit::GetCreature(*me, instance->GetData64(DATA_BARON));
- Creature* Sir = Unit::GetCreature(*me, instance->GetData64(DATA_SIR));
+ Creature* Thane = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_THANE));
+ Creature* Lady = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_LADY));
+ Creature* Baron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BARON));
+ Creature* Sir = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SIR));
if (Thane && Lady && Baron && Sir)
{
@@ -226,7 +226,7 @@ public:
movementCompleted = true;
me->SetReactState(REACT_AGGRESSIVE);
- Unit* eventStarter = Unit::GetUnit(*me, uiEventStarterGUID);
+ Unit* eventStarter = ObjectAccessor::GetUnit(*me, uiEventStarterGUID);
if (eventStarter && me->IsValidAttackTarget(eventStarter))
AttackStart(eventStarter);
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
index 29e435e2127..d973ce867f2 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
@@ -257,25 +257,25 @@ class boss_gothik : public CreatureScript
{
case NPC_LIVE_TRAINEE:
{
- if (Creature* liveTrigger = Unit::GetCreature(*me, LiveTriggerGUID[0]))
+ if (Creature* liveTrigger = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[0]))
DoSummon(NPC_LIVE_TRAINEE, liveTrigger, 1);
- if (Creature* liveTrigger1 = Unit::GetCreature(*me, LiveTriggerGUID[1]))
+ if (Creature* liveTrigger1 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[1]))
DoSummon(NPC_LIVE_TRAINEE, liveTrigger1, 1);
- if (Creature* liveTrigger2 = Unit::GetCreature(*me, LiveTriggerGUID[2]))
+ if (Creature* liveTrigger2 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[2]))
DoSummon(NPC_LIVE_TRAINEE, liveTrigger2, 1);
break;
}
case NPC_LIVE_KNIGHT:
{
- if (Creature* liveTrigger3 = Unit::GetCreature(*me, LiveTriggerGUID[3]))
+ if (Creature* liveTrigger3 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[3]))
DoSummon(NPC_LIVE_KNIGHT, liveTrigger3, 1);
- if (Creature* liveTrigger5 = Unit::GetCreature(*me, LiveTriggerGUID[5]))
+ if (Creature* liveTrigger5 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[5]))
DoSummon(NPC_LIVE_KNIGHT, liveTrigger5, 1);
break;
}
case NPC_LIVE_RIDER:
{
- if (Creature* liveTrigger4 = Unit::GetCreature(*me, LiveTriggerGUID[4]))
+ if (Creature* liveTrigger4 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[4]))
DoSummon(NPC_LIVE_RIDER, liveTrigger4, 1);
break;
}
@@ -287,21 +287,21 @@ class boss_gothik : public CreatureScript
{
case NPC_LIVE_TRAINEE:
{
- if (Creature* liveTrigger = Unit::GetCreature(*me, LiveTriggerGUID[4]))
+ if (Creature* liveTrigger = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[4]))
DoSummon(NPC_LIVE_TRAINEE, liveTrigger, 1);
- if (Creature* liveTrigger2 = Unit::GetCreature(*me, LiveTriggerGUID[4]))
+ if (Creature* liveTrigger2 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[4]))
DoSummon(NPC_LIVE_TRAINEE, liveTrigger2, 1);
break;
}
case NPC_LIVE_KNIGHT:
{
- if (Creature* liveTrigger5 = Unit::GetCreature(*me, LiveTriggerGUID[4]))
+ if (Creature* liveTrigger5 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[4]))
DoSummon(NPC_LIVE_KNIGHT, liveTrigger5, 1);
break;
}
case NPC_LIVE_RIDER:
{
- if (Creature* liveTrigger4 = Unit::GetCreature(*me, LiveTriggerGUID[4]))
+ if (Creature* liveTrigger4 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[4]))
DoSummon(NPC_LIVE_RIDER, liveTrigger4, 1);
break;
}
@@ -359,7 +359,7 @@ class boss_gothik : public CreatureScript
if (spellId && me->IsInCombat())
{
me->HandleEmoteCommand(EMOTE_ONESHOT_SPELL_CAST);
- if (Creature* pRandomDeadTrigger = Unit::GetCreature(*me, DeadTriggerGUID[rand() % POS_DEAD]))
+ if (Creature* pRandomDeadTrigger = ObjectAccessor::GetCreature(*me, DeadTriggerGUID[rand() % POS_DEAD]))
me->CastSpell(pRandomDeadTrigger, spellId, true);
}
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
index ce605987890..52723b591a2 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
@@ -169,14 +169,14 @@ public:
{
victimGUID = guid;
if (me->m_spells[0] && victimGUID)
- if (Unit* victim = Unit::GetUnit(*me, victimGUID))
+ if (Unit* victim = ObjectAccessor::GetUnit(*me, victimGUID))
victim->CastSpell(victim, me->m_spells[0], true, NULL, NULL, me->GetGUID());
}
void JustDied(Unit* /*killer*/) override
{
if (me->m_spells[0] && victimGUID)
- if (Unit* victim = Unit::GetUnit(*me, victimGUID))
+ if (Unit* victim = ObjectAccessor::GetUnit(*me, victimGUID))
victim->RemoveAurasDueToSpell(me->m_spells[0], me->GetGUID());
}
};
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
index 528b2fec348..406ca3963a4 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
@@ -123,11 +123,11 @@ public:
// Moreover, the adds may not yet be spawn. So just track down the status if mob is spawn
// and each mob will send its status at reset (meaning that it is alive)
checkFeugenAlive = false;
- if (Creature* pFeugen = me->GetCreature(*me, instance->GetData64(DATA_FEUGEN)))
+ if (Creature* pFeugen = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_FEUGEN)))
checkFeugenAlive = pFeugen->IsAlive();
checkStalaggAlive = false;
- if (Creature* pStalagg = me->GetCreature(*me, instance->GetData64(DATA_STALAGG)))
+ if (Creature* pStalagg = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_STALAGG)))
checkStalaggAlive = pStalagg->IsAlive();
if (!checkFeugenAlive && !checkStalaggAlive)
@@ -230,12 +230,12 @@ public:
{
if (!checkStalaggAlive)
{
- if (Creature* pStalagg = me->GetCreature(*me, instance->GetData64(DATA_STALAGG)))
+ if (Creature* pStalagg = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_STALAGG)))
pStalagg->Respawn();
}
else
{
- if (Creature* pFeugen = me->GetCreature(*me, instance->GetData64(DATA_FEUGEN)))
+ if (Creature* pFeugen = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_FEUGEN)))
pFeugen->Respawn();
}
}
@@ -300,7 +300,7 @@ public:
void Reset() override
{
- if (Creature* pThaddius = me->GetCreature(*me, instance->GetData64(DATA_THADDIUS)))
+ if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_THADDIUS)))
if (pThaddius->AI())
pThaddius->AI()->DoAction(ACTION_STALAGG_RESET);
powerSurgeTimer = urand(20000, 25000);
@@ -322,7 +322,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
Talk(SAY_STAL_DEATH);
- if (Creature* pThaddius = me->GetCreature(*me, instance->GetData64(DATA_THADDIUS)))
+ if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_THADDIUS)))
if (pThaddius->AI())
pThaddius->AI()->DoAction(ACTION_STALAGG_DIED);
}
@@ -334,7 +334,7 @@ public:
if (magneticPullTimer <= uiDiff)
{
- if (Creature* pFeugen = me->GetCreature(*me, instance->GetData64(DATA_FEUGEN)))
+ if (Creature* pFeugen = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_FEUGEN)))
{
Unit* pStalaggVictim = me->GetVictim();
Unit* pFeugenVictim = pFeugen->GetVictim();
@@ -391,7 +391,7 @@ public:
void Reset() override
{
- if (Creature* pThaddius = me->GetCreature(*me, instance->GetData64(DATA_THADDIUS)))
+ if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_THADDIUS)))
if (pThaddius->AI())
pThaddius->AI()->DoAction(ACTION_FEUGEN_RESET);
staticFieldTimer = 5000;
@@ -412,7 +412,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
Talk(SAY_FEUG_DEATH);
- if (Creature* pThaddius = me->GetCreature(*me, instance->GetData64(DATA_THADDIUS)))
+ if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_THADDIUS)))
if (pThaddius->AI())
pThaddius->AI()->DoAction(ACTION_FEUGEN_DIED);
}
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index 3f0fb2f93b1..192249955cf 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -1810,7 +1810,7 @@ public:
class spell_malygos_vortex_dummy_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_malygos_vortex_dummy_SpellScript)
+ PrepareSpellScript(spell_malygos_vortex_dummy_SpellScript);
bool Load() override
{
@@ -2282,7 +2282,7 @@ class spell_malygos_surge_of_power_warning_selector_25 : public SpellScriptLoade
class spell_malygos_surge_of_power_warning_selector_25_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_malygos_surge_of_power_warning_selector_25_SpellScript)
+ PrepareSpellScript(spell_malygos_surge_of_power_warning_selector_25_SpellScript);
bool Load() override
{
@@ -2348,7 +2348,7 @@ class spell_malygos_surge_of_power_25 : public SpellScriptLoader
class spell_malygos_surge_of_power_25_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_malygos_surge_of_power_25_SpellScript)
+ PrepareSpellScript(spell_malygos_surge_of_power_25_SpellScript);
bool Load() override
{
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp
index 0870614ba78..585da8e28d3 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp
@@ -299,7 +299,7 @@ class spell_varos_energize_core_area_enemy : public SpellScriptLoader
class spell_varos_energize_core_area_enemySpellScript : public SpellScript
{
- PrepareSpellScript(spell_varos_energize_core_area_enemySpellScript)
+ PrepareSpellScript(spell_varos_energize_core_area_enemySpellScript);
void FilterTargets(std::list<WorldObject*>& targets)
{
@@ -343,7 +343,7 @@ class spell_varos_energize_core_area_entry : public SpellScriptLoader
class spell_varos_energize_core_area_entrySpellScript : public SpellScript
{
- PrepareSpellScript(spell_varos_energize_core_area_entrySpellScript)
+ PrepareSpellScript(spell_varos_energize_core_area_entrySpellScript);
void FilterTargets(std::list<WorldObject*>& targets)
{
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
index 727060578c8..24d145f097f 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
@@ -164,7 +164,7 @@ public:
for (uint8 i = 0; i < 2; ++i)
{
- if (Creature* pStormforgedLieutenant = (Unit::GetCreature((*me), m_auiStormforgedLieutenantGUID[i])))
+ if (Creature* pStormforgedLieutenant = (ObjectAccessor::GetCreature((*me), m_auiStormforgedLieutenantGUID[i])))
{
if (!pStormforgedLieutenant->IsAlive())
pStormforgedLieutenant->Respawn();
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
index 880045b96ef..d0b8f75e711 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
@@ -164,7 +164,7 @@ public:
for (std::list<uint64>::const_iterator itr = m_lGolemGUIDList.begin(); itr != m_lGolemGUIDList.end(); ++itr)
{
- if (Creature* temp = Unit::GetCreature(*me, *itr))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, *itr))
{
if (temp->IsAlive())
temp->DespawnOrUnsummon();
@@ -181,7 +181,7 @@ public:
for (std::list<uint64>::const_iterator itr = m_lGolemGUIDList.begin(); itr != m_lGolemGUIDList.end(); ++itr)
{
- if (Creature* temp = Unit::GetCreature(*me, *itr))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, *itr))
{
// Only shatter brittle golems
if (temp->IsAlive() && temp->GetEntry() == NPC_BRITTLE_GOLEM)
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
index c81cd0b0b80..07cdfa3353c 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
@@ -15,14 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* Script Data Start
-SDName: Boss krystallus
-SDAuthor: LordVanMartin
-SD%Complete:
-SDComment:
-SDCategory:
-Script Data End */
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "SpellScript.h"
@@ -30,17 +22,13 @@ Script Data End */
enum Spells
{
- SPELL_BOULDER_TOSS = 50843,
- H_SPELL_BOULDER_TOSS = 59742,
- SPELL_GROUND_SPIKE = 59750,
- SPELL_GROUND_SLAM = 50827,
- SPELL_SHATTER = 50810,
- H_SPELL_SHATTER = 61546,
- SPELL_SHATTER_EFFECT = 50811,
- H_SPELL_SHATTER_EFFECT = 61547,
- SPELL_STONED = 50812,
- SPELL_STOMP = 48131,
- H_SPELL_STOMP = 59744
+ SPELL_BOULDER_TOSS = 50843,
+ SPELL_GROUND_SPIKE = 59750,
+ SPELL_GROUND_SLAM = 50827,
+ SPELL_SHATTER = 50810,
+ SPELL_SHATTER_EFFECT = 50811,
+ SPELL_STONED = 50812,
+ SPELL_STOMP = 48131
};
enum Yells
@@ -51,133 +39,103 @@ enum Yells
SAY_SHATTER = 3
};
-class boss_krystallus : public CreatureScript
+enum Events
{
-public:
- boss_krystallus() : CreatureScript("boss_krystallus") { }
-
- struct boss_krystallusAI : public ScriptedAI
- {
- boss_krystallusAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = creature->GetInstanceScript();
- }
-
- uint32 uiBoulderTossTimer;
- uint32 uiGroundSpikeTimer;
- uint32 uiGroundSlamTimer;
- uint32 uiShatterTimer;
- uint32 uiStompTimer;
-
- bool bIsSlam;
-
- InstanceScript* instance;
-
- void Reset() override
- {
- bIsSlam = false;
-
- uiBoulderTossTimer = urand(3000, 9000);
- uiGroundSpikeTimer = urand(9000, 14000);
- uiGroundSlamTimer = urand(15000, 18000);
- uiStompTimer = urand(20000, 29000);
- uiShatterTimer = 0;
-
- instance->SetBossState(DATA_KRYSTALLUS, NOT_STARTED);
- }
- void EnterCombat(Unit* /*who*/) override
- {
- Talk(SAY_AGGRO);
+ EVENT_BOULDER_TOSS = 1,
+ EVENT_GROUND_SPIKE,
+ EVENT_GROUND_SLAM,
+ EVENT_STOMP,
+ EVENT_SHATTER
+};
- instance->SetBossState(DATA_KRYSTALLUS, IN_PROGRESS);
- }
+class boss_krystallus : public CreatureScript
+{
+ public:
+ boss_krystallus() : CreatureScript("boss_krystallus") { }
- void UpdateAI(uint32 diff) override
+ struct boss_krystallusAI : public BossAI
{
- //Return since we have no target
- if (!UpdateVictim())
- return;
+ boss_krystallusAI(Creature* creature) : BossAI(creature, DATA_KRYSTALLUS) { }
- if (uiBoulderTossTimer <= diff)
+ void Reset() override
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- DoCast(target, SPELL_BOULDER_TOSS);
- uiBoulderTossTimer = urand(9000, 15000);
- } else uiBoulderTossTimer -= diff;
-
- if (uiGroundSpikeTimer <= diff)
- {
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- DoCast(target, SPELL_GROUND_SPIKE);
- uiGroundSpikeTimer = urand(12000, 17000);
- } else uiGroundSpikeTimer -= diff;
-
- if (uiStompTimer <= diff)
- {
- DoCast(me, SPELL_STOMP);
- uiStompTimer = urand(20000, 29000);
- } else uiStompTimer -= diff;
-
- if (uiGroundSlamTimer <= diff)
- {
- DoCast(me, SPELL_GROUND_SLAM);
- bIsSlam = true;
- uiShatterTimer = 10000;
- uiGroundSlamTimer = urand(15000, 18000);
- } else uiGroundSlamTimer -= diff;
+ _Reset();
+ }
- if (bIsSlam)
+ void EnterCombat(Unit* /*who*/) override
{
- if (uiShatterTimer <= diff)
- {
- DoCast(me, DUNGEON_MODE(SPELL_SHATTER, H_SPELL_SHATTER));
- } else uiShatterTimer -= diff;
+ Talk(SAY_AGGRO);
+ _EnterCombat();
+
+ events.ScheduleEvent(EVENT_BOULDER_TOSS, urand(3000, 9000));
+ events.ScheduleEvent(EVENT_GROUND_SLAM, urand(15000, 18000));
+ events.ScheduleEvent(EVENT_STOMP, urand(20000, 29000));
+ if (IsHeroic())
+ events.ScheduleEvent(EVENT_GROUND_SPIKE, urand(9000, 14000));
}
- DoMeleeAttackIfReady();
- }
-
- void JustDied(Unit* /*killer*/) override
- {
- Talk(SAY_DEATH);
-
- instance->SetBossState(DATA_KRYSTALLUS, DONE);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ // Return since we have no target
+ if (!UpdateVictim())
+ return;
- void KilledUnit(Unit* victim) override
- {
- if (victim->GetTypeId() != TYPEID_PLAYER)
- return;
+ events.Update(diff);
- Talk(SAY_KILL);
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- void SpellHitTarget(Unit* /*target*/, const SpellInfo* pSpell) override
- {
- //this part should be in the core
- if (pSpell->Id == SPELL_SHATTER || pSpell->Id == H_SPELL_SHATTER)
- {
- /// @todo we need eventmap to kill this stuff
- //clear this, if we are still performing
- if (bIsSlam)
+ while (uint32 eventId = events.ExecuteEvent())
{
- bIsSlam = false;
-
- //and correct movement, if not already
- if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() != CHASE_MOTION_TYPE)
+ switch (eventId)
{
- if (me->GetVictim())
- me->GetMotionMaster()->MoveChase(me->GetVictim());
+ case EVENT_BOULDER_TOSS:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50.0f, true))
+ DoCast(target, SPELL_BOULDER_TOSS);
+ events.ScheduleEvent(EVENT_BOULDER_TOSS, urand(9000, 15000));
+ break;
+ case EVENT_GROUND_SPIKE:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
+ DoCast(target, SPELL_GROUND_SPIKE);
+ events.ScheduleEvent(EVENT_GROUND_SPIKE, urand(12000, 17000));
+ break;
+ case EVENT_GROUND_SLAM:
+ DoCast(me, SPELL_GROUND_SLAM);
+ events.ScheduleEvent(EVENT_SHATTER, 10000);
+ events.ScheduleEvent(EVENT_GROUND_SLAM, urand(15000, 18000));
+ break;
+ case EVENT_STOMP:
+ DoCast(me, SPELL_STOMP);
+ events.ScheduleEvent(EVENT_STOMP, urand(20000, 29000));
+ break;
+ case EVENT_SHATTER:
+ DoCast(me, SPELL_SHATTER);
+ break;
+ default:
+ break;
}
}
+
+ DoMeleeAttackIfReady();
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ Talk(SAY_DEATH);
+ _JustDied();
}
- }
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetHallsOfStoneAI<boss_krystallusAI>(creature);
- }
+ void KilledUnit(Unit* victim) override
+ {
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_KILL);
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfStoneAI<boss_krystallusAI>(creature);
+ }
};
class spell_krystallus_shatter : public SpellScriptLoader
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
index f666f5d5874..cedf06a3154 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
@@ -211,7 +211,7 @@ public:
if (!KaddrakGUIDList.empty())
for (std::list<uint64>::const_iterator itr = KaddrakGUIDList.begin(); itr != KaddrakGUIDList.end(); ++itr)
{
- if (Creature* pKaddrak = Unit::GetCreature(*me, *itr))
+ if (Creature* pKaddrak = ObjectAccessor::GetCreature(*me, *itr))
{
if (pKaddrak->IsAlive())
pKaddrak->CastSpell(target, DUNGEON_MODE(SPELL_GLARE_OF_THE_TRIBUNAL, H_SPELL_GLARE_OF_THE_TRIBUNAL), true);
@@ -331,7 +331,7 @@ public:
return;
for (std::list<uint64>::const_iterator itr = lDwarfGUIDList.begin(); itr != lDwarfGUIDList.end(); ++itr)
{
- Creature* temp = Unit::GetCreature(*me, instance ? (*itr) : 0);
+ Creature* temp = ObjectAccessor::GetCreature(*me, instance ? (*itr) : 0);
if (temp && temp->IsAlive())
temp->DespawnOrUnsummon();
}
@@ -446,7 +446,7 @@ public:
JumpToNextStep(0);
break;
case 5:
- if (Creature* temp = (Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))))
+ if (Creature* temp = (ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))))
temp->AI()->Talk(SAY_EVENT_INTRO_3_ABED);
JumpToNextStep(8500);
break;
@@ -455,14 +455,14 @@ public:
JumpToNextStep(6500);
break;
case 7:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
temp->AI()->Talk(SAY_EVENT_A_2_KADD);
JumpToNextStep(12500);
break;
case 8:
Talk(SAY_EVENT_A_3);
instance->HandleGameObject(instance->GetData64(DATA_GO_KADDRAK), true);
- if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiControllerGUID))
CAST_AI(npc_tribuna_controller::npc_tribuna_controllerAI, temp->AI())->bKaddrakActivated = true;
JumpToNextStep(5000);
break;
@@ -476,7 +476,7 @@ public:
JumpToNextStep(6000);
break;
case 11:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
temp->AI()->Talk(SAY_EVENT_B_2_MARN);
SpawnDwarf(1);
JumpToNextStep(20000);
@@ -484,7 +484,7 @@ public:
case 12:
Talk(SAY_EVENT_B_3);
instance->HandleGameObject(instance->GetData64(DATA_GO_MARNAK), true);
- if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiControllerGUID))
CAST_AI(npc_tribuna_controller::npc_tribuna_controllerAI, temp->AI())->bMarnakActivated = true;
JumpToNextStep(10000);
break;
@@ -506,7 +506,7 @@ public:
JumpToNextStep(20000);
break;
case 17:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
temp->AI()->Talk(SAY_EVENT_C_2_ABED);
SpawnDwarf(1);
JumpToNextStep(20000);
@@ -514,7 +514,7 @@ public:
case 18:
Talk(SAY_EVENT_C_3);
instance->HandleGameObject(instance->GetData64(DATA_GO_ABEDNEUM), true);
- if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiControllerGUID))
CAST_AI(npc_tribuna_controller::npc_tribuna_controllerAI, temp->AI())->bAbedneumActivated = true;
JumpToNextStep(5000);
break;
@@ -532,7 +532,7 @@ public:
JumpToNextStep(20000);
break;
case 22:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
temp->AI()->Talk(SAY_EVENT_D_2_ABED);
SpawnDwarf(1);
JumpToNextStep(5000);
@@ -555,7 +555,7 @@ public:
JumpToNextStep(10000);
break;
case 27:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
temp->AI()->Talk(SAY_EVENT_D_4_ABED);
SpawnDwarf(1);
JumpToNextStep(10000);
@@ -565,7 +565,7 @@ public:
Talk(SAY_EVENT_END_01);
me->SetStandState(UNIT_STAND_STATE_STAND);
instance->HandleGameObject(instance->GetData64(DATA_GO_SKY_FLOOR), true);
- if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiControllerGUID))
temp->DealDamage(temp, temp->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
bIsBattle = true;
SetEscortPaused(false);
@@ -578,7 +578,7 @@ public:
JumpToNextStep(5500);
break;
case 30:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
temp->AI()->Talk(SAY_EVENT_END_03_ABED);
JumpToNextStep(8500);
break;
@@ -587,7 +587,7 @@ public:
JumpToNextStep(11500);
break;
case 32:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
temp->AI()->Talk(SAY_EVENT_END_05_ABED);
JumpToNextStep(11500);
break;
@@ -596,7 +596,7 @@ public:
JumpToNextStep(4500);
break;
case 34:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
temp->AI()->Talk(SAY_EVENT_END_07_ABED);
JumpToNextStep(22500);
break;
@@ -605,7 +605,7 @@ public:
JumpToNextStep(7500);
break;
case 36:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
temp->AI()->Talk(SAY_EVENT_END_09_KADD);
JumpToNextStep(18500);
break;
@@ -614,7 +614,7 @@ public:
JumpToNextStep(5500);
break;
case 38:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
temp->AI()->Talk(SAY_EVENT_END_11_KADD);
JumpToNextStep(20500);
break;
@@ -623,7 +623,7 @@ public:
JumpToNextStep(2500);
break;
case 40:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
temp->AI()->Talk(SAY_EVENT_END_13_KADD);
JumpToNextStep(19500);
break;
@@ -632,7 +632,7 @@ public:
JumpToNextStep(10500);
break;
case 42:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
temp->AI()->Talk(SAY_EVENT_END_15_MARN);
JumpToNextStep(6500);
break;
@@ -641,7 +641,7 @@ public:
JumpToNextStep(6500);
break;
case 44:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
temp->AI()->Talk(SAY_EVENT_END_17_MARN);
JumpToNextStep(25500);
break;
@@ -650,7 +650,7 @@ public:
JumpToNextStep(23500);
break;
case 46:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
temp->AI()->Talk(SAY_EVENT_END_19_MARN);
JumpToNextStep(3500);
break;
@@ -659,7 +659,7 @@ public:
JumpToNextStep(8500);
break;
case 48:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
temp->AI()->Talk(SAY_EVENT_END_21_ABED);
JumpToNextStep(5500);
break;
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
index 58df31a4471..011d1844adf 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
@@ -332,7 +332,7 @@ class boss_saronite_animus : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
- if (Creature* Vezax = me->GetCreature(*me, instance->GetData64(BOSS_VEZAX)))
+ if (Creature* Vezax = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_VEZAX)))
Vezax->AI()->DoAction(ACTION_ANIMUS_DIE);
}
@@ -427,7 +427,7 @@ class npc_saronite_vapors : public CreatureScript
DoCast(me, SPELL_SARONITE_VAPORS);
me->DespawnOrUnsummon(30000);
- if (Creature* Vezax = me->GetCreature(*me, instance->GetData64(BOSS_VEZAX)))
+ if (Creature* Vezax = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_VEZAX)))
Vezax->AI()->DoAction(ACTION_VAPORS_DIE);
}
}
@@ -494,13 +494,13 @@ class spell_general_vezax_mark_of_the_faceless_leech : public SpellScriptLoader
FinishCast(SPELL_FAILED_NO_VALID_TARGETS);
}
- void Register()
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_general_vezax_mark_of_the_faceless_leech_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const
+ SpellScript* GetSpellScript() const override
{
return new spell_general_vezax_mark_of_the_faceless_leech_SpellScript();
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
index ef9bd9a8b12..6be3586de28 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
@@ -399,7 +399,7 @@ class npc_scorch_ground : public CreatureScript
{
if (_heatTimer <= uiDiff)
{
- Creature* construct = me->GetCreature(*me, _constructGUID);
+ Creature* construct = ObjectAccessor::GetCreature(*me, _constructGUID);
if (construct && !construct->HasAura(SPELL_MOLTEN))
{
me->AddAura(SPELL_HEAT, construct);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
index e77350e2710..58969fd63c8 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
@@ -234,7 +234,7 @@ class boss_kologarn : public CreatureScript
// Victim gets 67351
if (eyebeamTarget)
{
- if (Unit* target = Unit::GetUnit(*summon, eyebeamTarget))
+ if (Unit* target = ObjectAccessor::GetUnit(*summon, eyebeamTarget))
{
summon->Attack(target, false);
summon->GetMotionMaster()->MoveChase(target);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
index cfa5429ea79..f284aacf996 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
@@ -89,7 +89,7 @@ class spell_ulduar_proximity_mines : public SpellScriptLoader
class spell_ulduar_proximity_minesSpellScript : public SpellScript
{
- PrepareSpellScript(spell_ulduar_proximity_minesSpellScript)
+ PrepareSpellScript(spell_ulduar_proximity_minesSpellScript);
void HandleScript(SpellEffIndex effIndex)
{
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
index c57c3b33d01..87192f39a5c 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
@@ -457,7 +457,7 @@ class npc_xt002_heart : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
- Creature* xt002 = _instance ? me->GetCreature(*me, _instance->GetData64(BOSS_XT002)) : NULL;
+ Creature* xt002 = _instance ? ObjectAccessor::GetCreature(*me, _instance->GetData64(BOSS_XT002)) : NULL;
if (!xt002 || !xt002->AI())
return;
@@ -503,7 +503,7 @@ class npc_scrapbot : public CreatureScript
_rangeCheckTimer = 500;
- if (Creature* pXT002 = me->GetCreature(*me, _instance->GetData64(BOSS_XT002)))
+ if (Creature* pXT002 = ObjectAccessor::GetCreature(*me, _instance->GetData64(BOSS_XT002)))
me->GetMotionMaster()->MoveFollow(pXT002, 0.0f, 0.0f);
}
@@ -511,7 +511,7 @@ class npc_scrapbot : public CreatureScript
{
if (_rangeCheckTimer <= diff)
{
- if (Creature* xt002 = me->GetCreature(*me, _instance->GetData64(BOSS_XT002)))
+ if (Creature* xt002 = ObjectAccessor::GetCreature(*me, _instance->GetData64(BOSS_XT002)))
{
if (me->IsWithinMeleeRange(xt002))
{
@@ -560,7 +560,7 @@ class npc_pummeller : public CreatureScript
_trampleTimer = TIMER_TRAMPLE;
_uppercutTimer = TIMER_UPPERCUT;
- if (Creature* xt002 = me->GetCreature(*me, _instance->GetData64(BOSS_XT002)))
+ if (Creature* xt002 = ObjectAccessor::GetCreature(*me, _instance->GetData64(BOSS_XT002)))
{
Position pos = xt002->GetPosition();
me->GetMotionMaster()->MovePoint(0, pos);
@@ -668,7 +668,7 @@ class npc_boombot : public CreatureScript
me->SetFloatValue(UNIT_FIELD_MAXDAMAGE, 18000.0f);
/// @todo proper waypoints?
- if (Creature* pXT002 = me->GetCreature(*me, _instance->GetData64(BOSS_XT002)))
+ if (Creature* pXT002 = ObjectAccessor::GetCreature(*me, _instance->GetData64(BOSS_XT002)))
me->GetMotionMaster()->MoveFollow(pXT002, 0.0f, 0.0f);
}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
index 4a5c0291ce0..41dd1a165f2 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
@@ -206,7 +206,7 @@ public:
Summons.DespawnAll();
me->SetSpeed(MOVE_FLIGHT, 3.0f);
- if ((Unit::GetCreature(*me, m_uiGraufGUID) == NULL) && !me->IsMounted())
+ if ((ObjectAccessor::GetCreature(*me, m_uiGraufGUID) == NULL) && !me->IsMounted())
me->SummonCreature(NPC_GRAUF, Location[0].GetPositionX(), Location[0].GetPositionY(), Location[0].GetPositionZ(), 3.0f);
instance->SetBossState(DATA_SKADI_THE_RUTHLESS, NOT_STARTED);
instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
@@ -217,7 +217,7 @@ public:
me->SetCanFly(false);
me->Dismount();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
- if (!Unit::GetCreature(*me, m_uiGraufGUID))
+ if (!ObjectAccessor::GetCreature(*me, m_uiGraufGUID))
me->SummonCreature(NPC_GRAUF, Location[0].GetPositionX(), Location[0].GetPositionY(), Location[0].GetPositionZ(), 3.0f);
}
@@ -469,7 +469,7 @@ public:
if (!instance)
return false;
- if (Creature* pSkadi = Unit::GetCreature(*go, instance->GetData64(DATA_SKADI_THE_RUTHLESS)))
+ if (Creature* pSkadi = ObjectAccessor::GetCreature(*go, instance->GetData64(DATA_SKADI_THE_RUTHLESS)))
player->CastSpell(pSkadi, SPELL_RAPID_FIRE, true);
return false;
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
index a33d02fb083..de4d6c32c97 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
@@ -369,7 +369,7 @@ public:
void DespawnBoatGhosts(uint64& m_uiCreatureGUID)
{
if (m_uiCreatureGUID)
- if (Creature* temp = Unit::GetCreature(*me, m_uiCreatureGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, m_uiCreatureGUID))
temp->DisappearAndDie();
m_uiCreatureGUID = 0;
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp
index 205030947d1..ea5c5b9ee48 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp
@@ -103,7 +103,7 @@ class boss_emalon : public CreatureScript
{
for (std::list<uint64>::const_iterator itr = summons.begin(); itr != summons.end(); ++itr)
{
- Creature* minion = Unit::GetCreature(*me, *itr);
+ Creature* minion = ObjectAccessor::GetCreature(*me, *itr);
if (minion && minion->IsAlive() && !minion->GetVictim() && minion->AI())
minion->AI()->AttackStart(who);
}
@@ -143,7 +143,7 @@ class boss_emalon : public CreatureScript
case EVENT_OVERCHARGE:
if (!summons.empty())
{
- Creature* minion = Unit::GetCreature(*me, Trinity::Containers::SelectRandomContainerElement(summons));
+ Creature* minion = ObjectAccessor::GetCreature(*me, Trinity::Containers::SelectRandomContainerElement(summons));
if (minion && minion->IsAlive())
{
minion->CastSpell(me, SPELL_OVERCHARGED, true);
diff --git a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
index 5cbd4cafffb..4aede5e5f46 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
@@ -242,7 +242,7 @@ public:
if (!m_waterElements.empty())
{
for (std::list<uint64>::const_iterator itr = m_waterElements.begin(); itr != m_waterElements.end(); ++itr)
- if (Creature* temp = Unit::GetCreature(*me, *itr))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, *itr))
if (temp->IsAlive())
{
bIsWaterElementsAlive = true;
@@ -362,7 +362,7 @@ public:
{
if (uiRangeCheck_Timer < uiDiff)
{
- if (Creature* pIchoron = Unit::GetCreature(*me, instance->GetData64(DATA_ICHORON)))
+ if (Creature* pIchoron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ICHORON)))
{
if (me->IsWithinDist(pIchoron, 2.0f, false))
{
@@ -379,7 +379,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
DoCast(me, SPELL_SPLASH);
- if (Creature* pIchoron = Unit::GetCreature(*me, instance->GetData64(DATA_ICHORON)))
+ if (Creature* pIchoron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ICHORON)))
if (pIchoron->AI())
pIchoron->AI()->DoAction(ACTION_WATER_ELEMENT_KILLED);
}
diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
index de08022b5ed..2bac444a558 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
@@ -254,7 +254,7 @@ public:
if (uiRangeCheck_Timer < uiDiff)
{
- if (Creature* pXevozz = Unit::GetCreature(*me, instance->GetData64(DATA_XEVOZZ)))
+ if (Creature* pXevozz = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_XEVOZZ)))
{
float fDistance = me->GetDistance2d(pXevozz);
if (fDistance <= 3)
diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
index a4f142e1c89..b623d5e6ddc 100644
--- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
+++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
@@ -535,7 +535,7 @@ public:
{
me->CastSpell(me, SABOTEUR_SHIELD_DISRUPTION, false);
me->DisappearAndDie();
- Creature* pSaboPort = Unit::GetCreature((*me), instance->GetData64(DATA_SABOTEUR_PORTAL));
+ Creature* pSaboPort = ObjectAccessor::GetCreature((*me), instance->GetData64(DATA_SABOTEUR_PORTAL));
if (pSaboPort)
pSaboPort->DisappearAndDie();
instance->SetData(DATA_START_BOSS_ENCOUNTER, 1);
diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp
index c226edf28b8..38d73e0673d 100644
--- a/src/server/scripts/Northrend/zone_borean_tundra.cpp
+++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp
@@ -1071,8 +1071,8 @@ public:
if (phaseTimer <= diff)
{
- Creature* talbot = me->GetCreature(*me, talbotGUID);
- Creature* arthas = me->GetCreature(*me, arthasGUID);
+ Creature* talbot = ObjectAccessor::GetCreature(*me, talbotGUID);
+ Creature* arthas = ObjectAccessor::GetCreature(*me, arthasGUID);
switch (phase)
{
case 1:
@@ -1209,9 +1209,9 @@ public:
break;
case 17:
- if (Creature* leryssa = me->GetCreature(*me, leryssaGUID))
+ if (Creature* leryssa = ObjectAccessor::GetCreature(*me, leryssaGUID))
leryssa->RemoveFromWorld();
- if (Creature* arlos= me->GetCreature(*me, arlosGUID))
+ if (Creature* arlos= ObjectAccessor::GetCreature(*me, arlosGUID))
arlos->RemoveFromWorld();
if (talbot)
talbot->RemoveFromWorld();
@@ -1230,16 +1230,16 @@ public:
void JustDied(Unit* /*killer*/) override
{
- if (Creature* talbot = me->GetCreature(*me, talbotGUID))
+ if (Creature* talbot = ObjectAccessor::GetCreature(*me, talbotGUID))
talbot->RemoveFromWorld();
- if (Creature* leryssa = me->GetCreature(*me, leryssaGUID))
+ if (Creature* leryssa = ObjectAccessor::GetCreature(*me, leryssaGUID))
leryssa->RemoveFromWorld();
- if (Creature* arlos = me->GetCreature(*me, arlosGUID))
+ if (Creature* arlos = ObjectAccessor::GetCreature(*me, arlosGUID))
arlos->RemoveFromWorld();
- if (Creature* arthas = me->GetCreature(*me, arthasGUID))
+ if (Creature* arthas = ObjectAccessor::GetCreature(*me, arthasGUID))
arthas->RemoveFromWorld();
}
};
@@ -1433,8 +1433,8 @@ public:
if (!leryssaGUID || !arlosGUID)
return;
- Creature* leryssa = Unit::GetCreature(*me, leryssaGUID);
- Creature* arlos = Unit::GetCreature(*me, arlosGUID);
+ Creature* leryssa = ObjectAccessor::GetCreature(*me, leryssaGUID);
+ Creature* arlos = ObjectAccessor::GetCreature(*me, arlosGUID);
if (!leryssa || !arlos)
return;
diff --git a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp
index a5ff2271316..e4bd9c469fb 100644
--- a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp
+++ b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp
@@ -97,7 +97,7 @@ public:
}
- if (Creature* pOrb = me->GetCreature(*me, targetGUID))
+ if (Creature* pOrb = ObjectAccessor::GetCreature(*me, targetGUID))
DoCast(pOrb, SPELL_TRANSITUS_SHIELD_BEAM);
}
diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
index e98d424abd5..d0fd948ce6a 100644
--- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp
+++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
@@ -85,18 +85,18 @@ public:
_mrfloppyGUID = Mrfloppy->GetGUID();
break;
case 10:
- if (Unit::GetCreature(*me, _mrfloppyGUID))
+ if (ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
{
Talk(SAY_WORGHAGGRO1);
me->SummonCreature(NPC_HUNGRY_WORG, me->GetPositionX()+5, me->GetPositionY()+2, me->GetPositionZ()+1, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000);
}
break;
case 11:
- if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID))
+ if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
break;
case 17:
- if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID))
+ if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
Mrfloppy->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
Talk(SAY_WORGRAGGRO3);
if (Creature* RWORG = me->SummonCreature(NPC_RAVENOUS_WORG, me->GetPositionX()+10, me->GetPositionY()+8, me->GetPositionZ()+2, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000))
@@ -106,31 +106,31 @@ public:
}
break;
case 18:
- if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID))
+ if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
{
- if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID))
+ if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
RWORG->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ());
DoCast(Mrfloppy, SPELL_MRFLOPPY);
}
break;
case 19:
- if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID))
+ if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
{
if (Mrfloppy->HasAura(SPELL_MRFLOPPY, 0))
{
- if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID))
+ if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
Mrfloppy->EnterVehicle(RWORG);
}
}
break;
case 20:
- if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID))
+ if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
RWORG->HandleEmoteCommand(34);
break;
case 21:
- if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID))
+ if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
{
- if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID))
+ if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
{
RWORG->Kill(Mrfloppy);
Mrfloppy->ExitVehicle();
@@ -141,11 +141,11 @@ public:
}
break;
case 22:
- if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID))
+ if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
{
if (Mrfloppy->isDead())
{
- if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID))
+ if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
RWORG->DisappearAndDie();
me->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ());
Mrfloppy->setDeathState(ALIVE);
@@ -167,7 +167,7 @@ public:
break;
case 27:
me->DisappearAndDie();
- if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID))
+ if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
Mrfloppy->DisappearAndDie();
break;
}
diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp
index 93e1f19b195..32b9805470e 100644
--- a/src/server/scripts/Northrend/zone_icecrown.cpp
+++ b/src/server/scripts/Northrend/zone_icecrown.cpp
@@ -595,14 +595,14 @@ public:
break;
case EVENT_INTRO_1:
{
- if (Creature* Dalfors = me->GetCreature(*me, guidDalfors))
+ if (Creature* Dalfors = ObjectAccessor::GetCreature(*me, guidDalfors))
Dalfors->AI()->Talk(DALFORS_SAY_PRE_1);
events.ScheduleEvent(EVENT_INTRO_2, 5000);
}
break;
case EVENT_INTRO_2:
{
- if (Creature* Dalfors = me->GetCreature(*me, guidDalfors))
+ if (Creature* Dalfors = ObjectAccessor::GetCreature(*me, guidDalfors))
{
Dalfors->SetFacingTo(6.215f);
Dalfors->AI()->Talk(DALFORS_SAY_PRE_2);
@@ -612,37 +612,37 @@ public:
break;
case EVENT_INTRO_3:
{
- if (Creature* Dalfors = me->GetCreature(*me, guidDalfors))
+ if (Creature* Dalfors = ObjectAccessor::GetCreature(*me, guidDalfors))
{
Dalfors->GetMotionMaster()->MovePoint(0, DalforsPos[2]);
Dalfors->SetHomePosition(DalforsPos[2]);
}
- if (Creature* Priest1 = me->GetCreature(*me, guidPriest[0]))
+ if (Creature* Priest1 = ObjectAccessor::GetCreature(*me, guidPriest[0]))
{
Priest1->SetFacingTo(5.7421f);
Priest1->SetHomePosition(Priest1Pos[1]);
}
- if (Creature* Priest2 = me->GetCreature(*me, guidPriest[1]))
+ if (Creature* Priest2 = ObjectAccessor::GetCreature(*me, guidPriest[1]))
{
Priest2->SetFacingTo(5.7421f);
Priest2->SetHomePosition(Priest2Pos[1]);
}
- if (Creature* Priest3 = me->GetCreature(*me, guidPriest[2]))
+ if (Creature* Priest3 = ObjectAccessor::GetCreature(*me, guidPriest[2]))
{
Priest3->SetFacingTo(5.7421f);
Priest3->SetHomePosition(Priest3Pos[1]);
}
- if (Creature* Mason1 = me->GetCreature(*me, guidMason[0]))
+ if (Creature* Mason1 = ObjectAccessor::GetCreature(*me, guidMason[0]))
{
Mason1->GetMotionMaster()->MovePoint(0, Mason1Pos[2]);
Mason1->SetHomePosition(Mason1Pos[2]);
}
- if (Creature* Mason2 = me->GetCreature(*me, guidMason[1]))
+ if (Creature* Mason2 = ObjectAccessor::GetCreature(*me, guidMason[1]))
{
Mason2->GetMotionMaster()->MovePoint(0, Mason2Pos[2]);
Mason2->SetHomePosition(Mason2Pos[2]);
}
- if (Creature* Mason3 = me->GetCreature(*me, guidMason[2]))
+ if (Creature* Mason3 = ObjectAccessor::GetCreature(*me, guidMason[2]))
{
Mason3->GetMotionMaster()->MovePoint(0, Mason3Pos[2]);
Mason3->SetHomePosition(Mason3Pos[2]);
@@ -653,17 +653,17 @@ public:
break;
case EVENT_MASON_ACTION:
{
- if (Creature* Mason1 = me->GetCreature(*me, guidMason[0]))
+ if (Creature* Mason1 = ObjectAccessor::GetCreature(*me, guidMason[0]))
{
Mason1->SetFacingTo(2.8972f);
Mason1->AI()->SetData(1, 1); // triggers SAI actions on npc
}
- if (Creature* Mason2 = me->GetCreature(*me, guidMason[1]))
+ if (Creature* Mason2 = ObjectAccessor::GetCreature(*me, guidMason[1]))
{
Mason2->SetFacingTo(3.1241f);
Mason2->AI()->SetData(1, 1); // triggers SAI actions on npc
}
- if (Creature* Mason3 = me->GetCreature(*me, guidMason[2]))
+ if (Creature* Mason3 = ObjectAccessor::GetCreature(*me, guidMason[2]))
{
Mason3->SetFacingTo(3.6651f);
Mason3->AI()->SetData(1, 1); // triggers SAI actions on npc
@@ -674,7 +674,7 @@ public:
{
if (Creature* LK = GetClosestCreatureWithEntry(me, NPC_LK, 100))
LK->AI()->Talk(LK_TALK_1);
- if (Creature* Dalfors = me->GetCreature(*me, guidDalfors))
+ if (Creature* Dalfors = ObjectAccessor::GetCreature(*me, guidDalfors))
Dalfors->AI()->Talk(DALFORS_SAY_START);
events.ScheduleEvent(EVENT_WAVE_SPAWN, 1000);
}
@@ -763,7 +763,7 @@ public:
}
if (PhaseCount == 8)
- if (Creature* Halof = me->GetCreature(*me, guidHalof))
+ if (Creature* Halof = ObjectAccessor::GetCreature(*me, guidHalof))
if (Halof->isDead())
{
DoCast(me, SPELL_CRUSADERS_SPIRE_VICTORY, true);
@@ -771,7 +771,7 @@ public:
Summons.DespawnEntry(NPC_REANIMATED_CAPTAIN);
Summons.DespawnEntry(NPC_SCOURGE_DRUDGE);
Summons.DespawnEntry(NPC_HALOF_THE_DEATHBRINGER);
- if (Creature* Dalfors = me->GetCreature(*me, guidDalfors))
+ if (Creature* Dalfors = ObjectAccessor::GetCreature(*me, guidDalfors))
Dalfors->AI()->Talk(DALFORS_YELL_FINISHED);
events.ScheduleEvent(EVENT_ENDED, 10000);
}
@@ -963,35 +963,35 @@ class npc_margrave_dhakar : public CreatureScript
}
case EVENT_LK_SAY_1:
{
- if (Creature* lichKing = Unit::GetCreature(*me, _lichKingGuid))
+ if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _lichKingGuid))
lichKing->AI()->Talk(SAY_LK_1);
_events.ScheduleEvent(EVENT_LK_SAY_2, 5000);
break;
}
case EVENT_LK_SAY_2:
{
- if (Creature* lichKing = Unit::GetCreature(*me, _lichKingGuid))
+ if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _lichKingGuid))
lichKing->AI()->Talk(SAY_LK_2);
_events.ScheduleEvent(EVENT_LK_SAY_3, 5000);
break;
}
case EVENT_LK_SAY_3:
{
- if (Creature* lichKing = Unit::GetCreature(*me, _lichKingGuid))
+ if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _lichKingGuid))
lichKing->AI()->Talk(SAY_LK_3);
_events.ScheduleEvent(EVENT_LK_SAY_4, 5000);
break;
}
case EVENT_LK_SAY_4:
{
- if (Creature* lichKing = Unit::GetCreature(*me, _lichKingGuid))
+ if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _lichKingGuid))
lichKing->AI()->Talk(SAY_LK_4);
_events.ScheduleEvent(EVENT_OUTRO, 12000);
break;
}
case EVENT_LK_SAY_5:
{
- if (Creature* lichKing = Unit::GetCreature(*me, _lichKingGuid))
+ if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _lichKingGuid))
lichKing->AI()->Talk(SAY_LK_5);
_events.ScheduleEvent(EVENT_OUTRO, 8000);
break;
@@ -1001,7 +1001,7 @@ class npc_margrave_dhakar : public CreatureScript
if (Creature* olakin = me->FindNearestCreature(NPC_OLAKIN, 50.0f, true))
olakin->AI()->Talk(SAY_OLAKIN_PAY);
- if (Creature* lichKing = Unit::GetCreature(*me, _lichKingGuid))
+ if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _lichKingGuid))
lichKing->DespawnOrUnsummon(0);
_events.ScheduleEvent(EVENT_START, 5000);
diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp
index 78b9a99b2e4..cf8c4cd9b36 100644
--- a/src/server/scripts/Northrend/zone_zuldrak.cpp
+++ b/src/server/scripts/Northrend/zone_zuldrak.cpp
@@ -91,7 +91,7 @@ public:
{
if (caster->ToPlayer()->GetQuestStatus(QUEST_TROLLS_IS_GONE_CRAZY) == QUEST_STATUS_INCOMPLETE)
{
- if (Creature* rageclaw = Unit::GetCreature(*me, _rageclawGUID))
+ if (Creature* rageclaw = ObjectAccessor::GetCreature(*me, _rageclawGUID))
{
UnlockRageclaw(caster, rageclaw);
caster->ToPlayer()->KilledMonster(rageclaw->GetCreatureTemplate(), _rageclawGUID);
diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp
index 9ab35aa188b..ea877435acf 100644
--- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp
+++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp
@@ -223,7 +223,7 @@ public:
summoned->SetDisplayId(soulmodel);
summoned->setFaction(me->getFaction());
- if (Unit* target = Unit::GetUnit(*me, soulholder))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, soulholder))
{
CAST_AI(npc_stolen_soul::npc_stolen_soulAI, summoned->AI())->SetMyClass(soulclass);
diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp
index bd65cd9fc89..26e9df6620c 100644
--- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp
+++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp
@@ -92,7 +92,7 @@ public:
summoned->SetLevel(me->getLevel());
summoned->AddUnitState(UNIT_STATE_ROOT);
- if (Unit* pFocusedTarget = Unit::GetUnit(*me, FocusedTargetGUID))
+ if (Unit* pFocusedTarget = ObjectAccessor::GetUnit(*me, FocusedTargetGUID))
summoned->AI()->AttackStart(pFocusedTarget);
}
}
diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.cpp b/src/server/scripts/Outland/BlackTemple/black_temple.cpp
index 427265e2562..5edae14d47a 100644
--- a/src/server/scripts/Outland/BlackTemple/black_temple.cpp
+++ b/src/server/scripts/Outland/BlackTemple/black_temple.cpp
@@ -155,11 +155,11 @@ public:
case EVENT_SET_CHANNELERS:
{
for (std::list<uint64>::const_iterator itr = bloodmage.begin(); itr != bloodmage.end(); ++itr)
- if (Creature* bloodmage = (Unit::GetCreature(*me, *itr)))
+ if (Creature* bloodmage = (ObjectAccessor::GetCreature(*me, *itr)))
bloodmage->CastSpell((Unit*)NULL, SPELL_SUMMON_CHANNEL);
for (std::list<uint64>::const_iterator itr = deathshaper.begin(); itr != deathshaper.end(); ++itr)
- if (Creature* deathshaper = (Unit::GetCreature(*me, *itr)))
+ if (Creature* deathshaper = (ObjectAccessor::GetCreature(*me, *itr)))
deathshaper->CastSpell((Unit*)NULL, SPELL_SUMMON_CHANNEL);
events.ScheduleEvent(EVENT_SET_CHANNELERS, 12000);
diff --git a/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp b/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp
index 1f8c090230b..0004df68016 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp
@@ -150,7 +150,7 @@ public:
std::list<HostileReference*>::const_iterator itr = m_threatlist.begin();
for (; itr!= m_threatlist.end(); ++itr) //store the threat list in a different container
{
- Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
//only on alive players
if (target && target->IsAlive() && target->GetTypeId() == TYPEID_PLAYER)
targets.push_back(target);
@@ -184,7 +184,7 @@ public:
void RevertThreatOnTarget(uint64 guid)
{
- if (Unit* unit = Unit::GetUnit(*me, guid))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, guid))
{
if (DoGetThreat(unit))
DoModifyThreatPercent(unit, -100);
diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
index f0498d8a5c2..b1c3d607396 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
@@ -596,9 +596,9 @@ public:
if (Conversation[count].creature == ILLIDAN_STORMRAGE)
creature = me;
else if (Conversation[count].creature == AKAMA)
- creature = (Unit::GetCreature((*me), AkamaGUID));
+ creature = (ObjectAccessor::GetCreature((*me), AkamaGUID));
else if (Conversation[count].creature == MAIEV_SHADOWSONG)
- creature = (Unit::GetCreature((*me), MaievGUID));
+ creature = (ObjectAccessor::GetCreature((*me), MaievGUID));
if (creature)
{
@@ -831,7 +831,7 @@ public:
{
if (GlaiveGUID[i])
{
- Unit* Glaive = Unit::GetUnit(*me, GlaiveGUID[i]);
+ Unit* Glaive = ObjectAccessor::GetUnit(*me, GlaiveGUID[i]);
if (Glaive)
{
Glaive->CastSpell(me, SPELL_GLAIVE_RETURNS, false); // Make it look like the Glaive flies back up to us
@@ -1437,7 +1437,7 @@ public:
std::vector<Unit*> eliteList;
for (ThreatContainer::StorageType::const_iterator itr = threatList.begin(); itr != threatList.end(); ++itr)
{
- Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (unit && unit->GetEntry() == ILLIDARI_ELITE)
eliteList.push_back(unit);
}
@@ -1588,9 +1588,9 @@ public:
Unit* Spirit[2] = { NULL, NULL };
if (ChannelCount <= 5)
{
- Channel = Unit::GetUnit(*me, ChannelGUID);
- Spirit[0] = Unit::GetUnit(*me, SpiritGUID[0]);
- Spirit[1] = Unit::GetUnit(*me, SpiritGUID[1]);
+ Channel = ObjectAccessor::GetUnit(*me, ChannelGUID);
+ Spirit[0] = ObjectAccessor::GetUnit(*me, SpiritGUID[0]);
+ Spirit[1] = ObjectAccessor::GetUnit(*me, SpiritGUID[1]);
if (!Channel || !Spirit[0] || !Spirit[1])
return;
}
@@ -2007,7 +2007,7 @@ public:
// if (IllidanGUID && !SummonedBeams)
// {
- // if (Unit* Illidan = Unit::GetUnit(*me, IllidanGUID)
+ // if (Unit* Illidan = ObjectAccessor::GetUnit(*me, IllidanGUID)
// {
// /// @todo Find proper spells and properly apply 'caged' Illidan effect
// }
@@ -2068,7 +2068,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- if (Unit* target = Unit::GetUnit(*me, TargetGUID))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, TargetGUID))
target->RemoveAurasDueToSpell(SPELL_PARALYZE);
}
@@ -2157,7 +2157,7 @@ public:
if (!me->EnsureVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND)
&& !me->EnsureVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND2))
{
- if (Creature* illidan = Unit::GetCreature((*me), IllidanGUID))// summon only in 1. phase
+ if (Creature* illidan = ObjectAccessor::GetCreature((*me), IllidanGUID))// summon only in 1. phase
if (CAST_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->Phase == PHASE_NORMAL)
me->CastSpell(me->GetVictim(), SPELL_PARASITIC_SHADOWFIEND2, true, 0, 0, IllidanGUID); // do not stack
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
index ac91c2ac034..db3fcea35db 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
@@ -245,7 +245,7 @@ public:
{
if (TargetGUID[i])
{
- if (Unit* unit = Unit::GetUnit(*me, TargetGUID[i]))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, TargetGUID[i]))
unit->CastSpell(unit, SPELL_ATTRACTION, true);
TargetGUID[i] = 0;
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
index 39edb6b04aa..9b304c3cd7b 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
@@ -229,7 +229,7 @@ public:
ThreatContainer::StorageType threatlist = target->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
{
- Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (unit)
{
DoModifyThreatPercent(unit, -100);
@@ -258,7 +258,7 @@ public:
Creature* Essence = NULL;
if (EssenceGUID)
{
- Essence = Unit::GetCreature(*me, EssenceGUID);
+ Essence = ObjectAccessor::GetCreature(*me, EssenceGUID);
if (!Essence)
{
EnterEvadeMode();
@@ -378,7 +378,7 @@ public:
void npc_enslaved_soul::npc_enslaved_soulAI::JustDied(Unit* /*killer*/)
{
if (ReliquaryGUID)
- if (Creature* Reliquary = (Unit::GetCreature((*me), ReliquaryGUID)))
+ if (Creature* Reliquary = (ObjectAccessor::GetCreature((*me), ReliquaryGUID)))
++(CAST_AI(boss_reliquary_of_souls::boss_reliquary_of_soulsAI, Reliquary->AI())->SoulDeathCount);
DoCast(me, SPELL_SOUL_RELEASE, true);
@@ -454,7 +454,7 @@ public:
ThreatContainer::StorageType::const_iterator itr = threatlist.begin();
for (; itr != threatlist.end(); ++itr)
{
- Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (unit && unit->IsAlive() && (unit->GetTypeId() == TYPEID_PLAYER)) // Only alive players
targets.push_back(unit);
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
index 8e5eb5ca888..b59d073c17d 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
@@ -777,7 +777,7 @@ public:
void IsSummonedBy(Unit* /*summoner*/) override
{
- if (Creature* summoner = (Unit::GetCreature((*me), summonerGuid)))
+ if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid)))
CAST_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
}
@@ -883,7 +883,7 @@ public:
void IsSummonedBy(Unit* /*summoner*/) override
{
- if (Creature* summoner = (Unit::GetCreature((*me), summonerGuid)))
+ if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid)))
CAST_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
}
@@ -973,7 +973,7 @@ public:
void IsSummonedBy(Unit* /*summoner*/) override
{
- if (Creature* summoner = (Unit::GetCreature((*me), summonerGuid)))
+ if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid)))
CAST_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
}
@@ -1053,7 +1053,7 @@ public:
void IsSummonedBy(Unit* /*summoner*/) override
{
- if (Creature* summoner = (Unit::GetCreature((*me), summonerGuid)))
+ if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid)))
CAST_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
}
@@ -1135,7 +1135,7 @@ public:
void IsSummonedBy(Unit* /*summoner*/) override
{
- if (Creature* summoner = (Unit::GetCreature((*me), summonerGuid)))
+ if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid)))
CAST_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
index 98a349f3606..a705659337f 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
@@ -178,7 +178,7 @@ public:
ThreatContainer::StorageType::const_iterator i = threatlist.begin();
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && me->IsWithinMeleeRange(unit))
{
if (unit->GetHealth() > health)
diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
index 35521a783be..0d9537b8b7a 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
@@ -95,7 +95,7 @@ public:
{
DoZoneInCombat();
- Creature* Teron = (Unit::GetCreature((*me), TeronGUID));
+ Creature* Teron = (ObjectAccessor::GetCreature((*me), TeronGUID));
if ((Teron) && (!Teron->IsAlive() || Teron->IsInEvadeMode()))
Despawn();
}
@@ -177,7 +177,7 @@ public:
std::list<Unit*> targets;
for (; itr != threatlist.end(); ++itr)
{
- Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (unit && unit->IsAlive())
targets.push_back(unit);
}
@@ -200,7 +200,7 @@ public:
if (CheckTeronTimer <= diff)
{
- Creature* Teron = (Unit::GetCreature((*me), TeronGUID));
+ Creature* Teron = (ObjectAccessor::GetCreature((*me), TeronGUID));
if (!Teron || !Teron->IsAlive() || Teron->IsInEvadeMode())
me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
@@ -324,7 +324,7 @@ public:
ThreatContainer::StorageType::const_iterator i = threatlist.begin();
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && unit->IsAlive())
{
float threat = DoGetThreat(unit);
@@ -344,7 +344,7 @@ public:
Unit* ghost = NULL;
if (GhostGUID)
- ghost = Unit::GetUnit(*me, GhostGUID);
+ ghost = ObjectAccessor::GetUnit(*me, GhostGUID);
if (ghost && ghost->IsAlive() && ghost->HasAura(SPELL_SHADOW_OF_DEATH))
{
/*float x, y, z;
@@ -391,7 +391,7 @@ public:
Done = true;
if (AggroTargetGUID)
{
- Unit* unit = Unit::GetUnit(*me, AggroTargetGUID);
+ Unit* unit = ObjectAccessor::GetUnit(*me, AggroTargetGUID);
if (unit)
AttackStart(unit);
diff --git a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
index 5228f891294..2362f534b05 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
@@ -141,7 +141,7 @@ public:
if (!SpineTargetGUID)
return false;
- Unit* target = Unit::GetUnit(*me, SpineTargetGUID);
+ Unit* target = ObjectAccessor::GetUnit(*me, SpineTargetGUID);
if (target && target->HasAura(SPELL_IMPALING_SPINE))
target->RemoveAurasDueToSpell(SPELL_IMPALING_SPINE);
SpineTargetGUID=0;
diff --git a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp
index 4a4addd253e..8fd9a421a49 100644
--- a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp
+++ b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp
@@ -182,7 +182,7 @@ public:
{
if (AggroYellTimer <= diff)
{
- if (Creature* pMember = Creature::GetCreature(*me, Council[YellCounter]))
+ if (Creature* pMember = ObjectAccessor::GetCreature(*me, Council[YellCounter]))
{
pMember->AI()->Talk(CouncilAggro[YellCounter].entry);
AggroYellTimer = CouncilAggro[YellCounter].timer;
@@ -197,7 +197,7 @@ public:
{
if (EnrageTimer <= diff)
{
- if (Creature* pMember = Creature::GetCreature(*me, Council[YellCounter]))
+ if (Creature* pMember = ObjectAccessor::GetCreature(*me, Council[YellCounter]))
{
pMember->CastSpell(pMember, SPELL_BERSERK, true);
pMember->AI()->Talk(CouncilEnrage[YellCounter].entry);
@@ -251,7 +251,7 @@ public:
Creature* pMember = NULL;
for (uint8 i = 0; i < 4; ++i)
{
- pMember = Unit::GetCreature((*me), Council[i]);
+ pMember = ObjectAccessor::GetCreature((*me), Council[i]);
if (!pMember)
continue;
@@ -330,7 +330,7 @@ public:
return;
}
- Creature* pMember = (Unit::GetCreature(*me, Council[DeathCount]));
+ Creature* pMember = (ObjectAccessor::GetCreature(*me, Council[DeathCount]));
if (pMember && pMember->IsAlive())
pMember->DealDamage(pMember, pMember->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
++DeathCount;
@@ -347,7 +347,7 @@ public:
{
if (Council[i])
{
- if (Creature* Member = (Unit::GetCreature((*me), Council[i])))
+ if (Creature* Member = (ObjectAccessor::GetCreature((*me), Council[i])))
{
// This is the evade/death check.
if (Member->IsAlive() && !Member->GetVictim())
@@ -407,7 +407,7 @@ struct boss_illidari_councilAI : public ScriptedAI
{
for (uint8 i = 0; i < 4; ++i)
{
- if (Unit* unit = Unit::GetUnit(*me, Council[i]))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, Council[i]))
if (unit != me && unit->GetVictim())
{
AttackStart(unit->GetVictim());
@@ -425,7 +425,7 @@ struct boss_illidari_councilAI : public ScriptedAI
damage /= 4;
for (uint8 i = 0; i < 4; ++i)
{
- if (Creature* unit = Unit::GetCreature(*me, Council[i]))
+ if (Creature* unit = ObjectAccessor::GetCreature(*me, Council[i]))
if (unit != me && damage < unit->GetHealth())
{
unit->ModifyHealth(-int32(damage));
@@ -493,7 +493,7 @@ public:
member = urand(1, 3);
if (member != 2) // No need to create another pointer to us using Unit::GetUnit
- unit = Unit::GetUnit(*me, Council[member]);
+ unit = ObjectAccessor::GetUnit(*me, Council[member]);
return unit;
}
@@ -507,7 +507,7 @@ public:
}
for (uint8 i = 0; i < 4; ++i)
{
- Unit* unit = Unit::GetUnit(*me, Council[i]);
+ Unit* unit = ObjectAccessor::GetUnit(*me, Council[i]);
if (unit)
unit->CastSpell(unit, spellid, true, 0, 0, me->GetGUID());
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp
index 6d43b0e910c..c6b62ee8de7 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp
@@ -216,7 +216,7 @@ public:
//Only if not incombat check if the event is started
if (!me->IsInCombat() && instance->GetData(DATA_KARATHRESSEVENT))
{
- if (Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER)))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER)))
{
AttackStart(target);
GetAdvisors();
@@ -357,7 +357,7 @@ public:
//Only if not incombat check if the event is started
if (!me->IsInCombat() && instance->GetData(DATA_KARATHRESSEVENT))
{
- if (Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER)))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER)))
AttackStart(target);
}
@@ -484,7 +484,7 @@ public:
//Only if not incombat check if the event is started
if (!me->IsInCombat() && instance->GetData(DATA_KARATHRESSEVENT))
{
- if (Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER)))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER)))
AttackStart(target);
}
@@ -515,7 +515,7 @@ public:
if (Spitfire_Timer <= diff)
{
DoCast(me, SPELL_SPITFIRE_TOTEM);
- if (Unit* SpitfireTotem = Unit::GetUnit(*me, CREATURE_SPITFIRE_TOTEM))
+ if (Unit* SpitfireTotem = ObjectAccessor::GetUnit(*me, CREATURE_SPITFIRE_TOTEM))
SpitfireTotem->ToCreature()->AI()->AttackStart(me->GetVictim());
Spitfire_Timer = 60000;
@@ -599,7 +599,7 @@ public:
//Only if not incombat check if the event is started
if (!me->IsInCombat() && instance->GetData(DATA_KARATHRESSEVENT))
{
- if (Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER)))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER)))
AttackStart(target);
}
@@ -675,13 +675,13 @@ public:
switch (rand()%4)
{
case 0:
- unit = Unit::GetUnit(*me, instance->GetData64(DATA_KARATHRESS));
+ unit = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_KARATHRESS));
break;
case 1:
- unit = Unit::GetUnit(*me, instance->GetData64(DATA_SHARKKIS));
+ unit = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_SHARKKIS));
break;
case 2:
- unit = Unit::GetUnit(*me, instance->GetData64(DATA_TIDALVESS));
+ unit = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_TIDALVESS));
break;
case 3:
unit = me;
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp
index c4d21d30328..bcde75584fb 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp
@@ -162,7 +162,7 @@ public:
{
for (uint8 i = 0; i < 2; ++i)
{
- if (Creature* mob = Unit::GetCreature(*me, beams[i]))
+ if (Creature* mob = ObjectAccessor::GetCreature(*me, beams[i]))
{
mob->setDeathState(DEAD);
mob->RemoveCorpse();
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
index dbf0c419fad..0745a85bf02 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
@@ -207,7 +207,7 @@ public:
{
if (ShieldGeneratorChannel[i])
{
- if (Unit* remo = Unit::GetUnit(*me, ShieldGeneratorChannel[i]))
+ if (Unit* remo = ObjectAccessor::GetUnit(*me, ShieldGeneratorChannel[i]))
{
remo->setDeathState(JUST_DIED);
ShieldGeneratorChannel[i] = 0;
@@ -431,7 +431,7 @@ public:
std::list<HostileReference*> t_list = me->getThreatManager().getThreatList();
for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)
{
- Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (target && target->IsWithinDistInMap(me, 5)) // if in melee range
{
inMeleeRange = true;
@@ -620,7 +620,7 @@ public:
if (me->IsWithinDist3d(MIDDLE_X, MIDDLE_Y, MIDDLE_Z, 3))
DoCast(me, SPELL_SURGE);
}
- if (Creature* vashj = Unit::GetCreature(*me, VashjGUID))
+ if (Creature* vashj = ObjectAccessor::GetCreature(*me, VashjGUID))
if (!vashj->IsInCombat() || CAST_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->Phase != 2 || vashj->isDead())
me->Kill(me);
Move = 1000;
@@ -662,7 +662,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- if (Creature* vashj = Unit::GetCreature((*me), instance->GetData64(DATA_LADYVASHJ)))
+ if (Creature* vashj = ObjectAccessor::GetCreature((*me), instance->GetData64(DATA_LADYVASHJ)))
CAST_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->EventTaintedElementalDeath();
}
@@ -778,7 +778,7 @@ public:
if (CheckTimer <= diff)
{
// check if vashj is death
- Unit* Vashj = Unit::GetUnit(*me, instance->GetData64(DATA_LADYVASHJ));
+ Unit* Vashj = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_LADYVASHJ));
if (!Vashj || !Vashj->IsAlive() || CAST_AI(boss_lady_vashj::boss_lady_vashjAI, Vashj->ToCreature()->AI())->Phase != 3)
{
// remove
@@ -833,7 +833,7 @@ public:
{
if (CheckTimer <= diff)
{
- Unit* vashj = Unit::GetUnit(*me, instance->GetData64(DATA_LADYVASHJ));
+ Unit* vashj = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_LADYVASHJ));
if (vashj && vashj->IsAlive())
{
@@ -865,7 +865,7 @@ public:
return true;
}
- Creature* vashj = Unit::GetCreature((*player), instance->GetData64(DATA_LADYVASHJ));
+ Creature* vashj = ObjectAccessor::GetCreature((*player), instance->GetData64(DATA_LADYVASHJ));
if (vashj && (CAST_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->Phase == 2))
{
if (GameObject* gObj = targets.GetGOTarget())
@@ -901,7 +901,7 @@ public:
}
// get and remove channel
- if (Unit* channel = Unit::GetCreature(*vashj, CAST_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->ShieldGeneratorChannel[channelIdentifier]))
+ if (Unit* channel = ObjectAccessor::GetCreature(*vashj, CAST_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->ShieldGeneratorChannel[channelIdentifier]))
channel->setDeathState(JUST_DIED); // call Unsummon()
instance->SetData(identifier, 1);
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
index 462babdc597..cc09952d336 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
@@ -112,7 +112,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- Unit* unit = Unit::GetUnit(*me, victimGUID);
+ Unit* unit = ObjectAccessor::GetUnit(*me, victimGUID);
if (unit && unit->HasAura(SPELL_INSIDIOUS_WHISPER))
unit->RemoveAurasDueToSpell(SPELL_INSIDIOUS_WHISPER);
}
@@ -141,7 +141,7 @@ public:
if (me->EnsureVictim()->GetGUID() != victimGUID)
{
DoModifyThreatPercent(me->GetVictim(), -100);
- Unit* owner = Unit::GetUnit(*me, victimGUID);
+ Unit* owner = ObjectAccessor::GetUnit(*me, victimGUID);
if (owner && owner->IsAlive())
{
me->AddThreat(owner, 999999);
@@ -249,7 +249,7 @@ public:
{
for (uint8 i = 0; i < 3; ++i)
{
- if (Creature* add = Unit::GetCreature(*me, SpellBinderGUID[i]))
+ if (Creature* add = ObjectAccessor::GetCreature(*me, SpellBinderGUID[i]))
add->DisappearAndDie();
float nx = x;
@@ -297,7 +297,7 @@ public:
uint8 AliveChannelers = 0;
for (uint8 i = 0; i < 3; ++i)
{
- Unit* add = Unit::GetUnit(*me, SpellBinderGUID[i]);
+ Unit* add = ObjectAccessor::GetUnit(*me, SpellBinderGUID[i]);
if (add && add->IsAlive())
++AliveChannelers;
}
@@ -350,7 +350,7 @@ public:
if (InnderDemon[i])
{
//delete creature
- Creature* creature = Unit::GetCreature((*me), InnderDemon[i]);
+ Creature* creature = ObjectAccessor::GetCreature((*me), InnderDemon[i]);
if (creature && creature->IsAlive())
{
creature->DespawnOrUnsummon();
@@ -368,10 +368,10 @@ public:
{
if (InnderDemon[i] > 0)
{
- Creature* unit = Unit::GetCreature((*me), InnderDemon[i]);
+ Creature* unit = ObjectAccessor::GetCreature((*me), InnderDemon[i]);
if (unit && unit->IsAlive())
{
- Unit* unit_target = Unit::GetUnit(*unit, unit->AI()->GetGUID(INNER_DEMON_VICTIM));
+ Unit* unit_target = ObjectAccessor::GetUnit(*unit, unit->AI()->GetGUID(INNER_DEMON_VICTIM));
if (unit_target && unit_target->IsAlive())
{
unit->CastSpell(unit_target, SPELL_CONSUMING_MADNESS, true);
@@ -397,7 +397,7 @@ public:
//despawn copy
if (Demon)
{
- if (Creature* pDemon = Unit::GetCreature(*me, Demon))
+ if (Creature* pDemon = ObjectAccessor::GetCreature(*me, Demon))
pDemon->DespawnOrUnsummon();
}
instance->SetData(DATA_LEOTHERASTHEBLINDEVENT, DONE);
@@ -518,7 +518,7 @@ public:
std::vector<Unit*> TargetList;
for (ThreatContainer::StorageType::const_iterator itr = ThreatList.begin(); itr != ThreatList.end(); ++itr)
{
- Unit* tempTarget = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* tempTarget = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (tempTarget && tempTarget->GetTypeId() == TYPEID_PLAYER && tempTarget->GetGUID() != me->EnsureVictim()->GetGUID() && TargetList.size()<5)
TargetList.push_back(tempTarget);
}
@@ -701,7 +701,7 @@ public:
Earthshock_Timer = urand(5000, 10000);
instance->SetData64(DATA_LEOTHERAS_EVENT_STARTER, 0);
- Creature* leotheras = Unit::GetCreature(*me, leotherasGUID);
+ Creature* leotheras = ObjectAccessor::GetCreature(*me, leotherasGUID);
if (leotheras && leotheras->IsAlive())
CAST_AI(boss_leotheras_the_blind::boss_leotheras_the_blindAI, leotheras->AI())->CheckChannelers(/*false*/);
}
@@ -724,7 +724,7 @@ public:
{
if (leotherasGUID)
{
- Creature* leotheras = Unit::GetCreature(*me, leotherasGUID);
+ Creature* leotheras = ObjectAccessor::GetCreature(*me, leotherasGUID);
if (leotheras && leotheras->IsAlive())
DoCast(leotheras, BANISH_BEAM);
}
@@ -739,7 +739,7 @@ public:
if (!me->IsInCombat() && instance->GetData64(DATA_LEOTHERAS_EVENT_STARTER))
{
Unit* victim = NULL;
- victim = Unit::GetUnit(*me, instance->GetData64(DATA_LEOTHERAS_EVENT_STARTER));
+ victim = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_LEOTHERAS_EVENT_STARTER));
if (victim)
AttackStart(victim);
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp
index 4f8c9390ba4..7e37c22565a 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp
@@ -98,7 +98,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
for (std::list<uint64>::const_iterator i = Striders.begin(); i != Striders.end(); ++i)
- if (Creature* strider = Unit::GetCreature(*me, *i))
+ if (Creature* strider = ObjectAccessor::GetCreature(*me, *i))
strider->DisappearAndDie();
}
@@ -132,7 +132,7 @@ public:
{
if (LevitatedTarget_Timer <= diff)
{
- if (Unit* target = Unit::GetUnit(*me, LevitatedTarget))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, LevitatedTarget))
{
if (!target->HasAura(SPELL_LEVITATE))
{
diff --git a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp
index c1e9d0a2b91..89aad2534f0 100644
--- a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp
+++ b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp
@@ -530,7 +530,7 @@ public:
std::vector<Unit*> target_list;
for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)
{
- target = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
//15 yard radius minimum
if (target && target->IsWithinDist(me, 15, false))
target_list.push_back(target);
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp
index 066772cb0f7..c85a26a25ab 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp
@@ -118,7 +118,7 @@ class boss_kelidan_the_breaker : public CreatureScript
}
for (uint8 i=0; i<5; ++i)
{
- Creature* channeler = Unit::GetCreature(*me, Channelers[i]);
+ Creature* channeler = ObjectAccessor::GetCreature(*me, Channelers[i]);
if (who && channeler && !channeler->IsInCombat())
channeler->AI()->AttackStart(who);
}
@@ -128,7 +128,7 @@ class boss_kelidan_the_breaker : public CreatureScript
{
for (uint8 i=0; i<5; ++i)
{
- Creature* channeler = Unit::GetCreature(*me, Channelers[i]);
+ Creature* channeler = ObjectAccessor::GetCreature(*me, Channelers[i]);
if (channeler && channeler->IsAlive())
return;
}
@@ -147,7 +147,7 @@ class boss_kelidan_the_breaker : public CreatureScript
uint8 i;
for (i=0; i<5; ++i)
{
- Creature* channeler = Unit::GetCreature(*me, Channelers[i]);
+ Creature* channeler = ObjectAccessor::GetCreature(*me, Channelers[i]);
if (channeler && channeler->GetGUID() == channeler1->GetGUID())
break;
}
@@ -158,7 +158,7 @@ class boss_kelidan_the_breaker : public CreatureScript
{
for (uint8 i=0; i<5; ++i)
{
- Creature* channeler = Unit::GetCreature(*me, Channelers[i]);
+ Creature* channeler = ObjectAccessor::GetCreature(*me, Channelers[i]);
if (!channeler || channeler->isDead())
channeler = me->SummonCreature(ENTRY_CHANNELER, ShadowmoonChannelers[i][0], ShadowmoonChannelers[i][1], ShadowmoonChannelers[i][2], ShadowmoonChannelers[i][3], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000);
if (channeler)
@@ -313,7 +313,7 @@ class npc_shadowmoon_channeler : public CreatureScript
if (Creature* Kelidan = me->FindNearestCreature(ENTRY_KELIDAN, 100))
{
uint64 channeler = CAST_AI(boss_kelidan_the_breaker::boss_kelidan_the_breakerAI, Kelidan->AI())->GetChanneled(me);
- if (Unit* channeled = Unit::GetUnit(*me, channeler))
+ if (Unit* channeled = ObjectAccessor::GetUnit(*me, channeler))
DoCast(channeled, SPELL_CHANNELING);
}
check_Timer = 5000;
diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp
index 424090c87d0..b15bd18c97c 100644
--- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp
@@ -124,7 +124,7 @@ class boss_nazan : public CreatureScript
if (flight) // phase 1 - the flight
{
- Creature* Vazruden = Unit::GetCreature(*me, VazrudenGUID);
+ Creature* Vazruden = ObjectAccessor::GetCreature(*me, VazrudenGUID);
if (Fly_Timer < diff || !(Vazruden && Vazruden->IsAlive() && Vazruden->HealthAbovePct(20)))
{
flight = false;
@@ -300,7 +300,7 @@ class boss_vazruden_the_herald : public CreatureScript
{
if (summoned)
{
- Creature* Nazan = Unit::GetCreature(*me, NazanGUID);
+ Creature* Nazan = ObjectAccessor::GetCreature(*me, NazanGUID);
if (!Nazan)
Nazan = me->FindNearestCreature(NPC_NAZAN, 5000);
if (Nazan)
@@ -309,7 +309,7 @@ class boss_vazruden_the_herald : public CreatureScript
NazanGUID = 0;
}
- Creature* Vazruden = Unit::GetCreature(*me, VazrudenGUID);
+ Creature* Vazruden = ObjectAccessor::GetCreature(*me, VazrudenGUID);
if (!Vazruden)
Vazruden = me->FindNearestCreature(NPC_VAZRUDEN, 5000);
if (Vazruden)
@@ -404,8 +404,8 @@ class boss_vazruden_the_herald : public CreatureScript
default: // adds do the job now
if (check <= diff)
{
- Creature* Nazan = Unit::GetCreature(*me, NazanGUID);
- Creature* Vazruden = Unit::GetCreature(*me, VazrudenGUID);
+ Creature* Nazan = ObjectAccessor::GetCreature(*me, NazanGUID);
+ Creature* Vazruden = ObjectAccessor::GetCreature(*me, VazrudenGUID);
if ((Nazan && Nazan->IsAlive()) || (Vazruden && Vazruden->IsAlive()))
{
if ((Nazan && Nazan->GetVictim()) || (Vazruden && Vazruden->GetVictim()))
diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
index 91aad3c00eb..1bdaf4fc260 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
@@ -257,7 +257,7 @@ class boss_magtheridon : public CreatureScript
{
// to avoid multiclicks from 1 cube
if (uint64 guid = Cube[cubeGUID])
- DebuffClicker(Unit::GetUnit(*me, guid));
+ DebuffClicker(ObjectAccessor::GetUnit(*me, guid));
Cube[cubeGUID] = clickerGUID;
NeedCheckCube = true;
}
@@ -280,7 +280,7 @@ class boss_magtheridon : public CreatureScript
// if not - apply mind exhaustion and delete from clicker's list
for (CubeMap::iterator i = Cube.begin(); i != Cube.end(); ++i)
{
- Unit* clicker = Unit::GetUnit(*me, (*i).second);
+ Unit* clicker = ObjectAccessor::GetUnit(*me, (*i).second);
if (!clicker || !clicker->HasAura(SPELL_SHADOW_GRASP))
{
DebuffClicker(clicker);
@@ -588,7 +588,7 @@ public:
if (instance->GetData(DATA_MAGTHERIDON_EVENT) != IN_PROGRESS)
return true;
- Creature* Magtheridon =Unit::GetCreature(*go, instance->GetData64(DATA_MAGTHERIDON));
+ Creature* Magtheridon =ObjectAccessor::GetCreature(*go, instance->GetData64(DATA_MAGTHERIDON));
if (!Magtheridon || !Magtheridon->IsAlive())
return true;
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp
index 187e5b4993b..88c3041b62c 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp
@@ -323,7 +323,7 @@ class npc_fel_orc_convert : public CreatureScript
{
events.ScheduleEvent(EVENT_HEMORRHAGE, 3000);
- if (Creature* Kurse = Unit::GetCreature(*me, instance->GetData64(NPC_GRAND_WARLOCK_NETHEKURSE)))
+ if (Creature* Kurse = ObjectAccessor::GetCreature(*me, instance->GetData64(NPC_GRAND_WARLOCK_NETHEKURSE)))
if (me->IsWithinDist(Kurse, 45.0f))
Kurse->AI()->SetData(SETDATA_DATA, SETDATA_PEON_AGGRO);
}
@@ -333,7 +333,7 @@ class npc_fel_orc_convert : public CreatureScript
if (instance->GetBossState(DATA_NETHEKURSE) != IN_PROGRESS)
return;
- if (Creature* Kurse = Unit::GetCreature(*me, instance->GetData64(NPC_GRAND_WARLOCK_NETHEKURSE)))
+ if (Creature* Kurse = ObjectAccessor::GetCreature(*me, instance->GetData64(NPC_GRAND_WARLOCK_NETHEKURSE)))
Kurse->AI()->SetData(SETDATA_DATA, SETDATA_PEON_DEATH);
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp
index 69be4b46eff..b03fc651e12 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp
@@ -142,13 +142,13 @@ class boss_warbringer_omrogg : public CreatureScript
void Reset() override
{
- if (Unit* LeftHead = Unit::GetUnit(*me, LeftHeadGUID))
+ if (Unit* LeftHead = ObjectAccessor::GetUnit(*me, LeftHeadGUID))
{
LeftHead->setDeathState(JUST_DIED);
LeftHeadGUID = 0;
}
- if (Unit* RightHead = Unit::GetUnit(*me, RightHeadGUID))
+ if (Unit* RightHead = ObjectAccessor::GetUnit(*me, RightHeadGUID))
{
RightHead->setDeathState(JUST_DIED);
RightHeadGUID = 0;
@@ -172,8 +172,8 @@ class boss_warbringer_omrogg : public CreatureScript
void DoYellForThreat()
{
- Creature* LeftHead = Creature::GetCreature(*me, LeftHeadGUID);
- Creature* RightHead = Unit::GetCreature(*me, RightHeadGUID);
+ Creature* LeftHead = ObjectAccessor::GetCreature(*me, LeftHeadGUID);
+ Creature* RightHead = ObjectAccessor::GetCreature(*me, RightHeadGUID);
if (!LeftHead || !RightHead)
return;
@@ -193,7 +193,7 @@ class boss_warbringer_omrogg : public CreatureScript
me->SummonCreature(NPC_LEFT_HEAD, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_DEAD_DESPAWN, 0);
me->SummonCreature(NPC_RIGHT_HEAD, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_DEAD_DESPAWN, 0);
- if (Creature* LeftHead = Creature::GetCreature(*me, LeftHeadGUID))
+ if (Creature* LeftHead = ObjectAccessor::GetCreature(*me, LeftHeadGUID))
{
iaggro = rand()%3;
@@ -221,8 +221,8 @@ class boss_warbringer_omrogg : public CreatureScript
void KilledUnit(Unit* /*victim*/) override
{
- Creature* LeftHead = Creature::GetCreature(*me, LeftHeadGUID);
- Creature* RightHead = Creature::GetCreature(*me, RightHeadGUID);
+ Creature* LeftHead = ObjectAccessor::GetCreature(*me, LeftHeadGUID);
+ Creature* RightHead = ObjectAccessor::GetCreature(*me, RightHeadGUID);
if (!LeftHead || !RightHead)
return;
@@ -247,8 +247,8 @@ class boss_warbringer_omrogg : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
- Creature* LeftHead = Creature::GetCreature(*me, LeftHeadGUID);
- Creature* RightHead = Creature::GetCreature(*me, RightHeadGUID);
+ Creature* LeftHead = ObjectAccessor::GetCreature(*me, LeftHeadGUID);
+ Creature* RightHead = ObjectAccessor::GetCreature(*me, RightHeadGUID);
if (!LeftHead || !RightHead)
return;
@@ -266,8 +266,8 @@ class boss_warbringer_omrogg : public CreatureScript
{
Delay_Timer = 3500;
- Creature* LeftHead = Creature::GetCreature(*me, LeftHeadGUID);
- Creature* RightHead = Creature::GetCreature(*me, RightHeadGUID);
+ Creature* LeftHead = ObjectAccessor::GetCreature(*me, LeftHeadGUID);
+ Creature* RightHead = ObjectAccessor::GetCreature(*me, RightHeadGUID);
if (!LeftHead || !RightHead)
return;
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp
index f918038b369..66aa02bbeaf 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp
@@ -145,7 +145,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript
{
for (std::vector<uint64>::const_iterator itr = adds.begin(); itr!= adds.end(); ++itr)
{
- Creature* creature = Unit::GetCreature(*me, *itr);
+ Creature* creature = ObjectAccessor::GetCreature(*me, *itr);
if (creature && creature->IsAlive())
{
creature->GetMotionMaster()->Clear(true);
@@ -157,7 +157,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript
for (std::vector<uint64>::const_iterator itr = assassins.begin(); itr!= assassins.end(); ++itr)
{
- Creature* creature = Unit::GetCreature(*me, *itr);
+ Creature* creature = ObjectAccessor::GetCreature(*me, *itr);
if (creature && creature->IsAlive())
{
creature->GetMotionMaster()->Clear(true);
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
index ead163b3a82..bcc8b0c5a48 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
@@ -494,7 +494,7 @@ class npc_ember_of_alar : public CreatureScript
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
if (instance->GetData(DATA_ALAREVENT) == 2)
{
- if (Unit* Alar = Unit::GetUnit(*me, instance->GetData64(DATA_ALAR)))
+ if (Unit* Alar = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_ALAR)))
{
int32 AlarHealth = int32(Alar->GetHealth()) - int32(Alar->CountPctFromMaxHealth(3));
if (AlarHealth > 0)
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
index 5f92445f9dd..2cac4a0be1a 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
@@ -464,7 +464,7 @@ class npc_solarium_priest : public CreatureScript
switch (urand(0, 1))
{
case 0:
- target = Unit::GetUnit(*me, instance->GetData64(DATA_ASTROMANCER));
+ target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_ASTROMANCER));
break;
case 1:
target = me;
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
index 016e68a4e8d..a24e1d5d34f 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
@@ -143,7 +143,7 @@ uint32 m_auiSpellSummonWeapon[]=
};
const float CAPERNIAN_DISTANCE = 20.0f; //she casts away from the target
-const float KAEL_VISIBLE_RANGE = 50.0f;
+//const float KAEL_VISIBLE_RANGE = 50.0f;
const float afGravityPos[3] = {795.0f, 0.0f, 70.0f};
@@ -183,7 +183,7 @@ struct advisorbase_ai : public ScriptedAI
//reset encounter
if (instance->GetData(DATA_KAELTHASEVENT) == 1 || instance->GetData(DATA_KAELTHASEVENT) == 3)
- if (Creature* Kaelthas = Unit::GetCreature(*me, instance->GetData64(DATA_KAELTHAS)))
+ if (Creature* Kaelthas = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KAELTHAS)))
Kaelthas->AI()->EnterEvadeMode();
}
@@ -262,7 +262,7 @@ struct advisorbase_ai : public ScriptedAI
DelayRes_Timer = 0;
FakeDeath = false;
- Unit* Target = Unit::GetUnit(*me, DelayRes_Target);
+ Unit* Target = ObjectAccessor::GetUnit(*me, DelayRes_Target);
if (!Target)
Target = me->GetVictim();
@@ -351,7 +351,7 @@ class boss_kaelthas : public CreatureScript
{
for (uint8 i = 0; i < MAX_ADVISORS; ++i)
{
- if (Creature* creature = Unit::GetCreature(*me, m_auiAdvisorGuid[i]))
+ if (Creature* creature = ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[i]))
{
creature->Respawn();
creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -468,7 +468,7 @@ class boss_kaelthas : public CreatureScript
for (uint8 i = 0; i < MAX_ADVISORS; ++i)
{
- if (Unit* pAdvisor = Unit::GetUnit(*me, m_auiAdvisorGuid[i]))
+ if (Unit* pAdvisor = ObjectAccessor::GetUnit(*me, m_auiAdvisorGuid[i]))
pAdvisor->Kill(pAdvisor);
}
}
@@ -502,7 +502,7 @@ class boss_kaelthas : public CreatureScript
case 1:
if (Phase_Timer <= diff)
{
- Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[0]));
+ Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[0]));
if (Advisor)
{
@@ -520,7 +520,7 @@ class boss_kaelthas : public CreatureScript
//Subphase 2 - Start
case 2:
- Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[0]));
+ Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[0]));
if (Advisor && (Advisor->getStandState() == UNIT_STAND_STATE_DEAD))
{
@@ -536,7 +536,7 @@ class boss_kaelthas : public CreatureScript
case 3:
if (Phase_Timer <= diff)
{
- Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[1]));
+ Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[1]));
if (Advisor)
{
@@ -554,7 +554,7 @@ class boss_kaelthas : public CreatureScript
//Subphase 3 - Start
case 4:
- Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[1]));
+ Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[1]));
if (Advisor && (Advisor->getStandState() == UNIT_STAND_STATE_DEAD))
{
@@ -570,7 +570,7 @@ class boss_kaelthas : public CreatureScript
case 5:
if (Phase_Timer <= diff)
{
- Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[2]));
+ Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[2]));
if (Advisor)
{
@@ -588,7 +588,7 @@ class boss_kaelthas : public CreatureScript
//Subphase 4 - Start
case 6:
- Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[2]));
+ Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[2]));
if (Advisor && (Advisor->getStandState() == UNIT_STAND_STATE_DEAD))
{
@@ -604,7 +604,7 @@ class boss_kaelthas : public CreatureScript
case 7:
if (Phase_Timer <= diff)
{
- Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[3]));
+ Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[3]));
if (Advisor)
{
@@ -623,7 +623,7 @@ class boss_kaelthas : public CreatureScript
//End of phase 1
case 8:
- Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[3]));
+ Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[3]));
if (Advisor && (Advisor->getStandState() == UNIT_STAND_STATE_DEAD))
{
@@ -692,7 +692,7 @@ class boss_kaelthas : public CreatureScript
Creature* Advisor;
for (uint8 i = 0; i < MAX_ADVISORS; ++i)
{
- Advisor = Unit::GetCreature(*me, m_auiAdvisorGuid[i]);
+ Advisor = ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[i]);
if (!Advisor)
TC_LOG_ERROR("scripts", "SD2: Kael'Thas Advisor %u does not exist. Possibly despawned? Incorrectly Killed?", i);
@@ -896,7 +896,7 @@ class boss_kaelthas : public CreatureScript
// 1) Kael'thas will portal the whole raid right into his body
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && (unit->GetTypeId() == TYPEID_PLAYER))
{
//Use work around packet to prevent player from being dropped from combat
@@ -917,7 +917,7 @@ class boss_kaelthas : public CreatureScript
// 2) At that point he will put a Gravity Lapse debuff on everyone
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- if (Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid()))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()))
{
DoCast(unit, SPELL_KNOCKBACK, true);
//Gravity lapse - needs an exception in Spell system to work
@@ -949,7 +949,7 @@ class boss_kaelthas : public CreatureScript
//Remove flight
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- if (Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid()))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()))
{
//Using packet workaround
WorldPacket data(SMSG_MOVE_UNSET_CAN_FLY, 12);
@@ -1288,7 +1288,7 @@ class boss_grand_astromancer_capernian : public CreatureScript
ThreatContainer::StorageType const &threatlist = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator i = threatlist.begin(); i!= threatlist.end(); ++i)
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
//if in melee range
if (unit && unit->IsWithinDistInMap(me, 5))
{
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
index 58b5972c25c..634d54ed58b 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
@@ -122,7 +122,7 @@ class boss_void_reaver : public CreatureScript
std::vector<Unit*> target_list;
for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)
{
- target = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (!target)
continue;
// exclude pets & totems, 18 yard radius minimum
diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp
index 53727db2f4b..2c15a6dd30d 100644
--- a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp
+++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp
@@ -151,7 +151,7 @@ class boss_high_botanist_freywinn : public CreatureScript
{
for (std::list<uint64>::iterator itr = Adds_List.begin(); itr != Adds_List.end(); ++itr)
{
- if (Unit* temp = Unit::GetUnit(*me, *itr))
+ if (Unit* temp = ObjectAccessor::GetUnit(*me, *itr))
{
if (!temp->IsAlive())
{
diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
index c9dd31cdc76..a1335290d5a 100644
--- a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
+++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
@@ -97,7 +97,7 @@ class npc_warp_splinter_treant : public CreatureScript
{
if (WarpGuid && check_Timer <= diff)
{
- if (Unit* Warp = Unit::GetUnit(*me, WarpGuid))
+ if (Unit* Warp = ObjectAccessor::GetUnit(*me, WarpGuid))
{
if (me->IsWithinMeleeRange(Warp, 2.5f))
{
diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
index 7b9b2be4674..0da70207a04 100644
--- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
+++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
@@ -318,7 +318,7 @@ public:
if (type != POINT_MOTION_TYPE || id != 1)
return;
- if (Creature* helboar = me->GetCreature(*me, helboarGUID))
+ if (Creature* helboar = ObjectAccessor::GetCreature(*me, helboarGUID))
{
helboar->RemoveCorpse();
DoCast(SPELL_SUMMON_POO);
diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp
index 8fac7853f26..cb75ee3b2ad 100644
--- a/src/server/scripts/Outland/zone_netherstorm.cpp
+++ b/src/server/scripts/Outland/zone_netherstorm.cpp
@@ -243,7 +243,7 @@ public:
case 1:
if (someplayer)
{
- Unit* u = Unit::GetUnit(*me, someplayer);
+ Unit* u = ObjectAccessor::GetUnit(*me, someplayer);
if (u && u->GetTypeId() == TYPEID_PLAYER)
Talk(EMOTE_START, u);
}
@@ -795,7 +795,7 @@ public:
for (std::list<HostileReference*>::const_iterator itr = AggroList.begin(); itr != AggroList.end(); ++itr)
{
- if (Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid()))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()))
{
if (unit->GetCreateMana() > 0)
UnitsWithMana.push_back(unit);
diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
index 4efa108429a..116beb3d081 100644
--- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
+++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
@@ -133,7 +133,7 @@ public:
{
if (bCanEat && !bIsEating)
{
- if (Unit* unit = Unit::GetUnit(*me, uiPlayerGUID))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, uiPlayerGUID))
{
if (GameObject* go = unit->FindNearestGameObject(GO_CARCASS, 10))
{
@@ -273,7 +273,7 @@ public:
{
if (PlayerGUID)
{
- Unit* player = Unit::GetUnit(*me, PlayerGUID);
+ Unit* player = ObjectAccessor::GetUnit(*me, PlayerGUID);
if (player)
DoCast(player, SPELL_FORCE_OF_NELTHARAKU, true);
@@ -1225,7 +1225,7 @@ public:
if (TorlothAnim[AnimationCount].creature == 1)
{
- creature = (Unit::GetCreature(*me, LordIllidanGUID));
+ creature = (ObjectAccessor::GetCreature(*me, LordIllidanGUID));
if (!creature)
return;
@@ -1326,7 +1326,7 @@ public:
break;
}
- if (Creature* LordIllidan = (Unit::GetCreature(*me, LordIllidanGUID)))
+ if (Creature* LordIllidan = (ObjectAccessor::GetCreature(*me, LordIllidanGUID)))
LordIllidan->AI()->EnterEvadeMode();
}
};
@@ -1507,7 +1507,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
me->RemoveCorpse();
- if (Creature* LordIllidan = (Unit::GetCreature(*me, LordIllidanGUID)))
+ if (Creature* LordIllidan = (ObjectAccessor::GetCreature(*me, LordIllidanGUID)))
if (LordIllidan)
CAST_AI(npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI, LordIllidan->AI())->LiveCounter();
}
@@ -1867,13 +1867,6 @@ public:
{
npc_shadowmoon_tuber_nodeAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() override
- {
- tapped = false;
- tuberGUID = 0;
- resetTimer = 60000;
- }
-
void SetData(uint32 id, uint32 data) override
{
if (id == TYPE_BOAR && data == DATA_BOAR)
@@ -1884,49 +1877,23 @@ public:
// Despawn the tuber
if (GameObject* tuber = me->FindNearestGameObject(GO_SHADOWMOON_TUBER_MOUND, 5.0f))
{
- tuberGUID = tuber->GetGUID();
- // @Workaround: find how to properly despawn the GO
- tuber->SetPhaseMask(2, true);
+ tuber->SetLootState(GO_JUST_DEACTIVATED);
+ me->DespawnOrUnsummon();
}
}
}
void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
- if (!tapped && spell->Id == SPELL_WHISTLE)
+ if (spell->Id == SPELL_WHISTLE)
{
if (Creature* boar = me->FindNearestCreature(NPC_BOAR_ENTRY, 30.0f))
{
- // Disable trigger and force nearest boar to walk to him
- tapped = true;
boar->SetWalk(false);
boar->GetMotionMaster()->MovePoint(POINT_TUBER, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
}
}
}
-
- void UpdateAI(uint32 diff) override
- {
- if (tapped)
- {
- if (resetTimer <= diff)
- {
- // Respawn the tuber
- if (tuberGUID)
- if (GameObject* tuber = GameObject::GetGameObject(*me, tuberGUID))
- // @Workaround: find how to properly respawn the GO
- tuber->SetPhaseMask(1, true);
-
- Reset();
- }
- else
- resetTimer -= diff;
- }
- }
- private:
- bool tapped;
- uint64 tuberGUID;
- uint32 resetTimer;
};
CreatureAI* GetAI(Creature* creature) const override
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 77a4faa7e8c..4c72d790059 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -509,7 +509,7 @@ class spell_gen_break_shield: public SpellScriptLoader
class spell_gen_break_shield_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_break_shield_SpellScript)
+ PrepareSpellScript(spell_gen_break_shield_SpellScript);
void HandleScriptEffect(SpellEffIndex effIndex)
{
@@ -671,7 +671,7 @@ class spell_gen_chaos_blast : public SpellScriptLoader
class spell_gen_chaos_blast_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_chaos_blast_SpellScript)
+ PrepareSpellScript(spell_gen_chaos_blast_SpellScript);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
@@ -895,7 +895,7 @@ class spell_gen_count_pct_from_max_hp : public SpellScriptLoader
class spell_gen_count_pct_from_max_hp_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_count_pct_from_max_hp_SpellScript)
+ PrepareSpellScript(spell_gen_count_pct_from_max_hp_SpellScript);
public:
spell_gen_count_pct_from_max_hp_SpellScript(int32 damagePct) : SpellScript(), _damagePct(damagePct) { }
@@ -1446,6 +1446,7 @@ class spell_gen_elune_candle : public SpellScriptLoader
class spell_gen_elune_candle_SpellScript : public SpellScript
{
PrepareSpellScript(spell_gen_elune_candle_SpellScript);
+
bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ELUNE_CANDLE_OMEN_HEAD) ||
@@ -1511,7 +1512,7 @@ class spell_gen_gadgetzan_transporter_backfire : public SpellScriptLoader
class spell_gen_gadgetzan_transporter_backfire_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_gadgetzan_transporter_backfire_SpellScript)
+ PrepareSpellScript(spell_gen_gadgetzan_transporter_backfire_SpellScript);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
@@ -1612,7 +1613,7 @@ class spell_gen_gnomish_transporter : public SpellScriptLoader
class spell_gen_gnomish_transporter_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_gnomish_transporter_SpellScript)
+ PrepareSpellScript(spell_gen_gnomish_transporter_SpellScript);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
@@ -2093,7 +2094,7 @@ class spell_gen_mounted_charge: public SpellScriptLoader
class spell_gen_mounted_charge_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_mounted_charge_SpellScript)
+ PrepareSpellScript(spell_gen_mounted_charge_SpellScript);
void HandleScriptEffect(SpellEffIndex effIndex)
{
@@ -2794,7 +2795,7 @@ class spell_gen_parachute_ic : public SpellScriptLoader
class spell_gen_parachute_ic_AuraScript : public AuraScript
{
- PrepareAuraScript(spell_gen_parachute_ic_AuraScript)
+ PrepareAuraScript(spell_gen_parachute_ic_AuraScript);
void HandleTriggerSpell(AuraEffect const* /*aurEff*/)
{
@@ -2842,30 +2843,28 @@ class spell_gen_pet_summoned : public SpellScriptLoader
if (player->GetLastPetNumber())
{
PetType newPetType = (player->getClass() == CLASS_HUNTER) ? HUNTER_PET : SUMMON_PET;
- if (Pet* newPet = new Pet(player, newPetType))
+ Pet* newPet = new Pet(player, newPetType);
+ if (newPet->LoadPetFromDB(player, 0, player->GetLastPetNumber(), true))
{
- if (newPet->LoadPetFromDB(player, 0, player->GetLastPetNumber(), true))
- {
- // revive the pet if it is dead
- if (newPet->getDeathState() == DEAD)
- newPet->setDeathState(ALIVE);
+ // revive the pet if it is dead
+ if (newPet->getDeathState() == DEAD)
+ newPet->setDeathState(ALIVE);
- newPet->SetFullHealth();
- newPet->SetPower(newPet->getPowerType(), newPet->GetMaxPower(newPet->getPowerType()));
+ newPet->SetFullHealth();
+ newPet->SetPower(newPet->getPowerType(), newPet->GetMaxPower(newPet->getPowerType()));
- switch (newPet->GetEntry())
- {
- case NPC_DOOMGUARD:
- case NPC_INFERNAL:
- newPet->SetEntry(NPC_IMP);
- break;
- default:
- break;
- }
+ switch (newPet->GetEntry())
+ {
+ case NPC_DOOMGUARD:
+ case NPC_INFERNAL:
+ newPet->SetEntry(NPC_IMP);
+ break;
+ default:
+ break;
}
- else
- delete newPet;
}
+ else
+ delete newPet;
}
}
@@ -3123,7 +3122,7 @@ class spell_gen_spectator_cheer_trigger : public SpellScriptLoader
class spell_gen_spectator_cheer_trigger_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_spectator_cheer_trigger_SpellScript)
+ PrepareSpellScript(spell_gen_spectator_cheer_trigger_SpellScript);
void HandleDummy(SpellEffIndex /*effIndex*/)
{
@@ -3615,7 +3614,7 @@ class spell_gen_vendor_bark_trigger : public SpellScriptLoader
class spell_gen_vendor_bark_trigger_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_vendor_bark_trigger_SpellScript)
+ PrepareSpellScript(spell_gen_vendor_bark_trigger_SpellScript);
void HandleDummy(SpellEffIndex /* effIndex */)
{
diff --git a/src/server/scripts/Spells/spell_holiday.cpp b/src/server/scripts/Spells/spell_holiday.cpp
index dc0c70975dd..85bf85fa2d2 100644
--- a/src/server/scripts/Spells/spell_holiday.cpp
+++ b/src/server/scripts/Spells/spell_holiday.cpp
@@ -296,7 +296,7 @@ class spell_pilgrims_bounty_buff_food : public SpellScriptLoader
class spell_pilgrims_bounty_buff_food_AuraScript : public AuraScript
{
- PrepareAuraScript(spell_pilgrims_bounty_buff_food_AuraScript)
+ PrepareAuraScript(spell_pilgrims_bounty_buff_food_AuraScript);
private:
uint32 const _triggeredSpellId;
diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp
index 2739a8453df..725312eafce 100644
--- a/src/server/scripts/Spells/spell_hunter.cpp
+++ b/src/server/scripts/Spells/spell_hunter.cpp
@@ -744,8 +744,13 @@ class spell_hun_sniper_training : public SpellScriptLoader
{
Unit* target = GetTarget();
uint32 spellId = SPELL_HUNTER_SNIPER_TRAINING_BUFF_R1 + GetId() - SPELL_HUNTER_SNIPER_TRAINING_R1;
- if (!target->HasAura(spellId))
- target->CastSpell(target, spellId, true, 0, aurEff);
+ target->CastSpell(target, spellId, true, 0, aurEff);
+ if (Player* playerTarget = GetUnitOwner()->ToPlayer())
+ {
+ int32 baseAmount = aurEff->GetBaseAmount();
+ int32 amount = playerTarget->CalculateSpellDamage(playerTarget, GetSpellInfo(), aurEff->GetEffIndex(), &baseAmount);
+ GetEffect(EFFECT_0)->SetAmount(amount);
+ }
}
}
diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp
index be3b48b114d..a17d7dce2ea 100644
--- a/src/server/scripts/Spells/spell_item.cpp
+++ b/src/server/scripts/Spells/spell_item.cpp
@@ -2231,7 +2231,8 @@ class spell_item_nitro_boots : public SpellScriptLoader
void HandleDummy(SpellEffIndex /* effIndex */)
{
Unit* caster = GetCaster();
- caster->CastSpell(caster, roll_chance_i(95) ? SPELL_NITRO_BOOTS_SUCCESS : SPELL_NITRO_BOOTS_BACKFIRE, true, GetCastItem());
+ bool success = caster->GetMap()->IsDungeon() || roll_chance_i(95);
+ caster->CastSpell(caster, success ? SPELL_NITRO_BOOTS_SUCCESS : SPELL_NITRO_BOOTS_BACKFIRE, true, GetCastItem());
}
void Register() override
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index f96a30c903a..dea67b5222d 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -205,7 +205,7 @@ class spell_pri_divine_hymn : public SpellScriptLoader
void Register() override
{
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_divine_hymn_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_divine_hymn_SpellScript::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ALLY);
}
};
@@ -336,7 +336,7 @@ class spell_pri_hymn_of_hope : public SpellScriptLoader
void Register() override
{
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_hymn_of_hope_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_hymn_of_hope_SpellScript::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ALLY);
}
};
diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp
index 590cad7007f..61ff79c505e 100644
--- a/src/server/scripts/Spells/spell_shaman.cpp
+++ b/src/server/scripts/Spells/spell_shaman.cpp
@@ -775,7 +775,7 @@ class spell_sha_lava_lash : public SpellScriptLoader
class spell_sha_lava_lash_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_sha_lava_lash_SpellScript)
+ PrepareSpellScript(spell_sha_lava_lash_SpellScript);
bool Load() override
{
diff --git a/src/server/scripts/World/areatrigger_scripts.cpp b/src/server/scripts/World/areatrigger_scripts.cpp
index 73093037689..fb438c38efb 100644
--- a/src/server/scripts/World/areatrigger_scripts.cpp
+++ b/src/server/scripts/World/areatrigger_scripts.cpp
@@ -461,11 +461,11 @@ public:
if (player->GetQuestStatus(QUEST_THE_LONESOME_WATCHER) != QUEST_STATUS_INCOMPLETE)
return false;
- Creature* stormforgedMonitor = Creature::GetCreature(*player, stormforgedMonitorGUID);
+ Creature* stormforgedMonitor = ObjectAccessor::GetCreature(*player, stormforgedMonitorGUID);
if (stormforgedMonitor)
return false;
- Creature* stormforgedEradictor = Creature::GetCreature(*player, stormforgedEradictorGUID);
+ Creature* stormforgedEradictor = ObjectAccessor::GetCreature(*player, stormforgedEradictorGUID);
if (stormforgedEradictor)
return false;
diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp
index 362c02e1af5..950b4cd10e9 100644
--- a/src/server/scripts/World/boss_emerald_dragons.cpp
+++ b/src/server/scripts/World/boss_emerald_dragons.cpp
@@ -781,4 +781,4 @@ void AddSC_emerald_dragons()
// dragon spellscripts
new spell_dream_fog_sleep();
new spell_mark_of_nature();
-};
+}
diff --git a/src/server/scripts/World/guards.cpp b/src/server/scripts/World/guards.cpp
index 416cab8efcd..21a81d37868 100644
--- a/src/server/scripts/World/guards.cpp
+++ b/src/server/scripts/World/guards.cpp
@@ -282,7 +282,7 @@ public:
{
if (exileTimer <= diff)
{
- if (Unit* temp = Unit::GetUnit(*me, playerGUID))
+ if (Unit* temp = ObjectAccessor::GetUnit(*me, playerGUID))
{
temp->CastSpell(temp, SPELL_EXILE, true);
temp->CastSpell(temp, SPELL_BANISH_TELEPORT, true);
@@ -347,7 +347,7 @@ public:
{
if (exileTimer <= diff)
{
- if (Unit* temp = Unit::GetUnit(*me, playerGUID))
+ if (Unit* temp = ObjectAccessor::GetUnit(*me, playerGUID))
{
temp->CastSpell(temp, SPELL_EXILE, true);
temp->CastSpell(temp, SPELL_BANISH_TELEPORT, true);
diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp
index 891ffd83628..bb7da1b7042 100644
--- a/src/server/scripts/World/npcs_special.cpp
+++ b/src/server/scripts/World/npcs_special.cpp
@@ -175,7 +175,7 @@ public:
Creature* GetSummonedGuard()
{
- Creature* creature = Unit::GetCreature(*me, SpawnedGUID);
+ Creature* creature = ObjectAccessor::GetCreature(*me, SpawnedGUID);
if (creature && creature->IsAlive())
return creature;
@@ -671,7 +671,7 @@ public:
std::list<uint64>::const_iterator itr;
for (itr = Patients.begin(); itr != Patients.end(); ++itr)
{
- if (Creature* patient = Unit::GetCreature((*me), *itr))
+ if (Creature* patient = ObjectAccessor::GetCreature((*me), *itr))
patient->setDeathState(JUST_DIED);
}
}
@@ -768,7 +768,7 @@ public:
if (player->GetQuestStatus(6624) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(6622) == QUEST_STATUS_INCOMPLETE)
if (DoctorGUID)
- if (Creature* doctor = Unit::GetCreature(*me, DoctorGUID))
+ if (Creature* doctor = ObjectAccessor::GetCreature(*me, DoctorGUID))
CAST_AI(npc_doctor::npc_doctorAI, doctor->AI())->PatientSaved(me, player, Coord);
//make not selectable
@@ -814,7 +814,7 @@ public:
me->SetFlag(UNIT_DYNAMIC_FLAGS, 32);
if (DoctorGUID)
- if (Creature* doctor = Unit::GetCreature((*me), DoctorGUID))
+ if (Creature* doctor = ObjectAccessor::GetCreature((*me), DoctorGUID))
CAST_AI(npc_doctor::npc_doctorAI, doctor->AI())->PatientDied(Coord);
}
}
@@ -1064,7 +1064,7 @@ public:
{
if (RunAwayTimer <= diff)
{
- if (Unit* unit = Unit::GetUnit(*me, CasterGUID))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, CasterGUID))
{
switch (me->GetEntry())
{
@@ -2319,7 +2319,7 @@ public:
{
if (jumpTimer <= diff)
{
- if (Unit* rabbit = Unit::GetUnit(*me, rabbitGUID))
+ if (Unit* rabbit = ObjectAccessor::GetUnit(*me, rabbitGUID))
DoCast(rabbit, SPELL_SPRING_RABBIT_JUMP);
jumpTimer = urand(5000, 10000);
} else jumpTimer -= diff;
diff --git a/src/server/shared/Containers.h b/src/server/shared/Containers.h
index d6ba98e4ed4..9121fbe2a97 100644
--- a/src/server/shared/Containers.h
+++ b/src/server/shared/Containers.h
@@ -64,6 +64,34 @@ namespace Trinity
std::advance(it, urand(0, container.size() - 1));
return *it;
}
+
+ /**
+ * @fn bool Trinity::Containers::Intersects(Iterator first1, Iterator last1, Iterator first2, Iterator last2)
+ *
+ * @brief Checks if two SORTED containers have a common element
+ *
+ * @param first1 Iterator pointing to start of the first container
+ * @param last1 Iterator pointing to end of the first container
+ * @param first2 Iterator pointing to start of the second container
+ * @param last2 Iterator pointing to end of the second container
+ *
+ * @return true if containers have a common element, false otherwise.
+ */
+ template<class Iterator1, class Iterator2>
+ bool Intersects(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2)
+ {
+ while (first1 != last1 && first2 != last2)
+ {
+ if (*first1 < *first2)
+ ++first1;
+ else if (*first2 < *first1)
+ ++first2;
+ else
+ return true;
+ }
+
+ return false;
+ }
}
//! namespace Containers
}
diff --git a/src/server/shared/Database/DatabaseWorkerPool.h b/src/server/shared/Database/DatabaseWorkerPool.h
index c60458323f7..3665a388854 100644
--- a/src/server/shared/Database/DatabaseWorkerPool.h
+++ b/src/server/shared/Database/DatabaseWorkerPool.h
@@ -49,8 +49,10 @@ class DatabaseWorkerPool
{
public:
/* Activity state */
- DatabaseWorkerPool() : _queue(new ACE_Activation_Queue()), _connectionInfo(NULL)
+ DatabaseWorkerPool() : _connectionInfo(NULL)
{
+ _messageQueue = new ACE_Message_Queue<ACE_SYNCH>(8 * 1024 * 1024, 8 * 1024 * 1024);
+ _queue = new ACE_Activation_Queue(_messageQueue);
memset(_connectionCount, 0, sizeof(_connectionCount));
_connections.resize(IDX_SIZE);
@@ -131,6 +133,7 @@ class DatabaseWorkerPool
//! Deletes the ACE_Activation_Queue object and its underlying ACE_Message_Queue
delete _queue;
+ delete _messageQueue;
TC_LOG_INFO("sql.driver", "All connections on DatabasePool '%s' closed.", GetDatabaseName());
@@ -520,6 +523,7 @@ class DatabaseWorkerPool
IDX_SIZE
};
+ ACE_Message_Queue<ACE_SYNCH>* _messageQueue; //! Message Queue used by ACE_Activation_Queue
ACE_Activation_Queue* _queue; //! Queue shared by async worker threads.
std::vector< std::vector<T*> > _connections;
uint32 _connectionCount[2]; //! Counter of MySQL connections;
diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp
index bc002668b3b..dc9bda62bfb 100644
--- a/src/server/shared/Logging/Log.cpp
+++ b/src/server/shared/Logging/Log.cpp
@@ -250,13 +250,13 @@ void Log::ReadLoggersFromConfig()
AppenderConsole* appender = new AppenderConsole(NextAppenderId(), "Console", LOG_LEVEL_DEBUG, APPENDER_FLAGS_NONE);
appenders[appender->getId()] = appender;
- Logger& rootLogger = loggers[LOGGER_ROOT];
- rootLogger.Create(LOGGER_ROOT, LOG_LEVEL_ERROR);
- rootLogger.addAppender(appender->getId(), appender);
+ Logger& logger = loggers[LOGGER_ROOT];
+ logger.Create(LOGGER_ROOT, LOG_LEVEL_ERROR);
+ logger.addAppender(appender->getId(), appender);
- Logger& serverLogger = loggers["server"];
- serverLogger.Create("server", LOG_LEVEL_INFO);
- serverLogger.addAppender(appender->getId(), appender);
+ logger = loggers["server"];
+ logger.Create("server", LOG_LEVEL_ERROR);
+ logger.addAppender(appender->getId(), appender);
}
}
@@ -267,7 +267,7 @@ void Log::vlog(std::string const& filter, LogLevel level, char const* str, va_li
write(new LogMessage(level, filter, text));
}
-void Log::write(LogMessage* msg)
+void Log::write(LogMessage* msg) const
{
Logger const* logger = GetLoggerByType(msg->type);
msg->text.append("\n");
@@ -376,7 +376,6 @@ void Log::Close()
delete worker;
worker = NULL;
loggers.clear();
- cachedLoggers.clear();
for (AppenderMap::iterator it = appenders.begin(); it != appenders.end(); ++it)
{
delete it->second;
diff --git a/src/server/shared/Logging/Log.h b/src/server/shared/Logging/Log.h
index 5fa638e2f40..a118e6e8773 100644
--- a/src/server/shared/Logging/Log.h
+++ b/src/server/shared/Logging/Log.h
@@ -35,7 +35,6 @@ class Log
friend class ACE_Singleton<Log, ACE_Thread_Mutex>;
typedef std::unordered_map<std::string, Logger> LoggerMap;
- typedef std::unordered_map<std::string, Logger const*> CachedLoggerContainer;
private:
Log();
@@ -44,7 +43,7 @@ class Log
public:
void LoadFromConfig();
void Close();
- bool ShouldLog(std::string const& type, LogLevel level);
+ bool ShouldLog(std::string const& type, LogLevel level) const;
bool SetLogLevel(std::string const& name, char const* level, bool isLogger = true);
void outMessage(std::string const& f, LogLevel level, char const* str, ...) ATTR_PRINTF(4, 5);
@@ -57,9 +56,9 @@ class Log
private:
static std::string GetTimestampStr();
void vlog(std::string const& f, LogLevel level, char const* str, va_list argptr);
- void write(LogMessage* msg);
+ void write(LogMessage* msg) const;
- Logger const* GetLoggerByType(std::string const& type);
+ Logger const* GetLoggerByType(std::string const& type) const;
Appender* GetAppenderByName(std::string const& name);
uint8 NextAppenderId();
void CreateAppenderFromConfig(std::string const& name);
@@ -69,7 +68,6 @@ class Log
AppenderMap appenders;
LoggerMap loggers;
- CachedLoggerContainer cachedLoggers;
uint8 AppenderId;
std::string m_logsDir;
@@ -78,37 +76,29 @@ class Log
LogWorker* worker;
};
-inline Logger const* Log::GetLoggerByType(std::string const& originalType)
+inline Logger const* Log::GetLoggerByType(std::string const& type) const
{
- // Check if already cached
- CachedLoggerContainer::const_iterator itCached = cachedLoggers.find(originalType);
- if (itCached != cachedLoggers.end())
- return itCached->second;
-
- Logger const* logger = NULL;
- std::string type(originalType);
-
- do
- {
- // Search for the logger "type.subtype"
- LoggerMap::const_iterator it = loggers.find(type);
- if (it == loggers.end())
- {
- // Search for the logger "type", if our logger contains '.', otherwise search for LOGGER_ROOT
- size_t found = type.find_last_of(".");
- type = found != std::string::npos ? type.substr(0, found) : LOGGER_ROOT;
- }
- else
- logger = &(it->second);
- }
- while (!logger);
-
- cachedLoggers[originalType] = logger;
- return logger;
+ LoggerMap::const_iterator it = loggers.find(type);
+ if (it != loggers.end())
+ return &(it->second);
+
+ if (type == LOGGER_ROOT)
+ return NULL;
+
+ std::string parentLogger = LOGGER_ROOT;
+ size_t found = type.find_last_of(".");
+ if (found != std::string::npos)
+ parentLogger = type.substr(0,found);
+
+ return GetLoggerByType(parentLogger);
}
-inline bool Log::ShouldLog(std::string const& type, LogLevel level)
+inline bool Log::ShouldLog(std::string const& type, LogLevel level) const
{
+ // TODO: Use cache to store "Type.sub1.sub2": "Type" equivalence, should
+ // Speed up in cases where requesting "Type.sub1.sub2" but only configured
+ // Logger "Type"
+
Logger const* logger = GetLoggerByType(type);
if (!logger)
return false;
diff --git a/src/server/shared/Packets/ByteBuffer.cpp b/src/server/shared/Packets/ByteBuffer.cpp
index b8cb5215665..f446592e922 100644
--- a/src/server/shared/Packets/ByteBuffer.cpp
+++ b/src/server/shared/Packets/ByteBuffer.cpp
@@ -27,11 +27,10 @@ ByteBufferPositionException::ByteBufferPositionException(bool add, size_t pos,
size_t size, size_t valueSize)
{
std::ostringstream ss;
- ACE_Stack_Trace trace;
ss << "Attempted to " << (add ? "put" : "get") << " value with size: "
<< valueSize << " in ByteBuffer (pos: " << pos << " size: " << size
- << ")\n\n" << trace.c_str();
+ << ")";
message().assign(ss.str());
}
@@ -40,12 +39,10 @@ ByteBufferSourceException::ByteBufferSourceException(size_t pos, size_t size,
size_t valueSize)
{
std::ostringstream ss;
- ACE_Stack_Trace trace;
ss << "Attempted to put a "
<< (valueSize > 0 ? "NULL-pointer" : "zero-sized value")
- << " in ByteBuffer (pos: " << pos << " size: " << size << ")\n\n"
- << trace.c_str();
+ << " in ByteBuffer (pos: " << pos << " size: " << size << ")";
message().assign(ss.str());
}
diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h
index bc46b87fa27..9f766a72d19 100644
--- a/src/server/shared/Packets/ByteBuffer.h
+++ b/src/server/shared/Packets/ByteBuffer.h
@@ -31,6 +31,7 @@
#include <vector>
#include <cstring>
#include <time.h>
+#include <math.h>
// Root of ByteBuffer exception hierarchy
class ByteBufferException : public std::exception
@@ -241,12 +242,16 @@ class ByteBuffer
ByteBuffer &operator>>(float &value)
{
value = read<float>();
+ if (!std::isfinite(value))
+ throw ByteBufferException();
return *this;
}
ByteBuffer &operator>>(double &value)
{
value = read<double>();
+ if (!std::isfinite(value))
+ throw ByteBufferException();
return *this;
}
@@ -377,9 +382,19 @@ class ByteBuffer
return *this;
}
- uint8 * contents() { return &_storage[0]; }
+ uint8 * contents()
+ {
+ if (_storage.empty())
+ throw ByteBufferException();
+ return &_storage[0];
+ }
- const uint8 *contents() const { return &_storage[0]; }
+ const uint8 *contents() const
+ {
+ if (_storage.empty())
+ throw ByteBufferException();
+ return &_storage[0];
+ }
size_t size() const { return _storage.size(); }
bool empty() const { return _storage.empty(); }
diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp
index 19112d84266..7832cef18de 100644
--- a/src/tools/mmaps_generator/TerrainBuilder.cpp
+++ b/src/tools/mmaps_generator/TerrainBuilder.cpp
@@ -906,7 +906,7 @@ namespace MMAP
float p0[3], p1[3];
uint32 mid, tx, ty;
float size;
- if (sscanf(buf, "%d %d,%d (%f %f %f) (%f %f %f) %f", &mid, &tx, &ty,
+ if (sscanf(buf, "%u %u,%u (%f %f %f) (%f %f %f) %f", &mid, &tx, &ty,
&p0[0], &p0[1], &p0[2], &p1[0], &p1[1], &p1[2], &size) != 10)
continue;