summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/apps/authserver/Main.cpp3
-rw-r--r--src/server/apps/worldserver/Main.cpp7
-rw-r--r--src/server/database/Database/DatabaseLoader.cpp21
-rw-r--r--src/server/game/AI/CoreAI/TotemAI.cpp2
-rw-r--r--src/server/game/AI/CreatureAI.cpp2
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.cpp7
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.h2
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp4
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp4
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp95
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.h11
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp48
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp78
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h73
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp4
-rw-r--r--src/server/game/ArenaSpectator/ArenaSpectator.cpp2
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseSearcher.cpp2
-rw-r--r--src/server/game/Autobroadcast/AutobroadcastMgr.cpp2
-rw-r--r--src/server/game/Battlefield/Battlefield.cpp8
-rw-r--r--src/server/game/Battlegrounds/ArenaTeam.cpp8
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp29
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.cpp2
-rw-r--r--src/server/game/Battlegrounds/BattlegroundQueue.cpp4
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp6
-rw-r--r--src/server/game/Chat/Channels/Channel.cpp8
-rw-r--r--src/server/game/Chat/Channels/ChannelMgr.cpp2
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp6
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp63
-rw-r--r--src/server/game/Entities/Creature/Creature.h3
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp24
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h2
-rw-r--r--src/server/game/Entities/Item/Item.cpp4
-rw-r--r--src/server/game/Entities/Object/Object.cpp33
-rw-r--r--src/server/game/Entities/Object/Object.h10
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.cpp197
-rw-r--r--src/server/game/Entities/Player/Player.h18
-rw-r--r--src/server/game/Entities/Player/PlayerMisc.cpp22
-rw-r--r--src/server/game/Entities/Player/PlayerQuest.cpp22
-rw-r--r--src/server/game/Entities/Player/PlayerStorage.cpp21
-rw-r--r--src/server/game/Entities/Player/PlayerUpdates.cpp8
-rw-r--r--src/server/game/Entities/Player/SocialMgr.cpp6
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp214
-rw-r--r--src/server/game/Entities/Unit/Unit.h26
-rw-r--r--src/server/game/Entities/Vehicle/Vehicle.cpp4
-rw-r--r--src/server/game/Grids/Notifiers/GridNotifiers.cpp2
-rw-r--r--src/server/game/Grids/Notifiers/GridNotifiers.h11
-rw-r--r--src/server/game/Groups/Group.cpp28
-rw-r--r--src/server/game/Guilds/Guild.cpp6
-rw-r--r--src/server/game/Handlers/ArenaTeamHandler.cpp2
-rw-r--r--src/server/game/Handlers/BattleGroundHandler.cpp12
-rw-r--r--src/server/game/Handlers/ChatHandler.cpp2
-rw-r--r--src/server/game/Handlers/GroupHandler.cpp6
-rw-r--r--src/server/game/Handlers/LootHandler.cpp2
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp27
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp116
-rw-r--r--src/server/game/Handlers/PetitionsHandler.cpp8
-rw-r--r--src/server/game/Handlers/QuestHandler.cpp2
-rw-r--r--src/server/game/Handlers/ReferAFriendHandler.cpp2
-rw-r--r--src/server/game/Handlers/TaxiHandler.cpp82
-rw-r--r--src/server/game/Handlers/TradeHandler.cpp2
-rw-r--r--src/server/game/Maps/Map.cpp16
-rw-r--r--src/server/game/Maps/MapMgr.cpp2
-rw-r--r--src/server/game/Movement/MotionMaster.cpp50
-rw-r--r--src/server/game/Movement/MotionMaster.h10
-rw-r--r--src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp76
-rw-r--r--src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h5
-rw-r--r--src/server/game/Movement/Spline/MoveSpline.h1
-rw-r--r--src/server/game/Movement/Waypoints/WaypointMgr.cpp69
-rw-r--r--src/server/game/Movement/Waypoints/WaypointMgr.h9
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvP.cpp2
-rw-r--r--src/server/game/Scripting/MapScripts.cpp4
-rw-r--r--src/server/game/Scripting/ScriptDefines/ALEScript.cpp (renamed from src/server/game/Scripting/ScriptDefines/ElunaScript.cpp)8
-rw-r--r--src/server/game/Scripting/ScriptDefines/ALEScript.h (renamed from src/server/game/Scripting/ScriptDefines/ElunaScript.h)8
-rw-r--r--src/server/game/Scripting/ScriptDefines/AllScriptsObjects.h2
-rw-r--r--src/server/game/Scripting/ScriptDefines/AreaTriggerScript.cpp4
-rw-r--r--src/server/game/Scripting/ScriptDefines/WeatherScript.cpp4
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp2
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp10
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp6
-rw-r--r--src/server/game/Spells/Spell.cpp6
-rw-r--r--src/server/game/Spells/SpellEffects.cpp8
-rw-r--r--src/server/game/Spells/SpellInfo.cpp2
-rw-r--r--src/server/game/Spells/SpellInfoCorrections.cpp6
-rw-r--r--src/server/game/Texts/CreatureTextMgr.cpp10
-rw-r--r--src/server/game/World/WorldState.cpp2
-rw-r--r--src/server/scripts/Commands/cs_arena.cpp18
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp2
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp2
-rw-r--r--src/server/scripts/Commands/cs_modify.cpp10
-rw-r--r--src/server/scripts/Commands/cs_ticket.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mor_grayhoof.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp1
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp3
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp40
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp16
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp5
-rw-r--r--src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp16
-rw-r--r--src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/zone_ghostlands.cpp29
-rw-r--r--src/server/scripts/EasternKingdoms/zone_hinterlands.cpp5
-rw-r--r--src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp3
-rw-r--r--src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp3
-rw-r--r--src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/zone_undercity.cpp23
-rw-r--r--src/server/scripts/EasternKingdoms/zone_westfall.cpp3
-rw-r--r--src/server/scripts/EasternKingdoms/zone_wetlands.cpp3
-rw-r--r--src/server/scripts/Events/hallows_end.cpp8
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp4
-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.cpp4
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp22
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp15
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp15
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp10
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp10
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp36
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_lieutenant_drake.cpp8
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp18
-rw-r--r--src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp4
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp8
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp2
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp1
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp2
-rw-r--r--src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_ashenvale.cpp3
-rw-r--r--src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp5
-rw-r--r--src/server/scripts/Kalimdor/zone_darkshore.cpp3
-rw-r--r--src/server/scripts/Kalimdor/zone_desolace.cpp1
-rw-r--r--src/server/scripts/Kalimdor/zone_moonglade.cpp1
-rw-r--r--src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp3
-rw-r--r--src/server/scripts/Kalimdor/zone_tanaris.cpp1
-rw-r--r--src/server/scripts/Kalimdor/zone_the_barrens.cpp10
-rw-r--r--src/server/scripts/Kalimdor/zone_thousand_needles.cpp6
-rw-r--r--src/server/scripts/Kalimdor/zone_ungoro_crater.cpp1
-rw-r--r--src/server/scripts/Kalimdor/zone_winterspring.cpp3
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp6
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp15
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp8
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp12
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp2
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp66
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp114
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp36
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp7
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h3
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp8
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp68
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp4
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp10
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp239
-rw-r--r--src/server/scripts/Northrend/Gundrak/gundrak.h2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp3
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp56
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp4
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp26
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp15
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp3
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp10
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp4
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp30
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp10
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp7
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp35
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp5
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp10
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp10
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp20
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_noth.cpp10
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp5
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp5
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp15
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp18
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp27
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h5
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp5
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp9
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp13
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp13
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp3
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp89
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp45
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp10
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp123
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp36
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp53
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp19
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp24
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp11
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp56
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp29
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp3
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp99
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp37
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp88
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp55
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp68
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp32
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp65
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp21
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp18
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp10
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp26
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp5
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp5
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp4
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp40
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp27
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp5
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp25
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp27
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp10
-rw-r--r--src/server/scripts/Northrend/VioletHold/violet_hold.cpp52
-rw-r--r--src/server/scripts/Northrend/zone_borean_tundra.cpp21
-rw-r--r--src/server/scripts/Northrend/zone_crystalsong_forest.cpp20
-rw-r--r--src/server/scripts/Northrend/zone_dragonblight.cpp4
-rw-r--r--src/server/scripts/Northrend/zone_grizzly_hills.cpp30
-rw-r--r--src/server/scripts/Northrend/zone_howling_fjord.cpp15
-rw-r--r--src/server/scripts/Northrend/zone_icecrown.cpp21
-rw-r--r--src/server/scripts/Northrend/zone_sholazar_basin.cpp13
-rw-r--r--src/server/scripts/Northrend/zone_storm_peaks.cpp36
-rw-r--r--src/server/scripts/Northrend/zone_wintergrasp.cpp2
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp6
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_illidan.cpp10
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp6
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_rokmar_the_crackler.cpp5
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SlavePens/the_slave_pens.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/underbog/boss_ghazan.cpp4
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_porung.cpp4
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp12
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp2
-rw-r--r--src/server/scripts/Outland/zone_hellfire_peninsula.cpp6
-rw-r--r--src/server/scripts/Outland/zone_nagrand.cpp6
-rw-r--r--src/server/scripts/Outland/zone_netherstorm.cpp3
-rw-r--r--src/server/scripts/Outland/zone_shadowmoon_valley.cpp12
-rw-r--r--src/server/scripts/Outland/zone_shattrath_city.cpp3
-rw-r--r--src/server/scripts/Outland/zone_terokkar_forest.cpp1
-rw-r--r--src/server/scripts/Pet/pet_generic.cpp4
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp8
262 files changed, 2182 insertions, 2512 deletions
diff --git a/src/server/apps/authserver/Main.cpp b/src/server/apps/authserver/Main.cpp
index b5fbb319a4..5295685de4 100644
--- a/src/server/apps/authserver/Main.cpp
+++ b/src/server/apps/authserver/Main.cpp
@@ -278,7 +278,8 @@ variables_map GetConsoleArguments(int argc, char** argv, fs::path& configFile)
("help,h", "print usage message")
("version,v", "print version build info")
("dry-run,d", "Dry run")
- ("config,c", value<fs::path>(&configFile)->default_value(fs::path(sConfigMgr->GetConfigPath() + std::string(_ACORE_REALM_CONFIG))), "use <arg> as configuration file");
+ ("config,c", value<fs::path>(&configFile)->default_value(fs::path(sConfigMgr->GetConfigPath() + std::string(_ACORE_REALM_CONFIG))), "use <arg> as configuration file")
+ ("config-policy", value<std::string>()->value_name("policy"), "override config severity policy (e.g. default=skip,critical_option=fatal)");
variables_map variablesMap;
diff --git a/src/server/apps/worldserver/Main.cpp b/src/server/apps/worldserver/Main.cpp
index bdc2f860f7..56d26bcae5 100644
--- a/src/server/apps/worldserver/Main.cpp
+++ b/src/server/apps/worldserver/Main.cpp
@@ -423,7 +423,7 @@ bool StartDB()
MySQL::Library_Init();
// Load databases
- DatabaseLoader loader("server.worldserver", DatabaseLoader::DATABASE_NONE, AC_MODULES_LIST);
+ DatabaseLoader loader("server.worldserver", DatabaseLoader::DATABASE_MASK_ALL, AC_MODULES_LIST);
loader
.AddDatabase(LoginDatabase, "Login")
.AddDatabase(CharacterDatabase, "Character")
@@ -433,7 +433,7 @@ bool StartDB()
return false;
///- Get the realm Id from the configuration file
- realm.Id.Realm = sConfigMgr->GetOption<uint32>("RealmID", 0);
+ realm.Id.Realm = sConfigMgr->GetOption<uint32>("RealmID", 1);
if (!realm.Id.Realm)
{
LOG_ERROR("server.worldserver", "Realm ID not defined in configuration file");
@@ -710,7 +710,8 @@ variables_map GetConsoleArguments(int argc, char** argv, fs::path& configFile, [
("help,h", "print usage message")
("version,v", "print version build info")
("dry-run,d", "Dry run")
- ("config,c", value<fs::path>(&configFile)->default_value(fs::path(sConfigMgr->GetConfigPath() + std::string(_ACORE_CORE_CONFIG))), "use <arg> as configuration file");
+ ("config,c", value<fs::path>(&configFile)->default_value(fs::path(sConfigMgr->GetConfigPath() + std::string(_ACORE_CORE_CONFIG))), "use <arg> as configuration file")
+ ("config-policy", value<std::string>()->value_name("policy"), "override config severity policy (e.g. default=skip,critical_option=fatal)");
#if AC_PLATFORM == AC_PLATFORM_WINDOWS
options_description win("Windows platform specific options");
diff --git a/src/server/database/Database/DatabaseLoader.cpp b/src/server/database/Database/DatabaseLoader.cpp
index 5ad77d35d6..32bbb107f5 100644
--- a/src/server/database/Database/DatabaseLoader.cpp
+++ b/src/server/database/Database/DatabaseLoader.cpp
@@ -24,6 +24,24 @@
#include <errmsg.h>
#include <mysqld_error.h>
#include <thread>
+#include <string_view>
+namespace
+{
+ std::string const EMPTY_DATABASE_INFO;
+ std::string const LOGIN_DATABASE_INFO_DEFAULT = "127.0.0.1;3306;acore;acore;acore_auth";
+ std::string const WORLD_DATABASE_INFO_DEFAULT = "127.0.0.1;3306;acore;acore;acore_world";
+ std::string const CHARACTER_DATABASE_INFO_DEFAULT = "127.0.0.1;3306;acore;acore;acore_characters";
+ std::string const& GetDefaultDatabaseInfo(std::string_view name)
+ {
+ if (name == "Login")
+ return LOGIN_DATABASE_INFO_DEFAULT;
+ if (name == "World")
+ return WORLD_DATABASE_INFO_DEFAULT;
+ if (name == "Character")
+ return CHARACTER_DATABASE_INFO_DEFAULT;
+ return EMPTY_DATABASE_INFO;
+ }
+}
DatabaseLoader::DatabaseLoader(std::string const& logger, uint32 const defaultUpdateMask, std::string_view modulesList)
: _logger(logger),
@@ -38,7 +56,8 @@ DatabaseLoader& DatabaseLoader::AddDatabase(DatabaseWorkerPool<T>& pool, std::st
_open.push([this, name, updatesEnabledForThis, &pool]() -> bool
{
- std::string const dbString = sConfigMgr->GetOption<std::string>(name + "DatabaseInfo", "");
+ std::string const& defaultDatabaseInfo = GetDefaultDatabaseInfo(name);
+ std::string const dbString = sConfigMgr->GetOption<std::string>(name + "DatabaseInfo", defaultDatabaseInfo);
if (dbString.empty())
{
LOG_ERROR(_logger, "Database {} not specified in configuration file!", name);
diff --git a/src/server/game/AI/CoreAI/TotemAI.cpp b/src/server/game/AI/CoreAI/TotemAI.cpp
index 79b9045930..054758764e 100644
--- a/src/server/game/AI/CoreAI/TotemAI.cpp
+++ b/src/server/game/AI/CoreAI/TotemAI.cpp
@@ -135,6 +135,6 @@ void TotemAI::AttackStart(Unit* /*victim*/)
data << me->GetGUID();
data << me->GetPositionX();
data << me->GetPositionY();
- me->GetOwner()->ToPlayer()->GetSession()->SendPacket(&data);
+ me->GetOwner()->ToPlayer()->SendDirectMessage(&data);
}
}
diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp
index f338e77895..dce728c142 100644
--- a/src/server/game/AI/CreatureAI.cpp
+++ b/src/server/game/AI/CreatureAI.cpp
@@ -182,7 +182,7 @@ void CreatureAI::MoveInLineOfSight(Unit* who)
if (me->IsMoveInLineOfSightDisabled())
if (me->GetCreatureType() == CREATURE_TYPE_NON_COMBAT_PET || // nothing more to do, return
!who->IsInCombat() || // if not in combat, nothing more to do
- !me->IsWithinDist(who, ATTACK_DISTANCE, true, false)) // if in combat and in dist - neutral to all can actually assist other creatures
+ !me->IsWithinDist(who, ATTACK_DISTANCE, true, false, false)) // if in combat and in dist - neutral to all can actually assist other creatures
return;
if (me->HasReactState(REACT_AGGRESSIVE) && me->CanStartAttack(who))
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
index bbef2c4a76..ca354f0938 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
@@ -552,11 +552,6 @@ void ScriptedAI::SetEquipmentSlots(bool loadDefault, int32 mainHand /*= EQUIP_NO
}
}
-void ScriptedAI::SetRun(bool run)
-{
- me->SetWalk(!run);
-}
-
enum eNPCs
{
NPC_BROODLORD = 12017,
@@ -571,7 +566,7 @@ Player* ScriptedAI::SelectTargetFromPlayerList(float maxdist, uint32 excludeAura
std::vector<Player*> tList;
for(Map::PlayerList::const_iterator itr = pList.begin(); itr != pList.end(); ++itr)
{
- if (!me->IsWithinDistInMap(itr->GetSource(), maxdist, true, false) || !itr->GetSource()->IsAlive() || itr->GetSource()->IsGameMaster())
+ if (!me->IsWithinDistInMap(itr->GetSource(), maxdist, true, false, false) || !itr->GetSource()->IsAlive() || itr->GetSource()->IsGameMaster())
continue;
if (excludeAura && itr->GetSource()->HasAura(excludeAura))
continue;
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
index d3a13f3003..c5c71af9ff 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
@@ -227,8 +227,6 @@ struct ScriptedAI : public CreatureAI
// Called when AI is temporarily replaced or put back when possess is applied or removed
void OnPossess(bool /*apply*/) {}
- void SetRun(bool run);
-
enum class Axis
{
AXIS_X,
diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
index 7fe07cf1e4..85fbf8a906 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
@@ -218,10 +218,10 @@ bool npc_escortAI::IsPlayerOrGroupInRange()
{
for (GroupReference* groupRef = group->GetFirstMember(); groupRef != nullptr; groupRef = groupRef->next())
if (Player* member = groupRef->GetSource())
- if (me->IsWithinDistInMap(member, GetMaxPlayerDistance(), true, false))
+ if (me->IsWithinDistInMap(member, GetMaxPlayerDistance(), true, false, false))
return true;
}
- else if (me->IsWithinDistInMap(player, GetMaxPlayerDistance(), true, false))
+ else if (me->IsWithinDistInMap(player, GetMaxPlayerDistance(), true, false, false))
return true;
}
diff --git a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp
index 019bb58b5d..c43f81ff4f 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp
@@ -202,7 +202,7 @@ void FollowerAI::UpdateAI(uint32 uiDiff)
{
Player* member = groupRef->GetSource();
- if (member && me->IsWithinDistInMap(member, MAX_PLAYER_DISTANCE, true, false))
+ if (member && me->IsWithinDistInMap(member, MAX_PLAYER_DISTANCE, true, false, false))
{
bIsMaxRangeExceeded = false;
break;
@@ -211,7 +211,7 @@ void FollowerAI::UpdateAI(uint32 uiDiff)
}
else
{
- if (me->IsWithinDistInMap(player, MAX_PLAYER_DISTANCE, true, false))
+ if (me->IsWithinDistInMap(player, MAX_PLAYER_DISTANCE, true, false, false))
bIsMaxRangeExceeded = false;
}
}
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp
index b9a78c6d94..198c7adb43 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -49,6 +49,8 @@ SmartAI::SmartAI(Creature* c) : CreatureAI(c)
mForcedPaused = false;
+ mForcedMovement = FORCED_MOVEMENT_NONE;
+
mEscortQuestID = 0;
mDespawnTime = 0;
@@ -106,20 +108,20 @@ void SmartAI::UpdateDespawn(const uint32 diff)
mDespawnTime -= diff;
}
-WayPoint* SmartAI::GetNextWayPoint()
+WaypointData const* SmartAI::GetNextWayPoint()
{
if (!mWayPoints || mWayPoints->empty())
return nullptr;
mCurrentWPID++;
- WPPath::const_iterator itr = mWayPoints->find(mCurrentWPID);
+ auto itr = mWayPoints->find(mCurrentWPID);
if (itr != mWayPoints->end())
{
- mLastWP = (*itr).second;
+ mLastWP = &(*itr).second;
if (mLastWP->id != mCurrentWPID)
LOG_ERROR("scripts.ai.sai", "SmartAI::GetNextWayPoint: Got not expected waypoint id {}, expected {}", mLastWP->id, mCurrentWPID);
- return (*itr).second;
+ return &(*itr).second;
}
return nullptr;
}
@@ -136,12 +138,15 @@ void SmartAI::GenerateWayPointArray(Movement::PointsArray* points)
points->clear();
points->push_back(G3D::Vector3(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()));
uint32 wpCounter = mCurrentWPID;
- WPPath::const_iterator itr;
- while ((itr = mWayPoints->find(wpCounter++)) != mWayPoints->end())
+ auto itr = mWayPoints->find(wpCounter++);
+ do
{
- WayPoint* wp = (*itr).second;
- points->push_back(G3D::Vector3(wp->x, wp->y, wp->z));
+ WaypointData const& wp = (*itr).second;
+ points->push_back(G3D::Vector3(wp.x, wp.y, wp.z));
+
+ itr = mWayPoints->find(wpCounter++);
}
+ while (itr != mWayPoints->end());
}
else
{
@@ -150,15 +155,15 @@ void SmartAI::GenerateWayPointArray(Movement::PointsArray* points)
std::vector<G3D::Vector3> pVector;
// xinef: first point in vector is unit real position
pVector.push_back(G3D::Vector3(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()));
+ uint32 wpCounter = mCurrentWPID;
+
uint32 length = (mWayPoints->size() - mCurrentWPID) * size;
uint32 cnt = 0;
- uint32 wpCounter = mCurrentWPID;
- WPPath::const_iterator itr;
- while ((itr = mWayPoints->find(wpCounter++)) != mWayPoints->end() && cnt++ <= length)
+ for (auto itr = mWayPoints->find(wpCounter); itr != mWayPoints->end() && cnt++ <= length; ++itr)
{
- WayPoint* wp = (*itr).second;
- pVector.push_back(G3D::Vector3(wp->x, wp->y, wp->z));
+ WaypointData const& wp = (*itr).second;
+ pVector.push_back(G3D::Vector3(wp.x, wp.y, wp.z));
}
if (pVector.size() > 2) // more than source + dest
@@ -187,24 +192,25 @@ void SmartAI::GenerateWayPointArray(Movement::PointsArray* points)
}
}
-void SmartAI::StartPath(ForcedMovement forcedMovement, uint32 path, bool repeat, Unit* invoker)
+void SmartAI::StartPath(ForcedMovement forcedMovement, uint32 path, bool repeat, Unit* invoker, PathSource pathSource)
{
if (HasEscortState(SMART_ESCORT_ESCORTING))
StopPath();
if (path)
{
- if (!LoadPath(path))
+ if (!LoadPath(path, pathSource))
return;
}
if (!mWayPoints || mWayPoints->empty())
return;
- if (WayPoint* wp = GetNextWayPoint())
+ if (WaypointData const* wp = GetNextWayPoint())
{
AddEscortState(SMART_ESCORT_ESCORTING);
mCanRepeatPath = repeat;
+ mForcedMovement = forcedMovement;
if (invoker && invoker->IsPlayer())
{
@@ -215,21 +221,38 @@ void SmartAI::StartPath(ForcedMovement forcedMovement, uint32 path, bool repeat,
Movement::PointsArray pathPoints;
GenerateWayPointArray(&pathPoints);
- me->GetMotionMaster()->MoveSplinePath(&pathPoints, forcedMovement);
- GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_START, nullptr, wp->id, GetScript()->GetPathId());
+ me->GetMotionMaster()->MoveSplinePath(&pathPoints, mForcedMovement);
+ GetScript()->ProcessEventsFor(SMART_EVENT_ESCORT_START, nullptr, wp->id, GetScript()->GetPathId());
}
}
-bool SmartAI::LoadPath(uint32 entry)
+bool SmartAI::LoadPath(uint32 entry, PathSource pathSource)
{
if (HasEscortState(SMART_ESCORT_ESCORTING))
return false;
- mWayPoints = sSmartWaypointMgr->GetPath(entry);
- if (!mWayPoints)
+ switch (pathSource)
{
- GetScript()->SetPathId(0);
- return false;
+ case PathSource::SMART_WAYPOINT_MGR:
+ {
+ mWayPoints = sSmartWaypointMgr->GetPath(entry);
+ if (!mWayPoints)
+ {
+ GetScript()->SetPathId(0);
+ return false;
+ }
+ break;
+ }
+ case PathSource::WAYPOINT_MGR:
+ {
+ mWayPoints = sWaypointMgr->GetPath(entry);
+ if (!mWayPoints)
+ {
+ GetScript()->SetPathId(0);
+ return false;
+ }
+ break;
+ }
}
GetScript()->SetPathId(entry);
@@ -259,12 +282,12 @@ void SmartAI::PausePath(uint32 delay, bool forced)
me->GetMotionMaster()->MoveIdle();//force stop
auto waypoint = mWayPoints->find(mCurrentWPID);
- if (waypoint->second->o.has_value())
+ if (waypoint->second.orientation.has_value())
{
- me->SetFacingTo(waypoint->second->o.has_value());
+ me->SetFacingTo(*waypoint->second.orientation);
}
}
- GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_PAUSED, nullptr, mCurrentWPID, GetScript()->GetPathId());
+ GetScript()->ProcessEventsFor(SMART_EVENT_ESCORT_PAUSED, nullptr, mCurrentWPID, GetScript()->GetPathId());
}
void SmartAI::StopPath(uint32 DespawnTime, uint32 quest, bool fail)
@@ -282,7 +305,7 @@ void SmartAI::StopPath(uint32 DespawnTime, uint32 quest, bool fail)
me->StopMoving();
me->GetMotionMaster()->MoveIdle();
- GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_STOPPED, nullptr, mCurrentWPID, GetScript()->GetPathId());
+ GetScript()->ProcessEventsFor(SMART_EVENT_ESCORT_STOPPED, nullptr, mCurrentWPID, GetScript()->GetPathId());
EndPath(fail);
}
@@ -351,13 +374,13 @@ void SmartAI::EndPath(bool fail)
return;
}
- GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_ENDED, nullptr, mCurrentWPID, GetScript()->GetPathId());
+ GetScript()->ProcessEventsFor(SMART_EVENT_ESCORT_ENDED, nullptr, mCurrentWPID, GetScript()->GetPathId());
mCurrentWPID = 0;
if (mCanRepeatPath)
{
if (IsAIControlled())
- StartPath(FORCED_MOVEMENT_NONE, GetScript()->GetPathId(), true);
+ StartPath(mForcedMovement, GetScript()->GetPathId(), true);
}
else
GetScript()->SetPathId(0);
@@ -373,7 +396,7 @@ void SmartAI::ResumePath()
Movement::PointsArray pathPoints;
GenerateWayPointArray(&pathPoints);
- me->GetMotionMaster()->MoveSplinePath(&pathPoints);
+ me->GetMotionMaster()->MoveSplinePath(&pathPoints, mForcedMovement);
}
}
@@ -417,7 +440,7 @@ void SmartAI::UpdatePath(const uint32 diff)
{
if (!me->IsInCombat() && !HasEscortState(SMART_ESCORT_RETURNING) && (mWPReached || mForcedPaused))
{
- GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_RESUMED, nullptr, mCurrentWPID, GetScript()->GetPathId());
+ GetScript()->ProcessEventsFor(SMART_EVENT_ESCORT_RESUMED, nullptr, mCurrentWPID, GetScript()->GetPathId());
RemoveEscortState(SMART_ESCORT_PAUSED);
if (mForcedPaused)// if paused between 2 wps resend movement
{
@@ -596,7 +619,7 @@ void SmartAI::MovepointReached(uint32 id)
}
mWPReached = true;
- GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_REACHED, nullptr, mCurrentWPID);
+ GetScript()->ProcessEventsFor(SMART_EVENT_ESCORT_REACHED, nullptr, mCurrentWPID);
if (mLastWP)
{
@@ -633,7 +656,7 @@ void SmartAI::MovementInform(uint32 MovementType, uint32 Data)
me->ClearUnitState(UNIT_STATE_EVADE);
if (MovementType == WAYPOINT_MOTION_TYPE)
- GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_DATA_REACHED, nullptr, Data + 1); // Data + 1 to align smart_scripts and waypoint_data Id rows
+ GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_REACHED, nullptr, Data); // data now corresponds to columns
GetScript()->ProcessEventsFor(SMART_EVENT_MOVEMENTINFORM, nullptr, MovementType, Data);
if (!HasEscortState(SMART_ESCORT_ESCORTING))
@@ -783,7 +806,7 @@ void SmartAI::JustReachedHome()
GetScript()->ProcessEventsFor(SMART_EVENT_REACHED_HOME);
if (!UpdateVictim() && me->GetMotionMaster()->GetCurrentMovementGeneratorType() == IDLE_MOTION_TYPE && me->GetWaypointPath())
- me->GetMotionMaster()->MovePath(me->GetWaypointPath(), true);
+ me->GetMotionMaster()->MoveWaypoint(me->GetWaypointPath(), true);
}
mJustReset = false;
@@ -940,7 +963,7 @@ void SmartAI::OnCharmed(bool /* apply */)
if (!charmed && !me->IsInEvadeMode())
{
if (mCanRepeatPath)
- StartPath(FORCED_MOVEMENT_NONE, GetScript()->GetPathId(), true);
+ StartPath(mForcedMovement, GetScript()->GetPathId(), true);
if (Unit* charmer = me->GetCharmer())
AttackStart(charmer);
@@ -1146,7 +1169,7 @@ void SmartAI::OnSpellClick(Unit* clicker, bool& /*result*/)
void SmartAI::PathEndReached(uint32 /*pathId*/)
{
- GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_DATA_ENDED, nullptr, 0, me->GetWaypointPath());
+ GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_ENDED, nullptr, 0, me->GetWaypointPath());
me->LoadPath(0);
}
diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h
index d8ac699dc6..3551f681de 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.h
+++ b/src/server/game/AI/SmartScripts/SmartAI.h
@@ -52,13 +52,13 @@ public:
bool IsAIControlled() const;
// Start moving to the desired MovePoint
- void StartPath(ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE, uint32 path = 0, bool repeat = false, Unit* invoker = nullptr);
- bool LoadPath(uint32 entry);
+ void StartPath(ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE, uint32 path = 0, bool repeat = false, Unit* invoker = nullptr, PathSource pathSource = PathSource::SMART_WAYPOINT_MGR);
+ bool LoadPath(uint32 entry, PathSource pathSource);
void PausePath(uint32 delay, bool forced = false);
void StopPath(uint32 DespawnTime = 0, uint32 quest = 0, bool fail = false);
void EndPath(bool fail = false);
void ResumePath();
- WayPoint* GetNextWayPoint();
+ WaypointData const* GetNextWayPoint();
void GenerateWayPointArray(Movement::PointsArray* points);
bool HasEscortState(uint32 uiEscortState) { return (mEscortState & uiEscortState); }
void AddEscortState(uint32 uiEscortState) { mEscortState |= uiEscortState; }
@@ -227,13 +227,13 @@ private:
void ReturnToLastOOCPos();
void UpdatePath(const uint32 diff);
SmartScript mScript;
- WPPath* mWayPoints;
+ WaypointPath const* mWayPoints;
uint32 mEscortState;
uint32 mCurrentWPID;
bool mWPReached;
bool mOOCReached;
uint32 mWPPauseTimer;
- WayPoint* mLastWP;
+ WaypointData const* mLastWP;
uint32 mEscortNPCFlags;
uint32 GetWPCount() { return mWayPoints ? mWayPoints->size() : 0; }
bool mCanRepeatPath;
@@ -241,6 +241,7 @@ private:
bool mCanAutoAttack;
bool mForcedPaused;
uint32 mInvincibilityHpLevel;
+ ForcedMovement mForcedMovement;
bool AssistPlayerInCombatAgainst(Unit* who);
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 38febbc9fa..0991290b2b 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -1723,7 +1723,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
StoreCounter(e.action.setCounter.counterId, e.action.setCounter.value, e.action.setCounter.reset, e.action.setCounter.subtract);
break;
}
- case SMART_ACTION_WP_START:
+ case SMART_ACTION_ESCORT_START:
{
if (!IsSmart())
break;
@@ -1750,16 +1750,16 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
CAST_AI(SmartAI, me->AI())->SetDespawnTime(DespawnTime);
break;
}
- case SMART_ACTION_WP_PAUSE:
+ case SMART_ACTION_ESCORT_PAUSE:
{
if (!IsSmart())
break;
uint32 delay = e.action.wpPause.delay;
- CAST_AI(SmartAI, me->AI())->PausePath(delay, e.GetEventType() == SMART_EVENT_WAYPOINT_REACHED ? false : true);
+ CAST_AI(SmartAI, me->AI())->PausePath(delay, e.GetEventType() == SMART_EVENT_ESCORT_REACHED ? false : true);
break;
}
- case SMART_ACTION_WP_STOP:
+ case SMART_ACTION_ESCORT_STOP:
{
if (!IsSmart())
break;
@@ -1770,7 +1770,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
CAST_AI(SmartAI, me->AI())->StopPath(DespawnTime, quest, fail);
break;
}
- case SMART_ACTION_WP_RESUME:
+ case SMART_ACTION_ESCORT_RESUME:
{
if (!IsSmart())
break;
@@ -2519,21 +2519,19 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
for (uint32 wp = e.action.startClosestWaypoint.pathId1; wp <= e.action.startClosestWaypoint.pathId2; ++wp)
{
- WPPath* path = sSmartWaypointMgr->GetPath(wp);
+ WaypointPath* path = sSmartWaypointMgr->GetPath(wp);
if (!path || path->empty())
continue;
auto itrWp = path->find(1);
if (itrWp != path->end())
{
- if (WayPoint* wpData = itrWp->second)
+ WaypointData& wpData = itrWp->second;
+ float distToThisPath = creature->GetExactDistSq(wpData.x, wpData.y, wpData.z);
+ if (distToThisPath < distanceToClosest)
{
- float distToThisPath = creature->GetExactDistSq(wpData->x, wpData->y, wpData->z);
- if (distToThisPath < distanceToClosest)
- {
- distanceToClosest = distToThisPath;
- closestWpId = wp;
- }
+ distanceToClosest = distToThisPath;
+ closestWpId = wp;
}
}
}
@@ -3221,7 +3219,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
}
break;
}
- case SMART_ACTION_WAYPOINT_DATA_START:
+ case SMART_ACTION_WAYPOINT_START:
{
if (e.action.wpData.pathId)
{
@@ -3230,7 +3228,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (IsCreature(target))
{
target->ToCreature()->LoadPath(e.action.wpData.pathId);
- target->ToCreature()->GetMotionMaster()->MovePath(e.action.wpData.pathId, e.action.wpData.repeat);
+ target->ToCreature()->GetMotionMaster()->MoveWaypoint(e.action.wpData.pathId, e.action.wpData.repeat, e.action.wpData.pathSource);
}
}
}
@@ -3247,7 +3245,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
uint32 path = urand(e.action.wpDataRandom.pathId1, e.action.wpDataRandom.pathId2);
target->ToCreature()->LoadPath(path);
- target->ToCreature()->GetMotionMaster()->MovePath(path, e.action.wpDataRandom.repeat);
+ target->ToCreature()->GetMotionMaster()->MoveWaypoint(path, e.action.wpDataRandom.repeat);
}
}
}
@@ -4398,22 +4396,24 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
{
if ((e.event.movementInform.type && var0 != e.event.movementInform.type) || (e.event.movementInform.id && var1 != e.event.movementInform.id))
return;
+ if (e.event.movementInform.pathId != 0 && e.event.movementInform.pathId != me->GetWaypointPath())
+ return;
ProcessAction(e, unit, var0, var1);
break;
}
case SMART_EVENT_TRANSPORT_RELOCATE:
- case SMART_EVENT_WAYPOINT_START:
+ case SMART_EVENT_ESCORT_START:
{
if (e.event.waypoint.pathID && var0 != e.event.waypoint.pathID)
return;
ProcessAction(e, unit, var0);
break;
}
- case SMART_EVENT_WAYPOINT_REACHED:
- case SMART_EVENT_WAYPOINT_RESUMED:
- case SMART_EVENT_WAYPOINT_PAUSED:
- case SMART_EVENT_WAYPOINT_STOPPED:
- case SMART_EVENT_WAYPOINT_ENDED:
+ case SMART_EVENT_ESCORT_REACHED:
+ case SMART_EVENT_ESCORT_RESUMED:
+ case SMART_EVENT_ESCORT_PAUSED:
+ case SMART_EVENT_ESCORT_STOPPED:
+ case SMART_EVENT_ESCORT_ENDED:
{
if (!me || (e.event.waypoint.pointID && var0 != e.event.waypoint.pointID) || (e.event.waypoint.pathID && GetPathId() != e.event.waypoint.pathID))
return;
@@ -4807,8 +4807,8 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
RecalcTimer(e, 1200, 1200);
break;
}
- case SMART_EVENT_WAYPOINT_DATA_REACHED:
- case SMART_EVENT_WAYPOINT_DATA_ENDED:
+ case SMART_EVENT_WAYPOINT_REACHED:
+ case SMART_EVENT_WAYPOINT_ENDED:
{
if (!me || (e.event.wpData.pointId && var0 != e.event.wpData.pointId) || (e.event.wpData.pathId && me->GetWaypointPath() != e.event.wpData.pathId))
return;
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index 47c5c91660..ac5ba3d559 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -48,12 +48,9 @@ void SmartWaypointMgr::LoadFromDB()
{
uint32 oldMSTime = getMSTime();
- for (std::unordered_map<uint32, WPPath*>::iterator itr = waypoint_map.begin(); itr != waypoint_map.end(); ++itr)
+ for (auto itr : waypoint_map)
{
- for (WPPath::iterator pathItr = itr->second->begin(); pathItr != itr->second->end(); ++pathItr)
- delete pathItr->second;
-
- delete itr->second;
+ delete itr.second;
}
waypoint_map.clear();
@@ -88,7 +85,7 @@ void SmartWaypointMgr::LoadFromDB()
if (last_entry != entry)
{
- waypoint_map[entry] = new WPPath();
+ waypoint_map[entry] = new WaypointPath();
last_id = 1;
count++;
}
@@ -97,7 +94,15 @@ void SmartWaypointMgr::LoadFromDB()
LOG_ERROR("sql.sql", "SmartWaypointMgr::LoadFromDB: Path entry {}, unexpected point id {}, expected {}.", entry, id, last_id);
last_id++;
- (*waypoint_map[entry])[id] = new WayPoint(id, x, y, z, o, delay);
+ WaypointData data;
+ data.id = id;
+ data.x = x;
+ data.y = y;
+ data.z = z;
+ data.orientation = o;
+ data.delay = delay;
+ data.move_type = WAYPOINT_MOVE_TYPE_MAX;
+ (*waypoint_map[entry]).emplace(id, data);
last_entry = entry;
total++;
@@ -109,12 +114,9 @@ void SmartWaypointMgr::LoadFromDB()
SmartWaypointMgr::~SmartWaypointMgr()
{
- for (std::unordered_map<uint32, WPPath*>::iterator itr = waypoint_map.begin(); itr != waypoint_map.end(); ++itr)
+ for (auto itr : waypoint_map)
{
- for (WPPath::iterator pathItr = itr->second->begin(); pathItr != itr->second->end(); ++pathItr)
- delete pathItr->second;
-
- delete itr->second;
+ delete itr.second;
}
}
@@ -625,8 +627,8 @@ bool SmartAIMgr::CheckUnusedEventParams(SmartScriptHolder const& e)
case SMART_EVENT_CORPSE_REMOVED: return NO_PARAMS;
case SMART_EVENT_AI_INIT: return NO_PARAMS;
case SMART_EVENT_DATA_SET: return sizeof(SmartEvent::dataSet);
- case SMART_EVENT_WAYPOINT_START: return sizeof(SmartEvent::waypoint);
- case SMART_EVENT_WAYPOINT_REACHED: return sizeof(SmartEvent::waypoint);
+ case SMART_EVENT_ESCORT_START: return sizeof(SmartEvent::waypoint);
+ case SMART_EVENT_ESCORT_REACHED: return sizeof(SmartEvent::waypoint);
case SMART_EVENT_TRANSPORT_ADDPLAYER: return NO_PARAMS;
case SMART_EVENT_TRANSPORT_ADDCREATURE: return sizeof(SmartEvent::transportAddCreature);
case SMART_EVENT_TRANSPORT_REMOVE_PLAYER: return NO_PARAMS;
@@ -641,10 +643,10 @@ bool SmartAIMgr::CheckUnusedEventParams(SmartScriptHolder const& e)
case SMART_EVENT_TEXT_OVER: return sizeof(SmartEvent::textOver);
case SMART_EVENT_RECEIVE_HEAL: return sizeof(SmartEvent::minMaxRepeat);
case SMART_EVENT_JUST_SUMMONED: return NO_PARAMS;
- case SMART_EVENT_WAYPOINT_PAUSED: return sizeof(SmartEvent::waypoint);
- case SMART_EVENT_WAYPOINT_RESUMED: return sizeof(SmartEvent::waypoint);
- case SMART_EVENT_WAYPOINT_STOPPED: return sizeof(SmartEvent::waypoint);
- case SMART_EVENT_WAYPOINT_ENDED: return sizeof(SmartEvent::waypoint);
+ case SMART_EVENT_ESCORT_PAUSED: return sizeof(SmartEvent::waypoint);
+ case SMART_EVENT_ESCORT_RESUMED: return sizeof(SmartEvent::waypoint);
+ case SMART_EVENT_ESCORT_STOPPED: return sizeof(SmartEvent::waypoint);
+ case SMART_EVENT_ESCORT_ENDED: return sizeof(SmartEvent::waypoint);
case SMART_EVENT_TIMED_EVENT_TRIGGERED: return sizeof(SmartEvent::timedEvent);
case SMART_EVENT_UPDATE: return sizeof(SmartEvent::minMaxRepeat);
case SMART_EVENT_LINK: return NO_PARAMS;
@@ -677,8 +679,8 @@ bool SmartAIMgr::CheckUnusedEventParams(SmartScriptHolder const& e)
case SMART_EVENT_AREA_CASTING: return sizeof(SmartEvent::minMaxRepeat);
case SMART_EVENT_AREA_RANGE: return sizeof(SmartEvent::minMaxRepeat);
case SMART_EVENT_SUMMONED_UNIT_EVADE: return sizeof(SmartEvent::summoned);
- case SMART_EVENT_WAYPOINT_DATA_REACHED: return sizeof(SmartEvent::wpData);
- case SMART_EVENT_WAYPOINT_DATA_ENDED: return sizeof(SmartEvent::wpData);
+ case SMART_EVENT_WAYPOINT_REACHED: return sizeof(SmartEvent::wpData);
+ case SMART_EVENT_WAYPOINT_ENDED: return sizeof(SmartEvent::wpData);
default:
LOG_WARN("sql.sql", "SmartAIMgr: entryorguid {} source_type {} id {} action_type {} is using an event {} with no unused params specified in SmartAIMgr::CheckUnusedEventParams(), please report this.",
e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.GetEventType());
@@ -765,9 +767,9 @@ bool SmartAIMgr::CheckUnusedActionParams(SmartScriptHolder const& e)
case SMART_ACTION_SUMMON_GO: return sizeof(SmartAction::summonGO);
case SMART_ACTION_KILL_UNIT: return NO_PARAMS;
case SMART_ACTION_ACTIVATE_TAXI: return sizeof(SmartAction::taxi);
- case SMART_ACTION_WP_START: return sizeof(SmartAction::wpStart);
- case SMART_ACTION_WP_PAUSE: return sizeof(SmartAction::wpPause);
- case SMART_ACTION_WP_STOP: return sizeof(SmartAction::wpStop);
+ case SMART_ACTION_ESCORT_START: return sizeof(SmartAction::wpStart);
+ case SMART_ACTION_ESCORT_PAUSE: return sizeof(SmartAction::wpPause);
+ case SMART_ACTION_ESCORT_STOP: return sizeof(SmartAction::wpStop);
case SMART_ACTION_ADD_ITEM: return sizeof(SmartAction::item);
case SMART_ACTION_REMOVE_ITEM: return sizeof(SmartAction::item);
case SMART_ACTION_INSTALL_AI_TEMPLATE: return sizeof(SmartAction::installTtemplate);
@@ -777,7 +779,7 @@ bool SmartAIMgr::CheckUnusedActionParams(SmartScriptHolder const& e)
case SMART_ACTION_TELEPORT: return sizeof(SmartAction::teleport);
case SMART_ACTION_SET_COUNTER: return sizeof(SmartAction::setCounter);
case SMART_ACTION_STORE_TARGET_LIST: return sizeof(SmartAction::storeTargets);
- case SMART_ACTION_WP_RESUME: return NO_PARAMS;
+ case SMART_ACTION_ESCORT_RESUME: return NO_PARAMS;
case SMART_ACTION_SET_ORIENTATION: return sizeof(SmartAction::orientation);
case SMART_ACTION_CREATE_TIMED_EVENT: return sizeof(SmartAction::timeEvent);
case SMART_ACTION_PLAYMOVIE: return sizeof(SmartAction::movie);
@@ -875,7 +877,7 @@ bool SmartAIMgr::CheckUnusedActionParams(SmartScriptHolder const& e)
case SMART_ACTION_PLAY_SPELL_VISUAL: return sizeof(SmartAction::spellVisual);
case SMART_ACTION_FOLLOW_GROUP: return sizeof(SmartAction::followGroup);
case SMART_ACTION_SET_ORIENTATION_TARGET: return sizeof(SmartAction::orientationTarget);
- case SMART_ACTION_WAYPOINT_DATA_START: return sizeof(SmartAction::wpData);
+ case SMART_ACTION_WAYPOINT_START: return sizeof(SmartAction::wpData);
case SMART_ACTION_WAYPOINT_DATA_RANDOM: return sizeof(SmartAction::wpDataRandom);
case SMART_ACTION_MOVEMENT_STOP: return NO_PARAMS;
case SMART_ACTION_MOVEMENT_PAUSE: return sizeof(SmartAction::move);
@@ -1416,19 +1418,19 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_EVENT_QUEST_REWARDED:
case SMART_EVENT_QUEST_FAIL:
case SMART_EVENT_JUST_SUMMONED:
- case SMART_EVENT_WAYPOINT_START:
- case SMART_EVENT_WAYPOINT_REACHED:
- case SMART_EVENT_WAYPOINT_PAUSED:
- case SMART_EVENT_WAYPOINT_RESUMED:
- case SMART_EVENT_WAYPOINT_STOPPED:
- case SMART_EVENT_WAYPOINT_ENDED:
+ case SMART_EVENT_ESCORT_START:
+ case SMART_EVENT_ESCORT_REACHED:
+ case SMART_EVENT_ESCORT_PAUSED:
+ case SMART_EVENT_ESCORT_RESUMED:
+ case SMART_EVENT_ESCORT_STOPPED:
+ case SMART_EVENT_ESCORT_ENDED:
case SMART_EVENT_GOSSIP_SELECT:
case SMART_EVENT_GOSSIP_HELLO:
case SMART_EVENT_JUST_CREATED:
case SMART_EVENT_FOLLOW_COMPLETED:
case SMART_EVENT_ON_SPELLCLICK:
- case SMART_EVENT_WAYPOINT_DATA_REACHED:
- case SMART_EVENT_WAYPOINT_DATA_ENDED:
+ case SMART_EVENT_WAYPOINT_REACHED:
+ case SMART_EVENT_WAYPOINT_ENDED:
break;
default:
LOG_ERROR("sql.sql", "SmartAIMgr: Not handled event_type({}), Entry {} SourceType {} Event {} Action {}, skipped.", e.GetEventType(), e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
@@ -1721,11 +1723,11 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
return false;
}
break;
- case SMART_ACTION_WP_STOP:
+ case SMART_ACTION_ESCORT_STOP:
if (e.action.wpStop.quest && !IsQuestValid(e, e.action.wpStop.quest))
return false;
return IsSAIBoolValid(e, e.action.wpStop.fail);
- case SMART_ACTION_WP_START:
+ case SMART_ACTION_ESCORT_START:
{
if (!sSmartWaypointMgr->GetPath(e.action.wpStart.pathID))
{
@@ -1940,7 +1942,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_STORE_TARGET_LIST:
case SMART_ACTION_COMBAT_STOP:
case SMART_ACTION_DIE:
- case SMART_ACTION_WP_RESUME:
+ case SMART_ACTION_ESCORT_RESUME:
case SMART_ACTION_KILL_UNIT:
case SMART_ACTION_SET_INVINCIBILITY_HP_LEVEL:
case SMART_ACTION_RESET_GOBJECT:
@@ -1950,7 +1952,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_SET_INST_DATA64:
case SMART_ACTION_SET_DATA:
case SMART_ACTION_MOVE_FORWARD:
- case SMART_ACTION_WP_PAUSE:
+ case SMART_ACTION_ESCORT_PAUSE:
case SMART_ACTION_SET_FLY:
case SMART_ACTION_FORCE_DESPAWN:
case SMART_ACTION_SET_INGAME_PHASE_MASK:
@@ -2020,7 +2022,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_PLAY_SPELL_VISUAL:
case SMART_ACTION_FOLLOW_GROUP:
case SMART_ACTION_SET_ORIENTATION_TARGET:
- case SMART_ACTION_WAYPOINT_DATA_START:
+ case SMART_ACTION_WAYPOINT_START:
case SMART_ACTION_WAYPOINT_DATA_RANDOM:
case SMART_ACTION_MOVEMENT_STOP:
case SMART_ACTION_MOVEMENT_PAUSE:
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index 9e6c15522c..3c6fd40048 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -26,29 +26,10 @@
#include "Optional.h"
#include "SpellMgr.h"
#include <limits>
+#include "WaypointMgr.h"
typedef uint32 SAIBool;
-struct WayPoint
-{
- WayPoint(uint32 _id, float _x, float _y, float _z, Optional<float> _o, uint32 _delay)
- {
- id = _id;
- x = _x;
- y = _y;
- z = _z;
- o = _o;
- delay = _delay;
- }
-
- uint32 id;
- float x;
- float y;
- float z;
- std::optional<float> o;
- uint32 delay;
-};
-
enum eSmartAI
{
SMART_EVENT_PARAM_COUNT = 4,
@@ -149,13 +130,13 @@ enum SMART_EVENT
SMART_EVENT_SPELLHIT_TARGET = 31, // SpellID, School, CooldownMin, CooldownMax
SMART_EVENT_DAMAGED = 32, // MinDmg, MaxDmg, CooldownMin, CooldownMax
SMART_EVENT_DAMAGED_TARGET = 33, // MinDmg, MaxDmg, CooldownMin, CooldownMax
- SMART_EVENT_MOVEMENTINFORM = 34, // MovementType(any), PointID
+ SMART_EVENT_MOVEMENTINFORM = 34, // MovementType(any), PointID, PathId(0 - any)
SMART_EVENT_SUMMON_DESPAWNED = 35, // Entry, CooldownMin, CooldownMax
SMART_EVENT_CORPSE_REMOVED = 36, // NONE
SMART_EVENT_AI_INIT = 37, // NONE
SMART_EVENT_DATA_SET = 38, // Id, Value, CooldownMin, CooldownMax
- SMART_EVENT_WAYPOINT_START = 39, // PointId(0any), pathID(0any)
- SMART_EVENT_WAYPOINT_REACHED = 40, // PointId(0any), pathID(0any)
+ SMART_EVENT_ESCORT_START = 39, // PointId(0any), pathID(0any)
+ SMART_EVENT_ESCORT_REACHED = 40, // PointId(0any), pathID(0any)
SMART_EVENT_TRANSPORT_ADDPLAYER = 41, // NONE
SMART_EVENT_TRANSPORT_ADDCREATURE = 42, // Entry (0 any)
SMART_EVENT_TRANSPORT_REMOVE_PLAYER = 43, // NONE
@@ -170,10 +151,10 @@ enum SMART_EVENT
SMART_EVENT_TEXT_OVER = 52, // GroupId from creature_text, creature entry who talks (0 any)
SMART_EVENT_RECEIVE_HEAL = 53, // MinHeal, MaxHeal, CooldownMin, CooldownMax
SMART_EVENT_JUST_SUMMONED = 54, // none
- SMART_EVENT_WAYPOINT_PAUSED = 55, // PointId(0any), pathID(0any)
- SMART_EVENT_WAYPOINT_RESUMED = 56, // PointId(0any), pathID(0any)
- SMART_EVENT_WAYPOINT_STOPPED = 57, // PointId(0any), pathID(0any)
- SMART_EVENT_WAYPOINT_ENDED = 58, // PointId(0any), pathID(0any)
+ SMART_EVENT_ESCORT_PAUSED = 55, // PointId(0any), pathID(0any)
+ SMART_EVENT_ESCORT_RESUMED = 56, // PointId(0any), pathID(0any)
+ SMART_EVENT_ESCORT_STOPPED = 57, // PointId(0any), pathID(0any)
+ SMART_EVENT_ESCORT_ENDED = 58, // PointId(0any), pathID(0any)
SMART_EVENT_TIMED_EVENT_TRIGGERED = 59, // id
SMART_EVENT_UPDATE = 60, // InitialMin, InitialMax, RepeatMin, RepeatMax
SMART_EVENT_LINK = 61, // INTERNAL USAGE, no params, used to link together multiple events, does not use any extra resources to iterate event lists needlessly
@@ -213,8 +194,8 @@ enum SMART_EVENT
SMART_EVENT_AREA_CASTING = 105, // min, max, repeatMin, repeatMax, rangeMin, rangeMax
SMART_EVENT_AREA_RANGE = 106, // min, max, repeatMin, repeatMax, rangeMin, rangeMax
SMART_EVENT_SUMMONED_UNIT_EVADE = 107, // CreatureId(0 all), CooldownMin, CooldownMax
- SMART_EVENT_WAYPOINT_DATA_REACHED = 108, // PointId (0: any), pathId (0: any)
- SMART_EVENT_WAYPOINT_DATA_ENDED = 109, // PointId (0: any), pathId (0: any)
+ SMART_EVENT_WAYPOINT_REACHED = 108, // PointId (0: any), pathId (0: any)
+ SMART_EVENT_WAYPOINT_ENDED = 109, // PointId (0: any), pathId (0: any)
SMART_EVENT_IS_IN_MELEE_RANGE = 110, // min, max, repeatMin, repeatMax, dist, invert (0: false, 1: true)
SMART_EVENT_AC_END = 111
@@ -356,6 +337,7 @@ struct SmartEvent
{
uint32 type;
uint32 id;
+ uint32 pathId;
} movementInform;
struct
@@ -608,9 +590,9 @@ enum SMART_ACTION
SMART_ACTION_SUMMON_GO = 50, // GameObjectID, DespawnTime, targetSummon, summonType (0 time or summoner dies/1 time)
SMART_ACTION_KILL_UNIT = 51, //
SMART_ACTION_ACTIVATE_TAXI = 52, // TaxiID
- SMART_ACTION_WP_START = 53, // run/walk, pathID, canRepeat, quest, despawntime, reactState
- SMART_ACTION_WP_PAUSE = 54, // time
- SMART_ACTION_WP_STOP = 55, // despawnTime, quest, fail?
+ SMART_ACTION_ESCORT_START = 53, // run/walk, pathID, canRepeat, quest, despawntime, reactState
+ SMART_ACTION_ESCORT_PAUSE = 54, // time
+ SMART_ACTION_ESCORT_STOP = 55, // despawnTime, quest, fail?
SMART_ACTION_ADD_ITEM = 56, // itemID, count
SMART_ACTION_REMOVE_ITEM = 57, // itemID, count
SMART_ACTION_INSTALL_AI_TEMPLATE = 58, // AITemplateID
@@ -620,7 +602,7 @@ enum SMART_ACTION
SMART_ACTION_TELEPORT = 62, // mapID,
SMART_ACTION_SET_COUNTER = 63, // id, value, reset (0/1)
SMART_ACTION_STORE_TARGET_LIST = 64, // varID,
- SMART_ACTION_WP_RESUME = 65, // none
+ SMART_ACTION_ESCORT_RESUME = 65, // none
SMART_ACTION_SET_ORIENTATION = 66, // quick change, random orientation? (0/1), turnAngle
SMART_ACTION_CREATE_TIMED_EVENT = 67, // id, InitialMin, InitialMax, RepeatMin(only if it repeats), RepeatMax(only if it repeats), chance
SMART_ACTION_PLAYMOVIE = 68, // entry
@@ -732,7 +714,7 @@ enum SMART_ACTION
SMART_ACTION_PLAY_SPELL_VISUAL = 229, // visualId, visualIdImpact
SMART_ACTION_FOLLOW_GROUP = 230, // followState, followType, dist
SMART_ACTION_SET_ORIENTATION_TARGET = 231, // type, target_type, target_param1, target_param2, target_param3, target_param4
- SMART_ACTION_WAYPOINT_DATA_START = 232, // pathId, repeat
+ SMART_ACTION_WAYPOINT_START = 232, // pathId, repeat, pathSource
SMART_ACTION_WAYPOINT_DATA_RANDOM = 233, // pathId1, pathId2, repeat
SMART_ACTION_MOVEMENT_STOP = 234, //
SMART_ACTION_MOVEMENT_PAUSE = 235, // timer
@@ -1482,6 +1464,7 @@ struct SmartAction
{
uint32 pathId;
SAIBool repeat;
+ PathSource pathSource;
} wpData;
struct
@@ -1853,8 +1836,8 @@ const uint32 SmartAIEventMask[SMART_EVENT_AC_END][2] =
{SMART_EVENT_CORPSE_REMOVED, SMART_SCRIPT_TYPE_MASK_CREATURE },
{SMART_EVENT_AI_INIT, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT },
{SMART_EVENT_DATA_SET, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT },
- {SMART_EVENT_WAYPOINT_START, SMART_SCRIPT_TYPE_MASK_CREATURE },
- {SMART_EVENT_WAYPOINT_REACHED, SMART_SCRIPT_TYPE_MASK_CREATURE },
+ {SMART_EVENT_ESCORT_START, SMART_SCRIPT_TYPE_MASK_CREATURE },
+ {SMART_EVENT_ESCORT_REACHED, SMART_SCRIPT_TYPE_MASK_CREATURE },
{SMART_EVENT_TRANSPORT_ADDPLAYER, SMART_SCRIPT_TYPE_MASK_TRANSPORT },
{SMART_EVENT_TRANSPORT_ADDCREATURE, SMART_SCRIPT_TYPE_MASK_TRANSPORT },
{SMART_EVENT_TRANSPORT_REMOVE_PLAYER, SMART_SCRIPT_TYPE_MASK_TRANSPORT },
@@ -1869,10 +1852,10 @@ const uint32 SmartAIEventMask[SMART_EVENT_AC_END][2] =
{SMART_EVENT_TEXT_OVER, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT },
{SMART_EVENT_RECEIVE_HEAL, SMART_SCRIPT_TYPE_MASK_CREATURE },
{SMART_EVENT_JUST_SUMMONED, SMART_SCRIPT_TYPE_MASK_CREATURE },
- {SMART_EVENT_WAYPOINT_PAUSED, SMART_SCRIPT_TYPE_MASK_CREATURE },
- {SMART_EVENT_WAYPOINT_RESUMED, SMART_SCRIPT_TYPE_MASK_CREATURE },
- {SMART_EVENT_WAYPOINT_STOPPED, SMART_SCRIPT_TYPE_MASK_CREATURE },
- {SMART_EVENT_WAYPOINT_ENDED, SMART_SCRIPT_TYPE_MASK_CREATURE },
+ {SMART_EVENT_ESCORT_PAUSED, SMART_SCRIPT_TYPE_MASK_CREATURE },
+ {SMART_EVENT_ESCORT_RESUMED, SMART_SCRIPT_TYPE_MASK_CREATURE },
+ {SMART_EVENT_ESCORT_STOPPED, SMART_SCRIPT_TYPE_MASK_CREATURE },
+ {SMART_EVENT_ESCORT_ENDED, SMART_SCRIPT_TYPE_MASK_CREATURE },
{SMART_EVENT_TIMED_EVENT_TRIGGERED, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT },
{SMART_EVENT_UPDATE, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT },
{SMART_EVENT_LINK, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT + SMART_SCRIPT_TYPE_MASK_AREATRIGGER + SMART_SCRIPT_TYPE_MASK_EVENT + SMART_SCRIPT_TYPE_MASK_GOSSIP + SMART_SCRIPT_TYPE_MASK_QUEST + SMART_SCRIPT_TYPE_MASK_SPELL + SMART_SCRIPT_TYPE_MASK_TRANSPORT + SMART_SCRIPT_TYPE_MASK_INSTANCE },
@@ -1922,8 +1905,8 @@ const uint32 SmartAIEventMask[SMART_EVENT_AC_END][2] =
{SMART_EVENT_AREA_CASTING, SMART_SCRIPT_TYPE_MASK_CREATURE },
{SMART_EVENT_AREA_RANGE, SMART_SCRIPT_TYPE_MASK_CREATURE },
{SMART_EVENT_SUMMONED_UNIT_EVADE, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT },
- {SMART_EVENT_WAYPOINT_DATA_REACHED, SMART_SCRIPT_TYPE_MASK_CREATURE },
- {SMART_EVENT_WAYPOINT_DATA_ENDED, SMART_SCRIPT_TYPE_MASK_CREATURE },
+ {SMART_EVENT_WAYPOINT_REACHED, SMART_SCRIPT_TYPE_MASK_CREATURE },
+ {SMART_EVENT_WAYPOINT_ENDED, SMART_SCRIPT_TYPE_MASK_CREATURE },
{SMART_EVENT_IS_IN_MELEE_RANGE, SMART_SCRIPT_TYPE_MASK_CREATURE },
};
@@ -2010,8 +1993,6 @@ public:
static constexpr uint32 DEFAULT_PRIORITY = std::numeric_limits<uint32>::max();
};
-typedef std::unordered_map<uint32, WayPoint*> WPPath;
-
typedef std::vector<WorldObject*> ObjectVector;
class ObjectGuidVector
@@ -2059,7 +2040,7 @@ public:
void LoadFromDB();
- WPPath* GetPath(uint32 id)
+ WaypointPath* GetPath(uint32 id)
{
if (waypoint_map.find(id) != waypoint_map.end())
return waypoint_map[id];
@@ -2067,7 +2048,7 @@ public:
}
private:
- std::unordered_map<uint32, WPPath*> waypoint_map;
+ std::unordered_map<uint32, WaypointPath*> waypoint_map;
};
// all events for a single entry
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index f96775eb44..9c26fd6e91 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -2378,7 +2378,7 @@ void AchievementMgr::SendAllAchievementData() const
{
WorldPacket data(SMSG_ALL_ACHIEVEMENT_DATA, _completedAchievements.size() * 8 + 4 + _criteriaProgress.size() * 38 + 4);
BuildAllDataPacket(&data);
- GetPlayer()->GetSession()->SendPacket(&data);
+ GetPlayer()->SendDirectMessage(&data);
}
void AchievementMgr::SendRespondInspectAchievements(Player* player) const
@@ -2386,7 +2386,7 @@ void AchievementMgr::SendRespondInspectAchievements(Player* player) const
WorldPacket data(SMSG_RESPOND_INSPECT_ACHIEVEMENTS, 9 + _completedAchievements.size() * 8 + 4 + _criteriaProgress.size() * 38 + 4);
data << GetPlayer()->GetPackGUID();
BuildAllDataPacket(&data);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
/**
diff --git a/src/server/game/ArenaSpectator/ArenaSpectator.cpp b/src/server/game/ArenaSpectator/ArenaSpectator.cpp
index e1f0c76027..7c0f4a7b04 100644
--- a/src/server/game/ArenaSpectator/ArenaSpectator.cpp
+++ b/src/server/game/ArenaSpectator/ArenaSpectator.cpp
@@ -306,7 +306,7 @@ AC_GAME_API void ArenaSpectator::SendPacketTo(Player const* player, std::string&
{
WorldPacket data;
CreatePacket(data, message);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
template<>
diff --git a/src/server/game/AuctionHouse/AuctionHouseSearcher.cpp b/src/server/game/AuctionHouse/AuctionHouseSearcher.cpp
index 0d50d7eafa..9b8a9a1dc8 100644
--- a/src/server/game/AuctionHouse/AuctionHouseSearcher.cpp
+++ b/src/server/game/AuctionHouse/AuctionHouseSearcher.cpp
@@ -354,7 +354,7 @@ void AuctionHouseSearcher::Update()
{
Player* player = ObjectAccessor::FindConnectedPlayer(response->playerGuid);
if (player)
- player->GetSession()->SendPacket(&response->packet);
+ player->SendDirectMessage(&response->packet);
delete response;
}
diff --git a/src/server/game/Autobroadcast/AutobroadcastMgr.cpp b/src/server/game/Autobroadcast/AutobroadcastMgr.cpp
index f41e27bb01..9d323c1650 100644
--- a/src/server/game/Autobroadcast/AutobroadcastMgr.cpp
+++ b/src/server/game/Autobroadcast/AutobroadcastMgr.cpp
@@ -203,6 +203,6 @@ void AutobroadcastMgr::SendNotificationAnnouncement(uint8 textId)
data << localizedMessage;
// Send packet to the player
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
});
}
diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp
index 2adb610478..360fe9f69b 100644
--- a/src/server/game/Battlefield/Battlefield.cpp
+++ b/src/server/game/Battlefield/Battlefield.cpp
@@ -458,7 +458,7 @@ void Battlefield::BroadcastPacketToZone(WorldPacket const* data) const
for (uint8 team = 0; team < PVP_TEAMS_COUNT; ++team)
for (GuidUnorderedSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr)
if (Player* player = ObjectAccessor::FindPlayer(*itr))
- player->GetSession()->SendPacket(data);
+ player->SendDirectMessage(data);
}
void Battlefield::BroadcastPacketToQueue(WorldPacket const* data) const
@@ -466,7 +466,7 @@ void Battlefield::BroadcastPacketToQueue(WorldPacket const* data) const
for (uint8 team = 0; team < PVP_TEAMS_COUNT; ++team)
for (GuidUnorderedSet::const_iterator itr = m_PlayersInQueue[team].begin(); itr != m_PlayersInQueue[team].end(); ++itr)
if (Player* player = ObjectAccessor::FindPlayer(*itr))
- player->GetSession()->SendPacket(data);
+ player->SendDirectMessage(data);
}
void Battlefield::BroadcastPacketToWar(WorldPacket const* data) const
@@ -474,7 +474,7 @@ void Battlefield::BroadcastPacketToWar(WorldPacket const* data) const
for (uint8 team = 0; team < PVP_TEAMS_COUNT; ++team)
for (GuidUnorderedSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr)
if (Player* player = ObjectAccessor::FindPlayer(*itr))
- player->GetSession()->SendPacket(data);
+ player->SendDirectMessage(data);
}
void Battlefield::SendWarning(uint8 id, WorldObject const* target /*= nullptr*/)
@@ -663,7 +663,7 @@ void Battlefield::SendAreaSpiritHealerQueryOpcode(Player* player, const ObjectGu
data << guid << time;
ASSERT(player);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
// ----------------------
diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp
index 753fc9d481..2e0132f1c2 100644
--- a/src/server/game/Battlegrounds/ArenaTeam.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeam.cpp
@@ -162,7 +162,7 @@ bool ArenaTeam::AddMember(ObjectGuid playerGuid)
// Feed data to the struct
ArenaTeamMember newMember;
- //newMember.Name = playerName;
+ newMember.Name = playerName;
newMember.Guid = playerGuid;
newMember.Class = playerClass;
newMember.SeasonGames = 0;
@@ -249,7 +249,7 @@ bool ArenaTeam::LoadMembersFromDB(QueryResult result)
newMember.WeekWins = fields[3].Get<uint16>();
newMember.SeasonGames = fields[4].Get<uint16>();
newMember.SeasonWins = fields[5].Get<uint16>();
- //newMember.Name = fields[6].Get<std::string>();
+ newMember.Name = fields[6].Get<std::string>();
newMember.Class = fields[7].Get<uint8>();
newMember.PersonalRating = fields[8].Get<uint16>();
newMember.MatchMakerRating = fields[9].Get<uint16>() > 0 ? fields[9].Get<uint16>() : sWorld->getIntConfig(CONFIG_ARENA_START_MATCHMAKER_RATING);
@@ -349,7 +349,7 @@ void ArenaTeam::DelMember(ObjectGuid guid, bool cleanDb)
playerMember->RemoveBattlegroundQueueId(bgQueue);
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, nullptr, playerMember->GetBattlegroundQueueIndex(bgQueue), STATUS_NONE, 0, 0, 0, TEAM_NEUTRAL);
queue.RemovePlayer(playerMember->GetGUID(), true);
- playerMember->GetSession()->SendPacket(&data);
+ playerMember->SendDirectMessage(&data);
}
}
}
@@ -567,7 +567,7 @@ void ArenaTeam::BroadcastPacket(WorldPacket* packet)
{
for (MemberList::const_iterator itr = Members.begin(); itr != Members.end(); ++itr)
if (Player* player = ObjectAccessor::FindConnectedPlayer(itr->Guid))
- player->GetSession()->SendPacket(packet);
+ player->SendDirectMessage(packet);
}
void ArenaTeam::BroadcastEvent(ArenaTeamEvents event, ObjectGuid guid, uint8 strCount, std::string const& str1, std::string const& str2, std::string const& str3)
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index 7ddd4e87e2..b004f11680 100644
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -608,7 +608,7 @@ inline void Battleground::_ProcessJoin(uint32 diff)
{
WorldPacket status;
sBattlegroundMgr->BuildBattlegroundStatusPacket(&status, this, player->GetCurrentBattlegroundQueueSlot(), STATUS_IN_PROGRESS, 0, GetStartTime(), GetArenaType(), player->GetBgTeamId());
- player->GetSession()->SendPacket(&status);
+ player->SendDirectMessage(&status);
player->RemoveAurasDueToSpell(SPELL_ARENA_PREPARATION);
player->ResetAllPowers();
@@ -652,7 +652,7 @@ inline void Battleground::_ProcessJoin(uint32 diff)
data << t->GetGUID();
data << uint32(t->GetZoneId());
data << uint32(15 * IN_MILLISECONDS);
- p->GetSession()->SendPacket(&data);
+ p->SendDirectMessage(&data);
}
m_ToBeTeleported.clear();
}
@@ -713,14 +713,14 @@ Position const* Battleground::GetTeamStartPosition(TeamId teamId) const
void Battleground::SendPacketToAll(WorldPacket const* packet)
{
for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
- itr->second->GetSession()->SendPacket(packet);
+ itr->second->SendDirectMessage(packet);
}
void Battleground::SendPacketToTeam(TeamId teamId, WorldPacket const* packet, Player* sender, bool self)
{
for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
if (itr->second->GetBgTeamId() == teamId && (self || sender != itr->second))
- itr->second->GetSession()->SendPacket(packet);
+ itr->second->SendDirectMessage(packet);
}
void Battleground::SendChatMessage(Creature* source, uint8 textId, WorldObject* target /*= nullptr*/)
@@ -937,7 +937,7 @@ void Battleground::EndBattleground(PvPTeamId winnerTeamId)
BlockMovement(player);
- player->GetSession()->SendPacket(&pvpLogData);
+ player->SendDirectMessage(&pvpLogData);
if (isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE))
{
@@ -964,7 +964,7 @@ void Battleground::EndBattleground(PvPTeamId winnerTeamId)
WorldPacket data;
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetCurrentBattlegroundQueueSlot(), STATUS_IN_PROGRESS, TIME_TO_AUTOREMOVE, GetStartTime(), GetArenaType(), player->GetBgTeamId());
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND, player->GetMapId());
}
@@ -1062,7 +1062,7 @@ void Battleground::RemovePlayerAtLeave(Player* player)
WorldPacket data;
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetCurrentBattlegroundQueueSlot(), STATUS_NONE, 0, 0, 0, TEAM_NEUTRAL);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(GetBgTypeID(), GetArenaType());
@@ -1178,16 +1178,19 @@ void Battleground::AddPlayer(Player* player)
sBattlegroundMgr->BuildPlayerJoinedBattlegroundPacket(&data, player);
SendPacketToTeam(teamId, &data, player, false);
- player->RemoveAurasByType(SPELL_AURA_MOUNTED);
-
// add arena specific auras
if (isArena())
{
// restore pets health before remove
- if (Pet* pet = player->GetPet())
+ Pet* pet = player->GetPet();
+ if (pet)
if (pet->IsAlive())
pet->SetHealth(pet->GetMaxHealth());
+ player->RemoveArenaAuras();
+ if (pet)
+ pet->RemoveArenaAuras();
+ player->RemoveArenaSpellCooldowns(true);
player->RemoveArenaEnchantments(TEMP_ENCHANTMENT_SLOT);
player->DestroyConjuredItems(true);
player->UnsummonPetTemporaryIfAny();
@@ -1338,7 +1341,7 @@ bool Battleground::HasFreeSlots() const
void Battleground::SpectatorsSendPacket(WorldPacket& data)
{
for (SpectatorList::const_iterator itr = m_Spectators.begin(); itr != m_Spectators.end(); ++itr)
- (*itr)->GetSession()->SendPacket(&data);
+ (*itr)->SendDirectMessage(&data);
}
void Battleground::ReadyMarkerClicked(Player* p)
@@ -1810,10 +1813,10 @@ void Battleground::PlayerAddedToBGCheckIfBGIsRunning(Player* player)
BlockMovement(player);
BuildPvPLogDataPacket(data);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetCurrentBattlegroundQueueSlot(), STATUS_IN_PROGRESS, GetEndTime(), GetStartTime(), GetArenaType(), player->GetBgTeamId());
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
uint32 Battleground::GetAlivePlayersCountByTeam(TeamId teamId) const
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
index f447a47d41..c40ec2c9e0 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
@@ -670,7 +670,7 @@ void BattlegroundMgr::SendAreaSpiritHealerQueryOpcode(Player* player, Battlegrou
if (time_ == uint32(-1))
time_ = 0;
data << guid << time_;
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
bool BattlegroundMgr::IsArenaType(BattlegroundTypeId bgTypeId)
diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp
index f34d833c4c..a70a21b59f 100644
--- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp
@@ -1274,7 +1274,7 @@ void BattlegroundQueue::InviteGroupToBG(GroupQueueInfo* ginfo, Battleground* bg,
// send status packet
WorldPacket data;
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_JOIN, INVITE_ACCEPT_WAIT_TIME, 0, ginfo->ArenaType, TEAM_NEUTRAL, bg->isRated());
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
// pussywizard:
if (bg->isArena() && bg->isRated())
@@ -1312,7 +1312,7 @@ bool BGQueueInviteEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
// send remaining time in queue
WorldPacket data;
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_JOIN, INVITE_ACCEPT_WAIT_TIME - INVITATION_REMIND_TIME, 0, m_ArenaType, TEAM_NEUTRAL, bg->isRated(), m_BgTypeId);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
}
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
index d02e6c03b7..f3dcaf3972 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
@@ -307,7 +307,7 @@ void BattlegroundSA::StartShips()
WorldPacket pkt;
GetBGObject(i)->BuildValuesUpdateBlockForPlayer(&data, itr->second);
data.BuildPacket(pkt);
- itr->second->GetSession()->SendPacket(&pkt);
+ itr->second->SendDirectMessage(&pkt);
}
}
ShipsStarted = true;
@@ -1141,7 +1141,7 @@ void BattlegroundSA::SendTransportInit(Player* player)
GetBGObject(BG_SA_BOAT_TWO)->BuildCreateUpdateBlockForPlayer(&transData, player);
WorldPacket packet;
transData.BuildPacket(packet);
- player->GetSession()->SendPacket(&packet);
+ player->SendDirectMessage(&packet);
}
}
@@ -1156,7 +1156,7 @@ void BattlegroundSA::SendTransportsRemove(Player* player)
GetBGObject(BG_SA_BOAT_TWO)->BuildOutOfRangeUpdateBlock(&transData);
WorldPacket packet;
transData.BuildPacket(packet);
- player->GetSession()->SendPacket(&packet);
+ player->SendDirectMessage(&packet);
}
}
diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp
index b072230304..e17b435891 100644
--- a/src/server/game/Chat/Channels/Channel.cpp
+++ b/src/server/game/Chat/Channels/Channel.cpp
@@ -908,26 +908,26 @@ void Channel::SendToAll(WorldPacket* data, ObjectGuid guid)
{
for (PlayerContainer::const_iterator i = playersStore.begin(); i != playersStore.end(); ++i)
if (!guid || !i->second.plrPtr->GetSocial()->HasIgnore(guid))
- i->second.plrPtr->GetSession()->SendPacket(data);
+ i->second.plrPtr->SendDirectMessage(data);
}
void Channel::SendToAllButOne(WorldPacket* data, ObjectGuid who)
{
for (PlayerContainer::const_iterator i = playersStore.begin(); i != playersStore.end(); ++i)
if (i->first != who)
- i->second.plrPtr->GetSession()->SendPacket(data);
+ i->second.plrPtr->SendDirectMessage(data);
}
void Channel::SendToOne(WorldPacket* data, ObjectGuid who)
{
if (Player* player = ObjectAccessor::FindConnectedPlayer(who))
- player->GetSession()->SendPacket(data);
+ player->SendDirectMessage(data);
}
void Channel::SendToAllWatching(WorldPacket* data)
{
for (PlayersWatchingContainer::const_iterator i = playersWatchingStore.begin(); i != playersWatchingStore.end(); ++i)
- (*i)->GetSession()->SendPacket(data);
+ (*i)->SendDirectMessage(data);
}
bool Channel::ShouldAnnouncePlayer(Player const* player) const
diff --git a/src/server/game/Chat/Channels/ChannelMgr.cpp b/src/server/game/Chat/Channels/ChannelMgr.cpp
index 99f613b89e..7b38d43c52 100644
--- a/src/server/game/Chat/Channels/ChannelMgr.cpp
+++ b/src/server/game/Chat/Channels/ChannelMgr.cpp
@@ -150,7 +150,7 @@ Channel* ChannelMgr::GetChannel(std::string const& name, Player* player, bool pk
{
WorldPacket data;
MakeNotOnPacket(&data, name);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
return nullptr;
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index 0d4e6a27b4..2d116909ae 100644
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -961,7 +961,7 @@ namespace lfg
RBCacheMap::iterator itr = RBCacheStore[player->GetTeamId()].find(dungeonId);
if (itr != RBCacheStore[player->GetTeamId()].end())
{
- player->GetSession()->SendPacket(&(itr->second));
+ player->SendDirectMessage(&(itr->second));
return;
}
// send empty packet if cache not found
@@ -973,7 +973,7 @@ namespace lfg
data << (uint32)0;
data << (uint32)0;
data << (uint32)0;
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
void LFGMgr::UpdateRaidBrowser(uint32 diff)
@@ -1220,7 +1220,7 @@ namespace lfg
for (RBSearchersMap::const_iterator sitr = RBSearchersStore[team].begin(); sitr != RBSearchersStore[team].end(); ++sitr)
if (sitr->second == dungeonId)
if (Player* p = ObjectAccessor::FindConnectedPlayer(sitr->first))
- p->GetSession()->SendPacket(&differencePacket);
+ p->SendDirectMessage(&differencePacket);
break; // one dungeon updated in one LFGMgr::UpdateRaidBrowser
}
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 4b18aa2e90..f092428332 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -771,7 +771,7 @@ void Creature::Update(uint32 diff)
}
Unit* owner = GetCharmerOrOwner();
- if (IsCharmed() && !IsWithinDistInMap(owner, GetMap()->GetVisibilityRange(), true, false))
+ if (IsCharmed() && !IsWithinDistInMap(owner, GetMap()->GetVisibilityRange(), true, false, false))
{
RemoveCharmAuras();
}
@@ -1944,7 +1944,7 @@ bool Creature::CanStartAttack(Unit const* who) const
if (!_IsTargetAcceptable(who))
return false;
- if (IsNeutralToAll() || !IsWithinDistInMap(who, GetAggroRange(who) + m_CombatDistance, true, false)) // pussywizard: +m_combatDistance for turrets and similar
+ if (IsNeutralToAll() || !IsWithinDistInMap(who, GetAggroRange(who) + m_CombatDistance, true, false, false)) // pussywizard: +m_combatDistance for turrets and similar
return false;
if (!CanCreatureAttack(who))
@@ -1999,7 +1999,7 @@ void Creature::setDeathState(DeathState state, bool despawn)
bool needsFalling = !despawn && (IsFlying() || IsHovering()) && !IsUnderWater();
SetHover(false);
- SetDisableGravity(false, false, false);
+ SetDisableGravity(false);
if (needsFalling)
GetMotionMaster()->MoveFall(0, true);
@@ -3230,47 +3230,6 @@ bool Creature::SetWalk(bool enable)
return true;
}
-/**
- * @brief Enable or disable the creature's fly mode by adding or removing: MOVEMENTFLAG_FLYING. Infom also the client
- */
-bool Creature::SetDisableGravity(bool disable, bool packetOnly /*= false*/, bool updateAnimationTier /*= true*/)
-{
- //! It's possible only a packet is sent but moveflags are not updated
- //! Need more research on this
- if (!packetOnly && !Unit::SetDisableGravity(disable))
- return false;
-
- if (m_movedByPlayer)
- {
- WorldPacket data(disable ? SMSG_MOVE_GRAVITY_DISABLE : SMSG_MOVE_GRAVITY_ENABLE, 12);
- data << GetPackGUID();
- data << m_movedByPlayer->ToPlayer()->GetSession()->GetOrderCounter(); // movement counter
- m_movedByPlayer->ToPlayer()->SendDirectMessage(&data);
- m_movedByPlayer->ToPlayer()->GetSession()->IncrementOrderCounter();
-
- data.Initialize(MSG_MOVE_GRAVITY_CHNG, 64);
- data << GetPackGUID();
- BuildMovementPacket(&data);
- m_movedByPlayer->ToPlayer()->SendMessageToSet(&data, false);
- return true;
- }
-
- if (updateAnimationTier && IsAlive() && !HasUnitState(UNIT_STATE_ROOT) && !IsRooted())
- {
- if (IsLevitating())
- SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_FLY);
- else if (IsHovering())
- SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_HOVER);
- else
- SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_GROUND);
- }
-
- WorldPacket data(disable ? SMSG_SPLINE_MOVE_GRAVITY_DISABLE : SMSG_SPLINE_MOVE_GRAVITY_ENABLE, 9);
- data << GetPackGUID();
- SendMessageToSet(&data, false);
- return true;
-}
-
bool Creature::SetSwim(bool enable)
{
if (!Unit::SetSwim(enable))
@@ -3385,19 +3344,23 @@ void Creature::UpdateMovementFlags()
if (GetMovementTemplate().IsFlightAllowed() && isInAir && !IsFalling())
{
- if (GetMovementTemplate().Flight == CreatureFlightMovementType::CanFly)
+ if (GetMovementTemplate().Flight == CreatureFlightMovementType::CanFly && !m_movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY))
SetCanFly(true);
- else
+ else if (!IsLevitating())
SetDisableGravity(true);
- if (!HasHoverAura())
+ if (!HasHoverAura() && IsHovering())
SetHover(false);
}
else
{
- SetCanFly(false);
- SetDisableGravity(false);
- if (IsAlive() && (CanHover() || HasHoverAura()))
+ if (m_movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY))
+ SetCanFly(false);
+
+ if (IsLevitating())
+ SetDisableGravity(false);
+
+ if (IsAlive() && (GetMovementTemplate().Ground == CreatureGroundMovementType::Hover || HasHoverAura()) && !IsHovering())
SetHover(true);
}
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index 1ea5600452..b5d93cd3ba 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -83,7 +83,7 @@ public:
[[nodiscard]] bool CanWalk() const { return GetMovementTemplate().IsGroundAllowed(); }
[[nodiscard]] bool CanSwim() const override;
[[nodiscard]] bool CanEnterWater() const override;
- [[nodiscard]] bool CanFly() const override { return GetMovementTemplate().IsFlightAllowed() || IsFlying(); }
+ [[nodiscard]] bool CanFly() const override { return GetMovementTemplate().IsFlightAllowed() || IsFlying(); }
[[nodiscard]] bool CanHover() const { return GetMovementTemplate().Ground == CreatureGroundMovementType::Hover || IsHovering(); }
[[nodiscard]] bool IsRooted() const { return GetMovementTemplate().IsRooted(); }
@@ -145,7 +145,6 @@ public:
[[nodiscard]] CreatureAI* AI() const { return (CreatureAI*)i_AI; }
bool SetWalk(bool enable) override;
- bool SetDisableGravity(bool disable, bool packetOnly = false, bool updateAnimationTier = true) override;
bool SetSwim(bool enable) override;
bool HasSpellFocus(Spell const* focusSpell = nullptr) const;
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 08d2abdc53..50a6c0e61f 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -517,7 +517,7 @@ void GameObject::Update(uint32 diff)
WorldPacket packet;
BuildValuesUpdateBlockForPlayer(&udata, caster->ToPlayer());
udata.BuildPacket(packet);
- caster->ToPlayer()->GetSession()->SendPacket(&packet);
+ caster->ToPlayer()->SendDirectMessage(&packet);
SendCustomAnim(GetGoAnimProgress());
}
@@ -637,7 +637,7 @@ void GameObject::Update(uint32 diff)
caster->ToPlayer()->RemoveGameObject(this, false);
WorldPacket data(SMSG_FISH_ESCAPED, 0);
- caster->ToPlayer()->GetSession()->SendPacket(&data);
+ caster->ToPlayer()->SendDirectMessage(&data);
}
// can be delete
m_lootState = GO_JUST_DEACTIVATED;
@@ -1466,7 +1466,7 @@ void GameObject::Use(Unit* user)
// by default spell caster is user
Unit* spellCaster = user;
uint32 spellId = 0;
- bool triggered = false;
+ uint32 triggeredFlags = TRIGGERED_NONE;
if (Player* playerUser = user->ToPlayer())
{
@@ -1486,6 +1486,10 @@ void GameObject::Use(Unit* user)
m_cooldownTime = GameTime::GetGameTimeMS().count() + cooldown * IN_MILLISECONDS;
}
+ if (user->IsPlayer() && GetGoType() != GAMEOBJECT_TYPE_TRAP) // workaround for GO casting
+ if (!m_goInfo->IsUsableMounted())
+ user->RemoveAurasByType(SPELL_AURA_MOUNTED);
+
switch (GetGoType())
{
case GAMEOBJECT_TYPE_DOOR: //0
@@ -1624,7 +1628,7 @@ void GameObject::Use(Unit* user)
{
WorldPacket data(SMSG_GAMEOBJECT_PAGETEXT, 8);
data << GetGUID();
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
else if (info->goober.gossipID)
{
@@ -1794,7 +1798,7 @@ void GameObject::Use(Unit* user)
SetLootState(GO_JUST_DEACTIVATED);
WorldPacket data(SMSG_FISH_NOT_HOOKED, 0);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
break;
}
}
@@ -1886,7 +1890,6 @@ void GameObject::Use(Unit* user)
}
}
- user->RemoveAurasByType(SPELL_AURA_MOUNTED);
spellId = info->spellcaster.spellId;
break;
}
@@ -2031,7 +2034,7 @@ void GameObject::Use(Unit* user)
player->TeleportTo(GetMapId(), GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation(), TELE_TO_NOT_LEAVE_TRANSPORT | TELE_TO_NOT_LEAVE_COMBAT | TELE_TO_NOT_UNSUMMON_PET);
WorldPacket data(SMSG_ENABLE_BARBER_SHOP, 0);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
player->SetStandState(UNIT_STAND_STATE_SIT_LOW_CHAIR + info->barberChair.chairheight);
return;
@@ -2056,12 +2059,15 @@ void GameObject::Use(Unit* user)
return;
}
+ if (m_goInfo->IsUsableMounted())
+ triggeredFlags |= TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE;
+
if (Player* player = user->ToPlayer())
sOutdoorPvPMgr->HandleCustomSpell(player, spellId, this);
if (spellCaster)
{
- if ((spellCaster->CastSpell(user, spellInfo, triggered) == SPELL_CAST_OK) && GetGoType() == GAMEOBJECT_TYPE_SPELLCASTER)
+ if ((spellCaster->CastSpell(user, spellInfo, TriggerCastFlags(triggeredFlags)) == SPELL_CAST_OK) && GetGoType() == GAMEOBJECT_TYPE_SPELLCASTER)
AddUse();
}
else
@@ -2305,7 +2311,7 @@ void GameObject::ModifyHealth(int32 change, Unit* attackerOrHealer /*= nullptr*/
data << uint32(-change); // change < 0 triggers SPELL_BUILDING_HEAL combat log event
// change >= 0 triggers SPELL_BUILDING_DAMAGE event
data << uint32(spellId);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
GameObjectDestructibleState newState = GetDestructibleState();
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index 5ca9ad61ee..13be19952b 100644
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -414,7 +414,7 @@ private:
void UpdatePackedRotation();
//! Object distance/size - overridden from Object::_IsWithinDist. Needs to take in account proper GO size.
- bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool /*is3D*/, bool /*useBoundingRadius = true*/) const override
+ bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool /*is3D*/, bool /*incOwnRadius = true*/, bool /*incTargetRadius = true*/) const override
{
//! Following check does check 3d distance
dist2compare += obj->GetObjectSize();
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index 9b58746e95..36c45e5449 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -1066,7 +1066,7 @@ void Item::SendUpdateSockets()
for (uint32 i = SOCK_ENCHANTMENT_SLOT; i <= BONUS_ENCHANTMENT_SLOT; ++i)
data << uint32(GetEnchantmentId(EnchantmentSlot(i)));
- GetOwner()->GetSession()->SendPacket(&data);
+ GetOwner()->SendDirectMessage(&data);
}
// Though the client has the information in the item's data field,
@@ -1081,7 +1081,7 @@ void Item::SendTimeUpdate(Player* owner)
WorldPacket data(SMSG_ITEM_TIME_UPDATE, (8 + 4));
data << GetGUID();
data << uint32(duration);
- owner->GetSession()->SendPacket(&data);
+ owner->SendDirectMessage(&data);
}
Item* Item::CreateItem(uint32 item, uint32 count, Player const* player, bool clone, uint32 randomPropertyId)
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index d39645bb4c..142ff909b7 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -240,7 +240,7 @@ void Object::SendUpdateToPlayer(Player* player)
BuildCreateUpdateBlockForPlayer(&upd, player);
upd.BuildPacket(packet);
- player->GetSession()->SendPacket(&packet);
+ player->SendDirectMessage(&packet);
}
void Object::BuildValuesUpdateBlockForPlayer(UpdateData* data, Player* target)
@@ -272,7 +272,7 @@ void Object::DestroyForPlayer(Player* target, bool onDeath) const
{
WorldPacket data(SMSG_ARENA_UNIT_DESTROYED, 8);
data << GetGUID();
- target->GetSession()->SendPacket(&data);
+ target->SendDirectMessage(&data);
}
}
}
@@ -282,7 +282,7 @@ void Object::DestroyForPlayer(Player* target, bool onDeath) const
//! If the following bool is true, the client will call "void CGUnit_C::OnDeath()" for this object.
//! OnDeath() does for eg trigger death animation and interrupts certain spells/missiles/auras/sounds...
data << uint8(onDeath ? 1 : 0);
- target->GetSession()->SendPacket(&data);
+ target->SendDirectMessage(&data);
}
[[nodiscard]] int32 Object::GetInt32Value(uint16 index) const
@@ -1232,10 +1232,14 @@ float WorldObject::GetDistanceZ(WorldObject const* obj) const
return (dist > 0 ? dist : 0);
}
-bool WorldObject::_IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool useBoundingRadius) const
+bool WorldObject::_IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool incOwnRadius, bool incTargetRadius) const
{
- float sizefactor = useBoundingRadius ? GetObjectSize() + obj->GetObjectSize() : 0.0f;
- float maxdist = dist2compare + sizefactor;
+ float maxdist = dist2compare;
+ if (incOwnRadius)
+ maxdist += GetObjectSize();
+
+ if (incTargetRadius)
+ maxdist += obj->GetObjectSize();
if (m_transport && obj->GetTransport() && obj->GetTransport()->GetGUID() == m_transport->GetGUID())
{
@@ -1342,14 +1346,14 @@ bool WorldObject::IsWithinDist2d(const Position* pos, float dist) const
}
// use only if you will sure about placing both object at same map
-bool WorldObject::IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool useBoundingRadius) const
+bool WorldObject::IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool incOwnRadius, bool incTargetRadius) const
{
- return obj && _IsWithinDist(obj, dist2compare, is3D, useBoundingRadius);
+ return obj && _IsWithinDist(obj, dist2compare, is3D, incOwnRadius, incTargetRadius);
}
-bool WorldObject::IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D, bool useBoundingRadius) const
+bool WorldObject::IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D, bool incOwnRadius, bool incTargetRadius) const
{
- return obj && IsInMap(obj) && InSamePhase(obj) && _IsWithinDist(obj, dist2compare, is3D, useBoundingRadius);
+ return obj && IsInMap(obj) && InSamePhase(obj) && _IsWithinDist(obj, dist2compare, is3D, incOwnRadius, incTargetRadius);
}
bool WorldObject::IsWithinLOS(float ox, float oy, float oz, VMAP::ModelIgnoreFlags ignoreFlags, LineOfSightChecks checks) const
@@ -1776,6 +1780,8 @@ bool WorldObject::CanSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo
WorldObject const* viewpoint = this;
if (Player const* thisPlayer = ToPlayer())
{
+ viewpoint = thisPlayer->GetSeer();
+
if (Creature const* creature = obj->ToCreature())
{
if (TempSummon const* tempSummon = creature->ToTempSummon())
@@ -1815,13 +1821,8 @@ bool WorldObject::CanSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo
return false;
}
- if (thisPlayer->GetViewpoint())
- viewpoint = thisPlayer->GetViewpoint();
-
if (thisPlayer->GetFarSightDistance() && !thisPlayer->isInFront(obj))
- {
return false;
- }
}
// Xinef: check reversely obj vs viewpoint, object could be a gameObject which overrides _IsWithinDist function to include gameobject size
@@ -2068,7 +2069,7 @@ void WorldObject::SendPlayMusic(uint32 Music, bool OnlySelf)
WorldPacket data(SMSG_PLAY_MUSIC, 4);
data << Music;
if (OnlySelf && IsPlayer())
- this->ToPlayer()->GetSession()->SendPacket(&data);
+ ToPlayer()->SendDirectMessage(&data);
else
SendMessageToSet(&data, true); // ToSelf ignored in this case
}
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index 141a7cf73f..ae1ddbc171 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -41,7 +41,7 @@
#include "UpdateFields.h"
-class ElunaEventProcessor;
+class ALEEventProcessor;
enum TempSummonType
{
@@ -541,8 +541,8 @@ public:
[[nodiscard]] bool IsWithinDist2d(float x, float y, float dist) const;
bool IsWithinDist2d(const Position* pos, float dist) const;
// use only if you will sure about placing both object at same map
- bool IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D = true, bool useBoundingRadius = true) const;
- bool IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D = true, bool useBoundingRadius = true) const;
+ bool IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D = true, bool incOwnRadius = true, bool incTargetRadius = true) const;
+ bool IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D = true, bool incOwnRadius = true, bool incTargetRadius = true) const;
[[nodiscard]] bool IsWithinLOS(float x, float y, float z, VMAP::ModelIgnoreFlags ignoreFlags = VMAP::ModelIgnoreFlags::Nothing, LineOfSightChecks checks = LINEOFSIGHT_ALL_CHECKS) const;
[[nodiscard]] bool IsWithinLOSInMap(WorldObject const* obj, VMAP::ModelIgnoreFlags ignoreFlags = VMAP::ModelIgnoreFlags::Nothing, LineOfSightChecks checks = LINEOFSIGHT_ALL_CHECKS, Optional<float> collisionHeight = { }, Optional<float> combatReach = { }) const;
[[nodiscard]] Position GetHitSpherePointFor(Position const& dest, Optional<float> collisionHeight = { }, Optional<float> combatReach = { }) const;
@@ -727,7 +727,7 @@ public:
ObjectVisibilityContainer const& GetObjectVisibilityContainer() const { return _objectVisibilityContainer; }
// Event handler
- ElunaEventProcessor* elunaEvents;
+ ALEEventProcessor* ALEEvents;
EventProcessor m_Events;
protected:
@@ -770,7 +770,7 @@ private:
uint16 m_notifyflags;
uint16 m_executed_notifies;
- virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool useBoundingRadius = true) const;
+ virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool incOwnRadius = true, bool incTargetRadius = true) const;
bool CanNeverSee(WorldObject const* obj) const;
virtual bool CanAlwaysSee(WorldObject const* /*obj*/) const { return false; }
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index f730f99e28..45c23fe941 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -1512,7 +1512,7 @@ void Pet::_LoadSpellCooldowns(PreparedQueryResult result)
if (!cooldowns.empty() && GetOwner())
{
BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, cooldowns);
- GetOwner()->GetSession()->SendPacket(&data);
+ GetOwner()->SendDirectMessage(&data);
}
}
}
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 7bca647f7a..943f3e53c9 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -78,6 +78,7 @@
#include "TicketMgr.h"
#include "Tokenize.h"
#include "Transport.h"
+#include "Unit.h"
#include "UpdateData.h"
#include "Util.h"
#include "Vehicle.h"
@@ -417,6 +418,8 @@ Player::Player(WorldSession* session): Unit(), m_mover(this)
GetObjectVisibilityContainer().InitForPlayer();
sScriptMgr->OnConstructPlayer(this);
+
+ _expectingChangeTransport = false;
}
Player::~Player()
@@ -1340,7 +1343,7 @@ void Player::SendTeleportAckPacket()
data << GetPackGUID();
data << GetSession()->GetOrderCounter(); // movement counter
BuildMovementPacket(&data);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
GetSession()->IncrementOrderCounter();
}
@@ -1531,17 +1534,6 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
CombatStop();
- // remove arena spell coldowns/buffs now to also remove pet's cooldowns before it's temporarily unsummoned
- if (mEntry->IsBattleArena() && (HasPendingSpectatorForBG(0) || !HasPendingSpectatorForBG(GetBattlegroundId())))
- {
- // KEEP THIS ORDER!
- RemoveArenaAuras();
- if (pet)
- pet->RemoveArenaAuras();
-
- RemoveArenaSpellCooldowns(true);
- }
-
// remove pet on map change
if (pet)
UnsummonPetTemporaryIfAny();
@@ -1558,6 +1550,8 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
//remove auras before removing from map...
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_CHANGE_MAP | AURA_INTERRUPT_FLAG_MOVE | AURA_INTERRUPT_FLAG_TURNING);
+ SetMapChangeOrderCounter();
+
if (!GetSession()->PlayerLogout())
{
// send transfer packets
@@ -1566,24 +1560,13 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
if (m_transport)
data << m_transport->GetEntry() << GetMapId();
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
// remove from old map now
if (oldmap)
oldmap->RemovePlayerFromMap(this, false);
- // xinef: do this before setting fall information!
- if (IsMounted() && (!GetMap()->GetEntry()->IsDungeon() && !GetMap()->GetEntry()->IsBattlegroundOrArena()) && !m_transport)
- {
- AuraEffectList const& auras = GetAuraEffectsByType(SPELL_AURA_MOUNTED);
- if (!auras.empty())
- {
- SetMountBlockId((*auras.begin())->GetId());
- RemoveAurasByType(SPELL_AURA_MOUNTED);
- }
- }
-
teleportStore_dest = WorldLocation(mapid, x, y, z, orientation);
SetFallInformation(GameTime::GetGameTime().count(), z);
// if the player is saved before worldportack (at logout for example)
@@ -1599,7 +1582,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
else
data << teleportStore_dest.PositionXYZOStream();
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
SendSavedInstances();
}
@@ -2381,7 +2364,7 @@ void Player::SendLogXPGain(uint32 GivenXP, Unit* victim, uint32 BonusXP, bool re
}
data << uint8(recruitAFriend ? 1 : 0); // does the GivenXP include a RaF bonus?
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::GiveXP(uint32 xp, Unit* victim, float group_rate, bool isLFGReward)
@@ -2858,7 +2841,7 @@ void Player::SendInitialSpells()
data << uint32(itr->second.category ? cooldown : 0); // category cooldown
}
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::RemoveMail(uint32 id)
@@ -2887,7 +2870,7 @@ void Player::SendMailResult(uint32 mailId, MailResponseType mailAction, MailResp
data << (uint32) item_guid; // item guid low?
data << (uint32) item_count; // item count?
}
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SendNewMail()
@@ -2895,7 +2878,7 @@ void Player::SendNewMail()
// deliver undelivered mail
WorldPacket data(SMSG_RECEIVED_MAIL, 4);
data << (uint32) 0;
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::AddNewMailDeliverTime(time_t deliver_time)
@@ -3053,13 +3036,13 @@ void Player::SendLearnPacket(uint32 spellId, bool learn)
WorldPacket data(SMSG_LEARNED_SPELL, 6);
data << uint32(spellId);
data << uint16(0);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
else
{
WorldPacket data(SMSG_REMOVED_SPELL, 4);
data << uint32(spellId);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
}
@@ -3091,7 +3074,7 @@ bool Player::addSpell(uint32 spellId, uint8 addSpecMask, bool updateActive, bool
WorldPacket data(SMSG_SUPERCEDED_SPELL, 4 + 4);
data << uint32(nextSpellInfo->Id);
data << uint32(spellInfo->Id);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
return false;
}
@@ -4444,7 +4427,7 @@ void Player::SetMovement(PlayerMovementType pType)
}
data << guid;
data << GetSession()->GetOrderCounter(); // movement counter
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
GetSession()->IncrementOrderCounter();
}
@@ -4456,7 +4439,7 @@ void Player::BuildPlayerRepop()
{
WorldPacket data(SMSG_PRE_RESURRECT, GetPackGUID().size());
data << GetPackGUID();
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
if (getRace(true) == RACE_NIGHTELF)
{
CastSpell(this, 20584, true);
@@ -4511,7 +4494,7 @@ void Player::ResurrectPlayer(float restore_percent, bool applySickness)
data << float(0);
data << float(0);
data << float(0);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
// speed change, land walk
@@ -4998,7 +4981,7 @@ void Player::RepopAtGraveyard()
data << ClosestGrave->x;
data << ClosestGrave->y;
data << ClosestGrave->z;
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
}
else if (GetPositionZ() < GetMap()->GetMinHeight(GetPositionX(), GetPositionY()))
@@ -5608,7 +5591,7 @@ void Player::SendActionButtons(uint32 state) const
}
}
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
LOG_DEBUG("entities.player", "Action Buttons for {} spec {} Sent", GetGUID().ToString(), m_activeSpec);
}
@@ -6235,7 +6218,7 @@ bool Player::RewardHonor(Unit* uVictim, uint32 groupsize, int32 honor, bool awar
// Xinef: non quest case, quest honor obtain is send in quest reward packet
if (uVictim || groupsize > 0)
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
// add honor points
ModifyHonorPoints(honor);
@@ -6428,7 +6411,7 @@ void Player::CheckDuelDistance(time_t currTime)
duel->OutOfBoundsTime = currTime + 10;
WorldPacket data(SMSG_DUEL_OUTOFBOUNDS, 0);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
}
else
@@ -6438,7 +6421,7 @@ void Player::CheckDuelDistance(time_t currTime)
duel->OutOfBoundsTime = 0;
WorldPacket data(SMSG_DUEL_INBOUNDS, 0);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
else if (currTime >= duel->OutOfBoundsTime)
DuelComplete(DUEL_FLED);
@@ -6613,13 +6596,13 @@ void Player::_ApplyItemMods(Item* item, uint8 slot, bool apply)
LOG_DEBUG("entities.player", "applying mods for item {} ", item->GetGUID().ToString());
- uint8 attacktype = Player::GetAttackBySlot(slot);
+ WeaponAttackType attacktype = Player::GetAttackBySlot(slot);
if (item->HasSocket()) //only (un)equipping of items with sockets can influence metagems, so no need to waste time with normal items
CorrectMetaGemEnchants(slot, apply);
if (attacktype < MAX_ATTACK)
- _ApplyWeaponDependentAuraMods(item, WeaponAttackType(attacktype), apply);
+ _ApplyWeaponDependentAuraMods(item, attacktype, apply);
_ApplyItemBonuses(proto, slot, apply);
@@ -6906,7 +6889,7 @@ void Player::_ApplyItemBonuses(ItemTemplate const* proto, uint8 slot, bool apply
if (proto->ArcaneRes)
HandleStatModifier(UNIT_MOD_RESISTANCE_ARCANE, BASE_VALUE, float(proto->ArcaneRes), apply);
- uint8 attType = Player::GetAttackBySlot(slot);
+ WeaponAttackType attType = Player::GetAttackBySlot(slot);
if (attType != MAX_ATTACK)
{
_ApplyWeaponDamage(slot, proto, ssv, apply);
@@ -6953,7 +6936,7 @@ void Player::_ApplyWeaponDamage(uint8 slot, ItemTemplate const* proto, ScalingSt
ssv = ScalingStatValue ? sScalingStatValuesStore.LookupEntry(ssd_level) : nullptr;
}
- uint8 attType = Player::GetAttackBySlot(slot);
+ WeaponAttackType attType = Player::GetAttackBySlot(slot);
if (!IsInFeralForm() && apply && !CanUseAttackType(attType))
{
return;
@@ -6984,12 +6967,12 @@ void Player::_ApplyWeaponDamage(uint8 slot, ItemTemplate const* proto, ScalingSt
if (minDamage > 0.f)
{
- SetBaseWeaponDamage(WeaponAttackType(attType), MINDAMAGE, minDamage, i);
+ SetBaseWeaponDamage(attType, MINDAMAGE, minDamage, i);
}
if (maxDamage > 0.f)
{
- SetBaseWeaponDamage(WeaponAttackType(attType), MAXDAMAGE, maxDamage, i);
+ SetBaseWeaponDamage(attType, MAXDAMAGE, maxDamage, i);
}
}
}
@@ -6998,8 +6981,8 @@ void Player::_ApplyWeaponDamage(uint8 slot, ItemTemplate const* proto, ScalingSt
{
for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
{
- SetBaseWeaponDamage(WeaponAttackType(attType), MINDAMAGE, 0.f, i);
- SetBaseWeaponDamage(WeaponAttackType(attType), MAXDAMAGE, 0.f, i);
+ SetBaseWeaponDamage(attType, MINDAMAGE, 0.f, i);
+ SetBaseWeaponDamage(attType, MAXDAMAGE, 0.f, i);
}
if (attType == BASE_ATTACK)
@@ -7023,8 +7006,8 @@ void Player::_ApplyWeaponDamage(uint8 slot, ItemTemplate const* proto, ScalingSt
if (IsInFeralForm())
return;
- if (CanModifyStats() && (GetWeaponDamageRange(WeaponAttackType(attType), MAXDAMAGE) || proto->Delay))
- UpdateDamagePhysical(WeaponAttackType(attType));
+ if (CanModifyStats() && (GetWeaponDamageRange(attType, MAXDAMAGE) || proto->Delay))
+ UpdateDamagePhysical(attType);
}
void Player::CastAllObtainSpells()
@@ -7617,9 +7600,9 @@ void Player::_RemoveAllItemMods()
if (!proto)
continue;
- uint32 attacktype = Player::GetAttackBySlot(i);
+ WeaponAttackType attacktype = Player::GetAttackBySlot(i);
if (attacktype < MAX_ATTACK)
- _ApplyWeaponDependentAuraMods(m_items[i], WeaponAttackType(attacktype), false);
+ _ApplyWeaponDependentAuraMods(m_items[i], attacktype, false);
_ApplyItemBonuses(proto, i, false);
@@ -7646,9 +7629,9 @@ void Player::_ApplyAllItemMods()
if (!proto)
continue;
- uint32 attacktype = Player::GetAttackBySlot(i);
+ WeaponAttackType attacktype = Player::GetAttackBySlot(i);
if (attacktype < MAX_ATTACK)
- _ApplyWeaponDependentAuraMods(m_items[i], WeaponAttackType(attacktype), true);
+ _ApplyWeaponDependentAuraMods(m_items[i], attacktype, true);
_ApplyItemBonuses(proto, i, true);
@@ -7801,7 +7784,7 @@ void Player::SendQuestGiverStatusMultiple()
});
data.put<uint32>(0, count); // write real count
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
/* If in a battleground a player dies, and an enemy removes the insignia, the player's bones is lootable
@@ -8248,14 +8231,14 @@ void Player::SendLootError(ObjectGuid guid, LootError error)
void Player::SendNotifyLootMoneyRemoved()
{
WorldPacket data(SMSG_LOOT_CLEAR_MONEY, 0);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SendNotifyLootItemRemoved(uint8 lootSlot)
{
WorldPacket data(SMSG_LOOT_REMOVED, 1);
data << uint8(lootSlot);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
// TODO - InitWorldStates should NOT always send the same states
@@ -8960,7 +8943,7 @@ void Player::SetBindPoint(ObjectGuid guid)
{
WorldPacket data(SMSG_BINDER_CONFIRM, 8);
data << guid;
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SendTalentWipeConfirm(ObjectGuid guid)
@@ -8969,7 +8952,7 @@ void Player::SendTalentWipeConfirm(ObjectGuid guid)
data << guid;
uint32 cost = sWorld->getBoolConfig(CONFIG_NO_RESET_TALENT_COST) ? 0 : resetTalentsCost();
data << cost;
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::ResetPetTalents()
@@ -9232,7 +9215,7 @@ void Player::RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent)
{
WorldPacket data(SMSG_PET_SPELLS, 8);
data << uint64(0);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
if (GetGroup())
SetGroupUpdateFlag(GROUP_UPDATE_PET);
@@ -9519,14 +9502,14 @@ void Player::Whisper(std::string_view text, Language language, Player* target, b
WorldPacket data;
ChatHandler::BuildChatPacket(data, CHAT_MSG_WHISPER, language, this, this, _text);
- target->GetSession()->SendPacket(&data);
+ target->SendDirectMessage(&data);
// rest stuff shouldn't happen in case of addon message
if (isAddonMessage)
return;
ChatHandler::BuildChatPacket(data, CHAT_MSG_WHISPER_INFORM, Language(language), target, target, _text);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
if (!isAcceptWhispers() && !IsGameMaster() && !target->IsGameMaster())
{
@@ -9635,7 +9618,7 @@ void Player::PetSpellInitialize()
data << uint32(category ? cooldown : 0); // category cooldown
}
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::PossessSpellInitialize()
@@ -9663,7 +9646,7 @@ void Player::PossessSpellInitialize()
data << uint8(0); // spells count
data << uint8(0); // cooldowns count
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::VehicleSpellInitialize()
@@ -9738,7 +9721,7 @@ void Player::VehicleSpellInitialize()
data << uint32(category ? cooldown : 0); // category cooldown
}
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::CharmSpellInitialize()
@@ -9792,14 +9775,14 @@ void Player::CharmSpellInitialize()
data << uint8(0); // cooldowns count
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SendRemoveControlBar()
{
WorldPacket data(SMSG_PET_SPELLS, 8);
data << uint64(0);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
bool Player::HasSpellMod(SpellModifier* mod, Spell* spell)
@@ -10149,7 +10132,7 @@ void Player::SendProficiency(ItemClass itemClass, uint32 itemSubclassMask)
{
WorldPacket data(SMSG_SET_PROFICIENCY, 1 + 4);
data << uint8(itemClass) << uint32(itemSubclassMask);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::RemovePetitionsAndSigns(ObjectGuid guid, uint32 type)
@@ -10601,7 +10584,7 @@ void Player::ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs)
if (!cooldowns.empty())
{
BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, cooldowns);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
}
@@ -10721,7 +10704,7 @@ inline bool Player::_StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 c
data << uint32(vendorslot + 1); // numbered from 1 at client
data << int32(crItem->maxcount > 0 ? new_count : 0xFFFFFFFF);
data << uint32(count);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
SendNewItem(it, pProto->BuyCount * count, true, false, false);
if (!bStore)
@@ -11138,7 +11121,7 @@ void Player::ModifySpellCooldown(uint32 spellId, int32 cooldown)
data << uint32(spellId); // Spell ID
data << GetGUID(); // Player GUID
data << int32(cooldown); // Cooldown mod in milliseconds
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SendCooldownEvent(SpellInfo const* spellInfo, uint32 itemId /*= 0*/, Spell* spell /*= nullptr*/, bool setCooldown /*= true*/)
@@ -11614,7 +11597,7 @@ void Player::SendInitialPacketsBeforeAddToMap()
data << m_homebindX << m_homebindY << m_homebindZ;
data << (uint32) m_homebindMapId;
data << (uint32) m_homebindAreaId;
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
// SMSG_SET_PROFICIENCY
// SMSG_SET_PCT_SPELL_MODIFIER
@@ -11627,13 +11610,13 @@ void Player::SendInitialPacketsBeforeAddToMap()
data.Initialize(SMSG_INSTANCE_DIFFICULTY, 4 + 4);
data << uint32(GetMap()->GetDifficulty());
data << uint32(GetMap()->GetEntry()->IsDynamicDifficultyMap() && GetMap()->IsHeroic()); // Raid dynamic difficulty
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
SendInitialSpells();
data.Initialize(SMSG_SEND_UNLEARN_SPELLS, 4);
data << uint32(0); // count, for (count) uint32;
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
SendInitialActionButtons();
m_reputationMgr->SendInitialReputations();
@@ -11645,7 +11628,7 @@ void Player::SendInitialPacketsBeforeAddToMap()
data.AppendPackedTime(GameTime::GetGameTime().count());
data << float(0.01666667f); // game speed
data << uint32(0); // added in 3.1.2
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
GetReputationMgr().SendForceReactions(); // SMSG_SET_FORCED_REACTIONS
@@ -11704,7 +11687,7 @@ void Player::SendInitialPacketsAfterAddToMap()
// manual send package (have code in HandleEffect(this, AURA_EFFECT_HANDLE_SEND_FOR_CLIENT, true); that must not be re-applied.
if (IsImmobilizedState())
{
- auto const counter = GetSession()->GetOrderCounter();
+ uint32 const counter = GetSession()->GetOrderCounter();
setCompoundState << uint8(2 + GetPackGUID().size() + 4);
setCompoundState << uint16(SMSG_FORCE_MOVE_ROOT);
setCompoundState << GetPackGUID();
@@ -11714,7 +11697,7 @@ void Player::SendInitialPacketsAfterAddToMap()
if (HasAuraType(SPELL_AURA_FEATHER_FALL))
{
- auto const counter = GetSession()->GetOrderCounter();
+ uint32 const counter = GetSession()->GetOrderCounter();
setCompoundState << uint8(2 + GetPackGUID().size() + 4);
setCompoundState << uint16(SMSG_MOVE_FEATHER_FALL);
setCompoundState << GetPackGUID();
@@ -11724,7 +11707,7 @@ void Player::SendInitialPacketsAfterAddToMap()
if (HasAuraType(SPELL_AURA_WATER_WALK))
{
- auto const counter = GetSession()->GetOrderCounter();
+ uint32 const counter = GetSession()->GetOrderCounter();
setCompoundState << uint8(2 + GetPackGUID().size() + 4);
setCompoundState << uint16(SMSG_MOVE_WATER_WALK);
setCompoundState << GetPackGUID();
@@ -11734,7 +11717,7 @@ void Player::SendInitialPacketsAfterAddToMap()
if (HasAuraType(SPELL_AURA_HOVER))
{
- auto const counter = GetSession()->GetOrderCounter();
+ uint32 const counter = GetSession()->GetOrderCounter();
setCompoundState << uint8(2 + GetPackGUID().size() + 4);
setCompoundState << uint16(SMSG_MOVE_SET_HOVER);
setCompoundState << GetPackGUID();
@@ -11797,7 +11780,7 @@ void Player::SendTransferAborted(uint32 mapid, TransferAbortReason reason, uint8
default:
break;
}
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SendInstanceResetWarning(uint32 mapid, Difficulty difficulty, uint32 time, bool onEnterMap)
@@ -11832,7 +11815,7 @@ void Player::SendInstanceResetWarning(uint32 mapid, Difficulty difficulty, uint3
data << uint8(bind && bind->perm); // is locked
data << uint8(bind && bind->extended); // is extended, ignored if prev field is 0
}
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::ApplyEquipCooldown(Item* pItem)
@@ -11879,7 +11862,7 @@ void Player::ApplyEquipCooldown(Item* pItem)
WorldPacket data(SMSG_ITEM_COOLDOWN, 12);
data << pItem->GetGUID();
data << uint32(spellData.SpellId);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
}
@@ -12151,7 +12134,7 @@ void Player::GetAurasForTarget(Unit* target, bool force /*= false*/)
auraApp->BuildUpdatePacket(data, false);
}
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SetDailyQuestStatus(uint32 quest_id)
@@ -12921,7 +12904,7 @@ void Player::SetClientControl(Unit* target, bool allowMove, bool packetOnly /*=
WorldPacket data(SMSG_CLIENT_CONTROL_UPDATE, target->GetPackGUID().size() + 1);
data << target->GetPackGUID();
data << uint8((allowMove && !target->HasUnitState(UNIT_STATE_FLEEING | UNIT_STATE_CONFUSED)) ? 1 : 0);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
// We want to set the packet only
if (packetOnly)
@@ -13042,7 +13025,7 @@ void Player::SendCorpseReclaimDelay(uint32 delay)
{
WorldPacket data(SMSG_CORPSE_RECLAIM_DELAY, 4);
data << uint32(delay);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
Player* Player::GetNextRandomRaidMember(float radius)
@@ -13269,7 +13252,7 @@ void Player::SetViewpoint(WorldObject* target, bool apply)
SetSeer(this);
//WorldPacket data(SMSG_CLEAR_FAR_SIGHT_IMMEDIATE, 0);
- //GetSession()->SendPacket(&data);
+ //SendDirectMessage(&data);
}
}
@@ -13425,7 +13408,7 @@ void Player::SetTitle(CharTitlesEntry const* title, bool lost)
WorldPacket data(SMSG_TITLE_EARNED, 4 + 4);
data << uint32(title->bit_index);
data << uint32(lost ? 0 : 1); // 1 - earned, 0 - lost
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_OWN_RANK);
}
@@ -13485,7 +13468,7 @@ void Player::ConvertRune(uint8 index, RuneType newType)
WorldPacket data(SMSG_CONVERT_RUNE, 2);
data << uint8(index);
data << uint8(newType);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::ResyncRunes(uint8 count)
@@ -13497,14 +13480,14 @@ void Player::ResyncRunes(uint8 count)
data << uint8(GetCurrentRune(i)); // rune type
data << uint8(255 - (GetRuneCooldown(i) * 51)); // passed cooldown time (0-255)
}
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::AddRunePower(uint8 index)
{
WorldPacket data(SMSG_ADD_RUNE_POWER, 4);
data << uint32(1 << index); // mask (0x00-0x3F probably)
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
static RuneType runeSlotTypes[MAX_RUNES] =
@@ -14562,7 +14545,7 @@ void Player::SendTalentsInfoData(bool pet)
BuildPetTalentsInfoData(&data);
else
BuildPlayerTalentsInfoData(&data);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::BuildEnchantmentsInfoData(WorldPacket* data)
@@ -14635,7 +14618,7 @@ void Player::SendEquipmentSetList()
++count; // client have limit but it checked at loading and set
}
data.put<uint32>(count_pos, count);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SetEquipmentSet(uint32 index, EquipmentSet eqset)
@@ -14673,7 +14656,7 @@ void Player::SetEquipmentSet(uint32 index, EquipmentSet eqset)
WorldPacket data(SMSG_EQUIPMENT_SET_SAVED, 4 + 1);
data << uint32(index);
data.appendPackGUID(eqslot.Guid);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
eqslot.state = old_state == EQUIPMENT_SET_NEW ? EQUIPMENT_SET_NEW : EQUIPMENT_SET_CHANGED;
@@ -15484,7 +15467,7 @@ void Player::SendDuelCountdown(uint32 counter)
{
WorldPacket data(SMSG_DUEL_COUNTDOWN, 4);
data << uint32(counter); // seconds
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SetIsSpectator(bool on)
@@ -15688,7 +15671,7 @@ void Player::SendRefundInfo(Item* item)
}
data << uint32(0);
data << uint32(GetTotalPlayedTime() - item->GetPlayedTime());
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
bool Player::AddItem(uint32 itemId, uint32 count)
@@ -15736,7 +15719,7 @@ void Player::RefundItem(Item* item)
WorldPacket data(SMSG_ITEM_REFUND_RESULT, 8 + 4);
data << item->GetGUID(); // Guid
data << uint32(10); // Error!
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
return;
}
@@ -15777,7 +15760,7 @@ void Player::RefundItem(Item* item)
WorldPacket data(SMSG_ITEM_REFUND_RESULT, 8 + 4);
data << item->GetGUID(); // Guid
data << uint32(10); // Error!
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
return;
}
@@ -15792,7 +15775,7 @@ void Player::RefundItem(Item* item)
data << uint32(iece->reqitem[i]);
data << uint32(iece->reqitemcount[i]);
}
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
uint32 moneyRefund = item->GetPaidMoney(); // item-> will be invalidated in DestroyItem
@@ -16034,24 +16017,6 @@ bool Player::IsInWhisperWhiteList(ObjectGuid guid)
return false;
}
-bool Player::SetDisableGravity(bool disable, bool packetOnly /*= false*/, bool /*updateAnimationTier = true*/)
-{
- if (!packetOnly && !Unit::SetDisableGravity(disable))
- return false;
-
- WorldPacket data(disable ? SMSG_MOVE_GRAVITY_DISABLE : SMSG_MOVE_GRAVITY_ENABLE, 12);
- data << GetPackGUID();
- data << GetSession()->GetOrderCounter(); // movement counter
- SendDirectMessage(&data);
- GetSession()->IncrementOrderCounter();
-
- data.Initialize(MSG_MOVE_GRAVITY_CHNG, 64);
- data << GetPackGUID();
- BuildMovementPacket(&data);
- SendMessageToSet(&data, false);
- return true;
-}
-
Guild* Player::GetGuild() const
{
uint32 guildId = GetGuildId();
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index ef7ca602d9..a95f44b2a8 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1257,7 +1257,7 @@ public:
bool HasWeapon(WeaponAttackType type) const override { return GetWeaponForAttack(type, false); }
bool HasWeaponForAttack(WeaponAttackType type) const override { return (Unit::HasWeaponForAttack(type) && GetWeaponForAttack(type, true)); }
[[nodiscard]] Item* GetShield(bool useable = false) const;
- static uint8 GetAttackBySlot(uint8 slot); // MAX_ATTACK if not weapon slot
+ static WeaponAttackType GetAttackBySlot(uint8 slot); // MAX_ATTACK if not weapon slot
std::vector<Item*>& GetItemUpdateQueue() { return m_itemUpdateQueue; }
static bool IsInventoryPos(uint16 pos) { return IsInventoryPos(pos >> 8, pos & 255); }
static bool IsInventoryPos(uint8 bag, uint8 slot);
@@ -2351,6 +2351,7 @@ public:
void SetMover(Unit* target);
void SetSeer(WorldObject* target) { m_seer = target; }
+ WorldObject* GetSeer() const { return m_seer; }
void SetViewpoint(WorldObject* target, bool apply);
[[nodiscard]] WorldObject* GetViewpoint() const;
void StopCastingCharm(Aura* except = nullptr);
@@ -2565,8 +2566,6 @@ public:
bool IsInWhisperWhiteList(ObjectGuid guid);
void RemoveFromWhisperWhiteList(ObjectGuid guid) { WhisperList.remove(guid); }
- bool SetDisableGravity(bool disable, bool packetOnly = false, bool updateAnimationTier = true) override;
-
[[nodiscard]] bool CanFly() const override { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY); }
[[nodiscard]] bool CanEnterWater() const override { return true; }
bool IsFreeFlying() const { return HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) || HasAuraType(SPELL_AURA_FLY); }
@@ -2634,6 +2633,15 @@ public:
std::string GetDebugInfo() const override;
+ bool IsExpectingChangeTransport() const { return _expectingChangeTransport; }
+ void SetExpectingChangeTransport(bool state) { _expectingChangeTransport = state; }
+
+ uint32 GetPendingFlightChange() const { return _pendingFlightChangeCounter; }
+ void SetPendingFlightChange(uint32 counter) { _pendingFlightChangeCounter = counter; }
+
+ void SetMapChangeOrderCounter() { _mapChangeOrderCounter = GetSession()->GetOrderCounter(); }
+ uint32 GetMapChangeOrderCounter() { return _mapChangeOrderCounter; }
+
/*********************************************************/
/*** SPELL QUEUE SYSTEM ***/
/*********************************************************/
@@ -3014,6 +3022,10 @@ private:
PlayerSettingMap m_charSettingsMap;
Seconds m_creationTime;
+
+ bool _expectingChangeTransport;
+ uint32 _pendingFlightChangeCounter;
+ uint32 _mapChangeOrderCounter;
};
void AddItemsSetItem(Player* player, Item* item);
diff --git a/src/server/game/Entities/Player/PlayerMisc.cpp b/src/server/game/Entities/Player/PlayerMisc.cpp
index 715e20fec5..9c0bf56184 100644
--- a/src/server/game/Entities/Player/PlayerMisc.cpp
+++ b/src/server/game/Entities/Player/PlayerMisc.cpp
@@ -78,7 +78,7 @@ bool Player::CanSpeak() const
void Player::SendAttackSwingNotInRange()
{
WorldPacket data(SMSG_ATTACKSWING_NOTINRANGE, 0);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SavePositionInDB(uint32 mapid, float x, float y, float z, float o, uint32 zone, ObjectGuid guid)
@@ -128,25 +128,25 @@ void Player::Customize(CharacterCustomizeInfo const* customizeInfo, CharacterDat
void Player::SendAttackSwingDeadTarget()
{
WorldPacket data(SMSG_ATTACKSWING_DEADTARGET, 0);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SendAttackSwingCantAttack()
{
WorldPacket data(SMSG_ATTACKSWING_CANT_ATTACK, 0);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SendAttackSwingCancelAttack()
{
WorldPacket data(SMSG_CANCEL_COMBAT, 0);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SendAttackSwingBadFacingAttack()
{
WorldPacket data(SMSG_ATTACKSWING_BADFACING, 0);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SendAutoRepeatCancel(Unit* target)
@@ -161,7 +161,7 @@ void Player::SendExplorationExperience(uint32 Area, uint32 Experience)
WorldPacket data(SMSG_EXPLORATION_EXPERIENCE, 8);
data << uint32(Area);
data << uint32(Experience);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SendDungeonDifficulty(bool IsInGroup)
@@ -171,7 +171,7 @@ void Player::SendDungeonDifficulty(bool IsInGroup)
data << (uint32)GetDungeonDifficulty();
data << uint32(val);
data << uint32(IsInGroup);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SendRaidDifficulty(bool IsInGroup, int32 forcedDifficulty)
@@ -181,14 +181,14 @@ void Player::SendRaidDifficulty(bool IsInGroup, int32 forcedDifficulty)
data << uint32(forcedDifficulty == -1 ? GetRaidDifficulty() : forcedDifficulty);
data << uint32(val);
data << uint32(IsInGroup);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SendResetFailedNotify(uint32 mapid)
{
WorldPacket data(SMSG_RESET_FAILED_NOTIFY, 4);
data << uint32(mapid);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
/// Reset all solo instances and optionally send a message on success for each
@@ -327,7 +327,7 @@ void Player::SendResetInstanceSuccess(uint32 MapId)
{
WorldPacket data(SMSG_INSTANCE_RESET, 4);
data << uint32(MapId);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SendResetInstanceFailed(uint32 reason, uint32 MapId)
@@ -340,7 +340,7 @@ void Player::SendResetInstanceFailed(uint32 reason, uint32 MapId)
WorldPacket data(SMSG_INSTANCE_RESET_FAILED, 4);
data << uint32(reason);
data << uint32(MapId);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
/*********************************************************/
diff --git a/src/server/game/Entities/Player/PlayerQuest.cpp b/src/server/game/Entities/Player/PlayerQuest.cpp
index a8307c7887..0b016d03fc 100644
--- a/src/server/game/Entities/Player/PlayerQuest.cpp
+++ b/src/server/game/Entities/Player/PlayerQuest.cpp
@@ -990,7 +990,7 @@ bool Player::SatisfyQuestLog(bool msg)
if (msg)
{
WorldPacket data(SMSG_QUESTLOG_FULL, 0);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTLOG_FULL");
}
return false;
@@ -2349,7 +2349,7 @@ void Player::SendQuestComplete(uint32 quest_id)
{
WorldPacket data(SMSG_QUESTUPDATE_COMPLETE, 4);
data << uint32(quest_id);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTUPDATE_COMPLETE quest = {}", quest_id);
}
}
@@ -2376,7 +2376,7 @@ void Player::SendQuestReward(Quest const* quest, uint32 XP)
data << uint32(10 * quest->CalculateHonorGain(GetQuestLevel(quest)));
data << uint32(quest->GetBonusTalents()); // bonus talents
data << uint32(quest->GetRewArenaPoints());
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SendQuestFailed(uint32 questId, InventoryResult reason)
@@ -2386,7 +2386,7 @@ void Player::SendQuestFailed(uint32 questId, InventoryResult reason)
WorldPacket data(SMSG_QUESTGIVER_QUEST_FAILED, 4 + 4);
data << uint32(questId);
data << uint32(reason); // failed reason (valid reasons: 4, 16, 50, 17, 74, other values show default message)
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_QUEST_FAILED");
}
}
@@ -2397,7 +2397,7 @@ void Player::SendQuestTimerFailed(uint32 quest_id)
{
WorldPacket data(SMSG_QUESTUPDATE_FAILEDTIMER, 4);
data << uint32(quest_id);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTUPDATE_FAILEDTIMER");
}
}
@@ -2406,7 +2406,7 @@ void Player::SendCanTakeQuestResponse(uint32 msg) const
{
WorldPacket data(SMSG_QUESTGIVER_QUEST_INVALID, 4);
data << uint32(msg);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_QUEST_INVALID");
}
@@ -2426,7 +2426,7 @@ void Player::SendQuestConfirmAccept(const Quest* quest, Player* pReceiver)
data << uint32(quest->GetQuestId());
data << quest->GetTitle();
data << GetGUID();
- pReceiver->GetSession()->SendPacket(&data);
+ pReceiver->SendDirectMessage(&data);
LOG_DEBUG("network", "WORLD: Sent SMSG_QUEST_CONFIRM_ACCEPT");
}
@@ -2439,7 +2439,7 @@ void Player::SendPushToPartyResponse(Player const* player, uint8 msg) const
WorldPacket data(MSG_QUEST_PUSH_RESULT, (8 + 1));
data << player->GetGUID();
data << uint8(msg); // valid values: 0-8
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
LOG_DEBUG("network", "WORLD: Sent MSG_QUEST_PUSH_RESULT");
}
}
@@ -2450,7 +2450,7 @@ void Player::SendQuestUpdateAddItem(Quest const* /*quest*/, uint32 /*item_idx*/,
LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTUPDATE_ADD_ITEM");
//data << quest->RequiredItemId[item_idx];
//data << count;
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SendQuestUpdateAddCreatureOrGo(Quest const* quest, ObjectGuid guid, uint32 creatureOrGO_idx, uint16 old_count, uint16 add_count)
@@ -2469,7 +2469,7 @@ void Player::SendQuestUpdateAddCreatureOrGo(Quest const* quest, ObjectGuid guid,
data << uint32(old_count + add_count);
data << uint32(quest->RequiredNpcOrGoCount[ creatureOrGO_idx ]);
data << guid;
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
uint16 log_slot = FindQuestSlot(quest->GetQuestId());
if (log_slot < MAX_QUEST_LOG_SIZE)
@@ -2485,7 +2485,7 @@ void Player::SendQuestUpdateAddPlayer(Quest const* quest, uint16 old_count, uint
data << uint32(quest->GetQuestId());
data << uint32(old_count + add_count);
data << uint32(quest->GetPlayersSlain());
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
uint16 log_slot = FindQuestSlot(quest->GetQuestId());
if (log_slot < MAX_QUEST_LOG_SIZE)
diff --git a/src/server/game/Entities/Player/PlayerStorage.cpp b/src/server/game/Entities/Player/PlayerStorage.cpp
index a932af812d..6e0b192493 100644
--- a/src/server/game/Entities/Player/PlayerStorage.cpp
+++ b/src/server/game/Entities/Player/PlayerStorage.cpp
@@ -51,6 +51,7 @@
#include "QuestDef.h"
#include "ReputationMgr.h"
#include "ScriptMgr.h"
+#include "ScriptObjectFwd.h"
#include "SocialMgr.h"
#include "Spell.h"
#include "SpellAuraEffects.h"
@@ -539,7 +540,7 @@ Item* Player::GetShield(bool useable) const
return item;
}
-uint8 Player::GetAttackBySlot(uint8 slot)
+WeaponAttackType Player::GetAttackBySlot(uint8 slot)
{
switch (slot)
{
@@ -2757,7 +2758,7 @@ Item* Player::EquipItem(uint16 pos, Item* pItem, bool update)
WorldPacket data;
BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_INCLUDE_GCD, cooldownSpell, 0);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
}
}
@@ -4051,7 +4052,7 @@ void Player::SendEquipError(InventoryResult msg, Item* pItem, Item* pItem2, uint
break;
}
}
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SendBuyError(BuyResult msg, Creature* creature, uint32 item, uint32 param)
@@ -4063,7 +4064,7 @@ void Player::SendBuyError(BuyResult msg, Creature* creature, uint32 item, uint32
if (param > 0)
data << uint32(param);
data << uint8(msg);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::SendSellError(SellResult msg, Creature* creature, ObjectGuid guid, uint32 param)
@@ -4075,7 +4076,7 @@ void Player::SendSellError(SellResult msg, Creature* creature, ObjectGuid guid,
if (param > 0)
data << uint32(param);
data << uint8(msg);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::TradeCancel(bool sendback, TradeStatus status /*= TRADE_STATUS_TRADE_CANCELED*/)
@@ -4770,7 +4771,7 @@ void Player::SendNewItem(Item* item, uint32 count, bool received, bool created,
if (broadcast && GetGroup())
GetGroup()->BroadcastPacket(&data, true);
else
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
/*********************************************************/
@@ -6520,7 +6521,7 @@ void Player::BindToInstance()
WorldPacket data(SMSG_INSTANCE_SAVE_CREATED, 4);
data << uint32(0);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
sInstanceSaveMgr->PlayerBindToInstance(this->GetGUID(), mapSave, true, this);
}
@@ -6555,7 +6556,7 @@ void Player::SendRaidInfo()
}
}
data.put<uint32>(p_counter, counter);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
/*
@@ -6582,7 +6583,7 @@ void Player::SendSavedInstances()
//Send opcode 811. true or false means, whether you have current raid/heroic instances
data.Initialize(SMSG_UPDATE_INSTANCE_OWNERSHIP);
data << uint32(hasBeenSaved);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
if (!hasBeenSaved)
return;
@@ -6596,7 +6597,7 @@ void Player::SendSavedInstances()
{
data.Initialize(SMSG_UPDATE_LAST_INSTANCE);
data << uint32(itr->second.save->GetMapId());
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
}
}
diff --git a/src/server/game/Entities/Player/PlayerUpdates.cpp b/src/server/game/Entities/Player/PlayerUpdates.cpp
index d3798a083f..58bb54ad56 100644
--- a/src/server/game/Entities/Player/PlayerUpdates.cpp
+++ b/src/server/game/Entities/Player/PlayerUpdates.cpp
@@ -1401,7 +1401,7 @@ void Player::UpdateHomebindTime(uint32 time)
WorldPacket data(SMSG_RAID_GROUP_ONLY, 4 + 4);
data << uint32(0);
data << uint32(0);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
// instance is valid, reset homebind timer
m_HomebindTimer = 0;
@@ -1424,7 +1424,7 @@ void Player::UpdateHomebindTime(uint32 time)
WorldPacket data(SMSG_RAID_GROUP_ONLY, 4 + 4);
data << uint32(m_HomebindTimer);
data << uint32(1);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
LOG_DEBUG(
"maps",
"PLAYER: Player '{}' ({}) will be teleported to homebind in 60 "
@@ -1771,7 +1771,7 @@ void Player::UpdateTriggerVisibility()
WorldPacket packet;
udata.BuildPacket(packet);
- GetSession()->SendPacket(&packet);
+ SendDirectMessage(&packet);
}
void Player::UpdateForQuestWorldObjects()
@@ -1824,7 +1824,7 @@ void Player::UpdateForQuestWorldObjects()
WorldPacket packet;
udata.BuildPacket(packet);
- GetSession()->SendPacket(&packet);
+ SendDirectMessage(&packet);
}
void Player::UpdateTitansGrip()
diff --git a/src/server/game/Entities/Player/SocialMgr.cpp b/src/server/game/Entities/Player/SocialMgr.cpp
index 8ace058736..77830c8e56 100644
--- a/src/server/game/Entities/Player/SocialMgr.cpp
+++ b/src/server/game/Entities/Player/SocialMgr.cpp
@@ -172,7 +172,7 @@ void PlayerSocial::SendSocialList(Player* player, uint32 flags)
}
data.put<uint32>(countPos, totalCount);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
LOG_DEBUG("network", "WORLD: Sent SMSG_CONTACT_LIST");
}
@@ -288,7 +288,7 @@ void SocialMgr::SendFriendStatus(Player* player, FriendsResult result, ObjectGui
if (broadcast)
BroadcastToFriendListers(player, &data);
else
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
void SocialMgr::BroadcastToFriendListers(Player* player, WorldPacket* packet)
@@ -311,7 +311,7 @@ void SocialMgr::BroadcastToFriendListers(Player* player, WorldPacket* packet)
// PLAYER see his team only and PLAYER can't see MODERATOR, GAME MASTER, ADMINISTRATOR characters
// MODERATOR, GAME MASTER, ADMINISTRATOR can see all
if (pFriend && (!AccountMgr::IsPlayerAccount(pFriend->GetSession()->GetSecurity()) || ((pFriend->GetTeamId() == teamId || allowTwoSideWhoList) && security <= gmLevelInWhoList)) && player->IsVisibleGloballyFor(pFriend))
- pFriend->GetSession()->SendPacket(packet);
+ pFriend->SendDirectMessage(packet);
}
}
}
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 4ec9c9567d..96fa45e52a 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -8179,7 +8179,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
if (triggeredByAura->GetBase() && castItem->GetGUID() != triggeredByAura->GetBase()->GetCastItemGUID())
return false;
- WeaponAttackType attType = WeaponAttackType(player->GetAttackBySlot(castItem->GetSlot()));
+ WeaponAttackType attType = player->GetAttackBySlot(castItem->GetSlot());
if ((attType != BASE_ATTACK && attType != OFF_ATTACK)
|| (attType == BASE_ATTACK && procFlag & PROC_FLAG_DONE_OFFHAND_ATTACK)
|| (attType == OFF_ATTACK && procFlag & PROC_FLAG_DONE_MAINHAND_ATTACK))
@@ -8370,7 +8370,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
if (!IsPlayer() || !victim || !victim->IsAlive() || !castItem || !castItem->IsEquipped())
return false;
- WeaponAttackType attType = WeaponAttackType(Player::GetAttackBySlot(castItem->GetSlot()));
+ WeaponAttackType attType = Player::GetAttackBySlot(castItem->GetSlot());
if ((attType != BASE_ATTACK && attType != OFF_ATTACK)
|| (attType == BASE_ATTACK && procFlag & PROC_FLAG_DONE_OFFHAND_ATTACK)
|| (attType == OFF_ATTACK && procFlag & PROC_FLAG_DONE_MAINHAND_ATTACK))
@@ -13562,7 +13562,7 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
SendMessageToSet(&data, true);
data.Initialize(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, 0);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
// mounts can also have accessories
GetVehicleKit()->InstallAllAccessories(false);
@@ -13590,7 +13590,7 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
data << GetPackGUID();
data << player->GetSession()->GetOrderCounter(); // movement counter
data << player->GetCollisionHeight();
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
player->GetSession()->IncrementOrderCounter();
}
@@ -13611,7 +13611,7 @@ void Unit::Dismount()
data << GetPackGUID();
data << player->GetSession()->GetOrderCounter(); // movement counter
data << player->GetCollisionHeight();
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
player->GetSession()->IncrementOrderCounter();
}
@@ -14523,116 +14523,55 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
propagateSpeedChange();
- WorldPacket data;
- if (!forced)
+ SpeedOpcodePair const& speedOpcodes = SetSpeed2Opc_table[mtype];
+
+ if (forced && IsClientControlled())
{
- switch (mtype)
- {
- case MOVE_WALK:
- data.Initialize(MSG_MOVE_SET_WALK_SPEED, 8 + 4 + 2 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
- break;
- case MOVE_RUN:
- data.Initialize(MSG_MOVE_SET_RUN_SPEED, 8 + 4 + 2 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
- break;
- case MOVE_RUN_BACK:
- data.Initialize(MSG_MOVE_SET_RUN_BACK_SPEED, 8 + 4 + 2 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
- break;
- case MOVE_SWIM:
- data.Initialize(MSG_MOVE_SET_SWIM_SPEED, 8 + 4 + 2 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
- break;
- case MOVE_SWIM_BACK:
- data.Initialize(MSG_MOVE_SET_SWIM_BACK_SPEED, 8 + 4 + 2 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
- break;
- case MOVE_TURN_RATE:
- data.Initialize(MSG_MOVE_SET_TURN_RATE, 8 + 4 + 2 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
- break;
- case MOVE_FLIGHT:
- data.Initialize(MSG_MOVE_SET_FLIGHT_SPEED, 8 + 4 + 2 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
- break;
- case MOVE_FLIGHT_BACK:
- data.Initialize(MSG_MOVE_SET_FLIGHT_BACK_SPEED, 8 + 4 + 2 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
- break;
- case MOVE_PITCH_RATE:
- data.Initialize(MSG_MOVE_SET_PITCH_RATE, 8 + 4 + 2 + 4 + 4 + 4 + 4 + 4 + 4 + 4);
- break;
- default:
- LOG_ERROR("entities.unit", "Unit::SetSpeed: Unsupported move type ({}), data not sent to client.", mtype);
- return;
- }
+ Player* player = const_cast<Player*>(GetClientControlling());
+ uint32 const counter = player->GetSession()->GetOrderCounter();
+
+ // register forced speed changes for WorldSession::HandleForceSpeedChangeAck
+ // and do it only for real sent packets and use run for run/mounted as client expected
+ ++player->m_forced_speed_changes[mtype];
+
+ WorldPacket data(speedOpcodes[static_cast<size_t>(SpeedOpcodeIndex::PC)], 18);
+ data << GetPackGUID();
+ data << counter;
+ if (mtype == MOVE_RUN)
+ data << uint8(0); // new 2.1.0
+ data << GetSpeed(mtype);
+ player->GetSession()->SendPacket(&data);
+ player->GetSession()->IncrementOrderCounter();
+ }
+ else if (forced)
+ {
+ WorldPacket data(speedOpcodes[static_cast<size_t>(SpeedOpcodeIndex::NPC)], 12);
data << GetPackGUID();
- BuildMovementPacket(&data);
data << float(GetSpeed(mtype));
SendMessageToSet(&data, true);
}
- else
+
+ if (IsPlayer())
{
- if (IsPlayer())
+ // Xinef: update speed of pet also
+ if (!IsInCombat())
{
- // register forced speed changes for WorldSession::HandleForceSpeedChangeAck
- // and do it only for real sent packets and use run for run/mounted as client expected
- ++ToPlayer()->m_forced_speed_changes[mtype];
+ Unit* pet = ToPlayer()->GetPet();
+ if (!pet)
+ pet = GetCharm();
- // Xinef: update speed of pet also
- if (!IsInCombat())
- {
- Unit* pet = ToPlayer()->GetPet();
- if (!pet)
- pet = GetCharm();
+ // xinef: do not affect vehicles and possesed pets
+ if (pet && (pet->HasUnitFlag(UNIT_FLAG_POSSESSED) || pet->IsVehicle()))
+ pet = nullptr;
- // xinef: do not affect vehicles and possesed pets
- if (pet && (pet->HasUnitFlag(UNIT_FLAG_POSSESSED) || pet->IsVehicle()))
- pet = nullptr;
+ if (pet && pet->IsCreature() && !pet->IsInCombat() && pet->GetMotionMaster()->GetCurrentMovementGeneratorType() == FOLLOW_MOTION_TYPE)
+ pet->UpdateSpeed(mtype, forced);
- if (pet && pet->IsCreature() && !pet->IsInCombat() && pet->GetMotionMaster()->GetCurrentMovementGeneratorType() == FOLLOW_MOTION_TYPE)
- pet->UpdateSpeed(mtype, forced);
- if (Unit* critter = ObjectAccessor::GetUnit(*this, GetCritterGUID()))
- critter->UpdateSpeed(mtype, forced);
- }
- ToPlayer()->SetCanTeleport(true);
+ if (Unit* critter = ObjectAccessor::GetUnit(*this, GetCritterGUID()))
+ critter->UpdateSpeed(mtype, forced);
}
-
- switch (mtype)
- {
- case MOVE_WALK:
- data.Initialize(SMSG_FORCE_WALK_SPEED_CHANGE, 16);
- break;
- case MOVE_RUN:
- data.Initialize(SMSG_FORCE_RUN_SPEED_CHANGE, 17);
- break;
- case MOVE_RUN_BACK:
- data.Initialize(SMSG_FORCE_RUN_BACK_SPEED_CHANGE, 16);
- break;
- case MOVE_SWIM:
- data.Initialize(SMSG_FORCE_SWIM_SPEED_CHANGE, 16);
- break;
- case MOVE_SWIM_BACK:
- data.Initialize(SMSG_FORCE_SWIM_BACK_SPEED_CHANGE, 16);
- break;
- case MOVE_TURN_RATE:
- data.Initialize(SMSG_FORCE_TURN_RATE_CHANGE, 16);
- break;
- case MOVE_FLIGHT:
- data.Initialize(SMSG_FORCE_FLIGHT_SPEED_CHANGE, 16);
- break;
- case MOVE_FLIGHT_BACK:
- data.Initialize(SMSG_FORCE_FLIGHT_BACK_SPEED_CHANGE, 16);
- break;
- case MOVE_PITCH_RATE:
- data.Initialize(SMSG_FORCE_PITCH_RATE_CHANGE, 16);
- break;
- default:
- LOG_ERROR("entities.unit", "Unit::SetSpeed: Unsupported move type ({}), data not sent to client.", mtype);
- return;
- }
- data << GetPackGUID();
- data << (IsPlayer() ? ToPlayer()->GetSession()->GetOrderCounter() : uint32(0)); // movement counter
- if (mtype == MOVE_RUN)
- data << uint8(0); // new 2.1.0
- data << float(GetSpeed(mtype));
- SendMessageToSet(&data, true);
- if (IsPlayer()) // TODO: Resolve this mess
- ToPlayer()->GetSession()->IncrementOrderCounter();
+ ToPlayer()->SetCanTeleport(true);
}
}
@@ -16681,7 +16620,7 @@ void Unit::SendPetActionFeedback(uint8 msg) const
WorldPacket data(SMSG_PET_ACTION_FEEDBACK, 1);
data << uint8(msg);
- owner->ToPlayer()->GetSession()->SendPacket(&data);
+ owner->ToPlayer()->SendDirectMessage(&data);
}
void Unit::SendPetActionSound(PetAction action) const
@@ -16704,7 +16643,7 @@ void Unit::SendPetAIReaction(ObjectGuid guid) const
WorldPacket data(SMSG_AI_REACTION, 8 + 4);
data << guid;
data << uint32(AI_REACTION_HOSTILE);
- owner->ToPlayer()->GetSession()->SendPacket(&data);
+ owner->ToPlayer()->SendDirectMessage(&data);
}
///----------End of Pet responses methods----------
@@ -16810,7 +16749,7 @@ void Unit::SetStandState(uint8 state)
{
WorldPacket data(SMSG_STANDSTATE_UPDATE, 1);
data << (uint8)state;
- ToPlayer()->GetSession()->SendPacket(&data);
+ ToPlayer()->SendDirectMessage(&data);
}
}
@@ -18343,7 +18282,7 @@ void Unit::SendMoveRoot(bool apply)
// Wrath+ force root: when unit is controlled by a player
else
{
- auto const counter = client->GetSession()->GetOrderCounter();
+ uint32 const counter = client->GetSession()->GetOrderCounter();
WorldPacket data(apply ? SMSG_FORCE_MOVE_ROOT : SMSG_FORCE_MOVE_UNROOT, guid.size() + 4);
data << guid;
@@ -19251,7 +19190,7 @@ void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ)
data << float(speedXY); // Horizontal speed
data << float(-speedZ); // Z Movement speed (vertical)
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
player->GetSession()->IncrementOrderCounter();
player->SetCanKnockback(true);
@@ -19351,7 +19290,7 @@ void Unit::JumpTo(float speedXY, float speedZ, bool forward)
data << float(speedXY); // Horizontal speed
data << float(-speedZ); // Z Movement speed (vertical)
- ToPlayer()->GetSession()->SendPacket(&data);
+ ToPlayer()->SendDirectMessage(&data);
}
}
@@ -19509,7 +19448,7 @@ void Unit::_EnterVehicle(Vehicle* vehicle, int8 seatId, AuraApplication const* a
bg->EventPlayerDroppedFlag(player);
WorldPacket data(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, 0);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
ASSERT(!m_vehicle);
@@ -19603,6 +19542,9 @@ void Unit::_ExitVehicle(Position const* exitPosition)
if (!vehicleBase)
return;
+ if (IsPlayer())
+ ToPlayer()->SetExpectingChangeTransport(true);
+
SetControlled(false, UNIT_STATE_ROOT); // SMSG_MOVE_FORCE_UNROOT, ~MOVEMENTFLAG_ROOT
Position pos;
@@ -20381,22 +20323,39 @@ bool Unit::SetWalk(bool enable)
return true;
}
-bool Unit::SetDisableGravity(bool disable, bool /*packetOnly = false*/, bool /*updateAnimationTier = true*/)
+void Unit::SetDisableGravity(bool enable)
{
- if (disable == IsLevitating())
- return false;
+ bool isClientControlled = IsClientControlled();
- if (disable)
+ if (!isClientControlled)
{
- AddUnitMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY);
- RemoveUnitMovementFlag(MOVEMENTFLAG_FALLING);
+ if (enable)
+ m_movementInfo.AddMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY);
+ else
+ m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY);
}
- else
+
+ if (!IsInWorld()) // is sent on add to map
+ return;
+
+ if (isClientControlled)
{
- RemoveUnitMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY);
+ if (Player const* player = GetClientControlling())
+ {
+ uint32 const counter = player->GetSession()->GetOrderCounter();
+
+ WorldPacket data(enable ? SMSG_MOVE_GRAVITY_DISABLE : SMSG_MOVE_GRAVITY_ENABLE, GetPackGUID().size() + 4);
+ data << GetPackGUID();
+ data << counter;
+ player->GetSession()->SendPacket(&data);
+ player->GetSession()->IncrementOrderCounter();
+ return;
+ }
}
- return true;
+ WorldPacket data(enable ? SMSG_SPLINE_MOVE_GRAVITY_DISABLE : SMSG_SPLINE_MOVE_GRAVITY_ENABLE, 9);
+ data << GetPackGUID();
+ SendMessageToSet(&data, true);
}
bool Unit::SetSwim(bool enable)
@@ -20443,12 +20402,13 @@ void Unit::SetCanFly(bool enable)
{
if (Player const* player = GetClientControlling())
{
- auto const counter = player->GetSession()->GetOrderCounter();
+ uint32 const counter = player->GetSession()->GetOrderCounter();
+ const_cast<Player*>(player)->SetPendingFlightChange(counter);
WorldPacket data(enable ? SMSG_MOVE_SET_CAN_FLY : SMSG_MOVE_UNSET_CAN_FLY, GetPackGUID().size() + 4);
data << GetPackGUID();
data << counter;
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
player->GetSession()->IncrementOrderCounter();
return;
}
@@ -20478,13 +20438,13 @@ void Unit::SetFeatherFall(bool enable)
{
if (Player const* player = GetClientControlling())
{
- auto const counter = player->GetSession()->GetOrderCounter();
+ uint32 const counter = player->GetSession()->GetOrderCounter();
WorldPacket data(enable ? SMSG_MOVE_FEATHER_FALL : SMSG_MOVE_NORMAL_FALL, GetPackGUID().size() + 4);
data << GetPackGUID();
data << counter;
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
player->GetSession()->IncrementOrderCounter();
// start fall from current height
@@ -20538,11 +20498,11 @@ void Unit::SetHover(bool enable)
{
WorldPacket data(enable ? SMSG_MOVE_SET_HOVER : SMSG_MOVE_UNSET_HOVER, GetPackGUID().size() + 4);
- auto const counter = player->GetSession()->GetOrderCounter();
+ uint32 const counter = player->GetSession()->GetOrderCounter();
data << GetPackGUID();
data << counter;
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
player->GetSession()->IncrementOrderCounter();
return;
}
@@ -20572,12 +20532,12 @@ void Unit::SetWaterWalking(bool enable)
{
if (Player const* player = GetClientControlling())
{
- auto const counter = player->GetSession()->GetOrderCounter();
+ uint32 const counter = player->GetSession()->GetOrderCounter();
WorldPacket data(enable ? SMSG_MOVE_WATER_WALK : SMSG_MOVE_LAND_WALK, GetPackGUID().size() + 4);
data << GetPackGUID();
data << counter;
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
player->GetSession()->IncrementOrderCounter();
return;
}
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 7b98132fe6..b50e486ba6 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -624,6 +624,28 @@ typedef std::unordered_map<uint32, uint32> PacketCooldowns;
struct SpellProcEventEntry; // used only privately
+enum class SpeedOpcodeIndex : uint32
+{
+ PC,
+ NPC,
+ ACK_RESPONSE,
+ MAX
+};
+
+typedef const Opcodes SpeedOpcodePair[static_cast<size_t>(SpeedOpcodeIndex::MAX)];
+SpeedOpcodePair SetSpeed2Opc_table[MAX_MOVE_TYPE] =
+{
+ {SMSG_FORCE_WALK_SPEED_CHANGE, SMSG_SPLINE_SET_WALK_SPEED, MSG_MOVE_SET_WALK_SPEED},
+ {SMSG_FORCE_RUN_SPEED_CHANGE, SMSG_SPLINE_SET_RUN_SPEED, MSG_MOVE_SET_RUN_SPEED},
+ {SMSG_FORCE_RUN_BACK_SPEED_CHANGE, SMSG_SPLINE_SET_RUN_BACK_SPEED, MSG_MOVE_SET_RUN_BACK_SPEED},
+ {SMSG_FORCE_SWIM_SPEED_CHANGE, SMSG_SPLINE_SET_SWIM_SPEED, MSG_MOVE_SET_SWIM_SPEED},
+ {SMSG_FORCE_SWIM_BACK_SPEED_CHANGE, SMSG_SPLINE_SET_SWIM_BACK_SPEED, MSG_MOVE_SET_SWIM_BACK_SPEED},
+ {SMSG_FORCE_TURN_RATE_CHANGE, SMSG_SPLINE_SET_TURN_RATE, MSG_MOVE_SET_TURN_RATE},
+ {SMSG_FORCE_FLIGHT_SPEED_CHANGE, SMSG_SPLINE_SET_FLIGHT_SPEED, MSG_MOVE_SET_FLIGHT_SPEED},
+ {SMSG_FORCE_FLIGHT_BACK_SPEED_CHANGE, SMSG_SPLINE_SET_FLIGHT_BACK_SPEED, MSG_MOVE_SET_FLIGHT_BACK_SPEED},
+ {SMSG_FORCE_PITCH_RATE_CHANGE, SMSG_SPLINE_SET_PITCH_RATE, MSG_MOVE_SET_PITCH_RATE},
+};
+
class Unit : public WorldObject
{
public:
@@ -945,7 +967,7 @@ public:
inline bool HasMainhandWeaponForAttack() const { return HasWeaponForAttack(BASE_ATTACK); }
inline bool HasOffhandWeaponForAttack() const { return HasWeaponForAttack(OFF_ATTACK); }
inline bool HasRangedWeaponForAttack() const { return HasWeaponForAttack(RANGED_ATTACK); }
- [[nodiscard]] bool CanUseAttackType(uint8 attacktype) const
+ [[nodiscard]] bool CanUseAttackType(WeaponAttackType attacktype) const
{
switch (attacktype)
{
@@ -1681,7 +1703,7 @@ public:
void MonsterMoveWithSpeed(float x, float y, float z, float speed); // Not to be used outside of cinematics
virtual bool SetWalk(bool enable);
- virtual bool SetDisableGravity(bool disable, bool packetOnly = false, bool updateAnimationTier = true);
+ void SetDisableGravity(bool disable);
virtual bool SetSwim(bool enable);
void SetCanFly(bool enable);
void SetWaterWalking(bool enable);
diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp
index b0752ecd2d..65ef2bdec1 100644
--- a/src/server/game/Entities/Vehicle/Vehicle.cpp
+++ b/src/server/game/Entities/Vehicle/Vehicle.cpp
@@ -423,7 +423,9 @@ bool Vehicle::AddPassenger(Unit* unit, int8 seatId)
if (_me->IsInWorld())
{
unit->SendClearTarget(); // SMSG_BREAK_TARGET
- unit->SetControlled(true, UNIT_STATE_ROOT); // SMSG_FORCE_ROOT - In some cases we send SMSG_SPLINE_MOVE_ROOT here (for creatures)
+ unit->SetControlled(true, UNIT_STATE_ROOT); // SMSG_FORCE_ROOT - In some cases we send SMSG_SPLINE_MOVE_ROOT here (for creatures)
+ if (unit->IsPlayer())
+ unit->ToPlayer()->SetExpectingChangeTransport(true);
// also adds MOVEMENTFLAG_ROOT
Movement::MoveSplineInit init(unit);
init.DisableTransportPathTransformations();
diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.cpp b/src/server/game/Grids/Notifiers/GridNotifiers.cpp
index 5dd717f321..890c6de2b0 100644
--- a/src/server/game/Grids/Notifiers/GridNotifiers.cpp
+++ b/src/server/game/Grids/Notifiers/GridNotifiers.cpp
@@ -83,7 +83,7 @@ void VisibleNotifier::SendToSelf()
WorldPacket packet;
i_data.BuildPacket(packet);
- i_player.GetSession()->SendPacket(&packet);
+ i_player.SendDirectMessage(&packet);
for (std::vector<Unit*>::const_iterator it = i_visibleNow.begin(); it != i_visibleNow.end(); ++it)
i_player.GetInitialVisiblePackets(*it);
diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h
index d35e8600c1..d08645acdc 100644
--- a/src/server/game/Grids/Notifiers/GridNotifiers.h
+++ b/src/server/game/Grids/Notifiers/GridNotifiers.h
@@ -126,7 +126,7 @@ namespace Acore
if (!player->HaveAtClient(i_source))
return;
- player->GetSession()->SendPacket(i_message);
+ player->SendDirectMessage(i_message);
}
};
@@ -151,7 +151,7 @@ namespace Acore
if (player == i_source || !player->HaveAtClient(i_source) || player->IsFriendlyTo(i_source))
return;
- player->GetSession()->SendPacket(i_message);
+ player->SendDirectMessage(i_message);
}
};
@@ -1092,10 +1092,9 @@ namespace Acore
{
return false;
}
-
}
- if (i_funit->_IsValidAttackTarget(u, _spellInfo, i_obj->IsDynamicObject() ? i_obj : nullptr) && i_obj->IsWithinDistInMap(u, i_range,true,false))
+ if (i_funit->_IsValidAttackTarget(u, _spellInfo, i_obj->IsDynamicObject() ? i_obj : nullptr) && i_obj->IsWithinDistInMap(u, i_range,true,false, true))
return true;
@@ -1192,7 +1191,7 @@ namespace Acore
}
bool operator()(Unit* u)
{
- if (!me->IsWithinDistInMap(u, m_range, true, false))
+ if (!me->IsWithinDistInMap(u, m_range, true, false, false))
return false;
if (!me->IsValidAttackTarget(u))
@@ -1218,7 +1217,7 @@ namespace Acore
explicit NearestHostileUnitInAttackDistanceCheck(Creature const* creature, float dist) : me(creature), m_range(dist) {}
bool operator()(Unit* u)
{
- if (!me->IsWithinDistInMap(u, m_range, true, false))
+ if (!me->IsWithinDistInMap(u, m_range, true, false, false))
return false;
if (!me->CanStartAttack(u))
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp
index b4b2331e11..de21a537f3 100644
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -580,14 +580,14 @@ bool Group::RemoveMember(ObjectGuid guid, const RemoveMethod& method /*= GROUP_R
if (method == GROUP_REMOVEMETHOD_KICK || method == GROUP_REMOVEMETHOD_KICK_LFG)
{
data.Initialize(SMSG_GROUP_UNINVITE, 0);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
// Do we really need to send this opcode?
data.Initialize(SMSG_GROUP_LIST, 1 + 1 + 1 + 1 + 8 + 4 + 4 + 8);
data << uint8(0x10) << uint8(0) << uint8(0) << uint8(0);
data << m_guid << uint32(m_counter) << uint32(0) << uint64(0);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
// Remove player from group in DB
@@ -799,7 +799,7 @@ void Group::Disband(bool hideDestroy /* = false */)
if (!hideDestroy)
{
data.Initialize(SMSG_GROUP_DESTROYED, 0);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
//we already removed player from group and in player->GetGroup() is his original group, send update
@@ -812,7 +812,7 @@ void Group::Disband(bool hideDestroy /* = false */)
data.Initialize(SMSG_GROUP_LIST, 1 + 1 + 1 + 1 + 8 + 4 + 4 + 8);
data << uint8(0x10) << uint8(0) << uint8(0) << uint8(0);
data << m_guid << uint32(m_counter) << uint32(0) << uint64(0);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
}
RollId.clear();
@@ -870,7 +870,7 @@ void Group::SendLootStartRoll(uint32 CountDown, uint32 mapid, const Roll& r)
continue;
if (itr->second == NOT_EMITED_YET)
- p->GetSession()->SendPacket(&data);
+ p->SendDirectMessage(&data);
}
}
@@ -893,7 +893,7 @@ void Group::SendLootStartRollToPlayer(uint32 countDown, uint32 mapId, Player* p,
voteMask &= ~ROLL_FLAG_TYPE_NEED;
data << uint8(voteMask); // roll type mask
- p->GetSession()->SendPacket(&data);
+ p->SendDirectMessage(&data);
}
void Group::SendLootRoll(ObjectGuid sourceGuid, ObjectGuid targetGuid, uint8 rollNumber, uint8 rollType, Roll const& roll, bool autoPass)
@@ -916,7 +916,7 @@ void Group::SendLootRoll(ObjectGuid sourceGuid, ObjectGuid targetGuid, uint8 rol
continue;
if (itr->second != NOT_VALID)
- p->GetSession()->SendPacket(&data);
+ p->SendDirectMessage(&data);
}
}
@@ -939,7 +939,7 @@ void Group::SendLootRollWon(ObjectGuid sourceGuid, ObjectGuid targetGuid, uint8
continue;
if (itr->second != NOT_VALID)
- p->GetSession()->SendPacket(&data);
+ p->SendDirectMessage(&data);
}
}
@@ -959,7 +959,7 @@ void Group::SendLootAllPassed(Roll const& roll)
continue;
if (itr->second != NOT_VALID)
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
}
@@ -1353,7 +1353,7 @@ void Group::MasterLoot(Loot* loot, WorldObject* pLootedObject)
for (Player* looter : looters)
{
- looter->GetSession()->SendPacket(&data);
+ looter->SendDirectMessage(&data);
}
}
@@ -1735,7 +1735,7 @@ void Group::SendUpdateToPlayer(ObjectGuid playerGUID, MemberSlot* slot)
data << uint8(m_raidDifficulty >= RAID_DIFFICULTY_10MAN_HEROIC); // 3.3 Dynamic Raid Difficulty - 0 normal/1 heroic
}
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
void Group::UpdatePlayerOutOfRange(Player* player)
@@ -1750,7 +1750,7 @@ void Group::UpdatePlayerOutOfRange(Player* player)
{
Player* member = itr->GetSource();
if (member && (!member->IsInMap(player) || !member->IsWithinDist(player, member->GetSightRange(player), false)))
- member->GetSession()->SendPacket(&data);
+ member->SendDirectMessage(&data);
}
}
@@ -1763,7 +1763,7 @@ void Group::BroadcastPacket(WorldPacket const* packet, bool ignorePlayersInBGRai
continue;
if (group == -1 || itr->getSubGroup() == group)
- player->GetSession()->SendPacket(packet);
+ player->SendDirectMessage(packet);
}
}
@@ -1774,7 +1774,7 @@ void Group::BroadcastReadyCheck(WorldPacket const* packet)
Player* player = itr->GetSource();
if (player)
if (IsLeader(player->GetGUID()) || IsAssistant(player->GetGUID()))
- player->GetSession()->SendPacket(packet);
+ player->SendDirectMessage(packet);
}
}
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index a39c14b6b8..bd9bbafc66 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -2123,7 +2123,7 @@ void Guild::BroadcastToGuild(WorldSession* session, bool officerOnly, std::strin
for (auto const& [guid, member] : m_members)
if (Player* player = member.FindPlayer())
if (_HasRankRight(player, officerOnly ? GR_RIGHT_OFFCHATLISTEN : GR_RIGHT_GCHATLISTEN) && !player->GetSocial()->HasIgnore(session->GetPlayer()->GetGUID()))
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
}
@@ -2132,14 +2132,14 @@ void Guild::BroadcastPacketToRank(WorldPacket const* packet, uint8 rankId) const
for (auto const& [guid, member] : m_members)
if (member.IsRank(rankId))
if (Player* player = member.FindPlayer())
- player->GetSession()->SendPacket(packet);
+ player->SendDirectMessage(packet);
}
void Guild::BroadcastPacket(WorldPacket const* packet) const
{
for (auto const& [guid, member] : m_members)
if (Player* player = member.FindPlayer())
- player->GetSession()->SendPacket(packet);
+ player->SendDirectMessage(packet);
}
void Guild::MassInviteToEvent(WorldSession* session, uint32 minLevel, uint32 maxLevel, uint32 minRank)
diff --git a/src/server/game/Handlers/ArenaTeamHandler.cpp b/src/server/game/Handlers/ArenaTeamHandler.cpp
index e982f61fc4..4f293487c2 100644
--- a/src/server/game/Handlers/ArenaTeamHandler.cpp
+++ b/src/server/game/Handlers/ArenaTeamHandler.cpp
@@ -160,7 +160,7 @@ void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket& recvData)
WorldPacket data(SMSG_ARENA_TEAM_INVITE, (8 + 10));
data << GetPlayer()->GetName();
data << arenaTeam->GetName();
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
LOG_DEBUG("network", "WORLD: Sent SMSG_ARENA_TEAM_INVITE");
}
diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp
index c66ea7361d..51e532343a 100644
--- a/src/server/game/Handlers/BattleGroundHandler.cpp
+++ b/src/server/game/Handlers/BattleGroundHandler.cpp
@@ -265,7 +265,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData)
{
WorldPacket data;
sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, err);
- member->GetSession()->SendPacket(&data);
+ member->SendDirectMessage(&data);
});
return;
@@ -283,10 +283,10 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData)
// send status packet
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, member->AddBattlegroundQueueId(bgQueueTypeId), STATUS_WAIT_QUEUE, avgWaitTime, 0, 0, TEAM_NEUTRAL);
- member->GetSession()->SendPacket(&data);
+ member->SendDirectMessage(&data);
sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, err);
- member->GetSession()->SendPacket(&data);
+ member->SendDirectMessage(&data);
sScriptMgr->OnPlayerJoinBG(member);
});
@@ -879,7 +879,7 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData)
if (err <= 0)
{
sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, err);
- member->GetSession()->SendPacket(&data);
+ member->SendDirectMessage(&data);
continue;
}
@@ -887,10 +887,10 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData)
// send status packet
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bgt, queueSlot, STATUS_WAIT_QUEUE, avgWaitTime, 0, arenatype, TEAM_NEUTRAL, isRated);
- member->GetSession()->SendPacket(&data);
+ member->SendDirectMessage(&data);
sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, err);
- member->GetSession()->SendPacket(&data);
+ member->SendDirectMessage(&data);
LOG_DEBUG("bg.battleground", "Battleground: player joined queue for arena as group bg queue type {} bg type {}: {}, NAME {}", bgQueueTypeId, bgTypeId, member->GetGUID().ToString(), member->GetName());
diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp
index 04337cd9c8..90e68057ae 100644
--- a/src/server/game/Handlers/ChatHandler.cpp
+++ b/src/server/game/Handlers/ChatHandler.cpp
@@ -803,7 +803,7 @@ void WorldSession::HandleChatIgnoredOpcode(WorldPacket& recvData)
WorldPacket data;
ChatHandler::BuildChatPacket(data, CHAT_MSG_IGNORED, LANG_UNIVERSAL, _player, _player, GetPlayer()->GetName());
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
void WorldSession::HandleChannelDeclineInvite(WorldPacket& recvPacket)
diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp
index c8f14779be..5fc1bdffd3 100644
--- a/src/server/game/Handlers/GroupHandler.cpp
+++ b/src/server/game/Handlers/GroupHandler.cpp
@@ -149,7 +149,7 @@ void WorldSession::HandleGroupInviteOpcode(WorldPacket& recvData)
data << uint32(0); // unk
data << uint8(0); // count
data << uint32(0); // unk
- invitedPlayer->GetSession()->SendPacket(&data);
+ invitedPlayer->SendDirectMessage(&data);
}
return;
@@ -209,7 +209,7 @@ void WorldSession::HandleGroupInviteOpcode(WorldPacket& recvData)
data << uint32(0); // unk
data << uint8(0); // count
data << uint32(0); // unk
- invitedPlayer->GetSession()->SendPacket(&data);
+ invitedPlayer->SendDirectMessage(&data);
SendPartyResult(PARTY_OP_INVITE, membername, ERR_PARTY_RESULT_OK);
}
@@ -292,7 +292,7 @@ void WorldSession::HandleGroupDeclineOpcode(WorldPacket& /*recvData*/)
// report
WorldPacket data(SMSG_GROUP_DECLINE, GetPlayer()->GetName().length());
data << GetPlayer()->GetName();
- leader->GetSession()->SendPacket(&data);
+ leader->SendDirectMessage(&data);
}
void WorldSession::HandleGroupUninviteGuidOpcode(WorldPacket& recvData)
diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp
index f1b00066b5..0dca019cf0 100644
--- a/src/server/game/Handlers/LootHandler.cpp
+++ b/src/server/game/Handlers/LootHandler.cpp
@@ -206,7 +206,7 @@ void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/)
WorldPacket data(SMSG_LOOT_MONEY_NOTIFY, 4 + 1);
data << uint32(goldPerPlayer);
data << uint8(playersNear.size() > 1 ? 0 : 1); // Controls the text displayed in chat. 0 is "Your share is..." and 1 is "You loot..."
- (*i)->GetSession()->SendPacket(&data);
+ (*i)->SendDirectMessage(&data);
}
}
else
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index 03c91c298c..a1c09fb47d 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -1490,6 +1490,8 @@ void WorldSession::HandleMoveFlagChangeOpcode(WorldPacket& recv_data)
{
LOG_DEBUG("network", "WORLD: {}", GetOpcodeNameForLogging((Opcodes)recv_data.GetOpcode()));
+ Opcodes opcode = (Opcodes)recv_data.GetOpcode();
+
ObjectGuid guid;
uint32 counter;
uint32 isApplied;
@@ -1507,7 +1509,8 @@ void WorldSession::HandleMoveFlagChangeOpcode(WorldPacket& recv_data)
movementInfo.guid = guid;
ReadMovementInfo(recv_data, &movementInfo);
- recv_data >> isApplied;
+ if (opcode != CMSG_MOVE_GRAVITY_DISABLE_ACK && opcode != CMSG_MOVE_GRAVITY_ENABLE_ACK)
+ recv_data >> isApplied;
sScriptMgr->AnticheatSetCanFlybyServer(_player, movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY));
@@ -1516,6 +1519,19 @@ void WorldSession::HandleMoveFlagChangeOpcode(WorldPacket& recv_data)
mover->m_movementInfo.flags = movementInfo.GetMovementFlags();
+ // old map - async processing, ignore
+ if (counter <= _player->GetMapChangeOrderCounter())
+ return;
+
+ if (!ProcessMovementInfo(movementInfo, mover, plrMover, recv_data))
+ {
+ recv_data.rfinish(); // prevent warnings spam
+ return;
+ }
+
+ if (_player->GetPendingFlightChange() == counter && opcode == CMSG_MOVE_SET_CAN_FLY_ACK)
+ _player->SetPendingFlightChange(false);
+
Opcodes response;
switch (recv_data.GetOpcode())
@@ -1524,17 +1540,12 @@ void WorldSession::HandleMoveFlagChangeOpcode(WorldPacket& recv_data)
case CMSG_MOVE_FEATHER_FALL_ACK: response = MSG_MOVE_FEATHER_FALL; break;
case CMSG_MOVE_WATER_WALK_ACK: response = MSG_MOVE_WATER_WALK; break;
case CMSG_MOVE_SET_CAN_FLY_ACK: response = MSG_MOVE_UPDATE_CAN_FLY; break;
+ case CMSG_MOVE_GRAVITY_DISABLE_ACK: response = MSG_MOVE_GRAVITY_CHNG; break;
+ case CMSG_MOVE_GRAVITY_ENABLE_ACK: response = MSG_MOVE_GRAVITY_CHNG; break;
default: return;
}
- if (!ProcessMovementInfo(movementInfo, mover, plrMover, recv_data))
- {
- recv_data.rfinish(); // prevent warnings spam
- return;
- }
-
WorldPacket data(response, 8);
- data << guid.WriteAsPacked();
WriteMovementInfo(&data, &movementInfo);
_player->m_mover->SendMessageToSet(&data, _player);
}
diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp
index 6bf1b899b2..1be5903bff 100644
--- a/src/server/game/Handlers/MovementHandler.cpp
+++ b/src/server/game/Handlers/MovementHandler.cpp
@@ -105,6 +105,13 @@ void WorldSession::HandleMoveWorldportAck()
GetPlayer()->UpdatePositionData();
GetPlayer()->SendInitialPacketsBeforeAddToMap();
+
+ if (GetPlayer()->GetPendingFlightChange() <= GetPlayer()->GetMapChangeOrderCounter())
+ {
+ if (!GetPlayer()->HasIncreaseMountedFlightSpeedAura() && !GetPlayer()->HasFlyAura())
+ GetPlayer()->m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_CAN_FLY);
+ }
+
if (!GetPlayer()->GetMap()->AddPlayerToMap(GetPlayer()))
{
LOG_ERROR("network.opcode", "WORLD: failed to teleport player {} ({}) to map {} because of unknown reason!",
@@ -376,9 +383,11 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData)
return;
}
+ if (opcode == CMSG_MOVE_FALL_RESET || opcode == CMSG_MOVE_CHNG_TRANSPORT)
+ return;
+
/* process position-change */
WorldPacket data(opcode, recvData.size());
- movementInfo.guid = mover->GetGUID();
WriteMovementInfo(&data, &movementInfo);
mover->SendMessageToSet(&data, _player);
}
@@ -517,7 +526,10 @@ bool WorldSession::VerifyMovementInfo(MovementInfo const& movementInfo, Player*
}
if (!mover->movespline->Finalized())
- return false;
+ {
+ if (!mover->movespline->isBoarding() || (opcode != CMSG_FORCE_MOVE_UNROOT_ACK && opcode != CMSG_FORCE_MOVE_ROOT_ACK))
+ return false;
+ }
// Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
if (mover->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE))
@@ -655,26 +667,43 @@ void WorldSession::HandleForceSpeedChangeAck(WorldPacket& recvData)
/* extract packet */
ObjectGuid guid;
- uint32 unk1;
+ uint32 counter;
+ MovementInfo movementInfo;
float newspeed;
recvData >> guid.ReadAsPacked();
+ recvData >> counter; // counter or moveEvent
+ movementInfo.guid = guid;
+ ReadMovementInfo(recvData, &movementInfo);
+ recvData >> newspeed;
+
+ Unit* mover = _player->m_mover;
// pussywizard: special check, only player mover allowed here
- if (guid != _player->m_mover->GetGUID() || guid != _player->GetGUID())
+ if (guid != mover->GetGUID() || guid != _player->GetGUID())
{
recvData.rfinish(); // prevent warnings spam
return;
}
- // continue parse packet
- recvData >> unk1; // counter or moveEvent
+ // old map - async processing, ignore
+ if (counter <= _player->GetMapChangeOrderCounter())
+ return;
- MovementInfo movementInfo;
- movementInfo.guid = guid;
- ReadMovementInfo(recvData, &movementInfo);
+ if (!ProcessMovementInfo(movementInfo, mover, _player, recvData))
+ {
+ recvData.rfinish(); // prevent warnings spam
+ return;
+ }
- recvData >> newspeed;
+ if (opcode == CMSG_MOVE_SET_COLLISION_HGT_ACK)
+ {
+ WorldPacket data(MSG_MOVE_SET_COLLISION_HGT, 18);
+ WriteMovementInfo(&data, &movementInfo);
+ data << newspeed; // new collision height
+ mover->SendMessageToSet(&data, _player);
+ return;
+ }
// client ACK send one packet for mounted/run case and need skip all except last from its
// in other cases anti-cheat check can be fail in false case
@@ -685,42 +714,15 @@ void WorldSession::HandleForceSpeedChangeAck(WorldPacket& recvData)
switch (opcode)
{
- case CMSG_FORCE_WALK_SPEED_CHANGE_ACK:
- move_type = MOVE_WALK;
- force_move_type = MOVE_WALK;
- break;
- case CMSG_FORCE_RUN_SPEED_CHANGE_ACK:
- move_type = MOVE_RUN;
- force_move_type = MOVE_RUN;
- break;
- case CMSG_FORCE_RUN_BACK_SPEED_CHANGE_ACK:
- move_type = MOVE_RUN_BACK;
- force_move_type = MOVE_RUN_BACK;
- break;
- case CMSG_FORCE_SWIM_SPEED_CHANGE_ACK:
- move_type = MOVE_SWIM;
- force_move_type = MOVE_SWIM;
- break;
- case CMSG_FORCE_SWIM_BACK_SPEED_CHANGE_ACK:
- move_type = MOVE_SWIM_BACK;
- force_move_type = MOVE_SWIM_BACK;
- break;
- case CMSG_FORCE_TURN_RATE_CHANGE_ACK:
- move_type = MOVE_TURN_RATE;
- force_move_type = MOVE_TURN_RATE;
- break;
- case CMSG_FORCE_FLIGHT_SPEED_CHANGE_ACK:
- move_type = MOVE_FLIGHT;
- force_move_type = MOVE_FLIGHT;
- break;
- case CMSG_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK:
- move_type = MOVE_FLIGHT_BACK;
- force_move_type = MOVE_FLIGHT_BACK;
- break;
- case CMSG_FORCE_PITCH_RATE_CHANGE_ACK:
- move_type = MOVE_PITCH_RATE;
- force_move_type = MOVE_PITCH_RATE;
- break;
+ case CMSG_FORCE_WALK_SPEED_CHANGE_ACK: move_type = MOVE_WALK; force_move_type = MOVE_WALK; break;
+ case CMSG_FORCE_RUN_SPEED_CHANGE_ACK: move_type = MOVE_RUN; force_move_type = MOVE_RUN; break;
+ case CMSG_FORCE_RUN_BACK_SPEED_CHANGE_ACK: move_type = MOVE_RUN_BACK; force_move_type = MOVE_RUN_BACK; break;
+ case CMSG_FORCE_SWIM_SPEED_CHANGE_ACK: move_type = MOVE_SWIM; force_move_type = MOVE_SWIM; break;
+ case CMSG_FORCE_SWIM_BACK_SPEED_CHANGE_ACK: move_type = MOVE_SWIM_BACK; force_move_type = MOVE_SWIM_BACK; break;
+ case CMSG_FORCE_TURN_RATE_CHANGE_ACK: move_type = MOVE_TURN_RATE; force_move_type = MOVE_TURN_RATE; break;
+ case CMSG_FORCE_FLIGHT_SPEED_CHANGE_ACK: move_type = MOVE_FLIGHT; force_move_type = MOVE_FLIGHT; break;
+ case CMSG_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK: move_type = MOVE_FLIGHT_BACK; force_move_type = MOVE_FLIGHT_BACK; break;
+ case CMSG_FORCE_PITCH_RATE_CHANGE_ACK: move_type = MOVE_PITCH_RATE; force_move_type = MOVE_PITCH_RATE; break;
default:
LOG_ERROR("network.opcode", "WorldSession::HandleForceSpeedChangeAck: Unknown move type opcode: {}", opcode);
return;
@@ -728,6 +730,12 @@ void WorldSession::HandleForceSpeedChangeAck(WorldPacket& recvData)
sScriptMgr->AnticheatSetUnderACKmount(_player);
+ SpeedOpcodePair const& speedOpcodes = SetSpeed2Opc_table[move_type];
+ WorldPacket data(speedOpcodes[static_cast<size_t>(SpeedOpcodeIndex::ACK_RESPONSE)], 18);
+ WriteMovementInfo(&data, &movementInfo);
+ data << newspeed;
+ mover->SendMessageToSet(&data, _player);
+
// skip all forced speed changes except last and unexpected
// in run/mounted case used one ACK and it must be skipped.m_forced_speed_changes[MOVE_RUN} store both.
if (_player->m_forced_speed_changes[force_move_type] > 0)
@@ -967,13 +975,15 @@ void WorldSession::ComputeNewClockDelta()
void WorldSession::HandleMoveRootAck(WorldPacket& recvData)
{
- LOG_DEBUG("network", "WORLD: {}", GetOpcodeNameForLogging((Opcodes)recvData.GetOpcode()));
+ Opcodes opcode = (Opcodes)recvData.GetOpcode();
+ LOG_DEBUG("network", "WORLD: {}", GetOpcodeNameForLogging(opcode));
ObjectGuid guid;
uint32 counter;
MovementInfo movementInfo;
recvData >> guid.ReadAsPacked();
recvData >> counter;
+ movementInfo.guid = guid;
ReadMovementInfo(recvData, &movementInfo);
Unit* mover = _player->m_mover;
@@ -981,7 +991,7 @@ void WorldSession::HandleMoveRootAck(WorldPacket& recvData)
if (mover->GetGUID() != guid)
return;
- if (recvData.GetOpcode() == CMSG_FORCE_MOVE_UNROOT_ACK) // unroot case
+ if (opcode == CMSG_FORCE_MOVE_UNROOT_ACK) // unroot case
{
if (!mover->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_ROOT))
return;
@@ -992,11 +1002,17 @@ void WorldSession::HandleMoveRootAck(WorldPacket& recvData)
return;
}
+ // old map - async processing, ignore
+ if (counter <= _player->GetMapChangeOrderCounter())
+ return;
+
if (!ProcessMovementInfo(movementInfo, mover, _player, recvData))
return;
- WorldPacket data(recvData.GetOpcode() == CMSG_FORCE_MOVE_UNROOT_ACK ? MSG_MOVE_UNROOT : MSG_MOVE_ROOT);
- data << guid.WriteAsPacked();
+ if (_player->IsExpectingChangeTransport())
+ return;
+
+ WorldPacket data(opcode == CMSG_FORCE_MOVE_UNROOT_ACK ? MSG_MOVE_UNROOT : MSG_MOVE_ROOT);
WriteMovementInfo(&data, &movementInfo);
mover->SendMessageToSet(&data, _player);
}
diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp
index 7ff2091d40..2dd6cf4bea 100644
--- a/src/server/game/Handlers/PetitionsHandler.cpp
+++ b/src/server/game/Handlers/PetitionsHandler.cpp
@@ -494,7 +494,7 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData)
// update for owner if online
if (Player* owner = ObjectAccessor::FindConnectedPlayer(petition->ownerGuid))
- owner->GetSession()->SendPacket(&data);
+ owner->SendDirectMessage(&data);
return;
}
@@ -527,7 +527,7 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData)
// update for owner if online
if (Player* owner = ObjectAccessor::FindConnectedPlayer(petition->ownerGuid))
- owner->GetSession()->SendPacket(&data);
+ owner->SendDirectMessage(&data);
}
void WorldSession::HandlePetitionDeclineOpcode(WorldPacket& recvData)
@@ -547,7 +547,7 @@ void WorldSession::HandlePetitionDeclineOpcode(WorldPacket& recvData)
{
WorldPacket data(MSG_PETITION_DECLINE, 8);
data << _player->GetGUID();
- owner->GetSession()->SendPacket(&data);
+ owner->SendDirectMessage(&data);
}
}
@@ -639,7 +639,7 @@ void WorldSession::HandleOfferPetitionOpcode(WorldPacket& recvData)
data << uint32(0); // there 0 ...
}
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData)
diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp
index 80063d6382..f8d6d57d6e 100644
--- a/src/server/game/Handlers/QuestHandler.cpp
+++ b/src/server/game/Handlers/QuestHandler.cpp
@@ -625,7 +625,7 @@ void WorldSession::HandleQuestPushResult(WorldPacket& recvPacket)
WorldPacket data(MSG_QUEST_PUSH_RESULT, 8 + 4 + 1);
data << _player->GetGUID();
data << uint8(msg); // valid values: 0-8
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
_player->SetDivider();
}
}
diff --git a/src/server/game/Handlers/ReferAFriendHandler.cpp b/src/server/game/Handlers/ReferAFriendHandler.cpp
index e616d7b47b..1b2f07cb38 100644
--- a/src/server/game/Handlers/ReferAFriendHandler.cpp
+++ b/src/server/game/Handlers/ReferAFriendHandler.cpp
@@ -60,7 +60,7 @@ void WorldSession::HandleGrantLevel(WorldPacket& recvData)
WorldPacket data2(SMSG_PROPOSE_LEVEL_GRANT, 8);
data2 << _player->GetPackGUID();
- target->GetSession()->SendPacket(&data2);
+ target->SendDirectMessage(&data2);
}
void WorldSession::HandleAcceptGrantLevel(WorldPacket& recvData)
diff --git a/src/server/game/Handlers/TaxiHandler.cpp b/src/server/game/Handlers/TaxiHandler.cpp
index 8a76a2bd63..03a5ba89cf 100644
--- a/src/server/game/Handlers/TaxiHandler.cpp
+++ b/src/server/game/Handlers/TaxiHandler.cpp
@@ -198,54 +198,70 @@ void WorldSession::HandleActivateTaxiExpressOpcode(WorldPacket& recvData)
void WorldSession::HandleMoveSplineDoneOpcode(WorldPacket& recvData)
{
- ObjectGuid guid; // used only for proper packet read
- recvData >> guid.ReadAsPacked();
-
- MovementInfo movementInfo; // used only for proper packet read
- movementInfo.guid = guid;
- ReadMovementInfo(recvData, &movementInfo);
+ ObjectGuid guid; // used only for proper packet read
+ MovementInfo movementInfo; // used only for proper packet read
+ uint32 movementCounter; // spline counter
- recvData.read_skip<uint32>(); // spline id
+ Unit* mover = _player->m_mover;
- // in taxi flight packet received in 2 case:
- // 1) end taxi path in far (multi-node) flight
- // 2) switch from one map to other in case multim-map taxi path
- // we need process only (1)
+ recvData >> guid.ReadAsPacked();
+ ReadMovementInfo(recvData, &movementInfo);
+ recvData >> movementCounter;
- uint32 curDest = GetPlayer()->m_taxi.GetTaxiDestination();
- if (curDest)
+ if (_player->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_TAXI_FLIGHT)) // taxi spline case
{
- TaxiNodesEntry const* curDestNode = sTaxiNodesStore.LookupEntry(curDest);
+ // in taxi flight packet received in 2 case:
+ // 1) end taxi path in far (multi-node) flight
+ // 2) switch from one map to other in case multim-map taxi path
+ // we need process only (1)
- // far teleport case
- if (curDestNode && curDestNode->map_id != GetPlayer()->GetMapId() && GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE)
+ uint32 curDest = GetPlayer()->m_taxi.GetTaxiDestination();
+ if (curDest)
{
- if (FlightPathMovementGenerator* flight = dynamic_cast<FlightPathMovementGenerator*>(GetPlayer()->GetMotionMaster()->top()))
- {
- // short preparations to continue flight
- flight->SetCurrentNodeAfterTeleport();
- TaxiPathNodeEntry const* node = flight->GetPath()[flight->GetCurrentNode()];
- flight->SkipCurrentNode();
+ TaxiNodesEntry const* curDestNode = sTaxiNodesStore.LookupEntry(curDest);
- GetPlayer()->TeleportTo(curDestNode->map_id, node->x, node->y, node->z, GetPlayer()->GetOrientation(), TELE_TO_NOT_LEAVE_TAXI);
+ // far teleport case
+ if (curDestNode && curDestNode->map_id != GetPlayer()->GetMapId() && GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE)
+ {
+ if (FlightPathMovementGenerator* flight = dynamic_cast<FlightPathMovementGenerator*>(GetPlayer()->GetMotionMaster()->top()))
+ {
+ // short preparations to continue flight
+ flight->SetCurrentNodeAfterTeleport();
+ TaxiPathNodeEntry const* node = flight->GetPath()[flight->GetCurrentNode()];
+ flight->SkipCurrentNode();
+
+ GetPlayer()->TeleportTo(curDestNode->map_id, node->x, node->y, node->z, GetPlayer()->GetOrientation(), TELE_TO_NOT_LEAVE_TAXI);
+ }
}
+
+ return;
}
+ // at this point only 1 node is expected (final destination)
+ if (GetPlayer()->m_taxi.GetPath().size() != 1)
+ {
+ return;
+ }
+
+ GetPlayer()->CleanupAfterTaxiFlight();
+ GetPlayer()->SetFallInformation(GameTime::GetGameTime().count(), GetPlayer()->GetPositionZ());
+ if (GetPlayer()->pvpInfo.IsHostile)
+ {
+ GetPlayer()->CastSpell(GetPlayer(), 2479, true);
+ }
return;
}
- // at this point only 1 node is expected (final destination)
- if (GetPlayer()->m_taxi.GetPath().size() != 1)
- {
+ if (mover->GetGUID() != guid)
return;
- }
- GetPlayer()->CleanupAfterTaxiFlight();
- GetPlayer()->SetFallInformation(GameTime::GetGameTime().count(), GetPlayer()->GetPositionZ());
- if (GetPlayer()->pvpInfo.IsHostile)
- {
- GetPlayer()->CastSpell(GetPlayer(), 2479, true);
- }
+ if (!_player->IsExpectingChangeTransport() || !mover->movespline || mover->movespline->GetId() != movementCounter)
+ return;
+
+ _player->SetExpectingChangeTransport(false);
+ WorldPacket data(_player->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_ROOT) ? MSG_MOVE_ROOT : MSG_MOVE_UNROOT, recvData.size());
+ WriteMovementInfo(&data, &movementInfo);
+ mover->SendMessageToSet(&data, _player);
}
void WorldSession::HandleActivateTaxiOpcode(WorldPacket& recvData)
diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp
index ce316965ef..08a4f6cac6 100644
--- a/src/server/game/Handlers/TradeHandler.cpp
+++ b/src/server/game/Handlers/TradeHandler.cpp
@@ -646,7 +646,7 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket)
WorldPacket data(SMSG_TRADE_STATUS, 12);
data << uint32(TRADE_STATUS_BEGIN_TRADE);
data << _player->GetGUID();
- pOther->GetSession()->SendPacket(&data);
+ pOther->SendDirectMessage(&data);
}
void WorldSession::HandleSetTradeGoldOpcode(WorldPacket& recvPacket)
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index 1aa7a3ee86..3508fb015c 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -1691,7 +1691,7 @@ void Map::SendInitTransports(Player* player)
WorldPacket packet;
transData.BuildPacket(packet);
- player->GetSession()->SendPacket(&packet);
+ player->SendDirectMessage(&packet);
}
void Map::SendRemoveTransports(Player* player)
@@ -1710,7 +1710,7 @@ void Map::SendRemoveTransports(Player* player)
WorldPacket packet;
transData.BuildPacket(packet);
- player->GetSession()->SendPacket(&packet);
+ player->SendDirectMessage(&packet);
}
void Map::SendObjectUpdates()
@@ -1730,7 +1730,7 @@ void Map::SendObjectUpdates()
for (UpdateDataMapType::iterator iter = update_players.begin(); iter != update_players.end(); ++iter)
{
iter->second.BuildPacket(packet);
- iter->first->GetSession()->SendPacket(&packet);
+ iter->first->SendDirectMessage(&packet);
packet.clear(); // clean the string
}
}
@@ -1850,7 +1850,7 @@ uint32 Map::GetPlayersCountExceptGMs() const
void Map::SendToPlayers(WorldPacket const* data) const
{
for (MapRefMgr::const_iterator itr = m_mapRefMgr.begin(); itr != m_mapRefMgr.end(); ++itr)
- itr->GetSource()->GetSession()->SendPacket(data);
+ itr->GetSource()->SendDirectMessage(data);
}
template bool Map::AddToMap(Corpse*, bool);
@@ -2055,7 +2055,7 @@ bool InstanceMap::AddPlayerToMap(Player* player)
data << uint32(60000);
data << uint32(instance_data ? instance_data->GetCompletedEncounterMask() : 0);
data << uint8(0);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
player->SetPendingBind(mapSave->GetInstanceId(), 60000);
}
}
@@ -2118,7 +2118,7 @@ void InstanceMap::CreateInstanceScript(bool load, std::string data, uint32 compl
if (instance_data)
isOtherAI = true;
- // if Eluna AI was fetched succesfully we should not call CreateInstanceData nor set the unused scriptID
+ // if ALE AI was fetched succesfully we should not call CreateInstanceData nor set the unused scriptID
if (!isOtherAI)
{
InstanceTemplate const* mInstance = sObjectMgr->GetInstanceTemplate(GetId());
@@ -2132,7 +2132,7 @@ void InstanceMap::CreateInstanceScript(bool load, std::string data, uint32 compl
if (!instance_data)
return;
- // use mangos behavior if we are dealing with Eluna AI
+ // use mangos behavior if we are dealing with ALE AI
// initialize should then be called only if load is false
if (!isOtherAI || !load)
{
@@ -2227,7 +2227,7 @@ void InstanceMap::PermBindAllPlayers()
{
WorldPacket data(SMSG_INSTANCE_SAVE_CREATED, 4);
data << uint32(0);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
sInstanceSaveMgr->PlayerBindToInstance(player->GetGUID(), save, true, player);
}
diff --git a/src/server/game/Maps/MapMgr.cpp b/src/server/game/Maps/MapMgr.cpp
index e113c93d27..dd8614a654 100644
--- a/src/server/game/Maps/MapMgr.cpp
+++ b/src/server/game/Maps/MapMgr.cpp
@@ -205,7 +205,7 @@ Map::EnterState MapMgr::PlayerCannotEnter(uint32 mapid, Player* player, bool log
if (!corpseMap)
{
WorldPacket data(SMSG_CORPSE_NOT_IN_INSTANCE, 0);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
LOG_DEBUG("maps", "MAP: Player '{}' does not have a corpse in instance '{}' and cannot enter.", player->GetName(), mapName);
return Map::CANNOT_ENTER_CORPSE_IN_DIFFERENT_INSTANCE;
}
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp
index c229abdbc4..d33de51872 100644
--- a/src/server/game/Movement/MotionMaster.cpp
+++ b/src/server/game/Movement/MotionMaster.cpp
@@ -32,6 +32,7 @@
#include "TargetedMovementGenerator.h"
#include "WaypointMgr.h"
#include "WaypointMovementGenerator.h"
+#include "SmartScriptMgr.h"
inline MovementGenerator* GetIdleMovementGenerator()
{
@@ -503,19 +504,35 @@ void MotionMaster::MoveSplinePath(Movement::PointsArray* path, ForcedMovement fo
}
}
-void MotionMaster::MoveSplinePath(uint32 path_id, ForcedMovement forcedMovement)
+void MotionMaster::MovePath(uint32 path_id, ForcedMovement forcedMovement, PathSource pathSource)
{
- // convert the path id to a Movement::PointsArray*
- Movement::PointsArray* points = new Movement::PointsArray();
- WaypointPath const* path = sWaypointMgr->GetPath(path_id);
- for (uint8 i = 0; i < path->size(); ++i)
+ WaypointPath const* path;
+ switch (pathSource)
{
- WaypointData const* node = path->at(i);
- points->push_back(G3D::Vector3(node->x, node->y, node->z));
+ default:
+ case PathSource::WAYPOINT_MGR:
+ path = sWaypointMgr->GetPath(path_id);
+ break;
+ case PathSource::SMART_WAYPOINT_MGR:
+ path = sSmartWaypointMgr->GetPath(path_id);
+ break;
+ }
+
+ if (path == nullptr)
+ {
+ LOG_ERROR("sql.sql", "WaypointMovementGenerator::LoadPath: creature {} ({}) doesn't have waypoint path id: {} pathSource: {}",
+ _owner->GetName(), _owner->GetGUID().ToString(), path_id, pathSource);
+ return;
+ }
+
+ Movement::PointsArray points;
+ for (auto& point : *path)
+ {
+ points.push_back(G3D::Vector3(point.second.x, point.second.y, point.second.z));
}
// pass the new PointsArray* to the appropriate MoveSplinePath function
- MoveSplinePath(points, forcedMovement);
+ MoveSplinePath(&points, forcedMovement);
}
/**
@@ -881,7 +898,7 @@ void MotionMaster::Mutate(MovementGenerator* m, MovementSlot slot)
/**
* @brief Move the unit following a specific path. Doesn't work with UNIT_FLAG_DISABLE_MOVE
*/
-void MotionMaster::MovePath(uint32 path_id, bool repeatable)
+void MotionMaster::MoveWaypoint(uint32 path_id, bool repeatable, PathSource pathSource)
{
if (!path_id)
return;
@@ -889,20 +906,7 @@ void MotionMaster::MovePath(uint32 path_id, bool repeatable)
if (_owner->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE))
return;
- //We set waypoint movement as new default movement generator
- // clear ALL movement generators (including default)
- /*while (!empty())
- {
- MovementGenerator *curr = top();
- curr->Finalize(*_owner);
- pop();
- if (!isStatic(curr))
- delete curr;
- }*/
-
- //_owner->IsPlayer() ?
- //Mutate(new WaypointMovementGenerator<Player>(path_id, repeatable)):
- Mutate(new WaypointMovementGenerator<Creature>(path_id, repeatable), MOTION_SLOT_IDLE);
+ Mutate(new WaypointMovementGenerator<Creature>(path_id, pathSource, repeatable), MOTION_SLOT_IDLE);
LOG_DEBUG("movement.motionmaster", "{} ({}) start moving over path(Id:{}, repeatable: {})",
_owner->IsPlayer() ? "Player" : "Creature", _owner->GetGUID().ToString(), path_id, repeatable ? "YES" : "NO");
diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h
index bc4cc996b4..319da8d579 100644
--- a/src/server/game/Movement/MotionMaster.h
+++ b/src/server/game/Movement/MotionMaster.h
@@ -89,6 +89,12 @@ enum ForcedMovement
FORCED_MOVEMENT_MAX
};
+enum class PathSource
+{
+ WAYPOINT_MGR = 0,
+ SMART_WAYPOINT_MGR = 1,
+};
+
struct ChaseRange
{
ChaseRange(float range);
@@ -223,7 +229,7 @@ public:
{ MovePoint(id, pos.m_positionX, pos.m_positionY, pos.m_positionZ, forcedMovement, speed, pos.GetOrientation(), generatePath, forceDestination, MOTION_SLOT_ACTIVE); }
void MovePoint(uint32 id, float x, float y, float z, ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE, float speed = 0.f, float orientation = 0.0f, bool generatePath = true, bool forceDestination = true, MovementSlot slot = MOTION_SLOT_ACTIVE);
void MoveSplinePath(Movement::PointsArray* path, ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE);
- void MoveSplinePath(uint32 path_id, ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE);
+ void MovePath(uint32 path_id, ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE, PathSource pathSource = PathSource::WAYPOINT_MGR);
// These two movement types should only be used with creatures having landing/takeoff animations
void MoveLand(uint32 id, Position const& pos, float speed = 0.0f);
@@ -244,7 +250,7 @@ public:
void MoveSeekAssistanceDistract(uint32 timer);
void MoveTaxiFlight(uint32 path, uint32 pathnode);
void MoveDistract(uint32 time);
- void MovePath(uint32 path_id, bool repeatable);
+ void MoveWaypoint(uint32 path_id, bool repeatable, PathSource pathSource = PathSource::WAYPOINT_MGR);
void MoveRotate(uint32 time, RotateDirection direction);
[[nodiscard]] MovementGeneratorType GetCurrentMovementGeneratorType() const;
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
index ce93e485bc..a894c8d068 100644
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
@@ -28,13 +28,26 @@
#include "Spell.h"
#include "Transport.h"
#include "World.h"
+#include "SmartScriptMgr.h"
void WaypointMovementGenerator<Creature>::LoadPath(Creature* creature)
{
- if (!path_id)
- path_id = creature->GetWaypointPath();
+ switch (i_pathSource)
+ {
+ case PathSource::WAYPOINT_MGR:
+ {
+ if (!path_id)
+ path_id = creature->GetWaypointPath();
- i_path = sWaypointMgr->GetPath(path_id);
+ i_path = sWaypointMgr->GetPath(path_id);
+ break;
+ }
+ case PathSource::SMART_WAYPOINT_MGR:
+ {
+ i_path = sSmartWaypointMgr->GetPath(path_id);
+ break;
+ }
+ }
if (!i_path)
{
@@ -44,6 +57,8 @@ void WaypointMovementGenerator<Creature>::LoadPath(Creature* creature)
return;
}
+ i_currentNode = i_path->begin()->first;
+
StartMoveNow(creature);
}
@@ -78,22 +93,24 @@ void WaypointMovementGenerator<Creature>::OnArrived(Creature* creature)
creature->ClearUnitState(UNIT_STATE_ROAMING_MOVE);
m_isArrivalDone = true;
- if (i_path->at(i_currentNode)->event_id && urand(0, 99) < i_path->at(i_currentNode)->event_chance)
+ auto currentNodeItr = i_path->find(i_currentNode);
+
+ if (currentNodeItr->second.event_id && urand(0, 99) < currentNodeItr->second.event_chance)
{
LOG_DEBUG("maps.script", "Creature movement start script {} at point {} for {}.",
- i_path->at(i_currentNode)->event_id, i_currentNode, creature->GetGUID().ToString());
+ currentNodeItr->second.event_id, i_currentNode, creature->GetGUID().ToString());
creature->ClearUnitState(UNIT_STATE_ROAMING_MOVE);
- creature->GetMap()->ScriptsStart(sWaypointScripts, i_path->at(i_currentNode)->event_id, creature, nullptr);
+ creature->GetMap()->ScriptsStart(sWaypointScripts, currentNodeItr->second.event_id, creature, nullptr);
}
// Inform script
MovementInform(creature);
creature->UpdateWaypointID(i_currentNode);
- if (i_path->at(i_currentNode)->delay)
+ if (currentNodeItr->second.delay)
{
creature->ClearUnitState(UNIT_STATE_ROAMING_MOVE);
- Stop(i_path->at(i_currentNode)->delay);
+ Stop(currentNodeItr->second.delay);
}
}
@@ -113,12 +130,11 @@ bool WaypointMovementGenerator<Creature>::StartMove(Creature* creature)
if (m_isArrivalDone)
{
- // Xinef: not true... update this at every waypoint!
- //if ((i_currentNode == i_path->size() - 1) && !repeating) // If that's our last waypoint
{
- float x = i_path->at(i_currentNode)->x;
- float y = i_path->at(i_currentNode)->y;
- float z = i_path->at(i_currentNode)->z;
+ auto currentNodeItr = i_path->find(i_currentNode);
+ float x = currentNodeItr->second.x;
+ float y = currentNodeItr->second.y;
+ float z = currentNodeItr->second.z;
float o = creature->GetOrientation();
if (!transportPath)
@@ -139,14 +155,17 @@ bool WaypointMovementGenerator<Creature>::StartMove(Creature* creature)
}
// Xinef: moved the upper IF here
- if ((i_currentNode == i_path->size() - 1) && !repeating) // If that's our last waypoint
+ uint32 lastPoint = i_path->rbegin()->first;
+ if ((i_currentNode == lastPoint) && !repeating) // If that's our last waypoint
{
creature->AI()->PathEndReached(path_id);
creature->GetMotionMaster()->Initialize();
return false;
}
- i_currentNode = (i_currentNode + 1) % i_path->size();
+ ++i_currentNode;
+ if (lastPoint < i_currentNode)
+ i_currentNode = i_path->begin()->first;
}
// xinef: do not initialize motion if we got stunned in movementinform
@@ -155,13 +174,14 @@ bool WaypointMovementGenerator<Creature>::StartMove(Creature* creature)
return true;
}
- WaypointData const* node = i_path->at(i_currentNode);
+ auto currentNodeItr = i_path->find(i_currentNode);
+ WaypointData const& node = currentNodeItr->second;
m_isArrivalDone = false;
creature->AddUnitState(UNIT_STATE_ROAMING_MOVE);
- Movement::Location formationDest(node->x, node->y, node->z, 0.0f);
+ Movement::Location formationDest(node.x, node.y, node.z, 0.0f);
Movement::MoveSplineInit init(creature);
//! If creature is on transport, we assume waypoints set in DB are already transport offsets
@@ -172,16 +192,16 @@ bool WaypointMovementGenerator<Creature>::StartMove(Creature* creature)
trans->CalculatePassengerPosition(formationDest.x, formationDest.y, formationDest.z, &formationDest.orientation);
}
- float z = node->z;
- creature->UpdateAllowedPositionZ(node->x, node->y, z);
+ float z = node.z;
+ creature->UpdateAllowedPositionZ(node.x, node.y, z);
//! Do not use formationDest here, MoveTo requires transport offsets due to DisableTransportPathTransformations() call
//! but formationDest contains global coordinates
- init.MoveTo(node->x, node->y, z, true, true);
+ init.MoveTo(node.x, node.y, z, true, true);
- if (node->orientation.has_value() && node->delay > 0)
- init.SetFacing(*node->orientation);
+ if (node.orientation.has_value() && node.delay > 0)
+ init.SetFacing(*node.orientation);
- switch (node->move_type)
+ switch (node.move_type)
{
case WAYPOINT_MOVE_TYPE_LAND:
init.SetAnimation(Movement::ToGround);
@@ -203,7 +223,7 @@ bool WaypointMovementGenerator<Creature>::StartMove(Creature* creature)
//Call for creature group update
if (creature->GetFormation() && creature->GetFormation()->GetLeader() == creature)
- creature->GetFormation()->LeaderMoveTo(formationDest.x, formationDest.y, formationDest.z, node->move_type);
+ creature->GetFormation()->LeaderMoveTo(formationDest.x, formationDest.y, formationDest.z, node.move_type);
return true;
}
@@ -239,13 +259,7 @@ bool WaypointMovementGenerator<Creature>::DoUpdate(Creature* creature, uint32 di
}
else
{
- bool finished = creature->movespline->Finalized();
- // xinef: code to detect pre-empetively if we should start movement to next waypoint
- // xinef: do not start pre-empetive movement if current node has delay or we are ending waypoint movement
- //if (!finished && !i_path->at(i_currentNode)->delay && ((i_currentNode != i_path->size() - 1) || repeating))
- // finished = (creature->movespline->_Spline().length(creature->movespline->_currentSplineIdx() + 1) - creature->movespline->timePassed()) < 200;
-
- if (finished)
+ if (creature->movespline->Finalized())
{
OnArrived(creature);
return StartMove(creature);
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
index 3161894a2b..babc16cb48 100644
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
@@ -54,8 +54,8 @@ class WaypointMovementGenerator<Creature> : public MovementGeneratorMedium< Crea
public PathMovementBase<Creature, WaypointPath const*>
{
public:
- WaypointMovementGenerator(uint32 _path_id = 0, bool _repeating = true, bool _stalled = false)
- : PathMovementBase((WaypointPath const*)nullptr), i_nextMoveTime(0), m_isArrivalDone(false), path_id(_path_id), repeating(_repeating), stalled(_stalled) {}
+ WaypointMovementGenerator(uint32 _path_id = 0, PathSource pathSource = PathSource::WAYPOINT_MGR, bool _repeating = true, bool _stalled = false)
+ : PathMovementBase((WaypointPath const*)nullptr), i_nextMoveTime(0), m_isArrivalDone(false), path_id(_path_id), repeating(_repeating), stalled(_stalled), i_pathSource(pathSource) {}
~WaypointMovementGenerator() { i_path = nullptr; }
void DoInitialize(Creature*);
void DoFinalize(Creature*);
@@ -96,6 +96,7 @@ private:
uint32 path_id;
bool repeating;
bool stalled;
+ PathSource i_pathSource;
};
/** FlightPathMovementGenerator generates movement of the player for the paths
diff --git a/src/server/game/Movement/Spline/MoveSpline.h b/src/server/game/Movement/Spline/MoveSpline.h
index 5ebe5f5aa5..eaba1d53f8 100644
--- a/src/server/game/Movement/Spline/MoveSpline.h
+++ b/src/server/game/Movement/Spline/MoveSpline.h
@@ -117,6 +117,7 @@ namespace Movement
[[nodiscard]] bool isCyclic() const { return splineflags.cyclic; }
[[nodiscard]] bool isFalling() const { return splineflags.falling; }
[[nodiscard]] bool isWalking() const { return splineflags.walkmode; }
+ [[nodiscard]] bool isBoarding() const { return splineflags.transportEnter || splineflags.transportExit; }
[[nodiscard]] Vector3 FinalDestination() const { return Initialized() ? spline.getPoint(spline.last()) : Vector3(); }
[[nodiscard]] Vector3 CurrentDestination() const { return Initialized() ? spline.getPoint(point_Idx + 1) : Vector3(); }
[[nodiscard]] int32 currentPathIdx() const;
diff --git a/src/server/game/Movement/Waypoints/WaypointMgr.cpp b/src/server/game/Movement/Waypoints/WaypointMgr.cpp
index 7a2596fbf7..076fb39d54 100644
--- a/src/server/game/Movement/Waypoints/WaypointMgr.cpp
+++ b/src/server/game/Movement/Waypoints/WaypointMgr.cpp
@@ -30,9 +30,6 @@ WaypointMgr::~WaypointMgr()
{
for (WaypointPathContainer::iterator itr = _waypointStore.begin(); itr != _waypointStore.end(); ++itr)
{
- for (WaypointPath::const_iterator it = itr->second.begin(); it != itr->second.end(); ++it)
- delete *it;
-
itr->second.clear();
}
@@ -64,7 +61,7 @@ void WaypointMgr::Load()
do
{
Field* fields = result->Fetch();
- WaypointData* wp = new WaypointData();
+ WaypointData data;
uint32 pathId = fields[0].Get<uint32>();
WaypointPath& path = _waypointStore[pathId];
@@ -79,28 +76,40 @@ void WaypointMgr::Load()
Acore::NormalizeMapCoord(x);
Acore::NormalizeMapCoord(y);
- wp->id = fields[1].Get<uint32>();
- wp->x = x;
- wp->y = y;
- wp->z = z;
- wp->orientation = o;
- wp->move_type = fields[6].Get<uint32>();
+ data.id = fields[1].Get<uint32>();
+ data.x = x;
+ data.y = y;
+ data.z = z;
+ data.orientation = o;
+ data.move_type = fields[6].Get<uint32>();
- if (wp->move_type >= WAYPOINT_MOVE_TYPE_MAX)
+ if (data.move_type >= WAYPOINT_MOVE_TYPE_MAX)
{
//LOG_ERROR("sql.sql", "Waypoint {} in waypoint_data has invalid move_type, ignoring", wp->id);
- delete wp;
continue;
}
- wp->delay = fields[7].Get<uint32>();
- wp->event_id = fields[8].Get<uint32>();
- wp->event_chance = fields[9].Get<int16>();
+ data.delay = fields[7].Get<uint32>();
+ data.event_id = fields[8].Get<uint32>();
+ data.event_chance = fields[9].Get<int16>();
- path.push_back(wp);
+ path.emplace(data.id, data);
++count;
} while (result->NextRow());
+ for (auto itr = _waypointStore.begin(); itr != _waypointStore.end(); )
+ {
+ uint32 first = itr->second.begin()->first;
+ uint32 last = itr->second.rbegin()->first;
+ if (last - first + 1 != itr->second.size())
+ {
+ LOG_ERROR("sql.sql", "Waypoint {} in waypoint_data has non-contiguous pointids, skipping", itr->first);
+ itr = _waypointStore.erase(itr);
+ }
+ else
+ ++itr;
+ }
+
LOG_INFO("server.loading", ">> Loaded {} waypoints in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
LOG_INFO("server.loading", " ");
}
@@ -110,9 +119,6 @@ void WaypointMgr::ReloadPath(uint32 id)
WaypointPathContainer::iterator itr = _waypointStore.find(id);
if (itr != _waypointStore.end())
{
- for (WaypointPath::const_iterator it = itr->second.begin(); it != itr->second.end(); ++it)
- delete *it;
-
_waypointStore.erase(itr);
}
@@ -130,7 +136,7 @@ void WaypointMgr::ReloadPath(uint32 id)
do
{
Field* fields = result->Fetch();
- WaypointData* wp = new WaypointData();
+ WaypointData data;
float x = fields[1].Get<float>();
float y = fields[2].Get<float>();
@@ -142,24 +148,23 @@ void WaypointMgr::ReloadPath(uint32 id)
Acore::NormalizeMapCoord(x);
Acore::NormalizeMapCoord(y);
- wp->id = fields[0].Get<uint32>();
- wp->x = x;
- wp->y = y;
- wp->z = z;
- wp->orientation = o;
- wp->move_type = fields[5].Get<uint32>();
+ data.id = fields[0].Get<uint32>();
+ data.x = x;
+ data.y = y;
+ data.z = z;
+ data.orientation = o;
+ data.move_type = fields[5].Get<uint32>();
- if (wp->move_type >= WAYPOINT_MOVE_TYPE_MAX)
+ if (data.move_type >= WAYPOINT_MOVE_TYPE_MAX)
{
//LOG_ERROR("sql.sql", "Waypoint {} in waypoint_data has invalid move_type, ignoring", wp->id);
- delete wp;
continue;
}
- wp->delay = fields[6].Get<uint32>();
- wp->event_id = fields[7].Get<uint32>();
- wp->event_chance = fields[8].Get<uint8>();
+ data.delay = fields[6].Get<uint32>();
+ data.event_id = fields[7].Get<uint32>();
+ data.event_chance = fields[8].Get<uint8>();
- path.push_back(wp);
+ path.emplace(data.id, data);
} while (result->NextRow());
}
diff --git a/src/server/game/Movement/Waypoints/WaypointMgr.h b/src/server/game/Movement/Waypoints/WaypointMgr.h
index ea588a28c5..6e97ab3449 100644
--- a/src/server/game/Movement/Waypoints/WaypointMgr.h
+++ b/src/server/game/Movement/Waypoints/WaypointMgr.h
@@ -22,6 +22,7 @@
#include <optional>
#include <unordered_map>
#include <vector>
+#include <map>
enum WaypointMoveType
{
@@ -39,12 +40,12 @@ struct WaypointData
float x, y, z;
std::optional<float> orientation;
uint32 delay;
- uint32 event_id;
- uint32 move_type;
- uint8 event_chance;
+ uint32 event_id = 0;
+ uint32 move_type = 0;
+ uint8 event_chance = 0;
};
-typedef std::vector<WaypointData*> WaypointPath;
+typedef std::map<uint32, WaypointData> WaypointPath;
typedef std::unordered_map<uint32, WaypointPath> WaypointPathContainer;
class WaypointMgr
diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp
index 330d99c3f6..ae7e476bb9 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp
+++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp
@@ -635,7 +635,7 @@ void OutdoorPvP::BroadcastPacket(WorldPacket& data) const
for (auto const& playerSet : _players)
for (auto itr : playerSet)
if (Player* const player = ObjectAccessor::FindPlayer(itr))
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
void OutdoorPvP::RegisterZone(uint32 zoneId)
diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp
index 8f9184da9d..70ef8e4fdf 100644
--- a/src/server/game/Scripting/MapScripts.cpp
+++ b/src/server/game/Scripting/MapScripts.cpp
@@ -767,7 +767,7 @@ void Map::ScriptsProcess()
if (!sWaypointMgr->GetPath(step.script->LoadPath.PathID))
LOG_ERROR("maps.script", "{} source object has an invalid path ({}), skipping.", step.script->GetDebugInfo(), step.script->LoadPath.PathID);
else
- unit->GetMotionMaster()->MovePath(step.script->LoadPath.PathID, step.script->LoadPath.IsRepeatable);
+ unit->GetMotionMaster()->MoveWaypoint(step.script->LoadPath.PathID, step.script->LoadPath.IsRepeatable);
}
break;
@@ -888,7 +888,7 @@ void Map::ScriptsProcess()
cSource->GetMotionMaster()->MoveRandom((float)step.script->Movement.MovementDistance);
break;
case WAYPOINT_MOTION_TYPE:
- cSource->GetMotionMaster()->MovePath(step.script->Movement.Path, false);
+ cSource->GetMotionMaster()->MoveWaypoint(step.script->Movement.Path, false);
break;
}
}
diff --git a/src/server/game/Scripting/ScriptDefines/ElunaScript.cpp b/src/server/game/Scripting/ScriptDefines/ALEScript.cpp
index fbaa7af765..5597a2be06 100644
--- a/src/server/game/Scripting/ScriptDefines/ElunaScript.cpp
+++ b/src/server/game/Scripting/ScriptDefines/ALEScript.cpp
@@ -15,12 +15,12 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "ElunaScript.h"
+#include "ALEScript.h"
#include "ScriptMgr.h"
-ElunaScript::ElunaScript(const char* name) : ScriptObject(name)
+ALEScript::ALEScript(const char* name) : ScriptObject(name)
{
- ScriptRegistry<ElunaScript>::AddScript(this);
+ ScriptRegistry<ALEScript>::AddScript(this);
}
-template class AC_GAME_API ScriptRegistry<ElunaScript>;
+template class AC_GAME_API ScriptRegistry<ALEScript>;
diff --git a/src/server/game/Scripting/ScriptDefines/ElunaScript.h b/src/server/game/Scripting/ScriptDefines/ALEScript.h
index da028a7baf..ce1f4a0f40 100644
--- a/src/server/game/Scripting/ScriptDefines/ElunaScript.h
+++ b/src/server/game/Scripting/ScriptDefines/ALEScript.h
@@ -15,15 +15,15 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef SCRIPT_OBJECT_ELUNA_SCRIPT_H_
-#define SCRIPT_OBJECT_ELUNA_SCRIPT_H_
+#ifndef SCRIPT_OBJECT_ALE_SCRIPT_H_
+#define SCRIPT_OBJECT_ALE_SCRIPT_H_
#include "ScriptObject.h"
-class ElunaScript : public ScriptObject
+class ALEScript : public ScriptObject
{
protected:
- ElunaScript(const char* name);
+ ALEScript(const char* name);
public:
/**
diff --git a/src/server/game/Scripting/ScriptDefines/AllScriptsObjects.h b/src/server/game/Scripting/ScriptDefines/AllScriptsObjects.h
index 9196c32845..085bde5732 100644
--- a/src/server/game/Scripting/ScriptDefines/AllScriptsObjects.h
+++ b/src/server/game/Scripting/ScriptDefines/AllScriptsObjects.h
@@ -39,7 +39,7 @@
#include "CreatureScript.h"
#include "DatabaseScript.h"
#include "DynamicObjectScript.h"
-#include "ElunaScript.h"
+#include "ALEScript.h"
#include "FormulaScript.h"
#include "GameEventScript.h"
#include "GameObjectScript.h"
diff --git a/src/server/game/Scripting/ScriptDefines/AreaTriggerScript.cpp b/src/server/game/Scripting/ScriptDefines/AreaTriggerScript.cpp
index 6d3429606f..cb49812abc 100644
--- a/src/server/game/Scripting/ScriptDefines/AreaTriggerScript.cpp
+++ b/src/server/game/Scripting/ScriptDefines/AreaTriggerScript.cpp
@@ -16,7 +16,7 @@
*/
#include "AreaTriggerScript.h"
-#include "ElunaScript.h"
+#include "ALEScript.h"
#include "Player.h"
#include "ScriptMgr.h"
#include "ScriptMgrMacros.h"
@@ -26,7 +26,7 @@ bool ScriptMgr::OnAreaTrigger(Player* player, AreaTrigger const* trigger)
ASSERT(player);
ASSERT(trigger);
- auto ret = IsValidBoolScript<ElunaScript>([&](ElunaScript* script)
+ auto ret = IsValidBoolScript<ALEScript>([&](ALEScript* script)
{
return script->CanAreaTrigger(player, trigger);
});
diff --git a/src/server/game/Scripting/ScriptDefines/WeatherScript.cpp b/src/server/game/Scripting/ScriptDefines/WeatherScript.cpp
index 5232ae0ca4..e1929daabe 100644
--- a/src/server/game/Scripting/ScriptDefines/WeatherScript.cpp
+++ b/src/server/game/Scripting/ScriptDefines/WeatherScript.cpp
@@ -16,7 +16,7 @@
*/
#include "WeatherScript.h"
-#include "ElunaScript.h"
+#include "ALEScript.h"
#include "ScriptMgr.h"
#include "ScriptMgrMacros.h"
@@ -24,7 +24,7 @@ void ScriptMgr::OnWeatherChange(Weather* weather, WeatherState state, float grad
{
ASSERT(weather);
- ExecuteScript<ElunaScript>([&](ElunaScript* script)
+ ExecuteScript<ALEScript>([&](ALEScript* script)
{
script->OnWeatherChange(weather, state, grade);
});
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp
index 3a78145cab..2fc4b86b50 100644
--- a/src/server/game/Scripting/ScriptMgr.cpp
+++ b/src/server/game/Scripting/ScriptMgr.cpp
@@ -127,7 +127,7 @@ void ScriptMgr::Unload()
SCR_CLEAR<CreatureScript>();
SCR_CLEAR<DatabaseScript>();
SCR_CLEAR<DynamicObjectScript>();
- SCR_CLEAR<ElunaScript>();
+ SCR_CLEAR<ALEScript>();
SCR_CLEAR<FormulaScript>();
SCR_CLEAR<GameEventScript>();
SCR_CLEAR<GameObjectScript>();
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index cbb576580f..84cbe96ede 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -374,7 +374,7 @@ void OpcodeTable::Initialize()
/*0x0F3*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_NORMAL_FALL, STATUS_NEVER);
/*0x0F4*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_HOVER, STATUS_NEVER);
/*0x0F5*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_HOVER, STATUS_NEVER);
- /*0x0F6*/ DEFINE_HANDLER(CMSG_MOVE_HOVER_ACK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveFlagChangeOpcode );
+ /*0x0F6*/ DEFINE_HANDLER(CMSG_MOVE_HOVER_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveFlagChangeOpcode );
/*0x0F7*/ DEFINE_SERVER_OPCODE_HANDLER(MSG_MOVE_HOVER, STATUS_NEVER);
/*0x0F8*/ DEFINE_HANDLER(CMSG_TRIGGER_CINEMATIC_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
/*0x0F9*/ DEFINE_HANDLER(CMSG_OPENING_CINEMATIC, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -1245,7 +1245,7 @@ void OpcodeTable::Initialize()
/*0x45A*/ DEFINE_HANDLER(MSG_MOVE_SET_PITCH_RATE_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
/*0x45B*/ DEFINE_HANDLER(MSG_MOVE_SET_PITCH_RATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
/*0x45C*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_PITCH_RATE_CHANGE, STATUS_NEVER);
- /*0x45D*/ DEFINE_HANDLER(CMSG_FORCE_PITCH_RATE_CHANGE_ACK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ /*0x45D*/ DEFINE_HANDLER(CMSG_FORCE_PITCH_RATE_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck );
/*0x45E*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPLINE_SET_PITCH_RATE, STATUS_NEVER);
/*0x45F*/ DEFINE_HANDLER(CMSG_CALENDAR_EVENT_INVITE_NOTES, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
/*0x460*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_CALENDAR_EVENT_INVITE_NOTES, STATUS_NEVER);
@@ -1359,9 +1359,9 @@ void OpcodeTable::Initialize()
/*0x4CC*/ DEFINE_HANDLER(CMSG_END_BATTLEFIELD_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
/*0x4CD*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MULTIPLE_PACKETS, STATUS_NEVER);
/*0x4CE*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_GRAVITY_DISABLE, STATUS_NEVER);
- /*0x4CF*/ DEFINE_HANDLER(CMSG_MOVE_GRAVITY_DISABLE_ACK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ /*0x4CF*/ DEFINE_HANDLER(CMSG_MOVE_GRAVITY_DISABLE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveFlagChangeOpcode );
/*0x4D0*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_GRAVITY_ENABLE, STATUS_NEVER);
- /*0x4D1*/ DEFINE_HANDLER(CMSG_MOVE_GRAVITY_ENABLE_ACK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ /*0x4D1*/ DEFINE_HANDLER(CMSG_MOVE_GRAVITY_ENABLE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveFlagChangeOpcode );
/*0x4D2*/ DEFINE_SERVER_OPCODE_HANDLER(MSG_MOVE_GRAVITY_CHNG, STATUS_NEVER);
/*0x4D3*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPLINE_MOVE_GRAVITY_DISABLE, STATUS_NEVER);
/*0x4D4*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPLINE_MOVE_GRAVITY_ENABLE, STATUS_NEVER);
@@ -1431,7 +1431,7 @@ void OpcodeTable::Initialize()
/*0x514*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_ALL_COMBAT_LOG, STATUS_NEVER);
/*0x515*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_LFG_DUNGEON_FINDER, STATUS_NEVER);
/*0x516*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_COLLISION_HGT, STATUS_NEVER);
- /*0x517*/ DEFINE_HANDLER(CMSG_MOVE_SET_COLLISION_HGT_ACK, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ /*0x517*/ DEFINE_HANDLER(CMSG_MOVE_SET_COLLISION_HGT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck );
/*0x518*/ DEFINE_HANDLER(MSG_MOVE_SET_COLLISION_HGT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
/*0x519*/ DEFINE_HANDLER(CMSG_CLEAR_RANDOM_BG_WIN_TIME, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
/*0x51A*/ DEFINE_HANDLER(CMSG_CLEAR_HOLIDAY_BG_WIN_TIME, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index eb470bd9e3..91d1f92835 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -3002,12 +3002,12 @@ void AuraEffect::HandleAuraModDisarm(AuraApplication const* aurApp, uint8 mode,
{
if (Item* pItem = target->ToPlayer()->GetItemByPos(INVENTORY_SLOT_BAG_0, slot))
{
- uint8 attacktype = Player::GetAttackBySlot(slot);
+ WeaponAttackType attacktype = Player::GetAttackBySlot(slot);
if (attacktype < MAX_ATTACK)
{
target->ToPlayer()->_ApplyWeaponDamage(slot, pItem->GetTemplate(), nullptr, !apply);
- target->ToPlayer()->_ApplyWeaponDependentAuraMods(pItem, WeaponAttackType(attacktype), !apply);
+ target->ToPlayer()->_ApplyWeaponDependentAuraMods(pItem, attacktype, !apply);
}
}
}
@@ -6177,7 +6177,7 @@ void AuraEffect::HandleAuraSetVehicle(AuraApplication const* aurApp, uint8 mode,
if (apply)
{
data.Initialize(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, 0);
- target->ToPlayer()->GetSession()->SendPacket(&data);
+ target->ToPlayer()->SendDirectMessage(&data);
}
}
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 644cce3b65..5c7407633a 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -4612,7 +4612,7 @@ void Spell::SendCastResult(Player* caster, SpellInfo const* spellInfo, uint8 cas
WorldPacket data(SMSG_CAST_FAILED, 1 + 4 + 1);
WriteCastResultInfo(data, caster, spellInfo, castCount, result, customError);
- caster->GetSession()->SendPacket(&data);
+ caster->SendDirectMessage(&data);
}
void Spell::SendCastResult(SpellCastResult result)
@@ -4649,7 +4649,7 @@ void Spell::SendPetCastResult(SpellCastResult result)
WorldPacket data(SMSG_PET_CAST_FAILED, 1 + 4 + 1);
WriteCastResultInfo(data, player, m_spellInfo, m_cast_count, result, m_customError);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
void Spell::SendSpellStart()
@@ -5184,7 +5184,7 @@ void Spell::SendResurrectRequest(Player* target)
// override delay sent with SMSG_CORPSE_RECLAIM_DELAY, set instant resurrection for spells with this attribute
if (m_spellInfo->HasAttribute(SPELL_ATTR3_NO_RES_TIMER))
data << uint32(0);
- target->GetSession()->SendPacket(&data);
+ target->SendDirectMessage(&data);
}
void Spell::TakeCastItem()
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 7c0cd6c45e..7e44054907 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -4162,8 +4162,8 @@ void Spell::EffectDuel(SpellEffIndex effIndex)
WorldPacket data(SMSG_DUEL_REQUESTED, 8 + 8);
data << pGameObj->GetGUID();
data << caster->GetGUID();
- caster->GetSession()->SendPacket(&data);
- target->GetSession()->SendPacket(&data);
+ caster->SendDirectMessage(&data);
+ target->SendDirectMessage(&data);
// create duel-info
bool isMounted = (GetSpellInfo()->Id == 62875);
@@ -4245,7 +4245,7 @@ void Spell::EffectSummonPlayer(SpellEffIndex /*effIndex*/)
data << m_caster->GetGUID(); // summoner guid
data << uint32(m_caster->GetZoneId()); // summoner zone
data << uint32(MAX_PLAYER_SUMMON_DELAY * IN_MILLISECONDS); // auto decline after msecs
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
void Spell::EffectActivateObject(SpellEffIndex effIndex)
@@ -6345,5 +6345,5 @@ void Spell::EffectSummonRaFFriend(SpellEffIndex /*effIndex*/)
data << m_caster->GetGUID();
data << uint32(m_caster->GetZoneId());
data << uint32(MAX_PLAYER_SUMMON_DELAY * IN_MILLISECONDS); // auto decline after msecs
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index 64a25a2b4a..9c16e15d22 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -1824,7 +1824,7 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* ta
{
if (Player const* player = unitTarget->ToPlayer())
{
- if (player->GetWeaponForAttack(WeaponAttackType(BASE_ATTACK + i), true))
+ if (player->GetWeaponForAttack(WeaponAttackType(i), true))
{
valid = true;
break;
diff --git a/src/server/game/Spells/SpellInfoCorrections.cpp b/src/server/game/Spells/SpellInfoCorrections.cpp
index 6712f11091..77057e7988 100644
--- a/src/server/game/Spells/SpellInfoCorrections.cpp
+++ b/src/server/game/Spells/SpellInfoCorrections.cpp
@@ -5157,6 +5157,12 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->AttributesEx5 |= SPELL_ATTR5_LIMIT_N;
});
+ // Acid Splash
+ ApplySpellFix({ 52446, 59363 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
+ });
+
for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i)
{
SpellInfo* spellInfo = mSpellInfoMap[i];
diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp
index 0a69981cda..4dea787d86 100644
--- a/src/server/game/Texts/CreatureTextMgr.cpp
+++ b/src/server/game/Texts/CreatureTextMgr.cpp
@@ -309,7 +309,7 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket const*
if (!target || !target->IsPlayer())
return;
- target->ToPlayer()->GetSession()->SendPacket(data);
+ target->ToPlayer()->SendDirectMessage(data);
return;
}
break;
@@ -326,7 +326,7 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket const*
Map::PlayerList const& players = source->GetMap()->GetPlayers();
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
if (itr->GetSource()->GetAreaId() == areaId && (teamId == TEAM_NEUTRAL || itr->GetSource()->GetTeamId() == teamId) && (!gmOnly || itr->GetSource()->IsGameMaster()))
- itr->GetSource()->GetSession()->SendPacket(data);
+ itr->GetSource()->SendDirectMessage(data);
return;
}
case TEXT_RANGE_ZONE:
@@ -335,7 +335,7 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket const*
Map::PlayerList const& players = source->GetMap()->GetPlayers();
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
if (itr->GetSource()->GetZoneId() == zoneId && (teamId == TEAM_NEUTRAL || itr->GetSource()->GetTeamId() == teamId) && (!gmOnly || itr->GetSource()->IsGameMaster()))
- itr->GetSource()->GetSession()->SendPacket(data);
+ itr->GetSource()->SendDirectMessage(data);
return;
}
case TEXT_RANGE_MAP:
@@ -343,7 +343,7 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket const*
Map::PlayerList const& players = source->GetMap()->GetPlayers();
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
if ((teamId == TEAM_NEUTRAL || itr->GetSource()->GetTeamId() == teamId) && (!gmOnly || itr->GetSource()->IsGameMaster()))
- itr->GetSource()->GetSession()->SendPacket(data);
+ itr->GetSource()->SendDirectMessage(data);
return;
}
case TEXT_RANGE_WORLD:
@@ -352,7 +352,7 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket const*
for (WorldSessionMgr::SessionMap::const_iterator itr = sessionMap.begin(); itr != sessionMap.end(); ++itr)
if (Player* player = itr->second->GetPlayer())
if ((teamId == TEAM_NEUTRAL || player->GetTeamId() == teamId) && (!gmOnly || player->IsGameMaster()))
- player->GetSession()->SendPacket(data);
+ player->SendDirectMessage(data);
return;
}
case TEXT_RANGE_NORMAL:
diff --git a/src/server/game/World/WorldState.cpp b/src/server/game/World/WorldState.cpp
index b22c0de6ab..d715950d24 100644
--- a/src/server/game/World/WorldState.cpp
+++ b/src/server/game/World/WorldState.cpp
@@ -1778,7 +1778,7 @@ bool WorldState::SummonPallid(Map* map, ScourgeInvasionData::CityAttack& zone, c
else
pathID = spawnLoc == 0 ? PATH_STORMWIND_KEEP : PATH_STORMWIND_TRADE_DISTRICT;
- pallid->GetMotionMaster()->MovePath(pathID, false);
+ pallid->GetMotionMaster()->MoveWaypoint(pathID, false);
sWorldState->SetPallidGuid(zone.zoneId, pallid->GetGUID());
}
diff --git a/src/server/scripts/Commands/cs_arena.cpp b/src/server/scripts/Commands/cs_arena.cpp
index 69fa60e562..fe65d83984 100644
--- a/src/server/scripts/Commands/cs_arena.cpp
+++ b/src/server/scripts/Commands/cs_arena.cpp
@@ -51,7 +51,7 @@ public:
{ "rename", HandleArenaRenameCommand, SEC_ADMINISTRATOR, Console::Yes },
{ "captain", HandleArenaCaptainCommand, SEC_ADMINISTRATOR, Console::No },
{ "info", HandleArenaInfoCommand, SEC_GAMEMASTER, Console::Yes },
- { "lookup", HandleArenaLookupCommand, SEC_GAMEMASTER, Console::No },
+ { "lookup", HandleArenaLookupCommand, SEC_GAMEMASTER, Console::Yes },
{ "season", arenaSeasonCommandTable }
};
@@ -209,7 +209,7 @@ public:
handler->PSendSysMessage(LANG_ARENA_INFO_HEADER, arena->GetName(), arena->GetId(), arena->GetRating(), arena->GetType(), arena->GetType());
for (auto const& itr : arena->GetMembers())
- handler->PSendSysMessage(LANG_ARENA_INFO_MEMBERS, itr.Name, itr.Guid.ToString(), itr.PersonalRating, (arena->GetCaptain() == itr.Guid ? "- Captain" : ""));
+ handler->PSendSysMessage(LANG_ARENA_INFO_MEMBERS, itr.Name, itr.Guid.GetCounter(), itr.PersonalRating, (arena->GetCaptain() == itr.Guid ? "Captain" : ""));
return true;
}
@@ -224,17 +224,17 @@ public:
{
if (StringContainsStringI(team->GetName(), needle))
{
- if (handler->GetSession())
- {
- handler->PSendSysMessage(LANG_ARENA_LOOKUP, team->GetName(), team->GetId(), team->GetType(), team->GetType());
- found = true;
- continue;
- }
+ handler->PSendSysMessage(LANG_ARENA_LOOKUP, team->GetName(), team->GetId(), team->GetType(), team->GetType());
+ found = true;
+ continue;
}
}
if (!found)
- handler->PSendSysMessage(LANG_ARENA_ERROR_NAME_NOT_FOUND, std::string(needle));
+ {
+ handler->SendErrorMessage(LANG_ARENA_ERROR_NAME_NOT_FOUND, std::string(needle));
+ return false;
+ }
return true;
}
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index 1113d73a5a..c2891c0d01 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -433,7 +433,7 @@ public:
}
data.hexlike();
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
handler->PSendSysMessage(LANG_COMMAND_OPCODESENT, data.GetOpcode(), unit->GetName());
return true;
}
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 4fb628606c..ca5cff3dd5 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -487,7 +487,7 @@ public:
uint32 queueSlot = 0;
WorldPacket data;
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_IN_PROGRESS, 0, bg->GetStartTime(), bg->GetArenaType(), teamId);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
// Remove from LFG queues
sLFGMgr->LeaveAllLfgQueues(player->GetGUID(), false);
diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp
index 733f88a7a6..20ffbe0e5c 100644
--- a/src/server/scripts/Commands/cs_modify.cpp
+++ b/src/server/scripts/Commands/cs_modify.cpp
@@ -328,7 +328,7 @@ public:
data << uint8(op);
data << uint16(val);
data << uint16(mark ? *mark : 65535);
- target->GetSession()->SendPacket(&data);
+ target->SendDirectMessage(&data);
return true;
}
@@ -417,10 +417,10 @@ public:
if (CheckModifySpeed(handler, target, allSpeed, 0.1f, 50.0f))
{
NotifyModification(handler, target, LANG_YOU_CHANGE_ASPEED, LANG_YOURS_ASPEED_CHANGED, allSpeed);
- target->SetSpeed(MOVE_WALK, allSpeed);
- target->SetSpeed(MOVE_RUN, allSpeed);
- target->SetSpeed(MOVE_SWIM, allSpeed);
- target->SetSpeed(MOVE_FLIGHT, allSpeed);
+ target->SetSpeed(MOVE_WALK, allSpeed, true);
+ target->SetSpeed(MOVE_RUN, allSpeed, true);
+ target->SetSpeed(MOVE_SWIM, allSpeed, true);
+ target->SetSpeed(MOVE_FLIGHT, allSpeed, true);
return true;
}
diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp
index 84d5db8cbc..5e2a6b8711 100644
--- a/src/server/scripts/Commands/cs_ticket.cpp
+++ b/src/server/scripts/Commands/cs_ticket.cpp
@@ -146,7 +146,7 @@ public:
{
WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4);
data << uint32(GMTICKET_RESPONSE_TICKET_DELETED);
- submitter->GetSession()->SendPacket(&data);
+ submitter->SendDirectMessage(&data);
ChatHandler(submitter->GetSession()).SendSysMessage(LANG_TICKET_CLOSED);
}
return true;
@@ -259,7 +259,7 @@ public:
// Force abandon ticket
WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4);
data << uint32(GMTICKET_RESPONSE_TICKET_DELETED);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
return true;
@@ -467,12 +467,18 @@ public:
static bool HandleGMTicketResponseAppendCommand(ChatHandler* handler, uint32 ticketId, Tail res)
{
- return TicketResponseAppend(ticketId, false, handler, res.data());
+ if (res.empty())
+ return false;
+ else
+ return TicketResponseAppend(ticketId, false, handler, res.data());
}
static bool HandleGMTicketResponseAppendLnCommand(ChatHandler* handler, uint32 ticketId, Tail res)
{
- return TicketResponseAppend(ticketId, true, handler, res.data());
+ if (res.empty())
+ return false;
+ else
+ return TicketResponseAppend(ticketId, true, handler, res.data());
}
static bool HandleGMTicketResponseDeleteCommand(ChatHandler* handler, uint32 ticketId)
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
index d95e3b1245..6d4c64c1d5 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
@@ -359,6 +359,7 @@ public:
case 0:
Talk(SAY_TEXT5);
HandleGameObject(DATA_ARENA4, false);
+ me->SetWalk(true);
Start(false);
eventTimer = 0;
break;
@@ -604,7 +605,10 @@ public:
creature->CastSpell(creature, SPELL_DRUNKEN_RAGE, false);
if (npc_escortAI* escortAI = CAST_AI(npc_rocknot::npc_rocknotAI, creature->AI()))
+ {
+ creature->SetWalk(true);
escortAI->Start(false);
+ }
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp
index fc49d131f5..f7bf1b5a55 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp
@@ -128,7 +128,7 @@ public:
events.ScheduleEvent(EVENT_SUMMONED_2, 2s);
break;
case EVENT_SUMMONED_2:
- me->GetMotionMaster()->MovePath(GYTH_PATH_1, false);
+ me->GetMotionMaster()->MoveWaypoint(GYTH_PATH_1, false);
break;
default:
break;
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mor_grayhoof.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mor_grayhoof.cpp
index c416371cd6..72ce757443 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mor_grayhoof.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mor_grayhoof.cpp
@@ -53,7 +53,7 @@ enum Spells
SPELL_FAERIE_DRAGON_FORM = 27546,
SPELL_ARCANE_EXPLOSION = 22271,
SPELL_REFLECTION = 27564,
- SPELL_CHAIN_LIGHTING = 27567,
+ SPELL_CHAIN_LIGHTNING = 27567,
SPELL_SLEEP = 20663 // Guessed
};
@@ -68,7 +68,7 @@ enum Phases
std::vector<uint32> catSpells = { SPELL_SHRED, SPELL_RAKE, SPELL_FEROCIOUS_BITE };
std::vector<uint32> humanSpells = { SPELL_HURRICANE, SPELL_MOONFIRE, SPELL_SHOCK, SPELL_HEALING_TOUCH, SPELL_REJUVENATION };
std::vector<uint32> bearSpells = { SPELL_DEMORALIZING_ROAR, SPELL_MAUL, SPELL_SWIPE };
-std::vector<uint32> faerieSpells = { SPELL_ARCANE_EXPLOSION, SPELL_REFLECTION, SPELL_CHAIN_LIGHTING, SPELL_SLEEP };
+std::vector<uint32> faerieSpells = { SPELL_ARCANE_EXPLOSION, SPELL_REFLECTION, SPELL_CHAIN_LIGHTNING, SPELL_SLEEP };
struct boss_mor_grayhoof : public BossAI
{
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 82e19a6944..d1dbc4ff9e 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
@@ -234,7 +234,7 @@ public:
{
switch (id)
{
- case 5:
+ case 6:
events.ScheduleEvent(EVENT_TELEPORT_1, 2s);
break;
}
@@ -362,10 +362,10 @@ public:
break;
case EVENT_PATH_NEFARIUS:
if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
- victor->GetMotionMaster()->MovePath(NEFARIUS_PATH_1, true);
+ victor->GetMotionMaster()->MoveWaypoint(NEFARIUS_PATH_1, true);
break;
case EVENT_PATH_REND:
- me->GetMotionMaster()->MovePath(REND_PATH_1, false);
+ me->GetMotionMaster()->MoveWaypoint(REND_PATH_1, false);
break;
case EVENT_TELEPORT_1:
me->NearTeleportTo(194.2993f, -474.0814f, 121.4505f, -0.01225555f);
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp
index b08470c026..fe9d0a981e 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp
@@ -110,7 +110,7 @@ public:
if (_beastReached)
{
- me->GetMotionMaster()->MovePath(BEAST_MOVEMENT_ID, true);
+ me->GetMotionMaster()->MoveWaypoint(BEAST_MOVEMENT_ID, true);
}
}
@@ -169,7 +169,7 @@ public:
if (!_beastReached)
{
_beastReached = true;
- me->GetMotionMaster()->MovePath(BEAST_MOVEMENT_ID, true);
+ me->GetMotionMaster()->MoveWaypoint(BEAST_MOVEMENT_ID, true);
// There is a chance player logged in between areatriggers (realm crash or restart)
// executing part of script which happens when player enters boss room
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp
index 873cfdc746..fc8368f1b5 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp
@@ -244,7 +244,7 @@ class go_chromaggus_lever : public GameObjectScript
if (Creature* creature = _instance->GetCreature(DATA_CHROMAGGUS))
{
creature->SetHomePosition(homePos);
- creature->GetMotionMaster()->MovePath(creature->GetEntry() * 10, false);
+ creature->GetMotionMaster()->MoveWaypoint(creature->GetEntry() * 10, false);
creature->AI()->SetGUID(player->GetGUID(), GUID_LEVER_USER);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp
index 12fab34d17..9252546f05 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp
@@ -44,7 +44,7 @@ public:
void MovementInform(uint32 type, uint32 id) override
{
- if (type != WAYPOINT_MOTION_TYPE || id != 12)
+ if (type != WAYPOINT_MOTION_TYPE || id != 13)
{
return;
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp
index 712f9c5a2b..c1760cc5ca 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp
@@ -343,7 +343,7 @@ public:
nefarian->setActive(true);
nefarian->SetCanFly(true);
nefarian->SetDisableGravity(true);
- nefarian->GetMotionMaster()->MovePath(NEFARIAN_PATH, false);
+ nefarian->GetMotionMaster()->MoveWaypoint(NEFARIAN_PATH, false);
}
events.Reset();
@@ -406,7 +406,7 @@ public:
switch (eventId)
{
case EVENT_PATH_2:
- me->GetMotionMaster()->MovePath(NEFARIUS_PATH_2, false);
+ me->GetMotionMaster()->MoveWaypoint(NEFARIUS_PATH_2, false);
events.ScheduleEvent(EVENT_CHAOS_1, 7s);
break;
case EVENT_CHAOS_1:
@@ -438,7 +438,7 @@ public:
me->DespawnOrUnsummon(1s);
break;
case EVENT_PATH_3:
- me->GetMotionMaster()->MovePath(NEFARIUS_PATH_3, false);
+ me->GetMotionMaster()->MoveWaypoint(NEFARIUS_PATH_3, false);
break;
case EVENT_START_EVENT:
BeginEvent();
@@ -592,12 +592,12 @@ struct boss_nefarian : public BossAI
return;
}
- if (id == 3)
+ if (id == 4)
{
Talk(SAY_INTRO);
}
- if (id == 5)
+ if (id == 6)
{
DoCastAOE(SPELL_SHADOWFLAME_INITIAL);
Talk(SAY_SHADOWFLAME);
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
index 70bcad38e2..e62ad33e53 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
@@ -183,7 +183,7 @@ struct boss_nightbane : public BossAI
me->GetMotionMaster()->MoveTakeoff(POINT_INTRO_TAKE_OFF, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 10.0f, 13.99879f);
}).Schedule(4s, [this](TaskContext /*context*/)
{
- me->GetMotionMaster()->MovePath(me->GetEntry()*10, false);
+ me->GetMotionMaster()->MoveWaypoint(me->GetEntry()*10, false);
});
}
}
@@ -400,7 +400,7 @@ struct boss_nightbane : public BossAI
{
scheduler.Schedule(0s, [this](TaskContext /*context*/)
{
- me->GetMotionMaster()->MovePath(me->GetEntry()*10+1, false);
+ me->GetMotionMaster()->MoveWaypoint(me->GetEntry()*10+1, false);
});
}
break;
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
index dcb58c3656..84bd98bc66 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
@@ -170,6 +170,7 @@ public:
if (m_uiEventId == EVENT_OZ)
instance->SetData(DATA_OPERA_OZ_DEATHCOUNT, IN_PROGRESS);
+ me->SetWalk(true);
Start(false);
}
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp
index eacc695482..521743897d 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp
@@ -80,7 +80,7 @@ public:
{
if (Creature* kalecgos = instance->SummonCreature(NPC_KALECGOS, KalecgosSpawnPos))
{
- kalecgos->GetMotionMaster()->MovePath(PATH_KALECGOS_FLIGHT, false);
+ kalecgos->GetMotionMaster()->MoveWaypoint(PATH_KALECGOS_FLIGHT, false);
kalecgos->AI()->Talk(SAY_KALECGOS_SPAWN);
}
});
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
index eebdc7b9f4..d722cda01d 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
@@ -980,6 +980,7 @@ public:
{
carGUID = who->GetVehicleBase()->GetGUID();
InitWaypoint();
+ me->SetWalk(true);
Start(false, who->GetGUID());
SetDespawnAtFar(false);
}
@@ -998,7 +999,7 @@ public:
car->SetFaction(FACTION_FRIENDLY);
}
Talk(SAY_SCARLET_MINER_0);
- SetRun(true);
+ me->SetWalk(false);
IntroTimer = 4000;
IntroPhase = 1;
break;
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
index 5a1c4218b4..45cbf8d9a6 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
@@ -64,12 +64,12 @@ enum Koltira
//NPC_DEATH_KNIGHT_MOUNT = 29201,
MODEL_DEATH_KNIGHT_MOUNT = 25278,
- POINT_STAND_UP = 0,
- POINT_BOX = 1,
- POINT_ANTI_MAGIC_ZONE = 2,
+ POINT_STAND_UP = 1,
+ POINT_BOX = 2,
+ POINT_ANTI_MAGIC_ZONE = 3,
- POINT_MOUNT = 0,
- POINT_DESPAWN = 1
+ POINT_MOUNT = 1,
+ POINT_DESPAWN = 2
};
class npc_koltira_deathweaver : public CreatureScript
@@ -106,7 +106,7 @@ public:
Talk(SAY_BREAKOUT0);
me->m_Events.AddEventAtOffset([&] {
- me->GetMotionMaster()->MovePath(me->GetEntry() * 10, false);
+ me->GetMotionMaster()->MoveWaypoint(me->GetEntry() * 10, false);
}, 5s);
}
@@ -167,13 +167,13 @@ public:
}
if (Creature* acolyte = me->SummonCreature(NPC_CRIMSON_ACOLYTE, 1640.6724f, -6032.0527f, 134.82213f, 4.654973506927490234f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))
- acolyte->GetMotionMaster()->MovePath(NPC_CRIMSON_ACOLYTE * 10, false);
+ acolyte->GetMotionMaster()->MoveWaypoint(NPC_CRIMSON_ACOLYTE * 10, false);
if (Creature* acolyte = me->SummonCreature(NPC_CRIMSON_ACOLYTE, 1641.0055f, -6031.893f, 134.82211f, 0.401425719261169433f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))
- acolyte->GetMotionMaster()->MovePath((NPC_CRIMSON_ACOLYTE + 1) * 10, false);
+ acolyte->GetMotionMaster()->MoveWaypoint((NPC_CRIMSON_ACOLYTE + 1) * 10, false);
if (Creature* acolyte = me->SummonCreature(NPC_CRIMSON_ACOLYTE, 1639.7053f, -6031.7373f, 134.82213f, 2.443460941314697265f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))
- acolyte->GetMotionMaster()->MovePath((NPC_CRIMSON_ACOLYTE + 2) * 10, false);
+ acolyte->GetMotionMaster()->MoveWaypoint((NPC_CRIMSON_ACOLYTE + 2) * 10, false);
break;
case 1:
Talk(SAY_BREAKOUT4);
@@ -182,13 +182,13 @@ public:
valroth->AI()->Talk(SAY_VALROTH_WAVE2);
if (Creature* acolyte = me->SummonCreature(NPC_CRIMSON_ACOLYTE, 1640.7958f, -6030.307f, 134.82211f, 4.65355682373046875f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))
- acolyte->GetMotionMaster()->MovePath((NPC_CRIMSON_ACOLYTE + 3) * 10, false);
+ acolyte->GetMotionMaster()->MoveWaypoint((NPC_CRIMSON_ACOLYTE + 3) * 10, false);
if (Creature* acolyte = me->SummonCreature(NPC_CRIMSON_ACOLYTE, 1641.7305f, -6030.751f, 134.82211f, 6.143558979034423828f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))
- acolyte->GetMotionMaster()->MovePath((NPC_CRIMSON_ACOLYTE + 4) * 10, false);
+ acolyte->GetMotionMaster()->MoveWaypoint((NPC_CRIMSON_ACOLYTE + 4) * 10, false);
if (Creature* acolyte = me->SummonCreature(NPC_CRIMSON_ACOLYTE, 1639.4657f, -6030.404f, 134.82211f, 4.502949237823486328f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))
- acolyte->GetMotionMaster()->MovePath((NPC_CRIMSON_ACOLYTE + 5) * 10, false);
+ acolyte->GetMotionMaster()->MoveWaypoint((NPC_CRIMSON_ACOLYTE + 5) * 10, false);
break;
case 2:
Talk(SAY_BREAKOUT5);
@@ -197,16 +197,16 @@ public:
valroth->AI()->Talk(SAY_VALROTH_WAVE3);
if (Creature* acolyte = me->SummonCreature(NPC_CRIMSON_ACOLYTE, 1641.3405f, -6031.436f, 134.82211f, 4.612849712371826171f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))
- acolyte->GetMotionMaster()->MovePath((NPC_CRIMSON_ACOLYTE + 6) * 10, false);
+ acolyte->GetMotionMaster()->MoveWaypoint((NPC_CRIMSON_ACOLYTE + 6) * 10, false);
if (Creature* acolyte = me->SummonCreature(NPC_CRIMSON_ACOLYTE, 1642.0404f, -6030.3843f, 134.82211f, 1.378810048103332519f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))
- acolyte->GetMotionMaster()->MovePath((NPC_CRIMSON_ACOLYTE + 7) * 10, false);
+ acolyte->GetMotionMaster()->MoveWaypoint((NPC_CRIMSON_ACOLYTE + 7) * 10, false);
if (Creature* acolyte = me->SummonCreature(NPC_CRIMSON_ACOLYTE, 1640.1162f, -6029.7817f, 134.82211f, 5.707226753234863281f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))
- acolyte->GetMotionMaster()->MovePath((NPC_CRIMSON_ACOLYTE + 8) * 10, false);
+ acolyte->GetMotionMaster()->MoveWaypoint((NPC_CRIMSON_ACOLYTE + 8) * 10, false);
if (Creature* acolyte = me->SummonCreature(NPC_CRIMSON_ACOLYTE, 1640.9948f, -6029.8027f, 134.82211f, 1.605702877044677734f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))
- acolyte->GetMotionMaster()->MovePath((NPC_CRIMSON_ACOLYTE + 9) * 10, false);
+ acolyte->GetMotionMaster()->MoveWaypoint((NPC_CRIMSON_ACOLYTE + 9) * 10, false);
break;
case 3:
Talk(SAY_BREAKOUT6);
@@ -223,7 +223,7 @@ public:
{
valroth->AI()->Talk(SAY_VALROTH_AGGRO);
valroth->SetReactState(REACT_AGGRESSIVE);
- valroth->GetMotionMaster()->MovePath(NPC_HIGH_INQUISITOR_VALROTH * 10, false);
+ valroth->GetMotionMaster()->MoveWaypoint(NPC_HIGH_INQUISITOR_VALROTH * 10, false);
}
return;
default:
@@ -262,7 +262,7 @@ public:
SetInvincibility(true);
me->SetReactState(REACT_PASSIVE);
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
- me->GetMotionMaster()->MovePath((me->GetEntry() + 1) * 10, false);
+ me->GetMotionMaster()->MoveWaypoint((me->GetEntry() + 1) * 10, false);
});
}
}
@@ -610,7 +610,7 @@ public:
// Start waypoint movement using WaypointMovementGenerator
if (uint32 pathId = me->GetWaypointPath())
{
- me->GetMotionMaster()->MovePath(pathId, true); // true = repeatable
+ me->GetMotionMaster()->MoveWaypoint(pathId, true); // true = repeatable
}
// Schedule the first ritual after 20-30s
events.ScheduleEvent(EVENT_START_RITUAL, 20s, 30s);
@@ -797,7 +797,7 @@ public:
// Start waypoint movement using WaypointMovementGenerator
if (uint32 pathId = me->GetWaypointPath())
{
- me->GetMotionMaster()->MovePath(pathId, true); // true = repeatable
+ me->GetMotionMaster()->MoveWaypoint(pathId, true); // true = repeatable
}
// Schedule the first ritual after 50-60s
events.ScheduleEvent(EVENT_START_RITUAL, 50s, 60s);
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
index bf307fe0c8..9e481aee9d 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
@@ -504,7 +504,7 @@ public:
tirion->AI()->Talk(SAY_LIGHT_OF_DAWN25, 4s);
tirion->m_Events.AddEventAtOffset([&, tirion] {
- tirion->GetMotionMaster()->MovePath(NPC_HIGHLORD_TIRION_FORDRING * 10, false);
+ tirion->GetMotionMaster()->MoveWaypoint(NPC_HIGHLORD_TIRION_FORDRING * 10, false);
}, 14s);
events.Reset();
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
index 4634ead0ef..3169ee1bb5 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
@@ -56,7 +56,7 @@ enum Events
enum Misc
{
WEAPON_KIRTONOS_STAFF = 11365,
- POINT_KIRTONOS_LAND = 13,
+ POINT_KIRTONOS_LAND = 14,
KIRTONOS_PATH = 105061,
EMOTE_SUMMONED = 0
@@ -139,7 +139,7 @@ public:
switch (events2.ExecuteEvent())
{
case INTRO_1:
- me->GetMotionMaster()->MovePath(KIRTONOS_PATH, false);
+ me->GetMotionMaster()->MoveWaypoint(KIRTONOS_PATH, false);
Talk(EMOTE_SUMMONED);
break;
case INTRO_2:
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
index 3034bb96e0..1df2bc3955 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
@@ -382,7 +382,7 @@ class spell_madrigosa_activate_barrier : public SpellScript
WorldPacket pkt;
go->BuildValuesUpdateBlockForPlayer(&data, player);
data.BuildPacket(pkt);
- player->GetSession()->SendPacket(&pkt);
+ player->SendDirectMessage(&pkt);
});
}
}
@@ -409,7 +409,7 @@ class spell_madrigosa_deactivate_barrier : public SpellScript
WorldPacket pkt;
go->BuildValuesUpdateBlockForPlayer(&data, player);
data.BuildPacket(pkt);
- player->GetSession()->SendPacket(&pkt);
+ player->SendDirectMessage(&pkt);
});
}
}
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
index 04fa2023d1..75ee7dd055 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
@@ -157,7 +157,7 @@ struct boss_felmyst : public BossAI
me->SetCanFly(true);
me->SetDisableGravity(true);
me->SendMovementFlagUpdate();
- me->GetMotionMaster()->MovePath(me->GetEntry() * 10, true);
+ me->GetMotionMaster()->MoveWaypoint(me->GetEntry() * 10, true);
}
}
@@ -363,7 +363,7 @@ struct boss_felmyst : public BossAI
me->m_Events.AddEventAtOffset([&] {
me->SetImmuneToPC(false);
- me->GetMotionMaster()->MovePath(me->GetEntry() * 10, true);
+ me->GetMotionMaster()->MoveWaypoint(me->GetEntry() * 10, true);
}, 8500ms);
});
}
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp
index 22c405ed62..91cbfb02a0 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp
@@ -127,7 +127,7 @@ struct boss_nalorakk : public BossAI
{
_introScheduler.CancelGroup(GROUP_CHECK_DEAD);
_waveList.clear();
- me->GetMotionMaster()->MovePath(me->GetEntry()*100+1, false);
+ me->GetMotionMaster()->MoveWaypoint(me->GetEntry()*100+1, false);
Talk(SAY_RUN_AWAY);
_introScheduler.Schedule(5s, [this](TaskContext)
{
@@ -153,7 +153,7 @@ struct boss_nalorakk : public BossAI
_introScheduler.CancelGroup(GROUP_CHECK_DEAD);
_waveList.clear();
Talk(SAY_RUN_AWAY);
- me->GetMotionMaster()->MovePath(me->GetEntry()*100+2, false);
+ me->GetMotionMaster()->MoveWaypoint(me->GetEntry()*100+2, false);
_introScheduler.Schedule(6s, [this](TaskContext)
{
me->SetFacingTo(1.54f);
@@ -176,7 +176,7 @@ struct boss_nalorakk : public BossAI
_introScheduler.CancelGroup(GROUP_CHECK_DEAD);
_waveList.clear();
Talk(SAY_RUN_AWAY);
- me->GetMotionMaster()->MovePath(me->GetEntry() * 100 + 3, false);
+ me->GetMotionMaster()->MoveWaypoint(me->GetEntry() * 100 + 3, false);
_introScheduler.Schedule(6s, [this](TaskContext)
{
me->SetFacingTo(1.54f);
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
index 4b28c85feb..efff4f78b3 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
@@ -400,7 +400,7 @@ struct npc_harrison_jones : public ScriptedAI
Talk(SAY_HARRISON_0);
scheduler.Schedule(2s, [this](TaskContext /*task*/)
{
- me->GetMotionMaster()->MovePath(HARRISON_MOVE_1, false);
+ me->GetMotionMaster()->MoveWaypoint(HARRISON_MOVE_1, false);
});
}
}
@@ -448,7 +448,7 @@ struct npc_harrison_jones : public ScriptedAI
// Players are Now Saved to instance at SPECIAL (Player should be notified?)
scheduler.Schedule(500ms, [this](TaskContext /*task*/)
{
- me->GetMotionMaster()->MovePath(HARRISON_MOVE_2, false);
+ me->GetMotionMaster()->MoveWaypoint(HARRISON_MOVE_2, false);
});
}
}
@@ -486,7 +486,7 @@ struct npc_harrison_jones : public ScriptedAI
void MovementInform(uint32 type, uint32 id) override
{
// at gong
- if (type == WAYPOINT_MOTION_TYPE && id == 2 && _phase == PHASE_GONG)
+ if (type == WAYPOINT_MOTION_TYPE && id == 3 && _phase == PHASE_GONG)
{
if (GameObject* gong = _instance->GetGameObject(DATA_STRANGE_GONG))
me->SetFacingToObject(gong);
@@ -503,13 +503,13 @@ struct npc_harrison_jones : public ScriptedAI
});
}
// to the massive gate
- else if (type == WAYPOINT_MOTION_TYPE && id == 1 && _phase == PHASE_GATE_CLOSED)
+ else if (type == WAYPOINT_MOTION_TYPE && id == 2 && _phase == PHASE_GATE_CLOSED)
{
me->SetEntry(NPC_HARRISON_JONES_1);
Talk(SAY_HARRISON_2);
}
// at massive gate
- else if (type == WAYPOINT_MOTION_TYPE && id == 2 && _phase == PHASE_GATE_CLOSED)
+ else if (type == WAYPOINT_MOTION_TYPE && id == 3 && _phase == PHASE_GATE_CLOSED)
{
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING);
Talk(SAY_HARRISON_3);
@@ -521,7 +521,7 @@ struct npc_harrison_jones : public ScriptedAI
{
DoCastSelf(SPELL_STEALTH);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
- me->GetMotionMaster()->MovePath(HARRISON_MOVE_3, false);
+ me->GetMotionMaster()->MoveWaypoint(HARRISON_MOVE_3, false);
});
}
}
@@ -592,14 +592,14 @@ struct npc_amanishi_lookout : public NullCreatureAI
Talk(SAY_INVADERS);
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->SetUnitFlag(UNIT_FLAG_RENAME);
- me->GetMotionMaster()->MovePath(PATH_LOOKOUT, false);
+ me->GetMotionMaster()->MoveWaypoint(PATH_LOOKOUT, false);
}
}
void MovementInform(uint32 type, uint32 id) override
{
// at boss
- if (type == WAYPOINT_MOTION_TYPE && id == 8) // should despawn with waypoint script
+ if (type == WAYPOINT_MOTION_TYPE && id == 9) // should despawn with waypoint script
me->DespawnOrUnsummon(0s, 0s);
}
private:
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp
index 1b8d13bbf7..6975e98a1f 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp
@@ -41,7 +41,7 @@ struct boss_gahzranka : public BossAI
void IsSummonedBy(WorldObject* /*summoner*/) override
{
- me->GetMotionMaster()->MovePath(me->GetEntry() * 10, false);
+ me->GetMotionMaster()->MoveWaypoint(me->GetEntry() * 10, false);
}
void JustEngagedWith(Unit* /*who*/) override
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
index c750fd59c6..0b4bddc3d8 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
@@ -140,7 +140,7 @@ struct boss_jeklik : public BossAI
me->SetDisableGravity(true);
DoCastSelf(SPELL_BAT_FORM, true);
- me->GetMotionMaster()->MovePath(PATH_JEKLIK_INTRO, false);
+ me->GetMotionMaster()->MoveWaypoint(PATH_JEKLIK_INTRO, false);
}
void PathEndReached(uint32 pathId) override
@@ -295,7 +295,7 @@ struct npc_batrider : public CreatureAI
me->SetSpeed(MOVE_WALK, 5.0f, true);
me->SetCanFly(true);
- me->GetMotionMaster()->MoveSplinePath(PATH_BATRIDER_LOOP);
+ me->GetMotionMaster()->MovePath(PATH_BATRIDER_LOOP);
}
else
{
@@ -375,7 +375,7 @@ struct npc_batrider : public CreatureAI
if (!me->isMoving())
{
me->SetCanFly(true);
- me->GetMotionMaster()->MoveSplinePath(PATH_BATRIDER_LOOP);
+ me->GetMotionMaster()->MovePath(PATH_BATRIDER_LOOP);
}
}
else if (_mode == BATRIDER_MODE_TRASH)
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
index 7ba24407fe..251e76ad57 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
@@ -80,7 +80,7 @@ enum Misc
MODEL_OHGAN_MOUNT = 15271,
PATH_MANDOKIR = 492861,
- POINT_MANDOKIR_END = 24,
+ POINT_MANDOKIR_END = 25,
CHAINED_SPIRIT_COUNT = 20,
ACTION_CHARGE = 1
};
diff --git a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp
index a7162ffc88..dea0884b75 100644
--- a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp
@@ -78,7 +78,7 @@ public:
break;
case 11:
Talk(SAY_PROGRESS_6, player);
- SetRun(true);
+ me->SetWalk(false);
break;
case 19:
Talk(SAY_PROGRESS_7, player);
@@ -106,7 +106,8 @@ public:
if (quest->GetQuestId() == QUEST_SUNKEN_TREASURE)
{
Talk(SAY_PROGRESS_1, player);
- npc_escortAI::Start(false, player->GetGUID(), quest);
+ me->SetWalk(true);
+ Start(false, player->GetGUID(), quest);
me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE);
}
}
diff --git a/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp b/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp
index b92bcb6168..ef651b4c69 100644
--- a/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp
@@ -182,13 +182,13 @@ struct npc_cameron : public ScriptedAI
switch (eventId)
{
case EVENT_WP_START_GOLDSHIRE:
- me->GetMotionMaster()->MovePath(GOLDSHIRE_PATH, false);
+ me->GetMotionMaster()->MoveWaypoint(GOLDSHIRE_PATH, false);
break;
case EVENT_WP_START_WOODS:
- me->GetMotionMaster()->MovePath(WOODS_PATH, false);
+ me->GetMotionMaster()->MoveWaypoint(WOODS_PATH, false);
break;
case EVENT_WP_START_HOUSE:
- me->GetMotionMaster()->MovePath(HOUSE_PATH, false);
+ me->GetMotionMaster()->MoveWaypoint(HOUSE_PATH, false);
break;
case EVENT_WP_START_LISA:
for (uint32 i = 0; i < _childrenGUIDs.size(); ++i)
@@ -197,7 +197,7 @@ struct npc_cameron : public ScriptedAI
{
if (lisa->GetEntry() == NPC_LISA)
{
- lisa->GetMotionMaster()->MovePath(LISA_PATH, false);
+ lisa->GetMotionMaster()->MoveWaypoint(LISA_PATH, false);
break;
}
}
@@ -233,7 +233,7 @@ struct npc_cameron : public ScriptedAI
child->SearchFormation();
// Start movement
- me->GetMotionMaster()->MovePath(STORMWIND_PATH, false);
+ me->GetMotionMaster()->MoveWaypoint(STORMWIND_PATH, false);
break;
}
@@ -386,7 +386,7 @@ struct npc_eastvale_peasent : public ScriptedAI
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
me->CastSpell(me, SPELL_TRANSFORM_PEASENT_WITH_WOOD);
me->SetSpeed(MOVE_WALK, 1.0f);
- me->GetMotionMaster()->MovePath(_path, false);
+ me->GetMotionMaster()->MoveWaypoint(_path, false);
}
}
@@ -418,7 +418,7 @@ struct npc_eastvale_peasent : public ScriptedAI
switch (eventId)
{
case EVENT_MOVETORAELEN:
- me->GetMotionMaster()->MovePath(_path + 1, false);
+ me->GetMotionMaster()->MoveWaypoint(_path + 1, false);
break;
case EVENT_TALKTORAELEN1:
if (Creature* realen = me->FindNearestCreature(NPC_SUPERVISOR_RAELEN, 2.0f, true))
@@ -492,7 +492,7 @@ struct npc_eastvale_peasent : public ScriptedAI
case EVENT_PATHBACK:
if (Creature* realen = ObjectAccessor::GetCreature(*me, _realenGUID))
realen->AI()->SetData(1, 1);
- me->GetMotionMaster()->MovePath(_path + 2, false);
+ me->GetMotionMaster()->MoveWaypoint(_path + 2, false);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp b/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp
index 5c50dc91e6..cc3f0104b9 100644
--- a/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp
@@ -60,7 +60,7 @@ struct npc_partygoer_pather : public ScriptedAI
switch (eventId)
{
case EVENT_PATH:
- me->GetMotionMaster()->MovePath(_path, false);
+ me->GetMotionMaster()->MoveWaypoint(_path, false);
break;
case EVENT_RANDOM_ACTION_PATHER:
{
diff --git a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp
index 09eaaed428..b570c1d181 100644
--- a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp
@@ -113,7 +113,8 @@ struct npc_ranger_lilatha : public npc_escortAI
if (quest->GetQuestId() == QUEST_ESCAPE_FROM_THE_CATACOMBS)
{
me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE);
- npc_escortAI::Start(true, player->GetGUID());
+ me->SetWalk(true);
+ Start(true, player->GetGUID());
}
}
};
@@ -148,13 +149,13 @@ struct npc_sentinel_leader : public ScriptedAI
{
switch (id)
{
- case 1:
- case 4:
- case 7:
+ case 2:
+ case 5:
case 8:
- case 13:
+ case 9:
case 14:
- case 17:
+ case 15:
+ case 18:
Creature* SentinelSpy = me->FindNearestCreature(NPC_SENTINEL_SPY, 2.0f, true);
if (SentinelSpy)
{
@@ -281,10 +282,10 @@ struct npc_sentinel_infiltrator : public ScriptedAI
case PATH_ONE:
switch (id)
{
- case 5:
- case 8:
- case 14:
- case 18:
+ case 6:
+ case 9:
+ case 15:
+ case 19:
Creature* SentinelInfiltrator = me->FindNearestCreature(NPC_SENTINEL_INFILTRATOR, 3.5f, true);
if (SentinelInfiltrator)
{
@@ -298,10 +299,10 @@ struct npc_sentinel_infiltrator : public ScriptedAI
case PATH_TWO:
switch (id)
{
- case 5:
- case 7:
- case 14:
- case 17:
+ case 6:
+ case 8:
+ case 15:
+ case 18:
Creature* SentinelInfiltrator = me->FindNearestCreature(NPC_SENTINEL_INFILTRATOR, 3.5f, true);
if (SentinelInfiltrator)
{
diff --git a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp
index dc13269327..f48aa5c06c 100644
--- a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp
@@ -132,7 +132,8 @@ public:
if (GameObject* go = me->FindNearestGameObject(GO_RINJI_CAGE, INTERACTION_DISTANCE))
go->UseDoorOrButton();
- npc_escortAI::Start(false, player->GetGUID(), quest);
+ me->SetWalk(true);
+ Start(false, player->GetGUID(), quest);
}
}
@@ -156,7 +157,7 @@ public:
case 17:
Talk(SAY_RIN_COMPLETE, player);
player->GroupEventHappens(QUEST_RINJI_TRAPPED, me);
- SetRun(true);
+ me->SetWalk(false);
postEventCount = 1;
break;
}
diff --git a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp
index c3d7edd075..15192af962 100644
--- a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp
@@ -539,16 +539,16 @@ public:
break;
case 3:
me->SetWalk(true);
- me->GetMotionMaster()->MovePath(me->GetEntry() * 100, false);
+ me->GetMotionMaster()->MoveWaypoint(me->GetEntry() * 100, false);
if (Creature* c = me->FindNearestCreature(NPC_THERON, 60.0f, true))
{
c->SetWalk(true);
- c->GetMotionMaster()->MovePath(c->GetEntry() * 100, false);
+ c->GetMotionMaster()->MoveWaypoint(c->GetEntry() * 100, false);
}
if (Creature* c = me->FindNearestCreature(NPC_AURIC, 60.0f, true))
{
c->SetWalk(true);
- c->GetMotionMaster()->MovePath(c->GetEntry() * 100, false);
+ c->GetMotionMaster()->MoveWaypoint(c->GetEntry() * 100, false);
}
break;
case 4:
diff --git a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp
index b0783d371f..f176916a74 100644
--- a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp
@@ -61,7 +61,8 @@ public:
if (quest->GetQuestId() == QUEST_MISSING_IN_ACTION)
{
Talk(SAY_CORPORAL_1, player);
- npc_escortAI::Start(true, player->GetGUID(), quest);
+ me->SetWalk(true);
+ Start(true, player->GetGUID(), quest);
me->SetImmuneToNPC(false);
me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_ACTIVE);
}
diff --git a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp
index 12f1203981..6ab4e712c4 100644
--- a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp
@@ -111,7 +111,10 @@ public:
creature->AI()->Talk(SAY_QUESTACCEPT, player);
if (npc_escortAI* pEscortAI = CAST_AI(npc_deathstalker_erland::npc_deathstalker_erlandAI, creature->AI()))
+ {
+ creature->SetWalk(true);
pEscortAI->Start(true, player->GetGUID());
+ }
}
return true;
diff --git a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
index d8203ed9f9..6adf8cdf1f 100644
--- a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
@@ -406,6 +406,7 @@ public:
{
if (Player* player = GetPlayerForEscort())
{
+ pLescovar->SetWalk(true);
CAST_AI(npc_lord_gregor_lescovar::npc_lord_gregor_lescovarAI, pLescovar->AI())->Start(false, player->GetGUID());
CAST_AI(npc_lord_gregor_lescovar::npc_lord_gregor_lescovarAI, pLescovar->AI())->SetMaxPlayerDistance(200.0f);
}
@@ -448,6 +449,7 @@ public:
{
if (Creature* pSpybot = creature->FindNearestCreature(NPC_TYRION_SPYBOT, 5.0f, true))
{
+ pSpybot->SetWalk(true);
CAST_AI(npc_tyrion_spybot::npc_tyrion_spybotAI, pSpybot->AI())->Start(false, player->GetGUID());
CAST_AI(npc_tyrion_spybot::npc_tyrion_spybotAI, pSpybot->AI())->SetMaxPlayerDistance(200.0f);
}
diff --git a/src/server/scripts/EasternKingdoms/zone_undercity.cpp b/src/server/scripts/EasternKingdoms/zone_undercity.cpp
index ad627959ff..a7218f9b1c 100644
--- a/src/server/scripts/EasternKingdoms/zone_undercity.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_undercity.cpp
@@ -916,7 +916,6 @@ public:
if (auto ai = CAST_AI(npc_varian_wrynn::npc_varian_wrynnAI, creature->AI()))
{
- creature->SetWalk(false);
ai->Start(true, player->GetGUID());
if (Creature* jaina = GetClosestCreatureWithEntry(creature, NPC_JAINA, 50.0f))
ai->jainaGUID = jaina->GetGUID();
@@ -1322,22 +1321,22 @@ public:
if (Unit* temp = me->SummonCreature(NPC_SW_SOLDIER, AllianceSpawn[8].x, AllianceSpawn[8].y, AllianceSpawn[8].z, 0, TEMPSUMMON_TIMED_DESPAWN, 90000))
{
allianceGuardsGUID.push_back(temp->GetGUID());
- temp->GetMotionMaster()->MovePath(NPC_SW_SOLDIER * 10, false);
+ temp->GetMotionMaster()->MoveWaypoint(NPC_SW_SOLDIER * 10, false);
}
if (Unit* temp = me->SummonCreature(NPC_SW_SOLDIER, AllianceSpawn[8].x, AllianceSpawn[8].y, AllianceSpawn[8].z, 0, TEMPSUMMON_TIMED_DESPAWN, 90000))
{
allianceGuardsGUID.push_back(temp->GetGUID());
- temp->GetMotionMaster()->MovePath((NPC_SW_SOLDIER * 10) + 1, false);
+ temp->GetMotionMaster()->MoveWaypoint((NPC_SW_SOLDIER * 10) + 1, false);
}
if (Unit* temp = me->SummonCreature(NPC_SW_SOLDIER, AllianceSpawn[8].x, AllianceSpawn[8].y, AllianceSpawn[8].z, 0, TEMPSUMMON_TIMED_DESPAWN, 90000))
{
allianceGuardsGUID.push_back(temp->GetGUID());
- temp->GetMotionMaster()->MovePath((NPC_SW_SOLDIER * 10) + 2, false);
+ temp->GetMotionMaster()->MoveWaypoint((NPC_SW_SOLDIER * 10) + 2, false);
}
if (Unit* temp = me->SummonCreature(NPC_SW_SOLDIER, AllianceSpawn[8].x, AllianceSpawn[8].y, AllianceSpawn[8].z, 0, TEMPSUMMON_TIMED_DESPAWN, 90000))
{
allianceGuardsGUID.push_back(temp->GetGUID());
- temp->GetMotionMaster()->MovePath((NPC_SW_SOLDIER * 10) + 3, false);
+ temp->GetMotionMaster()->MoveWaypoint((NPC_SW_SOLDIER * 10) + 3, false);
}
break;
case 8:
@@ -1349,7 +1348,7 @@ public:
case 10:
if (Unit* temp = me->SummonCreature(NPC_DREADLORD, AllianceSpawn[11].x, AllianceSpawn[11].y, AllianceSpawn[11].z, TEMPSUMMON_DEAD_DESPAWN))
{
- temp->GetMotionMaster()->MovePath(NPC_DREADLORD * 10, false);
+ temp->GetMotionMaster()->MoveWaypoint(NPC_DREADLORD * 10, false);
temp->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);
temp->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK_DEST, true);
}
@@ -1537,7 +1536,7 @@ public:
case 8:
if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID))
{
- jaina->GetMotionMaster()->MovePath(NPC_JAINA * 10, false);
+ jaina->GetMotionMaster()->MoveWaypoint(NPC_JAINA * 10, false);
jaina->setActive(true);
}
bStepping = false;
@@ -2538,9 +2537,9 @@ public:
{
case 0: // Vortex
if (Creature* whirlwind1 = me->SummonCreature(NPC_VORTEX, ThrallSpawn[0].x, ThrallSpawn[0].y, ThrallSpawn[0].z, ThrallSpawn[0].o, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 30 * IN_MILLISECONDS))
- whirlwind1->GetMotionMaster()->MovePath(NPC_WHIRLWIND * 10, false);
+ whirlwind1->GetMotionMaster()->MoveWaypoint(NPC_WHIRLWIND * 10, false);
if (Creature* whirlwind2 = me->SummonCreature(NPC_VORTEX, ThrallSpawn[0].x, ThrallSpawn[0].y, ThrallSpawn[0].z, ThrallSpawn[0].o, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 30 * IN_MILLISECONDS))
- whirlwind2->GetMotionMaster()->MovePath(NPC_WHIRLWIND * 100, false);
+ whirlwind2->GetMotionMaster()->MoveWaypoint(NPC_WHIRLWIND * 100, false);
break;
case 1:
// BATTLING_COURTYARD Initial Spawn
@@ -2763,7 +2762,7 @@ public:
{
hordeGuardsGUID.push_back(temp->GetGUID());
temp->AI()->Talk(SAY_FOR_THE_HORDE);
- temp->GetMotionMaster()->MovePath(NPC_WARSONG_BATTLEGUARD * 100, false);
+ temp->GetMotionMaster()->MoveWaypoint(NPC_WARSONG_BATTLEGUARD * 100, false);
}
break;
// Valimathras Room Preparation
@@ -2976,7 +2975,7 @@ public:
me->SetWalk(false);
if (Creature* sylvanas = ObjectAccessor::GetCreature(*me, sylvanasfollowGUID))
{
- sylvanas->GetMotionMaster()->MovePath(NPC_SYLVANAS * 100, false);
+ sylvanas->GetMotionMaster()->MoveWaypoint(NPC_SYLVANAS * 100, false);
sylvanas->setActive(true);
}
break;
@@ -3008,7 +3007,7 @@ public:
SetEscortPaused(false);
me->SetWalk(true);
if (Creature* sylvanas = ObjectAccessor::GetCreature(*me, sylvanasfollowGUID))
- sylvanas->GetMotionMaster()->MovePath(NPC_SYLVANAS * 1000, false);
+ sylvanas->GetMotionMaster()->MoveWaypoint(NPC_SYLVANAS * 1000, false);
JumpToNextStep(3 * IN_MILLISECONDS);
break;
}
diff --git a/src/server/scripts/EasternKingdoms/zone_westfall.cpp b/src/server/scripts/EasternKingdoms/zone_westfall.cpp
index fe71253764..de9afc5afe 100644
--- a/src/server/scripts/EasternKingdoms/zone_westfall.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_westfall.cpp
@@ -56,7 +56,6 @@ public:
if (quest->GetQuestId() == QUEST_TOME_VALOR)
{
creature->AI()->Talk(SAY_DS_START);
- creature->SetWalk(false);
if (npc_escortAI* pEscortAI = CAST_AI(npc_daphne_stilwell::npc_daphne_stilwellAI, creature->AI()))
pEscortAI->Start(true, player->GetGUID());
}
@@ -117,7 +116,7 @@ public:
me->SummonCreature(NPC_DEFIAS_RAIDER, -11438.14f, 1607.6f, 70.94f, 4.38f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000);
break;
case 10:
- SetRun(false);
+ me->SetWalk(true);
break;
case 11:
Talk(SAY_DS_PROLOGUE);
diff --git a/src/server/scripts/EasternKingdoms/zone_wetlands.cpp b/src/server/scripts/EasternKingdoms/zone_wetlands.cpp
index 97efd21c69..054e170434 100644
--- a/src/server/scripts/EasternKingdoms/zone_wetlands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_wetlands.cpp
@@ -138,7 +138,10 @@ public:
pSlim->CastSpell(pSlim, SPELL_STEALTH, true);
if (npc_tapoke_slim_jahn::npc_tapoke_slim_jahnAI* pEscortAI = CAST_AI(npc_tapoke_slim_jahn::npc_tapoke_slim_jahnAI, pSlim->AI()))
+ {
+ pSlim->SetWalk(true);
pEscortAI->Start(false, player->GetGUID(), quest);
+ }
}
return false;
}
diff --git a/src/server/scripts/Events/hallows_end.cpp b/src/server/scripts/Events/hallows_end.cpp
index 5bda46f138..f9bf2a2c09 100644
--- a/src/server/scripts/Events/hallows_end.cpp
+++ b/src/server/scripts/Events/hallows_end.cpp
@@ -428,7 +428,7 @@ struct npc_costumed_orphan_matron : public ScriptedAI
GetInitXYZ(x, y, z, o, path);
if (Creature* cr = me->SummonCreature(NPC_SHADE_OF_HORSEMAN, x, y, z, o, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000))
{
- cr->GetMotionMaster()->MovePath(path, true);
+ cr->GetMotionMaster()->MoveWaypoint(path, true);
cr->AI()->DoAction(path);
horseGUID = cr->GetGUID();
}
@@ -1085,9 +1085,9 @@ struct boss_headless_horseman : public ScriptedAI
{
if (type == WAYPOINT_MOTION_TYPE)
{
- if (point == 0)
+ if (point == 1)
me->CastSpell(me, SPELL_HEAD_VISUAL, true);
- else if (point == 11)
+ else if (point == 12)
{
me->ReplaceAllUnitFlags(UNIT_FLAG_NONE);
me->StopMoving();
@@ -1191,7 +1191,7 @@ struct boss_headless_horseman : public ScriptedAI
break;
case 3:
me->SetDisableGravity(true);
- me->GetMotionMaster()->MovePath(236820, false);
+ me->GetMotionMaster()->MoveWaypoint(236820, false);
me->CastSpell(me, SPELL_SHAKE_CAMERA_SMALL, true);
player->Say(TALK_PLAYER_FELT_DEATH);
Talk(TALK_ENTRANCE);
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
index 69eaa77eab..02a718379c 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
@@ -97,7 +97,7 @@ public:
Talk(SAY_ONSPAWN, 1200ms);
if (action == DATA_ANETHERON)
- me->GetMotionMaster()->MovePath(urand(ALLIANCE_BASE_CHARGE_1, ALLIANCE_BASE_CHARGE_3), false);
+ me->GetMotionMaster()->MoveWaypoint(urand(ALLIANCE_BASE_CHARGE_1, ALLIANCE_BASE_CHARGE_3), false);
}
void PathEndReached(uint32 pathId) override
@@ -109,7 +109,7 @@ public:
case ALLIANCE_BASE_CHARGE_3:
me->m_Events.AddEventAtOffset([this]()
{
- me->GetMotionMaster()->MovePath(urand(ALLIANCE_BASE_PATROL_1, ALLIANCE_BASE_PATROL_3), true);
+ me->GetMotionMaster()->MoveWaypoint(urand(ALLIANCE_BASE_PATROL_1, ALLIANCE_BASE_PATROL_3), true);
}, 1s);
break;
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp
index 4d0c1c3c9e..fa931454fc 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp
@@ -86,7 +86,7 @@ public:
Talk(SAY_ONSPAWN, 1200ms);
if (action == DATA_AZGALOR)
- me->GetMotionMaster()->MovePath(HORDE_BOSS_PATH, false);
+ me->GetMotionMaster()->MoveWaypoint(HORDE_BOSS_PATH, false);
}
void KilledUnit(Unit * victim) override
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
index a4855f855c..991b8214f6 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
@@ -106,7 +106,7 @@ public:
Talk(SAY_ONSPAWN, 1200ms);
if (action == DATA_KAZROGAL)
- me->GetMotionMaster()->MovePath(HORDE_BOSS_PATH, false);
+ me->GetMotionMaster()->MoveWaypoint(HORDE_BOSS_PATH, false);
}
void KilledUnit(Unit * victim) override
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 39bce4e6ee..887a34570f 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp
@@ -101,7 +101,7 @@ public:
Talk(SAY_ONSPAWN, 1200ms);
if (action == DATA_WINTERCHILL)
- me->GetMotionMaster()->MovePath(urand(ALLIANCE_BASE_CHARGE_1, ALLIANCE_BASE_CHARGE_3), false);
+ me->GetMotionMaster()->MoveWaypoint(urand(ALLIANCE_BASE_CHARGE_1, ALLIANCE_BASE_CHARGE_3), false);
}
void PathEndReached(uint32 pathId) override
@@ -113,7 +113,7 @@ public:
case ALLIANCE_BASE_CHARGE_3:
me->m_Events.AddEventAtOffset([this]()
{
- me->GetMotionMaster()->MovePath(urand(ALLIANCE_BASE_PATROL_1, ALLIANCE_BASE_PATROL_3), true);
+ me->GetMotionMaster()->MoveWaypoint(urand(ALLIANCE_BASE_PATROL_1, ALLIANCE_BASE_PATROL_3), true);
}, 1s);
break;
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp
index 01b12a9ef8..1ec84feb5f 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp
@@ -188,7 +188,7 @@ public:
else
{
creature->AI()->Talk(SAY_SUCCESS);
- creature->GetMotionMaster()->MovePath(JAINA_RETREAT_PATH, false);
+ creature->GetMotionMaster()->MoveWaypoint(JAINA_RETREAT_PATH, false);
}
}
return true;
@@ -493,15 +493,15 @@ struct npc_hyjal_ground_trash : public ScriptedAI
case DATA_WINTERCHILL:
case DATA_ANETHERON:
case DATA_ALLIANCE_RETREAT:
- me->GetMotionMaster()->MovePath(urand(ALLIANCE_BASE_CHARGE_1, ALLIANCE_BASE_CHARGE_3), false);
+ me->GetMotionMaster()->MoveWaypoint(urand(ALLIANCE_BASE_CHARGE_1, ALLIANCE_BASE_CHARGE_3), false);
break;
case DATA_KAZROGAL:
case DATA_AZGALOR:
case DATA_HORDE_RETREAT:
- me->GetMotionMaster()->MovePath(urand(HORDE_BASE_CHARGE_1, HORDE_BASE_CHARGE_3), false);
+ me->GetMotionMaster()->MoveWaypoint(urand(HORDE_BASE_CHARGE_1, HORDE_BASE_CHARGE_3), false);
break;
case DATA_ARCHIMONDE:
- me->GetMotionMaster()->MovePath(urand(NIGHT_ELF_BASE_CHARGE_1, NIGHT_ELF_BASE_CHARGE_3), false);
+ me->GetMotionMaster()->MoveWaypoint(urand(NIGHT_ELF_BASE_CHARGE_1, NIGHT_ELF_BASE_CHARGE_3), false);
break;
}
}
@@ -517,7 +517,7 @@ struct npc_hyjal_ground_trash : public ScriptedAI
case ALLIANCE_BASE_CHARGE_3:
me->m_Events.AddEventAtOffset([this]()
{
- me->GetMotionMaster()->MovePath(urand(ALLIANCE_BASE_PATROL_1, ALLIANCE_BASE_PATROL_3), true);
+ me->GetMotionMaster()->MoveWaypoint(urand(ALLIANCE_BASE_PATROL_1, ALLIANCE_BASE_PATROL_3), true);
}, 1s);
break;
case HORDE_BASE_CHARGE_1:
@@ -525,7 +525,7 @@ struct npc_hyjal_ground_trash : public ScriptedAI
case HORDE_BASE_CHARGE_3:
me->m_Events.AddEventAtOffset([this]()
{
- me->GetMotionMaster()->MovePath(urand(HORDE_BASE_PATROL_1, HORDE_BASE_PATROL_3), true);
+ me->GetMotionMaster()->MoveWaypoint(urand(HORDE_BASE_PATROL_1, HORDE_BASE_PATROL_3), true);
}, 1s);
break;
case NIGHT_ELF_BASE_CHARGE_1:
@@ -616,9 +616,9 @@ struct npc_hyjal_gargoyle : public ScriptedAI
case DATA_AZGALOR:
case DATA_HORDE_RETREAT:
if (me->GetPositionX() < 5500.f)
- me->GetMotionMaster()->MovePath(urand(GARGOYLE_PATH_FORTRESS_1, GARGOYLE_PATH_FORTRESS_3), false);
+ me->GetMotionMaster()->MoveWaypoint(urand(GARGOYLE_PATH_FORTRESS_1, GARGOYLE_PATH_FORTRESS_3), false);
else
- me->GetMotionMaster()->MovePath(urand(GARGOYLE_PATH_TROLL_CAMP_1, GARGOYLE_PATH_TROLL_CAMP_3), false);
+ me->GetMotionMaster()->MoveWaypoint(urand(GARGOYLE_PATH_TROLL_CAMP_1, GARGOYLE_PATH_TROLL_CAMP_3), false);
break;
default:
break;
@@ -687,9 +687,9 @@ struct npc_hyjal_frost_wyrm : public ScriptedAI
case DATA_AZGALOR:
case DATA_HORDE_RETREAT:
if (me->GetPositionX() < 5500.f)
- me->GetMotionMaster()->MovePath(FROST_WYRM_FORTRESS, false);
+ me->GetMotionMaster()->MoveWaypoint(FROST_WYRM_FORTRESS, false);
else
- me->GetMotionMaster()->MovePath(FROST_WYRM_TROLL_CAMP, false);
+ me->GetMotionMaster()->MoveWaypoint(FROST_WYRM_TROLL_CAMP, false);
break;
default:
break;
@@ -702,7 +702,7 @@ struct npc_hyjal_frost_wyrm : public ScriptedAI
{
me->m_Events.AddEventAtOffset([this]()
{
- me->GetMotionMaster()->MovePath(FROST_WYRM_FORTRESS_PATROL, true);
+ me->GetMotionMaster()->MoveWaypoint(FROST_WYRM_FORTRESS_PATROL, true);
}, 1s);
}
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp
index db6e61927d..439817bc4d 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp
@@ -18,17 +18,16 @@
#include "CreatureScript.h"
#include "ScriptedCreature.h"
#include "SpellInfo.h"
+#include "SpellMgr.h"
#include "culling_of_stratholme.h"
enum Spells
{
SPELL_CURSE_OF_EXERTION = 52772,
- SPELL_WOUNDING_STRIKE_N = 52771,
- SPELL_WOUNDING_STRIKE_H = 58830,
+ SPELL_WOUNDING_STRIKE = 52771,
SPELL_TIME_STOP = 58848,
SPELL_TIME_WARP = 52766,
- SPELL_TIME_STEP_N = 52737,
- SPELL_TIME_STEP_H = 58829,
+ SPELL_TIME_STEP = 52737,
};
enum Events
@@ -87,7 +86,7 @@ public:
void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override
{
- if (spellInfo->Id == SPELL_TIME_STEP_H || spellInfo->Id == SPELL_TIME_STEP_N)
+ if (spellInfo->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_TIME_STEP, me))
{
if (target == me)
return;
@@ -98,7 +97,7 @@ public:
return;
}
warps++;
- me->CastSpell(target, DUNGEON_MODE(SPELL_TIME_STEP_N, SPELL_TIME_STEP_H), true);
+ me->CastSpell(target, SPELL_TIME_STEP, true);
}
}
@@ -119,7 +118,7 @@ public:
events.Repeat(9s);
break;
case EVENT_SPELL_WOUNDING_STRIKE:
- me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_WOUNDING_STRIKE_N, SPELL_WOUNDING_STRIKE_H), false);
+ me->CastSpell(me->GetVictim(), SPELL_WOUNDING_STRIKE, false);
events.Repeat(6s);
break;
case EVENT_SPELL_TIME_STOP:
@@ -130,7 +129,7 @@ public:
Talk(SAY_TIME_WARP);
me->CastSpell(me, SPELL_TIME_WARP, false);
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true))
- me->CastSpell(target, DUNGEON_MODE(SPELL_TIME_STEP_N, SPELL_TIME_STEP_H), true);
+ me->CastSpell(target, SPELL_TIME_STEP, true);
events.Repeat(25s);
break;
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
index bc066fd1f2..eefb3f71b6 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
@@ -22,12 +22,9 @@
enum Spells
{
- SPELL_CARRION_SWARM_N = 52720,
- SPELL_CARRION_SWARM_H = 58852,
- SPELL_MIND_BLAST_N = 52722,
- SPELL_MIND_BLAST_H = 58850,
- SPELL_SLEEP_N = 52721,
- SPELL_SLEEP_H = 58849,
+ SPELL_CARRION_SWARM = 52720,
+ SPELL_MIND_BLAST = 52722,
+ SPELL_SLEEP = 52721,
SPELL_VAMPIRIC_TOUCH = 52723,
};
@@ -145,18 +142,18 @@ public:
switch (events.ExecuteEvent())
{
case EVENT_SPELL_CARRION_SWARM:
- me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_CARRION_SWARM_N, SPELL_CARRION_SWARM_H), false);
+ me->CastSpell(me->GetVictim(), SPELL_CARRION_SWARM, false);
events.Repeat(7s);
break;
case EVENT_SPELL_MIND_BLAST:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true))
- me->CastSpell(target, DUNGEON_MODE(SPELL_MIND_BLAST_N, SPELL_MIND_BLAST_H), false);
+ me->CastSpell(target, SPELL_MIND_BLAST, false);
events.Repeat(6s);
break;
case EVENT_SPELL_SLEEP:
Talk(SAY_SLEEP);
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true))
- me->CastSpell(target, DUNGEON_MODE(SPELL_SLEEP_N, SPELL_SLEEP_H), false);
+ me->CastSpell(target, SPELL_SLEEP, false);
events.Repeat(17s);
break;
case EVENT_SPELL_VAMPIRIC_TOUCH:
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp
index e97fab3633..e1ec2ec439 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp
@@ -21,10 +21,8 @@
enum Spells
{
- SPELL_CONSTRICTING_CHAINS_N = 52696,
- SPELL_CONSTRICTING_CHAINS_H = 58823,
- SPELL_DISEASE_EXPULSION_N = 52666,
- SPELL_DISEASE_EXPULSION_H = 58824,
+ SPELL_CONSTRICTING_CHAINS = 52696,
+ SPELL_DISEASE_EXPULSION = 52666,
SPELL_FRENZY = 58841,
};
@@ -97,7 +95,7 @@ public:
switch (events.ExecuteEvent())
{
case EVENT_SPELL_DISEASE_EXPULSION:
- me->CastSpell(me, DUNGEON_MODE(SPELL_DISEASE_EXPULSION_N, SPELL_DISEASE_EXPULSION_H), false);
+ me->CastSpell(me, SPELL_DISEASE_EXPULSION, false);
events.Repeat(6s);
break;
case EVENT_SPELL_FRENZY:
@@ -106,7 +104,7 @@ public:
break;
case EVENT_SPELL_CONSTRICTING_CHAINS:
if (Unit* pTarget = SelectTarget(SelectTargetMethod::MinThreat, 0, 50.0f, true))
- me->CastSpell(pTarget, DUNGEON_MODE(SPELL_CONSTRICTING_CHAINS_N, SPELL_CONSTRICTING_CHAINS_H), false);
+ me->CastSpell(pTarget, SPELL_CONSTRICTING_CHAINS, false);
events.Repeat(14s);
break;
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp
index 9ea60c7b03..545645d8c7 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp
@@ -23,14 +23,12 @@
enum Spells
{
- SPELL_SHADOW_BOLT_N = 57725,
- SPELL_SHADOW_BOLT_H = 58827,
+ SPELL_SHADOW_BOLT = 57725,
SPELL_STEAL_FLESH_CHANNEL = 52708,
SPELL_STEAL_FLESH_TARGET = 52711,
SPELL_STEAL_FLESH_CASTER = 52712,
SPELL_SUMMON_GHOULS = 52451,
- SPELL_EXPLODE_GHOUL_N = 52480,
- SPELL_EXPLODE_GHOUL_H = 58825,
+ SPELL_EXPLODE_GHOUL = 52480,
SPELL_CURSE_OF_TWISTED_FAITH = 58845,
};
@@ -112,7 +110,7 @@ public:
if (Creature* cr = ObjectAccessor::GetCreature(*me, (*itr)))
if (cr->IsAlive())
{
- me->CastSpell(cr, DUNGEON_MODE(SPELL_EXPLODE_GHOUL_N, SPELL_EXPLODE_GHOUL_H), false);
+ me->CastSpell(cr, SPELL_EXPLODE_GHOUL, false);
return;
}
}
@@ -129,7 +127,7 @@ public:
switch (events.ExecuteEvent())
{
case EVENT_SPELL_SHADOW_BOLT:
- me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_SHADOW_BOLT_N, SPELL_SHADOW_BOLT_H), false);
+ me->CastSpell(me->GetVictim(), SPELL_SHADOW_BOLT, false);
events.Repeat(10s);
break;
case EVENT_SPELL_STEAL_FLESH:
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 cd5818bfec..0403df2f58 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
@@ -141,8 +141,7 @@ enum Spells
{
// Combat spells
SPELL_ARTHAS_AURA = 52442,
- SPELL_ARTHAS_EXORCISM_N = 52445,
- SPELL_ARTHAS_EXORCISM_H = 58822,
+ SPELL_ARTHAS_EXORCISM = 52445,
SPELL_ARTHAS_HOLY_LIGHT = 52444,
// Visuals
@@ -424,7 +423,7 @@ public:
{
Talk(SAY_PHASE201);
actionEvents.ScheduleEvent(EVENT_ACTION_PHASE2, 12s);
- SetRun(false);
+ me->SetWalk(true);
eventInRun = true;
me->SummonCreature(NPC_CITY_MAN, EventPos[EVENT_SRC_TOWN_CITYMAN1]);
@@ -434,14 +433,14 @@ public:
{
waveGroupId = 10;
eventInRun = true;
- SetRun(true);
+ me->SetWalk(false);
actionEvents.ScheduleEvent(EVENT_ACTION_PHASE2 + 9, 10s);
}
else if (param == ACTION_START_TOWN_HALL)
{
Talk(SAY_PHASE301);
SetEscortPaused(false);
- SetRun(false);
+ me->SetWalk(true);
if (Creature* cr = me->SummonCreature(NPC_CITY_MAN3, EventPos[EVENT_SRC_HALL_CITYMAN1]))
{
@@ -460,13 +459,13 @@ public:
{
Talk(SAY_PHASE401);
SetEscortPaused(false);
- SetRun(false);
+ me->SetWalk(true);
}
else if (param == ACTION_START_LAST_CITY)
{
Talk(SAY_PHASE404);
SetEscortPaused(false);
- SetRun(true);
+ me->SetWalk(false);
}
else if (param == ACTION_START_MALGANIS)
{
@@ -480,7 +479,7 @@ public:
}
Talk(SAY_PHASE501);
SetEscortPaused(false);
- SetRun(true);
+ me->SetWalk(false);
}
else if (param == ACTION_KILLED_MALGANIS)
{
@@ -533,7 +532,7 @@ public:
break;
// After intro, in front of bridge
case 3:
- SetRun(true);
+ me->SetWalk(false);
Talk(SAY_PHASE118);
summons.DespawnAll(); // uther, jaina and horses
break;
@@ -574,7 +573,7 @@ public:
if (pInstance)
pInstance->SetData(DATA_ARTHAS_EVENT, COS_PROGRESS_REACHED_TOWN_HALL);
me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
- SetRun(false);
+ me->SetWalk(true);
SetEscortPaused(true);
break;
// Inside Town Hall first scene pos
@@ -600,7 +599,7 @@ public:
break;
// Town Hall, upper floor third fight
case 31:
- SetRun(false);
+ me->SetWalk(true);
SpawnTimeRift();
SpawnTimeRift();
Talk(SAY_PHASE312);
@@ -616,14 +615,14 @@ public:
break;
// Reached book shelf
case 36:
- SetRun(true);
+ me->SetWalk(false);
if (pInstance)
if (GameObject* pGate = pInstance->instance->GetGameObject(pInstance->GetGuidData(DATA_SHKAF_GATE)))
pGate->SetGoState(GO_STATE_ACTIVE);
break;
// Behind secred passage
case 45:
- SetRun(true);
+ me->SetWalk(false);
me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
SetEscortPaused(true);
if (pInstance)
@@ -631,11 +630,11 @@ public:
break;
// Some walk talk
case 47:
- SetRun(false);
+ me->SetWalk(true);
Talk(SAY_PHASE405);
break;
case 48:
- SetRun(true);
+ me->SetWalk(false);
Talk(SAY_PHASE406);
break;
case 53:
@@ -674,7 +673,7 @@ public:
switch (uint32 currentEvent = actionEvents.ExecuteEvent())
{
case EVENT_ACTION_PHASE1:
- SetRun(false);
+ me->SetWalk(true);
me->SummonCreature(NPC_JAINA, EventPos[EVENT_SRC_JAINA], TEMPSUMMON_DEAD_DESPAWN, 180000);
if (Creature* uther = me->SummonCreature(NPC_UTHER, EventPos[EVENT_SRC_UTHER], TEMPSUMMON_DEAD_DESPAWN, 180000))
{
@@ -690,6 +689,7 @@ public:
break;
case EVENT_ACTION_PHASE1+1:
// Start Event
+ me->SetWalk(true);
Start(true);
SetDespawnAtEnd(false);
SetDespawnAtFar(false);
@@ -958,7 +958,7 @@ public:
break;
// After waypoint 23
case EVENT_ACTION_PHASE3+3:
- SetRun(true);
+ me->SetWalk(false);
if (Creature* cr = GetEventNpc(NPC_CITY_MAN3))
me->CastSpell(cr, SPELL_ARTHAS_CRUSADER_STRIKE, true);
ScheduleNextEvent(currentEvent, 2s);
@@ -1177,7 +1177,7 @@ public:
{
case EVENT_COMBAT_EXORCISM:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
- me->CastSpell(target, DUNGEON_MODE(SPELL_ARTHAS_EXORCISM_N, SPELL_ARTHAS_EXORCISM_H), false);
+ me->CastSpell(target, SPELL_ARTHAS_EXORCISM, false);
combatEvents.Repeat(7300ms);
break;
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_lieutenant_drake.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_lieutenant_drake.cpp
index 16ad3de36f..98b15dd76b 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_lieutenant_drake.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_lieutenant_drake.cpp
@@ -48,7 +48,7 @@ struct boss_lieutenant_drake : public BossAI
{
runSecondPath = false;
pathId = me->GetEntry() * 10;
- me->GetMotionMaster()->MovePath(pathId, false);
+ me->GetMotionMaster()->MoveWaypoint(pathId, false);
}
void JustEngagedWith(Unit* /*who*/) override
@@ -114,10 +114,10 @@ struct boss_lieutenant_drake : public BossAI
{
switch (point)
{
- case 7:
+ case 8:
Talk(SAY_ENTER);
break;
- case 10:
+ case 11:
pathId = (me->GetEntry() * 10) + 1;
runSecondPath = true;
break;
@@ -132,7 +132,7 @@ struct boss_lieutenant_drake : public BossAI
if (runSecondPath)
{
runSecondPath = false;
- me->GetMotionMaster()->MovePath(pathId, true);
+ me->GetMotionMaster()->MoveWaypoint(pathId, true);
}
if (!UpdateVictim())
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
index 141fe70d8d..1f15ef140b 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
@@ -316,12 +316,12 @@ public:
events.ScheduleEvent(EVENT_THRALL_EMOTE, 1300ms);
break;
case 9:
- SetRun(false);
+ me->SetWalk(true);
events.ScheduleEvent(EVENT_KILL_ARMORER, 500ms);
events.ScheduleEvent(EVENT_TALK_KILL_ARMORER, 3s);
break;
case 10:
- SetRun(true);
+ me->SetWalk(false);
events.ScheduleEvent(EVENT_DRESSING_KNEEL, 500ms);
events.ScheduleEvent(EVENT_DRESSING_ARMOR, 3s);
events.ScheduleEvent(EVENT_DRESSING_STAND, 4s);
@@ -374,7 +374,7 @@ public:
}
UnMountSelf();
_mounted = false;
- SetRun(false);
+ me->SetWalk(true);
me->SetFacingTo(6.0388f);
break;
case 60:
@@ -386,12 +386,12 @@ public:
}
Talk(SAY_EMOTE_HORSE);
SetEscortPaused(true);
- SetRun(true);
+ me->SetWalk(false);
me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
me->SetFacingTo(4.1364f);
break;
case 64:
- SetRun(false);
+ me->SetWalk(true);
break;
case 67:
events.ScheduleEvent(EVENT_LOOK_1, 1200ms);
@@ -418,12 +418,12 @@ public:
summon->AI()->Talk(SAY_LOOKOUT_INN);
break;
case 92:
- SetRun(false);
+ me->SetWalk(true);
break;
case 94:
summons.DespawnAll();
SetEscortPaused(true);
- SetRun(true);
+ me->SetWalk(false);
instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_TARETHA_MEET);
if (Creature* Taretha = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TARETHA_GUID)))
{
@@ -664,7 +664,7 @@ public:
me->SetFacingTo(2.0071f);
break;
case EVENT_SUMMON_GUARDS:
- SetRun(true);
+ me->SetWalk(false);
me->SummonCreature(NPC_TM_PROTECTOR, 2501.5708f, 699.38086f, 55.64138f, 3.8571f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS);
me->SummonCreature(NPC_TM_LOOKOUT, 2500.7002f, 698.26746f, 55.618248f, 3.7350f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS);
if (Creature* guardsman = me->SummonCreature(NPC_TM_GUARDSMAN, 2500.0908f, 699.9389f, 55.629555f, 4.2935f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS))
@@ -1018,7 +1018,7 @@ public:
{
if (waypointId == 7)
{
- SetRun(false);
+ me->SetWalk(true);
Talk(SAY_TARETHA_FREE);
me->HandleEmoteCommand(EMOTE_ONESHOT_CHEER);
if (Creature* thrall = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THRALL_GUID)))
diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
index 0bd0febc7f..5506a4595b 100644
--- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
@@ -51,7 +51,7 @@ enum Belnistrasz
EVENT_FROST_NOVA = 6,
PATH_ESCORT = 871710,
- POINT_REACH_IDOL = 17,
+ POINT_REACH_IDOL = 18,
QUEST_EXTINGUISHING_THE_IDOL = 3525,
@@ -126,7 +126,7 @@ public:
Talk(SAY_QUEST_ACCEPTED);
me->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_ACTIVE);
- me->GetMotionMaster()->MovePath(PATH_ESCORT, false);
+ me->GetMotionMaster()->MoveWaypoint(PATH_ESCORT, false);
}
}
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp
index d36cf4718b..6d9e71f56d 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp
@@ -70,7 +70,7 @@ enum Emotes
enum Points
{
POINT_AIR = 0,
- POINT_GROUND = 2,
+ POINT_GROUND = 3,
POINT_PARALYZE = 2
};
@@ -92,7 +92,7 @@ struct boss_ayamiss : public BossAI
me->SetReactState(REACT_PASSIVE);
me->SetCanFly(false);
me->SetDisableGravity(false);
- me->GetMotionMaster()->MovePath(me->GetEntry() * 10, false);
+ me->GetMotionMaster()->MoveWaypoint(me->GetEntry() * 10, false);
DoResetThreatList();
scheduler.CancelGroup(GROUP_AIR);
});
@@ -291,7 +291,7 @@ class spell_ayamiss_swarmer_teleport_trigger : public SpellScript
uint32 pathId = data.pathId;
caster->m_Events.AddEventAtOffset([caster, pathId]()
{
- caster->GetMotionMaster()->MovePath(pathId, false);
+ caster->GetMotionMaster()->MoveWaypoint(pathId, false);
}, 1s);
}
@@ -361,7 +361,7 @@ public:
void HandleScript(SpellEffIndex /*effIndex*/)
{
GetCaster()->ToCreature()->GetMotionMaster()->Clear();
- GetCaster()->ToCreature()->GetMotionMaster()->MovePath(_pathId, false);
+ GetCaster()->ToCreature()->GetMotionMaster()->MoveWaypoint(_pathId, false);
}
void Register() override
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
index 10141d57ca..083b9895f3 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
@@ -188,7 +188,7 @@ struct boss_ossirian : public BossAI
{
if (Creature* vortex = me->SummonCreature(NPC_SAND_VORTEX, pos))
{
- vortex->GetMotionMaster()->MovePath(pathIds.front(), true);
+ vortex->GetMotionMaster()->MoveWaypoint(pathIds.front(), true);
pathIds.reverse();
}
}
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
index 21e505b3de..fb921d71e4 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
@@ -209,7 +209,6 @@ struct npc_general_andorov : public npc_escortAI
_initialAttackTimer = 5 * IN_MILLISECONDS;
_paused = false;
- me->SetWalk(false);
Start(false);
me->SetImmuneToNPC(true);
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
index 2d97ba3daf..241a049397 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
@@ -204,7 +204,7 @@ public:
if (me->GetEntry() == NPC_VEM)
{
- me->GetMotionMaster()->MovePath(VEM_WAYPOINT_PATH, true);
+ me->GetMotionMaster()->MoveWaypoint(VEM_WAYPOINT_PATH, true);
}
}
diff --git a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp
index 397e7b611e..0ec6a82de6 100644
--- a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp
+++ b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp
@@ -437,7 +437,7 @@ public:
{
if (Creature* add = instance->GetCreature(*addsAtBase.begin()))
{
- add->GetMotionMaster()->MovePath(PATH_ADDS, false);
+ add->GetMotionMaster()->MoveWaypoint(PATH_ADDS, false);
movedadds.push_back(add->GetGUID());
}
diff --git a/src/server/scripts/Kalimdor/zone_ashenvale.cpp b/src/server/scripts/Kalimdor/zone_ashenvale.cpp
index c4d2c80a6d..d11c837787 100644
--- a/src/server/scripts/Kalimdor/zone_ashenvale.cpp
+++ b/src/server/scripts/Kalimdor/zone_ashenvale.cpp
@@ -121,7 +121,8 @@ public:
{
Talk(SAY_MUG_START1);
me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE);
- npc_escortAI::Start(true, player->GetGUID());
+ me->SetWalk(true);
+ Start(true, player->GetGUID());
}
}
diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
index b2f46e1947..41c22086eb 100644
--- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
@@ -258,7 +258,7 @@ public:
case 28:
player->GroupEventHappens(QUEST_A_CRY_FOR_HELP, me);
_events.ScheduleEvent(EVENT_TALK_END, 2s);
- SetRun(true);
+ me->SetWalk(false);
break;
case 29:
if (Creature* cowlen = me->FindNearestCreature(NPC_COWLEN, 50.0f, true))
@@ -289,7 +289,8 @@ public:
case EVENT_START_ESCORT:
if (Player* player = ObjectAccessor::GetPlayer(*me, _player))
{
- npc_escortAI::Start(true, player->GetGUID());
+ me->SetWalk(true);
+ Start(true, player->GetGUID());
}
_events.ScheduleEvent(EVENT_STAND, 2s);
break;
diff --git a/src/server/scripts/Kalimdor/zone_darkshore.cpp b/src/server/scripts/Kalimdor/zone_darkshore.cpp
index 02b0ae8851..a9e76721e2 100644
--- a/src/server/scripts/Kalimdor/zone_darkshore.cpp
+++ b/src/server/scripts/Kalimdor/zone_darkshore.cpp
@@ -397,7 +397,10 @@ public:
if (quest->GetQuestId() == QUEST_ABSENT_MINDED_PT2)
{
if (npc_escortAI* pEscortAI = CAST_AI(npc_prospector_remtravel::npc_prospector_remtravelAI, creature->AI()))
+ {
+ creature->SetWalk(true);
pEscortAI->Start(false, player->GetGUID());
+ }
creature->SetFaction(FACTION_ESCORTEE_A_NEUTRAL_PASSIVE);
}
diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp
index c6a6ecd935..3b65c2aa14 100644
--- a/src/server/scripts/Kalimdor/zone_desolace.cpp
+++ b/src/server/scripts/Kalimdor/zone_desolace.cpp
@@ -396,7 +396,6 @@ public:
case EVENT_RESTART_ESCORT:
CheckCaravan();
SetDespawnAtEnd(false);
- SetRun(true);
Start(true, ObjectGuid::Empty, 0, false, false, true);
break;
}
diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp
index 8ef469fe10..a91261929b 100644
--- a/src/server/scripts/Kalimdor/zone_moonglade.cpp
+++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp
@@ -384,6 +384,7 @@ public:
AddWaypoint(i, Clintar_spirit_WP[i][0], Clintar_spirit_WP[i][1], Clintar_spirit_WP[i][2], (uint32)Clintar_spirit_WP[i][4]);
}
PlayerGUID = player->GetGUID();
+ me->SetWalk(true);
Start(true, PlayerGUID);
}
return;
diff --git a/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp b/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp
index e846552436..238c12efef 100644
--- a/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp
+++ b/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp
@@ -137,7 +137,10 @@ public:
if (quest->GetQuestId() == QUEST_PROTECT_KAYA)
{
if (npc_escortAI* pEscortAI = CAST_AI(npc_kaya_flathoof::npc_kaya_flathoofAI, creature->AI()))
+ {
+ creature->SetWalk(true);
pEscortAI->Start(true, player->GetGUID());
+ }
creature->AI()->Talk(SAY_START);
creature->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE);
diff --git a/src/server/scripts/Kalimdor/zone_tanaris.cpp b/src/server/scripts/Kalimdor/zone_tanaris.cpp
index bf080107b1..ec4912fb63 100644
--- a/src/server/scripts/Kalimdor/zone_tanaris.cpp
+++ b/src/server/scripts/Kalimdor/zone_tanaris.cpp
@@ -260,6 +260,7 @@ public:
float Radius = 10.0f;
if (me->IsWithinDistInMap(who, Radius))
{
+ me->SetWalk(true);
Start(false, who->GetGUID());
}
}
diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp
index 984180386d..9ace889ba5 100644
--- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp
+++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp
@@ -55,7 +55,10 @@ public:
creature->AI()->Talk(SAY_GIL_START, player);
if (npc_giltharesAI* pEscortAI = CAST_AI(npc_gilthares::npc_giltharesAI, creature->AI()))
+ {
+ creature->SetWalk(true);
pEscortAI->Start(false, player->GetGUID(), quest);
+ }
}
return true;
}
@@ -499,7 +502,7 @@ public:
Talk(SAY_STARTUP1);
break;
case 9:
- SetRun(false);
+ me->SetWalk(true);
break;
case 17:
if (Creature* temp = me->SummonCreature(NPC_MERCENARY, 1128.489f, -3037.611f, 92.701f, 1.472f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000))
@@ -528,7 +531,7 @@ public:
break;
case 18:
Talk(SAY_PROGRESS_1, player);
- SetRun(true);
+ me->SetWalk(false);
break;
}
}
@@ -594,7 +597,10 @@ public:
creature->SetFaction(FACTION_RATCHET);
creature->AI()->Talk(SAY_START);
if (npc_escortAI* pEscortAI = CAST_AI(npc_wizzlecrank_shredder::npc_wizzlecrank_shredderAI, creature->AI()))
+ {
+ creature->SetWalk(true);
pEscortAI->Start(true, player->GetGUID());
+ }
}
return true;
}
diff --git a/src/server/scripts/Kalimdor/zone_thousand_needles.cpp b/src/server/scripts/Kalimdor/zone_thousand_needles.cpp
index 5a3de8eda3..ee2efa9b60 100644
--- a/src/server/scripts/Kalimdor/zone_thousand_needles.cpp
+++ b/src/server/scripts/Kalimdor/zone_thousand_needles.cpp
@@ -66,7 +66,10 @@ public:
creature->SetFaction(FACTION_ESCORTEE_H_NEUTRAL_ACTIVE); //guessed
if (npc_lakota_windsongAI* pEscortAI = CAST_AI(npc_lakota_windsong::npc_lakota_windsongAI, creature->AI()))
+ {
+ creature->SetWalk(true);
pEscortAI->Start(false, player->GetGUID(), quest);
+ }
}
return true;
}
@@ -148,7 +151,10 @@ public:
creature->SetFaction(FACTION_ESCORTEE_H_NEUTRAL_ACTIVE); // guessed
if (npc_paoka_swiftmountainAI* pEscortAI = CAST_AI(npc_paoka_swiftmountain::npc_paoka_swiftmountainAI, creature->AI()))
+ {
+ creature->SetWalk(true);
pEscortAI->Start(false, player->GetGUID(), quest);
+ }
}
return true;
}
diff --git a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp
index 4ccf3b6b37..83484446aa 100644
--- a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp
+++ b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp
@@ -48,6 +48,7 @@ public:
{
if (quest->GetQuestId() == QUEST_CHASING_AME)
{
+ creature->SetWalk(true);
CAST_AI(npc_escortAI, (creature->AI()))->Start(false, player->GetGUID());
creature->AI()->Talk(SAY_READY, player);
creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
diff --git a/src/server/scripts/Kalimdor/zone_winterspring.cpp b/src/server/scripts/Kalimdor/zone_winterspring.cpp
index 4339da1834..26d9d5737a 100644
--- a/src/server/scripts/Kalimdor/zone_winterspring.cpp
+++ b/src/server/scripts/Kalimdor/zone_winterspring.cpp
@@ -286,7 +286,10 @@ public:
creature->SetFaction(FACTION_ESCORT_A_NEUTRAL_PASSIVE);
if (npc_ranshallaAI* escortAI = dynamic_cast<npc_ranshallaAI*>(creature->AI()))
+ {
+ creature->SetWalk(true);
escortAI->Start(false, player->GetGUID(), quest);
+ }
return true;
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
index 8f66ac8ce6..37e2542a24 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
@@ -121,11 +121,11 @@ public:
// Xinef: cannot use pathfinding...
if (summon->GetDistance(477.0f, 618.0f, 771.0f) < 5.0f)
- summon->GetMotionMaster()->MovePath(3000012, false);
+ summon->GetMotionMaster()->MoveWaypoint(3000012, false);
else if (summon->GetDistance(583.0f, 617.0f, 771.0f) < 5.0f)
- summon->GetMotionMaster()->MovePath(3000013, false);
+ summon->GetMotionMaster()->MoveWaypoint(3000013, false);
else if (summon->GetDistance(581.0f, 608.5f, 739.0f) < 5.0f)
- summon->GetMotionMaster()->MovePath(3000014, false);
+ summon->GetMotionMaster()->MoveWaypoint(3000014, false);
}
void KilledUnit(Unit* victim) override
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 d342ea7860..e5444781df 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp
@@ -54,12 +54,9 @@ enum Spells
// FIGHT
SPELL_GIFT_OF_THE_HERALD = 56219,
- SPELL_CYCLONE_STRIKE = 56855, // Self
- SPELL_CYCLONE_STRIKE_H = 60030,
- SPELL_LIGHTNING_BOLT = 56891, // 40Y
- SPELL_LIGHTNING_BOLT_H = 60032, // 40Y
- SPELL_THUNDERSHOCK = 56926, // 30Y
- SPELL_THUNDERSHOCK_H = 60029 // 30Y
+ SPELL_CYCLONE_STRIKE = 56855,
+ SPELL_LIGHTNING_BOLT = 56891,
+ SPELL_THUNDERSHOCK = 56926,
};
enum Events
@@ -461,7 +458,7 @@ struct boss_jedoga_shadowseeker : public BossAI
// Normal phase
case EVENT_JEDOGA_CYCLONE:
{
- DoCastSelf(DUNGEON_MODE(SPELL_CYCLONE_STRIKE, SPELL_CYCLONE_STRIKE_H), false);
+ DoCastSelf(SPELL_CYCLONE_STRIKE, false);
events.Repeat(10s, 14s);
break;
}
@@ -469,7 +466,7 @@ struct boss_jedoga_shadowseeker : public BossAI
{
if (Unit* pTarget = SelectTarget(SelectTargetMethod::Random, 0, 100, true))
{
- DoCast(pTarget, DUNGEON_MODE(SPELL_LIGHTNING_BOLT, SPELL_LIGHTNING_BOLT_H), false);
+ DoCast(pTarget, SPELL_LIGHTNING_BOLT, false);
}
events.Repeat(11s, 15s);
break;
@@ -478,7 +475,7 @@ struct boss_jedoga_shadowseeker : public BossAI
{
if (Unit* pTarget = SelectTarget(SelectTargetMethod::Random, 0, 100, true))
{
- DoCast(pTarget, DUNGEON_MODE(SPELL_THUNDERSHOCK, SPELL_THUNDERSHOCK_H), false);
+ DoCast(pTarget, SPELL_THUNDERSHOCK, false);
}
events.Repeat(16s, 22s);
diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp
index de9d3e176e..46a330a74e 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp
@@ -20,6 +20,7 @@
#include "Player.h"
#include "ScriptedCreature.h"
#include "SpellInfo.h"
+#include "SpellMgr.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "ahnkahet.h"
@@ -38,11 +39,10 @@ enum Spells
SPELL_BEAM_VISUAL = 60342,
SPELL_VANISH = 55964,
SPELL_SHADOWSTEP = 55966,
- SPELL_HOVER_FALL = 60425
+ SPELL_HOVER_FALL = 60425,
+ SPELL_EMBRACE_OF_THE_VAMPYR = 55959,
};
-#define SPELL_EMBRACE_OF_THE_VAMPYR DUNGEON_MODE(55959, 59513)
-
enum Spheres
{
NPC_FLAME_SPHERE_1 = 30106,
@@ -291,7 +291,7 @@ struct boss_taldaram : public BossAI
{
BossAI::DamageTaken(attacker, damage, damageType, school);
- if (me->FindCurrentSpellBySpellId(SPELL_EMBRACE_OF_THE_VAMPYR))
+ if (me->FindCurrentSpellBySpellId(sSpellMgr->GetSpellIdForDifficulty(SPELL_EMBRACE_OF_THE_VAMPYR, me)))
{
vanishDamage += damage;
if (vanishDamage >= DUNGEON_MODE<uint32>(MAX_EMBRACE_DMG, MAX_EMBRACE_DMG_H))
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
index 51f872bb72..8199369ad8 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
@@ -130,9 +130,9 @@ enum Misc
ACTION_DRAKE_DIED = 3,
// Movement points
- POINT_FINAL_TENEBRON = 8,
- POINT_FINAL_SHADRON = 4,
- POINT_FINAL_VESPERON = 4,
+ POINT_FINAL_TENEBRON = 9,
+ POINT_FINAL_SHADRON = 5,
+ POINT_FINAL_VESPERON = 5,
// Lava directions. Its used to identify to which side lava was moving by last time
LAVA_LEFT_SIDE = 0,
@@ -1071,7 +1071,7 @@ public:
Talk(SAY_TENEBRON_RESPOND);
me->SetCanFly(true);
me->SetSpeed(MOVE_FLIGHT, 3.0f);
- me->GetMotionMaster()->MovePath(me->GetEntry() * 10, false);
+ me->GetMotionMaster()->MoveWaypoint(me->GetEntry() * 10, false);
}
}
@@ -1254,7 +1254,7 @@ public:
Talk(SAY_SHADRON_RESPOND);
me->SetCanFly(true);
me->SetSpeed(MOVE_FLIGHT, 3.0f);
- me->GetMotionMaster()->MovePath(me->GetEntry() * 10, false);
+ me->GetMotionMaster()->MoveWaypoint(me->GetEntry() * 10, false);
}
}
@@ -1370,7 +1370,7 @@ public:
Talk(SAY_SHADRON_RESPOND);
me->SetCanFly(true);
me->SetSpeed(MOVE_FLIGHT, 3.0f);
- me->GetMotionMaster()->MovePath(me->GetEntry() * 10, false);
+ me->GetMotionMaster()->MoveWaypoint(me->GetEntry() * 10, false);
}
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
index b8c16d4bf5..affbf1cb2c 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
@@ -199,7 +199,7 @@ public:
WorldPacket data(SMSG_UPDATE_INSTANCE_ENCOUNTER_UNIT, 4);
data << uint32(ENCOUNTER_FRAME_REFRESH_FRAMES);
- _owner->GetSession()->SendPacket(&data);
+ _owner->SendDirectMessage(&data);
return true;
}
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 3aea12fb0a..f8fadd8faf 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
@@ -45,12 +45,9 @@ enum EadricEvents
enum PaletressSpells
{
- SPELL_SMITE_N = 66536,
- SPELL_SMITE_H = 67674,
- SPELL_HOLY_FIRE_N = 66538,
- SPELL_HOLY_FIRE_H = 67676,
- SPELL_RENEW_N = 66537,
- SPELL_RENEW_H = 67675,
+ SPELL_SMITE = 66536,
+ SPELL_HOLY_FIRE = 66538,
+ SPELL_RENEW = 66537,
SPELL_HOLY_NOVA = 66546,
SPELL_SHIELD = 66515,
@@ -58,21 +55,11 @@ enum PaletressSpells
SPELL_SUMMON_MEMORY = 66545,
//Memory
- SPELL_OLD_WOUNDS_N = 66620,
- SPELL_OLD_WOUNDS_H = 67679,
- SPELL_SHADOWS_PAST_N = 66619,
- SPELL_SHADOWS_PAST_H = 67678,
- SPELL_WAKING_NIGHTMARE_N = 66552,
- SPELL_WAKING_NIGHTMARE_H = 67677,
+ SPELL_OLD_WOUNDS = 66620,
+ SPELL_SHADOWS_PAST = 66619,
+ SPELL_WAKING_NIGHTMARE = 66552,
};
-#define SPELL_SMITE DUNGEON_MODE(SPELL_SMITE_N, SPELL_SMITE_H)
-#define SPELL_HOLY_FIRE DUNGEON_MODE(SPELL_HOLY_FIRE_N, SPELL_HOLY_FIRE_H)
-#define SPELL_RENEW DUNGEON_MODE(SPELL_RENEW_N, SPELL_RENEW_H)
-#define SPELL_OLD_WOUNDS DUNGEON_MODE(SPELL_OLD_WOUNDS_N, SPELL_OLD_WOUNDS_H)
-#define SPELL_SHADOWS_PAST DUNGEON_MODE(SPELL_SHADOWS_PAST_N, SPELL_SHADOWS_PAST_H)
-#define SPELL_WAKING_NIGHTMARE DUNGEON_MODE(SPELL_WAKING_NIGHTMARE_N, SPELL_WAKING_NIGHTMARE_H)
-
enum PaletressEvents
{
EVENT_SPELL_SMITE = 1,
@@ -477,29 +464,22 @@ enum ArgentSoldierSpells
// monk
SPELL_FLURRY_OF_BLOWS = 67233,
SPELL_PUMMEL = 67235,
- SPELL_DIVINE_SHIELD_H = 67251,
- SPELL_FINAL_MEDITATION_H = 67255,
+ SPELL_DIVINE_SHIELD = 67251,
+ SPELL_FINAL_MEDITATION = 67255,
// priestess
- SPELL_HOLY_SMITE_N = 36176,
- SPELL_HOLY_SMITE_H = 67289,
+ SPELL_HOLY_SMITE = 36176,
SPELL_FOUNTAIN_OF_LIGHT = 67194,
NPC_FOUNTAIN_OF_LIGHT = 35311,
- SPELL_SHADOW_WORD_PAIN_N = 34941,
- SPELL_SHADOW_WORD_PAIN_H = 34942,
- SPELL_MIND_CONTROL_H = 67229,
+ SPELL_SHADOW_WORD_PAIN = 34941,
+ SPELL_MIND_CONTROL = 67229,
// lightwielder
- SPELL_BLAZING_LIGHT_N = 67247,
- SPELL_BLAZING_LIGHT_H = 67290,
+ SPELL_BLAZING_LIGHT = 67247,
SPELL_CLEAVE = 15284,
- SPELL_UNBALANCING_STRIKE_H = 67237,
+ SPELL_UNBALANCING_STRIKE = 67237,
};
-#define SPELL_HOLY_SMITE DUNGEON_MODE(SPELL_HOLY_SMITE_N, SPELL_HOLY_SMITE_H)
-#define SPELL_SHADOW_WORD_PAIN DUNGEON_MODE(SPELL_SHADOW_WORD_PAIN_N, SPELL_SHADOW_WORD_PAIN_H)
-#define SPELL_BLAZING_LIGHT DUNGEON_MODE(SPELL_BLAZING_LIGHT_N, SPELL_BLAZING_LIGHT_H)
-
enum ArgentSoldierEvents
{
EVENT_MONK_SPELL_FLURRY_OF_BLOWS = 1,
@@ -507,10 +487,10 @@ enum ArgentSoldierEvents
EVENT_PRIESTESS_SPELL_HOLY_SMITE,
EVENT_PRIESTESS_SPELL_SHADOW_WORD_PAIN,
EVENT_PRIESTESS_SPELL_FOUNTAIN_OF_LIGHT,
- EVENT_PRIESTESS_SPELL_MIND_CONTROL_H,
+ EVENT_PRIESTESS_SPELL_MIND_CONTROL,
EVENT_LIGHTWIELDER_SPELL_BLAZING_LIGHT,
EVENT_LIGHTWIELDER_SPELL_CLEAVE,
- EVENT_LIGHTWIELDER_SPELL_UNBALANCING_STRIKE_H,
+ EVENT_LIGHTWIELDER_SPELL_UNBALANCING_STRIKE,
};
class npc_argent_soldier : public CreatureScript
@@ -619,8 +599,8 @@ public:
bCheck = false;
damage = me->GetHealth() - 1;
events.DelayEvents(10s);
- me->CastSpell(me, SPELL_DIVINE_SHIELD_H, true);
- me->CastSpell((Unit*)nullptr, SPELL_FINAL_MEDITATION_H, true);
+ me->CastSpell(me, SPELL_DIVINE_SHIELD, true);
+ me->CastSpell((Unit*)nullptr, SPELL_FINAL_MEDITATION, true);
}
}
@@ -639,13 +619,13 @@ public:
events.RescheduleEvent(EVENT_PRIESTESS_SPELL_SHADOW_WORD_PAIN, 3s, 6s);
events.RescheduleEvent(EVENT_PRIESTESS_SPELL_FOUNTAIN_OF_LIGHT, 8s, 15s);
if (IsHeroic())
- events.RescheduleEvent(EVENT_PRIESTESS_SPELL_MIND_CONTROL_H, 12s);
+ events.RescheduleEvent(EVENT_PRIESTESS_SPELL_MIND_CONTROL, 12s);
break;
case NPC_ARGENT_LIGHTWIELDER:
events.RescheduleEvent(EVENT_LIGHTWIELDER_SPELL_BLAZING_LIGHT, 12s, 15s);
events.RescheduleEvent(EVENT_LIGHTWIELDER_SPELL_CLEAVE, 3s, 5s);
if (IsHeroic())
- events.RescheduleEvent(EVENT_LIGHTWIELDER_SPELL_UNBALANCING_STRIKE_H, 8s, 12s);
+ events.RescheduleEvent(EVENT_LIGHTWIELDER_SPELL_UNBALANCING_STRIKE, 8s, 12s);
break;
}
}
@@ -691,9 +671,9 @@ public:
me->CastSpell((Unit*)nullptr, SPELL_FOUNTAIN_OF_LIGHT, false);
events.Repeat(35s, 45s);
break;
- case EVENT_PRIESTESS_SPELL_MIND_CONTROL_H:
+ case EVENT_PRIESTESS_SPELL_MIND_CONTROL:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true))
- me->CastSpell(target, SPELL_MIND_CONTROL_H, false);
+ me->CastSpell(target, SPELL_MIND_CONTROL, false);
events.Repeat(22s, 30s);
break;
@@ -711,9 +691,9 @@ public:
me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false);
events.Repeat(6s, 8s);
break;
- case EVENT_LIGHTWIELDER_SPELL_UNBALANCING_STRIKE_H:
+ case EVENT_LIGHTWIELDER_SPELL_UNBALANCING_STRIKE:
if (me->GetVictim())
- me->CastSpell(me->GetVictim(), SPELL_UNBALANCING_STRIKE_H, false);
+ me->CastSpell(me->GetVictim(), SPELL_UNBALANCING_STRIKE, false);
events.Repeat(12s, 15s);
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 497b0c42d5..e1178e6763 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp
@@ -18,7 +18,11 @@
#include "CreatureScript.h"
#include "ScriptedCreature.h"
#include "ScriptedEscortAI.h"
+#include "SharedDefines.h"
+#include "Spell.h"
#include "SpellInfo.h"
+#include "SpellScript.h"
+#include "SpellScriptLoader.h"
#include "trial_of_the_champion.h"
enum Spells
@@ -30,49 +34,29 @@ enum Spells
SPELL_BK_KILL_CREDIT = 68663,
// phase 1
- SPELL_PLAGUE_STRIKE_N = 67724,
- SPELL_PLAGUE_STRIKE_H = 67884,
- SPELL_ICY_TOUCH_N = 67718,
- SPELL_ICY_TOUCH_H = 67881,
- SPELL_DEATH_RESPITE_N = 67745,
- SPELL_DEATH_RESPITE_H = 68306,
+ SPELL_PLAGUE_STRIKE = 67724,
+ SPELL_ICY_TOUCH = 67718,
+ SPELL_DEATH_RESPITE = 67745,
SPELL_DEATH_RESPITE_DUMMY = 66798,
- SPELL_OBLITERATE_N = 67725,
- SPELL_OBLITERATE_H = 67883,
+ SPELL_OBLITERATE = 67725,
// phase 2 (+ abilities from phase 1 without death respite)
- SPELL_ARMY_DEAD_N = 67761,
- SPELL_ARMY_DEAD_H = 67874,
- SPELL_DESECRATION_N = 67778,
- SPELL_DESECRATION_H = 67877,
+ SPELL_ARMY_DEAD = 67761,
+ SPELL_DESECRATION = 67778,
SPELL_DESECRATION_SUMMON = 67779,
SPELL_BK_GHOUL_EXPLODE = 67751,
// phase 3
- SPELL_DEATH_BITE_N = 67808,
- SPELL_DEATH_BITE_H = 67875,
- SPELL_MARKED_DEATH_N = 67823,
- SPELL_MARKED_DEATH_H = 67882,
+ SPELL_DEATH_BITE = 67808,
+ SPELL_MARKED_DEATH = 67823,
// ghouls
- SPELL_CLAW_N = 67774,
+ SPELL_CLAW = 67774,
SPELL_CLAW_H = 67879,
- SPELL_EXPLODE_N = 67729,
- SPELL_EXPLODE_H = 67886,
- SPELL_LEAP_N = 67749,
- SPELL_LEAP_H = 67880,
+ SPELL_EXPLODE = 67729,
+ SPELL_EXPLODE_H = 67886,
+ SPELL_LEAP = 67749,
};
-#define SPELL_LEAP DUNGEON_MODE(SPELL_LEAP_N, SPELL_LEAP_H)
-#define SPELL_EXPLODE DUNGEON_MODE(SPELL_EXPLODE_N, SPELL_EXPLODE_H)
-
-#define SPELL_PLAGUE_STRIKE DUNGEON_MODE(SPELL_PLAGUE_STRIKE_N, SPELL_PLAGUE_STRIKE_H)
-#define SPELL_ICY_TOUCH DUNGEON_MODE(SPELL_ICY_TOUCH_N, SPELL_ICY_TOUCH_H)
-#define SPELL_DEATH_RESPITE DUNGEON_MODE(SPELL_DEATH_RESPITE_N, SPELL_DEATH_RESPITE_H)
-#define SPELL_OBLITERATE DUNGEON_MODE(SPELL_OBLITERATE_N, SPELL_OBLITERATE_H)
-#define SPELL_ARMY_DEAD DUNGEON_MODE(SPELL_ARMY_DEAD_N, SPELL_ARMY_DEAD_H)
-#define SPELL_DESECRATION DUNGEON_MODE(SPELL_DESECRATION_N, SPELL_DESECRATION_H)
-#define SPELL_DEATH_BITE DUNGEON_MODE(SPELL_DEATH_BITE_N, SPELL_DEATH_BITE_H)
-#define SPELL_MARKED_DEATH DUNGEON_MODE(SPELL_MARKED_DEATH_N, SPELL_MARKED_DEATH_H)
enum Events
{
@@ -339,7 +323,6 @@ public:
void Reset() override
{
- me->SetWalk(false);
Start(false, ObjectGuid::Empty, nullptr);
SetDespawnAtEnd(true);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -421,27 +404,6 @@ public:
}
}
- void SpellHitTarget(Unit* target, SpellInfo const* spell) override
- {
- switch (spell->Id)
- {
- case SPELL_CLAW_N:
- case SPELL_CLAW_H:
- DoResetThreatList();
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f))
- {
- me->AddThreat(target, 100.0f);
- AttackStart(target);
- }
- break;
- case SPELL_EXPLODE_H:
- if (target && target->IsPlayer())
- if (pInstance)
- pInstance->SetData(DATA_ACHIEV_IVE_HAD_WORSE, 0);
- break;
- }
- }
-
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
@@ -468,7 +430,7 @@ public:
break;
case 2: // claw
if (Unit* target = me->GetVictim())
- me->CastSpell(target, SPELL_CLAW_N, false);
+ me->CastSpell(target, SPELL_CLAW, false);
events.Repeat(6s, 8s);
break;
}
@@ -483,9 +445,51 @@ public:
}
};
+//67774,67879
+class spell_black_knight_ghoul_claw : public SpellScript
+{
+ PrepareSpellScript(spell_black_knight_ghoul_claw);
+
+ void HandleSpellHit(SpellEffIndex /*effIndex*/)
+ {
+ if (Unit* caster = GetCaster())
+ {
+ GetCaster()->GetThreatMgr().ResetAllThreat();
+ if (Unit* target = caster->GetAI()->SelectTarget(SelectTargetMethod::Random, 0, 30.0f))
+ {
+ caster->AddThreat(target, 100.0f);
+ caster->GetAI()->AttackStart(target);
+ }
+ }
+ }
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_black_knight_ghoul_claw::HandleSpellHit, EFFECT_0, SPELL_EFFECT_WEAPON_PERCENT_DAMAGE);
+ }
+};
+
+//67886
+class spell_black_knight_ghoul_explode : public SpellScript
+{
+ PrepareSpellScript(spell_black_knight_ghoul_explode);
+
+ void HandleSpellHit(SpellEffIndex /*effIndex*/)
+ {
+ if (GetHitUnit()->IsPlayer())
+ if (InstanceScript* instance = GetCaster()->GetInstanceScript())
+ instance->SetData(DATA_ACHIEV_IVE_HAD_WORSE, 0);
+ }
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_black_knight_ghoul_explode::HandleSpellHit, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ }
+};
+
void AddSC_boss_black_knight()
{
new boss_black_knight();
new npc_black_knight_skeletal_gryphon();
new npc_black_knight_ghoul();
+ RegisterSpellScript(spell_black_knight_ghoul_claw);
+ RegisterSpellScript(spell_black_knight_ghoul_explode);
}
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 7262a5528a..93d599a7b4 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
@@ -56,38 +56,30 @@ enum MountSpells
enum ChampionSpells
{
// Mage (Ambrose Boltspark, Eressea Dawnsinger)
- SPELL_FIREBALL_N = 66042,
- SPELL_FIREBALL_H = 68310,
- SPELL_BLAST_WAVE_N = 66044,
- SPELL_BLAST_WAVE_H = 68312,
+ SPELL_FIREBALL = 66042,
+ SPELL_BLAST_WAVE = 66044,
SPELL_HASTE = 66045,
- SPELL_POLYMORPH_N = 66043,
- SPELL_POLYMORPH_H = 68311,
+ SPELL_POLYMORPH = 66043,
// Shaman (Colosos, Runok Wildmane)
- SPELL_CHAIN_LIGHTNING_N = 67529,
- SPELL_CHAIN_LIGHTNING_H = 68319,
+ SPELL_CHAIN_LIGHTNING = 67529,
SPELL_EARTH_SHIELD = 67530,
- SPELL_HEALING_WAVE_N = 67528,
- SPELL_HEALING_WAVE_H = 68318,
+ SPELL_HEALING_WAVE = 67528,
SPELL_HEX_OF_MENDING = 67534,
// Hunter (Jaelyne Evensong, Zul'tore)
SPELL_DISENGAGE = 68339,
SPELL_LIGHTNING_ARROWS = 66083,
SPELL_MULTI_SHOT = 66081,
- SPELL_SHOOT_N = 65868,
- SPELL_SHOOT_H = 67988,
+ SPELL_SHOOT = 65868,
// Rogue (Lana Stouthammer Evensong, Deathstalker Visceri)
- SPELL_EVISCERATE_N = 67709,
- SPELL_EVISCERATE_H = 68317,
+ SPELL_EVISCERATE = 67709,
SPELL_FAN_OF_KNIVES = 67706,
SPELL_POISON_BOTTLE = 67701,
// Warrior (Marshal Jacob Alerius, Mokra the Skullcrusher)
- SPELL_MORTAL_STRIKE_N = 68783,
- SPELL_MORTAL_STRIKE_H = 68784,
+ SPELL_MORTAL_STRIKE = 68783,
SPELL_BLADESTORM = 63784,
SPELL_INTERCEPT = 67540,
SPELL_ROLLING_THROW = 67546, // not implemented yet!
@@ -98,15 +90,6 @@ enum Texts
SAY_TRAMPLED = 0,
};
-#define SPELL_FIREBALL DUNGEON_MODE(SPELL_FIREBALL_N, SPELL_FIREBALL_H)
-#define SPELL_BLAST_WAVE DUNGEON_MODE(SPELL_BLAST_WAVE_N, SPELL_BLAST_WAVE_H)
-#define SPELL_POLYMORPH DUNGEON_MODE(SPELL_POLYMORPH_N, SPELL_POLYMORPH_H)
-#define SPELL_CHAIN_LIGHTNING DUNGEON_MODE(SPELL_CHAIN_LIGHTNING_N, SPELL_CHAIN_LIGHTNING_H)
-#define SPELL_HEALING_WAVE DUNGEON_MODE(SPELL_HEALING_WAVE_N, SPELL_HEALING_WAVE_H)
-#define SPELL_SHOOT DUNGEON_MODE(SPELL_SHOOT_N, SPELL_SHOOT_H)
-#define SPELL_EVISCERATE DUNGEON_MODE(SPELL_EVISCERATE_N, SPELL_EVISCERATE_H)
-#define SPELL_MORTAL_STRIKE DUNGEON_MODE(SPELL_MORTAL_STRIKE_N, SPELL_MORTAL_STRIKE_H)
-
enum MountEvents
{
EVENT_NONE = 0,
@@ -213,7 +196,7 @@ public:
data << uint32(VEHICLE_SPELL_RIDE_HARDCODED);
data << uint8(SPELL_FAILED_CUSTOM_ERROR);
data << uint32(SPELL_CUSTOM_ERROR_MUST_HAVE_LANCE_EQUIPPED);
- clicker->ToPlayer()->GetSession()->SendPacket(&data);
+ clicker->ToPlayer()->SendDirectMessage(&data);
return false;
}
};
@@ -549,7 +532,6 @@ public:
return;
}
- me->SetWalk(false);
Start(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 0e116a4288..87c8b3ae8b 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
@@ -19,6 +19,7 @@
#include "PassiveAI.h"
#include "Player.h"
#include "ScriptedCreature.h"
+#include "SharedDefines.h"
#include "SpellAuraEffects.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
@@ -161,7 +162,7 @@ public:
events.Reset();
bIntro = false;
bPhase3 = false;
- me->ApplySpellImmune(0, IMMUNITY_ID, RAID_MODE(66193, 67855, 67856, 67857), true);
+ me->ApplySpellImmune(0, IMMUNITY_ID, sSpellMgr->GetSpellIdForDifficulty(SPELL_PERMAFROST, me), true);
me->m_SightDistance = 90.0f; // for MoveInLineOfSight distance
}
@@ -501,7 +502,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- me->CastSpell(me, RAID_MODE(SPELL_TRAITOR_KING_10, SPELL_TRAITOR_KING_25, SPELL_TRAITOR_KING_10, SPELL_TRAITOR_KING_25), true);
+ me->CastSpell(me, SPELL_TRAITOR_KING, true);
me->m_Events.AddEventAtOffset(new HideNpcEvent(*me), 5s);
}
@@ -679,7 +680,7 @@ public:
events.Repeat(30s, 45s);
break;
case EVENT_SUBMERGE:
- if (HealthBelowPct(80) && !me->HasAura(RAID_MODE(66193, 67855, 67856, 67857))) // not having permafrost - allow submerge
+ if (HealthBelowPct(80) && !me->HasAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_PERMAFROST, me))) // not having permafrost - allow submerge
{
me->GetMotionMaster()->MoveIdle();
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h
index edc742da4b..8b107342b6 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h
@@ -351,8 +351,7 @@ enum EventSpells
SPELL_JORMUNGAR_ACHIEV = 68523,
SPELL_FACTION_CHAMPIONS_KILL_CREDIT = 68184,
SPELL_RESILIENCE_WILL_FIX_IT_CREDIT = 68620,
- SPELL_TRAITOR_KING_10 = 68186,
- SPELL_TRAITOR_KING_25 = 68515,
+ SPELL_TRAITOR_KING = 68186,
SPELL_PORTAL_TO_DALARAN = 53142,
};
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp
index a3e7c184ad..c2eb0864b9 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp
@@ -140,7 +140,7 @@ public:
{
for (int8 i = 0; outroPositions[i].entry[GetTeamIdInInstance()] != 0; ++i)
if (Creature* summon = instance->SummonCreature(outroPositions[i].entry[GetTeamIdInInstance()], outroPositions[i].startPosition))
- summon->GetMotionMaster()->MovePath(outroPositions[i].pathId, false);
+ summon->GetMotionMaster()->MoveWaypoint(outroPositions[i].pathId, false);
}
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp
index 33c5167f22..ba89cbbebf 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp
@@ -18,6 +18,7 @@
#include "CreatureScript.h"
#include "halls_of_reflection.h"
#include "ScriptedCreature.h"
+#include "SpellMgr.h"
enum Yells
{
@@ -44,7 +45,7 @@ enum Events
EVENT_UNROOT,
};
-const uint32 hopelessnessId[3][2] = { {72395, 72390}, {72396, 72391}, {72397, 72393} };
+const uint32 hopelessnessId[3] = { 72395, 72396, 72397 };
class boss_falric : public CreatureScript
{
@@ -143,8 +144,9 @@ public:
if ((uiHopelessnessCount == 0 && HealthBelowPct(67)) || (uiHopelessnessCount == 1 && HealthBelowPct(34)) || (uiHopelessnessCount == 2 && HealthBelowPct(11)))
{
if (uiHopelessnessCount)
- me->RemoveOwnedAura(hopelessnessId[uiHopelessnessCount - 1][DUNGEON_MODE(0, 1)]);
- me->CastSpell((Unit*)nullptr, hopelessnessId[uiHopelessnessCount][DUNGEON_MODE(0, 1)], true);
+ me->RemoveOwnedAura(sSpellMgr->GetSpellIdForDifficulty(hopelessnessId[uiHopelessnessCount - 1], me));
+
+ me->CastSpell((Unit*)nullptr, hopelessnessId[uiHopelessnessCount], true);
++uiHopelessnessCount;
}
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 0811908824..3b145dc891 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp
@@ -19,7 +19,9 @@
#include "CreatureScript.h"
#include "Player.h"
#include "ScriptedCreature.h"
+#include "SharedDefines.h"
#include "SpellAuras.h"
+#include "SpellMgr.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "pit_of_saron.h"
@@ -54,11 +56,11 @@ enum Spells
SPELL_CHILLING_WAVE = 68778,
SPELL_DEEP_FREEZE = 70381,
-};
-#define SPELL_FORGE_BLADE RAID_MODE(68774, 70334)
-#define SPELL_FORGE_MACE RAID_MODE(68785, 70335)
-#define SPELL_SARONITE_TRIGGERED RAID_MODE(68789, 70851)
+ SPELL_FORGE_BLADE = 68774,
+ SPELL_FORGE_MACE = 68785,
+ SPELL_SARONITE_TRIGGERED = 68789,
+};
enum Events
{
@@ -154,21 +156,45 @@ public:
if (phase == 1)
{
me->SetControlled(true, UNIT_STATE_ROOT);
- me->CastSpell(me, SPELL_FORGE_BLADE, false);
+ if (me->CastSpell(me, SPELL_FORGE_BLADE, false) == SPELL_CAST_OK)
+ {
+ events.RescheduleEvent(EVENT_SPELL_CHILLING_WAVE, 10s);
+ SetEquipmentSlots(false, EQUIP_ID_SWORD);
+ me->SetReactState(REACT_AGGRESSIVE);
+ me->SetControlled(false, UNIT_STATE_ROOT);
+ me->DisableRotate(false);
+ if (me->GetVictim())
+ {
+ AttackStart(me->GetVictim());
+ me->SetTarget(me->GetVictim()->GetGUID());
+ }
+ }
Talk(SAY_HP_66);
}
else if (phase == 2)
{
me->SetControlled(true, UNIT_STATE_ROOT);
- me->RemoveAurasDueToSpell(SPELL_FORGE_BLADE);
- me->CastSpell(me, SPELL_FORGE_MACE, false);
+ me->RemoveAurasDueToSpell(sSpellMgr->GetSpellIdForDifficulty(SPELL_FORGE_BLADE, me));
+ if (me->CastSpell(me, SPELL_FORGE_MACE, false) == SPELL_CAST_OK)
+ {
+ events.RescheduleEvent(EVENT_SPELL_DEEP_FREEZE, 10s);
+ SetEquipmentSlots(false, EQUIP_ID_MACE);
+ me->SetReactState(REACT_AGGRESSIVE);
+ me->SetControlled(false, UNIT_STATE_ROOT);
+ me->DisableRotate(false);
+ if (me->GetVictim())
+ {
+ AttackStart(me->GetVictim());
+ me->SetTarget(me->GetVictim()->GetGUID());
+ }
+ }
Talk(SAY_HP_33);
}
}
void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override
{
- if (spell->Id == uint32(SPELL_SARONITE_TRIGGERED))
+ if (spell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_SARONITE_TRIGGERED, me))
{
if (bCanSayBoulderHit)
{
@@ -176,32 +202,6 @@ public:
Talk(SAY_BOULDER_HIT);
}
}
- if (spell->Id == uint32(SPELL_FORGE_BLADE))
- {
- events.RescheduleEvent(EVENT_SPELL_CHILLING_WAVE, 10s);
- SetEquipmentSlots(false, EQUIP_ID_SWORD);
- me->SetReactState(REACT_AGGRESSIVE);
- me->SetControlled(false, UNIT_STATE_ROOT);
- me->DisableRotate(false);
- if (me->GetVictim())
- {
- AttackStart(me->GetVictim());
- me->SetTarget(me->GetVictim()->GetGUID());
- }
- }
- else if (spell->Id == uint32(SPELL_FORGE_MACE))
- {
- events.RescheduleEvent(EVENT_SPELL_DEEP_FREEZE, 10s);
- SetEquipmentSlots(false, EQUIP_ID_MACE);
- me->SetReactState(REACT_AGGRESSIVE);
- me->SetControlled(false, UNIT_STATE_ROOT);
- me->DisableRotate(false);
- if (me->GetVictim())
- {
- AttackStart(me->GetVictim());
- me->SetTarget(me->GetVictim()->GetGUID());
- }
- }
}
void UpdateAI(uint32 diff) override
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
index f18fecfa2f..6bf24b4ab6 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
@@ -369,7 +369,7 @@ public:
if (pInstance)
{
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_TYRANNUS_EVENT_GUID)))
- c->GetMotionMaster()->MovePath(PATH_BEGIN_VALUE + 10, false);
+ c->GetMotionMaster()->MoveWaypoint(PATH_BEGIN_VALUE + 10, false);
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_LEADER_FIRST_GUID)))
c->AI()->Talk(c->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_KRICK_2 : SAY_SYLVANAS_KRICK_2);
}
@@ -440,7 +440,7 @@ public:
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_LEADER_FIRST_GUID)))
{
c->AI()->Talk(c->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_KRICK_3 : SAY_SYLVANAS_KRICK_3);
- c->GetMotionMaster()->MovePath(PATH_BEGIN_VALUE + 11, false);
+ c->GetMotionMaster()->MoveWaypoint(PATH_BEGIN_VALUE + 11, false);
}
}
me->setActive(false);
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 4ff7de00c7..007e52c576 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
@@ -108,7 +108,7 @@ public:
{
c->RemoveAura(46598);
c->GetMotionMaster()->Clear();
- c->GetMotionMaster()->MovePath(PATH_BEGIN_VALUE + 18, true);
+ c->GetMotionMaster()->MoveWaypoint(PATH_BEGIN_VALUE + 18, true);
}
me->SetHomePosition(exitPos);
me->GetMotionMaster()->MoveJump(exitPos, 10.0f, 2.0f);
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
index b3174fb378..e8a2d9253a 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
@@ -551,7 +551,7 @@ public:
while (FBSData[i].entry)
{
if (Creature* c = me->SummonCreature(FBSData[i].entry, 688.69f + i * 1.8f, FBSSpawnPos.GetPositionY() + (float)irand(-2, 2), FBSSpawnPos.GetPositionZ(), 3 * M_PI / 2))
- c->GetMotionMaster()->MovePath(FBSData[i].pathId, false);
+ c->GetMotionMaster()->MoveWaypoint(FBSData[i].pathId, false);
++i;
}
events.RescheduleEvent(2, 3s);
@@ -1200,16 +1200,16 @@ public:
switch (id)
{
- case 0:
+ case 1:
Talk(me->GetEntry() == NPC_JAINA_PART2 ? SAY_JAINA_OUTRO_2 : SAY_SYLVANAS_OUTRO_2);
break;
- case 1:
+ case 2:
if (me->GetEntry() == NPC_JAINA_PART2)
{
Talk(SAY_JAINA_OUTRO_3);
}
break;
- case 6:
+ case 7:
me->SetNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
if (GameObject* g = me->FindNearestGameObject(GO_HOR_PORTCULLIS, 50.0f))
g->SetGoState(GO_STATE_ACTIVE);
@@ -1284,7 +1284,7 @@ public:
events.RescheduleEvent(8, 2s);
break;
case 8:
- me->GetMotionMaster()->MovePath(me->GetEntry() == NPC_JAINA_PART2 ? PATH_BEGIN_VALUE + 16 : PATH_BEGIN_VALUE + 17, false);
+ me->GetMotionMaster()->MoveWaypoint(me->GetEntry() == NPC_JAINA_PART2 ? PATH_BEGIN_VALUE + 16 : PATH_BEGIN_VALUE + 17, false);
break;
case 10:
if (Creature* x = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_MARTIN_OR_GORKUN_GUID)))
diff --git a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp
index 492ceb0081..50f1e59198 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp
@@ -49,175 +49,124 @@ enum Yells
enum Events
{
- EVENT_STAMPEDE = 1,
- EVENT_WHIRLING_SLASH = 2,
- EVENT_PUNCTURE = 3,
- EVENT_ENRAGE = 4,
- EVENT_IMPALING_CHARGE = 5,
- EVENT_UNSUMMON_RHINO = 6,
- EVENT_STOMP = 7,
- EVENT_KILL_TALK = 8
+ EVENT_KILL_TALK = 1
};
-class boss_gal_darah : public CreatureScript
+struct boss_gal_darah : public BossAI
{
-public:
- boss_gal_darah() : CreatureScript("boss_gal_darah") { }
+ boss_gal_darah(Creature* creature) : BossAI(creature, DATA_GAL_DARAH) { }
- CreatureAI* GetAI(Creature* creature) const override
+ void Reset() override
{
- return GetGundrakAI<boss_gal_darahAI>(creature);
+ BossAI::Reset();
+ DoCastSelf(SPELL_START_VISUAL);
+ impaledList.clear();
+ _stampedeVictim.Clear();
}
- struct boss_gal_darahAI : public BossAI
+ void JustReachedHome() override
{
- boss_gal_darahAI(Creature* creature) : BossAI(creature, DATA_GAL_DARAH)
- {
- }
-
- uint8 phaseCounter;
- GuidSet impaledList;
-
- void Reset() override
- {
- BossAI::Reset();
- impaledList.clear();
- phaseCounter = 0;
- }
+ BossAI::JustReachedHome();
+ DoCastSelf(SPELL_START_VISUAL);
+ }
- void InitializeAI() override
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override
+ {
+ if (spellInfo->Id == SPELL_TRANSFORM_TO_RHINO)
{
- BossAI::InitializeAI();
- me->CastSpell(me, SPELL_START_VISUAL, false);
+ ScheduleTimedEvent(8s, 11s, [&] {
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 100.0f, true))
+ {
+ DoCast(target, SPELL_IMPALING_CHARGE);
+ impaledList.insert(target->GetGUID());
+ }
+ }, 16s, 17s);
+
+ ScheduleTimedEvent(6s, 8s, [&] {
+ DoCastSelf(SPELL_ENRAGE);
+ }, 16s, 17s);
+
+ ScheduleTimedEvent(7s, 10s, [&] {
+ DoCastAOE(SPELL_STOMP);
+ }, 10s, 12s);
+
+ me->m_Events.AddEventAtOffset([&] {
+ scheduler.CancelAll();
+ DoCastSelf(SPELL_TRANSFORM_TO_TROLL);
+ }, 32s);
}
-
- void JustReachedHome() override
+ else if (spellInfo->Id == SPELL_TRANSFORM_TO_TROLL)
{
- BossAI::JustReachedHome();
- me->CastSpell(me, SPELL_START_VISUAL, false);
+ ScheduleEvents();
}
+ }
- void ScheduleEvents(bool troll)
- {
- events.Reset();
- if (troll)
- {
- events.RescheduleEvent(EVENT_STAMPEDE, 10s);
- events.RescheduleEvent(EVENT_WHIRLING_SLASH, 21s);
- }
- else
+ void ScheduleEvents()
+ {
+ ScheduleTimedEvent(10s, [&] {
+ Talk(SAY_SUMMON_RHINO);
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f))
{
- events.RescheduleEvent(EVENT_PUNCTURE, 10s);
- events.RescheduleEvent(EVENT_ENRAGE, 15s);
- events.RescheduleEvent(EVENT_IMPALING_CHARGE, 21s);
- events.RescheduleEvent(EVENT_STOMP, 5s);
+ _stampedeVictim = target->GetGUID();
+ DoCast(target, SPELL_STAMPEDE);
}
- }
+ }, 15s);
- void JustEngagedWith(Unit* who) override
- {
- Talk(SAY_AGGRO);
- BossAI::JustEngagedWith(who);
-
- ScheduleEvents(true);
- me->RemoveAurasDueToSpell(SPELL_START_VISUAL);
- me->InterruptNonMeleeSpells(true);
- }
+ ScheduleTimedEvent(10s, 16s, [&] {
+ DoCastVictim(SPELL_PUNCTURE);
+ }, 15s, 18s);
- void JustSummoned(Creature* summon) override
- {
- uint32 despawnTime = 0;
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 60.0f, true))
- {
- summon->CastSpell(target, SPELL_STAMPEDE_DMG, true);
- despawnTime = (summon->GetDistance(target) / 40.0f * 1000) + 500;
- }
+ ScheduleTimedEvent(11s, 19s, [&] {
+ DoCastAOE(SPELL_WHIRLING_SLASH);
+ }, 17s, 19s);
- summon->DespawnOrUnsummon(Milliseconds(despawnTime));
- }
+ me->m_Events.AddEventAtOffset([&] {
+ scheduler.CancelAll();
+ DoCastSelf(SPELL_TRANSFORM_TO_RHINO);
+ }, 32s);
+ }
- uint32 GetData(uint32 /*type*/) const override
- {
- return impaledList.size();
- }
+ void JustEngagedWith(Unit* who) override
+ {
+ Talk(SAY_AGGRO);
+ BossAI::JustEngagedWith(who);
- void JustDied(Unit* killer) override
- {
- Talk(SAY_DEATH);
- BossAI::JustDied(killer);
- }
+ ScheduleEvents();
+ me->RemoveAurasDueToSpell(SPELL_START_VISUAL);
+ me->InterruptNonMeleeSpells(true);
+ }
- void KilledUnit(Unit*) override
- {
- if (!events.HasTimeUntilEvent(EVENT_KILL_TALK))
- {
- Talk(SAY_SLAY);
- events.ScheduleEvent(EVENT_KILL_TALK, 6s);
- }
- }
+ void JustSummoned(Creature* summon) override
+ {
+ if (Unit* target = ObjectAccessor::GetUnit(*me, _stampedeVictim))
+ summon->CastSpell(target, SPELL_STAMPEDE_DMG, true);
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ summons.Summon(summon);
+ }
- events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING | UNIT_STATE_CHARGING))
- return;
+ uint32 GetData(uint32 /*type*/) const override
+ {
+ return impaledList.size();
+ }
- switch (events.ExecuteEvent())
- {
- case EVENT_STAMPEDE:
- Talk(SAY_SUMMON_RHINO);
- me->CastSpell(me->GetVictim(), SPELL_STAMPEDE, false);
- events.ScheduleEvent(EVENT_STAMPEDE, 15s);
- break;
- case EVENT_WHIRLING_SLASH:
- if (++phaseCounter >= 3)
- {
- ScheduleEvents(false);
- me->CastSpell(me, SPELL_TRANSFORM_TO_RHINO, false);
- Talk(SAY_TRANSFORM_1);
- phaseCounter = 0;
- return;
- }
- events.ScheduleEvent(EVENT_WHIRLING_SLASH, 21s);
- me->CastSpell(me, SPELL_WHIRLING_SLASH, false);
- break;
- case EVENT_PUNCTURE:
- me->CastSpell(me->GetVictim(), SPELL_PUNCTURE, false);
- events.ScheduleEvent(EVENT_PUNCTURE, 8s);
- break;
- case EVENT_ENRAGE:
- me->CastSpell(me, SPELL_ENRAGE, false);
- events.ScheduleEvent(EVENT_ENRAGE, 20s);
- break;
- case EVENT_STOMP:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true))
- me->CastSpell(target, SPELL_STOMP, false);
- events.ScheduleEvent(EVENT_STOMP, 20s);
- break;
- case EVENT_IMPALING_CHARGE:
- if (++phaseCounter >= 3)
- {
- ScheduleEvents(true);
- me->CastSpell(me, SPELL_TRANSFORM_TO_TROLL, false);
- Talk(SAY_TRANSFORM_2);
- phaseCounter = 0;
- return;
- }
- events.ScheduleEvent(EVENT_IMPALING_CHARGE, 21s);
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true, false))
- {
- me->CastSpell(target, SPELL_IMPALING_CHARGE, false);
- impaledList.insert(target->GetGUID());
- }
- break;
- }
+ void JustDied(Unit* killer) override
+ {
+ Talk(SAY_DEATH);
+ BossAI::JustDied(killer);
+ }
- DoMeleeAttackIfReady();
+ void KilledUnit(Unit*) override
+ {
+ if (!events.HasTimeUntilEvent(EVENT_KILL_TALK))
+ {
+ Talk(SAY_SLAY);
+ events.ScheduleEvent(EVENT_KILL_TALK, 6s);
}
- };
+ }
+
+private:
+ GuidSet impaledList;
+ ObjectGuid _stampedeVictim;
};
class spell_galdarah_impaling_charge : public SpellScript
@@ -265,9 +214,7 @@ class spell_galdarah_transform : public SpellScript
class achievement_share_the_love : public AchievementCriteriaScript
{
public:
- achievement_share_the_love() : AchievementCriteriaScript("achievement_share_the_love")
- {
- }
+ achievement_share_the_love() : AchievementCriteriaScript("achievement_share_the_love") { }
bool OnCheck(Player* /*player*/, Unit* target, uint32 /*criteria_id*/) override
{
@@ -280,7 +227,7 @@ public:
void AddSC_boss_gal_darah()
{
- new boss_gal_darah();
+ RegisterGundrakCreatureAI(boss_gal_darah);
RegisterSpellScript(spell_galdarah_impaling_charge);
RegisterSpellScript(spell_galdarah_transform);
new achievement_share_the_love();
diff --git a/src/server/scripts/Northrend/Gundrak/gundrak.h b/src/server/scripts/Northrend/Gundrak/gundrak.h
index ea340b4c0c..7e0ffa41a0 100644
--- a/src/server/scripts/Northrend/Gundrak/gundrak.h
+++ b/src/server/scripts/Northrend/Gundrak/gundrak.h
@@ -71,4 +71,6 @@ inline AI* GetGundrakAI(T* obj)
return GetInstanceAI<AI>(obj, GundrakScriptName);
}
+#define RegisterGundrakCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetGundrakAI)
+
#endif
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
index fdf3165791..4ae1a2e36a 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
@@ -118,9 +118,6 @@ enum Spells
SPELL_ACHIEVEMENT = 72928,
};
-// Helper to get id of the aura on different modes (HasAura(baseId) wont work)
-#define BOILING_BLOOD_HELPER RAID_MODE<int32>(72385, 72441, 72442, 72443)
-
enum EventTypes
{
EVENT_INTRO_ALLIANCE_1 = 1,
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
index 11d0142cec..ff86ed409d 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
@@ -19,7 +19,10 @@
#include "CreatureScript.h"
#include "ObjectMgr.h"
#include "ScriptedCreature.h"
+#include "SharedDefines.h"
#include "SpellAuras.h"
+#include "SpellInfo.h"
+#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "icecrown_citadel.h"
#include "SpellAuraEffects.h"
@@ -57,10 +60,6 @@ enum Spells
SPELL_PLAGUE_STENCH = 71805,
};
-// Used for HasAura checks
-#define PUNGENT_BLIGHT_HELPER RAID_MODE<uint32>(69195, 71219, 73031, 73032)
-#define INOCULATED_HELPER RAID_MODE<uint32>(69291, 72101, 72102, 72103)
-
uint32 const gaseousBlight[3] = {69157, 69162, 69164};
uint32 const gaseousBlightVisual[3] = {69126, 69152, 69154};
@@ -168,19 +167,6 @@ public:
Talk(SAY_KILL);
}
- void SpellHitTarget(Unit* target, SpellInfo const* spell) override
- {
- if (spell->Id == PUNGENT_BLIGHT_HELPER)
- target->RemoveAurasDueToSpell(INOCULATED_HELPER);
- else if (Player* p = target->ToPlayer())
- {
- // Gaseous Blight damage
- if (((spell->Id == 69159 || spell->Id == 70136 || spell->Id == 69161 || spell->Id == 70139 || spell->Id == 69163 || spell->Id == 70469) && p->GetQuestStatus(QUEST_RESIDUE_RENDEZVOUS_10) == QUEST_STATUS_INCOMPLETE) ||
- ((spell->Id == 70135 || spell->Id == 70138 || spell->Id == 70468 || spell->Id == 70137 || spell->Id == 70140 || spell->Id == 70470) && p->GetQuestStatus(QUEST_RESIDUE_RENDEZVOUS_25) == QUEST_STATUS_INCOMPLETE))
- p->CastSpell(p, SPELL_ORANGE_BLIGHT_RESIDUE, true);
- }
- }
-
void RemoveBlight()
{
if (Creature* gasDummy = ObjectAccessor::GetCreature(*me, _gasDummyGUID))
@@ -313,8 +299,15 @@ class spell_festergut_pungent_blight : public SpellScript
professor->AI()->DoAction(ACTION_FESTERGUT_GAS);
}
+ void HandleHit(SpellEffIndex /*effIndex*/)
+ {
+ if (Unit* target = GetHitUnit())
+ target->RemoveAurasDueToSpell(sSpellMgr->GetSpellIdForDifficulty(SPELL_INOCULATED, GetCaster()));
+ }
+
void Register() override
{
+ OnEffectHitTarget += SpellEffectFn(spell_festergut_pungent_blight::HandleHit, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
OnEffectHitTarget += SpellEffectFn(spell_festergut_pungent_blight::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
@@ -378,6 +371,34 @@ class spell_festergut_gastric_bloat : public SpellScript
}
};
+class spell_festergut_gaseous_blight : public SpellScript
+{
+ PrepareSpellScript(spell_festergut_gaseous_blight);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ return ValidateSpellInfo({ SPELL_ORANGE_BLIGHT_RESIDUE });
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ if (Player* p = GetHitUnit()->ToPlayer())
+ {
+ if (Map* map = GetCaster()->GetMap())
+ {
+ uint32 questId = map->Is25ManRaid() ? QUEST_RESIDUE_RENDEZVOUS_25 : QUEST_RESIDUE_RENDEZVOUS_10;
+ if (p->GetQuestStatus(questId) == QUEST_STATUS_INCOMPLETE)
+ p->CastSpell(p, SPELL_ORANGE_BLIGHT_RESIDUE, true);
+ }
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_festergut_gaseous_blight::HandleScript, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ }
+};
+
class achievement_flu_shot_shortage : public AchievementCriteriaScript
{
public:
@@ -468,6 +489,7 @@ void AddSC_boss_festergut()
RegisterSpellScript(spell_festergut_pungent_blight);
RegisterSpellScript(spell_festergut_blighted_spores_aura);
RegisterSpellScript(spell_festergut_gastric_bloat);
+ RegisterSpellScript(spell_festergut_gaseous_blight);
new achievement_flu_shot_shortage();
new npc_stinky_icc();
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
index b1239521bb..b61bdc3178 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
@@ -2272,7 +2272,7 @@ class spell_igb_overheat_aura : public AuraScript
WorldPacket data(SMSG_CLIENT_CONTROL_UPDATE, GetUnitOwner()->GetPackGUID().size() + 1);
data << GetUnitOwner()->GetPackGUID();
data << uint8(value);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
}
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
index ef366c7072..58509fe5d8 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
@@ -72,8 +72,6 @@ enum Spells
SPELL_AWAKEN_PLAGUED_ZOMBIES = 71159,
};
-#define MUTATED_INFECTION RAID_MODE<int32>(69674, 71224, 73022, 73023)
-
enum Events
{
EVENT_NONE,
@@ -193,7 +191,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- instance->DoRemoveAurasDueToSpellOnPlayers(MUTATED_INFECTION);
+ instance->DoRemoveAurasDueToSpellOnPlayers(sSpellMgr->GetSpellIdForDifficulty(SPELL_MUTATED_INFECTION, me));
_JustDied();
Talk(SAY_DEATH);
if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_PROFESSOR_PUTRICIDE)))
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
index 3aef1085b5..3d7225cd39 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
@@ -141,7 +141,6 @@ enum Spells
SPELL_SOUL_REAPER = 69409, // instant
SPELL_SOUL_REAPER_BUFF = 69410,
SPELL_SUMMON_VALKYR = 69037, // instant
- SPELL_SUMMON_VALKYR_PERIODIC = 74361,
SPELL_WINGS_OF_THE_DAMNED = 74352,
SPELL_VALKYR_TARGET_SEARCH = 69030,
SPELL_HARVEST_SOUL_VALKYR = 68985, // vehicle aura used by Val'kyr Shadowguard and Strangulate Vehicle
@@ -188,14 +187,6 @@ enum Spells
SPELL_FRENZY = 28747,
};
-#define NECROTIC_PLAGUE_LK RAID_MODE<uint32>(70337, 73912, 73913, 73914)
-#define NECROTIC_PLAGUE_PLR RAID_MODE<uint32>(70338, 73785, 73786, 73787)
-#define REMORSELESS_WINTER_1 RAID_MODE<uint32>(68981, 74270, 74271, 74272)
-#define REMORSELESS_WINTER_2 RAID_MODE<uint32>(72259, 74273, 74274, 74275)
-#define SUMMON_VALKYR RAID_MODE<uint32>(69037, 74361, 69037, 74361)
-//#define HARVEST_SOUL RAID_MODE<uint32>(68980, 74325, 74296, 74297)
-#define HARVESTED_SOUL_BUFF RAID_MODE<uint32>(72679, 74318, 74319, 74320)
-
enum Events
{
EVENT_NONE,
@@ -375,7 +366,7 @@ void SendPacketToPlayers(WorldPacket const* data, Unit* source)
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
if (Player* player = itr->GetSource())
if (player->GetAreaId() == AREA_THE_FROZEN_THRONE)
- player->GetSession()->SendPacket(data);
+ player->SendDirectMessage(data);
}
struct ShadowTrapLKTargetSelector
@@ -915,7 +906,7 @@ public:
void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
- if (spell->Id == HARVESTED_SOUL_BUFF && me->IsInCombat() && !IsHeroic() && _phase != PHASE_OUTRO && _lastTalkTimeBuff + 5 <= GameTime::GetGameTime().count())
+ if (spell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_HARVESTED_SOUL_LK_BUFF, me) && me->IsInCombat() && !IsHeroic() && _phase != PHASE_OUTRO && _lastTalkTimeBuff + 5 <= GameTime::GetGameTime().count())
{
_lastTalkTimeBuff = GameTime::GetGameTime().count();
Talk(SAY_LK_FROSTMOURNE_KILL);
@@ -924,7 +915,7 @@ public:
void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override
{
- if (spell->Id == REMORSELESS_WINTER_1 || spell->Id == REMORSELESS_WINTER_2)
+ if (spell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_REMORSELESS_WINTER_1, me) || spell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_REMORSELESS_WINTER_2, me))
{
me->GetMap()->SetZoneOverrideLight(AREA_THE_FROZEN_THRONE, LIGHT_SNOWSTORM, 5s);
me->GetMap()->SetZoneWeather(AREA_THE_FROZEN_THRONE, WEATHER_STATE_LIGHT_SNOW, 0.5f);
@@ -1064,7 +1055,7 @@ public:
events.ScheduleEvent(EVENT_INFEST, 22s + 500ms, EVENT_GROUP_ABILITIES);
break;
case EVENT_NECROTIC_PLAGUE:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, NecroticPlagueTargetCheck(me, NECROTIC_PLAGUE_LK, NECROTIC_PLAGUE_PLR)))
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, NecroticPlagueTargetCheck(me, sSpellMgr->GetSpellIdForDifficulty(SPELL_NECROTIC_PLAGUE, me), sSpellMgr->GetSpellIdForDifficulty(SPELL_NECROTIC_PLAGUE_JUMP, me))))
{
Talk(EMOTE_NECROTIC_PLAGUE_WARNING, target);
me->CastSpell(target, SPELL_NECROTIC_PLAGUE, false);
@@ -1145,7 +1136,7 @@ public:
{
me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL);
Talk(SAY_LK_SUMMON_VALKYR);
- me->CastSpell((Unit*)nullptr, SUMMON_VALKYR, false);
+ me->CastSpell((Unit*)nullptr, SPELL_SUMMON_VALKYR, false);
events.ScheduleEvent(EVENT_SUMMON_VALKYR, 45s, EVENT_GROUP_ABILITIES);
// schedule a defile (or reschedule it) if next defile event
@@ -2352,8 +2343,7 @@ class spell_the_lich_king_defile : public SpellScript
{
targets.remove_if(VehicleCheck());
targets.remove_if(Acore::AllWorldObjectsInExactRange(GetCaster(), 10.0f * GetCaster()->GetFloatValue(OBJECT_FIELD_SCALE_X), true));
- uint32 strangulatedAura[4] = {68980, 74325, 74296, 74297};
- targets.remove_if(Acore::UnitAuraCheck(true, strangulatedAura[GetCaster()->GetMap()->GetDifficulty()]));
+ targets.remove_if(Acore::UnitAuraCheck(true, sSpellMgr->GetSpellIdForDifficulty(SPELL_HARVEST_SOUL, GetCaster())));
}
void ChangeDamageAndGrow()
@@ -2566,7 +2556,7 @@ public:
me->SetCanFly(false);
me->SetDisableGravity(false);
me->GetMotionMaster()->MovePoint(POINT_DROP_PLAYER, _destPoint, FORCED_MOVEMENT_NONE, 0.f, false);
- me->SetDisableGravity(true, true);
+ me->SetDisableGravity(true);
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
break;
case EVENT_MOVE_TO_SIPHON_POS:
@@ -2732,7 +2722,7 @@ class spell_the_lich_king_valkyr_target_search : public SpellScript
if (Unit* target = GetHitUnit())
{
GetCaster()->GetMotionMaster()->MoveCharge(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ() + 4.0f, 42.0f, EVENT_CHARGE);
- GetCaster()->SetDisableGravity(true, true);
+ GetCaster()->SetDisableGravity(true);
}
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
index d04cfdafe5..fce8465d4d 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
@@ -52,8 +52,8 @@ enum Spells
SPELL_NIGHTMARE_PORTAL_VISUAL_PRE = 71986,
SPELL_NIGHTMARE_CLOUD = 71970,
SPELL_NIGHTMARE_CLOUD_VISUAL = 71939,
- SPELL_PRE_SUMMON_DREAM_PORTAL = 72224,
- SPELL_PRE_SUMMON_NIGHTMARE_PORTAL = 72480,
+ SPELL_PRE_SUMMON_DREAM_PORTAL = 72224, // normal
+ SPELL_PRE_SUMMON_NIGHTMARE_PORTAL = 72480, // heroic
SPELL_SUMMON_DREAM_PORTAL = 71305,
SPELL_SUMMON_NIGHTMARE_PORTAL = 71987,
SPELL_DREAMWALKERS_RAGE = 71189,
@@ -94,16 +94,13 @@ enum Spells
SPELL_GUT_SPRAY = 70633,
SPELL_ROT_WORM_SPAWNER = 70675,
- // Dream Cloud
+ // Dream Cloud (normal)
SPELL_EMERALD_VIGOR = 70873,
- // Nightmare Cloud
+ // Nightmare Cloud (heroic)
SPELL_TWISTED_NIGHTMARE = 71941,
};
-#define SUMMON_PORTAL RAID_MODE<uint32>(SPELL_PRE_SUMMON_DREAM_PORTAL, SPELL_PRE_SUMMON_DREAM_PORTAL, SPELL_PRE_SUMMON_NIGHTMARE_PORTAL, SPELL_PRE_SUMMON_NIGHTMARE_PORTAL)
-#define EMERALD_VIGOR RAID_MODE<uint32>(SPELL_EMERALD_VIGOR, SPELL_EMERALD_VIGOR, SPELL_TWISTED_NIGHTMARE, SPELL_TWISTED_NIGHTMARE)
-
enum Events
{
// Valithria Dreamwalker
@@ -462,7 +459,7 @@ public:
if (!IsHeroic())
Talk(SAY_VALITHRIA_DREAM_PORTAL);
for (uint32 i = 0; i < _portalCount; ++i)
- me->CastSpell(me, SUMMON_PORTAL, false);
+ me->CastSpell(me, SPELL_PRE_SUMMON_DREAM_PORTAL, false);
_events.ScheduleEvent(EVENT_DREAM_PORTAL, 45s, 48s);
break;
case EVENT_DREAM_SLIP:
@@ -885,7 +882,7 @@ public:
me->GetMotionMaster()->Clear(false);
me->GetMotionMaster()->MoveIdle();
// must use originalCaster the same for all clouds to allow stacking
- me->CastSpell(me, EMERALD_VIGOR, false, nullptr, nullptr, _instance->GetGuidData(DATA_VALITHRIA_DREAMWALKER));
+ me->CastSpell(me, SPELL_EMERALD_VIGOR, false, nullptr, nullptr, _instance->GetGuidData(DATA_VALITHRIA_DREAMWALKER));
me->DespawnOrUnsummon(1s);
break;
default:
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
index 5af60575cb..e4f745aae0 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -533,7 +533,7 @@ public:
case EVENT_SAURFANG_RUN:
if (Creature* factionNPC = ObjectAccessor::GetCreature(*me, _factionNPC))
{
- factionNPC->GetMotionMaster()->MovePath(factionNPC->GetSpawnId() * 10, false);
+ factionNPC->GetMotionMaster()->MoveWaypoint(factionNPC->GetSpawnId() * 10, false);
factionNPC->DespawnOrUnsummon(46500ms);
std::list<Creature*> followers;
factionNPC->GetCreaturesWithEntryInRange(followers, 30, _instance->GetData(DATA_TEAMID_IN_INSTANCE) == TEAM_HORDE ? NPC_KOR_KRON_GENERAL : NPC_ALLIANCE_COMMANDER);
@@ -934,7 +934,6 @@ public:
case EVENT_START_PATHING:
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetImmuneToAll(false);
- me->SetWalk(false);
Start(true);
break;
case EVENT_SCOURGE_STRIKE:
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
index 8298f5a751..7929a51ab6 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
@@ -1742,7 +1742,7 @@ public:
{
sindragosa->setActive(true);
sindragosa->SetDisableGravity(true);
- sindragosa->GetMotionMaster()->MovePath(NPC_SINDRAGOSA * 10, true);
+ sindragosa->GetMotionMaster()->MoveWaypoint(NPC_SINDRAGOSA * 10, true);
if (TempSummon* summon = sindragosa->ToTempSummon())
{
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
index b8cc1d9c2a..276bb77a2b 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
@@ -35,10 +35,8 @@ enum GuardSays
enum Spells
{
- SPELL_IMPALE_10 = 28783,
- SPELL_IMPALE_25 = 56090,
- SPELL_LOCUST_SWARM_10 = 28785,
- SPELL_LOCUST_SWARM_25 = 54021,
+ SPELL_IMPALE = 28783,
+ SPELL_LOCUST_SWARM = 28785,
SPELL_SUMMON_CORPSE_SCRABS_5 = 29105,
SPELL_SUMMON_CORPSE_SCRABS_10 = 28864,
SPELL_BERSERK = 26662
@@ -138,12 +136,12 @@ public:
}
ScheduleTimedEvent(15s, [&] {
- DoCastRandomTarget(RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25));
+ DoCastRandomTarget(SPELL_IMPALE);
}, 20s);
ScheduleTimedEvent(70s, 2min, [&] {
Talk(EMOTE_LOCUST);
- DoCastSelf(RAID_MODE(SPELL_LOCUST_SWARM_10, SPELL_LOCUST_SWARM_25));
+ DoCastSelf(SPELL_LOCUST_SWARM);
me->m_Events.AddEventAtOffset([&]
{
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp
index 9ab1fcde0f..4a7a16ee72 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp
@@ -18,6 +18,7 @@
#include "CreatureScript.h"
#include "ScriptedCreature.h"
#include "SpellInfo.h"
+#include "SpellMgr.h"
#include "naxxramas.h"
enum Yells
@@ -37,7 +38,6 @@ enum Spells
SPELL_RAIN_OF_FIRE = 28794,
SPELL_FRENZY = 28798,
SPELL_WIDOWS_EMBRACE = 28732,
- SPELL_MINION_WIDOWS_EMBRACE = 54097
};
enum Groups
@@ -143,7 +143,7 @@ public:
void SpellHit(Unit* caster, SpellInfo const* spell) override
{
- if (spell->Id == RAID_MODE(SPELL_WIDOWS_EMBRACE, SPELL_MINION_WIDOWS_EMBRACE))
+ if (spell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_WIDOWS_EMBRACE, me))
{
Talk(EMOTE_WIDOWS_EMBRACE);
scheduler.RescheduleGroup(GROUP_FRENZY, 1min);
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
index 6439f45add..6f1405ea74 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
@@ -33,23 +33,17 @@ enum Spells
SPELL_MARK_OF_ZELIEK = 28835,
SPELL_MARK_DAMAGE = 28836,
// Korth'azz
- SPELL_KORTHAZZ_METEOR_10 = 28884,
- SPELL_KORTHAZZ_METEOR_25 = 57467,
+ SPELL_KORTHAZZ_METEOR = 28884,
// Blaumeux
- SPELL_BLAUMEUX_SHADOW_BOLT_10 = 57374,
- SPELL_BLAUMEUX_SHADOW_BOLT_25 = 57464,
- SPELL_BLAUMEUX_VOID_ZONE_10 = 28863,
- SPELL_BLAUMEUX_VOID_ZONE_25 = 57463,
+ SPELL_BLAUMEUX_SHADOW_BOLT = 57374,
+ SPELL_BLAUMEUX_VOID_ZONE = 28863,
SPELL_BLAUMEUX_UNYIELDING_PAIN = 57381,
// Zeliek
- SPELL_ZELIEK_HOLY_WRATH_10 = 28883,
- SPELL_ZELIEK_HOLY_WRATH_25 = 57466,
- SPELL_ZELIEK_HOLY_BOLT_10 = 57376,
- SPELL_ZELIEK_HOLY_BOLT_25 = 57465,
+ SPELL_ZELIEK_HOLY_WRATH = 28883,
+ SPELL_ZELIEK_HOLY_BOLT = 57376,
SPELL_ZELIEK_CONDEMNATION = 57377,
// Rivendare
- SPELL_RIVENDARE_UNHOLY_SHADOW_10 = 28882,
- SPELL_RIVENDARE_UNHOLY_SHADOW_25 = 57369
+ SPELL_RIVENDARE_UNHOLY_SHADOW = 28882,
};
enum Events
@@ -87,15 +81,13 @@ enum FourHorsemen
const uint32 TABLE_SPELL_MARK[4] = {SPELL_MARK_OF_ZELIEK, SPELL_MARK_OF_BLAUMEUX, SPELL_MARK_OF_RIVENDARE, SPELL_MARK_OF_KORTHAZZ};
// PRIMARY SPELL
-const uint32 TABLE_SPELL_PRIMARY_10[4] = {SPELL_ZELIEK_HOLY_BOLT_10, SPELL_BLAUMEUX_SHADOW_BOLT_10, SPELL_RIVENDARE_UNHOLY_SHADOW_10, SPELL_KORTHAZZ_METEOR_10};
-const uint32 TABLE_SPELL_PRIMARY_25[4] = {SPELL_ZELIEK_HOLY_BOLT_25, SPELL_BLAUMEUX_SHADOW_BOLT_25, SPELL_RIVENDARE_UNHOLY_SHADOW_25, SPELL_KORTHAZZ_METEOR_25};
+const uint32 TABLE_SPELL_PRIMARY[4] = {SPELL_ZELIEK_HOLY_BOLT, SPELL_BLAUMEUX_SHADOW_BOLT, SPELL_RIVENDARE_UNHOLY_SHADOW, SPELL_KORTHAZZ_METEOR};
// PUNISH
const uint32 TABLE_SPELL_PUNISH[4] = {SPELL_ZELIEK_CONDEMNATION, SPELL_BLAUMEUX_UNYIELDING_PAIN, 0, 0};
// SECONDARY SPELL
-const uint32 TABLE_SPELL_SECONDARY_10[4] = {SPELL_ZELIEK_HOLY_WRATH_10, SPELL_BLAUMEUX_VOID_ZONE_10, 0, 0};
-const uint32 TABLE_SPELL_SECONDARY_25[4] = {SPELL_ZELIEK_HOLY_WRATH_25, SPELL_BLAUMEUX_VOID_ZONE_25, 0, 0};
+const uint32 TABLE_SPELL_SECONDARY[4] = {SPELL_ZELIEK_HOLY_WRATH, SPELL_BLAUMEUX_VOID_ZONE, 0, 0};
const Position WaypointPositions[12] =
{
@@ -308,11 +300,11 @@ public:
return;
case EVENT_PRIMARY_SPELL:
Talk(SAY_TAUNT);
- me->CastSpell(me->GetVictim(), RAID_MODE(TABLE_SPELL_PRIMARY_10[horsemanId], TABLE_SPELL_PRIMARY_25[horsemanId]), false);
+ me->CastSpell(me->GetVictim(), TABLE_SPELL_PRIMARY[horsemanId], false);
events.Repeat(15s);
return;
case EVENT_SECONDARY_SPELL:
- me->CastSpell(me->GetVictim(), RAID_MODE(TABLE_SPELL_SECONDARY_10[horsemanId], TABLE_SPELL_SECONDARY_25[horsemanId]), false);
+ me->CastSpell(me->GetVictim(), TABLE_SPELL_SECONDARY[horsemanId], false);
events.Repeat(15s);
return;
}
@@ -328,7 +320,7 @@ public:
}
if (me->IsWithinDistInMap(me->GetVictim(), 45.0f) && me->IsValidAttackTarget(me->GetVictim()))
{
- DoCastVictim(RAID_MODE(TABLE_SPELL_PRIMARY_10[horsemanId], TABLE_SPELL_PRIMARY_25[horsemanId]));
+ DoCastVictim(TABLE_SPELL_PRIMARY[horsemanId]);
}
else if (!me->IsWithinDistInMap(me->GetVictim(), 45.0f) || !me->IsValidAttackTarget(me->GetVictim()))
{
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
index 7451caa1ab..41beeb9069 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
@@ -25,10 +25,8 @@
enum Spells
{
SPELL_MORTAL_WOUND = 25646,
- SPELL_ENRAGE_10 = 28371,
- SPELL_ENRAGE_25 = 54427,
- SPELL_DECIMATE_10 = 28374,
- SPELL_DECIMATE_25 = 54426,
+ SPELL_ENRAGE = 28371,
+ SPELL_DECIMATE = 28374,
SPELL_DECIMATE_DAMAGE = 28375,
SPELL_BERSERK = 26662,
SPELL_INFECTED_WOUND = 29306,
@@ -184,7 +182,7 @@ public:
break;
case EVENT_ENRAGE:
Talk(EMOTE_ENRAGE);
- me->CastSpell(me, RAID_MODE(SPELL_ENRAGE_10, SPELL_ENRAGE_25), true);
+ me->CastSpell(me, SPELL_ENRAGE, true);
events.Repeat(22s);
break;
case EVENT_MORTAL_WOUND:
@@ -193,7 +191,7 @@ public:
break;
case EVENT_DECIMATE:
Talk(EMOTE_DECIMATE);
- me->CastSpell(me, RAID_MODE(SPELL_DECIMATE_10, SPELL_DECIMATE_25), false);
+ me->CastSpell(me, SPELL_DECIMATE, false);
events.Repeat(RAID_MODE(110s, 90s));
break;
case EVENT_SUMMON_ZOMBIE:
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
index 3e2ae759c9..f071424563 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
@@ -41,8 +41,7 @@ enum Spells
{
// Gothik
SPELL_HARVEST_SOUL = 28679,
- SPELL_SHADOW_BOLT_10 = 29317,
- SPELL_SHADOW_BOLT_25 = 56405,
+ SPELL_SHADOW_BOLT = 29317,
// Teleport spells
SPELL_TELEPORT_DEAD = 28025,
SPELL_TELEPORT_LIVE = 28026,
@@ -267,7 +266,7 @@ public:
std::vector<Player*> tList;
for(Map::PlayerList::const_iterator itr = pList.begin(); itr != pList.end(); ++itr)
{
- if (!me->IsWithinDistInMap(itr->GetSource(), 200.0f, true, false) || !itr->GetSource()->IsAlive() || itr->GetSource()->IsGameMaster())
+ if (!me->IsWithinDistInMap(itr->GetSource(), 200.0f, true, false, false) || !itr->GetSource()->IsAlive() || itr->GetSource()->IsGameMaster())
{
continue;
}
@@ -400,7 +399,7 @@ public:
Talk(SAY_INTRO_4);
break;
case EVENT_SHADOW_BOLT:
- me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_SHADOW_BOLT_10, SPELL_SHADOW_BOLT_25), false);
+ me->CastSpell(me->GetVictim(), SPELL_SHADOW_BOLT, false);
events.Repeat(1s);
break;
case EVENT_HARVEST_SOUL:
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
index 7be64fe007..60c0f0f9cf 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
@@ -29,10 +29,8 @@ enum Spells
SPELL_POISON_CLOUD = 28240,
SPELL_MUTATING_INJECTION = 28169,
SPELL_MUTATING_EXPLOSION = 28206,
- SPELL_SLIME_SPRAY_10 = 28157,
- SPELL_SLIME_SPRAY_25 = 54364,
- SPELL_POISON_CLOUD_DAMAGE_AURA_10 = 28158,
- SPELL_POISON_CLOUD_DAMAGE_AURA_25 = 54362,
+ SPELL_SLIME_SPRAY = 28157,
+ SPELL_POISON_CLOUD_DAMAGE_AURA = 28158,
SPELL_BERSERK = 26662,
SPELL_BOMBARD_SLIME = 28280
};
@@ -105,14 +103,6 @@ public:
events.ScheduleEvent(EVENT_BERSERK, RAID_MODE(720s, 540s));
}
- void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override
- {
- if (spellInfo->Id == RAID_MODE(SPELL_SLIME_SPRAY_10, SPELL_SLIME_SPRAY_25) && target->IsPlayer())
- {
- me->SummonCreature(NPC_FALLOUT_SLIME, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ());
- }
- }
-
void JustSummoned(Creature* cr) override
{
if (cr->GetEntry() == NPC_FALLOUT_SLIME)
@@ -169,7 +159,7 @@ public:
break;
case EVENT_SLIME_SPRAY:
Talk(EMOTE_SLIME);
- me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_SLIME_SPRAY_10, SPELL_SLIME_SPRAY_25), false);
+ me->CastSpell(me->GetVictim(), SPELL_SLIME_SPRAY, false);
events.Repeat(20s);
break;
case EVENT_MUTATING_INJECTION:
@@ -223,7 +213,7 @@ public:
auraVisualTimer += diff;
if (auraVisualTimer >= 1000)
{
- me->CastSpell(me, (me->GetMap()->Is25ManRaid() ? SPELL_POISON_CLOUD_DAMAGE_AURA_25 : SPELL_POISON_CLOUD_DAMAGE_AURA_10), true);
+ me->CastSpell(me, SPELL_POISON_CLOUD_DAMAGE_AURA, true);
auraVisualTimer = 0;
}
}
@@ -291,10 +281,27 @@ class spell_grobbulus_mutating_injection_aura : public AuraScript
}
};
+class spell_grobbulus_slime_spray : public SpellScript
+{
+ PrepareSpellScript(spell_grobbulus_slime_spray);
+
+ void HandleHit()
+ {
+ if (Unit* target = GetHitUnit())
+ GetCaster()->SummonCreature(NPC_FALLOUT_SLIME, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ());
+ }
+
+ void Register() override
+ {
+ OnHit += SpellHitFn(spell_grobbulus_slime_spray::HandleHit);
+ }
+};
+
void AddSC_boss_grobbulus()
{
new boss_grobbulus();
new boss_grobbulus_poison_cloud();
RegisterSpellScript(spell_grobbulus_mutating_injection_aura);
RegisterSpellScript(spell_grobbulus_poison);
+ RegisterSpellScript(spell_grobbulus_slime_spray);
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
index de73995e96..8ee7fe3cf8 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
@@ -34,8 +34,7 @@ enum Says
enum Spells
{
SPELL_SPELL_DISRUPTION = 29310,
- SPELL_DECREPIT_FEVER_10 = 29998,
- SPELL_DECREPIT_FEVER_25 = 55011,
+ SPELL_DECREPIT_FEVER = 29998,
SPELL_PLAGUE_CLOUD = 29350,
SPELL_TELEPORT_SELF = 30211
};
@@ -168,7 +167,7 @@ public:
events.Repeat(10s);
break;
case EVENT_DECEPIT_FEVER:
- me->CastSpell(me, RAID_MODE(SPELL_DECREPIT_FEVER_10, SPELL_DECREPIT_FEVER_25), false);
+ me->CastSpell(me, SPELL_DECREPIT_FEVER, false);
events.Repeat(22s, 25s);
break;
case EVENT_PLAGUE_CLOUD:
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
index 384ffda0f1..43c0df905b 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
@@ -43,10 +43,8 @@ enum Yells
enum Spells
{
// Kel'Thzuad
- SPELL_FROST_BOLT_SINGLE_10 = 28478,
- SPELL_FROST_BOLT_SINGLE_25 = 55802,
- SPELL_FROST_BOLT_MULTI_10 = 28479,
- SPELL_FROST_BOLT_MULTI_25 = 55807,
+ SPELL_FROST_BOLT_SINGLE = 28478,
+ SPELL_FROST_BOLT_MULTI = 28479,
SPELL_SHADOW_FISURE = 27810,
SPELL_VOID_BLAST = 27812,
SPELL_DETONATE_MANA = 27819,
@@ -367,11 +365,11 @@ public:
me->CastSpell(me, SPELL_BERSERK, true);
break;
case EVENT_FROST_BOLT_SINGLE:
- me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_FROST_BOLT_SINGLE_10, SPELL_FROST_BOLT_SINGLE_25), false);
+ me->CastSpell(me->GetVictim(), SPELL_FROST_BOLT_SINGLE, false);
events.Repeat(2s, 10s);
break;
case EVENT_FROST_BOLT_MULTI:
- me->CastSpell(me, RAID_MODE(SPELL_FROST_BOLT_MULTI_10, SPELL_FROST_BOLT_MULTI_25), false);
+ me->CastSpell(me, SPELL_FROST_BOLT_MULTI, false);
events.Repeat(15s, 30s);
break;
case EVENT_SHADOW_FISSURE:
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
index fe8d1589e2..0ae3ab26d6 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
@@ -23,10 +23,8 @@ enum Spells
{
SPELL_NECROTIC_AURA = 55593,
SPELL_SUMMON_SPORE = 29234,
- SPELL_DEATHBLOOM_10 = 29865,
- SPELL_DEATHBLOOM_25 = 55053,
- SPELL_INEVITABLE_DOOM_10 = 29204,
- SPELL_INEVITABLE_DOOM_25 = 55052,
+ SPELL_DEATHBLOOM = 29865,
+ SPELL_INEVITABLE_DOOM = 29204,
SPELL_BERSERK = 26662
};
@@ -134,11 +132,11 @@ public:
events.Repeat(20s);
break;
case EVENT_DEATHBLOOM:
- me->CastSpell(me, RAID_MODE(SPELL_DEATHBLOOM_10, SPELL_DEATHBLOOM_25), false);
+ me->CastSpell(me, SPELL_DEATHBLOOM, false);
events.Repeat(30s);
break;
case EVENT_INEVITABLE_DOOM:
- me->CastSpell(me, RAID_MODE(SPELL_INEVITABLE_DOOM_10, SPELL_INEVITABLE_DOOM_25), false);
+ me->CastSpell(me, SPELL_INEVITABLE_DOOM, false);
doomCounter++;
events.Repeat(doomCounter < 6 ? 30s : 15s);
break;
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
index 76bf91ccb0..1b2dd9f871 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
@@ -26,14 +26,10 @@
enum Spells
{
- SPELL_WEB_SPRAY_10 = 29484,
- SPELL_WEB_SPRAY_25 = 54125,
- SPELL_POISON_SHOCK_10 = 28741,
- SPELL_POISON_SHOCK_25 = 54122,
- SPELL_NECROTIC_POISON_10 = 54121,
- SPELL_NECROTIC_POISON_25 = 28776,
- SPELL_FRENZY_10 = 54123,
- SPELL_FRENZY_25 = 54124,
+ SPELL_WEB_SPRAY = 29484,
+ SPELL_POISON_SHOCK = 28741,
+ SPELL_NECROTIC_POISON = 54121,
+ SPELL_FRENZY = 54123,
SPELL_WEB_WRAP_STUN = 28622,
SPELL_WEB_WRAP_SUMMON = 28627,
SPELL_WEB_WRAP_KILL_WEBS = 52512,
@@ -231,15 +227,15 @@ public:
{
case EVENT_WEB_SPRAY:
Talk(EMOTE_WEB_SPRAY);
- me->CastSpell(me, RAID_MODE(SPELL_WEB_SPRAY_10, SPELL_WEB_SPRAY_25), true);
+ me->CastSpell(me, SPELL_WEB_SPRAY, true);
events.Repeat(40s);
break;
case EVENT_POISON_SHOCK:
- me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_POISON_SHOCK_10, SPELL_POISON_SHOCK_25), false);
+ me->CastSpell(me->GetVictim(), SPELL_POISON_SHOCK, false);
events.Repeat(10s);
break;
case EVENT_NECROTIC_POISON:
- me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_NECROTIC_POISON_10, SPELL_NECROTIC_POISON_25), false);
+ me->CastSpell(me->GetVictim(), SPELL_NECROTIC_POISON, false);
events.Repeat(30s);
break;
case EVENT_SUMMON_SPIDERLINGS:
@@ -253,7 +249,7 @@ public:
case EVENT_HEALTH_CHECK:
if (me->GetHealthPct() < 30)
{
- me->CastSpell(me, RAID_MODE(SPELL_FRENZY_10, SPELL_FRENZY_25), true);
+ me->CastSpell(me, SPELL_FRENZY, true);
break;
}
events.Repeat(1s);
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
index 79045abcfd..d494649ffa 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
@@ -34,10 +34,8 @@ enum Says
enum Spells
{
- SPELL_CURSE_OF_THE_PLAGUEBRINGER_10 = 29213,
- SPELL_CURSE_OF_THE_PLAGUEBRINGER_25 = 54835,
- SPELL_CRIPPLE_10 = 29212,
- SPELL_CRIPPLE_25 = 54814,
+ SPELL_CURSE_OF_THE_PLAGUEBRINGER = 29213,
+ SPELL_CRIPPLE = 29212,
SPELL_SUMMON_PLAGUED_WARRIORS = 29237,
SPELL_TELEPORT = 29216,
SPELL_TELEPORT_BACK = 29231,
@@ -207,7 +205,7 @@ public:
case EVENT_CURSE:
if (events.GetPhaseMask() == 0)
{
- me->CastCustomSpell(RAID_MODE(SPELL_CURSE_OF_THE_PLAGUEBRINGER_10, SPELL_CURSE_OF_THE_PLAGUEBRINGER_25), SPELLVALUE_MAX_TARGETS, RAID_MODE(3, 10), me, false);
+ me->CastCustomSpell(SPELL_CURSE_OF_THE_PLAGUEBRINGER, SPELLVALUE_MAX_TARGETS, RAID_MODE(3, 10), me, false);
}
events.Repeat(25s);
break;
@@ -228,7 +226,7 @@ public:
break;
case EVENT_BLINK:
DoResetThreatList();
- me->CastSpell(me, RAID_MODE(SPELL_CRIPPLE_10, SPELL_CRIPPLE_25), false);
+ me->CastSpell(me, SPELL_CRIPPLE, false);
me->CastSpell(me, SPELL_BLINK, true);
Talk(EMOTE_BLINK);
events.Repeat(30s);
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
index 3342c9a236..bd88d28896 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
@@ -30,8 +30,7 @@ enum Yells
enum Spells
{
- SPELL_HATEFUL_STRIKE_10 = 41926,
- SPELL_HATEFUL_STRIKE_25 = 59192,
+ SPELL_HATEFUL_STRIKE = 41926,
SPELL_FRENZY = 28131,
SPELL_BERSERK = 26662,
SPELL_SLIME_BOLT = 32309
@@ -155,7 +154,7 @@ public:
}
if (finalTarget)
{
- me->CastSpell(finalTarget, RAID_MODE(SPELL_HATEFUL_STRIKE_10, SPELL_HATEFUL_STRIKE_25), false);
+ me->CastSpell(finalTarget, SPELL_HATEFUL_STRIKE, false);
}
events.Repeat(1s);
break;
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
index 14f3342454..7e5eb48a58 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
@@ -34,8 +34,7 @@ enum Says
enum Spells
{
SPELL_UNBALANCING_STRIKE = 26613,
- SPELL_DISRUPTING_SHOUT_10 = 55543,
- SPELL_DISRUPTING_SHOUT_25 = 29107,
+ SPELL_DISRUPTING_SHOUT = 55543,
SPELL_JAGGED_KNIFE = 55550,
SPELL_HOPELESS = 29125,
SPELL_TAUNT = 29060
@@ -267,7 +266,7 @@ public:
events.Repeat(20s);
break;
case EVENT_DISRUPTING_SHOUT:
- me->CastSpell(me, RAID_MODE(SPELL_DISRUPTING_SHOUT_10, SPELL_DISRUPTING_SHOUT_25), false);
+ me->CastSpell(me, SPELL_DISRUPTING_SHOUT, false);
events.Repeat(15s);
break;
case EVENT_JAGGED_KNIFE:
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
index 22de0dac72..2204ba3f12 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
@@ -33,14 +33,11 @@ enum Yells
enum Spells
{
// Fight
- SPELL_FROST_AURA_10 = 28531,
- SPELL_FROST_AURA_25 = 55799,
+ SPELL_FROST_AURA = 28531,
SPELL_CLEAVE = 19983,
- SPELL_TAIL_SWEEP_10 = 55697,
- SPELL_TAIL_SWEEP_25 = 55696,
+ SPELL_TAIL_SWEEP = 55697,
SPELL_SUMMON_BLIZZARD = 28560,
- SPELL_LIFE_DRAIN_10 = 28542,
- SPELL_LIFE_DRAIN_25 = 55665,
+ SPELL_LIFE_DRAIN = 28542,
SPELL_BERSERK = 26662,
// Ice block
@@ -160,7 +157,7 @@ public:
{
BossAI::JustEngagedWith(who);
EnterCombatSelfFunction();
- me->CastSpell(me, RAID_MODE(SPELL_FROST_AURA_10, SPELL_FROST_AURA_25), true);
+ me->CastSpell(me, SPELL_FROST_AURA, true);
events.ScheduleEvent(EVENT_BERSERK, 15min);
events.ScheduleEvent(EVENT_CLEAVE, 5s);
events.ScheduleEvent(EVENT_TAIL_SWEEP, 10s);
@@ -258,11 +255,11 @@ public:
events.Repeat(10s);
return;
case EVENT_TAIL_SWEEP:
- me->CastSpell(me, RAID_MODE(SPELL_TAIL_SWEEP_10, SPELL_TAIL_SWEEP_25), false);
+ me->CastSpell(me, SPELL_TAIL_SWEEP, false);
events.Repeat(10s);
return;
case EVENT_LIFE_DRAIN:
- me->CastCustomSpell(RAID_MODE(SPELL_LIFE_DRAIN_10, SPELL_LIFE_DRAIN_25), SPELLVALUE_MAX_TARGETS, RAID_MODE(2, 5), me, false);
+ me->CastCustomSpell(SPELL_LIFE_DRAIN, SPELLVALUE_MAX_TARGETS, RAID_MODE(2, 5), me, false);
events.Repeat(24s);
return;
case EVENT_BLIZZARD:
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
index cf953363d4..cf7a1591ec 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
@@ -59,20 +59,17 @@ enum Spells
SPELL_SHOCK_VISUAL = 28159,
// Stalagg
- SPELL_POWER_SURGE_10 = 54529,
- SPELL_POWER_SURGE_25 = 28134,
+ SPELL_POWER_SURGE = 54529,
SPELL_STALAGG_CHAIN = 28096,
// Feugen
- SPELL_STATIC_FIELD_10 = 28135,
- SPELL_STATIC_FIELD_25 = 54528,
+ SPELL_STATIC_FIELD = 28135,
SPELL_FEUGEN_CHAIN = 28111,
// Thaddius
SPELL_POLARITY_SHIFT = 28089,
SPELL_BALL_LIGHTNING = 28299,
- SPELL_CHAIN_LIGHTNING_10 = 28167,
- SPELL_CHAIN_LIGHTNING_25 = 54531,
+ SPELL_CHAIN_LIGHTNING = 28167,
SPELL_BERSERK = 27680,
SPELL_THADDIUS_VISUAL_LIGHTNING = 28136,
SPELL_THADDIUS_SPAWN_STUN = 28160,
@@ -308,16 +305,17 @@ public:
me->SetReactState(REACT_AGGRESSIVE);
me->SetControlled(false, UNIT_STATE_STUNNED);
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
+ me->SetControlled(false, UNIT_STATE_ROOT);
events.ScheduleEvent(EVENT_THADDIUS_CHAIN_LIGHTNING, 14s);
events.ScheduleEvent(EVENT_THADDIUS_BERSERK, 6min);
- events.ScheduleEvent(EVENT_THADDIUS_POLARITY_SHIFT, 30s);
+ events.ScheduleEvent(EVENT_THADDIUS_POLARITY_SHIFT, 20s);
events.ScheduleEvent(EVENT_ALLOW_BALL_LIGHTNING, 5s);
return;
case EVENT_THADDIUS_BERSERK:
me->CastSpell(me, SPELL_BERSERK, true);
break;
case EVENT_THADDIUS_CHAIN_LIGHTNING:
- me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_CHAIN_LIGHTNING_10, SPELL_CHAIN_LIGHTNING_25), false);
+ me->CastSpell(me->GetVictim(), SPELL_CHAIN_LIGHTNING, false);
events.Repeat(15s);
break;
case EVENT_THADDIUS_POLARITY_SHIFT:
@@ -497,11 +495,11 @@ public:
switch (events.ExecuteEvent())
{
case EVENT_MINION_POWER_SURGE:
- me->CastSpell(me, RAID_MODE(SPELL_POWER_SURGE_10, SPELL_POWER_SURGE_25), false);
+ me->CastSpell(me, SPELL_POWER_SURGE, false);
events.Repeat(19s);
break;
case EVENT_MINION_STATIC_FIELD:
- me->CastSpell(me, RAID_MODE(SPELL_STATIC_FIELD_10, SPELL_STATIC_FIELD_25), false);
+ me->CastSpell(me, SPELL_STATIC_FIELD, false);
events.Repeat(3s);
break;
case EVENT_MINION_MAGNETIC_PULL:
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index a61e0089c2..e06d19cf34 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -57,10 +57,8 @@ enum MovementInformPoints
enum MalygosSpells
{
SPELL_BERSERK = 64238,
- SPELL_ARCANE_BREATH_N = 56272,
- SPELL_ARCANE_BREATH_H = 60072,
- SPELL_ARCANE_STORM_N = 61693,
- SPELL_ARCANE_STORM_H = 61694,
+ SPELL_ARCANE_BREATH = 56272,
+ SPELL_ARCANE_STORM = 61693,
SPELL_VORTEX_VISUAL = 55873,
SPELL_VORTEX_CONTROL_VEHICLE = 56263,
@@ -80,8 +78,7 @@ enum MalygosSpells
SPELL_DESTROY_PLATFORM_VISUAL = 59084,
SPELL_ARCANE_PULSE = 57432,
- SPELL_PH3_SURGE_OF_POWER_N = 57407,
- SPELL_PH3_SURGE_OF_POWER_H = 60936,
+ SPELL_PH3_SURGE_OF_POWER = 57407,
SPELL_STATIC_FIELD_MAIN = 57430,
SPELL_STATIC_FIELD_SUMMON = 57431,
@@ -89,10 +86,6 @@ enum MalygosSpells
SPELL_STATIC_FIELD_DAMAGE = 57429,
};
-#define SPELL_ARCANE_BREATH DUNGEON_MODE(SPELL_ARCANE_BREATH_N, SPELL_ARCANE_BREATH_H)
-#define SPELL_ARCANE_STORM DUNGEON_MODE(SPELL_ARCANE_STORM_N, SPELL_ARCANE_STORM_H)
-#define SPELL_PH3_SURGE_OF_POWER DUNGEON_MODE(SPELL_PH3_SURGE_OF_POWER_N, SPELL_PH3_SURGE_OF_POWER_H)
-
enum MalygosEvents
{
EVENT_INTRO_MOVE_CENTER = 1,
@@ -528,9 +521,7 @@ public:
init.Launch();
pPlayer->SetUnitMovementFlags(MOVEMENTFLAG_NONE);
- pPlayer->SetDisableGravity(true, true);
-
- sScriptMgr->AnticheatSetCanFlybyServer(pPlayer, true);
+ pPlayer->SetDisableGravity(true);
WorldPacket data(SMSG_SPLINE_MOVE_UNROOT, 8);
data << pPlayer->GetPackGUID();
@@ -941,10 +932,7 @@ public:
if (!bUpdatedFlying && timer)
{
bUpdatedFlying = true;
- plr->SetDisableGravity(true, true);
-
- sScriptMgr->AnticheatSetCanFlybyServer(plr, true);
- sScriptMgr->AnticheatSetUnderACKmount(plr);
+ plr->SetDisableGravity(true);
}
plr->SendMonsterMove(me->GetPositionX() + dist * cos(arcangle), me->GetPositionY() + dist * std::sin(arcangle), me->GetPositionZ(), VORTEX_DEFAULT_DIFF * 2, SPLINEFLAG_FLYING);
@@ -1220,8 +1208,9 @@ public:
if (Vehicle* v = me->GetVehicle())
v->RemoveAllPassengers();
- if (Player* player = killer->GetCharmerOrOwnerPlayerOrPlayerItself())
- player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS, 1, 0, me);
+ if (killer)
+ if (Player* player = killer->GetCharmerOrOwnerPlayerOrPlayerItself())
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS, 1, 0, me);
}
void MoveInLineOfSight(Unit* /*who*/) override {}
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h b/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h
index b61b1d7cb7..83e1a845cb 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h
@@ -71,15 +71,12 @@ enum eSpells
SPELL_TELEPORT_VISUAL = 52096,
SPELL_SCION_ARCANE_BARRAGE = 56397,
- SPELL_ARCANE_SHOCK_N = 57058,
- SPELL_ARCANE_SHOCK_H = 60073,
+ SPELL_ARCANE_SHOCK = 57058,
SPELL_HASTE = 57060,
SPELL_ALEXSTRASZA_GIFT = 61028,
};
-#define SPELL_ARCANE_SHOCK DUNGEON_MODE(SPELL_ARCANE_SHOCK_N, SPELL_ARCANE_SHOCK_H)
-
enum eAchiev
{
ACHIEV_CRITERIA_DENYIN_THE_SCION_10 = 7573,
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp
index 3781b4799d..a05ca6dc14 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp
@@ -22,8 +22,7 @@
enum Spells
{
SPELL_MAGIC_PULL = 51336,
- SPELL_THUNDERING_STOMP_N = 50774,
- SPELL_THUNDERING_STOMP_H = 59370,
+ SPELL_THUNDERING_STOMP = 50774,
SPELL_UNSTABLE_SPHERE_PASSIVE = 50756,
SPELL_UNSTABLE_SPHERE_PULSE = 50757,
@@ -44,8 +43,6 @@ enum Events
EVENT_SUMMON_x4 = 4,
};
-#define SPELL_THUNDERING_STOMP DUNGEON_MODE(SPELL_THUNDERING_STOMP_N, SPELL_THUNDERING_STOMP_H)
-
enum Yells
{
SAY_AGGRO = 0,
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp
index db9d41b63a..5f9f71dc89 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp
@@ -22,10 +22,8 @@
enum Spells
{
- SPELL_ARCANE_BARRAGE_N = 50804,
- SPELL_ARCANE_BARRAGE_H = 59381,
- SPELL_ARCANE_VOLLEY_N = 51153,
- SPELL_ARCANE_VOLLEY_H = 59382,
+ SPELL_ARCANE_BARRAGE = 50804,
+ SPELL_ARCANE_VOLLEY = 51153,
SPELL_ENRAGED_ASSAULT = 51170,
SPELL_PLANAR_ANOMALIES = 57959,
SPELL_PLANAR_SHIFT = 51162,
@@ -38,9 +36,6 @@ enum Spells
SPELL_DRAKE_STOP_TIME = 49838,
};
-#define SPELL_ARCANE_BARRAGE DUNGEON_MODE(SPELL_ARCANE_BARRAGE_N, SPELL_ARCANE_BARRAGE_H)
-#define SPELL_ARCANE_VOLLEY DUNGEON_MODE(SPELL_ARCANE_VOLLEY_N, SPELL_ARCANE_VOLLEY_H)
-
enum VarosNPCs
{
NPC_LEY_GUARDIAN_WHELP = 28276,
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp
index 129df1e67b..2ead69d977 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp
@@ -29,15 +29,10 @@ enum Spells
SPELL_TELEPORT = 51112,
SPELL_FROSTBOMB = 51103,
- SPELL_TIME_BOMB_N = 51121,
- SPELL_TIME_BOMB_H = 59376,
- SPELL_EMPOWERED_ARCANE_EXPLOSION_N = 51110,
- SPELL_EMPOWERED_ARCANE_EXPLOSION_H = 59377,
+ SPELL_TIME_BOMB = 51121,
+ SPELL_EMPOWERED_ARCANE_EXPLOSION = 51110,
};
-#define SPELL_EMPOWERED_ARCANE_EXPLOSION DUNGEON_MODE(SPELL_EMPOWERED_ARCANE_EXPLOSION_N, SPELL_EMPOWERED_ARCANE_EXPLOSION_H)
-//#define SPELL_TIME_BOMB DUNGEON_MODE(SPELL_TIME_BOMB_N, SPELL_TIME_BOMB_H)
-
enum UromNPCs
{
NPC_PHANTASMAL_CLOUDSCRAPER = 27645,
@@ -298,7 +293,7 @@ public:
//At this point we are still in casting state so we need to clear it for DoCastAOE not to fail
me->ClearUnitState(UNIT_STATE_CASTING);
- DoCastAOE(DUNGEON_MODE(SPELL_EMPOWERED_ARCANE_EXPLOSION_N, SPELL_EMPOWERED_ARCANE_EXPLOSION_H));
+ DoCastAOE(SPELL_EMPOWERED_ARCANE_EXPLOSION);
me->AddUnitState(UNIT_STATE_CASTING);
events.RescheduleEvent(EVENT_TELE_BACK, DUNGEON_MODE(9s, 7s));
default:
@@ -347,7 +342,7 @@ public:
break;
case EVENT_TIME_BOMB:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
- DoCast(target, DUNGEON_MODE(SPELL_TIME_BOMB_N, SPELL_TIME_BOMB_H));
+ DoCast(target, SPELL_TIME_BOMB);
events.Repeat(20s, 25s);
break;
case EVENT_TELEPORT_TO_CENTER:
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp
index be7191ca09..71d4450864 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp
@@ -23,13 +23,10 @@ enum Spells
{
SPELL_CORE_AURA_PASSIVE = 50798,
- SPELL_AMPLIFY_MAGIC_N = 51054,
- SPELL_AMPLIFY_MAGIC_H = 59371,
+ SPELL_AMPLIFY_MAGIC = 51054,
- SPELL_ENERGIZE_CORES_N = 50785,
- SPELL_ENERGIZE_CORES_H = 59372,
- SPELL_ENERGIZE_CORES_THIN_N = 61407,
- SPELL_ENERGIZE_CORES_THIN_H = 62136,
+ SPELL_ENERGIZE_CORES = 50785,
+ SPELL_ENERGIZE_CORES_THIN = 61407,
SPELL_ENERGIZE_CORES_TRIGGER_1 = 54069,
SPELL_ENERGIZE_CORES_TRIGGER_2 = 56251,
@@ -63,10 +60,6 @@ enum Events
EVENT_ENERGIZE_CORES_DAMAGE = 7,
};
-#define SPELL_AMPLIFY_MAGIC DUNGEON_MODE(SPELL_AMPLIFY_MAGIC_N, SPELL_AMPLIFY_MAGIC_H)
-#define SPELL_ENERGIZE_CORES DUNGEON_MODE(SPELL_ENERGIZE_CORES_N, SPELL_ENERGIZE_CORES_H)
-#define SPELL_ENERGIZE_CORES_THIN DUNGEON_MODE(SPELL_ENERGIZE_CORES_THIN_N, SPELL_ENERGIZE_CORES_THIN_H)
-
enum Says
{
SAY_AGGRO = 0,
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
index 87d4b4b806..4fd9d715df 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
@@ -38,7 +38,6 @@ enum Drakes
// Centrifuge Constructs
SPELL_EMPOWERING_BLOWS = 50044,
- H_SPELL_EMPOWERING_BLOWS = 59213,
SPELL_AMBER_SHOCK_CHARGE = 49836,
SPELL_RUBY_EVASIVE_CHARGES = 50241,
@@ -490,7 +489,7 @@ public:
void JustEngagedWith(Unit* /*who*/) override
{
- DoCast(IsHeroic() ? H_SPELL_EMPOWERING_BLOWS : SPELL_EMPOWERING_BLOWS);
+ DoCast(SPELL_EMPOWERING_BLOWS);
}
void UpdateAI(uint32 /*diff*/) override
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
index 961fe3db9f..10cbd2cd5d 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
@@ -49,8 +49,7 @@ enum BjarngrimSpells
// STORMFORGED LIEUTENANT
SPELL_ARC_WELD = 59085,
- SPELL_RENEW_STEEL_N = 52774,
- SPELL_RENEW_STEEL_H = 59160,
+ SPELL_RENEW_STEEL = 52774,
};
enum BjarngrimOther
@@ -91,6 +90,9 @@ enum BjarngrimEvents
// STORMFORGED LIEUTENANT
EVENT_ARC_WELD = 41,
EVENT_RENEW_STEEL = 42,
+
+ // CHARGE UP
+ EVENT_CHARGE_UP = 51,
};
enum Yells
@@ -111,26 +113,22 @@ struct boss_bjarngrim : public npc_escortAI
boss_bjarngrim(Creature* creature) : npc_escortAI(creature), summons(creature)
{
m_pInstance = creature->GetInstanceScript();
-
- // Init waypoints
- AddWaypoint(1, 1262.18f, 99.3f, 33.5f, 0);
- AddWaypoint(2, 1281.6f, 99.5f, 33.5f, 0);
- AddWaypoint(3, 1311.7f, 99.4f, 40.1f, 0);
- AddWaypoint(4, 1332.5f, 99.7f, 40.18f, 0);
- AddWaypoint(5, 1311.7f, 99.4f, 40.1f, 0);
- AddWaypoint(6, 1281.6f, 99.5f, 33.5f, 0);
- AddWaypoint(7, 1262.18f, 99.3f, 33.5f, 0);
- AddWaypoint(8, 1262, -26.9f, 33.5f, 0);
- AddWaypoint(9, 1281.2f, -26.8f, 33.5f, 0);
- AddWaypoint(10, 1311.3f, -26.9f, 40.03f, 0);
- AddWaypoint(11, 1332, -26.6f, 40.18f, 0);
- AddWaypoint(12, 1311.3f, -26.9f, 40.03f, 0);
- AddWaypoint(13, 1281.2f, -26.8f, 33.5f, 0);
- AddWaypoint(14, 1262, -26.9f, 33.5f, 0);
-
+ InitializeWaypoints();
+ me->SetWalk(true);
Start(true, ObjectGuid::Empty, nullptr, false, true);
}
+ void InitializeWaypoints()
+ {
+ AddWaypoint(1, 1262.0f, -26.9f, 33.5f, 10000);
+ AddWaypoint(2, 1262.18f, 99.3f, 33.5f, 10000);
+ AddWaypoint(3, 1262.0f, -26.9f, 33.5f, 0);
+ AddWaypoint(4, 1332.0f, -26.6f, 40.18f, 10000);
+ AddWaypoint(5, 1395.092f, 36.6425f, 50.038f, 10000);
+ AddWaypoint(6, 1332.0f, -26.6f, 40.18f, 0);
+ AddWaypoint(7, 1262.0f, -26.9f, 33.5f, 0);
+ }
+
void Reset() override
{
events.Reset();
@@ -139,12 +137,12 @@ struct boss_bjarngrim : public npc_escortAI
for (uint8 i = 0; i < 2; ++i)
if (Creature* dwarf = me->SummonCreature(NPC_STORMFORGED_LIEUTENANT, me->GetPositionX() + urand(4, 12), me->GetPositionY() + urand(4, 12), me->GetPositionZ()))
{
- dwarf->GetMotionMaster()->MoveFollow(me, 3, rand_norm() * 2 * 3.14f);
+ float angle = i == 0 ? 2.5f : 3.78f;
+ dwarf->GetMotionMaster()->MoveFollow(me, 3, angle);
summons.Summon(dwarf);
}
me->RemoveAllAuras();
- me->CastSpell(me, SPELL_TEMPORARY_ELECTRICAL_CHARGE, true);
if (m_pInstance)
m_pInstance->SetBossState(DATA_BJARNGRIM, NOT_STARTED);
@@ -271,14 +269,48 @@ struct boss_bjarngrim : public npc_escortAI
void WaypointReached(uint32 Point) override
{
- if (Point == 1 || Point == 8)
- DoCastSelf(SPELL_TEMPORARY_ELECTRICAL_CHARGE, true);
- else if (Point == 7 || Point == 14)
+ if (Point == 1)
+ {
+ events.CancelEvent(EVENT_CHARGE_UP);
+ events.ScheduleEvent(EVENT_CHARGE_UP, 2500ms, 0);
+ }
+ else if (Point == 2)
+ {
+ events.CancelEvent(EVENT_CHARGE_UP);
+ }
+ else if (Point == 3)
+ {
+ me->RemoveAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE);
+ }
+ else if (Point == 4)
+ {
+ events.CancelEvent(EVENT_CHARGE_UP);
+ events.ScheduleEvent(EVENT_CHARGE_UP, 2500ms, 0);
+ }
+ else if (Point == 5)
+ {
+ events.CancelEvent(EVENT_CHARGE_UP);
+ }
+ else if (Point == 6)
+ {
me->RemoveAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE);
+ }
}
void UpdateEscortAI(uint32 diff) override
{
+ events.Update(diff);
+
+ if (uint32 eventId = events.ExecuteEvent())
+ {
+ if (eventId == EVENT_CHARGE_UP)
+ {
+ me->CastSpell(me, SPELL_CHARGE_UP, true);
+ me->CastSpell(me, SPELL_TEMPORARY_ELECTRICAL_CHARGE, true);
+ return;
+ }
+ }
+
if (!me->IsInCombat())
return;
@@ -289,8 +321,6 @@ struct boss_bjarngrim : public npc_escortAI
return;
}
- events.Update(diff);
-
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
@@ -303,6 +333,11 @@ struct boss_bjarngrim : public npc_escortAI
events.Repeat(20s);
break;
+ case EVENT_CHARGE_UP:
+ DoCastSelf(SPELL_CHARGE_UP, true);
+ DoCastSelf(SPELL_TEMPORARY_ELECTRICAL_CHARGE, true);
+ break;
+
// DEFENSIVE STANCE
case EVENT_BJARNGRIM_REFLECTION:
DoCastSelf(SPELL_BJARNGRIM_REFLETION, true);
@@ -394,7 +429,7 @@ struct npc_stormforged_lieutenant : public ScriptedAI
case EVENT_RENEW_STEEL:
if (Creature* bjarngrim = ObjectAccessor::GetCreature(*me, BjarngrimGUID))
if (bjarngrim->IsAlive())
- me->CastSpell(bjarngrim, me->GetMap()->IsHeroic() ? SPELL_RENEW_STEEL_H : SPELL_RENEW_STEEL_N, true);
+ me->CastSpell(bjarngrim, SPELL_RENEW_STEEL, true);
events.Repeat(10s, 14s);
break;
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
index 3c51b4fa0f..6a72e570c8 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
@@ -63,6 +63,7 @@ enum IonarEvents
EVENT_CHECK_HEALTH = 3,
EVENT_CALL_SPARKS = 4,
EVENT_RESTORE = 5,
+ EVENT_CHANGE_TARGET = 6,
};
struct boss_ionar : public BossAI
@@ -85,8 +86,8 @@ struct boss_ionar : public BossAI
if (!spark)
events.RescheduleEvent(EVENT_CHECK_HEALTH, 1s, 0, 1);
- events.RescheduleEvent(EVENT_BALL_LIGHTNING, 10s, 0, 1);
- events.RescheduleEvent(EVENT_STATIC_OVERLOAD, 5s, 0, 1);
+ events.RescheduleEvent(EVENT_BALL_LIGHTNING, 7s, 11s, 0, 1);
+ events.RescheduleEvent(EVENT_STATIC_OVERLOAD, 6s, 12s, 0, 1);
}
void JustEngagedWith(Unit*) override
@@ -138,7 +139,7 @@ struct boss_ionar : public BossAI
me->SetControlled(true, UNIT_STATE_STUNNED);
events.SetPhase(2);
- events.ScheduleEvent(EVENT_CALL_SPARKS, 15s, 0, 2);
+ events.ScheduleEvent(EVENT_CALL_SPARKS, 20s, 0, 2);
}
void UpdateAI(uint32 diff) override
@@ -155,17 +156,17 @@ struct boss_ionar : public BossAI
{
case EVENT_BALL_LIGHTNING:
DoCastRandomTarget(SPELL_BALL_LIGHTNING, 1, 0.0f, false);
- events.Repeat(10s, 11s);
+ events.Repeat(8s, 18s);
break;
case EVENT_STATIC_OVERLOAD:
DoCastRandomTarget(SPELL_STATIC_OVERLOAD);
- events.Repeat(5s, 6s);
+ events.Repeat(9s, 14s);
break;
case EVENT_CALL_SPARKS:
{
EntryCheckPredicate pred(NPC_SPARK_OF_IONAR);
summons.DoAction(ACTION_CALLBACK, pred);
- events.ScheduleEvent(EVENT_RESTORE, 2s, 0, 2);
+ events.ScheduleEvent(EVENT_RESTORE, 5s, 0, 2);
return;
}
case EVENT_RESTORE:
@@ -187,20 +188,47 @@ struct npc_spark_of_ionar : public ScriptedAI
npc_spark_of_ionar(Creature* creature) : ScriptedAI(creature) { }
void MoveInLineOfSight(Unit*) override { }
- void UpdateAI(uint32) override { }
void AttackStart(Unit* /*who*/) override { }
- void Reset() override { returning = false; }
+ void Reset() override
+ {
+ returning = false;
+ _events.ScheduleEvent(EVENT_CHANGE_TARGET, 3s);
+ }
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
{
damage = 0;
}
+ void UpdateAI(uint32 diff) override
+ {
+ if (returning)
+ return;
+
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_CHANGE_TARGET:
+ if (Player* tgt = SelectTargetFromPlayerList(100))
+ {
+ me->GetMotionMaster()->Clear();
+ me->GetMotionMaster()->MoveFollow(tgt, 0.0f, 0.0f, MOTION_SLOT_CONTROLLED);
+ }
+ _events.Repeat(3s);
+ break;
+ }
+ }
+ }
+
void DoAction(int32 param) override
{
if (param == ACTION_CALLBACK)
{
+ _events.Reset();
me->SetSpeed(MOVE_RUN, 2.5f);
me->GetThreatMgr().ClearAllThreat();
me->CombatStop(true);
@@ -218,6 +246,7 @@ struct npc_spark_of_ionar : public ScriptedAI
}
private:
+ EventMap _events;
bool returning;
};
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
index 043f9087d4..361c232865 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
@@ -25,13 +25,11 @@
enum LokenSpells
{
SPELL_ARC_LIGHTNING = 52921,
- SPELL_LIGHTNING_NOVA_N = 52960,
- SPELL_LIGHTNING_NOVA_H = 59835,
+ SPELL_LIGHTNING_NOVA = 52960,
SPELL_LIGHTNING_NOVA_VISUAL = 56502,
SPELL_LIGHTNING_NOVA_THUNDERS = 52663,
- SPELL_PULSING_SHOCKWAVE_N = 52961,
- SPELL_PULSING_SHOCKWAVE_H = 59836,
+ SPELL_PULSING_SHOCKWAVE = 52961,
// Achievement
ACHIEVEMENT_TIMELY_DEATH = 20384
@@ -146,10 +144,10 @@ struct boss_loken : public BossAI
events.DelayEvents(5s);
events.ScheduleEvent(EVENT_AURA_REMOVE, me->GetMap()->IsHeroic() ? 4s : 5s);
- me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_LIGHTNING_NOVA_H : SPELL_LIGHTNING_NOVA_N, false);
+ me->CastSpell(me, SPELL_LIGHTNING_NOVA, false);
break;
case EVENT_SHOCKWAVE:
- me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_PULSING_SHOCKWAVE_H : SPELL_PULSING_SHOCKWAVE_N, false);
+ me->CastSpell(me, SPELL_PULSING_SHOCKWAVE, false);
break;
case EVENT_ARC_LIGHTNING:
if (Unit* target = SelectTargetFromPlayerList(100, SPELL_ARC_LIGHTNING))
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
index 30e110231f..29ff343a88 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
@@ -23,19 +23,16 @@
enum VolkahnSpells
{
// Volkhan
- SPELL_HEAT_N = 52387,
- SPELL_HEAT_H = 59528,
- SPELL_SHATTERING_STOMP_N = 52237,
- SPELL_SHATTERING_STOMP_H = 59529,
+ SPELL_HEAT = 52387,
+ SPELL_SHATTERING_STOMP = 52237,
SPELL_TEMPER = 52238,
SPELL_SUMMON_MOLTEN_GOLEM = 52405,
//Molten Golem
SPELL_BLAST_WAVE = 23113,
- SPELL_IMMOLATION_STRIKE_N = 52433,
- SPELL_IMMOLATION_STRIKE_H = 59530,
- SPELL_SHATTER_N = 52429,
- SPELL_SHATTER_H = 59527,
+ SPELL_COOL_DOWN = 52443,
+ SPELL_IMMOLATION_STRIKE = 52433,
+ SPELL_SHATTER = 52429,
};
enum VolkhanOther
@@ -63,8 +60,8 @@ enum VolkhanEvents
EVENT_MOVE_TO_ANVIL = 5,
// Molten Golem
- EVENT_BLAST = 11,
- EVENT_IMMOLATION = 12,
+ EVENT_IMMOLATION_STRIKE = 12,
+ EVENT_CHANGE_TARGET = 13,
};
enum Yells
@@ -86,7 +83,7 @@ struct boss_volkhan : public BossAI
{
_Reset();
x = y = z = PointID = ShatteredCount = 0;
- HealthCheck = 100;
+ shatteredStompCast = false;
me->SetSpeed(MOVE_RUN, 1.2f, true);
me->SetReactState(REACT_AGGRESSIVE);
instance->SetData(DATA_VOLKHAN_ACHIEVEMENT, true);
@@ -97,7 +94,10 @@ struct boss_volkhan : public BossAI
_JustEngagedWith();
me->SetInCombatWithZone();
Talk(SAY_AGGRO);
- ScheduleEvents(false);
+ events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, randtime(9s, 14s));
+ events.ScheduleEvent(EVENT_HEAT, randtime(18s, 38s));
+ events.ScheduleEvent(EVENT_CHECK_HEALTH, 1s);
+ events.ScheduleEvent(EVENT_POSITION, 4s);
}
void JustDied(Unit*) override
@@ -155,15 +155,6 @@ struct boss_volkhan : public BossAI
Talk(SAY_SLAY);
}
- void ScheduleEvents(bool anvil)
- {
- events.SetPhase(1);
- events.RescheduleEvent(EVENT_HEAT, 8s, 0, 1);
- events.RescheduleEvent(EVENT_SHATTER, 10s, 0, 1);
- events.RescheduleEvent(EVENT_CHECK_HEALTH, anvil ? 1s : 6s, 0, 1);
- events.RescheduleEvent(EVENT_POSITION, 4s, 0, 1);
- }
-
void JustSummoned(Creature* summon) override
{
summons.Summon(summon);
@@ -186,6 +177,19 @@ struct boss_volkhan : public BossAI
}
}
+ bool HasActiveGolem()
+ {
+ for (ObjectGuid const& guid : summons)
+ {
+ if (Creature* golem = ObjectAccessor::GetCreature(*me, guid))
+ {
+ if (golem->GetEntry() == NPC_MOLTEN_GOLEM && golem->IsAlive())
+ return true;
+ }
+ }
+ return false;
+ }
+
void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
@@ -194,10 +198,8 @@ struct boss_volkhan : public BossAI
if (id == POINT_ANVIL)
{
me->SetSpeed(MOVE_RUN, 1.2f, true);
- me->SetReactState(REACT_AGGRESSIVE);
- me->CastSpell(me, SPELL_TEMPER, false);
+ DoCastSelf(SPELL_TEMPER);
PointID = 0;
- ScheduleEvents(true);
// update orientation at server
me->SetOrientation(2.19f);
@@ -209,24 +211,26 @@ struct boss_volkhan : public BossAI
me->SetControlled(true, UNIT_STATE_ROOT);
}
else
- events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, 0ms, 0, 2);
+ me->GetMotionMaster()->MovePoint(PointID, x, y, z);
}
void SpellHitTarget(Unit* /*who*/, SpellInfo const* spellInfo) override
{
if (spellInfo->Id == SPELL_TEMPER)
{
- me->CastSpell(me, SPELL_SUMMON_MOLTEN_GOLEM, true);
- me->CastSpell(me, SPELL_SUMMON_MOLTEN_GOLEM, true);
- me->GetMotionMaster()->MoveChase(me->GetVictim());
+ DoCastSelf(SPELL_SUMMON_MOLTEN_GOLEM, true);
+ DoCastSelf(SPELL_SUMMON_MOLTEN_GOLEM, true);
me->SetControlled(false, UNIT_STATE_ROOT);
+ me->SetReactState(REACT_AGGRESSIVE);
+ if (me->GetVictim())
+ me->GetMotionMaster()->MoveChase(me->GetVictim());
+
+ events.RescheduleEvent(EVENT_HEAT, randtime(9s, 24s));
}
}
void GoToAnvil()
{
- events.SetPhase(2);
- HealthCheck -= 20;
me->SetSpeed(MOVE_RUN, 4.0f, true);
me->SetReactState(REACT_PASSIVE);
@@ -235,12 +239,12 @@ struct boss_volkhan : public BossAI
if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
me->GetMotionMaster()->MovementExpired();
- events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, 0ms, 0, 2);
+ GetNextPos();
+ me->GetMotionMaster()->MovePoint(PointID, x, y, z);
}
void UpdateAI(uint32 diff) override
{
- //Return since we have no target
if (!UpdateVictim())
return;
@@ -252,31 +256,31 @@ struct boss_volkhan : public BossAI
switch (events.ExecuteEvent())
{
case EVENT_HEAT:
- me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_HEAT_H : SPELL_HEAT_N, true);
- events.Repeat(8s);
+ if (HasActiveGolem())
+ {
+ DoCastSelf(SPELL_HEAT);
+ events.Repeat(randtime(9s, 24s));
+ }
break;
case EVENT_CHECK_HEALTH:
- if (HealthBelowPct(HealthCheck))
- GoToAnvil();
-
- events.Repeat(1s);
- return;
- case EVENT_SHATTER:
+ if (!shatteredStompCast && HealthBelowPct(25))
{
- events.Repeat(10s);
+ shatteredStompCast = true;
+ DoCastAOE(SPELL_SHATTERING_STOMP);
+ Talk(SAY_STOMP);
summons.DoAction(ACTION_SHATTER);
- break;
}
+ events.Repeat(1s);
+ return;
case EVENT_MOVE_TO_ANVIL:
- GetNextPos();
- me->GetMotionMaster()->MovePoint(PointID, x, y, z);
+ GoToAnvil();
+ events.Repeat(randtime(30s, 36s));
return;
case EVENT_POSITION:
if (me->GetDistance(1331.9f, -106, 56) > 95)
EnterEvadeMode();
else
events.Repeat(4s);
-
return;
}
@@ -286,10 +290,10 @@ struct boss_volkhan : public BossAI
private:
EventMap events;
SummonList summons;
- uint8 HealthCheck;
float x, y, z;
uint8 PointID;
uint8 ShatteredCount;
+ bool shatteredStompCast;
};
struct npc_molten_golem : public ScriptedAI
@@ -302,8 +306,9 @@ struct npc_molten_golem : public ScriptedAI
void Reset() override
{
events.Reset();
- events.ScheduleEvent(EVENT_BLAST, 7s);
- events.ScheduleEvent(EVENT_IMMOLATION, 3s);
+ events.ScheduleEvent(EVENT_IMMOLATION_STRIKE, 3s);
+ events.ScheduleEvent(EVENT_CHANGE_TARGET, 5s);
+ DoCastSelf(SPELL_COOL_DOWN, true);
}
void DamageTaken(Unit*, uint32& uiDamage, DamageEffectType, SpellSchoolMask) override
@@ -316,6 +321,9 @@ struct npc_molten_golem : public ScriptedAI
if (uiDamage >= me->GetHealth())
{
+ if (me->GetMap()->IsHeroic())
+ DoCastSelf(SPELL_BLAST_WAVE, true);
+
me->UpdateEntry(NPC_BRITTLE_GOLEM, 0, false);
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_DISABLE_MOVE);
me->SetHealth(me->GetMaxHealth());
@@ -337,7 +345,7 @@ struct npc_molten_golem : public ScriptedAI
if (Creature* volkhan = m_pInstance->GetCreature(DATA_VOLKHAN))
volkhan->AI()->DoAction(ACTION_DESTROYED);
- me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_SHATTER_H : SPELL_SHATTER_N, true);
+ me->CastSpell(me, SPELL_SHATTER, true);
me->DespawnOrUnsummon(500ms);
}
}
@@ -355,14 +363,19 @@ struct npc_molten_golem : public ScriptedAI
switch (events.ExecuteEvent())
{
- case EVENT_BLAST:
- me->CastSpell(me, SPELL_BLAST_WAVE, false);
- events.Repeat(14s);
- break;
- case EVENT_IMMOLATION:
- me->CastSpell(me->GetVictim(), me->GetMap()->IsHeroic() ? SPELL_IMMOLATION_STRIKE_H : SPELL_IMMOLATION_STRIKE_N, false);
+ case EVENT_IMMOLATION_STRIKE:
+ if (SelectTarget(SelectTargetMethod::MaxThreat, 0, 0.0f, true, true, -SPELL_IMMOLATION_STRIKE))
+ DoCastVictim(SPELL_IMMOLATION_STRIKE);
events.Repeat(5s);
break;
+ case EVENT_CHANGE_TARGET:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true))
+ {
+ me->GetThreatMgr().ResetAllThreat();
+ me->AddThreat(target, 30000.0f);
+ AttackStart(target);
+ }
+ break;
}
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
index bc40837a70..f2a76412ce 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
@@ -24,16 +24,13 @@
enum spells
{
- GROUND_SPIKE_H = 59750,
- BOULDER_TOSS = 50843,
- BOULDER_TOSS_H = 59742,
- SHATTER = 50810,
- SHATTER_H = 61546,
- STOMP = 50868,
- STOMP_H = 59744,
- GROUND_SLAM = 50827,
- GROUND_SLAM_STONED_EFFECT = 50812,
- SPELL_SHATTER_EFFECT = 50811,
+ SPELL_GROUND_SPIKE = 59750,
+ SPELL_BOULDER_TOSS = 50843,
+ SPELL_SHATTER = 50810,
+ SPELL_STOMP = 50868,
+ SPELL_GROUND_SLAM = 50827,
+ SPELL_GROUND_SLAM_STONED_EFFECT = 50812,
+ SPELL_SHATTER_EFFECT = 50811,
};
enum events
@@ -105,7 +102,7 @@ public:
Map::PlayerList const& players = map->GetPlayers();
for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
if (itr->GetSource()->IsAlive())
- itr->GetSource()->RemoveAura(GROUND_SLAM_STONED_EFFECT);
+ itr->GetSource()->RemoveAura(SPELL_GROUND_SLAM_STONED_EFFECT);
}
}
@@ -123,37 +120,38 @@ public:
{
case EVENT_BOULDER:
{
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0))
- me->CastSpell(target, DUNGEON_MODE(BOULDER_TOSS, BOULDER_TOSS_H), false);
-
+ DoCastRandomTarget(SPELL_BOULDER_TOSS, 0, 50.0f);
events.Repeat(5s, 7s);
break;
}
case EVENT_GROUND_SPIKE:
{
- me->CastSpell(me->GetVictim(), GROUND_SPIKE_H, false); // current enemy target
+ DoCastRandomTarget(SPELL_GROUND_SPIKE, 0, 50.0f);
events.Repeat(8s, 11s);
break;
}
case EVENT_STOMP:
{
- me->CastSpell(me, DUNGEON_MODE(STOMP, STOMP_H), false);
+ me->CastSpell(me, SPELL_STOMP, false);
events.Repeat(13s, 18s);
break;
}
case EVENT_GROUND_SLAM:
{
events.Repeat(10s, 13s);
- me->CastSpell(me->GetVictim(), GROUND_SLAM, true);
+ me->CastSpell(me->GetVictim(), SPELL_GROUND_SLAM, true);
+ me->SetReactState(REACT_PASSIVE);
+ me->AttackStop();
events.DelayEvents(10s);
events.RescheduleEvent(EVENT_SHATTER, 8s);
break;
}
case EVENT_SHATTER:
{
- me->CastSpell((Unit*)nullptr, DUNGEON_MODE(SHATTER, SHATTER_H), false);
+ me->CastSpell((Unit*)nullptr, SPELL_SHATTER, false);
Talk(SAY_SHATTER);
events.RescheduleEvent(EVENT_REMOVE_STONED, 1500ms);
+ me->SetReactState(REACT_AGGRESSIVE);
break;
}
case EVENT_REMOVE_STONED:
@@ -193,7 +191,7 @@ class spell_krystallus_shatter : public SpellScript
{
if (Unit* target = GetHitUnit())
{
- target->RemoveAurasDueToSpell(GROUND_SLAM_STONED_EFFECT);
+ target->RemoveAurasDueToSpell(SPELL_GROUND_SLAM_STONED_EFFECT);
target->CastSpell((Unit*)nullptr, SPELL_SHATTER_EFFECT, true);
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp
index 814daf759a..40bf8449d0 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp
@@ -21,13 +21,10 @@
enum spells
{
- PARTING_SORROW = 59723,
- PILLAR_OF_WOE = 50761,
- PILLAR_OF_WOE_H = 59727,
- SHOCK_OF_SORROW = 50760,
- SHOCK_OF_SORROW_H = 59726,
- STORM_OF_GRIEF = 50752,
- STORM_OF_GRIEF_H = 59772,
+ SPELL_PARTING_SORROW = 59723,
+ SPELL_PILLAR_OF_WOE = 50761,
+ SPELL_SHOCK_OF_SORROW = 50760,
+ SPELL_STORM_OF_GRIEF = 50752,
ACHIEVEMENT_GOOD_GRIEF = 20383,
};
@@ -80,10 +77,11 @@ public:
void JustEngagedWith(Unit* /*who*/) override
{
- events.ScheduleEvent(EVENT_STORM, 5s);
- events.ScheduleEvent(EVENT_SHOCK, 26s, 32s);
- events.ScheduleEvent(EVENT_PILLAR, 12s, 20s);
- events.ScheduleEvent(EVENT_PARTING, 8s);
+ events.ScheduleEvent(EVENT_STORM, 6s, 10s);
+ events.ScheduleEvent(EVENT_SHOCK, 14s, 29s);
+ events.ScheduleEvent(EVENT_PILLAR, 7s, 15s);
+ if (IsHeroic())
+ events.ScheduleEvent(EVENT_PARTING, 27s, 45s);
Talk(SAY_AGGRO);
if (pInstance)
@@ -107,32 +105,45 @@ public:
{
case EVENT_STORM:
{
- me->CastSpell(me->GetVictim(), DUNGEON_MODE(STORM_OF_GRIEF, STORM_OF_GRIEF_H), true);
- events.Repeat(10s);
+ me->CastSpell(me->GetVictim(), SPELL_STORM_OF_GRIEF, true);
+ events.Repeat(16s, 20s);
break;
}
case EVENT_SHOCK:
{
- me->CastSpell(me->GetVictim(), DUNGEON_MODE(SHOCK_OF_SORROW, SHOCK_OF_SORROW_H), false);
+ me->CastSpell(me->GetVictim(), SPELL_SHOCK_OF_SORROW, false);
Talk(SAY_STUN);
- events.Repeat(16s, 22s);
+ events.Repeat(19s, 33s);
break;
}
case EVENT_PILLAR:
{
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0))
- me->CastSpell(target, DUNGEON_MODE(PILLAR_OF_WOE, PILLAR_OF_WOE_H), false);
+ me->CastSpell(target, SPELL_PILLAR_OF_WOE, false);
- events.Repeat(12s, 20s);
+ events.Repeat(8s, 31s);
break;
}
case EVENT_PARTING:
{
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0))
- me->CastSpell(target, PARTING_SORROW, false);
-
- events.Repeat(6s, 16s);
+ Unit* target = nullptr;
+ std::list<Unit*> targetList;
+
+ SelectTargetList(targetList, 10, SelectTargetMethod::Random, 0, 50.0f, true);
+ for (Unit* possibleTarget : targetList)
+ {
+ if (possibleTarget && possibleTarget->IsPlayer() && possibleTarget->getPowerType() == POWER_MANA)
+ {
+ target = possibleTarget;
+ break;
+ }
+ }
+
+ if (target)
+ me->CastSpell(target, SPELL_PARTING_SORROW, false);
+
+ events.Repeat(27s, 45s);
break;
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
index 5292e69e40..f5ceede61c 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
@@ -25,25 +25,18 @@ enum Spells
// SJONNIR
SPELL_FRENZY = 28747, //at 20% hp
SPELL_CHAIN_LIGHTNING = 50830,
- SPELL_CHAIN_LIGHTNING_H = 59844,
SPELL_LIGHTNING_SHIELD = 50831,
- SPELL_LIGHTNING_SHIELD_H = 59845,
SPELL_STATIC_CHARGE = 50834,
- SPELL_STATIC_CHARGE_H = 59846,
SPELL_LIGHTNING_RING = 50840,
- SPELL_LIGHTNING_RING_H = 59848,
// IRON SLUDGE
SPELL_TOXIC_VOLLEY = 50838,
- SPELL_TOXIC_VOLLEY_H = 59853,
// FORGED IRON DWARF
SPELL_LIGHTNING_TETHER = 50895,
- SPELL_LIGHTNING_TETHER_H = 59851,
// FORGED IRON TROGG
SPELL_LIGHTNING_SHOCK = 50900,
- SPELL_LIGHTNING_SHOCK_H = 59852,
};
enum Npc
@@ -241,14 +234,14 @@ public:
}
case EVENT_SHIELD:
{
- me->CastSpell(me, DUNGEON_MODE(SPELL_LIGHTNING_SHIELD, SPELL_LIGHTNING_SHIELD_H), false);
+ me->CastSpell(me, SPELL_LIGHTNING_SHIELD, false);
events.Repeat(14s, 19s);
break;
}
case EVENT_CHAIN_LIGHTNING:
{
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0))
- me->CastSpell(target, DUNGEON_MODE(SPELL_CHAIN_LIGHTNING, SPELL_CHAIN_LIGHTNING_H), false);
+ me->CastSpell(target, SPELL_CHAIN_LIGHTNING, false);
events.Repeat(6s, 12s);
break;
@@ -256,14 +249,14 @@ public:
case EVENT_STATIC_CHARGE:
{
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0))
- me->CastSpell(target, DUNGEON_MODE(SPELL_STATIC_CHARGE, SPELL_STATIC_CHARGE_H), false);
+ me->CastSpell(target, SPELL_STATIC_CHARGE, false);
events.Repeat(20s);
break;
}
case EVENT_LIGHTNING_RING:
{
- me->CastSpell(me, DUNGEON_MODE(SPELL_LIGHTNING_RING, SPELL_LIGHTNING_RING_H), false);
+ me->CastSpell(me, SPELL_LIGHTNING_RING, false);
events.Repeat(25s, 31s);
events.DelayEvents(10s); // Channel duration
break;
@@ -399,7 +392,7 @@ public:
if (!UpdateVictim())
return;
- DoSpellAttackIfReady((me->GetEntry() == NPC_FORGED_IRON_DWARF) ? DUNGEON_MODE(SPELL_LIGHTNING_TETHER, SPELL_LIGHTNING_TETHER_H) : DUNGEON_MODE(SPELL_LIGHTNING_SHOCK, SPELL_LIGHTNING_SHOCK_H));
+ DoSpellAttackIfReady((me->GetEntry() == NPC_FORGED_IRON_DWARF) ? SPELL_LIGHTNING_TETHER : SPELL_LIGHTNING_SHOCK);
}
};
};
@@ -448,7 +441,7 @@ public:
// Every 5 seconds
case EVENT_TOXIC_VOLLEY:
{
- me->CastSpell(me, DUNGEON_MODE(SPELL_TOXIC_VOLLEY, SPELL_TOXIC_VOLLEY_H), false);
+ me->CastSpell(me, SPELL_TOXIC_VOLLEY, false);
events.Repeat(5s);
break;
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp
index 809245c986..b8943360ba 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp
@@ -48,13 +48,10 @@ enum Misc
{
// BRANN EVENT
SPELL_GLARE_OF_THE_TRIBUNAL = 50988,
- SPELL_GLARE_OF_THE_TRIBUNAL_H = 59870,
SPELL_DARK_MATTER_VISUAL = 51000,
SPELL_DARK_MATTER_VISUAL_CHANNEL= 51001,
SPELL_DARK_MATTER = 51012,
- SPELL_DARK_MATTER_H = 59868,
SPELL_SEARING_GAZE = 51136,
- SPELL_SEARING_GAZE_H = 59867,
// DARK RUNE PROTECTOR
SPELL_DRP_CHARGE = 22120,
@@ -62,14 +59,11 @@ enum Misc
// DARK RUNE STORMCALLER
SPELL_DRS_LIGHTING_BOLT = 12167,
- SPELL_DRS_LIGHTING_BOLT_H = 59863,
SPELL_DRS_SHADOW_WORD_PAIN = 15654,
- SPELL_DRS_SHADOW_WORD_PAIN_H = 59864,
// IRON GOLEM CUSTODIAN
SPELL_IGC_CRUSH_ARMOR = 33661,
SPELL_IGC_GROUND_SMASH = 12734,
- SPELL_IGC_GROUND_SMASH_H = 59865,
// QUESTS
QUEST_HALLS_OF_STONE = 13207,
@@ -391,7 +385,6 @@ public:
switch (action)
{
case ACTION_START_ESCORT_EVENT:
- me->SetWalk(false);
Start(false, ObjectGuid::Empty, 0, true, false);
Talk(SAY_BRANN_ESCORT_START);
me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE);
@@ -457,7 +450,6 @@ public:
door->SetGoState(GO_STATE_READY);
break;
case ACTION_OPEN_DOOR:
- me->SetWalk(false);
Start(false, ObjectGuid::Empty, 0, true, false);
SetNextWaypoint(34, false);
SetEscortPaused(false);
@@ -507,7 +499,7 @@ public:
if (Creature* kaddrak = GetKaddrak())
{
if (Player* plr = SelectTargetFromPlayerList(100.0f))
- kaddrak->CastSpell(plr, DUNGEON_MODE(SPELL_GLARE_OF_THE_TRIBUNAL, SPELL_GLARE_OF_THE_TRIBUNAL_H), true);
+ kaddrak->CastSpell(plr, SPELL_GLARE_OF_THE_TRIBUNAL, true);
}
events.RescheduleEvent(EVENT_KADDRAK_SWITCH_EYE, 1s);
@@ -595,7 +587,7 @@ public:
{
if (Creature* darkMatterTarget = ObjectAccessor::GetCreature(*me, darkMatterTargetGUID))
{
- darkMatterTarget->CastSpell(darkMatterTarget, darkMatterTarget->GetMap()->IsHeroic() ? SPELL_DARK_MATTER_H : SPELL_DARK_MATTER, true);
+ darkMatterTarget->CastSpell(darkMatterTarget, SPELL_DARK_MATTER, true);
darkMatterTarget->DespawnOrUnsummon(500ms);
}
break;
@@ -614,7 +606,7 @@ public:
{
// summon another abedneum to create double beam, despawn just after trigger despawn
me->SummonCreature(NPC_ABEDNEUM, 897.0f, 326.9f, 223.5f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 12000);
- cr->CastSpell(cr, DUNGEON_MODE(SPELL_SEARING_GAZE, SPELL_SEARING_GAZE_H), true);
+ cr->CastSpell(cr, SPELL_SEARING_GAZE, true);
}
}
events.Repeat(15s);
@@ -1064,13 +1056,13 @@ public:
{
case EVENT_DRS_LIGHTNING_BOLD:
{
- me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_DRS_LIGHTING_BOLT_H : SPELL_DRS_LIGHTING_BOLT, false);
+ me->CastSpell(me->GetVictim(), SPELL_DRS_LIGHTING_BOLT, false);
events.Repeat(5s);
break;
}
case EVENT_DRS_SHADOW_WORD_PAIN:
{
- me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_DRS_SHADOW_WORD_PAIN_H : SPELL_DRS_SHADOW_WORD_PAIN, false);
+ me->CastSpell(me->GetVictim(), SPELL_DRS_SHADOW_WORD_PAIN, false);
events.Repeat(12s);
break;
}
@@ -1124,7 +1116,7 @@ public:
}
case EVENT_IGC_GROUND_SMASH:
{
- me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_IGC_GROUND_SMASH_H : SPELL_IGC_GROUND_SMASH, false);
+ me->CastSpell(me->GetVictim(), SPELL_IGC_GROUND_SMASH, false);
events.Repeat(5s);
break;
}
@@ -1141,13 +1133,13 @@ class spell_hos_dark_matter : public AuraScript
bool Validate(SpellInfo const* /*spellInfo*/) override
{
- return ValidateSpellInfo({ SPELL_DARK_MATTER_H, SPELL_DARK_MATTER });
+ return ValidateSpellInfo({ SPELL_DARK_MATTER });
}
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (Unit* caster = GetCaster())
- caster->CastSpell(caster, caster->GetMap()->IsHeroic() ? SPELL_DARK_MATTER_H : SPELL_DARK_MATTER, true);
+ caster->CastSpell(caster, SPELL_DARK_MATTER, true);
}
void Register() override
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp
index 4a9e61ff3e..dd6cd84b8c 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp
@@ -45,7 +45,6 @@ public:
ObjectGuid goSjonnirDoorGUID;
ObjectGuid goLeftPipeGUID;
ObjectGuid goRightPipeGUID;
- ObjectGuid goTribunalDoorGUID;
ObjectGuid SjonnirGUID;
ObjectGuid BrannGUID;
@@ -96,10 +95,6 @@ public:
case GO_TRIBUNAL_CONSOLE:
goTribunalConsoleGUID = go->GetGUID();
break;
- case GO_TRIBUNAL_ACCESS_DOOR:
- goTribunalDoorGUID = go->GetGUID();
- go->SetGoState(GO_STATE_READY);
- break;
case GO_SKY_FLOOR:
goSkyRoomFloorGUID = go->GetGUID();
if (Encounter[BOSS_TRIBUNAL_OF_AGES] == DONE)
@@ -141,8 +136,6 @@ public:
{
case GO_TRIBUNAL_CONSOLE:
return goTribunalConsoleGUID;
- case GO_TRIBUNAL_ACCESS_DOOR:
- return goTribunalDoorGUID;
case GO_SJONNIR_CONSOLE:
return goSjonnirConsoleGUID;
case GO_SJONNIR_DOOR:
@@ -208,10 +201,6 @@ public:
isKrystalusDead = type == BOSS_KRYSTALLUS || isKrystalusDead;
}
- if (isMaidenOfGriefDead && isKrystalusDead)
- if (GameObject* tribunalDoor = instance->GetGameObject(goTribunalDoorGUID))
- tribunalDoor->SetGoState(GO_STATE_ACTIVE);
-
if (type == BOSS_TRIBUNAL_OF_AGES && data == SPECIAL)
{
if (GameObject* pSkyRoomFloor = instance->GetGameObject(goSkyRoomFloorGUID))
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp
index 1e6dec95fe..0ef24cb14b 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp
@@ -31,55 +31,35 @@ enum AssemblySpells
SPELL_BERSERK = 47008,
// Steelbreaker
- SPELL_HIGH_VOLTAGE_10 = 61890,
- SPELL_HIGH_VOLTAGE_25 = 63498,
- SPELL_FUSION_PUNCH_10 = 61903,
- SPELL_FUSION_PUNCH_25 = 63493,
- SPELL_STATIC_DISRUPTION_10 = 61911,
- SPELL_STATIC_DISRUPTION_25 = 63495,
- SPELL_OVERWHELMING_POWER_10 = 64637,
- SPELL_OVERWHELMING_POWER_25 = 61888,
+ SPELL_HIGH_VOLTAGE = 61890,
+ SPELL_FUSION_PUNCH = 61903,
+ SPELL_STATIC_DISRUPTION = 61911,
+ SPELL_OVERWHELMING_POWER = 64637,
SPELL_ELECTRICAL_CHARGE = 61902,
// Runemaster Molgeim
SPELL_SHIELD_OF_RUNES_BUFF = 62277,
- SPELL_SHIELD_OF_RUNES_10 = 62274,
- SPELL_SHIELD_OF_RUNES_25 = 63489,
+ SPELL_SHIELD_OF_RUNES = 62274,
SPELL_RUNE_OF_POWER = 61973,
- SPELL_RUNE_OF_DEATH_10 = 62269,
- SPELL_RUNE_OF_DEATH_25 = 63490,
+ SPELL_RUNE_OF_DEATH = 62269,
SPELL_RUNE_OF_SUMMONING = 62273,
SPELL_RUNE_OF_SUMMONING_SUMMON = 62020,
- SPELL_LIGHTNING_BLAST_10 = 62054,
- SPELL_LIGHTNING_BLAST_25 = 63491,
+ SPELL_LIGHTNING_BLAST = 62054,
CREATURE_LIGHTNING_ELEMENTAL = 32958,
CREATURE_RUNE_OF_SUMMONING = 33051,
SPELL_RUNE_OF_POWER_OOC_CHANNEL = 61975,
// Stormcaller Brundir
- SPELL_CHAIN_LIGHTNING_10 = 61879,
- SPELL_CHAIN_LIGHTNING_25 = 63479,
- SPELL_OVERLOAD_10 = 61869,
- SPELL_OVERLOAD_25 = 63481,
- SPELL_LIGHTNING_WHIRL_10 = 61915,
- SPELL_LIGHTNING_WHIRL_25 = 63483,
- SPELL_LIGHTNING_TENDRILS_10 = 61887,
- SPELL_LIGHTNING_TENDRILS_25 = 63486,
+ SPELL_CHAIN_LIGHTNING = 61879,
+ SPELL_OVERLOAD = 61869,
+ SPELL_LIGHTNING_WHIRL = 61915,
+ SPELL_LIGHTNING_WHIRL_TRIGG = 61916,
+ SPELL_LIGHTNING_TENDRILS = 61887,
+ SPELL_LIGHTNING_TENDRILS_2 = 61883,
SPELL_STORMSHIELD = 64187,
SPELL_LIGHTNING_CHANNEL_PRE = 61942,
-};
-#define SPELL_HIGH_VOLTAGE RAID_MODE(SPELL_HIGH_VOLTAGE_10, SPELL_HIGH_VOLTAGE_25)
-#define SPELL_FUSION_PUNCH RAID_MODE(SPELL_FUSION_PUNCH_10, SPELL_FUSION_PUNCH_25)
-#define SPELL_STATIC_DISRUPTION RAID_MODE(SPELL_STATIC_DISRUPTION_10, SPELL_STATIC_DISRUPTION_25)
-#define SPELL_OVERWHELMING_POWER RAID_MODE(SPELL_OVERWHELMING_POWER_10, SPELL_OVERWHELMING_POWER_25)
-#define SPELL_SHIELD_OF_RUNES RAID_MODE(SPELL_SHIELD_OF_RUNES_10, SPELL_SHIELD_OF_RUNES_25)
-#define SPELL_RUNE_OF_DEATH RAID_MODE(SPELL_RUNE_OF_DEATH_10, SPELL_RUNE_OF_DEATH_25)
-#define SPELL_LIGHTNING_BLAST RAID_MODE(SPELL_LIGHTNING_BLAST_10, SPELL_LIGHTNING_BLAST_25)
-#define SPELL_CHAIN_LIGHTNING RAID_MODE(SPELL_CHAIN_LIGHTNING_10, SPELL_CHAIN_LIGHTNING_25)
-#define SPELL_OVERLOAD RAID_MODE(SPELL_OVERLOAD_10, SPELL_OVERLOAD_25)
-#define SPELL_LIGHTNING_WHIRL RAID_MODE(SPELL_LIGHTNING_WHIRL_10, SPELL_LIGHTNING_WHIRL_25)
-#define SPELL_LIGHTNING_TENDRILS RAID_MODE(SPELL_LIGHTNING_TENDRILS_10, SPELL_LIGHTNING_TENDRILS_25)
+};
enum eEnums
{
@@ -720,7 +700,7 @@ public:
void SpellHitTarget(Unit* /*target*/, SpellInfo const* spellInfo) override
{
- if (spellInfo->Id == SPELL_CHAIN_LIGHTNING || spellInfo->Id == uint32(RAID_MODE(61916, 63482))) // Lightning Whirl triggered
+ if (spellInfo->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_CHAIN_LIGHTNING, me) || spellInfo->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_LIGHTNING_WHIRL_TRIGG, me))
_stunnedAchievement = false;
}
@@ -797,7 +777,7 @@ public:
me->SetUnitFlag(UNIT_FLAG_STUNNED);
me->CastSpell(me, SPELL_LIGHTNING_TENDRILS, true);
- me->CastSpell(me, 61883, true);
+ me->CastSpell(me, SPELL_LIGHTNING_TENDRILS_2, true);
events.ScheduleEvent(EVENT_LIGHTNING_LAND, 16s);
events.ScheduleEvent(EVENT_LIGHTNING_FLIGHT, 1s);
break;
@@ -821,8 +801,8 @@ public:
me->SetRegeneratingHealth(true);
_flyTargetGUID.Clear();
- me->RemoveAura(SPELL_LIGHTNING_TENDRILS);
- me->RemoveAura(61883);
+ me->RemoveAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_LIGHTNING_TENDRILS, me));
+ me->RemoveAura(SPELL_LIGHTNING_TENDRILS_2);
DoResetThreatList();
events.CancelEvent(EVENT_LIGHTNING_FLIGHT);
break;
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp
index a4b1ef6754..587e591258 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp
@@ -28,40 +28,25 @@ enum AuriayaSpells
{
// BASIC
SPELL_TERRIFYING_SCREECH = 64386,
- SPELL_SENTINEL_BLAST_10 = 64389,
- SPELL_SENTINEL_BLAST_25 = 64678,
- SPELL_SONIC_SCREECH_10 = 64422,
- SPELL_SONIC_SCREECH_25 = 64688,
+ SPELL_SENTINEL_BLAST = 64389,
+ SPELL_SONIC_SCREECH = 64422,
SPELL_GUARDIAN_SWARM = 64396,
SPELL_ENRAGE = 47008,
SPELL_ACTIVATE_FERAL_DEFENDER = 64449,
// Sanctum Sentry
- SPELL_SAVAGE_POUNCE_10 = 64666,
- SPELL_SAVAGE_POUNCE_25 = 64374,
- SPELL_RIP_FLESH_10 = 64375,
- SPELL_RIP_FLESH_25 = 64667,
+ SPELL_SAVAGE_POUNCE = 64666,
+ SPELL_RIP_FLESH = 64375,
SPELL_STRENGTH_OF_THE_PACK = 64369,
// Feral Defender
SPELL_FERAL_ESSENCE = 64455,
- SPELL_FERAL_POUNCE_10 = 64478,
- SPELL_FERAL_POUNCE_25 = 64669,
- SPELL_FERAL_RUSH_10 = 64496,
- SPELL_FERAL_RUSH_25 = 64674,
+ SPELL_FERAL_POUNCE = 64478,
+ SPELL_FERAL_RUSH = 64496,
//SPELL_SEEPING_FERAL_ESSENCE_SUMMON = 64457,
- SPELL_SEEPING_FERAL_ESSENCE_10 = 64458,
- SPELL_SEEPING_FERAL_ESSENCE_25 = 64676,
+ SPELL_SEEPING_FERAL_ESSENCE = 64458,
};
-#define SPELL_SONIC_SCREECH RAID_MODE(SPELL_SONIC_SCREECH_10, SPELL_SONIC_SCREECH_25)
-#define SPELL_SENTINEL_BLAST RAID_MODE(SPELL_SENTINEL_BLAST_10, SPELL_SENTINEL_BLAST_25)
-#define SPELL_SAVAGE_POUNCE RAID_MODE(SPELL_SAVAGE_POUNCE_10, SPELL_SAVAGE_POUNCE_25)
-#define SPELL_RIP_FLESH RAID_MODE(SPELL_RIP_FLESH_10, SPELL_RIP_FLESH_25)
-#define SPELL_FERAL_POUNCE RAID_MODE(SPELL_FERAL_POUNCE_10, SPELL_FERAL_POUNCE_25)
-#define SPELL_FERAL_RUSH RAID_MODE(SPELL_FERAL_RUSH_10, SPELL_FERAL_RUSH_25)
-//#define SPELL_SEEPING_FERAL_ESSENCE RAID_MODE(SPELL_SEEPING_FERAL_ESSENCE_10, SPELL_SEEPING_FERAL_ESSENCE_25)
-
enum AuriayaNPC
{
NPC_FERAL_DEFENDER = 34035,
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
index 07e1ac92fd..46f8e0bc40 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
@@ -1089,6 +1089,7 @@ public:
{
summons.DespawnAll();
_spellTimer = 0;
+ me->SetWalk(true);
Start(false, ObjectGuid::Empty, nullptr, false, true);
if (Aura* aur = me->AddAura(SPELL_FREYA_DUMMY_YELLOW, me))
{
@@ -1415,7 +1416,7 @@ public:
_startTimer -= diff;
if (_startTimer <= 0)
{
- me->GetMotionMaster()->MovePath(3000000 + urand(0, 11), true);
+ me->GetMotionMaster()->MoveWaypoint(3000000 + urand(0, 11), true);
_startTimer = 0;
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
index 9bb1d122ae..4b21752910 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
@@ -29,31 +29,23 @@ enum FreyaSpells
SPELL_AUTO_GROW = 62559,
SPELL_LIFEBINDER_PHERONOMES = 62619,
SPELL_LIFEBINDER_VISUAL = 62579,
- SPELL_LIFEBINDER_HEAL_10 = 62584,
- SPELL_LIFEBINDER_HEAL_25 = 64185,
+ SPELL_LIFEBINDER_HEAL = 62584,
// FREYA
- SPELL_TOUCH_OF_EONAR_10 = 62528,
- SPELL_TOUCH_OF_EONAR_25 = 62892,
+ SPELL_TOUCH_OF_EONAR = 62528,
SPELL_ATTUNED_TO_NATURE = 62519,
SPELL_SUMMON_LIFEBINDER = 62870,
- SPELL_SUNBEAM_10 = 62623,
- SPELL_SUNBEAM_25 = 62872,
+ SPELL_SUNBEAM = 62623,
SPELL_NATURE_BOMB_FLIGHT = 64648,
- SPELL_NATURE_BOMB_DAMAGE_10 = 64587,
- SPELL_NATURE_BOMB_DAMAGE_25 = 64650,
+ SPELL_NATURE_BOMB_DAMAGE = 64587,
SPELL_GREEN_BANISH_STATE = 32567,
SPELL_BERSERK = 47008,
// HARD MODE
- SPELL_GROUND_TREMOR_FREYA_10 = 62437,
- SPELL_GROUND_TREMOR_FREYA_25 = 62859,
- SPELL_IRON_ROOTS_FREYA_10 = 62862,
- SPELL_IRON_ROOTS_FREYA_25 = 62439,
- SPELL_IRON_ROOTS_FREYA_DAMAGE_10 = 62861,
- SPELL_IRON_ROOTS_FREYA_DAMAGE_25 = 62438,
- SPELL_UNSTABLE_SUN_FREYA_DAMAGE_10 = 62451,
- SPELL_UNSTABLE_SUN_FREYA_DAMAGE_25 = 62865,
+ SPELL_GROUND_TREMOR_FREYA = 62437,
+ SPELL_IRON_ROOTS_FREYA = 62862,
+ SPELL_IRON_ROOTS_FREYA_DAMAGE = 62861,
+ SPELL_UNSTABLE_SUN_FREYA_DAMAGE = 62451,
SPELL_UNSTABLE_SUN_VISUAL = 62216,
// ELDERS
@@ -64,86 +56,49 @@ enum FreyaSpells
// BRIGHTLEAF
SPELL_BRIGHTLEAF_FLUX = 62239,
- SPELL_SOLAR_FLARE_10 = 62240,
- SPELL_SOLAR_FLARE_25 = 64087,
+ SPELL_SOLAR_FLARE = 62240,
SPELL_UNSTABLE_SUN_BEAM_AURA = 62211,
SPELL_PHOTOSYNTHESIS = 62209,
- SPELL_UNSTABLE_SUN_DAMAGE_10 = 62217,
- SPELL_UNSTABLE_SUN_DAMAGE_25 = 62922,
+ SPELL_UNSTABLE_SUN_DAMAGE = 62217,
// IRONBRANCH
- SPELL_IMPALE_10 = 62310,
- SPELL_IMPALE_25 = 62928,
- SPELL_IRON_ROOTS_10 = 62275,
- SPELL_IRON_ROOTS_25 = 62929,
- SPELL_IRON_ROOTS_DAMAGE_10 = 62283,
- SPELL_IRON_ROOTS_DAMAGE_25 = 62930,
- SPELL_THORN_SWARM_10 = 62285,
- SPELL_THORN_SWARM_25 = 62931,
+ SPELL_IMPALE = 62310,
+ SPELL_IRON_ROOTS = 62275,
+ SPELL_IRON_ROOTS_DAMAGE = 62283,
+ SPELL_THORN_SWARM = 62285,
// STONEBARK
SPELL_FISTS_OF_STONE = 62344,
- SPELL_GROUND_TREMOR_10 = 62325,
- SPELL_GROUND_TREMOR_25 = 62932,
- SPELL_PETRIFIED_BARK_10 = 62337,
- SPELL_PETRIFIED_BARK_25 = 62933,
+ SPELL_GROUND_TREMOR = 62325,
+ SPELL_PETRIFIED_BARK = 62337,
// SNAPLASHER
- SPELL_HARDENED_BARK_10 = 62664,
- SPELL_HARDENED_BARK_25 = 64191,
+ SPELL_HARDENED_BARK = 62664,
// ANCIENT WATER SPIRIT
- SPELL_TIDAL_WAVE_10 = 62653,
- SPELL_TIDAL_WAVE_25 = 62935,
- SPELL_TIDAL_WAVE_DAMAGE_10 = 62654,
- SPELL_TIDAL_WAVE_DAMAGE_25 = 62936,
+ SPELL_TIDAL_WAVE = 62653,
+ SPELL_TIDAL_WAVE_DAMAGE = 62654,
SPELL_TIDAL_WAVE_AURA = 62655,
// STORM LASHER
- SPELL_LIGHTNING_LASH_10 = 62648,
- SPELL_LIGHTNING_LASH_25 = 62939,
- SPELL_STORMBOLT_10 = 62649,
- SPELL_STORMBOLT_25 = 62938,
+ SPELL_LIGHTNING_LASH = 62648,
+ SPELL_STORMBOLT = 62649,
// ANCIENT CONSERVATOR
SPELL_CONSERVATOR_GRIP = 62532,
- SPELL_NATURE_FURY_10 = 62589,
- SPELL_NATURE_FURY_25 = 63571,
+ SPELL_NATURE_FURY = 62589,
SPELL_POTENT_PHEROMONES = 62541,
SPELL_HEALTHY_SPORE_VISUAL = 62538,
SPELL_HEALTHY_SPORE_SUMMON = 62566,
// DETONATING LASHER
- SPELL_DETONATE_10 = 62598,
- SPELL_DETONATE_25 = 62937,
+ SPELL_DETONATE = 62598,
SPELL_FLAME_LASH = 62608,
// ACHIEVEMENT
SPELL_DEFORESTATION_CREDIT = 65015,
};
-#define SPELL_GROUND_TREMOR RAID_MODE(SPELL_GROUND_TREMOR_10, SPELL_GROUND_TREMOR_25)
-#define SPELL_PETRIFIED_BARK RAID_MODE(SPELL_PETRIFIED_BARK_10, SPELL_PETRIFIED_BARK_25)
-#define SPELL_IRON_ROOTS RAID_MODE(SPELL_IRON_ROOTS_10, SPELL_IRON_ROOTS_25)
-#define SPELL_IMPALE RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25)
-#define SPELL_THORN_SWARM RAID_MODE(SPELL_THORN_SWARM_10, SPELL_THORN_SWARM_25)
-#define SPELL_UNSTABLE_SUN_DAMAGE RAID_MODE(SPELL_UNSTABLE_SUN_DAMAGE_10, SPELL_UNSTABLE_SUN_DAMAGE_25)
-#define SPELL_SOLAR_FLARE RAID_MODE(SPELL_SOLAR_FLARE_10, SPELL_SOLAR_FLARE_25)
-#define SPELL_TOUCH_OF_EONAR RAID_MODE(SPELL_TOUCH_OF_EONAR_10, SPELL_TOUCH_OF_EONAR_25)
-#define SPELL_LIFEBINDER_HEAL RAID_MODE(SPELL_LIFEBINDER_HEAL_10, SPELL_LIFEBINDER_HEAL_25)
-#define SPELL_TIDAL_WAVE RAID_MODE(SPELL_TIDAL_WAVE_10, SPELL_TIDAL_WAVE_25)
-#define SPELL_TIDAL_WAVE_DAMAGE RAID_MODE(SPELL_TIDAL_WAVE_DAMAGE_10, SPELL_TIDAL_WAVE_DAMAGE_25)
-#define SPELL_NATURE_FURY RAID_MODE(SPELL_NATURE_FURY_10, SPELL_NATURE_FURY_25)
-#define SPELL_HARDENED_BARK RAID_MODE(SPELL_HARDENED_BARK_10, SPELL_HARDENED_BARK_25)
-#define SPELL_DETONATE RAID_MODE(SPELL_DETONATE_10, SPELL_DETONATE_25)
-//#define SPELL_NATURE_BOMB_DAMAGE RAID_MODE(SPELL_NATURE_BOMB_DAMAGE_10, SPELL_NATURE_BOMB_DAMAGE_25)
-#define SPELL_SUNBEAM RAID_MODE(SPELL_SUNBEAM_10, SPELL_SUNBEAM_25)
-#define SPELL_GROUND_TREMOR_FREYA RAID_MODE(SPELL_GROUND_TREMOR_FREYA_10, SPELL_GROUND_TREMOR_FREYA_25)
-#define SPELL_IRON_ROOTS_FREYA RAID_MODE(SPELL_IRON_ROOTS_FREYA_10, SPELL_IRON_ROOTS_FREYA_25)
-#define SPELL_UNSTABLE_SUN_FREYA_DAMAGE RAID_MODE(SPELL_UNSTABLE_SUN_FREYA_DAMAGE_10, SPELL_UNSTABLE_SUN_FREYA_DAMAGE_25)
-#define SPELL_LIGHTNING_LASH RAID_MODE(SPELL_LIGHTNING_LASH_10, SPELL_LIGHTNING_LASH_25)
-#define SPELL_STORMBOLT RAID_MODE(SPELL_STORMBOLT_10, SPELL_STORMBOLT_25)
-
enum FreyaEvents
{
// FREYA
@@ -983,9 +938,9 @@ public:
if (Unit* target = ObjectAccessor::GetUnit(*me, me->ToTempSummon()->GetSummonerGUID()))
{
if (me->GetEntry() == NPC_IRON_ROOT_TRIGGER) // Iron Branch spell
- target->RemoveAura(target->GetMap()->Is25ManRaid() ? SPELL_IRON_ROOTS_DAMAGE_25 : SPELL_IRON_ROOTS_DAMAGE_10);
+ target->RemoveAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_IRON_ROOTS_DAMAGE, me));
else
- target->RemoveAura(target->GetMap()->Is25ManRaid() ? SPELL_IRON_ROOTS_FREYA_DAMAGE_25 : SPELL_IRON_ROOTS_FREYA_DAMAGE_10);
+ target->RemoveAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_IRON_ROOTS_FREYA_DAMAGE, me));
}
}
};
@@ -1023,7 +978,7 @@ public:
if (_healTimer >= 12000)
{
me->RemoveAurasDueToSpell(SPELL_AUTO_GROW);
- me->CastSpell(me, me->GetMap()->Is25ManRaid() ? SPELL_LIFEBINDER_HEAL_25 : SPELL_LIFEBINDER_HEAL_10, true);
+ me->CastSpell(me, SPELL_LIFEBINDER_HEAL, true);
me->DespawnOrUnsummon(2s);
_healTimer = 0;
}
@@ -1249,7 +1204,7 @@ public:
_explodeTimer += diff;
if (_explodeTimer >= 11000)
{
- me->CastSpell(me, me->GetMap()->Is25ManRaid() ? SPELL_NATURE_BOMB_DAMAGE_25 : SPELL_NATURE_BOMB_DAMAGE_10, false);
+ me->CastSpell(me, SPELL_NATURE_BOMB_DAMAGE, false);
me->DespawnOrUnsummon(1s);
_explodeTimer = 0;
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
index 013418f223..6f037c289d 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
@@ -58,8 +58,7 @@ enum HodirSpellData
SPELL_ICE_SHARDS_BIG = 65370,
SPELL_SNOWDRIFT = 62463,
- SPELL_FROZEN_BLOWS_10 = 62478,
- SPELL_FROZEN_BLOWS_25 = 63512,
+ SPELL_FROZEN_BLOWS = 62478,
// Helpers:
SPELL_PRIEST_DISPELL_MAGIC = 63499,
@@ -70,9 +69,8 @@ enum HodirSpellData
SPELL_DRUID_STARLIGHT_AREA_AURA = 62807,
SPELL_SHAMAN_LAVA_BURST = 61924,
- SPELL_SHAMAN_STORM_CLOUD_10 = 65123,
- SPELL_SHAMAN_STORM_CLOUD_25 = 65133,
- SPELL_SHAMAN_STORM_POWER_10 = 63711,
+ SPELL_SHAMAN_STORM_CLOUD = 65123,
+ SPELL_SHAMAN_STORM_POWER = 63711,
SPELL_SHAMAN_STORM_POWER_25 = 65134,
SPELL_MAGE_FIREBALL = 61909,
@@ -153,9 +151,6 @@ enum HodirText
TEXT_EMOTE_BLOW = 8,
};
-#define SPELL_FROZEN_BLOWS RAID_MODE(SPELL_FROZEN_BLOWS_10, SPELL_FROZEN_BLOWS_25)
-#define SPELL_SHAMAN_STORM_CLOUD RAID_MODE(SPELL_SHAMAN_STORM_CLOUD_10, SPELL_SHAMAN_STORM_CLOUD_25)
-
enum HodirSounds
{
SOUND_HODIR_AGGRO = 15552,
@@ -483,7 +478,7 @@ public:
{
Talk(TEXT_EMOTE_BLOW);
Talk(TEXT_STALACTITE);
- me->CastSpell(me, Is25ManRaid()? SPELL_FROZEN_BLOWS_25 : SPELL_FROZEN_BLOWS_10, true);
+ me->CastSpell(me, SPELL_FROZEN_BLOWS, true);
}
break;
case EVENT_FREEZE:
@@ -1008,8 +1003,9 @@ public:
void SpellHitTarget(Unit* target, SpellInfo const* spell) override
{
- if (target && spell->Id == SPELL_SHAMAN_STORM_CLOUD)
- if (Aura* a = target->GetAura(SPELL_SHAMAN_STORM_CLOUD, me->GetGUID()))
+ uint32 spellid = sSpellMgr->GetSpellIdForDifficulty(SPELL_SHAMAN_STORM_CLOUD, me);
+ if (target && spell->Id == spellid)
+ if (Aura* a = target->GetAura(spellid, me->GetGUID()))
a->SetStackAmount(spell->StackAmount);
}
@@ -1044,10 +1040,13 @@ public:
events.Repeat(2600ms);
break;
case EVENT_SHAMAN_STORM_CLOUD:
- if (Player* target = ScriptedAI::SelectTargetFromPlayerList(35.0f, SPELL_SHAMAN_STORM_CLOUD))
- me->CastSpell(target, SPELL_SHAMAN_STORM_CLOUD, false);
- events.Repeat(30s);
- break;
+ {
+ uint32 spellid = sSpellMgr->GetSpellIdForDifficulty(SPELL_SHAMAN_STORM_CLOUD, me);
+ if (Player* target = ScriptedAI::SelectTargetFromPlayerList(35.0f, spellid))
+ me->CastSpell(target, spellid, false);
+ events.Repeat(30s);
+ break;
+ }
}
}
@@ -1403,7 +1402,7 @@ class spell_hodir_storm_power_aura : public AuraScript
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (Unit* caster = GetCaster())
- if (Aura* a = caster->GetAura(GetId() == SPELL_SHAMAN_STORM_POWER_10 ? SPELL_SHAMAN_STORM_CLOUD_10 : SPELL_SHAMAN_STORM_CLOUD_25))
+ if (Aura* a = caster->GetAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_SHAMAN_STORM_CLOUD, caster)))
a->ModStackAmount(-1);
}
@@ -1427,14 +1426,14 @@ class spell_hodir_storm_cloud_aura : public AuraScript
bool Validate(SpellInfo const* /*spellInfo*/) override
{
- return ValidateSpellInfo({ SPELL_SHAMAN_STORM_CLOUD_10, SPELL_SHAMAN_STORM_POWER_10, SPELL_SHAMAN_STORM_POWER_25 });
+ return ValidateSpellInfo({ SPELL_SHAMAN_STORM_POWER });
}
void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
{
PreventDefaultAction();
if (Unit* target = GetTarget())
- target->CastSpell((Unit*)nullptr, (GetId() == SPELL_SHAMAN_STORM_CLOUD_10 ? SPELL_SHAMAN_STORM_POWER_10 : SPELL_SHAMAN_STORM_POWER_25), true);
+ target->CastSpell((Unit*)nullptr, (sSpellMgr->GetSpellIdForDifficulty(SPELL_SHAMAN_STORM_POWER, GetCaster())), true);
}
void Register() override
@@ -1528,7 +1527,7 @@ public:
bool OnCheck(Player* player, Unit* /*target*/, uint32 /*criteria_id*/) override
{
- return player && player->HasAllAuras(SPELL_MAGE_TOASTY_FIRE_AURA, SPELL_DRUID_STARLIGHT_AREA_AURA, SPELL_SHAMAN_STORM_POWER_10);
+ return player && player->HasAllAuras(SPELL_MAGE_TOASTY_FIRE_AURA, SPELL_DRUID_STARLIGHT_AREA_AURA, SPELL_SHAMAN_STORM_POWER);
}
};
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
index 133868f332..9b6b35b114 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
@@ -26,37 +26,33 @@
#include "SpellScriptLoader.h"
#include "ulduar.h"
-#define SPELL_FLAME_JETS_10 62680
-#define SPELL_FLAME_JETS_25 63472
-#define S_FLAME_JETS RAID_MODE(SPELL_FLAME_JETS_10, SPELL_FLAME_JETS_25)
-#define SPELL_SCORCH_10 62546
-#define SPELL_SCORCH_25 63474
-#define S_SCORCH RAID_MODE(SPELL_SCORCH_10, SPELL_SCORCH_25)
-#define SPELL_ACTIVATE_CONSTRUCT 62488
-#define SPELL_STRENGTH_OF_THE_CREATOR 64473
-#define SPELL_SLAG_POT_10 62717
-#define SPELL_SLAG_POT_25 63477
-#define S_SLAG_POT RAID_MODE(SPELL_SLAG_POT_10, SPELL_SLAG_POT_25)
-#define SPELL_BERSERK 64238
-#define SPELL_GRAB 62707
-#define SPELL_GRAB_TRIGGERED 62708
-#define SPELL_GRAB_CONTROL_2 62711
-
-#define SPELL_SCORCHED_GROUND_10 62548
-#define SPELL_SCORCHED_GROUND_25 63476
-#define S_SCORCHED_GROUND RAID_MODE(SPELL_SCORCHED_GROUND_10, SPELL_SCORCHED_GROUND_25)
-#define SPELL_HEAT_AREA 62343
-#define SPELL_HEAT_BUFF 65667
-#define SPELL_MOLTEN 62373
-#define SPELL_BRITTLE_10 62382
-#define SPELL_BRITTLE_25 67114
-#define S_BRITTLE RAID_MODE(SPELL_BRITTLE_10, SPELL_BRITTLE_25)
-#define SPELL_SHATTER 62383
-
-#define BOSS_IGNIS 33118
-#define NPC_IRON_CONSTRUCT 33121
-#define NPC_SCORCHED_GROUND 33123
-#define NPC_WATER_TRIGGER 22515
+enum IgnisSpellData
+{
+ SPELL_FLAME_JETS = 62680,
+ SPELL_SCORCH = 62546,
+ SPELL_ACTIVATE_CONSTRUCT = 62488,
+ SPELL_STRENGTH_OF_THE_CREATOR = 64473,
+ SPELL_SLAG_POT = 62717,
+ SPELL_BERSERK = 64238,
+ SPELL_GRAB = 62707,
+ SPELL_GRAB_TRIGGERED = 62708,
+ SPELL_GRAB_CONTROL_2 = 62711,
+
+ SPELL_SCORCHED_GROUND = 62548,
+ SPELL_HEAT_AREA = 62343,
+ SPELL_HEAT_BUFF = 65667,
+ SPELL_MOLTEN = 62373,
+ SPELL_BRITTLE = 62382,
+ SPELL_SHATTER = 62383,
+};
+
+enum IgnisNPCs
+{
+ BOSS_IGNIS = 33118,
+ NPC_IRON_CONSTRUCT = 33121,
+ NPC_SCORCHED_GROUND = 33123,
+ NPC_WATER_TRIGGER = 22515,
+};
enum Texts
{
@@ -147,7 +143,7 @@ public:
void DamageTaken(Unit* attacker, uint32& damage, DamageEffectType, SpellSchoolMask) override
{
- if (damage >= RAID_MODE(3000U, 5000U) && me->GetAura(S_BRITTLE))
+ if (damage >= RAID_MODE(3000U, 5000U) && me->GetAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_BRITTLE, me)))
{
me->CastSpell(me, SPELL_SHATTER, true);
Unit::Kill(attacker, me);
@@ -177,7 +173,7 @@ public:
if (me->FindNearestCreature(NPC_WATER_TRIGGER, 18.0f, true))
{
me->RemoveAura(a);
- me->CastSpell(me, S_BRITTLE, true);
+ me->CastSpell(me, SPELL_BRITTLE, true);
}
}
else
@@ -312,7 +308,7 @@ public:
if (caster && spell->Id == SPELL_GRAB_CONTROL_2)
{
//caster->ClearUnitState(UNIT_STATE_ONVEHICLE);
- me->CastSpell(caster, S_SLAG_POT, true);
+ me->CastSpell(caster, SPELL_SLAG_POT, true);
}
}
@@ -354,7 +350,7 @@ public:
me->SetControlled(true, UNIT_STATE_ROOT);
me->DisableRotate(true);
me->SendMovementFlagUpdate();
- me->CastSpell(me->GetVictim(), S_SCORCH, false);
+ me->CastSpell(me->GetVictim(), SPELL_SCORCH, false);
events.Repeat(20s);
events.RescheduleEvent(EVENT_ENABLE_ROTATE, 3s);
break;
@@ -364,7 +360,7 @@ public:
break;
case EVENT_SPELL_FLAME_JETS:
Talk(EMOTE_JETS);
- me->CastSpell(me->GetVictim(), S_FLAME_JETS, false);
+ me->CastSpell(me->GetVictim(), SPELL_FLAME_JETS, false);
events.Repeat(25s);
break;
case EVENT_GRAB:
@@ -431,7 +427,7 @@ class spell_ignis_scorch_aura : public AuraScript
bool Validate(SpellInfo const* /*spellInfo*/) override
{
- return ValidateSpellInfo({ SPELL_SCORCHED_GROUND_10, SPELL_SCORCHED_GROUND_25 });
+ return ValidateSpellInfo({ SPELL_SCORCHED_GROUND });
}
void HandleEffectPeriodic(AuraEffect const* aurEff)
@@ -441,7 +437,7 @@ class spell_ignis_scorch_aura : public AuraScript
if (Creature* summon = caster->SummonCreature(NPC_SCORCHED_GROUND, caster->GetPositionX() + 20.0f * cos(caster->GetOrientation()), caster->GetPositionY() + 20.0f * std::sin(caster->GetOrientation()), 361.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 30000))
{
if (!summon->FindNearestCreature(NPC_WATER_TRIGGER, 25.0f, true)) // must be away from the water
- summon->CastSpell(summon, (aurEff->GetId() == SPELL_SCORCH_10 ? SPELL_SCORCHED_GROUND_10 : SPELL_SCORCHED_GROUND_25), true);
+ summon->CastSpell(summon, SPELL_SCORCHED_GROUND, true);
}
}
@@ -474,12 +470,10 @@ class spell_ignis_grab_initial : public SpellScript
enum SlagPot
{
- SPELL_SLAG_POT_DAMAGE_1 = 65722,
- SPELL_SLAG_POT_DAMAGE_2 = 65723,
+ SPELL_SLAG_POT_DAMAGE = 65722,
SPELL_SCORCH_DAMAGE_1 = 62549,
SPELL_SCORCH_DAMAGE_2 = 63475,
- SPELL_SLAG_IMBUED_1 = 62836,
- SPELL_SLAG_IMBUED_2 = 63536
+ SPELL_SLAG_IMBUED = 62836,
};
class spell_ignis_slag_pot_aura : public AuraScript
@@ -490,12 +484,10 @@ class spell_ignis_slag_pot_aura : public AuraScript
{
return ValidateSpellInfo(
{
- SPELL_SLAG_POT_DAMAGE_1,
- SPELL_SLAG_POT_DAMAGE_2,
+ SPELL_SLAG_POT_DAMAGE,
SPELL_SCORCH_DAMAGE_1,
SPELL_SCORCH_DAMAGE_2,
- SPELL_SLAG_IMBUED_1,
- SPELL_SLAG_IMBUED_2
+ SPELL_SLAG_IMBUED
});
}
@@ -503,7 +495,7 @@ class spell_ignis_slag_pot_aura : public AuraScript
{
if (Unit* caster = GetCaster())
if (Unit* target = GetTarget())
- caster->CastSpell(target, (GetId() == SPELL_SLAG_POT_10 ? SPELL_SLAG_POT_DAMAGE_1 : SPELL_SLAG_POT_DAMAGE_2), true);
+ caster->CastSpell(target, SPELL_SLAG_POT_DAMAGE, true);
}
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -522,7 +514,7 @@ class spell_ignis_slag_pot_aura : public AuraScript
target->ApplySpellImmune(GetId(), IMMUNITY_ID, SPELL_SCORCH_DAMAGE_1, false);
target->ApplySpellImmune(GetId(), IMMUNITY_ID, SPELL_SCORCH_DAMAGE_2, false);
if (target->IsAlive())
- target->CastSpell(target, (GetId() == SPELL_SLAG_POT_10 ? SPELL_SLAG_IMBUED_1 : SPELL_SLAG_IMBUED_2), true);
+ target->CastSpell(target, SPELL_SLAG_IMBUED, true);
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
index b9a12638ba..ba2d626ca6 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
@@ -45,56 +45,33 @@ enum KologarnSpells
SPELL_KOLOGARN_REDUCE_PARRY = 64651,
// BASIC
- SPELL_OVERHEAD_SMASH_10 = 63356,
- SPELL_OVERHEAD_SMASH_25 = 64003,
- SPELL_ONEARMED_OVERHEAD_SMASH_10 = 63573,
- SPELL_ONEARMED_OVERHEAD_SMASH_25 = 64006,
- SPELL_PETRIFYING_BREATH_10 = 62030,
- SPELL_PETRIFYING_BREATH_25 = 63980,
- SPELL_STONE_SHOUT_10 = 63716,
- SPELL_STONE_SHOUT_25 = 64005,
+ SPELL_OVERHEAD_SMASH = 63356,
+ SPELL_ONEARMED_OVERHEAD_SMASH = 63573,
+ SPELL_PETRIFYING_BREATH = 62030,
+ SPELL_STONE_SHOUT = 63716,
// EYEBEAM
SPELL_FOCUSED_EYEBEAM_SUMMON = 63342,
- SPELL_FOCUSED_EYEBEAM_10 = 63347,
- SPELL_FOCUSED_EYEBEAM_25 = 63977,
+ SPELL_FOCUSED_EYEBEAM = 63347,
SPELL_FOCUSED_EYEBEAM_RIGHT = 63702,
SPELL_FOCUSED_EYEBEAM_LEFT = 63676,
// ARMS
- SPELL_ARM_DEAD_10 = 63629,
- SPELL_ARM_DEAD_25 = 63979,
- SPELL_RUBBLE_FALL_10 = 63821,
- SPELL_RUBBLE_FALL_25 = 64001,
+ SPELL_ARM_DEAD = 63629,
+ SPELL_RUBBLE_FALL = 63821,
SPELL_ARM_RESPAWN_VISUAL = 64753,
// LEFT ARM
- SPELL_ARM_SWEEP_10 = 63766,
- SPELL_ARM_SWEEP_25 = 63983,
+ SPELL_ARM_SWEEP = 63766,
// RIGHT ARM
- SPELL_STONE_GRIP_10 = 62166,
- SPELL_STONE_GRIP_25 = 63981,
- SPELL_RIDE_RIGHT_ARM_10 = 62056,
- SPELL_RIDE_RIGHT_ARM_25 = 63985,
+ SPELL_STONE_GRIP = 62166,
+ SPELL_RIDE_RIGHT_ARM = 62056,
// RUBBLE TRASH
- SPELL_RUBBLE_ATTACK_10 = 63818,
- SPELL_RUBBLE_ATTACK_25 = 63978,
+ SPELL_RUBBLE_ATTACK = 63818,
};
-#define SPELL_PETRIFYING_BREATH RAID_MODE(SPELL_PETRIFYING_BREATH_10, SPELL_PETRIFYING_BREATH_25)
-#define SPELL_OVERHEAD_SMASH RAID_MODE(SPELL_OVERHEAD_SMASH_10, SPELL_OVERHEAD_SMASH_25)
-#define SPELL_ONEARMED_OVERHEAD_SMASH RAID_MODE(SPELL_ONEARMED_OVERHEAD_SMASH_10, SPELL_ONEARMED_OVERHEAD_SMASH_25)
-#define SPELL_ARM_DEAD RAID_MODE(SPELL_ARM_DEAD_10, SPELL_ARM_DEAD_25)
-#define SPELL_ARM_SWEEP RAID_MODE(SPELL_ARM_SWEEP_10, SPELL_ARM_SWEEP_25)
-#define SPELL_STONE_GRIP RAID_MODE(SPELL_STONE_GRIP_10, SPELL_STONE_GRIP_25)
-#define SPELL_FOCUSED_EYEBEAM RAID_MODE(SPELL_FOCUSED_EYEBEAM_10, SPELL_FOCUSED_EYEBEAM_25)
-#define SPELL_RUBBLE_FALL RAID_MODE(SPELL_RUBBLE_FALL_10, SPELL_RUBBLE_FALL_25)
-#define SPELL_RUBBLE_ATTACK RAID_MODE(SPELL_RUBBLE_ATTACK_10, SPELL_RUBBLE_ATTACK_25)
-#define SPELL_RIDE_RIGHT_ARM RAID_MODE(SPELL_RIDE_RIGHT_ARM_10, SPELL_RIDE_RIGHT_ARM_25)
-#define SPELL_STONE_SHOUT RAID_MODE(SPELL_STONE_SHOUT_10, SPELL_STONE_SHOUT_25)
-
enum KologarnEvents
{
EVENT_SMASH = 1,
@@ -796,9 +773,7 @@ class spell_ulduar_stone_grip_cast_target : public SpellScript
// Remove "main tank" and non-player targets
targets.remove_if(StoneGripTargetSelector(GetCaster()->ToCreature(), GetCaster()->GetVictim()));
// Maximum affected targets per difficulty mode
- uint32 maxTargets = 1;
- if (GetSpellInfo()->Id == SPELL_STONE_GRIP_25)
- maxTargets = 3;
+ uint32 maxTargets = GetSpellInfo()->Id == SPELL_STONE_GRIP ? 1 : 3;
// Return a random amount of targets based on maxTargets
while (maxTargets < targets.size())
@@ -850,6 +825,7 @@ class spell_ulduar_squeezed_lifeless : public SpellScript
}
};
+// 63720, 64004
class spell_kologarn_stone_shout : public SpellScript
{
PrepareSpellScript(spell_kologarn_stone_shout);
@@ -861,7 +837,6 @@ class spell_kologarn_stone_shout : public SpellScript
void Register() override
{
- if (m_scriptSpellId != SPELL_STONE_SHOUT_10 && m_scriptSpellId != SPELL_STONE_SHOUT_25)
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kologarn_stone_shout::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
@@ -879,7 +854,6 @@ class spell_kologarn_stone_shout_aura : public AuraScript
void Register() override
{
- if (m_scriptSpellId == SPELL_STONE_SHOUT_10 || m_scriptSpellId == SPELL_STONE_SHOUT_25)
OnEffectPeriodic += AuraEffectPeriodicFn(spell_kologarn_stone_shout_aura::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
@@ -945,7 +919,8 @@ void AddSC_boss_kologarn()
RegisterSpellScript(spell_ulduar_stone_grip_aura);
RegisterSpellScript(spell_ulduar_squeezed_lifeless);
RegisterSpellScript(spell_kologarn_focused_eyebeam);
- RegisterSpellAndAuraScriptPair(spell_kologarn_stone_shout, spell_kologarn_stone_shout_aura);
+ RegisterSpellScript(spell_kologarn_stone_shout);
+ RegisterSpellScript(spell_kologarn_stone_shout_aura);
// Achievements
new achievement_kologarn_looks_could_kill();
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
index d7ba40cdec..ef53103da8 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
@@ -23,6 +23,7 @@
#include "PassiveAI.h"
#include "Player.h"
#include "ScriptedCreature.h"
+#include "SharedDefines.h"
#include "Spell.h"
#include "SpellAuraEffects.h"
#include "SpellScript.h"
@@ -35,18 +36,15 @@ enum SpellData
SPELL_BERSERK = 64238,
// PHASE 1:
- SPELL_NAPALM_SHELL_25 = 65026,
- SPELL_NAPALM_SHELL_10 = 63666,
+ SPELL_NAPALM_SHELL = 63666,
- SPELL_PLASMA_BLAST_25 = 64529,
- SPELL_PLASMA_BLAST_10 = 62997,
+ SPELL_PLASMA_BLAST = 62997,
SPELL_SHOCK_BLAST = 63631,
SPELL_PROXIMITY_MINES = 63027,
NPC_PROXIMITY_MINE = 34362,
- SPELL_MINE_EXPLOSION_25 = 63009,
- SPELL_MINE_EXPLOSION_10 = 66351,
+ SPELL_MINE_EXPLOSION = 66351,
SPELL_SUMMON_PROXIMITY_MINE = 65347,
// PHASE 2:
@@ -57,17 +55,14 @@ enum SpellData
NPC_ROCKET_STRIKE_N = 34047,
SPELL_RAPID_BURST = 63382,
- SPELL_RAPID_BURST_DAMAGE_25_1 = 64531,
- SPELL_RAPID_BURST_DAMAGE_25_2 = 64532,
- SPELL_RAPID_BURST_DAMAGE_10_1 = 63387,
- SPELL_RAPID_BURST_DAMAGE_10_2 = 64019,
+ SPELL_RAPID_BURST_DAMAGE_1 = 63387,
+ SPELL_RAPID_BURST_DAMAGE_2 = 64019,
SPELL_SUMMON_BURST_TARGET = 64840,
SPELL_SPINNING_UP = 63414,
// PHASE 3:
- SPELL_PLASMA_BALL_25 = 64535,
- SPELL_PLASMA_BALL_10 = 63689,
+ SPELL_PLASMA_BALL = 63689,
SPELL_MAGNETIC_CORE = 64436,
SPELL_SPINNING = 64438,
@@ -80,10 +75,8 @@ enum SpellData
SPELL_BEAM_BLUE = 63294,
// PHASE 4:
- SPELL_HAND_PULSE_10_R = 64352,
- SPELL_HAND_PULSE_25_R = 64537,
- SPELL_HAND_PULSE_10_L = 64348,
- SPELL_HAND_PULSE_25_L = 64536,
+ SPELL_HAND_PULSE_R = 64352,
+ SPELL_HAND_PULSE_L = 64348,
SPELL_SELF_REPAIR = 64383,
SPELL_SLEEP_VISUAL_1 = 64393,
@@ -219,14 +212,6 @@ enum EVENTS
EVENT_EMERGENCY_BOT_ATTACK = 70,
};
-#define SPELL_NAPALM_SHELL RAID_MODE(SPELL_NAPALM_SHELL_10, SPELL_NAPALM_SHELL_25)
-#define SPELL_PLASMA_BLAST RAID_MODE(SPELL_PLASMA_BLAST_10, SPELL_PLASMA_BLAST_25)
-#define SPELL_MINE_EXPLOSION RAID_MODE(SPELL_MINE_EXPLOSION_10, SPELL_MINE_EXPLOSION_25)
-#define SPELL_PLASMA_BALL RAID_MODE(SPELL_PLASMA_BALL_10, SPELL_PLASMA_BALL_25)
-#define SPELL_HAND_PULSE_R RAID_MODE(SPELL_HAND_PULSE_10_R, SPELL_HAND_PULSE_25_R)
-#define SPELL_HAND_PULSE_L RAID_MODE(SPELL_HAND_PULSE_10_L, SPELL_HAND_PULSE_25_L)
-#define SPELL_FROST_BOMB_EXPLOSION RAID_MODE(SPELL_FROST_BOMB_EXPLOSION_10, SPELL_FROST_BOMB_EXPLOSION_25)
-
enum Texts
{
// Mimiron
@@ -1889,14 +1874,6 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override {}
bool CanAIAttack(Unit const* /*target*/) const override { return false; }
- void SpellHitTarget(Unit* target, SpellInfo const* spell) override
- {
- if (target && spell && target->IsPlayer() && spell->Id == SPELL_MINE_EXPLOSION)
- if (InstanceScript* pInstance = me->GetInstanceScript())
- if (Creature* c = GetMimiron())
- c->AI()->SetData(0, 11);
- }
-
// MoveInLineOfSight is checked every few yards, can't use it
void UpdateAI(uint32 diff) override
{
@@ -1927,6 +1904,24 @@ public:
};
};
+class spell_ulduar_mimiron_mine_explosion : public SpellScript
+{
+ PrepareSpellScript(spell_ulduar_mimiron_mine_explosion);
+
+ void HandleDamage(SpellEffIndex /*effIndex*/)
+ {
+ if (GetHitPlayer())
+ if (InstanceScript* pInstance = GetCaster()->GetInstanceScript())
+ if (Creature* mimi = pInstance->GetCreature(TYPE_MIMIRON))
+ mimi->AI()->SetData(0, 11);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_ulduar_mimiron_mine_explosion::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ }
+};
+
class npc_ulduar_mimiron_rocket : public CreatureScript
{
public:
@@ -2094,10 +2089,8 @@ class spell_mimiron_rapid_burst_aura : public AuraScript
{
return ValidateSpellInfo(
{
- SPELL_RAPID_BURST_DAMAGE_10_1,
- SPELL_RAPID_BURST_DAMAGE_10_2,
- SPELL_RAPID_BURST_DAMAGE_25_1,
- SPELL_RAPID_BURST_DAMAGE_25_2
+ SPELL_RAPID_BURST_DAMAGE_1,
+ SPELL_RAPID_BURST_DAMAGE_2,
});
}
@@ -2105,7 +2098,7 @@ class spell_mimiron_rapid_burst_aura : public AuraScript
{
if (Unit* caster = GetCaster())
{
- uint32 id = (caster->GetMap()->Is25ManRaid() ? ((aurEff->GetTickNumber() % 2) ? SPELL_RAPID_BURST_DAMAGE_25_2 : SPELL_RAPID_BURST_DAMAGE_25_1) : ((aurEff->GetTickNumber() % 2) ? SPELL_RAPID_BURST_DAMAGE_10_2 : SPELL_RAPID_BURST_DAMAGE_10_1));
+ uint32 id = (aurEff->GetTickNumber() % 2) ? SPELL_RAPID_BURST_DAMAGE_2 : SPELL_RAPID_BURST_DAMAGE_1;
caster->CastSpell((Unit*)nullptr, id, true);
}
}
@@ -2498,6 +2491,7 @@ void AddSC_boss_mimiron()
new npc_ulduar_bot_summon_trigger();
RegisterSpellScript(spell_mimiron_rapid_burst_aura);
RegisterSpellScript(spell_mimiron_p3wx2_laser_barrage_aura);
+ RegisterSpellScript(spell_ulduar_mimiron_mine_explosion);
new go_ulduar_do_not_push_this_button();
new npc_ulduar_flames_initial();
new npc_ulduar_flames_spread();
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
index 1b33773507..2ece43eb78 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
@@ -30,12 +30,10 @@
enum Spells
{
// Razorscale
- SPELL_FLAMEBUFFET_10 = 64016,
- SPELL_FLAMEBUFFET_25 = 64023,
+ SPELL_FLAMEBUFFET = 64016,
SPELL_FIREBALL = 63815,
SPELL_WINGBUFFET = 62666,
- SPELL_FLAMEBREATH_10 = 63317,
- SPELL_FLAMEBREATH_25 = 64021,
+ SPELL_FLAMEBREATH = 63317,
SPELL_FUSEARMOR = 64771,
SPELL_FUSED_ARMOR = 64774, // Applied on 5th stack of SPELL_FUSEARMOR
SPELL_DEVOURINGFLAME = 63236,
@@ -50,25 +48,17 @@ enum Spells
// Dark Rune Sentinel
SPELL_WHIRLWIND = 63808,
- SPELL_BATTLE_SHOUT_10 = 46763,
- SPELL_BATTLE_SHOUT_25 = 64062,
+ SPELL_BATTLE_SHOUT = 46763,
// Dark Rune Guardian
SPELL_STORMSTRIKE_DMG = 65971,
SPELL_STORMSTRIKE_DEBUFF = 64757,
// Dark Rune Watcher
- SPELL_LIGHTINGBOLT_10 = 63809,
- SPELL_LIGHTINGBOLT_25 = 64696,
- SPELL_CHAINLIGHTNING_10 = 64758,
- SPELL_CHAINLIGHTNING_25 = 64759,
+ SPELL_LIGHTINGBOLT = 63809,
+ SPELL_CHAINLIGHTNING = 64758,
};
-#define SPELL_FLAMEBUFFET RAID_MODE(SPELL_FLAMEBUFFET_10, SPELL_FLAMEBUFFET_25)
-#define SPELL_FLAMEBREATH RAID_MODE(SPELL_FLAMEBREATH_10, SPELL_FLAMEBREATH_25)
-#define SPELL_BATTLE_SHOUT RAID_MODE(SPELL_BATTLE_SHOUT_10, SPELL_BATTLE_SHOUT_25)
-#define SPELL_LIGHTINGBOLT RAID_MODE(SPELL_LIGHTINGBOLT_10, SPELL_LIGHTINGBOLT_25)
-#define SPELL_CHAINLIGHTNING RAID_MODE(SPELL_CHAINLIGHTNING_10, SPELL_CHAINLIGHTNING_25)
#define REQ_CHAIN_COUNT RAID_MODE(2, 4)
enum NPCs
@@ -354,17 +344,7 @@ public:
{
me->StopMoving();
startPath = false;
- if (WaypointPath const* i_path = sWaypointMgr->GetPath(me->GetWaypointPath()))
- {
- Movement::PointsArray pathPoints;
- pathPoints.push_back(G3D::Vector3(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()));
- for (uint8 i = 0; i < i_path->size(); ++i)
- {
- WaypointData const* node = i_path->at(i);
- pathPoints.push_back(G3D::Vector3(node->x, node->y, node->z));
- }
- me->GetMotionMaster()->MoveSplinePath(&pathPoints);
- }
+ me->GetMotionMaster()->MovePath(me->GetWaypointPath(), FORCED_MOVEMENT_NONE, PathSource::WAYPOINT_MGR);
}
if (!UpdateVictim())
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
index 006798aebc..160e8d3d50 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
@@ -23,6 +23,7 @@
#include "ScriptedCreature.h"
#include "ScriptedEscortAI.h"
#include "SpellAuraEffects.h"
+#include "SpellMgr.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "ulduar.h"
@@ -34,8 +35,7 @@ enum ThorimSpells
SPELL_SHEATH_OF_LIGHTNING = 62276,
SPELL_STORMHAMMER = 62042,
SPELL_BERSERK_FRIENDS = 62560,
- SPELL_CHAIN_LIGHTNING_10 = 62131,
- SPELL_CHAIN_LIGHTNING_25 = 64390,
+ SPELL_CHAIN_LIGHTNING = 62131,
SPELL_UNBALANCING_STRIKE = 62130,
SPELL_BERSERK = 26662,
@@ -54,17 +54,13 @@ enum ThorimSpells
SPELL_SIF_CHANNEL_HOLOGRAM = 64324,
SPELL_FROSTBOLT = 62601,
SPELL_FROSTBOLT_VALLEY = 62604,
- SPELL_BLIZZARD_10 = 62577,
- SPELL_BLIZZARD_25 = 62603,
+ SPELL_BLIZZARD = 62577,
SPELL_FROST_NOVA = 62605,
// DARK RUNE ACOLYTE
- SPELL_GREATER_HEAL_10 = 62334,
- SPELL_GREATER_HEAL_25 = 62442,
- SPELL_HOLY_SMITE_10 = 62335,
- SPELL_HOLY_SMITE_25 = 62443,
- SPELL_RENEW_10 = 62333,
- SPELL_RENEW_25 = 62441,
+ SPELL_GREATER_HEAL = 62334,
+ SPELL_HOLY_SMITE = 62335,
+ SPELL_RENEW = 62333,
// CAPTURED MERCENARY SOLDIER
SPELL_BARBED_SHOT = 62318,
@@ -76,19 +72,15 @@ enum ThorimSpells
SPELL_HEROIC_STRIKE = 62444,
// JORMUNGAR BEHEMOTH
- SPELL_ACID_BREATH_10 = 62315,
- SPELL_ACID_BREATH_25 = 62415,
- SPELL_SWEEP_10 = 62316,
- SPELL_SWEEP_25 = 62417,
+ SPELL_ACID_BREATH = 62315,
+ SPELL_SWEEP = 62316,
// IRON RING GUARD
- SPELL_IMPALE_10 = 62331,
- SPELL_IMPALE_25 = 62418,
+ SPELL_IMPALE = 62331,
SPELL_WHIRLING_TRIP = 64151,
// IRON HONOR GUARD
- SPELL_SHIELD_SMASH_10 = 62332,
- SPELL_SHIELD_SMASH_25 = 62420,
+ SPELL_SHIELD_SMASH = 62332,
SPELL_CLEAVE = 42724,
SPELL_HAMSTRING = 48639,
@@ -97,12 +89,9 @@ enum ThorimSpells
SPELL_RUNIC_STRIKE = 62322,
// DARK RUNE EVOKER
- SPELL_RUNIC_LIGHTNING_10 = 62327,
- SPELL_RUNIC_LIGHTNING_25 = 62445,
- SPELL_RUNIC_MENDING_10 = 62328,
- SPELL_RUNIC_MENDING_25 = 62446,
- SPELL_RUNIC_SHIELD_10 = 62321,
- SPELL_RUNIC_SHIELD_25 = 62529,
+ SPELL_RUNIC_LIGHTNING = 62327,
+ SPELL_RUNIC_MENDING = 62328,
+ SPELL_RUNIC_SHIELD = 62321,
// DARK RUNE CHAMPION
SPELL_CHARGE = 32323,
@@ -114,8 +103,7 @@ enum ThorimSpells
SPELL_PUMMEL = 38313,
// RUNIC COLOSSUS
- SPELL_COLOSSUS_CHARGE_10 = 62613,
- SPELL_COLOSSUS_CHARGE_25 = 62614,
+ SPELL_COLOSSUS_CHARGE = 62613,
SPELL_RUNIC_BARRIER = 62338,
SPELL_SMASH = 62339,
SPELL_RUNIC_SMASH_LEFT = 62057,
@@ -125,8 +113,7 @@ enum ThorimSpells
// ANCIENT RUNE GIANT
SPELL_RUNE_DETONATION = 62526,
SPELL_RUNIC_FORTIFICATION = 62942,
- SPELL_STOMP_10 = 62411,
- SPELL_STOMP_25 = 62413,
+ SPELL_STOMP = 62411,
// TRAPS
SPELL_LIGHTNING_FIELD = 64972,
@@ -134,20 +121,6 @@ enum ThorimSpells
SPELL_PARALYTIC_FIELD_SECOND = 63540,
};
-#define SPELL_GREATER_HEAL RAID_MODE(SPELL_GREATER_HEAL_10, SPELL_GREATER_HEAL_25)
-#define SPELL_HOLY_SMITE RAID_MODE(SPELL_HOLY_SMITE_10, SPELL_HOLY_SMITE_25)
-#define SPELL_RENEW RAID_MODE(SPELL_RENEW_10, SPELL_RENEW_25)
-#define SPELL_ACID_BREATH RAID_MODE(SPELL_ACID_BREATH_10, SPELL_ACID_BREATH_25)
-#define SPELL_SWEEP RAID_MODE(SPELL_SWEEP_10, SPELL_SWEEP_25)
-#define SPELL_IMPALE RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25)
-#define SPELL_COLOSSUS_CHARGE RAID_MODE(SPELL_COLOSSUS_CHARGE_10, SPELL_COLOSSUS_CHARGE_25)
-#define SPELL_STOMP RAID_MODE(SPELL_STOMP_10, SPELL_STOMP_25)
-#define SPELL_SHIELD_SMASH RAID_MODE(SPELL_SHIELD_SMASH_10, SPELL_SHIELD_SMASH_25)
-#define SPELL_RUNIC_LIGHTNING RAID_MODE(SPELL_RUNIC_LIGHTNING_10, SPELL_RUNIC_LIGHTNING_25)
-#define SPELL_RUNIC_MENDING RAID_MODE(SPELL_RUNIC_MENDING_10, SPELL_RUNIC_MENDING_25)
-#define SPELL_RUNIC_SHIELD RAID_MODE(SPELL_RUNIC_SHIELD_10, SPELL_RUNIC_SHIELD_25)
-#define SPELL_CHAIN_LIGHTNING RAID_MODE(SPELL_CHAIN_LIGHTNING_10, SPELL_CHAIN_LIGHTNING_25)
-
enum ThormNPCandGOs : uint32
{
// ARENA INIT
@@ -934,7 +907,6 @@ public:
{
InitWaypoint();
Reset();
- me->SetWalk(false);
Start(false);
}
@@ -1021,7 +993,6 @@ public:
{
InitWaypoint();
Reset();
- me->SetWalk(false);
Start(false);
SetDespawnAtEnd(false);
}
@@ -1046,7 +1017,7 @@ public:
{
me->SetSpeed(MOVE_RUN, 1);
me->SetSpeed(MOVE_WALK, 1);
- me->CastSpell(me, RAID_MODE(SPELL_BLIZZARD_10, SPELL_BLIZZARD_25), true);
+ me->CastSpell(me, SPELL_BLIZZARD, true);
}
void WaypointReached(uint32 /*point*/) override
@@ -1208,7 +1179,7 @@ public:
events.Repeat(1600ms);
break;
case EVENT_DR_ACOLYTE_R:
- if (HealthBelowPct(75) && !me->HasAura(SPELL_RENEW))
+ if (HealthBelowPct(75) && !me->HasAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_RENEW, me)))
me->CastSpell(me, SPELL_GREATER_HEAL, false);
else if (Unit* target = DoSelectLowestHpFriendly(60.0f, 10))
me->CastSpell(target, SPELL_RENEW, false);
@@ -1333,7 +1304,7 @@ public:
events.Repeat(1600ms);
break;
case EVENT_DR_ACOLYTE_R:
- if (HealthBelowPct(75) && !me->HasAura(SPELL_RENEW))
+ if (HealthBelowPct(75) && !me->HasAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_RENEW, me)))
me->CastSpell(me, SPELL_GREATER_HEAL, false);
else if (Unit* target = DoSelectLowestHpFriendly(60.0f, 10))
me->CastSpell(target, SPELL_RENEW, false);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
index 570e7a266d..ab7e276730 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
@@ -30,10 +30,8 @@
enum XT002Spells
{
// BASIC
- SPELL_GRAVITY_BOMB_10 = 63024,
- SPELL_GRAVITY_BOMB_25 = 64234,
- SPELL_SEARING_LIGHT_10 = 63018,
- SPELL_SEARING_LIGHT_25 = 65121,
+ SPELL_GRAVITY_BOMB = 63024,
+ SPELL_SEARING_LIGHT = 63018,
SPELL_TYMPANIC_TANTARUM = 62776,
SPELL_XT002_ENRAGE = 26662,
@@ -48,27 +46,18 @@ enum XT002Spells
SPELL_EXPOSED_HEART = 63849,
SPELL_ENERGY_ORB = 62790,
SPELL_ENERGY_ORB_TRIGGER = 62826,
- SPELL_HEARTBREAK_10 = 65737,
- SPELL_HEARTBREAK_25 = 64193,
+ SPELL_HEARTBREAK = 65737,
// VOID ZONE
- SPELL_VOID_ZONE_SUMMON_10 = 64203,
- SPELL_VOID_ZONE_SUMMON_25 = 64235,
- //SPELL_VOID_ZONE_SUMMON = RAID_MODE(SPELL_VOID_ZONE_SUMMON_10, SPELL_VOID_ZONE_SUMMON_25, SPELL_VOID_ZONE_SUMMON_10, SPELL_VOID_ZONE_SUMMON_25),
+ SPELL_VOID_ZONE_SUMMON = 64203,
SPELL_VOID_ZONE_DAMAGE = 46262,
// SPARK
SPELL_SPARK_SUMMON = 64210,
- SPELL_SPARK_DAMAGE_10 = 64227,
- SPELL_SPARK_DAMAGE_25 = 64236,
+ SPELL_SPARK_DAMAGE = 64227,
SPELL_SPARK_MELEE = 64230,
};
-#define SPELL_GRAVITY_BOMB RAID_MODE(SPELL_GRAVITY_BOMB_10, SPELL_GRAVITY_BOMB_25)
-#define SPELL_SEARING_LIGHT RAID_MODE(SPELL_SEARING_LIGHT_10, SPELL_SEARING_LIGHT_25)
-#define SPELL_HEARTBREAK RAID_MODE(SPELL_HEARTBREAK_10, SPELL_HEARTBREAK_25)
-#define SPELL_SPARK_DAMAGE RAID_MODE(SPELL_SPARK_DAMAGE_10, SPELL_SPARK_DAMAGE_25)
-
enum XT002Events
{
EVENT_HEALTH_CHECK = 1,
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp
index c26a9ff053..b7dd602db3 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp
@@ -24,6 +24,7 @@
#include "ScriptedCreature.h"
#include "ScriptedEscortAI.h"
#include "SpellAuras.h"
+#include "SpellMgr.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "ulduar.h"
@@ -102,8 +103,7 @@ enum YoggSpells
// CONSTRICTOR TENTACLE
SPELL_LUNGE = 64123,
- SPELL_SQUEEZE_10 = 64125,
- SPELL_SQUEEZE_25 = 64126,
+ SPELL_SQUEEZE = 64125,
// CORRUPTOR TENTACLE
SPELL_APATHY = 64156,
@@ -142,15 +142,10 @@ enum YoggSpells
SPELL_SIMPLE_TELEPORT = 64195,
SPELL_EMPOWERED = 65294,
SPELL_EMPOWERED_PASSIVE = 64161,
- SPELL_DRAIN_LIFE_10 = 64159,
- SPELL_DRAIN_LIFE_25 = 64160,
+ SPELL_DRAIN_LIFE = 64159,
SPELL_RECENTLY_SPAWNED = 64497,
};
-#define SPELL_PSYCHOSIS RAID_MODE(SPELL_SARA_PSYCHOSIS_10, SPELL_SARA_PSYCHOSIS_25)
-#define SPELL_SQUEEZE RAID_MODE(SPELL_SQUEEZE_10, SPELL_SQUEEZE_25)
-#define SPELL_DRAIN_LIFE RAID_MODE(SPELL_DRAIN_LIFE_10, SPELL_DRAIN_LIFE_25)
-
enum YoggEvents
{
EVENT_SARA_P1_DOORS_CLOSE = 1,
@@ -846,7 +841,7 @@ public:
{
Talk(SAY_SARA_PSYCHOSIS_HIT);
}
- me->CastCustomSpell(SPELL_PSYCHOSIS, SPELLVALUE_MAX_TARGETS, 1, me, false);
+ me->CastCustomSpell(SPELL_SARA_PSYCHOSIS_10, SPELLVALUE_MAX_TARGETS, 1, me, false);
events.Repeat(3500ms);
break;
case EVENT_SARA_P2_DEATH_RAY:
@@ -937,7 +932,6 @@ public:
{
InitWaypoint();
Reset();
- me->SetWalk(false);
Start(false, ObjectGuid::Empty, nullptr, false, true);
}
@@ -1678,7 +1672,7 @@ public:
{
if (me->GetDistance(itr->GetSource()) > 10 || !itr->GetSource()->IsAlive() || itr->GetSource()->IsGameMaster())
continue;
- if (itr->GetSource()->HasAura(SPELL_SQUEEZE) || itr->GetSource()->HasAura(SPELL_INSANE1))
+ if (itr->GetSource()->HasAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_SQUEEZE, me)) || itr->GetSource()->HasAura(SPELL_INSANE1))
continue;
if (count <= num || !target)
@@ -1720,7 +1714,7 @@ public:
void JustDied(Unit*) override
{
if (Unit* player = ObjectAccessor::GetUnit(*me, _playerGUID))
- player->RemoveAura(SPELL_SQUEEZE);
+ player->RemoveAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_SQUEEZE, me));
}
};
};
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp
index be980bd557..ff9e906924 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp
@@ -79,7 +79,11 @@ enum UldSpells
SPELL_SIMPLE_TELEPORT = 12980,
SPELL_KEEPER_TELEPORT = 62940,
SPELL_SNOW_MOUND_PARTICLES = 64615,
- SPELL_ENERGY_SAP_10 = 64740
+ SPELL_ENERGY_SAP_10 = 64740,
+
+ // Arachnopod Destroyer
+ SPELL_FLAME_SPRAY = 64717,
+ SPELL_MACHINE_GUN = 64776,
};
class npc_ulduar_keeper : public CreatureScript
@@ -473,11 +477,11 @@ public:
case 0:
break;
case 1:
- me->CastSpell(me->GetVictim(), RAID_MODE(64717, 65241), false);
+ me->CastSpell(me->GetVictim(), SPELL_FLAME_SPRAY, false);
events.Repeat(15s, 25s);
break;
case 2:
- me->CastSpell(me->GetVictim(), RAID_MODE(64776, 65240), false);
+ me->CastSpell(me->GetVictim(), SPELL_MACHINE_GUN, false);
events.Repeat(10s, 15s);
break;
case 3:
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
index 868f8000f0..50fd08dd3d 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
@@ -56,28 +56,17 @@ enum eSpells
SPELL_RESURRECTION_HEAL = 42704,
SPELL_INGVAR_TRANSFORM = 42796,
- SPELL_STAGGERING_ROAR_N = 42708,
- SPELL_STAGGERING_ROAR_H = 59708,
+ SPELL_STAGGERING_ROAR = 42708,
SPELL_CLEAVE = 42724,
- SPELL_SMASH_N = 42669,
- SPELL_SMASH_H = 59706,
- SPELL_ENRAGE_N = 42705,
- SPELL_ENRAGE_H = 59707,
-
- SPELL_DREADFUL_ROAR_N = 42729,
- SPELL_DREADFUL_ROAR_H = 59734,
- SPELL_WOE_STRIKE_N = 42730,
- SPELL_WOE_STRIKE_H = 59735,
+ SPELL_SMASH = 42669,
+ SPELL_ENRAGE = 42705,
+
+ SPELL_DREADFUL_ROAR = 42729,
+ SPELL_WOE_STRIKE = 42730,
SPELL_DARK_SMASH = 42723,
SPELL_SHADOW_AXE = 42749,
};
-#define SPELL_STAGGERING_ROAR DUNGEON_MODE(SPELL_STAGGERING_ROAR_N, SPELL_STAGGERING_ROAR_H)
-#define SPELL_DREADFUL_ROAR DUNGEON_MODE(SPELL_DREADFUL_ROAR_N, SPELL_DREADFUL_ROAR_H)
-#define SPELL_WOE_STRIKE DUNGEON_MODE(SPELL_WOE_STRIKE_N, SPELL_WOE_STRIKE_H)
-#define SPELL_SMASH DUNGEON_MODE(SPELL_SMASH_N, SPELL_SMASH_H)
-#define SPELL_ENRAGE DUNGEON_MODE(SPELL_ENRAGE_N, SPELL_ENRAGE_H)
-
enum eEvents
{
EVENT_START_RESURRECTION = 1,
@@ -307,9 +296,6 @@ struct boss_ingvar_the_plunderer : public ScriptedAI
case EVENT_SPELL_ROAR:
Talk(EMOTE_ROAR);
- me->_AddCreatureSpellCooldown(SPELL_STAGGERING_ROAR, 0, 0);
- me->_AddCreatureSpellCooldown(SPELL_DREADFUL_ROAR, 0, 0);
-
if (me->GetDisplayId() == DISPLAYID_DEFAULT)
me->CastSpell((Unit*)nullptr, SPELL_STAGGERING_ROAR, false);
else
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
index 41a35a583d..b5910adc49 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
@@ -45,12 +45,9 @@ enum eSpells
SPELL_FROST_TOMB_SUMMON = 42714,
SPELL_FROST_TOMB_AURA = 48400,
- SPELL_SHADOWBOLT_N = 43667,
- SPELL_SHADOWBOLT_H = 59389,
+ SPELL_SHADOWBOLT = 43667,
};
-#define SPELL_SHADOWBOLT DUNGEON_MODE(SPELL_SHADOWBOLT_N, SPELL_SHADOWBOLT_H)
-
struct npc_frost_tomb : public NullCreatureAI
{
npc_frost_tomb(Creature* c) : NullCreatureAI(c)
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp
index 6e3ea7f52f..4e8ca024d6 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp
@@ -44,8 +44,7 @@ enum eSpells
SPELL_ENRAGE = 48193,
SPELL_SUMMON_SKARVALD_GHOST = 48613,
// Dalronn
- SPELL_SHADOW_BOLT_N = 43649,
- SPELL_SHADOW_BOLT_H = 59575,
+ SPELL_SHADOW_BOLT = 43649,
SPELL_DEBILITATE = 43650,
SPELL_SUMMON_SKELETONS = 52611,
SPELL_SUMMON_DALRONN_GHOST = 48612
@@ -353,7 +352,7 @@ struct boss_dalronn_the_controller : public ScriptedAI
case EVENT_SHADOW_BOLT:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
{
- me->CastSpell(target, DUNGEON_MODE(SPELL_SHADOW_BOLT_N, SPELL_SHADOW_BOLT_H), false);
+ me->CastSpell(target, SPELL_SHADOW_BOLT, false);
}
events.Repeat(2s);
break;
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
index 825efd9693..48094eb270 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
@@ -95,7 +95,7 @@ enum EnslavedProtoDrake
SPELL_FLAME_BREATH = 50653,
SPELL_KNOCK_AWAY = 49722,
- POINT_LAST = 5,
+ POINT_LAST = 6,
};
const Position protodrakeCheckPos = {206.24f, -190.28f, 200.11f, 0.f};
@@ -139,7 +139,7 @@ struct npc_enslaved_proto_drake : public ScriptedAI
_setData = true;
me->SetCanFly(true);
me->SetDisableGravity(true);
- me->GetMotionMaster()->MovePath(PATH_PROTODRAKE, false);
+ me->GetMotionMaster()->MoveWaypoint(PATH_PROTODRAKE, false);
}
}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
index 3229d8c96c..22e20f29a8 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
@@ -34,36 +34,28 @@ enum Misc
// PALEHOOF
SPELL_ARCING_SMASH = 48260,
- SPELL_IMPALE_N = 48261,
- SPELL_IMPALE_H = 59268,
- SPELL_WITHERING_ROAR_N = 48256,
- SPELL_WITHERING_ROAR_H = 59267,
+ SPELL_IMPALE = 48261,
+ SPELL_WITHERING_ROAR = 48256,
SPELL_FREEZE = 16245,
// Massive Jormungar
SPELL_ACID_SPIT = 48132,
- SPELL_ACID_SPLATTER_N = 48136,
- SPELL_ACID_SPLATTER_H = 59272,
- SPELL_POISON_BREATH_N = 48133,
- SPELL_POISON_BREATH_H = 59271,
+ SPELL_ACID_SPLATTER = 48136,
+ SPELL_POISON_BREATH = 48133,
NPC_JORMUNGAR_WORM = 27228,
// Ferocious Rhino
- SPELL_GORE_N = 48130,
- SPELL_GORE_H = 59264,
- SPELL_GRIEVOUS_WOUND_N = 48105,
- SPELL_GRIEVOUS_WOUND_H = 59263,
+ SPELL_GORE = 48130,
+ SPELL_GRIEVOUS_WOUND = 48105,
SPELL_STOMP = 48131,
// Ravenous Furbolg
- SPELL_CHAIN_LIGHTING_N = 48140,
- SPELL_CHAIN_LIGHTING_H = 59273,
+ SPELL_CHAIN_LIGHTNING = 48140,
SPELL_CRAZED = 48139,
SPELL_TERRIFYING_ROAR = 48144,
// Frenzied Worgen
- SPELL_MORTAL_WOUND_N = 48137,
- SPELL_MORTAL_WOUND_H = 59265,
+ SPELL_MORTAL_WOUND = 48137,
SPELL_ENRAGE_1 = 48138,
SPELL_ENRAGE_2 = 48142,
@@ -296,14 +288,14 @@ public:
}
case EVENT_PALEHOOF_WITHERING_ROAR:
{
- me->CastSpell(me, IsHeroic() ? SPELL_WITHERING_ROAR_H : SPELL_WITHERING_ROAR_N, false);
+ me->CastSpell(me, SPELL_WITHERING_ROAR, false);
events.Repeat(8s, 12s);
break;
}
case EVENT_PALEHOOF_IMPALE:
{
if (Unit* tgt = SelectTarget(SelectTargetMethod::Random, 0))
- me->CastSpell(tgt, IsHeroic() ? SPELL_IMPALE_H : SPELL_IMPALE_N, false);
+ me->CastSpell(tgt, SPELL_IMPALE, false);
events.Repeat(8s, 12s);
break;
@@ -424,7 +416,7 @@ public:
}
case EVENT_JORMUNGAR_ACID_SPLATTER:
{
- me->CastSpell(me, IsHeroic() ? SPELL_ACID_SPLATTER_H : SPELL_ACID_SPLATTER_N, false);
+ me->CastSpell(me, SPELL_ACID_SPLATTER, false);
// Aura summon wont work because of duration
float x, y, z;
@@ -443,7 +435,7 @@ public:
case EVENT_JORMUNGAR_POISON_BREATH:
{
if (Unit* tgt = SelectTarget(SelectTargetMethod::Random, 0))
- me->CastSpell(tgt, IsHeroic() ? SPELL_POISON_BREATH_H : SPELL_POISON_BREATH_N, false);
+ me->CastSpell(tgt, SPELL_POISON_BREATH, false);
events.Repeat(8s, 12s);
break;
@@ -546,14 +538,14 @@ public:
}
case EVENT_RHINO_GORE:
{
- me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_GORE_H : SPELL_GORE_N, false);
+ me->CastSpell(me->GetVictim(), SPELL_GORE, false);
events.Repeat(13s, 17s);
break;
}
case EVENT_RHINO_WOUND:
{
if (Unit* tgt = SelectTarget(SelectTargetMethod::Random, 0))
- me->CastSpell(tgt, IsHeroic() ? SPELL_GRIEVOUS_WOUND_H : SPELL_GRIEVOUS_WOUND_N, false);
+ me->CastSpell(tgt, SPELL_GRIEVOUS_WOUND, false);
events.Repeat(18s, 22s);
break;
@@ -650,7 +642,7 @@ public:
{
case EVENT_FURBOLG_CHAIN:
{
- me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_CHAIN_LIGHTING_H : SPELL_CHAIN_LIGHTING_N, false);
+ me->CastSpell(me->GetVictim(), SPELL_CHAIN_LIGHTNING, false);
events.Repeat(4s, 7s);
break;
}
@@ -758,7 +750,7 @@ public:
{
case EVENT_WORGEN_MORTAL:
{
- me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_MORTAL_WOUND_H : SPELL_MORTAL_WOUND_N, false);
+ me->CastSpell(me->GetVictim(), SPELL_MORTAL_WOUND, false);
events.Repeat(4s, 7s);
break;
}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
index cf6318747d..1c4c577a3a 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
@@ -38,16 +38,12 @@ enum Misc
EMOTE_RANGE = 1,
// SPELLS
- SPELL_CRUSH_N = 50234,
- SPELL_CRUSH_H = 59330,
- SPELL_POISONED_SPEAR_N = 50255,
- SPELL_POISONED_SPEAR_H = 59331,
- SPELL_WHIRLWIND_N = 50228,
- SPELL_WHIRLWIND_H = 50228,
+ SPELL_CRUSH = 50234,
+ SPELL_POISONED_SPEAR = 50255,
+ SPELL_WHIRLWIND = 50228,
SPELL_FREEZING_CLOUD_VISUAL = 47592,
- SPELL_FREEZING_CLOUD_N = 47579,
- SPELL_FREEZING_CLOUD_H = 60020,
+ SPELL_FREEZING_CLOUD = 47579,
SPELL_LAUNCH_HARPOON = 48642,
@@ -181,6 +177,7 @@ public:
else if (param == ACTION_PHASE2)
{
SecondPhase = true;
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
events.ScheduleEvent(EVENT_SKADI_CRUSH, 8s);
events.ScheduleEvent(EVENT_SKADI_SPEAR, 10s);
events.ScheduleEvent(EVENT_SKADI_WHIRLWIND, 15s);
@@ -218,21 +215,21 @@ public:
}
case EVENT_SKADI_CRUSH:
{
- me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_CRUSH_H : SPELL_CRUSH_N, false);
+ me->CastSpell(me->GetVictim(), SPELL_CRUSH, false);
events.Repeat(8s);
break;
}
case EVENT_SKADI_SPEAR:
{
if (Unit* tgt = SelectTarget(SelectTargetMethod::Random, 0))
- me->CastSpell(tgt, IsHeroic() ? SPELL_POISONED_SPEAR_H : SPELL_POISONED_SPEAR_N, false);
+ me->CastSpell(tgt, SPELL_POISONED_SPEAR, false);
events.Repeat(10s);
break;
}
case EVENT_SKADI_WHIRLWIND:
{
- me->CastSpell(me, IsHeroic() ? SPELL_WHIRLWIND_H : SPELL_WHIRLWIND_N, false);
+ me->CastSpell(me, SPELL_WHIRLWIND, false);
events.Repeat(15s, 20s);
events.DelayEvents(10s);
break;
@@ -322,7 +319,7 @@ public:
void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override
{
if (spellInfo->Id == 47593) // SPELL_FREEZING_CLOUD_VISUAL trigger
- target->CastSpell(target, me->GetMap()->IsHeroic() ? SPELL_FREEZING_CLOUD_H : SPELL_FREEZING_CLOUD_N, true);
+ target->CastSpell(target, SPELL_FREEZING_CLOUD, true);
}
void SpawnFlameTriggers(uint8 point)
@@ -339,13 +336,13 @@ public:
{
Creature* cr;
if ((cr = me->SummonCreature(NPC_BREATH_TRIGGER, 483, -484.9f, 105, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000)))
- cr->CastSpell(cr, cr->GetMap()->IsHeroic() ? SPELL_FREEZING_CLOUD_H : SPELL_FREEZING_CLOUD_N, true);
+ cr->CastSpell(cr, SPELL_FREEZING_CLOUD, true);
if ((cr = me->SummonCreature(NPC_BREATH_TRIGGER, 471.0f, -484.7f, 105, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000)))
- cr->CastSpell(cr, cr->GetMap()->IsHeroic() ? SPELL_FREEZING_CLOUD_H : SPELL_FREEZING_CLOUD_N, true);
+ cr->CastSpell(cr, SPELL_FREEZING_CLOUD, true);
for (uint8 j = 0; j < 7; j++)
if ((cr = me->SummonCreature(NPC_BREATH_TRIGGER, 477.0f, -507.0f + (j * 3), 105.0f, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000)))
- cr->CastSpell(cr, cr->GetMap()->IsHeroic() ? SPELL_FREEZING_CLOUD_H : SPELL_FREEZING_CLOUD_N, true);
+ cr->CastSpell(cr, SPELL_FREEZING_CLOUD, true);
}
}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
index 32054ef609..485030dba2 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
@@ -47,8 +47,7 @@ enum Misc
SPELL_BALL_OF_FLAME = 48246,
SPELL_RITUAL_OF_THE_SWORD = 48276,
SPELL_RITUAL_STRIKE = 48331,
- SPELL_SINSTER_STRIKE_N = 15667,
- SPELL_SINSTER_STRIKE_H = 59409,
+ SPELL_SINISTER_STRIKE = 15667,
EQUIP_SWORD = 40343,
// CHANNELERS
@@ -303,7 +302,7 @@ public:
switch (events.ExecuteEvent())
{
case EVENT_SORROWGRAVE_SS:
- me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_SINSTER_STRIKE_H : SPELL_SINSTER_STRIKE_N, false);
+ me->CastSpell(me->GetVictim(), SPELL_SINISTER_STRIKE, false);
events.ScheduleEvent(EVENT_SORROWGRAVE_SS, 3s, 5s);
break;
case EVENT_SORROWGRAVE_FLAMES:
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
index 3631886146..6c445644f5 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
@@ -32,16 +32,12 @@ enum Misc
SAY_SUMMON_TORGYN = 6,
// SPELLS
- SPELL_BANE_N = 48294,
- SPELL_BANE_H = 59301,
+ SPELL_BANE = 48294,
SPELL_DARK_SLASH = 48292,
- SPELL_FETID_ROT_N = 48291,
- SPELL_FETID_ROT_H = 59300,
+ SPELL_FETID_ROT = 48291,
SPELL_SCREAMS_OF_THE_DEAD = 51750,
- SPELL_SPIRIT_BURST_N = 48529, // when Ranulf
- SPELL_SPIRIT_BURST_H = 59305, // when Ranulf
- SPELL_SPIRIT_STRIKE_N = 48423, // when Haldor
- SPELL_SPIRIT_STRIKE_H = 59304, // when Haldor
+ SPELL_SPIRIT_BURST = 48529, // when Ranulf
+ SPELL_SPIRIT_STRIKE = 48423, // when Haldor
SPELL_SUMMON_AVENGING_SPIRIT = 48592,
SPELL_SUMMON_SPIRIT_FOUNT = 48386,
@@ -49,8 +45,7 @@ enum Misc
SPELL_CHANNEL_SPIRIT_TO_YMIRON = 48316,
SPELL_CHANNEL_YMIRON_TO_SPIRIT = 48307,
- SPELL_SPIRIT_FOUNT_N = 48380,
- SPELL_SPIRIT_FOUNT_H = 59320,
+ SPELL_SPIRIT_FOUNT = 48380,
SPELL_FLAMES = 39199,
@@ -242,13 +237,13 @@ public:
}
case EVENT_YMIRON_BANE:
{
- me->CastSpell(me, IsHeroic() ? SPELL_BANE_H : SPELL_BANE_N, false);
+ me->CastSpell(me, SPELL_BANE, false);
events.Repeat(20s, 25s);
break;
}
case EVENT_YMIRON_FETID_ROT:
{
- me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_FETID_ROT_H : SPELL_FETID_ROT_N, false);
+ me->CastSpell(me->GetVictim(), SPELL_FETID_ROT, false);
events.Repeat(10s, 13s);
break;
}
@@ -297,7 +292,7 @@ public:
{
summons.Summon(sf);
sf->SetSpeed(MOVE_RUN, 0.4f);
- sf->AddAura(IsHeroic() ? SPELL_SPIRIT_FOUNT_H : SPELL_SPIRIT_FOUNT_N, sf);
+ sf->AddAura(SPELL_SPIRIT_FOUNT, sf);
sf->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
sf->GetMotionMaster()->MoveFollow(me->GetVictim(), 0, rand_norm()*M_PI * 2, MOTION_SLOT_ACTIVE, false, false);
}
@@ -305,13 +300,13 @@ public:
}
case EVENT_YMIRON_HALDOR_ABILITY:
{
- me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_SPIRIT_STRIKE_H : SPELL_SPIRIT_STRIKE_N, false);
+ me->CastSpell(me->GetVictim(), SPELL_SPIRIT_STRIKE, false);
events.Repeat(5s);
break;
}
case EVENT_YMIRON_RANULF_ABILITY:
{
- me->CastSpell(me, IsHeroic() ? SPELL_SPIRIT_BURST_H : SPELL_SPIRIT_BURST_N, false);
+ me->CastSpell(me, SPELL_SPIRIT_BURST, false);
events.Repeat(10s);
break;
}
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp
index 8e3d5372ed..333cb1f94f 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp
@@ -27,14 +27,10 @@ enum Archavon
SPELL_ROCK_SHARDS = 58678,
SPELL_ROCK_SHARDS_LEFT_HAND_VISUAL = 58689,
SPELL_ROCK_SHARDS_RIGHT_HAND_VISUAL = 58692,
- SPELL_ROCK_SHARDS_DAMAGE_10 = 58695,
- SPELL_ROCK_SHARDS_DAMAGE_25 = 60883,
- SPELL_CRUSHING_LEAP_10 = 58960,
- SPELL_CRUSHING_LEAP_25 = 60894, // Instant (10-80yr range) -- Leaps at an enemy, inflicting 8000 Physical damage, knocking all nearby enemies away, and creating a cloud of choking debris.
- SPELL_STOMP_10 = 58663,
- SPELL_STOMP_25 = 60880,
- SPELL_IMPALE_10 = 58666,
- SPELL_IMPALE_25 = 60882, // Lifts an enemy off the ground with a spiked fist, inflicting 47125 to 52875 Physical damage and 9425 to 10575 additional damage each second for 8 sec.
+ SPELL_ROCK_SHARDS_DAMAGE = 58695,
+ SPELL_CRUSHING_LEAP = 58960,
+ SPELL_STOMP = 58663,
+ SPELL_IMPALE = 58666,
SPELL_BERSERK = 47008
};
@@ -145,7 +141,7 @@ class boss_archavon : public CreatureScript
case EVENT_CHOKING_CLOUD:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, false, false))
{
- DoCast(target, RAID_MODE(SPELL_CRUSHING_LEAP_10, SPELL_CRUSHING_LEAP_25), true); //10y ~ 80y, ignore range
+ DoCast(target, SPELL_CRUSHING_LEAP, true); //10y ~ 80y, ignore range
}
events.Repeat(30s);
@@ -156,14 +152,14 @@ class boss_archavon : public CreatureScript
snprintf(buffer, sizeof(buffer), "Archavon the Stone Watcher lunges for %s!", me->GetVictim()->GetName().c_str());
me->TextEmote(buffer);
- DoCastVictim(RAID_MODE(SPELL_STOMP_10, SPELL_STOMP_25));
+ DoCastVictim(SPELL_STOMP);
events.Repeat(45s);
events.ScheduleEvent(EVENT_IMPALE, 3s);
break;
}
case EVENT_IMPALE:
- DoCastVictim(RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25));
+ DoCastVictim(SPELL_IMPALE);
break;
case EVENT_BERSERK:
DoCast(me, SPELL_BERSERK, true);
@@ -205,17 +201,10 @@ class spell_archavon_rock_shards : public SpellScript
return;
}
- Map* map = caster->GetMap();
- if (!map)
- {
- return;
- }
-
caster->CastSpell(target, SPELL_ROCK_SHARDS_LEFT_HAND_VISUAL, true);
caster->CastSpell(target, SPELL_ROCK_SHARDS_RIGHT_HAND_VISUAL, true);
- uint32 spellId = map->Is25ManRaid() ? SPELL_ROCK_SHARDS_DAMAGE_25 : SPELL_ROCK_SHARDS_DAMAGE_10;
- caster->CastSpell(target, spellId, true);
+ caster->CastSpell(target, SPELL_ROCK_SHARDS_DAMAGE, true);
}
void Register() override
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp
index bf8da40c88..f9cb293697 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp
@@ -29,10 +29,8 @@ enum Spells
SPELL_OVERCHARGE = 64218,
SPELL_BERSERK = 26662,
- SPELL_CHAIN_LIGHTNING_10 = 64213,
- SPELL_CHAIN_LIGHTNING_25 = 64215,
- SPELL_LIGHTNING_NOVA_10 = 64216,
- SPELL_LIGHTNING_NOVA_25 = 65279,
+ SPELL_CHAIN_LIGHTNING = 64213,
+ SPELL_LIGHTNING_NOVA = 64216,
};
enum Events
@@ -171,11 +169,11 @@ public:
{
case EVENT_CHAIN_LIGHTNING:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
- me->CastSpell(target, RAID_MODE(SPELL_CHAIN_LIGHTNING_10, SPELL_CHAIN_LIGHTNING_25), false);
+ me->CastSpell(target, SPELL_CHAIN_LIGHTNING, false);
events.Repeat(25s);
break;
case EVENT_LIGHTNING_NOVA:
- me->CastSpell(me, RAID_MODE(SPELL_LIGHTNING_NOVA_10, SPELL_LIGHTNING_NOVA_25), false);
+ me->CastSpell(me, SPELL_LIGHTNING_NOVA, false);
events.Repeat(40s);
break;
case EVENT_OVERCHARGE:
diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
index 3489764e91..97fa245be4 100644
--- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
+++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
@@ -372,7 +372,6 @@ struct violet_hold_trashAI : public npc_escortAI
break;
}
SetDespawnAtEnd(false);
- me->SetWalk(false);
Start(true);
}
@@ -423,73 +422,55 @@ struct violet_hold_trashAI : public npc_escortAI
enum AzureInvaderSpells
{
- SPELL_CLEAVE = 15496,
- SPELL_IMPALE_N = 58459,
- SPELL_IMPALE_H = 59256,
+ SPELL_CLEAVE = 15496,
+ SPELL_IMPALE = 58459,
SPELL_BRUTAL_STRIKE = 58460,
- SPELL_SUNDER_ARMOR = 58461,
+ SPELL_SUNDER_ARMOR = 58461,
};
-#define SPELL_IMPALE DUNGEON_MODE(SPELL_IMPALE_N, SPELL_IMPALE_H)
enum AzureSpellbreakerSpells
{
- SPELL_ARCANE_BLAST_N = 58462,
- SPELL_ARCANE_BLAST_H = 59257,
- SPELL_SLOW = 25603,
+ SPELL_ARCANE_BLAST = 58462,
+ SPELL_SLOW = 25603,
SPELL_CHAINS_OF_ICE = 58464,
- SPELL_CONE_OF_COLD_N = 58463,
- SPELL_CONE_OF_COLD_H = 59258
+ SPELL_CONE_OF_COLD = 58463,
};
-#define SPELL_ARCANE_BLAST DUNGEON_MODE(SPELL_ARCANE_BLAST_N, SPELL_ARCANE_BLAST_H)
-#define SPELL_CONE_OF_COLD DUNGEON_MODE(SPELL_CONE_OF_COLD_N, SPELL_CONE_OF_COLD_H)
enum AzureBinderSpells
{
- SPELL_ARCANE_BARRAGE_N = 58456,
- SPELL_ARCANE_BARRAGE_H = 59248,
- SPELL_ARCANE_EXPLOSION_N = 58455,
- SPELL_ARCANE_EXPLOSION_H = 59245,
- SPELL_FROST_NOVA_N = 58458,
- SPELL_FROST_NOVA_H = 59253,
- SPELL_FROSTBOLT_N = 58457,
- SPELL_FROSTBOLT_H = 59251,
+ SPELL_ARCANE_BARRAGE = 58456,
+ SPELL_ARCANE_EXPLOSION = 58455,
+ SPELL_FROST_NOVA = 58458,
+ SPELL_FROSTBOLT = 58457,
};
-#define SPELL_ARCANE_BARRAGE DUNGEON_MODE(SPELL_ARCANE_BARRAGE_N, SPELL_ARCANE_BARRAGE_H)
-#define SPELL_ARCANE_EXPLOSION DUNGEON_MODE(SPELL_ARCANE_EXPLOSION_N, SPELL_ARCANE_EXPLOSION_H)
-#define SPELL_FROST_NOVA DUNGEON_MODE(SPELL_FROST_NOVA_N, SPELL_FROST_NOVA_H)
-#define SPELL_FROSTBOLT DUNGEON_MODE(SPELL_FROSTBOLT_N, SPELL_FROSTBOLT_H)
enum AzureMageSlayerSpells
{
SPELL_ARCANE_EMPOWERMENT = 58469,
- SPELL_SPELL_LOCK = 30849
+ SPELL_SPELL_LOCK = 30849
};
enum AzureCaptainSpells
{
- SPELL_MORTAL_STRIKE = 32736,
+ SPELL_MORTAL_STRIKE = 32736,
SPELL_WHIRLWIND_OF_STEEL = 41056
};
enum AzureSorcerorSpells
{
- SPELL_ARCANE_STREAM_N = 60181,
- SPELL_ARCANE_STREAM_H = 60204,
- SPELL_MANA_DETONATION_N = 60182,
- SPELL_MANA_DETONATION_H = 60205
+ SPELL_ARCANE_STREAM = 60181,
+ SPELL_MANA_DETONATION = 60182,
};
-#define SPELL_ARCANE_STREAM DUNGEON_MODE(SPELL_ARCANE_STREAM_N, SPELL_ARCANE_STREAM_H)
-#define SPELL_MANA_DETONATION DUNGEON_MODE(SPELL_MANA_DETONATION_N, SPELL_MANA_DETONATION_H)
enum AzureRaiderSpells
{
- SPELL_CONCUSSION_BLOW = 52719,
+ SPELL_CONCUSSION_BLOW = 52719,
SPELL_MAGIC_REFLECTION = 60158
};
enum AzureStalkerSpells
{
- SPELL_BACKSTAB = 58471,
+ SPELL_BACKSTAB = 58471,
SPELL_TACTICAL_BLINK = 58470
};
@@ -1112,7 +1093,6 @@ public:
break;
}
SetDespawnAtEnd(false);
- me->SetWalk(false);
Start(true);
}
diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp
index 21f81d4efb..3ee7f22721 100644
--- a/src/server/scripts/Northrend/zone_borean_tundra.cpp
+++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp
@@ -464,7 +464,10 @@ public:
go->UseDoorOrButton();
if (npc_escortAI* pEscortAI = CAST_AI(npc_lurgglbr::npc_lurgglbrAI, creature->AI()))
+ {
+ creature->SetWalk(true);
pEscortAI->Start(true, player->GetGUID());
+ }
creature->SetFaction(player->GetTeamId() == TEAM_ALLIANCE ? FACTION_ESCORTEE_A_PASSIVE : FACTION_ESCORTEE_H_PASSIVE);
return true;
@@ -914,6 +917,7 @@ public:
creature->SetFaction(player->GetTeamId() == TEAM_ALLIANCE ? FACTION_ESCORTEE_A_PASSIVE : FACTION_ESCORTEE_H_PASSIVE);
creature->SetStandState(UNIT_STAND_STATE_STAND);
creature->AI()->Talk(SAY_1, player);
+ creature->SetWalk(true);
CAST_AI(npc_escortAI, (creature->AI()))->Start(true, player->GetGUID());
}
return true;
@@ -959,7 +963,7 @@ public:
Talk(SAY_5);
me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
player->GroupEventHappens(QUEST_ESCAPING_THE_MIST, me);
- SetRun(true);
+ me->SetWalk(false);
break;
}
}
@@ -995,7 +999,6 @@ public:
{
creature->SetStandState(UNIT_STAND_STATE_STAND);
creature->AI()->Talk(SAY_BONKER_2, player);
- creature->SetWalk(false);
CAST_AI(npc_escortAI, (creature->AI()))->Start(true, player->GetGUID());
}
return true;
@@ -1649,7 +1652,7 @@ public:
void MovementInform(uint32 type, uint32 param) override
{
- if (type == WAYPOINT_MOTION_TYPE && param == 2)
+ if (type == WAYPOINT_MOTION_TYPE && param == 3)
{
me->SetWalk(false);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY1H);
@@ -1685,7 +1688,7 @@ public:
// Arthas load path
if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))
{
- arthas->GetMotionMaster()->MovePath(PATH_ARTHAS, false);
+ arthas->GetMotionMaster()->MoveWaypoint(PATH_ARTHAS, false);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_3, 1s);
break;
@@ -1693,7 +1696,7 @@ public:
// Talbot load path
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
{
- talbot->GetMotionMaster()->MovePath(PATH_TALBOT, false);
+ talbot->GetMotionMaster()->MoveWaypoint(PATH_TALBOT, false);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_4, 20s);
break;
@@ -1727,7 +1730,7 @@ public:
arlos->SetWalk(true);
arlos->SetImmuneToAll(true);
arlos->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
- arlos->GetMotionMaster()->MovePath(PATH_ARLOS, false);
+ arlos->GetMotionMaster()->MoveWaypoint(PATH_ARLOS, false);
}
if (Creature* leryssa = me->SummonCreature(NPC_LERYSSA, 3751.0986f, 3614.9219f, 473.4048f, 4.5029f, TEMPSUMMON_CORPSE_TIMED_DESPAWN))
{
@@ -1735,7 +1738,7 @@ public:
leryssa->SetWalk(true);
leryssa->SetImmuneToAll(true);
leryssa->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
- leryssa->GetMotionMaster()->MovePath(PATH_LERYSSA, false);
+ leryssa->GetMotionMaster()->MoveWaypoint(PATH_LERYSSA, false);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_7, 7s);
break;
@@ -1990,7 +1993,7 @@ public:
_playerGUID = player->GetGUID();
CloseGossipMenuFor(player);
me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
- me->GetMotionMaster()->MovePath(PATH_THASSARIAN, false);
+ me->GetMotionMaster()->MoveWaypoint(PATH_THASSARIAN, false);
}
}
@@ -2021,7 +2024,7 @@ public:
void MovementInform(uint32 type, uint32 param) override
{
- if (type == WAYPOINT_MOTION_TYPE && param == 2)
+ if (type == WAYPOINT_MOTION_TYPE && param == 3)
{
if (me->IsSummon())
{
diff --git a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp
index ac3aa4ef27..c1829ccbd1 100644
--- a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp
+++ b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp
@@ -41,25 +41,7 @@ struct npc_preparations_for_war_vehicle : public NullCreatureAI
void InitializeAI() override
{
- WPPath* path = sSmartWaypointMgr->GetPath(me->GetEntry());
- if (!path || path->empty())
- {
- me->DespawnOrUnsummon(1ms);
- return;
- }
-
- Movement::PointsArray pathPoints;
- pathPoints.push_back(G3D::Vector3(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()));
-
- uint32 wpCounter = 1;
- WPPath::const_iterator itr;
- while ((itr = path->find(wpCounter++)) != path->end())
- {
- WayPoint* wp = itr->second;
- pathPoints.push_back(G3D::Vector3(wp->x, wp->y, wp->z));
- }
-
- me->GetMotionMaster()->MoveSplinePath(&pathPoints);
+ me->GetMotionMaster()->MovePath(me->GetEntry(), FORCED_MOVEMENT_NONE, PathSource::SMART_WAYPOINT_MGR);
NullCreatureAI::InitializeAI();
pointId = 0;
diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp
index 5710efa291..f7b1252a61 100644
--- a/src/server/scripts/Northrend/zone_dragonblight.cpp
+++ b/src/server/scripts/Northrend/zone_dragonblight.cpp
@@ -614,7 +614,7 @@ public:
uint32 path = me->GetEntry() * 10 + urand(0, 4);
if (me->GetPositionY() > -1150.0f)
path += 5;
- me->GetMotionMaster()->MovePath(path, false);
+ me->GetMotionMaster()->MoveWaypoint(path, false);
}
void MovementInform(uint32 type, uint32 point) override
@@ -622,7 +622,7 @@ public:
if (type != WAYPOINT_MOTION_TYPE)
return;
- if (point == 8) // max-1
+ if (point == 9)
{
Talk(0);
me->RemoveAllAuras();
diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
index 50c4518be1..81ae014d58 100644
--- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp
+++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
@@ -589,77 +589,77 @@ public:
case EVENT_WOUNDED_MOVE:
if (me->GetPositionY() == -2835.11f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_1, false);
me->DespawnOrUnsummon(20s);
}
if (me->GetPositionY() == -2981.89f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_3, false);
me->DespawnOrUnsummon(18s);
}
if (me->GetPositionY() == -2934.44f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_3, false);
me->DespawnOrUnsummon(9s);
}
if (me->GetPositionY() == -3020.99f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_1, false);
me->DespawnOrUnsummon(22s);
}
if (me->GetPositionY() == -2964.73f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_2, false);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_2, false);
me->DespawnOrUnsummon(15s);
}
if (me->GetPositionY() == -2940.50f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_1, false);
me->DespawnOrUnsummon(20s);
}
if (me->GetPositionY() == -2847.93f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_1, false);
me->DespawnOrUnsummon(30s);
}
if (me->GetPositionY() == -2835.31f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_1, false);
me->DespawnOrUnsummon(27s);
}
if (me->GetPositionY() == -2822.20f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_1, false);
me->DespawnOrUnsummon(25s);
}
if (me->GetPositionY() == -2846.31f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_1, false);
me->DespawnOrUnsummon(21s);
}
if (me->GetPositionY() == -2897.23f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_3, false);
me->DespawnOrUnsummon(15s);
}
if (me->GetPositionY() == -2886.01f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_3, false);
me->DespawnOrUnsummon(25s);
}
if (me->GetPositionY() == -2906.89f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_3, false);
me->DespawnOrUnsummon(25s);
}
if (me->GetPositionY() == -3048.94f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_2, false);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_2, false);
me->DespawnOrUnsummon(30s);
}
if (me->GetPositionY() == -2961.08f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_2, false);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_2, false);
me->DespawnOrUnsummon(25s);
}
break;
diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp
index fcd725290d..ef005b6158 100644
--- a/src/server/scripts/Northrend/zone_howling_fjord.cpp
+++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp
@@ -191,6 +191,7 @@ public:
if (quest->GetQuestId() == QUEST_TRAIL_OF_FIRE)
{
creature->SetFaction(player->GetTeamId() == TEAM_ALLIANCE ? FACTION_ESCORTEE_A_PASSIVE : FACTION_ESCORTEE_H_PASSIVE);
+ creature->SetWalk(true);
CAST_AI(npc_escortAI, (creature->AI()))->Start(true, player->GetGUID());
}
return true;
@@ -238,7 +239,7 @@ public:
{
case 1:
me->SetReactState(REACT_AGGRESSIVE);
- SetRun(true);
+ me->SetWalk(false);
break;
case 23:
player->GroupEventHappens(QUEST_TRAIL_OF_FIRE, me);
@@ -247,32 +248,32 @@ public:
case 5:
if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER, 10.0f))
Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false);
- SetRun(false);
+ me->SetWalk(true);
break;
case 6:
if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER, 10.0f))
Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false);
- SetRun(true);
+ me->SetWalk(false);
break;
case 8:
if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER, 10.0f))
Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false);
- SetRun(false);
+ me->SetWalk(true);
break;
case 9:
if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER, 10.0f))
Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false);
break;
case 10:
- SetRun(true);
+ me->SetWalk(false);
break;
case 13:
- SetRun(false);
+ me->SetWalk(true);
break;
case 14:
if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER, 10.0f))
Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false);
- SetRun(true);
+ me->SetWalk(false);
break;
}
}
diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp
index 3a23551cf2..17e0e9589d 100644
--- a/src/server/scripts/Northrend/zone_icecrown.cpp
+++ b/src/server/scripts/Northrend/zone_icecrown.cpp
@@ -715,6 +715,7 @@ public:
Talk(0);
events.Reset();
summons.DespawnAll();
+ me->SetWalk(true);
Start(false);
int8 i = -1;
@@ -1311,25 +1312,7 @@ public:
break;
case EVENT_START_FLIGHT:
{
- WPPath* path = sSmartWaypointMgr->GetPath(me->GetEntry());
- if (!path || path->empty())
- {
- me->DespawnOrUnsummon(1ms);
- return;
- }
-
- Movement::PointsArray pathPoints;
- pathPoints.push_back(G3D::Vector3(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()));
-
- uint32 wpCounter = 1;
- WPPath::const_iterator itr;
- while ((itr = path->find(wpCounter++)) != path->end())
- {
- WayPoint* wp = itr->second;
- pathPoints.push_back(G3D::Vector3(wp->x, wp->y, wp->z));
- }
-
- me->GetMotionMaster()->MoveSplinePath(&pathPoints);
+ me->GetMotionMaster()->MovePath(me->GetEntry(), FORCED_MOVEMENT_NONE, PathSource::SMART_WAYPOINT_MGR);
events.ScheduleEvent(EVENT_CHECK_PATH_REGEN_HEALTH_BURN_DAMAGE, 1min);
events.ScheduleEvent(EVENT_SYNCHRONIZE_SHIELDS, 5s);
break;
diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
index 07bdfc2e95..329ab98c09 100644
--- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp
+++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
@@ -605,6 +605,7 @@ public:
creature->GetMotionMaster()->MoveJumpTo(0, 0.4f, 0.4f);
creature->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE);
+ creature->SetWalk(true);
pEscortAI->Start(false, player->GetGUID());
creature->AI()->Talk(SAY_WP_1);
}
@@ -1147,17 +1148,7 @@ public:
{
if (apply && passenger->IsPlayer())
{
- Movement::PointsArray pathPoints;
- pathPoints.push_back(G3D::Vector3(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()));
-
- WaypointPath const* i_path = sWaypointMgr->GetPath(NPC_PLANE);
- for (uint8 i = 0; i < i_path->size(); ++i)
- {
- WaypointData const* node = i_path->at(i);
- pathPoints.push_back(G3D::Vector3(node->x, node->y, node->z));
- }
-
- me->GetMotionMaster()->MoveSplinePath(&pathPoints);
+ me->GetMotionMaster()->MovePath(NPC_PLANE, FORCED_MOVEMENT_NONE, PathSource::WAYPOINT_MGR);
}
}
diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp
index 559c8e823f..5a50bee8a3 100644
--- a/src/server/scripts/Northrend/zone_storm_peaks.cpp
+++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp
@@ -57,7 +57,6 @@ struct npc_frosthound : public npc_escortAI
{
me->SetFaction(who->GetFaction());
me->CastSpell(me, SPELL_SUMMON_PURSUERS_PERIODIC, true);
- me->SetWalk(false);
Start(false, who->GetGUID());
Talk(TALK_EMOTE_FROSTHOUND_SNIFF, me);
}
@@ -247,7 +246,6 @@ public:
void RollPath()
{
me->SetEntry(NPC_TIME_LOST_PROTO_DRAKE);
- me->SetWalk(false);
Start(true, ObjectGuid::Empty, 0, false, true, true);
SetNextWaypoint(urand(0, 250), true);
me->UpdateEntry(roll_chance_i(25) ? NPC_TIME_LOST_PROTO_DRAKE : NPC_VYRAGOSA, 0, false);
@@ -469,17 +467,7 @@ public:
if (startPath)
{
startPath = false;
- Movement::PointsArray pathPoints;
- pathPoints.push_back(G3D::Vector3(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()));
-
- WaypointPath const* i_path = sWaypointMgr->GetPath(me->GetWaypointPath());
- for (uint8 i = 0; i < i_path->size(); ++i)
- {
- WaypointData const* node = i_path->at(i);
- pathPoints.push_back(G3D::Vector3(node->x, node->y, node->z));
- }
-
- me->GetMotionMaster()->MoveSplinePath(&pathPoints);
+ me->GetMotionMaster()->MovePath(me->GetWaypointPath(), FORCED_MOVEMENT_NONE, PathSource::WAYPOINT_MGR);
}
if (setCharm)
{
@@ -851,17 +839,7 @@ public:
{
Talk(TEXT_EMOTE, passenger);
- Movement::PointsArray pathPoints;
- pathPoints.push_back(G3D::Vector3(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()));
-
- WaypointPath const* i_path = sWaypointMgr->GetPath(NPC_DRAKE);
- for (uint8 i = 0; i < i_path->size(); ++i)
- {
- WaypointData const* node = i_path->at(i);
- pathPoints.push_back(G3D::Vector3(node->x, node->y, node->z));
- }
-
- me->GetMotionMaster()->MoveSplinePath(&pathPoints);
+ me->GetMotionMaster()->MovePath(NPC_DRAKE, FORCED_MOVEMENT_NONE, PathSource::WAYPOINT_MGR);
}
}
else
@@ -1089,15 +1067,7 @@ public:
{
if (apply)
{
- Movement::PointsArray pathPoints;
- pathPoints.push_back(G3D::Vector3(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()));
- WaypointPath const* i_path = sWaypointMgr->GetPath(me->GetEntry() * 100);
- for (uint8 i = 0; i < i_path->size(); ++i)
- {
- WaypointData const* node = i_path->at(i);
- pathPoints.push_back(G3D::Vector3(node->x, node->y, node->z));
- }
- me->GetMotionMaster()->MoveSplinePath(&pathPoints);
+ me->GetMotionMaster()->MovePath(me->GetEntry() * 100, FORCED_MOVEMENT_NONE, PathSource::WAYPOINT_MGR);
me->SetCanFly(true);
me->SetDisableGravity(true);
me->SetSpeed(MOVE_RUN, 6.0f);
diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp
index cc42869104..276683cd62 100644
--- a/src/server/scripts/Northrend/zone_wintergrasp.cpp
+++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp
@@ -184,7 +184,7 @@ public:
data << spellId;
data << uint8(SPELL_FAILED_CUSTOM_ERROR);
data << uint32(SPELL_CUSTOM_ERROR_CANT_BUILD_MORE_VEHICLES);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
return true;
}
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp
index a9afd481c0..155dc6cb37 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp
@@ -66,7 +66,7 @@ struct boss_ambassador_hellmaw : public BossAI
}
else
{
- me->GetMotionMaster()->MovePath(PATH_ID_START, false);
+ me->GetMotionMaster()->MoveWaypoint(PATH_ID_START, false);
}
}
@@ -88,7 +88,7 @@ struct boss_ambassador_hellmaw : public BossAI
DoPlaySoundToSet(me, SOUND_INTRO);
isBanished = false;
me->SetImmuneToAll(false);
- me->GetMotionMaster()->MovePath(PATH_ID_START, false);
+ me->GetMotionMaster()->MoveWaypoint(PATH_ID_START, false);
}
void JustEngagedWith(Unit*) override
@@ -142,7 +142,7 @@ struct boss_ambassador_hellmaw : public BossAI
{
me->m_Events.AddEventAtOffset([this]()
{
- me->GetMotionMaster()->MovePath(PATH_ID_PATHING, true);
+ me->GetMotionMaster()->MoveWaypoint(PATH_ID_PATHING, true);
}, 20s);
}
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
index c774c1a5e3..c1c9723055 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
@@ -794,7 +794,7 @@ struct npc_akama_illidan : public ScriptedAI
if (instance->GetBossState(DATA_AKAMA_ILLIDAN) != DONE)
{
- me->GetMotionMaster()->MovePath(PATH_AKAMA_ILLIDARI_COUNCIL_2, false);
+ me->GetMotionMaster()->MoveWaypoint(PATH_AKAMA_ILLIDARI_COUNCIL_2, false);
}
else
{
@@ -811,7 +811,7 @@ struct npc_akama_illidan : public ScriptedAI
{
me->NearTeleportTo(AkamaIllidariCouncilTeleport);
me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
- me->GetMotionMaster()->MovePath(PATH_AKAMA_ILLIDARI_COUNCIL_1, false);
+ me->GetMotionMaster()->MoveWaypoint(PATH_AKAMA_ILLIDARI_COUNCIL_1, false);
}
break;
case ACTION_AKAMA_MINIONS:
@@ -904,7 +904,7 @@ struct npc_akama_illidan : public ScriptedAI
else if (type == WAYPOINT_MOTION_TYPE)
{
if (me->GetCurrentWaypointID() == PATH_AKAMA_MINIONS)
- if (id == 2)
+ if (id == 3)
DoCastSelf(SPELL_AKAMA_TELEPORT);
}
}
@@ -974,7 +974,7 @@ struct npc_akama_illidan : public ScriptedAI
Talk(SAY_AKAMA_SALUTE);
}, 56955ms); // 6275ms
me->m_Events.AddEventAtOffset([&] {
- me->GetMotionMaster()->MovePath(PATH_AKAMA_ILLIDARI_COUNCIL_3, false);
+ me->GetMotionMaster()->MoveWaypoint(PATH_AKAMA_ILLIDARI_COUNCIL_3, false);
}, 64030ms); // 7075ms
}
break;
@@ -1013,7 +1013,7 @@ struct npc_akama_illidan : public ScriptedAI
me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
}, 9530ms); // 2830ms
me->m_Events.AddEventAtOffset([&] {
- me->GetMotionMaster()->MovePath(PATH_AKAMA_MINIONS, false);
+ me->GetMotionMaster()->MoveWaypoint(PATH_AKAMA_MINIONS, false);
}, 14400ms); // 4870ms
}
}
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 060c627ee5..93d497d6eb 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
@@ -81,8 +81,8 @@ enum Misc
enum WaterElementalPathIds
{
- PATH_CENTER = 5,
- PATH_END = 12
+ PATH_CENTER = 6,
+ PATH_END = 13
};
struct boss_hydross_the_unstable : public BossAI
@@ -273,7 +273,7 @@ struct boss_hydross_the_unstable : public BossAI
else if (summon->GetEntry() == NPC_TAINTED_HYDROSS_ELEMENTAL)
{
summon->setActive(true);
- summon->GetMotionMaster()->MovePath(summon->GetEntry() * 10, false);
+ summon->GetMotionMaster()->MoveWaypoint(summon->GetEntry() * 10, false);
}
else
{
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_rokmar_the_crackler.cpp b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_rokmar_the_crackler.cpp
index 1486bf0bd6..f9dca0c401 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_rokmar_the_crackler.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_rokmar_the_crackler.cpp
@@ -23,8 +23,7 @@ enum Spells
{
SPELL_ENSNARING_MOSS = 31948,
SPELL_FRENZY = 34970,
- SPELL_GRIEVOUS_WOUND_N = 31956,
- SPELL_GRIEVOUS_WOUND_H = 38801,
+ SPELL_GRIEVOUS_WOUND = 31956,
SPELL_WATER_SPIT = 35008
};
@@ -53,7 +52,7 @@ struct boss_rokmar_the_crackler : public BossAI
scheduler.Schedule(8s, [this] (TaskContext context)
{
- DoCastVictim(DUNGEON_MODE(SPELL_GRIEVOUS_WOUND_N, SPELL_GRIEVOUS_WOUND_H));
+ DoCastVictim(SPELL_GRIEVOUS_WOUND);
context.Repeat(20700ms);
}).Schedule(15300ms, [this](TaskContext context)
{
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/the_slave_pens.cpp b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/the_slave_pens.cpp
index 741a8e78f5..c7e4525c8f 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/the_slave_pens.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/the_slave_pens.cpp
@@ -31,7 +31,7 @@ public:
{
if (Creature* quagmirran = instance->GetCreature(DATA_QUAGMIRRAN))
{
- quagmirran->GetMotionMaster()->MovePath(quagmirran->GetEntry() * 100, true);
+ quagmirran->GetMotionMaster()->MoveWaypoint(quagmirran->GetEntry() * 100, true);
}
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_ghazan.cpp b/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_ghazan.cpp
index 0510e6b91e..5a9fe60fd2 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_ghazan.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_ghazan.cpp
@@ -86,13 +86,13 @@ struct boss_ghazan : public BossAI
if (type == ACTION_MOVE_TO_PLATFORM && !_movedToPlatform)
{
_movedToPlatform = true;
- me->GetMotionMaster()->MovePath((me->GetSpawnId() * 10) + 1, false);
+ me->GetMotionMaster()->MoveWaypoint((me->GetSpawnId() * 10) + 1, false);
}
}
void MovementInform(uint32 type, uint32 pointId) override
{
- if (!_movedToPlatform || type != WAYPOINT_MOTION_TYPE || pointId != 19)
+ if (!_movedToPlatform || type != WAYPOINT_MOTION_TYPE || pointId != 20)
{
return;
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_porung.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_porung.cpp
index 77982ad4e7..457dc69e7c 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_porung.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_porung.cpp
@@ -43,7 +43,7 @@ enum Says
enum Misc
{
- POINT_SCOUT_WP_END = 3,
+ POINT_SCOUT_WP_END = 4,
SET_DATA_ARBITRARY_VALUE = 1,
SET_DATA_ENCOUNTER_DONE = 2
@@ -100,7 +100,7 @@ struct npc_shattered_hand_scout : public ScriptedAI
DoCastSelf(SPELL_CLEAR_ALL);
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
Talk(SAY_INVADERS_BREACHED);
- me->GetMotionMaster()->MovePath(me->GetEntry() * 10, false);
+ me->GetMotionMaster()->MoveWaypoint(me->GetEntry() * 10, false);
_firstZealots.clear();
std::list<Creature*> creatureList;
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
index 57b86cae37..327664c2bd 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
@@ -355,17 +355,7 @@ struct boss_alar : public BossAI
void ConstructWaypointsAndMove()
{
me->StopMoving();
- if (WaypointPath const* i_path = sWaypointMgr->GetPath(me->GetWaypointPath()))
- {
- Movement::PointsArray pathPoints;
- pathPoints.push_back(G3D::Vector3(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()));
- for (uint8 i = 0; i < i_path->size(); ++i)
- {
- WaypointData const* node = i_path->at(i);
- pathPoints.push_back(G3D::Vector3(node->x, node->y, node->z));
- }
- me->GetMotionMaster()->MoveSplinePath(&pathPoints);
- }
+ me->GetMotionMaster()->MovePath(me->GetWaypointPath(), FORCED_MOVEMENT_NONE, PathSource::WAYPOINT_MGR);
}
void UpdateAI(uint32 diff) override
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
index 871d014d98..0280250238 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
@@ -347,7 +347,7 @@ struct boss_kaelthas : public BossAI
}
else if (point == POINT_AIR)
{
- me->SetDisableGravity(true, false, false); // updating AnimationTier will break drowning animation later
+ me->SetDisableGravity(true); // updating AnimationTier will break drowning animation later
}
else if (point == POINT_START_LAST_PHASE)
{
diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
index 9438aa8082..e9457b0e0f 100644
--- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
+++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
@@ -171,7 +171,10 @@ public:
npc_ancestral_wolfAI(Creature* creature) : npc_escortAI(creature)
{
if (creature->GetOwner() && creature->GetOwner()->IsPlayer())
+ {
+ creature->SetWalk(true);
Start(false, creature->GetOwner()->GetGUID());
+ }
creature->SetSpeed(MOVE_WALK, 1.5f);
DoCast(SPELL_GUIDED_BY_THE_SPIRITS);
Reset();
@@ -312,7 +315,8 @@ public:
{
me->SetReactState(REACT_AGGRESSIVE);
me->SetFaction(FACTION_ESCORTEE_H_PASSIVE);
- npc_escortAI::Start(true, player->GetGUID());
+ me->SetWalk(true);
+ Start(true, player->GetGUID());
}
}
diff --git a/src/server/scripts/Outland/zone_nagrand.cpp b/src/server/scripts/Outland/zone_nagrand.cpp
index 87051cbc51..5d815569ba 100644
--- a/src/server/scripts/Outland/zone_nagrand.cpp
+++ b/src/server/scripts/Outland/zone_nagrand.cpp
@@ -65,6 +65,7 @@ public:
{
creature->SetStandState(UNIT_STAND_STATE_STAND);
creature->SetFaction(FACTION_ESCORTEE_H_NEUTRAL_ACTIVE);
+ creature->SetWalk(true);
EscortAI->Start(true, player->GetGUID(), quest);
creature->AI()->Talk(SAY_MAG_START);
@@ -133,7 +134,7 @@ public:
if (Player* player = GetPlayerForEscort())
player->GroupEventHappens(QUEST_TOTEM_KARDASH_H, me);
- SetRun(true);
+ me->SetWalk(false);
break;
}
}
@@ -306,6 +307,7 @@ public:
void SetGUID(ObjectGuid const& guid, int32 /*questId*/) override
{
me->SetStandState(UNIT_STAND_STATE_STAND);
+ me->SetWalk(true);
Start(true, guid);
Talk(SAY_KUR_START);
@@ -361,7 +363,7 @@ public:
if (Player* player = GetPlayerForEscort())
player->GroupEventHappens(QUEST_TOTEM_KARDASH_A, me);
- SetRun(true);
+ me->SetWalk(false);
break;
}
}
diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp
index d53cf6c33d..cc4f68aa24 100644
--- a/src/server/scripts/Outland/zone_netherstorm.cpp
+++ b/src/server/scripts/Outland/zone_netherstorm.cpp
@@ -103,7 +103,6 @@ public:
{
if (type == DATA_START_ENCOUNTER)
{
- me->SetWalk(false);
Start(true, playerGUID);
SetEscortPaused(true);
started = true;
@@ -606,6 +605,7 @@ public:
creature->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE);
creature->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
creature->AI()->Talk(SAY_BESSY_0);
+ creature->SetWalk(true);
CAST_AI(npc_escortAI, (creature->AI()))->Start(true, player->GetGUID());
}
return true;
@@ -772,6 +772,7 @@ public:
if (npc_maxx_a_million_escortAI* pEscortAI = CAST_AI(npc_maxx_a_million_escort::npc_maxx_a_million_escortAI, creature->AI()))
{
creature->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE);
+ creature->SetWalk(true);
pEscortAI->Start(false, player->GetGUID());
}
}
diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
index fe7d81d4e6..5e31fb4f90 100644
--- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
+++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
@@ -1860,22 +1860,22 @@ struct dragonmaw_race_npc : public ScriptedAI
switch (me->GetEntry())
{
case NPC_MUCKJAW:
- me->GetMotionMaster()->MovePath(PATH_MUCKJAW, false);
+ me->GetMotionMaster()->MoveWaypoint(PATH_MUCKJAW, false);
break;
case NPC_TROPE:
- me->GetMotionMaster()->MovePath(PATH_TROPE, false);
+ me->GetMotionMaster()->MoveWaypoint(PATH_TROPE, false);
break;
case NPC_CORLOK:
- me->GetMotionMaster()->MovePath(PATH_CORLOK, false);
+ me->GetMotionMaster()->MoveWaypoint(PATH_CORLOK, false);
break;
case NPC_ICHMAN:
- me->GetMotionMaster()->MovePath(PATH_ICHMAN, false);
+ me->GetMotionMaster()->MoveWaypoint(PATH_ICHMAN, false);
break;
case NPC_MULVERICK:
- me->GetMotionMaster()->MovePath(PATH_MULVERICK, false);
+ me->GetMotionMaster()->MoveWaypoint(PATH_MULVERICK, false);
break;
case NPC_SKYSHATTER:
- me->GetMotionMaster()->MovePath(PATH_SKYSHATTER, false);
+ me->GetMotionMaster()->MoveWaypoint(PATH_SKYSHATTER, false);
break;
default:
break;
diff --git a/src/server/scripts/Outland/zone_shattrath_city.cpp b/src/server/scripts/Outland/zone_shattrath_city.cpp
index 045e4cfb7c..d4e29509d5 100644
--- a/src/server/scripts/Outland/zone_shattrath_city.cpp
+++ b/src/server/scripts/Outland/zone_shattrath_city.cpp
@@ -246,7 +246,10 @@ public:
Player* player = summoner->ToPlayer();
if (player && player->GetQuestStatus(10211) == QUEST_STATUS_INCOMPLETE)
+ {
+ me->SetWalk(true);
Start(false, summoner->GetGUID());
+ }
}
void Reset() override { }
diff --git a/src/server/scripts/Outland/zone_terokkar_forest.cpp b/src/server/scripts/Outland/zone_terokkar_forest.cpp
index ba19c737e0..38cb0214b1 100644
--- a/src/server/scripts/Outland/zone_terokkar_forest.cpp
+++ b/src/server/scripts/Outland/zone_terokkar_forest.cpp
@@ -473,6 +473,7 @@ public:
{
if (quest->GetQuestId() == QUEST_EFTW_H || quest->GetQuestId() == QUEST_EFTW_A)
{
+ creature->SetWalk(true);
CAST_AI(npc_escortAI, (creature->AI()))->Start(true, player->GetGUID());
creature->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_ACTIVE);
}
diff --git a/src/server/scripts/Pet/pet_generic.cpp b/src/server/scripts/Pet/pet_generic.cpp
index 5b8fc12e19..8af8b89abc 100644
--- a/src/server/scripts/Pet/pet_generic.cpp
+++ b/src/server/scripts/Pet/pet_generic.cpp
@@ -567,9 +567,9 @@ struct npc_pet_gen_imp_in_a_bottle : public NullCreatureAI
for (GroupReference* itr = player->GetGroup()->GetFirstMember(); itr != nullptr && limit < 4; itr = itr->next(), ++limit)
if (Player* groupPlayer = itr->GetSource())
if (groupPlayer != player)
- groupPlayer->GetSession()->SendPacket(&_data);
+ groupPlayer->SendDirectMessage(&_data);
- player->GetSession()->SendPacket(&_data);
+ player->SendDirectMessage(&_data);
}
}
}
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index a3a62ae7e8..1d888d3e8a 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -1970,7 +1970,7 @@ class spell_pvp_trinket_wotf_shared_cd : public SpellScript
{
WorldPacket data;
player->BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_INCLUDE_GCD, 7744, GetSpellInfo()->CategoryRecoveryTime); // Will of the forsaken
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
else
{
@@ -1983,11 +1983,11 @@ class spell_pvp_trinket_wotf_shared_cd : public SpellScript
data << uint16(GetSpellInfo()->GetCategory()); // spell category
data << uint32(0);
data << uint32(GetSpellInfo()->CategoryRecoveryTime);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
WorldPacket data2;
player->BuildCooldownPacket(data2, SPELL_COOLDOWN_FLAG_INCLUDE_GCD, SPELL_PVP_TRINKET, GetSpellInfo()->CategoryRecoveryTime); // PvP Trinket spell
- player->GetSession()->SendPacket(&data2);
+ player->SendDirectMessage(&data2);
}
}
}
@@ -2650,7 +2650,7 @@ class spell_gen_spirit_healer_res : public SpellScript
{
WorldPacket data(SMSG_SPIRIT_HEALER_CONFIRM, 8);
data << target->GetGUID();
- originalCaster->GetSession()->SendPacket(&data);
+ originalCaster->SendDirectMessage(&data);
}
}