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/apps/worldserver/worldserver.conf.dist12
-rw-r--r--src/server/database/Database/DatabaseLoader.cpp21
-rw-r--r--src/server/database/Updater/DBUpdater.cpp6
-rw-r--r--src/server/game/AI/CoreAI/CombatAI.cpp8
-rw-r--r--src/server/game/AI/CoreAI/GameObjectAI.h2
-rw-r--r--src/server/game/AI/CoreAI/TotemAI.cpp2
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.h2
-rw-r--r--src/server/game/AI/CreatureAI.cpp6
-rw-r--r--src/server/game/AI/CreatureAI.h2
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.cpp10
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.h10
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp42
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedEscortAI.h4
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp4
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedGossip.cpp2
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedGossip.h2
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp122
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.h17
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp76
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp95
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h77
-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.cpp12
-rw-r--r--src/server/game/Battlefield/Battlefield.h5
-rw-r--r--src/server/game/Battlefield/Zones/BattlefieldWG.cpp2
-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.cpp6
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp9
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAB.h8
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp69
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAV.h1
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp8
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundEY.h11
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp6
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp18
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundWS.h11
-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.cpp33
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.h2
-rw-r--r--src/server/game/Entities/Corpse/Corpse.cpp2
-rw-r--r--src/server/game/Entities/Corpse/Corpse.h2
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp112
-rw-r--r--src/server/game/Entities/Creature/Creature.h18
-rw-r--r--src/server/game/Entities/Creature/CreatureData.h12
-rw-r--r--src/server/game/Entities/Creature/TemporarySummon.cpp7
-rw-r--r--src/server/game/Entities/Creature/TemporarySummon.h3
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp67
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h6
-rw-r--r--src/server/game/Entities/Item/Item.cpp4
-rw-r--r--src/server/game/Entities/Object/Object.cpp87
-rw-r--r--src/server/game/Entities/Object/Object.h13
-rw-r--r--src/server/game/Entities/Object/ObjectGuid.h2
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp8
-rw-r--r--src/server/game/Entities/Pet/Pet.h2
-rw-r--r--src/server/game/Entities/Pet/PetDefines.h13
-rw-r--r--src/server/game/Entities/Player/Player.cpp306
-rw-r--r--src/server/game/Entities/Player/Player.h34
-rw-r--r--src/server/game/Entities/Player/PlayerMisc.cpp22
-rw-r--r--src/server/game/Entities/Player/PlayerQuest.cpp26
-rw-r--r--src/server/game/Entities/Player/PlayerStorage.cpp32
-rw-r--r--src/server/game/Entities/Player/PlayerUpdates.cpp11
-rw-r--r--src/server/game/Entities/Player/SocialMgr.cpp26
-rw-r--r--src/server/game/Entities/Player/SocialMgr.h26
-rw-r--r--src/server/game/Entities/Totem/Totem.cpp6
-rw-r--r--src/server/game/Entities/Totem/Totem.h2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp432
-rw-r--r--src/server/game/Entities/Unit/Unit.h45
-rw-r--r--src/server/game/Entities/Unit/UnitDefines.h4
-rw-r--r--src/server/game/Entities/Vehicle/Vehicle.cpp4
-rw-r--r--src/server/game/Entities/Vehicle/Vehicle.h4
-rw-r--r--src/server/game/Globals/ObjectAccessor.cpp24
-rw-r--r--src/server/game/Globals/ObjectAccessor.h24
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp18
-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/CalendarHandler.cpp36
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp23
-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.cpp64
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp185
-rw-r--r--src/server/game/Handlers/PetHandler.cpp23
-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.cpp44
-rw-r--r--src/server/game/Maps/Map.h22
-rw-r--r--src/server/game/Maps/MapMgr.cpp2
-rw-r--r--src/server/game/Maps/TransportMgr.cpp42
-rw-r--r--src/server/game/Maps/TransportMgr.h2
-rw-r--r--src/server/game/Miscellaneous/Formulas.cpp9
-rw-r--r--src/server/game/Miscellaneous/Language.h3
-rw-r--r--src/server/game/Movement/MotionMaster.cpp91
-rw-r--r--src/server/game/Movement/MotionMaster.h27
-rw-r--r--src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp1
-rw-r--r--src/server/game/Movement/MovementGenerators/EscortMovementGenerator.cpp10
-rw-r--r--src/server/game/Movement/MovementGenerators/EscortMovementGenerator.h3
-rw-r--r--src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp2
-rw-r--r--src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp15
-rw-r--r--src/server/game/Movement/MovementGenerators/PointMovementGenerator.h19
-rw-r--r--src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp17
-rw-r--r--src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp31
-rw-r--r--src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp77
-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.cpp9
-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/Packets/AllPackets.h1
-rw-r--r--src/server/game/Server/Packets/CalendarPackets.cpp41
-rw-r--r--src/server/game/Server/Packets/CalendarPackets.h73
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp28
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h26
-rw-r--r--src/server/game/Server/Packets/PetPackets.cpp16
-rw-r--r--src/server/game/Server/Packets/PetPackets.h25
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp12
-rw-r--r--src/server/game/Server/WorldSession.cpp6
-rw-r--r--src/server/game/Server/WorldSession.h22
-rw-r--r--src/server/game/Server/WorldSocket.cpp6
-rw-r--r--src/server/game/Server/WorldSocket.h5
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp6
-rw-r--r--src/server/game/Spells/Spell.cpp12
-rw-r--r--src/server/game/Spells/SpellEffects.cpp21
-rw-r--r--src/server/game/Spells/SpellInfo.cpp2
-rw-r--r--src/server/game/Spells/SpellInfoCorrections.cpp12
-rw-r--r--src/server/game/Texts/CreatureTextMgr.cpp91
-rw-r--r--src/server/game/Texts/CreatureTextMgr.h9
-rw-r--r--src/server/game/Time/UpdateTime.cpp2
-rw-r--r--src/server/game/World/WorldConfig.cpp3
-rw-r--r--src/server/game/World/WorldConfig.h3
-rw-r--r--src/server/game/World/WorldState.cpp4
-rw-r--r--src/server/scripts/Commands/cs_arena.cpp18
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp30
-rw-r--r--src/server/scripts/Commands/cs_gm.cpp4
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp83
-rw-r--r--src/server/scripts/Commands/cs_mmaps.cpp35
-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/AlteracValley/alterac_valley.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp15
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp31
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_eviscerator.cpp19
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp25
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp19
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_hedrum.cpp21
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp37
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_okthor.cpp29
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mor_grayhoof.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp18
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp7
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp18
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_tenris_mirkblood.cpp17
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp7
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp311
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp76
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp34
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp23
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp22
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp66
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp25
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp89
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp80
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp5
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp30
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp4
-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.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp5
-rw-r--r--src/server/scripts/EasternKingdoms/zone_duskwood.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp4
-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.cpp160
-rw-r--r--src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp3
-rw-r--r--src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp21
-rw-r--r--src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/zone_undercity.cpp98
-rw-r--r--src/server/scripts/EasternKingdoms/zone_westfall.cpp5
-rw-r--r--src/server/scripts/EasternKingdoms/zone_wetlands.cpp9
-rw-r--r--src/server/scripts/Events/brewfest.cpp16
-rw-r--r--src/server/scripts/Events/hallows_end.cpp34
-rw-r--r--src/server/scripts/Events/love_in_air.cpp2
-rw-r--r--src/server/scripts/Events/winter_veil.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp4
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp4
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp4
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp8
-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/BattleForMountHyjal/instance_hyjal.cpp16
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp31
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp16
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp33
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp22
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp30
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp210
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_lieutenant_drake.cpp8
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp14
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp159
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp56
-rw-r--r--src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp2
-rw-r--r--src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp80
-rw-r--r--src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp6
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp8
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp2
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp6
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp2
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp4
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp6
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp2
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp2
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp8
-rw-r--r--src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp2
-rw-r--r--src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp12
-rw-r--r--src/server/scripts/Kalimdor/kalimdor_script_loader.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_ashenvale.cpp3
-rw-r--r--src/server/scripts/Kalimdor/zone_azshara.cpp361
-rw-r--r--src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp5
-rw-r--r--src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_darkshore.cpp9
-rw-r--r--src/server/scripts/Kalimdor/zone_desolace.cpp16
-rw-r--r--src/server/scripts/Kalimdor/zone_moonglade.cpp3
-rw-r--r--src/server/scripts/Kalimdor/zone_silithus.cpp4
-rw-r--r--src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp5
-rw-r--r--src/server/scripts/Kalimdor/zone_tanaris.cpp3
-rw-r--r--src/server/scripts/Kalimdor/zone_the_barrens.cpp18
-rw-r--r--src/server/scripts/Kalimdor/zone_thousand_needles.cpp10
-rw-r--r--src/server/scripts/Kalimdor/zone_ungoro_crater.cpp3
-rw-r--r--src/server/scripts/Kalimdor/zone_winterspring.cpp13
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h6
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp486
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp10
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp13
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_herald_volazj.cpp111
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp25
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp8
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp24
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp8
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp5
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp16
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp8
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp77
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp121
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp61
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp13
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp15
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp218
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp4
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp2
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp8
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp144
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h3
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp2
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp2
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp4
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp4
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp6
-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.cpp10
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp22
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp28
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp70
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp12
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp4
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp28
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp42
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_eck.cpp23
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp239
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp80
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp2
-rw-r--r--src/server/scripts/Northrend/Gundrak/gundrak.h13
-rw-r--r--src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp39
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp18
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp19
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp58
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp41
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp8
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp12
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp22
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp20
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp34
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp117
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp43
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp84
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp12
-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.cpp16
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp11
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp39
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp5
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp14
-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.cpp19
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp18
-rw-r--r--src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp54
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h5
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp4
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp7
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp6
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp4
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp5
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp11
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp15
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp13
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp9
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp541
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp312
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp264
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp657
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h41
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp229
-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.cpp21
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp88
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp11
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp48
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp68
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp33
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp16
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp107
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp8
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp43
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp92
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp59
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp106
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp34
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp71
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp29
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp57
-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.cpp7
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp5
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp10
-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.cpp9
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp27
-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/boss_ichoron.cpp2
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp4
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp2
-rw-r--r--src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp4
-rw-r--r--src/server/scripts/Northrend/VioletHold/violet_hold.cpp62
-rw-r--r--src/server/scripts/Northrend/zone_borean_tundra.cpp38
-rw-r--r--src/server/scripts/Northrend/zone_crystalsong_forest.cpp24
-rw-r--r--src/server/scripts/Northrend/zone_dalaran.cpp2
-rw-r--r--src/server/scripts/Northrend/zone_dragonblight.cpp44
-rw-r--r--src/server/scripts/Northrend/zone_grizzly_hills.cpp66
-rw-r--r--src/server/scripts/Northrend/zone_howling_fjord.cpp23
-rw-r--r--src/server/scripts/Northrend/zone_icecrown.cpp50
-rw-r--r--src/server/scripts/Northrend/zone_sholazar_basin.cpp15
-rw-r--r--src/server/scripts/Northrend/zone_storm_peaks.cpp51
-rw-r--r--src/server/scripts/Northrend/zone_wintergrasp.cpp2
-rw-r--r--src/server/scripts/Northrend/zone_zuldrak.cpp6
-rw-r--r--src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp2
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp6
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp2
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp2
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_illidan.cpp20
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp6
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp10
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp4
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp8
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp6
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp6
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp42
-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/CoilfangReservoir/underbog/boss_hungarfen.cpp2
-rw-r--r--src/server/scripts/Outland/GruulsLair/boss_gruul.cpp4
-rw-r--r--src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp10
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_porung.cpp4
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp26
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp52
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp100
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp18
-rw-r--r--src/server/scripts/Outland/zone_blades_edge_mountains.cpp34
-rw-r--r--src/server/scripts/Outland/zone_hellfire_peninsula.cpp12
-rw-r--r--src/server/scripts/Outland/zone_nagrand.cpp14
-rw-r--r--src/server/scripts/Outland/zone_netherstorm.cpp16
-rw-r--r--src/server/scripts/Outland/zone_shadowmoon_valley.cpp32
-rw-r--r--src/server/scripts/Outland/zone_shattrath_city.cpp5
-rw-r--r--src/server/scripts/Outland/zone_terokkar_forest.cpp15
-rw-r--r--src/server/scripts/Pet/pet_generic.cpp22
-rw-r--r--src/server/scripts/Pet/pet_mage.cpp17
-rw-r--r--src/server/scripts/Pet/pet_shaman.cpp14
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp160
-rw-r--r--src/server/scripts/Spells/spell_hunter.cpp2
-rw-r--r--src/server/scripts/Spells/spell_item.cpp100
-rw-r--r--src/server/scripts/Spells/spell_quest.cpp24
-rw-r--r--src/server/scripts/World/boss_emerald_dragons.cpp32
-rw-r--r--src/server/scripts/World/go_scripts.cpp58
-rw-r--r--src/server/scripts/World/npc_stave_of_ancients.cpp120
-rw-r--r--src/server/scripts/World/npcs_special.cpp7
472 files changed, 6745 insertions, 7535 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/apps/worldserver/worldserver.conf.dist b/src/server/apps/worldserver/worldserver.conf.dist
index 89863ac4f9..07945f07f3 100644
--- a/src/server/apps/worldserver/worldserver.conf.dist
+++ b/src/server/apps/worldserver/worldserver.conf.dist
@@ -2351,6 +2351,18 @@ Rate.Reputation.LowLevel.Quest = 1
Rate.Reputation.RecruitAFriendBonus = 0.1
#
+# Rate.Reputation.Gain.WSG
+# Rate.Reputation.Gain.AB
+# Rate.Reputation.Gain.AV
+# Description: Reputation bonus rate for WSG, AB and AV battlegrounds.
+# This is applied IN ADDITION to the global Rate.Reputation.Gain.
+# Default: 1
+
+Rate.Reputation.Gain.WSG = 1
+Rate.Reputation.Gain.AB = 1
+Rate.Reputation.Gain.AV = 1
+
+#
###################################################################################################
###################################################################################################
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/database/Updater/DBUpdater.cpp b/src/server/database/Updater/DBUpdater.cpp
index 442b48bcb8..d32fddd8c1 100644
--- a/src/server/database/Updater/DBUpdater.cpp
+++ b/src/server/database/Updater/DBUpdater.cpp
@@ -496,17 +496,13 @@ void DBUpdater<T>::ApplyFile(DatabaseWorkerPool<T>& pool, std::string const& hos
if (ssl == "ssl")
args.emplace_back("--ssl-mode=REQUIRED");
- // Execute sql file
- args.emplace_back("-e");
- args.emplace_back(Acore::StringFormat("BEGIN; SOURCE {}; COMMIT;", path.generic_string()));
-
// Database
if (!database.empty())
args.emplace_back(database);
// Invokes a mysql process which doesn't leak credentials to logs
int const ret = Acore::StartProcess(DBUpdaterUtil::GetCorrectedMySQLExecutable(), args,
- "sql.updates", "", true);
+ "sql.updates", path.generic_string(), true);
if (ret != EXIT_SUCCESS)
{
diff --git a/src/server/game/AI/CoreAI/CombatAI.cpp b/src/server/game/AI/CoreAI/CombatAI.cpp
index 13609a9b56..0e932e56df 100644
--- a/src/server/game/AI/CoreAI/CombatAI.cpp
+++ b/src/server/game/AI/CoreAI/CombatAI.cpp
@@ -80,7 +80,7 @@ void CombatAI::JustEngagedWith(Unit* who)
if (AISpellInfo[*i].condition == AICOND_AGGRO)
me->CastSpell(who, *i, false);
else if (AISpellInfo[*i].condition == AICOND_COMBAT)
- events.ScheduleEvent(*i, AISpellInfo[*i].cooldown + rand() % AISpellInfo[*i].cooldown);
+ events.ScheduleEvent(*i, Milliseconds(AISpellInfo[*i].cooldown + rand() % AISpellInfo[*i].cooldown));
}
}
@@ -97,7 +97,7 @@ void CombatAI::UpdateAI(uint32 diff)
if (uint32 spellId = events.ExecuteEvent())
{
DoCast(spellId);
- events.ScheduleEvent(spellId, AISpellInfo[spellId].cooldown + rand() % AISpellInfo[spellId].cooldown);
+ events.ScheduleEvent(spellId, Milliseconds(AISpellInfo[spellId].cooldown + rand() % AISpellInfo[spellId].cooldown));
}
else
DoMeleeAttackIfReady();
@@ -143,7 +143,7 @@ void CasterAI::JustEngagedWith(Unit* who)
DoCast(spells[spell]);
cooldown += me->GetCurrentSpellCastTime(*itr);
}
- events.ScheduleEvent(*itr, cooldown);
+ events.ScheduleEvent(*itr, Milliseconds(cooldown));
}
}
}
@@ -168,7 +168,7 @@ void CasterAI::UpdateAI(uint32 diff)
{
DoCast(spellId);
uint32 casttime = me->GetCurrentSpellCastTime(spellId);
- events.ScheduleEvent(spellId, (casttime ? casttime : 500) + GetAISpellInfo(spellId)->realCooldown);
+ events.ScheduleEvent(spellId, Milliseconds((casttime ? casttime : 500) + GetAISpellInfo(spellId)->realCooldown));
}
}
diff --git a/src/server/game/AI/CoreAI/GameObjectAI.h b/src/server/game/AI/CoreAI/GameObjectAI.h
index b366d3c2bd..80e034cf46 100644
--- a/src/server/game/AI/CoreAI/GameObjectAI.h
+++ b/src/server/game/AI/CoreAI/GameObjectAI.h
@@ -46,7 +46,7 @@ public:
// Pass parameters between AI
virtual void DoAction(int32 /*param = 0 */) {}
- virtual void SetGUID(ObjectGuid /*guid*/, int32 /*id = 0 */) {}
+ virtual void SetGUID(ObjectGuid const& /*guid*/, int32 /*id = 0 */) {}
virtual ObjectGuid GetGUID(int32 /*id = 0 */) const { return ObjectGuid::Empty; }
static int32 Permissible(GameObject const* go);
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/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h
index 17533d4e4c..71cfe8d5b0 100644
--- a/src/server/game/AI/CoreAI/UnitAI.h
+++ b/src/server/game/AI/CoreAI/UnitAI.h
@@ -217,7 +217,7 @@ public:
virtual void DoAction(int32 /*param*/) {}
virtual uint32 GetData(uint32 /*id = 0*/) const { return 0; }
virtual void SetData(uint32 /*id*/, uint32 /*value*/) {}
- virtual void SetGUID(ObjectGuid /*guid*/, int32 /*id*/ = 0) {}
+ virtual void SetGUID(ObjectGuid const& /*guid*/, int32 /*id*/ = 0) {}
virtual ObjectGuid GetGUID(int32 /*id*/ = 0) const { return ObjectGuid::Empty; }
// Select the best target (in <targetType> order) from the threat list that fulfill the following:
diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp
index 12698c35dc..dce728c142 100644
--- a/src/server/game/AI/CreatureAI.cpp
+++ b/src/server/game/AI/CreatureAI.cpp
@@ -50,9 +50,9 @@ AISpellInfoType* GetAISpellInfo(uint32 i) { return &CreatureAI::AISpellInfo[i];
* @param WorldObject target The target of the speech, in case it has elements such as $n, where the target's name will be referrenced.
* @param Milliseconds delay Delay until the creature says the text line. Creatures will talk immediately by default.
*/
-void CreatureAI::Talk(uint8 id, WorldObject const* target /*= nullptr*/, Milliseconds delay /*= 0s*/)
+void CreatureAI::Talk(uint8 id, WorldObject const* target /*= nullptr*/, Milliseconds delay /*= 0ms*/)
{
- if (delay > Seconds::zero())
+ if (delay > 0ms)
{
ObjectGuid targetGuid;
@@ -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/CreatureAI.h b/src/server/game/AI/CreatureAI.h
index cadd3b9f4c..72686bf6ab 100644
--- a/src/server/game/AI/CreatureAI.h
+++ b/src/server/game/AI/CreatureAI.h
@@ -94,7 +94,7 @@ public:
EVADE_REASON_OTHER
};
- void Talk(uint8 id, WorldObject const* whisperTarget = nullptr, Milliseconds delay = 0s);
+ void Talk(uint8 id, WorldObject const* whisperTarget = nullptr, Milliseconds delay = 0ms);
void Talk(uint8 id, Milliseconds delay) { Talk(id, nullptr, delay); }
WorldObject* GetSummoner() const;
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
index 30373f2f65..ca354f0938 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
@@ -68,7 +68,7 @@ void SummonList::DespawnEntry(uint32 entry)
}
}
-void SummonList::DespawnAll(uint32 delay /*= 0*/)
+void SummonList::DespawnAll(Milliseconds delay /*= 0ms*/)
{
while (!storage_.empty())
{
@@ -325,13 +325,13 @@ void ScriptedAI::ScheduleTimedEvent(Milliseconds timerMin, Milliseconds timerMax
return;
}
- scheduler.Schedule(timerMin == 0s ? timerMax : timerMin, timerMax, [exec, repeatMin, repeatMax, uniqueId](TaskContext context)
+ scheduler.Schedule(timerMin == 0ms ? timerMax : timerMin, timerMax, [exec, repeatMin, repeatMax, uniqueId](TaskContext context)
{
exec();
if (!uniqueId)
{
- repeatMax > 0s ? context.Repeat(repeatMin, repeatMax) : context.Repeat(repeatMin);
+ repeatMax > 0ms ? context.Repeat(repeatMin, repeatMax) : context.Repeat(repeatMin);
}
});
@@ -566,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;
@@ -654,7 +654,7 @@ void BossAI::_JustEngagedWith()
ScheduleTasks();
if (callForHelpRange)
{
- ScheduleTimedEvent(0s, [&]
+ ScheduleTimedEvent(0ms, [&]
{
me->CallForHelp(callForHelpRange);
}, 2s);
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
index f3d9e11a51..c5c71af9ff 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
@@ -88,7 +88,7 @@ public:
void Summon(Creature const* summon) { storage_.push_back(summon->GetGUID()); }
void Despawn(Creature const* summon) { storage_.remove(summon->GetGUID()); }
void DespawnEntry(uint32 entry);
- void DespawnAll(uint32 delay = 0);
+ void DespawnAll(Milliseconds delay = 0ms);
bool IsAnyCreatureAlive() const;
bool IsAnyCreatureWithEntryAlive(uint32 entry) const;
bool IsAnyCreatureInCombat() const;
@@ -355,11 +355,11 @@ struct ScriptedAI : public CreatureAI
void ClearUniqueTimedEventsDone() { _uniqueTimedEvents.clear(); }
// Schedules a timed event using task scheduler.
- void ScheduleTimedEvent(Milliseconds timerMin, Milliseconds timerMax, std::function<void()> exec, Milliseconds repeatMin, Milliseconds repeatMax = 0s, uint32 uniqueId = 0);
- void ScheduleTimedEvent(Milliseconds timerMax, std::function<void()> exec, Milliseconds repeatMin, Milliseconds repeatMax = 0s, uint32 uniqueId = 0) { ScheduleTimedEvent(0s, timerMax, exec, repeatMin, repeatMax, uniqueId); };
+ void ScheduleTimedEvent(Milliseconds timerMin, Milliseconds timerMax, std::function<void()> exec, Milliseconds repeatMin, Milliseconds repeatMax = 0ms, uint32 uniqueId = 0);
+ void ScheduleTimedEvent(Milliseconds timerMax, std::function<void()> exec, Milliseconds repeatMin, Milliseconds repeatMax = 0ms, uint32 uniqueId = 0) { ScheduleTimedEvent(0ms, timerMax, exec, repeatMin, repeatMax, uniqueId); };
// Schedules a timed event using task scheduler that never repeats. Requires an unique non-zero ID.
- void ScheduleUniqueTimedEvent(Milliseconds timer, std::function<void()> exec, uint32 uniqueId) { ScheduleTimedEvent(0s, timer, exec, 0s, 0s, uniqueId); };
+ void ScheduleUniqueTimedEvent(Milliseconds timer, std::function<void()> exec, uint32 uniqueId) { ScheduleTimedEvent(0ms, timer, exec, 0ms, 0ms, uniqueId); };
bool HealthBelowPct(uint32 pct) const { return me->HealthBelowPct(pct); }
bool HealthAbovePct(uint32 pct) const { return me->HealthAbovePct(pct); }
@@ -463,7 +463,7 @@ enum HealthCheckStatus
struct HealthCheckEventData
{
- HealthCheckEventData(uint8 healthPct, std::function<void()> exec, uint8 status = HEALTH_CHECK_SCHEDULED, bool allowedWhileCasting = true, Milliseconds Delay = 0s) : _healthPct(healthPct), _exec(exec), _status(status), _allowedWhileCasting(allowedWhileCasting), _delay(Delay) { };
+ HealthCheckEventData(uint8 healthPct, std::function<void()> exec, uint8 status = HEALTH_CHECK_SCHEDULED, bool allowedWhileCasting = true, Milliseconds Delay = 0ms) : _healthPct(healthPct), _exec(exec), _status(status), _allowedWhileCasting(allowedWhileCasting), _delay(Delay) { };
uint8 _healthPct;
std::function<void()> _exec;
diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
index ddabc130fb..85fbf8a906 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
@@ -33,7 +33,6 @@ npc_escortAI::npc_escortAI(Creature* creature) : ScriptedAI(creature),
MaxPlayerDistance(DEFAULT_MAX_PLAYER_DISTANCE),
m_pQuestForEscort(nullptr),
m_bIsActiveAttacker(true),
- m_bIsRunning(false),
m_bCanInstantRespawn(false),
m_bCanReturnToStart(false),
DespawnAtEnd(true),
@@ -186,9 +185,8 @@ void npc_escortAI::JustRespawned()
void npc_escortAI::ReturnToLastPoint()
{
float x, y, z, o;
- me->SetWalk(false);
me->GetHomePosition(x, y, z, o);
- me->GetMotionMaster()->MovePoint(POINT_LAST_POINT, x, y, z);
+ me->GetMotionMaster()->MovePoint(POINT_LAST_POINT, x, y, z, FORCED_MOVEMENT_RUN);
}
void npc_escortAI::EnterEvadeMode(EvadeReason /*why*/)
@@ -220,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;
}
@@ -329,7 +327,6 @@ void npc_escortAI::MovementInform(uint32 moveType, uint32 pointId)
{
LOG_DEBUG("scripts.ai", "EscortAI has returned to original position before combat");
- me->SetWalk(!m_bIsRunning);
RemoveEscortState(STATE_ESCORT_RETURNING);
if (!m_uiWPWaitTimer)
@@ -418,28 +415,8 @@ void npc_escortAI::FillPointMovementListForCreature()
}
}
-void npc_escortAI::SetRun(bool on)
-{
- if (on)
- {
- if (!m_bIsRunning)
- me->SetWalk(false);
- else
- LOG_DEBUG("scripts.ai", "EscortAI attempt to set run mode, but is already running.");
- }
- else
- {
- if (m_bIsRunning)
- me->SetWalk(true);
- else
- LOG_DEBUG("scripts.ai", "EscortAI attempt to set walk mode, but is already walking.");
- }
-
- m_bIsRunning = on;
-}
-
//TODO: get rid of this many variables passed in function.
-void npc_escortAI::Start(bool isActiveAttacker /* = true*/, bool run /* = false */, ObjectGuid playerGUID /* = ObjectGuid::Empty */, Quest const* quest /* = nullptr */, bool instantRespawn /* = false */, bool canLoopPath /* = false */, bool resetWaypoints /* = true */)
+void npc_escortAI::Start(bool isActiveAttacker /* = true*/, ObjectGuid playerGUID /* = ObjectGuid::Empty */, Quest const* quest /* = nullptr */, bool instantRespawn /* = false */, bool canLoopPath /* = false */, bool resetWaypoints /* = true */)
{
if (me->GetVictim())
{
@@ -469,7 +446,6 @@ void npc_escortAI::Start(bool isActiveAttacker /* = true*/, bool run /* = false
//set variables
m_bIsActiveAttacker = isActiveAttacker;
- m_bIsRunning = run;
m_uiPlayerGUID = playerGUID;
m_pQuestForEscort = quest;
@@ -495,17 +471,11 @@ void npc_escortAI::Start(bool isActiveAttacker /* = true*/, bool run /* = false
me->SetImmuneToNPC(false);
}
- LOG_DEBUG("scripts.ai", "EscortAI started with {} waypoints. ActiveAttacker = {}, Run = {}, PlayerGUID = {}",
- uint64(WaypointList.size()), m_bIsActiveAttacker, m_bIsRunning, m_uiPlayerGUID.ToString());
+ LOG_DEBUG("scripts.ai", "EscortAI started with {} waypoints. ActiveAttacker = {}, PlayerGUID = {}",
+ uint64(WaypointList.size()), m_bIsActiveAttacker, m_uiPlayerGUID.ToString());
CurrentWP = WaypointList.begin();
- //Set initial speed
- if (m_bIsRunning)
- me->SetWalk(false);
- else
- me->SetWalk(true);
-
AddEscortState(STATE_ESCORT_ESCORTING);
if (me->GetMotionMaster()->GetMotionSlotType(MOTION_SLOT_ACTIVE) == ESCORT_MOTION_TYPE)
me->GetMotionMaster()->MovementExpired();
diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h
index 1332837ff9..32b51126d2 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h
+++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h
@@ -90,9 +90,8 @@ public:
virtual void WaypointReached(uint32 pointId) = 0;
virtual void WaypointStart(uint32 /*pointId*/) {}
- void Start(bool isActiveAttacker = true, bool run = false, ObjectGuid playerGUID = ObjectGuid::Empty, Quest const* quest = nullptr, bool instantRespawn = false, bool canLoopPath = false, bool resetWaypoints = true);
+ void Start(bool isActiveAttacker = true, ObjectGuid playerGUID = ObjectGuid::Empty, Quest const* quest = nullptr, bool instantRespawn = false, bool canLoopPath = false, bool resetWaypoints = true);
- void SetRun(bool on = true);
void SetEscortPaused(bool on);
bool HasEscortState(uint32 escortState) { return (m_uiEscortState & escortState); }
@@ -130,7 +129,6 @@ private:
std::list<Escort_Waypoint>::iterator CurrentWP;
bool m_bIsActiveAttacker; //obsolete, determined by faction.
- bool m_bIsRunning; //all creatures are walking by default (has flag MOVEMENTFLAG_WALK)
bool m_bCanInstantRespawn; //if creature should respawn instantly after escort over (if not, database respawntime are used)
bool m_bCanReturnToStart; //if creature can walk same path (loop) without despawn. Not for regular escort quests.
bool DespawnAtEnd;
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/ScriptedAI/ScriptedGossip.cpp b/src/server/game/AI/ScriptedAI/ScriptedGossip.cpp
index 120a75582d..12d5a63685 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedGossip.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedGossip.cpp
@@ -42,7 +42,7 @@ void AddGossipItemFor(Player* player, uint32 gossipMenuID, uint32 gossipMenuItem
player->PlayerTalkClass->GetGossipMenu().AddMenuItem(gossipMenuID, gossipMenuItemID, sender, action, boxMoney);
}
-void SendGossipMenuFor(Player* player, uint32 npcTextID, ObjectGuid const guid)
+void SendGossipMenuFor(Player* player, uint32 npcTextID, ObjectGuid const& guid)
{
player->PlayerTalkClass->SendGossipMenu(npcTextID, guid);
}
diff --git a/src/server/game/AI/ScriptedAI/ScriptedGossip.h b/src/server/game/AI/ScriptedAI/ScriptedGossip.h
index eee8411480..b88aea5c4c 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedGossip.h
+++ b/src/server/game/AI/ScriptedAI/ScriptedGossip.h
@@ -94,7 +94,7 @@ void AddGossipItemFor(Player* player, uint32 icon, std::string const& text, uint
void AddGossipItemFor(Player* player, uint32 gossipMenuID, uint32 gossipMenuItemID, uint32 sender, uint32 action, uint32 boxMoney = 0);
// Send menu text
-void SendGossipMenuFor(Player* player, uint32 npcTextID, ObjectGuid const guid);
+void SendGossipMenuFor(Player* player, uint32 npcTextID, ObjectGuid const& guid);
void SendGossipMenuFor(Player* player, uint32 npcTextID, Creature const* creature);
// Close menu
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp
index cb4067e0c8..198c7adb43 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -43,15 +43,14 @@ SmartAI::SmartAI(Creature* c) : CreatureAI(c)
mCanRepeatPath = false;
- // spawn in run mode
- // Xinef: spawn in run mode and set mRun to run... this overrides SetWalk EVERYWHERE
- mRun = true;
mEvadeDisabled = false;
mCanAutoAttack = true;
mForcedPaused = false;
+ mForcedMovement = FORCED_MOVEMENT_NONE;
+
mEscortQuestID = 0;
mDespawnTime = 0;
@@ -109,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;
}
@@ -139,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
{
@@ -153,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
@@ -190,25 +192,25 @@ void SmartAI::GenerateWayPointArray(Movement::PointsArray* points)
}
}
-void SmartAI::StartPath(bool run, 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;
- SetRun(run);
+ mForcedMovement = forcedMovement;
if (invoker && invoker->IsPlayer())
{
@@ -219,21 +221,38 @@ void SmartAI::StartPath(bool run, uint32 path, bool repeat, Unit* invoker)
Movement::PointsArray pathPoints;
GenerateWayPointArray(&pathPoints);
- me->GetMotionMaster()->MoveSplinePath(&pathPoints);
- 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);
@@ -256,7 +275,6 @@ void SmartAI::PausePath(uint32 delay, bool forced)
if (forced && !mWPReached)
{
mForcedPaused = forced;
- SetRun(mRun);
if (me->GetMotionMaster()->GetMotionSlotType(MOTION_SLOT_ACTIVE) == ESCORT_MOTION_TYPE)
me->GetMotionMaster()->MovementExpired();
@@ -264,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)
@@ -287,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);
}
@@ -356,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(mRun, GetScript()->GetPathId(), true);
+ StartPath(mForcedMovement, GetScript()->GetPathId(), true);
}
else
GetScript()->SetPathId(0);
@@ -373,14 +391,12 @@ void SmartAI::EndPath(bool fail)
void SmartAI::ResumePath()
{
- SetRun(mRun);
-
if (mLastWP)
{
Movement::PointsArray pathPoints;
GenerateWayPointArray(&pathPoints);
- me->GetMotionMaster()->MoveSplinePath(&pathPoints);
+ me->GetMotionMaster()->MoveSplinePath(&pathPoints, mForcedMovement);
}
}
@@ -389,10 +405,9 @@ void SmartAI::ReturnToLastOOCPos()
if (!IsAIControlled())
return;
- me->SetWalk(false);
float x, y, z, o;
me->GetHomePosition(x, y, z, o);
- me->GetMotionMaster()->MovePoint(SMART_ESCORT_LAST_OOC_POINT, x, y, z);
+ me->GetMotionMaster()->MovePoint(SMART_ESCORT_LAST_OOC_POINT, x, y, z, FORCED_MOVEMENT_RUN);
}
void SmartAI::UpdatePath(const uint32 diff)
@@ -410,7 +425,7 @@ void SmartAI::UpdatePath(const uint32 diff)
// Xinef: allow to properly hook out of range despawn action, which in most cases should perform the same operation as dying
GetScript()->ProcessEventsFor(SMART_EVENT_DEATH, me);
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
return;
}
mEscortInvokerCheckTimer = 1000;
@@ -425,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
{
@@ -469,7 +484,6 @@ void SmartAI::UpdatePath(const uint32 diff)
EndPath();
else if (GetNextWayPoint())
{
- SetRun(mRun);
// xinef: if we have reached waypoint, and there is no working spline movement it means our splitted array has ended, make new one
if (me->movespline->Finalized())
ResumePath();
@@ -605,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)
{
@@ -629,7 +643,6 @@ void SmartAI::MovepointReached(uint32 id)
EndPath();
else if (GetNextWayPoint())
{
- SetRun(mRun);
// xinef: if we have reached waypoint, and there is no working spline movement it means our splitted array has ended, make new one
if (me->movespline->Finalized())
ResumePath();
@@ -643,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))
@@ -675,7 +688,6 @@ void SmartAI::EnterEvadeMode(EvadeReason /*why*/)
GetScript()->ProcessEventsFor(SMART_EVENT_EVADE); //must be after aura clear so we can cast spells from db
- SetRun(mRun);
if (HasEscortState(SMART_ESCORT_ESCORTING))
{
AddEscortState(SMART_ESCORT_RETURNING);
@@ -794,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;
@@ -850,7 +862,6 @@ void SmartAI::AttackStart(Unit* who)
{
if (!me->HasUnitState(UNIT_STATE_NO_COMBAT_MOVEMENT))
{
- SetRun(mRun);
MovementGeneratorType type = me->GetMotionMaster()->GetMotionSlotType(MOTION_SLOT_ACTIVE);
if (type == ESCORT_MOTION_TYPE || type == POINT_MOTION_TYPE)
{
@@ -952,9 +963,7 @@ void SmartAI::OnCharmed(bool /* apply */)
if (!charmed && !me->IsInEvadeMode())
{
if (mCanRepeatPath)
- StartPath(mRun, GetScript()->GetPathId(), true);
- else
- me->SetWalk(!mRun);
+ StartPath(mForcedMovement, GetScript()->GetPathId(), true);
if (Unit* charmer = me->GetCharmer())
AttackStart(charmer);
@@ -993,7 +1002,7 @@ void SmartAI::SetData(uint32 id, uint32 value, WorldObject* invoker)
GetScript()->ProcessEventsFor(SMART_EVENT_DATA_SET, unit, id, value, false, nullptr, gob);
}
-void SmartAI::SetGUID(ObjectGuid /*guid*/, int32 /*id*/)
+void SmartAI::SetGUID(ObjectGuid const& /*guid*/, int32 /*id*/)
{
}
@@ -1002,12 +1011,6 @@ ObjectGuid SmartAI::GetGUID(int32 /*id*/) const
return ObjectGuid::Empty;
}
-void SmartAI::SetRun(bool run)
-{
- me->SetWalk(!run);
- mRun = run;
-}
-
void SmartAI::SetFly(bool fly)
{
// xinef: set proper flag!
@@ -1108,7 +1111,6 @@ void SmartAI::SetFollow(Unit* target, float dist, float angle, uint32 credit, ui
mFollowArrivedEntry = end;
mFollowArrivedAlive = !aliveState; // negate - 0 is alive
mFollowCreditType = creditType;
- SetRun(mRun);
me->GetMotionMaster()->MoveFollow(target, mFollowDist, mFollowAngle);
}
@@ -1167,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 5bd9fcd8b3..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(bool run = false, 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; }
@@ -164,7 +164,7 @@ public:
void SetData(uint32 id, uint32 value, WorldObject* invoker);
// Used in scripts to share variables
- void SetGUID(ObjectGuid guid, int32 id = 0) override;
+ void SetGUID(ObjectGuid const& guid, int32 id = 0) override;
// Used in scripts to share variables
ObjectGuid GetGUID(int32 id = 0) const override;
@@ -175,9 +175,6 @@ public:
// Called at movepoint reached
void MovepointReached(uint32 id);
- // Makes the creature run/walk
- void SetRun(bool run = true);
-
void SetFly(bool fly = true);
void SetSwim(bool swim = true);
@@ -230,21 +227,21 @@ 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;
- bool mRun;
bool mEvadeDisabled;
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 1a64641e95..0991290b2b 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -1683,10 +1683,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
if (IsCreature(target))
{
- if (IsSmart(target->ToCreature()))
- CAST_AI(SmartAI, target->ToCreature()->AI())->SetRun(e.action.setRun.run);
- else
- target->ToCreature()->SetWalk(e.action.setRun.run ? false : true); // Xinef: reversed
+ target->ToCreature()->SetWalk(e.action.setRun.run ? false : true);
}
}
@@ -1726,12 +1723,12 @@ 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;
- bool run = e.action.wpStart.run != 0;
+ ForcedMovement forcedMovement = static_cast<ForcedMovement>(e.action.wpStart.forcedMovement);
uint32 entry = e.action.wpStart.pathID;
bool repeat = e.action.wpStart.repeat != 0;
@@ -1745,7 +1742,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
}
me->SetReactState((ReactStates)e.action.wpStart.reactState);
- CAST_AI(SmartAI, me->AI())->StartPath(run, entry, repeat, unit);
+ CAST_AI(SmartAI, me->AI())->StartPath(forcedMovement, entry, repeat, unit);
uint32 quest = e.action.wpStart.quest;
uint32 DespawnTime = e.action.wpStart.despawnTime;
@@ -1753,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;
@@ -1773,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;
@@ -1854,8 +1851,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (TransportBase* trans = me->GetDirectTransport())
trans->CalculatePassengerPosition(dest.x, dest.y, dest.z);
- me->GetMotionMaster()->MovePoint(e.action.moveToPos.pointId, dest.x, dest.y, dest.z, true, isForced,
- isControlled ? MOTION_SLOT_CONTROLLED : MOTION_SLOT_ACTIVE, e.target.o);
+ me->GetMotionMaster()->MovePoint(e.action.moveToPos.pointId, dest.x, dest.y, dest.z, FORCED_MOVEMENT_NONE,
+ 0.f, e.target.o, true, isForced, isControlled ? MOTION_SLOT_CONTROLLED : MOTION_SLOT_ACTIVE);
break;
}
@@ -1871,9 +1868,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
randomPoint.m_positionX,
randomPoint.m_positionY,
randomPoint.m_positionZ,
- true,
- isForced,
- isControlled ? MOTION_SLOT_CONTROLLED : MOTION_SLOT_ACTIVE
+ FORCED_MOVEMENT_NONE,
+ 0.f, 0.f, true, isForced, isControlled ? MOTION_SLOT_CONTROLLED : MOTION_SLOT_ACTIVE
);
}
@@ -1897,7 +1893,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
else if (e.action.moveToPos.ContactDistance)
target->GetNearPoint(me, x, y, z, e.action.moveToPos.ContactDistance, 0, target->GetAngle(me));
- me->GetMotionMaster()->MovePoint(e.action.moveToPos.pointId, x + e.target.x, y + e.target.y, z + e.target.z, true, isForced, isControlled ? MOTION_SLOT_CONTROLLED : MOTION_SLOT_ACTIVE);
+ me->GetMotionMaster()->MovePoint(e.action.moveToPos.pointId, x + e.target.x, y + e.target.y, z + e.target.z, FORCED_MOVEMENT_NONE,
+ 0.f, 0.f, true, isForced, isControlled ? MOTION_SLOT_CONTROLLED : MOTION_SLOT_ACTIVE);
break;
}
@@ -1914,7 +1911,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
SAIBool isForced = !e.action.moveToPosTarget.disableForceDestination;
Creature* ctarget = target->ToCreature();
- ctarget->GetMotionMaster()->MovePoint(e.action.moveToPosTarget.pointId, e.target.x, e.target.y, e.target.z, true, isForced, isControlled ? MOTION_SLOT_CONTROLLED : MOTION_SLOT_ACTIVE);
+ ctarget->GetMotionMaster()->MovePoint(e.action.moveToPosTarget.pointId, e.target.x, e.target.y, e.target.z, FORCED_MOVEMENT_NONE,
+ 0.f, 0.f, true, isForced, isControlled ? MOTION_SLOT_CONTROLLED : MOTION_SLOT_ACTIVE);
}
}
@@ -2521,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;
}
}
}
@@ -2543,9 +2539,9 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (closestWpId)
{
bool repeat = e.action.startClosestWaypoint.repeat;
- bool run = e.action.startClosestWaypoint.run;
+ ForcedMovement forcedMovement = static_cast<ForcedMovement>(e.action.startClosestWaypoint.forcedMovement);
- CAST_AI(SmartAI, creature->AI())->StartPath(repeat, closestWpId, run);
+ CAST_AI(SmartAI, creature->AI())->StartPath(forcedMovement, closestWpId, repeat);
}
}
}
@@ -3223,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)
{
@@ -3232,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);
}
}
}
@@ -3249,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);
}
}
}
@@ -4400,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;
@@ -4809,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 6db3e4cb2d..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;
}
}
@@ -555,6 +557,7 @@ bool SmartAIMgr::IsTargetValid(SmartScriptHolder const& e)
case SMART_TARGET_RANDOM_POINT:
case SMART_TARGET_ROLE_SELECTION:
case SMART_TARGET_LOOT_RECIPIENTS:
+ case SMART_TARGET_VEHICLE_PASSENGER:
case SMART_EVENT_SUMMONED_UNIT_DIES:
case SMART_EVENT_SUMMONED_UNIT_EVADE:
case SMART_TARGET_PLAYER_RANGE:
@@ -624,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;
@@ -640,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;
@@ -676,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());
@@ -764,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);
@@ -776,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);
@@ -866,6 +869,7 @@ bool SmartAIMgr::CheckUnusedActionParams(SmartScriptHolder const& e)
case SMART_ACTION_ZONE_UNDER_ATTACK: return NO_PARAMS;
case SMART_ACTION_LOAD_GRID: return NO_PARAMS;
case SMART_ACTION_MUSIC: return sizeof(SmartAction::music);
+ case SMART_ACTION_DO_ACTION: return sizeof(SmartAction::doAction);
case SMART_ACTION_SET_GUID: return sizeof(SmartAction::setGuid);
case SMART_ACTION_SCRIPTED_SPAWN: return sizeof(SmartAction::scriptSpawn);
case SMART_ACTION_SET_SCALE: return sizeof(SmartAction::setScale);
@@ -873,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);
@@ -1414,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());
@@ -1562,11 +1566,11 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
return false;
}
- if (e.action.startClosestWaypoint.repeat > 1 || e.action.startClosestWaypoint.run > 1)
+ if (e.action.startClosestWaypoint.repeat > 1 || e.action.startClosestWaypoint.forcedMovement >= FORCED_MOVEMENT_MAX)
{
- LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} has invalid run ({}) or repeat ({}) parameter, must be 0 or 1.",
+ LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} has invalid forcedMovement ({}) or repeat ({}) parameter, must be 0 or 1.",
e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(),
- e.action.startClosestWaypoint.repeat, e.action.startClosestWaypoint.run);
+ e.action.startClosestWaypoint.repeat, e.action.startClosestWaypoint.forcedMovement);
return false;
}
break;
@@ -1719,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))
{
@@ -1743,8 +1747,13 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
return false;
}
- return IsSAIBoolValid(e, e.action.wpStart.run) &&
- IsSAIBoolValid(e, e.action.wpStart.repeat);
+ if (e.action.wpStart.forcedMovement >= FORCED_MOVEMENT_MAX)
+ {
+ LOG_ERROR("sql.sql", "SmartAIMgr: Creature {} Event {} Action {} uses invalid forcedMovement {}, skipped.", e.entryOrGuid, e.event_id, e.GetActionType(), e.action.wpStart.forcedMovement);
+ return false;
+ }
+
+ return IsSAIBoolValid(e, e.action.wpStart.repeat);
}
case SMART_ACTION_CREATE_TIMED_EVENT:
{
@@ -1933,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:
@@ -1943,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:
@@ -2013,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 47b0d47961..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
@@ -1041,7 +1023,7 @@ struct SmartAction
struct
{
- SAIBool run;
+ uint32 forcedMovement;
uint32 pathID;
SAIBool repeat;
uint32 quest;
@@ -1295,7 +1277,7 @@ struct SmartAction
uint32 pathId1;
uint32 pathId2;
uint32 repeat;
- uint32 run;
+ uint32 forcedMovement;
} startClosestWaypoint;
struct
@@ -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 f74aebff2f..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);
}
// ----------------------
@@ -855,7 +855,7 @@ GameObject* Battlefield::SpawnGameObject(uint32 entry, float x, float y, float z
return go;
}
-Creature* Battlefield::GetCreature(ObjectGuid const guid)
+Creature* Battlefield::GetCreature(ObjectGuid const& guid)
{
if (!m_Map)
return nullptr;
@@ -863,7 +863,7 @@ Creature* Battlefield::GetCreature(ObjectGuid const guid)
return m_Map->GetCreature(guid);
}
-GameObject* Battlefield::GetGameObject(ObjectGuid const guid)
+GameObject* Battlefield::GetGameObject(ObjectGuid const& guid)
{
if (!m_Map)
return nullptr;
diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h
index ab00697c33..c4f94f0714 100644
--- a/src/server/game/Battlefield/Battlefield.h
+++ b/src/server/game/Battlefield/Battlefield.h
@@ -146,6 +146,7 @@ class BfGraveyard
{
public:
BfGraveyard(Battlefield* Bf);
+ virtual ~BfGraveyard() = default;
// Method to changing who controls the graveyard
void GiveControlTo(TeamId team);
@@ -302,8 +303,8 @@ public:
Creature* SpawnCreature(uint32 entry, Position pos, TeamId teamId);
GameObject* SpawnGameObject(uint32 entry, float x, float y, float z, float o);
- Creature* GetCreature(ObjectGuid const guid);
- GameObject* GetGameObject(ObjectGuid const guid);
+ Creature* GetCreature(ObjectGuid const& guid);
+ GameObject* GetGameObject(ObjectGuid const& guid);
// Script-methods
diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp
index c0a4f55362..89eef49ae5 100644
--- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp
+++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp
@@ -415,7 +415,7 @@ void BattlefieldWG::OnBattleEnd(bool endByTimer)
{
for (GuidUnorderedSet::const_iterator itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr)
if (Creature* creature = GetCreature(*itr))
- creature->DespawnOrUnsummon(1);
+ creature->DespawnOrUnsummon(1ms);
m_vehicles[team].clear();
}
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 81832437b8..a70a21b59f 100644
--- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp
@@ -366,7 +366,7 @@ void BattlegroundQueue::RemovePlayer(ObjectGuid guid, bool decreaseInvitedCount)
void BattlegroundQueue::AddEvent(BasicEvent* Event, uint64 e_time)
{
- m_events.AddEvent(Event, m_events.CalculateTime(e_time));
+ m_events.AddEventAtOffset(Event, Milliseconds(e_time));
}
bool BattlegroundQueue::IsPlayerInvitedToRatedArena(ObjectGuid pl_guid)
@@ -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/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
index 10c0956e5d..ab12f3634a 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
@@ -101,7 +101,7 @@ void BattlegroundAB::PostUpdateImpl(uint32 diff)
uint8 controlledPoints = _controlledPoints[teamId];
if (controlledPoints == 0)
{
- _bgEvents.ScheduleEvent(eventId, 3000);
+ _bgEvents.ScheduleEvent(eventId, 3s);
break;
}
@@ -115,7 +115,7 @@ void BattlegroundAB::PostUpdateImpl(uint32 diff)
if (honorRewards < uint8(m_TeamScores[teamId] / _honorTics))
RewardHonorToTeam(GetBonusHonorFromKill(1), teamId);
if (reputationRewards < uint8(m_TeamScores[teamId] / _reputationTics))
- RewardReputationToTeam(teamId == TEAM_ALLIANCE ? 509 : 510, 10, teamId);
+ RewardReputationToTeam(teamId == TEAM_ALLIANCE ? 509 : 510, uint32(10 * _abReputationRate), teamId);
if (information < uint8(m_TeamScores[teamId] / BG_AB_WARNING_NEAR_VICTORY_SCORE))
{
if (teamId == TEAM_ALLIANCE)
@@ -170,8 +170,8 @@ void BattlegroundAB::StartingEventOpenDoors()
DoorOpen(BG_AB_OBJECT_GATE_A);
DoorOpen(BG_AB_OBJECT_GATE_H);
StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, BG_AB_EVENT_START_BATTLE);
- _bgEvents.ScheduleEvent(BG_AB_EVENT_ALLIANCE_TICK, 3000);
- _bgEvents.ScheduleEvent(BG_AB_EVENT_HORDE_TICK, 3000);
+ _bgEvents.ScheduleEvent(BG_AB_EVENT_ALLIANCE_TICK, 3s);
+ _bgEvents.ScheduleEvent(BG_AB_EVENT_HORDE_TICK, 3s);
}
void BattlegroundAB::AddPlayer(Player* player)
@@ -421,6 +421,7 @@ bool BattlegroundAB::SetupBattleground()
{
_honorTics = BattlegroundMgr::IsBGWeekend(GetBgTypeID(true)) ? BG_AB_HONOR_TICK_WEEKEND : BG_AB_HONOR_TICK_NORMAL;
_reputationTics = BattlegroundMgr::IsBGWeekend(GetBgTypeID(true)) ? BG_AB_REP_TICK_WEEKEND : BG_AB_REP_TICK_NORMAL;
+ _abReputationRate = sWorld->getRate(RATE_REPUTATION_GAIN_AB);
for (uint32 i = 0; i < BG_AB_DYNAMIC_NODES_COUNT; ++i)
{
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h
index a250c9f16e..9c3bf400c2 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h
@@ -170,12 +170,11 @@ enum BG_AB_Misc
BG_AB_WARNING_NEAR_VICTORY_SCORE = 1400,
BG_AB_MAX_TEAM_SCORE = 1600,
-
- BG_AB_FLAG_CAPTURING_TIME = 60000,
- BG_AB_BANNER_UPDATE_TIME = 2000
};
+constexpr Milliseconds BG_AB_FLAG_CAPTURING_TIME = 60s;
+constexpr Milliseconds BG_AB_BANNER_UPDATE_TIME = 2s;
-const uint32 BG_AB_TickIntervals[BG_AB_DYNAMIC_NODES_COUNT + 1] = {0, 12000, 9000, 6000, 3000, 1000};
+const Milliseconds BG_AB_TickIntervals[BG_AB_DYNAMIC_NODES_COUNT + 1] = {0ms, 12s, 9s, 6s, 3s, 1s};
const uint32 BG_AB_TickPoints[BG_AB_DYNAMIC_NODES_COUNT + 1] = {0, 10, 10, 10, 10, 30};
const uint32 BG_AB_GraveyardIds[BG_AB_ALL_NODES_COUNT] = {895, 894, 893, 897, 896, 898, 899};
@@ -299,6 +298,7 @@ private:
EventMap _bgEvents;
uint32 _honorTics;
uint32 _reputationTics;
+ float _abReputationRate;
uint8 _controlledPoints[PVP_TEAMS_COUNT] {};
bool _teamScores500Disadvantage[PVP_TEAMS_COUNT] {};
uint32 _configurableMaxTeamScore;
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
index 5b6a8b335f..b65daf5d9e 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
@@ -194,21 +194,21 @@ void BattlegroundAV::HandleQuestComplete(uint32 questid, Player* player)
case AV_QUEST_A_COMMANDER1:
case AV_QUEST_H_COMMANDER1:
m_Team_QuestStatus[teamId][1]++;
- RewardReputationToTeam(teamId, 1, teamId);
+ RewardReputationToTeam(teamId, uint32(1 * _avReputationRate), teamId);
if (m_Team_QuestStatus[teamId][1] == 30)
LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed (need to implement some events here", questid);
break;
case AV_QUEST_A_COMMANDER2:
case AV_QUEST_H_COMMANDER2:
m_Team_QuestStatus[teamId][2]++;
- RewardReputationToTeam(teamId, 1, teamId);
+ RewardReputationToTeam(teamId, uint32(1 * _avReputationRate), teamId);
if (m_Team_QuestStatus[teamId][2] == 60)
LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed (need to implement some events here", questid);
break;
case AV_QUEST_A_COMMANDER3:
case AV_QUEST_H_COMMANDER3:
m_Team_QuestStatus[teamId][3]++;
- RewardReputationToTeam(teamId, 1, teamId);
+ RewardReputationToTeam(teamId, uint32(1 * _avReputationRate), teamId);
if (m_Team_QuestStatus[teamId][3] == 120)
LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed (need to implement some events here", questid);
break;
@@ -316,21 +316,21 @@ Creature* BattlegroundAV::AddAVCreature(uint16 cinfoid, uint16 type)
type -= AV_CPLACE_MAX;
cinfoid = uint16(BG_AV_StaticCreaturePos[type][4]);
creature = AddCreature(BG_AV_StaticCreatureInfo[cinfoid],
- type + AV_CPLACE_MAX,
- BG_AV_StaticCreaturePos[type][0],
- BG_AV_StaticCreaturePos[type][1],
- BG_AV_StaticCreaturePos[type][2],
- BG_AV_StaticCreaturePos[type][3]);
+ type + AV_CPLACE_MAX,
+ BG_AV_StaticCreaturePos[type][0],
+ BG_AV_StaticCreaturePos[type][1],
+ BG_AV_StaticCreaturePos[type][2],
+ BG_AV_StaticCreaturePos[type][3]);
isStatic = true;
}
else
{
creature = AddCreature(BG_AV_CreatureInfo[cinfoid],
- type,
- BG_AV_CreaturePos[type][0],
- BG_AV_CreaturePos[type][1],
- BG_AV_CreaturePos[type][2],
- BG_AV_CreaturePos[type][3]);
+ type,
+ BG_AV_CreaturePos[type][0],
+ BG_AV_CreaturePos[type][1],
+ BG_AV_CreaturePos[type][2],
+ BG_AV_CreaturePos[type][3]);
}
if (!creature)
return nullptr;
@@ -344,7 +344,7 @@ Creature* BattlegroundAV::AddAVCreature(uint16 cinfoid, uint16 type)
(cinfoid >= AV_NPC_H_GRAVEDEFENSE0 && cinfoid <= AV_NPC_H_GRAVEDEFENSE3))))
{
if (!isStatic && ((cinfoid >= AV_NPC_A_GRAVEDEFENSE0 && cinfoid <= AV_NPC_A_GRAVEDEFENSE3)
- || (cinfoid >= AV_NPC_H_GRAVEDEFENSE0 && cinfoid <= AV_NPC_H_GRAVEDEFENSE3)))
+ || (cinfoid >= AV_NPC_H_GRAVEDEFENSE0 && cinfoid <= AV_NPC_H_GRAVEDEFENSE3)))
{
CreatureData& data = sObjectMgr->NewOrExistCreatureData(creature->GetSpawnId());
data.wander_distance = 5;
@@ -814,11 +814,11 @@ void BattlegroundAV::PopulateNode(BG_AV_Nodes node)
if (!trigger)
{
trigger = AddCreature(WORLD_TRIGGER,
- node + 302,
- BG_AV_CreaturePos[node + 302][0],
- BG_AV_CreaturePos[node + 302][1],
- BG_AV_CreaturePos[node + 302][2],
- BG_AV_CreaturePos[node + 302][3]);
+ node + 302,
+ BG_AV_CreaturePos[node + 302][0],
+ BG_AV_CreaturePos[node + 302][1],
+ BG_AV_CreaturePos[node + 302][2],
+ BG_AV_CreaturePos[node + 302][3]);
}
//add bonus honor aura trigger creature when node is accupied
@@ -1240,25 +1240,28 @@ GraveyardStruct const* BattlegroundAV::GetClosestGraveyard(Player* player)
bool BattlegroundAV::SetupBattleground()
{
+ _avReputationRate = sWorld->getRate(RATE_REPUTATION_GAIN_AV);
+
if (sBattlegroundMgr->IsBGWeekend(GetBgTypeID(true)))
{
- _reputationTower = 18;
- _reputationCaptain = 185;
- _reputationBoss = 525;
- _reputationPerOwnedGraveyard = 18;
- _reputationSurvivingCaptain = 175;
- _reputationSurvivingTower = 18;
- _reputationPerOwnedMine = 36;
+ _reputationTower = uint32(18 * _avReputationRate);
+ _reputationCaptain = uint32(185 * _avReputationRate);
+ _reputationBoss = uint32(525 * _avReputationRate);
+ _reputationPerOwnedGraveyard = uint32(18 * _avReputationRate);
+ _reputationSurvivingCaptain = uint32(175 * _avReputationRate);
+ _reputationSurvivingTower = uint32(18 * _avReputationRate);
+ _reputationPerOwnedMine = uint32(36 * _avReputationRate);
}
else
{
- _reputationTower = 12;
- _reputationCaptain = 125;
- _reputationBoss = sWorld->getIntConfig(CONFIG_BATTLEGROUND_ALTERAC_REP_ONBOSSDEATH);
- _reputationPerOwnedGraveyard = 12;
- _reputationSurvivingCaptain = 125;
- _reputationSurvivingTower = 12;
- _reputationPerOwnedMine = 24;
+ _reputationTower = uint32(12 * _avReputationRate);
+ _reputationCaptain = uint32(125 * _avReputationRate);
+ // Special case: This value comes from another config setting, but we still apply our multiplier
+ _reputationBoss = uint32(sWorld->getIntConfig(CONFIG_BATTLEGROUND_ALTERAC_REP_ONBOSSDEATH) * _avReputationRate);
+ _reputationPerOwnedGraveyard = uint32(12 * _avReputationRate);
+ _reputationSurvivingCaptain = uint32(125 * _avReputationRate);
+ _reputationSurvivingTower = uint32(12 * _avReputationRate);
+ _reputationPerOwnedMine = uint32(24 * _avReputationRate);
}
// Create starting objects
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h
index a058f1d98c..c8a0fd8cd2 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h
@@ -1846,6 +1846,7 @@ private:
uint32 _reputationSurvivingCaptain = 0; // 125, 175
uint32 _reputationSurvivingTower = 0; // 12, 18
uint32 _reputationPerOwnedMine = 0; // 24, 36
+ float _avReputationRate;
bool m_IsInformedNearVictory[2] {};
};
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
index ed636bcf5e..e646dd2e11 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
@@ -68,7 +68,7 @@ void BattlegroundEY::PostUpdateImpl(uint32 diff)
AddPoints(TEAM_ALLIANCE, BG_EY_TickPoints[_ownedPointsCount[TEAM_ALLIANCE] - 1]);
if (_ownedPointsCount[TEAM_HORDE] > 0)
AddPoints(TEAM_HORDE, BG_EY_TickPoints[_ownedPointsCount[TEAM_HORDE] - 1]);
- _bgEvents.ScheduleEvent(BG_EY_EVENT_ADD_POINTS, BG_EY_FPOINTS_TICK_TIME - (GameTime::GetGameTimeMS().count() % BG_EY_FPOINTS_TICK_TIME));
+ _bgEvents.ScheduleEvent(BG_EY_EVENT_ADD_POINTS, BG_EY_FPOINTS_TICK_TIME - (GameTime::GetGameTimeMS() % BG_EY_FPOINTS_TICK_TIME));
break;
case BG_EY_EVENT_FLAG_ON_GROUND:
RespawnFlagAfterDrop();
@@ -78,7 +78,7 @@ void BattlegroundEY::PostUpdateImpl(uint32 diff)
break;
case BG_EY_EVENT_CHECK_CPOINTS:
UpdatePointsState();
- _bgEvents.ScheduleEvent(BG_EY_EVENT_CHECK_CPOINTS, BG_EY_FPOINTS_CHECK_TIME - (GameTime::GetGameTimeMS().count() % BG_EY_FPOINTS_CHECK_TIME));
+ _bgEvents.ScheduleEvent(BG_EY_EVENT_CHECK_CPOINTS, BG_EY_FPOINTS_CHECK_TIME - (GameTime::GetGameTimeMS() % BG_EY_FPOINTS_CHECK_TIME));
break;
}
}
@@ -106,8 +106,8 @@ void BattlegroundEY::StartingEventOpenDoors()
// Achievement: Flurry
StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, BG_EY_EVENT_START_BATTLE);
- _bgEvents.ScheduleEvent(BG_EY_EVENT_ADD_POINTS, 0);
- _bgEvents.ScheduleEvent(BG_EY_EVENT_CHECK_CPOINTS, 0);
+ _bgEvents.ScheduleEvent(BG_EY_EVENT_ADD_POINTS, 0ms);
+ _bgEvents.ScheduleEvent(BG_EY_EVENT_CHECK_CPOINTS, 0ms);
}
void BattlegroundEY::AddPoints(TeamId teamId, uint32 points)
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h
index 1cdf29992b..50a46ce411 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h
@@ -31,13 +31,10 @@ enum BG_EY_Events
BG_EY_EVENT_CHECK_CPOINTS = 4
};
-enum BG_EY_Timers
-{
- BG_EY_FLAG_RESPAWN_TIME = 10 * IN_MILLISECONDS,
- BG_EY_FLAG_ON_GROUND_TIME = 10 * IN_MILLISECONDS,
- BG_EY_FPOINTS_CHECK_TIME = 2 * IN_MILLISECONDS,
- BG_EY_FPOINTS_TICK_TIME = 2 * IN_MILLISECONDS
-};
+constexpr Milliseconds BG_EY_FLAG_RESPAWN_TIME = 10s;
+constexpr Milliseconds BG_EY_FLAG_ON_GROUND_TIME = 10s;
+constexpr Milliseconds BG_EY_FPOINTS_CHECK_TIME = 2s;
+constexpr Milliseconds BG_EY_FPOINTS_TICK_TIME = 2s;
enum BG_EY_ProgressBarConsts
{
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/Battlegrounds/Zones/BattlegroundWS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp
index 272f07fbad..0c450b4833 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp
@@ -63,7 +63,7 @@ void BattlegroundWS::PostUpdateImpl(uint32 diff)
{
case BG_WS_EVENT_UPDATE_GAME_TIME:
UpdateWorldState(WORLD_STATE_BATTLEGROUND_WS_STATE_TIMER, GetMatchTime());
- _bgEvents.ScheduleEvent(BG_WS_EVENT_UPDATE_GAME_TIME, ((BG_WS_TOTAL_GAME_TIME - GetStartTime()) % (MINUTE * IN_MILLISECONDS)) + 1);
+ _bgEvents.ScheduleEvent(BG_WS_EVENT_UPDATE_GAME_TIME, Milliseconds(((BG_WS_TOTAL_GAME_TIME - GetStartTime()) % (MINUTE * IN_MILLISECONDS)) + 1));
break;
case BG_WS_EVENT_NO_TIME_LEFT:
if (GetTeamScore(TEAM_ALLIANCE) == GetTeamScore(TEAM_HORDE))
@@ -137,8 +137,8 @@ void BattlegroundWS::StartingEventOpenDoors()
StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, WS_EVENT_START_BATTLE);
UpdateWorldState(WORLD_STATE_BATTLEGROUND_WS_STATE_TIMER_ACTIVE, 1);
- _bgEvents.ScheduleEvent(BG_WS_EVENT_UPDATE_GAME_TIME, 0);
- _bgEvents.ScheduleEvent(BG_WS_EVENT_NO_TIME_LEFT, BG_WS_TOTAL_GAME_TIME - 2 * MINUTE * IN_MILLISECONDS); // 27 - 2 = 25 minutes
+ _bgEvents.ScheduleEvent(BG_WS_EVENT_UPDATE_GAME_TIME, 0ms);
+ _bgEvents.ScheduleEvent(BG_WS_EVENT_NO_TIME_LEFT, Milliseconds(BG_WS_TOTAL_GAME_TIME - 2 * MINUTE * IN_MILLISECONDS)); // 27 - 2 = 25 minutes
_bgEvents.ScheduleEvent(BG_WS_EVENT_DESPAWN_DOORS, BG_WS_DOOR_DESPAWN_TIME);
}
@@ -229,7 +229,7 @@ void BattlegroundWS::EventPlayerCapturedFlag(Player* player)
EndBattleground(GetTeamScore(TEAM_HORDE) == _configurableMaxTeamScore ? TEAM_HORDE : TEAM_ALLIANCE);
}
else
- _bgEvents.ScheduleEvent(BG_WS_EVENT_RESPAWN_BOTH_FLAGS, BG_WS_FLAG_RESPAWN_TIME);
+ _bgEvents.ScheduleEvent(BG_WS_EVENT_RESPAWN_BOTH_FLAGS, Milliseconds(BG_WS_FLAG_RESPAWN_TIME));
_bgEvents.CancelEvent(BG_WS_EVENT_BOTH_FLAGS_KEPT10);
_bgEvents.CancelEvent(BG_WS_EVENT_BOTH_FLAGS_KEPT15);
@@ -426,15 +426,17 @@ void BattlegroundWS::HandleAreaTrigger(Player* player, uint32 trigger)
bool BattlegroundWS::SetupBattleground()
{
+ _wsReputationRate = sWorld->getRate(RATE_REPUTATION_GAIN_WSG);
+
if (sBattlegroundMgr->IsBGWeekend(GetBgTypeID(true)))
{
- _reputationCapture = 45;
+ _reputationCapture = uint32(45 * _wsReputationRate);
_honorWinKills = 3;
_honorEndKills = 4;
}
else
{
- _reputationCapture = 35;
+ _reputationCapture = uint32(35 * _wsReputationRate);
_honorWinKills = 1;
_honorEndKills = 2;
}
@@ -578,10 +580,10 @@ uint32 BattlegroundWS::GetAssaultSpellId() const
{
if ((!GetFlagPickerGUID(TEAM_ALLIANCE) && GetFlagState(TEAM_ALLIANCE) != BG_WS_FLAG_STATE_ON_GROUND) ||
(!GetFlagPickerGUID(TEAM_HORDE) && GetFlagState(TEAM_HORDE) != BG_WS_FLAG_STATE_ON_GROUND) ||
- _bgEvents.GetNextEventTime(BG_WS_EVENT_BOTH_FLAGS_KEPT10) > 0)
+ _bgEvents.HasTimeUntilEvent(BG_WS_EVENT_BOTH_FLAGS_KEPT10))
return 0;
- return _bgEvents.GetNextEventTime(BG_WS_EVENT_BOTH_FLAGS_KEPT15) > 0 ? BG_WS_SPELL_FOCUSED_ASSAULT : BG_WS_SPELL_BRUTAL_ASSAULT;
+ return _bgEvents.HasTimeUntilEvent(BG_WS_EVENT_BOTH_FLAGS_KEPT15) ? BG_WS_SPELL_FOCUSED_ASSAULT : BG_WS_SPELL_BRUTAL_ASSAULT;
}
void BattlegroundWS::RemoveAssaultAuras()
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h
index 61fa2516ed..25df45ab6c 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h
@@ -39,12 +39,12 @@ enum BG_WS_TimerOrScore
BG_WS_MAX_TEAM_SCORE = 3,
BG_WS_TOTAL_GAME_TIME = 27 * MINUTE * IN_MILLISECONDS,
- BG_WS_FLAG_RESPAWN_TIME = 23 * IN_MILLISECONDS,
- BG_WS_FLAG_DROP_TIME = 10 * IN_MILLISECONDS,
- BG_WS_SPELL_FORCE_TIME = 10 * MINUTE * IN_MILLISECONDS,
- BG_WS_SPELL_BRUTAL_TIME = 15 * MINUTE * IN_MILLISECONDS,
- BG_WS_DOOR_DESPAWN_TIME = 5 * IN_MILLISECONDS
+ BG_WS_FLAG_RESPAWN_TIME = 23 * IN_MILLISECONDS
};
+constexpr Milliseconds BG_WS_FLAG_DROP_TIME = 10s;
+constexpr Milliseconds BG_WS_SPELL_FORCE_TIME = 600s;
+constexpr Milliseconds BG_WS_SPELL_BRUTAL_TIME = 900s;
+constexpr Milliseconds BG_WS_DOOR_DESPAWN_TIME = 5s;
enum BG_WS_BroadcastTexts
{
@@ -258,6 +258,7 @@ private:
ObjectGuid _droppedFlagGUID[2];
uint8 _flagState[2];
TeamId _lastFlagCaptureTeam;
+ float _wsReputationRate;
uint32 _reputationCapture;
uint32 _honorWinKills;
uint32 _honorEndKills;
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 2449fada7a..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
}
@@ -1508,7 +1508,7 @@ namespace lfg
lockMap.clear();
}
- uint8 LFGMgr::CheckGroupRoles(LfgRolesMap& groles, bool removeLeaderFlag /*= true*/)
+ uint8 LFGMgr::CheckGroupRoles(LfgRolesMap& groles)
{
if (groles.empty())
return 0;
@@ -1517,21 +1517,18 @@ namespace lfg
uint8 tank = 0;
uint8 healer = 0;
- if (removeLeaderFlag)
- for (LfgRolesMap::iterator it = groles.begin(); it != groles.end(); ++it)
- it->second &= ~PLAYER_ROLE_LEADER;
-
for (LfgRolesMap::iterator it = groles.begin(); it != groles.end(); ++it)
{
- if (it->second == PLAYER_ROLE_NONE)
+ uint8 const role = it->second & ~PLAYER_ROLE_LEADER;
+ if (role == PLAYER_ROLE_NONE)
return 0;
- if (it->second & PLAYER_ROLE_DAMAGE)
+ if (role & PLAYER_ROLE_DAMAGE)
{
- if (it->second != PLAYER_ROLE_DAMAGE)
+ if (role != PLAYER_ROLE_DAMAGE)
{
it->second -= PLAYER_ROLE_DAMAGE;
- if (uint8 x = CheckGroupRoles(groles, false))
+ if (uint8 x = CheckGroupRoles(groles))
return x;
it->second += PLAYER_ROLE_DAMAGE;
}
@@ -1541,12 +1538,12 @@ namespace lfg
damage++;
}
- if (it->second & PLAYER_ROLE_HEALER)
+ if (role & PLAYER_ROLE_HEALER)
{
- if (it->second != PLAYER_ROLE_HEALER)
+ if (role != PLAYER_ROLE_HEALER)
{
it->second -= PLAYER_ROLE_HEALER;
- if (uint8 x = CheckGroupRoles(groles, false))
+ if (uint8 x = CheckGroupRoles(groles))
return x;
it->second += PLAYER_ROLE_HEALER;
}
@@ -1556,12 +1553,12 @@ namespace lfg
healer++;
}
- if (it->second & PLAYER_ROLE_TANK)
+ if (role & PLAYER_ROLE_TANK)
{
- if (it->second != PLAYER_ROLE_TANK)
+ if (role != PLAYER_ROLE_TANK)
{
it->second -= PLAYER_ROLE_TANK;
- if (uint8 x = CheckGroupRoles(groles, false))
+ if (uint8 x = CheckGroupRoles(groles))
return x;
it->second += PLAYER_ROLE_TANK;
}
diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h
index 0eb27e71c0..235689bcaf 100644
--- a/src/server/game/DungeonFinding/LFGMgr.h
+++ b/src/server/game/DungeonFinding/LFGMgr.h
@@ -568,7 +568,7 @@ namespace lfg
/// Checks if all players are queued
bool AllQueued(Lfg5Guids const& check);
/// Checks if given roles match, modifies given roles map with new roles
- static uint8 CheckGroupRoles(LfgRolesMap& groles, bool removeLeaderFlag = true);
+ static uint8 CheckGroupRoles(LfgRolesMap& groles);
/// Checks if given players are ignoring each other
static bool HasIgnore(ObjectGuid guid1, ObjectGuid guid2);
/// Sends queue status to player
diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp
index 249ac7adb9..1971a3dc7a 100644
--- a/src/server/game/Entities/Corpse/Corpse.cpp
+++ b/src/server/game/Entities/Corpse/Corpse.cpp
@@ -121,7 +121,7 @@ void Corpse::DeleteFromDB(CharacterDatabaseTransaction trans)
DeleteFromDB(GetOwnerGUID(), trans);
}
-void Corpse::DeleteFromDB(ObjectGuid const ownerGuid, CharacterDatabaseTransaction trans)
+void Corpse::DeleteFromDB(ObjectGuid const& ownerGuid, CharacterDatabaseTransaction trans)
{
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CORPSE);
stmt->SetData(0, ownerGuid.GetCounter());
diff --git a/src/server/game/Entities/Corpse/Corpse.h b/src/server/game/Entities/Corpse/Corpse.h
index e74f2c9439..9027a608a8 100644
--- a/src/server/game/Entities/Corpse/Corpse.h
+++ b/src/server/game/Entities/Corpse/Corpse.h
@@ -63,7 +63,7 @@ public:
bool LoadCorpseFromDB(ObjectGuid::LowType guid, Field* fields);
void DeleteFromDB(CharacterDatabaseTransaction trans);
- static void DeleteFromDB(ObjectGuid const ownerGuid, CharacterDatabaseTransaction trans);
+ static void DeleteFromDB(ObjectGuid const& ownerGuid, CharacterDatabaseTransaction trans);
[[nodiscard]] ObjectGuid GetOwnerGUID() const { return GetGuidValue(CORPSE_FIELD_OWNER); }
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 877cfee68a..f092428332 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -251,7 +251,7 @@ CreatureBaseStats const* CreatureBaseStats::GetBaseStats(uint8 level, uint8 unit
bool ForcedDespawnDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
{
- m_owner.DespawnOrUnsummon(0s, m_respawnTimer); // since we are here, we are not TempSummon as object type cannot change during runtime
+ m_owner.DespawnOrUnsummon(0ms, m_respawnTimer); // since we are here, we are not TempSummon as object type cannot change during runtime
return true;
}
@@ -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);
@@ -2159,12 +2159,12 @@ void Creature::Respawn(bool force)
}
}
-void Creature::ForcedDespawn(uint32 timeMSToDespawn, Seconds forceRespawnTimer)
+void Creature::ForcedDespawn(Milliseconds timeMSToDespawn, Seconds forceRespawnTimer)
{
- if (timeMSToDespawn)
+ if (timeMSToDespawn > 0ms)
{
ForcedDespawnDelayEvent* pEvent = new ForcedDespawnDelayEvent(*this, forceRespawnTimer);
- m_Events.AddEvent(pEvent, m_Events.CalculateTime(timeMSToDespawn));
+ m_Events.AddEventAtOffset(pEvent, timeMSToDespawn);
return;
}
@@ -2174,17 +2174,17 @@ void Creature::ForcedDespawn(uint32 timeMSToDespawn, Seconds forceRespawnTimer)
// Xinef: Set new respawn time, ignore corpse decay time...
RemoveCorpse(true);
- if (forceRespawnTimer > Seconds::zero())
+ if (forceRespawnTimer > 0s)
if (GetMap())
GetMap()->ScheduleCreatureRespawn(GetGUID(), forceRespawnTimer);
}
-void Creature::DespawnOrUnsummon(Milliseconds msTimeToDespawn /*= 0*/, Seconds forcedRespawnTimer)
+void Creature::DespawnOrUnsummon(Milliseconds msTimeToDespawn /*= 0ms*/, Seconds forcedRespawnTimer /*= 0s*/)
{
if (TempSummon* summon = this->ToTempSummon())
- summon->UnSummon(msTimeToDespawn.count());
+ summon->UnSummon(msTimeToDespawn);
else
- ForcedDespawn(msTimeToDespawn.count(), forcedRespawnTimer);
+ ForcedDespawn(msTimeToDespawn, forcedRespawnTimer);
}
void Creature::DespawnOnEvade(Seconds respawnDelay)
@@ -2204,7 +2204,7 @@ void Creature::DespawnOnEvade(Seconds respawnDelay)
return;
}
- DespawnOrUnsummon(Milliseconds(0), respawnDelay);
+ DespawnOrUnsummon(0ms, respawnDelay);
}
void Creature::InitializeReactState()
@@ -2464,7 +2464,7 @@ void Creature::CallAssistance(Unit* target /*= nullptr*/)
e->AddAssistant((*assistList.begin())->GetGUID());
assistList.pop_front();
}
- m_Events.AddEvent(e, m_Events.CalculateTime(sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_ASSISTANCE_DELAY)));
+ m_Events.AddEventAtOffset(e, Milliseconds(sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_ASSISTANCE_DELAY)));
}
}
}
@@ -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);
}
@@ -3713,6 +3676,33 @@ bool Creature::CanGeneratePickPocketLoot() const
return (lootPickPocketRestoreTime == 0 || lootPickPocketRestoreTime < GameTime::GetGameTime().count());
}
+void Creature::SetTextRepeatId(uint8 textGroup, uint8 id)
+{
+ CreatureTextRepeatIds& repeats = m_textRepeat[textGroup];
+ if (std::find(repeats.begin(), repeats.end(), id) == repeats.end())
+ repeats.push_back(id);
+ else
+ LOG_ERROR("sql.sql", "CreatureTextMgr: TextGroup {} for Creature({}) {}, id {} already added", uint32(textGroup), GetName(), GetGUID().ToString(), uint32(id));
+}
+
+CreatureTextRepeatIds const& Creature::GetTextRepeatGroup(uint8 textGroup)
+{
+ static CreatureTextRepeatIds const emptyIds;
+
+ CreatureTextRepeatGroup::const_iterator groupItr = m_textRepeat.find(textGroup);
+ if (groupItr != m_textRepeat.end())
+ return groupItr->second;
+
+ return emptyIds;
+}
+
+void Creature::ClearTextRepeatGroup(uint8 textGroup)
+{
+ CreatureTextRepeatGroup::iterator groupItr = m_textRepeat.find(textGroup);
+ if (groupItr != m_textRepeat.end())
+ groupItr->second.clear();
+}
+
void Creature::SetRespawnTime(uint32 respawn)
{
m_respawnTime = respawn ? GameTime::GetGameTime().count() + respawn : 0;
@@ -3735,7 +3725,7 @@ void Creature::ModifyThreatPercentTemp(Unit* victim, int32 percent, Milliseconds
}
TemporaryThreatModifierEvent* pEvent = new TemporaryThreatModifierEvent(*this, victim->GetGUID(), currentThreat);
- m_Events.AddEvent(pEvent, m_Events.CalculateTime(duration.count()));
+ m_Events.AddEventAtOffset(pEvent, duration);
}
}
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index e5ebcd45a4..b5d93cd3ba 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -39,6 +39,10 @@ class CreatureGroup;
#define MAX_VENDOR_ITEMS 150 // Limitation in 3.x.x item count in SMSG_LIST_INVENTORY
+//used for handling non-repeatable random texts
+typedef std::vector<uint8> CreatureTextRepeatIds;
+typedef std::unordered_map<uint8, CreatureTextRepeatIds> CreatureTextRepeatGroup;
+
class Creature : public Unit, public GridObject<Creature>, public MovableMapObject, public UpdatableMapObject
{
public:
@@ -79,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(); }
@@ -141,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;
@@ -279,8 +282,7 @@ public:
void RemoveCorpse(bool setSpawnTime = true, bool skipVisibility = false);
- void DespawnOrUnsummon(Milliseconds msTimeToDespawn, Seconds forcedRespawnTimer);
- void DespawnOrUnsummon(uint32 msTimeToDespawn = 0) { DespawnOrUnsummon(Milliseconds(msTimeToDespawn), 0s); };
+ void DespawnOrUnsummon(Milliseconds msTimeToDespawn = 0ms, Seconds forcedRespawnTimer = 0s);
void DespawnOnEvade(Seconds respawnDelay = 20s);
[[nodiscard]] time_t const& GetRespawnTime() const { return m_respawnTime; }
@@ -388,6 +390,10 @@ public:
void UpdateLeashExtensionTime();
uint8 GetLeashTimer() const;
+ CreatureTextRepeatIds const& GetTextRepeatGroup(uint8 textGroup);
+ void SetTextRepeatId(uint8 textGroup, uint8 id);
+ void ClearTextRepeatGroup(uint8 textGroup);
+
bool IsFreeToMove();
static constexpr uint32 MOVE_CIRCLE_CHECK_INTERVAL = 3000;
static constexpr uint32 MOVE_BACKWARDS_CHECK_INTERVAL = 2000;
@@ -498,7 +504,7 @@ protected:
bool IsAlwaysDetectableFor(WorldObject const* seer) const override;
private:
- void ForcedDespawn(uint32 timeMSToDespawn = 0, Seconds forcedRespawnTimer = 0s);
+ void ForcedDespawn(Milliseconds timeMSToDespawn = 0ms, Seconds forcedRespawnTimer = 0s);
[[nodiscard]] bool CanPeriodicallyCallForAssistance() const;
@@ -519,6 +525,8 @@ private:
Spell const* _focusSpell; ///> Locks the target during spell cast for proper facing
+ CreatureTextRepeatGroup m_textRepeat;
+
bool _isMissingSwimmingFlagOutOfCombat;
uint32 m_assistanceTimer;
diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h
index 4ca6cda4ab..be52166987 100644
--- a/src/server/game/Entities/Creature/CreatureData.h
+++ b/src/server/game/Entities/Creature/CreatureData.h
@@ -99,18 +99,18 @@ enum class CreatureFlightMovementType : uint8
enum class CreatureChaseMovementType : uint8
{
- Run,
- CanWalk,
- AlwaysWalk,
+ Run = 0,
+ CanWalk = 1,
+ AlwaysWalk = 2,
Max
};
enum class CreatureRandomMovementType : uint8
{
- Walk,
- CanRun,
- AlwaysRun,
+ Walk = 0,
+ CanRun = 1,
+ AlwaysRun = 2,
Max
};
diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp
index 0b0c17a1ed..76170ff7ee 100644
--- a/src/server/game/Entities/Creature/TemporarySummon.cpp
+++ b/src/server/game/Entities/Creature/TemporarySummon.cpp
@@ -284,13 +284,12 @@ void TempSummon::SetTempSummonType(TempSummonType type)
m_type = type;
}
-void TempSummon::UnSummon(uint32 msTime)
+void TempSummon::UnSummon(Milliseconds msTime)
{
- if (msTime)
+ if (msTime > 0ms)
{
ForcedUnsummonDelayEvent* pEvent = new ForcedUnsummonDelayEvent(*this);
-
- m_Events.AddEvent(pEvent, m_Events.CalculateTime(msTime));
+ m_Events.AddEventAtOffset(pEvent, msTime);
return;
}
diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h
index 72a1993270..f3a285c60d 100644
--- a/src/server/game/Entities/Creature/TemporarySummon.h
+++ b/src/server/game/Entities/Creature/TemporarySummon.h
@@ -44,7 +44,7 @@ public:
void Update(uint32 time) override;
virtual void InitStats(uint32 lifetime);
virtual void InitSummon();
- virtual void UnSummon(uint32 msTime = 0);
+ virtual void UnSummon(Milliseconds msTime = 0ms);
void UpdateObjectVisibilityOnCreate() override;
void RemoveFromWorld() override;
void SetTempSummonType(TempSummonType type);
@@ -133,4 +133,5 @@ public:
private:
TempSummon& m_owner;
};
+
#endif
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index f258db1caf..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;
@@ -929,7 +929,7 @@ void GameObject::AddUniqueUse(Player* player)
m_unique_users.insert(player->GetGUID());
}
-void GameObject::DespawnOrUnsummon(Milliseconds delay, Seconds forceRespawnTime)
+void GameObject::DespawnOrUnsummon(Milliseconds delay /*= 0ms*/, Seconds forceRespawnTime /*= 0s*/)
{
if (delay > 0ms)
{
@@ -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)
{
@@ -1731,34 +1735,40 @@ void GameObject::Use(Unit* user)
uint32 zone, subzone;
GetZoneAndAreaId(zone, subzone);
- int32 zone_skill = sObjectMgr->GetFishingBaseSkillLevel(subzone);
- if (!zone_skill)
- zone_skill = sObjectMgr->GetFishingBaseSkillLevel(zone);
+ int32 zoneSkill = sObjectMgr->GetFishingBaseSkillLevel(subzone);
+ if (!zoneSkill)
+ zoneSkill = sObjectMgr->GetFishingBaseSkillLevel(zone);
//provide error, no fishable zone or area should be 0
- if (!zone_skill)
+ if (!zoneSkill)
LOG_ERROR("sql.sql", "Fishable areaId {} are not properly defined in `skill_fishing_base_level`.", subzone);
- int32 skill = player->GetSkillValue(SKILL_FISHING);
+ // no miss skill is zone skill + 95 since at least patch 2.1
+ int32 const noMissSkill = zoneSkill + 95;
+
+ int32 const skill = player->GetSkillValue(SKILL_FISHING);
int32 chance;
- if (skill < zone_skill)
+ // fishing pool catches are 100%
+ //TODO: find reasonable value for fishing hole search
+ GameObject* fishingHole = LookupFishingHoleAround(20.0f + CONTACT_DISTANCE);
+ if (fishingHole)
+ chance = 100;
+ else if (skill < noMissSkill)
{
- chance = int32(pow((double)skill / zone_skill, 2) * 100);
+ chance = int32(pow((double)skill / noMissSkill, 2) * 100);
if (chance < 1)
chance = 1;
}
else
chance = 100;
- int32 roll = irand(1, 100);
+ int32 const roll = irand(1, 100);
- LOG_DEBUG("entities.gameobject", "Fishing check (skill: {} zone min skill: {} chance {} roll: {}", skill, zone_skill, chance, roll);
+ LOG_DEBUG("entities.gameobject", "Fishing check (skill: {} zone min skill: {} no-miss skill: {} chance {} roll: {})", skill, zoneSkill, noMissSkill, chance, roll);
- if (sScriptMgr->OnPlayerUpdateFishingSkill(player, skill, zone_skill, chance, roll))
- {
+ if (sScriptMgr->OnPlayerUpdateFishingSkill(player, skill, zoneSkill, chance, roll))
player->UpdateFishingSkill();
- }
// but you will likely cause junk in areas that require a high fishing skill (not yet implemented)
if (chance >= roll)
{
@@ -1768,11 +1778,10 @@ void GameObject::Use(Unit* user)
SetOwnerGUID(player->GetGUID());
SetSpellId(0); // prevent removing unintended auras at Unit::RemoveGameObject
- //TODO: find reasonable value for fishing hole search
- GameObject* ok = LookupFishingHoleAround(20.0f + CONTACT_DISTANCE);
- if (ok)
+ // fishing pool catch
+ if (fishingHole)
{
- ok->Use(player);
+ fishingHole->Use(player);
SetLootState(GO_JUST_DEACTIVATED);
}
else
@@ -1789,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;
}
}
@@ -1881,7 +1890,6 @@ void GameObject::Use(Unit* user)
}
}
- user->RemoveAurasByType(SPELL_AURA_MOUNTED);
spellId = info->spellcaster.spellId;
break;
}
@@ -2026,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;
@@ -2051,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
@@ -2300,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();
@@ -3046,13 +3057,13 @@ SpellInfo const* GameObject::GetSpellForLock(Player const* player) const
return nullptr;
}
-void GameObject::AddToSkillupList(ObjectGuid playerGuid)
+void GameObject::AddToSkillupList(ObjectGuid const& playerGuid)
{
int32 timer = GetMap()->IsDungeon() ? -1 : 10 * MINUTE * IN_MILLISECONDS;
m_SkillupList[playerGuid] = timer;
}
-bool GameObject::IsInSkillupList(ObjectGuid playerGuid) const
+bool GameObject::IsInSkillupList(ObjectGuid const& playerGuid) const
{
for (auto const& itr : m_SkillupList)
{
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index 1b8ccd0477..13be19952b 100644
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -231,8 +231,8 @@ public:
void RemoveLootMode(uint16 lootMode) { m_LootMode &= ~lootMode; }
void ResetLootMode() { m_LootMode = LOOT_MODE_DEFAULT; }
- void AddToSkillupList(ObjectGuid playerGuid);
- [[nodiscard]] bool IsInSkillupList(ObjectGuid playerGuid) const;
+ void AddToSkillupList(ObjectGuid const& playerGuid);
+ [[nodiscard]] bool IsInSkillupList(ObjectGuid const& playerGuid) const;
void AddUniqueUse(Player* player);
void AddUse() { ++m_usetimes; }
@@ -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 a183d14672..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
@@ -1095,23 +1095,45 @@ void WorldObject::SetVisibilityDistanceOverride(VisibilityDistanceType type)
if (type == GetVisibilityOverrideType())
return;
- if (IsPlayer())
+ if (!IsCreature() && !IsGameObject() && !IsDynamicObject())
return;
- if (IsVisibilityOverridden())
- {
- if (IsFarVisible())
- GetMap()->RemoveWorldObjectFromFarVisibleMap(this);
- else if (IsZoneWideVisible())
- GetMap()->RemoveWorldObjectFromZoneWideVisibleMap(GetZoneId(), this);
- }
-
- if (type == VisibilityDistanceType::Large || type == VisibilityDistanceType::Gigantic)
- GetMap()->AddWorldObjectToFarVisibleMap(this);
- else if (type == VisibilityDistanceType::Infinite)
- GetMap()->AddWorldObjectToZoneWideVisibleMap(GetZoneId(), this);
+ // Important to remove from old visibility override containers first
+ RemoveFromMapVisibilityOverrideContainers();
+ // Always update _visibilityDistanceOverrideType, even when not in world
_visibilityDistanceOverrideType = type;
+
+ // Finally, add to new visibility override containers
+ AddToMapVisibilityOverrideContainers();
+}
+
+void WorldObject::RemoveFromMapVisibilityOverrideContainers()
+{
+ if (!IsVisibilityOverridden())
+ return;
+
+ if (!IsInWorld())
+ return;
+
+ if (IsFarVisible())
+ GetMap()->RemoveWorldObjectFromFarVisibleMap(this);
+ else if (IsZoneWideVisible())
+ GetMap()->RemoveWorldObjectFromZoneWideVisibleMap(_zoneId, this);
+}
+
+void WorldObject::AddToMapVisibilityOverrideContainers()
+{
+ if (!IsVisibilityOverridden())
+ return;
+
+ if (!IsInWorld())
+ return;
+
+ if (IsFarVisible())
+ GetMap()->AddWorldObjectToFarVisibleMap(this);
+ else if (IsZoneWideVisible())
+ GetMap()->AddWorldObjectToZoneWideVisibleMap(_zoneId, this);
}
void WorldObject::CleanupsBeforeDelete(bool /*finalCleanup*/)
@@ -1177,6 +1199,9 @@ void WorldObject::AddToWorld()
Object::AddToWorld();
GetMap()->GetZoneAndAreaId(GetPhaseMask(), _zoneId, _areaId, GetPositionX(), GetPositionY(), GetPositionZ());
GetMap()->AddObjectToPendingUpdateList(this);
+
+ if (IsZoneWideVisible())
+ GetMap()->AddWorldObjectToZoneWideVisibleMap(_zoneId, this);
}
void WorldObject::RemoveFromWorld()
@@ -1184,8 +1209,7 @@ void WorldObject::RemoveFromWorld()
if (!IsInWorld())
return;
- if (IsZoneWideVisible())
- GetMap()->RemoveWorldObjectFromZoneWideVisibleMap(GetZoneId(), this);
+ RemoveFromMapVisibilityOverrideContainers();
DestroyForVisiblePlayers();
@@ -1208,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())
{
@@ -1318,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
@@ -1752,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())
@@ -1791,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
@@ -2044,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 23784c9c63..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; }
@@ -780,6 +780,9 @@ private:
//bool CanDetectStealthOf(WorldObject const* obj) const;
bool CanDetectStealthOf(WorldObject const* obj, bool checkAlert = false) const;
+ void RemoveFromMapVisibilityOverrideContainers();
+ void AddToMapVisibilityOverrideContainers();
+
GuidUnorderedSet _allowedLooters;
ObjectVisibilityContainer _objectVisibilityContainer;
diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h
index a8d99fe80e..5a3deff9e2 100644
--- a/src/server/game/Entities/Object/ObjectGuid.h
+++ b/src/server/game/Entities/Object/ObjectGuid.h
@@ -269,7 +269,7 @@ class PackedGuid
explicit PackedGuid(ObjectGuid guid) : _packedGuid(PACKED_GUID_MIN_BUFFER_SIZE) { _packedGuid.appendPackGUID(guid.GetRawValue()); }
void Set(uint64 guid) { _packedGuid.wpos(0); _packedGuid.appendPackGUID(guid); }
- void Set(ObjectGuid guid) { _packedGuid.wpos(0); _packedGuid.appendPackGUID(guid.GetRawValue()); }
+ void Set(ObjectGuid const& guid) { _packedGuid.wpos(0); _packedGuid.appendPackGUID(guid.GetRawValue()); }
[[nodiscard]] std::size_t size() const { return _packedGuid.size(); }
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index dc33162260..45c23fe941 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -692,7 +692,7 @@ void Pet::Update(uint32 diff)
}
}
- if (m_duration > 0s)
+ if (m_duration > 0ms)
{
if (m_duration > _diff)
m_duration -= _diff;
@@ -708,7 +708,7 @@ void Pet::Update(uint32 diff)
if (getPowerType() == POWER_FOCUS)
{
m_petRegenTimer -= _diff;
- if (m_petRegenTimer <= 0s)
+ if (m_petRegenTimer <= 0ms)
{
m_petRegenTimer += PET_FOCUS_REGEN_INTERVAL;
Regenerate(POWER_FOCUS);
@@ -1026,7 +1026,7 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
Unit* owner = GetOwner();
if (!owner) // just to be sure, asynchronous now
{
- DespawnOrUnsummon(1000);
+ DespawnOrUnsummon(1s);
return false;
}
@@ -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/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h
index e737bab11f..9190202d4f 100644
--- a/src/server/game/Entities/Pet/Pet.h
+++ b/src/server/game/Entities/Pet/Pet.h
@@ -52,7 +52,7 @@ public:
PetType getPetType() const { return m_petType; }
void setPetType(PetType type) { m_petType = type; }
bool isControlled() const { return getPetType() == SUMMON_PET || getPetType() == HUNTER_PET; }
- bool isTemporarySummoned() const { return m_duration > 0s; }
+ bool isTemporarySummoned() const { return m_duration > 0ms; }
bool IsPermanentPetFor(Player* owner) const; // pet have tab in character windows and set UNIT_FIELD_PETNUMBER
diff --git a/src/server/game/Entities/Pet/PetDefines.h b/src/server/game/Entities/Pet/PetDefines.h
index 6bb873258e..5e4fcd48c6 100644
--- a/src/server/game/Entities/Pet/PetDefines.h
+++ b/src/server/game/Entities/Pet/PetDefines.h
@@ -23,6 +23,7 @@
#include <array>
#include <string>
#include <vector>
+#include <numbers>
enum ReactStates : uint8;
@@ -75,10 +76,10 @@ enum ActionFeedback
FEEDBACK_CANT_ATT_TARGET = 3
};
-enum PetTalk
+enum PetAction : int32
{
- PET_TALK_SPECIAL_SPELL = 0,
- PET_TALK_ATTACK = 1
+ PET_ACTION_SPECIAL_SPELL = 0,
+ PET_ACTION_ATTACK = 1
};
enum PetLoadState
@@ -202,8 +203,10 @@ enum PetScalingSpells
SPELL_RISEN_GHOUL_SELF_STUN = 47466,
};
-#define PET_FOLLOW_DIST 1.0f
-#define PET_FOLLOW_ANGLE (M_PI/2)
+constexpr float PET_FOLLOW_DIST = 2.0f;
+constexpr float PET_FOLLOW_ANGLE = std::numbers::pi_v<float> / 2;
+constexpr float MINI_PET_SUMMON_ANGLE = std::numbers::pi_v<float> / 4;
+constexpr float MINI_PET_FOLLOW_ANGLE = std::numbers::pi_v<float>;
class PetStable
{
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 05c93ca7e1..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"
@@ -90,6 +91,7 @@
#include "WorldStateDefines.h"
#include "WorldStatePackets.h"
#include <cmath>
+#include <queue>
/// @todo: this import is not necessary for compilation and marked as unused by the IDE
// however, for some reasons removing it would cause a damn linking issue
@@ -416,6 +418,8 @@ Player::Player(WorldSession* session): Unit(), m_mover(this)
GetObjectVisibilityContainer().InitForPlayer();
sScriptMgr->OnConstructPlayer(this);
+
+ _expectingChangeTransport = false;
}
Player::~Player()
@@ -1339,7 +1343,7 @@ void Player::SendTeleportAckPacket()
data << GetPackGUID();
data << GetSession()->GetOrderCounter(); // movement counter
BuildMovementPacket(&data);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
GetSession()->IncrementOrderCounter();
}
@@ -1530,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();
@@ -1557,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
@@ -1565,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)
@@ -1598,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();
}
@@ -2087,7 +2071,7 @@ bool Player::CanInteractWithQuestGiver(Object* questGiver)
return false;
}
-Creature* Player::GetNPCIfCanInteractWith(ObjectGuid guid, uint32 npcflagmask)
+Creature* Player::GetNPCIfCanInteractWith(ObjectGuid const& guid, uint32 npcflagmask)
{
// unit checks
if (!guid)
@@ -2144,7 +2128,7 @@ Creature* Player::GetNPCIfCanInteractWith(ObjectGuid guid, uint32 npcflagmask)
return creature;
}
-GameObject* Player::GetGameObjectIfCanInteractWith(ObjectGuid guid, GameobjectTypes type) const
+GameObject* Player::GetGameObjectIfCanInteractWith(ObjectGuid const& guid, GameobjectTypes type) const
{
if (GameObject* go = GetMap()->GetGameObject(guid))
{
@@ -2380,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)
@@ -2500,6 +2484,7 @@ void Player::GiveLevel(uint8 level)
m_Played_time[PLAYED_TIME_LEVEL] = 0; // Level Played Time reset
_ApplyAllLevelScaleItemMods(false);
+ _RemoveAllAuraStatMods();
SetLevel(level);
@@ -2522,6 +2507,7 @@ void Player::GiveLevel(uint8 level)
UpdateSkillsToMaxSkillsForLevel();
_ApplyAllLevelScaleItemMods(true);
+ _ApplyAllAuraStatMods();
if (!isDead())
{
@@ -2855,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)
@@ -2884,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()
@@ -2892,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)
@@ -3050,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);
}
}
@@ -3088,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;
}
@@ -4429,12 +4415,6 @@ void Player::SetMovement(PlayerMovementType pType)
const PackedGuid& guid = GetPackGUID();
switch (pType)
{
- case MOVE_ROOT:
- data.Initialize(SMSG_FORCE_MOVE_ROOT, guid.size() + 4);
- break;
- case MOVE_UNROOT:
- data.Initialize(SMSG_FORCE_MOVE_UNROOT, guid.size() + 4);
- break;
case MOVE_WATER_WALK:
data.Initialize(SMSG_MOVE_WATER_WALK, guid.size() + 4);
break;
@@ -4447,7 +4427,7 @@ void Player::SetMovement(PlayerMovementType pType)
}
data << guid;
data << GetSession()->GetOrderCounter(); // movement counter
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
GetSession()->IncrementOrderCounter();
}
@@ -4459,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);
@@ -4488,10 +4468,10 @@ void Player::BuildPlayerRepop()
SetHealth(1); // convert player body to ghost
SetMovement(MOVE_WATER_WALK);
SetWaterWalking(true);
- if (!GetSession()->isLogingOut())
- {
- SetMovement(MOVE_UNROOT);
- }
+
+ if (!IsImmobilizedState())
+ SendMoveRoot(false);
+
RemoveUnitFlag(UNIT_FLAG_SKINNABLE); // BG - remove insignia related
int32 corpseReclaimDelay = CalculateCorpseReclaimDelay();
if (corpseReclaimDelay >= 0)
@@ -4514,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
@@ -4528,7 +4508,7 @@ void Player::ResurrectPlayer(float restore_percent, bool applySickness)
setDeathState(DeathState::Alive);
SetMovement(MOVE_LAND_WALK);
- SetMovement(MOVE_UNROOT);
+ SendMoveRoot(false);
SetWaterWalking(false);
m_deathTimer = 0;
@@ -4592,7 +4572,7 @@ void Player::KillPlayer()
if (IsFlying() && !GetTransport())
GetMotionMaster()->MoveFall();
- SetMovement(MOVE_ROOT);
+ SendMoveRoot(true);
StopMirrorTimers(); //disable timers(bars)
@@ -4619,7 +4599,7 @@ void Player::KillPlayer()
//UpdateObjectVisibility(); // pussywizard: not needed
}
-void Player::OfflineResurrect(ObjectGuid const guid, CharacterDatabaseTransaction trans)
+void Player::OfflineResurrect(ObjectGuid const& guid, CharacterDatabaseTransaction trans)
{
Corpse::DeleteFromDB(guid, trans);
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
@@ -5001,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()))
@@ -5611,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);
}
@@ -6238,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);
@@ -6431,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
@@ -6441,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);
@@ -6616,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);
@@ -6909,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);
@@ -6956,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;
@@ -6987,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);
}
}
}
@@ -7001,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)
@@ -7026,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()
@@ -7620,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);
@@ -7649,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);
@@ -7804,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
@@ -8251,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
@@ -8963,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)
@@ -8972,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()
@@ -9017,7 +8997,7 @@ Pet* Player::GetPet() const
return nullptr;
}
-Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetType petType, Milliseconds duration /*= 0s*/, uint32 healthPct /*= 0*/)
+Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetType petType, Milliseconds duration /*= 0ms*/, uint32 healthPct /*= 0*/)
{
PetStable& petStable = GetOrInitPetStable();
@@ -9038,7 +9018,7 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy
++itr;
}
- if (duration > 0s)
+ if (duration > 0ms)
pet->SetDuration(duration);
// Generate a new name for the newly summoned ghoul
@@ -9132,7 +9112,7 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy
}
}
- if (duration > 0s)
+ if (duration > 0ms)
pet->SetDuration(duration);
if (NeedSendSpectatorData() && pet->GetCreatureTemplate()->family)
@@ -9235,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);
@@ -9522,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())
{
@@ -9638,7 +9618,7 @@ void Player::PetSpellInitialize()
data << uint32(category ? cooldown : 0); // category cooldown
}
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::PossessSpellInitialize()
@@ -9666,7 +9646,7 @@ void Player::PossessSpellInitialize()
data << uint8(0); // spells count
data << uint8(0); // cooldowns count
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::VehicleSpellInitialize()
@@ -9741,7 +9721,7 @@ void Player::VehicleSpellInitialize()
data << uint32(category ? cooldown : 0); // category cooldown
}
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::CharmSpellInitialize()
@@ -9795,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)
@@ -10152,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)
@@ -10604,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);
}
}
@@ -10724,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)
@@ -11141,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*/)
@@ -11617,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
@@ -11630,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();
@@ -11648,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
@@ -11701,16 +11681,13 @@ void Player::SendInitialPacketsAfterAddToMap()
GetZoneAndAreaId(newzone, newarea);
UpdateZone(newzone, newarea); // also call SendInitWorldStates();
- if (HasStunAura())
- SetMovement(MOVE_ROOT);
-
WorldPacket setCompoundState(SMSG_MULTIPLE_MOVES, 100);
setCompoundState << uint32(0); // size placeholder
// 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();
@@ -11720,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();
@@ -11730,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();
@@ -11740,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();
@@ -11803,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)
@@ -11838,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)
@@ -11885,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);
}
}
@@ -12157,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)
@@ -12927,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)
@@ -13048,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)
@@ -13275,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);
}
}
@@ -13431,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);
}
@@ -13491,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)
@@ -13503,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] =
@@ -14371,6 +14348,73 @@ bool Player::CanSeeSpellClickOn(Creature const* c) const
return false;
}
+/**
+ * @brief Checks if any vendor option is available in the gossip menu tree for a given creature.
+ *
+ * @param menuId The starting gossip menu ID to check.
+ * @param creature Pointer to the creature whose gossip menus are being checked.
+ * @return true if a vendor option is available in any accessible menu; false otherwise.
+ */
+bool Player::AnyVendorOptionAvailable(uint32 menuId, Creature const* creature) const
+{
+ {
+ GossipMenuItemsMapBounds menuItemBounds = sObjectMgr->GetGossipMenuItemsMapBounds(menuId);
+ if (menuItemBounds.first == menuItemBounds.second)
+ return true;
+ }
+
+ std::set<uint32> visitedMenus;
+ std::queue<uint32> menusToCheck;
+ menusToCheck.push(menuId);
+
+ while (!menusToCheck.empty())
+ {
+ uint32 const currentMenuId = menusToCheck.front();
+ menusToCheck.pop();
+
+ if (visitedMenus.find(currentMenuId) != visitedMenus.end())
+ continue;
+
+ visitedMenus.insert(currentMenuId);
+
+ GossipMenuItemsMapBounds menuItemBounds = sObjectMgr->GetGossipMenuItemsMapBounds(currentMenuId);
+
+ if (menuItemBounds.first == menuItemBounds.second && currentMenuId != 0)
+ continue;
+
+ for (auto itr = menuItemBounds.first; itr != menuItemBounds.second; ++itr)
+ {
+ if (!sConditionMgr->IsObjectMeetToConditions(const_cast<Player*>(this), const_cast<Creature*>(creature), itr->second.Conditions))
+ continue;
+
+ if (itr->second.OptionType == GOSSIP_OPTION_VENDOR)
+ return true;
+ else if (itr->second.ActionMenuID)
+ {
+ GossipMenusMapBounds menuBounds = sObjectMgr->GetGossipMenusMapBounds(itr->second.ActionMenuID);
+ bool menuAccessible = false;
+
+ if (menuBounds.first == menuBounds.second)
+ menuAccessible = true;
+ else
+ {
+ for (auto menuItr = menuBounds.first; menuItr != menuBounds.second; ++menuItr)
+ if (sConditionMgr->IsObjectMeetToConditions(const_cast<Player*>(this), const_cast<Creature*>(creature), menuItr->second.Conditions))
+ {
+ menuAccessible = true;
+ break;
+ }
+ }
+
+ if (menuAccessible)
+ menusToCheck.push(itr->second.ActionMenuID);
+ }
+ }
+ }
+
+ return false;
+}
+
bool Player::CanSeeVendor(Creature const* creature) const
{
if (!creature->HasNpcFlag(UNIT_NPC_FLAG_VENDOR))
@@ -14378,9 +14422,11 @@ bool Player::CanSeeVendor(Creature const* creature) const
ConditionList conditions = sConditionMgr->GetConditionsForNpcVendorEvent(creature->GetEntry(), 0);
if (!sConditionMgr->IsObjectMeetToConditions(const_cast<Player*>(this), const_cast<Creature*>(creature), conditions))
- {
return false;
- }
+
+ uint32 const menuId = creature->GetCreatureTemplate()->GossipMenuId;
+ if (!AnyVendorOptionAvailable(menuId, creature))
+ return false;
return true;
}
@@ -14499,7 +14545,7 @@ void Player::SendTalentsInfoData(bool pet)
BuildPetTalentsInfoData(&data);
else
BuildPlayerTalentsInfoData(&data);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
void Player::BuildEnchantmentsInfoData(WorldPacket* data)
@@ -14572,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)
@@ -14610,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;
@@ -15421,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)
@@ -15625,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)
@@ -15673,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;
}
@@ -15714,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;
}
@@ -15729,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
@@ -15971,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 74c89cc96d..a95f44b2a8 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -41,6 +41,7 @@
#include "TradeData.h"
#include "Unit.h"
#include "WorldSession.h"
+#include <set>
#include <string>
#include <vector>
@@ -448,8 +449,6 @@ typedef std::list<Item*> ItemDurationList;
enum PlayerMovementType
{
- MOVE_ROOT = 1,
- MOVE_UNROOT = 2,
MOVE_WATER_WALK = 3,
MOVE_LAND_WALK = 4
};
@@ -1129,8 +1128,8 @@ public:
void SendInstanceResetWarning(uint32 mapid, Difficulty difficulty, uint32 time, bool onEnterMap);
bool CanInteractWithQuestGiver(Object* questGiver);
- Creature* GetNPCIfCanInteractWith(ObjectGuid guid, uint32 npcflagmask);
- [[nodiscard]] GameObject* GetGameObjectIfCanInteractWith(ObjectGuid guid, GameobjectTypes type) const;
+ Creature* GetNPCIfCanInteractWith(ObjectGuid const& guid, uint32 npcflagmask);
+ [[nodiscard]] GameObject* GetGameObjectIfCanInteractWith(ObjectGuid const& guid, GameobjectTypes type) const;
void ToggleAFK();
void ToggleDND();
@@ -1156,6 +1155,7 @@ public:
void SetCommentator(bool on) { ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_COMMENTATOR2, on); }
[[nodiscard]] bool IsDeveloper() const { return HasPlayerFlag(PLAYER_FLAGS_DEVELOPER); }
void SetDeveloper(bool on) { ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_DEVELOPER, on); }
+ void SetBeastMaster(bool on) { if (on) SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); else RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); }
[[nodiscard]] bool isAcceptWhispers() const { return m_ExtraFlags & PLAYER_EXTRA_ACCEPT_WHISPERS; }
void SetAcceptWhispers(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_ACCEPT_WHISPERS; else m_ExtraFlags &= ~PLAYER_EXTRA_ACCEPT_WHISPERS; }
[[nodiscard]] bool IsGameMaster() const { return m_ExtraFlags & PLAYER_EXTRA_GM_ON; }
@@ -1210,7 +1210,7 @@ public:
[[nodiscard]] PetStable const* GetPetStable() const { return m_petStable.get(); }
[[nodiscard]] Pet* GetPet() const;
- Pet* SummonPet(uint32 entry, float x, float y, float z, float ang, PetType petType, Milliseconds duration = 0s, uint32 healthPct = 0);
+ Pet* SummonPet(uint32 entry, float x, float y, float z, float ang, PetType petType, Milliseconds duration = 0ms, uint32 healthPct = 0);
void RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent = false);
bool CanPetResurrect();
bool IsExistPet();
@@ -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);
@@ -2033,7 +2033,7 @@ public:
Corpse* CreateCorpse();
void RemoveCorpse();
void KillPlayer();
- static void OfflineResurrect(ObjectGuid const guid, CharacterDatabaseTransaction trans);
+ static void OfflineResurrect(ObjectGuid const& guid, CharacterDatabaseTransaction trans);
[[nodiscard]] bool HasCorpse() const { return _corpseLocation.GetMapId() != MAPID_INVALID; }
[[nodiscard]] WorldLocation GetCorpseLocation() const { return _corpseLocation; }
uint32 GetResurrectionSpellId();
@@ -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);
@@ -2549,7 +2550,9 @@ public:
//bool isActiveObject() const { return true; }
bool CanSeeSpellClickOn(Creature const* creature) const;
[[nodiscard]] bool CanSeeVendor(Creature const* creature) const;
-
+private:
+ [[nodiscard]] bool AnyVendorOptionAvailable(uint32 menuId, Creature const* creature) const;
+public:
[[nodiscard]] uint32 GetChampioningFaction() const { return m_ChampioningFaction; }
void SetChampioningFaction(uint32 faction) { m_ChampioningFaction = faction; }
Spell* m_spellModTakingSpell;
@@ -2563,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); }
@@ -2632,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 ***/
/*********************************************************/
@@ -3012,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 9f663ff2fa..0b016d03fc 100644
--- a/src/server/game/Entities/Player/PlayerQuest.cpp
+++ b/src/server/game/Entities/Player/PlayerQuest.cpp
@@ -740,9 +740,9 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
if (log_slot < MAX_QUEST_LOG_SIZE)
SetQuestSlot(log_slot, 0);
- bool rewarded = IsQuestRewarded(quest_id) && !quest->IsDFQuest();
+ bool const rewarded = IsQuestRewarded(quest_id) && !quest->IsDFQuest() && !(quest->IsDaily() || quest->IsWeekly() || quest->IsMonthly());
- // Not give XP in case already completed once repeatable quest
+ // Repeatable quests (not time-based reset ones) should not give XP on subsequent completions
uint32 XP = rewarded ? 0 : CalculateQuestRewardXP(quest);
sScriptMgr->OnPlayerQuestComputeXP(this, quest, XP);
@@ -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 d45533ad63..80f6a068e4 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)
{
@@ -1847,8 +1848,13 @@ InventoryResult Player::CanEquipItem(uint8 slot, uint16& dest, Item* pItem, bool
return EQUIP_ERR_NOT_DURING_ARENA_MATCH;
}
- if (IsInCombat() && (pProto->Class == ITEM_CLASS_WEAPON || pProto->InventoryType == INVTYPE_RELIC) && m_weaponChangeTimer != 0)
- return EQUIP_ERR_CANT_DO_RIGHT_NOW; // maybe exist better err
+ if (IsInCombat() && (pProto->Class == ITEM_CLASS_WEAPON || pProto->InventoryType == INVTYPE_RELIC))
+ {
+ uint32 cooldownSpell = IsClass(CLASS_ROGUE, CLASS_CONTEXT_WEAPON_SWAP) ? 6123 : 6119;
+ uint32 startRecoveryTime = sSpellMgr->GetSpellInfo(cooldownSpell)->StartRecoveryTime;
+ if (m_weaponChangeTimer != 0 && m_weaponChangeTimer != startRecoveryTime)
+ return EQUIP_ERR_CANT_DO_RIGHT_NOW; // maybe exist better err
+ }
if (IsNonMeleeSpellCast(false))
return EQUIP_ERR_CANT_DO_RIGHT_NOW;
@@ -2757,7 +2763,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 +4057,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 +4069,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 +4081,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 +4776,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 +6526,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 +6561,7 @@ void Player::SendRaidInfo()
}
}
data.put<uint32>(p_counter, counter);
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
/*
@@ -6582,7 +6588,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 +6602,7 @@ void Player::SendSavedInstances()
{
data.Initialize(SMSG_UPDATE_LAST_INSTANCE);
data << uint32(itr->second.save->GetMapId());
- GetSession()->SendPacket(&data);
+ SendDirectMessage(&data);
}
}
}
@@ -6833,7 +6839,7 @@ bool Player::Satisfy(DungeonProgressionRequirements const* ar, uint32 target_map
|| missingPlayerItems.size() || missingPlayerQuests.size() || missingPlayerAchievements.size()
|| missingLeaderItems.size() || missingLeaderQuests.size() || missingLeaderAchievements.size())
{
- if (!sScriptMgr->OnPlayerNotAvoidSatisfy(partyLeader, ar, target_map, report))
+ if (!sScriptMgr->OnPlayerNotAvoidSatisfy(this, ar, target_map, report))
return true;
if (report)
diff --git a/src/server/game/Entities/Player/PlayerUpdates.cpp b/src/server/game/Entities/Player/PlayerUpdates.cpp
index d3798a083f..df5153a1cb 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()
@@ -1968,10 +1968,7 @@ void Player::UpdateCharmedAI()
Unit* target = GetVictim();
if (target)
- {
SetInFront(target);
- SendMovementFlagUpdate(true);
- }
if (HasUnitState(UNIT_STATE_CASTING))
return;
diff --git a/src/server/game/Entities/Player/SocialMgr.cpp b/src/server/game/Entities/Player/SocialMgr.cpp
index d5b5fdf59a..77830c8e56 100644
--- a/src/server/game/Entities/Player/SocialMgr.cpp
+++ b/src/server/game/Entities/Player/SocialMgr.cpp
@@ -37,7 +37,7 @@ uint32 PlayerSocial::GetNumberOfSocialsWithFlag(SocialFlag flag) const
return counter;
}
-bool PlayerSocial::AddToSocialList(ObjectGuid friendGuid, SocialFlag flag)
+bool PlayerSocial::AddToSocialList(ObjectGuid const& friendGuid, SocialFlag flag)
{
// check client limits
if (GetNumberOfSocialsWithFlag(flag) >= (((flag & SOCIAL_FLAG_FRIEND) != 0) ? SOCIALMGR_FRIEND_LIMIT : SOCIALMGR_IGNORE_LIMIT))
@@ -71,7 +71,7 @@ bool PlayerSocial::AddToSocialList(ObjectGuid friendGuid, SocialFlag flag)
return true;
}
-void PlayerSocial::RemoveFromSocialList(ObjectGuid friendGuid, SocialFlag flag)
+void PlayerSocial::RemoveFromSocialList(ObjectGuid const& friendGuid, SocialFlag flag)
{
auto itr = m_playerSocialMap.find(friendGuid);
if (itr == m_playerSocialMap.end()) // not exist
@@ -102,7 +102,7 @@ void PlayerSocial::RemoveFromSocialList(ObjectGuid friendGuid, SocialFlag flag)
}
}
-void PlayerSocial::SetFriendNote(ObjectGuid friendGuid, std::string note)
+void PlayerSocial::SetFriendNote(ObjectGuid const& friendGuid, std::string note)
{
auto itr = m_playerSocialMap.find(friendGuid);
if (itr == m_playerSocialMap.end()) // not exist
@@ -172,11 +172,11 @@ 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");
}
-bool PlayerSocial::_checkContact(ObjectGuid guid, SocialFlag flags) const
+bool PlayerSocial::_checkContact(ObjectGuid const& guid, SocialFlag flags) const
{
auto const& itr = m_playerSocialMap.find(guid);
if (itr != m_playerSocialMap.end())
@@ -185,12 +185,12 @@ bool PlayerSocial::_checkContact(ObjectGuid guid, SocialFlag flags) const
return false;
}
-bool PlayerSocial::HasFriend(ObjectGuid friend_guid) const
+bool PlayerSocial::HasFriend(ObjectGuid const& friend_guid) const
{
return _checkContact(friend_guid, SOCIAL_FLAG_FRIEND);
}
-bool PlayerSocial::HasIgnore(ObjectGuid ignore_guid) const
+bool PlayerSocial::HasIgnore(ObjectGuid const& ignore_guid) const
{
return _checkContact(ignore_guid, SOCIAL_FLAG_IGNORED);
}
@@ -209,7 +209,7 @@ SocialMgr* SocialMgr::instance()
return &instance;
}
-void SocialMgr::GetFriendInfo(Player* player, ObjectGuid friendGUID, FriendInfo& friendInfo)
+void SocialMgr::GetFriendInfo(Player* player, ObjectGuid const& friendGUID, FriendInfo& friendInfo)
{
if (!player)
return;
@@ -247,14 +247,14 @@ void SocialMgr::GetFriendInfo(Player* player, ObjectGuid friendGUID, FriendInfo&
}
}
-void SocialMgr::MakeFriendStatusPacket(FriendsResult result, ObjectGuid guid, WorldPacket* data)
+void SocialMgr::MakeFriendStatusPacket(FriendsResult result, ObjectGuid const& guid, WorldPacket* data)
{
data->Initialize(SMSG_FRIEND_STATUS, 9);
*data << uint8(result);
*data << guid;
}
-void SocialMgr::SendFriendStatus(Player* player, FriendsResult result, ObjectGuid friendGuid, bool broadcast)
+void SocialMgr::SendFriendStatus(Player* player, FriendsResult result, ObjectGuid const& friendGuid, bool broadcast)
{
FriendInfo fi;
GetFriendInfo(player, friendGuid, fi);
@@ -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,12 +311,12 @@ 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);
}
}
}
-PlayerSocial* SocialMgr::LoadFromDB(PreparedQueryResult result, ObjectGuid guid)
+PlayerSocial* SocialMgr::LoadFromDB(PreparedQueryResult result, ObjectGuid const& guid)
{
PlayerSocial* social = &m_socialMap[guid];
social->SetPlayerGUID(guid);
diff --git a/src/server/game/Entities/Player/SocialMgr.h b/src/server/game/Entities/Player/SocialMgr.h
index a35187b6fb..5995f05e9f 100644
--- a/src/server/game/Entities/Player/SocialMgr.h
+++ b/src/server/game/Entities/Player/SocialMgr.h
@@ -104,19 +104,19 @@ class PlayerSocial
public:
PlayerSocial();
// adding/removing
- bool AddToSocialList(ObjectGuid friend_guid, SocialFlag flag);
- void RemoveFromSocialList(ObjectGuid friend_guid, SocialFlag flag);
- void SetFriendNote(ObjectGuid friendGuid, std::string note);
+ bool AddToSocialList(ObjectGuid const& friend_guid, SocialFlag flag);
+ void RemoveFromSocialList(ObjectGuid const& friend_guid, SocialFlag flag);
+ void SetFriendNote(ObjectGuid const& friendGuid, std::string note);
// Packet send's
void SendSocialList(Player* player, uint32 flags);
// Misc
- bool HasFriend(ObjectGuid friend_guid) const;
- bool HasIgnore(ObjectGuid ignore_guid) const;
- ObjectGuid GetPlayerGUID() const { return m_playerGUID; }
- void SetPlayerGUID(ObjectGuid guid) { m_playerGUID = guid; }
+ bool HasFriend(ObjectGuid const& friend_guid) const;
+ bool HasIgnore(ObjectGuid const& ignore_guid) const;
+ ObjectGuid const& GetPlayerGUID() const { return m_playerGUID; }
+ void SetPlayerGUID(ObjectGuid const& guid) { m_playerGUID = guid; }
uint32 GetNumberOfSocialsWithFlag(SocialFlag flag) const;
private:
- bool _checkContact(ObjectGuid guid, SocialFlag flags) const;
+ bool _checkContact(ObjectGuid const& guid, SocialFlag flags) const;
typedef std::map<ObjectGuid, FriendInfo> PlayerSocialMap;
PlayerSocialMap m_playerSocialMap;
ObjectGuid m_playerGUID;
@@ -131,14 +131,14 @@ class SocialMgr
public:
static SocialMgr* instance();
// Misc
- void RemovePlayerSocial(ObjectGuid guid) { m_socialMap.erase(guid); }
- static void GetFriendInfo(Player* player, ObjectGuid friendGUID, FriendInfo& friendInfo);
+ void RemovePlayerSocial(ObjectGuid const& guid) { m_socialMap.erase(guid); }
+ static void GetFriendInfo(Player* player, ObjectGuid const& friendGUID, FriendInfo& friendInfo);
// Packet management
- void MakeFriendStatusPacket(FriendsResult result, ObjectGuid friend_guid, WorldPacket* data);
- void SendFriendStatus(Player* player, FriendsResult result, ObjectGuid friend_guid, bool broadcast);
+ void MakeFriendStatusPacket(FriendsResult result, ObjectGuid const& friend_guid, WorldPacket* data);
+ void SendFriendStatus(Player* player, FriendsResult result, ObjectGuid const& friend_guid, bool broadcast);
void BroadcastToFriendListers(Player* player, WorldPacket* packet);
// Loading
- PlayerSocial* LoadFromDB(PreparedQueryResult result, ObjectGuid guid);
+ PlayerSocial* LoadFromDB(PreparedQueryResult result, ObjectGuid const& guid);
private:
typedef std::map<ObjectGuid, PlayerSocial> SocialMap;
SocialMap m_socialMap;
diff --git a/src/server/game/Entities/Totem/Totem.cpp b/src/server/game/Entities/Totem/Totem.cpp
index db4fae0e62..3bf8a55174 100644
--- a/src/server/game/Entities/Totem/Totem.cpp
+++ b/src/server/game/Entities/Totem/Totem.cpp
@@ -119,11 +119,11 @@ void Totem::InitSummon()
}
}
-void Totem::UnSummon(uint32 msTime)
+void Totem::UnSummon(Milliseconds msTime)
{
- if (msTime)
+ if (msTime > 0ms)
{
- m_Events.AddEvent(new ForcedUnsummonDelayEvent(*this), m_Events.CalculateTime(msTime));
+ m_Events.AddEventAtOffset(new ForcedUnsummonDelayEvent(*this), msTime);
return;
}
diff --git a/src/server/game/Entities/Totem/Totem.h b/src/server/game/Entities/Totem/Totem.h
index 5265435d53..27ccc12bb3 100644
--- a/src/server/game/Entities/Totem/Totem.h
+++ b/src/server/game/Entities/Totem/Totem.h
@@ -55,7 +55,7 @@ public:
void Update(uint32 time) override;
void InitStats(uint32 duration) override;
void InitSummon() override;
- void UnSummon(uint32 msTime = 0) override;
+ void UnSummon(Milliseconds msTime = 0ms) override;
uint32 GetSpell(uint8 slot = 0) const { return m_spells[slot]; }
uint32 GetTotemDuration() const { return m_duration; }
void SetTotemDuration(uint32 duration) { m_duration = duration; }
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index addcf5b2b8..cf1bb05206 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -50,6 +50,7 @@
#include "PassiveAI.h"
#include "Pet.h"
#include "PetAI.h"
+#include "PetPackets.h"
#include "Player.h"
#include "ReputationMgr.h"
#include "ScriptMgr.h"
@@ -1086,12 +1087,10 @@ uint32 Unit::DealDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage
if (damagetype != DOT && damage > 0 && !victim->GetOwnerGUID().IsPlayer() && (!spellProto || !spellProto->HasAura(SPELL_AURA_DAMAGE_SHIELD)))
victim->ToCreature()->UpdateLeashExtensionTime();
- if (attacker)
+ if (attacker && attacker != victim)
{
if (spellProto && victim->CanHaveThreatList() && !victim->HasUnitState(UNIT_STATE_EVADE) && !victim->IsInCombatWith(attacker))
- {
victim->CombatStart(attacker, !(spellProto->AttributesEx3 & SPELL_ATTR3_SUPPRESS_TARGET_PROCS));
- }
victim->AddThreat(attacker, float(damage), damageSchoolMask, spellProto);
}
@@ -8180,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))
@@ -8371,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))
@@ -9289,28 +9288,6 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
{
switch (auraSpellInfo->Id)
{
- // Soul Preserver
- case 60510:
- {
- switch (getClass())
- {
- case CLASS_DRUID:
- trigger_spell_id = 60512;
- break;
- case CLASS_PALADIN:
- trigger_spell_id = 60513;
- break;
- case CLASS_PRIEST:
- trigger_spell_id = 60514;
- break;
- case CLASS_SHAMAN:
- trigger_spell_id = 60515;
- break;
- }
-
- target = this;
- break;
- }
case 37657: // Lightning Capacitor
case 54841: // Thunder Capacitor
case 67712: // Item - Coliseum 25 Normal Caster Trinket
@@ -10986,7 +10963,11 @@ void Unit::SetCharm(Unit* charm, bool apply)
charm->SetUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED);
}
else
+ {
charm->m_ControlledByPlayer = false;
+ if (!HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED))
+ charm->RemoveUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED);
+ }
// PvP, FFAPvP
charm->SetByteValue(UNIT_FIELD_BYTES_2, 1, GetByteValue(UNIT_FIELD_BYTES_2, 1));
@@ -11095,7 +11076,7 @@ int32 Unit::DealHeal(Unit* healer, Unit* victim, uint32 addhealth)
return gain;
}
-bool RedirectSpellEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
+bool RedirectSpellEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
{
if (Unit* auraOwner = ObjectAccessor::GetUnit(_self, _auraOwnerGUID))
{
@@ -13585,7 +13566,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);
@@ -13613,7 +13594,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();
}
@@ -13634,7 +13615,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();
}
@@ -14546,116 +14527,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);
}
}
@@ -16696,7 +16616,7 @@ Player* Unit::GetSpellModOwner() const
}
///----------Pet responses methods-----------------
-void Unit::SendPetActionFeedback(uint8 msg)
+void Unit::SendPetActionFeedback(uint8 msg) const
{
Unit* owner = GetOwner();
if (!owner || !owner->IsPlayer())
@@ -16704,22 +16624,21 @@ void Unit::SendPetActionFeedback(uint8 msg)
WorldPacket data(SMSG_PET_ACTION_FEEDBACK, 1);
data << uint8(msg);
- owner->ToPlayer()->GetSession()->SendPacket(&data);
+ owner->ToPlayer()->SendDirectMessage(&data);
}
-void Unit::SendPetTalk(uint32 pettalk)
+void Unit::SendPetActionSound(PetAction action) const
{
- Unit* owner = GetOwner();
- if (!owner || !owner->IsPlayer())
- return;
+ SendMessageToSet(WorldPackets::Pet::PetActionSound(GetGUID(), static_cast<int32>(action)).Write(), false);
+}
- WorldPacket data(SMSG_PET_ACTION_SOUND, 8 + 4);
- data << GetGUID();
- data << uint32(pettalk);
- owner->ToPlayer()->GetSession()->SendPacket(&data);
+void Unit::SendPetDismissSound() const
+{
+ if (CreatureDisplayInfoEntry const* displayInfo = sCreatureDisplayInfoStore.LookupEntry(GetNativeDisplayId()))
+ SendMessageToSet(WorldPackets::Pet::PetDismissSound(static_cast<int32>(displayInfo->ModelId), GetPosition()).Write(), false);
}
-void Unit::SendPetAIReaction(ObjectGuid guid)
+void Unit::SendPetAIReaction(ObjectGuid guid) const
{
Unit* owner = GetOwner();
if (!owner || !owner->IsPlayer())
@@ -16728,7 +16647,7 @@ void Unit::SendPetAIReaction(ObjectGuid guid)
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----------
@@ -16794,6 +16713,13 @@ void Unit::StopMovingOnCurrentPos()
void Unit::SendMovementFlagUpdate(bool self /* = false */)
{
+ if (IsRooted())
+ {
+ // each case where this occurs has to be examined and reported and dealt with.
+ LOG_ERROR("Unit", "Attempted sending heartbeat with root flag for guid {}", GetGUID().ToString());
+ return;
+ }
+
WorldPacket data;
BuildHeartBeatMsg(&data);
SendMessageToSet(&data, self);
@@ -16834,7 +16760,7 @@ void Unit::SetStandState(uint8 state)
{
WorldPacket data(SMSG_STANDSTATE_UPDATE, 1);
data << (uint8)state;
- ToPlayer()->GetSession()->SendPacket(&data);
+ ToPlayer()->SendDirectMessage(&data);
}
}
@@ -18315,73 +18241,65 @@ void Unit::SetStunned(bool apply)
}
}
-void Unit::SetRooted(bool apply, bool isStun)
+void Unit::SetRooted(bool apply, bool stun, bool logout)
{
+ const uint32 state = (stun ? (logout ? UNIT_STATE_LOGOUT_TIMER : UNIT_STATE_STUNNED) : UNIT_STATE_ROOT);
+
if (apply)
{
- // MOVEMENTFLAG_ROOT cannot be used in conjunction with MOVEMENTFLAG_MASK_MOVING (tested 3.3.5a)
- // this will freeze clients. That's why we remove MOVEMENTFLAG_MASK_MOVING before
- // setting MOVEMENTFLAG_ROOT
- RemoveUnitMovementFlag(MOVEMENTFLAG_MASK_MOVING);
+ AddUnitState(state);
- if (IsFalling())
- {
- AddUnitMovementFlag(MOVEMENTFLAG_PENDING_ROOT);
- }
- else
- {
- AddUnitMovementFlag(MOVEMENTFLAG_ROOT);
- }
+ SendMoveRoot(true);
+ }
+ else
+ {
+ ClearUnitState(state);
- // Creature specific
- if (!IsPlayer())
- {
- if (isStun && movespline->Finalized())
- {
- StopMovingOnCurrentPos();
- }
- else
- {
- StopMoving();
- }
- }
+ // Prevent giving ability to move if more immobilizers are active
+ if (!IsImmobilizedState())
+ SendMoveRoot(false);
+ }
+}
- if (m_movedByPlayer)
+void Unit::SendMoveRoot(bool apply)
+{
+ const Player* client = GetClientControlling();
+
+ // Apply flags in-place when unit currently is not controlled by a player
+ if (!client)
+ {
+ if (apply)
{
- WorldPacket data(SMSG_FORCE_MOVE_ROOT, GetPackGUID().size() + 4);
- data << GetPackGUID();
- data << m_movedByPlayer->ToPlayer()->GetSession()->GetOrderCounter(); // movement counter
- m_movedByPlayer->ToPlayer()->SendDirectMessage(&data);
- m_movedByPlayer->ToPlayer()->GetSession()->IncrementOrderCounter();
+ m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_MASK_MOVING_FLY);
+ m_movementInfo.AddMovementFlag(MOVEMENTFLAG_ROOT);
+ if (!client)
+ StopMoving();
}
else
- {
- WorldPacket data(SMSG_SPLINE_MOVE_ROOT, GetPackGUID().size());
- data << GetPackGUID();
- SendMessageToSet(&data, true);
- }
+ m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_ROOT);
}
+
+ if (!IsInWorld())
+ return;
+
+ const PackedGuid& guid = GetPackGUID();
+ // Wrath+ spline root: when unit is currently not controlled by a player
+ if (!client)
+ {
+ WorldPacket data(apply ? SMSG_SPLINE_MOVE_ROOT : SMSG_SPLINE_MOVE_UNROOT, guid.size());
+ data << guid;
+ SendMessageToSet(&data, true);
+ }
+ // Wrath+ force root: when unit is controlled by a player
else
{
- RemoveUnitMovementFlag(MOVEMENTFLAG_ROOT | MOVEMENTFLAG_PENDING_ROOT);
+ uint32 const counter = client->GetSession()->GetOrderCounter();
- if (!HasUnitState(UNIT_STATE_STUNNED)) // prevent moving if it also has stun effect
- {
- if (m_movedByPlayer)
- {
- WorldPacket data(SMSG_FORCE_MOVE_UNROOT, GetPackGUID().size() + 4);
- data << GetPackGUID();
- data << m_movedByPlayer->ToPlayer()->GetSession()->GetOrderCounter(); // movement counter
- m_movedByPlayer->ToPlayer()->SendDirectMessage(&data);
- m_movedByPlayer->ToPlayer()->GetSession()->IncrementOrderCounter();
- }
- else
- {
- WorldPacket data(SMSG_SPLINE_MOVE_UNROOT, GetPackGUID().size());
- data << GetPackGUID();
- SendMessageToSet(&data, true);
- }
- }
+ WorldPacket data(apply ? SMSG_FORCE_MOVE_ROOT : SMSG_FORCE_MOVE_UNROOT, guid.size() + 4);
+ data << guid;
+ data << counter;
+ client->GetSession()->SendPacket(&data);
+ client->GetSession()->IncrementOrderCounter();
}
}
@@ -19283,7 +19201,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);
@@ -19383,7 +19301,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);
}
}
@@ -19541,7 +19459,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);
@@ -19604,7 +19522,7 @@ void Unit::ExitVehicle(Position const* /*exitPosition*/)
}
}
-bool VehicleDespawnEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
+bool VehicleDespawnEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
{
Position pos = _self;
_self.MovePositionToFirstCollision(pos, 20.0f, M_PI);
@@ -19635,6 +19553,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;
@@ -19711,7 +19632,7 @@ void Unit::_ExitVehicle(Position const* exitPosition)
else if (vehicleBase->IsCreature())
{
vehicle->Uninstall();
- vehicleBase->m_Events.AddEvent(new VehicleDespawnEvent(*vehicleBase, 2000), vehicleBase->m_Events.CalculateTime(2000));
+ vehicleBase->m_Events.AddEventAtOffset(new VehicleDespawnEvent(*vehicleBase, 2s), 2s);
}
// xinef: ugly hack, no appripriate hook later to cast spell
@@ -19731,7 +19652,7 @@ void Unit::_ExitVehicle(Position const* exitPosition)
setDeathState(DeathState::JustDied);
// If for other reason we as minion are exiting the vehicle (ejected, master dismounted) - unsummon
else
- ToTempSummon()->UnSummon(2000); // Approximation
+ ToTempSummon()->UnSummon(2s); // Approximation
}
if (player)
@@ -20118,7 +20039,7 @@ class AuraMunchingQueue : public BasicEvent
public:
AuraMunchingQueue(Unit& owner, ObjectGuid targetGUID, int32 basePoints, uint32 spellId, AuraEffect* aurEff, AuraType auraType) : _owner(owner), _targetGUID(targetGUID), _basePoints(basePoints), _spellId(spellId), _aurEff(aurEff), _auraType(auraType) { }
- bool Execute(uint64 /*eventTime*/, uint32 /*updateTime*/) override
+ bool Execute(uint64 /*e_time*/, uint32 /*p_time*/) override
{
if (_owner.IsInWorld() && _owner.FindMap())
if (Unit* target = ObjectAccessor::GetUnit(_owner, _targetGUID))
@@ -20147,24 +20068,6 @@ private:
AuraType _auraType;
};
-class ResetToHomeOrientation : public BasicEvent
-{
-public:
- ResetToHomeOrientation(Creature& self) : _self(self) { }
-
- bool Execute(uint64 /*eventTime*/, uint32 /*updateTime*/) override
- {
- if (_self.IsInWorld() && _self.FindMap() && _self.IsAlive() && !_self.IsInCombat())
- {
- _self.SetFacingTo(_self.GetHomePosition().GetOrientation());
- }
-
- return true;
- }
-private:
- Creature& _self;
-};
-
void Unit::CastDelayedSpellWithPeriodicAmount(Unit* caster, uint32 spellId, AuraType auraType, int32 addAmount, uint8 effectIndex)
{
AuraEffect* aurEff = nullptr;
@@ -20390,7 +20293,7 @@ void Unit::SetFacingTo(float ori)
init.Launch();
}
-void Unit::SetFacingToObject(WorldObject* object)
+void Unit::SetFacingToObject(WorldObject* object, Milliseconds timed /*= 0ms*/)
{
// never face when already moving
if (!IsStopped())
@@ -20401,24 +20304,20 @@ void Unit::SetFacingToObject(WorldObject* object)
init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZ());
init.SetFacing(GetAngle(object)); // when on transport, GetAngle will still return global coordinates (and angle) that needs transforming
init.Launch();
-}
-
-void Unit::SetTimedFacingToObject(WorldObject* object, uint32 time)
-{
- // never face when already moving
- if (!IsStopped() || !time)
- return;
-
- /// @todo figure out under what conditions creature will move towards object instead of facing it where it currently is.
- Movement::MoveSplineInit init(this);
- init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZ());
- init.SetFacing(GetAngle(object)); // when on transport, GetAngle will still return global coordinates (and angle) that needs transforming
- init.Launch();
- if (Creature* c = ToCreature())
- c->m_Events.AddEvent(new ResetToHomeOrientation(*c), c->m_Events.CalculateTime(time));
- else
- LOG_ERROR("entities.unit", "Unit::SetTimedFacingToObject called on non-creature unit {}. This should never happen.", GetEntry());
+ if (timed > 0ms)
+ {
+ if (Creature* c = ToCreature())
+ {
+ c->m_Events.AddEventAtOffset([c]()
+ {
+ if (c->IsInWorld() && c->FindMap() && c->IsAlive() && !c->IsInCombat())
+ c->SetFacingTo(c->GetHomePosition().GetOrientation());
+ }, timed);
+ }
+ else
+ LOG_ERROR("entities.unit", "Unit::SetFacingToObject called on non-creature unit {}. This should never happen.", GetEntry());
+ }
}
bool Unit::SetWalk(bool enable)
@@ -20435,22 +20334,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)
@@ -20497,12 +20413,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;
}
@@ -20532,13 +20449,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
@@ -20592,11 +20509,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;
}
@@ -20626,12 +20543,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;
}
@@ -20821,7 +20738,10 @@ void Unit::PatchValuesUpdate(ByteBuffer& valuesUpdateBuf, BuildValuesCachePosPoi
appendValue &= ~UNIT_NPC_FLAG_SPELLCLICK;
if (!target->CanSeeVendor(creature))
+ {
+ appendValue &= ~UNIT_NPC_FLAG_REPAIR;
appendValue &= ~UNIT_NPC_FLAG_VENDOR_MASK;
+ }
if (!creature->IsValidTrainerForPlayer(target, &appendValue))
appendValue &= ~UNIT_NPC_FLAG_TRAINER;
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 726addd949..b50e486ba6 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -26,6 +26,7 @@
#include "ItemTemplate.h"
#include "MotionMaster.h"
#include "Object.h"
+#include "PetDefines.h"
#include "SharedDefines.h"
#include "SpellAuraDefines.h"
#include "SpellDefines.h"
@@ -623,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:
@@ -944,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)
{
@@ -1677,12 +1700,10 @@ public:
void propagateSpeedChange() { GetMotionMaster()->propagateSpeedChange(); }
void SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint32 TransitTime, SplineFlags sf = SPLINEFLAG_WALK_MODE); // pussywizard: need to just send packet, with no movement/spline
- void MonsterMoveWithSpeed(float x, float y, float z, float speed);
- //void SetFacing(float ori, WorldObject* obj = nullptr);
- //void SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint8 type, uint32 MovementFlags, uint32 Time, Player* player = nullptr);
+ 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);
@@ -1921,8 +1942,8 @@ public:
void SetInFront(WorldObject const* target);
void SetFacingTo(float ori);
- void SetFacingToObject(WorldObject* object);
- void SetTimedFacingToObject(WorldObject* object, uint32 time); // Reset to home orientation after given time
+ // <timed>Reset to home orientation after given time
+ void SetFacingToObject(WorldObject* object, Milliseconds timed = 0ms);
bool isInAccessiblePlaceFor(Creature const* c) const;
bool isInFrontInMap(Unit const* target, float distance, float arc = M_PI) const;
@@ -1964,9 +1985,10 @@ public:
void SendPlaySpellVisual(uint32 id);
void SendPlaySpellImpact(ObjectGuid guid, uint32 id);
- void SendPetActionFeedback (uint8 msg);
- void SendPetTalk (uint32 pettalk);
- void SendPetAIReaction(ObjectGuid guid);
+ void SendPetActionFeedback(uint8 msg) const;
+ void SendPetActionSound(PetAction action) const;
+ void SendPetDismissSound() const;
+ void SendPetAIReaction(ObjectGuid guid) const;
void SendPeriodicAuraLog(SpellPeriodicAuraLogInfo* pInfo);
@@ -2066,7 +2088,8 @@ protected:
void SetFeared(bool apply, Unit* fearedBy = nullptr, bool isFear = false);
void SetConfused(bool apply);
void SetStunned(bool apply);
- void SetRooted(bool apply, bool isStun = false);
+ void SetRooted(bool apply, bool stun = false, bool logout = false);
+ void SendMoveRoot(bool state);
//----------- Protected variables ----------//
UnitAI* i_AI;
diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h
index 1875a96aae..72d19e7ebb 100644
--- a/src/server/game/Entities/Unit/UnitDefines.h
+++ b/src/server/game/Entities/Unit/UnitDefines.h
@@ -197,7 +197,9 @@ enum UnitState
UNIT_STATE_IGNORE_PATHFINDING = 0x10000000, // do not use pathfinding in any MovementGenerator
UNIT_STATE_NO_ENVIRONMENT_UPD = 0x20000000,
- UNIT_STATE_NO_COMBAT_MOVEMENT = 0x40000000, // serverside only - should not be changed outside the core and should be placed at the end
+ // serverside region
+ UNIT_STATE_NO_COMBAT_MOVEMENT = 0x40000000, // should not be changed outside the core and should be placed at the end
+ UNIT_STATE_LOGOUT_TIMER = 0x80000000, // Unit is logging out
UNIT_STATE_ALL_STATE_SUPPORTED = UNIT_STATE_DIED | UNIT_STATE_MELEE_ATTACKING | UNIT_STATE_STUNNED | UNIT_STATE_ROAMING | UNIT_STATE_CHASE
| UNIT_STATE_FLEEING | UNIT_STATE_IN_FLIGHT | UNIT_STATE_FOLLOW | UNIT_STATE_ROOT | UNIT_STATE_CONFUSED
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/Entities/Vehicle/Vehicle.h b/src/server/game/Entities/Vehicle/Vehicle.h
index 3d5115e7f0..efc2d7aac3 100644
--- a/src/server/game/Entities/Vehicle/Vehicle.h
+++ b/src/server/game/Entities/Vehicle/Vehicle.h
@@ -100,12 +100,12 @@ private:
class VehicleDespawnEvent : public BasicEvent
{
public:
- VehicleDespawnEvent(Unit& self, uint32 duration) : _self(self), _duration(duration) { }
+ VehicleDespawnEvent(Unit& self, Milliseconds duration) : _self(self), _duration(duration) { }
bool Execute(uint64 e_time, uint32 p_time) override;
protected:
Unit& _self;
- uint32 _duration;
+ Milliseconds _duration;
};
#endif
diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp
index f9a4cb01e3..22a9d39b15 100644
--- a/src/server/game/Globals/ObjectAccessor.cpp
+++ b/src/server/game/Globals/ObjectAccessor.cpp
@@ -112,7 +112,7 @@ namespace PlayerNameMapHolder
} // namespace PlayerNameMapHolder
-WorldObject* ObjectAccessor::GetWorldObject(WorldObject const& p, ObjectGuid const guid)
+WorldObject* ObjectAccessor::GetWorldObject(WorldObject const& p, ObjectGuid const& guid)
{
switch (guid.GetHigh())
{
@@ -138,7 +138,7 @@ WorldObject* ObjectAccessor::GetWorldObject(WorldObject const& p, ObjectGuid con
return nullptr;
}
-Object* ObjectAccessor::GetObjectByTypeMask(WorldObject const& p, ObjectGuid const guid, uint32 typemask)
+Object* ObjectAccessor::GetObjectByTypeMask(WorldObject const& p, ObjectGuid const& guid, uint32 typemask)
{
switch (guid.GetHigh())
{
@@ -176,27 +176,27 @@ Object* ObjectAccessor::GetObjectByTypeMask(WorldObject const& p, ObjectGuid con
return nullptr;
}
-Corpse* ObjectAccessor::GetCorpse(WorldObject const& u, ObjectGuid const guid)
+Corpse* ObjectAccessor::GetCorpse(WorldObject const& u, ObjectGuid const& guid)
{
return u.GetMap()->GetCorpse(guid);
}
-GameObject* ObjectAccessor::GetGameObject(WorldObject const& u, ObjectGuid const guid)
+GameObject* ObjectAccessor::GetGameObject(WorldObject const& u, ObjectGuid const& guid)
{
return u.GetMap()->GetGameObject(guid);
}
-Transport* ObjectAccessor::GetTransport(WorldObject const& u, ObjectGuid const guid)
+Transport* ObjectAccessor::GetTransport(WorldObject const& u, ObjectGuid const& guid)
{
return u.GetMap()->GetTransport(guid);
}
-DynamicObject* ObjectAccessor::GetDynamicObject(WorldObject const& u, ObjectGuid const guid)
+DynamicObject* ObjectAccessor::GetDynamicObject(WorldObject const& u, ObjectGuid const& guid)
{
return u.GetMap()->GetDynamicObject(guid);
}
-Unit* ObjectAccessor::GetUnit(WorldObject const& u, ObjectGuid const guid)
+Unit* ObjectAccessor::GetUnit(WorldObject const& u, ObjectGuid const& guid)
{
if (guid.IsPlayer())
return GetPlayer(u, guid);
@@ -207,17 +207,17 @@ Unit* ObjectAccessor::GetUnit(WorldObject const& u, ObjectGuid const guid)
return GetCreature(u, guid);
}
-Creature* ObjectAccessor::GetCreature(WorldObject const& u, ObjectGuid const guid)
+Creature* ObjectAccessor::GetCreature(WorldObject const& u, ObjectGuid const& guid)
{
return u.GetMap()->GetCreature(guid);
}
-Pet* ObjectAccessor::GetPet(WorldObject const& u, ObjectGuid const guid)
+Pet* ObjectAccessor::GetPet(WorldObject const& u, ObjectGuid const& guid)
{
return u.GetMap()->GetPet(guid);
}
-Player* ObjectAccessor::GetPlayer(Map const* m, ObjectGuid const guid)
+Player* ObjectAccessor::GetPlayer(Map const* m, ObjectGuid const& guid)
{
if (Player * player = HashMapHolder<Player>::Find(guid))
if (player->IsInWorld() && player->GetMap() == m)
@@ -226,12 +226,12 @@ Player* ObjectAccessor::GetPlayer(Map const* m, ObjectGuid const guid)
return nullptr;
}
-Player* ObjectAccessor::GetPlayer(WorldObject const& u, ObjectGuid const guid)
+Player* ObjectAccessor::GetPlayer(WorldObject const& u, ObjectGuid const& guid)
{
return GetPlayer(u.GetMap(), guid);
}
-Creature* ObjectAccessor::GetCreatureOrPetOrVehicle(WorldObject const& u, ObjectGuid const guid)
+Creature* ObjectAccessor::GetCreatureOrPetOrVehicle(WorldObject const& u, ObjectGuid const& guid)
{
if (guid.IsPet())
return GetPet(u, guid);
diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h
index 2fbe70bf5b..2a78eee0d1 100644
--- a/src/server/game/Globals/ObjectAccessor.h
+++ b/src/server/game/Globals/ObjectAccessor.h
@@ -60,18 +60,18 @@ public:
namespace ObjectAccessor
{
// these functions return objects only if in map of specified object
- WorldObject* GetWorldObject(WorldObject const&, ObjectGuid const guid);
- Object* GetObjectByTypeMask(WorldObject const&, ObjectGuid const guid, uint32 typemask);
- Corpse* GetCorpse(WorldObject const& u, ObjectGuid const guid);
- GameObject* GetGameObject(WorldObject const& u, ObjectGuid const guid);
- Transport* GetTransport(WorldObject const& u, ObjectGuid const guid);
- DynamicObject* GetDynamicObject(WorldObject const& u, ObjectGuid const guid);
- Unit* GetUnit(WorldObject const&, ObjectGuid const guid);
- Creature* GetCreature(WorldObject const& u, ObjectGuid const guid);
- Pet* GetPet(WorldObject const&, ObjectGuid const guid);
- Player* GetPlayer(Map const*, ObjectGuid const guid);
- Player* GetPlayer(WorldObject const&, ObjectGuid const guid);
- Creature* GetCreatureOrPetOrVehicle(WorldObject const&, ObjectGuid const);
+ WorldObject* GetWorldObject(WorldObject const&, ObjectGuid const& guid);
+ Object* GetObjectByTypeMask(WorldObject const&, ObjectGuid const& guid, uint32 typemask);
+ Corpse* GetCorpse(WorldObject const& u, ObjectGuid const& guid);
+ GameObject* GetGameObject(WorldObject const& u, ObjectGuid const& guid);
+ Transport* GetTransport(WorldObject const& u, ObjectGuid const& guid);
+ DynamicObject* GetDynamicObject(WorldObject const& u, ObjectGuid const& guid);
+ Unit* GetUnit(WorldObject const&, ObjectGuid const& guid);
+ Creature* GetCreature(WorldObject const& u, ObjectGuid const& guid);
+ Pet* GetPet(WorldObject const&, ObjectGuid const& guid);
+ Player* GetPlayer(Map const*, ObjectGuid const& guid);
+ Player* GetPlayer(WorldObject const&, ObjectGuid const& guid);
+ Creature* GetCreatureOrPetOrVehicle(WorldObject const&, ObjectGuid const&);
// these functions return objects if found in whole world
// ACCESS LIKE THAT IS NOT THREAD SAFE
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index c532f5fe7e..ff904bb177 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -1122,8 +1122,22 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo)
if (!cInfo->Models.size())
LOG_ERROR("sql.sql", "Creature (Entry: {}) does not have any existing display id in creature_template_model.", cInfo->Entry);
- else if (std::accumulate(cInfo->Models.begin(), cInfo->Models.end(), 0.0f, [](float sum, CreatureModel const& model) { return sum + model.Probability; }) <= 0.0f)
- LOG_ERROR("sql.sql", "Creature (Entry: {}) has zero total chance for all models in creature_template_model.", cInfo->Entry);
+ else
+ {
+ float const totalProbability = std::accumulate(cInfo->Models.begin(), cInfo->Models.end(), 0.0f, [](float sum, CreatureModel const& model) { return sum + model.Probability; });
+
+ if (totalProbability <= 0.0f)
+ { // There are many cases in official data of all models having a probability of 0. Believe to be treated equivalent to equal chance ONLY if all are zeroed
+ if (totalProbability == 0.0f)
+ LOG_DEBUG("sql.sql", "Creature (Entry: {}) has zero total chance for all models in creature_template_model. Setting all to 1.0.", cInfo->Entry);
+ else // Custom, likely bad data
+ LOG_ERROR("sql.sql", "Creature (Entry: {}) has less than zero total chance for all models in creature_template_model. Setting all to 1.0.", cInfo->Entry);
+
+ auto& models = const_cast<CreatureTemplate*>(cInfo)->Models;
+ for (auto& model : models)
+ model.Probability = 1.0f;
+ }
+ }
if (!cInfo->unit_class || ((1 << (cInfo->unit_class - 1)) & CLASSMASK_ALL_CREATURES) == 0)
{
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/CalendarHandler.cpp b/src/server/game/Handlers/CalendarHandler.cpp
index 53cccbf4e0..6bb531636f 100644
--- a/src/server/game/Handlers/CalendarHandler.cpp
+++ b/src/server/game/Handlers/CalendarHandler.cpp
@@ -35,6 +35,7 @@ Copied events should probably have a new owner
#include "ArenaTeamMgr.h"
#include "CalendarMgr.h"
+#include "CalendarPackets.h"
#include "DatabaseEnv.h"
#include "DisableMgr.h"
#include "GameEventMgr.h"
@@ -184,43 +185,31 @@ void WorldSession::HandleCalendarGetCalendar(WorldPacket& /*recvData*/)
SendPacket(&data);
}
-void WorldSession::HandleCalendarGetEvent(WorldPacket& recvData)
+void WorldSession::HandleCalendarGetEvent(WorldPackets::Calendar::GetEvent& packet)
{
- uint64 eventId;
- recvData >> eventId;
+ LOG_DEBUG("network", "CMSG_CALENDAR_GET_EVENT. Player [{}] Event [{}]", _player->GetGUID().ToString(), packet.EventId);
- LOG_DEBUG("network", "CMSG_CALENDAR_GET_EVENT. Player [{}] Event [{}]", _player->GetGUID().ToString(), eventId);
-
- if (CalendarEvent* calendarEvent = sCalendarMgr->GetEvent(eventId))
+ if (CalendarEvent* calendarEvent = sCalendarMgr->GetEvent(packet.EventId))
sCalendarMgr->SendCalendarEvent(_player->GetGUID(), *calendarEvent, CALENDAR_SENDTYPE_GET);
else
sCalendarMgr->SendCalendarCommandResult(_player->GetGUID(), CALENDAR_ERROR_EVENT_INVALID);
}
-void WorldSession::HandleCalendarGuildFilter(WorldPacket& recvData)
+void WorldSession::HandleCalendarGuildFilter(WorldPackets::Calendar::GuildFilter& packet)
{
LOG_DEBUG("network", "CMSG_CALENDAR_GUILD_FILTER [{}]", _player->GetGUID().ToString());
- uint32 minLevel;
- uint32 maxLevel;
- uint32 minRank;
-
- recvData >> minLevel >> maxLevel >> minRank;
-
if (Guild* guild = sGuildMgr->GetGuildById(_player->GetGuildId()))
- guild->MassInviteToEvent(this, minLevel, maxLevel, minRank);
+ guild->MassInviteToEvent(this, packet.MinimumLevel, packet.MaximumLevel, packet.MinimumRank);
- LOG_DEBUG("network", "CMSG_CALENDAR_GUILD_FILTER: Min level [{}], Max level [{}], Min rank [{}]", minLevel, maxLevel, minRank);
+ LOG_DEBUG("network", "CMSG_CALENDAR_GUILD_FILTER: Min level [{}], Max level [{}], Min rank [{}]", packet.MinimumLevel, packet.MaximumLevel, packet.MinimumRank);
}
-void WorldSession::HandleCalendarArenaTeam(WorldPacket& recvData)
+void WorldSession::HandleCalendarArenaTeam(WorldPackets::Calendar::ArenaTeam& packet)
{
LOG_DEBUG("network", "CMSG_CALENDAR_ARENA_TEAM [{}]", _player->GetGUID().ToString());
- uint32 arenaTeamId;
- recvData >> arenaTeamId;
-
- if (ArenaTeam* team = sArenaTeamMgr->GetArenaTeamById(arenaTeamId))
+ if (ArenaTeam* team = sArenaTeamMgr->GetArenaTeamById(packet.ArenaTeamId))
team->MassInviteToEvent(this);
}
@@ -763,14 +752,11 @@ void WorldSession::HandleCalendarEventModeratorStatus(WorldPacket& recvData)
sCalendarMgr->SendCalendarCommandResult(guid, CALENDAR_ERROR_EVENT_INVALID);
}
-void WorldSession::HandleCalendarComplain(WorldPacket& recvData)
+void WorldSession::HandleCalendarComplain(WorldPackets::Calendar::CalendarComplain& packet)
{
ObjectGuid guid = _player->GetGUID();
- uint64 eventId;
- ObjectGuid complainGUID;
- recvData >> eventId >> complainGUID;
- LOG_DEBUG("network", "CMSG_CALENDAR_COMPLAIN [{}] EventId [{}] guid [{}]", guid.ToString(), eventId, complainGUID.ToString());
+ LOG_DEBUG("network", "CMSG_CALENDAR_COMPLAIN [{}] EventId [{}] guid [{}]", guid.ToString(), packet.EventId, packet.ComplainGuid.ToString());
// what to do with complains?
}
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 1bb8ac6ed2..fa83cf3179 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -1164,8 +1164,17 @@ void WorldSession::HandlePlayerLoginToCharInWorld(Player* pCurrChar)
SendPacket(&data);
// Xinef: fix possible problem with flag UNIT_FLAG_STUNNED added during logout
- if (!pCurrChar->HasUnitState(UNIT_STATE_STUNNED))
+ if (pCurrChar->HasUnitState(UNIT_STATE_LOGOUT_TIMER))
+ {
+ pCurrChar->SetRooted(false, true, true);
pCurrChar->RemoveUnitFlag(UNIT_FLAG_STUNNED);
+ }
+
+ if (pCurrChar->GetPendingFlightChange() <= pCurrChar->GetMapChangeOrderCounter())
+ {
+ if (!pCurrChar->HasIncreaseMountedFlightSpeedAura() && !pCurrChar->HasFlyAura())
+ pCurrChar->m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_CAN_FLY);
+ }
pCurrChar->SendInitialPacketsBeforeAddToMap();
@@ -1754,9 +1763,21 @@ void WorldSession::HandleEquipmentSetSave(WorldPacket& recvData)
std::string name;
recvData >> name;
+ if (name.length() > 16) // Client limitation
+ {
+ LOG_ERROR("entities.player.cheat", "Character GUID {} tried to create equipment set {} with too long a name!", _player->GetGUID().ToString(), setGuid);
+ return;
+ }
+
std::string iconName;
recvData >> iconName;
+ if (iconName.length() > 100) // DB limitation
+ {
+ LOG_ERROR("entities.player.cheat", "Character GUID {} tried to create equipment set {} with too long an icon name!", _player->GetGUID().ToString(), setGuid);
+ return;
+ }
+
EquipmentSet eqSet;
eqSet.Guid = setGuid;
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 64673eb3eb..a1c09fb47d 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -468,7 +468,7 @@ void WorldSession::HandleLogoutRequestOpcode(WorldPackets::Character::LogoutRequ
GetPlayer()->SetStandState(UNIT_STAND_STATE_SIT);
}
- GetPlayer()->SetRooted(true);
+ GetPlayer()->SetRooted(true, true, true);
GetPlayer()->SetUnitFlag(UNIT_FLAG_STUNNED);
}
@@ -492,7 +492,7 @@ void WorldSession::HandleLogoutCancelOpcode(WorldPackets::Character::LogoutCance
// not remove flags if can't free move - its not set in Logout request code.
if (GetPlayer()->CanFreeMove())
{
- GetPlayer()->SetRooted(false);
+ GetPlayer()->SetRooted(false, true, true);
GetPlayer()->SetStandState(UNIT_STAND_STATE_STAND);
GetPlayer()->RemoveUnitFlag(UNIT_FLAG_STUNNED);
@@ -1138,45 +1138,18 @@ void WorldSession::HandleWhoisOpcode(WorldPacket& recv_data)
LOG_DEBUG("network", "Received whois command from player {} for character {}", GetPlayer()->GetName(), charname);
}
-void WorldSession::HandleComplainOpcode(WorldPacket& recv_data)
+void WorldSession::HandleComplainOpcode(WorldPackets::Misc::Complain& packet)
{
LOG_DEBUG("network", "WORLD: CMSG_COMPLAIN");
- uint8 spam_type; // 0 - mail, 1 - chat
- ObjectGuid spammer_guid;
- uint32 unk1 = 0;
- uint32 unk2 = 0;
- uint32 unk3 = 0;
- uint32 unk4 = 0;
- std::string description = "";
- recv_data >> spam_type; // unk 0x01 const, may be spam type (mail/chat)
- recv_data >> spammer_guid; // player guid
- switch (spam_type)
- {
- case 0:
- recv_data >> unk1; // const 0
- recv_data >> unk2; // probably mail id
- recv_data >> unk3; // const 0
- break;
- case 1:
- recv_data >> unk1; // probably language
- recv_data >> unk2; // message type?
- recv_data >> unk3; // probably channel id
- recv_data >> unk4; // unk random value
- recv_data >> description; // spam description string (messagetype, channel name, player name, message)
- break;
- }
-
// NOTE: all chat messages from this spammer automatically ignored by spam reporter until logout in case chat spam.
// if it's mail spam - ALL mails from this spammer automatically removed by client
// Complaint Received message
- WorldPacket data(SMSG_COMPLAIN_RESULT, 1);
- data << uint8(0);
- SendPacket(&data);
+ SendPacket(WorldPackets::Misc::ComplainResult().Write());
LOG_DEBUG("network", "REPORT SPAM: type {}, {}, unk1 {}, unk2 {}, unk3 {}, unk4 {}, message {}",
- spam_type, spammer_guid.ToString(), unk1, unk2, unk3, unk4, description);
+ packet.SpamType, packet.SpammerGuid.ToString(), packet.Unk1, packet.Unk2, packet.Unk3, packet.Unk4, packet.Description);
}
void WorldSession::HandleRealmSplitOpcode(WorldPacket& recv_data)
@@ -1517,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;
@@ -1534,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));
@@ -1543,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())
@@ -1551,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 c738365b53..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,79 +975,44 @@ void WorldSession::ComputeNewClockDelta()
void WorldSession::HandleMoveRootAck(WorldPacket& recvData)
{
- ObjectGuid guid;
- recvData >> guid.ReadAsPacked();
-
- Unit* mover = _player->m_mover;
- if (!mover || guid != mover->GetGUID())
- {
- recvData.rfinish(); // prevent warnings spam
- return;
- }
-
- uint32 movementCounter;
- recvData >> movementCounter;
+ 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);
- /* process position-change */
- int64 movementTime = (int64) movementInfo.time + _timeSyncClockDelta;
- if (_timeSyncClockDelta == 0 || movementTime < 0 || movementTime > 0xFFFFFFFF)
- {
- LOG_INFO("misc", "The computed movement time using clockDelta is erronous. Using fallback instead");
- movementInfo.time = getMSTime();
- }
- else
- {
- movementInfo.time = (uint32)movementTime;
- }
-
- movementInfo.guid = mover->GetGUID();
- mover->m_movementInfo = movementInfo;
- mover->UpdatePosition(movementInfo.pos);
-
-}
-
-void WorldSession::HandleMoveUnRootAck(WorldPacket& recvData)
-{
- ObjectGuid guid;
- recvData >> guid.ReadAsPacked();
-
Unit* mover = _player->m_mover;
- if (!mover || guid != mover->GetGUID())
- {
- recvData.rfinish(); // prevent warnings spam
- return;
- }
- uint32 movementCounter;
- recvData >> movementCounter;
-
- MovementInfo movementInfo;
- movementInfo.guid = guid;
- ReadMovementInfo(recvData, &movementInfo);
+ if (mover->GetGUID() != guid)
+ return;
- /* process position-change */
- int64 movementTime = (int64) movementInfo.time + _timeSyncClockDelta;
- if (_timeSyncClockDelta == 0 || movementTime < 0 || movementTime > 0xFFFFFFFF)
+ if (opcode == CMSG_FORCE_MOVE_UNROOT_ACK) // unroot case
{
- LOG_INFO("misc", "The computed movement time using clockDelta is erronous. Using fallback instead");
- movementInfo.time = getMSTime();
+ if (!mover->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_ROOT))
+ return;
}
- else
+ else // root case
{
- movementInfo.time = (uint32)movementTime;
+ if (mover->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_ROOT))
+ return;
}
- if (G3D::fuzzyEq(movementInfo.fallTime, 0.f))
- {
- movementInfo.RemoveMovementFlag(MOVEMENTFLAG_FALLING);
- }
+ // old map - async processing, ignore
+ if (counter <= _player->GetMapChangeOrderCounter())
+ return;
- movementInfo.guid = mover->GetGUID();
- mover->m_movementInfo = movementInfo;
- mover->UpdatePosition(movementInfo.pos);
+ if (!ProcessMovementInfo(movementInfo, mover, _player, recvData))
+ return;
+
+ 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/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp
index 38b66926e5..5234684c7e 100644
--- a/src/server/game/Handlers/PetHandler.cpp
+++ b/src/server/game/Handlers/PetHandler.cpp
@@ -262,8 +262,8 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe
pet->ToCreature()->AI()->AttackStart(TargetUnit);
//10% chance to play special pet attack talk, else growl
- if (pet->IsPet() && ((Pet*)pet)->getPetType() == SUMMON_PET && pet != TargetUnit && urand(0, 100) < 10)
- pet->SendPetTalk((uint32)PET_TALK_ATTACK);
+ if (pet->IsPet() && pet->ToPet()->getPetType() == SUMMON_PET && pet != TargetUnit && roll_chance_i(10))
+ pet->SendPetActionSound(PET_ACTION_ATTACK);
else
{
// 90% chance for pet and 100% chance for charmed creature
@@ -297,8 +297,11 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe
if (pet->ToPet()->getPetType() == HUNTER_PET)
GetPlayer()->RemovePet(pet->ToPet(), PET_SAVE_AS_DELETED);
else
+ {
+ pet->SendPetDismissSound();
//dismissing a summoned pet is like killing them (this prevents returning a soulshard...)
pet->setDeathState(DeathState::Corpse);
+ }
}
else if (pet->HasUnitTypeMask(UNIT_MASK_MINION | UNIT_MASK_SUMMON | UNIT_MASK_GUARDIAN | UNIT_MASK_CONTROLLABLE_GUARDIAN))
{
@@ -413,8 +416,8 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe
//10% chance to play special pet attack talk, else growl
//actually this only seems to happen on special spells, fire shield for imp, torment for voidwalker, but it's stupid to check every spell
- if (pet->IsPet() && (((Pet*)pet)->getPetType() == SUMMON_PET) && (pet != unit_target) && (urand(0, 100) < 10))
- pet->SendPetTalk((uint32)PET_TALK_SPECIAL_SPELL);
+ if (pet->IsPet() && (pet->ToPet()->getPetType() == SUMMON_PET) && (pet != unit_target) && roll_chance_i(10))
+ pet->SendPetActionSound(PET_ACTION_SPECIAL_SPELL);
else
{
pet->SendPetAIReaction(guid1);
@@ -509,8 +512,8 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe
pet->ToCreature()->AI()->AttackStart(TargetUnit);
- if (pet->IsPet() && ((Pet*)pet)->getPetType() == SUMMON_PET && pet != TargetUnit && urand(0, 100) < 10)
- pet->SendPetTalk((uint32)PET_TALK_SPECIAL_SPELL);
+ if (pet->IsPet() && pet->ToPet()->getPetType() == SUMMON_PET && pet != TargetUnit && roll_chance_i(10))
+ pet->SendPetActionSound(PET_ACTION_SPECIAL_SPELL);
else
pet->SendPetAIReaction(guid1);
}
@@ -558,8 +561,8 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe
pet->GetMotionMaster()->MoveFollow(unit_target, PET_FOLLOW_DIST, rand_norm() * 2 * M_PI);
- if (pet->IsPet() && ((Pet*)pet)->getPetType() == SUMMON_PET && pet != unit_target && urand(0, 100) < 10)
- pet->SendPetTalk((uint32)PET_TALK_SPECIAL_SPELL);
+ if (pet->IsPet() && pet->ToPet()->getPetType() == SUMMON_PET && pet != unit_target && roll_chance_i(10))
+ pet->SendPetActionSound(PET_ACTION_SPECIAL_SPELL);
else
{
pet->SendPetAIReaction(guid1);
@@ -1059,8 +1062,8 @@ void WorldSession::HandlePetCastSpellOpcode(WorldPacket& recvPacket)
{
// 10% chance to play special pet attack talk, else growl
// actually this only seems to happen on special spells, fire shield for imp, torment for voidwalker, but it's stupid to check every spell
- if (pet->getPetType() == SUMMON_PET && (urand(0, 100) < 10))
- pet->SendPetTalk(PET_TALK_SPECIAL_SPELL);
+ if (pet->getPetType() == SUMMON_PET && roll_chance_i(10))
+ pet->SendPetActionSound(PET_ACTION_SPECIAL_SPELL);
else
pet->SendPetAIReaction(guid);
}
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 de0e4a9bd6..3508fb015c 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -417,12 +417,12 @@ void Map::UpdatePlayerZoneStats(uint32 oldZone, uint32 newZone)
if (oldZone != MAP_INVALID_ZONE)
{
uint32& oldZoneCount = _zonePlayerCountMap[oldZone];
- if (!oldZoneCount)
- LOG_ERROR("maps", "A player left zone {} (went to {}) - but there were no players in the zone!", oldZone, newZone);
- else
+ if (oldZoneCount)
--oldZoneCount;
}
- ++_zonePlayerCountMap[newZone];
+
+ if (newZone != MAP_INVALID_ZONE)
+ ++_zonePlayerCountMap[newZone];
}
void Map::Update(const uint32 t_diff, const uint32 s_diff, bool /*thread*/)
@@ -696,8 +696,8 @@ struct ResetNotifier
void Map::RemovePlayerFromMap(Player* player, bool remove)
{
- // Before leaving map, update zone/area for stats
- player->UpdateZone(MAP_INVALID_ZONE, 0);
+ UpdatePlayerZoneStats(player->GetZoneId(), MAP_INVALID_ZONE);
+
player->getHostileRefMgr().deleteReferences(true); // pussywizard: multithreading crashfix
player->RemoveFromWorld();
@@ -725,8 +725,6 @@ void Map::RemoveFromMap(T* obj, bool remove)
obj->RemoveFromWorld();
obj->RemoveFromGrid();
- if (obj->IsFarVisible())
- RemoveWorldObjectFromFarVisibleMap(obj);
obj->ResetMap();
@@ -1693,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)
@@ -1712,7 +1710,7 @@ void Map::SendRemoveTransports(Player* player)
WorldPacket packet;
transData.BuildPacket(packet);
- player->GetSession()->SendPacket(&packet);
+ player->SendDirectMessage(&packet);
}
void Map::SendObjectUpdates()
@@ -1732,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
}
}
@@ -1852,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);
@@ -2057,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);
}
}
@@ -2120,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());
@@ -2134,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)
{
@@ -2229,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);
}
@@ -2358,27 +2356,27 @@ void BattlegroundMap::RemoveAllPlayers()
player->TeleportTo(player->GetEntryPoint());
}
-Corpse* Map::GetCorpse(ObjectGuid const guid)
+Corpse* Map::GetCorpse(ObjectGuid const& guid)
{
return _objectsStore.Find<Corpse>(guid);
}
-Creature* Map::GetCreature(ObjectGuid const guid)
+Creature* Map::GetCreature(ObjectGuid const& guid)
{
return _objectsStore.Find<Creature>(guid);
}
-GameObject* Map::GetGameObject(ObjectGuid const guid)
+GameObject* Map::GetGameObject(ObjectGuid const& guid)
{
return _objectsStore.Find<GameObject>(guid);
}
-Pet* Map::GetPet(ObjectGuid const guid)
+Pet* Map::GetPet(ObjectGuid const& guid)
{
return dynamic_cast<Pet*>(_objectsStore.Find<Creature>(guid));
}
-Transport* Map::GetTransport(ObjectGuid guid)
+Transport* Map::GetTransport(ObjectGuid const& guid)
{
if (guid.GetHigh() != HighGuid::Mo_Transport && guid.GetHigh() != HighGuid::Transport)
return nullptr;
@@ -2387,7 +2385,7 @@ Transport* Map::GetTransport(ObjectGuid guid)
return go ? go->ToTransport() : nullptr;
}
-DynamicObject* Map::GetDynamicObject(ObjectGuid guid)
+DynamicObject* Map::GetDynamicObject(ObjectGuid const& guid)
{
return _objectsStore.Find<DynamicObject>(guid);
}
@@ -2679,7 +2677,7 @@ void Map::RemoveCorpse(Corpse* corpse)
_corpseBones.erase(corpse);
}
-Corpse* Map::ConvertCorpseToBones(ObjectGuid const ownerGuid, bool insignia /*= false*/)
+Corpse* Map::ConvertCorpseToBones(ObjectGuid const& ownerGuid, bool insignia /*= false*/)
{
Corpse* corpse = GetCorpseByPlayer(ownerGuid);
if (!corpse)
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index 20551da8a0..c820b9c291 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -338,12 +338,12 @@ public:
GameObject* SummonGameObject(uint32 entry, Position const& pos, float rotation0 = 0.0f, float rotation1 = 0.0f, float rotation2 = 0.0f, float rotation3 = 0.0f, uint32 respawnTime = 100, bool checkTransport = true);
void SummonCreatureGroup(uint8 group, std::list<TempSummon*>* list = nullptr);
- Corpse* GetCorpse(ObjectGuid const guid);
- Creature* GetCreature(ObjectGuid const guid);
- GameObject* GetGameObject(ObjectGuid const guid);
- Transport* GetTransport(ObjectGuid const guid);
- DynamicObject* GetDynamicObject(ObjectGuid const guid);
- Pet* GetPet(ObjectGuid const guid);
+ Corpse* GetCorpse(ObjectGuid const& guid);
+ Creature* GetCreature(ObjectGuid const& guid);
+ GameObject* GetGameObject(ObjectGuid const& guid);
+ Transport* GetTransport(ObjectGuid const& guid);
+ DynamicObject* GetDynamicObject(ObjectGuid const& guid);
+ Pet* GetPet(ObjectGuid const& guid);
MapStoredObjectTypesContainer& GetObjectsStore() { return _objectsStore; }
@@ -438,7 +438,7 @@ public:
void DeleteCorpseData();
void AddCorpse(Corpse* corpse);
void RemoveCorpse(Corpse* corpse);
- Corpse* ConvertCorpseToBones(ObjectGuid const ownerGuid, bool insignia = false);
+ Corpse* ConvertCorpseToBones(ObjectGuid const& ownerGuid, bool insignia = false);
void RemoveOldCorpses();
static void DeleteRespawnTimesInDB(uint16 mapId, uint32 instanceId);
@@ -514,6 +514,14 @@ public:
void RemoveWorldObjectFromZoneWideVisibleMap(uint32 zoneId, WorldObject* obj);
ZoneWideVisibleWorldObjectsSet const* GetZoneWideVisibleWorldObjectsForZone(uint32 zoneId) const;
+ [[nodiscard]] uint32 GetPlayerCountInZone(uint32 zoneId) const
+ {
+ if (auto const& it = _zonePlayerCountMap.find(zoneId); it != _zonePlayerCountMap.end())
+ return it->second;
+
+ return 0;
+ };
+
private:
template<class T> void InitializeObject(T* obj);
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/Maps/TransportMgr.cpp b/src/server/game/Maps/TransportMgr.cpp
index f065ccf56a..a024a02b97 100644
--- a/src/server/game/Maps/TransportMgr.cpp
+++ b/src/server/game/Maps/TransportMgr.cpp
@@ -448,31 +448,45 @@ void TransportMgr::SpawnContinentTransports()
LOG_INFO("server.loading", ">> Spawned {} continent motion transports in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
}
+ // Preloads Deeprun Tram to fix issues with Subway carts syncronization
+ /// @todo: This is a temporary workaround. Consider removing TransportMgr::PreloadGridsFromQuery() as part of fix.
+ /**
+ Takenbacon: "In the long run the most likely ideal fix would be to always spawn all transport types (and thus loading their grid) on map creation"
+ See https://github.com/azerothcore/azerothcore-wotlk/pull/23009 for more details.
+ */
+ PreloadGridsFromQuery("SELECT map, position_x, position_y FROM gameobject g JOIN gameobject_template t ON g.id = t.entry WHERE t.type = 11 AND g.map = 369", count);
+
if (sWorld->getBoolConfig(CONFIG_ENABLE_CONTINENT_TRANSPORT_PRELOADING))
{
// pussywizard: preload grids for continent static transports
- QueryResult result2 = WorldDatabase.Query("SELECT map, position_x, position_y FROM gameobject g JOIN gameobject_template t ON g.id = t.entry WHERE t.type = 11");
+ PreloadGridsFromQuery("SELECT map, position_x, position_y FROM gameobject g JOIN gameobject_template t ON g.id = t.entry WHERE t.type = 11 AND g.map != 369", count);
+ LOG_INFO("server.loading", ">> Preloaded grids for {} continent static transports in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
+ }
+}
- if (result2)
+void TransportMgr::PreloadGridsFromQuery(std::string const& query, uint32& count)
+{
+ if (QueryResult result = WorldDatabase.Query(query))
+ {
+ do
{
- do
- {
- Field* fields = result2->Fetch();
- uint16 mapId = fields[0].Get<uint16>();
- float x = fields[1].Get<float>();
- float y = fields[2].Get<float>();
+ Field* fields = result->Fetch();
+ uint16 mapId = fields[0].Get<uint16>();
+ float x = fields[1].Get<float>();
+ float y = fields[2].Get<float>();
- MapEntry const* mapEntry = sMapStore.LookupEntry(mapId);
- if (mapEntry && !mapEntry->Instanceable())
+ if (MapEntry const* mapEntry = sMapStore.LookupEntry(mapId))
+ {
+ if (!mapEntry->Instanceable())
+ {
if (Map* map = sMapMgr->CreateBaseMap(mapId))
{
map->LoadGrid(x, y);
++count;
}
- } while (result2->NextRow());
- }
-
- LOG_INFO("server.loading", ">> Preloaded grids for {} continent static transports in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
+ }
+ }
+ } while (result->NextRow());
}
}
diff --git a/src/server/game/Maps/TransportMgr.h b/src/server/game/Maps/TransportMgr.h
index 9767ab3359..6f712657e0 100644
--- a/src/server/game/Maps/TransportMgr.h
+++ b/src/server/game/Maps/TransportMgr.h
@@ -158,6 +158,8 @@ private:
TransportInstanceMap _instanceTransports;
TransportAnimationContainer _transportAnimations;
+
+ void PreloadGridsFromQuery(std::string const& query, uint32& count);
};
#define sTransportMgr TransportMgr::instance()
diff --git a/src/server/game/Miscellaneous/Formulas.cpp b/src/server/game/Miscellaneous/Formulas.cpp
index 76c6c292d8..66bc53b8ff 100644
--- a/src/server/game/Miscellaneous/Formulas.cpp
+++ b/src/server/game/Miscellaneous/Formulas.cpp
@@ -84,14 +84,9 @@ uint32 Acore::XP::Gain(Player* player, Unit* unit, bool isBattleGround /*= false
if (gain && creature)
{
if (creature->isElite())
- {
- // Elites in instances have a 2.75x XP bonus instead of the regular 2x world bonus.
- if (unit->GetMap() && unit->GetMap()->IsDungeon())
- xpMod *= 2.75f;
- else
- xpMod *= 2.0f;
- }
+ xpMod *= 2.0f;
+ // Instanced mobs (particularly bosses) oftentimes have higher bonuses, especially in later content levels
xpMod *= creature->GetCreatureTemplate()->ModExperience;
}
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index 5658e4147d..5061f873ce 100644
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -978,7 +978,8 @@ enum AcoreStrings
LANG_GUILD_INFO_EXTRA_INFO = 1183,
LANG_GUILD_INFO_RANKS = 1184,
LANG_GUILD_INFO_RANKS_LIST = 1185,
- // Room for more level 3 1186-1198 not used
+ LANG_COMMAND_BEASTMASTER_MODE = 1186,
+ // Room for more level 3 1187-1198 not used
// Debug commands
LANG_DO_NOT_USE_6X_DEBUG_AREATRIGGER_LEFT = 1999,
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp
index 2b2aba6ef9..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()
{
@@ -387,6 +388,7 @@ void MotionMaster::MoveBackwards(Unit* target, float dist)
Movement::MoveSplineInit init(_owner);
init.MoveTo(point.x, point.y, point.z, false);
+ init.SetWalk(true);
init.SetFacing(target);
init.SetOrientationInversed();
init.Launch();
@@ -469,7 +471,7 @@ void MotionMaster::MoveFollow(Unit* target, float dist, float angle, MovementSlo
*
* For transition movement between the ground and the air, use MoveLand or MoveTakeoff instead.
*/
-void MotionMaster::MovePoint(uint32 id, float x, float y, float z, bool generatePath, bool forceDestination, MovementSlot slot, float orientation /* = 0.0f*/)
+void MotionMaster::MovePoint(uint32 id, float x, float y, float z, ForcedMovement forcedMovement, float speed, float orientation, bool generatePath, bool forceDestination, MovementSlot slot)
{
if (_owner->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE))
return;
@@ -477,16 +479,16 @@ void MotionMaster::MovePoint(uint32 id, float x, float y, float z, bool generate
if (_owner->IsPlayer())
{
LOG_DEBUG("movement.motionmaster", "Player ({}) targeted point (Id: {} X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), id, x, y, z);
- Mutate(new PointMovementGenerator<Player>(id, x, y, z, 0.0f, orientation, nullptr, generatePath, forceDestination), slot);
+ Mutate(new PointMovementGenerator<Player>(id, x, y, z, forcedMovement, speed, orientation, nullptr, generatePath, forceDestination), slot);
}
else
{
LOG_DEBUG("movement.motionmaster", "Creature ({}) targeted point (ID: {} X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), id, x, y, z);
- Mutate(new PointMovementGenerator<Creature>(id, x, y, z, 0.0f, orientation, nullptr, generatePath, forceDestination), slot);
+ Mutate(new PointMovementGenerator<Creature>(id, x, y, z, forcedMovement, speed, orientation, nullptr, generatePath, forceDestination), slot);
}
}
-void MotionMaster::MoveSplinePath(Movement::PointsArray* path)
+void MotionMaster::MoveSplinePath(Movement::PointsArray* path, ForcedMovement forcedMovement)
{
// Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
if (_owner->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE))
@@ -494,27 +496,43 @@ void MotionMaster::MoveSplinePath(Movement::PointsArray* path)
if (_owner->IsPlayer())
{
- Mutate(new EscortMovementGenerator<Player>(path), MOTION_SLOT_ACTIVE);
+ Mutate(new EscortMovementGenerator<Player>(forcedMovement, path), MOTION_SLOT_ACTIVE);
}
else
{
- Mutate(new EscortMovementGenerator<Creature>(path), MOTION_SLOT_ACTIVE);
+ Mutate(new EscortMovementGenerator<Creature>(forcedMovement, path), MOTION_SLOT_ACTIVE);
}
}
-void MotionMaster::MoveSplinePath(uint32 path_id)
+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)
+ {
+ 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)
{
- WaypointData const* node = path->at(i);
- points->push_back(G3D::Vector3(node->x, node->y, node->z));
+ 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);
+ MoveSplinePath(&points, forcedMovement);
}
/**
@@ -539,8 +557,8 @@ void MotionMaster::MoveLand(uint32 id, Position const& pos, float speed /* = 0.0
}
init.SetAnimation(Movement::ToGround);
- init.Launch();
- Mutate(new EffectMovementGenerator(id), MOTION_SLOT_ACTIVE);
+
+ Mutate(new EffectMovementGenerator(init, id), MOTION_SLOT_ACTIVE);
}
/**
@@ -569,16 +587,12 @@ void MotionMaster::MoveTakeoff(uint32 id, Position const& pos, float speed /* =
init.MoveTo(x, y, z);
if (speed > 0.0f)
- {
init.SetVelocity(speed);
- }
if (!skipAnimation)
- {
init.SetAnimation(Movement::ToFly);
- }
- init.Launch();
- Mutate(new EffectMovementGenerator(id), MOTION_SLOT_ACTIVE);
+
+ Mutate(new EffectMovementGenerator(init, id), MOTION_SLOT_ACTIVE);
}
/**
@@ -612,8 +626,8 @@ void MotionMaster::MoveKnockbackFrom(float srcX, float srcY, float speedXY, floa
init.SetParabolic(max_height, 0);
init.SetOrientationFixed(true);
init.SetVelocity(speedXY);
- init.Launch();
- Mutate(new EffectMovementGenerator(0), MOTION_SLOT_CONTROLLED);
+
+ Mutate(new EffectMovementGenerator(init, 0), MOTION_SLOT_CONTROLLED);
}
/**
@@ -652,8 +666,8 @@ void MotionMaster::MoveJump(float x, float y, float z, float speedXY, float spee
init.SetVelocity(speedXY);
if (target)
init.SetFacing(target);
- init.Launch();
- Mutate(new EffectMovementGenerator(id), MOTION_SLOT_CONTROLLED);
+
+ Mutate(new EffectMovementGenerator(init, id), MOTION_SLOT_CONTROLLED);
}
/**
@@ -695,8 +709,8 @@ void MotionMaster::MoveFall(uint32 id /*=0*/, bool addFlagForNPC)
Movement::MoveSplineInit init(_owner);
init.MoveTo(_owner->GetPositionX(), _owner->GetPositionY(), tz + _owner->GetHoverHeight());
init.SetFall();
- init.Launch();
- Mutate(new EffectMovementGenerator(id), MOTION_SLOT_CONTROLLED);
+
+ Mutate(new EffectMovementGenerator(init, id), MOTION_SLOT_CONTROLLED);
}
/**
@@ -713,12 +727,12 @@ void MotionMaster::MoveCharge(float x, float y, float z, float speed, uint32 id,
if (_owner->IsPlayer())
{
LOG_DEBUG("movement.motionmaster", "Player ({}) charge point (X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), x, y, z);
- Mutate(new PointMovementGenerator<Player>(id, x, y, z, speed, orientation, path, generatePath, generatePath, targetGUID), MOTION_SLOT_CONTROLLED);
+ Mutate(new PointMovementGenerator<Player>(id, x, y, z, FORCED_MOVEMENT_NONE, speed, orientation, path, generatePath, generatePath, targetGUID), MOTION_SLOT_CONTROLLED);
}
else
{
LOG_DEBUG("movement.motionmaster", "Creature ({}) charge point (X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), x, y, z);
- Mutate(new PointMovementGenerator<Creature>(id, x, y, z, speed, orientation, path, generatePath, generatePath, targetGUID), MOTION_SLOT_CONTROLLED);
+ Mutate(new PointMovementGenerator<Creature>(id, x, y, z, FORCED_MOVEMENT_NONE, speed, orientation, path, generatePath, generatePath, targetGUID), MOTION_SLOT_CONTROLLED);
}
}
@@ -884,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;
@@ -892,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 0fcf5abae8..319da8d579 100644
--- a/src/server/game/Movement/MotionMaster.h
+++ b/src/server/game/Movement/MotionMaster.h
@@ -80,6 +80,21 @@ enum RotateDirection
ROTATE_DIRECTION_RIGHT
};
+enum ForcedMovement
+{
+ FORCED_MOVEMENT_NONE = 0,
+ FORCED_MOVEMENT_WALK = 1,
+ FORCED_MOVEMENT_RUN = 2,
+
+ FORCED_MOVEMENT_MAX
+};
+
+enum class PathSource
+{
+ WAYPOINT_MGR = 0,
+ SMART_WAYPOINT_MGR = 1,
+};
+
struct ChaseRange
{
ChaseRange(float range);
@@ -210,11 +225,11 @@ public:
void MoveForwards(Unit* target, float dist);
void MoveConfused();
void MoveFleeing(Unit* enemy, uint32 time = 0);
- void MovePoint(uint32 id, const Position& pos, bool generatePath = true, bool forceDestination = true)
- { MovePoint(id, pos.m_positionX, pos.m_positionY, pos.m_positionZ, generatePath, forceDestination, MOTION_SLOT_ACTIVE, pos.GetOrientation()); }
- void MovePoint(uint32 id, float x, float y, float z, bool generatePath = true, bool forceDestination = true, MovementSlot slot = MOTION_SLOT_ACTIVE, float orientation = 0.0f);
- void MoveSplinePath(Movement::PointsArray* path);
- void MoveSplinePath(uint32 path_id);
+ void MovePoint(uint32 id, const Position& pos, ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE, float speed = 0.f, bool generatePath = true, bool forceDestination = true)
+ { 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 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);
@@ -235,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/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
index 6d3d1007c8..e650ed63ae 100644
--- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
@@ -146,6 +146,7 @@ bool ConfusedMovementGenerator<T>::DoUpdate(T* unit, uint32 diff)
float z = i_waypoints[i_nextMove][2];
Movement::MoveSplineInit init(unit);
init.MoveTo(x, y, z, true);
+ init.SetWalk(true);
init.Launch();
}
}
diff --git a/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.cpp
index 14133dbe26..3fcfa93d3e 100644
--- a/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.cpp
@@ -36,6 +36,11 @@ void EscortMovementGenerator<T>::DoInitialize(T* unit)
else if (m_precomputedPath.size())
init.MovebyPath(m_precomputedPath);
+ if (_forcedMovement == FORCED_MOVEMENT_WALK)
+ init.SetWalk(true);
+ else if (_forcedMovement == FORCED_MOVEMENT_RUN)
+ init.SetWalk(false);
+
init.Launch();
_splineId = unit->movespline->GetId();
@@ -79,6 +84,11 @@ bool EscortMovementGenerator<T>::DoUpdate(T* unit, uint32 /*diff*/)
init.MoveTo(m_precomputedPath[1].x, m_precomputedPath[1].y, m_precomputedPath[1].z, true);
}
+ if (_forcedMovement == FORCED_MOVEMENT_WALK)
+ init.SetWalk(true);
+ else if (_forcedMovement == FORCED_MOVEMENT_RUN)
+ init.SetWalk(false);
+
init.Launch();
// Xinef: Override spline Id on recalculate launch
_splineId = unit->movespline->GetId();
diff --git a/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.h b/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.h
index edb410b8a8..7a175ed8fe 100644
--- a/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.h
@@ -24,7 +24,7 @@ template<class T>
class EscortMovementGenerator : public MovementGeneratorMedium< T, EscortMovementGenerator<T> >
{
public:
- EscortMovementGenerator(Movement::PointsArray* _path = nullptr) : i_recalculateSpeed(false)
+ EscortMovementGenerator(ForcedMovement forcedMovement, Movement::PointsArray* _path = nullptr) : i_recalculateSpeed(false), _forcedMovement(forcedMovement)
{
if (_path)
m_precomputedPath = *_path;
@@ -46,6 +46,7 @@ private:
Movement::PointsArray m_precomputedPath;
uint32 _splineId;
+ ForcedMovement _forcedMovement;
};
#endif
diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
index be1667e5bc..60cf4f41e3 100644
--- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
@@ -31,8 +31,6 @@ void HomeMovementGenerator<Creature>::DoFinalize(Creature* owner)
owner->ClearUnitState(UNIT_STATE_EVADE);
if (arrived)
{
- // Xinef: npc run by default
- //owner->SetWalk(true);
owner->LoadCreaturesAddon(true);
owner->AI()->JustReachedHome();
}
diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp
index fdce942480..ab8f850099 100644
--- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp
@@ -84,6 +84,11 @@ void PointMovementGenerator<T>::DoInitialize(T* unit)
if (speed > 0.0f)
init.SetVelocity(speed);
+ if (_forcedMovement == FORCED_MOVEMENT_WALK)
+ init.SetWalk(true);
+ else if (_forcedMovement == FORCED_MOVEMENT_RUN)
+ init.SetWalk(false);
+
if (i_orientation > 0.0f)
{
init.SetFacing(i_orientation);
@@ -142,6 +147,11 @@ bool PointMovementGenerator<T>::DoUpdate(T* unit, uint32 /*diff*/)
if (speed > 0.0f) // Default value for point motion type is 0.0, if 0.0 spline will use GetSpeed on unit
init.SetVelocity(speed);
+ if (_forcedMovement == FORCED_MOVEMENT_WALK)
+ init.SetWalk(true);
+ else if (_forcedMovement == FORCED_MOVEMENT_RUN)
+ init.SetWalk(false);
+
if (i_orientation > 0.0f)
{
init.SetFacing(i_orientation);
@@ -228,6 +238,11 @@ bool EffectMovementGenerator::Update(Unit* unit, uint32)
return !unit->movespline->Finalized();
}
+void EffectMovementGenerator::Initialize(Unit*)
+{
+ i_spline.Launch();
+}
+
void EffectMovementGenerator::Finalize(Unit* unit)
{
if (!unit->IsCreature())
diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h
index f19e04d422..f9941e9b8c 100644
--- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h
@@ -20,15 +20,16 @@
#include "Creature.h"
#include "MovementGenerator.h"
+#include "MoveSplineInit.h"
template<class T>
class PointMovementGenerator : public MovementGeneratorMedium< T, PointMovementGenerator<T> >
{
public:
- PointMovementGenerator(uint32 _id, float _x, float _y, float _z, float _speed = 0.0f, float orientation = 0.0f, const Movement::PointsArray* _path = nullptr,
- bool generatePath = false, bool forceDestination = false, ObjectGuid chargeTargetGUID = ObjectGuid::Empty)
- : id(_id), i_x(_x), i_y(_y), i_z(_z), speed(_speed), i_orientation(orientation), _generatePath(generatePath), _forceDestination(forceDestination),
- _chargeTargetGUID(chargeTargetGUID)
+ PointMovementGenerator(uint32 _id, float _x, float _y, float _z, ForcedMovement forcedMovement, float _speed = 0.0f, float orientation = 0.0f, const Movement::PointsArray* _path = nullptr,
+ bool generatePath = false, bool forceDestination = false, ObjectGuid chargeTargetGUID = ObjectGuid::Empty, bool reverseOrientation = false, ObjectGuid facingTargetGuid = ObjectGuid())
+ : id(_id), i_x(_x), i_y(_y), i_z(_z), speed(_speed), i_orientation(orientation), _generatePath(generatePath), _forceDestination(forceDestination), _reverseOrientation(reverseOrientation),
+ _chargeTargetGUID(chargeTargetGUID), _forcedMovement(forcedMovement), _facingTargetGuid(facingTargetGuid)
{
if (_path)
m_precomputedPath = *_path;
@@ -55,14 +56,17 @@ private:
Movement::PointsArray m_precomputedPath;
bool _generatePath;
bool _forceDestination;
+ bool _reverseOrientation;
ObjectGuid _chargeTargetGUID;
+ ForcedMovement _forcedMovement;
+ ObjectGuid _facingTargetGuid;
};
class AssistanceMovementGenerator : public PointMovementGenerator<Creature>
{
public:
AssistanceMovementGenerator(float _x, float _y, float _z) :
- PointMovementGenerator<Creature>(0, _x, _y, _z) {}
+ PointMovementGenerator<Creature>(0, _x, _y, _z, FORCED_MOVEMENT_NONE) {}
MovementGeneratorType GetMovementGeneratorType() { return ASSISTANCE_MOTION_TYPE; }
void Finalize(Unit*);
@@ -72,14 +76,15 @@ public:
class EffectMovementGenerator : public MovementGenerator
{
public:
- explicit EffectMovementGenerator(uint32 Id) : m_Id(Id) {}
- void Initialize(Unit*) override {}
+ explicit EffectMovementGenerator(Movement::MoveSplineInit& spline, uint32 Id) : m_Id(Id), i_spline(spline) {}
+ void Initialize(Unit*) override;
void Finalize(Unit*) override;
void Reset(Unit*) override {}
bool Update(Unit*, uint32) override;
MovementGeneratorType GetMovementGeneratorType() override { return EFFECT_MOTION_TYPE; }
private:
uint32 m_Id;
+ Movement::MoveSplineInit i_spline;
};
#endif
diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
index 5d904d31ac..239117d4ad 100644
--- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
@@ -51,7 +51,21 @@ void RandomMovementGenerator<Creature>::_setRandomLocation(Creature* creature)
creature->AddUnitState(UNIT_STATE_ROAMING_MOVE);
Movement::MoveSplineInit init(creature);
init.MoveTo(_currDestPosition.GetPositionX(), _currDestPosition.GetPositionY(), _currDestPosition.GetPositionZ());
- init.SetWalk(true);
+
+ bool walk = true;
+ switch (creature->GetMovementTemplate().GetRandom())
+ {
+ case CreatureRandomMovementType::CanRun:
+ walk = creature->IsWalking();
+ break;
+ case CreatureRandomMovementType::AlwaysRun:
+ walk = false;
+ break;
+ default:
+ break;
+ }
+
+ init.SetWalk(walk);
init.Launch();
if (creature->GetFormation() && creature->GetFormation()->GetLeader() == creature)
creature->GetFormation()->LeaderMoveTo(_currDestPosition.GetPositionX(), _currDestPosition.GetPositionY(), _currDestPosition.GetPositionZ(), 0);
@@ -270,7 +284,6 @@ template<>
void RandomMovementGenerator<Creature>::DoFinalize(Creature* creature)
{
creature->ClearUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE);
- creature->SetWalk(false);
}
template<>
diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp
index 4dfc688282..b6adb3010e 100644
--- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp
@@ -113,7 +113,7 @@ bool ChaseMovementGenerator<T>::DispatchSplineToPosition(T* owner, float x, floa
}
owner->StopMoving();
- return true;
+ return false;
}
if (cutPath)
@@ -134,7 +134,7 @@ bool ChaseMovementGenerator<T>::DispatchSplineToPosition(T* owner, float x, floa
init.SetWalk(walk);
init.Launch();
- return false;
+ return true;
}
template<class T>
@@ -219,18 +219,21 @@ bool ChaseMovementGenerator<T>::DoUpdate(T* owner, uint32 time_diff)
{
i_recheckDistance.Reset(400); // Sniffed value
- if (i_recalculateTravel && PositionOkay(owner, target, _movingTowards ? maxTarget : Optional<float>(), angle))
+ if (m_currentMode != CHASE_MODE_DISTANCING)
{
- if ((owner->HasUnitState(UNIT_STATE_CHASE_MOVE) && !target->isMoving() && !mutualChase) || _range)
+ if (i_recalculateTravel && PositionOkay(owner, target, _movingTowards ? maxTarget : Optional<float>(), angle))
{
- i_recalculateTravel = false;
- i_path = nullptr;
- if (cOwner)
- cOwner->SetCannotReachTarget();
- owner->StopMoving();
- owner->SetInFront(target);
- MovementInform(owner);
- return true;
+ if ((owner->HasUnitState(UNIT_STATE_CHASE_MOVE) && !target->isMoving() && !mutualChase) || _range)
+ {
+ i_recalculateTravel = false;
+ i_path = nullptr;
+ if (cOwner)
+ cOwner->SetCannotReachTarget();
+ owner->StopMoving();
+ owner->SetInFront(target);
+ MovementInform(owner);
+ return true;
+ }
}
}
}
@@ -262,6 +265,9 @@ bool ChaseMovementGenerator<T>::DoUpdate(T* owner, uint32 time_diff)
i_leashExtensionTimer.Reset(cOwner->GetAttackTime(BASE_ATTACK));
}
+ if (m_currentMode == CHASE_MODE_DISTANCING)
+ return true;
+
// if the target moved, we have to consider whether to adjust
if (!_lastTargetPosition || target->GetPosition() != _lastTargetPosition.value() || mutualChase != _mutualChase || !owner->IsWithinLOSInMap(target))
{
@@ -365,7 +371,6 @@ void ChaseMovementGenerator<Creature>::DoInitialize(Creature* owner)
_lastTargetPosition.reset();
i_recheckDistance.Reset(0);
i_leashExtensionTimer.Reset(owner->GetAttackTime(BASE_ATTACK));
- owner->SetWalk(false);
owner->AddUnitState(UNIT_STATE_CHASE);
}
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
index be3c0d57f1..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);
}
@@ -56,7 +71,6 @@ void WaypointMovementGenerator<Creature>::DoInitialize(Creature* creature)
void WaypointMovementGenerator<Creature>::DoFinalize(Creature* creature)
{
creature->ClearUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE);
- creature->SetWalk(false);
}
void WaypointMovementGenerator<Creature>::DoReset(Creature* creature)
@@ -79,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);
}
}
@@ -114,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)
@@ -140,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
@@ -156,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
@@ -173,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);
@@ -204,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;
}
@@ -240,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 76e945a9c5..70ef8e4fdf 100644
--- a/src/server/game/Scripting/MapScripts.cpp
+++ b/src/server/game/Scripting/MapScripts.cpp
@@ -442,7 +442,7 @@ void Map::ScriptsProcess()
if (step.script->MoveTo.TravelTime != 0)
{
float speed = unit->GetDistance(step.script->MoveTo.DestX, step.script->MoveTo.DestY, step.script->MoveTo.DestZ) / ((float)step.script->MoveTo.TravelTime * 0.001f);
- unit->MonsterMoveWithSpeed(step.script->MoveTo.DestX, step.script->MoveTo.DestY, step.script->MoveTo.DestZ, speed);
+ unit->GetMotionMaster()->MovePoint(0, step.script->MoveTo.DestX, step.script->MoveTo.DestY, step.script->MoveTo.DestZ, FORCED_MOVEMENT_NONE, speed);
}
else
unit->NearTeleportTo(step.script->MoveTo.DestX, step.script->MoveTo.DestY, step.script->MoveTo.DestZ, unit->GetOrientation());
@@ -757,7 +757,7 @@ void Map::ScriptsProcess()
case SCRIPT_COMMAND_DESPAWN_SELF:
// Target or source must be Creature.
if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script, true))
- cSource->DespawnOrUnsummon(step.script->DespawnSelf.DespawnDelay);
+ cSource->DespawnOrUnsummon(Milliseconds(step.script->DespawnSelf.DespawnDelay));
break;
case SCRIPT_COMMAND_LOAD_PATH:
@@ -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;
@@ -880,7 +880,6 @@ void Map::ScriptsProcess()
if (!cSource->IsAlive())
return;
- cSource->GetMotionMaster()->MovementExpired();
cSource->GetMotionMaster()->MoveIdle();
switch (step.script->Movement.MovementType)
@@ -889,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/Packets/AllPackets.h b/src/server/game/Server/Packets/AllPackets.h
index 498dafb907..c618303b42 100644
--- a/src/server/game/Server/Packets/AllPackets.h
+++ b/src/server/game/Server/Packets/AllPackets.h
@@ -19,6 +19,7 @@
#define AllPackets_h__
#include "BankPackets.h"
+#include "CalendarPackets.h"
#include "CharacterPackets.h"
#include "ChatPackets.h"
#include "CombatLogPackets.h"
diff --git a/src/server/game/Server/Packets/CalendarPackets.cpp b/src/server/game/Server/Packets/CalendarPackets.cpp
new file mode 100644
index 0000000000..5710c0ff0d
--- /dev/null
+++ b/src/server/game/Server/Packets/CalendarPackets.cpp
@@ -0,0 +1,41 @@
+/*
+ * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by the
+ * Free Software Foundation; either version 3 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "CalendarPackets.h"
+
+void WorldPackets::Calendar::GetEvent::Read()
+{
+ _worldPacket >> EventId;
+}
+
+void WorldPackets::Calendar::GuildFilter::Read()
+{
+ _worldPacket >> MinimumLevel;
+ _worldPacket >> MaximumLevel;
+ _worldPacket >> MinimumRank;
+}
+
+void WorldPackets::Calendar::ArenaTeam::Read()
+{
+ _worldPacket >> ArenaTeamId;
+}
+
+void WorldPackets::Calendar::CalendarComplain::Read()
+{
+ _worldPacket >> EventId;
+ _worldPacket >> ComplainGuid;
+}
diff --git a/src/server/game/Server/Packets/CalendarPackets.h b/src/server/game/Server/Packets/CalendarPackets.h
new file mode 100644
index 0000000000..cfba1f1464
--- /dev/null
+++ b/src/server/game/Server/Packets/CalendarPackets.h
@@ -0,0 +1,73 @@
+/*
+ * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by the
+ * Free Software Foundation; either version 3 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef CalendarPackets_h__
+#define CalendarPackets_h__
+
+#include "Guild.h"
+#include "Packet.h"
+
+namespace WorldPackets
+{
+ namespace Calendar
+ {
+ class GetEvent final : public ClientPacket
+ {
+ public:
+ GetEvent(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_GET_EVENT, std::move(packet)) {}
+
+ void Read() override;
+
+ uint64 EventId = 0;
+ };
+
+ class GuildFilter final : public ClientPacket
+ {
+ public:
+ GuildFilter(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_GUILD_FILTER, std::move(packet)) {}
+
+ void Read() override;
+
+ uint32 MinimumLevel = 1;
+ uint32 MaximumLevel = 1;
+ uint32 MinimumRank = GR_GUILDMASTER;
+ };
+
+ class ArenaTeam final : public ClientPacket
+ {
+ public:
+ ArenaTeam(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_ARENA_TEAM, std::move(packet)) {}
+
+ void Read() override;
+
+ uint32 ArenaTeamId = 0;
+ };
+
+ class CalendarComplain final : public ClientPacket
+ {
+ public:
+ CalendarComplain(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_COMPLAIN, std::move(packet)) {}
+
+ void Read() override;
+
+ uint64 EventId = 0;
+ ObjectGuid ComplainGuid;
+ };
+ }
+}
+
+#endif // CalendarPackets_h__
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp
index 1098453813..4ff462fe0b 100644
--- a/src/server/game/Server/Packets/MiscPackets.cpp
+++ b/src/server/game/Server/Packets/MiscPackets.cpp
@@ -140,3 +140,31 @@ WorldPacket const* WorldPackets::Misc::UITime::Write()
return &_worldPacket;
}
+
+void WorldPackets::Misc::Complain::Read()
+{
+ _worldPacket >> SpamType; // 0 - mail, 1 - chat
+ _worldPacket >> SpammerGuid;
+ switch (SpamType)
+ {
+ case 0:
+ _worldPacket >> Unk1; // const 0
+ _worldPacket >> Unk2; // probably mail id
+ _worldPacket >> Unk3; // const 0
+ break;
+ case 1:
+ _worldPacket >> Unk1; // probably language
+ _worldPacket >> Unk2; // message type?
+ _worldPacket >> Unk3; // probably channel id
+ _worldPacket >> Unk4; // unk random value
+ _worldPacket >> Description; // spam description string (messagetype, channel name, player name, message)
+ break;
+ }
+}
+
+WorldPacket const* WorldPackets::Misc::ComplainResult::Write()
+{
+ _worldPacket << Unk;
+
+ return &_worldPacket;
+}
diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h
index 7453ad7fc4..0c9f66f959 100644
--- a/src/server/game/Server/Packets/MiscPackets.h
+++ b/src/server/game/Server/Packets/MiscPackets.h
@@ -210,6 +210,32 @@ namespace WorldPackets
uint32 Time = 0;
};
+
+ class Complain final : public ClientPacket
+ {
+ public:
+ Complain(WorldPacket&& packet) : ClientPacket(CMSG_COMPLAIN, std::move(packet)) {}
+
+ void Read() override;
+
+ uint8 SpamType = 0; // 0 - mail, 1 - chat
+ ObjectGuid SpammerGuid;
+ uint32 Unk1 = 0;
+ uint32 Unk2 = 0;
+ uint32 Unk3 = 0;
+ uint32 Unk4 = 0;
+ std::string Description = "";
+ };
+
+ class ComplainResult final : public ServerPacket
+ {
+ public:
+ ComplainResult() : ServerPacket(SMSG_COMPLAIN_RESULT, 1) {}
+
+ WorldPacket const* Write() override;
+
+ uint8 Unk = 0;
+ };
}
}
diff --git a/src/server/game/Server/Packets/PetPackets.cpp b/src/server/game/Server/Packets/PetPackets.cpp
index 8028bce25c..860c4d4b7a 100644
--- a/src/server/game/Server/Packets/PetPackets.cpp
+++ b/src/server/game/Server/Packets/PetPackets.cpp
@@ -50,3 +50,19 @@ WorldPacket const* WorldPackets::Pet::PetUnlearnedSpell::Write()
_worldPacket << uint32(SpellID);
return &_worldPacket;
}
+
+WorldPacket const* WorldPackets::Pet::PetActionSound::Write()
+{
+ _worldPacket << UnitGUID;
+ _worldPacket << int32(Action);
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Pet::PetDismissSound::Write()
+{
+ _worldPacket << int32(ModelId);
+ _worldPacket << float(ModelPosition.x);
+ _worldPacket << float(ModelPosition.y);
+ _worldPacket << float(ModelPosition.z);
+ return &_worldPacket;
+}
diff --git a/src/server/game/Server/Packets/PetPackets.h b/src/server/game/Server/Packets/PetPackets.h
index cbb96db700..f11f88e5b0 100644
--- a/src/server/game/Server/Packets/PetPackets.h
+++ b/src/server/game/Server/Packets/PetPackets.h
@@ -20,6 +20,7 @@
#include "ObjectGuid.h"
#include "Packet.h"
+#include "G3D/Vector3.h"
namespace WorldPackets
{
@@ -94,6 +95,30 @@ namespace WorldPackets
void Read() override { }
};
+
+ class PetActionSound final : public ServerPacket
+ {
+ public:
+ PetActionSound(ObjectGuid unitGUID, int32 action)
+ : ServerPacket(SMSG_PET_ACTION_SOUND, 8 + 4), UnitGUID(unitGUID), Action(action) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid UnitGUID;
+ int32 Action = 0;
+ };
+
+ class PetDismissSound final : public ServerPacket
+ {
+ public:
+ PetDismissSound(int32 modelId, G3D::Vector3 modelPosition)
+ : ServerPacket(SMSG_PET_DISMISS_SOUND, 4 + 12), ModelId(modelId), ModelPosition(modelPosition) { }
+
+ WorldPacket const* Write() override;
+
+ int32 ModelId = 0;
+ G3D::Vector3 ModelPosition;
+ };
}
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 11b0a90057..84cbe96ede 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -363,7 +363,7 @@ void OpcodeTable::Initialize()
/*0x0E8*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_MOVE_ROOT, STATUS_NEVER);
/*0x0E9*/ DEFINE_HANDLER(CMSG_FORCE_MOVE_ROOT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveRootAck );
/*0x0EA*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_MOVE_UNROOT, STATUS_NEVER);
- /*0x0EB*/ DEFINE_HANDLER(CMSG_FORCE_MOVE_UNROOT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveUnRootAck );
+ /*0x0EB*/ DEFINE_HANDLER(CMSG_FORCE_MOVE_UNROOT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveRootAck );
/*0x0EC*/ DEFINE_HANDLER(MSG_MOVE_ROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
/*0x0ED*/ DEFINE_HANDLER(MSG_MOVE_UNROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
/*0x0EE*/ DEFINE_HANDLER(MSG_MOVE_HEARTBEAT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
@@ -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/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 412d1a9f63..5ac8895c68 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -1510,3 +1510,9 @@ void WorldSession::InitializeSessionCallback(CharacterDatabaseQueryHolder const&
SendClientCacheVersion(clientCacheVersion);
SendTutorialsData();
}
+
+void WorldSession::SetPacketLogging(bool state)
+{
+ if (m_Socket)
+ m_Socket->SetPacketLogging(state);
+}
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 8f0a8fd59d..feacafb69f 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -150,6 +150,7 @@ namespace WorldPackets
{
class MinimapPingClient;
class RandomRollClient;
+ class Complain;
}
namespace Pet
@@ -189,6 +190,14 @@ namespace WorldPackets
class ItemRefundInfo;
class ItemRefund;
}
+
+ namespace Calendar
+ {
+ class GetEvent;
+ class GuildFilter;
+ class ArenaTeam;
+ class CalendarComplain;
+ }
}
enum AccountDataType
@@ -619,7 +628,6 @@ public: // opcodes handlers
void HandlePlayedTime(WorldPackets::Character::PlayedTimeClient& packet);
// new
- void HandleMoveUnRootAck(WorldPacket& recvPacket);
void HandleMoveRootAck(WorldPacket& recvPacket);
// new inspect
@@ -1036,7 +1044,7 @@ public: // opcodes handlers
void HandleAreaSpiritHealerQueueOpcode(WorldPacket& recvData);
void HandleCancelMountAuraOpcode(WorldPacket& recvData);
void HandleSelfResOpcode(WorldPacket& recvData);
- void HandleComplainOpcode(WorldPacket& recvData);
+ void HandleComplainOpcode(WorldPackets::Misc::Complain& packet);
void HandleRequestPetInfo(WorldPackets::Pet::RequestPetInfo& packet);
// Socket gem
@@ -1073,9 +1081,9 @@ public: // opcodes handlers
// Calendar
void HandleCalendarGetCalendar(WorldPacket& recvData);
- void HandleCalendarGetEvent(WorldPacket& recvData);
- void HandleCalendarGuildFilter(WorldPacket& recvData);
- void HandleCalendarArenaTeam(WorldPacket& recvData);
+ void HandleCalendarGetEvent(WorldPackets::Calendar::GetEvent& packet);
+ void HandleCalendarGuildFilter(WorldPackets::Calendar::GuildFilter& packet);
+ void HandleCalendarArenaTeam(WorldPackets::Calendar::ArenaTeam& packet);
void HandleCalendarAddEvent(WorldPacket& recvData);
void HandleCalendarUpdateEvent(WorldPacket& recvData);
void HandleCalendarRemoveEvent(WorldPacket& recvData);
@@ -1085,7 +1093,7 @@ public: // opcodes handlers
void HandleCalendarEventRemoveInvite(WorldPacket& recvData);
void HandleCalendarEventStatus(WorldPacket& recvData);
void HandleCalendarEventModeratorStatus(WorldPacket& recvData);
- void HandleCalendarComplain(WorldPacket& recvData);
+ void HandleCalendarComplain(WorldPackets::Calendar::CalendarComplain& packet);
void HandleCalendarGetNumPending(WorldPacket& recvData);
void HandleCalendarEventSignup(WorldPacket& recvData);
@@ -1130,6 +1138,8 @@ public: // opcodes handlers
void InitializeSession();
void InitializeSessionCallback(CharacterDatabaseQueryHolder const& realmHolder, uint32 clientCacheVersion);
+ void SetPacketLogging(bool state);
+
private:
void ProcessQueryCallbacks();
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index 51705d18e0..0641744e8d 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -117,7 +117,7 @@ void EncryptableAndCompressiblePacket::CompressIfNeeded()
}
WorldSocket::WorldSocket(tcp::socket&& socket)
- : Socket(std::move(socket)), _OverSpeedPings(0), _worldSession(nullptr), _authed(false), _sendBufferSize(4096)
+ : Socket(std::move(socket)), _OverSpeedPings(0), _worldSession(nullptr), _authed(false), _sendBufferSize(4096), _loggingPackets(false)
{
Acore::Crypto::GetRandomBytes(_authSeed);
_headerBuffer.Resize(sizeof(ClientPktHeader));
@@ -406,7 +406,7 @@ WorldSocket::ReadDataHandlerResult WorldSocket::ReadDataHandler()
WorldPacket packet(opcode, std::move(_packetBuffer));
WorldPacket* packetToQueue;
- if (sPacketLog->CanLogPacket())
+ if (sPacketLog->CanLogPacket() && IsLoggingPackets())
sPacketLog->LogPacket(packet, CLIENT_TO_SERVER, GetRemoteIpAddress(), GetRemotePort());
std::unique_lock<std::mutex> sessionGuard(_worldSessionLock, std::defer_lock);
@@ -520,7 +520,7 @@ void WorldSocket::SendPacket(WorldPacket const& packet)
if (!IsOpen())
return;
- if (sPacketLog->CanLogPacket())
+ if (sPacketLog->CanLogPacket() && IsLoggingPackets())
sPacketLog->LogPacket(packet, SERVER_TO_CLIENT, GetRemoteIpAddress(), GetRemotePort());
_bufferQueue.Enqueue(new EncryptableAndCompressiblePacket(packet, _authCrypt.IsInitialized()));
diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h
index aa65dfa093..56313fd407 100644
--- a/src/server/game/Server/WorldSocket.h
+++ b/src/server/game/Server/WorldSocket.h
@@ -85,6 +85,9 @@ public:
void SetSendBufferSize(std::size_t sendBufferSize) { _sendBufferSize = sendBufferSize; }
+ bool IsLoggingPackets() const { return _loggingPackets; }
+ void SetPacketLogging(bool state) { _loggingPackets = state; }
+
protected:
void OnClose() override;
void ReadHandler() override;
@@ -133,6 +136,8 @@ private:
QueryCallbackProcessor _queryProcessor;
std::string _ipCountry;
+
+ bool _loggingPackets;
};
#endif
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 4ae8bfca43..5c7407633a 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -2392,7 +2392,7 @@ void Spell::AddUnitTarget(Unit* target, uint32 effectMask, bool checkIfValid /*=
targetInfo.reflectResult = SPELL_MISS_PARRY;
// Increase time interval for reflected spells by 1.5
- m_caster->m_Events.AddEvent(new ReflectEvent(m_caster, targetInfo.targetGUID, m_spellInfo), m_caster->m_Events.CalculateTime(targetInfo.timeDelay));
+ m_caster->m_Events.AddEventAtOffset(new ReflectEvent(m_caster, targetInfo.targetGUID, m_spellInfo), Milliseconds(targetInfo.timeDelay));
targetInfo.timeDelay += targetInfo.timeDelay >> 1;
m_spellFlags |= SPELL_FLAG_REFLECTED;
@@ -3439,7 +3439,7 @@ SpellCastResult Spell::prepare(SpellCastTargets const* targets, AuraEffect const
// create and add update event for this spell
_spellEvent = new SpellEvent(this);
- m_caster->m_Events.AddEvent(_spellEvent, m_caster->m_Events.CalculateTime(1));
+ m_caster->m_Events.AddEventAtOffset(_spellEvent, 1ms);
if (sDisableMgr->IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, m_caster))
{
@@ -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()
@@ -8166,7 +8166,7 @@ bool SpellEvent::IsDeletable() const
return m_Spell->IsDeletable();
}
-bool ReflectEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
+bool ReflectEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
{
Unit* target = ObjectAccessor::GetUnit(*_caster, _targetGUID);
if (target && _caster->IsInMap(target))
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index d8dcba2d5b..7e44054907 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -2429,8 +2429,14 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
}
break;
}
- case SUMMON_TYPE_JEEVES:
case SUMMON_TYPE_MINIPET:
+ // For companions, recalculate the position to ensure they spawn at the intended π/4 angle.
+ destTarget->Relocate(m_originalCaster->GetNearPosition(
+ m_originalCaster->GetDistance2d(destTarget->GetPositionX(), destTarget->GetPositionY()),
+ MINI_PET_SUMMON_ANGLE
+ ));
+ [[fallthrough]];
+ case SUMMON_TYPE_JEEVES:
{
summon = m_caster->GetMap()->SummonCreature(entry, *destTarget, properties, duration, m_originalCaster, m_spellInfo->Id, 0, personalSpawn);
if (!summon || !summon->HasUnitTypeMask(UNIT_MASK_MINION))
@@ -2446,8 +2452,9 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
//summon->AI()->EnterEvadeMode();
if (properties->Type != SUMMON_TYPE_JEEVES)
{
+ summon->SetFacingToObject(m_originalCaster);
summon->GetMotionMaster()->Clear(false);
- summon->GetMotionMaster()->MoveFollow(m_originalCaster, PET_FOLLOW_DIST, summon->GetFollowAngle(), MOTION_SLOT_ACTIVE);
+ summon->GetMotionMaster()->MoveFollow(m_originalCaster, PET_FOLLOW_DIST, MINI_PET_FOLLOW_ANGLE, MOTION_SLOT_ACTIVE);
}
break;
}
@@ -4155,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);
@@ -4238,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)
@@ -5206,7 +5213,7 @@ void Spell::EffectResurrectPet(SpellEffIndex /*effIndex*/)
{
// Position passed to SummonPet is irrelevant with current implementation,
// pet will be relocated without using these coords in Pet::LoadPetFromDB
- player->SummonPet(0, 0.0f, 0.0f, 0.0f, 0.0f, SUMMON_PET, 0s, damage);
+ player->SummonPet(0, 0.0f, 0.0f, 0.0f, 0.0f, SUMMON_PET, 0ms, damage);
return;
}
@@ -6338,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 9873af3253..77057e7988 100644
--- a/src/server/game/Spells/SpellInfoCorrections.cpp
+++ b/src/server/game/Spells/SpellInfoCorrections.cpp
@@ -5151,6 +5151,18 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
});
+ // Earth Shield
+ ApplySpellFix({ 55599, 58981 }, [](SpellInfo* spellInfo)
+ {
+ 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 c471c78154..4dea787d86 100644
--- a/src/server/game/Texts/CreatureTextMgr.cpp
+++ b/src/server/game/Texts/CreatureTextMgr.cpp
@@ -83,7 +83,7 @@ void CreatureTextMgr::LoadCreatureTexts()
uint32 oldMSTime = getMSTime();
mTextMap.clear(); // for reload case
- mTextRepeatMap.clear(); //reset all currently used temp texts
+ //all currently used temp texts are NOT reset
WorldDatabasePreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_CREATURE_TEXT);
PreparedQueryResult result = WorldDatabase.Query(stmt);
@@ -218,7 +218,7 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject
}
CreatureTextGroup const& textGroupContainer = itr->second; //has all texts in the group
- CreatureTextRepeatIds repeatGroup = GetRepeatGroup(source, textGroup);//has all textIDs from the group that were already said
+ CreatureTextRepeatIds repeatGroup = source->GetTextRepeatGroup(textGroup);//has all textIDs from the group that were already said
CreatureTextGroup tempGroup;//will use this to talk after sorting repeatGroup
for (CreatureTextGroup::const_iterator giter = textGroupContainer.begin(); giter != textGroupContainer.end(); ++giter)
@@ -227,52 +227,14 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject
if (tempGroup.empty())
{
- CreatureTextRepeatMap::iterator mapItr = mTextRepeatMap.find(source->GetGUID());
- if (mapItr != mTextRepeatMap.end())
- {
- CreatureTextRepeatGroup::iterator groupItr = mapItr->second.find(textGroup);
- groupItr->second.clear();
- }
-
+ source->ClearTextRepeatGroup(textGroup);
tempGroup = textGroupContainer;
}
- uint8 count = 0;
- float lastChance = -1;
- bool isEqualChanced = true;
-
- float totalChance = 0;
-
- for (CreatureTextGroup::const_iterator iter = tempGroup.begin(); iter != tempGroup.end(); ++iter)
- {
- if (lastChance >= 0 && lastChance != iter->probability)
- isEqualChanced = false;
-
- lastChance = iter->probability;
- totalChance += iter->probability;
- ++count;
- }
-
- int32 offset = -1;
- if (!isEqualChanced)
+ auto iter = Acore::Containers::SelectRandomWeightedContainerElement(tempGroup, [](CreatureTextEntry const& t) -> double
{
- for (CreatureTextGroup::const_iterator iter = tempGroup.begin(); iter != tempGroup.end(); ++iter)
- {
- uint32 chance = uint32(iter->probability);
- uint32 r = urand(0, 100);
- ++offset;
- if (r <= chance)
- break;
- }
- }
-
- uint32 pos = 0;
- if (isEqualChanced || offset < 0)
- pos = urand(0, count - 1);
- else if (offset >= 0)
- pos = offset;
-
- CreatureTextGroup::const_iterator iter = tempGroup.begin() + pos;
+ return t.probability;
+ });
ChatMsg finalType = (msgType == CHAT_MSG_ADDON) ? iter->type : msgType;
Language finalLang = (language == LANG_ADDON) ? iter->lang : language;
@@ -301,9 +263,8 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject
CreatureTextBuilder builder(finalSource, finalSource->getGender(), finalType, iter->group, iter->id, finalLang, target);
SendChatPacket(finalSource, builder, finalType, target, range, teamId, gmOnly);
}
- if (isEqualChanced || (!isEqualChanced && totalChance == 100.0f))
- SetRepeatId(source, textGroup, iter->id);
+ source->SetTextRepeatId(textGroup, iter->id);
return iter->duration;
}
@@ -348,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;
@@ -365,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:
@@ -374,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:
@@ -382,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:
@@ -391,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:
@@ -410,34 +371,6 @@ void CreatureTextMgr::SendEmote(Unit* source, uint32 emote)
source->HandleEmoteCommand(emote);
}
-void CreatureTextMgr::SetRepeatId(Creature* source, uint8 textGroup, uint8 id)
-{
- if (!source)
- return;
-
- CreatureTextRepeatIds& repeats = mTextRepeatMap[source->GetGUID()][textGroup];
- if (std::find(repeats.begin(), repeats.end(), id) == repeats.end())
- repeats.push_back(id);
- else
- LOG_ERROR("sql.sql", "CreatureTextMgr: TextGroup {} for Creature {} ({}), id {} already added",
- uint32(textGroup), source->GetName(), source->GetGUID().ToString(), uint32(id));
-}
-
-CreatureTextRepeatIds CreatureTextMgr::GetRepeatGroup(Creature* source, uint8 textGroup)
-{
- ASSERT(source);//should never happen
- CreatureTextRepeatIds ids;
-
- CreatureTextRepeatMap::const_iterator mapItr = mTextRepeatMap.find(source->GetGUID());
- if (mapItr != mTextRepeatMap.end())
- {
- CreatureTextRepeatGroup::const_iterator groupItr = (*mapItr).second.find(textGroup);
- if (groupItr != mapItr->second.end())
- ids = groupItr->second;
- }
- return ids;
-}
-
bool CreatureTextMgr::TextExist(uint32 sourceEntry, uint8 textGroup)
{
if (!sourceEntry)
diff --git a/src/server/game/Texts/CreatureTextMgr.h b/src/server/game/Texts/CreatureTextMgr.h
index d84d91c8dd..569de95867 100644
--- a/src/server/game/Texts/CreatureTextMgr.h
+++ b/src/server/game/Texts/CreatureTextMgr.h
@@ -77,11 +77,6 @@ typedef std::unordered_map<uint32, CreatureTextHolder> CreatureTextMap; // a
typedef std::map<CreatureTextId, CreatureTextLocale> LocaleCreatureTextMap;
-//used for handling non-repeatable random texts
-typedef std::vector<uint8> CreatureTextRepeatIds;
-typedef std::unordered_map<uint8, CreatureTextRepeatIds> CreatureTextRepeatGroup;
-typedef std::unordered_map<ObjectGuid, CreatureTextRepeatGroup> CreatureTextRepeatMap;//guid based
-
class CreatureTextMgr
{
CreatureTextMgr() { }
@@ -105,14 +100,10 @@ public:
template<class Builder> void SendChatPacket(WorldObject* source, Builder const& builder, ChatMsg msgType, WorldObject const* target = nullptr, CreatureTextRange range = TEXT_RANGE_NORMAL, TeamId teamId = TEAM_NEUTRAL, bool gmOnly = false) const;
private:
- CreatureTextRepeatIds GetRepeatGroup(Creature* source, uint8 textGroup);
- void SetRepeatId(Creature* source, uint8 textGroup, uint8 id);
-
void SendNonChatPacket(WorldObject* source, WorldPacket const* data, ChatMsg msgType, WorldObject const* target, CreatureTextRange range, TeamId teamId, bool gmOnly) const;
float GetRangeForChatType(ChatMsg msgType) const;
CreatureTextMap mTextMap;
- CreatureTextRepeatMap mTextRepeatMap;
LocaleCreatureTextMap mLocaleTextMap;
};
diff --git a/src/server/game/Time/UpdateTime.cpp b/src/server/game/Time/UpdateTime.cpp
index 3b584a6155..cebb105df0 100644
--- a/src/server/game/Time/UpdateTime.cpp
+++ b/src/server/game/Time/UpdateTime.cpp
@@ -162,7 +162,7 @@ void WorldUpdateTime::SetRecordUpdateTimeInterval(Milliseconds t)
void WorldUpdateTime::RecordUpdateTime(Milliseconds gameTimeMs, uint32 diff, uint32 sessionCount)
{
- if (_recordUpdateTimeInverval > 0s && diff > _recordUpdateTimeMin.count())
+ if (_recordUpdateTimeInverval > 0ms && diff > _recordUpdateTimeMin.count())
{
if (GetMSTimeDiff(_lastRecordTime, gameTimeMs) > _recordUpdateTimeInverval)
{
diff --git a/src/server/game/World/WorldConfig.cpp b/src/server/game/World/WorldConfig.cpp
index eedd61eaf4..7ee1b6f6d7 100644
--- a/src/server/game/World/WorldConfig.cpp
+++ b/src/server/game/World/WorldConfig.cpp
@@ -85,6 +85,9 @@ void WorldConfig::BuildConfigCache()
SetConfigValue<float>(RATE_BUYVALUE_ITEM_HEIRLOOM, "Rate.BuyValue.Item.Heirloom", 1.0f);
SetConfigValue<float>(RATE_REPUTATION_GAIN, "Rate.Reputation.Gain", 1.0f);
+ SetConfigValue<float>(RATE_REPUTATION_GAIN_AB, "Rate.Reputation.Gain.AB", 1.0f);
+ SetConfigValue<float>(RATE_REPUTATION_GAIN_AV, "Rate.Reputation.Gain.AV", 1.0f);
+ SetConfigValue<float>(RATE_REPUTATION_GAIN_WSG, "Rate.Reputation.Gain.WSG", 1.0f);
SetConfigValue<float>(RATE_REPUTATION_LOWLEVEL_KILL, "Rate.Reputation.LowLevel.Kill", 1.0f);
SetConfigValue<float>(RATE_REPUTATION_LOWLEVEL_QUEST, "Rate.Reputation.LowLevel.Quest", 1.0f);
SetConfigValue<float>(RATE_REPUTATION_RECRUIT_A_FRIEND_BONUS, "Rate.Reputation.RecruitAFriendBonus", 0.1f);
diff --git a/src/server/game/World/WorldConfig.h b/src/server/game/World/WorldConfig.h
index ce089b65a3..f076d0b293 100644
--- a/src/server/game/World/WorldConfig.h
+++ b/src/server/game/World/WorldConfig.h
@@ -437,6 +437,9 @@ enum ServerConfigs
RATE_XP_PET_NEXT_LEVEL,
RATE_REPAIRCOST,
RATE_REPUTATION_GAIN,
+ RATE_REPUTATION_GAIN_AB,
+ RATE_REPUTATION_GAIN_AV,
+ RATE_REPUTATION_GAIN_WSG,
RATE_REPUTATION_LOWLEVEL_KILL,
RATE_REPUTATION_LOWLEVEL_QUEST,
RATE_REPUTATION_RECRUIT_A_FRIEND_BONUS,
diff --git a/src/server/game/World/WorldState.cpp b/src/server/game/World/WorldState.cpp
index ebb11b8bfe..d715950d24 100644
--- a/src/server/game/World/WorldState.cpp
+++ b/src/server/game/World/WorldState.cpp
@@ -852,7 +852,7 @@ void WorldState::HandleSunsReachSubPhaseTransition(int32 subPhaseMask, bool init
if (!initial)
{
std::lock_guard<std::mutex> guard(m_sunsReachData.m_sunsReachReclamationMutex);
- for (ObjectGuid& guid : m_sunsReachData.m_sunsReachReclamationPlayers)
+ for (ObjectGuid const& guid : m_sunsReachData.m_sunsReachReclamationPlayers)
if (Player* player = ObjectAccessor::FindPlayer(guid))
{
if (start)
@@ -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 40bb89b93b..c2891c0d01 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -100,7 +100,8 @@ public:
{ "dummy", HandleDebugDummyCommand, SEC_ADMINISTRATOR, Console::No },
{ "mapdata", HandleDebugMapDataCommand, SEC_ADMINISTRATOR, Console::No },
{ "boundary", HandleDebugBoundaryCommand, SEC_ADMINISTRATOR, Console::No },
- { "visibilitydata", HandleDebugVisibilityDataCommand, SEC_ADMINISTRATOR, Console::No }
+ { "visibilitydata", HandleDebugVisibilityDataCommand, SEC_ADMINISTRATOR, Console::No },
+ { "zonestats", HandleDebugZoneStatsCommand, SEC_MODERATOR, Console::Yes}
};
static ChatCommandTable commandTable =
{
@@ -432,7 +433,7 @@ public:
}
data.hexlike();
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
handler->PSendSysMessage(LANG_COMMAND_OPCODESENT, data.GetOpcode(), unit->GetName());
return true;
}
@@ -1434,6 +1435,31 @@ public:
handler->PSendSysMessage("Zone wide visible objects in zone: {}", zoneWideVisibleObjectsInZone);
return true;
}
+
+ static bool HandleDebugZoneStatsCommand(ChatHandler* handler, Optional<PlayerIdentifier> playerTarget)
+ {
+ if (!playerTarget)
+ playerTarget = PlayerIdentifier::FromTargetOrSelf(handler);
+
+ if (!playerTarget)
+ {
+ handler->SendErrorMessage(LANG_PLAYER_NOT_FOUND);
+ return false;
+ }
+
+ Player* player = playerTarget->GetConnectedPlayer();
+
+ if (!player)
+ {
+ handler->SendErrorMessage(LANG_PLAYER_NOT_FOUND);
+ return false;
+ }
+
+ uint32 zoneId = player->GetZoneId();
+ AreaTableEntry const* zoneEntry = sAreaTableStore.LookupEntry(zoneId);
+ handler->PSendSysMessage("Player count in zone {} ({}): {}.", zoneId, (zoneEntry ? zoneEntry->area_name[LOCALE_enUS] : "<unknown>"), player->GetMap()->GetPlayerCountInZone(zoneId));
+ return true;
+ }
};
void AddSC_debug_commandscript()
diff --git a/src/server/scripts/Commands/cs_gm.cpp b/src/server/scripts/Commands/cs_gm.cpp
index 69fec5a027..3680aea36a 100644
--- a/src/server/scripts/Commands/cs_gm.cpp
+++ b/src/server/scripts/Commands/cs_gm.cpp
@@ -100,8 +100,8 @@ public:
}
else
{
- canFly = handler->GetSession()->GetPlayer()->CanFly();
- target->SetCanFly(!canFly);
+ canFly = !handler->GetSession()->GetPlayer()->CanFly();
+ target->SetCanFly(canFly);
}
handler->PSendSysMessage(LANG_COMMAND_FLYMODE_STATUS, handler->GetNameLink(target), canFly ? "on" : "off");
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 4ca8b5b37f..ca5cff3dd5 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -193,7 +193,9 @@ public:
{ "skirmish", HandleSkirmishCommand, SEC_ADMINISTRATOR, Console::No },
{ "mailbox", HandleMailBoxCommand, SEC_MODERATOR, Console::No },
{ "string", HandleStringCommand, SEC_GAMEMASTER, Console::No },
- { "opendoor", HandleOpenDoorCommand, SEC_GAMEMASTER, Console::No }
+ { "opendoor", HandleOpenDoorCommand, SEC_GAMEMASTER, Console::No },
+ { "bm", HandleBMCommand, SEC_GAMEMASTER, Console::No },
+ { "packetlog", HandlePacketLog, SEC_GAMEMASTER, Console::No }
};
return commandTable;
@@ -485,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);
@@ -504,6 +506,7 @@ public:
if (!session)
{
+ handler->SendErrorMessage(LANG_USE_BOL);
return false;
}
@@ -537,9 +540,6 @@ public:
SetCommentatorMod(false);
return true;
}
-
- handler->SendErrorMessage(LANG_USE_BOL);
- return false;
}
static bool HandleDevCommand(ChatHandler* handler, Optional<bool> enableArg)
@@ -548,6 +548,7 @@ public:
if (!session)
{
+ handler->SendErrorMessage(LANG_USE_BOL);
return false;
}
@@ -582,9 +583,6 @@ public:
SetDevMod(false);
return true;
}
-
- handler->SendErrorMessage(LANG_USE_BOL);
- return false;
}
static bool HandleGPSCommand(ChatHandler* handler, Optional<PlayerIdentifier> target)
@@ -3069,6 +3067,75 @@ public:
handler->SendErrorMessage(LANG_CMD_NO_DOOR_FOUND, range ? *range : 5.0f);
return false;
}
+
+ static bool HandleBMCommand(ChatHandler* handler, Optional<bool> enableArg)
+ {
+ WorldSession* session = handler->GetSession();
+
+ if (!session)
+ return false;
+
+ auto SetBMMod = [&](bool enable)
+ {
+ char const* enabled = "ON";
+ char const* disabled = "OFF";
+ handler->SendNotification(LANG_COMMAND_BEASTMASTER_MODE, enable ? enabled : disabled);
+
+ session->GetPlayer()->SetBeastMaster(enable);
+ };
+
+ if (!enableArg)
+ {
+ if (!AccountMgr::IsPlayerAccount(session->GetSecurity()) && session->GetPlayer()->IsDeveloper())
+ SetBMMod(true);
+ else
+ SetBMMod(false);
+
+ return true;
+ }
+
+ if (*enableArg)
+ {
+ SetBMMod(true);
+ return true;
+ }
+ else
+ {
+ SetBMMod(false);
+ return true;
+ }
+
+ handler->SendErrorMessage(LANG_USE_BOL);
+ return false;
+ }
+
+ static bool HandlePacketLog(ChatHandler* handler, Optional<bool> enableArg)
+ {
+ WorldSession* session = handler->GetSession();
+
+ if (!session)
+ return false;
+
+ if (enableArg)
+ {
+ if (*enableArg)
+ {
+ session->SetPacketLogging(true);
+ handler->SendNotification(LANG_ON);
+ return true;
+ }
+ else
+ {
+ session->SetPacketLogging(false);
+ handler->SendNotification(LANG_OFF);
+ return true;
+ }
+ }
+
+ handler->SendErrorMessage(LANG_USE_BOL);
+ return false;
+ }
+
};
void AddSC_misc_commandscript()
diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp
index 20b9fadff5..75813a6a3f 100644
--- a/src/server/scripts/Commands/cs_mmaps.cpp
+++ b/src/server/scripts/Commands/cs_mmaps.cpp
@@ -29,6 +29,7 @@
#include "GridNotifiers.h"
#include "GridNotifiersImpl.h"
#include "MMapFactory.h"
+#include "MMapMgr.h"
#include "Map.h"
#include "PathGenerator.h"
#include "Player.h"
@@ -136,6 +137,40 @@ public:
GridCoord const gridCoord = Acore::ComputeGridCoord(player->GetPositionX(), player->GetPositionY());
handler->PSendSysMessage("{}{}{}.mmtile", player->GetMapId(), gridCoord.x_coord, gridCoord.y_coord);
+
+ std::string fileName = Acore::StringFormat(MMAP::TILE_FILE_NAME_FORMAT, sConfigMgr->GetOption<std::string>("DataDir", "."), player->GetMapId(), gridCoord.x_coord, gridCoord.y_coord);
+ FILE* file = fopen(fileName.c_str(), "rb");
+ if (!file)
+ {
+ LOG_DEBUG("maps", "MMAP:loadMap: Could not open mmtile file '{}'", fileName);
+ return false;
+ }
+
+ // read header
+ MmapTileHeader fileHeader;
+ if (fread(&fileHeader, sizeof(MmapTileHeader), 1, file) != 1 || fileHeader.mmapMagic != MMAP_MAGIC)
+ {
+ LOG_ERROR("maps", "MMAP:loadMap: Bad header in mmap {:03}{:02}{:02}.mmtile", player->GetMapId(), gridCoord.x_coord, gridCoord.y_coord);
+ fclose(file);
+ return false;
+ }
+ fclose(file);
+ handler->PSendSysMessage("Recast config used:");
+ handler->PSendSysMessage("- walkableSlopeAngle: {}", fileHeader.recastConfig.walkableSlopeAngle);
+
+ const float cellHeight = fileHeader.recastConfig.cellSizeVertical;
+ handler->PSendSysMessage("- walkableHeight: {} ({} units)", fileHeader.recastConfig.walkableHeight * cellHeight, fileHeader.recastConfig.walkableHeight);
+ handler->PSendSysMessage("- walkableClimb: {} ({} units)", fileHeader.recastConfig.walkableClimb * cellHeight, fileHeader.recastConfig.walkableClimb);
+ handler->PSendSysMessage("- walkableRadius: {} ({} units)", fileHeader.recastConfig.walkableRadius * cellHeight, fileHeader.recastConfig.walkableRadius);
+
+ handler->PSendSysMessage("- maxSimplificationError: {}", fileHeader.recastConfig.maxSimplificationError);
+ handler->PSendSysMessage("- vertexPerMapEdge: {}", fileHeader.recastConfig.vertexPerMapEdge);
+ handler->PSendSysMessage("- vertexPerTileEdge: {}", fileHeader.recastConfig.vertexPerTileEdge);
+ handler->PSendSysMessage("- tilesPerMapEdge: {}", fileHeader.recastConfig.tilesPerMapEdge);
+ handler->PSendSysMessage("- baseUnitDim: {}", fileHeader.recastConfig.baseUnitDim);
+ handler->PSendSysMessage("- cellSizeHorizontal: {}", fileHeader.recastConfig.cellSizeHorizontal);
+ handler->PSendSysMessage("- cellSizeVertical: {}", fileHeader.recastConfig.cellSizeVertical);
+
handler->PSendSysMessage("gridloc [{}, {}]", gridCoord.x_coord, gridCoord.y_coord);
// calculate navmesh tile location
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/AlteracValley/alterac_valley.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
index bd71099346..0b534612b8 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
@@ -213,7 +213,7 @@ public:
ScriptedAI::EnterEvadeMode();
return;
}
- events.ScheduleEvent(EVENT_CHECK_RESET, 5000);
+ events.ScheduleEvent(EVENT_CHECK_RESET, 5s);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
index 214b923550..6d4c64c1d5 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
@@ -27,12 +27,13 @@
enum IronhandData
{
- IRONHAND_FLAMES_TIMER = 16000,
- IRONHAND_FLAMES_TIMER_RAND = 3000,
IRONHAND_N_GROUPS = 3,
SPELL_GOUT_OF_FLAMES = 15529
};
+constexpr Milliseconds IRONHAND_FLAMES_TIMER = 16s;
+constexpr Milliseconds IRONHAND_FLAMES_TIMER_RAND = 3s;
+
class go_shadowforge_brazier : public GameObjectScript
{
public:
@@ -110,7 +111,7 @@ public:
{
case SPELL_GOUT_OF_FLAMES:
DoCast(SPELL_GOUT_OF_FLAMES);
- events.RescheduleEvent(SPELL_GOUT_OF_FLAMES, urand(IRONHAND_FLAMES_TIMER - IRONHAND_FLAMES_TIMER_RAND, IRONHAND_FLAMES_TIMER + IRONHAND_FLAMES_TIMER_RAND));
+ events.RescheduleEvent(SPELL_GOUT_OF_FLAMES, IRONHAND_FLAMES_TIMER - IRONHAND_FLAMES_TIMER_RAND, IRONHAND_FLAMES_TIMER + IRONHAND_FLAMES_TIMER_RAND);
break;
default:
break;
@@ -358,7 +359,8 @@ public:
case 0:
Talk(SAY_TEXT5);
HandleGameObject(DATA_ARENA4, false);
- Start(false, false);
+ me->SetWalk(true);
+ Start(false);
eventTimer = 0;
break;
case 1:
@@ -603,7 +605,10 @@ public:
creature->CastSpell(creature, SPELL_DRUNKEN_RAGE, false);
if (npc_escortAI* escortAI = CAST_AI(npc_rocknot::npc_rocknotAI, creature->AI()))
- escortAI->Start(false, false);
+ {
+ creature->SetWalk(true);
+ escortAI->Start(false);
+ }
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp
index dadfb58c60..df52818e42 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp
@@ -28,14 +28,11 @@ enum Spells
SPELL_ENVELOPING_WEB = 15471
};
-enum Timers
-{
- TIMER_SHADOWBOLT = 7000,
- TIMER_CURSE_TONGUES = 24000,
- TIMER_CURSE_WEAKNESS = 12000,
- TIMER_DEMON_ARMOR = 3000, // virtually only cast once
- TIMER_ENVELOPING_WEB = 16000
-};
+constexpr Milliseconds TIMER_SHADOWBOLT = 7s;
+constexpr Milliseconds TIMER_CURSE_TONGUES = 24s;
+constexpr Milliseconds TIMER_CURSE_WEAKNESS = 12s;
+constexpr Milliseconds TIMER_DEMON_ARMOR = 3s; //virtually only cast once
+constexpr Milliseconds TIMER_ENVELOPING_WEB = 16s;
class boss_anubshiah : public CreatureScript
{
@@ -54,11 +51,11 @@ public:
void JustEngagedWith(Unit* /*who*/) override
{
_JustEngagedWith();
- events.ScheduleEvent(SPELL_SHADOWBOLT, 0.2 * (int)TIMER_SHADOWBOLT);
- events.ScheduleEvent(SPELL_CURSE_TONGUES, 0.2 * (int)TIMER_CURSE_TONGUES);
- events.ScheduleEvent(SPELL_CURSE_WEAKNESS, 0.2 * (int)TIMER_CURSE_WEAKNESS);
- events.ScheduleEvent(SPELL_DEMON_ARMOR, 0.2 * (int)TIMER_DEMON_ARMOR);
- events.ScheduleEvent(SPELL_ENVELOPING_WEB, 0.2 * (int)TIMER_ENVELOPING_WEB);
+ events.ScheduleEvent(SPELL_SHADOWBOLT, TIMER_SHADOWBOLT / 5);
+ events.ScheduleEvent(SPELL_CURSE_TONGUES, TIMER_CURSE_TONGUES / 5);
+ events.ScheduleEvent(SPELL_CURSE_WEAKNESS, TIMER_CURSE_WEAKNESS / 5);
+ events.ScheduleEvent(SPELL_DEMON_ARMOR, TIMER_DEMON_ARMOR / 5);
+ events.ScheduleEvent(SPELL_ENVELOPING_WEB, TIMER_ENVELOPING_WEB / 5);
}
void UpdateAI(uint32 diff) override
@@ -80,21 +77,21 @@ public:
{
case SPELL_SHADOWBOLT:
DoCastVictim(SPELL_SHADOWBOLT);
- events.ScheduleEvent(SPELL_SHADOWBOLT, urand(TIMER_SHADOWBOLT - 2000, TIMER_SHADOWBOLT + 2000));
+ events.ScheduleEvent(SPELL_SHADOWBOLT, TIMER_SHADOWBOLT - 2s, TIMER_SHADOWBOLT + 2s);
break;
case SPELL_CURSE_TONGUES:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true))
{
DoCast(target, SPELL_CURSE_TONGUES);
}
- events.ScheduleEvent(SPELL_CURSE_TONGUES, urand(TIMER_CURSE_TONGUES - 2000, TIMER_CURSE_TONGUES + 2000));
+ events.ScheduleEvent(SPELL_CURSE_TONGUES, TIMER_CURSE_TONGUES - 2s, TIMER_CURSE_TONGUES + 2s);
break;
case SPELL_CURSE_WEAKNESS:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true))
{
DoCast(target, SPELL_CURSE_WEAKNESS);
}
- events.ScheduleEvent(SPELL_CURSE_WEAKNESS, urand(TIMER_CURSE_WEAKNESS - 2000, TIMER_CURSE_WEAKNESS + 2000));
+ events.ScheduleEvent(SPELL_CURSE_WEAKNESS, TIMER_CURSE_WEAKNESS - 2s, TIMER_CURSE_WEAKNESS + 2s);
break;
case SPELL_DEMON_ARMOR:
DoCast(me, SPELL_DEMON_ARMOR);
@@ -103,7 +100,7 @@ public:
case SPELL_ENVELOPING_WEB:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true))
DoCast(target, SPELL_ENVELOPING_WEB);
- events.ScheduleEvent(SPELL_ENVELOPING_WEB, urand(TIMER_ENVELOPING_WEB - 2000, TIMER_ENVELOPING_WEB + 2000));
+ events.ScheduleEvent(SPELL_ENVELOPING_WEB, TIMER_ENVELOPING_WEB - 2s, TIMER_ENVELOPING_WEB + 2s);
break;
default:
break;
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_eviscerator.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_eviscerator.cpp
index 5d12ea5ac1..dfebbcf111 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_eviscerator.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_eviscerator.cpp
@@ -26,12 +26,9 @@ enum Spells
SPELL_SHIELD = 7121
};
-enum Timers
-{
- TIMER_SHADOWBOLT_VOLLEY = 7000,
- TIMER_REND = 20000,
- TIMER_SHIELD = 12000
-};
+constexpr Milliseconds TIMER_SHADOWBOLT_VOLLEY = 7s;
+constexpr Milliseconds TIMER_REND = 20s;
+constexpr Milliseconds TIMER_SHIELD = 12s;
class boss_eviscerator : public CreatureScript
{
@@ -52,9 +49,9 @@ public:
void JustEngagedWith(Unit* /*who*/) override
{
_JustEngagedWith();
- events.ScheduleEvent(SPELL_SHADOWBOLT_VOLLEY, 0.2 * (int)TIMER_SHADOWBOLT_VOLLEY);
- events.ScheduleEvent(SPELL_REND, 0.2 * (int) TIMER_REND);
- events.ScheduleEvent(SPELL_SHIELD, 0.2 * (int) TIMER_SHIELD);
+ events.ScheduleEvent(SPELL_SHADOWBOLT_VOLLEY, TIMER_SHADOWBOLT_VOLLEY / 5);
+ events.ScheduleEvent(SPELL_REND, TIMER_REND / 5);
+ events.ScheduleEvent(SPELL_SHIELD, TIMER_SHIELD / 5);
}
void DamageTaken(Unit* /* doneBy */, uint32& /* damage */, DamageEffectType /* damagetype */, SpellSchoolMask damageSchoolMask) override
@@ -86,11 +83,11 @@ public:
{
case SPELL_SHADOWBOLT_VOLLEY:
DoCastVictim(SPELL_SHADOWBOLT_VOLLEY);
- events.ScheduleEvent(SPELL_SHADOWBOLT_VOLLEY, urand(TIMER_SHADOWBOLT_VOLLEY - 2000, TIMER_SHADOWBOLT_VOLLEY + 2000));
+ events.ScheduleEvent(SPELL_SHADOWBOLT_VOLLEY, TIMER_SHADOWBOLT_VOLLEY - 2s, TIMER_SHADOWBOLT_VOLLEY + 2s);
break;
case SPELL_REND:
DoCastVictim(SPELL_REND);
- events.ScheduleEvent(SPELL_REND, urand(TIMER_REND - 2000, TIMER_REND + 2000));
+ events.ScheduleEvent(SPELL_REND, TIMER_REND - 2s, TIMER_REND + 2s);
break;
case SPELL_SHIELD:
SpellShieldReady = true;
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp
index 6621829836..4947301136 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp
@@ -26,12 +26,9 @@ enum Spells
SPELL_BLOODLUST = 21049
};
-enum Timers
-{
- TIMER_WHIRLWIND = 12000,
- TIMER_MORTAL = 22000,
- TIMER_BLOODLUST = 30000
-};
+constexpr Milliseconds TIMER_WHIRLWIND = 12s;
+constexpr Milliseconds TIMER_MORTAL = 22s;
+constexpr Milliseconds TIMER_BLOODLUST = 30s;
class boss_gorosh_the_dervish : public CreatureScript
{
@@ -47,14 +44,14 @@ public:
{
boss_gorosh_the_dervishAI(Creature* creature) : BossAI(creature, DATA_GOROSH) { }
- uint32 nextWhirlwindTime;
+ Milliseconds nextWhirlwindTime;
void JustEngagedWith(Unit* /*who*/) override
{
_JustEngagedWith();
- events.ScheduleEvent(SPELL_WHIRLWIND, 0.2 * (int) TIMER_WHIRLWIND);
- events.ScheduleEvent(SPELL_MORTALSTRIKE, 0.2 * (int) TIMER_MORTAL);
- events.ScheduleEvent(SPELL_BLOODLUST, 0.2 * (int) TIMER_BLOODLUST);
+ events.ScheduleEvent(SPELL_WHIRLWIND, TIMER_WHIRLWIND / 5);
+ events.ScheduleEvent(SPELL_MORTALSTRIKE, TIMER_MORTAL / 5);
+ events.ScheduleEvent(SPELL_BLOODLUST, TIMER_BLOODLUST / 5);
}
void UpdateAI(uint32 diff) override
@@ -78,22 +75,22 @@ public:
if (me->GetDistance2d(me->GetVictim()) < 10.0f)
{
DoCastVictim(SPELL_WHIRLWIND);
- nextWhirlwindTime = urand(TIMER_WHIRLWIND - 2000, TIMER_WHIRLWIND + 2000);
+ nextWhirlwindTime = randtime(TIMER_WHIRLWIND - 2s, TIMER_WHIRLWIND + 2s);
}
else
{
// reschedule sooner
- nextWhirlwindTime = 0.3 * urand(TIMER_WHIRLWIND - 2000, TIMER_WHIRLWIND + 2000);
+ nextWhirlwindTime = randtime(TIMER_WHIRLWIND - 2s, TIMER_WHIRLWIND + 2s) / 3;
}
events.ScheduleEvent(SPELL_WHIRLWIND, nextWhirlwindTime);
break;
case SPELL_MORTALSTRIKE:
DoCastVictim(SPELL_MORTALSTRIKE);
- events.ScheduleEvent(SPELL_MORTALSTRIKE, urand(TIMER_MORTAL - 2000, TIMER_MORTAL + 2000));
+ events.ScheduleEvent(SPELL_MORTALSTRIKE, TIMER_MORTAL - 2s, TIMER_MORTAL + 2s);
break;
case SPELL_BLOODLUST:
DoCastSelf(SPELL_BLOODLUST);
- events.ScheduleEvent(SPELL_BLOODLUST, urand(TIMER_BLOODLUST - 2000, TIMER_BLOODLUST + 2000));
+ events.ScheduleEvent(SPELL_BLOODLUST, TIMER_BLOODLUST - 2s, TIMER_BLOODLUST + 2s);
break;
default:
break;
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp
index cbe77cd858..c9176385d2 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp
@@ -26,11 +26,8 @@ enum Grizzle
EMOTE_FRENZY_KILL = 0
};
-enum Timer
-{
- TIMER_GROUNDTREMOR = 10000,
- TIMER_FRENZY = 15000
-};
+constexpr Milliseconds TIMER_GROUNDTREMOR = 10s;
+constexpr Milliseconds TIMER_FRENZY = 15s;
class boss_grizzle : public CreatureScript
{
@@ -46,13 +43,13 @@ public:
{
boss_grizzleAI(Creature* creature) : BossAI(creature, DATA_GRIZZLE) {}
- uint32 nextTremorTime;
+ Milliseconds nextTremorTime;
void JustEngagedWith(Unit* /*who*/) override
{
_JustEngagedWith();
- events.ScheduleEvent(SPELL_GROUNDTREMOR, 0.2 * (int) TIMER_GROUNDTREMOR);
- events.ScheduleEvent(SPELL_FRENZY, 0.2 * (int) TIMER_FRENZY);
+ events.ScheduleEvent(SPELL_GROUNDTREMOR, TIMER_GROUNDTREMOR / 5);
+ events.ScheduleEvent(SPELL_FRENZY, TIMER_FRENZY / 5);
}
void UpdateAI(uint32 diff) override
@@ -77,17 +74,17 @@ public:
if (me->GetDistance2d(me->GetVictim()) < 10.0f)
{
DoCastVictim(SPELL_GROUNDTREMOR);
- nextTremorTime = urand(TIMER_GROUNDTREMOR - 2000, TIMER_GROUNDTREMOR + 2000);
+ nextTremorTime = randtime(TIMER_GROUNDTREMOR - 2s, TIMER_GROUNDTREMOR + 2s);
}
else
{
- nextTremorTime = 0.3*urand(TIMER_GROUNDTREMOR - 2000, TIMER_GROUNDTREMOR + 2000);
+ nextTremorTime = randtime(TIMER_GROUNDTREMOR - 2s, TIMER_GROUNDTREMOR + 2s) / 3;
}
events.ScheduleEvent(SPELL_GROUNDTREMOR, nextTremorTime);
break;
case SPELL_FRENZY:
DoCastSelf(SPELL_FRENZY);
- events.ScheduleEvent(SPELL_FRENZY, urand(TIMER_FRENZY - 2000, TIMER_FRENZY + 2000));
+ events.ScheduleEvent(SPELL_FRENZY, TIMER_FRENZY - 2s, TIMER_FRENZY + 2s);
Talk(EMOTE_FRENZY_KILL);
break;
default:
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_hedrum.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_hedrum.cpp
index 6861d1b895..8b2dfaaba6 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_hedrum.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_hedrum.cpp
@@ -26,12 +26,9 @@ enum Spells
SPELL_WEB_EXPLOSION = 15474
};
-enum Timers
-{
- TIMER_PARALYZING = 20000,
- TIMER_BANEFUL = 24000,
- TIMER_WEB_EXPLOSION = 20000
-};
+constexpr Milliseconds TIMER_PARALYZING = 20s;
+constexpr Milliseconds TIMER_BANEFUL = 24s;
+constexpr Milliseconds TIMER_WEB_EXPLOSION = 20s;
class boss_hedrum : public CreatureScript
{
@@ -50,9 +47,9 @@ public:
void JustEngagedWith(Unit* /*who*/) override
{
_JustEngagedWith();
- events.ScheduleEvent(SPELL_PARALYZING, 0.2 * (int) TIMER_PARALYZING);
- events.ScheduleEvent(SPELL_BANEFUL, 0.2 * (int) TIMER_BANEFUL);
- events.ScheduleEvent(SPELL_WEB_EXPLOSION, 0.2 * (int) TIMER_WEB_EXPLOSION);
+ events.ScheduleEvent(SPELL_PARALYZING, TIMER_PARALYZING / 5);
+ events.ScheduleEvent(SPELL_BANEFUL, TIMER_BANEFUL / 5);
+ events.ScheduleEvent(SPELL_WEB_EXPLOSION, TIMER_WEB_EXPLOSION / 5);
}
void UpdateAI(uint32 diff) override
@@ -74,18 +71,18 @@ public:
{
case SPELL_PARALYZING:
DoCastVictim(SPELL_PARALYZING);
- events.ScheduleEvent(SPELL_PARALYZING, urand(TIMER_PARALYZING - 2000, TIMER_PARALYZING + 2000));
+ events.ScheduleEvent(SPELL_PARALYZING, TIMER_PARALYZING - 2s, TIMER_PARALYZING + 2s);
break;
case SPELL_BANEFUL:
DoCastVictim(SPELL_BANEFUL);
- events.ScheduleEvent(SPELL_BANEFUL, urand(TIMER_BANEFUL - 2000, TIMER_BANEFUL + 2000));
+ events.ScheduleEvent(SPELL_BANEFUL, TIMER_BANEFUL - 2s, TIMER_BANEFUL + 2s);
break;
case SPELL_WEB_EXPLOSION:
if (me->GetDistance2d(me->GetVictim()) < 100.0f)
{
DoCast(SPELL_WEB_EXPLOSION);
}
- events.ScheduleEvent(SPELL_WEB_EXPLOSION, urand(TIMER_WEB_EXPLOSION - 2000, TIMER_WEB_EXPLOSION + 2000));
+ events.ScheduleEvent(SPELL_WEB_EXPLOSION, TIMER_WEB_EXPLOSION - 2s, TIMER_WEB_EXPLOSION + 2s);
break;
default:
break;
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp
index 5d27104936..a408472a07 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp
@@ -28,14 +28,11 @@ enum Spells
SPELL_WORDPAIN = 15654,
};
-enum SpellTimers
-{
- TIMER_HEAL = 12000,
- TIMER_MINDBLAST = 16000,
- TIMER_RENEW = 12000,
- TIMER_SHADOWBOLT = 16000,
- TIMER_WORDPAIN = 12000,
-};
+constexpr Milliseconds TIMER_HEAL = 12s;
+constexpr Milliseconds TIMER_MINDBLAST = 16s;
+constexpr Milliseconds TIMER_RENEW = 12s;
+constexpr Milliseconds TIMER_SHADOWBOLT = 16s;
+constexpr Milliseconds TIMER_WORDPAIN = 12s;
struct boss_moira_bronzebeardAI : public BossAI
{
@@ -44,9 +41,9 @@ struct boss_moira_bronzebeardAI : public BossAI
void JustEngagedWith(Unit* /*who*/) override
{
_JustEngagedWith();
- events.ScheduleEvent(SPELL_MINDBLAST, 0.5 * (int) TIMER_MINDBLAST);
- events.ScheduleEvent(SPELL_HEAL, 0.5 * (int) TIMER_HEAL);
- events.ScheduleEvent(SPELL_RENEW, 0.5 * (int) TIMER_RENEW);
+ events.ScheduleEvent(SPELL_MINDBLAST, TIMER_MINDBLAST / 2);
+ events.ScheduleEvent(SPELL_HEAL, TIMER_HEAL / 2);
+ events.ScheduleEvent(SPELL_RENEW, TIMER_RENEW / 2);
}
void UpdateAI(uint32 diff) override
@@ -67,7 +64,7 @@ struct boss_moira_bronzebeardAI : public BossAI
{
case SPELL_MINDBLAST:
DoCastVictim(SPELL_MINDBLAST);
- events.ScheduleEvent(SPELL_MINDBLAST, urand(TIMER_MINDBLAST - 2000, TIMER_MINDBLAST + 2000));
+ events.ScheduleEvent(SPELL_MINDBLAST, TIMER_MINDBLAST - 2s, TIMER_MINDBLAST + 2s);
break;
case SPELL_HEAL:
CastOnEmperorIfPossible(SPELL_HEAL, TIMER_HEAL);
@@ -82,7 +79,7 @@ struct boss_moira_bronzebeardAI : public BossAI
DoMeleeAttackIfReady();
}
- void CastOnEmperorIfPossible(uint32 spell, uint32 timer)
+ void CastOnEmperorIfPossible(uint32 spell, Milliseconds timer)
{
Creature* emperor = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_EMPEROR));
if (emperor && emperor->HealthBelowPct(90))
@@ -93,7 +90,7 @@ struct boss_moira_bronzebeardAI : public BossAI
{
DoCastSelf(spell);
}
- events.ScheduleEvent(spell, urand(timer - 2000, timer + 2000));
+ events.ScheduleEvent(spell, timer - 2s, timer + 2s);
}
};
@@ -107,10 +104,10 @@ struct boss_high_priestess_thaurissanAI : public boss_moira_bronzebeardAI
{
_JustEngagedWith();
Talk(0);
- events.ScheduleEvent(SPELL_WORDPAIN, 0.5 * (int)TIMER_WORDPAIN);
- events.ScheduleEvent(SPELL_HEAL, 0.5 * (int) TIMER_HEAL);
- events.ScheduleEvent(SPELL_RENEW, 0.5 * (int) TIMER_RENEW);
- events.ScheduleEvent(SPELL_SHADOWBOLT, 0.5 * (int) TIMER_SHADOWBOLT);
+ events.ScheduleEvent(SPELL_WORDPAIN, TIMER_WORDPAIN / 2);
+ events.ScheduleEvent(SPELL_HEAL, TIMER_HEAL / 2);
+ events.ScheduleEvent(SPELL_RENEW, TIMER_RENEW / 2);
+ events.ScheduleEvent(SPELL_SHADOWBOLT, TIMER_SHADOWBOLT / 2);
}
void UpdateAI(uint32 diff) override
@@ -131,7 +128,7 @@ struct boss_high_priestess_thaurissanAI : public boss_moira_bronzebeardAI
{
case SPELL_WORDPAIN:
DoCastVictim(SPELL_WORDPAIN);
- events.ScheduleEvent(SPELL_WORDPAIN, urand(TIMER_WORDPAIN - 2000, TIMER_WORDPAIN + 2000));
+ events.ScheduleEvent(SPELL_WORDPAIN, TIMER_WORDPAIN - 2s, TIMER_WORDPAIN + 2s);
break;
case SPELL_HEAL:
CastOnEmperorIfPossible(SPELL_HEAL, TIMER_HEAL);
@@ -141,7 +138,7 @@ struct boss_high_priestess_thaurissanAI : public boss_moira_bronzebeardAI
break;
case SPELL_SHADOWBOLT:
DoCastVictim(SPELL_SHADOWBOLT);
- events.ScheduleEvent(SPELL_SHADOWBOLT, urand(TIMER_SHADOWBOLT - 2000, TIMER_SHADOWBOLT + 2000));
+ events.ScheduleEvent(SPELL_SHADOWBOLT, TIMER_SHADOWBOLT - 2s, TIMER_SHADOWBOLT + 2s);
break;
default:
break;
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_okthor.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_okthor.cpp
index c5168332ae..1da1d30b0a 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_okthor.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_okthor.cpp
@@ -27,13 +27,10 @@ enum Spells
SPELL_SLOW = 19137
};
-enum Timers
-{
- TIMER_ARCANE_BOLT = 7000,
- TIMER_ARCANE_EXPLOSION = 24000,
- TIMER_POLYMORPH = 12000,
- TIMER_SLOW = 15000
-};
+constexpr Milliseconds TIMER_ARCANE_BOLT = 7s;
+constexpr Milliseconds TIMER_ARCANE_EXPLOSION = 24s;
+constexpr Milliseconds TIMER_POLYMORPH = 12s;
+constexpr Milliseconds TIMER_SLOW = 15s;
class boss_okthor : public CreatureScript
{
@@ -49,15 +46,15 @@ public:
{
boss_okthorAI(Creature* creature) : BossAI(creature, DATA_OKTHOR) {}
- uint32 nextArcaneExplosionTime;
+ Milliseconds nextArcaneExplosionTime;
void JustEngagedWith(Unit* /*who*/) override
{
_JustEngagedWith();
- events.ScheduleEvent(SPELL_ARCANE_BOLT, 0.2 * (int) TIMER_ARCANE_BOLT);
- events.ScheduleEvent(SPELL_ARCANE_EXPLOSION, 0.2 * (int) TIMER_ARCANE_EXPLOSION);
- events.ScheduleEvent(SPELL_POLYMORPH, 0.2 * (int) TIMER_POLYMORPH);
- events.ScheduleEvent(SPELL_SLOW, 500);
+ events.ScheduleEvent(SPELL_ARCANE_BOLT, TIMER_ARCANE_BOLT / 5);
+ events.ScheduleEvent(SPELL_ARCANE_EXPLOSION, TIMER_ARCANE_EXPLOSION / 5);
+ events.ScheduleEvent(SPELL_POLYMORPH, TIMER_POLYMORPH / 5);
+ events.ScheduleEvent(SPELL_SLOW, 500ms);
}
void UpdateAI(uint32 diff) override
@@ -82,17 +79,17 @@ public:
{
DoCast(target, SPELL_ARCANE_BOLT);
}
- events.ScheduleEvent(SPELL_ARCANE_BOLT, urand(TIMER_ARCANE_BOLT - 2000, TIMER_ARCANE_BOLT + 2000));
+ events.ScheduleEvent(SPELL_ARCANE_BOLT, TIMER_ARCANE_BOLT - 2s, TIMER_ARCANE_BOLT + 2s);
break;
case SPELL_ARCANE_EXPLOSION:
if (me->GetDistance2d(me->GetVictim()) < 50.0f)
{
DoCast(SPELL_ARCANE_EXPLOSION);
- nextArcaneExplosionTime = urand(TIMER_ARCANE_EXPLOSION - 2000, TIMER_ARCANE_EXPLOSION + 2000);
+ nextArcaneExplosionTime = randtime(TIMER_ARCANE_EXPLOSION - 2s, TIMER_ARCANE_EXPLOSION + 2s);
}
else
{
- nextArcaneExplosionTime = 0.3*urand(TIMER_ARCANE_EXPLOSION - 2000, TIMER_ARCANE_EXPLOSION + 2000);
+ nextArcaneExplosionTime = randtime(TIMER_ARCANE_EXPLOSION - 2s, TIMER_ARCANE_EXPLOSION + 2s) / 3;
}
events.ScheduleEvent(SPELL_ARCANE_EXPLOSION, nextArcaneExplosionTime);
break;
@@ -101,7 +98,7 @@ public:
{
DoCast(target, SPELL_POLYMORPH);
}
- events.ScheduleEvent(SPELL_POLYMORPH, urand(TIMER_POLYMORPH - 2000, TIMER_POLYMORPH + 2000));
+ events.ScheduleEvent(SPELL_POLYMORPH, TIMER_POLYMORPH - 2s, TIMER_POLYMORPH + 2s);
break;
case SPELL_SLOW:
if (me->GetDistance2d(me->GetVictim()) < 50.0f)
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp
index 243d6e71c5..fd18069ca9 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp
@@ -606,7 +606,7 @@ public:
if (Creature* argelmach = instance->GetCreature(ArgelmachGUID))
{
argelmach->HandleEmoteCommand(EMOTE_ONESHOT_SHOUT);
- argelmach->m_Events.AddEvent(new RestoreAttack(argelmach), argelmach->m_Events.CalculateTime(3000));
+ argelmach->m_Events.AddEventAtOffset(new RestoreAttack(argelmach), 3s);
for (ObjectGuid const& argelmachAddGUID : ArgelmachAdds)
{
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp
index 2beaacff3d..f7bf1b5a55 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp
@@ -96,7 +96,7 @@ public:
void IsSummonedBy(WorldObject* /*summoner*/) override
{
- events.ScheduleEvent(EVENT_SUMMONED_1, 1000);
+ events.ScheduleEvent(EVENT_SUMMONED_1, 1s);
}
void JustSummoned(Creature* summon) override
@@ -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_lord_valthalak.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp
index 66ecf747ec..d88c390b10 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp
@@ -71,7 +71,7 @@ public:
void IsSummonedBy(WorldObject* /*summoner*/) override
{
- StartTalking(TALK_SUMMON, 8 * IN_MILLISECONDS);
+ StartTalking(TALK_SUMMON, 8s);
}
void JustEngagedWith(Unit* who) override
@@ -92,7 +92,7 @@ public:
instance->SetData(DATA_LORD_VALTHALAK, DONE);
}
- void StartTalking(uint32 talkGroupId, uint32 timer)
+ void StartTalking(uint32 talkGroupId, Milliseconds timer)
{
me->SetReactState(REACT_PASSIVE);
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
@@ -123,7 +123,7 @@ public:
events.CancelEvent(EVENT_SUMMON_SPECTRAL_ASSASSIN);
- StartTalking(TALK_40_HP, 5 * IN_MILLISECONDS);
+ StartTalking(TALK_40_HP, 5s);
}
if (!frenzy15 && me->HealthBelowPctDamaged(15, damage))
@@ -132,7 +132,7 @@ public:
events.ScheduleEvent(EVENT_SHADOW_BOLT_VOLLEY, 12s, 19s, 0, EVENT_PHASE_FIGHT);
- StartTalking(TALK_15_HP, 5 * IN_MILLISECONDS);
+ StartTalking(TALK_15_HP, 5s);
}
}
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_quartermaster_zigris.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp
index 45e6502eb8..45af53d9bc 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp
@@ -77,7 +77,9 @@ struct boss_quartermaster_zigris : public BossAI
{
if (me->IsWithinMeleeRange(me->GetVictim()))
{
- me->GetMotionMaster()->MoveBackwards(me->GetVictim(), 10.0f);
+ float x, y, z;
+ me->GetNearPoint(me->GetVictim(), x, y, z, me->GetVictim()->GetBoundaryRadius(), 10.0f, me->GetAngle(me->GetVictim()));
+ me->GetMotionMaster()->MovePoint(0, x, y, z, FORCED_MOVEMENT_RUN); // TODO: Implement generic distancing on npc on target root
}
}
}
@@ -108,11 +110,11 @@ struct boss_quartermaster_zigris : public BossAI
if (me->IsWithinMeleeRange(me->GetVictim()))
{
DoCastVictim(SPELL_HOOKEDNET);
- events.RepeatEvent(16000);
+ events.Repeat(16s);
}
else
{
- events.RepeatEvent(3000);
+ events.Repeat(3s);
}
break;
case EVENT_SHOOT:
@@ -128,7 +130,7 @@ struct boss_quartermaster_zigris : public BossAI
me->GetMotionMaster()->Clear();
me->GetMotionMaster()->MoveChase(me->GetVictim());
}
- events.RepeatEvent(2000);
+ events.Repeat(2s);
break;
}
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 6383681943..d1dbc4ff9e 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
@@ -222,7 +222,7 @@ public:
if (GameObject* portcullis = me->FindNearestGameObject(GO_DR_PORTCULLIS, 50.0f))
waveDoorGUID = portcullis->GetGUID();
- events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0ms);
events.ScheduleEvent(EVENT_START_1, 1s);
}
}
@@ -234,7 +234,7 @@ public:
{
switch (id)
{
- case 5:
+ case 6:
events.ScheduleEvent(EVENT_TELEPORT_1, 2s);
break;
}
@@ -264,7 +264,7 @@ public:
events.ScheduleEvent(EVENT_START_2, 4s);
break;
case EVENT_START_2:
- events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0ms);
if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->HandleEmoteCommand(EMOTE_ONESHOT_POINT);
events.ScheduleEvent(EVENT_START_3, 4s);
@@ -314,14 +314,14 @@ public:
events.ScheduleEvent(EVENT_SPAWN_WAVE, 3s);
break;
case EVENT_WAVES_TEXT_2:
- events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0ms);
if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_3);
events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4s);
events.ScheduleEvent(EVENT_SPAWN_WAVE, 3s);
break;
case EVENT_WAVES_TEXT_3:
- events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0ms);
if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_4);
events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4s);
@@ -334,14 +334,14 @@ public:
events.ScheduleEvent(EVENT_SPAWN_WAVE, 3s);
break;
case EVENT_WAVES_TEXT_5:
- events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0ms);
if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_5);
events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4s);
events.ScheduleEvent(EVENT_SPAWN_WAVE, 3s);
break;
case EVENT_WAVES_COMPLETE_TEXT_1:
- events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0ms);
if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_6);
events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4s);
@@ -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 84d3c07acc..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);
}
}
@@ -157,8 +157,8 @@ public:
orc->AI()->Talk(SAY_BLACKHAND_DOOMED);
}
- orc->m_Events.AddEvent(new OrcMoveEvent(orc), me->m_Events.CalculateTime(3 * IN_MILLISECONDS));
- orc->m_Events.AddEvent(new OrcDeathEvent(orc), me->m_Events.CalculateTime(9 * IN_MILLISECONDS));
+ orc->m_Events.AddEventAtOffset(new OrcMoveEvent(orc), 3s);
+ orc->m_Events.AddEventAtOffset(new OrcDeathEvent(orc), 9s);
}
}
}
@@ -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
@@ -227,7 +227,7 @@ public:
case EVENT_FIREBALL:
DoCastVictim(SPELL_FIREBALL);
events.ScheduleEvent(EVENT_FIREBALL, 8s, 21s);
- if (events.GetNextEventTime(EVENT_FIREBLAST) < 3 * IN_MILLISECONDS)
+ if (events.GetTimeUntilEvent(EVENT_FIREBLAST) < 3s)
{
events.RescheduleEvent(EVENT_FIREBLAST, 3s);
}
@@ -235,7 +235,7 @@ public:
case EVENT_FIREBLAST:
DoCastVictim(SPELL_FIREBLAST);
events.ScheduleEvent(EVENT_FIREBLAST, 5s, 8s);
- if (events.GetNextEventTime(EVENT_FIREBALL) < 3 * IN_MILLISECONDS)
+ if (events.GetTimeUntilEvent(EVENT_FIREBALL) < 3s)
{
events.RescheduleEvent(EVENT_FIREBALL, 3s);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp
index 55ac1f26e0..33f37d0833 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp
@@ -98,31 +98,31 @@ public:
{
case EVENT_SNAP_KICK:
DoCastVictim(SPELL_SNAPKICK);
- events.RepeatEvent(6 * IN_MILLISECONDS);
+ events.Repeat(6s);
break;
case EVENT_CLEAVE:
DoCastVictim(SPELL_CLEAVE);
- events.RepeatEvent(12 * IN_MILLISECONDS);
+ events.Repeat(12s);
break;
case EVENT_UPPERCUT:
DoCastVictim(SPELL_UPPERCUT);
- events.RepeatEvent(14 * IN_MILLISECONDS);
+ events.Repeat(14s);
break;
case EVENT_MORTAL_STRIKE:
DoCastVictim(SPELL_MORTALSTRIKE);
- events.RepeatEvent(10 * IN_MILLISECONDS);
+ events.Repeat(10s);
break;
case EVENT_PUMMEL:
DoCastVictim(SPELL_PUMMEL);
- events.RepeatEvent(16 * IN_MILLISECONDS);
+ events.Repeat(16s);
break;
case EVENT_THROW_AXE:
DoCastRandomTarget(SPELL_THROWAXE);
- events.RepeatEvent(8 * IN_MILLISECONDS);
+ events.Repeat(8s);
break;
case EVENT_THRASH:
DoCastSelf(SPELL_THRASH);
- events.RepeatEvent(10 * IN_MILLISECONDS);
+ events.Repeat(10s);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp
index d9508f0b5a..8c5af306e5 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp
@@ -39,10 +39,7 @@ enum EventIds
EVENT_SOLAKAR_WAVE = 3
};
-enum Timers
-{
- TIMER_SOLAKAR_WAVE = 30000
-};
+constexpr Milliseconds TIMER_SOLAKAR_WAVE = 30s;
enum SolakarWaves
{
@@ -1049,7 +1046,7 @@ public:
break;
case EVENT_VAEL_3_DESPAWN:
DoCast(me, SPELL_VAELASTRASZ_SPAWN);
- me->DespawnOrUnsummon(1500);
+ me->DespawnOrUnsummon(1500ms);
break;
default:
break;
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp
index cf39b53a1f..fc8368f1b5 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp
@@ -118,7 +118,7 @@ public:
return !victim->HasAura(SPELL_TIMELAPSE);
}
- void SetGUID(ObjectGuid guid, int32 id) override
+ void SetGUID(ObjectGuid const& guid, int32 id) override
{
if (id == GUID_LEVER_USER)
{
@@ -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 614976c5ae..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:
@@ -435,10 +435,10 @@ public:
break;
case EVENT_SUCCESS_2:
DoCast(me, SPELL_VAELASTRASZZ_SPAWN);
- me->DespawnOrUnsummon(1000);
+ 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/BlackrockMountain/BlackwingLair/boss_razorgore.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp
index 4b82654fb6..de984f635e 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp
@@ -152,7 +152,7 @@ public:
}
}
- void SetGUID(ObjectGuid const guid, int32 /*id*/) override
+ void SetGUID(ObjectGuid const& guid, int32 /*id*/) override
{
_charmerGUID = guid;
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp
index de8d3ef6c7..15f0f63f17 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp
@@ -345,7 +345,7 @@ public:
{
case NPC_BLACKWING_DRAGON:
--addsCount[0];
- if (EggEvent != DONE && _events.GetTimeUntilEvent(EVENT_RAZOR_SPAWN) == Milliseconds::max())
+ if (EggEvent != DONE && !_events.HasTimeUntilEvent(EVENT_RAZOR_SPAWN))
{
_events.ScheduleEvent(EVENT_RAZOR_SPAWN, 1s);
}
@@ -353,7 +353,7 @@ public:
case NPC_BLACKWING_LEGIONAIRE:
case NPC_BLACKWING_MAGE:
--addsCount[1];
- if (EggEvent != DONE && _events.GetTimeUntilEvent(EVENT_RAZOR_SPAWN) == Milliseconds::max())
+ if (EggEvent != DONE && !_events.HasTimeUntilEvent(EVENT_RAZOR_SPAWN))
{
_events.ScheduleEvent(EVENT_RAZOR_SPAWN, 1s);
}
@@ -413,7 +413,7 @@ public:
if (spawnMoreAdds)
{
- _events.ScheduleEvent(EVENT_RAZOR_SPAWN, 15000);
+ _events.ScheduleEvent(EVENT_RAZOR_SPAWN, 15s);
}
}
break;
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp
index 9f6823b3b1..0bf59bb34f 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp
@@ -91,7 +91,7 @@ public:
case EVENT_INFERNO:
{
DoCastAOE(SPELL_INFERNO);
- events.RepeatEvent(urand(21000, 26000));
+ events.Repeat(21s, 26s);
break;
}
case EVENT_IGNITE_MANA:
@@ -101,7 +101,7 @@ public:
DoCast(target, SPELL_IGNITE_MANA);
}
- events.RepeatEvent(urand(27000, 32000));
+ events.Repeat(27s, 32s);
break;
}
case EVENT_LIVING_BOMB:
@@ -111,7 +111,7 @@ public:
DoCast(target, SPELL_LIVING_BOMB);
}
- events.RepeatEvent(urand(11000, 16000));
+ events.Repeat(11s, 16s);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp
index 3682a67fd1..9b6ec713a5 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp
@@ -111,13 +111,13 @@ public:
case EVENT_ANTIMAGIC_PULSE:
{
DoCastSelf(SPELL_ANTIMAGIC_PULSE);
- events.RepeatEvent(20000);
+ events.Repeat(20s);
break;
}
case EVENT_MAGMA_SHACKLES:
{
DoCastSelf(SPELL_MAGMA_SHACKLES);
- events.RepeatEvent(15000);
+ events.Repeat(15s);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp
index a358bec9d5..80a2bc1e82 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp
@@ -58,7 +58,7 @@ public:
case EVENT_GEHENNAS_CURSE:
{
DoCastVictim(SPELL_GEHENNAS_CURSE);
- events.RepeatEvent(urand(25000, 30000));
+ events.Repeat(25s, 30s);
break;
}
case EVENT_RAIN_OF_FIRE:
@@ -67,7 +67,7 @@ public:
{
DoCast(target, SPELL_RAIN_OF_FIRE, true);
}
- events.RepeatEvent(6000);
+ events.Repeat(6s);
break;
}
case EVENT_SHADOW_BOLT:
@@ -88,7 +88,7 @@ public:
DoCastVictim(SPELL_SHADOW_BOLT_VICTIM);
}
- events.RepeatEvent(5000);
+ events.Repeat(5s);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp
index 384b818974..1ddbabeefd 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp
@@ -57,19 +57,19 @@ public:
case EVENT_IMPENDING_DOOM:
{
DoCastVictim(SPELL_IMPENDING_DOOM);
- events.RepeatEvent(20000);
+ events.Repeat(20s);
break;
}
case EVENT_LUCIFRON_CURSE:
{
DoCastVictim(SPELL_LUCIFRON_CURSE);
- events.RepeatEvent(20000);
+ events.Repeat(20s);
break;
}
case EVENT_SHADOW_SHOCK:
{
DoCastVictim(SPELL_SHADOW_SHOCK);
- events.RepeatEvent(5000);
+ events.Repeat(5s);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp
index 978cf2f80a..460abdbd16 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp
@@ -73,13 +73,13 @@ public:
{
Talk(EMOTE_FRENZY);
DoCastSelf(SPELL_FRENZY);
- events.RepeatEvent(urand(15000, 20000));
+ events.Repeat(15s, 20s);
break;
}
case EVENT_PANIC:
{
DoCastVictim(SPELL_PANIC);
- events.RepeatEvent(urand(31000, 38000));
+ events.Repeat(31s, 38s);
break;
}
case EVENT_LAVA_BOMB:
@@ -89,7 +89,7 @@ public:
DoCast(target, SPELL_LAVA_BOMB);
}
- events.RepeatEvent(urand(12000, 15000));
+ events.Repeat(12s, 15s);
break;
}
case EVENT_LAVA_BOMB_RANGED:
@@ -104,7 +104,7 @@ public:
{
DoCast(targets.front() , SPELL_LAVA_BOMB_RANGED);
}
- events.RepeatEvent(urand(12000, 15000));
+ events.Repeat(12s, 15s);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp
index ce586774f5..769a43deb6 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp
@@ -348,7 +348,7 @@ public:
{
DoCastSelf(SPELL_DAMAGE_REFLECTION);
}
- events.RepeatEvent(30000);
+ events.Repeat(30s);
break;
}
case EVENT_TELEPORT_RANDOM:
@@ -359,14 +359,14 @@ public:
DoCast(target, SPELL_TELEPORT_RANDOM);
}
- events.RepeatEvent(30000);
+ events.Repeat(30s);
break;
}
case EVENT_TELEPORT_TARGET:
{
DoCastSelf(SPELL_HATE_TO_ZERO, true);
DoCastAOE(SPELL_TELEPORT_TARGET);
- events.RepeatEvent(30000);
+ events.Repeat(30s);
break;
}
}
@@ -430,7 +430,7 @@ public:
Talk(SAY_RAG_SUM_2);
// Next event will get triggered in MovementInform
me->SetWalk(true);
- me->GetMotionMaster()->MovePoint(POINT_RAGNAROS_SUMMON, MajordomoMoveRagPos, true, false);
+ me->GetMotionMaster()->MovePoint(POINT_RAGNAROS_SUMMON, MajordomoMoveRagPos, FORCED_MOVEMENT_NONE, 0.f, true, false);
break;
}
case EVENT_RAGNAROS_SUMMON_2:
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp
index 84dfa53781..6cde45bdd4 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp
@@ -183,13 +183,13 @@ public:
}
}
- void SetGUID(ObjectGuid guid, int32 index) override
+ void SetGUID(ObjectGuid const& guid, int32 index) override
{
if (index == GO_LAVA_BURST)
{
if (_lavaBurstGUIDS.empty())
{
- extraEvents.ScheduleEvent(EVENT_LAVA_BURST_TRIGGER, 1);
+ extraEvents.ScheduleEvent(EVENT_LAVA_BURST_TRIGGER, 1ms);
}
_lavaBurstGUIDS.insert(guid);
@@ -309,7 +309,7 @@ public:
}
_lavaBurstGUIDS.erase(lavaBurstGUID);
- extraEvents.RepeatEvent(1000);
+ extraEvents.Repeat(1s);
}
else
{
@@ -350,7 +350,7 @@ public:
{
Talk(SAY_WRATH);
}
- events.RepeatEvent(25000);
+ events.Repeat(25s);
break;
}
case EVENT_HAND_OF_RAGNAROS:
@@ -362,7 +362,7 @@ public:
_isKnockbackEmoteAllowed = false;
extraEvents.RescheduleEvent(EVENT_RESET_KNOCKBACK_EMOTE, 5s);
}
- events.RepeatEvent(20000);
+ events.Repeat(20s);
break;
}
case EVENT_LAVA_BURST:
@@ -401,7 +401,7 @@ public:
extraEvents.RescheduleEvent(EVENT_RESET_KNOCKBACK_EMOTE, 5s);
}
}
- events.RepeatEvent(urand(11000, 30000));
+ events.Repeat(11s, 30s);
break;
}
case EVENT_SUBMERGE:
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp
index fc135b2817..08203f4439 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp
@@ -67,7 +67,7 @@ public:
case EVENT_ARCANE_EXPLOSION:
{
DoCastVictim(SPELL_ARCANE_EXPLOSION);
- events.RepeatEvent(urand(4000, 5000));
+ events.Repeat(4s, 5s);
break;
}
case EVENT_SHAZZRAH_CURSE:
@@ -76,26 +76,26 @@ public:
{
DoCast(target, SPELL_SHAZZRAH_CURSE);
}
- events.RepeatEvent(urand(23000, 26000));
+ events.Repeat(23s, 26s);
break;
}
case EVENT_MAGIC_GROUNDING:
{
DoCastSelf(SPELL_MAGIC_GROUNDING);
- events.RepeatEvent(urand(7000, 9000));
+ events.Repeat(7s, 9s);
break;
}
case EVENT_COUNTERSPELL:
{
DoCastAOE(SPELL_COUNTERSPELL);
- events.RepeatEvent(urand(15000, 18000));
+ events.Repeat(15s, 18s);
break;
}
case EVENT_SHAZZRAH_GATE:
{
DoCastAOE(SPELL_SHAZZRAH_GATE_DUMMY);
events.RescheduleEvent(EVENT_ARCANE_EXPLOSION, 3s, 6s);
- events.RepeatEvent(45000);
+ events.Repeat(45s);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp
index 942a22f619..739a82d665 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp
@@ -72,7 +72,7 @@ public:
case EVENT_DEMORALIZING_SHOUT:
{
DoCastVictim(SPELL_DEMORALIZING_SHOUT);
- events.RepeatEvent(urand(12000, 18000));
+ events.Repeat(12s, 18s);
break;
}
case EVENT_INSPIRE:
@@ -84,19 +84,19 @@ public:
}
DoCastSelf(SPELL_INSPIRE);
- events.RepeatEvent(urand(13000, 20000));
+ events.Repeat(13s, 20s);
break;
}
case EVENT_KNOCKDOWN:
{
DoCastVictim(SPELL_KNOCKDOWN);
- events.RepeatEvent(urand(10000, 20000));
+ events.Repeat(10s, 20s);
break;
}
case EVENT_FLAMESPEAR:
{
DoCastRandomTarget(SPELL_FLAMESPEAR);
- events.RepeatEvent(urand(12000, 16000));
+ events.Repeat(12s, 16s);
break;
}
}
@@ -133,7 +133,7 @@ public:
events.ScheduleEvent(EVENT_DARK_STRIKE, 4s, 7s);
events.ScheduleEvent(EVENT_DARK_MENDING, 15s, 30s);
events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 2s, 4s);
- events.ScheduleEvent(EVENT_IMMOLATE, 3500ms, 6000ms);
+ events.ScheduleEvent(EVENT_IMMOLATE, 3500ms, 6s);
}
void UpdateAI(uint32 diff) override
@@ -157,7 +157,7 @@ public:
case EVENT_DARK_STRIKE:
{
DoCastVictim(SPELL_DARK_STRIKE);
- events.RepeatEvent(urand(4000, 7000));
+ events.Repeat(4s, 7s);
break;
}
case EVENT_DARK_MENDING:
@@ -169,7 +169,7 @@ public:
DoCast(target, SPELL_DARK_MENDING);
}
}
- events.RepeatEvent(urand(15000, 20000));
+ events.Repeat(15s, 20s);
break;
}
case EVENT_SHADOW_WORD_PAIN:
@@ -178,7 +178,7 @@ public:
{
DoCast(target, SPELL_SHADOW_WORD_PAIN);
}
- events.RepeatEvent(urand(2500, 5000));
+ events.Repeat(2500ms, 5s);
break;
}
case EVENT_IMMOLATE:
@@ -187,7 +187,7 @@ public:
{
DoCast(target, SPELL_IMMOLATE);
}
- events.RepeatEvent(urand(5000, 7000));
+ events.Repeat(5s, 7s);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.cpp
index 9d1d0033e2..73afa5f049 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.cpp
@@ -199,7 +199,7 @@ class spell_mc_play_dead_aura : public AuraScript
else
{
Unit::Kill(creatureTarget, creatureTarget);
- creatureTarget->DespawnOrUnsummon(14000);
+ creatureTarget->DespawnOrUnsummon(14s);
}
}
diff --git a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp
index 44c7b68395..d52d5bb34a 100644
--- a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp
+++ b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp
@@ -90,7 +90,7 @@ public:
if (me->HealthBelowPct(67) && !health67)
{
me->CastSpell(me, SPELL_SMITE_STOMP, false);
- events.DelayEvents(10000);
+ events.DelayEvents(10s);
me->GetMotionMaster()->Clear();
me->GetMotionMaster()->MovePoint(EQUIP_TWO_SWORDS, 1.859f, -780.72f, 9.831f);
Talk(SAY_SWAP1);
@@ -105,7 +105,7 @@ public:
if (me->HealthBelowPct(34) && !health34)
{
me->CastSpell(me, SPELL_SMITE_STOMP, false);
- events.DelayEvents(10000);
+ events.DelayEvents(10s);
me->GetMotionMaster()->Clear();
me->GetMotionMaster()->MovePoint(EQUIP_MACE, 1.859f, -780.72f, 9.831f);
Talk(SAY_SWAP2);
diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp
index e4125d70d0..bfc418d000 100644
--- a/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp
+++ b/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp
@@ -131,7 +131,7 @@ public:
uint32 checkTimer;
ObjectGuid playerGUID;
- void SetGUID(ObjectGuid guid, int32) override
+ void SetGUID(ObjectGuid const& guid, int32) override
{
playerGUID = guid;
}
@@ -146,7 +146,7 @@ public:
{
if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID))
player->GroupEventHappens(QUEST_A_FINE_MESS, me);
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
}
}
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/boss_shade_of_aran.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
index f804a28785..15e175dde7 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
@@ -151,7 +151,7 @@ struct boss_shade_of_aran : public BossAI
return me->GetDistance2d(roomCenter.GetPositionX(), roomCenter.GetPositionY()) < 45.0f;
}
- void SetGUID(ObjectGuid guid, int32 id) override
+ void SetGUID(ObjectGuid const& guid, int32 id) override
{
if (id == ACTION_ATIESH_REACT && !_atieshReaction)
{
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_tenris_mirkblood.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_tenris_mirkblood.cpp
index bed3364478..07eb7da114 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_tenris_mirkblood.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_tenris_mirkblood.cpp
@@ -123,6 +123,15 @@ struct boss_tenris_mirkblood : public BossAI
return;
DoCast(victim, SPELL_SUMMON_SANGUINE_SPIRIT_ON_KILL);
+
+ if (!_mirrorTarget)
+ return;
+
+ if (victim == _mirrorTarget)
+ {
+ me->RemoveAurasDueToSpell(SPELL_BLOOD_MIRROR0);
+ me->RemoveAurasDueToSpell(SPELL_BLOOD_MIRROR1);
+ }
}
void DamageTaken(Unit* attacker, uint32& damage, DamageEffectType damageType, SpellSchoolMask damageSchoolMask) override
@@ -281,8 +290,8 @@ public:
bool OnTrigger(Player* player, AreaTrigger const* /*trigger*/) override
{
if (InstanceScript* instance = player->GetInstanceScript())
- if (instance->GetBossState(DATA_MIRKBLOOD) != DONE)
- if (Creature* mirkblood = instance->GetCreature(DATA_MIRKBLOOD))
+ if (Creature* mirkblood = instance->GetCreature(DATA_MIRKBLOOD))
+ if (mirkblood->IsAlive() && !mirkblood->IsInCombat())
mirkblood->AI()->Talk(SAY_APPROACH, player);
return false;
@@ -297,8 +306,8 @@ public:
bool OnTrigger(Player* player, AreaTrigger const* /*trigger*/) override
{
if (InstanceScript* instance = player->GetInstanceScript())
- if (instance->GetBossState(DATA_MIRKBLOOD) != DONE)
- if (Creature* mirkblood = instance->GetCreature(DATA_MIRKBLOOD))
+ if (Creature* mirkblood = instance->GetCreature(DATA_MIRKBLOOD))
+ if (mirkblood->IsAlive() && mirkblood->IsImmuneToPC())
mirkblood->SetImmuneToPC(false);
return false;
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
index 3b5092fab2..fa32df8185 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
@@ -88,7 +88,7 @@ struct npc_kilrek : public ScriptedAI
DoCast(Terestian, SPELL_BROKEN_PACT, true);
}
}
- me->DespawnOrUnsummon(15000);
+ me->DespawnOrUnsummon(15s);
}
void UpdateAI(uint32 diff) override
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
index cf45992a8e..84bd98bc66 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
@@ -170,7 +170,8 @@ public:
if (m_uiEventId == EVENT_OZ)
instance->SetData(DATA_OPERA_OZ_DEATHCOUNT, IN_PROGRESS);
- Start(false, false);
+ me->SetWalk(true);
+ Start(false);
}
void JustEngagedWith(Unit* /*who*/) override { }
@@ -523,9 +524,9 @@ public:
}
}
- me->DespawnOrUnsummon(100);
+ me->DespawnOrUnsummon(100ms);
if (Creature* arca = ObjectAccessor::GetCreature((*me), ArcanagosGUID))
- arca->DespawnOrUnsummon(100);
+ arca->DespawnOrUnsummon(100ms);
return 5000;
default:
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
index 8feeadedcb..91c2e40b03 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
@@ -138,7 +138,7 @@ struct boss_felblood_kaelthas : public BossAI
ScheduleTimedEvent(0ms, [&]{
DoCastVictim(SPELL_FIREBALL);
- }, 3000ms, 4500ms);
+ }, 3s, 4500ms);
ScheduleTimedEvent(15s, [&]{
Talk(SAY_PHOENIX);
DoCastSelf(SPELL_PHOENIX);
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
index 66edbda08a..e5535991f5 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
@@ -95,7 +95,7 @@ struct boss_selin_fireheart : public BossAI
BossAI::JustEngagedWith(who);
ScheduleTimedEvent(2500ms, [&]{
DoCastRandomTarget(SPELL_DRAIN_LIFE);
- }, 10000ms);
+ }, 10s);
ScheduleTimedEvent(2s, [&]{
me->RemoveAuraFromStack(SPELL_MANA_RAGE_TRIGGER);
DoCastAOE(SPELL_FEL_EXPLOSION);
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp
index 403782eed0..0e04c702c8 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp
@@ -141,7 +141,7 @@ struct boss_vexallus : public BossAI
void SummonedCreatureDies(Creature* summon, Unit* killer) override
{
summons.Despawn(summon);
- summon->DespawnOrUnsummon(1);
+ summon->DespawnOrUnsummon(1ms);
if (killer)
killer->CastSpell(killer, SPELL_ENERGY_FEEDBACK, true, 0, 0, summon->GetGUID());
}
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 4747e77658..8c51346655 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
@@ -230,7 +230,7 @@ public:
me->RemoveAllAuras();
me->CastSpell(attacker, SPELL_DUEL_VICTORY, true);
me->RestoreFaction();
- me->DespawnOrUnsummon(10000);
+ me->DespawnOrUnsummon(10s);
}
}
}
@@ -396,7 +396,7 @@ public:
AttackStart(attacker);
}
- void SetGUID(ObjectGuid guid, int32) override
+ void SetGUID(ObjectGuid const& guid, int32) override
{
gothikGUID = guid;
events.ScheduleEvent(EVENT_GHOUL_MOVE_TO_PIT, 3s);
@@ -407,7 +407,7 @@ public:
{
if (type == POINT_MOTION_TYPE && point == 1)
{
- me->DespawnOrUnsummon(1500);
+ me->DespawnOrUnsummon(1500ms);
me->CastSpell(me, SPELL_GHOUL_SUBMERGE, true);
}
}
@@ -438,7 +438,7 @@ public:
if (owner->GetVictim())
AttackStart(owner->GetVictim());
- events.RepeatEvent(1000);
+ events.Repeat(1s);
return;
}
@@ -502,49 +502,6 @@ public:
};
};
-class npc_scarlet_cannon : public CreatureScript
-{
-public:
- npc_scarlet_cannon() : CreatureScript("npc_scarlet_cannon") { }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_scarlet_cannonAI(creature);
- }
-
- struct npc_scarlet_cannonAI : public VehicleAI
- {
- npc_scarlet_cannonAI(Creature* creature) : VehicleAI(creature) { summonAttackers = 0; }
-
- uint32 summonAttackers;
- void PassengerBoarded(Unit* /*passenger*/, int8 /*seatId*/, bool apply) override
- {
- summonAttackers = apply ? 8000 : 0;
- }
-
- void UpdateAI(uint32 diff) override
- {
- VehicleAI::UpdateAI(diff);
-
- if (summonAttackers)
- {
- summonAttackers += diff;
- if (summonAttackers >= 15000)
- {
- for (uint8 i = 0; i < 15; ++i)
- if (Creature* summon = me->SummonCreature(28834 /*NPC_SCARLET_FLEET_DEFENDER*/, 2192.56f + irand(-10, 10), -6147.90f + irand(-10, 10), 5.2f, 4.7f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 45000))
- {
- summon->SetHomePosition(me->GetHomePosition());
- summon->AI()->AttackStart(me);
- }
-
- summonAttackers = 1;
- }
- }
- }
- };
-};
-
/*######
##Quest 12848
######*/
@@ -760,22 +717,22 @@ public:
{
case EVENT_ICY_TOUCH:
DoCastVictim(SPELL_ICY_TOUCH);
- events.DelayEvents(1000, GCD_CAST);
+ events.DelayEvents(1s, GCD_CAST);
events.ScheduleEvent(EVENT_ICY_TOUCH, 5s, GCD_CAST);
break;
case EVENT_PLAGUE_STRIKE:
DoCastVictim(SPELL_PLAGUE_STRIKE);
- events.DelayEvents(1000, GCD_CAST);
+ events.DelayEvents(1s, GCD_CAST);
events.ScheduleEvent(EVENT_PLAGUE_STRIKE, 5s, GCD_CAST);
break;
case EVENT_BLOOD_STRIKE:
DoCastVictim(SPELL_BLOOD_STRIKE);
- events.DelayEvents(1000, GCD_CAST);
+ events.DelayEvents(1s, GCD_CAST);
events.ScheduleEvent(EVENT_BLOOD_STRIKE, 5s, GCD_CAST);
break;
case EVENT_DEATH_COIL:
DoCastVictim(SPELL_DEATH_COIL);
- events.DelayEvents(1000, GCD_CAST);
+ events.DelayEvents(1s, GCD_CAST);
events.ScheduleEvent(EVENT_DEATH_COIL, 5s, GCD_CAST);
break;
}
@@ -806,7 +763,7 @@ public:
ObjectGuid prisonerGUID;
- void SetGUID(ObjectGuid guid, int32 /*id*/) override
+ void SetGUID(ObjectGuid const& guid, int32 /*id*/) override
{
if (!prisonerGUID)
prisonerGUID = guid;
@@ -835,252 +792,6 @@ public:
}
};
-/*####
-## npc_scarlet_miner_cart
-####*/
-
-enum Spells_SM
-{
- SPELL_CART_CHECK = 54173,
- SPELL_CART_DRAG = 52465
-};
-
-class npc_scarlet_miner_cart : public CreatureScript
-{
-public:
- npc_scarlet_miner_cart() : CreatureScript("npc_scarlet_miner_cart") { }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_scarlet_miner_cartAI(creature);
- }
-
- struct npc_scarlet_miner_cartAI : public PassiveAI
- {
- npc_scarlet_miner_cartAI(Creature* creature) : PassiveAI(creature)
- {
- me->SetImmuneToAll(true);
- me->SetFaction(FACTION_FRIENDLY);
- me->SetDisplayFromModel(0); // Modelid2 is a horse.
- }
-
- ObjectGuid minerGUID;
-
- void SetGUID(ObjectGuid guid, int32 /*id*/) override
- {
- minerGUID = guid;
- }
-
- void DoAction(int32 /*param*/) override
- {
- if (Creature* miner = ObjectAccessor::GetCreature(*me, minerGUID))
- {
- me->SetWalk(false);
-
- //Not 100% correct, but movement is smooth. Sometimes miner walks faster
- //than normal, this speed is fast enough to keep up at those times.
- me->SetSpeed(MOVE_RUN, 1.25f);
-
- me->GetMotionMaster()->MoveFollow(miner, 1.0f, 0);
- me->ReplaceAllUnitFlags(UNIT_FLAG_NON_ATTACKABLE);
- me->SetImmuneToAll(true);
- me->SetFaction(FACTION_FRIENDLY);
- }
- }
-
- void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override
- {
- who->SetVisible(!apply);
- if (!apply)
- if (Creature* miner = ObjectAccessor::GetCreature(*me, minerGUID))
- miner->DisappearAndDie();
- }
- };
-};
-
-/*####
-## npc_scarlet_miner
-####*/
-
-enum Says_SM
-{
- SAY_SCARLET_MINER_0 = 0,
- SAY_SCARLET_MINER_1 = 1
-};
-
-class npc_scarlet_miner : public CreatureScript
-{
-public:
- npc_scarlet_miner() : CreatureScript("npc_scarlet_miner") { }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_scarlet_minerAI(creature);
- }
-
- struct npc_scarlet_minerAI : public npc_escortAI
- {
- npc_scarlet_minerAI(Creature* creature) : npc_escortAI(creature)
- {
- me->SetReactState(REACT_PASSIVE);
- }
-
- uint32 IntroTimer;
- uint32 IntroPhase;
- ObjectGuid carGUID;
-
- void Reset() override
- {
- carGUID.Clear();
- IntroTimer = 0;
- IntroPhase = 0;
- }
-
- void InitWaypoint()
- {
- AddWaypoint(1, 2389.03f, -5902.74f, 109.014f, 5000);
- AddWaypoint(2, 2341.812012f, -5900.484863f, 102.619743f);
- AddWaypoint(3, 2308.34f, -5904.2f, 91.1099f);
- AddWaypoint(4, 2300.69f, -5912.99f, 86.1572f);
- AddWaypoint(5, 2294.142090f, -5927.274414f, 75.316849f);
- AddWaypoint(6, 2286.984375f, -5944.955566f, 63.714966f);
- AddWaypoint(7, 2280.001709f, -5961.186035f, 54.228283f);
- AddWaypoint(8, 2259.389648f, -5974.197754f, 42.359348f);
- AddWaypoint(9, 2242.882812f, -5984.642578f, 32.827850f);
- AddWaypoint(10, 2239.79f, -5989.31f, 30.4453f);
- AddWaypoint(11, 2236.52f, -5994.28f, 27.4829f);
- AddWaypoint(12, 2232.61f, -6000.23f, 23.1281f);
- AddWaypoint(13, 2228.69f, -6006.46f, 17.6638f);
- AddWaypoint(14, 2225.2f, -6012.39f, 12.9487f);
- AddWaypoint(15, 2217.265625f, -6028.959473f, 7.675705f);
- AddWaypoint(16, 2202.595947f, -6061.325684f, 5.882018f);
- AddWaypoint(17, 2188.974609f, -6080.866699f, 3.370027f);
-
- if (urand(0, 1))
- {
- AddWaypoint(18, 2176.483887f, -6110.407227f, 1.855181f);
- AddWaypoint(19, 2172.516602f, -6146.752441f, 1.074235f);
- AddWaypoint(20, 2138.918457f, -6158.920898f, 1.342926f);
- AddWaypoint(21, 2129.866699f, -6174.107910f, 4.380779f);
- AddWaypoint(22, 2125.250001f, -6181.230001f, 9.91997f);
- AddWaypoint(23, 2117.709473f, -6193.830078f, 13.3542f, 10000);
- }
- else
- {
- AddWaypoint(18, 2184.190186f, -6166.447266f, 0.968877f);
- AddWaypoint(19, 2234.265625f, -6163.741211f, 0.916021f);
- AddWaypoint(20, 2268.071777f, -6158.750977f, 1.822252f);
- AddWaypoint(21, 2270.028320f, -6176.505859f, 6.340538f);
- AddWaypoint(22, 2270.350001f, -6182.410001f, 10.42431f);
- AddWaypoint(23, 2271.739014f, -6195.401855f, 13.3542f, 10000);
- }
- }
-
- void InitCartQuest(Player* who)
- {
- carGUID = who->GetVehicleBase()->GetGUID();
- InitWaypoint();
- Start(false, false, who->GetGUID());
- SetDespawnAtFar(false);
- }
-
- void WaypointReached(uint32 waypointId) override
- {
- switch (waypointId)
- {
- case 1:
- if (Unit* car = ObjectAccessor::GetCreature(*me, carGUID))
- {
- me->SetFacingToObject(car);
- // xinef: add some flags
- car->ReplaceAllUnitFlags(UNIT_FLAG_NON_ATTACKABLE);
- car->SetImmuneToAll(true);
- car->SetFaction(FACTION_FRIENDLY);
- }
- Talk(SAY_SCARLET_MINER_0);
- SetRun(true);
- IntroTimer = 4000;
- IntroPhase = 1;
- break;
- case 23:
- if (Creature* car = ObjectAccessor::GetCreature(*me, carGUID))
- {
- car->SetPosition(car->GetPositionX(), car->GetPositionY(), me->GetPositionZ() + 1, car->GetOrientation());
- car->StopMovingOnCurrentPos();
- me->SetFacingToObject(car);
- car->RemoveAura(SPELL_CART_DRAG);
- }
- Talk(SAY_SCARLET_MINER_1);
- break;
- default:
- break;
- }
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (IntroPhase)
- {
- if (IntroTimer <= diff)
- {
- if (IntroPhase == 1)
- {
- if (Creature* car = ObjectAccessor::GetCreature(*me, carGUID))
- DoCast(car, SPELL_CART_DRAG);
- IntroTimer = 800;
- IntroPhase = 2;
- }
- else
- {
- if (Creature* car = ObjectAccessor::GetCreature(*me, carGUID))
- car->AI()->DoAction(0);
- IntroPhase = 0;
- }
- }
- else IntroTimer -= diff;
- }
- npc_escortAI::UpdateAI(diff);
- }
- };
-};
-
-/*######
-## go_inconspicuous_mine_car
-######*/
-
-enum Spells_Cart
-{
- SPELL_CART_SUMM = 52463
-};
-
-class go_inconspicuous_mine_car : public GameObjectScript
-{
-public:
- go_inconspicuous_mine_car() : GameObjectScript("go_inconspicuous_mine_car") { }
-
- bool OnGossipHello(Player* player, GameObject* /*go*/) override
- {
- if (player->GetQuestStatus(12701) == QUEST_STATUS_INCOMPLETE)
- {
- // Hack Why Trinity Dont Support Custom Summon Location
- if (Creature* miner = player->SummonCreature(28841, 2383.869629f, -5900.312500f, 107.996086f, player->GetOrientation(), TEMPSUMMON_DEAD_DESPAWN, 1))
- {
- player->CastSpell(player, SPELL_CART_SUMM, true);
- if (Creature* car = player->GetVehicleCreatureBase())
- {
- if (car->GetEntry() == 28817)
- {
- car->AI()->SetGUID(miner->GetGUID());
- CAST_AI(npc_scarlet_miner::npc_scarlet_minerAI, miner->AI())->InitCartQuest(player);
- }
- }
- }
- }
-
- return true;
- }
-};
-
class spell_death_knight_initiate_visual : public SpellScript
{
PrepareSpellScript(spell_death_knight_initiate_visual);
@@ -1218,13 +929,9 @@ void AddSC_the_scarlet_enclave_c1()
RegisterSpellScript(spell_q12698_the_gift_that_keeps_on_giving);
new npc_scarlet_ghoul();
new npc_dkc1_gothik();
- new npc_scarlet_cannon();
new npc_unworthy_initiate();
new npc_unworthy_initiate_anchor();
new go_acherus_soul_prison();
- new npc_scarlet_miner();
- new npc_scarlet_miner_cart();
- new go_inconspicuous_mine_car();
RegisterSpellScript(spell_death_knight_initiate_visual);
RegisterSpellScript(spell_lich_king_whisper);
RegisterSpellScript(spell_lich_king_vo_blocker);
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
index 9c71aad73a..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,10 +610,10 @@ 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, urand(20000, 30000));
+ events.ScheduleEvent(EVENT_START_RITUAL, 20s, 30s);
}
void UpdateAI(uint32 diff) override
@@ -628,7 +628,7 @@ public:
{
if (isOnRitual) // Already performing ritual
{
- events.ScheduleEvent(EVENT_START_RITUAL, urand(5000, 10000));
+ events.ScheduleEvent(EVENT_START_RITUAL, 5s, 10s);
break;
}
@@ -655,7 +655,7 @@ public:
if (!nearestCorpse)
{
// No corpse found nearby: try again later
- events.ScheduleEvent(EVENT_START_RITUAL, urand(5000, 10000));
+ events.ScheduleEvent(EVENT_START_RITUAL, 5s, 10s);
break;
}
// Start ritual
@@ -702,7 +702,7 @@ public:
// Resume paused waypoint movement
me->ResumeMovement();
// Schedule next ritual in 20-30s
- events.ScheduleEvent(EVENT_START_RITUAL, urand(20000, 30000));
+ events.ScheduleEvent(EVENT_START_RITUAL, 20s, 30s);
break;
}
}
@@ -723,9 +723,9 @@ public:
me->SetFacingToObject(geist);
geistGUID = geist->GetGUID();
// Geist found: schedule Ghoulplosion at +3s, then raising at +6s, then resume at +9s
- events.ScheduleEvent(EVENT_GHOULPLOSION, 3000);
- events.ScheduleEvent(EVENT_RAISE_GHOUL, 6000);
- events.ScheduleEvent(EVENT_RESUME_WP, 9000);
+ events.ScheduleEvent(EVENT_GHOULPLOSION, 3s);
+ events.ScheduleEvent(EVENT_RAISE_GHOUL, 6s);
+ events.ScheduleEvent(EVENT_RESUME_WP, 9s);
}
else
{
@@ -737,8 +737,8 @@ public:
me->SetFacingToObject(corpse);
}
- events.ScheduleEvent(EVENT_RAISE_GHOUL, 3000);
- events.ScheduleEvent(EVENT_RESUME_WP, 6000);
+ events.ScheduleEvent(EVENT_RAISE_GHOUL, 3s);
+ events.ScheduleEvent(EVENT_RESUME_WP, 6s);
}
}
}
@@ -797,10 +797,10 @@ 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, urand(50000, 60000));
+ events.ScheduleEvent(EVENT_START_RITUAL, 50s, 60s);
}
void UpdateAI(uint32 diff) override
{
@@ -814,7 +814,7 @@ public:
{
if (isOnRitual) // Already performing ritual
{
- events.ScheduleEvent(EVENT_START_RITUAL, urand(5000, 10000));
+ events.ScheduleEvent(EVENT_START_RITUAL, 5s, 10s);
break;
}
@@ -841,7 +841,7 @@ public:
}
if (!nearestCorpse)
{
- events.ScheduleEvent(EVENT_START_RITUAL, urand(5000, 10000));
+ events.ScheduleEvent(EVENT_START_RITUAL, 5s, 10s);
break;
}
// Start ritual
@@ -894,7 +894,7 @@ public:
// Resume paused waypoint movement
me->ResumeMovement();
// Schedule next ritual in 50-60s
- events.ScheduleEvent(EVENT_START_RITUAL, urand(50000, 60000));
+ events.ScheduleEvent(EVENT_START_RITUAL, 50s, 60s);
break;
}
}
@@ -923,15 +923,15 @@ public:
me->SetFacingToObject(geist);
geistGUID = geist->GetGUID();
// Geist present: Ghoulplosion in 3s (with SAY_GEIST), raise in 6s, resume in 9s
- events.ScheduleEvent(EVENT_GHOULPLOSION, 3000);
- events.ScheduleEvent(EVENT_RAISE_DEAD, 6000);
- events.ScheduleEvent(EVENT_RESUME_WP, 9000);
+ events.ScheduleEvent(EVENT_GHOULPLOSION, 3s);
+ events.ScheduleEvent(EVENT_RAISE_DEAD, 6s);
+ events.ScheduleEvent(EVENT_RESUME_WP, 9s);
}
else
{
// No Geist: raise in 3s, resume in 6s
- events.ScheduleEvent(EVENT_RAISE_DEAD, 3000);
- events.ScheduleEvent(EVENT_RESUME_WP, 6000);
+ events.ScheduleEvent(EVENT_RAISE_DEAD, 3s);
+ events.ScheduleEvent(EVENT_RESUME_WP, 6s);
}
}
}
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
index bfd1d01b9c..9e481aee9d 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
@@ -473,7 +473,7 @@ public:
if (battleStarted != ENCOUNTER_STATE_FIGHT)
return;
- me->m_Events.AddEvent(new DelayedSummonEvent(me, creature->GetEntry(), *creature), me->m_Events.CalculateTime(3000));
+ me->m_Events.AddEventAtOffset(new DelayedSummonEvent(me, creature->GetEntry(), *creature), 3s);
if (creature->GetEntry() >= NPC_RAMPAGING_ABOMINATION)
{
--scourgeRemaining;
@@ -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();
@@ -526,11 +526,11 @@ public:
if (battleStarted != ENCOUNTER_STATE_FIGHT)
return;
- events.RescheduleEvent(EVENT_SPELL_ANTI_MAGIC_ZONE, 15000);
- events.RescheduleEvent(EVENT_SPELL_DEATH_STRIKE, 8000);
- events.RescheduleEvent(EVENT_SPELL_DEATH_EMBRACE, 5000);
- events.RescheduleEvent(EVENT_SPELL_UNHOLY_BLIGHT, 10000);
- events.RescheduleEvent(EVENT_SPELL_DARION_MOD_DAMAGE, 500);
+ events.RescheduleEvent(EVENT_SPELL_ANTI_MAGIC_ZONE, 15s);
+ events.RescheduleEvent(EVENT_SPELL_DEATH_STRIKE, 8s);
+ events.RescheduleEvent(EVENT_SPELL_DEATH_EMBRACE, 5s);
+ events.RescheduleEvent(EVENT_SPELL_UNHOLY_BLIGHT, 10s);
+ events.RescheduleEvent(EVENT_SPELL_DARION_MOD_DAMAGE, 500ms);
}
void Reset() override
@@ -660,14 +660,14 @@ public:
{
Position pos = LightOfDawnPos[first];
summon->SetHomePosition(pos);
- summon->GetMotionMaster()->MovePoint(1, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), true, false);
+ summon->GetMotionMaster()->MovePoint(1, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, true, false);
}
first = first == 0 ? 1 : 0;
}
Position pos = LightOfDawnPos[first];
me->SetHomePosition(pos);
me->SetWalk(false);
- me->GetMotionMaster()->MovePoint(1, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), true, true);
+ me->GetMotionMaster()->MovePoint(1, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, true, true);
DoCastSelf(SPELL_THE_MIGHT_OF_MOGRAINE, true);
break;
}
@@ -691,8 +691,8 @@ public:
{
orbaz->SetReactState(REACT_PASSIVE);
orbaz->AI()->Talk(EMOTE_LIGHT_OF_DAWN04);
- orbaz->GetMotionMaster()->MovePoint(2, LightOfDawnPos[2], true, true);
- orbaz->DespawnOrUnsummon(7000);
+ orbaz->GetMotionMaster()->MovePoint(2, LightOfDawnPos[2], FORCED_MOVEMENT_NONE, 0.f, true, true);
+ orbaz->DespawnOrUnsummon(7s);
}
for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr)
@@ -839,7 +839,7 @@ public:
alex->AI()->Talk(SAY_LIGHT_OF_DAWN41);
if (Creature* darion = GetEntryFromSummons(NPC_DARION_MOGRAINE))
- darion->DespawnOrUnsummon(3000);
+ darion->DespawnOrUnsummon(3s);
break;
case EVENT_OUTRO_SCENE_19:
if (Creature* alex = GetEntryFromSummons(NPC_HIGHLORD_ALEXANDROS_MOGRAINE))
@@ -886,7 +886,7 @@ public:
case EVENT_OUTRO_SCENE_23:
if (Creature* alex = GetEntryFromSummons(NPC_HIGHLORD_ALEXANDROS_MOGRAINE))
{
- alex->DespawnOrUnsummon(5000);
+ alex->DespawnOrUnsummon(5s);
alex->SetVisible(false);
}
break;
@@ -1055,13 +1055,13 @@ public:
if (Creature* lk = GetEntryFromSummons(NPC_THE_LICH_KING))
{
lk->CastSpell(lk, SPELL_EXIT_TELEPORT_VISUAL, true);
- lk->DespawnOrUnsummon(1500);
+ lk->DespawnOrUnsummon(1500ms);
}
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
{
float o = me->GetAngle(tirion);
- tirion->GetMotionMaster()->MovePoint(4, me->GetPositionX() + 2.0f * cos(o), me->GetPositionY() + 2.0f * std::sin(o), me->GetPositionZ(), false);
+ tirion->GetMotionMaster()->MovePoint(4, me->GetPositionX() + 2.0f * cos(o), me->GetPositionY() + 2.0f * std::sin(o), me->GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, false);
tirion->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
tirion->SetFaction(FACTION_FRIENDLY);
}
@@ -1145,7 +1145,7 @@ public:
}
case EVENT_OUTRO_SCENE_61:
summons.DespawnAll();
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
events.Reset();
return;
}
@@ -1269,7 +1269,7 @@ class spell_chapter5_return_to_capital : public SpellScript
if (creature)
{
creature->PauseMovement(5000);
- creature->SetTimedFacingToObject(player, 30000);
+ creature->SetFacingToObject(player, 30s);
if (roll_chance_i(30))
{
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
index 8b585920c9..3392b3a953 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
@@ -36,16 +36,13 @@ enum BossData
GANDLING_ROOM_TO_USE
};
-enum Timers
-{
- TIMER_ARCANE_MIN = 8000,
- TIMER_ARCANE_MAX = 14000,
- TIMER_CURSE_MIN = 20000,
- TIMER_CURSE_MAX = 30000,
- TIMER_SHIELD_MIN = 30000,
- TIMER_SHIELD_MAX = 40000,
- TIMER_PORTAL = 25000
-};
+constexpr Milliseconds TIMER_ARCANE_MIN = 8s;
+constexpr Milliseconds TIMER_ARCANE_MAX = 14s;
+constexpr Milliseconds TIMER_CURSE_MIN = 20s;
+//constexpr Milliseconds TIMER_CURSE_MAX = 30s;
+constexpr Milliseconds TIMER_SHIELD_MIN = 30s;
+//constexpr Milliseconds TIMER_SHIELD_MAX = 40s;
+constexpr Milliseconds TIMER_PORTAL = 25s;
enum IdPortalSpells
{
@@ -335,18 +332,18 @@ public:
{
case SPELL_ARCANE_MISSILES:
DoCastVictim(SPELL_ARCANE_MISSILES);
- events.ScheduleEvent(SPELL_ARCANE_MISSILES, urand(TIMER_ARCANE_MIN, TIMER_ARCANE_MAX));
+ events.ScheduleEvent(SPELL_ARCANE_MISSILES, TIMER_ARCANE_MIN, TIMER_ARCANE_MAX);
break;
case SPELL_CURSE_DARKMASTER:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true))
{
DoCast(target, SPELL_CURSE_DARKMASTER);
}
- events.ScheduleEvent(SPELL_ARCANE_MISSILES, urand(TIMER_ARCANE_MIN, TIMER_ARCANE_MAX));
+ events.ScheduleEvent(SPELL_ARCANE_MISSILES, TIMER_ARCANE_MIN, TIMER_ARCANE_MAX);
break;
case SPELL_SHADOW_SHIELD:
DoCastSelf(SPELL_SHADOW_SHIELD);
- events.ScheduleEvent(SPELL_ARCANE_MISSILES, urand(TIMER_ARCANE_MIN, TIMER_ARCANE_MAX));
+ events.ScheduleEvent(SPELL_ARCANE_MISSILES, TIMER_ARCANE_MIN, TIMER_ARCANE_MAX);
break;
case SPELL_SHADOW_PORTAL:
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 b58ad2de39..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
@@ -103,7 +103,7 @@ public:
void EnterEvadeMode(EvadeReason /*why*/) override
{
instance->SetData(DATA_KIRTONOS_THE_HERALD, FAIL);
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
void MovementInform(uint32 type, uint32 id) override
@@ -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/Scholomance/instance_scholomance.cpp b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
index 5363fac88e..253608fd51 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
@@ -399,17 +399,17 @@ public:
{
case 1:
me->CastSpell(me, BONE_ARMOR_SPELL, false);
- events.RepeatEvent(60000);
+ events.Repeat(60s);
break;
case 2:
if (Unit* target = SelectUnitCasting())
{
me->CastSpell(target, COUNTER_SPELL, false);
- events.RepeatEvent(urand(10000, 20000));
+ events.Repeat(10s, 20s);
}
else
{
- events.RepeatEvent(400);
+ events.Repeat(400ms);
}
break;
case 3:
@@ -417,11 +417,11 @@ public:
{
me->CastSpell(target, DRAIN_MANA_SPELL, false);
}
- events.RepeatEvent(urand(13000, 20000));
+ events.Repeat(13s, 20s);
break;
case 4:
me->CastSpell(me->GetVictim(), SHADOWBOLT_VOLLEY_SPELL, true);
- events.RepeatEvent(urand(11000, 17000));
+ events.Repeat(11s, 17s);
break;
}
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
index 9435fd1943..affaef9dcf 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
@@ -135,14 +135,14 @@ public:
if (_slaughterProgress == 2)
{
for (uint32 i = 0; i < 33; ++i)
- events.ScheduleEvent(EVENT_SPAWN_MINDLESS, 5000 + i * 210);
+ events.ScheduleEvent(EVENT_SPAWN_MINDLESS, Milliseconds(5000 + i * 210));
if (Creature* baron = instance->GetCreature(_baronRivendareGUID))
if (GameObject* gate = baron->FindNearestGameObject(GO_SLAUGHTER_GATE_SIDE, 200.0f))
gate->SetGoState(GO_STATE_ACTIVE);
}
if (_slaughterProgress == 3)
{
- events.ScheduleEvent(EVENT_SPAWN_BLACK_GUARD, 20000);
+ events.ScheduleEvent(EVENT_SPAWN_BLACK_GUARD, 20s);
}
if (_slaughterProgress == 4)
{
@@ -296,7 +296,7 @@ public:
_baronRunProgress = DATA_BARON_RUN_GATE;
_baronRunTime = 45;
DoCastSpellOnPlayers(SPELL_BARON_ULTIMATUM);
- events.ScheduleEvent(EVENT_BARON_TIME, 60000);
+ events.ScheduleEvent(EVENT_BARON_TIME, 60s);
if (Creature* baron = instance->GetCreature(_baronRivendareGUID))
baron->AI()->Talk(SAY_BARON_INIT_YELL);
@@ -379,12 +379,12 @@ public:
data >> _barthilasrunProgress;
if (_baronRunTime)
{
- events.ScheduleEvent(EVENT_BARON_TIME, 60000);
+ events.ScheduleEvent(EVENT_BARON_TIME, 60s);
}
if (_slaughterProgress > 0 && _slaughterProgress < 4)
{
- events.ScheduleEvent(EVENT_FORCE_SLAUGHTER_EVENT, 5000);
+ events.ScheduleEvent(EVENT_FORCE_SLAUGHTER_EVENT, 5s);
}
}
@@ -455,20 +455,20 @@ public:
if (i == 0)
{
// set timer to reset the trap
- events.ScheduleEvent(EVENT_GATE1_TRAP, 30 * MINUTE * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_GATE1_TRAP, 1800s);
// set timer to reopen gates
- events.ScheduleEvent(EVENT_GATE1_DELAY, 20 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_GATE1_DELAY, 20s);
// set timer to spawn the plagued critters
- events.ScheduleEvent(EVENT_GATE1_CRITTER_DELAY, 2 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_GATE1_CRITTER_DELAY, 2s);
}
else if (i == 1)
{
// set timer to reset the trap
- events.ScheduleEvent(EVENT_GATE2_TRAP, 30 * MINUTE * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_GATE2_TRAP, 1800s);
// set timer to reopen gates
- events.ScheduleEvent(EVENT_GATE2_DELAY, 20 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_GATE2_DELAY, 20s);
// set timer to spawn the plagued critters
- events.ScheduleEvent(EVENT_GATE2_CRITTER_DELAY, 2 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_GATE2_CRITTER_DELAY, 2s);
}
}
}
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
index e7937c6226..1df2bc3955 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
@@ -196,10 +196,10 @@ struct npc_madrigosa : public NullCreatureAI
me->RemoveDynamicFlag(UNIT_DYNFLAG_DEAD);
me->SendMovementFlagUpdate();
- events.ScheduleEvent(EVENT_MAD_1, 2000);
+ events.ScheduleEvent(EVENT_MAD_1, 2s);
}
else if (param == ACTION_SPAWN_FELMYST)
- events.ScheduleEvent(EVENT_SPAWN_FELMYST, 60000);
+ events.ScheduleEvent(EVENT_SPAWN_FELMYST, 60s);
}
void UpdateAI(uint32 diff) override
@@ -217,27 +217,27 @@ struct npc_madrigosa : public NullCreatureAI
}
me->GetMotionMaster()->MoveTakeoff(1, 1477.94f, 643.22f, 21.21f);
me->AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD);
- events.ScheduleEvent(EVENT_MAD_2, 4000);
+ events.ScheduleEvent(EVENT_MAD_2, 4s);
break;
case EVENT_MAD_2:
Talk(SAY_MAD_1);
me->CastSpell(me, SPELL_MADRIGOSA_FREEZE, false);
- events.ScheduleEvent(EVENT_MAD_2_1, 1000);
+ events.ScheduleEvent(EVENT_MAD_2_1, 1s);
break;
case EVENT_MAD_2_1:
me->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
me->SetDisableGravity(false);
me->CastSpell(me, SPELL_MADRIGOSA_FROST_BREATH, false);
- events.ScheduleEvent(EVENT_MAD_3, 7000);
+ events.ScheduleEvent(EVENT_MAD_3, 7s);
break;
case EVENT_MAD_3:
Talk(SAY_MAD_2);
- events.ScheduleEvent(EVENT_MAD_4, 7000);
+ events.ScheduleEvent(EVENT_MAD_4, 7s);
break;
case EVENT_MAD_4:
if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS))
brutallus->AI()->Talk(YELL_INTRO);
- events.ScheduleEvent(EVENT_MAD_5, 5000);
+ events.ScheduleEvent(EVENT_MAD_5, 5s);
break;
case EVENT_MAD_5:
if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS))
@@ -245,7 +245,7 @@ struct npc_madrigosa : public NullCreatureAI
brutallus->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACK1H);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACK1H);
}
- events.ScheduleEvent(EVENT_MAD_6, 10000);
+ events.ScheduleEvent(EVENT_MAD_6, 10s);
break;
case EVENT_MAD_6:
if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS))
@@ -255,21 +255,21 @@ struct npc_madrigosa : public NullCreatureAI
}
me->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
me->SetDisableGravity(true);
- events.ScheduleEvent(EVENT_MAD_7, 4000);
+ events.ScheduleEvent(EVENT_MAD_7, 4s);
break;
case EVENT_MAD_7:
Talk(SAY_MAD_3);
me->CastSpell(me, SPELL_MADRIGOSA_FROST_BLAST, false);
- events.ScheduleEvent(EVENT_MAD_8, 3000);
- events.ScheduleEvent(EVENT_MAD_8, 5000);
- events.ScheduleEvent(EVENT_MAD_8_1, 6000);
- events.ScheduleEvent(EVENT_MAD_8, 6500);
- events.ScheduleEvent(EVENT_MAD_8, 7500);
- events.ScheduleEvent(EVENT_MAD_8, 8500);
- events.ScheduleEvent(EVENT_MAD_8, 9500);
- events.ScheduleEvent(EVENT_MAD_9, 11000);
- events.ScheduleEvent(EVENT_MAD_8, 12000);
- events.ScheduleEvent(EVENT_MAD_8, 14000);
+ events.ScheduleEvent(EVENT_MAD_8, 3s);
+ events.ScheduleEvent(EVENT_MAD_8, 5s);
+ events.ScheduleEvent(EVENT_MAD_8_1, 6s);
+ events.ScheduleEvent(EVENT_MAD_8, 6500ms);
+ events.ScheduleEvent(EVENT_MAD_8, 7500ms);
+ events.ScheduleEvent(EVENT_MAD_8, 8500ms);
+ events.ScheduleEvent(EVENT_MAD_8, 9500ms);
+ events.ScheduleEvent(EVENT_MAD_9, 11s);
+ events.ScheduleEvent(EVENT_MAD_8, 12s);
+ events.ScheduleEvent(EVENT_MAD_8, 14s);
break;
case EVENT_MAD_8:
if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS))
@@ -286,27 +286,27 @@ struct npc_madrigosa : public NullCreatureAI
brutallus->CastSpell(brutallus, SPELL_BRUTALLUS_FEL_FIREBALL, false);
brutallus->AI()->Talk(YELL_INTRO_BREAK_ICE);
}
- events.ScheduleEvent(EVENT_MAD_11, 6000);
+ events.ScheduleEvent(EVENT_MAD_11, 6s);
break;
//case EVENT_MAD_10:
case EVENT_MAD_11:
me->SetDisableGravity(false);
me->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
- events.ScheduleEvent(EVENT_MAD_13, 2500);
+ events.ScheduleEvent(EVENT_MAD_13, 2500ms);
break;
case EVENT_MAD_13:
Talk(SAY_MAD_4);
me->RemoveAllAuras();
me->CastSpell(me, SPELL_MADRIGOSA_ENCAPSULATE, false);
- events.ScheduleEvent(EVENT_MAD_14, 2000);
+ events.ScheduleEvent(EVENT_MAD_14, 2s);
break;
case EVENT_MAD_14:
if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS))
{
brutallus->SetDisableGravity(true);
- brutallus->GetMotionMaster()->MovePoint(0, brutallus->GetPositionX(), brutallus->GetPositionY() - 30.0f, brutallus->GetPositionZ() + 15.0f, false, true);
+ brutallus->GetMotionMaster()->MovePoint(0, brutallus->GetPositionX(), brutallus->GetPositionY() - 30.0f, brutallus->GetPositionZ() + 15.0f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false, true);
}
- events.ScheduleEvent(EVENT_MAD_15, 10000);
+ events.ScheduleEvent(EVENT_MAD_15, 10s);
break;
case EVENT_MAD_15:
if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS))
@@ -316,28 +316,28 @@ struct npc_madrigosa : public NullCreatureAI
brutallus->GetMotionMaster()->MoveFall();
brutallus->AI()->Talk(YELL_INTRO_CHARGE);
}
- events.ScheduleEvent(EVENT_MAD_16, 1400);
+ events.ScheduleEvent(EVENT_MAD_16, 1400ms);
break;
case EVENT_MAD_16:
if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS))
brutallus->CastSpell(me, SPELL_BRUTALLUS_CHARGE, true);
- events.ScheduleEvent(EVENT_MAD_17, 1200);
+ events.ScheduleEvent(EVENT_MAD_17, 1200ms);
break;
case EVENT_MAD_17:
if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS))
brutallus->HandleEmoteCommand(EMOTE_ONESHOT_ATTACK1H);
- events.ScheduleEvent(EVENT_MAD_18, 500);
+ events.ScheduleEvent(EVENT_MAD_18, 500ms);
break;
case EVENT_MAD_18:
Talk(SAY_MAD_5);
me->SetDynamicFlag(UNIT_DYNFLAG_DEAD);
me->SetStandState(UNIT_STAND_STATE_DEAD);
- events.ScheduleEvent(EVENT_MAD_19, 6000);
+ events.ScheduleEvent(EVENT_MAD_19, 6s);
break;
case EVENT_MAD_19:
if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS))
brutallus->AI()->Talk(YELL_INTRO_KILL_MADRIGOSA);
- events.ScheduleEvent(EVENT_MAD_20, 7000);
+ events.ScheduleEvent(EVENT_MAD_20, 7s);
break;
case EVENT_MAD_20:
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
@@ -347,7 +347,7 @@ struct npc_madrigosa : public NullCreatureAI
brutallus->AI()->Talk(YELL_INTRO_TAUNT);
brutallus->CastSpell(brutallus, SPELL_BRUTALLUS_BREAK_ICE, false);
}
- events.ScheduleEvent(EVENT_MAD_21, 4000);
+ events.ScheduleEvent(EVENT_MAD_21, 4s);
break;
case EVENT_MAD_21:
if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS))
@@ -360,7 +360,7 @@ struct npc_madrigosa : public NullCreatureAI
break;
case EVENT_SPAWN_FELMYST:
DoCastAOE(SPELL_SUMMON_FELBLAZE, true);
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
break;
}
}
@@ -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 c9b0ad3f12..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);
}
}
@@ -205,7 +205,7 @@ struct boss_felmyst : public BossAI
// Summon Kalecgos (human form of kalecgos fight)
if (Creature* kalec = me->SummonCreature(NPC_KALECGOS_FELMYST, 1573.1461f, 755.20245f, 99.524956f, 3.595378f))
- kalec->GetMotionMaster()->MovePoint(POINT_KALECGOS, 1474.2347f, 624.0703f, 29.32589f, false, true);
+ kalec->GetMotionMaster()->MovePoint(POINT_KALECGOS, 1474.2347f, 624.0703f, 29.32589f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false, true);
}
void ScheduleGroundAbilities()
@@ -312,25 +312,26 @@ struct boss_felmyst : public BossAI
++_strafeCount;
_currentLane = urand(0, 2);
if (isRightSide)
- me->GetMotionMaster()->MovePoint(POINT_LANE, RightSideLanes[_currentLane], false);
+ me->GetMotionMaster()->MovePoint(POINT_LANE, RightSideLanes[_currentLane], FORCED_MOVEMENT_NONE, 0.f, false);
else
- me->GetMotionMaster()->MovePoint(POINT_LANE, LeftSideLanes[_currentLane], false);
+ me->GetMotionMaster()->MovePoint(POINT_LANE, LeftSideLanes[_currentLane], FORCED_MOVEMENT_NONE, 0.f, false);
}, 5s);
break;
case POINT_LANE:
Talk(EMOTE_BREATH);
- me->m_Events.AddEventAtOffset([&] {
+ me->m_Events.AddEventAtOffset([this]()
+ {
for (uint8 i = 0; i < 16; ++i)
- me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(i*250));
+ me->m_Events.AddEventAtOffset(new CorruptTriggers(me, _currentLane), Milliseconds(i * 250));
}, 5s);
me->m_Events.AddEventAtOffset([&] {
DoCastSelf(SPELL_FELMYST_SPEED_BURST, true);
if (me->FindNearestCreature(NPC_WORLD_TRIGGER_RIGHT, 30.0f))
- me->GetMotionMaster()->MovePoint(POINT_AIR_BREATH_END, LeftSideLanes[_currentLane], false);
+ me->GetMotionMaster()->MovePoint(POINT_AIR_BREATH_END, LeftSideLanes[_currentLane], FORCED_MOVEMENT_NONE, 0.f, false);
else
- me->GetMotionMaster()->MovePoint(POINT_AIR_BREATH_END, RightSideLanes[_currentLane], false);
+ me->GetMotionMaster()->MovePoint(POINT_AIR_BREATH_END, RightSideLanes[_currentLane], FORCED_MOVEMENT_NONE, 0.f, false);
}, 5s);
break;
case POINT_AIR_BREATH_END:
@@ -338,9 +339,9 @@ struct boss_felmyst : public BossAI
me->m_Events.AddEventAtOffset([&] {
if (me->FindNearestCreature(NPC_WORLD_TRIGGER_RIGHT, 30.0f))
- me->GetMotionMaster()->MovePoint(POINT_AIR_UP, RightSide, false);
+ me->GetMotionMaster()->MovePoint(POINT_AIR_UP, RightSide, FORCED_MOVEMENT_NONE, 0.f, false);
else
- me->GetMotionMaster()->MovePoint(POINT_AIR_UP, LeftSide, false);
+ me->GetMotionMaster()->MovePoint(POINT_AIR_UP, LeftSide, FORCED_MOVEMENT_NONE, 0.f, false);
}, 2s);
break;
}
@@ -362,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);
});
}
@@ -425,7 +426,7 @@ struct npc_demonic_vapor_trail : public NullCreatureAI
void Reset() override
{
me->CastSpell(me, SPELL_DEMONIC_VAPOR_TRAIL_PERIODIC, true);
- me->DespawnOrUnsummon(20000);
+ me->DespawnOrUnsummon(20s);
}
void SpellHitTarget(Unit* /*unit*/, SpellInfo const* spellInfo) override
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
index 221f15a236..af4a14d7d8 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
@@ -387,7 +387,7 @@ struct boss_kiljaeden : public BossAI
{
anveena->RemoveAllAuras();
anveena->CastSpell(anveena, SPELL_SACRIFICE_OF_ANVEENA, true);
- anveena->DespawnOrUnsummon(1500);
+ anveena->DespawnOrUnsummon(1500ms);
DoCastSelf(SPELL_CUSTOM_08_STATE, true);
me->SetUnitFlag(UNIT_FLAG_PACIFIED);
scheduler.CancelAll();
@@ -554,8 +554,8 @@ struct boss_kiljaeden : public BossAI
summon->SetDisableGravity(true);
summon->CastSpell(summon, SPELL_ARMAGEDDON_VISUAL, true);
summon->SetPosition(summon->GetPositionX(), summon->GetPositionY(), summon->GetPositionZ() + 20.0f, 0.0f);
- summon->m_Events.AddEvent(new CastArmageddon(summon), summon->m_Events.CalculateTime(6000));
- summon->DespawnOrUnsummon(urand(8000, 10000));
+ summon->m_Events.AddEventAtOffset(new CastArmageddon(summon), 6s);
+ summon->DespawnOrUnsummon(randtime(8s, 10s));
}
}
@@ -719,7 +719,7 @@ struct npc_kalecgos_kj : public NullCreatureAI
me->SetCanFly(false);
me->SetDisableGravity(false);
me->CastSpell(me, SPELL_TELEPORT_AND_TRANSFORM, true);
- events.ScheduleEvent(EVENT_SCENE_01, 35000);
+ events.ScheduleEvent(EVENT_SCENE_01, 35s);
}
}
@@ -729,25 +729,18 @@ struct npc_kalecgos_kj : public NullCreatureAI
if (summon->GetEntry() == NPC_SHATTERED_SUN_RIFTWAKER)
{
summon->CastSpell(summon, SPELL_TELEPORT_VISUAL, true);
- Movement::MoveSplineInit init(summon);
+
if (summons.size() == 1)
- {
- init.MoveTo(1727.08f, 656.82f, 28.37f, false, true);
- init.SetFacing(5.14f);
- }
+ summon->GetMotionMaster()->MovePoint(0, 1727.08f, 656.82f, 28.37f, FORCED_MOVEMENT_NONE, 0.f, 5.14f, false, true);
else
- {
- init.MoveTo(1738.84f, 627.32f, 28.26f, false, true);
- init.SetFacing(2.0f);
- }
- init.Launch();
+ summon->GetMotionMaster()->MovePoint(0, 1738.84f, 627.32f, 28.26f, FORCED_MOVEMENT_NONE, 0.f, 2.0f, false, true);
}
else if (summon->GetEntry() == NPC_SHATTRATH_PORTAL_DUMMY)
{
if (Creature* riftwaker = summon->FindNearestCreature(NPC_SHATTERED_SUN_RIFTWAKER, 10.0f))
riftwaker->CastSpell(summon, SPELL_OPEN_PORTAL_FROM_SHATTRATH, false);
summon->SetWalk(true);
- summon->GetMotionMaster()->MovePoint(0, summon->GetPositionX(), summon->GetPositionY(), summon->GetPositionZ() + 30.0f, false, true);
+ summon->GetMotionMaster()->MovePoint(0, summon->GetPositionX(), summon->GetPositionY(), summon->GetPositionZ() + 30.0f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false, true);
}
else if (summon->GetEntry() == NPC_INERT_PORTAL)
summon->CastSpell(summon, SPELL_BOSS_ARCANE_PORTAL_STATE, true);
@@ -762,7 +755,7 @@ struct npc_kalecgos_kj : public NullCreatureAI
{
summon->CastSpell(summon, SPELL_TELEPORT_VISUAL, true);
summon->SetWalk(true);
- summon->GetMotionMaster()->MovePoint(0, 1710.15f, 639.23f, 27.311f, false, true);
+ summon->GetMotionMaster()->MovePoint(0, 1710.15f, 639.23f, 27.311f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false, true);
}
else if (summon->GetEntry() == NPC_THE_CORE_OF_ENTROPIUS)
summon->GetMotionMaster()->MovePoint(0, summon->GetPositionX(), summon->GetPositionY(), 30.0f);
@@ -775,69 +768,69 @@ struct npc_kalecgos_kj : public NullCreatureAI
{
case EVENT_SCENE_01:
Talk(SAY_KALECGOS_GOODBYE);
- events.ScheduleEvent(eventId + 1, 15000);
+ events.ScheduleEvent(eventId + 1, 15s);
break;
case EVENT_SCENE_02:
me->SummonCreature(NPC_SHATTERED_SUN_RIFTWAKER, 1688.42f, 641.82f, 27.60f, 0.67f);
me->SummonCreature(NPC_SHATTERED_SUN_RIFTWAKER, 1712.58f, 616.29f, 27.78f, 0.76f);
- events.ScheduleEvent(eventId + 1, 6000);
+ events.ScheduleEvent(eventId + 1, 6s);
break;
case EVENT_SCENE_03:
me->SummonCreature(NPC_SHATTRATH_PORTAL_DUMMY, 1727.08f + cos(5.14f), 656.82f + std::sin(5.14f), 28.37f + 2.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 10000);
me->SummonCreature(NPC_SHATTRATH_PORTAL_DUMMY, 1738.84f + cos(2.0f), 627.32f + std::sin(2.0f), 28.26f + 2.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 10000);
- events.ScheduleEvent(eventId + 1, 11000);
+ events.ScheduleEvent(eventId + 1, 11s);
break;
case EVENT_SCENE_04:
me->SummonCreature(NPC_INERT_PORTAL, 1734.96f, 642.43f, 28.06f, 3.49f);
- events.ScheduleEvent(eventId + 1, 4000);
+ events.ScheduleEvent(eventId + 1, 4s);
break;
case EVENT_SCENE_05:
if (Creature* first = me->SummonCreature(NPC_SHATTERED_SUN_SOLDIER, 1729.48f, 640.49f, 28.06f, 3.49f))
{
- first->m_Events.AddEvent(new MoveDelayed(first, 1718.70f, 607.78f, 28.06f, 2.323f), first->m_Events.CalculateTime(5000));
- first->m_Events.AddEvent(new FixOrientation(first), first->m_Events.CalculateTime(12000));
+ first->m_Events.AddEventAtOffset(new MoveDelayed(first, 1718.70f, 607.78f, 28.06f, 2.323f), 5s);
+ first->m_Events.AddEventAtOffset(new FixOrientation(first), 12s);
for (uint8 i = 0; i < 9; ++i)
if (Creature* follower = me->SummonCreature(NPC_SHATTERED_SUN_SOLDIER, 1729.48f + 5 * cos(i * 2.0f * M_PI / 9), 640.49f + 5 * std::sin(i * 2.0f * M_PI / 9), 28.06f, 3.49f))
follower->GetMotionMaster()->MoveFollow(first, 3.0f, follower->GetAngle(first));
}
- events.ScheduleEvent(eventId + 1, 10000);
+ events.ScheduleEvent(eventId + 1, 10s);
break;
case EVENT_SCENE_06:
if (Creature* first = me->SummonCreature(NPC_SHATTERED_SUN_SOLDIER, 1729.48f, 640.49f, 28.06f, 3.49f))
{
- first->m_Events.AddEvent(new MoveDelayed(first, 1678.69f, 649.27f, 28.06f, 5.46f), first->m_Events.CalculateTime(5000));
- first->m_Events.AddEvent(new FixOrientation(first), first->m_Events.CalculateTime(14500));
+ first->m_Events.AddEventAtOffset(new MoveDelayed(first, 1678.69f, 649.27f, 28.06f, 5.46f), 5s);
+ first->m_Events.AddEventAtOffset(new FixOrientation(first), 14500ms);
for (uint8 i = 0; i < 9; ++i)
if (Creature* follower = me->SummonCreature(NPC_SHATTERED_SUN_SOLDIER, 1729.48f + 5 * cos(i * 2.0f * M_PI / 9), 640.49f + 5 * std::sin(i * 2.0f * M_PI / 9), 28.06f, 3.49f))
follower->GetMotionMaster()->MoveFollow(first, 3.0f, follower->GetAngle(first));
}
- events.ScheduleEvent(eventId + 1, 12000);
+ events.ScheduleEvent(eventId + 1, 12s);
break;
case EVENT_SCENE_07:
me->SummonCreature(NPC_LADY_LIADRIN, 1719.87f, 644.265f, 28.06f, 3.83f);
me->SummonCreature(NPC_PROPHET_VELEN, 1717.97f, 646.44f, 28.06f, 3.94f);
- events.ScheduleEvent(eventId + 1, 7000);
+ events.ScheduleEvent(eventId + 1, 7s);
break;
case EVENT_SCENE_08:
if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN))
velen->AI()->Talk(SAY_VELEN_01);
- events.ScheduleEvent(eventId + 1, 25000);
+ events.ScheduleEvent(eventId + 1, 25s);
break;
case EVENT_SCENE_09:
if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN))
velen->AI()->Talk(SAY_VELEN_02);
- events.ScheduleEvent(eventId + 1, 14500);
+ events.ScheduleEvent(eventId + 1, 14500ms);
break;
case EVENT_SCENE_10:
if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN))
velen->AI()->Talk(SAY_VELEN_03);
- events.ScheduleEvent(eventId + 1, 12500);
+ events.ScheduleEvent(eventId + 1, 12500ms);
break;
case EVENT_SCENE_11:
me->SummonCreature(NPC_THE_CORE_OF_ENTROPIUS, 1698.86f, 628.73f, 92.83f, 0.0f);
if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN))
velen->CastSpell(velen, SPELL_CALL_ENTROPIUS, false);
- events.ScheduleEvent(eventId + 1, 8000);
+ events.ScheduleEvent(eventId + 1, 8s);
break;
case EVENT_SCENE_12:
if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN))
@@ -845,32 +838,32 @@ struct npc_kalecgos_kj : public NullCreatureAI
velen->InterruptNonMeleeSpells(false);
velen->AI()->Talk(SAY_VELEN_04);
}
- events.ScheduleEvent(eventId + 1, 20000);
+ events.ScheduleEvent(eventId + 1, 20s);
break;
case EVENT_SCENE_13:
if (Creature* liadrin = summons.GetCreatureWithEntry(NPC_LADY_LIADRIN))
liadrin->GetMotionMaster()->MovePoint(0, 1711.28f, 637.29f, 27.29f);
- events.ScheduleEvent(eventId + 1, 6000);
+ events.ScheduleEvent(eventId + 1, 6s);
break;
case EVENT_SCENE_14:
if (Creature* liadrin = summons.GetCreatureWithEntry(NPC_LADY_LIADRIN))
liadrin->AI()->Talk(SAY_LIADRIN_01);
- events.ScheduleEvent(eventId + 1, 10000);
+ events.ScheduleEvent(eventId + 1, 10s);
break;
case EVENT_SCENE_15:
if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN))
velen->AI()->Talk(SAY_VELEN_05);
- events.ScheduleEvent(eventId + 1, 14000);
+ events.ScheduleEvent(eventId + 1, 14s);
break;
case EVENT_SCENE_16:
if (Creature* liadrin = summons.GetCreatureWithEntry(NPC_LADY_LIADRIN))
liadrin->AI()->Talk(SAY_LIADRIN_02);
- events.ScheduleEvent(eventId + 1, 2000);
+ events.ScheduleEvent(eventId + 1, 2s);
break;
case EVENT_SCENE_17:
if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN))
velen->AI()->Talk(SAY_VELEN_06);
- events.ScheduleEvent(eventId + 1, 3000);
+ events.ScheduleEvent(eventId + 1, 3s);
break;
case EVENT_SCENE_18:
if (Creature* core = summons.GetCreatureWithEntry(NPC_THE_CORE_OF_ENTROPIUS))
@@ -878,7 +871,7 @@ struct npc_kalecgos_kj : public NullCreatureAI
core->RemoveAllAuras();
core->CastSpell(core, SPELL_BLAZE_TO_LIGHT, true);
}
- events.ScheduleEvent(eventId + 1, 8000);
+ events.ScheduleEvent(eventId + 1, 8s);
break;
case EVENT_SCENE_19:
if (Creature* core = summons.GetCreatureWithEntry(NPC_THE_CORE_OF_ENTROPIUS))
@@ -886,42 +879,42 @@ struct npc_kalecgos_kj : public NullCreatureAI
core->SetObjectScale(0.75f);
core->GetMotionMaster()->MovePoint(0, core->GetPositionX(), core->GetPositionY(), 28.0f);
}
- events.ScheduleEvent(eventId + 1, 2000);
+ events.ScheduleEvent(eventId + 1, 2s);
break;
case EVENT_SCENE_20:
if (Creature* core = summons.GetCreatureWithEntry(NPC_THE_CORE_OF_ENTROPIUS))
core->CastSpell(core, SPELL_SUNWELL_IGNITION, true);
- events.ScheduleEvent(eventId + 1, 3000);
+ events.ScheduleEvent(eventId + 1, 3s);
break;
case EVENT_SCENE_21:
if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN))
velen->AI()->Talk(SAY_VELEN_07);
- events.ScheduleEvent(eventId + 1, 15000);
+ events.ScheduleEvent(eventId + 1, 15s);
break;
case EVENT_SCENE_22:
if (Creature* liadrin = summons.GetCreatureWithEntry(NPC_LADY_LIADRIN))
liadrin->AI()->Talk(SAY_LIADRIN_03);
- events.ScheduleEvent(eventId + 1, 20000);
+ events.ScheduleEvent(eventId + 1, 20s);
break;
case EVENT_SCENE_23:
if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN))
velen->AI()->Talk(SAY_VELEN_08);
if (Creature* liadrin = summons.GetCreatureWithEntry(NPC_LADY_LIADRIN))
liadrin->SetStandState(UNIT_STAND_STATE_KNEEL);
- events.ScheduleEvent(eventId + 1, 8000);
+ events.ScheduleEvent(eventId + 1, 8s);
break;
case EVENT_SCENE_24:
if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN))
velen->AI()->Talk(SAY_VELEN_09);
- events.ScheduleEvent(eventId + 1, 5000);
+ events.ScheduleEvent(eventId + 1, 5s);
break;
case EVENT_SCENE_25:
if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN))
{
velen->GetMotionMaster()->MovePoint(0, 1739.38f, 643.79f, 28.06f);
- velen->DespawnOrUnsummon(5000);
+ velen->DespawnOrUnsummon(5s);
}
- events.ScheduleEvent(eventId + 1, 3000);
+ events.ScheduleEvent(eventId + 1, 3s);
break;
case EVENT_SCENE_26:
for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr)
@@ -929,9 +922,9 @@ struct npc_kalecgos_kj : public NullCreatureAI
if (summon->GetEntry() == NPC_SHATTERED_SUN_SOLDIER)
{
summon->GetMotionMaster()->MovePoint(0, 1739.38f, 643.79f, 28.06f);
- summon->DespawnOrUnsummon(summon->GetExactDist2d(1734.96f, 642.43f) * 100);
+ summon->DespawnOrUnsummon(Milliseconds(uint32(summon->GetExactDist2d(1734.96f, 642.43f) * 100)));
}
- events.ScheduleEvent(eventId + 1, 7000);
+ events.ScheduleEvent(eventId + 1, 7s);
break;
case EVENT_SCENE_27:
me->setActive(false);
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
index 863954f0ff..d2cc53486d 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
@@ -274,7 +274,7 @@ struct npc_singularity : public NullCreatureAI
void Reset() override
{
- me->DespawnOrUnsummon(18000);
+ me->DespawnOrUnsummon(18s);
me->m_Events.AddEventAtOffset([&] {
DoCastSelf(SPELL_BLACK_HOLE_SUMMON_VISUAL, true);
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
index 065192bf74..863f4a2449 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
@@ -161,72 +161,72 @@ static PlayerAbilityStruct PlayerAbility[13][3] =
// 0 UNK class (should never be set)
{
// Warrior as fallback behavior if for some reason UNK class
- { SPELL_WR_SPELL_REFLECT, ABILITY_TARGET_SELF, 10000ms },
- { SPELL_WR_WHIRLWIND, ABILITY_TARGET_SELF, 10000ms },
- { SPELL_WR_MORTAL_STRIKE, ABILITY_TARGET_VICTIM, 6000ms }
+ { SPELL_WR_SPELL_REFLECT, ABILITY_TARGET_SELF, 10s },
+ { SPELL_WR_WHIRLWIND, ABILITY_TARGET_SELF, 10s },
+ { SPELL_WR_MORTAL_STRIKE, ABILITY_TARGET_VICTIM, 6s }
},
// 1 warrior
- { { SPELL_WR_SPELL_REFLECT, ABILITY_TARGET_SELF, 10000ms },
- { SPELL_WR_WHIRLWIND, ABILITY_TARGET_SELF, 10000ms },
- { SPELL_WR_MORTAL_STRIKE, ABILITY_TARGET_VICTIM, 6000ms }
+ { { SPELL_WR_SPELL_REFLECT, ABILITY_TARGET_SELF, 10s },
+ { SPELL_WR_WHIRLWIND, ABILITY_TARGET_SELF, 10s },
+ { SPELL_WR_MORTAL_STRIKE, ABILITY_TARGET_VICTIM, 6s }
},
// 2 paladin
- { { SPELL_PA_CONSECRATION, ABILITY_TARGET_SELF, 10000ms },
- { SPELL_PA_HOLY_LIGHT, ABILITY_TARGET_HEAL, 10000ms },
- { SPELL_PA_AVENGING_WRATH, ABILITY_TARGET_SELF, 10000ms }
+ { { SPELL_PA_CONSECRATION, ABILITY_TARGET_SELF, 10s },
+ { SPELL_PA_HOLY_LIGHT, ABILITY_TARGET_HEAL, 10s },
+ { SPELL_PA_AVENGING_WRATH, ABILITY_TARGET_SELF, 10s }
},
// 3 hunter
- { { SPELL_HU_EXPLOSIVE_TRAP, ABILITY_TARGET_SELF, 10000ms },
- { SPELL_HU_FREEZING_TRAP, ABILITY_TARGET_SELF, 10000ms },
- { SPELL_HU_SNAKE_TRAP, ABILITY_TARGET_SELF, 10000ms }
+ { { SPELL_HU_EXPLOSIVE_TRAP, ABILITY_TARGET_SELF, 10s },
+ { SPELL_HU_FREEZING_TRAP, ABILITY_TARGET_SELF, 10s },
+ { SPELL_HU_SNAKE_TRAP, ABILITY_TARGET_SELF, 10s }
},
// 4 rogue
- { { SPELL_RO_WOUND_POISON, ABILITY_TARGET_VICTIM, 3000ms },
- { SPELL_RO_SLICE_DICE, ABILITY_TARGET_SELF, 10000ms },
- { SPELL_RO_BLIND, ABILITY_TARGET_ENEMY, 10000ms }
+ { { SPELL_RO_WOUND_POISON, ABILITY_TARGET_VICTIM, 3s },
+ { SPELL_RO_SLICE_DICE, ABILITY_TARGET_SELF, 10s },
+ { SPELL_RO_BLIND, ABILITY_TARGET_ENEMY, 10s }
},
// 5 priest
- { { SPELL_PR_PAIN_SUPP, ABILITY_TARGET_HEAL, 10000ms },
- { SPELL_PR_HEAL, ABILITY_TARGET_HEAL, 10000ms },
- { SPELL_PR_PSYCHIC_SCREAM, ABILITY_TARGET_SELF, 10000ms }
+ { { SPELL_PR_PAIN_SUPP, ABILITY_TARGET_HEAL, 10s },
+ { SPELL_PR_HEAL, ABILITY_TARGET_HEAL, 10s },
+ { SPELL_PR_PSYCHIC_SCREAM, ABILITY_TARGET_SELF, 10s }
},
// 6 death knight
{
- { SPELL_DK_PLAGUE_STRIKE, ABILITY_TARGET_ENEMY, 2000ms },
- { SPELL_DK_DEATH_AND_DECAY, ABILITY_TARGET_SELF, 10000ms },
- { SPELL_DK_BLOOD_WORMS, ABILITY_TARGET_ENEMY, 5000ms }
+ { SPELL_DK_PLAGUE_STRIKE, ABILITY_TARGET_ENEMY, 2s },
+ { SPELL_DK_DEATH_AND_DECAY, ABILITY_TARGET_SELF, 10s },
+ { SPELL_DK_BLOOD_WORMS, ABILITY_TARGET_ENEMY, 5s }
},
// 7 shaman
- { { SPELL_SH_FIRE_NOVA, ABILITY_TARGET_SELF, 10000ms },
- { SPELL_SH_HEALING_WAVE, ABILITY_TARGET_HEAL, 10000ms },
- { SPELL_SH_CHAIN_LIGHT, ABILITY_TARGET_ENEMY, 8000ms }
+ { { SPELL_SH_FIRE_NOVA, ABILITY_TARGET_SELF, 10s },
+ { SPELL_SH_HEALING_WAVE, ABILITY_TARGET_HEAL, 10s },
+ { SPELL_SH_CHAIN_LIGHT, ABILITY_TARGET_ENEMY, 8s }
},
// 8 mage
- { { SPELL_MG_FIREBALL, ABILITY_TARGET_ENEMY, 5000ms },
- { SPELL_MG_FROSTBOLT, ABILITY_TARGET_ENEMY, 5000ms },
- { SPELL_MG_ICE_LANCE, ABILITY_TARGET_SPECIAL, 2000ms }
+ { { SPELL_MG_FIREBALL, ABILITY_TARGET_ENEMY, 5s },
+ { SPELL_MG_FROSTBOLT, ABILITY_TARGET_ENEMY, 5s },
+ { SPELL_MG_ICE_LANCE, ABILITY_TARGET_SPECIAL, 2s }
},
// 9 warlock
- { { SPELL_WL_CURSE_OF_DOOM, ABILITY_TARGET_ENEMY, 10000ms },
- { SPELL_WL_RAIN_OF_FIRE, ABILITY_TARGET_ENEMY, 10000ms },
- { SPELL_WL_UNSTABLE_AFFL, ABILITY_TARGET_ENEMY, 10000ms }
+ { { SPELL_WL_CURSE_OF_DOOM, ABILITY_TARGET_ENEMY, 10s },
+ { SPELL_WL_RAIN_OF_FIRE, ABILITY_TARGET_ENEMY, 10s },
+ { SPELL_WL_UNSTABLE_AFFL, ABILITY_TARGET_ENEMY, 10s }
},
// 10 UNK class (should never be set)
{
// Warrior as fallback behavior if for some reason UNK class
- { SPELL_WR_SPELL_REFLECT, ABILITY_TARGET_SELF, 10000ms },
- { SPELL_WR_WHIRLWIND, ABILITY_TARGET_SELF, 10000ms },
- { SPELL_WR_MORTAL_STRIKE, ABILITY_TARGET_VICTIM, 6000ms }
+ { SPELL_WR_SPELL_REFLECT, ABILITY_TARGET_SELF, 10s },
+ { SPELL_WR_WHIRLWIND, ABILITY_TARGET_SELF, 10s },
+ { SPELL_WR_MORTAL_STRIKE, ABILITY_TARGET_VICTIM, 6s }
},
// 11 druid
- { { SPELL_DR_LIFEBLOOM, ABILITY_TARGET_HEAL, 10000ms },
- { SPELL_DR_THORNS, ABILITY_TARGET_SELF, 10000ms },
- { SPELL_DR_MOONFIRE, ABILITY_TARGET_ENEMY, 8000ms }
+ { { SPELL_DR_LIFEBLOOM, ABILITY_TARGET_HEAL, 10s },
+ { SPELL_DR_THORNS, ABILITY_TARGET_SELF, 10s },
+ { SPELL_DR_MOONFIRE, ABILITY_TARGET_ENEMY, 8s }
},
// MISC shadow priest
- { { SPELL_PR_MIND_CONTROL, ABILITY_TARGET_ENEMY, 15000ms },
- { SPELL_PR_MIND_BLAST, ABILITY_TARGET_ENEMY, 5000ms },
- { SPELL_PR_SW_DEATH, ABILITY_TARGET_ENEMY, 10000ms }
+ { { SPELL_PR_MIND_CONTROL, ABILITY_TARGET_ENEMY, 15s },
+ { SPELL_PR_MIND_BLAST, ABILITY_TARGET_ENEMY, 5s },
+ { SPELL_PR_SW_DEATH, ABILITY_TARGET_ENEMY, 10s }
}
};
@@ -244,7 +244,7 @@ struct boss_hexlord_malacrass : public BossAI
{
BossAI::Reset();
_currentClass = CLASS_NONE;
- _classAbilityTimer = 10000ms;
+ _classAbilityTimer = 10s;
_timeUntilNextDrainPower = 0ms;
SpawnAdds();
ScheduleHealthCheckEvent(80, [&] {
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/boss_zuljin.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp
index b33a057db3..7add91965c 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp
@@ -285,10 +285,7 @@ struct boss_zuljin : public BossAI
instance->SetBossState(DATA_ZULJIN, DONE);
Talk(SAY_DEATH);
summons.DespawnEntry(CREATURE_COLUMN_OF_FIRE);
-
- me->m_Events.AddEventAtOffset( [this] {
- summons.DespawnAll();
- }, 3s);
+ summons.DespawnAll(3s);
}
void SpawnAdds()
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
index 6dd4a8c9e2..efff4f78b3 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
@@ -78,7 +78,7 @@ struct npc_forest_frog : public ScriptedAI
void MovementInform(uint32 type, uint32 data) override
{
if (type == POINT_MOTION_TYPE && data == POINT_DESPAWN)
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
void UpdateAI(uint32 diff) override
@@ -103,7 +103,7 @@ struct npc_forest_frog : public ScriptedAI
Talk(SAY_THANKS_FREED, player);
eventTimer = 2;
- events.ScheduleEvent(eventTimer, urand(4000, 5000));
+ events.ScheduleEvent(eventTimer, 4s, 5s);
break;
case 2:
if (me->GetEntry() != NPC_GUNTER && me->GetEntry() != NPC_KYREN) // vendors don't kneel?
@@ -140,7 +140,7 @@ struct npc_forest_frog : public ScriptedAI
break;
}
eventTimer = 3;
- events.ScheduleEvent(eventTimer, urand(6000, 7000));
+ events.ScheduleEvent(eventTimer, 6s, 7s);
break;
case 3:
me->SetStandState(EMOTE_ONESHOT_NONE);
@@ -152,9 +152,9 @@ struct npc_forest_frog : public ScriptedAI
eventTimer = 4;
if (me->GetEntry() == NPC_GUNTER || me->GetEntry() == NPC_KYREN)
- events.ScheduleEvent(eventTimer, 5 * MINUTE * IN_MILLISECONDS); // vendors wait for 5 minutes before running away and despawning
+ events.ScheduleEvent(eventTimer, 300s); // vendors wait for 5 minutes before running away and despawning
else
- events.ScheduleEvent(eventTimer, 6000);
+ events.ScheduleEvent(eventTimer, 6s);
break;
case 4:
me->HandleEmoteCommand(EMOTE_ONESHOT_WAVE);
@@ -165,7 +165,7 @@ struct npc_forest_frog : public ScriptedAI
Talk(SAY_GOODBYE, player);
eventTimer = 5;
- events.ScheduleEvent(eventTimer, 2000);
+ events.ScheduleEvent(eventTimer, 2s);
break;
case 5:
@@ -205,7 +205,7 @@ struct npc_forest_frog : public ScriptedAI
// start generic rp
eventTimer = 1;
- events.ScheduleEvent(eventTimer, 3000);
+ events.ScheduleEvent(eventTimer, 3s);
me->UpdateEntry(cEntry);
@@ -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_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
index 5cabaf62c4..4b90e0ea21 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
@@ -330,7 +330,7 @@ public:
if (Unit* arlokk = ObjectAccessor::GetUnit(*me, _instance->GetGuidData(NPC_ARLOKK)))
me->GetMotionMaster()->MovePoint(0, arlokk->GetPositionX(), arlokk->GetPositionY(), arlokk->GetPositionZ());
- _events.ScheduleEvent(EVENT_ATTACK, 6000);
+ _events.ScheduleEvent(EVENT_ATTACK, 6s);
}
void JustEngagedWith(Unit* /*who*/) override
@@ -355,7 +355,7 @@ public:
if (arlokk->IsAlive())
arlokk->GetAI()->SetData(_sideData, 0);
}
- me->DespawnOrUnsummon(4000);
+ me->DespawnOrUnsummon(4s);
}
void UpdateAI(uint32 diff) override
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 e02c69e0f3..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
};
@@ -156,7 +156,7 @@ public:
killCount = 0;
if (me->GetPositionZ() > 140.0f)
{
- events.ScheduleEvent(EVENT_CHECK_START, 1000);
+ events.ScheduleEvent(EVENT_CHECK_START, 1s);
if (Creature* speaker = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_VILEBRANCH_SPEAKER)))
{
if (!speaker->IsAlive())
@@ -250,7 +250,7 @@ public:
}
}
- void SetGUID(ObjectGuid const guid, int32 type) override
+ void SetGUID(ObjectGuid const& guid, int32 type) override
{
if (type == ACTION_CHARGE)
{
@@ -564,7 +564,7 @@ public:
RevivePlayer(victim, reviveGUID);
}
- void SetGUID(ObjectGuid const guid, int32 /*type = 0 */) override
+ void SetGUID(ObjectGuid const& guid, int32 /*type = 0 */) override
{
reviveGUID = guid;
}
@@ -612,7 +612,7 @@ public:
revivePlayerGUID.Clear();
}
- void SetGUID(ObjectGuid const guid, int32 /*id*/) override
+ void SetGUID(ObjectGuid const& guid, int32 /*id*/) override
{
revivePlayerGUID = guid;
}
@@ -641,7 +641,7 @@ public:
{
DoCast(target, SPELL_REVIVE);
}
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
}
diff --git a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp
index 376e746677..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();
+ 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, 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_duskwood.cpp b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp
index d7d06ac3f4..14a1aa6b78 100644
--- a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp
@@ -64,7 +64,7 @@ struct boss_twilight_corrupter : public ScriptedAI
{
if (creature->IsAlive() && me->GetGUID() != creature->GetGUID())
{
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp
index c90d2d78b7..5357b8e14f 100644
--- a/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp
@@ -93,7 +93,7 @@ public:
_faction = faction;
}
- void SetGUID(ObjectGuid guid, int32) override
+ void SetGUID(ObjectGuid const& guid, int32) override
{
_playerGUID = guid;
me->ReplaceAllNpcFlags(UNIT_NPC_FLAG_NONE);
@@ -207,7 +207,7 @@ public:
EnterEvadeMode();
return;
}
- events.RepeatEvent(2000);
+ events.Repeat(2s);
break;
}
case EVENT_SUMMON_ARCHERS:
@@ -217,7 +217,7 @@ public:
_spoken = false;
SummonPeasants();
_spoken = false;
- events.RepeatEvent(60 * IN_MILLISECONDS);
+ events.Repeat(60s);
break;
}
}
@@ -262,7 +262,7 @@ public:
if (Unit* creature = summon->GetSummonerUnit())
creature->GetAI()->DoAction(1);
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
void JustDied(Unit*) override
diff --git a/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp b/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp
index 45184f8384..ef651b4c69 100644
--- a/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp
@@ -112,11 +112,11 @@ struct npc_cameron : public ScriptedAI
if (Creature* children = ObjectAccessor::GetCreature(*me, _childrenGUIDs[i]))
{
children->SetWalk(true);
- children->GetMotionMaster()->MovePoint(0, MovePosPositions[i], true, MovePosPositions[i].GetOrientation());
+ children->GetMotionMaster()->MovePoint(0, MovePosPositions[i]);
}
}
me->SetWalk(true);
- me->GetMotionMaster()->MovePoint(0, MovePosPositions.back(), true, MovePosPositions.back().GetOrientation());
+ me->GetMotionMaster()->MovePoint(0, MovePosPositions.back());
}
void PathEndReached(uint32 pathId) override
@@ -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 cd3612d4eb..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:
{
@@ -139,7 +139,7 @@ struct npc_partygoer : public ScriptedAI
void Reset() override
{
- _events.ScheduleEvent(EVENT_RANDOM_ACTION, urand(1000, 20000));
+ _events.ScheduleEvent(EVENT_RANDOM_ACTION, 1s, 20s);
}
void UpdateAI(uint32 diff) override
diff --git a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp
index da2cb493e4..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, false, 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 4659c2b79a..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, 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();
+ 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 be0caf53d1..15192af962 100644
--- a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp
@@ -136,25 +136,25 @@ public:
if (Creature* c = me->FindNearestCreature(NPC_THALORIEN_REMAINS, 100.0f, true))
c->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
events.Reset();
- events.ScheduleEvent(EVENT_CHECK_PLAYER, 5000);
- events.ScheduleEvent(EVENT_SUMMON_SOLDIERS, 0);
- events.ScheduleEvent(EVENT_TALK_INTRO_0, 3000);
- events.ScheduleEvent(EVENT_TALK_INTRO_1, 8000);
- events.ScheduleEvent(EVENT_TALK_INTRO_2, 15000);
- events.ScheduleEvent(EVENT_TALK_INTRO_3, 22000);
- events.ScheduleEvent(EVENT_SALUTE, 24000);
- events.ScheduleEvent(EVENT_SOLDIERS_RUN_AWAY, 30000);
- events.ScheduleEvent(EVENT_GO_FIGHTPOINT, 31000);
- events.ScheduleEvent(EVENT_TALK_SPAWN_0, 38000);
- events.ScheduleEvent(EVENT_SUMMON_MORLEN, 44000);
- events.ScheduleEvent(EVENT_TALK_SPAWN_1, 47000);
- events.ScheduleEvent(EVENT_TALK_MORLEN_0, 52000);
- events.ScheduleEvent(EVENT_TALK_MORLEN_1, 58000);
- events.ScheduleEvent(EVENT_SPAWN_WAVE_1, 61000);
-
- events.ScheduleEvent(EVENT_SPELL_BLADESTORM, urand(6000, 15000));
- events.ScheduleEvent(EVENT_SPELL_MORTAL_STRIKE, urand(3000, 7000));
- events.ScheduleEvent(EVENT_SPELL_HEROIC_STRIKE, urand(4000, 10000));
+ events.ScheduleEvent(EVENT_CHECK_PLAYER, 5s);
+ events.ScheduleEvent(EVENT_SUMMON_SOLDIERS, 0ms);
+ events.ScheduleEvent(EVENT_TALK_INTRO_0, 3s);
+ events.ScheduleEvent(EVENT_TALK_INTRO_1, 8s);
+ events.ScheduleEvent(EVENT_TALK_INTRO_2, 15s);
+ events.ScheduleEvent(EVENT_TALK_INTRO_3, 22s);
+ events.ScheduleEvent(EVENT_SALUTE, 24s);
+ events.ScheduleEvent(EVENT_SOLDIERS_RUN_AWAY, 30s);
+ events.ScheduleEvent(EVENT_GO_FIGHTPOINT, 31s);
+ events.ScheduleEvent(EVENT_TALK_SPAWN_0, 38s);
+ events.ScheduleEvent(EVENT_SUMMON_MORLEN, 44s);
+ events.ScheduleEvent(EVENT_TALK_SPAWN_1, 47s);
+ events.ScheduleEvent(EVENT_TALK_MORLEN_0, 52s);
+ events.ScheduleEvent(EVENT_TALK_MORLEN_1, 58s);
+ events.ScheduleEvent(EVENT_SPAWN_WAVE_1, 61s);
+
+ events.ScheduleEvent(EVENT_SPELL_BLADESTORM, 6s, 15s);
+ events.ScheduleEvent(EVENT_SPELL_MORTAL_STRIKE, 3s, 7s);
+ events.ScheduleEvent(EVENT_SPELL_HEROIC_STRIKE, 4s, 10s);
}
void JustSummoned(Creature* summon) override
@@ -172,10 +172,10 @@ public:
me->RemoveAurasDueToSpell(67541);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
me->GetMotionMaster()->MoveCharge(11779.30f, -7065.43f, 24.92f, me->GetSpeed(MOVE_RUN), EVENT_CHARGE);
- events.ScheduleEvent(EVENT_OUTRO_0, 0);
- events.ScheduleEvent(EVENT_OUTRO_1, 5000);
- events.ScheduleEvent(EVENT_OUTRO_2, 12000);
- events.ScheduleEvent(EVENT_OUTRO_3, 19000);
+ events.ScheduleEvent(EVENT_OUTRO_0, 0ms);
+ events.ScheduleEvent(EVENT_OUTRO_1, 5s);
+ events.ScheduleEvent(EVENT_OUTRO_2, 12s);
+ events.ScheduleEvent(EVENT_OUTRO_3, 19s);
}
else if (summons.size() == 1)
{
@@ -184,13 +184,13 @@ public:
switch (summon->GetEntry())
{
case NPC_SCOURGE_ZOMBIE:
- events.ScheduleEvent(EVENT_SPAWN_WAVE_2, 3000);
+ events.ScheduleEvent(EVENT_SPAWN_WAVE_2, 3s);
break;
case NPC_GHOUL_INVADER:
- events.ScheduleEvent(EVENT_SPAWN_WAVE_3, 3000);
+ events.ScheduleEvent(EVENT_SPAWN_WAVE_3, 3s);
break;
case NPC_CRYPT_RAIDER:
- events.ScheduleEvent(EVENT_SUMMONS_ATTACK, 3000);
+ events.ScheduleEvent(EVENT_SUMMONS_ATTACK, 3s);
break;
}
}
@@ -227,7 +227,7 @@ public:
if (Player* p = ObjectAccessor::GetPlayer(*me, playerGUID))
if (p->GetExactDist(me) <= 50.0f)
{
- events.RepeatEvent(5000);
+ events.Repeat(5s);
break;
}
me->setActive(false);
@@ -266,7 +266,7 @@ public:
{
if (!summons.empty())
{
- events.RepeatEvent(5000);
+ events.Repeat(5s);
return;
}
else
@@ -350,7 +350,7 @@ public:
break;
}
}
- events.ScheduleEvent(EVENT_SUMMONS_ATTACK, 3000);
+ events.ScheduleEvent(EVENT_SUMMONS_ATTACK, 3s);
break;
case EVENT_SUMMONS_ATTACK:
for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr)
@@ -370,13 +370,13 @@ public:
case EVENT_OUTRO_3:
Talk(SAY_OUTRO_0 + (evId - EVENT_OUTRO_0));
if (evId == EVENT_OUTRO_3)
- events.ScheduleEvent(EVENT_OUTRO_KNEEL, 6000);
+ events.ScheduleEvent(EVENT_OUTRO_KNEEL, 6s);
break;
case EVENT_OUTRO_KNEEL:
if (Player* p = ObjectAccessor::GetPlayer(*me, playerGUID))
p->KilledMonsterCredit(NPC_THALORIEN_KILL_CREDIT);
me->SetStandState(UNIT_STAND_STATE_KNEEL);
- events.ScheduleEvent(EVENT_DISAPPEAR, 6000);
+ events.ScheduleEvent(EVENT_DISAPPEAR, 6s);
break;
case EVENT_DISAPPEAR:
me->SetVisible(false);
@@ -390,17 +390,17 @@ public:
case EVENT_SPELL_BLADESTORM:
if (me->GetVictim() && me->IsWithinMeleeRange(me->GetVictim()))
me->CastSpell(me->GetVictim(), 67541, false);
- events.RepeatEvent(urand(25000, 35000));
+ events.Repeat(25s, 35s);
break;
case EVENT_SPELL_MORTAL_STRIKE:
if (me->GetVictim() && me->IsWithinMeleeRange(me->GetVictim()))
me->CastSpell(me->GetVictim(), 67542, false);
- events.RepeatEvent(urand(7000, 12000));
+ events.Repeat(7s, 12s);
break;
case EVENT_SPELL_HEROIC_STRIKE:
if (me->GetVictim() && me->IsWithinMeleeRange(me->GetVictim()))
me->CastSpell(me->GetVictim(), 57846, false);
- events.RepeatEvent(urand(5000, 10000));
+ events.Repeat(5s, 10s);
break;
}
@@ -410,7 +410,7 @@ public:
void MovementInform(uint32 type, uint32 id) override
{
if (type == POINT_MOTION_TYPE && id == EVENT_CHARGE)
- events.ScheduleEvent(EVENT_SET_FACING, 0);
+ events.ScheduleEvent(EVENT_SET_FACING, 0ms);
}
void EnterEvadeMode(EvadeReason why) override
@@ -504,19 +504,19 @@ public:
me->SummonCreature(NPC_SUNWELL_VISUAL_BUNNY, 1688.24f, 621.769f, 29.1745f, 0.523177f, TEMPSUMMON_MANUAL_DESPAWN);
me->setActive(true);
events.Reset();
- events.ScheduleEvent(1, 1000); // guard talk
- events.ScheduleEvent(2, 4000); // theron talk
- events.ScheduleEvent(3, 10000); // npcs walk
- events.ScheduleEvent(4, 17000); // rommath talk
- events.ScheduleEvent(5, 20000); // theron talk
- events.ScheduleEvent(6, 28000); // theron talk
- events.ScheduleEvent(7, 37000); // rommath talk
- events.ScheduleEvent(8, 44000); // rommath talk
- events.ScheduleEvent(9, 52000); // rommath talk
- events.ScheduleEvent(10, 60000); // auric talk
- events.ScheduleEvent(11, 66000); // auric talk
- events.ScheduleEvent(12, 76000); // rommath talk
- events.ScheduleEvent(13, 80000); // move home
+ events.ScheduleEvent(1, 1s); // guard talk
+ events.ScheduleEvent(2, 4s); // theron talk
+ events.ScheduleEvent(3, 10s); // npcs walk
+ events.ScheduleEvent(4, 17s); // rommath talk
+ events.ScheduleEvent(5, 20s); // theron talk
+ events.ScheduleEvent(6, 28s); // theron talk
+ events.ScheduleEvent(7, 37s); // rommath talk
+ events.ScheduleEvent(8, 44s); // rommath talk
+ events.ScheduleEvent(9, 52s); // rommath talk
+ events.ScheduleEvent(10, 60s); // auric talk
+ events.ScheduleEvent(11, 66s); // auric talk
+ events.ScheduleEvent(12, 76s); // rommath talk
+ events.ScheduleEvent(13, 80s); // move home
}
}
@@ -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:
@@ -586,7 +586,7 @@ public:
case 13:
me->setActive(false);
if (Creature* c = me->FindNearestCreature(NPC_SUNWELL_VISUAL_BUNNY, 60.0f, true))
- c->DespawnOrUnsummon(1);
+ c->DespawnOrUnsummon(1ms);
if (GameObject* go = me->FindNearestGameObject(GO_QUEL_DELAR, 60.0f))
go->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
me->SetWalk(true);
@@ -610,61 +610,6 @@ public:
};
};
-/*###### THEIR: ######*/
-
-/*######
-## npc_greengill_slave
-######*/
-
-#define ENRAGE 45111
-#define ORB 45109
-#define QUESTG 11541
-#define DM 25060
-
-class npc_greengill_slave : public CreatureScript
-{
-public:
- npc_greengill_slave() : CreatureScript("npc_greengill_slave") { }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_greengill_slaveAI(creature);
- }
-
- struct npc_greengill_slaveAI : public ScriptedAI
- {
- npc_greengill_slaveAI(Creature* creature) : ScriptedAI(creature) { }
-
- void JustEngagedWith(Unit* /*who*/) override { }
-
- void SpellHit(Unit* caster, SpellInfo const* spellInfo) override
- {
- Player* player = caster->ToPlayer();
- if (!player)
- return;
-
- if (spellInfo->Id == ORB && !me->HasAura(ENRAGE))
- {
- if (player->GetQuestStatus(QUESTG) == QUEST_STATUS_INCOMPLETE)
- DoCast(player, 45110, true);
-
- DoCast(me, ENRAGE);
-
- if (Creature* Myrmidon = me->FindNearestCreature(DM, 70))
- {
- me->AddThreat(Myrmidon, 100000.0f);
- AttackStart(Myrmidon);
- }
- }
- }
-
- void UpdateAI(uint32 /*diff*/) override
- {
- DoMeleeAttackIfReady();
- }
- };
-};
-
// 45396, 45398 - Weapon Coating Enchant
class spell_gen_weapon_coating_enchant : public AuraScript
{
@@ -690,6 +635,5 @@ void AddSC_isle_of_queldanas()
new npc_bh_thalorien_dawnseeker();
RegisterSpellScript(spell_bh_cleanse_quel_delar);
new npc_grand_magister_rommath();
- new npc_greengill_slave();
RegisterSpellScript(spell_gen_weapon_coating_enchant);
}
diff --git a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp
index bbf1037521..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, false, 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 5709c14b87..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()))
- pEscortAI->Start(true, false, player->GetGUID());
+ {
+ creature->SetWalk(true);
+ pEscortAI->Start(true, player->GetGUID());
+ }
}
return true;
@@ -328,7 +331,7 @@ public:
{
HasEnded = false;
TalkRNG = urand(0,1);
- events.ScheduleEvent(EVENT_APPA_INTRO, 2000);
+ events.ScheduleEvent(EVENT_APPA_INTRO, 2s);
summons.DespawnAll();
}
@@ -387,31 +390,31 @@ public:
case EVENT_APPA_INTRO:
Talk(SAY_APPA_INTRO);
SummonCrowd();
- events.ScheduleEvent(EVENT_APPA_SAY_1, 3000);
+ events.ScheduleEvent(EVENT_APPA_SAY_1, 3s);
break;
case EVENT_APPA_SAY_1:
Talk(TalkRNG ? SAY_APPA_OPTION_1_1 : SAY_APPA_OPTION_2_1);
- events.ScheduleEvent(EVENT_APPA_SAY_2, 5000);
+ events.ScheduleEvent(EVENT_APPA_SAY_2, 5s);
break;
case EVENT_APPA_SAY_2:
Talk(TalkRNG ? SAY_APPA_OPTION_1_2 : SAY_APPA_OPTION_2_2);
- events.ScheduleEvent(EVENT_APPA_SAY_3, 5000);
+ events.ScheduleEvent(EVENT_APPA_SAY_3, 5s);
break;
case EVENT_APPA_SAY_3:
Talk(TalkRNG ? SAY_APPA_OPTION_1_3 : SAY_APPA_OPTION_2_3);
- events.ScheduleEvent(EVENT_APPA_SAY_4, 5000);
+ events.ScheduleEvent(EVENT_APPA_SAY_4, 5s);
break;
case EVENT_APPA_SAY_4:
Talk(TalkRNG ? SAY_APPA_OPTION_1_4 : SAY_APPA_OPTION_2_4);
- events.ScheduleEvent(EVENT_APPA_OUTRO, 5000);
+ events.ScheduleEvent(EVENT_APPA_OUTRO, 5s);
break;
case EVENT_APPA_OUTRO:
Talk(SAY_APPA_OUTRO);
- events.ScheduleEvent(EVENT_APPA_OUTRO_CROWD, 3000);
+ events.ScheduleEvent(EVENT_APPA_OUTRO_CROWD, 3s);
break;
case EVENT_APPA_OUTRO_CROWD:
EmoteCrowd();
- events.ScheduleEvent(EVENT_APPA_OUTRO_END, 5000);
+ events.ScheduleEvent(EVENT_APPA_OUTRO_END, 5s);
break;
case EVENT_APPA_OUTRO_END: // Despawn for Apparition is handled via Areatrigger SAI (5m)
summons.DespawnAll();
diff --git a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
index cbf88ba9a5..6adf8cdf1f 100644
--- a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
@@ -406,7 +406,8 @@ public:
{
if (Player* player = GetPlayerForEscort())
{
- CAST_AI(npc_lord_gregor_lescovar::npc_lord_gregor_lescovarAI, pLescovar->AI())->Start(false, false, player->GetGUID());
+ 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,7 +449,8 @@ public:
{
if (Creature* pSpybot = creature->FindNearestCreature(NPC_TYRION_SPYBOT, 5.0f, true))
{
- CAST_AI(npc_tyrion_spybot::npc_tyrion_spybotAI, pSpybot->AI())->Start(false, false, player->GetGUID());
+ 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);
}
return true;
diff --git a/src/server/scripts/EasternKingdoms/zone_undercity.cpp b/src/server/scripts/EasternKingdoms/zone_undercity.cpp
index dcfd61342c..a7218f9b1c 100644
--- a/src/server/scripts/EasternKingdoms/zone_undercity.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_undercity.cpp
@@ -118,7 +118,7 @@ public:
_events.ScheduleEvent(EVENT_MULTI_SHOT, 10s);
}
- void SetGUID(ObjectGuid guid, int32 type) override
+ void SetGUID(ObjectGuid const& guid, int32 type) override
{
if (type == GUID_EVENT_INVOKER)
{
@@ -142,7 +142,7 @@ public:
{
summoned->SetDisableGravity(true);
float speed = summoned->GetDistance(summoned->GetPositionX(), summoned->GetPositionY(), me->GetPositionZ() + 15.0f) / (1000.0f * 0.001f);
- summoned->MonsterMoveWithSpeed(summoned->GetPositionX(), summoned->GetPositionY(), me->GetPositionZ() + 15.0f, speed);
+ summoned->GetMotionMaster()->MovePoint(0, summoned->GetPositionX(), summoned->GetPositionY(), me->GetPositionZ() + 15.0f, FORCED_MOVEMENT_NONE, speed);
summoned->CastSpell(summoned, SPELL_RIBBON_OF_SOULS, false);
}
}
@@ -270,8 +270,7 @@ public:
if (EventMoveTimer <= diff)
{
me->SetDisableGravity(true);
- me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), HIGHBORNE_LOC_Y_NEW, me->GetDistance(me->GetPositionX(), me->GetPositionY(), HIGHBORNE_LOC_Y_NEW) / (5000 * 0.001f));
- me->SetPosition(me->GetPositionX(), me->GetPositionY(), HIGHBORNE_LOC_Y_NEW, me->GetOrientation());
+ me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), HIGHBORNE_LOC_Y_NEW, FORCED_MOVEMENT_NONE, me->GetDistance(me->GetPositionX(), me->GetPositionY(), HIGHBORNE_LOC_Y_NEW) / (5000 * 0.001f));
EventMove = false;
}
else EventMoveTimer -= diff;
@@ -917,7 +916,7 @@ public:
if (auto ai = CAST_AI(npc_varian_wrynn::npc_varian_wrynnAI, creature->AI()))
{
- ai->Start(true, true, player->GetGUID());
+ ai->Start(true, player->GetGUID());
if (Creature* jaina = GetClosestCreatureWithEntry(creature, NPC_JAINA, 50.0f))
ai->jainaGUID = jaina->GetGUID();
else
@@ -1218,27 +1217,27 @@ public:
{
case 0:
if (Unit* temp = me->SummonCreature(NPC_DOCTOR, AllianceSpawn[4].x - rand32() % 5, AllianceSpawn[4].y - rand32() % 5, AllianceSpawn[4].z, TEMPSUMMON_DEAD_DESPAWN))
- temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false);
+ temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, false);
break;
case 1:
if (Unit* temp = me->SummonCreature(NPC_CHEMIST, AllianceSpawn[4].x - rand32() % 5, AllianceSpawn[4].y - rand32() % 5, AllianceSpawn[4].z, TEMPSUMMON_DEAD_DESPAWN))
- temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false);
+ temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, false);
break;
case 2:
if (Unit* temp = me->SummonCreature(NPC_BETRAYER, AllianceSpawn[4].x - rand32() % 5, AllianceSpawn[4].y - rand32() % 5, AllianceSpawn[4].z, TEMPSUMMON_DEAD_DESPAWN))
- temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false);
+ temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, false);
break;
case 3:
if (Unit* temp = me->SummonCreature(NPC_DOCTOR, AllianceSpawn[5].x - rand32() % 5, AllianceSpawn[5].y - rand32() % 5, AllianceSpawn[5].z, TEMPSUMMON_DEAD_DESPAWN))
- temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false);
+ temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, false);
break;
case 4:
if (Unit* temp = me->SummonCreature(NPC_CHEMIST, AllianceSpawn[5].x - rand32() % 5, AllianceSpawn[5].y - rand32() % 5, AllianceSpawn[5].z, TEMPSUMMON_DEAD_DESPAWN))
- temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false);
+ temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, false);
break;
case 5:
if (Unit* temp = me->SummonCreature(NPC_BETRAYER, AllianceSpawn[5].x - rand32() % 5, AllianceSpawn[5].y - rand32() % 5, AllianceSpawn[5].z, TEMPSUMMON_DEAD_DESPAWN))
- temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false);
+ temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, false);
break;
}
}
@@ -1246,7 +1245,7 @@ public:
case 5:
for (uint8 i = 0; i < WAVE_MAXCOUNT; ++i)
if (Unit* temp = me->SummonCreature(NPC_GUARDIAN, AllianceSpawn[6].x - rand32() % 5, AllianceSpawn[6].y - rand32() % 5, AllianceSpawn[6].z, TEMPSUMMON_DEAD_DESPAWN))
- temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false);
+ temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, false);
break;
case 6:
if (Unit* temp = me->SummonCreature(NPC_BLIGHTWORM, AllianceSpawn[7].x, AllianceSpawn[7].y, AllianceSpawn[7].z, TEMPSUMMON_MANUAL_DESPAWN))
@@ -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;
@@ -1614,7 +1613,7 @@ public:
break;
case 22:
Talk(WRYNN_SAY_SEWERS_4);
- SetRun(false);
+ me->SetWalk(true);
if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID))
{
jaina->GetMotionMaster()->Clear();
@@ -1665,7 +1664,7 @@ public:
JumpToNextStep(3 * IN_MILLISECONDS);
break;
case 31:
- SetRun(true);
+ me->SetWalk(false);
if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID))
jaina->GetMotionMaster()->MoveFollow(me, 1, 0);
SetEscortPaused(false);
@@ -1727,7 +1726,7 @@ public:
if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID))
{
jaina->GetMotionMaster()->Clear();
- jaina->GetMotionMaster()->MovePoint(0, AllianceWP[7].x, AllianceWP[7].y, AllianceWP[7].z, false);
+ jaina->GetMotionMaster()->MovePoint(0, AllianceWP[7].x, AllianceWP[7].y, AllianceWP[7].z, FORCED_MOVEMENT_NONE, 0.f, 0.f, false);
}
JumpToNextStep(5 * IN_MILLISECONDS);
break;
@@ -1789,7 +1788,7 @@ public:
break;
case 54:
Talk(WRYNN_SAY_APO_7);
- SetRun(false);
+ me->SetWalk(true);
JumpToNextStep(4 * IN_MILLISECONDS);
break;
case 55:
@@ -1845,7 +1844,7 @@ public:
JumpToNextStep(1.5 * IN_MILLISECONDS);
break;
case 65:
- SetRun(true);
+ me->SetWalk(false);
SetEscortPaused(false);
JumpToNextStep(0.25 * IN_MILLISECONDS);
break;
@@ -2236,7 +2235,8 @@ public:
if (Creature* sylvannas = GetClosestCreatureWithEntry(creature, NPC_SYLVANAS, 50.0f))
{
thrall_ai->sylvanasfollowGUID = sylvannas->GetGUID();
- thrall_ai->Start(true, true, player->GetGUID());
+ creature->SetWalk(false);
+ thrall_ai->Start(true, player->GetGUID());
thrall_ai->SetDespawnAtEnd(false);
thrall_ai->SetDespawnAtFar(false);
}
@@ -2477,7 +2477,7 @@ public:
for (std::list<Creature*>::iterator itr = ThroneList.begin(); itr != ThroneList.end(); itr++)
(*itr)->DespawnOrUnsummon();
SetEscortPaused(false);
- SetRun(false);
+ me->SetWalk(true);
break;
}
default:
@@ -2537,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
@@ -2762,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
@@ -2972,10 +2972,10 @@ public:
SetEscortPaused(false);
bStepping = false;
JumpToNextStep(0);
- SetRun(true);
+ 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;
@@ -3005,9 +3005,9 @@ public:
for (std::list<Creature*>::iterator itr = PlagueList.begin(); itr != PlagueList.end(); itr++)
(*itr)->DespawnOrUnsummon();
SetEscortPaused(false);
- SetRun(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;
}
@@ -3054,10 +3054,10 @@ public:
if (Creature* valimathras = ObjectAccessor::GetCreature(*me, ValimathrasGUID))
{
valimathras->GetMotionMaster()->MovePoint(0, 1804.559f, 235.504f, 62.753f);
- valimathras->DespawnOrUnsummon(3 * IN_MILLISECONDS);
+ valimathras->DespawnOrUnsummon(3s);
}
if (Creature* valimathrasportal = ObjectAccessor::GetCreature(*me, ValimathrasPortalGUID))
- valimathrasportal->DespawnOrUnsummon(6 * IN_MILLISECONDS);
+ valimathrasportal->DespawnOrUnsummon(6s);
JumpToNextStep(1 * IN_MILLISECONDS);
break;
case 26:
@@ -3077,7 +3077,7 @@ public:
FollowThrall();
SetEscortPaused(false);
bStepping = false;
- SetRun(true);
+ me->SetWalk(false);
Talk(THRALL_SAY_COURTYARD_4);
UpdateWorldState(me->GetMap(), WORLD_STATE_BATTLE_FOR_UNDERCITY_START_H, 0);
UpdateWorldState(me->GetMap(), WORLD_STATE_BATTLE_FOR_UNDERCITY_COURTYARD_FIGHT_H, 1);
@@ -3182,7 +3182,7 @@ public:
SpawnWave(6);
SetEscortPaused(false);
bStepping = false;
- SetRun(false);
+ me->SetWalk(true);
JumpToNextStep(0 * IN_MILLISECONDS);
break;
}
@@ -3226,7 +3226,7 @@ public:
FollowThrall();
SetEscortPaused(false);
bStepping = false;
- SetRun(false);
+ me->SetWalk(true);
JumpToNextStep(0 * IN_MILLISECONDS);
break;
// Top of Undercity Discussion
@@ -3266,7 +3266,7 @@ public:
FollowThrall();
SetEscortPaused(false);
bStepping = false;
- SetRun(false);
+ me->SetWalk(true);
JumpToNextStep(0 * IN_MILLISECONDS);
break;
case 63:
@@ -3284,7 +3284,7 @@ public:
FollowThrall();
SetEscortPaused(false);
bStepping = false;
- SetRun(false);
+ me->SetWalk(true);
JumpToNextStep(0 * IN_MILLISECONDS);
break;
case 67:
@@ -3299,7 +3299,7 @@ public:
FollowThrall();
SetEscortPaused(false);
bStepping = false;
- SetRun(false);
+ me->SetWalk(true);
JumpToNextStep(0 * IN_MILLISECONDS);
break;
// KHANOK - Valimathtas Intro
@@ -3332,10 +3332,10 @@ public:
if (Creature* valimathras = ObjectAccessor::GetCreature(*me, ValimathrasGUID))
{
valimathras->GetMotionMaster()->MovePoint(0, 1596.642f, 429.811f, -46.3429f);
- valimathras->DespawnOrUnsummon(3 * IN_MILLISECONDS);
+ valimathras->DespawnOrUnsummon(3s);
}
if (Creature* valimathrasportal = ObjectAccessor::GetCreature(*me, ValimathrasPortalGUID))
- valimathrasportal->DespawnOrUnsummon(3 * IN_MILLISECONDS);
+ valimathrasportal->DespawnOrUnsummon(3s);
JumpToNextStep(2 * IN_MILLISECONDS);
break;
// KHANOK - Trashspawn
@@ -3475,7 +3475,7 @@ public:
FollowThrall();
SetEscortPaused(false);
bStepping = false;
- SetRun(false);
+ me->SetWalk(true);
JumpToNextStep(0 * IN_MILLISECONDS);
break;
case 109:
@@ -3491,7 +3491,7 @@ public:
FollowThrall();
SetEscortPaused(false);
bStepping = false;
- SetRun(true);
+ me->SetWalk(false);
JumpToNextStep(0 * IN_MILLISECONDS);
break;
case 112:
@@ -3662,7 +3662,7 @@ public:
case 143:
if (Creature* sylvanas = ObjectAccessor::GetCreature(*me, sylvanasfollowGUID))
{
- sylvanas->GetMotionMaster()->MovePoint(0, 1289.48f, 314.33f, -57.32f, true);
+ sylvanas->GetMotionMaster()->MovePoint(0, 1289.48f, 314.33f, -57.32f);
sylvanas->CastSpell(sylvanas, SPELL_LEAP_TO_PLATFORM);
}
JumpToNextStep(10 * IN_MILLISECONDS);
@@ -3706,7 +3706,7 @@ public:
wrynn->SetImmuneToAll(true);
wrynn->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
wrynn->SetReactState(REACT_PASSIVE);
- wrynn->GetMotionMaster()->MovePoint(0, 1302.543f, 359.472f, -67.295f, true);
+ wrynn->GetMotionMaster()->MovePoint(0, 1302.543f, 359.472f, -67.295f);
}
if (Creature* jaina = me->SummonCreature(NPC_JAINA, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
{
@@ -3807,7 +3807,7 @@ public:
{
SaurfangGUID = saurfang->GetGUID();
saurfang->SetWalk(true);
- saurfang->GetMotionMaster()->MovePoint(0, 1300.862f, 353.670f, -66.187f, true);
+ saurfang->GetMotionMaster()->MovePoint(0, 1300.862f, 353.670f, -66.187f);
}
JumpToNextStep(7 * IN_MILLISECONDS);
break;
@@ -3865,8 +3865,8 @@ public:
me->GetCreatureListWithEntryInGrid(HelperList, NPC_OVERLORD_SAURFANG, 100.0f);
if (!HelperList.empty())
for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
- (*itr)->DespawnOrUnsummon(120 * IN_MILLISECONDS);
- me->DespawnOrUnsummon(120 * IN_MILLISECONDS);
+ (*itr)->DespawnOrUnsummon(120s);
+ me->DespawnOrUnsummon(120s);
bStepping = false;
JumpToNextStep(0 * IN_MILLISECONDS);
break;
diff --git a/src/server/scripts/EasternKingdoms/zone_westfall.cpp b/src/server/scripts/EasternKingdoms/zone_westfall.cpp
index 6d54a0cc26..de9afc5afe 100644
--- a/src/server/scripts/EasternKingdoms/zone_westfall.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_westfall.cpp
@@ -56,9 +56,8 @@ public:
if (quest->GetQuestId() == QUEST_TOME_VALOR)
{
creature->AI()->Talk(SAY_DS_START);
-
if (npc_escortAI* pEscortAI = CAST_AI(npc_daphne_stilwell::npc_daphne_stilwellAI, creature->AI()))
- pEscortAI->Start(true, true, player->GetGUID());
+ pEscortAI->Start(true, player->GetGUID());
}
return true;
@@ -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 9118411816..054e170434 100644
--- a/src/server/scripts/EasternKingdoms/zone_wetlands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_wetlands.cpp
@@ -62,7 +62,7 @@ public:
case 2:
if (me->HasStealthAura())
me->RemoveAurasByType(SPELL_AURA_MOD_STEALTH);
- SetRun();
+ me->SetWalk(false);
me->SetFaction(FACTION_ENEMY);
break;
}
@@ -109,7 +109,7 @@ public:
me->GetThreatMgr().ClearAllThreat();
me->CombatStop(true);
- SetRun(false);
+ me->SetWalk(true);
}
}
}
@@ -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()))
- pEscortAI->Start(false, false, player->GetGUID(), quest);
+ {
+ pSlim->SetWalk(true);
+ pEscortAI->Start(false, player->GetGUID(), quest);
+ }
}
return false;
}
diff --git a/src/server/scripts/Events/brewfest.cpp b/src/server/scripts/Events/brewfest.cpp
index e0b01c49f9..c743ed2456 100644
--- a/src/server/scripts/Events/brewfest.cpp
+++ b/src/server/scripts/Events/brewfest.cpp
@@ -367,10 +367,10 @@ struct npc_dark_iron_attack_generator : public ScriptedAI
if (AllowStart())
{
PrepareEvent();
- events.RepeatEvent(300000);
+ events.Repeat(300s);
return;
}
- events.RepeatEvent(2000);
+ events.Repeat(2s);
break;
}
case EVENT_SPAWN_MOLE_MACHINE:
@@ -393,7 +393,7 @@ struct npc_dark_iron_attack_generator : public ScriptedAI
if (Creature* cr = me->SummonCreature(NPC_MOLE_MACHINE_TRIGGER, x, y, 398.11f, 0.0f))
cr->CastSpell(cr, SPELL_SPAWN_MOLE_MACHINE, true);
}
- events.RepeatEvent(3000);
+ events.Repeat(3s);
break;
}
case EVENT_PRE_FINISH_ATTACK:
@@ -410,7 +410,7 @@ struct npc_dark_iron_attack_generator : public ScriptedAI
}
case EVENT_BARTENDER_SAY:
{
- events.RepeatEvent(12000);
+ events.Repeat(12s);
Creature* sayer = GetRandomBartender();
if (!sayer)
return;
@@ -603,7 +603,7 @@ struct npc_dark_iron_attack_mole_machine : public ScriptedAI
{
me->SummonCreature(NPC_DARK_IRON_GUZZLER, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 6000);
summonTimer = 0;
- me->DespawnOrUnsummon(3000);
+ me->DespawnOrUnsummon(3s);
}
}
}
@@ -1714,12 +1714,12 @@ struct npc_coren_direbrew : public ScriptedAI
case EVENT_SUMMON_MOLE_MACHINE:
{
me->CastCustomSpell(SPELL_MOLE_MACHINE_TARGET_PICKER, SPELLVALUE_MAX_TARGETS, 1, nullptr, true);
- _events.RepeatEvent(15 * IN_MILLISECONDS);
+ _events.Repeat(15s);
break;
}
case EVENT_DIREBREW_DISARM:
DoCastSelf(SPELL_DIREBREW_DISARM_PRE_CAST, true);
- _events.RepeatEvent(20 * IN_MILLISECONDS);
+ _events.Repeat(20s);
break;
default:
break;
@@ -1743,7 +1743,7 @@ struct npc_coren_direbrew_sisters : public ScriptedAI
{
npc_coren_direbrew_sisters(Creature* creature) : ScriptedAI(creature) { }
- void SetGUID(ObjectGuid guid, int32 id) override
+ void SetGUID(ObjectGuid const& guid, int32 id) override
{
if (id == DATA_TARGET_GUID)
{
diff --git a/src/server/scripts/Events/hallows_end.cpp b/src/server/scripts/Events/hallows_end.cpp
index 06d649291a..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();
}
@@ -697,7 +697,7 @@ struct npc_hallows_end_soh : public ScriptedAI
void EnterEvadeMode(EvadeReason /* why */) override
{
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
uint32 GetData(uint32 /*type*/) const override
@@ -763,7 +763,7 @@ struct npc_hallows_end_soh : public ScriptedAI
}
CastFires(false);
- events.RepeatEvent(15000);
+ events.Repeat(15s);
break;
}
case 4:
@@ -848,7 +848,7 @@ struct npc_hallows_end_soh : public ScriptedAI
if (Unit* c = ObjectAccessor::GetUnit(*me, guid))
c->RemoveAllAuras();
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
else
{
@@ -868,7 +868,7 @@ struct npc_hallows_end_soh : public ScriptedAI
me->RemoveAllAuras();
me->SetCanFly(false);
me->SetDisableGravity(false);
- events.ScheduleEvent(4, 2000);
+ events.ScheduleEvent(4, 2s);
}
}
@@ -1029,7 +1029,7 @@ struct boss_headless_horseman : public ScriptedAI
std::list<Creature*> unitList;
me->GetCreaturesWithEntryInRange(unitList, 100.0f, NPC_PUMPKIN_FIEND);
for (std::list<Creature*>::iterator itr = unitList.begin(); itr != unitList.end(); ++itr)
- (*itr)->ToCreature()->DespawnOrUnsummon(500);
+ (*itr)->ToCreature()->DespawnOrUnsummon(500ms);
Map::PlayerList const& players = me->GetMap()->GetPlayers();
if (!players.IsEmpty() && players.begin()->GetSource() && players.begin()->GetSource()->GetGroup())
@@ -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);
@@ -1202,7 +1202,7 @@ struct boss_headless_horseman : public ScriptedAI
talkCount = 0;
return; // pop and return, skip repeat
}
- events.RepeatEvent(2000);
+ events.Repeat(2s);
break;
}
case EVENT_HORSEMAN_FOLLOW:
@@ -1218,7 +1218,7 @@ struct boss_headless_horseman : public ScriptedAI
case EVENT_HORSEMAN_CLEAVE:
{
me->CastSpell(me->GetVictim(), SPELL_HORSEMAN_CLEAVE, false);
- events.RepeatEvent(8000);
+ events.Repeat(8s);
break;
}
case EVENT_HORSEMAN_WHIRLWIND:
@@ -1226,11 +1226,11 @@ struct boss_headless_horseman : public ScriptedAI
if (me->HasAuraEffect(SPELL_HORSEMAN_WHIRLWIND, EFFECT_0))
{
me->RemoveAura(SPELL_HORSEMAN_WHIRLWIND);
- events.RepeatEvent(15000);
+ events.Repeat(15s);
break;
}
me->CastSpell(me, SPELL_HORSEMAN_WHIRLWIND, true);
- events.RepeatEvent(6000);
+ events.Repeat(6s);
break;
}
case EVENT_HORSEMAN_CHECK_HEALTH:
@@ -1241,7 +1241,7 @@ struct boss_headless_horseman : public ScriptedAI
return;
}
- events.RepeatEvent(1000);
+ events.Repeat(1s);
break;
}
case EVENT_HORSEMAN_CONFLAGRATION:
@@ -1253,21 +1253,21 @@ struct boss_headless_horseman : public ScriptedAI
Talk(TALK_CONFLAGRATION);
}
- events.RepeatEvent(12500);
+ events.Repeat(12500ms);
break;
}
case EVENT_SUMMON_PUMPKIN:
{
if (talkCount < 4)
{
- events.RepeatEvent(1);
+ events.Repeat(1ms);
talkCount++;
me->CastSpell(me, SPELL_SUMMON_PUMPKIN, false);
}
else
{
Talk(TALK_SPROUTING_PUMPKINS);
- events.RepeatEvent(15000);
+ events.Repeat(15s);
talkCount = 0;
}
diff --git a/src/server/scripts/Events/love_in_air.cpp b/src/server/scripts/Events/love_in_air.cpp
index 6c5a2aedb0..6a22e8e839 100644
--- a/src/server/scripts/Events/love_in_air.cpp
+++ b/src/server/scripts/Events/love_in_air.cpp
@@ -247,7 +247,7 @@ struct npc_love_in_air_snivel_real : public ScriptedAI
if (Unit* owner = me->ToTempSummon()->GetSummonerUnit())
me->CastSpell(owner, SPELL_SNIVEL_GUN, true);
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
}
}
diff --git a/src/server/scripts/Events/winter_veil.cpp b/src/server/scripts/Events/winter_veil.cpp
index 6a66ed29e6..a1a53a0422 100644
--- a/src/server/scripts/Events/winter_veil.cpp
+++ b/src/server/scripts/Events/winter_veil.cpp
@@ -192,7 +192,7 @@ class spell_winter_veil_racer_slam_hit : public SpellScript
return;
target->CastSpell(target->GetPositionX() + irand(-10, 10), target->GetPositionY() + irand(-10, 10), target->GetPositionZ(), SPELL_RACER_DEATH_VISUAL, true);
- target->DespawnOrUnsummon(3000);
+ target->DespawnOrUnsummon(3s);
target->CastSpell(target, SPELL_RACER_FLAMES, true);
caster->CastSpell(caster, SPELL_RACER_KILL_COUNTER, true);
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_archimonde.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
index 3d15d6cf7c..7b1ccf257b 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
@@ -297,7 +297,7 @@ struct boss_archimonde : public BossAI
}
}
}, 5s);
- ScheduleTimedEvent(5000ms, [&]
+ ScheduleTimedEvent(5s, [&]
{
bool noPlayersInRange = true;
if (Map* map = me->GetMap())
@@ -335,7 +335,7 @@ struct boss_archimonde : public BossAI
Talk(SAY_SLAY);
}
- void SetGUID(ObjectGuid guid, int32 type) override
+ void SetGUID(ObjectGuid const& guid, int32 type) override
{
if (type == GUID_GAIN_SOUL_CHARGE_PLAYER)
{
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp
index 82f86f1b58..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
@@ -110,7 +110,7 @@ public:
if (Creature* archi = instance->GetCreature(DATA_ARCHIMONDE))
{
archi->AI()->DoAction(ACTION_BECOME_ACTIVE_AND_CHANNEL);
- archi->AI()->Talk(SAY_ARCHIMONDE_INTRO, 25000ms);
+ archi->AI()->Talk(SAY_ARCHIMONDE_INTRO, 25s);
}
BossAI::JustDied(killer);
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
index 42ad0d907d..991b8214f6 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
@@ -94,9 +94,9 @@ public:
Milliseconds GetMarkRepeatTimer()
{
++_markCounter;
- Milliseconds timer = 45000ms - (5000ms * _markCounter);
- if (timer <= 10000ms)
- return 10000ms;
+ Milliseconds timer = 45s - (5s * _markCounter);
+ if (timer <= 10s)
+ return 10s;
else
return timer;
}
@@ -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/BattleForMountHyjal/instance_hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp
index 1803000b92..5a120eaa07 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp
@@ -53,16 +53,16 @@ ObjectData const creatureData[] =
Milliseconds hyjalWaveTimers[4][MAX_WAVES_STANDARD]
{
- { 130000ms, 130000ms, 130000ms, 130000ms, 130000ms, 130000ms, 130000ms, 190000ms, 0ms }, // Winterchill
- { 130000ms, 130000ms, 130000ms, 130000ms, 130000ms, 130000ms, 130000ms, 190000ms, 0ms }, // Anetheron
- { 130000ms, 155000ms, 130000ms, 155000ms, 130000ms, 130000ms, 155000ms, 225000ms, 0ms }, // Kaz'rogal
- { 130000ms, 190000ms, 190000ms, 190000ms, 130000ms, 155000ms, 190000ms, 225000ms, 0ms } // Azgalor
+ { 130s, 130s, 130s, 130s, 130s, 130s, 130s, 190s, 0ms }, // Winterchill
+ { 130s, 130s, 130s, 130s, 130s, 130s, 130s, 190s, 0ms }, // Anetheron
+ { 130s, 155s, 130s, 155s, 130s, 130s, 155s, 225s, 0ms }, // Kaz'rogal
+ { 130s, 190s, 190s, 190s, 130s, 155s, 190s, 225s, 0ms } // Azgalor
};
Milliseconds hyjalRetreatTimers[2][MAX_WAVES_RETREAT]
{
- { 10000ms, 6000ms , 0ms }, // Alliance
- { 10000ms, 40000ms, 0ms } // Horde
+ { 10s, 6s , 0ms }, // Alliance
+ { 10s, 40s, 0ms } // Horde
};
Milliseconds hyjalNightElfWaveTimers[1][MAX_WAVES_NIGHT_ELF]
@@ -295,7 +295,7 @@ public:
}
// Despawn all alliance NPCs
- scheduler.Schedule(21000ms, [this](TaskContext)
+ scheduler.Schedule(21s, [this](TaskContext)
{
for (ObjectGuid const& guid : _baseAlliance)
if (Creature* creature = instance->GetCreature(guid))
@@ -343,7 +343,7 @@ public:
}
}
- scheduler.Schedule(21000ms, [this](TaskContext)
+ scheduler.Schedule(21s, [this](TaskContext)
{
for (ObjectGuid const& guid : _baseHorde)
if (Creature* creature = instance->GetCreature(guid))
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp
index f429e5a474..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
@@ -77,17 +76,17 @@ public:
{
Talk(SAY_AGGRO);
- events.ScheduleEvent(EVENT_SPELL_CURSE_OF_EXERTION, 9000);
- events.ScheduleEvent(EVENT_SPELL_WOUNDING_STRIKE, 3000);
- events.ScheduleEvent(EVENT_SPELL_TIME_WARP, 25000);
+ events.ScheduleEvent(EVENT_SPELL_CURSE_OF_EXERTION, 9s);
+ events.ScheduleEvent(EVENT_SPELL_WOUNDING_STRIKE, 3s);
+ events.ScheduleEvent(EVENT_SPELL_TIME_WARP, 25s);
if (IsHeroic())
- events.ScheduleEvent(EVENT_SPELL_TIME_STOP, 20000);
+ events.ScheduleEvent(EVENT_SPELL_TIME_STOP, 20s);
}
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);
}
}
@@ -116,23 +115,23 @@ public:
case EVENT_SPELL_CURSE_OF_EXERTION:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true))
me->CastSpell(target, SPELL_CURSE_OF_EXERTION, false);
- events.RepeatEvent(9000);
+ events.Repeat(9s);
break;
case EVENT_SPELL_WOUNDING_STRIKE:
- me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_WOUNDING_STRIKE_N, SPELL_WOUNDING_STRIKE_H), false);
- events.RepeatEvent(6000);
+ me->CastSpell(me->GetVictim(), SPELL_WOUNDING_STRIKE, false);
+ events.Repeat(6s);
break;
case EVENT_SPELL_TIME_STOP:
me->CastSpell(me, SPELL_TIME_STOP, false);
- events.RepeatEvent(20000);
+ events.Repeat(20s);
break;
case EVENT_SPELL_TIME_WARP:
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.RepeatEvent(25000);
+ events.Repeat(25s);
break;
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp
index 7ec0d095c3..854b43b389 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp
@@ -67,7 +67,7 @@ public:
summons.DespawnAll();
if (InstanceScript* pInstance = me->GetInstanceScript())
if (pInstance->GetData(DATA_GUARDIANTIME_EVENT) == 0)
- me->DespawnOrUnsummon(500);
+ me->DespawnOrUnsummon(500ms);
me->SummonCreature(NPC_TIME_RIFT, 2337.6f, 1270.0f, 132.95f, 2.79f);
me->SummonCreature(NPC_GUARDIAN_OF_TIME, 2319.3f, 1267.7f, 132.8f, 1.0f);
@@ -79,8 +79,8 @@ public:
void JustEngagedWith(Unit* /*who*/) override
{
me->InterruptNonMeleeSpells(false);
- events.ScheduleEvent(EVENT_SPELL_VOID_STRIKE, 8000);
- events.ScheduleEvent(EVENT_SPELL_CORRUPTING_BLIGHT, 12000);
+ events.ScheduleEvent(EVENT_SPELL_VOID_STRIKE, 8s);
+ events.ScheduleEvent(EVENT_SPELL_CORRUPTING_BLIGHT, 12s);
Talk(SAY_AGGRO);
}
@@ -93,11 +93,11 @@ public:
{
if (cr->GetEntry() == NPC_TIME_RIFT)
{
- cr->DespawnOrUnsummon(1000);
+ cr->DespawnOrUnsummon(1s);
}
else
{
- cr->DespawnOrUnsummon(5000);
+ cr->DespawnOrUnsummon(5s);
cr->RemoveAllAuras();
cr->AI()->Talk(SAY_THANKS);
}
@@ -120,7 +120,7 @@ public:
{
Talk(SAY_FAIL);
summons.DespawnAll();
- me->DespawnOrUnsummon(500);
+ me->DespawnOrUnsummon(500ms);
}
}
@@ -147,12 +147,12 @@ public:
{
case EVENT_SPELL_VOID_STRIKE:
me->CastSpell(me->GetVictim(), SPELL_VOID_STRIKE, false);
- events.RepeatEvent(8000);
+ events.Repeat(8s);
break;
case EVENT_SPELL_CORRUPTING_BLIGHT:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true))
me->CastSpell(target, SPELL_CORRUPTING_BLIGHT, false);
- events.RepeatEvent(12000);
+ events.Repeat(12s);
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 065224bdc3..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,
};
@@ -80,17 +77,17 @@ public:
if (finished)
{
Talk(SAY_OUTRO);
- me->DespawnOrUnsummon(20000);
+ me->DespawnOrUnsummon(20s);
}
}
void JustEngagedWith(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
- events.ScheduleEvent(EVENT_SPELL_CARRION_SWARM, 6000);
- events.ScheduleEvent(EVENT_SPELL_MIND_BLAST, 11000);
- events.ScheduleEvent(EVENT_SPELL_SLEEP, 20000);
- events.ScheduleEvent(EVENT_SPELL_VAMPIRIC_TOUCH, 15000);
+ events.ScheduleEvent(EVENT_SPELL_CARRION_SWARM, 6s);
+ events.ScheduleEvent(EVENT_SPELL_MIND_BLAST, 11s);
+ events.ScheduleEvent(EVENT_SPELL_SLEEP, 20s);
+ events.ScheduleEvent(EVENT_SPELL_VAMPIRIC_TOUCH, 15s);
}
void JustDied(Unit* /*killer*/) override
@@ -145,23 +142,23 @@ public:
switch (events.ExecuteEvent())
{
case EVENT_SPELL_CARRION_SWARM:
- me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_CARRION_SWARM_N, SPELL_CARRION_SWARM_H), false);
- events.RepeatEvent(7000);
+ 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);
- events.RepeatEvent(6000);
+ 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);
- events.RepeatEvent(17000);
+ me->CastSpell(target, SPELL_SLEEP, false);
+ events.Repeat(17s);
break;
case EVENT_SPELL_VAMPIRIC_TOUCH:
me->CastSpell(me, SPELL_VAMPIRIC_TOUCH, true);
- events.RepeatEvent(30000);
+ events.Repeat(30s);
break;
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp
index 8a87485c1e..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,
};
@@ -66,9 +64,9 @@ public:
void JustEngagedWith(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
- events.RescheduleEvent(EVENT_SPELL_CONSTRICTING_CHAINS, 15000);
- events.RescheduleEvent(EVENT_SPELL_DISEASE_EXPULSION, 4000);
- events.RescheduleEvent(EVENT_SPELL_FRENZY, 20000);
+ events.RescheduleEvent(EVENT_SPELL_CONSTRICTING_CHAINS, 15s);
+ events.RescheduleEvent(EVENT_SPELL_DISEASE_EXPULSION, 4s);
+ events.RescheduleEvent(EVENT_SPELL_FRENZY, 20s);
}
void JustDied(Unit* /*killer*/) override
@@ -97,17 +95,17 @@ public:
switch (events.ExecuteEvent())
{
case EVENT_SPELL_DISEASE_EXPULSION:
- me->CastSpell(me, DUNGEON_MODE(SPELL_DISEASE_EXPULSION_N, SPELL_DISEASE_EXPULSION_H), false);
- events.RepeatEvent(6000);
+ me->CastSpell(me, SPELL_DISEASE_EXPULSION, false);
+ events.Repeat(6s);
break;
case EVENT_SPELL_FRENZY:
me->CastSpell(me, SPELL_FRENZY, false);
- events.RepeatEvent(20000);
+ events.Repeat(20s);
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);
- events.RepeatEvent(14000);
+ 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 f0228eec2a..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,
};
@@ -84,12 +82,12 @@ public:
void JustEngagedWith(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
- events.ScheduleEvent(EVENT_SPELL_SHADOW_BOLT, 7000);
- events.ScheduleEvent(EVENT_SPELL_STEAL_FLESH, 11000);
- events.ScheduleEvent(EVENT_SPELL_SUMMON_GHOULS, 16000);
- events.ScheduleEvent(EVENT_EXPLODE_GHOUL, 22000);
+ events.ScheduleEvent(EVENT_SPELL_SHADOW_BOLT, 7s);
+ events.ScheduleEvent(EVENT_SPELL_STEAL_FLESH, 11s);
+ events.ScheduleEvent(EVENT_SPELL_SUMMON_GHOULS, 16s);
+ events.ScheduleEvent(EVENT_EXPLODE_GHOUL, 22s);
if (IsHeroic())
- events.ScheduleEvent(EVENT_SPELL_CURSE, 25000);
+ events.ScheduleEvent(EVENT_SPELL_CURSE, 25s);
}
void JustDied(Unit* /*killer*/) override
@@ -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,30 +127,30 @@ public:
switch (events.ExecuteEvent())
{
case EVENT_SPELL_SHADOW_BOLT:
- me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_SHADOW_BOLT_N, SPELL_SHADOW_BOLT_H), false);
- events.RepeatEvent(10000);
+ me->CastSpell(me->GetVictim(), SPELL_SHADOW_BOLT, false);
+ events.Repeat(10s);
break;
case EVENT_SPELL_STEAL_FLESH:
if (!urand(0, 2))
Talk(SAY_STEAL_FLESH);
me->CastSpell(me->GetVictim(), SPELL_STEAL_FLESH_CHANNEL, false);
- events.RepeatEvent(12000);
+ events.Repeat(12s);
break;
case EVENT_SPELL_SUMMON_GHOULS:
if (!urand(0, 2))
Talk(SAY_SUMMON_GHOULS);
me->CastSpell(me, SPELL_SUMMON_GHOULS, false);
- events.RepeatEvent(10000);
+ events.Repeat(10s);
break;
case EVENT_EXPLODE_GHOUL:
if (!urand(0, 2))
Talk(SAY_EXPLODE_GHOUL);
ExplodeGhoul();
- events.RepeatEvent(15000);
+ events.Repeat(15s);
break;
case EVENT_SPELL_CURSE:
me->CastSpell(me->GetVictim(), SPELL_CURSE_OF_TWISTED_FAITH, false);
- events.RepeatEvent(30000);
+ events.Repeat(30s);
break;
}
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 32ec43e808..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
@@ -385,7 +384,7 @@ public:
uint8 timeRiftId;
Creature* GetEventNpc(uint32 entry);
- void ScheduleNextEvent(uint32 currentEvent, uint32 time);
+ void ScheduleNextEvent(uint32 currentEvent, Milliseconds time);
void SummonNextWave();
void ReorderInstance(uint32 data);
void JustEngagedWith(Unit* /*who*/) override ;
@@ -418,13 +417,13 @@ public:
{
// Event
eventInRun = true;
- actionEvents.ScheduleEvent(EVENT_ACTION_PHASE1, 0);
+ actionEvents.ScheduleEvent(EVENT_ACTION_PHASE1, 0ms);
}
else if (param == ACTION_START_CITY)
{
Talk(SAY_PHASE201);
- actionEvents.ScheduleEvent(EVENT_ACTION_PHASE2, 12000);
- SetRun(false);
+ actionEvents.ScheduleEvent(EVENT_ACTION_PHASE2, 12s);
+ 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);
- actionEvents.ScheduleEvent(EVENT_ACTION_PHASE2 + 9, 10000);
+ 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,13 +479,13 @@ public:
}
Talk(SAY_PHASE501);
SetEscortPaused(false);
- SetRun(true);
+ me->SetWalk(false);
}
else if (param == ACTION_KILLED_MALGANIS)
{
EnterEvadeMode();
eventInRun = true;
- actionEvents.ScheduleEvent(EVENT_ACTION_PHASE5 + 1, 22000);
+ actionEvents.ScheduleEvent(EVENT_ACTION_PHASE5 + 1, 22s);
me->SetFacingTo(1.84f);
if (!me->GetMap()->GetPlayers().IsEmpty())
@@ -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;
@@ -547,7 +546,7 @@ public:
if (Creature* stalker = me->SummonCreature(NPC_INVIS_TARGET, 2026.469f, 1287.088f, 143.596f, 1.37f, TEMPSUMMON_TIMED_DESPAWN, 14000))
{
me->SetFacingToObject(stalker);
- stalker->DespawnOrUnsummon(500);
+ stalker->DespawnOrUnsummon(500ms);
}
break;
// Reached first cityman
@@ -574,12 +573,12 @@ 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
case 22:
- actionEvents.ScheduleEvent(EVENT_ACTION_PHASE3, 0);
+ actionEvents.ScheduleEvent(EVENT_ACTION_PHASE3, 0ms);
eventInRun = true;
SetEscortPaused(true);
break;
@@ -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:
@@ -652,7 +651,7 @@ public:
// Infront of malganis
case 55:
Talk(SAY_PHASE502);
- actionEvents.ScheduleEvent(EVENT_ACTION_PHASE5, 7000);
+ actionEvents.ScheduleEvent(EVENT_ACTION_PHASE5, 7s);
SetEscortPaused(true);
eventInRun = true;
break;
@@ -674,44 +673,45 @@ 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))
{
- uther->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_UTHER], false);
+ uther->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_UTHER], FORCED_MOVEMENT_NONE, 0.f, false);
uther->SetTarget(me->GetGUID());
me->SetTarget(uther->GetGUID());
}
for (int i = 0; i < 3; ++i)
if (Creature* horse = me->SummonCreature(NPC_HORSE_ESCORT, EventPos[EVENT_SRC_HORSE1 + i], TEMPSUMMON_DEAD_DESPAWN, 180000))
- horse->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_HORSE1 + i], false);
+ horse->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_HORSE1 + i], FORCED_MOVEMENT_NONE, 0.f, false);
- ScheduleNextEvent(currentEvent, 4000);
+ ScheduleNextEvent(currentEvent, 4s);
break;
case EVENT_ACTION_PHASE1+1:
// Start Event
- Start(true, false);
+ me->SetWalk(true);
+ Start(true);
SetDespawnAtEnd(false);
SetDespawnAtFar(false);
- ScheduleNextEvent(currentEvent, 9000);
+ ScheduleNextEvent(currentEvent, 9s);
break;
// After waypoint 0
case EVENT_ACTION_PHASE1+2:
Talk(SAY_PHASE101);
- ScheduleNextEvent(currentEvent, 2000);
+ ScheduleNextEvent(currentEvent, 2s);
break;
case EVENT_ACTION_PHASE1+3:
if (Creature* uther = GetEventNpc(NPC_UTHER))
uther->AI()->Talk(SAY_PHASE102);
- ScheduleNextEvent(currentEvent, 8000);
+ ScheduleNextEvent(currentEvent, 8s);
break;
case EVENT_ACTION_PHASE1+4:
SetEscortPaused(false);
eventInRun = false;
Talk(SAY_PHASE103);
- ScheduleNextEvent(currentEvent, 2000);
+ ScheduleNextEvent(currentEvent, 2s);
break;
// After waypoint 1
case EVENT_ACTION_PHASE1+5:
@@ -719,92 +719,92 @@ public:
jaina->SetTarget(me->GetGUID());
Talk(SAY_PHASE104);
- ScheduleNextEvent(currentEvent, 10000);
+ ScheduleNextEvent(currentEvent, 10s);
break;
case EVENT_ACTION_PHASE1+6:
if (Creature* uther = GetEventNpc(NPC_UTHER))
uther->AI()->Talk(SAY_PHASE105);
- ScheduleNextEvent(currentEvent, 1000);
+ ScheduleNextEvent(currentEvent, 1s);
break;
case EVENT_ACTION_PHASE1+7:
Talk(SAY_PHASE106);
- ScheduleNextEvent(currentEvent, 4000);
+ ScheduleNextEvent(currentEvent, 4s);
break;
case EVENT_ACTION_PHASE1+8:
if (Creature* uther = GetEventNpc(NPC_UTHER))
uther->AI()->Talk(SAY_PHASE107);
- ScheduleNextEvent(currentEvent, 6000);
+ ScheduleNextEvent(currentEvent, 6s);
break;
case EVENT_ACTION_PHASE1+9:
Talk(SAY_PHASE108);
- ScheduleNextEvent(currentEvent, 4000);
+ ScheduleNextEvent(currentEvent, 4s);
break;
case EVENT_ACTION_PHASE1+10:
if (Creature* uther = GetEventNpc(NPC_UTHER))
uther->AI()->Talk(SAY_PHASE109);
- ScheduleNextEvent(currentEvent, 8000);
+ ScheduleNextEvent(currentEvent, 8s);
break;
case EVENT_ACTION_PHASE1+11:
Talk(SAY_PHASE110);
- ScheduleNextEvent(currentEvent, 4000);
+ ScheduleNextEvent(currentEvent, 4s);
break;
case EVENT_ACTION_PHASE1+12:
if (Creature* uther = GetEventNpc(NPC_UTHER))
uther->AI()->Talk(SAY_PHASE111);
- ScheduleNextEvent(currentEvent, 4000);
+ ScheduleNextEvent(currentEvent, 4s);
break;
case EVENT_ACTION_PHASE1+13:
Talk(SAY_PHASE112);
- ScheduleNextEvent(currentEvent, 11000);
+ ScheduleNextEvent(currentEvent, 11s);
break;
case EVENT_ACTION_PHASE1+14:
if (Creature* jaina = GetEventNpc(NPC_JAINA))
jaina->AI()->Talk(SAY_PHASE113);
- ScheduleNextEvent(currentEvent, 2500);
+ ScheduleNextEvent(currentEvent, 2500ms);
break;
case EVENT_ACTION_PHASE1+15:
Talk(SAY_PHASE114);
- ScheduleNextEvent(currentEvent, 9000);
+ ScheduleNextEvent(currentEvent, 9s);
break;
case EVENT_ACTION_PHASE1+16:
if (Creature* uther = GetEventNpc(NPC_UTHER))
uther->AI()->Talk(SAY_PHASE115);
- ScheduleNextEvent(currentEvent, 4000);
+ ScheduleNextEvent(currentEvent, 4s);
break;
case EVENT_ACTION_PHASE1+17:
for (SummonList::const_iterator i = summons.begin(); i != summons.end(); ++i)
{
Creature* summon = ObjectAccessor::GetCreature(*me, *i);
if (summon && summon->GetEntry() == NPC_HORSE_ESCORT)
- summon->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], false);
+ summon->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], FORCED_MOVEMENT_NONE, 0.f, false);
}
- ScheduleNextEvent(currentEvent, 1000);
+ ScheduleNextEvent(currentEvent, 1s);
break;
case EVENT_ACTION_PHASE1+18:
if (Creature* uther = GetEventNpc(NPC_UTHER))
{
uther->SetTarget();
uther->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
- uther->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], false);
+ uther->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], FORCED_MOVEMENT_NONE, 0.f, false);
}
- ScheduleNextEvent(currentEvent, 1000);
+ ScheduleNextEvent(currentEvent, 1s);
break;
case EVENT_ACTION_PHASE1+19:
if (Creature* jaina = GetEventNpc(NPC_JAINA))
{
jaina->SetTarget();
jaina->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
- jaina->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], false);
+ jaina->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], FORCED_MOVEMENT_NONE, 0.f, false);
}
Talk(SAY_PHASE116);
- ScheduleNextEvent(currentEvent, 2000);
+ ScheduleNextEvent(currentEvent, 2s);
break;
case EVENT_ACTION_PHASE1+20:
if (Creature* jaina = GetEventNpc(NPC_JAINA))
@@ -813,16 +813,16 @@ public:
jaina->AI()->Talk(SAY_PHASE117);
}
- ScheduleNextEvent(currentEvent, 2000);
+ ScheduleNextEvent(currentEvent, 2s);
break;
case EVENT_ACTION_PHASE1+21:
if (Creature* jaina = GetEventNpc(NPC_JAINA))
{
jaina->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
- jaina->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], false);
+ jaina->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], FORCED_MOVEMENT_NONE, 0.f, false);
}
summons.DespawnEntry(NPC_HORSE_ESCORT);
- ScheduleNextEvent(currentEvent, 4000);
+ ScheduleNextEvent(currentEvent, 4s);
break;
case EVENT_ACTION_PHASE1+22:
SetEscortPaused(false);
@@ -836,7 +836,7 @@ public:
me->SetTarget();
SetEscortPaused(false);
eventInRun = false;
- ScheduleNextEvent(currentEvent, 1000);
+ ScheduleNextEvent(currentEvent, 1s);
break;
// After waypoint 9
case EVENT_ACTION_PHASE2+1:
@@ -848,23 +848,23 @@ public:
cityman->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_CITYMAN]);
}
- ScheduleNextEvent(currentEvent, 9000);
+ ScheduleNextEvent(currentEvent, 9s);
break;
case EVENT_ACTION_PHASE2+2:
Talk(SAY_PHASE203);
SetEscortPaused(false);
eventInRun = false;
- ScheduleNextEvent(currentEvent, 1500);
+ ScheduleNextEvent(currentEvent, 1500ms);
break;
// After waypoint 11
case EVENT_ACTION_PHASE2+3:
if (Creature* stalker = me->SummonCreature(NPC_INVIS_TARGET, 2081.447f, 1287.770f, 141.3241f, 1.37f, TEMPSUMMON_TIMED_DESPAWN, 10000))
{
me->SetFacingToObject(stalker);
- stalker->DespawnOrUnsummon(500);
+ stalker->DespawnOrUnsummon(500ms);
}
Talk(SAY_PHASE205);
- ScheduleNextEvent(currentEvent, 4000);
+ ScheduleNextEvent(currentEvent, 4s);
break;
case EVENT_ACTION_PHASE2+4:
if (Creature* malganis = me->SummonCreature(NPC_MAL_GANIS, EventPos[EVENT_SRC_MALGANIS], TEMPSUMMON_TIMED_DESPAWN, 60000))
@@ -889,13 +889,13 @@ public:
unitList.clear();
}
- ScheduleNextEvent(currentEvent, 12000);
+ ScheduleNextEvent(currentEvent, 12s);
break;
case EVENT_ACTION_PHASE2+5:
if (Creature* malganis = GetEventNpc(NPC_MAL_GANIS))
malganis->AI()->Talk(SAY_PHASE207);
- ScheduleNextEvent(currentEvent, 15000);
+ ScheduleNextEvent(currentEvent, 15s);
break;
case EVENT_ACTION_PHASE2+6:
if (Creature* malganis = GetEventNpc(NPC_MAL_GANIS))
@@ -906,7 +906,7 @@ public:
}
Talk(SAY_PHASE208);
- ScheduleNextEvent(currentEvent, 11000);
+ ScheduleNextEvent(currentEvent, 11s);
break;
case EVENT_ACTION_PHASE2+7:
summons.DespawnEntry(NPC_MAL_GANIS);
@@ -914,7 +914,7 @@ public:
summons.DespawnEntry(NPC_CITY_MAN2);
Talk(SAY_PHASE209);
me->SetReactState(REACT_DEFENSIVE);
- ScheduleNextEvent(currentEvent, 20000);
+ ScheduleNextEvent(currentEvent, 20s);
if (pInstance)
pInstance->SetData(DATA_ARTHAS_EVENT, COS_PROGRESS_FINISHED_CITY_INTRO);
break;
@@ -941,36 +941,36 @@ public:
cr->SetTarget(me->GetGUID());
if (Creature* cr = GetEventNpc(NPC_CITY_MAN))
cr->SetTarget(me->GetGUID());
- ScheduleNextEvent(currentEvent, 1000);
+ ScheduleNextEvent(currentEvent, 1s);
break;
case EVENT_ACTION_PHASE3+1:
me->SetReactState(REACT_AGGRESSIVE);
if (Creature* cr = GetEventNpc(NPC_CITY_MAN3))
cr->AI()->Talk(SAY_PHASE302);
- ScheduleNextEvent(currentEvent, 7000);
+ ScheduleNextEvent(currentEvent, 7s);
break;
case EVENT_ACTION_PHASE3+2:
Talk(SAY_PHASE303);
SetEscortPaused(false);
eventInRun = false;
- ScheduleNextEvent(currentEvent, 0);
+ ScheduleNextEvent(currentEvent, 0ms);
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, 2000);
+ ScheduleNextEvent(currentEvent, 2s);
break;
case EVENT_ACTION_PHASE3+4:
Talk(SAY_PHASE304);
- ScheduleNextEvent(currentEvent, 2000);
+ ScheduleNextEvent(currentEvent, 2s);
break;
case EVENT_ACTION_PHASE3+5:
if (Creature* cr = GetEventNpc(NPC_CITY_MAN3))
cr->AI()->Talk(SAY_PHASE305);
- ScheduleNextEvent(currentEvent, 1000);
+ ScheduleNextEvent(currentEvent, 1s);
break;
// Trio citizen transformation right as we enter Town Hall
case EVENT_ACTION_PHASE3+6:
@@ -981,7 +981,7 @@ public:
cr->SetImmuneToAll(true);
cr->SetReactState(REACT_PASSIVE);
}
- ScheduleNextEvent(currentEvent, 2000);
+ ScheduleNextEvent(currentEvent, 2s);
break;
case EVENT_ACTION_PHASE3+7:
if (Creature* cr = GetEventNpc(NPC_CITY_MAN4))
@@ -991,7 +991,7 @@ public:
cr->SetImmuneToAll(true);
cr->SetReactState(REACT_PASSIVE);
}
- ScheduleNextEvent(currentEvent, 2000);
+ ScheduleNextEvent(currentEvent, 2s);
break;
case EVENT_ACTION_PHASE3+8:
if (Creature* cr = GetEventNpc(NPC_CITY_MAN3))
@@ -1016,35 +1016,35 @@ public:
cr->SetInCombatWithZone();
cr->AddThreat(me, 0.0f);
}
- ScheduleNextEvent(currentEvent, 2000);
+ ScheduleNextEvent(currentEvent, 2s);
break;
case EVENT_ACTION_PHASE3+9:
// Arthas is fighting infinites in town hall
if (me->IsInCombat())
{
- actionEvents.RepeatEvent(1000);
+ actionEvents.Repeat(1s);
return;
}
summons.DespawnAll();
Talk(SAY_PHASE305_1);
me->SetFacingTo(0.0f);
- ScheduleNextEvent(currentEvent, 5000);
+ ScheduleNextEvent(currentEvent, 5s);
break;
case EVENT_ACTION_PHASE3+10:
Talk(SAY_PHASE306);
- ScheduleNextEvent(currentEvent, 5000);
+ ScheduleNextEvent(currentEvent, 5s);
break;
case EVENT_ACTION_PHASE3+11:
SetEscortPaused(false);
eventInRun = false;
- ScheduleNextEvent(currentEvent, 1000);
+ ScheduleNextEvent(currentEvent, 1s);
break;
case EVENT_ACTION_PHASE3+12:
// Arthas is fighting first chronos
if (me->IsInCombat())
{
- actionEvents.RepeatEvent(1000);
+ actionEvents.Repeat(1s);
return;
}
@@ -1052,13 +1052,13 @@ public:
SetEscortPaused(false);
Talk(SAY_PHASE308);
me->SetFacingTo(M_PI);
- ScheduleNextEvent(currentEvent, 0);
+ ScheduleNextEvent(currentEvent, 0ms);
break;
case EVENT_ACTION_PHASE3+13:
// Arthas is fighting second chronos
if (me->IsInCombat())
{
- actionEvents.RepeatEvent(1000);
+ actionEvents.Repeat(1s);
return;
}
@@ -1066,18 +1066,18 @@ public:
SetEscortPaused(false);
Talk(SAY_PHASE311);
me->SetFacingTo(M_PI * 3 / 2);
- ScheduleNextEvent(currentEvent, 0);
+ ScheduleNextEvent(currentEvent, 0ms);
break;
case EVENT_ACTION_PHASE3+14:
// Arthas is fighting third chronos
if (me->IsInCombat())
{
- actionEvents.RepeatEvent(1000);
+ actionEvents.Repeat(1s);
return;
}
me->SetFacingTo(M_PI / 2);
- ScheduleNextEvent(currentEvent, 8000);
+ ScheduleNextEvent(currentEvent, 8s);
break;
case EVENT_ACTION_PHASE3+15:
Talk(SAY_PHASE313);
@@ -1090,17 +1090,17 @@ public:
cr->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_EPOCH]);
}
- ScheduleNextEvent(currentEvent, 3000);
+ ScheduleNextEvent(currentEvent, 3s);
break;
case EVENT_ACTION_PHASE3+16:
if (Creature* cr = GetEventNpc(NPC_EPOCH))
cr->AI()->Talk(SAY_PHASE314);
- ScheduleNextEvent(currentEvent, 14000);
+ ScheduleNextEvent(currentEvent, 14s);
break;
case EVENT_ACTION_PHASE3+17:
Talk(SAY_PHASE315);
- ScheduleNextEvent(currentEvent, 7000);
+ ScheduleNextEvent(currentEvent, 7s);
break;
case EVENT_ACTION_PHASE3+18:
if (Creature* cr = GetEventNpc(NPC_EPOCH))
@@ -1111,13 +1111,13 @@ public:
cr->AddThreat(me, 0.0f);
cr->SetInCombatWithZone();
}
- ScheduleNextEvent(currentEvent, 1000);
+ ScheduleNextEvent(currentEvent, 1s);
break;
case EVENT_ACTION_PHASE3+19:
// Arthas is fighting epoch chronos
if (me->IsInCombat())
{
- actionEvents.RepeatEvent(1000);
+ actionEvents.Repeat(1s);
return;
}
@@ -1143,7 +1143,7 @@ public:
Talk(SAY_PHASE503);
SetEscortPaused(false);
eventInRun = false;
- ScheduleNextEvent(currentEvent, 5000);
+ ScheduleNextEvent(currentEvent, 5s);
break;
case EVENT_ACTION_PHASE5+2:
me->SetFacingTo(5.28f);
@@ -1154,18 +1154,9 @@ public:
if (GameObject* go = pInstance->instance->GetGameObject(pInstance->GetGuidData(DATA_EXIT_GATE)))
go->SetGoState(GO_STATE_ACTIVE);
- if (!me->GetMap()->GetPlayers().IsEmpty())
- {
- if (Player* player = me->GetMap()->GetPlayers().getFirst()->GetSource())
- {
- if (GameObject* chest = player->SummonGameObject(DUNGEON_MODE(GO_MALGANIS_CHEST_N, GO_MALGANIS_CHEST_H), 2288.35f, 1498.73f, 128.414f, -0.994837f, 0, 0, 0, 0, 0))
- {
- chest->SetLootRecipient(me->GetMap());
- }
- }
- }
+ pInstance->instance->SummonGameObject(DUNGEON_MODE(GO_MALGANIS_CHEST_N, GO_MALGANIS_CHEST_H), 2288.35f, 1498.73f, 128.414f, -0.994837f, 0, 0, 0, 0, 7 * DAY * IN_MILLISECONDS);
}
- ScheduleNextEvent(currentEvent, 10000);
+ ScheduleNextEvent(currentEvent, 10s);
break;
case EVENT_ACTION_PHASE5+3:
eventInRun = false;
@@ -1186,15 +1177,15 @@ 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.RepeatEvent(7300);
+ combatEvents.Repeat(7300ms);
break;
case EVENT_COMBAT_HEALTH_CHECK:
if (HealthBelowPct(40))
me->CastSpell(me, SPELL_ARTHAS_HOLY_LIGHT, false);
- combatEvents.RepeatEvent(1000);
+ combatEvents.Repeat(1s);
break;
}
@@ -1219,7 +1210,7 @@ Creature* npc_arthas::npc_arthasAI::GetEventNpc(uint32 entry)
return nullptr;
}
-void npc_arthas::npc_arthasAI::ScheduleNextEvent(uint32 currentEvent, uint32 time)
+void npc_arthas::npc_arthasAI::ScheduleNextEvent(uint32 currentEvent, Milliseconds time)
{
actionEvents.ScheduleEvent(currentEvent + 1, time);
}
@@ -1245,13 +1236,14 @@ void npc_arthas::npc_arthasAI::JustEngagedWith(Unit* /*who*/)
DoCast(me, SPELL_ARTHAS_AURA);
// Fight
- combatEvents.ScheduleEvent(EVENT_COMBAT_EXORCISM, 2000);
- combatEvents.ScheduleEvent(EVENT_COMBAT_HEALTH_CHECK, 2000);
+ combatEvents.ScheduleEvent(EVENT_COMBAT_EXORCISM, 2s);
+ combatEvents.ScheduleEvent(EVENT_COMBAT_HEALTH_CHECK, 2s);
}
void npc_arthas::npc_arthasAI::ReorderInstance(uint32 data)
{
- Start(true, true);
+ me->SetWalk(false);
+ Start(true);
SetEscortPaused(true);
SetDespawnAtEnd(false);
@@ -1270,7 +1262,7 @@ void npc_arthas::npc_arthasAI::ReorderInstance(uint32 data)
if (data == COS_PROGRESS_FINISHED_CITY_INTRO)
{
eventInRun = true;
- actionEvents.RescheduleEvent(EVENT_ACTION_PHASE2 + 8, 10000);
+ actionEvents.RescheduleEvent(EVENT_ACTION_PHASE2 + 8, 10s);
}
else if (data == COS_PROGRESS_KILLED_MEATHOOK)
{
@@ -1352,7 +1344,7 @@ void npc_arthas::npc_arthasAI::SpawnTimeRift()
if (Creature* cr = me->SummonCreature(/*entry*/(uint32)RiftAndSpawnsLocations[timeRiftId][i][0], RiftAndSpawnsLocations[timeRiftId][0][1], RiftAndSpawnsLocations[timeRiftId][0][2], RiftAndSpawnsLocations[timeRiftId][0][3], RiftAndSpawnsLocations[timeRiftId][0][4]))
{
if (cr->GetEntry() == NPC_TIME_RIFT)
- cr->DespawnOrUnsummon(10000);
+ cr->DespawnOrUnsummon(10s);
else // x, y, z (0 is entry)
{
// first infinite
@@ -1547,7 +1539,7 @@ public:
if (me->GetDistance(2400, 1200, 135) > 20.0f && data >= COS_PROGRESS_FINISHED_CITY_INTRO)
{
if (data >= COS_PROGRESS_KILLED_SALRAMM)
- me->DespawnOrUnsummon(500);
+ me->DespawnOrUnsummon(500ms);
else
InfectMe(3000);
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp
index 961ec2c7b9..dbb18cf283 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp
@@ -307,7 +307,7 @@ public:
if (Creature* cr = instance->SummonCreature(NPC_CHROMIE_MIDDLE, pos))
{
cr->SetVisible(false);
- cr->DespawnOrUnsummon(1000);
+ cr->DespawnOrUnsummon(1s);
sCreatureTextMgr->SendChat(cr, textId, player, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP);
}
}
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/instance_old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp
index 6cb2b46da7..0afbb1e500 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp
@@ -79,11 +79,11 @@ public:
if (_encounterProgress == ENCOUNTER_PROGRESS_NONE)
return;
- _events.ScheduleEvent(EVENT_INITIAL_BARRELS_FLAME, 0);
- _events.ScheduleEvent(EVENT_FINAL_BARRELS_FLAME, 0);
+ _events.ScheduleEvent(EVENT_INITIAL_BARRELS_FLAME, 0ms);
+ _events.ScheduleEvent(EVENT_FINAL_BARRELS_FLAME, 0ms);
if (_encounterProgress == ENCOUNTER_PROGRESS_BARRELS)
- _events.ScheduleEvent(EVENT_SUMMON_LIEUTENANT, 0);
+ _events.ScheduleEvent(EVENT_SUMMON_LIEUTENANT, 0ms);
else
SetData(DATA_THRALL_REPOSITION, 2);
}
@@ -138,7 +138,7 @@ public:
{
case DATA_THRALL_REPOSITION:
if (data > 1)
- _events.ScheduleEvent(EVENT_THRALL_REPOSITION, data == 2 ? 0 : 10000);
+ _events.ScheduleEvent(EVENT_THRALL_REPOSITION, data == 2 ? 0ms : 10s);
else if (Creature* thrall = instance->GetCreature(_thrallGUID))
Reposition(thrall);
return;
@@ -157,9 +157,9 @@ public:
DoUpdateWorldState(WORLD_STATE_OLD_HILLSBRAD_BARRELS_PLANTED, ++_barrelCount);
if (_barrelCount == 5)
{
- _events.ScheduleEvent(EVENT_INITIAL_BARRELS_FLAME, 4000);
- _events.ScheduleEvent(EVENT_FINAL_BARRELS_FLAME, 12000);
- _events.ScheduleEvent(EVENT_SUMMON_LIEUTENANT, 18000);
+ _events.ScheduleEvent(EVENT_INITIAL_BARRELS_FLAME, 4s);
+ _events.ScheduleEvent(EVENT_FINAL_BARRELS_FLAME, 12s);
+ _events.ScheduleEvent(EVENT_SUMMON_LIEUTENANT, 18s);
}
break;
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
index 8745dc128c..1f15ef140b 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
@@ -258,8 +258,8 @@ public:
switch (param)
{
case ENCOUNTER_PROGRESS_BARRELS:
- events.ScheduleEvent(EVENT_OPEN_DOORS, 0);
- events.ScheduleEvent(EVENT_START_WP, 3000);
+ events.ScheduleEvent(EVENT_OPEN_DOORS, 0ms);
+ events.ScheduleEvent(EVENT_START_WP, 3s);
break;
case ENCOUNTER_PROGRESS_THRALL_ARMORED:
case ENCOUNTER_PROGRESS_AMBUSHES_1:
@@ -268,27 +268,27 @@ public:
SetEscortPaused(false);
break;
case ENCOUNTER_PROGRESS_TARETHA_MEET:
- events.ScheduleEvent(EVENT_SUMMON_CHRONO, 0);
- events.ScheduleEvent(EVENT_THRALL_TALK_2, 6000);
- events.ScheduleEvent(EVENT_TARETHA_FALL, 11000);
- events.ScheduleEvent(EVENT_THRALL_TALK_3, 15000);
- events.ScheduleEvent(EVENT_THRALL_MOVE_DOWN, 17000);
+ events.ScheduleEvent(EVENT_SUMMON_CHRONO, 0ms);
+ events.ScheduleEvent(EVENT_THRALL_TALK_2, 6s);
+ events.ScheduleEvent(EVENT_TARETHA_FALL, 11s);
+ events.ScheduleEvent(EVENT_THRALL_TALK_3, 15s);
+ events.ScheduleEvent(EVENT_THRALL_MOVE_DOWN, 17s);
break;
case NPC_TARETHA:
- events.ScheduleEvent(EVENT_THRALL_FACE_TARETHA, 0);
- events.ScheduleEvent(EVENT_THRALL_TALK_4, 4000);
- events.ScheduleEvent(EVENT_TARETHA_TALK_1, 13000);
- events.ScheduleEvent(EVENT_THRALL_TALK_5, 17000);
- events.ScheduleEvent(EVENT_SUMMON_EROZION, 17500);
- events.ScheduleEvent(EVENT_EROZION_TALK_1, 18000);
- events.ScheduleEvent(EVENT_EROZION_ACTION_1, 24000);
- events.ScheduleEvent(EVENT_EROZION_TALK_2, 29000);
- events.ScheduleEvent(EVENT_EROZION_TALK_3, 40000);
- events.ScheduleEvent(EVENT_EROZION_ACTION_2, 46000);
- events.ScheduleEvent(EVENT_THRALL_TALK_6, 48000);
- events.ScheduleEvent(EVENT_THRALL_RUN_AWAY, 51000);
- events.ScheduleEvent(EVENT_TARETHA_TALK_2, 53000);
- events.ScheduleEvent(EVENT_EROZION_FLAGS, 56000);
+ events.ScheduleEvent(EVENT_THRALL_FACE_TARETHA, 0ms);
+ events.ScheduleEvent(EVENT_THRALL_TALK_4, 4s);
+ events.ScheduleEvent(EVENT_TARETHA_TALK_1, 13s);
+ events.ScheduleEvent(EVENT_THRALL_TALK_5, 17s);
+ events.ScheduleEvent(EVENT_SUMMON_EROZION, 17500ms);
+ events.ScheduleEvent(EVENT_EROZION_TALK_1, 18s);
+ events.ScheduleEvent(EVENT_EROZION_ACTION_1, 24s);
+ events.ScheduleEvent(EVENT_EROZION_TALK_2, 29s);
+ events.ScheduleEvent(EVENT_EROZION_TALK_3, 40s);
+ events.ScheduleEvent(EVENT_EROZION_ACTION_2, 46s);
+ events.ScheduleEvent(EVENT_THRALL_TALK_6, 48s);
+ events.ScheduleEvent(EVENT_THRALL_RUN_AWAY, 51s);
+ events.ScheduleEvent(EVENT_TARETHA_TALK_2, 53s);
+ events.ScheduleEvent(EVENT_EROZION_FLAGS, 56s);
break;
}
}
@@ -311,23 +311,23 @@ public:
Talk(SAY_START_EVENT_PART1);
break;
case 8:
- events.ScheduleEvent(EVENT_SET_FACING, 500);
- events.ScheduleEvent(EVENT_ARMORER_SAY, 700);
- events.ScheduleEvent(EVENT_THRALL_EMOTE, 1300);
+ events.ScheduleEvent(EVENT_SET_FACING, 500ms);
+ events.ScheduleEvent(EVENT_ARMORER_SAY, 700ms);
+ events.ScheduleEvent(EVENT_THRALL_EMOTE, 1300ms);
break;
case 9:
- SetRun(false);
- events.ScheduleEvent(EVENT_KILL_ARMORER, 500);
- events.ScheduleEvent(EVENT_TALK_KILL_ARMORER, 3000);
+ me->SetWalk(true);
+ events.ScheduleEvent(EVENT_KILL_ARMORER, 500ms);
+ events.ScheduleEvent(EVENT_TALK_KILL_ARMORER, 3s);
break;
case 10:
- SetRun(true);
- events.ScheduleEvent(EVENT_DRESSING_KNEEL, 500);
- events.ScheduleEvent(EVENT_DRESSING_ARMOR, 3000);
- events.ScheduleEvent(EVENT_DRESSING_STAND, 4000);
- events.ScheduleEvent(EVENT_DRESSING_AXE, 7000);
- events.ScheduleEvent(EVENT_DRESSING_SHIELD, 9000);
- events.ScheduleEvent(EVENT_DRESSING_TALK, 12000);
+ me->SetWalk(false);
+ events.ScheduleEvent(EVENT_DRESSING_KNEEL, 500ms);
+ events.ScheduleEvent(EVENT_DRESSING_ARMOR, 3s);
+ events.ScheduleEvent(EVENT_DRESSING_STAND, 4s);
+ events.ScheduleEvent(EVENT_DRESSING_AXE, 7s);
+ events.ScheduleEvent(EVENT_DRESSING_SHIELD, 9s);
+ events.ScheduleEvent(EVENT_DRESSING_TALK, 12s);
break;
case 18:
if (Creature* warden = me->SummonCreature(NPC_DURNHOLDE_WARDEN, 2149.4634f, 104.97559f, 73.632385f, 1.9065f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS))
@@ -362,8 +362,8 @@ public:
Talk(SAY_SKARLOC_MEET);
break;
case 30:
- events.ScheduleEvent(EVENT_ENTER_MOUNT, 3000);
- events.ScheduleEvent(EVENT_TALK_START_RIDE, 7000);
+ events.ScheduleEvent(EVENT_ENTER_MOUNT, 3s);
+ events.ScheduleEvent(EVENT_TALK_START_RIDE, 7s);
break;
case 59:
instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_TARREN_MILL);
@@ -374,7 +374,7 @@ public:
}
UnMountSelf();
_mounted = false;
- SetRun(false);
+ me->SetWalk(true);
me->SetFacingTo(6.0388f);
break;
case 60:
@@ -382,32 +382,32 @@ public:
if (Creature* horse = me->FindNearestCreature(NPC_SKARLOC_MOUNT, 10.0f))
{
horse->GetMotionMaster()->MovePoint(0, 2501.15f, 572.14f, 54.13f);
- horse->DespawnOrUnsummon(30 * IN_MILLISECONDS);
+ horse->DespawnOrUnsummon(30s);
}
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, 1200);
- events.ScheduleEvent(EVENT_MOVE_AROUND, 3500);
- events.ScheduleEvent(EVENT_LOOK_2, 5000);
- events.ScheduleEvent(EVENT_SUMMON_GUARDS, 5100);
- events.ScheduleEvent(EVENT_LOOK_3, 7000);
- events.ScheduleEvent(EVENT_SUMMON_TALK1, 12000);
- events.ScheduleEvent(EVENT_LOOK_4, 17000);
- events.ScheduleEvent(EVENT_SUMMON_TALK2, 19000);
- events.ScheduleEvent(EVENT_GUARDS_MOVING, 21000);
+ events.ScheduleEvent(EVENT_LOOK_1, 1200ms);
+ events.ScheduleEvent(EVENT_MOVE_AROUND, 3500ms);
+ events.ScheduleEvent(EVENT_LOOK_2, 5s);
+ events.ScheduleEvent(EVENT_SUMMON_GUARDS, 5100ms);
+ events.ScheduleEvent(EVENT_LOOK_3, 7s);
+ events.ScheduleEvent(EVENT_SUMMON_TALK1, 12s);
+ events.ScheduleEvent(EVENT_LOOK_4, 17s);
+ events.ScheduleEvent(EVENT_SUMMON_TALK2, 19s);
+ events.ScheduleEvent(EVENT_GUARDS_MOVING, 21s);
break;
case 82:
- events.ScheduleEvent(EVENT_LOOK_5, 500);
- events.ScheduleEvent(EVENT_SUMMON_GUARDS_2, 1000);
- events.ScheduleEvent(EVENT_SUMMON_TALK3, 1500);
+ events.ScheduleEvent(EVENT_LOOK_5, 500ms);
+ events.ScheduleEvent(EVENT_SUMMON_GUARDS_2, 1s);
+ events.ScheduleEvent(EVENT_SUMMON_TALK3, 1500ms);
break;
case 91:
me->SummonCreature(NPC_TM_PROTECTOR, 2652.71f, 660.31f, 61.93f, 1.67f, TEMPSUMMON_MANUAL_DESPAWN);
@@ -418,26 +418,26 @@ 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)))
{
Taretha->HandleEmoteCommand(EMOTE_ONESHOT_CHEER);
Taretha->AI()->Talk(SAY_TARETHA_ESCAPED);
}
- events.ScheduleEvent(EVENT_THRALL_TALK, 4000);
+ events.ScheduleEvent(EVENT_THRALL_TALK, 4s);
break;
case 101:
SetEscortPaused(true);
- events.ScheduleEvent(EVENT_EPOCH_INTRO, 500);
- events.ScheduleEvent(EVENT_SUMMON_INFINITES, 1500);
- events.ScheduleEvent(EVENT_TRANSFORM, 8000);
- events.ScheduleEvent(EVENT_START_WAVE_1, 25000);
+ events.ScheduleEvent(EVENT_EPOCH_INTRO, 500ms);
+ events.ScheduleEvent(EVENT_SUMMON_INFINITES, 1500ms);
+ events.ScheduleEvent(EVENT_TRANSFORM, 8s);
+ events.ScheduleEvent(EVENT_START_WAVE_1, 25s);
break;
case 103:
instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_FINISHED);
@@ -473,9 +473,9 @@ public:
void JustEngagedWith(Unit*) override
{
combatEvents.Reset();
- combatEvents.ScheduleEvent(EVENT_CHECK_HEALTH, 500);
- combatEvents.ScheduleEvent(EVENT_SPELL_SHIELD_BLOCK, 8000);
- combatEvents.ScheduleEvent(EVENT_SPELL_STRIKE, 2000);
+ combatEvents.ScheduleEvent(EVENT_CHECK_HEALTH, 500ms);
+ combatEvents.ScheduleEvent(EVENT_SPELL_SHIELD_BLOCK, 8s);
+ combatEvents.ScheduleEvent(EVENT_SPELL_STRIKE, 2s);
if (roll_chance_i(50))
Talk(SAY_RANDOM_AGGRO);
@@ -566,7 +566,8 @@ public:
me->SummonCreature(NPC_DURNHOLDE_MAGE, 2108.4856f, 189.93457f, 66.30494f, 2.6878f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS);
break;
case EVENT_START_WP:
- Start(true, true);
+ me->SetWalk(false);
+ Start(true);
SetDespawnAtEnd(false);
break;
case EVENT_SET_FACING:
@@ -663,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))
@@ -766,7 +767,7 @@ public:
summons.DoAction(ACTION_SET_IMMUNE_FLAG);
break;
case EVENT_START_WAVE_1:
- events.ScheduleEvent(EVENT_CHECK_WAVE_1, 500);
+ events.ScheduleEvent(EVENT_CHECK_WAVE_1, 500ms);
summons.DoAction(ACTION_REMOVE_IMMUNE_FLAG);
summons.DoAction(ACTION_START_COMBAT);
break;
@@ -777,10 +778,10 @@ public:
me->SummonCreature(NPC_INFINITE_SLAYER, 2599.57f, 677.0f, 55.975f, 0.05f, TEMPSUMMON_MANUAL_DESPAWN);
me->SummonCreature(NPC_INFINITE_DEFILER, 2592.57f, 680.0f, 55.975f, 0.05f, TEMPSUMMON_MANUAL_DESPAWN);
summons.DoAction(ACTION_START_COMBAT);
- events.ScheduleEvent(EVENT_CHECK_WAVE_2, 500);
+ events.ScheduleEvent(EVENT_CHECK_WAVE_2, 500ms);
break;
}
- events.ScheduleEvent(EVENT_CHECK_WAVE_1, 500);
+ events.ScheduleEvent(EVENT_CHECK_WAVE_1, 500ms);
break;
case EVENT_CHECK_WAVE_2:
if (summons.size() == 1)
@@ -790,26 +791,26 @@ public:
me->SummonCreature(NPC_INFINITE_SABOTEUR, 2638.62f, 705.43f, 55.965f, 4.46f, TEMPSUMMON_MANUAL_DESPAWN);
me->SummonCreature(NPC_INFINITE_DEFILER, 2642.62f, 705.43f, 55.965f, 4.46f, TEMPSUMMON_MANUAL_DESPAWN);
summons.DoAction(ACTION_START_COMBAT);
- events.ScheduleEvent(EVENT_CHECK_WAVE_3, 500);
+ events.ScheduleEvent(EVENT_CHECK_WAVE_3, 500ms);
break;
}
- events.ScheduleEvent(EVENT_CHECK_WAVE_2, 500);
+ events.ScheduleEvent(EVENT_CHECK_WAVE_2, 500ms);
break;
case EVENT_CHECK_WAVE_3:
if (summons.size() == 1)
{
me->SetHomePosition(2634.79f, 672.964f, 54.8577f, 1.33f);
me->GetMotionMaster()->MoveTargetedHome();
- events.ScheduleEvent(EVENT_CALL_EPOCH, 8000);
+ events.ScheduleEvent(EVENT_CALL_EPOCH, 8s);
break;
}
- events.ScheduleEvent(EVENT_CHECK_WAVE_3, 500);
+ events.ScheduleEvent(EVENT_CHECK_WAVE_3, 500ms);
break;
case EVENT_CALL_EPOCH:
if (Creature* epoch = summons.GetCreatureWithEntry(NPC_EPOCH_HUNTER))
{
epoch->SetImmuneToAll(false);
- epoch->GetMotionMaster()->MovePoint(0, *me, false, true);
+ epoch->GetMotionMaster()->MovePoint(0, *me, FORCED_MOVEMENT_NONE, 0.f, false, true);
}
break;
case EVENT_THRALL_FACE_TARETHA:
@@ -905,15 +906,15 @@ public:
Talk(SAY_RANDOM_LOW_HP);
break;
}
- events.ScheduleEvent(EVENT_CHECK_HEALTH, 500);
+ events.ScheduleEvent(EVENT_CHECK_HEALTH, 500ms);
break;
case EVENT_SPELL_STRIKE:
me->CastSpell(me->GetVictim(), SPELL_STRIKE, false);
- events.ScheduleEvent(EVENT_SPELL_STRIKE, 6000);
+ events.ScheduleEvent(EVENT_SPELL_STRIKE, 6s);
break;
case EVENT_SPELL_SHIELD_BLOCK:
me->CastSpell(me, SPELL_SHIELD_BLOCK, false);
- events.ScheduleEvent(EVENT_SPELL_SHIELD_BLOCK, 6000);
+ events.ScheduleEvent(EVENT_SPELL_SHIELD_BLOCK, 6s);
break;
}
@@ -922,7 +923,8 @@ public:
void ReorderInstance(uint32 data)
{
- Start(true, true);
+ me->SetWalk(false);
+ Start(true);
SetEscortPaused(true);
SetDespawnAtEnd(false);
@@ -1008,14 +1010,15 @@ public:
{
me->SetStandState(UNIT_STAND_STATE_STAND);
me->RemoveAllAuras();
- Start(false, true);
+ me->SetWalk(false);
+ Start(false);
}
void WaypointReached(uint32 waypointId) override
{
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/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp
index 21f51ca788..bde93d5144 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp
@@ -143,7 +143,7 @@ public:
case NPC_INFINITE_EXECUTIONER_2:
case NPC_INFINITE_VANQUISHER:
case NPC_INFINITE_VANQUISHER_2:
- creature->DespawnOrUnsummon(1);
+ creature->DespawnOrUnsummon(1ms);
break;
default:
break;
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp
index f80ed1b288..a513a41b74 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp
@@ -109,7 +109,7 @@ struct npc_medivh_bm : public ScriptedAI
{
if (summon->GetEntry() == NPC_DP_CRYSTAL_STALKER)
{
- summon->DespawnOrUnsummon(25000);
+ summon->DespawnOrUnsummon(25s);
summon->CastSpell(summon, RAND(SPELL_BANISH_PURPLE, SPELL_BANISH_GREEN), true);
summon->GetMotionMaster()->MoveSplinePath(&_airArray);
}
@@ -118,7 +118,7 @@ struct npc_medivh_bm : public ScriptedAI
summon->CastSpell(summon, SPELL_BLACK_CRYSTAL, true);
Movement::MoveSplineInit init(summon);
init.MovebyPath(_groundArray);
- init.SetCyclic();
+ init.SetCyclic(); // TODO: Add support for cyclic paths in motion master
init.Launch();
}
}
@@ -137,13 +137,13 @@ struct npc_medivh_bm : public ScriptedAI
me->CastSpell(me, SPELL_MEDIVH_CHANNEL, false);
- events.ScheduleEvent(EVENT_CHECK_HEALTH_75, 500);
- events.ScheduleEvent(EVENT_CHECK_HEALTH_50, 500);
- events.ScheduleEvent(EVENT_CHECK_HEALTH_25, 500);
- events.ScheduleEvent(EVENT_SUMMON_CRYSTAL, 2000);
- events.ScheduleEvent(EVENT_SUMMON_CRYSTAL, 4000);
- events.ScheduleEvent(EVENT_SUMMON_CRYSTAL, 6000);
- events.ScheduleEvent(EVENT_SUMMON_FLYING_CRYSTAL, 8000);
+ events.ScheduleEvent(EVENT_CHECK_HEALTH_75, 500ms);
+ events.ScheduleEvent(EVENT_CHECK_HEALTH_50, 500ms);
+ events.ScheduleEvent(EVENT_CHECK_HEALTH_25, 500ms);
+ events.ScheduleEvent(EVENT_SUMMON_CRYSTAL, 2s);
+ events.ScheduleEvent(EVENT_SUMMON_CRYSTAL, 4s);
+ events.ScheduleEvent(EVENT_SUMMON_CRYSTAL, 6s);
+ events.ScheduleEvent(EVENT_SUMMON_FLYING_CRYSTAL, 8s);
}
}
@@ -154,7 +154,7 @@ struct npc_medivh_bm : public ScriptedAI
if (param == ACTION_OUTRO)
{
events.Reset();
- events.ScheduleEvent(EVENT_OUTRO_1, 4000);
+ events.ScheduleEvent(EVENT_OUTRO_1, 4s);
me->InterruptNonMeleeSpells(true);
me->SummonGameObject(GO_DARK_PORTAL, -2086.0f, 7125.6215f, 30.5f, 6.148f, 0.0f, 0.0f, 0.0f, 0.0f, 0);
@@ -180,43 +180,43 @@ struct npc_medivh_bm : public ScriptedAI
Talk(eventId + 1);
break;
}
- events.ScheduleEvent(eventId, 500);
+ events.ScheduleEvent(eventId, 500ms);
break;
case EVENT_SUMMON_CRYSTAL:
me->SummonCreature(NPC_DP_EMITTER_STALKER, me->GetPositionX() + 8.0f, me->GetPositionY(), me->GetPositionZ());
break;
case EVENT_SUMMON_FLYING_CRYSTAL:
me->CastSpell(me, SPELL_PORTAL_CRYSTALS, true);
- events.ScheduleEvent(EVENT_SUMMON_FLYING_CRYSTAL, 1000);
+ events.ScheduleEvent(EVENT_SUMMON_FLYING_CRYSTAL, 1s);
break;
case EVENT_OUTRO_1:
me->SetFacingTo(6.21f);
Talk(SAY_MEDIVH_WIN);
- events.ScheduleEvent(EVENT_OUTRO_2, 17000);
+ events.ScheduleEvent(EVENT_OUTRO_2, 17s);
break;
case EVENT_OUTRO_2:
me->SetFacingTo(3.07f);
- events.ScheduleEvent(EVENT_OUTRO_3, 2000);
+ events.ScheduleEvent(EVENT_OUTRO_3, 2s);
break;
case EVENT_OUTRO_3:
- SummonOrcs(-2046.158f, -3.0f, 37000, 30000, true);
- events.ScheduleEvent(EVENT_OUTRO_4, 2000);
+ SummonOrcs(-2046.158f, -3.0f, 37s, 30s, true);
+ events.ScheduleEvent(EVENT_OUTRO_4, 2s);
break;
case EVENT_OUTRO_4:
- SummonOrcs(-2055.97f, -2.0f, 33000, 28000, false);
- events.ScheduleEvent(EVENT_OUTRO_5, 2000);
+ SummonOrcs(-2055.97f, -2.0f, 33s, 28s, false);
+ events.ScheduleEvent(EVENT_OUTRO_5, 2s);
break;
case EVENT_OUTRO_5:
- SummonOrcs(-2064.0f, -1.5f, 29000, 26000, false);
- events.ScheduleEvent(EVENT_OUTRO_6, 2000);
+ SummonOrcs(-2064.0f, -1.5f, 29s, 26s, false);
+ events.ScheduleEvent(EVENT_OUTRO_6, 2s);
break;
case EVENT_OUTRO_6:
- SummonOrcs(-2074.35f, -0.1f, 26000, 24000, false);
- events.ScheduleEvent(EVENT_OUTRO_7, 7000);
+ SummonOrcs(-2074.35f, -0.1f, 26s, 24s, false);
+ events.ScheduleEvent(EVENT_OUTRO_7, 7s);
break;
case EVENT_OUTRO_7:
Talk(SAY_MEDIVH_ORCS_ENTER);
- events.ScheduleEvent(EVENT_OUTRO_8, 7000);
+ events.ScheduleEvent(EVENT_OUTRO_8, 7s);
break;
case EVENT_OUTRO_8:
if (Creature* cr = me->FindNearestCreature(NPC_SHADOW_COUNCIL_ENFORCER, 20.0f))
@@ -228,15 +228,15 @@ struct npc_medivh_bm : public ScriptedAI
}
}
- void SummonOrcs(float x, float y, uint32 duration, uint32 homeTime, bool first)
+ void SummonOrcs(float x, float y, Milliseconds duration, Milliseconds homeTime, bool first)
{
for (uint8 i = 0; i < 6; ++i)
{
if (Creature* cr = me->SummonCreature(NPC_SHADOW_COUNCIL_ENFORCER, -2091.731f, 7133.083f - 3.0f * i, 34.589f, 0.0f))
{
cr->GetMotionMaster()->MovePoint(0, (first && i == 3) ? x + 2.0f : x, cr->GetPositionY() + y, cr->GetMapHeight(x, cr->GetPositionY() + y, cr->GetPositionZ(), true));
- cr->m_Events.AddEvent(new NpcRunToHome(*cr), cr->m_Events.CalculateTime(homeTime + urand(0, 2000)));
- cr->DespawnOrUnsummon(duration + urand(0, 2000));
+ cr->m_Events.AddEventAtOffset(new NpcRunToHome(*cr), homeTime + randtime(0ms, 2s));
+ cr->DespawnOrUnsummon(duration + randtime(0ms, 2s));
}
}
}
@@ -355,7 +355,7 @@ struct npc_time_rift : public NullCreatureAI
{
if (creature->GetGUID() == _riftKeeperGUID)
{
- me->DespawnOrUnsummon(0);
+ me->DespawnOrUnsummon(0ms);
}
}
@@ -368,7 +368,7 @@ struct npc_time_rift : public NullCreatureAI
if (!_instance->GetCreature(DATA_AEONUS))
{
DoSelectSummon();
- events.ScheduleEvent(EVENT_SUMMON_AT_RIFT, 15000);
+ events.ScheduleEvent(EVENT_SUMMON_AT_RIFT, 15s);
}
break;
case EVENT_SUMMON_BOSS:
diff --git a/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp b/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp
index 398bc8764d..bd741c2486 100644
--- a/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp
+++ b/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp
@@ -58,7 +58,7 @@ public:
case NPC_HIGHBORNE_SUMMONER:
if (_pylonsState == ALL_PYLONS_OFF)
{
- creature->DespawnOrUnsummon(5000);
+ creature->DespawnOrUnsummon(5s);
}
else
{
diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp
index 3564bc8804..f51446e467 100644
--- a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp
+++ b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp
@@ -138,16 +138,16 @@ public:
switch (ph)
{
case PHASE_GROUNDED:
- events.ScheduleEvent(EVENT_SPELL_WINGBUFFET, urand(10000, 20000));
- events.ScheduleEvent(EVENT_SPELL_FLAMEBREATH, urand(10000, 20000));
- events.ScheduleEvent(EVENT_SPELL_TAILSWEEP, urand(15000, 20000));
- events.ScheduleEvent(EVENT_SPELL_CLEAVE, urand(2000, 5000));
+ events.ScheduleEvent(EVENT_SPELL_WINGBUFFET, 10s, 20s);
+ events.ScheduleEvent(EVENT_SPELL_FLAMEBREATH, 10s, 20s);
+ events.ScheduleEvent(EVENT_SPELL_TAILSWEEP, 15s, 20s);
+ events.ScheduleEvent(EVENT_SPELL_CLEAVE, 2s, 5s);
break;
case PHASE_AIRPHASE:
- events.ScheduleEvent(EVENT_START_PHASE_2, 0);
+ events.ScheduleEvent(EVENT_START_PHASE_2, 0ms);
break;
case PHASE_LANDED:
- events.ScheduleEvent(EVENT_START_PHASE_3, 5000);
+ events.ScheduleEvent(EVENT_START_PHASE_3, 5s);
break;
}
}
@@ -237,7 +237,7 @@ public:
me->SetFacingTo(OnyxiaMoveData[id].o);
me->SetSpeed(MOVE_RUN, 1.6f, false);
CurrentWP = id;
- events.ScheduleEvent(EVENT_SPELL_FIREBALL_FIRST, 1000);
+ events.ScheduleEvent(EVENT_SPELL_FIREBALL_FIRST, 1s);
}
}
else
@@ -246,21 +246,21 @@ public:
{
case 10:
me->SetFacingTo(OnyxiaMoveData[0].o);
- events.ScheduleEvent(EVENT_LIFTOFF, 0);
+ events.ScheduleEvent(EVENT_LIFTOFF, 0ms);
break;
case 11:
me->SetFacingTo(OnyxiaMoveData[1].o);
- events.ScheduleEvent(EVENT_FLY_S_TO_N, 0);
+ events.ScheduleEvent(EVENT_FLY_S_TO_N, 0ms);
break;
case 12:
me->SetFacingTo(OnyxiaMoveData[1].o);
- events.ScheduleEvent(EVENT_LAND, 0);
+ events.ScheduleEvent(EVENT_LAND, 0ms);
break;
case 13:
me->SetCanFly(false);
me->SetDisableGravity(false);
me->SetSpeed(MOVE_RUN, me->GetCreatureTemplate()->speed_run, false);
- events.ScheduleEvent(EVENT_PHASE_3_ATTACK, 0);
+ events.ScheduleEvent(EVENT_PHASE_3_ATTACK, 0ms);
break;
}
}
@@ -326,25 +326,25 @@ public:
case EVENT_SPELL_WINGBUFFET:
{
DoCastAOE(SPELL_WINGBUFFET);
- events.RepeatEvent(urand(15000, 30000));
+ events.Repeat(15s, 30s);
break;
}
case EVENT_SPELL_FLAMEBREATH:
{
DoCastAOE(SPELL_FLAMEBREATH);
- events.RepeatEvent(urand(10000, 20000));
+ events.Repeat(10s, 20s);
break;
}
case EVENT_SPELL_TAILSWEEP:
{
DoCastAOE(SPELL_TAILSWEEP);
- events.RepeatEvent(urand(15000, 20000));
+ events.Repeat(15s, 20s);
break;
}
case EVENT_SPELL_CLEAVE:
{
DoCastVictim(SPELL_CLEAVE);
- events.RepeatEvent(urand(2000, 5000));
+ events.Repeat(2s, 5s);
break;
}
case EVENT_START_PHASE_2:
@@ -369,7 +369,7 @@ public:
me->GetMotionMaster()->MoveTakeoff(11, OnyxiaMoveData[1].x + 1.0f, OnyxiaMoveData[1].y, OnyxiaMoveData[1].z, 12.0f);
bManyWhelpsAvailable = true;
- events.RescheduleEvent(EVENT_END_MANY_WHELPS_TIME, 10000);
+ events.RescheduleEvent(EVENT_END_MANY_WHELPS_TIME, 10s);
break;
}
case EVENT_END_MANY_WHELPS_TIME:
@@ -381,20 +381,20 @@ public:
me->GetMotionMaster()->MovePoint(5, OnyxiaMoveData[5].x, OnyxiaMoveData[5].y, OnyxiaMoveData[5].z);
whelpSpam = true;
- events.ScheduleEvent(EVENT_WHELP_SPAM, 90000);
- events.ScheduleEvent(EVENT_SUMMON_LAIR_GUARD, 30000);
+ events.ScheduleEvent(EVENT_WHELP_SPAM, 90s);
+ events.ScheduleEvent(EVENT_SUMMON_LAIR_GUARD, 30s);
break;
}
case EVENT_SUMMON_LAIR_GUARD:
{
me->CastSpell(-101.654f, -214.491f, -80.70f, SPELL_SUMMON_LAIR_GUARD, true);
- events.RepeatEvent(30000);
+ events.Repeat(30s);
break;
}
case EVENT_WHELP_SPAM:
{
whelpSpam = true;
- events.RepeatEvent(90000);
+ events.Repeat(90s);
break;
}
case EVENT_LAND:
@@ -413,7 +413,7 @@ public:
DoCast(v, SPELL_FIREBALL);
}
- events.ScheduleEvent(EVENT_SPELL_FIREBALL_SECOND, 4000);
+ events.ScheduleEvent(EVENT_SPELL_FIREBALL_SECOND, 4s);
break;
}
case EVENT_SPELL_FIREBALL_SECOND:
@@ -427,15 +427,15 @@ public:
uint8 rand = urand(0, 99);
if (rand < 33)
{
- events.ScheduleEvent(EVENT_PHASE_2_STEP_CW, 4000);
+ events.ScheduleEvent(EVENT_PHASE_2_STEP_CW, 4s);
}
else if (rand < 66)
{
- events.ScheduleEvent(EVENT_PHASE_2_STEP_ACW, 4000);
+ events.ScheduleEvent(EVENT_PHASE_2_STEP_ACW, 4s);
}
else
{
- events.ScheduleEvent(EVENT_PHASE_2_STEP_ACROSS, 4000);
+ events.ScheduleEvent(EVENT_PHASE_2_STEP_ACROSS, 4s);
}
break;
}
@@ -464,7 +464,7 @@ public:
Talk(EMOTE_BREATH);
me->SetFacingTo(OnyxiaMoveData[CurrentWP].o);
DoCastAOE(OnyxiaMoveData[CurrentWP].spellId);
- events.ScheduleEvent(EVENT_SPELL_BREATH, 8250);
+ events.ScheduleEvent(EVENT_SPELL_BREATH, 8250ms);
break;
}
case EVENT_SPELL_BREATH:
@@ -491,20 +491,20 @@ public:
DoCastAOE(SPELL_BELLOWINGROAR);
- events.ScheduleEvent(EVENT_ERUPTION, 0);
- events.ScheduleEvent(EVENT_SPELL_WINGBUFFET, urand(10000, 20000));
- events.ScheduleEvent(EVENT_SPELL_FLAMEBREATH, urand(10000, 20000));
- events.ScheduleEvent(EVENT_SPELL_TAILSWEEP, urand(15000, 20000));
- events.ScheduleEvent(EVENT_SPELL_CLEAVE, urand(2000, 5000));
- events.ScheduleEvent(EVENT_SPELL_BELLOWINGROAR, 15000);
- events.ScheduleEvent(EVENT_SUMMON_WHELP, 10000);
+ events.ScheduleEvent(EVENT_ERUPTION, 0ms);
+ events.ScheduleEvent(EVENT_SPELL_WINGBUFFET, 10s, 20s);
+ events.ScheduleEvent(EVENT_SPELL_FLAMEBREATH, 10s, 20s);
+ events.ScheduleEvent(EVENT_SPELL_TAILSWEEP, 15s, 20s);
+ events.ScheduleEvent(EVENT_SPELL_CLEAVE, 2s, 5s);
+ events.ScheduleEvent(EVENT_SPELL_BELLOWINGROAR, 15s);
+ events.ScheduleEvent(EVENT_SUMMON_WHELP, 10s);
break;
}
case EVENT_SPELL_BELLOWINGROAR:
{
DoCastAOE(SPELL_BELLOWINGROAR);
- events.RepeatEvent(22000);
- events.ScheduleEvent(EVENT_ERUPTION, 0);
+ events.Repeat(22s);
+ events.ScheduleEvent(EVENT_ERUPTION, 0ms);
break;
}
case EVENT_ERUPTION:
@@ -521,7 +521,7 @@ public:
float dist = rand_norm() * 4.0f;
me->CastSpell(-33.18f + cos(angle) * dist, -258.80f + std::sin(angle) * dist, -89.0f, 17646, true);
me->CastSpell(-32.535f + cos(angle) * dist, -170.190f + std::sin(angle) * dist, -89.0f, 17646, true);
- events.RepeatEvent(30000);
+ events.Repeat(30s);
break;
}
}
@@ -555,8 +555,8 @@ public:
void JustEngagedWith(Unit* /*who*/) override
{
events.Reset();
- events.ScheduleEvent(EVENT_OLG_SPELL_BLASTNOVA, 15000);
- events.ScheduleEvent(EVENT_OLG_SPELL_IGNITEWEAPON, 10000);
+ events.ScheduleEvent(EVENT_OLG_SPELL_BLASTNOVA, 15s);
+ events.ScheduleEvent(EVENT_OLG_SPELL_IGNITEWEAPON, 10s);
}
void UpdateAI(uint32 diff) override
@@ -577,17 +577,17 @@ public:
{
case EVENT_OLG_SPELL_BLASTNOVA:
DoCastAOE(SPELL_OLG_BLASTNOVA);
- events.RepeatEvent(15000);
+ events.Repeat(15s);
break;
case EVENT_OLG_SPELL_IGNITEWEAPON:
if (me->HasUnitFlag(UNIT_FLAG_DISARMED))
{
- events.RepeatEvent(5000);
+ events.Repeat(5s);
}
else
{
DoCastSelf(SPELL_OLG_IGNITEWEAPON);
- events.RepeatEvent(urand(18000, 21000));
+ events.Repeat(18s, 21s);
}
break;
}
diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
index 2dfebf46b5..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,
@@ -115,7 +115,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- me->DespawnOrUnsummon(5000);
+ me->DespawnOrUnsummon(5s);
}
void sQuestAccept(Player* /*player*/, Quest const* quest) override
@@ -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_buru.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
index fa7c560488..9c5669d50e 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
@@ -231,7 +231,7 @@ struct npc_buru_egg : public ScriptedAI
}
}
- me->DespawnOrUnsummon(5000);
+ me->DespawnOrUnsummon(5s);
}
void UpdateAI(uint32 /*diff*/) override { }
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
index 7b56c464d1..083b9895f3 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
@@ -154,7 +154,7 @@ struct boss_ossirian : public BossAI
}
}
- void SetGUID(ObjectGuid guid, int32 action) override
+ void SetGUID(ObjectGuid const& guid, int32 action) override
{
if (action == ACTION_TRIGGER_WEAKNESS && guid != _firstCrystalGUID)
{
@@ -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();
}
}
@@ -317,7 +317,7 @@ public:
{
go_ossirian_crystalAI(GameObject* go) : GameObjectAI(go), _instance(go->GetInstanceScript()) { }
- void SetGUID(ObjectGuid guid, int32 type) override
+ void SetGUID(ObjectGuid const& guid, int32 type) override
{
if (type == GUID_TRIGGER_PAIR)
{
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
index 319bb5e2ac..fb921d71e4 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
@@ -209,7 +209,7 @@ struct npc_general_andorov : public npc_escortAI
_initialAttackTimer = 5 * IN_MILLISECONDS;
_paused = false;
- Start(false, true);
+ Start(false);
me->SetImmuneToNPC(true);
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
index f7ec9c8380..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);
}
}
@@ -310,7 +310,7 @@ public:
me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
DoFinalSpell();
Talk(EMOTE_DEVOURED);
- me->DespawnOrUnsummon(3000);
+ me->DespawnOrUnsummon(3s);
return;
}
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp
index 43d7411743..40019ccc03 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp
@@ -170,7 +170,7 @@ struct boss_ouro : public BossAI
}
}
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
void CastGroundRupture()
@@ -273,7 +273,7 @@ struct boss_ouro : public BossAI
if (me->GetThreatMgr().GetThreatList().empty())
{
DoCastSelf(SPELL_OURO_SUBMERGE_VISUAL);
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
instance->SetBossState(DATA_OURO, FAIL);
if (GameObject* base = me->FindNearestGameObject(GO_SANDWORM_BASE, 200.f))
base->DespawnOrUnsummon();
@@ -334,7 +334,7 @@ struct npc_dirt_mound : ScriptedAI
scheduler.Schedule(30s, [this](TaskContext /*context*/)
{
DoCastSelf(SPELL_SUMMON_SCARABS, true);
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
})
.Schedule(100ms, [this](TaskContext context)
{
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
index eab24db58e..cdad23d67c 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
@@ -418,7 +418,7 @@ public:
if (Creature* mastersEye = instance->GetCreature(DATA_MASTERS_EYE))
{
mastersEye->AI()->Talk(EMOTE_MASTERS_EYE_AT, player);
- mastersEye->DespawnOrUnsummon(11000);
+ mastersEye->DespawnOrUnsummon(11s);
mastersEye->m_Events.AddEventAtOffset([mastersEye, player]()
{
mastersEye->SetFacingToObject(player);
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp
index a254356892..6f642d152c 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp
@@ -175,7 +175,7 @@ struct boss_viscidus : public BossAI
{
DoCastSelf(SPELL_EXPLODE_TRIGGER, true);
})
- .Schedule(3000ms, [this](TaskContext /*context*/)
+ .Schedule(3s, [this](TaskContext /*context*/)
{
DoCastSelf(SPELL_INVIS_SELF, true);
me->SetAuraStack(SPELL_VISCIDUS_SHRINKS, me, 20);
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp
index 2cc53521d4..ca26d56cc8 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp
@@ -393,10 +393,10 @@ struct npc_obsidian_nullifier : public ScriptedAI
context.Repeat(6s);
})
- .Schedule(6000ms, 8400ms, [this](TaskContext context)
+ .Schedule(6s, 8400ms, [this](TaskContext context)
{
DoCastVictim(SPELL_CLEAVE, true);
- context.Repeat(6000ms, 8400ms);
+ context.Repeat(6s, 8400ms);
});
}
@@ -447,7 +447,7 @@ struct npc_ahnqiraji_critter : public ScriptedAI
}
}
- context.Repeat(3500ms, 4000ms);
+ context.Repeat(3500ms, 4s);
});
}
@@ -474,7 +474,7 @@ struct npc_ahnqiraji_critter : public ScriptedAI
{
if (me->GetEntry() == NPC_QIRAJI_SCORPION)
{
- me->DespawnOrUnsummon(5 * IN_MILLISECONDS);
+ me->DespawnOrUnsummon(5s);
}
}
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/ZulFarrak/zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp
index bd6543ffbe..f24a4592bd 100644
--- a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp
+++ b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp
@@ -176,25 +176,25 @@ public:
if (Creature* weegli = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_WEEGLI)))
{
weegli->CastSpell(weegli, SPELL_BLYS_BAND_ESCAPE);
- weegli->DespawnOrUnsummon(10000);
+ weegli->DespawnOrUnsummon(10s);
}
if (Creature* raven = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_RAVEN)))
{
raven->CastSpell(raven, SPELL_BLYS_BAND_ESCAPE);
- raven->DespawnOrUnsummon(10000);
+ raven->DespawnOrUnsummon(10s);
}
if (Creature* oro = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_ORO)))
{
oro->CastSpell(oro, SPELL_BLYS_BAND_ESCAPE);
- oro->DespawnOrUnsummon(10000);
+ oro->DespawnOrUnsummon(10s);
}
if (Creature* murta = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_MURTA)))
{
murta->CastSpell(murta, SPELL_BLYS_BAND_ESCAPE);
- murta->DespawnOrUnsummon(10000);
+ murta->DespawnOrUnsummon(10s);
}
DoCastSelf(SPELL_BLYS_BAND_ESCAPE);
- me->DespawnOrUnsummon(10000);
+ me->DespawnOrUnsummon(10s);
Porthome_Timer = 156000; //set timer back so that the event doesn't keep triggering
}
else
@@ -436,7 +436,7 @@ public:
case 1:
me->GetMotionMaster()->MovePoint(2, 1871.18f, 1100.f, 8.88f);
Talk(SAY_WEEGLI_OUT_OF_HERE);
- me->DespawnOrUnsummon(8000);
+ me->DespawnOrUnsummon(8s);
instance->SetData(DATA_PYRAMID, PYRAMID_GATES_DESTROYED);
destroyingDoor = false;
break;
diff --git a/src/server/scripts/Kalimdor/kalimdor_script_loader.cpp b/src/server/scripts/Kalimdor/kalimdor_script_loader.cpp
index 1e80e0982f..8186c7f364 100644
--- a/src/server/scripts/Kalimdor/kalimdor_script_loader.cpp
+++ b/src/server/scripts/Kalimdor/kalimdor_script_loader.cpp
@@ -74,7 +74,6 @@ void AddSC_instance_wailing_caverns(); //Wailing caverns
void AddSC_zulfarrak();
void AddSC_instance_zulfarrak(); //Zul'Farrak instance script
void AddSC_ashenvale();
-void AddSC_azshara();
void AddSC_azuremyst_isle();
void AddSC_bloodmyst_isle();
void AddSC_boss_azuregos();
@@ -157,7 +156,6 @@ void AddKalimdorScripts()
AddSC_zulfarrak();
AddSC_instance_zulfarrak(); //Zul'Farrak instance script
AddSC_ashenvale();
- AddSC_azshara();
AddSC_azuremyst_isle();
AddSC_bloodmyst_isle();
AddSC_boss_azuregos();
diff --git a/src/server/scripts/Kalimdor/zone_ashenvale.cpp b/src/server/scripts/Kalimdor/zone_ashenvale.cpp
index e7131c5fd8..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, false, player->GetGUID());
+ me->SetWalk(true);
+ Start(true, player->GetGUID());
}
}
diff --git a/src/server/scripts/Kalimdor/zone_azshara.cpp b/src/server/scripts/Kalimdor/zone_azshara.cpp
deleted file mode 100644
index 1a10cec1db..0000000000
--- a/src/server/scripts/Kalimdor/zone_azshara.cpp
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published by the
- * Free Software Foundation; either version 3 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "CreatureScript.h"
-#include "Player.h"
-#include "ScriptedCreature.h"
-#include "ScriptedGossip.h"
-
-/*####
-# npc_rizzle_sprysprocket
-####*/
-
-enum RizzleSprysprocketData
-{
- QUEST_CHASING_THE_MOONSTONE = 10994,
-
- NPC_DEPTH_CHARGE = 23025,
-
- SPELL_RIZZLE_BLACKJACK = 39865,
- SPELL_RIZZLE_ESCAPE = 39871,
- SPELL_RIZZLE_FROST_GRENADE = 40525,
- SPELL_DEPTH_CHARGE_TRAP = 38576,
- SPELL_PERIODIC_DEPTH_CHARGE = 39912,
- SPELL_GIVE_SOUTHFURY_MOONSTONE = 39886,
-
- SAY_RIZZLE_START = 0,
- SAY_RIZZLE_GRENADE = 1,
- SAY_RIZZLE_FINAL = 2,
- MSG_ESCAPE_NOTICE = 3,
- GOSSIP_GET_MOONSTONE = 21893
-
-};
-
-Position const WPs[58] =
-{
- {3691.97f, -3962.41f, 35.9118f, 3.67f},
- {3675.02f, -3960.49f, 35.9118f, 3.67f},
- {3653.19f, -3958.33f, 33.9118f, 3.59f},
- {3621.12f, -3958.51f, 29.9118f, 3.48f},
- {3604.86f, -3963, 29.9118f, 3.48f},
- {3569.94f, -3970.25f, 29.9118f, 3.44f},
- {3541.03f, -3975.64f, 29.9118f, 3.41f},
- {3510.84f, -3978.71f, 29.9118f, 3.41f},
- {3472.7f, -3997.07f, 29.9118f, 3.35f},
- {3439.15f, -4014.55f, 29.9118f, 3.29f},
- {3412.8f, -4025.87f, 29.9118f, 3.25f},
- {3384.95f, -4038.04f, 29.9118f, 3.24f},
- {3346.77f, -4052.93f, 29.9118f, 3.22f},
- {3299.56f, -4071.59f, 29.9118f, 3.20f},
- {3261.22f, -4080.38f, 30.9118f, 3.19f},
- {3220.68f, -4083.09f, 31.9118f, 3.18f},
- {3187.11f, -4070.45f, 33.9118f, 3.16f},
- {3162.78f, -4062.75f, 33.9118f, 3.15f},
- {3136.09f, -4050.32f, 33.9118f, 3.07f},
- {3119.47f, -4044.51f, 36.0363f, 3.07f},
- {3098.95f, -4019.8f, 33.9118f, 3.07f},
- {3073.07f, -4011.42f, 33.9118f, 3.07f},
- {3051.71f, -3993.37f, 33.9118f, 3.02f},
- {3027.52f, -3978.6f, 33.9118f, 3.00f},
- {3003.78f, -3960.14f, 33.9118f, 2.98f},
- {2977.99f, -3941.98f, 31.9118f, 2.96f},
- {2964.57f, -3932.07f, 30.9118f, 2.96f},
- {2947.9f, -3921.31f, 29.9118f, 2.96f},
- {2924.91f, -3910.8f, 29.9118f, 2.94f},
- {2903.04f, -3896.42f, 29.9118f, 2.93f},
- {2884.75f, -3874.03f, 29.9118f, 2.90f},
- {2868.19f, -3851.48f, 29.9118f, 2.82f},
- {2854.62f, -3819.72f, 29.9118f, 2.80f},
- {2825.53f, -3790.4f, 29.9118f, 2.744f},
- {2804.31f, -3773.05f, 29.9118f, 2.71f},
- {2769.78f, -3763.57f, 29.9118f, 2.70f},
- {2727.23f, -3745.92f, 30.9118f, 2.69f},
- {2680.12f, -3737.49f, 30.9118f, 2.67f},
- {2647.62f, -3739.94f, 30.9118f, 2.66f},
- {2616.6f, -3745.75f, 30.9118f, 2.64f},
- {2589.38f, -3731.97f, 30.9118f, 2.61f},
- {2562.94f, -3722.35f, 31.9118f, 2.56f},
- {2521.05f, -3716.6f, 31.9118f, 2.55f},
- {2485.26f, -3706.67f, 31.9118f, 2.51f},
- {2458.93f, -3696.67f, 31.9118f, 2.51f},
- {2432, -3692.03f, 31.9118f, 2.46f},
- {2399.59f, -3681.97f, 31.9118f, 2.45f},
- {2357.75f, -3666.6f, 31.9118f, 2.44f},
- {2311.99f, -3656.88f, 31.9118f, 2.94f},
- {2263.41f, -3649.55f, 31.9118f, 3.02f},
- {2209.05f, -3641.76f, 31.9118f, 2.99f},
- {2164.83f, -3637.64f, 31.9118f, 3.15f},
- {2122.42f, -3639, 31.9118f, 3.21f},
- {2075.73f, -3643.59f, 31.9118f, 3.22f},
- {2033.59f, -3649.52f, 31.9118f, 3.42f},
- {1985.22f, -3662.99f, 31.9118f, 3.42f},
- {1927.09f, -3679.56f, 33.9118f, 3.42f},
- {1873.57f, -3695.32f, 33.9118f, 3.44f}
-};
-
-class npc_rizzle_sprysprocket : public CreatureScript
-{
-public:
- npc_rizzle_sprysprocket() : CreatureScript("npc_rizzle_sprysprocket") { }
-
- struct npc_rizzle_sprysprocketAI : public ScriptedAI
- {
- npc_rizzle_sprysprocketAI(Creature* creature) : ScriptedAI(creature) { }
-
- void Reset() override
- {
- SpellEscapeTimer = 1300;
- TeleportTimer = 3500;
- CheckTimer = 10000;
- GrenadeTimer = 30000;
- MustDieTimer = 3000;
- CurrWP = 0;
-
- PlayerGUID.Clear();
-
- MustDie = false;
- Escape = false;
- ContinueWP = false;
- Reached = false;
- }
-
- void JustEngagedWith(Unit* /*who*/) override { }
-
- void AttackStart(Unit* who) override
- {
- if (!who || PlayerGUID)
- return;
-
- Player* player = who->ToPlayer();
-
- if (player && player->GetQuestStatus(QUEST_CHASING_THE_MOONSTONE) == QUEST_STATUS_INCOMPLETE)
- {
- PlayerGUID = who->GetGUID();
- Talk(SAY_RIZZLE_START);
- DoCast(who, SPELL_RIZZLE_BLACKJACK, false);
- return;
- }
- }
-
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
- {
- CloseGossipMenuFor(player);
- me->CastSpell(player, SPELL_GIVE_SOUTHFURY_MOONSTONE, true);
- MustDieTimer = 3000;
- MustDie = true;
- }
-
- void MovementInform(uint32 type, uint32 id) override
- {
- if (type != POINT_MOTION_TYPE)
- return;
-
- if (id == 57)
- {
- me->DespawnOrUnsummon();
- return;
- }
-
- ++CurrWP;
- ContinueWP = true;
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (MustDie)
- {
- if (MustDieTimer <= diff)
- {
- me->DespawnOrUnsummon();
- return;
- }
- else MustDieTimer -= diff;
- }
-
- if (!Escape)
- {
- if (!PlayerGUID)
- return;
-
- if (SpellEscapeTimer <= diff)
- {
- DoCast(me, SPELL_RIZZLE_ESCAPE, false);
- SpellEscapeTimer = 10000;
- }
- else SpellEscapeTimer -= diff;
-
- if (TeleportTimer <= diff)
- {
- // temp solution - unit can't be teleported by core using spelleffect 5, only players
- me->NearTeleportTo(3706.39f, -3969.15f, 35.9118f, me->GetOrientation());
-
- //begin swimming and summon depth charges
- Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID);
- if (!player)
- return;
-
- Talk(MSG_ESCAPE_NOTICE, player);
- DoCast(me, SPELL_PERIODIC_DEPTH_CHARGE);
- me->SetHover(true);
- me->SetSwim(true);
- me->SetSpeed(MOVE_RUN, 0.85f, true);
- me->GetMotionMaster()->MovementExpired();
- me->GetMotionMaster()->MovePoint(CurrWP, WPs[CurrWP]);
- Escape = true;
- }
- else TeleportTimer -= diff;
-
- return;
- }
-
- if (ContinueWP)
- {
- me->GetMotionMaster()->MovePoint(CurrWP, WPs[CurrWP]);
- ContinueWP = false;
- }
-
- if (GrenadeTimer <= diff)
- {
- if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID))
- {
- Talk(SAY_RIZZLE_GRENADE, player);
- DoCast(player, SPELL_RIZZLE_FROST_GRENADE, true);
- }
- GrenadeTimer = 30000;
- }
- else GrenadeTimer -= diff;
-
- if (CheckTimer <= diff)
- {
- Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID);
- if (!player)
- {
- me->DespawnOrUnsummon();
- return;
- }
-
- if (me->IsWithinDist(player, 10) && me->GetPositionX() > player->GetPositionX() && !Reached)
- {
- Talk(SAY_RIZZLE_FINAL);
- me->ReplaceAllNpcFlags(NPCFlags(1));
- me->SetFaction(FACTION_FRIENDLY);
- me->GetMotionMaster()->MoveIdle();
- me->RemoveAurasDueToSpell(SPELL_PERIODIC_DEPTH_CHARGE);
- Reached = true;
- }
-
- CheckTimer = 1000;
- }
- else CheckTimer -= diff;
- }
-
- private:
- ObjectGuid PlayerGUID;
- uint32 SpellEscapeTimer;
- uint32 TeleportTimer;
- uint32 CheckTimer;
- uint32 GrenadeTimer;
- uint32 MustDieTimer;
- uint32 CurrWP;
- bool MustDie;
- bool Escape;
- bool ContinueWP;
- bool Reached;
- };
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (player->GetQuestStatus(QUEST_CHASING_THE_MOONSTONE) != QUEST_STATUS_INCOMPLETE)
- return true;
-
- AddGossipItemFor(player, GOSSIP_GET_MOONSTONE, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- SendGossipMenuFor(player, 10811, creature->GetGUID());
-
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_rizzle_sprysprocketAI(creature);
- }
-};
-
-/*####
-# npc_depth_charge
-####*/
-class npc_depth_charge : public CreatureScript
-{
-public:
- npc_depth_charge() : CreatureScript("npc_depth_charge") { }
-
- struct npc_depth_chargeAI : public ScriptedAI
- {
- npc_depth_chargeAI(Creature* creature) : ScriptedAI(creature) { }
-
- bool WeMustDie;
- uint32 WeMustDieTimer;
-
- void Reset() override
- {
- me->SetHover(true);
- me->SetSwim(true);
- me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
- WeMustDie = false;
- WeMustDieTimer = 1000;
- }
-
- void JustEngagedWith(Unit* /*who*/) override { }
-
- void AttackStart(Unit* /*who*/) override { }
-
- void MoveInLineOfSight(Unit* who) override
- {
- if (!who)
- return;
-
- if (who->IsPlayer() && me->IsWithinDistInMap(who, 5))
- {
- DoCast(who, SPELL_DEPTH_CHARGE_TRAP);
- WeMustDie = true;
- return;
- }
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (WeMustDie)
- {
- if (WeMustDieTimer <= diff)
- me->DespawnOrUnsummon();
- else
- WeMustDieTimer -= diff;
- }
- return;
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_depth_chargeAI(creature);
- }
-};
-
-void AddSC_azshara()
-{
- new npc_rizzle_sprysprocket();
- new npc_depth_charge();
-}
diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
index 7069cd3815..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, false, player->GetGUID());
+ me->SetWalk(true);
+ Start(true, player->GetGUID());
}
_events.ScheduleEvent(EVENT_STAND, 2s);
break;
diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
index 359a18c575..01761599ec 100644
--- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
@@ -24,7 +24,7 @@
######*/
//possible creatures to be spawned
-uint32 const possibleSpawns[32] = {17322, 17661, 17496, 17522, 17340, 17352, 17333, 17524, 17654, 17348, 17339, 17345, 17359, 17353, 17336, 17550, 17330, 17701, 17321, 17325, 17320, 17683, 17342, 17715, 17334, 17341, 17338, 17337, 17346, 17344, 17327};
+uint32 const possibleSpawns[32] = {17322, 17661, 17496, 17522, 17340, 17352, 17333, 17524, 17654, 17348, 17339, 17345, 17353, 17336, 17550, 17330, 17701, 17321, 17325, 17320, 17683, 17342, 17715, 17334, 17341, 17338, 17337, 17346, 17344, 17327};
enum WebbedCreature
{
diff --git a/src/server/scripts/Kalimdor/zone_darkshore.cpp b/src/server/scripts/Kalimdor/zone_darkshore.cpp
index c3a76fc638..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()))
- pEscortAI->Start(false, false, player->GetGUID());
+ {
+ creature->SetWalk(true);
+ pEscortAI->Start(false, player->GetGUID());
+ }
creature->SetFaction(FACTION_ESCORTEE_A_NEUTRAL_PASSIVE);
}
@@ -463,7 +466,7 @@ public:
_events.Reset();
_events.ScheduleEvent(EVENT_CHECK_FOLLOWING, 1s);
player->KilledMonsterCredit(NPC_CAPTURED_RABID_THISTLE_BEAR);
- me->DespawnOrUnsummon(240000);
+ me->DespawnOrUnsummon(240s);
}
}
}
@@ -552,7 +555,7 @@ public:
}
}
- void SetGUID(ObjectGuid /*guid*/, int32 type) override
+ void SetGUID(ObjectGuid const& /*guid*/, int32 type) override
{
if (type == GUID_SCRIPT_INVOKER && _scriptRunning == false)
{
diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp
index 396ee22955..3b65c2aa14 100644
--- a/src/server/scripts/Kalimdor/zone_desolace.cpp
+++ b/src/server/scripts/Kalimdor/zone_desolace.cpp
@@ -42,9 +42,6 @@ enum Caravan
MAX_CARAVAN_SUMMONS = 3,
- TIME_SHOP_STOP = 10 * MINUTE * IN_MILLISECONDS,
- TIME_HIRE_STOP = 4 * MINUTE * IN_MILLISECONDS,
-
// Ambush
NPC_KOLKAR_WAYLAYER = 12976,
NPC_KOLKAR_AMBUSHER = 12977,
@@ -53,6 +50,9 @@ enum Caravan
NPC_NETHER = 4684,
};
+constexpr Milliseconds TIME_SHOP_STOP = 600s;
+constexpr Milliseconds TIME_HIRE_STOP = 240s;
+
class npc_cork_gizelton : public CreatureScript
{
public:
@@ -129,7 +129,7 @@ public:
ImmuneFlagSet(false, _faction);
}
- void SetGUID(ObjectGuid playerGUID, int32 faction) override
+ void SetGUID(ObjectGuid const& playerGUID, int32 faction) override
{
_playerGUID = playerGUID;
_faction = faction;
@@ -264,14 +264,14 @@ public:
{
// Finished north path
case 52:
- me->SummonCreature(NPC_VENDOR_TRON, -694.61f, 1460.7f, 90.794f, 2.4f, TEMPSUMMON_TIMED_DESPAWN, TIME_SHOP_STOP + 15 * IN_MILLISECONDS);
+ me->SummonCreature(NPC_VENDOR_TRON, -694.61f, 1460.7f, 90.794f, 2.4f, TEMPSUMMON_TIMED_DESPAWN, 600000 + 15 * IN_MILLISECONDS);
SetEscortPaused(true);
events.ScheduleEvent(EVENT_RESUME_PATH, TIME_SHOP_STOP);
CheckCaravan();
break;
// Finished south path
case 193:
- me->SummonCreature(NPC_SUPER_SELLER, -1905.5f, 2463.3f, 61.52f, 5.87f, TEMPSUMMON_TIMED_DESPAWN, TIME_SHOP_STOP + 15 * IN_MILLISECONDS);
+ me->SummonCreature(NPC_SUPER_SELLER, -1905.5f, 2463.3f, 61.52f, 5.87f, TEMPSUMMON_TIMED_DESPAWN, 600000 + 15 * IN_MILLISECONDS);
SetEscortPaused(true);
events.ScheduleEvent(EVENT_RESUME_PATH, TIME_SHOP_STOP);
CheckCaravan();
@@ -396,7 +396,7 @@ public:
case EVENT_RESTART_ESCORT:
CheckCaravan();
SetDespawnAtEnd(false);
- Start(true, true, ObjectGuid::Empty, 0, false, false, true);
+ Start(true, ObjectGuid::Empty, 0, false, false, true);
break;
}
@@ -474,7 +474,7 @@ public:
else if (spell->Id == SPELL_KODO_KOMBO_GOSSIP)
{
me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
- me->DespawnOrUnsummon(60000);
+ me->DespawnOrUnsummon(60s);
}
}
};
diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp
index 2bf7903188..a91261929b 100644
--- a/src/server/scripts/Kalimdor/zone_moonglade.cpp
+++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp
@@ -384,7 +384,8 @@ 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();
- Start(true, false, PlayerGUID);
+ me->SetWalk(true);
+ Start(true, PlayerGUID);
}
return;
}
diff --git a/src/server/scripts/Kalimdor/zone_silithus.cpp b/src/server/scripts/Kalimdor/zone_silithus.cpp
index 9a06054bbc..7bfd005ebd 100644
--- a/src/server/scripts/Kalimdor/zone_silithus.cpp
+++ b/src/server/scripts/Kalimdor/zone_silithus.cpp
@@ -1145,7 +1145,7 @@ public:
}
}
- me->DespawnOrUnsummon(5000ms, respawnTimer); // Despawn in 5 Seconds for respawnTimer value
+ me->DespawnOrUnsummon(5s, respawnTimer); // Despawn in 5 Seconds for respawnTimer value
me->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
CloseGossipMenuFor(player);
return false;
@@ -1174,7 +1174,7 @@ public:
summons->SetLootRecipient(player);
summons->CastSpell(summons, SPELL_SPAWN_IN, false);
summons->AI()->Talk(SAY_ON_SPAWN_IN, player);
- summons->m_Events.AddEvent(new DelayedWindstoneSummonEvent(summons, player->GetGUID()), summons->m_Events.CalculateTime(5200));
+ summons->m_Events.AddEventAtOffset(new DelayedWindstoneSummonEvent(summons, player->GetGUID()), 5200ms);
_creatureGuid = summons->GetGUID();
}
}
diff --git a/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp b/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp
index 6f8323126f..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()))
- pEscortAI->Start(true, false, player->GetGUID());
+ {
+ 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 88c7eb7e4d..ec4912fb63 100644
--- a/src/server/scripts/Kalimdor/zone_tanaris.cpp
+++ b/src/server/scripts/Kalimdor/zone_tanaris.cpp
@@ -260,7 +260,8 @@ public:
float Radius = 10.0f;
if (me->IsWithinDistInMap(who, Radius))
{
- Start(false, false, who->GetGUID());
+ 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 2624709fc6..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()))
- pEscortAI->Start(false, false, player->GetGUID(), quest);
+ {
+ creature->SetWalk(true);
+ pEscortAI->Start(false, player->GetGUID(), quest);
+ }
}
return true;
}
@@ -300,11 +303,11 @@ public:
for (uint8 i = 0; i < 6; ++i) // unsummon challengers
if (AffrayChallenger[i])
if (Creature* creature = ObjectAccessor::GetCreature((*me), AffrayChallenger[i]))
- creature->DespawnOrUnsummon(1);
+ creature->DespawnOrUnsummon(1ms);
if (BigWill) // unsummon bigWill
if (Creature* creature = ObjectAccessor::GetCreature((*me), BigWill))
- creature->DespawnOrUnsummon(1);
+ creature->DespawnOrUnsummon(1ms);
}
void MoveInLineOfSight(Unit* who) override
@@ -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();
+ 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()))
- pEscortAI->Start(true, false, player->GetGUID());
+ {
+ 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 2a80cd90ee..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()))
- pEscortAI->Start(false, false, player->GetGUID(), quest);
+ {
+ 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()))
- pEscortAI->Start(false, false, player->GetGUID(), quest);
+ {
+ 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 131baf8686..83484446aa 100644
--- a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp
+++ b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp
@@ -48,7 +48,8 @@ public:
{
if (quest->GetQuestId() == QUEST_CHASING_AME)
{
- CAST_AI(npc_escortAI, (creature->AI()))->Start(false, false, player->GetGUID());
+ 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);
// Change faction so mobs attack
diff --git a/src/server/scripts/Kalimdor/zone_winterspring.cpp b/src/server/scripts/Kalimdor/zone_winterspring.cpp
index d1e516fe08..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()))
- escortAI->Start(false, false, player->GetGUID(), quest);
+ {
+ creature->SetWalk(true);
+ escortAI->Start(false, player->GetGUID(), quest);
+ }
return true;
}
@@ -486,7 +489,7 @@ public:
if (Creature* guard = me->GetMap()->GetCreature(_guardEluneGUID))
{
guard->GetMotionMaster()->MovePoint(0, wingThicketLocations[2].m_positionX, wingThicketLocations[2].m_positionY, wingThicketLocations[2].m_positionZ);
- guard->DespawnOrUnsummon(4000);
+ guard->DespawnOrUnsummon(4s);
}
break;
case SAY_PRIESTESS_ALTAR_20:
@@ -494,7 +497,7 @@ public:
if (Creature* priestess = me->GetMap()->GetCreature(_firstPriestessGUID))
{
priestess->GetMotionMaster()->MovePoint(0, wingThicketLocations[0].m_positionX, wingThicketLocations[0].m_positionY, wingThicketLocations[0].m_positionZ);
- priestess->DespawnOrUnsummon(4000);
+ priestess->DespawnOrUnsummon(4s);
}
break;
case SAY_PRIESTESS_ALTAR_21:
@@ -502,7 +505,7 @@ public:
if (Creature* priestess = me->GetMap()->GetCreature(_secondPriestessGUID))
{
priestess->GetMotionMaster()->MovePoint(0, wingThicketLocations[1].m_positionX, wingThicketLocations[1].m_positionY, wingThicketLocations[1].m_positionZ);
- priestess->DespawnOrUnsummon(4000);
+ priestess->DespawnOrUnsummon(4s);
}
break;
case DATA_EVENT_END:
@@ -526,7 +529,7 @@ public:
player->GroupEventHappens(QUEST_GUARDIANS_ALTAR, me);
Talk(SAY_RANSHALLA_END_2, player);
}
- me->DespawnOrUnsummon(4000);
+ me->DespawnOrUnsummon(4s);
break;
}
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h
index 39f15f6ab6..90222743e4 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h
@@ -28,7 +28,7 @@ enum ANData
{
DATA_KRIKTHIR = 0,
DATA_HADRONOX = 1,
- DATA_ANUBARAK_EVENT = 2,
+ DATA_ANUBARAK = 2,
MAX_ENCOUNTERS = 3
};
@@ -41,6 +41,8 @@ enum ANIds
NPC_SKITTERING_INFECTIOR = 28736,
NPC_KRIKTHIR_THE_GATEWATCHER = 28684,
NPC_HADRONOX = 28921,
+ NPC_ANUBARAK = 29120,
+
NPC_ANUB_AR_CHAMPION = 29062,
NPC_ANUB_AR_NECROMANCER = 29063,
NPC_ANUB_AR_CRYPTFIEND = 29064,
@@ -59,4 +61,6 @@ inline AI* GetAzjolNerubAI(T* obj)
return GetInstanceAI<AI>(obj, AzjolNerubScriptName);
}
+#define RegisterAzjolNerubCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetAzjolNerubAI)
+
#endif
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
index 3cdb5967fd..ec4dd204c5 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
@@ -55,223 +55,347 @@ enum Yells
enum Misc
{
ACHIEV_TIMED_START_EVENT = 20381,
+};
- EVENT_CARRION_BEETELS = 1,
+enum Events
+{
+ EVENT_CARRION_BEETLES = 1,
EVENT_LEECHING_SWARM = 2,
EVENT_IMPALE = 3,
EVENT_POUND = 4,
- EVENT_CLOSE_DOORS = 5,
- EVENT_EMERGE = 6,
- EVENT_SUMMON_VENOMANCER = 7,
- EVENT_SUMMON_DARTER = 8,
- EVENT_SUMMON_GUARDIAN = 9,
- EVENT_SUMMON_ASSASSINS = 10,
- EVENT_ENABLE_ROTATE = 11,
+ EVENT_ENABLE_ROTATE = 5,
+ EVENT_CLOSE_DOORS = 6,
+ EVENT_EMERGE = 7,
+ EVENT_SUMMON_GUARDIAN = 8,
+ EVENT_SUMMON_VENOMANCER = 9,
+ EVENT_SUMMON_DARTER = 10,
+ EVENT_SUMMON_ASSASSINS = 11,
EVENT_KILL_TALK = 12
};
-enum ANAnubarakNpcs
+enum CreatureIds
{
+ NPC_WORLD_TRIGGER = 22515,
NPC_ANUBAR_GUARDIAN = 29216,
- NPC_ANUBAR_VENOMANCER = 29217
+ NPC_ANUBAR_VENOMANCER = 29217,
+};
+
+enum Phases : uint8
+{
+ PHASE_EMERGED = 1,
+ PHASE_SUBMERGED
+};
+
+enum SubPhase : uint8
+{
+ SUBMERGE_NONE = 0,
+ SUBMERGE_75 = 1,
+ SUBMERGE_50 = 2,
+ SUBMERGE_25 = 3,
+};
+
+enum SummonGroups
+{
+ SUMMON_GROUP_WORLD_TRIGGER_GUARDIAN = 1,
+ SUMMON_GROUP_WORLD_TRIGGER_BALCONY = 2
};
-class boss_anub_arak : public CreatureScript
+struct boss_anub_arak : public BossAI
{
- public:
- boss_anub_arak() : CreatureScript("boss_anub_arak") { }
+ explicit boss_anub_arak(Creature* creature) : BossAI(creature, DATA_ANUBARAK), _intro(false),
+ _submergePhase(SUBMERGE_NONE), _remainingLargeSummonsBeforeEmerge(0), _balconySummons(me)
+ {
+ me->m_SightDistance = 120.0f;
+ }
+
+ void Reset() override
+ {
+ BossAI::Reset();
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
+ _remainingLargeSummonsBeforeEmerge = 0;
+ _submergePhase = SUBMERGE_NONE;
+
+ ScheduleHealthCheckEvent({ 75, 50, 25 }, [&]{
+ events.Reset();
+ Talk(SAY_SUBMERGE);
+ DoCastSelf(SPELL_CLEAR_ALL_DEBUFFS, true);
+ DoCastSelf(SPELL_SUBMERGE, false);
+ }, false);
+ }
- struct boss_anub_arakAI : public BossAI
+ void SpellHitTarget(Unit* /*caster*/, SpellInfo const* spellInfo) override
+ {
+ if (spellInfo->Id == SPELL_SUBMERGE)
{
- boss_anub_arakAI(Creature* creature) : BossAI(creature, DATA_ANUBARAK_EVENT)
- {
- me->m_SightDistance = 120.0f;
- _intro = false;
- _summonedMinions = false;
- }
+ me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveAurasDueToSpell(SPELL_LEECHING_SWARM);
+ DoCastSelf(SPELL_IMPALE_PERIODIC, true);
- void EnterEvadeMode(EvadeReason why) override
- {
- me->DisableRotate(false);
- BossAI::EnterEvadeMode(why);
- }
+ ++_submergePhase;
+ ScheduleSubmerged();
+ }
+ }
- void MoveInLineOfSight(Unit* who) override
- {
- if (!_intro && who->IsPlayer())
- {
- _intro = true;
- Talk(SAY_INTRO);
- }
- BossAI::MoveInLineOfSight(who);
- }
+ void ScheduleEmerged()
+ {
+ events.Reset();
+ events.SetPhase(PHASE_EMERGED);
+ events.ScheduleEvent(EVENT_CARRION_BEETLES, 6500ms, 0, PHASE_EMERGED);
+ events.ScheduleEvent(EVENT_LEECHING_SWARM, 20s, 0, PHASE_EMERGED);
+ events.ScheduleEvent(EVENT_POUND, 15s, 0, PHASE_EMERGED);
+ };
+
+ void ScheduleSubmerged()
+ {
+ events.Reset();
+ events.SetPhase(PHASE_SUBMERGED);
+ events.ScheduleEvent(EVENT_EMERGE, 60s, 0, PHASE_SUBMERGED);
- void JustDied(Unit* killer) override
- {
- Talk(SAY_DEATH);
- BossAI::JustDied(killer);
- }
+ switch (_submergePhase)
+ {
+ case SUBMERGE_75:
+ events.ScheduleEvent(EVENT_SUMMON_GUARDIAN, 4s, 0, PHASE_SUBMERGED);
+ if (IsHeroic())
+ events.ScheduleEvent(EVENT_SUMMON_GUARDIAN, 7s, 0, PHASE_SUBMERGED);
+
+ _remainingLargeSummonsBeforeEmerge = IsHeroic() ? 2 : 1;
+
+ events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 4s, 0, PHASE_SUBMERGED);
+ events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 24s, 0, PHASE_SUBMERGED);
+ events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 44s, 0, PHASE_SUBMERGED);
+ break;
+ case SUBMERGE_50:
+ events.ScheduleEvent(EVENT_SUMMON_GUARDIAN, 4s, 0, PHASE_SUBMERGED);
+ if (IsHeroic())
+ events.ScheduleEvent(EVENT_SUMMON_GUARDIAN, 7s, 0, PHASE_SUBMERGED);
+
+ events.ScheduleEvent(EVENT_SUMMON_VENOMANCER, 24s, 0, PHASE_SUBMERGED);
+ if (IsHeroic())
+ events.ScheduleEvent(EVENT_SUMMON_VENOMANCER, 29s, 0, PHASE_SUBMERGED);
+
+ _remainingLargeSummonsBeforeEmerge = IsHeroic() ? 4 : 2;
+
+ events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 4s, 0, PHASE_SUBMERGED);
+ events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 24s, 0, PHASE_SUBMERGED);
+ events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 44s, 0, PHASE_SUBMERGED);
+ break;
+ case SUBMERGE_25:
+ events.ScheduleEvent(EVENT_SUMMON_GUARDIAN, 4s, 0, PHASE_SUBMERGED);
+ if (IsHeroic())
+ events.ScheduleEvent(EVENT_SUMMON_GUARDIAN, 7s, 0, PHASE_SUBMERGED);
+
+ events.ScheduleEvent(EVENT_SUMMON_VENOMANCER, 24s, 0, PHASE_SUBMERGED);
+ if (IsHeroic())
+ events.ScheduleEvent(EVENT_SUMMON_VENOMANCER, 29s, 0, PHASE_SUBMERGED);
+
+ _remainingLargeSummonsBeforeEmerge = IsHeroic() ? 4 : 2;
+
+ events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 4s, 0, PHASE_SUBMERGED);
+ events.ScheduleEvent(EVENT_SUMMON_DARTER, 4s, 0, PHASE_SUBMERGED);
+
+ events.ScheduleEvent(EVENT_SUMMON_DARTER, 12s, 0, PHASE_SUBMERGED);
+
+ events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 24s, 0, PHASE_SUBMERGED);
+ events.ScheduleEvent(EVENT_SUMMON_DARTER, 26s, 0, PHASE_SUBMERGED);
+
+ events.ScheduleEvent(EVENT_SUMMON_DARTER, 32s, 0, PHASE_SUBMERGED);
+
+ events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 44s, 0, PHASE_SUBMERGED);
+ events.ScheduleEvent(EVENT_SUMMON_DARTER, 45s, 0, PHASE_SUBMERGED);
+ break;
+ default:
+ break;
+ }
+ }
- void KilledUnit(Unit* /*victim*/) override
- {
- if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
- {
- Talk(SAY_SLAY);
- events.ScheduleEvent(EVENT_KILL_TALK, 6s);
- }
- }
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ Talk(SAY_AGGRO);
+ instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
+
+ events.SetPhase(PHASE_EMERGED);
+ events.ScheduleEvent(EVENT_CLOSE_DOORS, 5s);
+ ScheduleEmerged();
+
+ // set up world triggers
+ std::list<TempSummon*> summoned;
+ me->SummonCreatureGroup(SUMMON_GROUP_WORLD_TRIGGER_GUARDIAN, &summoned);
+ if (summoned.empty())
+ {
+ EnterEvadeMode(EVADE_REASON_OTHER);
+ return;
+ }
+ TempSummon* guardianTrigger = summoned.front();
+ _guardianTriggerGUID = guardianTrigger->GetGUID();
- void JustSummoned(Creature* summon) override
- {
- summons.Summon(summon);
- if (!summon->IsTrigger())
- summon->SetInCombatWithZone();
- }
+ summoned.clear();
+ _balconySummons.clear();
+ me->SummonCreatureGroup(SUMMON_GROUP_WORLD_TRIGGER_BALCONY, &summoned);
+ if (summoned.empty())
+ {
+ EnterEvadeMode(EVADE_REASON_OTHER);
+ return;
+ }
+ for (auto const& summon : summoned)
+ _balconySummons.Summon(summon);
+ }
- void Reset() override
- {
- BossAI::Reset();
- _summonedMinions = false;
- me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
- instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
-
- ScheduleHealthCheckEvent({ 75, 50, 25 }, [&]{
- Talk(SAY_SUBMERGE);
- _summonedMinions = false;
- DoCastSelf(SPELL_CLEAR_ALL_DEBUFFS, true);
- DoCastSelf(SPELL_SUBMERGE, false);
-
- me->m_Events.AddEventAtOffset([this] {
- me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
- DoCastSelf(SPELL_IMPALE_PERIODIC, true);
- }, 2s);
-
- events.Reset();
- events.ScheduleEvent(EVENT_EMERGE, 60s);
- events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 2s);
- events.ScheduleEvent(EVENT_SUMMON_GUARDIAN, 4s);
- events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 15s);
- events.ScheduleEvent(EVENT_SUMMON_VENOMANCER, 20s);
- events.ScheduleEvent(EVENT_SUMMON_DARTER, 30s);
- events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 35s);
- }, false);
- }
+ void EnterEvadeMode(EvadeReason why) override
+ {
+ me->DisableRotate(false);
+ BossAI::EnterEvadeMode(why);
+ summons.DespawnAll();
+ }
- void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) override
- {
- if (!me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE))
- return;
+ void MoveInLineOfSight(Unit* who) override
+ {
+ if (!_intro && who->IsPlayer())
+ {
+ _intro = true;
+ Talk(SAY_INTRO);
+ }
+ BossAI::MoveInLineOfSight(who);
+ }
- if (_summonedMinions && !summons.IsAnyCreatureWithEntryAlive(NPC_ANUBAR_GUARDIAN) && !summons.IsAnyCreatureWithEntryAlive(NPC_ANUBAR_VENOMANCER))
- {
- events.Reset();
- events.ScheduleEvent(EVENT_EMERGE, 5s);
- }
- }
+ void JustDied(Unit* killer) override
+ {
+ Talk(SAY_DEATH);
+ BossAI::JustDied(killer);
+ }
- void JustEngagedWith(Unit* ) override
- {
- Talk(SAY_AGGRO);
- instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
+ void KilledUnit(Unit* /*victim*/) override
+ {
+ if (!events.HasTimeUntilEvent(EVENT_KILL_TALK))
+ {
+ Talk(SAY_SLAY);
+ events.ScheduleEvent(EVENT_KILL_TALK, 6s);
+ }
+ }
- events.ScheduleEvent(EVENT_CARRION_BEETELS, 6500ms);
- events.ScheduleEvent(EVENT_LEECHING_SWARM, 20s);
- events.ScheduleEvent(EVENT_POUND, 15s);
- events.ScheduleEvent(EVENT_CLOSE_DOORS, 5s);
- }
+ void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override
+ {
+ if (!me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE))
+ return;
- void SummonHelpers(float x, float y, float z, uint32 spellId)
+ switch (summon->GetEntry())
+ {
+ case NPC_ANUBAR_GUARDIAN:
+ case NPC_ANUBAR_VENOMANCER:
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
- me->SummonCreature(spellInfo->Effects[EFFECT_0].MiscValue, x, y, z, 0.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000);
+ --_remainingLargeSummonsBeforeEmerge;
+ if (_remainingLargeSummonsBeforeEmerge == 0)
+ {
+ events.Reset();
+ events.ScheduleEvent(EVENT_EMERGE, 5s);
+ }
+ break;
}
+ default:
+ break;
+ }
+ }
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void SummonedCreatureEvade(Creature* /*summon*/) override
+ {
+ EnterEvadeMode(EVADE_REASON_OTHER);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- events.Update(diff);
- scheduler.Update(diff);
+ events.Update(diff);
+ scheduler.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- switch (events.ExecuteEvent())
+ switch (events.ExecuteEvent())
+ {
+ case EVENT_CLOSE_DOORS:
+ BossAI::_JustEngagedWith();
+ break;
+ case EVENT_CARRION_BEETLES:
+ DoCastSelf(SPELL_CARRION_BEETLES);
+ events.ScheduleEvent(EVENT_CARRION_BEETLES, 25s, 0, PHASE_EMERGED);
+ break;
+ case EVENT_LEECHING_SWARM:
+ Talk(SAY_LOCUST);
+ DoCastSelf(SPELL_LEECHING_SWARM);
+ events.ScheduleEvent(EVENT_LEECHING_SWARM, 20s, 0, PHASE_EMERGED);
+ break;
+ case EVENT_POUND:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 10.0f))
{
- case EVENT_CLOSE_DOORS:
- _JustEngagedWith();
- break;
- case EVENT_CARRION_BEETELS:
- me->CastSpell(me, SPELL_CARRION_BEETLES, false);
- events.ScheduleEvent(EVENT_CARRION_BEETELS, 25s);
- break;
- case EVENT_LEECHING_SWARM:
- Talk(SAY_LOCUST);
- me->CastSpell(me, SPELL_LEECHING_SWARM, false);
- events.ScheduleEvent(EVENT_LEECHING_SWARM, 20s);
- break;
- case EVENT_POUND:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 10.0f))
- {
- me->CastSpell(me, SPELL_SELF_ROOT, true);
- me->DisableRotate(true);
- me->SendMovementFlagUpdate();
- events.ScheduleEvent(EVENT_ENABLE_ROTATE, 3300ms);
- me->CastSpell(target, SPELL_POUND, false);
- }
- events.ScheduleEvent(EVENT_POUND, 18s);
- break;
- case EVENT_ENABLE_ROTATE:
- me->RemoveAurasDueToSpell(SPELL_SELF_ROOT);
- me->DisableRotate(false);
- break;
- case EVENT_EMERGE:
- me->CastSpell(me, SPELL_EMERGE, true);
- me->RemoveAura(SPELL_SUBMERGE);
- me->RemoveAura(SPELL_IMPALE_PERIODIC);
- me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
- events.ScheduleEvent(EVENT_CARRION_BEETELS, 6500ms);
- events.ScheduleEvent(EVENT_LEECHING_SWARM, 20s);
- events.ScheduleEvent(EVENT_POUND, 15s);
- break;
- case EVENT_SUMMON_ASSASSINS:
- SummonHelpers(509.32f, 247.42f, 239.48f, SPELL_SUMMON_ASSASSIN);
- SummonHelpers(589.51f, 240.19f, 236.0f, SPELL_SUMMON_ASSASSIN);
- break;
- case EVENT_SUMMON_DARTER:
- SummonHelpers(509.32f, 247.42f, 239.48f, SPELL_SUMMON_DARTER);
- SummonHelpers(589.51f, 240.19f, 236.0f, SPELL_SUMMON_DARTER);
- break;
- case EVENT_SUMMON_GUARDIAN:
- SummonHelpers(550.34f, 316.00f, 234.30f, SPELL_SUMMON_GUARDIAN);
- break;
- case EVENT_SUMMON_VENOMANCER:
- _summonedMinions = true;
- SummonHelpers(550.34f, 316.00f, 234.30f, SPELL_SUMMON_VENOMANCER);
- break;
+ DoCastSelf(SPELL_SELF_ROOT, true);
+ me->DisableRotate(true);
+ me->SendMovementFlagUpdate();
+ events.ScheduleEvent(EVENT_ENABLE_ROTATE, 3300ms);
+ DoCast(target, SPELL_POUND);
}
+ events.ScheduleEvent(EVENT_POUND, 18s);
+ break;
+ case EVENT_ENABLE_ROTATE:
+ me->RemoveAurasDueToSpell(SPELL_SELF_ROOT);
+ me->DisableRotate(false);
+ break;
+ case EVENT_EMERGE:
+ me->RemoveAurasDueToSpell(SPELL_SUBMERGE);
+ me->RemoveAurasDueToSpell(SPELL_IMPALE_PERIODIC);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ DoCastSelf(SPELL_EMERGE);
+ ScheduleEmerged();
+ break;
+ case EVENT_SUMMON_GUARDIAN:
+ if (Creature* trigger = ObjectAccessor::GetCreature(*me, _guardianTriggerGUID))
+ trigger->CastSpell(trigger, SPELL_SUMMON_GUARDIAN, true, nullptr, nullptr, me->GetGUID());
+ break;
+ case EVENT_SUMMON_VENOMANCER:
+ if (Creature* trigger = ObjectAccessor::GetCreature(*me, _guardianTriggerGUID))
+ trigger->CastSpell(trigger, SPELL_SUMMON_VENOMANCER, true, nullptr, nullptr, me->GetGUID());
+ break;
+ case EVENT_SUMMON_DARTER:
+ if (Creature* trigger = ObjectAccessor::GetCreature(*me, Acore::Containers::SelectRandomContainerElement(_balconySummons)))
+ trigger->CastSpell(trigger, SPELL_SUMMON_DARTER, true, nullptr, nullptr, me->GetGUID());
+ break;
+ case EVENT_SUMMON_ASSASSINS:
+ if (Creature* trigger = ObjectAccessor::GetCreature(*me, Acore::Containers::SelectRandomContainerElement(_balconySummons)))
+ trigger->CastSpell(trigger, SPELL_SUMMON_ASSASSIN, true, nullptr, nullptr, me->GetGUID());
+ if (Creature* trigger = ObjectAccessor::GetCreature(*me, Acore::Containers::SelectRandomContainerElement(_balconySummons)))
+ trigger->CastSpell(trigger, SPELL_SUMMON_ASSASSIN, true, nullptr, nullptr, me->GetGUID());
+ break;
+ default:
+ break;
+ }
- if (!me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE))
- DoMeleeAttackIfReady();
- }
+ if (!me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE))
+ DoMeleeAttackIfReady();
+ }
- private:
- bool _intro;
- bool _summonedMinions;
- };
+ void DamageTaken(Unit* attacker, uint32& damage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask) override
+ {
+ if (me->HasAura(SPELL_SUBMERGE) && damage >= me->GetHealth())
+ damage = me->GetHealth() - 1;
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetAzjolNerubAI<boss_anub_arakAI>(creature);
- }
+ BossAI::DamageTaken(attacker, damage, damagetype, damageSchoolMask);
+ }
+
+ private:
+ bool _intro;
+ uint8 _submergePhase;
+ uint8 _remainingLargeSummonsBeforeEmerge;
+ ObjectGuid _guardianTriggerGUID;
+ SummonList _balconySummons;
};
-class spell_azjol_nerub_carrion_beetels : public AuraScript
+class spell_azjol_nerub_carrion_beetles : public AuraScript
{
- PrepareAuraScript(spell_azjol_nerub_carrion_beetels)
+ PrepareAuraScript(spell_azjol_nerub_carrion_beetles)
- void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
+ void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
{
// Xinef: 2 each second
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_CARRION_BEETLES, true);
@@ -280,7 +404,7 @@ class spell_azjol_nerub_carrion_beetels : public AuraScript
void Register() override
{
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_azjol_nerub_carrion_beetels::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_azjol_nerub_carrion_beetles::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
@@ -288,7 +412,7 @@ class spell_azjol_nerub_pound : public SpellScript
{
PrepareSpellScript(spell_azjol_nerub_pound);
- void HandleApplyAura(SpellEffIndex /*effIndex*/)
+ void HandleApplyAura(SpellEffIndex /*effIndex*/)
{
if (Unit* unitTarget = GetHitUnit())
GetCaster()->CastSpell(unitTarget, SPELL_POUND_DAMAGE, true);
@@ -320,8 +444,8 @@ class spell_azjol_nerub_impale_summon : public SpellScript
void AddSC_boss_anub_arak()
{
- new boss_anub_arak();
- RegisterSpellScript(spell_azjol_nerub_carrion_beetels);
+ RegisterAzjolNerubCreatureAI(boss_anub_arak);
+ RegisterSpellScript(spell_azjol_nerub_carrion_beetles);
RegisterSpellScript(spell_azjol_nerub_pound);
RegisterSpellScript(spell_azjol_nerub_impale_summon);
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
index f3f9396ba0..37e2542a24 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
@@ -111,7 +111,7 @@ public:
uint32 GetData(uint32 data) const override
{
if (data == me->GetEntry())
- return !me->isActiveObject() || events.GetNextEventTime(EVENT_HADRONOX_MOVE4) != 0;
+ return !me->isActiveObject() || events.HasTimeUntilEvent(EVENT_HADRONOX_MOVE4) ? 1 : 0;
return 0;
}
@@ -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
@@ -258,7 +258,7 @@ public:
{
if (summon->GetEntry() != me->GetEntry())
{
- summon->GetMotionMaster()->MovePoint(0, *me, false);
+ summon->GetMotionMaster()->MovePoint(0, *me, FORCED_MOVEMENT_NONE, 0.f, false);
summon->GetMotionMaster()->MoveFollow(me, 0.1f, 0.0f + M_PI * 0.3f * summons.size());
}
summons.Summon(summon);
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp
index 9d6616db97..ef6372c788 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp
@@ -25,17 +25,18 @@
DoorData const doorData[] =
{
- { GO_KRIKTHIR_DOORS, DATA_KRIKTHIR, DOOR_TYPE_PASSAGE },
- { GO_ANUBARAK_DOORS1, DATA_ANUBARAK_EVENT, DOOR_TYPE_ROOM },
- { GO_ANUBARAK_DOORS2, DATA_ANUBARAK_EVENT, DOOR_TYPE_ROOM },
- { GO_ANUBARAK_DOORS3, DATA_ANUBARAK_EVENT, DOOR_TYPE_ROOM },
- { 0, 0, DOOR_TYPE_ROOM }
+ { GO_KRIKTHIR_DOORS, DATA_KRIKTHIR, DOOR_TYPE_PASSAGE },
+ { GO_ANUBARAK_DOORS1, DATA_ANUBARAK, DOOR_TYPE_ROOM },
+ { GO_ANUBARAK_DOORS2, DATA_ANUBARAK, DOOR_TYPE_ROOM },
+ { GO_ANUBARAK_DOORS3, DATA_ANUBARAK, DOOR_TYPE_ROOM },
+ { 0, 0, DOOR_TYPE_ROOM }
};
ObjectData const creatureData[] =
{
{ NPC_KRIKTHIR_THE_GATEWATCHER, DATA_KRIKTHIR },
{ NPC_HADRONOX, DATA_HADRONOX },
+ { NPC_ANUBARAK, DATA_ANUBARAK },
{ 0, 0 }
};
@@ -53,7 +54,7 @@ BossBoundaryData const boundaries =
{
{ DATA_KRIKTHIR, new RectangleBoundary(400.0f, 580.0f, 623.5f, 810.0f) },
{ DATA_HADRONOX, new ZRangeBoundary(666.0f, 776.0f) },
- { DATA_ANUBARAK_EVENT, new CircleBoundary(Position(550.6178f, 253.5917f), 26.0f) }
+ { DATA_ANUBARAK, new CircleBoundary(Position(550.6178f, 253.5917f), 32.0f) }
};
class instance_azjol_nerub : public InstanceMapScript
diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_herald_volazj.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_herald_volazj.cpp
index fa1a998b0d..e1b0018ef7 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_herald_volazj.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_herald_volazj.cpp
@@ -77,51 +77,52 @@ enum Misc
DATA_SET_INSANITY_PHASE = 1,
};
-enum Events
-{
- EVENT_HERALD_MIND_FLAY = 1,
- EVENT_HERALD_SHADOW,
- EVENT_HERALD_SHIVER,
-};
-
const std::array<uint32, MAX_INSANITY_TARGETS> InsanitySpells = { SPELL_INSANITY_PHASING_1, SPELL_INSANITY_PHASING_2, SPELL_INSANITY_PHASING_3, SPELL_INSANITY_PHASING_4, SPELL_INSANITY_PHASING_5 };
struct boss_volazj : public BossAI
{
boss_volazj(Creature* pCreature) : BossAI(pCreature, DATA_HERALD_VOLAZJ),
- insanityTimes(0),
insanityPhase(false)
{ }
- void InitializeAI() override
- {
- BossAI::InitializeAI();
- // Visible for all players in insanity
- me->SetPhaseMask((1 | 16 | 32 | 64 | 128 | 256), true);
- }
-
void Reset() override
{
_Reset();
- insanityTimes = 0;
insanityPhase = false;
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetControlled(false, UNIT_STATE_STUNNED);
ResetPlayersPhaseMask();
instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_QUICK_DEMISE_START_EVENT);
+ me->SetPhaseMask((1 | 16 | 32 | 64 | 128 | 256), true);
+
+ ScheduleHealthCheckEvent({ 66, 33 }, [&]{
+ scheduler.CancelAll();
+ DoCastSelf(SPELL_INSANITY);
+ }, false);
+ }
+
+ void ScheduleTasks() override
+ {
+ ScheduleTimedEvent(8s, [&] {
+ DoCastVictim(SPELL_MIND_FLAY);
+ }, 20s);
+
+ ScheduleTimedEvent(5s, [&] {
+ DoCastVictim(SPELL_SHADOW_BOLT_VOLLEY);
+ }, 5s);
+
+ ScheduleTimedEvent(15s, [&] {
+ DoCastRandomTarget(SPELL_SHIVER);
+ }, 15s);
}
void JustEngagedWith(Unit* /*who*/) override
{
_JustEngagedWith();
- events.ScheduleEvent(EVENT_HERALD_MIND_FLAY, 8s);
- events.ScheduleEvent(EVENT_HERALD_SHADOW, 5s);
- events.ScheduleEvent(EVENT_HERALD_SHIVER, 15s);
Talk(SAY_AGGRO);
DoCastSelf(SPELL_WHISPER_AGGRO);
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_QUICK_DEMISE_START_EVENT);
- me->SetInCombatWithZone();
}
void JustDied(Unit* /*killer*/) override
@@ -184,36 +185,13 @@ struct boss_volazj : public BossAI
}
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damagetype*/, SpellSchoolMask /*damageSchoolMask*/) override
- {
- // Do not perform insanity recast if boss is casting Insanity already
- if (me->FindCurrentSpellBySpellId(SPELL_INSANITY))
- {
- return;
- }
-
- // First insanity
- if (insanityTimes == 0 && me->HealthBelowPctDamaged(66, damage))
- {
- DoCastSelf(SPELL_INSANITY, false);
- ++insanityTimes;
- }
- // Second insanity
- else if (insanityTimes == 1 && me->HealthBelowPctDamaged(33, damage))
- {
- me->InterruptNonMeleeSpells(false);
- DoCastSelf(SPELL_INSANITY, false);
- ++insanityTimes;
- }
- }
-
void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
- {
return;
- }
+
+ scheduler.Update(diff);
if (insanityPhase)
{
@@ -226,53 +204,13 @@ struct boss_volazj : public BossAI
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetControlled(false, UNIT_STATE_STUNNED);
me->RemoveAurasDueToSpell(INSANITY_VISUAL);
- }
-
- events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- {
- return;
- }
-
- while (uint32 const eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_HERALD_MIND_FLAY:
- {
- DoCastVictim(SPELL_MIND_FLAY, false);
- events.Repeat(20s);
- break;
- }
- case EVENT_HERALD_SHADOW:
- {
- DoCastVictim(SPELL_SHADOW_BOLT_VOLLEY, false);
- events.Repeat(5s);
- break;
- }
- case EVENT_HERALD_SHIVER:
- {
- if (Unit* pTarget = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true))
- {
- DoCast(pTarget, SPELL_SHIVER, false);
- }
-
- events.Repeat(15s);
- break;
- }
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- {
- return;
- }
+ ScheduleTasks();
}
DoMeleeAttackIfReady();
}
private:
- uint8 insanityTimes;
bool insanityPhase; // Indicates if boss enter to insanity phase
uint32 GetPlrInsanityAuraId(uint32 phaseMask) const
@@ -312,6 +250,7 @@ private:
bool CheckPhaseMinions()
{
summons.RemoveNotExisting();
+
if (summons.empty())
{
ResetPlayersPhaseMask();
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 574db03388..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
@@ -173,7 +170,7 @@ struct boss_jedoga_shadowseeker : public BossAI
me->AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD);
me->SetDisableGravity(true);
me->SetHover(true);
- me->GetMotionMaster()->MovePoint(POINT_INITIAL, JedogaPosition[0], false);
+ me->GetMotionMaster()->MovePoint(POINT_INITIAL, JedogaPosition[0], FORCED_MOVEMENT_NONE, 0.f, false);
_Reset();
events.SetPhase(PHASE_NORMAL);
@@ -247,7 +244,7 @@ struct boss_jedoga_shadowseeker : public BossAI
DespawnOOCSummons();
DoCastSelf(SPELL_HOVER_FALL);
me->GetMotionMaster()->MoveIdle();
- me->GetMotionMaster()->MovePoint(POINT_DOWN, JedogaPosition[1], false);
+ me->GetMotionMaster()->MovePoint(POINT_DOWN, JedogaPosition[1], FORCED_MOVEMENT_NONE, 0.f, false);
if (!combatSummonsSummoned)
{
@@ -397,7 +394,7 @@ struct boss_jedoga_shadowseeker : public BossAI
volunteerWork = false;
me->GetMotionMaster()->Clear();
DoCastSelf(SPELL_HOVER_FALL);
- me->GetMotionMaster()->MovePoint(POINT_DOWN, JedogaPosition[1], false);
+ me->GetMotionMaster()->MovePoint(POINT_DOWN, JedogaPosition[1], FORCED_MOVEMENT_NONE, 0.f, false);
}
}
break;
@@ -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);
@@ -504,7 +501,7 @@ struct boss_jedoga_shadowseeker : public BossAI
summons.DespawnEntry(NPC_JEDOGA_CONTROLLER);
DoCastSelf(SPELL_HOVER_FALL);
me->GetMotionMaster()->Clear();
- me->GetMotionMaster()->MovePoint(POINT_DOWN, JedogaPosition[1], false);
+ me->GetMotionMaster()->MovePoint(POINT_DOWN, JedogaPosition[1], FORCED_MOVEMENT_NONE, 0.f, false);
break;
}
case EVENT_JEDGA_START_RITUAL:
@@ -663,7 +660,7 @@ struct npc_twilight_volunteer : public ScriptedAI
me->GetMotionMaster()->Clear();
me->SetHomePosition(JedogaPosition[2]);
me->SetWalk(true);
- me->GetMotionMaster()->MovePoint(POINT_RITUAL, JedogaPosition[2], false);
+ me->GetMotionMaster()->MovePoint(POINT_RITUAL, JedogaPosition[2], FORCED_MOVEMENT_NONE, 0.f, false);
if (Creature* jedoga = pInstance->GetCreature(DATA_JEDOGA_SHADOWSEEKER))
{
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 e0c14e515f..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,
@@ -583,7 +583,7 @@ public:
}
}
- events.RepeatEvent((below11PctReached ? urand(1400, 2000) : urand(5000, 20000)));
+ events.Repeat((below11PctReached ? randtime(1400ms, 2s) : randtime(5s, 20s)));
break;
}
case EVENT_SARTHARION_BERSERK:
@@ -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);
}
}
@@ -1086,7 +1086,7 @@ public:
Talk(SAY_TENEBRON_BREATH);
}
DoCastVictim(SPELL_SHADOW_BREATH, false);
- events.RepeatEvent(17500);
+ events.Repeat(17500ms);
break;
}
case EVENT_MINIBOSS_SHADOW_FISSURE:
@@ -1095,7 +1095,7 @@ public:
{
DoCast(target, SPELL_SHADOW_FISSURE, false);
}
- events.RepeatEvent(22500);
+ events.Repeat(22500ms);
break;
}
case EVENT_MINIBOSS_OPEN_PORTAL:
@@ -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);
}
}
@@ -1270,7 +1270,7 @@ public:
}
DoCastVictim(SPELL_SHADOW_BREATH, false);
- events.RepeatEvent(17500);
+ events.Repeat(17500ms);
break;
}
case EVENT_MINIBOSS_SHADOW_FISSURE:
@@ -1279,7 +1279,7 @@ public:
{
DoCast(target, SPELL_SHADOW_FISSURE, false);
}
- events.RepeatEvent(22500);
+ events.Repeat(22500ms);
break;
}
case EVENT_MINIBOSS_OPEN_PORTAL:
@@ -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);
}
}
@@ -1480,7 +1480,7 @@ public:
{
if (param == ACTION_SWITCH_PHASE)
{
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp
index 1e693b33a5..6d18a16023 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp
@@ -152,7 +152,7 @@ public:
if (action == ACTION_INTRO_BALTHARUS && !_introDone)
{
_introDone = true;
- me->m_Events.AddEvent(new DelayedTalk(me, SAY_BALTHARUS_INTRO), me->m_Events.CalculateTime(6000));
+ me->m_Events.AddEventAtOffset(new DelayedTalk(me, SAY_BALTHARUS_INTRO), 6s);
}
else if (action == ACTION_CLONE)
{
@@ -191,7 +191,7 @@ public:
void KilledUnit(Unit* /*victim*/) override
{
- if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
+ if (!events.HasTimeUntilEvent(EVENT_KILL_TALK))
{
Talk(SAY_KILL);
events.ScheduleEvent(EVENT_KILL_TALK, 6s);
@@ -204,7 +204,7 @@ public:
summon->SetHealth(me->GetHealth());
summon->CastSpell(summon, SPELL_SPAWN_EFFECT, true);
summon->SetReactState(REACT_PASSIVE);
- summon->m_Events.AddEvent(new RestoreFight(summon), summon->m_Events.CalculateTime(2000));
+ summon->m_Events.AddEventAtOffset(new RestoreFight(summon), 2s);
}
void UpdateAI(uint32 diff) override
@@ -379,7 +379,7 @@ public:
// Xinef: after soft reset npc is no longer present
if (me->GetInstanceScript()->GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE)
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
void DoAction(int32 action) override
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
index ac9a9d7343..1707433e6c 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
@@ -136,7 +136,7 @@ public:
void KilledUnit(Unit* /*victim*/) override
{
- if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
+ if (!events.HasTimeUntilEvent(EVENT_KILL_TALK))
{
Talk(SAY_KILL);
events.ScheduleEvent(EVENT_KILL_TALK, 6s);
@@ -210,7 +210,8 @@ public:
{
_lavaGoutCount = 0;
AddWaypoints();
- Start(true, true);
+ me->SetWalk(false);
+ Start(true);
}
void JustEngagedWith(Unit* /*who*/) override
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
index 6ff00560d0..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;
}
@@ -310,7 +310,7 @@ public:
void KilledUnit(Unit* victim) override
{
- if (victim->IsPlayer() && events.GetNextEventTime(EVENT_KILL_TALK) == 0)
+ if (victim->IsPlayer() && !events.HasTimeUntilEvent(EVENT_KILL_TALK))
{
Talk(SAY_KILL);
events.ScheduleEvent(EVENT_KILL_TALK, 6s);
@@ -335,7 +335,7 @@ public:
void DamageTaken(Unit* attacker, uint32& damage, DamageEffectType, SpellSchoolMask) override
{
- if (events.GetNextEventTime(EVENT_CHECK_HEALTH) != 0)
+ if (events.HasTimeUntilEvent(EVENT_CHECK_HEALTH))
return;
if (!attacker || !me->InSamePhase(attacker))
@@ -477,7 +477,7 @@ public:
void KilledUnit(Unit* victim) override
{
- if (victim->IsPlayer() && _events.GetNextEventTime(EVENT_KILL_TALK) == 0)
+ if (victim->IsPlayer() && !_events.HasTimeUntilEvent(EVENT_KILL_TALK))
{
Talk(SAY_KILL);
_events.ScheduleEvent(EVENT_KILL_TALK, 6s);
@@ -598,7 +598,7 @@ public:
void SetData(uint32 id, uint32 value) override
{
- if (_events.GetNextEventTime(EVENT_CHECK_CORPOREALITY) == 0)
+ if (!events.HasTimeUntilEvent(EVENT_CHECK_CORPOREALITY))
return;
if (id == DATA_MATERIAL_DAMAGE_TAKEN)
@@ -1120,7 +1120,7 @@ class spell_halion_twilight_realm_aura : public AuraScript
target->RemoveAurasDueToSpell(SPELL_FIERY_COMBUSTION, ObjectGuid::Empty, 0, AURA_REMOVE_BY_ENEMY_SPELL);
if (!GetTarget()->IsPlayer())
return;
- GetTarget()->m_Events.AddEvent(new SendEncounterUnit(GetTarget()->ToPlayer()), GetTarget()->m_Events.CalculateTime(500));
+ GetTarget()->m_Events.AddEventAtOffset(new SendEncounterUnit(GetTarget()->ToPlayer()), 500ms);
}
void Register() override
@@ -1153,7 +1153,7 @@ class spell_halion_leave_twilight_realm_aura : public AuraScript
if (!GetTarget()->IsPlayer())
return;
- GetTarget()->m_Events.AddEvent(new SendEncounterUnit(GetTarget()->ToPlayer()), GetTarget()->m_Events.CalculateTime(500));
+ GetTarget()->m_Events.AddEventAtOffset(new SendEncounterUnit(GetTarget()->ToPlayer()), 500ms);
}
void Register() override
@@ -1322,7 +1322,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
};
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp
index 5396265952..7b6aa9e8f5 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp
@@ -121,7 +121,7 @@ public:
void KilledUnit(Unit* /*victim*/) override
{
- if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
+ if (!events.HasTimeUntilEvent(EVENT_KILL_TALK))
{
Talk(SAY_KILL);
events.ScheduleEvent(EVENT_KILL_TALK, 6s);
@@ -144,7 +144,7 @@ public:
me->SetReactState(REACT_PASSIVE);
me->AttackStop();
me->SetDisableGravity(true);
- me->GetMotionMaster()->MovePoint(POINT_TAKEOFF, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 6.0f, false);
+ me->GetMotionMaster()->MovePoint(POINT_TAKEOFF, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 6.0f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false);
events.ScheduleEvent(EVENT_FLIGHT, 50s);
events.DelayEvents(15s);
events.ScheduleEvent(EVENT_AIR_MOVEMENT, 2s);
@@ -163,10 +163,10 @@ public:
events.ScheduleEvent(EVENT_FLAME_BREATH, 20s, 30s);
break;
case EVENT_AIR_MOVEMENT:
- me->GetMotionMaster()->MovePoint(POINT_FLIGHT, 3155.51f, 683.844f, 95.0f, false);
+ me->GetMotionMaster()->MovePoint(POINT_FLIGHT, 3155.51f, 683.844f, 95.0f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false);
break;
case EVENT_LAND_BACK:
- me->GetMotionMaster()->MovePoint(POINT_LAND, 3151.07f, 636.443f, 80.0f, false);
+ me->GetMotionMaster()->MovePoint(POINT_LAND, 3151.07f, 636.443f, 80.0f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false);
break;
case EVENT_LAND_GROUND:
me->SetReactState(REACT_AGGRESSIVE);
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 47f6266c65..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,
@@ -125,8 +112,8 @@ public:
void JustEngagedWith(Unit* /*who*/) override
{
events.Reset();
- events.ScheduleEvent(EVENT_SPELL_RADIANCE, 16000);
- events.ScheduleEvent(EVENT_SPELL_HAMMER_RIGHTEOUS, 25000);
+ events.ScheduleEvent(EVENT_SPELL_RADIANCE, 16s);
+ events.ScheduleEvent(EVENT_SPELL_HAMMER_RIGHTEOUS, 25s);
Talk(SAY_EADRIC_AGGRO);
me->CastSpell(me, SPELL_VENGEANCE, false);
if (pInstance)
@@ -409,7 +396,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- me->DespawnOrUnsummon(20000);
+ me->DespawnOrUnsummon(20s);
if (pInstance)
if (Creature* paletress = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_PALETRESS)))
paletress->AI()->DoAction(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
@@ -607,7 +587,8 @@ public:
break;
}
- Start(false, true);
+ me->SetWalk(false);
+ Start(false);
uiWaypoint = uiType;
}
@@ -618,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);
}
}
@@ -638,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;
}
}
@@ -690,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;
@@ -710,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;
}
@@ -722,7 +703,7 @@ public:
void JustDied(Unit* /*pKiller*/) override
{
- me->DespawnOrUnsummon(10000);
+ me->DespawnOrUnsummon(10s);
if (pInstance)
pInstance->SetData(DATA_ARGENT_SOLDIER_DEFEATED, 0);
}
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 47b89b1624..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
{
@@ -131,7 +115,7 @@ public:
void EnterEvadeMode(EvadeReason why) override
{
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
ScriptedAI::EnterEvadeMode(why);
}
@@ -182,7 +166,7 @@ public:
events.Reset();
events.ScheduleEvent(EVENT_ANNOUNCER_SAY_ZOMBIE, 2500ms);
events.ScheduleEvent(EVENT_SPELL_PLAGUE_STRIKE, 7s, 9s);
- events.ScheduleEvent(EVENT_SPELL_ICY_TOUCH, 3500ms, 7000ms);
+ events.ScheduleEvent(EVENT_SPELL_ICY_TOUCH, 3500ms, 7s);
events.ScheduleEvent(EVENT_SPELL_DEATH_RESPITE, 13s, 15s);
events.ScheduleEvent(EVENT_SPELL_OBLITERATE, 11s, 19s);
}
@@ -214,7 +198,7 @@ public:
events.Reset();
events.ScheduleEvent(EVENT_SPELL_PLAGUE_STRIKE, 7s, 9s);
- events.ScheduleEvent(EVENT_SPELL_ICY_TOUCH, 3500ms, 7000ms);
+ events.ScheduleEvent(EVENT_SPELL_ICY_TOUCH, 3500ms, 7s);
events.ScheduleEvent(EVENT_SPELL_OBLITERATE, 11s, 19s);
events.ScheduleEvent(EVENT_SPELL_DESECRATION, 2s, 3s);
break;
@@ -339,7 +323,7 @@ public:
void Reset() override
{
- Start(false, true, ObjectGuid::Empty, nullptr);
+ Start(false, ObjectGuid::Empty, nullptr);
SetDespawnAtEnd(true);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetImmuneToAll(true);
@@ -420,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())
@@ -467,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;
}
@@ -482,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 649a60c6f2..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;
}
};
@@ -246,10 +229,16 @@ public:
events.Reset();
}
+ void MoveInLineOfSight(Unit* who) override
+ {
+ if (pInstance && pInstance->GetData(DATA_INSTANCE_PROGRESS) >= INSTANCE_PROGRESS_GRAND_CHAMPIONS_REACHED_DEST)
+ ScriptedAI::MoveInLineOfSight(who);
+ }
+
void JustEngagedWith(Unit* /*who*/) override
{
events.Reset();
- events.ScheduleEvent(EVENT_MOUNT_CHARGE, 2500ms, 4000ms);
+ events.ScheduleEvent(EVENT_MOUNT_CHARGE, 2500ms, 4s);
events.ScheduleEvent(EVENT_SHIELD_BREAKER, 5s, 8s);
events.ScheduleEvent(EVENT_THRUST, 3s, 5s);
me->CastSpell(me, SPELL_TRAMPLE_AURA, true);
@@ -305,7 +294,7 @@ public:
me->CastSpell(target, SPELL_MINIONS_CHARGE, false);
}
}
- events.Repeat(4500ms, 6000ms);
+ events.Repeat(4500ms, 6s);
}
break;
case EVENT_SHIELD_BREAKER:
@@ -341,7 +330,7 @@ public:
void JustDied(Unit* /*pKiller*/) override
{
me->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0);
- me->DespawnOrUnsummon(10000);
+ me->DespawnOrUnsummon(10s);
if (pInstance)
pInstance->SetData(DATA_MOUNT_DIED, 0);
}
@@ -366,7 +355,7 @@ public:
me->CastSpell(me, SPELL_BOSS_DEFEND_PERIODIC, true);
events.Reset();
- events.ScheduleEvent(EVENT_MOUNT_CHARGE, 2500ms, 4000ms);
+ events.ScheduleEvent(EVENT_MOUNT_CHARGE, 2500ms, 4s);
events.ScheduleEvent(EVENT_SHIELD_BREAKER, 5s, 8s);
events.ScheduleEvent(EVENT_THRUST, 3s, 5s);
@@ -410,6 +399,12 @@ public:
}
}
+ void MoveInLineOfSight(Unit* who) override
+ {
+ if (pInstance && pInstance->GetData(DATA_INSTANCE_PROGRESS) >= INSTANCE_PROGRESS_GRAND_CHAMPIONS_REACHED_DEST)
+ npc_escortAI::MoveInLineOfSight(who);
+ }
+
void JustEngagedWith(Unit* /*who*/) override
{
if (pInstance && pInstance->GetData(DATA_INSTANCE_PROGRESS) == INSTANCE_PROGRESS_CHAMPIONS_UNMOUNTED )
@@ -537,7 +532,7 @@ public:
return;
}
- Start(false, true);
+ Start(false);
}
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
@@ -628,7 +623,7 @@ public:
me->CastSpell(me, SPELL_BOSS_DEFEND_PERIODIC, true);
me->SetRegeneratingHealth(true);
events.Reset();
- events.ScheduleEvent(EVENT_MOUNT_CHARGE, 2500ms, 4000ms);
+ events.ScheduleEvent(EVENT_MOUNT_CHARGE, 2500ms, 4s);
events.ScheduleEvent(EVENT_SHIELD_BREAKER, 5s, 8s);
events.ScheduleEvent(EVENT_THRUST, 3s, 5s);
me->SetReactState(REACT_AGGRESSIVE);
@@ -754,7 +749,7 @@ public:
me->CastSpell(target, SPELL_MINIONS_CHARGE, false);
}
}
- events.Repeat(4500ms, 6000ms);
+ events.Repeat(4500ms, 6s);
}
break;
case EVENT_SHIELD_BREAKER:
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp
index 195d626a73..1f3cc4eaf4 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp
@@ -23,7 +23,6 @@
#include "trial_of_the_champion.h"
const Position SpawnPosition = {746.67f, 684.08f, 412.5f, 4.65f};
-#define CLEANUP_CHECK_INTERVAL 5000
/**
* @todo: Missing dialog/RP (already populated in DB) && spawns (can use ToC25 locations?) for:
@@ -88,7 +87,7 @@ public:
VehicleList.clear();
CLEANED = false;
events.Reset();
- events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0);
+ events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0ms);
Counter = 0;
temp1 = 0;
temp2 = 0;
@@ -268,7 +267,7 @@ public:
if (DoNeedCleanup(player))
InstanceCleanup();
- events.RescheduleEvent(EVENT_CHECK_PLAYERS, CLEANUP_CHECK_INTERVAL);
+ events.RescheduleEvent(EVENT_CHECK_PLAYERS, 5s);
}
bool DoNeedCleanup(Player* ignoredPlayer = nullptr)
@@ -443,7 +442,7 @@ public:
Counter = 0;
SaveToDB();
events.Reset();
- events.RescheduleEvent(EVENT_CHECK_PLAYERS, CLEANUP_CHECK_INTERVAL);
+ events.RescheduleEvent(EVENT_CHECK_PLAYERS, 5s);
CLEANED = true;
}
@@ -785,7 +784,7 @@ public:
{
InstanceCleanup();
}
- events.RepeatEvent(CLEANUP_CHECK_INTERVAL);
+ events.Repeat(5s);
}
break;
case EVENT_SUMMON_GRAND_CHAMPION_1:
@@ -812,7 +811,7 @@ public:
while( number == temp1 || number == temp2 );
DoSummonGrandChampion(number, 2);
HandleGameObject(GO_MainGateGUID, true);
- events.ScheduleEvent(EVENT_CLOSE_GATE, 6000);
+ events.ScheduleEvent(EVENT_CLOSE_GATE, 6s);
}
break;
case EVENT_CLOSE_GATE:
@@ -1129,7 +1128,7 @@ public:
if (Creature* boss = instance->GetCreature(NPC_ArgentChampionGUID))
{
boss->GetMotionMaster()->MovePoint(0, SpawnPosition);
- boss->DespawnOrUnsummon(3000);
+ boss->DespawnOrUnsummon(3s);
}
}
break;
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 e7762a71be..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,8 +502,8 @@ 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->m_Events.AddEvent(new HideNpcEvent(*me), me->m_Events.CalculateTime(5000));
+ me->CastSpell(me, SPELL_TRAITOR_KING, true);
+ me->m_Events.AddEventAtOffset(new HideNpcEvent(*me), 5s);
}
bool CanAIAttack(Unit const* target) const override
@@ -574,7 +575,7 @@ public:
if (spell->Id == SPELL_SPIKE_FAIL)
{
me->RemoveAllAuras();
- me->DespawnOrUnsummon(1500);
+ me->DespawnOrUnsummon(1500ms);
}
}
@@ -655,7 +656,7 @@ public:
me->NearTeleportTo(target->GetPositionX() + cos(o) * 5.0f, target->GetPositionY() + std::sin(o) * 5.0f, target->GetPositionZ() + 0.6f, target->GetOrientation());
AttackStart(target);
me->GetMotionMaster()->MoveChase(target);
- events.DelayEvents(3000);
+ events.DelayEvents(3s);
}
}
@@ -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);
@@ -710,7 +711,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- me->m_Events.AddEvent(new HideNpcEvent(*me), me->m_Events.CalculateTime(5000));
+ me->m_Events.AddEventAtOffset(new HideNpcEvent(*me), 5s);
}
bool CanAIAttack(Unit const* target) const override
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
index 0a44e0f9d1..4cc91611a8 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
@@ -119,7 +119,7 @@ struct boss_faction_championsAI : public ScriptedAI
}
/// @todo - Convert to std::chrono
- void EventMapGCD(EventMap& e, uint32 delay, uint32 gcd = 0)
+ void EventMapGCD(EventMap& e, Milliseconds delay, uint32 gcd = 0)
{
e.DelayEventsToMax(delay, gcd);
}
@@ -316,43 +316,43 @@ public:
if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_LIFEBLOOM, 40.0f))
me->CastSpell(target, SPELL_LIFEBLOOM, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_NOURISH:
if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_NOURISH, 40.0f))
me->CastSpell(target, SPELL_NOURISH, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_REGROWTH:
if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_REGROWTH, 40.0f))
me->CastSpell(target, SPELL_REGROWTH, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_REJUVENATION:
if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_REJUVENATION, 40.0f))
me->CastSpell(target, SPELL_REJUVENATION, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_THORNS:
if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_THORNS, 30.0f))
me->CastSpell(target, SPELL_THORNS, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_TRANQUILITY:
me->CastSpell(me, SPELL_TRANQUILITY, false);
events.Repeat(2min, 3min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_BARKSKIN:
if (HealthBelowPct(50))
{
me->CastSpell(me, SPELL_BARKSKIN, false);
events.Repeat(1min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(6s);
@@ -360,7 +360,7 @@ public:
case EVENT_SPELL_NATURE_GRASP:
me->CastSpell(me, SPELL_NATURE_GRASP, false);
events.Repeat(1min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
}
@@ -445,19 +445,19 @@ public:
if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_HEALING_WAVE, 40.0f))
me->CastSpell(target, SPELL_HEALING_WAVE, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_RIPTIDE:
if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_RIPTIDE, 40.0f))
me->CastSpell(target, SPELL_RIPTIDE, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_SPIRIT_CLEANSE:
if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_SPIRIT_CLEANSE, 40.0f))
me->CastSpell(target, SPELL_SPIRIT_CLEANSE, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_HEROISM_OR_BLOODLUST:
if (me->GetEntry() == NPC_ALLIANCE_SHAMAN_RESTORATION )
@@ -465,25 +465,25 @@ public:
else
me->CastSpell((Unit*)nullptr, SPELL_BLOODLUST, true);
events.Repeat(10min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_HEX:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 20.0f, true))
me->CastSpell(target, SPELL_HEX, false);
events.Repeat(45s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_EARTH_SHIELD:
if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_EARTH_SHIELD, 40.0f))
me->CastSpell(target, SPELL_EARTH_SHIELD, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_EARTH_SHOCK:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_EARTH_SHOCK, false);
events.Repeat(5s, 10s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
}
@@ -568,14 +568,14 @@ public:
if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_HAND_OF_FREEDOM, 30.0f))
me->CastSpell(target, SPELL_HAND_OF_FREEDOM, false);
events.Repeat(25s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_BUBBLE:
if (HealthBelowPct(25))
{
me->CastSpell(me, SPELL_BUBBLE, false);
events.Repeat(5min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(10s);
@@ -584,32 +584,32 @@ public:
if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_CLEANSE, 40.0f))
me->CastSpell(target, SPELL_CLEANSE, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_FLASH_OF_LIGHT:
if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_FLASH_OF_LIGHT, 40.0f))
me->CastSpell(target, SPELL_FLASH_OF_LIGHT, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_HOLY_LIGHT:
if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_HOLY_LIGHT, 40.0f))
me->CastSpell(target, SPELL_HOLY_LIGHT, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_HOLY_SHOCK:
if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_HOLY_SHOCK, 40.0f))
me->CastSpell(target, SPELL_HOLY_SHOCK, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_HAND_OF_PROTECTION:
if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_HAND_OF_PROTECTION, 40.0f))
{
me->CastSpell(target, SPELL_HAND_OF_PROTECTION, false);
events.Repeat(5min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(10s);
@@ -619,7 +619,7 @@ public:
{
me->CastSpell(target, SPELL_HAMMER_OF_JUSTICE, false);
events.Repeat(40s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(10s);
@@ -701,32 +701,32 @@ public:
if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_RENEW, 40.0f))
me->CastSpell(target, SPELL_RENEW, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_SHIELD:
if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_SHIELD, 40.0f))
me->CastSpell(target, SPELL_SHIELD, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_FLASH_HEAL:
if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_FLASH_HEAL, 40.0f))
me->CastSpell(target, SPELL_FLASH_HEAL, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_DISPEL:
if (Unit* target = (urand(0, 1) ? SelectTarget(SelectTargetMethod::MaxThreat, 0, 30.0f, true) : SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_DISPEL, 40.0f)))
me->CastSpell(target, SPELL_DISPEL, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_MANA_BURN:
if (Unit* target = SelectEnemyCaster(false, 30.0f))
{
me->CastSpell(target, SPELL_MANA_BURN, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(6s);
@@ -736,7 +736,7 @@ public:
{
me->CastSpell((Unit*)nullptr, SPELL_PSYCHIC_SCREAM, false);
events.Repeat(30s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(6s);
@@ -825,7 +825,7 @@ public:
{
me->CastSpell(target, SPELL_SILENCE, false);
events.Repeat(45s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
}
else
@@ -835,32 +835,32 @@ public:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_VAMPIRIC_TOUCH, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_SW_PAIN:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_SW_PAIN, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_MIND_FLAY:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_MIND_FLAY, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_MIND_BLAST:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_MIND_BLAST, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_HORROR:
if (me->GetVictim() && me->GetExactDist2d(me->GetVictim()) <= 30.0f )
{
me->CastSpell(me->GetVictim(), SPELL_HORROR, false);
events.Repeat(2min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(10s);
@@ -870,7 +870,7 @@ public:
{
me->CastSpell(me, SPELL_DISPERSION, false);
events.Repeat(3min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(6s);
@@ -879,14 +879,14 @@ public:
if (Unit* target = (urand(0, 1) ? SelectTarget(SelectTargetMethod::MaxThreat, 0, 30.0f, true) : SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_DISPEL, 40.0f)))
me->CastSpell(target, SPELL_DISPEL, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_PSYCHIC_SCREAM:
if (EnemiesInRange(8.0f) >= 3 )
{
me->CastSpell((Unit*)nullptr, SPELL_PSYCHIC_SCREAM, false);
events.Repeat(30s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(6s);
@@ -989,7 +989,7 @@ public:
{
me->CastSpell((Unit*)nullptr, SPELL_HELLFIRE, false);
events.Repeat(30s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(6s);
@@ -998,43 +998,43 @@ public:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_CORRUPTION, false);
events.Repeat(10s, 20s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_CURSE_OF_AGONY:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_CURSE_OF_AGONY, false);
events.Repeat(10s, 20s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_CURSE_OF_EXHAUSTION:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_CURSE_OF_EXHAUSTION, false);
events.Repeat(10s, 20s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_FEAR:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 20.0f, true))
me->CastSpell(target, SPELL_FEAR, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_SEARING_PAIN:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_SEARING_PAIN, false);
events.Repeat(5s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_SHADOW_BOLT:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_SHADOW_BOLT, false);
events.Repeat(5s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_UNSTABLE_AFFLICTION:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_UNSTABLE_AFFLICTION, false);
events.Repeat(5s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
}
@@ -1121,20 +1121,20 @@ public:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_ARCANE_BARRAGE, false);
events.Repeat(5s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_ARCANE_BLAST:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_ARCANE_BLAST, false);
events.Repeat(5s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_ARCANE_EXPLOSION:
if (EnemiesInRange(9.0f) >= 3 )
{
me->CastSpell((Unit*)nullptr, SPELL_ARCANE_EXPLOSION, false);
events.Repeat(6s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(6s);
@@ -1144,7 +1144,7 @@ public:
{
me->CastSpell((Unit*)nullptr, SPELL_FROST_NOVA, false);
events.Repeat(15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
// blink disabled, movement not working
}
else
@@ -1155,7 +1155,7 @@ public:
{
me->CastSpell(target, SPELL_COUNTERSPELL, false);
events.Repeat(24s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(6s);
@@ -1164,14 +1164,14 @@ public:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_FROSTBOLT, false);
events.Repeat(5s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_ICE_BLOCK:
if (HealthBelowPct(25))
{
me->CastSpell(me, SPELL_ICE_BLOCK, false);
events.Repeat(5min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(6s);
@@ -1180,7 +1180,7 @@ public:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true))
me->CastSpell(target, SPELL_POLYMORPH, false);
events.Repeat(15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
}
@@ -1279,14 +1279,14 @@ public:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_AIMED_SHOT, false);
events.Repeat(5s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_DETERRENCE:
if (HealthBelowPct(25))
{
me->CastSpell(me, SPELL_DETERRENCE, false);
events.Repeat(90s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(6s);
@@ -1296,7 +1296,7 @@ public:
{
me->CastSpell(me, SPELL_DISENGAGE, false);
events.Repeat(20s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(6s);
@@ -1305,31 +1305,31 @@ public:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_EXPLOSIVE_SHOT, false);
events.Repeat(5s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_FROST_TRAP:
me->CastSpell(me, SPELL_FROST_TRAP, false);
events.Repeat(30s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_STEADY_SHOT:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_STEADY_SHOT, false);
events.Repeat(5s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_WING_CLIP:
if (me->GetVictim() && me->GetDistance2d(me->GetVictim()) <= 5.0f )
me->CastSpell(me->GetVictim(), SPELL_WING_CLIP, false);
events.Repeat(8s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_WYVERN_STING:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 35.0f, true))
{
me->CastSpell(target, SPELL_WYVERN_STING, false);
events.Repeat(1min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
}
events.Repeat(10s);
@@ -1429,7 +1429,7 @@ public:
{
me->CastSpell(me, SPELL_BARKSKIN, false);
events.Repeat(1min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(6s);
@@ -1438,48 +1438,48 @@ public:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_WRATH, false);
events.Repeat(5s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_MOONFIRE:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_MOONFIRE, false);
events.Repeat(5s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_STARFIRE:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_STARFIRE, false);
events.Repeat(5s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_INSECT_SWARM:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_INSECT_SWARM, false);
events.Repeat(5s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_ENTANGLING_ROOTS:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true))
me->CastSpell(target, SPELL_ENTANGLING_ROOTS, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_FAERIE_FIRE:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_FAERIE_FIRE, false);
events.Repeat(15s, 20s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_CYCLONE:
if (Unit* target = SelectTarget(SelectTargetMethod::MaxDistance, 0, 20.0f, true))
me->CastSpell(target, SPELL_CYCLONE, false);
events.Repeat(25s, 40s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_FORCE_OF_NATURE:
me->CastSpell((Unit*)nullptr, SPELL_FORCE_OF_NATURE, false);
events.Repeat(3min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
}
@@ -1583,7 +1583,7 @@ public:
{
me->CastSpell((Unit*)nullptr, SPELL_INTIMIDATING_SHOUT, false);
events.Repeat(2min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -1597,14 +1597,14 @@ public:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_MORTAL_STRIKE, false);
events.Repeat(6s, 8s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_CHARGE:
if (me->GetVictim() && me->GetDistance2d(me->GetVictim()) > 8.0f && me->GetDistance2d(me->GetVictim()) < 25.0f )
{
me->CastSpell(me->GetVictim(), SPELL_CHARGE, false);
events.Repeat(10s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -1614,7 +1614,7 @@ public:
{
me->CastSpell(me->GetVictim(), SPELL_DISARM, false);
events.Repeat(1min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -1629,7 +1629,7 @@ public:
{
me->CastSpell(me->GetVictim(), SPELL_OVERPOWER, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -1644,7 +1644,7 @@ public:
{
me->CastSpell(me->GetVictim(), SPELL_SUNDER_ARMOR, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -1659,7 +1659,7 @@ public:
{
me->CastSpell(me->GetVictim(), SPELL_SHATTERING_THROW, false);
events.Repeat(5min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(6s);
@@ -1674,7 +1674,7 @@ public:
{
me->CastSpell(me, SPELL_RETALIATION, false);
events.Repeat(5min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -1760,7 +1760,7 @@ public:
{
me->CastSpell(me->GetVictim(), SPELL_CHAINS_OF_ICE, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -1770,7 +1770,7 @@ public:
{
me->CastSpell(me->GetVictim(), SPELL_DEATH_COIL, false);
events.Repeat(5s, 8s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -1785,7 +1785,7 @@ public:
pos.Relocate(x, y, z);
me->GetVictim()->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), 49575, true);
events.Repeat(35s);
- EventMapGCD(events, 2000);
+ EventMapGCD(events, 2s);
}
else
events.Repeat(5s);
@@ -1800,7 +1800,7 @@ public:
{
me->CastSpell(me->GetVictim(), SPELL_FROST_STRIKE, false);
events.Repeat(6s, 10s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -1810,7 +1810,7 @@ public:
{
me->CastSpell(me, SPELL_ICEBOUND_FORTITUDE, false);
events.Repeat(1min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(6s);
@@ -1820,7 +1820,7 @@ public:
{
me->CastSpell(me->GetVictim(), SPELL_ICY_TOUCH, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -1830,7 +1830,7 @@ public:
{
me->CastSpell(me->GetVictim(), SPELL_STRANGULATE, false);
events.Repeat(2min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -1922,7 +1922,7 @@ public:
{
me->CastSpell(me->GetVictim(), SPELL_FAN_OF_KNIVES, false);
events.Repeat(6s, 10s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -1932,7 +1932,7 @@ public:
{
me->CastSpell(target, SPELL_BLIND, false);
events.Repeat(2min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -1942,7 +1942,7 @@ public:
{
me->CastSpell(me, SPELL_CLOAK, false);
events.Repeat(90s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(6s);
@@ -1954,7 +1954,7 @@ public:
{
me->CastSpell(me, SPELL_BLADE_FLURRY, false);
events.Repeat(2min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
break;
case EVENT_SPELL_SHADOWSTEP:
@@ -1962,7 +1962,7 @@ public:
{
me->CastSpell(me->GetVictim(), SPELL_SHADOWSTEP, false);
events.Repeat(30s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -1977,7 +1977,7 @@ public:
{
me->CastSpell(me->GetVictim(), SPELL_HEMORRHAGE, false);
events.Repeat(5s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -1992,7 +1992,7 @@ public:
{
me->CastSpell(me->GetVictim(), SPELL_EVISCERATE, false);
events.Repeat(15s, 25s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -2080,7 +2080,7 @@ public:
{
me->CastSpell(target, SPELL_EARTH_SHOCK_ENH, false);
events.Repeat(6s, 8s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -2095,7 +2095,7 @@ public:
{
me->CastSpell(target, SPELL_LAVA_LASH, false);
events.Repeat(6s, 8s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -2110,7 +2110,7 @@ public:
{
me->CastSpell(target, SPELL_STORMSTRIKE, false);
events.Repeat(8s, 9s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -2121,12 +2121,12 @@ public:
else
me->CastSpell((Unit*)nullptr, SPELL_BLOODLUST, true);
events.Repeat(10min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SUMMON_TOTEM:
me->CastSpell((Unit*)nullptr, RAND(SPELL_GROUNDING_TOTEM, SPELL_WINDFURY_TOTEM, SPELL_TREMOR_TOTEM), false);
events.Repeat(30s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
}
@@ -2211,7 +2211,7 @@ public:
case EVENT_SPELL_AVENGING_WRATH:
me->CastSpell(me, SPELL_AVENGING_WRATH, false);
events.Repeat(3min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_CRUSADER_STRIKE:
if (me->HasUnitFlag(UNIT_FLAG_DISARMED))
@@ -2223,7 +2223,7 @@ public:
{
me->CastSpell(target, SPELL_CRUSADER_STRIKE, false);
events.Repeat(6s, 8s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -2233,7 +2233,7 @@ public:
{
me->CastSpell(me, SPELL_DIVINE_SHIELD, false);
events.Repeat(5min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -2248,7 +2248,7 @@ public:
{
me->CastSpell((Unit*)nullptr, SPELL_DIVINE_STORM, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -2258,7 +2258,7 @@ public:
{
me->CastSpell(target, SPELL_HAMMER_OF_JUSTICE_RET, false);
events.Repeat(40s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -2268,7 +2268,7 @@ public:
{
me->CastSpell(target, SPELL_HAND_OF_PROTECTION_RET, false);
events.Repeat(5min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -2278,7 +2278,7 @@ public:
{
me->CastSpell(target, SPELL_JUDGEMENT_OF_COMMAND, false);
events.Repeat(10s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -2288,7 +2288,7 @@ public:
{
me->CastSpell(target, SPELL_REPENTANCE, false);
events.Repeat(1min);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
}
else
events.Repeat(5s);
@@ -2357,13 +2357,13 @@ public:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_DEVOUR_MAGIC, false);
events.Repeat(8s, 15s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
case EVENT_SPELL_SPELL_LOCK:
if (me->GetVictim())
me->CastSpell(me->GetVictim(), SPELL_SPELL_LOCK, false);
events.Repeat(24s);
- EventMapGCD(events, 1500);
+ EventMapGCD(events, 1500ms);
break;
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
index 67cd96d419..8e82e9cb49 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
@@ -353,7 +353,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- me->DespawnOrUnsummon(10000);
+ me->DespawnOrUnsummon(10s);
}
void EnterEvadeMode(EvadeReason /*why*/) override
@@ -434,7 +434,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- me->DespawnOrUnsummon(10000);
+ me->DespawnOrUnsummon(10s);
}
void EnterEvadeMode(EvadeReason /*why*/) override
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
index 9ad8b6230d..5e99f2353a 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
@@ -848,7 +848,7 @@ public:
me->CastSpell(me, SPELL_STAGGERED_DAZE, true);
me->CastSpell((Unit*)nullptr, SPELL_TRAMPLE, true);
Talk(EMOTE_TRAMPLE_CRASH);
- events.DelayEvents(15000);
+ events.DelayEvents(15s);
}
else
{
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
index 372081fe04..aa2028a222 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
@@ -384,7 +384,7 @@ struct boss_twin_valkyrAI : public ScriptedAI
/*
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, essenceId))
me->CastSpell(target, me->GetEntry()==NPC_LIGHTBANE ? SPELL_LIGHT_TOUCH : SPELL_DARK_TOUCH, false);
- events.RepeatEvent(urand(45000,50000));
+ events.Repeat(45s,50s);
*/
GuidVector tList;
@@ -458,7 +458,7 @@ struct boss_twin_valkyrAI : public ScriptedAI
if ((SpecialMask & 0xF) == 0xF )
SpecialMask = 0;
events.Repeat(45s);
- events.DelayEventsToMax(15000, 1); // no touch of light/darkness during special abilities!
+ events.DelayEventsToMax(15s, 1); // no touch of light/darkness during special abilities!
}
break;
case EVENT_REMOVE_DUAL_WIELD:
@@ -710,7 +710,7 @@ public:
return;
if (urand(0, 2))
- me->DespawnOrUnsummon(0);
+ me->DespawnOrUnsummon(0ms);
}
void MoveToNextPoint()
@@ -884,7 +884,7 @@ class spell_valkyr_ball_periodic_dummy_aura : public AuraScript
creature->GetMotionMaster()->MoveIdle();
creature->CastSpell((Unit*)nullptr, creature->GetEntry() == NPC_CONCENTRATED_LIGHT ? SPELL_UNLEASHED_LIGHT : SPELL_UNLEASHED_DARK, false);
creature->SetDisplayId(11686);
- creature->DespawnOrUnsummon(1500);
+ creature->DespawnOrUnsummon(1500ms);
}
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
index 7dc9c0c591..ad3c4cdb44 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
@@ -175,7 +175,7 @@ public:
bSwitcher = false;
bNooneDied = true;
events.Reset();
- events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0);
+ events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0ms);
NPC_ChampionGUIDs.clear();
}
@@ -295,22 +295,22 @@ public:
switch (InstanceProgress)
{
case INSTANCE_PROGRESS_INITIAL:
- events.RescheduleEvent(EVENT_SCENE_001, 0);
+ events.RescheduleEvent(EVENT_SCENE_001, 0ms);
break;
case INSTANCE_PROGRESS_INTRO_DONE:
- events.RescheduleEvent(EVENT_SCENE_004, 0);
+ events.RescheduleEvent(EVENT_SCENE_004, 0ms);
break;
case INSTANCE_PROGRESS_BEASTS_DEAD:
- events.RescheduleEvent(EVENT_SCENE_101, 0);
+ events.RescheduleEvent(EVENT_SCENE_101, 0ms);
break;
case INSTANCE_PROGRESS_JARAXXUS_DEAD:
- events.RescheduleEvent(EVENT_SCENE_201, 0);
+ events.RescheduleEvent(EVENT_SCENE_201, 0ms);
break;
case INSTANCE_PROGRESS_FACTION_CHAMPIONS_DEAD:
- events.RescheduleEvent(EVENT_SCENE_301, 0);
+ events.RescheduleEvent(EVENT_SCENE_301, 0ms);
break;
case INSTANCE_PROGRESS_VALKYR_DEAD:
- events.RescheduleEvent(EVENT_SCENE_401, 0);
+ events.RescheduleEvent(EVENT_SCENE_401, 0ms);
break;
}
break;
@@ -331,7 +331,7 @@ public:
if ((northrendBeastsMask & 7) == 7)
SetData(TYPE_NORTHREND_BEASTS_ALL, DONE);
else if ((northrendBeastsMask & 16) == 0)
- events.RescheduleEvent(EVENT_SCENE_005, 2500);
+ events.RescheduleEvent(EVENT_SCENE_005, 2500ms);
}
break;
case TYPE_JORMUNGAR:
@@ -348,9 +348,9 @@ public:
}
if (Creature* c = instance->GetCreature(NPC_AcidmawGUID))
- c->DespawnOrUnsummon(10000);
+ c->DespawnOrUnsummon(10s);
if (Creature* c = instance->GetCreature(NPC_DreadscaleGUID))
- c->DespawnOrUnsummon(10000);
+ c->DespawnOrUnsummon(10s);
if (AchievementTimer + 10 >= GameTime::GetGameTime().count())
DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_JORMUNGAR_ACHIEV);
AchievementTimer = 0;
@@ -363,7 +363,7 @@ public:
else if ((northrendBeastsMask & 32) == 0)
{
Counter = 0;
- events.RescheduleEvent(EVENT_SCENE_006, 2500);
+ events.RescheduleEvent(EVENT_SCENE_006, 2500ms);
}
}
else // first one died, start timer for achievement
@@ -390,7 +390,7 @@ public:
InstanceProgress = INSTANCE_PROGRESS_BEASTS_DEAD;
HandleGameObject(GO_EnterGateGUID, true);
events.CancelEvent(EVENT_NORTHREND_BEASTS_ENRAGE);
- events.RescheduleEvent(EVENT_SCENE_BEASTS_DONE, 2500);
+ events.RescheduleEvent(EVENT_SCENE_BEASTS_DONE, 2500ms);
SaveToDB();
}
break;
@@ -402,7 +402,7 @@ public:
{
HandleGameObject(GO_EnterGateGUID, true);
InstanceProgress = INSTANCE_PROGRESS_JARAXXUS_DEAD;
- events.RescheduleEvent(EVENT_SCENE_110, 2500);
+ events.RescheduleEvent(EVENT_SCENE_110, 2500ms);
SaveToDB();
}
break;
@@ -416,11 +416,11 @@ public:
Counter = 0;
EncounterStatus = NOT_STARTED;
InstanceProgress = INSTANCE_PROGRESS_FACTION_CHAMPIONS_DEAD;
- events.RescheduleEvent(EVENT_SCENE_FACTION_CHAMPIONS_DEAD, 2500);
+ events.RescheduleEvent(EVENT_SCENE_FACTION_CHAMPIONS_DEAD, 2500ms);
for (ObjectGuid const& guid : NPC_ChampionGUIDs)
if (Creature* c = instance->GetCreature(guid))
- c->DespawnOrUnsummon(15000);
+ c->DespawnOrUnsummon(15s);
NPC_ChampionGUIDs.clear();
if (Creature* c = instance->GetCreature(NPC_TirionGUID))
@@ -491,7 +491,7 @@ public:
InstanceProgress = INSTANCE_PROGRESS_VALKYR_DEAD;
DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, 34497, 1); // Lightbane
DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, 34496, 1); // Darkbane
- events.RescheduleEvent(EVENT_SCENE_VALKYR_DEAD, 2500);
+ events.RescheduleEvent(EVENT_SCENE_VALKYR_DEAD, 2500ms);
HandleGameObject(GO_EnterGateGUID, true);
SaveToDB();
}
@@ -516,7 +516,7 @@ public:
c->UpdatePosition(Locs[LOC_TIRION_FINAL], true);
c->StopMovingOnCurrentPos();
c->SetFacingTo(Locs[LOC_TIRION_FINAL].GetOrientation());
- events.RescheduleEvent(EVENT_SCENE_501, 20000);
+ events.RescheduleEvent(EVENT_SCENE_501, 20s);
}
if (GameObject* floor = instance->GetGameObject(GO_FloorGUID))
floor->SetDestructibleState(GO_DESTRUCTIBLE_REBUILDING, nullptr, true);
@@ -591,7 +591,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_TirionGUID))
c->AI()->Talk(SAY_STAGE_0_01);
- events.RescheduleEvent(EVENT_SCENE_002, 22000);
+ events.RescheduleEvent(EVENT_SCENE_002, 22s);
}
break;
case EVENT_SCENE_002:
@@ -599,7 +599,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_VarianGUID))
c->AI()->Talk(SAY_STAGE_0_03a);
- events.RescheduleEvent(EVENT_SCENE_003, 5000);
+ events.RescheduleEvent(EVENT_SCENE_003, 5s);
}
break;
case EVENT_SCENE_003:
@@ -607,7 +607,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_GarroshGUID))
c->AI()->Talk(SAY_STAGE_0_03h);
- events.RescheduleEvent(EVENT_SCENE_004, 8000);
+ events.RescheduleEvent(EVENT_SCENE_004, 8s);
}
break;
case EVENT_SCENE_004:
@@ -620,12 +620,12 @@ public:
HandleGameObject(GO_MainGateGUID, true);
HandleGameObject(GO_EnterGateGUID, false);
- events.RescheduleEvent(EVENT_SUMMON_GORMOK, 1000);
+ events.RescheduleEvent(EVENT_SUMMON_GORMOK, 1s);
if (instance->IsHeroic())
{
- events.RescheduleEvent(EVENT_SCENE_005, 150000);
- events.RescheduleEvent(EVENT_SCENE_006, 340000);
- events.RescheduleEvent(EVENT_NORTHREND_BEASTS_ENRAGE, 520000);
+ events.RescheduleEvent(EVENT_SCENE_005, 150s);
+ events.RescheduleEvent(EVENT_SCENE_006, 340s);
+ events.RescheduleEvent(EVENT_NORTHREND_BEASTS_ENRAGE, 520s);
}
}
break;
@@ -650,8 +650,8 @@ public:
if (Creature* gormok = c->SummonCreature(NPC_GORMOK, Locs[LOC_BEHIND_GATE].GetPositionX(), Locs[LOC_BEHIND_GATE].GetPositionY(), Locs[LOC_BEHIND_GATE].GetPositionZ(), Locs[LOC_BEHIND_GATE].GetOrientation(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000))
gormok->GetMotionMaster()->MovePoint(0, Locs[LOC_GATE_FRONT].GetPositionX(), Locs[LOC_GATE_FRONT].GetPositionY(), Locs[LOC_GATE_FRONT].GetPositionZ());
- events.RescheduleEvent(EVENT_GORMOK_ATTACK, 10000);
- events.RescheduleEvent(EVENT_CLOSE_GATE, 6000);
+ events.RescheduleEvent(EVENT_GORMOK_ATTACK, 10s);
+ events.RescheduleEvent(EVENT_CLOSE_GATE, 6s);
}
break;
case EVENT_GORMOK_ATTACK:
@@ -676,8 +676,8 @@ public:
if (Creature* c = instance->GetCreature(NPC_TirionGUID))
c->AI()->Talk(SAY_STAGE_0_04);
- events.RescheduleEvent(EVENT_OPEN_GATE, 3000);
- events.RescheduleEvent(EVENT_SUMMON_ACIDMAW_AND_DREADSCALE, 4000);
+ events.RescheduleEvent(EVENT_OPEN_GATE, 3s);
+ events.RescheduleEvent(EVENT_SUMMON_ACIDMAW_AND_DREADSCALE, 4s);
break;
}
case EVENT_SUMMON_ACIDMAW_AND_DREADSCALE:
@@ -690,7 +690,7 @@ public:
acidmaw->AddAura(53421, acidmaw);
}
- events.RescheduleEvent(EVENT_SCENE_005_2, 4000);
+ events.RescheduleEvent(EVENT_SCENE_005_2, 4s);
break;
}
@@ -699,7 +699,7 @@ public:
if (Creature* dreadscale = instance->GetCreature(NPC_DreadscaleGUID))
dreadscale->GetMotionMaster()->MovePoint(0, Locs[LOC_DREADSCALE].GetPositionX(), Locs[LOC_DREADSCALE].GetPositionY(), Locs[LOC_DREADSCALE].GetPositionZ());
- events.RescheduleEvent(EVENT_ACIDMAW_AND_DREADSCALE_ATTACK, 7000);
+ events.RescheduleEvent(EVENT_ACIDMAW_AND_DREADSCALE_ATTACK, 7s);
break;
}
case EVENT_ACIDMAW_AND_DREADSCALE_ATTACK:
@@ -737,8 +737,8 @@ public:
if (Creature* c = instance->GetCreature(NPC_TirionGUID))
c->AI()->Talk(SAY_STAGE_0_05);
- events.RescheduleEvent(EVENT_OPEN_GATE, 2000);
- events.RescheduleEvent(EVENT_SUMMON_ICEHOWL, 3000);
+ events.RescheduleEvent(EVENT_OPEN_GATE, 2s);
+ events.RescheduleEvent(EVENT_SUMMON_ICEHOWL, 3s);
break;
}
case EVENT_SUMMON_ICEHOWL:
@@ -747,8 +747,8 @@ public:
if (Creature* icehowl = c->SummonCreature(NPC_ICEHOWL, Locs[LOC_BEHIND_GATE].GetPositionX(), Locs[LOC_BEHIND_GATE].GetPositionY(), Locs[LOC_BEHIND_GATE].GetPositionZ(), Locs[LOC_BEHIND_GATE].GetOrientation(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 630000000))
icehowl->GetMotionMaster()->MovePoint(0, Locs[LOC_GATE_FRONT].GetPositionX(), Locs[LOC_GATE_FRONT].GetPositionY(), Locs[LOC_GATE_FRONT].GetPositionZ());
- events.RescheduleEvent(EVENT_ICEHOWL_ATTACK, 10000);
- events.RescheduleEvent(EVENT_CLOSE_GATE, 6000);
+ events.RescheduleEvent(EVENT_ICEHOWL_ATTACK, 10s);
+ events.RescheduleEvent(EVENT_CLOSE_GATE, 6s);
break;
}
case EVENT_ICEHOWL_ATTACK:
@@ -785,7 +785,7 @@ public:
fizzlebang->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
fizzlebang->GetMotionMaster()->MovePoint(0, Locs[LOC_BEHIND_GATE].GetPositionX(), Locs[LOC_BEHIND_GATE].GetPositionY() - 65.0f, Locs[LOC_BEHIND_GATE].GetPositionZ() - 1.0f);
}
- events.RescheduleEvent(EVENT_SCENE_102, 20000);
+ events.RescheduleEvent(EVENT_SCENE_102, 20s);
// move Icehowl to side, can't remove corpse because of loot!
if (Creature* icehowl = instance->GetCreature(NPC_IcehowlGUID))
@@ -803,7 +803,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_FizzlebangGUID))
c->AI()->Talk(SAY_STAGE_1_02);
- events.RescheduleEvent(EVENT_SCENE_103, 11000);
+ events.RescheduleEvent(EVENT_SCENE_103, 11s);
break;
}
case EVENT_SCENE_103:
@@ -816,7 +816,7 @@ public:
NPC_PurpleGroundGUID = trigger->GetGUID();
}
- events.RescheduleEvent(EVENT_SCENE_104, 5000);
+ events.RescheduleEvent(EVENT_SCENE_104, 5s);
break;
}
case EVENT_SCENE_104:
@@ -833,7 +833,7 @@ public:
c->HandleEmoteCommand(EMOTE_STATE_SPELL_PRECAST);
}
- events.RescheduleEvent(EVENT_SUMMON_JARAXXUS, 5000);
+ events.RescheduleEvent(EVENT_SUMMON_JARAXXUS, 5s);
break;
}
case EVENT_SUMMON_JARAXXUS:
@@ -846,7 +846,7 @@ public:
c->AI()->Talk(SAY_STAGE_1_04);
}
- events.RescheduleEvent(EVENT_SCENE_105, 3000);
+ events.RescheduleEvent(EVENT_SCENE_105, 3s);
break;
}
case EVENT_SCENE_105:
@@ -860,7 +860,7 @@ public:
c->DespawnOrUnsummon();
NPC_PortalGUID.Clear();
- events.RescheduleEvent(EVENT_SCENE_106, 10000);
+ events.RescheduleEvent(EVENT_SCENE_106, 10s);
break;
}
case EVENT_SCENE_106:
@@ -868,7 +868,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_JaraxxusGUID))
c->AI()->Talk(SAY_STAGE_1_05);
- events.RescheduleEvent(EVENT_SCENE_107, 5000);
+ events.RescheduleEvent(EVENT_SCENE_107, 5s);
break;
}
case EVENT_SCENE_107:
@@ -876,7 +876,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_FizzlebangGUID))
c->AI()->Talk(SAY_STAGE_1_06);
- events.RescheduleEvent(EVENT_SCENE_108, 800);
+ events.RescheduleEvent(EVENT_SCENE_108, 800ms);
break;
}
case EVENT_SCENE_108:
@@ -891,7 +891,7 @@ public:
}
}
- events.RescheduleEvent(EVENT_SCENE_109, 5000);
+ events.RescheduleEvent(EVENT_SCENE_109, 5s);
break;
}
case EVENT_SCENE_109:
@@ -901,7 +901,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_TirionGUID))
c->AI()->Talk(SAY_STAGE_1_07);
- events.RescheduleEvent(EVENT_JARAXXUS_ATTACK, 6000);
+ events.RescheduleEvent(EVENT_JARAXXUS_ATTACK, 6s);
break;
}
case EVENT_JARAXXUS_ATTACK:
@@ -925,7 +925,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_TirionGUID))
c->AI()->Talk(SAY_STAGE_1_08);
- events.RescheduleEvent(EVENT_SCENE_111, 18000);
+ events.RescheduleEvent(EVENT_SCENE_111, 18s);
break;
}
case EVENT_SCENE_111:
@@ -933,7 +933,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_GarroshGUID))
c->AI()->Talk(SAY_STAGE_1_09);
- events.RescheduleEvent(EVENT_SCENE_112, 9000);
+ events.RescheduleEvent(EVENT_SCENE_112, 9s);
break;
}
case EVENT_SCENE_112:
@@ -941,7 +941,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_VarianGUID))
c->AI()->Talk(SAY_STAGE_1_10);
- events.RescheduleEvent(EVENT_SCENE_113, 5000);
+ events.RescheduleEvent(EVENT_SCENE_113, 5s);
break;
}
case EVENT_SCENE_113:
@@ -965,7 +965,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_TirionGUID))
c->AI()->Talk(SAY_STAGE_2_01);
- events.RescheduleEvent(EVENT_SCENE_202, 9000);
+ events.RescheduleEvent(EVENT_SCENE_202, 9s);
break;
}
case EVENT_SCENE_202:
@@ -974,13 +974,13 @@ public:
{
if (Creature* c = instance->GetCreature(NPC_GarroshGUID))
c->AI()->Talk(SAY_STAGE_2_02h);
- events.RescheduleEvent(EVENT_SCENE_203, 15000);
+ events.RescheduleEvent(EVENT_SCENE_203, 15s);
}
else
{
if (Creature* c = instance->GetCreature(NPC_VarianGUID))
c->AI()->Talk(SAY_STAGE_2_02a);
- events.RescheduleEvent(EVENT_SCENE_203, 18000);
+ events.RescheduleEvent(EVENT_SCENE_203, 18s);
}
break;
}
@@ -989,7 +989,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_TirionGUID))
c->AI()->Talk(SAY_STAGE_2_03);
- events.RescheduleEvent(EVENT_SCENE_204, 5000);
+ events.RescheduleEvent(EVENT_SCENE_204, 5s);
break;
}
case EVENT_SCENE_204:
@@ -998,16 +998,16 @@ public:
{
if (Creature* c = instance->GetCreature(NPC_GarroshGUID))
c->AI()->Talk(SAY_STAGE_2_04h);
- events.RescheduleEvent(EVENT_SCENE_205, 6000);
+ events.RescheduleEvent(EVENT_SCENE_205, 6s);
}
else
{
if (Creature* c = instance->GetCreature(NPC_VarianGUID))
c->AI()->Talk(SAY_STAGE_2_04a);
- events.RescheduleEvent(EVENT_SCENE_205, 5000);
+ events.RescheduleEvent(EVENT_SCENE_205, 5s);
}
- events.RescheduleEvent(EVENT_SUMMON_CHAMPIONS, 2500);
+ events.RescheduleEvent(EVENT_SUMMON_CHAMPIONS, 2500ms);
break;
}
case EVENT_SCENE_205:
@@ -1089,7 +1089,7 @@ public:
}
HandleGameObject(GO_EnterGateGUID, false);
- events.RescheduleEvent(EVENT_CHAMPIONS_ATTACK, 4000);
+ events.RescheduleEvent(EVENT_CHAMPIONS_ATTACK, 4s);
break;
}
case EVENT_CHAMPIONS_ATTACK:
@@ -1122,7 +1122,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_TirionGUID))
c->AI()->Talk(SAY_STAGE_3_01);
- events.RescheduleEvent(EVENT_SCENE_302, 13000);
+ events.RescheduleEvent(EVENT_SCENE_302, 13s);
break;
}
case EVENT_SCENE_302:
@@ -1130,7 +1130,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_TirionGUID))
c->AI()->Talk(SAY_STAGE_3_02);
- events.RescheduleEvent(EVENT_SCENE_303, 3000);
+ events.RescheduleEvent(EVENT_SCENE_303, 3s);
break;
}
case EVENT_SCENE_303:
@@ -1145,7 +1145,7 @@ public:
t->GetMotionMaster()->MovePoint(0, Locs[LOC_VALKYR_DEST_LEFT].GetPositionX(), Locs[LOC_VALKYR_DEST_LEFT].GetPositionY(), Locs[LOC_VALKYR_DEST_LEFT].GetPositionZ());
}
- events.RescheduleEvent(EVENT_SCENE_304, 6250);
+ events.RescheduleEvent(EVENT_SCENE_304, 6250ms);
break;
}
case EVENT_SCENE_304:
@@ -1157,7 +1157,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_DarkbaneGUID))
c->GetMotionMaster()->MovePoint(0, Locs[LOC_VALKYR_DEST_2_LEFT].GetPositionX(), Locs[LOC_VALKYR_DEST_2_LEFT].GetPositionY(), Locs[LOC_VALKYR_DEST_2_LEFT].GetPositionZ());
- events.RescheduleEvent(EVENT_VALKYRIES_ATTACK, 3250);
+ events.RescheduleEvent(EVENT_VALKYRIES_ATTACK, 3250ms);
break;
}
case EVENT_VALKYRIES_ATTACK:
@@ -1189,7 +1189,7 @@ public:
if (Creature* c = instance->GetCreature(GetTeamIdInInstance() == TEAM_ALLIANCE ? NPC_VarianGUID : NPC_GarroshGUID))
c->AI()->Talk((GetTeamIdInInstance() == TEAM_ALLIANCE ? SAY_STAGE_3_03a : SAY_STAGE_3_03h));
- events.RescheduleEvent(EVENT_SCENE_401, 60000);
+ events.RescheduleEvent(EVENT_SCENE_401, 60s);
break;
}
case EVENT_SCENE_401:
@@ -1197,7 +1197,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_TirionGUID))
c->AI()->Talk(SAY_STAGE_4_01);
- events.RescheduleEvent(EVENT_SCENE_402, 20000);
+ events.RescheduleEvent(EVENT_SCENE_402, 20s);
break;
}
case EVENT_SCENE_402:
@@ -1214,7 +1214,7 @@ public:
t->SetVisible(false);
}
- events.RescheduleEvent(EVENT_SCENE_403, 2000);
+ events.RescheduleEvent(EVENT_SCENE_403, 2s);
break;
}
case EVENT_SCENE_403:
@@ -1226,7 +1226,7 @@ public:
t->CastSpell(t, 51807, true);
}
- events.RescheduleEvent(EVENT_SCENE_404, 2000);
+ events.RescheduleEvent(EVENT_SCENE_404, 2s);
break;
}
case EVENT_SCENE_404:
@@ -1238,7 +1238,7 @@ public:
c->GetMotionMaster()->MovePoint(0, Locs[LOC_ARTHAS]);
}
- events.RescheduleEvent(EVENT_SCENE_405, 3000);
+ events.RescheduleEvent(EVENT_SCENE_405, 3s);
break;
}
case EVENT_SCENE_405:
@@ -1246,7 +1246,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_TirionGUID))
c->AI()->Talk(SAY_STAGE_4_03);
- events.RescheduleEvent(EVENT_SCENE_406, 7000);
+ events.RescheduleEvent(EVENT_SCENE_406, 7s);
break;
}
case EVENT_SCENE_406:
@@ -1257,8 +1257,8 @@ public:
c->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH);
}
- events.RescheduleEvent(EVENT_SCENE_406_2, 2500);
- events.RescheduleEvent(EVENT_SCENE_407, 12000);
+ events.RescheduleEvent(EVENT_SCENE_406_2, 2500ms);
+ events.RescheduleEvent(EVENT_SCENE_407, 12s);
break;
}
case EVENT_SCENE_406_2:
@@ -1276,7 +1276,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_LichKingGUID))
c->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
- events.RescheduleEvent(EVENT_SCENE_408, 4000);
+ events.RescheduleEvent(EVENT_SCENE_408, 4s);
break;
}
case EVENT_SCENE_408:
@@ -1286,7 +1286,7 @@ public:
c->HandleEmoteCommand(EMOTE_ONESHOT_KNEEL);
}
- events.RescheduleEvent(EVENT_SCENE_409, 1500);
+ events.RescheduleEvent(EVENT_SCENE_409, 1500ms);
break;
}
case EVENT_SCENE_409:
@@ -1305,7 +1305,7 @@ public:
SpawnAnubArak();
}
- events.RescheduleEvent(EVENT_SCENE_410, 2000);
+ events.RescheduleEvent(EVENT_SCENE_410, 2s);
break;
}
case EVENT_SCENE_410:
@@ -1314,7 +1314,7 @@ public:
{
c->SetVisible(true);
c->AI()->Talk(SAY_STAGE_4_05);
- c->DespawnOrUnsummon(0);
+ c->DespawnOrUnsummon(0ms);
}
break;
@@ -1328,7 +1328,7 @@ public:
c->SummonGameObject(195682, 668.15f, 134.57f, 142.12f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 630000000);
}
- events.RescheduleEvent(EVENT_SCENE_502, 20000);
+ events.RescheduleEvent(EVENT_SCENE_502, 20s);
break;
}
case EVENT_SCENE_502:
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/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
index b4bbcfc560..a1e01ee32b 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
@@ -167,7 +167,7 @@ public:
void KilledUnit(Unit* /*victim*/) override
{
- if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
+ if (!events.HasTimeUntilEvent(EVENT_KILL_TALK))
{
Talk(SAY_KILL);
events.ScheduleEvent(EVENT_KILL_TALK, 6s);
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp
index ac241e409e..94e9f2dfab 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp
@@ -104,7 +104,7 @@ public:
void KilledUnit(Unit* /*victim*/) override
{
- if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
+ if (!events.HasTimeUntilEvent(EVENT_KILL_TALK))
{
Talk(SAY_KILL);
events.ScheduleEvent(EVENT_KILL_TALK, 6s);
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
index 1de17ba57b..78defb7061 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
@@ -102,7 +102,7 @@ public:
void KilledUnit(Unit* /*victim*/) override
{
- if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
+ if (!events.HasTimeUntilEvent(EVENT_KILL_TALK))
{
Talk(SAY_KILL);
events.ScheduleEvent(EVENT_KILL_TALK, 6s);
@@ -214,7 +214,7 @@ class spell_trollgore_corpse_explode_aura : public AuraScript
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (Creature* target = GetTarget()->ToCreature())
- target->DespawnOrUnsummon(1);
+ target->DespawnOrUnsummon(1ms);
}
void Register() override
diff --git a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp
index a8f22adf87..e5190c5ed0 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp
@@ -89,7 +89,7 @@ class spell_dtk_raise_dead_aura : public AuraScript
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- GetUnitOwner()->ToCreature()->DespawnOrUnsummon(1);
+ GetUnitOwner()->ToCreature()->DespawnOrUnsummon(1ms);
GetUnitOwner()->SummonCreature(NPC_RISEN_DRAKKARI_WARRIOR, *GetUnitOwner());
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
index c8d14deaa9..80d04808df 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
@@ -115,7 +115,7 @@ public:
me->GetMotionMaster()->MoveIdle();
me->CastSpell(me, SPELL_TELEPORT, false);
events.CancelEvent(EVENT_SPELL_CORRUPT_SOUL);
- events.DelayEvents(6000);
+ events.DelayEvents(6s);
events.RescheduleEvent(EVENT_SPELL_FEAR, 8s, 14s);
}
}
@@ -242,7 +242,7 @@ public:
{
me->GetMotionMaster()->MoveIdle();
me->CastSpell(b, SPELL_CONSUME_SOUL, true);
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
return;
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp
index b848dd2850..c4160dd523 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp
@@ -225,14 +225,14 @@ public:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
me->CastSpell(target, SPELL_WELL_OF_SOULS, false);
events.Repeat(25s, 30s);
- events.DelayEventsToMax(4000, 0);
+ events.DelayEventsToMax(4s, 0);
break;
case EVENT_SPELL_UNLEASHED_SOULS:
me->CastSpell(me, SPELL_UNLEASHED_SOULS, false);
Talk(SAY_FACE_UNLEASH_SOUL);
Talk(EMOTE_UNLEASH_SOUL);
events.Repeat(30s, 40s);
- events.DelayEventsToMax(5000, 0);
+ events.DelayEventsToMax(5s, 0);
me->setAttackTimer(BASE_ATTACK, 5500);
break;
case EVENT_SPELL_WAILING_SOULS:
@@ -241,7 +241,7 @@ public:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true))
me->CastCustomSpell(SPELL_WAILING_SOULS_TARGETING, SPELLVALUE_MAX_TARGETS, 1, target, false);
events.Repeat(80s);
- events.DelayEventsToMax(20000, 0);
+ events.DelayEventsToMax(20s, 0);
break;
}
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 d5e01c2da0..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
{
@@ -131,7 +132,7 @@ public:
Talk(SAY_DEFILING_HORROR);
me->CastSpell((Unit*)nullptr, SPELL_DEFILING_HORROR, false);
me->SetControlled(true, UNIT_STATE_ROOT);
- events.DelayEventsToMax(5000, 0);
+ events.DelayEventsToMax(5s, 0);
events.ScheduleEvent(EVENT_UNROOT, 4s);
events.ScheduleEvent(EVENT_DEFILING_HORROR, 20s);
break;
@@ -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/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
index c4b0bdcc7d..db638f0a06 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
@@ -571,7 +571,7 @@ public:
pInstance->HandleGameObject(pInstance->GetGuidData(GO_ARTHAS_DOOR), true);
pLichKing->SetVisible(true);
- pLichKing->GetMotionMaster()->MovePoint(0, LichKingMoveMidlelThronePos, false);
+ pLichKing->GetMotionMaster()->MovePoint(0, LichKingMoveMidlelThronePos, FORCED_MOVEMENT_NONE, 0.f, false);
}
@@ -618,7 +618,7 @@ public:
if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT)))
{
pLichKing->SetVisible(true);
- pLichKing->GetMotionMaster()->MovePoint(0, LichKingMoveThronePos, false);
+ pLichKing->GetMotionMaster()->MovePoint(0, LichKingMoveThronePos, FORCED_MOVEMENT_NONE, 0.f, false);
}
events.ScheduleEvent(EVENT_INTRO_LK_2_1, 1s);
break;
@@ -658,7 +658,7 @@ public:
pLichKing->SendMovementFlagUpdate();
pLichKing->CastSpell(pLichKing, SPELL_FROSTMOURNE_EQUIP, false);
pInstance->HandleGameObject(pInstance->GetGuidData(GO_FROSTMOURNE), false);
- events.ScheduleEvent(EVENT_INTRO_LK_4_3, 1750);
+ events.ScheduleEvent(EVENT_INTRO_LK_4_3, 1750ms);
}
events.ScheduleEvent(EVENT_INTRO_LK_5, 6s);
break;
@@ -709,7 +709,7 @@ public:
case EVENT_INTRO_LK_5_2:
if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT)))
{
- pLichKing->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos, false);
+ pLichKing->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos, FORCED_MOVEMENT_NONE, 0.f, false);
}
break;
@@ -763,11 +763,11 @@ public:
{
Talk(SAY_SYLVANAS_INTRO_END);
me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
- me->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos, false);
+ me->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos, FORCED_MOVEMENT_NONE, 0.f, false);
}
if (Creature* pLoralen = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN)))
{
- pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLk1, false);
+ pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLk1, FORCED_MOVEMENT_NONE, 0.f, false);
}
events.ScheduleEvent(EVENT_INTRO_LK_10, 1s + 500ms);
break;
@@ -775,7 +775,7 @@ public:
case EVENT_INTRO_LK_10:
if (Creature* pLoralen = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN)))
{
- pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLk2, false);
+ pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLk2, FORCED_MOVEMENT_NONE, 0.f, false);
}
events.ScheduleEvent(EVENT_INTRO_LK_11, 2s);
@@ -784,7 +784,7 @@ public:
case EVENT_INTRO_LK_11:
if (Creature* pLoralen = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN)))
{
- pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLk3, false);
+ pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLk3, FORCED_MOVEMENT_NONE, 0.f, false);
}
events.ScheduleEvent(EVENT_INTRO_LK_12, 5s + 500ms);
break;
@@ -796,7 +796,7 @@ public:
}
if (Creature* pLoralen = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN)))
{
- pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLkFinal, false);
+ pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLkFinal, FORCED_MOVEMENT_NONE, 0.f, false);
}
events.ScheduleEvent(EVENT_INTRO_LK_13, 2s);
break;
@@ -1153,7 +1153,7 @@ public:
ScriptedAI::EnterEvadeMode(why);
if (me->IsSummon())
- me->ToTempSummon()->DespawnOrUnsummon(1);
+ me->ToTempSummon()->DespawnOrUnsummon(1ms);
}
};
};
@@ -1732,7 +1732,7 @@ public:
{
++reqKillCount;
- if (events.GetNextEventTime(EVENT_DECREASE_REQ_COUNT_BY_100))
+ if (events.HasTimeUntilEvent(EVENT_DECREASE_REQ_COUNT_BY_100))
events.RescheduleEvent(EVENT_DECREASE_REQ_COUNT_BY_100, 10s);
summons.Summon(s);
s->SetHomePosition(PathWaypoints[WP_STOP[currentWall + 1]]);
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
index 5b1e99ab34..a22b42a61e 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
@@ -38,7 +38,7 @@ public:
_owner.GetMotionMaster()->Clear();
_owner.SetVisible(true);
_owner.NearTeleportTo(5300.53f, 1987.80f, 707.70f, 3.89f);
- _owner.m_Events.AddEvent(new UtherBatteredHiltEvent(_owner, 2), _owner.m_Events.CalculateTime(1000));
+ _owner.m_Events.AddEventAtOffset(new UtherBatteredHiltEvent(_owner, 2), 1s);
break;
case 2:
_owner.AI()->Talk(SAY_BATTERED_HILT_HALT);
@@ -52,12 +52,12 @@ public:
{
quel->AI()->Talk(EMOTE_QUEL_SPAWN);
}
- _owner.m_Events.AddEvent(new UtherBatteredHiltEvent(_owner, 4), _owner.m_Events.CalculateTime(3500));
+ _owner.m_Events.AddEventAtOffset(new UtherBatteredHiltEvent(_owner, 4), 3500ms);
break;
case 4:
_owner.SetWalk(false);
_owner.GetMotionMaster()->MovePoint(0, 5337.53f, 1981.21f, 709.32f);
- _owner.m_Events.AddEvent(new UtherBatteredHiltEvent(_owner, 5), _owner.m_Events.CalculateTime(6000));
+ _owner.m_Events.AddEventAtOffset(new UtherBatteredHiltEvent(_owner, 5), 6s);
break;
case 5:
_owner.SetFacingTo(2.82f);
@@ -66,7 +66,7 @@ public:
case 6:
if (InstanceScript* instance = _owner.GetInstanceScript())
instance->SetData(DATA_BATTERED_HILT, 6);
- _owner.m_Events.AddEvent(new UtherBatteredHiltEvent(_owner, 7), _owner.m_Events.CalculateTime(2000));
+ _owner.m_Events.AddEventAtOffset(new UtherBatteredHiltEvent(_owner, 7), 2s);
break;
case 7:
if (InstanceScript* instance = _owner.GetInstanceScript())
@@ -77,7 +77,7 @@ public:
{
quel->AI()->Talk(EMOTE_QUEL_PREPARE);
}
- _owner.m_Events.AddEvent(new UtherBatteredHiltEvent(_owner, 8), _owner.m_Events.CalculateTime(4000));
+ _owner.m_Events.AddEventAtOffset(new UtherBatteredHiltEvent(_owner, 8), 4s);
break;
case 8:
_owner.SetReactState(REACT_AGGRESSIVE);
@@ -87,23 +87,23 @@ public:
break;
case 9:
_owner.AI()->Talk(SAY_BATTERED_HILT_OUTRO1);
- _owner.m_Events.AddEvent(new UtherBatteredHiltEvent(_owner, _eventId + 1), _owner.m_Events.CalculateTime(11000));
+ _owner.m_Events.AddEventAtOffset(new UtherBatteredHiltEvent(_owner, _eventId + 1), 11s);
break;
case 10:
_owner.AI()->Talk(SAY_BATTERED_HILT_OUTRO2);
- _owner.m_Events.AddEvent(new UtherBatteredHiltEvent(_owner, _eventId + 1), _owner.m_Events.CalculateTime(7500));
+ _owner.m_Events.AddEventAtOffset(new UtherBatteredHiltEvent(_owner, _eventId + 1), 7500ms);
break;
case 11:
_owner.AI()->Talk(SAY_BATTERED_HILT_OUTRO3);
- _owner.m_Events.AddEvent(new UtherBatteredHiltEvent(_owner, _eventId + 1), _owner.m_Events.CalculateTime(8000));
+ _owner.m_Events.AddEventAtOffset(new UtherBatteredHiltEvent(_owner, _eventId + 1), 8s);
break;
case 12:
_owner.AI()->Talk(SAY_BATTERED_HILT_OUTRO4);
- _owner.m_Events.AddEvent(new UtherBatteredHiltEvent(_owner, _eventId + 1), _owner.m_Events.CalculateTime(5000));
+ _owner.m_Events.AddEventAtOffset(new UtherBatteredHiltEvent(_owner, _eventId + 1), 5s);
break;
case 13:
_owner.CastSpell((Unit*)nullptr, 73036, true);
- _owner.m_Events.AddEvent(new UtherBatteredHiltEvent(_owner, _eventId + 1), _owner.m_Events.CalculateTime(3000));
+ _owner.m_Events.AddEventAtOffset(new UtherBatteredHiltEvent(_owner, _eventId + 1), 3s);
break;
case 14:
{
@@ -594,7 +594,7 @@ public:
if (Creature* c = instance->GetCreature(NPC_AltarBunnyGUID))
c->CastSpell(c, 70720, true);
if (Creature* c = instance->GetCreature(NPC_UtherGUID))
- c->m_Events.AddEvent(new UtherBatteredHiltEvent(*c, 1), c->m_Events.CalculateTime(3000));
+ c->m_Events.AddEventAtOffset(new UtherBatteredHiltEvent(*c, 1), 3s);
break;
case 3:
if ((BatteredHiltStatus & BHSF_STARTED) == 0 || (BatteredHiltStatus & BHSF_THROWN))
@@ -602,7 +602,7 @@ public:
BatteredHiltStatus |= BHSF_THROWN;
if (Creature* c = instance->GetCreature(NPC_UtherGUID))
{
- c->m_Events.AddEvent(new UtherBatteredHiltEvent(*c, 3), c->m_Events.CalculateTime(5500));
+ c->m_Events.AddEventAtOffset(new UtherBatteredHiltEvent(*c, 3), 5500ms);
}
break;
case 4:
@@ -614,7 +614,7 @@ public:
break;
case 5:
if (Creature* c = instance->GetCreature(NPC_UtherGUID))
- c->m_Events.AddEvent(new UtherBatteredHiltEvent(*c, 6), c->m_Events.CalculateTime(3000));
+ c->m_Events.AddEventAtOffset(new UtherBatteredHiltEvent(*c, 6), 3s);
break;
case 6:
if (Creature* c = instance->GetCreature(NPC_QuelDelarGUID))
@@ -726,7 +726,7 @@ public:
c->SetStandState(UNIT_STAND_STATE_STAND);
c->SetWalk(false);
c->GetMotionMaster()->MovePoint(0, 5313.92f, 1989.36f, 707.70f);
- c->m_Events.AddEvent(new UtherBatteredHiltEvent(*c, 9), c->m_Events.CalculateTime(7000));
+ c->m_Events.AddEventAtOffset(new UtherBatteredHiltEvent(*c, 9), 7s);
}
}
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 8d60280251..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
{
@@ -112,7 +114,7 @@ public:
Talk(SAY_AGGRO);
DoZoneInCombat();
- events.RescheduleEvent(EVENT_SPELL_THROW_SARONITE, 5000ms, 7500ms);
+ events.RescheduleEvent(EVENT_SPELL_THROW_SARONITE, 5s, 7500ms);
if (pInstance)
pInstance->SetData(DATA_GARFROST, IN_PROGRESS);
@@ -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, 10000);
- 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 c5d341dc9f..6bf24b4ab6 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
@@ -298,7 +298,7 @@ public:
if (a == 1)
{
me->setActive(true);
- events.RescheduleEvent(20, 0);
+ events.RescheduleEvent(20, 0ms);
}
}
@@ -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);
}
@@ -404,7 +404,7 @@ public:
case 8:
Talk(SAY_OUTRO_KRICK_4);
- events.RescheduleEvent(9, 1500);
+ events.RescheduleEvent(9, 1500ms);
break;
case 9:
if (pInstance)
@@ -430,7 +430,7 @@ public:
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_TYRANNUS_EVENT_GUID)))
c->AI()->Talk(SAY_TYRANNUS_KRICK_2);
- events.RescheduleEvent(11, 9000);
+ events.RescheduleEvent(11, 9s);
break;
case 11:
if (pInstance)
@@ -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);
@@ -506,7 +506,7 @@ class spell_exploding_orb_auto_grow_aura : public AuraScript
target->RemoveAurasDueToSpell(SPELL_AUTO_GROW);
target->RemoveAurasDueToSpell(SPELL_EXPLODING_ORB_VISUAL);
if (target->IsCreature())
- target->ToCreature()->DespawnOrUnsummon(2000);
+ target->ToCreature()->DespawnOrUnsummon(2s);
}
}
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 1ea12a8314..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);
@@ -161,7 +161,7 @@ public:
events.RescheduleEvent(EVENT_SPELL_UNHOLY_POWER, 1s);
break;
}
- events.RepeatEvent(3000);
+ events.Repeat(3s);
break;
case EVENT_SPELL_UNHOLY_POWER:
Talk(SAY_DARK_MIGHT);
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 a83777d45f..e8a2d9253a 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
@@ -341,7 +341,7 @@ public:
Unit::Kill(c, c, false);
}
- c->DespawnOrUnsummon(10000);
+ c->DespawnOrUnsummon(10s);
}
pInstance->SetData(DATA_INSTANCE_PROGRESS, INSTANCE_PROGRESS_FINISHED_INTRO);
}
@@ -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);
@@ -674,14 +674,14 @@ public:
switch (events.ExecuteEvent())
{
case 1:
- me->GetMotionMaster()->MovePoint(2, PTSTyrannusWaitPos1, false);
+ me->GetMotionMaster()->MovePoint(2, PTSTyrannusWaitPos1, FORCED_MOVEMENT_NONE, 0.f, false);
break;
case 2:
me->SetFacingTo(PTSTyrannusWaitPos1.GetOrientation());
me->setActive(false);
break;
case 3:
- me->GetMotionMaster()->MovePoint(3, PTSTyrannusWaitPos2, false);
+ me->GetMotionMaster()->MovePoint(3, PTSTyrannusWaitPos2, FORCED_MOVEMENT_NONE, 0.f, false);
break;
case 4:
me->SetFacingTo(PTSTyrannusWaitPos2.GetOrientation());
@@ -690,7 +690,7 @@ public:
me->GetMotionMaster()->MoveTakeoff(10, me->GetPositionX() + 2.0f * cos(me->GetOrientation()), me->GetPositionY() + 2.0f * std::sin(me->GetOrientation()), me->GetPositionZ() + 30.0f, 7.0f);
break;
case 6:
- me->GetMotionMaster()->MovePoint(4, PTSTyrannusWaitPos3, false);
+ me->GetMotionMaster()->MovePoint(4, PTSTyrannusWaitPos3, FORCED_MOVEMENT_NONE, 0.f, false);
break;
case 30:
{
@@ -1082,7 +1082,7 @@ public:
s->AddThreat(c, 0.0f);
}
}
- events.RescheduleEvent(10, 3000);
+ events.RescheduleEvent(10, 3s);
break;
}
@@ -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)))
@@ -1355,7 +1355,7 @@ public:
}
}
if (minDist < 200.0f * 200.0f)
- _owner.GetMotionMaster()->MovePoint(0, slaveFreePos[pointId], true, false);
+ _owner.GetMotionMaster()->MovePoint(0, slaveFreePos[pointId], FORCED_MOVEMENT_NONE, 0.f, true, false);
return true;
}
@@ -1381,9 +1381,9 @@ class spell_pos_slave_trigger_closest : public SpellScript
target->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
if (Creature* c = target->ToCreature())
{
- c->DespawnOrUnsummon(7000);
+ c->DespawnOrUnsummon(7s);
c->AI()->Talk(0, p);
- c->m_Events.AddEvent(new SlaveRunEvent(*c), c->m_Events.CalculateTime(3000));
+ c->m_Events.AddEventAtOffset(new SlaveRunEvent(*c), 3s);
}
}
}
@@ -1406,7 +1406,7 @@ class spell_pos_rimefang_frost_nova : public SpellScript
{
Unit::Kill(caster, target);
if (target->IsCreature())
- target->ToCreature()->DespawnOrUnsummon(30000);
+ target->ToCreature()->DespawnOrUnsummon(30s);
}
}
diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp
index 18a30b7dbc..7e1a25d7d8 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp
@@ -125,17 +125,18 @@ public:
void Reset() override
{
BossAI::Reset();
- for (uint8 i = 0; i < 5; i++)
- me->SummonCreature(NPC_LIVING_MOJO, mojoPosition[i].GetPositionX(), mojoPosition[i].GetPositionY(), mojoPosition[i].GetPositionZ(), 0, TEMPSUMMON_MANUAL_DESPAWN, 0);
-
- me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
- me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
- }
-
- void InitializeAI() override
- {
- BossAI::InitializeAI();
- me->CastSpell(me, SPELL_FREEZE_ANIM, true);
+ if (!me->IsInEvadeMode())
+ {
+ me->CastSpell(me, SPELL_FREEZE_ANIM, true);
+ me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
+ for (const auto & i : mojoPosition)
+ me->SummonCreature(NPC_LIVING_MOJO, i.GetPositionX(), i.GetPositionY(), i.GetPositionZ(), 0, TEMPSUMMON_MANUAL_DESPAWN, 0);
+ }
+ else
+ {
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
+ me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+ }
}
void JustReachedHome() override
@@ -144,9 +145,9 @@ public:
me->CastSpell(me, SPELL_FREEZE_ANIM, true);
}
- void JustEngagedWith(Unit* who) override
+ void ScheduleTasks() override
{
- BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_COLOSSUS_START_FIGHT, 1s);
events.ScheduleEvent(EVENT_COLOSSUS_MIGHTY_BLOW, 10s);
events.ScheduleEvent(EVENT_COLOSSUS_MORTAL_STRIKE, 7s);
events.ScheduleEvent(EVENT_COLOSSUS_HEALTH_1, 1s);
@@ -159,8 +160,8 @@ public:
{
summon->SetRegeneratingHealth(false);
summon->SetReactState(REACT_PASSIVE);
- summon->m_Events.AddEvent(new RestoreFight(summon), summon->m_Events.CalculateTime(3000));
- if (events.GetNextEventTime(EVENT_COLOSSUS_HEALTH_2) == 0)
+ summon->m_Events.AddEventAtOffset(new RestoreFight(summon), 3s);
+ if (!events.HasTimeUntilEvent(EVENT_COLOSSUS_HEALTH_2))
{
summon->SetHealth(summon->GetMaxHealth() / 2);
summon->LowerPlayerDamageReq(summon->GetMaxHealth() / 2);
@@ -183,6 +184,7 @@ public:
summons.Despawn(summon);
if (summon->GetEntry() == NPC_DRAKKARI_ELEMENTAL)
{
+ me->SetHealth(me->GetMaxHealth() / 2);
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM);
if (me->GetVictim())
@@ -231,7 +233,7 @@ public:
events.ScheduleEvent(EVENT_COLOSSUS_HEALTH_1, 1s);
break;
case EVENT_COLOSSUS_HEALTH_2:
- if (me->HealthBelowPct(21))
+ if (me->HealthBelowPct(2))
{
me->CastSpell(me, SPELL_EMERGE, false);
me->CastSpell(me, SPELL_EMERGE_SUMMON, true);
@@ -301,12 +303,12 @@ public:
switch (events.ExecuteEvent())
{
case EVENT_ELEMENTAL_HEALTH:
- if (me->HealthBelowPct(51))
+ if (me->HealthBelowPct(56))
{
me->CastSpell(me, SPELL_FACE_ME, true);
me->CastSpell(me, SPELL_SURGE_VISUAL, true);
me->CastSpell(me, SPELL_MERGE, false);
- me->DespawnOrUnsummon(2000);
+ me->DespawnOrUnsummon(2s);
events.Reset();
break;
}
@@ -315,7 +317,7 @@ public:
case EVENT_ELEMENTAL_SURGE:
Talk(SAY_SURGE);
me->CastSpell(me, SPELL_SURGE_VISUAL, true);
- me->CastSpell(me->GetVictim(), SPELL_SURGE, false);
+ DoCastRandomTarget(SPELL_SURGE, 0, 40, true, false, true);
events.ScheduleEvent(EVENT_ELEMENTAL_SURGE, 15s);
break;
case EVENT_ELEMENTAL_VOLLEY:
@@ -380,7 +382,7 @@ public:
{
me->SetReactState(REACT_PASSIVE);
me->GetMotionMaster()->MoveCharge(1672.96f, 743.488f, 143.338f, 7.0f, POINT_MERGE);
- me->DespawnOrUnsummon(1200);
+ me->DespawnOrUnsummon(1200ms);
}
}
diff --git a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp
index 5a4dbcd2cb..17d923c5e1 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp
@@ -17,6 +17,7 @@
#include "CreatureScript.h"
#include "ScriptedCreature.h"
+#include "SpellInfo.h"
#include "gundrak.h"
enum Spells
@@ -57,7 +58,7 @@ public:
void InitializeAI() override
{
BossAI::InitializeAI();
- me->GetMotionMaster()->MovePoint(POINT_START, 1638.55f, 919.76f, 104.95f, false);
+ me->GetMotionMaster()->MovePoint(POINT_START, 1638.55f, 919.76f, 104.95f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false);
me->SetHomePosition(1642.712f, 934.646f, 107.205f, 0.767f);
me->SetReactState(REACT_PASSIVE);
}
@@ -71,6 +72,15 @@ public:
}
}
+ void SpellHitTarget(Unit* target, SpellInfo const* spell) override
+ {
+ if (spell->Id == SPELL_ECK_SPRING)
+ {
+ me->GetThreatMgr().ResetAllThreat();
+ me->AddThreat(target, 1.0f);
+ }
+ }
+
void Reset() override
{
BossAI::Reset();
@@ -81,8 +91,8 @@ public:
BossAI::JustEngagedWith(who);
events.ScheduleEvent(EVENT_ECK_BERSERK, 60s, 90s);
events.ScheduleEvent(EVENT_ECK_BITE, 5s);
- events.ScheduleEvent(EVENT_ECK_SPIT, 10s);
- events.ScheduleEvent(EVENT_ECK_SPRING, 8s);
+ events.ScheduleEvent(EVENT_ECK_SPIT, 10s, 37s);
+ events.ScheduleEvent(EVENT_ECK_SPRING, 10s, 24s);
}
void JustDied(Unit* killer) override
@@ -120,17 +130,14 @@ public:
break;
case EVENT_ECK_SPIT:
me->CastSpell(me->GetVictim(), SPELL_ECK_SPIT, false);
- events.ScheduleEvent(EVENT_ECK_SPIT, 10s);
+ events.ScheduleEvent(EVENT_ECK_SPIT, 11s, 24s);
break;
case EVENT_ECK_SPRING:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true, false))
{
- me->GetThreatMgr().ResetAllThreat();
- me->AddThreat(target, 500.0f);
me->CastSpell(target, SPELL_ECK_SPRING, false);
}
-
- events.ScheduleEvent(EVENT_ECK_SPRING, 5s, 10s);
+ events.ScheduleEvent(EVENT_ECK_SPRING, 10s, 24s);
break;
}
diff --git a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp
index 2a56ce8873..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(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.GetNextEventTime(EVENT_KILL_TALK) == 0)
- {
- 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/boss_moorabi.cpp b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
index e0be1dd9d9..a9b989e6e4 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
@@ -92,12 +92,18 @@ public:
BossAI::JustEngagedWith(who);
me->CastSpell(me, SPELL_MOJO_FRENZY, true);
- events.ScheduleEvent(EVENT_GROUND_TREMOR, 18s);
- events.ScheduleEvent(EVENT_NUMBLING_SHOUT, 10s);
+ events.ScheduleEvent(EVENT_GROUND_TREMOR, 13s, 30s);
+ events.ScheduleEvent(EVENT_NUMBLING_SHOUT, 8s, 38s);
events.ScheduleEvent(EVENT_DETERMINED_STAB, 20s);
events.ScheduleEvent(EVENT_TRANSFORMATION, 12s);
}
+ void EnterEvadeMode(EvadeReason why) override
+ {
+ summons.DespawnAll();
+ BossAI::EnterEvadeMode(why);
+ }
+
void SpellHitTarget(Unit* /*caster*/, SpellInfo const* spellInfo) override
{
if (spellInfo->Id == SPELL_TRANSFORMATION)
@@ -113,12 +119,13 @@ public:
{
Talk(SAY_DEATH);
Talk(EMOTE_ALTAR);
+
BossAI::JustDied(killer);
}
void KilledUnit(Unit*) override
{
- if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
+ if (!events.HasTimeUntilEvent(EVENT_KILL_TALK))
{
Talk(SAY_SLAY);
events.ScheduleEvent(EVENT_KILL_TALK, 6s);
@@ -144,29 +151,52 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
- switch (events.ExecuteEvent())
+ while (uint32 eventId = events.ExecuteEvent())
{
- case EVENT_GROUND_TREMOR:
- if (roll_chance_i(50))
- Talk(SAY_QUAKE);
- me->CastSpell(me, me->GetDisplayId() != me->GetNativeDisplayId() ? SPELL_QUAKE : SPELL_GROUND_TREMOR, false);
- events.ScheduleEvent(EVENT_GROUND_TREMOR, 10s);
- break;
- case EVENT_NUMBLING_SHOUT:
- me->CastSpell(me, me->GetDisplayId() != me->GetNativeDisplayId() ? SPELL_NUMBING_ROAR : SPELL_NUMBING_SHOUT, false);
- events.ScheduleEvent(EVENT_NUMBLING_SHOUT, 10s);
- break;
- case EVENT_DETERMINED_STAB:
- me->CastSpell(me->GetVictim(), me->GetDisplayId() != me->GetNativeDisplayId() ? SPELL_DETERMINED_GORE : SPELL_DETERMINED_STAB, false);
- events.ScheduleEvent(EVENT_DETERMINED_STAB, 8s);
- break;
- case EVENT_TRANSFORMATION:
- Talk(EMOTE_TRANSFORM);
- Talk(SAY_TRANSFORM);
- me->CastSpell(me, SPELL_TRANSFORMATION, false);
- me->CastSpell(me, SPELL_SUMMON_PHANTOM_TRANSFORM, true);
- events.ScheduleEvent(EVENT_TRANSFORMATION, 10s);
- break;
+ switch (eventId)
+ {
+ case EVENT_GROUND_TREMOR:
+ if (roll_chance_i(50))
+ Talk(SAY_QUAKE);
+
+ if (me->GetDisplayId() != me->GetNativeDisplayId())
+ {
+ me->CastSpell(me, SPELL_QUAKE, false);
+ events.ScheduleEvent(EVENT_GROUND_TREMOR, 16s, 63s);
+ }
+ else
+ {
+ me->CastSpell(me, SPELL_GROUND_TREMOR, false);
+ events.ScheduleEvent(EVENT_GROUND_TREMOR, 13s, 27s);
+ }
+ return;
+
+ case EVENT_NUMBLING_SHOUT:
+ if (me->GetDisplayId() != me->GetNativeDisplayId())
+ {
+ me->CastSpell(me, SPELL_NUMBING_ROAR, false);
+ events.ScheduleEvent(EVENT_NUMBLING_SHOUT, 8s, 54s);
+ }
+ else
+ {
+ me->CastSpell(me, SPELL_NUMBING_SHOUT, false);
+ events.ScheduleEvent(EVENT_NUMBLING_SHOUT, 6s, 27s);
+ }
+ return;
+
+ case EVENT_DETERMINED_STAB:
+ me->CastSpell(me->GetVictim(), me->GetDisplayId() != me->GetNativeDisplayId() ? SPELL_DETERMINED_GORE : SPELL_DETERMINED_STAB, false);
+ events.ScheduleEvent(EVENT_DETERMINED_STAB, 8s);
+ return;
+
+ case EVENT_TRANSFORMATION:
+ Talk(EMOTE_TRANSFORM);
+ Talk(SAY_TRANSFORM);
+ me->CastSpell(me, SPELL_TRANSFORMATION, false);
+ me->CastSpell(me, SPELL_SUMMON_PHANTOM_TRANSFORM, true);
+ events.ScheduleEvent(EVENT_TRANSFORMATION, 10s);
+ return;
+ }
}
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp
index 5bf51b7c91..0229bab9e8 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp
@@ -137,7 +137,7 @@ public:
void KilledUnit(Unit*) override
{
- if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
+ if (!events.HasTimeUntilEvent(EVENT_KILL_TALK))
{
Talk(SAY_SLAY);
events.ScheduleEvent(EVENT_KILL_TALK, 6s);
diff --git a/src/server/scripts/Northrend/Gundrak/gundrak.h b/src/server/scripts/Northrend/Gundrak/gundrak.h
index 8d38819eab..7e0ffa41a0 100644
--- a/src/server/scripts/Northrend/Gundrak/gundrak.h
+++ b/src/server/scripts/Northrend/Gundrak/gundrak.h
@@ -30,16 +30,21 @@ enum Data
DATA_MOORABI = 1,
DATA_DRAKKARI_COLOSSUS = 2,
DATA_GAL_DARAH = 3,
- DATA_ECK_THE_FEROCIOUS_INIT = 4,
- DATA_ECK_THE_FEROCIOUS = 5,
- MAX_ENCOUNTERS = 6
+ DATA_ECK_THE_FEROCIOUS = 4,
+ MAX_ENCOUNTERS = 5
};
enum Creatures
{
+ NPC_RUINS_DWELLER = 29920,
NPC_ECK_THE_FEROCIOUS = 29932
};
+enum GDTexts
+{
+ EMOTE_SUMMON_ECK = 0
+};
+
enum GameObjects
{
GO_ALTAR_OF_SLAD_RAN = 192518,
@@ -66,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/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
index f8a87b2530..422303298e 100644
--- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
+++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
@@ -15,6 +15,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "CreatureGroups.h"
#include "InstanceMapScript.h"
#include "ScriptedCreature.h"
#include "gundrak.h"
@@ -137,13 +138,6 @@ public:
{
switch (type)
{
- case NPC_ECK_THE_FEROCIOUS:
- if (GetBossState(DATA_ECK_THE_FEROCIOUS_INIT) != DONE)
- {
- SetBossState(DATA_ECK_THE_FEROCIOUS_INIT, NOT_STARTED);
- SetBossState(DATA_ECK_THE_FEROCIOUS_INIT, DONE);
- }
- break;
case GO_ALTAR_OF_SLAD_RAN:
if (GameObject* statue = instance->GetGameObject(_bridgeGUIDs[0]))
statue->SetGoState(GO_STATE_READY);
@@ -194,19 +188,36 @@ public:
if (GameObject* altar = instance->GetGameObject(_drakkariAltarGUID))
altar->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
break;
- case DATA_ECK_THE_FEROCIOUS_INIT:
- {
- Position pos = {1624.70f, 891.43f, 95.08f, 1.2f};
- if (instance->IsHeroic())
- instance->SummonCreature(NPC_ECK_THE_FEROCIOUS, pos);
- break;
- }
}
return true;
}
+ void OnUnitDeath(Unit* unit) override
+ {
+ if (!instance->IsHeroic() || !unit->EntryEquals(NPC_RUINS_DWELLER) || IsBossDone(DATA_ECK_THE_FEROCIOUS))
+ return;
+
+ if (Creature* dweller = unit->ToCreature())
+ if (CreatureGroup* formation = dweller->GetFormation())
+ {
+ scheduler.CancelAll();
+ scheduler.Schedule(1s, [this, dweller, formation](TaskContext /*context*/)
+ {
+ if (!formation->IsAnyMemberAlive())
+ {
+ if (dweller)
+ dweller->AI()->Talk(EMOTE_SUMMON_ECK);
+
+ instance->SummonCreature(NPC_ECK_THE_FEROCIOUS, { 1624.70f, 891.43f, 95.08f, 1.2f });
+ }
+ });
+ }
+ }
+
void Update(uint32 diff) override
{
+ scheduler.Update(diff);
+
if (!_activateTimer)
return;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
index 7f18b8474c..f349760291 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
@@ -375,7 +375,7 @@ public:
me->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
me->SetReactState(REACT_AGGRESSIVE);
me->ForceValuesUpdateAtIndex(UNIT_NPC_FLAGS); // was in sniff. don't ask why
- me->m_Events.AddEvent(new StandUpEvent(*me), me->m_Events.CalculateTime(1000));
+ me->m_Events.AddEventAtOffset(new StandUpEvent(*me), 1s);
DoAction(ACTION_REMOVE_INVOCATION);
me->SetHealth(1);
break;
@@ -645,7 +645,7 @@ public:
me->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
me->SetReactState(REACT_AGGRESSIVE);
me->ForceValuesUpdateAtIndex(UNIT_NPC_FLAGS); // was in sniff. don't ask why
- me->m_Events.AddEvent(new StandUpEvent(*me), me->m_Events.CalculateTime(1000));
+ me->m_Events.AddEventAtOffset(new StandUpEvent(*me), 1s);
DoAction(ACTION_REMOVE_INVOCATION);
me->SetHealth(1);
break;
@@ -889,7 +889,7 @@ public:
summon->CastSpell(summon, SPELL_KINETIC_BOMB, true, nullptr, nullptr, me->GetGUID());
break;
case NPC_SHOCK_VORTEX:
- summon->m_Events.AddEvent(new ShockVortexExplodeEvent(*summon), summon->m_Events.CalculateTime(4500));
+ summon->m_Events.AddEventAtOffset(new ShockVortexExplodeEvent(*summon), 4500ms);
break;
default:
break;
@@ -939,7 +939,7 @@ public:
me->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
me->SetReactState(REACT_AGGRESSIVE);
me->ForceValuesUpdateAtIndex(UNIT_NPC_FLAGS); // was in sniff. don't ask why
- me->m_Events.AddEvent(new StandUpEvent(*me), me->m_Events.CalculateTime(1000));
+ me->m_Events.AddEventAtOffset(new StandUpEvent(*me), 1s);
me->SetHealth(me->GetMaxHealth());
DoAction(ACTION_CAST_INVOCATION);
break;
@@ -1213,7 +1213,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
void UpdateAI(uint32 diff) override
@@ -1287,13 +1287,13 @@ public:
me->SetControlled(true, UNIT_STATE_ROOT);
me->StopMoving();
me->CastSpell(me, SPELL_FLAMES, true);
- me->DespawnOrUnsummon(999);
+ me->DespawnOrUnsummon(999ms);
me->CastSpell(me, SPELL_FLAME_SPHERE_DEATH_EFFECT, true);
_exploded = true;
}
}
- void SetGUID(ObjectGuid guid, int32 /*type*/) override
+ void SetGUID(ObjectGuid const& guid, int32 /*type*/) override
{
_chaseGUID = guid;
}
@@ -1331,7 +1331,7 @@ public:
me->SetInCombatWithZone();
return;
}
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
void DamageDealt(Unit* target, uint32& damage, DamageEffectType /*damageType*/, SpellSchoolMask /*damageSchoolMask*/) override
@@ -1424,7 +1424,7 @@ public:
case EVENT_BOMB_DESPAWN:
me->RemoveAllAuras();
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
- me->DespawnOrUnsummon(exploded ? 5000 : 0);
+ me->DespawnOrUnsummon(exploded ? 5s : 0ms);
break;
case EVENT_CONTINUE_FALLING:
me->GetMotionMaster()->MovementExpired(false);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
index 5deccbc0b1..5994776980 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
@@ -533,7 +533,7 @@ public:
return _bloodboltedPlayers.count(guid) != 0;
}
- void SetGUID(ObjectGuid guid, int32 type = 0) override
+ void SetGUID(ObjectGuid const& guid, int32 type = 0) override
{
switch (type)
{
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
index f0172727b4..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,
@@ -583,14 +580,14 @@ public:
{
me->RemoveAurasDueToSpell(SPELL_GRIP_OF_AGONY);
me->SetDisableGravity(false);
- me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), 539.2917f, 10.0f);
+ me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), 539.2917f, FORCED_MOVEMENT_NONE, 10.0f);
for (std::list<Creature*>::iterator itr = _guardList.begin(); itr != _guardList.end(); ++itr)
(*itr)->AI()->DoAction(ACTION_DESPAWN);
/*Talk(SAY_OUTRO_HORDE_1);
- _events.ScheduleEvent(EVENT_OUTRO_HORDE_1, 10000);
- _events.ScheduleEvent(EVENT_OUTRO_HORDE_2, 18000);
- _events.ScheduleEvent(EVENT_OUTRO_HORDE_3, 24000);*/
+ _events.ScheduleEvent(EVENT_OUTRO_HORDE_1, 10s);
+ _events.ScheduleEvent(EVENT_OUTRO_HORDE_2, 18s);
+ _events.ScheduleEvent(EVENT_OUTRO_HORDE_3, 24s);*/
}
break;
case ACTION_EVADE:
@@ -651,8 +648,8 @@ public:
deathbringer->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
deathbringer->setDeathState(DeathState::Alive);
}
- _events.ScheduleEvent(EVENT_OUTRO_HORDE_4, 1000);
- _events.ScheduleEvent(EVENT_OUTRO_HORDE_5, 4000);
+ _events.ScheduleEvent(EVENT_OUTRO_HORDE_4, 1s);
+ _events.ScheduleEvent(EVENT_OUTRO_HORDE_5, 4s);
break;
case POINT_FINAL:
if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_DEATHBRINGER_SAURFANG)))
@@ -845,7 +842,7 @@ public:
{
me->RemoveAurasDueToSpell(SPELL_GRIP_OF_AGONY);
me->SetDisableGravity(false);
- me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), 539.2917f, 10.0f);
+ me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), 539.2917f, FORCED_MOVEMENT_NONE, 10.0f);
for (std::list<Creature*>::iterator itr = _guardList.begin(); itr != _guardList.end(); ++itr)
(*itr)->AI()->DoAction(ACTION_DESPAWN);
@@ -1030,7 +1027,7 @@ public:
me->GetMotionMaster()->MoveCharge(chargePos[_index].GetPositionX(), chargePos[_index].GetPositionY(), chargePos[_index].GetPositionZ(), 13.0f, POINT_CHARGE);
}
else if (action == ACTION_DESPAWN)
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
private:
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
index 923b9a341f..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))
@@ -233,7 +219,7 @@ public:
Talk(EMOTE_GAS_SPORE);
me->CastCustomSpell(SPELL_GAS_SPORE, SPELLVALUE_MAX_TARGETS, RAID_MODE<int32>(2, 3, 2, 3), me);
events.ScheduleEvent(EVENT_GAS_SPORE, 40s, 45s);
- events.DelayEventsToMax(20000, 1); // delay EVENT_VILE_GAS
+ events.DelayEventsToMax(20s, 1); // delay EVENT_VILE_GAS
break;
case EVENT_VILE_GAS:
{
@@ -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 51969299bc..b61bdc3178 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
@@ -373,7 +373,7 @@ class BattleExperienceEvent : public BasicEvent
{
public:
static uint32 const ExperiencedSpells[5];
- static uint32 const ExperiencedTimes[5];
+ static Milliseconds const ExperiencedTimes[5];
BattleExperienceEvent(Creature* creature) : _creature(creature), _level(0) { }
@@ -388,7 +388,8 @@ public:
_creature->CastSpell(_creature, ExperiencedSpells[_level], true);
if (_level < (_creature->GetMap()->IsHeroic() ? 4 : 3))
{
- _creature->m_Events.AddEvent(this, timer + ExperiencedTimes[_level]);
+ Milliseconds nextExperienceEventTime = Milliseconds(timer) + ExperiencedTimes[_level];
+ _creature->m_Events.AddEventAtOffset(this, nextExperienceEventTime);
return false;
}
@@ -401,7 +402,7 @@ private:
};
uint32 const BattleExperienceEvent::ExperiencedSpells[5] = { 0, SPELL_EXPERIENCED, SPELL_VETERAN, SPELL_ELITE, SPELL_ADDS_BERSERK };
-uint32 const BattleExperienceEvent::ExperiencedTimes[5] = { 100000, 70000, 60000, 90000, 0 };
+Milliseconds const BattleExperienceEvent::ExperiencedTimes[5] = { 100s, 70s, 60s, 90s, 0ms };
class PassengerController
{
@@ -503,7 +504,7 @@ public:
float x, y, z, o;
_dest.GetPosition(x, y, z, o);
_owner->GetTransport()->CalculatePassengerPosition(x, y, z, &o);
- _owner->GetMotionMaster()->MovePoint(EVENT_CHARGE_PREPATH, x, y, z, false);
+ _owner->GetMotionMaster()->MovePoint(EVENT_CHARGE_PREPATH, x, y, z, FORCED_MOVEMENT_NONE, 0.f, false);
return true;
}
@@ -668,14 +669,14 @@ public:
continue;
Creature* c = (*itr)->ToCreature();
if (c->GetEntry() == NPC_SKYBREAKER_MARINE || c->GetEntry() == NPC_SKYBREAKER_SERGEANT || c->GetEntry() == NPC_KOR_KRON_REAVER || c->GetEntry() == NPC_KOR_KRON_SERGEANT)
- c->DespawnOrUnsummon(1);
+ c->DespawnOrUnsummon(1ms);
}
}
}
else
{
uint32 teleportSpellId = _teamIdInInstance == TEAM_HORDE ? SPELL_TELEPORT_PLAYERS_ON_RESET_H : SPELL_TELEPORT_PLAYERS_ON_RESET_A;
- me->m_Events.AddEvent(new ResetEncounterEvent(me, teleportSpellId, _instance->GetGuidData(DATA_ENEMY_GUNSHIP)), me->m_Events.CalculateTime(8000));
+ me->m_Events.AddEventAtOffset(new ResetEncounterEvent(me, teleportSpellId, _instance->GetGuidData(DATA_ENEMY_GUNSHIP)), 8s);
}
}
@@ -703,7 +704,7 @@ public:
}
}
- void SetGUID(ObjectGuid guid, int32 id/* = 0*/) override
+ void SetGUID(ObjectGuid const& guid, int32 id/* = 0*/) override
{
if (id != ACTION_SHIP_VISITS_ENEMY && id != ACTION_SHIP_VISITS_SELF)
return;
@@ -847,7 +848,7 @@ public:
{
time_t now = GameTime::GetGameTime().count();
if (_firstMageCooldown > now)
- _events.ScheduleEvent(EVENT_SUMMON_MAGE, (_firstMageCooldown - now) * IN_MILLISECONDS);
+ _events.ScheduleEvent(EVENT_SUMMON_MAGE, Seconds(_firstMageCooldown - now));
else
_events.ScheduleEvent(EVENT_SUMMON_MAGE, 1ms);
}
@@ -880,7 +881,7 @@ public:
init.DisableTransportPathTransformations();
init.MovebyPath(path, 0);
init.Launch();
- me->DespawnOrUnsummon(18000);
+ me->DespawnOrUnsummon(18s);
}
}
@@ -915,7 +916,7 @@ public:
{
float x, y, z, o;
me->GetHomePosition(x, y, z, o);
- me->GetMotionMaster()->MovePoint(0, x, y, z, false);
+ me->GetMotionMaster()->MovePoint(0, x, y, z, FORCED_MOVEMENT_NONE, 0.f, false);
}
}
else
@@ -1072,7 +1073,7 @@ public:
{
float x, y, z, o;
me->GetHomePosition(x, y, z, o);
- me->GetMotionMaster()->MovePoint(0, x, y, z, false);
+ me->GetMotionMaster()->MovePoint(0, x, y, z, FORCED_MOVEMENT_NONE, 0.f, false);
}
}
}
@@ -1183,7 +1184,7 @@ public:
{
time_t now = GameTime::GetGameTime().count();
if (_firstMageCooldown > now)
- _events.ScheduleEvent(EVENT_SUMMON_MAGE, (_firstMageCooldown - now) * IN_MILLISECONDS);
+ _events.ScheduleEvent(EVENT_SUMMON_MAGE, Seconds(_firstMageCooldown - now));
else
_events.ScheduleEvent(EVENT_SUMMON_MAGE, 1ms);
}
@@ -1216,7 +1217,7 @@ public:
init.DisableTransportPathTransformations();
init.MovebyPath(path, 0);
init.Launch();
- me->DespawnOrUnsummon(18000);
+ me->DespawnOrUnsummon(18s);
}
}
@@ -1251,7 +1252,7 @@ public:
{
float x, y, z, o;
me->GetHomePosition(x, y, z, o);
- me->GetMotionMaster()->MovePoint(0, x, y, z, false);
+ me->GetMotionMaster()->MovePoint(0, x, y, z, FORCED_MOVEMENT_NONE, 0.f, false);
}
}
else
@@ -1411,7 +1412,7 @@ public:
{
float x, y, z, o;
me->GetHomePosition(x, y, z, o);
- me->GetMotionMaster()->MovePoint(0, x, y, z, false);
+ me->GetMotionMaster()->MovePoint(0, x, y, z, FORCED_MOVEMENT_NONE, 0.f, false);
}
}
}
@@ -1518,7 +1519,7 @@ struct gunship_npc_AI : public ScriptedAI
me->SetTransportHomePosition(Slot->TargetPosition);
me->GetTransport()->CalculatePassengerPosition(x, y, z, &o);
me->SetHomePosition(x, y, z, o);
- me->GetMotionMaster()->MovePoint(EVENT_CHARGE_PREPATH, x, y, z, false);
+ me->GetMotionMaster()->MovePoint(EVENT_CHARGE_PREPATH, x, y, z, FORCED_MOVEMENT_NONE, 0.f, false);
}
}
@@ -1544,7 +1545,7 @@ struct gunship_npc_AI : public ScriptedAI
if (type == POINT_MOTION_TYPE && pointId == EVENT_CHARGE_PREPATH && Slot)
{
me->SetFacingTo(Slot->TargetPosition.GetOrientation());
- me->m_Events.AddEvent(new BattleExperienceEvent(me), me->m_Events.CalculateTime(BattleExperienceEvent::ExperiencedTimes[0]));
+ me->m_Events.AddEventAtOffset(new BattleExperienceEvent(me), BattleExperienceEvent::ExperiencedTimes[0]);
me->CastSpell(me, SPELL_BATTLE_EXPERIENCE, true);
me->SetReactState(REACT_AGGRESSIVE);
}
@@ -1579,7 +1580,7 @@ struct npc_gunship_boarding_addAI : public ScriptedAI
{
SetSlotInfo(data);
me->SetReactState(REACT_PASSIVE);
- me->m_Events.AddEvent(new DelayedMovementEvent(me, Slot->TargetPosition), me->m_Events.CalculateTime(3000 * (Index - SLOT_MARINE_1)));
+ me->m_Events.AddEventAtOffset(new DelayedMovementEvent(me, Slot->TargetPosition), Milliseconds(3000 * (Index - SLOT_MARINE_1)));
}
}
@@ -1608,7 +1609,7 @@ struct npc_gunship_boarding_addAI : public ScriptedAI
if (type == POINT_MOTION_TYPE && pointId == EVENT_CHARGE_PREPATH && Slot)
{
me->SetFacingTo(Slot->TargetPosition.GetOrientation());
- me->m_Events.AddEvent(new BattleExperienceEvent(me), me->m_Events.CalculateTime(BattleExperienceEvent::ExperiencedTimes[0]));
+ me->m_Events.AddEventAtOffset(new BattleExperienceEvent(me), BattleExperienceEvent::ExperiencedTimes[0]);
me->CastSpell(me, SPELL_BATTLE_EXPERIENCE, true);
me->SetReactState(REACT_AGGRESSIVE);
@@ -2271,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_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
index 54b279510d..a29cc2cc6b 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
@@ -482,7 +482,7 @@ public:
minrange = summon->GetExactDist(p);
}
- summon->ToTempSummon()->DespawnOrUnsummon(30000);
+ summon->ToTempSummon()->DespawnOrUnsummon(30s);
}
else
{
@@ -522,7 +522,7 @@ public:
darnavan->GetMotionMaster()->MoveIdle();
darnavan->StopMoving();
darnavan->SetReactState(REACT_PASSIVE);
- darnavan->m_Events.AddEvent(new DaranavanMoveEvent(*darnavan), darnavan->m_Events.CalculateTime(10000));
+ darnavan->m_Events.AddEventAtOffset(new DaranavanMoveEvent(*darnavan), 10s);
darnavan->AI()->Talk(SAY_DARNAVAN_RESCUED);
if (Player* owner = killer->GetCharmerOrOwnerPlayerOrPlayerItself())
{
@@ -949,7 +949,7 @@ public:
me->GetMotionMaster()->MovementExpired();
me->StopMoving();
me->SetControlled(true, UNIT_STATE_STUNNED);
- me->DespawnOrUnsummon(500);
+ me->DespawnOrUnsummon(500ms);
break;
default:
break;
@@ -977,7 +977,7 @@ public:
if (!me->GetVictim() || me->GetVictim()->GetGUID() != targetGUID)
{
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
return;
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
index 7faa41fd27..53a73a8fe0 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
@@ -206,8 +206,8 @@ public:
if (Aura* pStorm = me->GetAura(SPELL_BONE_STORM))
pStorm->SetDuration(int32(_boneStormDuration));
events.ScheduleEvent(EVENT_BONE_STORM_MOVE, 0ms);
- events.ScheduleEvent(EVENT_END_BONE_STORM, _boneStormDuration + 1);
- }
+ events.ScheduleEvent(EVENT_END_BONE_STORM, Milliseconds(_boneStormDuration + 1));
+ }
break;
case EVENT_BONE_STORM_MOVE:
{
@@ -397,7 +397,7 @@ public:
trapped->NearTeleportTo(exitPos.GetPositionX(), exitPos.GetPositionY(), exitPos.GetPositionZ(), exitPos.GetOrientation(), false);
}
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
void JustDied(Unit* /*killer*/) override
@@ -429,7 +429,7 @@ public:
summonerUnit->SetPetGUID(petGUID);
summonerUnit->GetMotionMaster()->Clear();
summonerUnit->StopMoving();
- events.ScheduleEvent(1, 8000);
+ events.ScheduleEvent(1, 8s);
hasTrappedUnit = true;
}
}
@@ -451,13 +451,13 @@ public:
}
else
{
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
return;
}
}
else
{
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
return;
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
index cb93c1bf6b..cdcc909606 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
@@ -352,7 +352,7 @@ public:
{
if (summon->GetEntry() != 38308 && summon->GetEntry() != 38309 && (!me->IsInCombat() || me->IsInEvadeMode()))
{
- summon->DespawnOrUnsummon(1);
+ summon->DespawnOrUnsummon(1ms);
return;
}
@@ -566,14 +566,14 @@ public:
{
SpellInfo const* spell = sSpellMgr->GetSpellInfo(SPELL_CREATE_CONCOCTION);
me->CastSpell(me, SPELL_CREATE_CONCOCTION, false);
- events.ScheduleEvent(EVENT_PHASE_TRANSITION, sSpellMgr->GetSpellForDifficultyFromSpell(spell, me)->CalcCastTime() + 2250);
+ events.ScheduleEvent(EVENT_PHASE_TRANSITION, Milliseconds(sSpellMgr->GetSpellForDifficultyFromSpell(spell, me)->CalcCastTime() + 2250));
break;
}
case 3:
{
SpellInfo const* spell = sSpellMgr->GetSpellInfo(SPELL_GUZZLE_POTIONS);
me->CastSpell(me, SPELL_GUZZLE_POTIONS, false);
- events.ScheduleEvent(EVENT_PHASE_TRANSITION, sSpellMgr->GetSpellForDifficultyFromSpell(spell, me)->CalcCastTime() + 2250);
+ events.ScheduleEvent(EVENT_PHASE_TRANSITION, Milliseconds(sSpellMgr->GetSpellForDifficultyFromSpell(spell, me)->CalcCastTime() + 2250));
break;
}
default:
@@ -670,8 +670,8 @@ public:
void ChangePhase()
{
- uint32 heroicDelay = (IsHeroic() ? 25000 : 0);
- events.DelayEvents(24000 + heroicDelay, EVENT_GROUP_ABILITIES);
+ Milliseconds heroicDelay = (IsHeroic() ? 25s : 0ms);
+ events.DelayEvents(24s + heroicDelay, EVENT_GROUP_ABILITIES);
me->AttackStop();
if (!IsHeroic())
{
@@ -715,8 +715,8 @@ public:
{
case 1:
_phase = 2;
- events.ScheduleEvent(EVENT_MALLEABLE_GOO, urand(25000, 28000) + heroicDelay, EVENT_GROUP_ABILITIES);
- events.ScheduleEvent(EVENT_CHOKING_GAS_BOMB, urand(35000, 40000) + heroicDelay, EVENT_GROUP_ABILITIES);
+ events.ScheduleEvent(EVENT_MALLEABLE_GOO, randtime(25s, 28s) + heroicDelay, EVENT_GROUP_ABILITIES);
+ events.ScheduleEvent(EVENT_CHOKING_GAS_BOMB, randtime(35s, 40s) + heroicDelay, EVENT_GROUP_ABILITIES);
break;
case 2:
_phase = 3;
@@ -745,7 +745,7 @@ public:
ObjectGuid targetGUID;
- void SetGUID(ObjectGuid guid, int32 type) override
+ void SetGUID(ObjectGuid const& guid, int32 type) override
{
if (type == -1)
targetGUID = guid;
@@ -757,7 +757,7 @@ public:
if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_PROFESSOR_PUTRICIDE)))
{
if (!professor->IsInCombat())
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
else
professor->AI()->JustSummoned(me);
}
@@ -1056,7 +1056,7 @@ class spell_putricide_ooze_channel : public SpellScript
if (targets.empty())
{
FinishCast(SPELL_FAILED_NO_VALID_TARGETS);
- GetCaster()->ToCreature()->DespawnOrUnsummon(1); // despawn next update
+ GetCaster()->ToCreature()->DespawnOrUnsummon(1ms); // despawn next update
return;
}
@@ -1491,7 +1491,7 @@ class spell_putricide_eat_ooze : public SpellScript
{
target->RemoveAurasDueToSpell(SPELL_GROW_STACKER);
target->RemoveAura(grow);
- target->DespawnOrUnsummon(1);
+ target->DespawnOrUnsummon(1ms);
}
else
grow->ModStackAmount(-4);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
index e9e7acfbd4..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,
@@ -131,13 +129,13 @@ public:
{
}
- uint32 infectionCooldown;
+ Milliseconds infectionCooldown;
ObjectGuid _oozeFloodDummyGUIDs[4][2];
uint8 _oozeFloodStage;
void Reset() override
{
- infectionCooldown = 14000;
+ infectionCooldown = 14s;
for (uint8 i = 0; i < 4; ++i)
for (uint8 j = 0; j < 2; ++j)
@@ -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)))
@@ -211,7 +209,7 @@ public:
if (me->IsAlive() && me->IsInCombat() && !me->IsInEvadeMode())
summons.Summon(summon);
else
- summon->DespawnOrUnsummon(1);
+ summon->DespawnOrUnsummon(1ms);
}
void KilledUnit(Unit* victim) override
@@ -283,14 +281,14 @@ public:
DoCastSelf(SPELL_SLIME_SPRAY);
}
}
- events.DelayEvents(1);
+ events.DelayEvents(1ms);
events.ScheduleEvent(EVENT_SLIME_SPRAY, 20s);
events.ScheduleEvent(EVENT_UNROOT, 0ms);
break;
case EVENT_HASTEN_INFECTIONS:
- if (infectionCooldown >= 8000)
+ if (infectionCooldown >= 8s)
{
- infectionCooldown -= 2000;
+ infectionCooldown -= 2s;
events.ScheduleEvent(EVENT_HASTEN_INFECTIONS, 90s);
}
break;
@@ -373,7 +371,7 @@ public:
{
if (Creature* rotface = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_ROTFACE)))
rotface->AI()->SummonedCreatureDespawn(me);
- me->DespawnOrUnsummon(0);
+ me->DespawnOrUnsummon(0ms);
}
void UpdateAI(uint32 diff) override
@@ -798,7 +796,7 @@ class spell_rotface_unstable_ooze_explosion_suicide_aura : public AuraScript
target->SetVisible(false);
target->RemoveAllAuras();
//target->ToCreature()->DespawnOrUnsummon();
- target->ToCreature()->DespawnOrUnsummon(60000);
+ target->ToCreature()->DespawnOrUnsummon(60s);
}
void Register() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
index 884cda64a8..2237cf87f6 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
@@ -384,7 +384,7 @@ public:
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetSpeed(MOVE_RUN, 4.28571f);
float moveTime = me->GetExactDist(&SindragosaFlyInPos) / (me->GetSpeed(MOVE_RUN) * 0.001f);
- me->m_Events.AddEvent(new FrostwyrmLandEvent(*me, SindragosaLandPos), me->m_Events.CalculateTime(uint64(moveTime) + 250));
+ me->m_Events.AddEventAtOffset(new FrostwyrmLandEvent(*me, SindragosaLandPos), Milliseconds(uint32(moveTime) + 250));
me->GetMotionMaster()->MovePoint(POINT_FROSTWYRM_FLY_IN, SindragosaFlyInPos);
if (!instance->GetData(DATA_SINDRAGOSA_INTRO))
@@ -478,7 +478,7 @@ public:
{
summons.Summon(summon);
if (summon->GetEntry() == NPC_FROST_BOMB)
- summon->m_Events.AddEvent(new FrostBombExplosion(summon, me->GetGUID()), summon->m_Events.CalculateTime(5500));
+ summon->m_Events.AddEventAtOffset(new FrostBombExplosion(summon, me->GetGUID()), 5500ms);
}
void SummonedCreatureDespawn(Creature* summon) override
@@ -523,7 +523,7 @@ public:
me->SetControlled(true, UNIT_STATE_ROOT);
me->SendMovementFlagUpdate();
me->CastSpell(me->GetVictim(), SPELL_TAIL_SMASH, false);
- events.DelayEventsToMax(1, 0);
+ events.DelayEventsToMax(1ms, 0);
events.ScheduleEvent(EVENT_UNROOT, 0ms);
events.ScheduleEvent(EVENT_TAIL_SMASH, 22s, 27s, EVENT_GROUP_LAND_PHASE);
break;
@@ -532,7 +532,7 @@ public:
me->SetControlled(true, UNIT_STATE_ROOT);
me->SendMovementFlagUpdate();
me->CastSpell(me->GetVictim(), _isThirdPhase ? SPELL_FROST_BREATH_P2 : SPELL_FROST_BREATH_P1, false);
- events.DelayEventsToMax(1, 0);
+ events.DelayEventsToMax(1ms, 0);
events.ScheduleEvent(EVENT_UNROOT, 0ms);
events.ScheduleEvent(EVENT_FROST_BREATH, 20s, 25s, EVENT_GROUP_LAND_PHASE);
break;
@@ -547,11 +547,10 @@ public:
break;
case EVENT_ICY_GRIP:
me->CastSpell((Unit*)nullptr, SPELL_ICY_GRIP, false);
- events.DelayEventsToMax(1001, 0);
+ events.DelayEventsToMax(1001ms, 0);
events.ScheduleEvent(EVENT_BLISTERING_COLD, 1s, EVENT_GROUP_LAND_PHASE);
- if (uint32 evTime = events.GetNextEventTime(EVENT_ICE_TOMB))
- if (events.GetTimer() > evTime || evTime - events.GetTimer() < 7000)
- events.RescheduleEvent(EVENT_ICE_TOMB, 7s);
+ if (events.GetTimeUntilEvent(EVENT_ICE_TOMB) < 7s)
+ events.RescheduleEvent(EVENT_ICE_TOMB, 7s);
break;
case EVENT_BLISTERING_COLD:
Talk(EMOTE_WARN_BLISTERING_COLD);
@@ -652,9 +651,8 @@ public:
Talk(EMOTE_WARN_FROZEN_ORB, target);
me->CastSpell(target, SPELL_ICE_TOMB_DUMMY, true);
me->CastSpell(target, SPELL_FROST_BEACON, true);
- if (uint32 evTime = events.GetNextEventTime(EVENT_ICY_GRIP))
- if (events.GetTimer() > evTime || evTime - events.GetTimer() < 8000)
- events.RescheduleEvent(EVENT_ICY_GRIP, 8s, EVENT_GROUP_LAND_PHASE);
+ if (events.GetTimeUntilEvent(EVENT_ICY_GRIP) < 8s)
+ events.RescheduleEvent(EVENT_ICY_GRIP, 8s, EVENT_GROUP_LAND_PHASE);
}
events.ScheduleEvent(EVENT_ICE_TOMB, 18s, 22s);
break;
@@ -700,7 +698,7 @@ public:
uint32 _existenceCheckTimer;
uint16 _asphyxiationTimer;
- void SetGUID(ObjectGuid guid, int32 type) override
+ void SetGUID(ObjectGuid const& guid, int32 type) override
{
if (type == DATA_TRAPPED_PLAYER)
_trappedPlayerGUID = guid;
@@ -722,7 +720,7 @@ public:
player->RemoveAurasDueToSpell(SPELL_ICE_TOMB_DAMAGE);
player->RemoveAurasDueToSpell(SPELL_ASPHYXIATION);
player->RemoveAurasDueToSpell(SPELL_ICE_TOMB_UNTARGETABLE);
- me->DespawnOrUnsummon(5000);
+ me->DespawnOrUnsummon(5s);
}
}
@@ -1081,7 +1079,7 @@ class spell_sindragosa_ice_tomb_trap_aura : public AuraScript
void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (Unit* c = GetCaster())
- GetTarget()->m_Events.AddEvent(new IceTombSummonEvent(GetTarget(), c->GetGUID()), GetTarget()->m_Events.CalculateTime(500));
+ GetTarget()->m_Events.AddEventAtOffset(new IceTombSummonEvent(GetTarget(), c->GetGUID()), 500ms);
}
void ExtraRemoveEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -1247,7 +1245,7 @@ public:
me->setActive(true);
me->SetImmuneToPC(true);
float moveTime = me->GetExactDist(&SpinestalkerFlyPos) / (me->GetSpeed(MOVE_RUN) * 0.001f);
- me->m_Events.AddEvent(new FrostwyrmLandEvent(*me, SpinestalkerLandPos), me->m_Events.CalculateTime(uint64(moveTime) + 250));
+ me->m_Events.AddEventAtOffset(new FrostwyrmLandEvent(*me, SpinestalkerLandPos), Milliseconds(uint32(moveTime) + 250));
me->SetDefaultMovementType(IDLE_MOTION_TYPE);
me->GetMotionMaster()->MoveIdle();
me->StopMoving();
@@ -1378,7 +1376,7 @@ public:
me->setActive(true);
me->SetImmuneToPC(true);
float moveTime = me->GetExactDist(&RimefangFlyPos) / (me->GetSpeed(MOVE_RUN) * 0.001f);
- me->m_Events.AddEvent(new FrostwyrmLandEvent(*me, RimefangLandPos), me->m_Events.CalculateTime(uint64(moveTime) + 250));
+ me->m_Events.AddEventAtOffset(new FrostwyrmLandEvent(*me, RimefangLandPos), Milliseconds(uint32(moveTime) + 250));
me->SetDefaultMovementType(IDLE_MOTION_TYPE);
me->GetMotionMaster()->MoveIdle();
me->StopMoving();
@@ -1451,8 +1449,8 @@ public:
else destZ = me->GetPositionZ() + 25.0f;
me->GetMotionMaster()->MoveTakeoff(0, me->GetPositionX(), me->GetPositionY(), destZ, me->GetSpeed(MOVE_RUN));
float moveTime = std::fabs(destZ - me->GetPositionZ()) / (me->GetSpeed(MOVE_RUN) * 0.001f);
- _events.ScheduleEvent(EVENT_ICY_BLAST, uint32(moveTime) + urand(60000, 70000));
- _events.ScheduleEvent(EVENT_ICY_BLAST_CAST, uint32(moveTime) + 250);
+ _events.Repeat(Milliseconds(uint32(moveTime) + urand(60000, 70000)));
+ _events.ScheduleEvent(EVENT_ICY_BLAST_CAST, Milliseconds(uint32(moveTime) + 250));
break;
}
case EVENT_ICY_BLAST_CAST:
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 d746989103..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
@@ -552,7 +543,7 @@ public:
if (--_counter)
{
- _owner->m_Events.AddEvent(this, _owner->m_Events.CalculateTime(3000));
+ _owner->m_Events.AddEventAtOffset(this, 3s);
return false;
}
@@ -826,12 +817,12 @@ public:
me->SetDisableGravity(false);
me->GetMotionMaster()->MoveFall();
if (Creature* frostmourne = me->FindNearestCreature(NPC_FROSTMOURNE_TRIGGER, 50.0f))
- frostmourne->DespawnOrUnsummon(1);
+ frostmourne->DespawnOrUnsummon(1ms);
if (Creature* terenas = me->FindNearestCreature(NPC_TERENAS_MENETHIL_OUTRO, 50.0f))
- terenas->DespawnOrUnsummon(1);
+ terenas->DespawnOrUnsummon(1ms);
- me->m_Events.AddEvent(new LichKingDeathEvent(*me), me->m_Events.CalculateTime(2500)); // die after spinning anim is over, so death anim is visible
- me->m_Events.AddEvent(new LichKingMovieEvent(*me), me->m_Events.CalculateTime(11500));
+ me->m_Events.AddEventAtOffset(new LichKingDeathEvent(*me), 2500ms); // die after spinning anim is over, so death anim is visible
+ me->m_Events.AddEventAtOffset(new LichKingMovieEvent(*me), 11500ms);
}
if (!_bFordringMustFallYell && me->GetHealth() < 500000)
@@ -862,7 +853,7 @@ public:
summon->CastSpell(summon, SPELL_RISEN_WITCH_DOCTOR_SPAWN, true);
summon->SetReactState(REACT_PASSIVE);
summon->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE);
- summon->m_Events.AddEvent(new StartMovementEvent(me, summon), summon->m_Events.CalculateTime(5000));
+ summon->m_Events.AddEventAtOffset(new StartMovementEvent(me, summon), 5s);
break;
case NPC_RAGING_SPIRIT:
summon->SetHomePosition(CenterPosition);
@@ -872,7 +863,7 @@ public:
summon->SetReactState(REACT_PASSIVE);
summon->GetMotionMaster()->MoveRandom(10.0f);
if (_phase == PHASE_THREE)
- summon->m_Events.AddEvent(new VileSpiritActivateEvent(summon), summon->m_Events.CalculateTime(15000));
+ summon->m_Events.AddEventAtOffset(new VileSpiritActivateEvent(summon), 15s);
break;
}
case NPC_STRANGULATE_VEHICLE:
@@ -885,8 +876,8 @@ public:
summon->StopMovingOnCurrentPos();
break;
case NPC_VALKYR_SHADOWGUARD:
- if (_phase == PHASE_THREE || events.GetNextEventTime(EVENT_QUAKE_2))
- summon->DespawnOrUnsummon(1);
+ if (_phase == PHASE_THREE || events.HasTimeUntilEvent(EVENT_QUAKE_2))
+ summon->DespawnOrUnsummon(1ms);
break;
default:
break;
@@ -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);
@@ -944,7 +935,7 @@ public:
Talk(SAY_LK_REMORSELESS_WINTER);
me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL);
me->CastSpell(me, SPELL_REMORSELESS_WINTER_1, false);
- //events.DelayEvents(62500, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions, 15mins on movies
+ //events.DelayEvents(62500ms, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions, 15mins on movies
events.ScheduleEvent(EVENT_QUAKE, 62s + 500ms);
events.ScheduleEvent(EVENT_PAIN_AND_SUFFERING, 3500ms, EVENT_GROUP_ABILITIES);
events.ScheduleEvent(EVENT_SUMMON_ICE_SPHERE, 8s, EVENT_GROUP_ABILITIES);
@@ -956,7 +947,7 @@ public:
me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL);
me->CastSpell(me, SPELL_REMORSELESS_WINTER_2, false);
summons.DespawnEntry(NPC_VALKYR_SHADOWGUARD);
- //events.DelayEvents(62500, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions, 15 mins on movies
+ //events.DelayEvents(62500ms, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions, 15 mins on movies
events.ScheduleEvent(EVENT_QUAKE_2, 62s + 500ms);
events.ScheduleEvent(EVENT_PAIN_AND_SUFFERING, 3500ms, EVENT_GROUP_ABILITIES);
events.ScheduleEvent(EVENT_SUMMON_ICE_SPHERE, 8s, EVENT_GROUP_ABILITIES);
@@ -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);
@@ -1081,11 +1072,11 @@ public:
case EVENT_PAIN_AND_SUFFERING:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true))
{
- //events.DelayEventsToMax(500, EVENT_GROUP_ABILITIES);
+ //events.DelayEventsToMax(500ms, EVENT_GROUP_ABILITIES);
me->SetFacingTo(me->GetAngle(target));
me->CastSpell(target, SPELL_PAIN_AND_SUFFERING, false);
}
- events.ScheduleEvent(EVENT_PAIN_AND_SUFFERING, (IsHeroic() ? urand(1250, 1750) : urand(1750, 2250)), EVENT_GROUP_ABILITIES);
+ events.Repeat((IsHeroic() ? randtime(1250ms, 1750ms) : randtime(1750ms, 2250ms)));
break;
case EVENT_SUMMON_ICE_SPHERE:
me->CastSpell((Unit*)nullptr, SPELL_SUMMON_ICE_SPHERE, false);
@@ -1098,21 +1089,21 @@ public:
break;
case EVENT_DEFILE:
{
- uint32 evTime = events.GetNextEventTime(EVENT_SUMMON_VALKYR);
+ Milliseconds evTime = events.GetTimeUntilEvent(EVENT_SUMMON_VALKYR);
// if defile (cast time 2sec) is less than 3 before valkyr appears
// we've to decide
- if (evTime && (events.GetTimer() > evTime || evTime - events.GetTimer() < 5000))
+ if (evTime < 5s)
{
// if valkyr is less than 1.5 secs after defile (cast time 2 sec) then we've a sync issue, so
// we need to cancel it (break) and schedule a defile to be casted 5 or 4 seconds after valkyr
- if (events.GetTimer() > evTime || evTime - events.GetTimer() < 3500)
+ if (evTime < 3500ms)
{
- uint32 t = events.GetTimer() > evTime ? 0 : evTime - events.GetTimer();
- events.ScheduleEvent(EVENT_DEFILE, t + (Is25ManRaid() ? 5000 : 4000), EVENT_GROUP_ABILITIES);
+ Milliseconds t = evTime > 0ms ? evTime : 0ms;
+ events.ScheduleEvent(EVENT_DEFILE, t + (Is25ManRaid() ? 5s : 4s), EVENT_GROUP_ABILITIES);
break;
}
- // if valkyr is coming between 1.5 and 3 seconds after defile then we've to
+ // if valkyr is coming within 2,5 seconds after defile then we've to
// delay valkyr just a bit
events.RescheduleEvent(EVENT_SUMMON_VALKYR, 5s, EVENT_GROUP_ABILITIES);
}
@@ -1145,17 +1136,14 @@ 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
// doesn't exist ( now > next defile ) or defile is coming too soon
- uint32 minTime = (Is25ManRaid() ? 5000 : 4000);
- if (uint32 evTime = events.GetNextEventTime(EVENT_DEFILE))
- if (events.GetTimer() > evTime || evTime - events.GetTimer() < minTime)
- {
- events.RescheduleEvent(EVENT_DEFILE, minTime, EVENT_GROUP_ABILITIES);
- }
+ Milliseconds minTime = (Is25ManRaid() ? 5s : 4s);
+ if (events.GetTimeUntilEvent(EVENT_DEFILE) < minTime)
+ events.RescheduleEvent(EVENT_DEFILE, minTime, EVENT_GROUP_ABILITIES);
}
break;
case EVENT_VILE_SPIRITS:
@@ -1180,7 +1168,7 @@ public:
me->SetReactState(REACT_PASSIVE);
me->AttackStop();
events.ScheduleEvent(EVENT_START_ATTACK, 55s);
- events.DelayEvents(52500, EVENT_GROUP_VILE_SPIRITS);
+ events.DelayEvents(52500ms, EVENT_GROUP_VILE_SPIRITS);
events.CancelEvent(EVENT_DEFILE);
events.CancelEvent(EVENT_SOUL_REAPER);
events.ScheduleEvent(EVENT_FROSTMOURNE_HEROIC, 6s, EVENT_GROUP_ABILITIES);
@@ -1192,7 +1180,7 @@ public:
if (summon->GetEntry() == NPC_VILE_SPIRIT)
{
summon->m_Events.KillAllEvents(true);
- summon->m_Events.AddEvent(new VileSpiritActivateEvent(summon), summon->m_Events.CalculateTime(55000));
+ summon->m_Events.AddEventAtOffset(new VileSpiritActivateEvent(summon), 55s);
summon->GetMotionMaster()->Clear(true);
summon->StopMoving();
summon->SetReactState(REACT_PASSIVE);
@@ -1216,7 +1204,7 @@ public:
{
spawner->CastSpell(spawner, SPELL_SUMMON_SPIRIT_BOMB_1, true); // summons bombs randomly
spawner->CastSpell(spawner, SPELL_SUMMON_SPIRIT_BOMB_2, true); // summons bombs on players
- spawner->m_Events.AddEvent(new TriggerWickedSpirit(spawner), spawner->m_Events.CalculateTime(3000));
+ spawner->m_Events.AddEventAtOffset(new TriggerWickedSpirit(spawner), 3s);
terenas->SetImmuneToAll(true); // to avoid being healed by player trinket procs. terenas' health doesn't matter on heroic
}
}
@@ -1508,9 +1496,9 @@ public:
theLichKing->GetMotionMaster()->MovePoint(0, CenterPosition);
uint32 travelTime = 1000 * theLichKing->GetExactDist(&CenterPosition) / theLichKing->GetSpeed(MOVE_WALK) + 1000;
- _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_4, 1 + travelTime);
- _events.ScheduleEvent(EVENT_OUTRO_LK_RAISE_DEAD, 1000 + travelTime);
- _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_5, 29000 + travelTime);
+ _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_4, Milliseconds(1 + travelTime));
+ _events.ScheduleEvent(EVENT_OUTRO_LK_RAISE_DEAD, Milliseconds(1000 + travelTime));
+ _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_5, Milliseconds(29000 + travelTime));
}
break;
case EVENT_OUTRO_LK_TALK_4:
@@ -2081,7 +2069,7 @@ class spell_the_lich_king_shadow_trap_periodic : public SpellScript
if (Aura* a = GetCaster()->GetAura(SPELL_SHADOW_TRAP_AURA))
a->SetDuration(0);
if (GetCaster()->IsCreature())
- GetCaster()->ToCreature()->DespawnOrUnsummon(3000);
+ GetCaster()->ToCreature()->DespawnOrUnsummon(3s);
}
void Register() override
@@ -2137,7 +2125,7 @@ public:
{
me->RemoveAllAuras();
me->CastSpell(me, SPELL_ICE_BURST, true);
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
targetGUID.Clear();
timer = 9999;
me->InterruptNonMeleeSpells(true);
@@ -2241,7 +2229,7 @@ public:
if (Player* plr = ScriptedAI::SelectTargetFromPlayerList(100.0f, 0, true))
plr->CastSpell(me, SPELL_RAGING_SPIRIT_VISUAL_CLONE, true);
else
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
}
@@ -2355,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()
@@ -2452,7 +2439,7 @@ public:
if (IsHeroic())
GoSiphon();
else
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
@@ -2522,7 +2509,7 @@ public:
if (IsHeroic())
GoSiphon();
else
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
break;
case POINT_START_SIPHON:
@@ -2539,7 +2526,7 @@ public:
}
}
- void SetGUID(ObjectGuid guid, int32 /* = 0*/) override
+ void SetGUID(ObjectGuid const& guid, int32 /* = 0*/) override
{
_grabbedPlayer = guid;
}
@@ -2568,8 +2555,8 @@ public:
me->AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD);
me->SetCanFly(false);
me->SetDisableGravity(false);
- me->GetMotionMaster()->MovePoint(POINT_DROP_PLAYER, _destPoint, false);
- me->SetDisableGravity(true, true);
+ me->GetMotionMaster()->MovePoint(POINT_DROP_PLAYER, _destPoint, FORCED_MOVEMENT_NONE, 0.f, false);
+ me->SetDisableGravity(true);
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
break;
case EVENT_MOVE_TO_SIPHON_POS:
@@ -2620,7 +2607,7 @@ public:
me->GetMotionMaster()->Clear();
me->StopMovingOnCurrentPos();
- _events.ScheduleEvent(EVENT_MOVE_TO_DROP_POS, 0);
+ _events.ScheduleEvent(EVENT_MOVE_TO_DROP_POS, 0ms);
}
};
@@ -2735,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);
}
}
@@ -2886,7 +2873,7 @@ class spell_the_lich_king_vile_spirit_damage_target_search : public SpellScript
c->GetMotionMaster()->Clear(true);
c->StopMoving();
c->CastSpell((Unit*)nullptr, SPELL_SPIRIT_BURST, true);
- c->DespawnOrUnsummon(3000);
+ c->DespawnOrUnsummon(3s);
c->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
}
@@ -3002,7 +2989,7 @@ public:
_events.Reset();
me->RemoveAllAuras();
- me->DespawnOrUnsummon(500);
+ me->DespawnOrUnsummon(500ms);
if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING)))
lichKing->AI()->SummonedCreatureDespawn(me);
@@ -3053,7 +3040,7 @@ public:
case EVENT_DESPAWN_SELF:
if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING)))
lichKing->AI()->SummonedCreatureDespawn(me);
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
break;
default:
break;
@@ -3101,7 +3088,7 @@ public:
{
_events.Reset();
me->CastSpell((Unit*)nullptr, SPELL_RESTORE_SOUL, false);
- me->DespawnOrUnsummon(3000);
+ me->DespawnOrUnsummon(3s);
}
break;
}
@@ -3121,14 +3108,14 @@ public:
if (Creature* warden = me->FindNearestCreature(NPC_SPIRIT_WARDEN, 20.0f))
{
warden->CastSpell((Unit*)nullptr, SPELL_DESTROY_SOUL, false);
- warden->DespawnOrUnsummon(2000);
+ warden->DespawnOrUnsummon(2s);
}
me->CastSpell(me, SPELL_TERENAS_LOSES_INSIDE, false);
me->SetDisplayId(16946);
me->SetReactState(REACT_PASSIVE);
me->AttackStop();
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
- me->DespawnOrUnsummon(2000);
+ me->DespawnOrUnsummon(2s);
}
}
}
@@ -3417,7 +3404,7 @@ public:
npc_lk_spirit_bombAI(Creature* creature) : NullCreatureAI(creature)
{
me->SetReactState(REACT_PASSIVE);
- me->DespawnOrUnsummon(45000); // for safety
+ me->DespawnOrUnsummon(45s); // for safety
timer = 0;
}
@@ -3450,7 +3437,7 @@ public:
timer = 0;
me->RemoveAllAuras();
me->CastSpell((Unit*)nullptr, SPELL_EXPLOSION, false);
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
else
timer -= diff;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
index 75bdea092b..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
@@ -177,14 +174,14 @@ private:
class DelayedCastEvent : public BasicEvent
{
public:
- DelayedCastEvent(Creature* trigger, uint32 spellId, ObjectGuid originalCaster, uint32 despawnTime) : _trigger(trigger), _originalCaster(originalCaster), _spellId(spellId), _despawnTime(despawnTime)
+ DelayedCastEvent(Creature* trigger, uint32 spellId, ObjectGuid originalCaster, Milliseconds despawnTime) : _trigger(trigger), _originalCaster(originalCaster), _spellId(spellId), _despawnTime(despawnTime)
{
}
bool Execute(uint64 /*time*/, uint32 /*diff*/) override
{
_trigger->CastSpell(_trigger, _spellId, false, nullptr, nullptr, _originalCaster);
- if (_despawnTime)
+ if (_despawnTime > 0ms)
_trigger->DespawnOrUnsummon(_despawnTime);
return true;
}
@@ -193,7 +190,7 @@ private:
Creature* _trigger;
ObjectGuid _originalCaster;
uint32 _spellId;
- uint32 _despawnTime;
+ Milliseconds _despawnTime;
};
class AuraRemoveEvent : public BasicEvent
@@ -406,7 +403,7 @@ public:
// this display id was found in sniff instead of the one on aura
me->SetDisplayId(11686);
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
- me->DespawnOrUnsummon(4000);
+ me->DespawnOrUnsummon(4s);
if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VALITHRIA_LICH_KING)))
lichKing->CastSpell(lichKing, SPELL_SPAWN_CHEST, false);
_instance->SetData(DATA_WEEKLY_QUEST_ID, 0); // show hidden npc if necessary
@@ -417,13 +414,13 @@ public:
{
if (summon->GetEntry() == NPC_DREAM_PORTAL_PRE_EFFECT)
{
- summon->m_Events.AddEvent(new DelayedCastEvent(summon, SPELL_SUMMON_DREAM_PORTAL, me->GetGUID(), 6000), summon->m_Events.CalculateTime(15000));
- summon->m_Events.AddEvent(new AuraRemoveEvent(summon, SPELL_DREAM_PORTAL_VISUAL_PRE), summon->m_Events.CalculateTime(15000));
+ summon->m_Events.AddEventAtOffset(new DelayedCastEvent(summon, SPELL_SUMMON_DREAM_PORTAL, me->GetGUID(), 6s), 15s);
+ summon->m_Events.AddEventAtOffset(new AuraRemoveEvent(summon, SPELL_DREAM_PORTAL_VISUAL_PRE), 15s);
}
else if (summon->GetEntry() == NPC_NIGHTMARE_PORTAL_PRE_EFFECT)
{
- summon->m_Events.AddEvent(new DelayedCastEvent(summon, SPELL_SUMMON_NIGHTMARE_PORTAL, me->GetGUID(), 6000), summon->m_Events.CalculateTime(15000));
- summon->m_Events.AddEvent(new AuraRemoveEvent(summon, SPELL_NIGHTMARE_PORTAL_VISUAL_PRE), summon->m_Events.CalculateTime(15000));
+ summon->m_Events.AddEventAtOffset(new DelayedCastEvent(summon, SPELL_SUMMON_NIGHTMARE_PORTAL, me->GetGUID(), 6s), 15s);
+ summon->m_Events.AddEventAtOffset(new AuraRemoveEvent(summon, SPELL_NIGHTMARE_PORTAL_VISUAL_PRE), 15s);
}
}
@@ -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:
@@ -579,7 +576,7 @@ public:
void DoAction(int32 action) override
{
if (action == ACTION_DEATH)
- me->m_Events.AddEvent(new ValithriaDespawner(me), me->m_Events.CalculateTime(5000));
+ me->m_Events.AddEventAtOffset(new ValithriaDespawner(me), 5s);
else if (action == ACTION_ENTER_COMBAT)
{
if (!me->IsInCombat())
@@ -750,9 +747,9 @@ public:
void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() == NPC_COLUMN_OF_FROST)
- summon->m_Events.AddEvent(new DelayedCastEvent(summon, SPELL_COLUMN_OF_FROST_DAMAGE, ObjectGuid::Empty, 8000), summon->m_Events.CalculateTime(2000));
+ summon->m_Events.AddEventAtOffset(new DelayedCastEvent(summon, SPELL_COLUMN_OF_FROST_DAMAGE, ObjectGuid::Empty, 8s), 2s);
else if (summon->GetEntry() == NPC_MANA_VOID)
- summon->DespawnOrUnsummon(36000);
+ summon->DespawnOrUnsummon(36s);
}
void UpdateAI(uint32 diff) override
@@ -885,8 +882,8 @@ 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->DespawnOrUnsummon(1000);
+ me->CastSpell(me, SPELL_EMERALD_VIGOR, false, nullptr, nullptr, _instance->GetGuidData(DATA_VALITHRIA_DREAMWALKER));
+ me->DespawnOrUnsummon(1s);
break;
default:
break;
@@ -1054,7 +1051,7 @@ public:
timer = 0;
me->SetDisplayId(11686);
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
- me->DespawnOrUnsummon(2000);
+ me->DespawnOrUnsummon(2s);
}
else
timer -= diff;
@@ -1096,7 +1093,7 @@ public:
void JustSummoned(Creature* summon) override
{
if (me->GetInstanceScript() && me->GetInstanceScript()->GetBossState(DATA_VALITHRIA_DREAMWALKER) == DONE)
- summon->DespawnOrUnsummon(1);
+ summon->DespawnOrUnsummon(1ms);
else if (Unit* target = SelectTargetFromPlayerList(200.0f))
summon->AI()->AttackStart(target);
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
index 5c6e308310..e4f745aae0 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -533,13 +533,13 @@ public:
case EVENT_SAURFANG_RUN:
if (Creature* factionNPC = ObjectAccessor::GetCreature(*me, _factionNPC))
{
- factionNPC->GetMotionMaster()->MovePath(factionNPC->GetSpawnId() * 10, false);
- factionNPC->DespawnOrUnsummon(46500);
+ 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);
for (Creature* follower : followers)
{
- follower->DespawnOrUnsummon(46500);
+ follower->DespawnOrUnsummon(46500ms);
}
}
me->setActive(false);
@@ -679,7 +679,7 @@ public:
{
case 1000:
case 11000:
- _events.ScheduleEvent(EVENT_ACTIVATE_TRAP, uint32(action));
+ _events.ScheduleEvent(EVENT_ACTIVATE_TRAP, Milliseconds(action));
break;
default:
break;
@@ -772,7 +772,7 @@ public:
}
}
- void SetGUID(ObjectGuid guid, int32 type/* = 0*/) override
+ void SetGUID(ObjectGuid const& guid, int32 type/* = 0*/) override
{
if (type == ACTION_VRYKUL_DEATH)
{
@@ -934,7 +934,7 @@ public:
case EVENT_START_PATHING:
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetImmuneToAll(false);
- Start(true, true);
+ Start(true);
break;
case EVENT_SCOURGE_STRIKE:
DoCastVictim(SPELL_SCOURGE_STRIKE);
@@ -1016,15 +1016,15 @@ public:
if (Creature* crok = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_CROK_SCOURGEBANE))) // _isEventDone = true, setActive(false)
crok->AI()->DoAction(ACTION_RESET_EVENT);
- uint64 delay = 6000;
+ Milliseconds delay = 6s;
for (uint32 i = 0; i < 4; ++i)
if (Creature* crusader = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_CAPTAIN_ARNATH + i)))
if (crusader->IsAlive())
{
if (crusader->GetEntry() == crusader->GetCreatureData()->id1)
{
- crusader->m_Events.AddEvent(new CaptainSurviveTalk(*crusader), crusader->m_Events.CalculateTime(delay));
- delay += 6000;
+ crusader->m_Events.AddEventAtOffset(new CaptainSurviveTalk(*crusader), delay);
+ delay += 6s;
}
else
Unit::Kill(crusader, crusader);
@@ -1810,7 +1810,7 @@ public:
{
_vehicleCheckTimer = 500;
if (!me->GetVehicle())
- me->DespawnOrUnsummon(100);
+ me->DespawnOrUnsummon(100ms);
}
else
_vehicleCheckTimer -= diff;
@@ -2151,7 +2151,7 @@ class spell_svalna_remove_spear : public SpellScript
{
if (Unit* vehicle = target->GetVehicleBase())
vehicle->RemoveAurasDueToSpell(SPELL_IMPALING_SPEAR);
- target->DespawnOrUnsummon(1);
+ target->DespawnOrUnsummon(1ms);
}
}
@@ -2796,38 +2796,38 @@ class SeveredEssenceSpellInfo
public:
uint8 Class;
uint32 id;
- uint32 cooldown_ms;
+ Milliseconds cooldown_ms;
uint8 targetType;
float range;
};
SeveredEssenceSpellInfo sesi_spells[] =
{
- {CLASS_SHAMAN, 71938, 5000, 1, 0.0f},
- {CLASS_PALADIN, 57767, 8000, 2, 30.0f},
- {CLASS_WARLOCK, 71937, 10000, 1, 0.0f},
- {CLASS_DEATH_KNIGHT, 49576, 15000, 1, 30.0f},
- {CLASS_ROGUE, 71933, 8000, 1, 0.0f},
- {CLASS_MAGE, 71928, 4000, 1, 40.0f},
- {CLASS_PALADIN, 71930, 5000, 2, 40.0f},
- {CLASS_ROGUE, 71955, 40000, 1, 30.0f},
- {CLASS_PRIEST, 71931, 5000, 2, 40.0f},
- {CLASS_SHAMAN, 71934, 7000, 1, 0.0f},
- {CLASS_DRUID, 71925, 5000, 1, 0.0f},
- {CLASS_DEATH_KNIGHT, 71951, 8000, 1, 0.0f},
- {CLASS_DEATH_KNIGHT, 71924, 8000, 1, 0.0f},
- {CLASS_WARLOCK, 71965, 20000, 0, 0.0f},
- {CLASS_PRIEST, 71932, 8000, 2, 40.0f},
- {CLASS_DRUID, 71926, 10000, 1, 0.0f},
- {CLASS_WARLOCK, 71936, 9000, 1, 0.0f},
- {CLASS_ROGUE, 57640, 3000, 1, 0.0f},
- {CLASS_WARRIOR, 71961, 5000, 1, 0.0f},
- {CLASS_MAGE, 71929, 10000, 1, 0.0f},
- {CLASS_WARRIOR, 53395, 5000, 1, 0.0f},
- {CLASS_WARRIOR, 71552, 5000, 1, 0.0f},
- {CLASS_HUNTER, 36984, 7000, 1, 0.0f},
- {CLASS_HUNTER, 29576, 5000, 1, 0.0f},
- {0, 0, 0, 0, 0.0f},
+ { CLASS_SHAMAN, 71938, 5s, 1, 0.0f },
+ { CLASS_PALADIN, 57767, 8s, 2, 30.0f },
+ { CLASS_WARLOCK, 71937, 10s, 1, 0.0f },
+ { CLASS_DEATH_KNIGHT, 49576, 15s, 1, 30.0f },
+ { CLASS_ROGUE, 71933, 8s, 1, 0.0f },
+ { CLASS_MAGE, 71928, 4s, 1, 40.0f },
+ { CLASS_PALADIN, 71930, 5s, 2, 40.0f },
+ { CLASS_ROGUE, 71955, 40s, 1, 30.0f },
+ { CLASS_PRIEST, 71931, 5s, 2, 40.0f },
+ { CLASS_SHAMAN, 71934, 7s, 1, 0.0f },
+ { CLASS_DRUID, 71925, 5s, 1, 0.0f },
+ { CLASS_DEATH_KNIGHT, 71951, 8s, 1, 0.0f },
+ { CLASS_DEATH_KNIGHT, 71924, 8s, 1, 0.0f },
+ { CLASS_WARLOCK, 71965, 20s, 0, 0.0f },
+ { CLASS_PRIEST, 71932, 8s, 2, 40.0f },
+ { CLASS_DRUID, 71926, 10s, 1, 0.0f },
+ { CLASS_WARLOCK, 71936, 9s, 1, 0.0f },
+ { CLASS_ROGUE, 57640, 3s, 1, 0.0f },
+ { CLASS_WARRIOR, 71961, 5s, 1, 0.0f },
+ { CLASS_MAGE, 71929, 10s, 1, 0.0f },
+ { CLASS_WARRIOR, 53395, 5s, 1, 0.0f },
+ { CLASS_WARRIOR, 71552, 5s, 1, 0.0f },
+ { CLASS_HUNTER, 36984, 7s, 1, 0.0f },
+ { CLASS_HUNTER, 29576, 5s, 1, 0.0f },
+ { 0, 0, 0ms, 0, 0.0f }
};
class npc_icc_severed_essence : public CreatureScript
@@ -2862,7 +2862,7 @@ public:
if (sesi_spells[i].id)
{
if (Class == sesi_spells[i].Class)
- events.ScheduleEvent(i + 1, sesi_spells[i].cooldown_ms / 4);
+ events.ScheduleEvent(i + 1, Milliseconds(sesi_spells[i].cooldown_ms / 4));
}
else
break;
@@ -2895,7 +2895,7 @@ public:
if (target)
me->CastSpell(target, sesi_spells[e - 1].id, TRIGGERED_IGNORE_SHAPESHIFT);
- events.RepeatEvent(sesi_spells[e - 1].cooldown_ms);
+ events.Repeat(sesi_spells[e - 1].cooldown_ms);
}
if (Class == CLASS_HUNTER)
@@ -3337,7 +3337,7 @@ public:
void ScheduleBroodlings()
{
for (uint8 i = 0; i < 30; ++i)
- events.ScheduleEvent(EVENT_SUMMON_BROODLING, 10000 + i * 350);
+ events.ScheduleEvent(EVENT_SUMMON_BROODLING, Milliseconds(10000 + i * 350));
}
void SummonBroodling()
@@ -3347,7 +3347,7 @@ public:
if (Creature* broodling = me->SummonCreature(NPC_NERUBAR_BROODLING, me->GetPositionX() + cos(o) * dist, me->GetPositionY() + std::sin(o) * dist, 250.0f, Position::NormalizeOrientation(o - M_PI)))
{
broodling->CastSpell(broodling, SPELL_WEB_BEAM2, false);
- broodling->GetMotionMaster()->MovePoint(POINT_ENTER_COMBAT, broodling->GetPositionX(), broodling->GetPositionY(), 213.03f, false);
+ broodling->GetMotionMaster()->MovePoint(POINT_ENTER_COMBAT, broodling->GetPositionX(), broodling->GetPositionY(), 213.03f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false);
}
}
@@ -3521,7 +3521,7 @@ public:
me->CastSpell(me, SPELL_GIANT_INSECT_SWARM, true);
for (uint8 i = 0; i < 60; ++i)
- events.ScheduleEvent(EVENT_GAUNTLET_PHASE1, i * 1000);
+ events.ScheduleEvent(EVENT_GAUNTLET_PHASE1, Seconds(i));
events.ScheduleEvent(EVENT_GAUNTLET_PHASE2, 1min);
}
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
index 394225e21a..7929a51ab6 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
@@ -268,7 +268,7 @@ public:
if (GetBossState(DATA_LADY_DEATHWHISPER) == DONE && GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != DONE)
SpawnGunship();
- if (GetBossState(DATA_SINDRAGOSA) != DONE && IsSindragosaIntroDone && !GetCreature(DATA_SINDRAGOSA) && Events.GetTimeUntilEvent(EVENT_RESPAWN_SINDRAGOSA) == Milliseconds::max())
+ if (GetBossState(DATA_SINDRAGOSA) != DONE && IsSindragosaIntroDone && !GetCreature(DATA_SINDRAGOSA) && !Events.HasTimeUntilEvent(EVENT_RESPAWN_SINDRAGOSA))
{
Events.ScheduleEvent(EVENT_RESPAWN_SINDRAGOSA, 30s);
}
@@ -499,7 +499,7 @@ public:
break;
case NPC_INFILTRATOR_MINCHAR_BQ:
if (BloodQuickeningState == DONE)
- creature->DespawnOrUnsummon(1);
+ creature->DespawnOrUnsummon(1ms);
break;
case NPC_MINCHAR_BEAM_STALKER:
if (BloodQuickeningState != DONE)
@@ -513,7 +513,7 @@ public:
spellId = BLOOD_BEAM_VISUAL_LLEG;
else
spellId = BLOOD_BEAM_VISUAL_RLEG;
- creature->m_Events.AddEvent(new DelayedCastMincharEvent(creature, spellId), creature->m_Events.CalculateTime(1000));
+ creature->m_Events.AddEventAtOffset(new DelayedCastMincharEvent(creature, spellId), 1s);
}
break;
case NPC_SKYBREAKER_DECKHAND:
@@ -608,7 +608,7 @@ public:
std::string name2("Kor'kron ");
if (!creature->GetTransport() && creature->GetPositionZ() <= 205.0f && creature->GetExactDist2d(-439.0f, 2210.0f) <= 150.0f && (creature->GetEntry() == 37544 || creature->GetEntry() == 37545 || creature->GetName().compare(0, name1.length(), name1) == 0 || creature->GetName().compare(0, name2.length(), name2) == 0))
if (!creature->GetLootRecipient())
- creature->m_Events.AddEvent(new RespawnEvent(*creature), creature->m_Events.CalculateTime(3000));
+ creature->m_Events.AddEventAtOffset(new RespawnEvent(*creature), 3s);
switch (creature->GetEntry())
{
@@ -661,7 +661,7 @@ public:
{
c->CastSpell(c, VOID_ZONE_VISUAL, true);
unit->SummonCreature(NPC_RISEN_DEATHSPEAKER_SERVANT, *unit, TEMPSUMMON_MANUAL_DESPAWN);
- unit->ToCreature()->DespawnOrUnsummon(3000);
+ unit->ToCreature()->DespawnOrUnsummon(3s);
}
break;
default:
@@ -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 30b678a876..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,
@@ -115,7 +113,7 @@ public:
me->SetInCombatWithZone();
events.ScheduleEvent(EVENT_MORTAL_WOUND, 10s);
events.ScheduleEvent(EVENT_ENRAGE, 22s);
- events.ScheduleEvent(EVENT_DECIMATE, RAID_MODE(110000, 90000));
+ events.ScheduleEvent(EVENT_DECIMATE, RAID_MODE(110s, 90s));
events.ScheduleEvent(EVENT_BERSERK, 6min);
events.ScheduleEvent(EVENT_SUMMON_ZOMBIE, 10s);
events.ScheduleEvent(EVENT_CAN_EAT_ZOMBIE, 1s);
@@ -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,8 +191,8 @@ public:
break;
case EVENT_DECIMATE:
Talk(EMOTE_DECIMATE);
- me->CastSpell(me, RAID_MODE(SPELL_DECIMATE_10, SPELL_DECIMATE_25), false);
- events.RepeatEvent(RAID_MODE(110000, 90000));
+ me->CastSpell(me, SPELL_DECIMATE, false);
+ events.Repeat(RAID_MODE(110s, 90s));
break;
case EVENT_SUMMON_ZOMBIE:
{
@@ -218,7 +216,7 @@ public:
break;
}
case EVENT_CAN_EAT_ZOMBIE:
- events.RepeatEvent(1000);
+ events.Repeat(1s);
if (me->GetVictim()->GetEntry() == NPC_ZOMBIE_CHOW && me->IsWithinMeleeRange(me->GetVictim()))
{
me->CastCustomSpell(SPELL_CHOW_SEARCHER, SPELLVALUE_RADIUS_MOD, 20000, me, true);
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
index 939f0bf194..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:
@@ -440,7 +439,7 @@ public:
if (gothikWaves[waveCount][0])
{
SummonHelpers(gothikWaves[waveCount][0]);
- events.RepeatEvent(gothikWaves[waveCount][1]);
+ events.Repeat(Milliseconds(gothikWaves[waveCount][1]));
}
else
{
@@ -522,7 +521,7 @@ public:
events.ScheduleEvent(EVENT_SHADOW_BOLT_VOLLEY, 3s);
break;
case NPC_DEAD_RIDER:
- events.ScheduleEvent(EVENT_DRAIN_LIFE, 2000ms, 3500ms);
+ events.ScheduleEvent(EVENT_DRAIN_LIFE, 2s, 3500ms);
events.ScheduleEvent(EVENT_UNHOLY_FRENZY, 5s, 9s);
break;
case NPC_DEAD_HORSE:
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
index 9a88b24a7b..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
};
@@ -102,15 +100,7 @@ public:
events.ScheduleEvent(EVENT_POISON_CLOUD, 15s);
events.ScheduleEvent(EVENT_MUTATING_INJECTION, 20s);
events.ScheduleEvent(EVENT_SLIME_SPRAY, 10s);
- events.ScheduleEvent(EVENT_BERSERK, RAID_MODE(720000, 540000));
- }
-
- 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());
- }
+ events.ScheduleEvent(EVENT_BERSERK, RAID_MODE(720s, 540s));
}
void JustSummoned(Creature* cr) override
@@ -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:
@@ -177,7 +167,7 @@ public:
{
me->CastSpell(target, SPELL_MUTATING_INJECTION, false);
}
- events.RepeatEvent(6000 + uint32(120 * me->GetHealthPct()));
+ events.Repeat(Milliseconds(6000 + uint32(120 * me->GetHealthPct())));
break;
}
DoMeleeAttackIfReady();
@@ -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 57866c7b00..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:
@@ -451,7 +449,7 @@ public:
cr->AI()->Talk(SAY_ANSWER_REQUEST);
for (uint8 i = 0 ; i < RAID_MODE(2, 4); ++i)
- events.ScheduleEvent(EVENT_SUMMON_GUARDIAN_OF_ICECROWN, 10000 + (i * 5000));
+ events.ScheduleEvent(EVENT_SUMMON_GUARDIAN_OF_ICECROWN, Milliseconds(10000 + (i * 5000)));
break;
}
@@ -507,7 +505,7 @@ public:
{
if (!me->IsInCombat())
{
- me->DespawnOrUnsummon(500);
+ me->DespawnOrUnsummon(500ms);
}
}
if (param == ACTION_GUARDIANS_OFF)
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 98717dcbb1..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:
@@ -280,7 +277,7 @@ public:
{
cr->GetMotionMaster()->MoveRandom(40);
}
- events.RepeatEvent(RAID_MODE(8000, 6500));
+ events.Repeat(RAID_MODE(8000ms, 6500ms));
return;
}
case EVENT_FLIGHT_START:
@@ -349,7 +346,7 @@ public:
blockList.push_back((*itr)->GetGUID());
currentTarget = (*itr)->GetGUID();
--iceboltCount;
- events.ScheduleEvent(EVENT_FLIGHT_ICEBOLT, (me->GetExactDist(*itr) / 13.0f)*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_FLIGHT_ICEBOLT, Seconds(uint32(me->GetExactDist(*itr) / 13.0f)));
}
else
{
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/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
index 894ee59604..002566c6e1 100644
--- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
@@ -745,7 +745,7 @@ public:
if (Creature* cr = me->SummonCreature(NPC_LIVING_POISON, entry.Start, TEMPSUMMON_TIMED_DESPAWN, entry.DespawnTime))
{
cr->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
- cr->GetMotionMaster()->MovePoint(0, entry.End, false);
+ cr->GetMotionMaster()->MovePoint(0, entry.End, FORCED_MOVEMENT_NONE, 0.f, false);
}
_events.Repeat(5s);
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index eb39ef71b6..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,
@@ -471,7 +464,7 @@ public:
me->SetDisableGravity(true);
me->GetMotionMaster()->MoveTakeoff(MI_POINT_VORTEX_TAKEOFF, me->GetPositionX(), me->GetPositionY(), CenterPos.GetPositionZ() + 20.0f, 7.0f);
- events.DelayEvents(25000, 1); // don't delay berserk (group 0)
+ events.DelayEvents(25s, 1); // don't delay berserk (group 0)
}
break;
case EVENT_VORTEX_FLY_TO_CENTER:
@@ -521,16 +514,14 @@ public:
}
//pPlayer->ClearUnitState(UNIT_STATE_ONVEHICLE);
- Movement::MoveSplineInit init(pPlayer);
+ Movement::MoveSplineInit init(pPlayer); // TODO: has to be removed and handled with vehicle exit and vehicle enter code
init.MoveTo(CenterPos.GetPositionX(), CenterPos.GetPositionY(), CenterPos.GetPositionZ());
init.SetFacing(pPlayer->GetOrientation());
init.SetTransportExit();
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();
@@ -674,7 +665,7 @@ public:
case EVENT_CHECK_TRASH_DEAD:
{
if (me->FindNearestCreature(NPC_SCION_OF_ETERNITY, 250.0f, true) || me->FindNearestCreature(NPC_NEXUS_LORD, 250.0f, true))
- events.RepeatEvent(3000);
+ events.Repeat(3s);
else
{
me->SendMeleeAttackStop();
@@ -727,7 +718,7 @@ public:
{
c->SetFaction(pPlayer->GetFaction());
//pPlayer->CastCustomSpell(60683, SPELLVALUE_BASE_POINT0, 1, c, true);
- c->m_Events.AddEvent(new EoEDrakeEnterVehicleEvent(*c, pPlayer->GetGUID()), c->m_Events.CalculateTime(500));
+ c->m_Events.AddEventAtOffset(new EoEDrakeEnterVehicleEvent(*c, pPlayer->GetGUID()), 500ms);
AttackStart(c);
}
}
@@ -803,10 +794,10 @@ public:
{
case NPC_ARCANE_OVERLOAD:
summon->CastSpell(summon, SPELL_ARCANE_OVERLOAD_DMG, true);
- summon->DespawnOrUnsummon(45000);
+ summon->DespawnOrUnsummon(45s);
break;
case NPC_STATIC_FIELD:
- summon->DespawnOrUnsummon(20000);
+ summon->DespawnOrUnsummon(20s);
break;
}
}
@@ -898,9 +889,9 @@ public:
{
Player* plr = pass->ToPlayer();
float speed = plr->GetDistance(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()) / (1.0f * 0.001f);
- plr->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), speed);
+ plr->SetDisableGravity(false); // packet only would lead to issues elsewhere
+ plr->GetMotionMaster()->MoveCharge(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), speed);
plr->RemoveAura(SPELL_FREEZE_ANIM);
- plr->SetDisableGravity(false, true);
plr->SetGuidValue(PLAYER_FARSIGHT, ObjectGuid::Empty);
sScriptMgr->AnticheatSetCanFlybyServer(plr, false);
@@ -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);
@@ -998,7 +986,7 @@ public:
MoveTimer = 0;
me->GetMotionMaster()->MoveIdle();
me->DisableSpline();
- me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 0.05f, 7.0f);
+ me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 0.05f, FORCED_MOVEMENT_NONE, 7.0f);
break;
}
}
@@ -1013,12 +1001,11 @@ public:
MoveTimer = 0;
me->GetMotionMaster()->MoveIdle();
me->DisableSpline();
- me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), CenterPos.GetPositionZ(), 100.0f);
- me->SetPosition(me->GetPositionX(), me->GetPositionY(), CenterPos.GetPositionZ(), me->GetOrientation());
+ me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), CenterPos.GetPositionZ(), FORCED_MOVEMENT_NONE, 100.0f);
me->ReplaceAllUnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE);
me->RemoveAura(SPELL_POWER_SPARK_VISUAL);
me->CastSpell(me, SPELL_POWER_SPARK_GROUND_BUFF, true);
- me->DespawnOrUnsummon(60000);
+ me->DespawnOrUnsummon(60s);
}
}
}
@@ -1221,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 {}
@@ -1459,14 +1447,14 @@ public:
else if (pass && pass->IsPlayer() && me->IsAlive())
{
me->SetDisplayId(11686); // prevents nasty falling animation at despawn
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
}
void JustDied(Unit* /*killer*/) override
{
me->SetDisplayId(11686); // prevents nasty falling animation at despawn
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
};
};
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/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp
index 4f4b09b758..48e220df36 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp
@@ -29,7 +29,7 @@ bool EoEDrakeEnterVehicleEvent::Execute(uint64 /*eventTime*/, uint32 /*updateTim
p->CastCustomSpell(60683, SPELLVALUE_BASE_POINT0, 1, &_owner, true);
return true;
}
- _owner.DespawnOrUnsummon(1);
+ _owner.DespawnOrUnsummon(1ms);
return true;
}
@@ -89,7 +89,7 @@ public:
c->SetCanFly(true);
c->SetFaction(pPlayer->GetFaction());
//pPlayer->CastCustomSpell(60683, SPELLVALUE_BASE_POINT0, 1, c, true);
- c->m_Events.AddEvent(new EoEDrakeEnterVehicleEvent(*c, pPlayer->GetGUID()), c->m_Events.CalculateTime(500));
+ c->m_Events.AddEventAtOffset(new EoEDrakeEnterVehicleEvent(*c, pPlayer->GetGUID()), 500ms);
}
}
}
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp
index 397f9ec8bb..717e7954f0 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp
@@ -94,7 +94,7 @@ struct boss_anomalus : public BossAI
{
if (activeRifts > 0 && --activeRifts == 0 && me->HasAura(SPELL_RIFT_SHIELD))
{
- events.DelayEvents(me->GetAura(SPELL_RIFT_SHIELD)->GetDuration() - 46000);
+ events.DelayEvents(Milliseconds(me->GetAura(SPELL_RIFT_SHIELD)->GetDuration() - 46000));
me->RemoveAura(SPELL_RIFT_SHIELD);
me->InterruptNonMeleeSpells(false);
}
@@ -114,7 +114,6 @@ struct boss_anomalus : public BossAI
BossAI::JustEngagedWith(who);
activeRifts = 0;
- events.SetTimer(45000);
events.ScheduleEvent(EVENT_ANOMALUS_SPARK, 5s);
events.ScheduleEvent(EVENT_ANOMALUS_HEALTH, 1s);
events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15s : 25s);
@@ -164,7 +163,7 @@ struct boss_anomalus : public BossAI
Talk(EMOTE_RIFT);
me->CastSpell(me, SPELL_CREATE_RIFT, false);
//Once we hit 51% hp mark, after each rift we spawn an empowered
- events.ScheduleEvent(me->HealthBelowPct(51) ? EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED : EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15000 : 25000);
+ events.ScheduleEvent(me->HealthBelowPct(51) ? EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED : EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15s : 25s);
break;
case EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED:
Talk(SAY_RIFT);
@@ -172,7 +171,7 @@ struct boss_anomalus : public BossAI
me->CastSpell(me, SPELL_CREATE_RIFT, false);
me->CastSpell(me, SPELL_RIFT_SHIELD, true);
- me->m_Events.AddEvent(new ChargeRifts(me), me->m_Events.CalculateTime(1000));
+ me->m_Events.AddEventAtOffset(new ChargeRifts(me), 1s);
events.DelayEvents(46s);
//As we just spawned an empowered spawn a normal one
events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15s : 25s);
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
index a367d60592..eb4842098a 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
@@ -75,7 +75,7 @@ struct boss_keristrasza : public BossAI
me->CastSpell(me, SPELL_INTENSE_COLD, true);
events.ScheduleEvent(EVENT_CRYSTALFIRE_BREATH, 14s);
- events.ScheduleEvent(EVENT_CRYSTAL_CHAINS, DUNGEON_MODE(20000, 11000));
+ events.ScheduleEvent(EVENT_CRYSTAL_CHAINS, DUNGEON_MODE(20s, 11s));
events.ScheduleEvent(EVENT_TAIL_SWEEP, 5s);
events.ScheduleEvent(EVENT_HEALTH_CHECK, 1s);
events.ScheduleEvent(EVENT_ACHIEVEMENT_CHECK, 1s);
@@ -89,7 +89,7 @@ struct boss_keristrasza : public BossAI
void KilledUnit(Unit*) override
{
- if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
+ if (!events.HasTimeUntilEvent(EVENT_KILL_TALK))
{
Talk(SAY_SLAY);
events.ScheduleEvent(EVENT_KILL_TALK, 6s);
@@ -174,7 +174,7 @@ struct boss_keristrasza : public BossAI
me->CastSpell(me, SPELL_CRYSTALIZE, false);
else if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
me->CastSpell(target, SPELL_CRYSTAL_CHAINS, false);
- events.ScheduleEvent(EVENT_CRYSTAL_CHAINS, DUNGEON_MODE(20000, 11000));
+ events.ScheduleEvent(EVENT_CRYSTAL_CHAINS, DUNGEON_MODE(20s, 11s));
break;
}
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp
index 90781cfbc7..e41c190aeb 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp
@@ -132,7 +132,7 @@ struct boss_magus_telestra : public BossAI
void KilledUnit(Unit*) override
{
- if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
+ if (!events.HasTimeUntilEvent(EVENT_KILL_TALK))
{
Talk(SAY_KILL);
events.ScheduleEvent(EVENT_KILL_TALK, 6s);
@@ -150,7 +150,7 @@ struct boss_magus_telestra : public BossAI
if (spellInfo->Id >= SPELL_FIRE_MAGUS_DEATH && spellInfo->Id <= SPELL_ARCANE_MAGUS_DEATH && caster->ToCreature())
{
events.ScheduleEvent(EVENT_MAGUS_FAIL_ACHIEVEMENT, 5s);
- caster->ToCreature()->DespawnOrUnsummon(1000);
+ caster->ToCreature()->DespawnOrUnsummon(1s);
if (++copiesDied >= 3)
{
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp
index 82b36095db..982750c2bd 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp
@@ -93,7 +93,7 @@ struct boss_ormorok : public BossAI
void KilledUnit(Unit* /*victim*/) override
{
- if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
+ if (!events.HasTimeUntilEvent(EVENT_KILL_TALK))
{
Talk(SAY_KILL);
events.ScheduleEvent(EVENT_KILL_TALK, 6s);
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 4b491b156d..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,
@@ -208,7 +203,7 @@ public:
break;
case EVENT_SUMMON_WHELPS:
for( uint8 i = 0; i < 5; ++i )
- events.ScheduleEvent(EVENT_SUMMON_SINGLE_WHELP, urand(0, 8000));
+ events.ScheduleEvent(EVENT_SUMMON_SINGLE_WHELP, 0ms, 8s);
events.Repeat(40s);
break;
case EVENT_SUMMON_SINGLE_WHELP:
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp
index 6793cc0505..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,9 +293,9 @@ 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(9000, 7000));
+ events.RescheduleEvent(EVENT_TELE_BACK, DUNGEON_MODE(9s, 7s));
default:
break;
}
@@ -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 01cdb73fb3..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,
@@ -387,7 +386,7 @@ public:
}
else
{
- me->DespawnOrUnsummon(2050);
+ me->DespawnOrUnsummon(2050ms);
me->SetOrientation(2.5f);
me->SetSpeedRate(MOVE_FLIGHT, 1.0f);
Position pos = me->GetPosition();
@@ -444,7 +443,7 @@ public:
}
else
{
- me->DespawnOrUnsummon(2050);
+ me->DespawnOrUnsummon(2050ms);
me->SetOrientation(2.5f);
me->SetSpeedRate(MOVE_FLIGHT, 1.0f);
Position pos = me->GetPosition();
@@ -461,7 +460,7 @@ public:
{
if (despawnTimer >= 5000)
{
- me->DespawnOrUnsummon(2050);
+ me->DespawnOrUnsummon(2050ms);
me->SetOrientation(2.5f);
Position pos = me->GetPosition();
Position offset = { 10.0f, 10.0f, 12.0f, 0.0f };
@@ -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 9435ba6491..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
@@ -106,334 +108,343 @@ enum Yells
EMOTE_BERSEKER_STANCE = 8,
};
-class boss_bjarngrim : public CreatureScript
+struct boss_bjarngrim : public npc_escortAI
{
-public:
- boss_bjarngrim() : CreatureScript("boss_bjarngrim") { }
+ boss_bjarngrim(Creature* creature) : npc_escortAI(creature), summons(creature)
+ {
+ m_pInstance = creature->GetInstanceScript();
+ InitializeWaypoints();
+ me->SetWalk(true);
+ Start(true, ObjectGuid::Empty, nullptr, false, true);
+ }
- CreatureAI* GetAI(Creature* creature) const override
+ void InitializeWaypoints()
{
- return GetHallsOfLightningAI<boss_bjarngrimAI>(creature);
+ 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);
}
- struct boss_bjarngrimAI : public npc_escortAI
+ void Reset() override
{
- boss_bjarngrimAI(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);
-
- Start(true, false, ObjectGuid::Empty, nullptr, false, true);
- }
+ events.Reset();
+ summons.DespawnAll();
- InstanceScript* m_pInstance;
- EventMap events;
- SummonList summons;
- uint8 m_uiStance;
+ 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()))
+ {
+ float angle = i == 0 ? 2.5f : 3.78f;
+ dwarf->GetMotionMaster()->MoveFollow(me, 3, angle);
+ summons.Summon(dwarf);
+ }
- void Reset() override
- {
- events.Reset();
- summons.DespawnAll();
-
- 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);
- summons.Summon(dwarf);
- }
-
- me->RemoveAllAuras();
- me->CastSpell(me, SPELL_TEMPORARY_ELECTRICAL_CHARGE, true);
- RollStance(0, STANCE_DEFENSIVE);
-
- if (m_pInstance)
- m_pInstance->SetData(TYPE_BJARNGRIM, NOT_STARTED);
- }
+ me->RemoveAllAuras();
- void JustEngagedWith(Unit*) override
- {
- me->SetInCombatWithZone();
- Talk(SAY_AGGRO);
+ if (m_pInstance)
+ m_pInstance->SetBossState(DATA_BJARNGRIM, NOT_STARTED);
- events.ScheduleEvent(EVENT_BJARNGRIM_CHANGE_STANCE, 20s, 0);
+ DoCastSelf(SPELL_BATTLE_STANCE, true);
+ SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SHIELD, EQUIP_NO_CHANGE);
+ }
- // DEFENSIVE STANCE
- events.ScheduleEvent(EVENT_BJARNGRIM_REFLECTION, 8s, STANCE_DEFENSIVE);
- events.ScheduleEvent(EVENT_BJARNGRIM_PUMMEL, 5s, STANCE_DEFENSIVE);
- events.ScheduleEvent(EVENT_BJARNGRIM_KNOCK, 16s, STANCE_DEFENSIVE);
- events.ScheduleEvent(EVENT_BJARNGRIM_IRONFORM, 12s, STANCE_DEFENSIVE);
+ void JustEngagedWith(Unit*) override
+ {
+ me->SetInCombatWithZone();
+ Talk(SAY_AGGRO);
- // BERSERKER STANCE
- events.ScheduleEvent(EVENT_BJARNGRIM_MORTAL_STRIKE, 24s, STANCE_BERSERKER);
- events.ScheduleEvent(EVENT_BJARNGRIM_WHIRLWIND, 26s, STANCE_BERSERKER);
+ RollStance(STANCE_BATTLE);
- // BATTLE STANCE
- events.ScheduleEvent(EVENT_BJARNGRIM_INTERCEPT, 23s, STANCE_BATTLE);
- events.ScheduleEvent(EVENT_BJARNGRIM_CLEAVE, 25s, STANCE_BATTLE);
- events.ScheduleEvent(EVENT_BJARNGRIM_SLAM, 30s, STANCE_BATTLE);
+ events.ScheduleEvent(EVENT_BJARNGRIM_CHANGE_STANCE, 20s, 0);
- if (m_pInstance)
- {
- m_pInstance->SetData(TYPE_BJARNGRIM, IN_PROGRESS);
- m_pInstance->SetData(DATA_BJARNGRIM_ACHIEVEMENT, me->HasAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE));
- }
- }
+ // DEFENSIVE STANCE
+ events.ScheduleEvent(EVENT_BJARNGRIM_REFLECTION, 8s, STANCE_DEFENSIVE);
+ events.ScheduleEvent(EVENT_BJARNGRIM_KNOCK, 16s, STANCE_DEFENSIVE);
+ events.ScheduleEvent(EVENT_BJARNGRIM_IRONFORM, 12s, STANCE_DEFENSIVE);
- void KilledUnit(Unit* victim) override
- {
- if (!victim->IsPlayer())
- return;
+ // BERSERKER STANCE
+ events.ScheduleEvent(EVENT_BJARNGRIM_INTERCEPT, 23s, STANCE_BERSERKER);
+ events.ScheduleEvent(EVENT_BJARNGRIM_CLEAVE, 25s, STANCE_BERSERKER);
+ events.ScheduleEvent(EVENT_BJARNGRIM_WHIRLWIND, 26s, STANCE_BERSERKER);
- Talk(SAY_SLAY);
- }
+ // BATTLE STANCE
+ events.ScheduleEvent(EVENT_BJARNGRIM_PUMMEL, 5s, STANCE_BATTLE);
+ events.ScheduleEvent(EVENT_BJARNGRIM_MORTAL_STRIKE, 24s, STANCE_BATTLE);
+ events.ScheduleEvent(EVENT_BJARNGRIM_SLAM, 30s, STANCE_BATTLE);
- void JustDied(Unit*) override
+ if (m_pInstance)
{
- Talk(SAY_DEATH);
-
- if (m_pInstance)
- m_pInstance->SetData(TYPE_BJARNGRIM, DONE);
+ m_pInstance->SetBossState(DATA_BJARNGRIM, IN_PROGRESS);
+ m_pInstance->SetData(DATA_BJARNGRIM_ACHIEVEMENT, me->HasAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE));
}
+ }
- void RemoveStanceAura(uint8 stance)
- {
- switch (stance)
- {
- case STANCE_DEFENSIVE:
- me->RemoveAura(SPELL_DEFENSIVE_STANCE);
- me->RemoveAura(SPELL_DEFENSIVE_AURA);
- break;
- case STANCE_BERSERKER:
- me->RemoveAura(SPELL_BERSERKER_STANCE);
- me->RemoveAura(SPELL_BERSERKER_AURA);
- break;
- case STANCE_BATTLE:
- me->RemoveAura(SPELL_BATTLE_STANCE);
- me->RemoveAura(SPELL_BATTLE_AURA);
- break;
- }
- }
+ void KilledUnit(Unit* victim) override
+ {
+ if (!victim->IsPlayer())
+ return;
- void RollStance(uint8 stance, uint8 force = 0)
+ Talk(SAY_SLAY);
+ }
+
+ void JustDied(Unit*) override
+ {
+ Talk(SAY_DEATH);
+
+ if (m_pInstance)
+ m_pInstance->SetBossState(DATA_BJARNGRIM, DONE);
+ }
+
+ void RemoveStanceAura(uint8 stance)
+ {
+ switch (stance)
{
- if (urand(0, 1))
- stance = (++stance == 4 ? 1 : stance);
- else
- stance = (--stance == 0 ? 3 : stance);
+ case STANCE_DEFENSIVE:
+ me->RemoveAura(SPELL_DEFENSIVE_STANCE);
+ me->RemoveAura(SPELL_DEFENSIVE_AURA);
+ break;
+ case STANCE_BERSERKER:
+ me->RemoveAura(SPELL_BERSERKER_STANCE);
+ me->RemoveAura(SPELL_BERSERKER_AURA);
+ break;
+ case STANCE_BATTLE:
+ me->RemoveAura(SPELL_BATTLE_STANCE);
+ me->RemoveAura(SPELL_BATTLE_AURA);
+ break;
+ }
+ }
- if (force)
- stance = force;
+ void RollStance(uint8 stance, uint8 force = 0)
+ {
+ if (urand(0, 1))
+ stance = (++stance == 4 ? 1 : stance);
+ else
+ stance = (--stance == 0 ? 3 : stance);
- switch (stance)
- {
- case STANCE_DEFENSIVE:
- Talk(SAY_DEFENSIVE_STANCE);
+ if (force)
+ stance = force;
- me->CastSpell(me, SPELL_DEFENSIVE_STANCE, true);
- me->CastSpell(me, SPELL_DEFENSIVE_AURA, true);
+ switch (stance)
+ {
+ case STANCE_DEFENSIVE:
+ Talk(SAY_DEFENSIVE_STANCE);
- events.DelayEvents(20000, STANCE_BERSERKER);
- events.DelayEvents(20000, STANCE_BATTLE);
+ DoCastSelf(SPELL_DEFENSIVE_STANCE, true);
+ DoCastSelf(SPELL_DEFENSIVE_AURA, true);
- SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SHIELD, EQUIP_NO_CHANGE);
- break;
- case STANCE_BERSERKER:
- Talk(SAY_BERSERKER_STANCE);
+ events.DelayEvents(20s, STANCE_BERSERKER);
+ events.DelayEvents(20s, STANCE_BATTLE);
- me->CastSpell(me, SPELL_BERSERKER_STANCE, true);
- me->CastSpell(me, SPELL_BERSERKER_AURA, true);
+ SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SHIELD, EQUIP_NO_CHANGE);
+ break;
+ case STANCE_BERSERKER:
+ Talk(SAY_BERSERKER_STANCE);
- events.DelayEvents(20000, STANCE_DEFENSIVE);
- events.DelayEvents(20000, STANCE_BATTLE);
+ DoCastSelf(SPELL_BERSERKER_STANCE, true);
+ DoCastSelf(SPELL_BERSERKER_AURA, true);
- SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SWORD, EQUIP_NO_CHANGE);
- break;
- case STANCE_BATTLE:
- Talk(SAY_BATTLE_STANCE);
+ events.DelayEvents(20s, STANCE_DEFENSIVE);
+ events.DelayEvents(20s, STANCE_BATTLE);
- me->CastSpell(me, SPELL_BATTLE_STANCE, true);
- me->CastSpell(me, SPELL_BATTLE_AURA, true);
+ SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SWORD, EQUIP_NO_CHANGE);
+ break;
+ case STANCE_BATTLE:
+ Talk(SAY_BATTLE_STANCE);
- events.DelayEvents(20000, STANCE_BERSERKER);
- events.DelayEvents(20000, STANCE_DEFENSIVE);
+ DoCastSelf(SPELL_BATTLE_STANCE, true);
+ DoCastSelf(SPELL_BATTLE_AURA, true);
- SetEquipmentSlots(false, EQUIP_MACE, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
- break;
- }
+ events.DelayEvents(20s, STANCE_BERSERKER);
+ events.DelayEvents(20s, STANCE_DEFENSIVE);
- m_uiStance = stance;
+ SetEquipmentSlots(false, EQUIP_MACE, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
+ break;
}
- void WaypointReached(uint32 Point) override
+ m_uiStance = stance;
+ }
+
+ void WaypointReached(uint32 Point) override
+ {
+ if (Point == 1)
{
- if (Point == 1 || Point == 8)
- me->CastSpell(me, SPELL_TEMPORARY_ELECTRICAL_CHARGE, true);
- else if (Point == 7 || Point == 14)
- me->RemoveAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE);
+ events.CancelEvent(EVENT_CHARGE_UP);
+ events.ScheduleEvent(EVENT_CHARGE_UP, 2500ms, 0);
}
-
- void UpdateEscortAI(uint32 diff) override
+ else if (Point == 2)
{
- if (!me->IsInCombat())
- return;
+ 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);
- // Return since we have no target
- if (!UpdateVictim())
+ if (uint32 eventId = events.ExecuteEvent())
+ {
+ if (eventId == EVENT_CHARGE_UP)
{
- Reset();
+ me->CastSpell(me, SPELL_CHARGE_UP, true);
+ me->CastSpell(me, SPELL_TEMPORARY_ELECTRICAL_CHARGE, true);
return;
}
+ }
- events.Update(diff);
+ if (!me->IsInCombat())
+ return;
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ // Return since we have no target
+ if (!UpdateVictim())
+ {
+ Reset();
+ return;
+ }
- switch (events.ExecuteEvent())
- {
- case EVENT_BJARNGRIM_CHANGE_STANCE:
- // roll new stance
- RemoveStanceAura(m_uiStance);
- RollStance(m_uiStance);
- events.Repeat(20s);
- break;
-
- ///////////////////////////////////////////////////////
- ///// DEFENSIVE STANCE
- ///////////////////////////////////////////////////////
- case EVENT_BJARNGRIM_REFLECTION:
- me->CastSpell(me, SPELL_BJARNGRIM_REFLETION, true);
- events.Repeat(8s, 9s);
- break;
- case EVENT_BJARNGRIM_PUMMEL:
- me->CastSpell(me->GetVictim(), SPELL_PUMMEL, false);
- events.Repeat(10s, 11s);
- break;
- case EVENT_BJARNGRIM_KNOCK:
- me->CastSpell(me, SPELL_KNOCK_AWAY, false);
- events.Repeat(20s, 21s);
- break;
- case EVENT_BJARNGRIM_IRONFORM:
- me->CastSpell(me, SPELL_IRONFORM, true);
- events.Repeat(18s, 23s);
- break;
-
- ///////////////////////////////////////////////////////
- ///// BERSERKER STANCE
- ///////////////////////////////////////////////////////
- case EVENT_BJARNGRIM_MORTAL_STRIKE:
- me->CastSpell(me->GetVictim(), SPELL_MORTAL_STRIKE, false);
- events.Repeat(10s);
- break;
- case EVENT_BJARNGRIM_WHIRLWIND:
- me->CastSpell(me, SPELL_WHIRLWIND, true);
- events.Repeat(25s);
- break;
-
- ///////////////////////////////////////////////////////
- ///// BATTLE STANCE
- ///////////////////////////////////////////////////////
- case EVENT_BJARNGRIM_INTERCEPT:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random))
- me->CastSpell(target, SPELL_INTERCEPT, true);
-
- events.Repeat(30s);
- break;
- case EVENT_BJARNGRIM_CLEAVE:
- me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false);
- events.Repeat(25s);
- break;
- case EVENT_BJARNGRIM_SLAM:
- me->CastSpell(me->GetVictim(), SPELL_SLAM, false);
- events.Repeat(10s, 12s);
- break;
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- DoMeleeAttackIfReady();
+ switch (events.ExecuteEvent())
+ {
+ case EVENT_BJARNGRIM_CHANGE_STANCE:
+ // roll new stance
+ RemoveStanceAura(m_uiStance);
+ RollStance(m_uiStance);
+ 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);
+ events.Repeat(8s, 9s);
+ break;
+ case EVENT_BJARNGRIM_PUMMEL:
+ DoCastVictim(SPELL_PUMMEL);
+ events.Repeat(10s, 11s);
+ break;
+ case EVENT_BJARNGRIM_KNOCK:
+ DoCastAOE(SPELL_KNOCK_AWAY);
+ events.Repeat(20s, 21s);
+ break;
+ case EVENT_BJARNGRIM_IRONFORM:
+ DoCastSelf(SPELL_IRONFORM, true);
+ events.Repeat(18s, 23s);
+ break;
+
+ // BERSERKER STANCE
+ case EVENT_BJARNGRIM_MORTAL_STRIKE:
+ DoCastVictim(SPELL_MORTAL_STRIKE);
+ events.Repeat(10s);
+ break;
+ case EVENT_BJARNGRIM_WHIRLWIND:
+ DoCastSelf(SPELL_WHIRLWIND, true);
+ events.Repeat(25s);
+ break;
+
+ // BATTLE STANCE
+ case EVENT_BJARNGRIM_INTERCEPT:
+ DoCastRandomTarget(SPELL_INTERCEPT, 0, 40.0f, false, true);
+ events.Repeat(30s);
+ break;
+ case EVENT_BJARNGRIM_CLEAVE:
+ DoCastVictim(SPELL_CLEAVE);
+ events.Repeat(25s);
+ break;
+ case EVENT_BJARNGRIM_SLAM:
+ DoCastVictim(SPELL_SLAM);
+ events.Repeat(10s, 12s);
+ break;
}
- };
+
+ DoMeleeAttackIfReady();
+ }
+
+ private:
+ InstanceScript* m_pInstance;
+ EventMap events;
+ SummonList summons;
+ uint8 m_uiStance;
};
-class npc_stormforged_lieutenant : public CreatureScript
+struct npc_stormforged_lieutenant : public ScriptedAI
{
-public:
- npc_stormforged_lieutenant() : CreatureScript("npc_stormforged_lieutenant") { }
+ npc_stormforged_lieutenant(Creature* creature) : ScriptedAI(creature) { }
- CreatureAI* GetAI(Creature* creature) const override
+ void Reset() override
{
- return GetHallsOfLightningAI<npc_stormforged_lieutenantAI>(creature);
+ if (me->IsSummon())
+ BjarngrimGUID = me->ToTempSummon()->GetSummonerGUID();
+ else
+ BjarngrimGUID.Clear();
}
- struct npc_stormforged_lieutenantAI : public ScriptedAI
+ void JustEngagedWith(Unit*) override
{
- npc_stormforged_lieutenantAI(Creature* creature) : ScriptedAI(creature) { }
+ events.ScheduleEvent(EVENT_ARC_WELD, 2s);
+ events.ScheduleEvent(EVENT_RENEW_STEEL, 10s, 11s);
+ }
- EventMap events;
- ObjectGuid BjarngrimGUID;
+ void UpdateAI(uint32 diff) override
+ {
+ //Return since we have no target
+ if (!UpdateVictim())
+ return;
- void Reset() override
- {
- if (me->IsSummon())
- BjarngrimGUID = me->ToTempSummon()->GetSummonerGUID();
- else
- BjarngrimGUID.Clear();
- }
+ events.Update(diff);
- void JustEngagedWith(Unit*) override
- {
- events.ScheduleEvent(EVENT_ARC_WELD, 2s);
- events.ScheduleEvent(EVENT_RENEW_STEEL, 10s, 11s);
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- void UpdateAI(uint32 diff) override
+ switch (events.ExecuteEvent())
{
- //Return since we have no target
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ case EVENT_ARC_WELD:
+ me->CastSpell(me->GetVictim(), SPELL_ARC_WELD, true);
+ events.Repeat(20s);
+ break;
+ case EVENT_RENEW_STEEL:
+ if (Creature* bjarngrim = ObjectAccessor::GetCreature(*me, BjarngrimGUID))
+ if (bjarngrim->IsAlive())
+ me->CastSpell(bjarngrim, SPELL_RENEW_STEEL, true);
+
+ events.Repeat(10s, 14s);
+ break;
+ }
- switch (events.ExecuteEvent())
- {
- case EVENT_ARC_WELD:
- me->CastSpell(me->GetVictim(), SPELL_ARC_WELD, true);
- events.Repeat(20s);
- break;
- 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);
-
- events.Repeat(10s, 14s);
- break;
- }
+ DoMeleeAttackIfReady();
+ }
- DoMeleeAttackIfReady();
- }
- };
+ private:
+ EventMap events;
+ ObjectGuid BjarngrimGUID;
};
void AddSC_boss_bjarngrim()
{
- new boss_bjarngrim();
- new npc_stormforged_lieutenant();
+ RegisterHallOfLightningCreatureAI(boss_bjarngrim);
+ RegisterHallOfLightningCreatureAI(npc_stormforged_lieutenant);
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
index 752ef36a30..6a72e570c8 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
@@ -25,10 +25,8 @@
enum IonarSpells
{
- SPELL_BALL_LIGHTNING_N = 52780,
- SPELL_BALL_LIGHTNING_H = 59800,
- SPELL_STATIC_OVERLOAD_N = 52658,
- SPELL_STATIC_OVERLOAD_H = 59795,
+ SPELL_BALL_LIGHTNING = 52780,
+ SPELL_STATIC_OVERLOAD = 52658,
SPELL_STATIC_OVERLOAD_KNOCK = 53337,
SPELL_DISPERSE = 52770,
@@ -36,8 +34,7 @@ enum IonarSpells
SPELL_SPARK_DESPAWN = 52776,
//Spark of Ionar
- SPELL_SPARK_VISUAL_TRIGGER_N = 52667,
- SPELL_SPARK_VISUAL_TRIGGER_H = 59833,
+ SPELL_SPARK_VISUAL_TRIGGER = 52667,
SPELL_RANDOM_LIGHTNING = 52663,
};
@@ -66,213 +63,191 @@ enum IonarEvents
EVENT_CHECK_HEALTH = 3,
EVENT_CALL_SPARKS = 4,
EVENT_RESTORE = 5,
+ EVENT_CHANGE_TARGET = 6,
};
-class boss_ionar : public CreatureScript
+struct boss_ionar : public BossAI
{
-public:
- boss_ionar() : CreatureScript("boss_ionar") { }
+ boss_ionar(Creature* creature) : BossAI(creature, DATA_IONAR) { }
- CreatureAI* GetAI(Creature* creature) const override
+ void Reset() override
{
- return GetHallsOfLightningAI<boss_ionarAI>(creature);
+ _Reset();
+ me->SetVisible(true);
+
+ ScheduleHealthCheckEvent(50, [&] {
+ DoCastSelf(SPELL_DISPERSE);
+ });
}
- struct boss_ionarAI : public ScriptedAI
+ void ScheduleEvents(bool spark)
{
- boss_ionarAI(Creature* creature) : ScriptedAI(creature), summons(creature)
- {
- m_pInstance = creature->GetInstanceScript();
- }
-
- InstanceScript* m_pInstance;
- EventMap events;
- SummonList summons;
- uint8 HealthCheck;
-
- void Reset() override
- {
- HealthCheck = 50;
- events.Reset();
- summons.DespawnAll();
-
- me->SetVisible(true);
-
- if (m_pInstance)
- m_pInstance->SetData(TYPE_IONAR, NOT_STARTED);
- }
-
- void ScheduleEvents(bool spark)
- {
- events.SetPhase(1);
- if (!spark)
- events.RescheduleEvent(EVENT_CHECK_HEALTH, 1s, 0, 1);
+ events.SetPhase(1);
+ 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);
- }
-
- void JustEngagedWith(Unit*) override
- {
- me->SetInCombatWithZone();
- Talk(SAY_AGGRO);
-
- if (m_pInstance)
- m_pInstance->SetData(TYPE_IONAR, IN_PROGRESS);
-
- ScheduleEvents(false);
- }
+ events.RescheduleEvent(EVENT_BALL_LIGHTNING, 7s, 11s, 0, 1);
+ events.RescheduleEvent(EVENT_STATIC_OVERLOAD, 6s, 12s, 0, 1);
+ }
- void JustDied(Unit*) override
- {
- Talk(SAY_DEATH);
+ void JustEngagedWith(Unit*) override
+ {
+ _JustEngagedWith();
+ Talk(SAY_AGGRO);
+ ScheduleEvents(false);
+ }
- summons.DespawnAll();
+ void JustDied(Unit*) override
+ {
+ _JustDied();
+ Talk(SAY_DEATH);
+ }
- if (m_pInstance)
- m_pInstance->SetData(TYPE_IONAR, DONE);
- }
+ void KilledUnit(Unit* victim) override
+ {
+ if (!victim->IsPlayer())
+ return;
- void KilledUnit(Unit* victim) override
- {
- if (!victim->IsPlayer())
- return;
+ Talk(SAY_SLAY);
+ }
- Talk(SAY_SLAY);
- }
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
+ {
+ if (spell->Id == SPELL_DISPERSE)
+ Split();
+ }
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
- {
- if (spell->Id == SPELL_DISPERSE)
- Split();
- }
+ void Split()
+ {
+ Talk(SAY_SPLIT);
- void Split()
+ for (uint8 i = 0; i < 5; ++i)
{
- Talk(SAY_SPLIT);
-
- Creature* spark;
- for (uint8 i = 0; i < 5; ++i)
+ if (Creature* spark = me->SummonCreature(NPC_SPARK_OF_IONAR, me->GetPosition(), TEMPSUMMON_TIMED_DESPAWN, 20000))
{
- if ((spark = me->SummonCreature(NPC_SPARK_OF_IONAR, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 20000)))
- {
- summons.Summon(spark);
- spark->CastSpell(spark, me->GetMap()->IsHeroic() ? SPELL_SPARK_VISUAL_TRIGGER_H : SPELL_SPARK_VISUAL_TRIGGER_N, true);
- spark->CastSpell(spark, SPELL_RANDOM_LIGHTNING, true);
- spark->SetUnitFlag(UNIT_FLAG_PACIFIED | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
- spark->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0);
+ spark->CastSpell(spark, SPELL_SPARK_VISUAL_TRIGGER, true);
+ spark->CastSpell(spark, SPELL_RANDOM_LIGHTNING, true);
+ spark->SetUnitFlag(UNIT_FLAG_PACIFIED | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
+ spark->SetHomePosition(me->GetPosition());
- if (Player* tgt = SelectTargetFromPlayerList(100))
- spark->GetMotionMaster()->MoveFollow(tgt, 0.0f, 0.0f, MOTION_SLOT_CONTROLLED);
- }
+ if (Player* tgt = SelectTargetFromPlayerList(100))
+ spark->GetMotionMaster()->MoveFollow(tgt, 0.0f, 0.0f, MOTION_SLOT_CONTROLLED);
}
-
- me->SetVisible(false);
- me->SetControlled(true, UNIT_STATE_STUNNED);
-
- events.SetPhase(2);
- events.ScheduleEvent(EVENT_CALL_SPARKS, 15s, 0, 2);
}
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
+ me->SetVisible(false);
+ me->SetControlled(true, UNIT_STATE_STUNNED);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ events.SetPhase(2);
+ events.ScheduleEvent(EVENT_CALL_SPARKS, 20s, 0, 2);
+ }
- switch (events.ExecuteEvent())
- {
- case EVENT_BALL_LIGHTNING:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random))
- me->CastSpell(target, me->GetMap()->IsHeroic() ? SPELL_BALL_LIGHTNING_H : SPELL_BALL_LIGHTNING_N, false);
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- events.Repeat(10s, 11s);
- break;
- case EVENT_STATIC_OVERLOAD:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random))
- me->CastSpell(target, me->GetMap()->IsHeroic() ? SPELL_STATIC_OVERLOAD_H : SPELL_STATIC_OVERLOAD_N, false);
+ events.Update(diff);
- events.Repeat(5s, 6s);
- break;
- case EVENT_CHECK_HEALTH:
- if (HealthBelowPct(HealthCheck))
- me->CastSpell(me, SPELL_DISPERSE, false);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- events.Repeat(1s);
- return;
- case EVENT_CALL_SPARKS:
- {
- EntryCheckPredicate pred(NPC_SPARK_OF_IONAR);
- summons.DoAction(ACTION_CALLBACK, pred);
- events.ScheduleEvent(EVENT_RESTORE, 2s, 0, 2);
- return;
- }
- case EVENT_RESTORE:
+ switch (events.ExecuteEvent())
+ {
+ case EVENT_BALL_LIGHTNING:
+ DoCastRandomTarget(SPELL_BALL_LIGHTNING, 1, 0.0f, false);
+ events.Repeat(8s, 18s);
+ break;
+ case EVENT_STATIC_OVERLOAD:
+ DoCastRandomTarget(SPELL_STATIC_OVERLOAD);
+ events.Repeat(9s, 14s);
+ break;
+ case EVENT_CALL_SPARKS:
+ {
EntryCheckPredicate pred(NPC_SPARK_OF_IONAR);
- summons.DoAction(ACTION_SPARK_DESPAWN, pred);
-
- me->SetVisible(true);
- me->SetControlled(false, UNIT_STATE_STUNNED);
- ScheduleEvents(true);
+ summons.DoAction(ACTION_CALLBACK, pred);
+ events.ScheduleEvent(EVENT_RESTORE, 5s, 0, 2);
return;
- }
+ }
+ case EVENT_RESTORE:
+ EntryCheckPredicate pred(NPC_SPARK_OF_IONAR);
+ summons.DoAction(ACTION_SPARK_DESPAWN, pred);
- DoMeleeAttackIfReady();
+ me->SetVisible(true);
+ me->SetControlled(false, UNIT_STATE_STUNNED);
+ ScheduleEvents(true);
+ return;
}
- };
+
+ DoMeleeAttackIfReady();
+ }
};
-class npc_spark_of_ionar : public CreatureScript
+struct npc_spark_of_ionar : public ScriptedAI
{
-public:
- npc_spark_of_ionar() : CreatureScript("npc_spark_of_ionar") { }
+ npc_spark_of_ionar(Creature* creature) : ScriptedAI(creature) { }
- CreatureAI* GetAI(Creature* creature) const override
+ void MoveInLineOfSight(Unit*) override { }
+ void AttackStart(Unit* /*who*/) override { }
+
+ void Reset() override
{
- return GetHallsOfLightningAI<npc_spark_of_ionarAI>(creature);
+ returning = false;
+ _events.ScheduleEvent(EVENT_CHANGE_TARGET, 3s);
}
- struct npc_spark_of_ionarAI : public ScriptedAI
+ void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
{
- npc_spark_of_ionarAI(Creature* creature) : ScriptedAI(creature) { }
-
- bool returning;
+ damage = 0;
+ }
- void MoveInLineOfSight(Unit*) override { }
- void UpdateAI(uint32) override { }
- void AttackStart(Unit* /*who*/) override { }
+ void UpdateAI(uint32 diff) override
+ {
+ if (returning)
+ return;
- void Reset() override { returning = false; }
+ _events.Update(diff);
- void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
+ while (uint32 eventId = _events.ExecuteEvent())
{
- damage = 0;
+ 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
+ void DoAction(int32 param) override
+ {
+ if (param == ACTION_CALLBACK)
{
- if (param == ACTION_CALLBACK)
- {
- me->SetSpeed(MOVE_RUN, 2.5f);
- me->GetThreatMgr().ClearAllThreat();
- me->CombatStop(true);
- me->GetMotionMaster()->MoveTargetedHome();
- returning = true;
- }
- else if (param == ACTION_SPARK_DESPAWN)
- {
- me->GetMotionMaster()->MoveIdle();
+ _events.Reset();
+ me->SetSpeed(MOVE_RUN, 2.5f);
+ me->GetThreatMgr().ClearAllThreat();
+ me->CombatStop(true);
+ me->GetMotionMaster()->MoveTargetedHome();
+ returning = true;
+ }
+ else if (param == ACTION_SPARK_DESPAWN)
+ {
+ me->GetMotionMaster()->MoveIdle();
- me->RemoveAllAuras();
- me->CastSpell(me, SPELL_SPARK_DESPAWN, true);
- me->DespawnOrUnsummon(1000);
- }
+ me->RemoveAllAuras();
+ me->CastSpell(me, SPELL_SPARK_DESPAWN, true);
+ me->DespawnOrUnsummon(1s);
}
- };
+ }
+
+ private:
+ EventMap _events;
+ bool returning;
};
// 52658, 59795 - Static Overload
@@ -291,7 +266,8 @@ class spell_ionar_static_overload : public AuraScript
return;
if (Unit* target = GetTarget())
- target->CastSpell(target, SPELL_STATIC_OVERLOAD_KNOCK, true);
+ if (target->GetMap() && !target->GetMap()->IsHeroic())
+ target->CastSpell(target, SPELL_STATIC_OVERLOAD_KNOCK, true);
}
void Register() override
@@ -302,7 +278,7 @@ class spell_ionar_static_overload : public AuraScript
void AddSC_boss_ionar()
{
- new boss_ionar();
- new npc_spark_of_ionar();
+ RegisterHallOfLightningCreatureAI(boss_ionar);
+ RegisterHallOfLightningCreatureAI(npc_spark_of_ionar);
RegisterSpellScript(spell_ionar_static_overload);
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
index 75c4c06d20..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
@@ -60,198 +58,112 @@ enum LokenEvents
EVENT_AURA_REMOVE = 5
};
-class boss_loken : public CreatureScript
+struct boss_loken : public BossAI
{
-public:
- boss_loken() : CreatureScript("boss_loken") { }
+ boss_loken(Creature* creature) : BossAI(creature, DATA_LOKEN), _introDone(false) { }
- CreatureAI* GetAI(Creature* creature) const override
+ void Reset() override
{
- return GetHallsOfLightningAI<boss_lokenAI>(creature);
+ _Reset();
+ instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEVEMENT_TIMELY_DEATH);
+
+ me->RemoveAllAuras();
+
+ ScheduleHealthCheckEvent(75, [&] {
+ Talk(SAY_75HEALTH);
+ });
+
+ ScheduleHealthCheckEvent(50, [&] {
+ Talk(SAY_50HEALTH);
+ });
+
+ ScheduleHealthCheckEvent(25, [&] {
+ Talk(SAY_25HEALTH);
+ });
}
- struct boss_lokenAI : public ScriptedAI
+ void MoveInLineOfSight(Unit* who) override
{
- boss_lokenAI(Creature* creature) : ScriptedAI(creature)
- {
- m_pInstance = creature->GetInstanceScript();
- if (m_pInstance)
- isActive = m_pInstance->GetData(TYPE_LOKEN_INTRO);
- }
+ BossAI::MoveInLineOfSight(who);
+
+ if (_introDone || !who->IsPlayer() || !me->IsWithinDistInMap(who, 40.0f))
+ return;
- InstanceScript* m_pInstance;
- EventMap events;
+ Talk(SAY_INTRO_1);
+ Talk(SAY_INTRO_2, 10s);
+ _introDone = true;
+ }
- bool isActive;
- uint32 IntroTimer;
- uint8 HealthCheck;
+ void JustEngagedWith(Unit*) override
+ {
+ me->m_Events.KillAllEvents(false);
+ _JustEngagedWith();
+ Talk(SAY_AGGRO);
- void MoveInLineOfSight(Unit*) override { }
+ events.ScheduleEvent(EVENT_ARC_LIGHTNING, 10s);
+ events.ScheduleEvent(EVENT_SHOCKWAVE, 3s);
+ events.ScheduleEvent(EVENT_LIGHTNING_NOVA, 15s);
- void Reset() override
- {
- events.Reset();
- if (m_pInstance)
- {
- m_pInstance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEVEMENT_TIMELY_DEATH);
- m_pInstance->SetData(TYPE_LOKEN, NOT_STARTED);
- }
-
- HealthCheck = 75;
- IntroTimer = 0;
- me->RemoveAllAuras();
-
- if (!isActive)
- {
- me->SetControlled(true, UNIT_STATE_STUNNED);
- me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
- }
- else
- {
- me->SetControlled(false, UNIT_STATE_STUNNED);
- me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
- }
- }
+ if (IsHeroic())
+ instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEVEMENT_TIMELY_DEATH);
+ }
- void JustEngagedWith(Unit*) override
- {
- me->SetInCombatWithZone();
- Talk(SAY_AGGRO);
+ void JustDied(Unit*) override
+ {
+ _JustDied();
+ Talk(SAY_DEATH);
+ }
- events.ScheduleEvent(EVENT_ARC_LIGHTNING, 10s);
- events.ScheduleEvent(EVENT_SHOCKWAVE, 3s);
- events.ScheduleEvent(EVENT_LIGHTNING_NOVA, 15s);
+ void KilledUnit(Unit* victim) override
+ {
+ if (!victim->IsPlayer())
+ return;
- if (m_pInstance)
- {
- m_pInstance->SetData(TYPE_LOKEN, IN_PROGRESS);
+ Talk(SAY_SLAY);
+ }
- if (me->GetMap()->IsHeroic())
- m_pInstance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEVEMENT_TIMELY_DEATH);
- }
- }
+ void UpdateAI(uint32 diff) override
+ {
+ //Return since we have no target
+ if (!UpdateVictim())
+ return;
- void JustDied(Unit*) override
- {
- Talk(SAY_DEATH);
+ events.Update(diff);
- if (m_pInstance)
- m_pInstance->SetData(TYPE_LOKEN, DONE);
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- void LokenSpeach(bool hp)
+ switch (events.ExecuteEvent())
{
- if (hp)
- {
- switch (HealthCheck)
- {
- case 75:
- Talk(SAY_75HEALTH);
- break;
- case 50:
- Talk(SAY_50HEALTH);
- break;
- case 25:
- Talk(SAY_25HEALTH);
- break;
- }
- }
- else
+ case EVENT_LIGHTNING_NOVA:
Talk(SAY_NOVA);
+ events.Repeat(15s);
+ me->CastSpell(me, SPELL_LIGHTNING_NOVA_VISUAL, true);
+ me->CastSpell(me, SPELL_LIGHTNING_NOVA_THUNDERS, true);
+
+ events.DelayEvents(5s);
+ events.ScheduleEvent(EVENT_AURA_REMOVE, me->GetMap()->IsHeroic() ? 4s : 5s);
+
+ me->CastSpell(me, SPELL_LIGHTNING_NOVA, false);
+ break;
+ case EVENT_SHOCKWAVE:
+ me->CastSpell(me, SPELL_PULSING_SHOCKWAVE, false);
+ break;
+ case EVENT_ARC_LIGHTNING:
+ if (Unit* target = SelectTargetFromPlayerList(100, SPELL_ARC_LIGHTNING))
+ me->CastSpell(target, SPELL_ARC_LIGHTNING, false);
+
+ events.Repeat(12s);
+ break;
+ case EVENT_AURA_REMOVE:
+ me->RemoveAura(SPELL_LIGHTNING_NOVA_THUNDERS);
+ break;
}
- void KilledUnit(Unit* victim) override
- {
- if (!victim->IsPlayer())
- return;
-
- Talk(SAY_SLAY);
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!isActive)
- {
- IntroTimer += diff;
- if (IntroTimer > 5000 && IntroTimer < 10000)
- {
- if (SelectTargetFromPlayerList(60))
- {
- Talk(SAY_INTRO_1);
- IntroTimer = 10000;
- }
- else
- IntroTimer = 0;
- }
-
- if (IntroTimer >= 30000 && IntroTimer < 40000)
- {
- Talk(SAY_INTRO_2);
- IntroTimer = 40000;
- }
- if (IntroTimer >= 60000)
- {
- isActive = true;
- if (m_pInstance)
- m_pInstance->SetData(TYPE_LOKEN_INTRO, 1);
-
- me->SetControlled(false, UNIT_STATE_STUNNED);
- me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
-
- if (Player* target = SelectTargetFromPlayerList(80))
- AttackStart(target);
- }
-
- return;
- }
-
- //Return since we have no target
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- switch (events.ExecuteEvent())
- {
- case EVENT_CHECK_HEALTH:
- if (HealthBelowPct(HealthCheck))
- {
- LokenSpeach(true);
- HealthCheck -= 25;
- }
-
- events.Repeat(1s);
- break;
- case EVENT_LIGHTNING_NOVA:
- events.Repeat(15s);
- me->CastSpell(me, SPELL_LIGHTNING_NOVA_VISUAL, true);
- me->CastSpell(me, SPELL_LIGHTNING_NOVA_THUNDERS, true);
-
- 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);
- break;
- case EVENT_SHOCKWAVE:
- me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_PULSING_SHOCKWAVE_H : SPELL_PULSING_SHOCKWAVE_N, false);
- break;
- case EVENT_ARC_LIGHTNING:
- if (Unit* target = SelectTargetFromPlayerList(100, SPELL_ARC_LIGHTNING))
- me->CastSpell(target, SPELL_ARC_LIGHTNING, false);
-
- events.Repeat(12s);
- break;
- case EVENT_AURA_REMOVE:
- me->RemoveAura(SPELL_LIGHTNING_NOVA_THUNDERS);
- break;
- }
-
- DoMeleeAttackIfReady();
- }
- };
+ DoMeleeAttackIfReady();
+ }
+ private:
+ bool _introDone;
};
class spell_loken_pulsing_shockwave : public SpellScript
@@ -276,6 +188,6 @@ class spell_loken_pulsing_shockwave : public SpellScript
void AddSC_boss_loken()
{
- new boss_loken();
+ RegisterHallOfLightningCreatureAI(boss_loken);
RegisterSpellScript(spell_loken_pulsing_shockwave);
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
index c64594b114..7e7e800b9a 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
@@ -78,506 +75,316 @@ enum Yells
EMOTE_SHATTER = 6,
};
-class boss_volkhan : public CreatureScript
+struct boss_volkhan : public BossAI
{
-public:
- boss_volkhan() : CreatureScript("boss_volkhan") { }
+ boss_volkhan(Creature* creature) : BossAI(creature, DATA_VOLKHAN), summons(creature) { }
- CreatureAI* GetAI(Creature* creature) const override
+ void Reset() override
{
- return GetHallsOfLightningAI<boss_volkhanAI>(creature);
+ _Reset();
+ x = y = z = PointID = ShatteredCount = 0;
+ shatteredStompCast = false;
+ me->SetSpeed(MOVE_RUN, 1.2f, true);
+ me->SetReactState(REACT_AGGRESSIVE);
+ instance->SetData(DATA_VOLKHAN_ACHIEVEMENT, true);
}
- struct boss_volkhanAI : public ScriptedAI
+ void JustEngagedWith(Unit*) override
{
- boss_volkhanAI(Creature* creature) : ScriptedAI(creature), summons(creature)
- {
- m_pInstance = creature->GetInstanceScript();
- }
+ _JustEngagedWith();
+ me->SetInCombatWithZone();
+ Talk(SAY_AGGRO);
+ 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);
+ }
- InstanceScript* m_pInstance;
- EventMap events;
- SummonList summons;
- uint8 HealthCheck;
- float x, y, z;
- uint8 PointID;
- uint8 ShatteredCount;
+ void JustDied(Unit*) override
+ {
+ _JustDied();
+ Talk(SAY_DEATH);
+ }
- void Reset() override
+ void GetNextPos()
+ {
+ if (me->GetPositionY() < -180)
{
- x = y = z = PointID = ShatteredCount = 0;
- HealthCheck = 100;
- events.Reset();
- summons.DespawnAll();
- me->SetSpeed(MOVE_RUN, 1.2f, true);
- me->SetReactState(REACT_AGGRESSIVE);
+ if (me->GetPositionX() > 1330)
+ x = 1355;
+ else
+ x = 1308;
- if (m_pInstance)
- {
- m_pInstance->SetData(TYPE_VOLKHAN, NOT_STARTED);
- m_pInstance->SetData(DATA_VOLKHAN_ACHIEVEMENT, true);
- }
+ y = -178;
+ z = 52.5f;
}
-
- void JustEngagedWith(Unit*) override
+ else if (me->GetPositionY() < -145)
{
- me->SetInCombatWithZone();
- Talk(SAY_AGGRO);
-
- if (m_pInstance)
- m_pInstance->SetData(TYPE_VOLKHAN, IN_PROGRESS);
+ if (me->GetPositionX() > 1330)
+ x = 1355;
+ else
+ x = 1308;
- ScheduleEvents(false);
+ y = -137;
+ z = 52.5f;
}
-
- void JustDied(Unit*) override
+ else if (me->GetPositionY() < -130)
{
- Talk(SAY_DEATH);
-
- summons.DespawnAll();
+ if (me->GetPositionX() > 1330)
+ x = 1343;
+ else
+ x = 1320;
- if (m_pInstance)
- m_pInstance->SetData(TYPE_VOLKHAN, DONE);
+ y = -123;
+ z = 56.7f;
}
-
- void GetNextPos()
+ else
{
- if (me->GetPositionY() < -180)
- {
- if (me->GetPositionX() > 1330)
- x = 1355;
- else
- x = 1308;
-
- y = -178;
- z = 52.5f;
- }
- else if (me->GetPositionY() < -145)
- {
- if (me->GetPositionX() > 1330)
- x = 1355;
- else
- x = 1308;
-
- y = -137;
- z = 52.5f;
- }
- else if (me->GetPositionY() < -130)
- {
- if (me->GetPositionX() > 1330)
- x = 1343;
- else
- x = 1320;
-
- y = -123;
- z = 56.7f;
- }
- else
- {
- PointID = POINT_ANVIL;
- x = 1327;
- y = -96;
- z = 56.7f;
- }
+ PointID = POINT_ANVIL;
+ x = 1327;
+ y = -96;
+ z = 56.7f;
}
+ }
- void KilledUnit(Unit* victim) override
- {
- if (!victim->IsPlayer())
- return;
-
- Talk(SAY_SLAY);
- }
+ void KilledUnit(Unit* victim) override
+ {
+ if (!victim->IsPlayer())
+ return;
- 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);
- }
+ Talk(SAY_SLAY);
+ }
- void JustSummoned(Creature* summon) override
+ void JustSummoned(Creature* summon) override
+ {
+ summons.Summon(summon);
+ if (summon->GetEntry() == NPC_MOLTEN_GOLEM)
{
- summons.Summon(summon);
- if (summon->GetEntry() == NPC_MOLTEN_GOLEM)
- {
- summon->SetFaction(me->GetFaction());
+ summon->SetFaction(me->GetFaction());
- if (Unit* target = SelectTarget(SelectTargetMethod::Random))
- summon->AI()->AttackStart(target);
- }
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random))
+ summon->AI()->AttackStart(target);
}
+ }
- void DoAction(int32 param) override
+ void DoAction(int32 param) override
+ {
+ if (param == ACTION_DESTROYED)
{
- if (param == ACTION_DESTROYED)
- {
- ShatteredCount++;
- if (ShatteredCount > 4)
- m_pInstance->SetData(DATA_VOLKHAN_ACHIEVEMENT, false);
- }
+ ShatteredCount++;
+ if (ShatteredCount > 4)
+ instance->SetData(DATA_VOLKHAN_ACHIEVEMENT, false);
}
+ }
- void MovementInform(uint32 type, uint32 id) override
+ bool HasActiveGolem()
+ {
+ for (ObjectGuid const& guid : summons)
{
- if (type != POINT_MOTION_TYPE)
- return;
-
- if (id == POINT_ANVIL)
+ if (Creature* golem = ObjectAccessor::GetCreature(*me, guid))
{
- me->SetSpeed(MOVE_RUN, 1.2f, true);
- me->SetReactState(REACT_AGGRESSIVE);
- me->CastSpell(me, SPELL_TEMPER, false);
- PointID = 0;
- ScheduleEvents(true);
-
- // update orientation at server
- me->SetOrientation(2.19f);
-
- // and client
- WorldPacket data;
- me->BuildHeartBeatMsg(&data);
- me->SendMessageToSet(&data, false);
- me->SetControlled(true, UNIT_STATE_ROOT);
+ if (golem->GetEntry() == NPC_MOLTEN_GOLEM && golem->IsAlive())
+ return true;
}
- else
- events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, 0ms, 0, 2);
}
+ return false;
+ }
- 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());
- me->SetControlled(false, UNIT_STATE_ROOT);
- }
- }
+ void MovementInform(uint32 type, uint32 id) override
+ {
+ if (type != POINT_MOTION_TYPE)
+ return;
- void GoToAnvil()
+ if (id == POINT_ANVIL)
{
- events.SetPhase(2);
- HealthCheck -= 20;
- me->SetSpeed(MOVE_RUN, 4.0f, true);
- me->SetReactState(REACT_PASSIVE);
-
- Talk(SAY_FORGE);
+ me->SetSpeed(MOVE_RUN, 1.2f, true);
+ DoCastSelf(SPELL_TEMPER);
+ PointID = 0;
- if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
- me->GetMotionMaster()->MovementExpired();
+ // update orientation at server
+ me->SetOrientation(2.19f);
- events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, 0ms, 0, 2);
+ // and client
+ me->SendMovementFlagUpdate(false);
+ me->SetControlled(true, UNIT_STATE_ROOT);
}
+ else
+ me->GetMotionMaster()->MovePoint(PointID, x, y, z);
+ }
- void UpdateAI(uint32 diff) override
+ void SpellHitTarget(Unit* /*who*/, SpellInfo const* spellInfo) override
+ {
+ if (spellInfo->Id == SPELL_TEMPER)
{
- //Return since we have no target
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- switch (events.ExecuteEvent())
- {
- case EVENT_HEAT:
- me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_HEAT_H : SPELL_HEAT_N, true);
- events.Repeat(8s);
- break;
- case EVENT_CHECK_HEALTH:
- if (HealthBelowPct(HealthCheck))
- GoToAnvil();
-
- events.Repeat(1s);
- return;
- case EVENT_SHATTER:
- {
- events.Repeat(10s);
- summons.DoAction(ACTION_SHATTER);
- break;
- }
- case EVENT_MOVE_TO_ANVIL:
- GetNextPos();
- me->GetMotionMaster()->MovePoint(PointID, x, y, z);
- return;
- case EVENT_POSITION:
- if (me->GetDistance(1331.9f, -106, 56) > 95)
- EnterEvadeMode();
- else
- events.Repeat(4s);
-
- return;
- }
+ 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());
- DoMeleeAttackIfReady();
+ events.RescheduleEvent(EVENT_HEAT, randtime(9s, 24s));
}
- };
-};
-
-class npc_molten_golem : public CreatureScript
-{
-public:
- npc_molten_golem() : CreatureScript("npc_molten_golem") { }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetHallsOfLightningAI<npc_molten_golemAI>(creature);
}
- struct npc_molten_golemAI : public ScriptedAI
+ void GoToAnvil()
{
- npc_molten_golemAI(Creature* creature) : ScriptedAI(creature)
- {
- m_pInstance = creature->GetInstanceScript();
- }
-
- EventMap events;
- InstanceScript* m_pInstance;
+ me->SetSpeed(MOVE_RUN, 4.0f, true);
+ me->SetReactState(REACT_PASSIVE);
- void Reset() override
- {
- events.Reset();
- events.ScheduleEvent(EVENT_BLAST, 7s);
- events.ScheduleEvent(EVENT_IMMOLATION, 3s);
- }
+ Talk(SAY_FORGE);
- void DamageTaken(Unit*, uint32& uiDamage, DamageEffectType, SpellSchoolMask) override
- {
- if (me->GetEntry() == NPC_BRITTLE_GOLEM)
- {
- uiDamage = 0;
- return;
- }
-
- if (uiDamage >= me->GetHealth())
- {
- 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());
- me->RemoveAllAuras();
- me->AttackStop();
- uiDamage = 0;
+ if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
+ me->GetMotionMaster()->MovementExpired();
- if (me->IsNonMeleeSpellCast(false))
- me->InterruptNonMeleeSpells(false);
+ GetNextPos();
+ me->GetMotionMaster()->MovePoint(PointID, x, y, z);
+ }
- me->SetControlled(true, UNIT_STATE_STUNNED);
- }
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- void DoAction(int32 param) override
- {
- if (me->GetEntry() == NPC_BRITTLE_GOLEM && param == ACTION_SHATTER)
- {
- if (Creature* volkhan = ObjectAccessor::GetCreature(*me, m_pInstance->GetGuidData(TYPE_VOLKHAN)))
- volkhan->AI()->DoAction(ACTION_DESTROYED);
+ events.Update(diff);
- me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_SHATTER_H : SPELL_SHATTER_N, true);
- me->DespawnOrUnsummon(500);
- }
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- void UpdateAI(uint32 diff) override
+ switch (events.ExecuteEvent())
{
- //Return since we have no target or if we are frozen
- if (!UpdateVictim() || me->GetEntry() == NPC_BRITTLE_GOLEM)
+ case EVENT_HEAT:
+ if (HasActiveGolem())
+ {
+ DoCastSelf(SPELL_HEAT);
+ events.Repeat(randtime(9s, 24s));
+ }
+ break;
+ case EVENT_CHECK_HEALTH:
+ if (!shatteredStompCast && HealthBelowPct(25))
+ {
+ shatteredStompCast = true;
+ DoCastAOE(SPELL_SHATTERING_STOMP);
+ Talk(SAY_STOMP);
+ summons.DoAction(ACTION_SHATTER);
+ }
+ events.Repeat(1s);
return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
+ case EVENT_MOVE_TO_ANVIL:
+ GoToAnvil();
+ events.Repeat(randtime(30s, 36s));
+ return;
+ case EVENT_POSITION:
+ if (me->GetDistance(1331.9f, -106, 56) > 95)
+ EnterEvadeMode();
+ else
+ events.Repeat(4s);
return;
-
- 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);
- events.Repeat(5s);
- break;
- }
-
- DoMeleeAttackIfReady();
}
- };
-};
-enum monumentSpells
-{
- SPELL_FREEZE_ANIM = 16245,
- SPELL_AWAKEN = 52875,
-
- SPELL_PIERCING_HOWL = 23600,
- SPELL_PENETRATING_STRIKE = 52890,
- SPELL_FRIGHTENING_SHOUT = 19134,
- SPELL_BLADE_TURNING_N = 52891,
- SPELL_BLADE_TURNING_H = 59173,
-
- SPELL_DEADLY_THROW_N = 52885,
- SPELL_DEADLY_THROW_H = 59180,
- SPELL_DEFLECTION_N = 52879,
- SPELL_DEFLECTION_H = 59181,
- SPELL_THROW_N = 52904,
- SPELL_THROW_H = 59179,
-};
-
-enum monumentEvents
-{
- EVENT_PIERCING_HOWL = 1,
- EVENT_PENETRATING_STRIKE = 2,
- EVENT_FRIGHTENING_SHOUT = 3,
- EVENT_BLADE_TURNING = 4,
-
- EVENT_DEADLY_THROW = 11,
- EVENT_DEFLECTION = 12,
- EVENT_THROW = 13,
+ DoMeleeAttackIfReady();
+ }
- EVENT_UNFREEZE = 20,
+ private:
+ EventMap events;
+ SummonList summons;
+ float x, y, z;
+ uint8 PointID;
+ uint8 ShatteredCount;
+ bool shatteredStompCast;
};
-class npc_hol_monument : public CreatureScript
+struct npc_molten_golem : public ScriptedAI
{
-public:
- npc_hol_monument() : CreatureScript("npc_hol_monument") {}
+ npc_molten_golem(Creature* creature) : ScriptedAI(creature)
+ {
+ m_pInstance = creature->GetInstanceScript();
+ }
- CreatureAI* GetAI(Creature* creature) const override
+ void Reset() override
{
- return GetHallsOfLightningAI<npc_hol_monumentAI>(creature);
+ events.Reset();
+ events.ScheduleEvent(EVENT_IMMOLATION_STRIKE, 3s);
+ events.ScheduleEvent(EVENT_CHANGE_TARGET, 5s);
+ DoCastSelf(SPELL_COOL_DOWN, true);
}
- struct npc_hol_monumentAI : public ScriptedAI
+ void DamageTaken(Unit*, uint32& uiDamage, DamageEffectType, SpellSchoolMask) override
{
- npc_hol_monumentAI(Creature* creature) : ScriptedAI(creature)
+ if (me->GetEntry() == NPC_BRITTLE_GOLEM)
{
- _attackGUID.Clear();
- _isActive = urand(0, 1);
- me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
- me->CastSpell(me, SPELL_FREEZE_ANIM, true);
+ uiDamage = 0;
+ return;
}
- EventMap events;
- bool _isActive;
- ObjectGuid _attackGUID;
-
- void Reset() override
+ if (uiDamage >= me->GetHealth())
{
- }
+ if (me->GetMap()->IsHeroic())
+ DoCastSelf(SPELL_BLAST_WAVE, true);
- void MoveInLineOfSight(Unit* who) override
- {
- if (_attackGUID)
- ScriptedAI::MoveInLineOfSight(who);
- else if (_isActive && who->IsPlayer())
- {
- if ((who->GetPositionX() < me->GetPositionX() || who->GetPositionY() < -220.0f) && me->GetDistance2d(who) < 40)
- {
- _isActive = false;
- _attackGUID = who->GetGUID();
- events.Reset();
- events.RescheduleEvent(EVENT_UNFREEZE, 5s);
- }
- }
- }
+ 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());
+ me->RemoveAllAuras();
+ me->AttackStop();
+ uiDamage = 0;
- void JustEngagedWith(Unit*) override
- {
- events.Reset();
- if (me->GetEntry() == 28961) // NPC_TITANIUM_SIEGEBREAKER
- {
- events.ScheduleEvent(EVENT_PIERCING_HOWL, 10s, 25s);
- events.ScheduleEvent(EVENT_PENETRATING_STRIKE, 5s, 10s);
- events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 20s, 28s);
- events.ScheduleEvent(EVENT_BLADE_TURNING, 12s);
- }
- else
- {
- events.ScheduleEvent(EVENT_THROW, 10s, 25s);
- events.ScheduleEvent(EVENT_DEADLY_THROW, 15s, 30s);
- events.ScheduleEvent(EVENT_DEFLECTION, 15s);
- }
- }
+ if (me->IsNonMeleeSpellCast(false))
+ me->InterruptNonMeleeSpells(false);
- void AttackStart(Unit* who) override
- {
- if (!_attackGUID || !_isActive)
- return;
- ScriptedAI::AttackStart(who);
+ me->SetControlled(true, UNIT_STATE_STUNNED);
}
+ }
- void UpdateAI(uint32 diff) override
+ void DoAction(int32 param) override
+ {
+ if (me->GetEntry() == NPC_BRITTLE_GOLEM && param == ACTION_SHATTER)
{
- if (!_isActive && !_attackGUID)
- return;
+ if (Creature* volkhan = m_pInstance->GetCreature(DATA_VOLKHAN))
+ volkhan->AI()->DoAction(ACTION_DESTROYED);
- events.Update(diff);
- uint32 eventId = events.ExecuteEvent();
-
- if (eventId == EVENT_UNFREEZE)
- {
- me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
- me->CastSpell(me, SPELL_AWAKEN, true);
- me->RemoveAllAuras();
- _isActive = true;
- if (Unit* target = ObjectAccessor::GetUnit(*me, _attackGUID))
- AttackStart(target);
- return;
- }
+ me->CastSpell(me, SPELL_SHATTER, true);
+ me->DespawnOrUnsummon(500ms);
+ }
+ }
- //Return since we have no target or if we are disabled from fight
- if (!UpdateVictim())
- return;
+ void UpdateAI(uint32 diff) override
+ {
+ //Return since we have no target or if we are frozen
+ if (!UpdateVictim() || me->GetEntry() == NPC_BRITTLE_GOLEM)
+ return;
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ events.Update(diff);
- switch (eventId)
- {
- case EVENT_PIERCING_HOWL:
- me->CastSpell(me->GetVictim(), SPELL_PIERCING_HOWL, false);
- events.Repeat(10s, 25s);
- break;
- case EVENT_PENETRATING_STRIKE:
- me->CastSpell(me->GetVictim(), SPELL_PENETRATING_STRIKE, false);
- events.Repeat(5s, 10s);
- break;
- case EVENT_FRIGHTENING_SHOUT:
- me->CastSpell(me->GetVictim(), SPELL_FRIGHTENING_SHOUT, false);
- events.Repeat(20s, 28s);
- break;
- case EVENT_BLADE_TURNING:
- me->CastSpell(me->GetVictim(), me->GetMap()->IsHeroic() ? SPELL_BLADE_TURNING_H : SPELL_BLADE_TURNING_N, false);
- events.Repeat(12s);
- break;
- case EVENT_THROW:
- me->CastSpell(SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0), me->GetMap()->IsHeroic() ? SPELL_THROW_H : SPELL_THROW_N, true);
- events.Repeat(10s, 25s);
- break;
- case EVENT_DEADLY_THROW:
- me->CastSpell(SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0), me->GetMap()->IsHeroic() ? SPELL_DEADLY_THROW_H : SPELL_DEADLY_THROW_N, true);
- events.Repeat(15s, 30s);
- break;
- case EVENT_DEFLECTION:
- me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_DEFLECTION_H : SPELL_DEFLECTION_N, false);
- events.Repeat(15s);
- break;
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- DoMeleeAttackIfReady();
+ switch (events.ExecuteEvent())
+ {
+ 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();
+ }
+private:
+ EventMap events;
+ InstanceScript* m_pInstance;
};
void AddSC_boss_volkhan()
{
- new boss_volkhan();
- new npc_molten_golem();
- new npc_hol_monument();
+ RegisterHallOfLightningCreatureAI(boss_volkhan);
+ RegisterHallOfLightningCreatureAI(npc_molten_golem);
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h
index dac5813097..99b3fecb81 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h
@@ -24,34 +24,41 @@
#define HallsOfLightningScriptName "instance_halls_of_lightning"
-enum HoLEvents
+enum HoLBossIds
{
- TYPE_BJARNGRIM = 0,
- TYPE_IONAR = 1,
- TYPE_LOKEN = 2,
- TYPE_VOLKHAN = 3,
- TYPE_LOKEN_INTRO = 4,
- MAX_ENCOUNTER = 5,
+ DATA_BJARNGRIM = 0,
+ DATA_IONAR = 1,
+ DATA_LOKEN = 2,
+ DATA_VOLKHAN = 3,
+ MAX_ENCOUNTERS
+};
+
+enum HoLDataTypes
+{
+ // GameObject data
+ DATA_LOKEN_THRONE = 0,
+ // Achievement data
DATA_BJARNGRIM_ACHIEVEMENT = 10,
DATA_VOLKHAN_ACHIEVEMENT = 11,
};
enum HoLNPCs
{
- NPC_BJARNGRIM = 28586,
- NPC_VOLKHAN = 28587,
- NPC_IONAR = 28546,
- NPC_LOKEN = 28923,
+ NPC_TITANIUM_THUNDERER = 28965,
+ NPC_TITANIUM_SIEGEBREAKER = 28961
};
enum HoLGOs
{
- GO_BJARNGRIM_DOOR = 191416, //_doors10
- GO_VOLKHAN_DOOR = 191325, //_doors07
- GO_IONAR_DOOR = 191326, //_doors05
- GO_LOKEN_DOOR = 191324, //_doors02
- GO_LOKEN_THRONE = 192654,
+ GO_VOLKHAN_DOOR = 191325,
+ GO_IONAR_DOOR = 191326,
+ GO_LOKEN_THRONE = 192654
+};
+
+enum HoLActions
+{
+ ACTION_ACTIVATE_TITANIUM_VRYKUL,
};
template <class AI, class T>
@@ -60,4 +67,6 @@ inline AI* GetHallsOfLightningAI(T* obj)
return GetInstanceAI<AI>(obj, HallsOfLightningScriptName);
}
+#define RegisterHallOfLightningCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetHallsOfLightningAI)
+
#endif
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp
index 75954ab046..1341f31c06 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp
@@ -15,206 +15,121 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "AreaTriggerScript.h"
#include "CreatureScript.h"
#include "InstanceMapScript.h"
+#include "Player.h"
#include "ScriptedCreature.h"
#include "halls_of_lightning.h"
+DoorData const doorData[] =
+{
+ { GO_VOLKHAN_DOOR, DATA_VOLKHAN, DOOR_TYPE_PASSAGE },
+ { GO_IONAR_DOOR, DATA_IONAR, DOOR_TYPE_PASSAGE },
+ { 0, 0, DOOR_TYPE_ROOM }
+};
+
+ObjectData const gameObjectData[] =
+{
+ { GO_LOKEN_THRONE, DATA_LOKEN_THRONE },
+ { 0, 0 }
+};
+
class instance_halls_of_lightning : public InstanceMapScript
{
public:
instance_halls_of_lightning() : InstanceMapScript("instance_halls_of_lightning", MAP_HALLS_OF_LIGHTNING) { }
- InstanceScript* GetInstanceScript(InstanceMap* pMap) const override
- {
- return new instance_halls_of_lightning_InstanceMapScript(pMap);
- }
-
struct instance_halls_of_lightning_InstanceMapScript : public InstanceScript
{
- instance_halls_of_lightning_InstanceMapScript(Map* pMap) : InstanceScript(pMap) { Initialize(); };
-
- uint32 m_auiEncounter[MAX_ENCOUNTER];
-
- ObjectGuid m_uiGeneralBjarngrimGUID;
- ObjectGuid m_uiIonarGUID;
- ObjectGuid m_uiLokenGUID;
- ObjectGuid m_uiVolkhanGUID;
-
- ObjectGuid m_uiBjarngrimDoorGUID;
- ObjectGuid m_uiVolkhanDoorGUID;
- ObjectGuid m_uiIonarDoorGUID;
- ObjectGuid m_uiLokenDoorGUID;
- ObjectGuid m_uiLokenGlobeGUID;
-
- bool volkhanAchievement;
- bool bjarngrimAchievement;
-
- void Initialize() override
+ instance_halls_of_lightning_InstanceMapScript(Map* pMap) : InstanceScript(pMap)
{
SetHeaders(DataHeader);
- memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
-
- volkhanAchievement = false;
- bjarngrimAchievement = false;
- }
-
- bool IsEncounterInProgress() const override
- {
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- {
- if (m_auiEncounter[i] == IN_PROGRESS && i != TYPE_LOKEN_INTRO)
- {
- return true;
- }
- }
- return false;
- }
-
- void OnCreatureCreate(Creature* pCreature) override
- {
- switch (pCreature->GetEntry())
- {
- case NPC_BJARNGRIM:
- m_uiGeneralBjarngrimGUID = pCreature->GetGUID();
- break;
- case NPC_VOLKHAN:
- m_uiVolkhanGUID = pCreature->GetGUID();
- break;
- case NPC_IONAR:
- m_uiIonarGUID = pCreature->GetGUID();
- break;
- case NPC_LOKEN:
- m_uiLokenGUID = pCreature->GetGUID();
- break;
- }
- }
-
- void OnGameObjectCreate(GameObject* pGo) override
- {
- switch (pGo->GetEntry())
- {
- case GO_BJARNGRIM_DOOR:
- m_uiBjarngrimDoorGUID = pGo->GetGUID();
- if (m_auiEncounter[TYPE_BJARNGRIM] == DONE)
- pGo->SetGoState(GO_STATE_ACTIVE);
-
- break;
- case GO_VOLKHAN_DOOR:
- m_uiVolkhanDoorGUID = pGo->GetGUID();
- if (m_auiEncounter[TYPE_VOLKHAN] == DONE)
- pGo->SetGoState(GO_STATE_ACTIVE);
-
- break;
- case GO_IONAR_DOOR:
- m_uiIonarDoorGUID = pGo->GetGUID();
- if (m_auiEncounter[TYPE_IONAR] == DONE)
- pGo->SetGoState(GO_STATE_ACTIVE);
-
- break;
- case GO_LOKEN_DOOR:
- m_uiLokenDoorGUID = pGo->GetGUID();
- if (m_auiEncounter[TYPE_LOKEN] == DONE)
- pGo->SetGoState(GO_STATE_ACTIVE);
-
- break;
- case GO_LOKEN_THRONE:
- m_uiLokenGlobeGUID = pGo->GetGUID();
- break;
- }
- }
+ SetBossNumber(MAX_ENCOUNTERS);
+ LoadDoorData(doorData);
+ LoadObjectData(nullptr, gameObjectData);
+ _volkhanAchievement = false;
+ _bjarngrimAchievement = false;
+ };
bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) override
{
switch (criteria_id)
{
case 7321: //Shatter Resistant (2042)
- return volkhanAchievement;
+ return _volkhanAchievement;
case 6835: // Lightning Struck (1834)
- return bjarngrimAchievement;
+ return _bjarngrimAchievement;
}
return false;
}
void SetData(uint32 uiType, uint32 uiData) override
{
- m_auiEncounter[uiType] = uiData;
- if (uiType == TYPE_LOKEN_INTRO)
- SaveToDB();
-
// Achievements
if (uiType == DATA_BJARNGRIM_ACHIEVEMENT)
- bjarngrimAchievement = (bool)uiData;
+ _bjarngrimAchievement = (bool)uiData;
else if (uiType == DATA_VOLKHAN_ACHIEVEMENT)
- volkhanAchievement = (bool)uiData;
+ _volkhanAchievement = (bool)uiData;
+ }
- if (uiData != DONE)
- return;
+ private:
+ bool _volkhanAchievement;
+ bool _bjarngrimAchievement;
+ };
- switch (uiType)
- {
- case TYPE_BJARNGRIM:
- HandleGameObject(m_uiBjarngrimDoorGUID, true);
- break;
- case TYPE_VOLKHAN:
- HandleGameObject(m_uiVolkhanDoorGUID, true);
- break;
- case TYPE_IONAR:
- HandleGameObject(m_uiIonarDoorGUID, true);
- break;
- case TYPE_LOKEN:
- HandleGameObject(m_uiLokenDoorGUID, true);
- //Appears to be type 5 GO with animation. Need to figure out how this work, code below only placeholder
- if (GameObject* pGlobe = instance->GetGameObject(m_uiLokenGlobeGUID))
- pGlobe->SetGoState(GO_STATE_ACTIVE);
-
- break;
- }
+ InstanceScript* GetInstanceScript(InstanceMap* pMap) const override
+ {
+ return new instance_halls_of_lightning_InstanceMapScript(pMap);
+ }
+};
- SaveToDB();
- }
+enum TitaniumHallwaySpells
+{
+ SPELL_FREEZE_ANIM = 16245,
+ SPELL_AWAKEN = 52875,
+};
- void ReadSaveDataMore(std::istringstream& data) override
- {
- data >> m_auiEncounter[0];
- data >> m_auiEncounter[1];
- data >> m_auiEncounter[2];
- data >> m_auiEncounter[3];
- }
+class at_hol_hall_of_watchers : public OnlyOnceAreaTriggerScript
+{
+public:
+ at_hol_hall_of_watchers() : OnlyOnceAreaTriggerScript("at_hol_hall_of_watchers") {}
- void WriteSaveDataMore(std::ostringstream& data) override
+ bool _OnTrigger(Player* player, const AreaTrigger* /*at*/) override
+ {
+ std::list<Creature*> creatures;
+ player->GetCreatureListWithEntryInGrid(creatures, { NPC_TITANIUM_SIEGEBREAKER, NPC_TITANIUM_THUNDERER }, 50.0f);
+ creatures.remove_if([&](Creature const* creature) -> bool
{
- data << m_auiEncounter[0] << ' '
- << m_auiEncounter[1] << ' '
- << m_auiEncounter[2] << ' '
- << m_auiEncounter[3] << ' ';
- }
+ return !player->IsWithinLOSInMap(creature) || !creature->HasAura(SPELL_FREEZE_ANIM);
+ });
- uint32 GetData(uint32 uiType) const override
- {
- return m_auiEncounter[uiType];
- }
+ if (creatures.empty())
+ return false;
- ObjectGuid GetGuidData(uint32 uiData) const override
- {
- switch (uiData)
- {
- case TYPE_BJARNGRIM:
- return m_uiGeneralBjarngrimGUID;
- case TYPE_VOLKHAN:
- return m_uiVolkhanGUID;
- case TYPE_IONAR:
- return m_uiIonarGUID;
- case TYPE_LOKEN:
- return m_uiLokenGUID;
- }
+ Acore::Containers::RandomResize(creatures, urand(2, 4));
+
+ ObjectGuid target = player->GetGUID();
- return ObjectGuid::Empty;
+ for (Creature* creature : creatures)
+ {
+ creature->SetHomePosition(player->GetPosition());
+ creature->AI()->DoCastSelf(SPELL_AWAKEN);
+ creature->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
+
+ creature->m_Events.AddEventAtOffset([creature, target] {
+ creature->AI()->DoAction(ACTION_ACTIVATE_TITANIUM_VRYKUL);
+ if (Player* targetPlayer = ObjectAccessor::GetPlayer(*creature, target))
+ creature->AI()->AttackStart(targetPlayer);
+ }, 5s);
}
- };
+
+ return false;
+ }
};
void AddSC_instance_halls_of_lightning()
{
new instance_halls_of_lightning();
+ new at_hol_hall_of_watchers();
}
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 d51461f6a6..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);
}
};
};
@@ -426,7 +419,7 @@ public:
void JustEngagedWith(Unit*) override
{
- events.ScheduleEvent(EVENT_TOXIC_VOLLEY, 5000);
+ events.ScheduleEvent(EVENT_TOXIC_VOLLEY, 5s);
}
void JustDied(Unit* /*killer*/) override
{
@@ -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 8202f673a7..e4305328f1 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,11 +385,11 @@ public:
switch (action)
{
case ACTION_START_ESCORT_EVENT:
- Start(false, true, ObjectGuid::Empty, 0, true, false);
+ Start(false, ObjectGuid::Empty, 0, true, false);
Talk(SAY_BRANN_ESCORT_START);
me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE);
me->SetReactState(REACT_AGGRESSIVE);
- me->SetRegeneratingHealth(false);
+ me->SetRegeneratingHealth(true);
break;
case ACTION_START_TRIBUNAL:
{
@@ -443,8 +437,8 @@ public:
me->ReplaceAllNpcFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
me->SetOrientation(3.132660f);
me->SendMovementFlagUpdate();
- events.ScheduleEvent(EVENT_SJONNIR_END_BRANN_YELL, 10000ms);
- events.ScheduleEvent(EVENT_SJONNIR_END_BRANN_LAST_YELL, 22000ms);
+ events.ScheduleEvent(EVENT_SJONNIR_END_BRANN_YELL, 10s);
+ events.ScheduleEvent(EVENT_SJONNIR_END_BRANN_LAST_YELL, 22s);
break;
case ACTION_SJONNIR_WIPE_START:
Reset();
@@ -456,7 +450,7 @@ public:
door->SetGoState(GO_STATE_READY);
break;
case ACTION_OPEN_DOOR:
- Start(false, true, ObjectGuid::Empty, 0, true, false);
+ Start(false, ObjectGuid::Empty, 0, true, false);
SetNextWaypoint(34, false);
SetEscortPaused(false);
me->RemoveAura(58506);
@@ -505,10 +499,10 @@ 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, 1000ms);
+ events.RescheduleEvent(EVENT_KADDRAK_SWITCH_EYE, 1s);
events.Repeat(1500ms);
break;
}
@@ -550,7 +544,7 @@ public:
darkMatterTargetGUID = cr->GetGUID();
- events.RescheduleEvent(EVENT_DARK_MATTER_START, 5000ms);
+ events.RescheduleEvent(EVENT_DARK_MATTER_START, 5s);
}
}
events.Repeat(30s);
@@ -571,11 +565,11 @@ public:
if (speed < tooFarAwaySpeed)
speed = tooFarAwaySpeed;
- darkMatterTarget->MonsterMoveWithSpeed(plr->GetPositionX(), plr->GetPositionY(), plr->GetPositionZ(), speed);
+ darkMatterTarget->GetMotionMaster()->MovePoint(0, plr->GetPositionX(), plr->GetPositionY(), plr->GetPositionZ(), FORCED_MOVEMENT_NONE, speed);
if (darkMatterTarget->GetDistance(plr) < 15.0f)
{
- events.RescheduleEvent(EVENT_DARK_MATTER_END, 3000ms);
+ events.RescheduleEvent(EVENT_DARK_MATTER_END, 3s);
}
else if (darkMatterTarget->GetDistance(plr) < 30.0f)
{
@@ -593,8 +587,8 @@ public:
{
if (Creature* darkMatterTarget = ObjectAccessor::GetCreature(*me, darkMatterTargetGUID))
{
- darkMatterTarget->CastSpell(darkMatterTarget, darkMatterTarget->GetMap()->IsHeroic() ? SPELL_DARK_MATTER_H : SPELL_DARK_MATTER, true);
- darkMatterTarget->DespawnOrUnsummon(500);
+ darkMatterTarget->CastSpell(darkMatterTarget, SPELL_DARK_MATTER, true);
+ darkMatterTarget->DespawnOrUnsummon(500ms);
}
break;
}
@@ -612,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);
@@ -622,15 +616,8 @@ public:
{
if (!canExecuteEvents)
return;
- uint32 Time = 40000 - (2500 * WaveNum);
SummonCreatures(NPC_DARK_RUNE_PROTECTOR, 3, 0);
- if (WaveNum > 2)
- events.ScheduleEvent(EVENT_SUMMON_STORMCALLER, urand(10 - WaveNum, 15 - WaveNum) * 1000);
- if (WaveNum > 5)
- events.ScheduleEvent(EVENT_SUMMON_CUSTODIAN, urand(10 - WaveNum, 15 - WaveNum) * 1000);
-
- WaveNum++;
- events.RepeatEvent(Time);
+ events.Repeat(IsHeroic() ? 23500ms : 32500ms);
break;
}
case EVENT_SUMMON_STORMCALLER:
@@ -639,7 +626,7 @@ public:
return;
SummonCreatures(NPC_DARK_RUNE_STORMCALLER, 2, 1);
-
+ events.Repeat(IsHeroic() ? 32s : 41500ms);
break;
}
case EVENT_SUMMON_CUSTODIAN:
@@ -648,7 +635,7 @@ public:
return;
SummonCreatures(NPC_IRON_GOLEM_CUSTODIAN, 1, 1);
-
+ events.Repeat(IsHeroic() ? 32s : 45s);
break;
}
case EVENT_TRIBUNAL_END:
@@ -842,17 +829,14 @@ void brann_bronzebeard::brann_bronzebeardAI::InitializeEvent()
Creature* cr = nullptr;
if ((cr = me->SummonCreature(NPC_KADDRAK, 923.7f, 326.9f, 219.5f, 2.1f, TEMPSUMMON_TIMED_DESPAWN, 580000)))
{
- cr->SetInCombatWithZone();
KaddrakGUID = cr->GetGUID();
}
if ((cr = me->SummonCreature(NPC_MARNAK, 895.974f, 363.571f, 219.337f, 5.5f, TEMPSUMMON_TIMED_DESPAWN, 580000)))
{
- cr->SetInCombatWithZone();
MarnakGUID = cr->GetGUID();
}
if ((cr = me->SummonCreature(NPC_ABEDNEUM, 892.25f, 331.25f, 223.86f, 0.6f, TEMPSUMMON_TIMED_DESPAWN, 580000)))
{
- cr->SetInCombatWithZone();
AbedneumGUID = cr->GetGUID();
}
@@ -865,8 +849,9 @@ void brann_bronzebeard::brann_bronzebeardAI::InitializeEvent()
events.ScheduleEvent(EVENT_MARNAK_VISUAL, 105s);
events.ScheduleEvent(EVENT_ABEDNEUM_VISUAL, 207s);
- // Fight
- events.ScheduleEvent(EVENT_SUMMON_MONSTERS, 47s);
+ events.ScheduleEvent(EVENT_SUMMON_MONSTERS, 52s);
+ events.ScheduleEvent(EVENT_SUMMON_STORMCALLER, 122s);
+ events.ScheduleEvent(EVENT_SUMMON_CUSTODIAN, 228s);
events.ScheduleEvent(EVENT_KADDRAK_HEAD, 47s);
events.ScheduleEvent(EVENT_MARNAK_HEAD, 115s);
events.ScheduleEvent(EVENT_ABEDNEUM_HEAD, 217s);
@@ -931,10 +916,10 @@ void brann_bronzebeard::brann_bronzebeardAI::WaypointReached(uint32 id)
SetEscortPaused(true);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING);
me->SendMovementFlagUpdate();
- events.ScheduleEvent(EVENT_DOOR_OPEN, 1500);
+ events.ScheduleEvent(EVENT_DOOR_OPEN, 1500ms);
me->SetWalk(false);
me->SetSpeed(MOVE_RUN, 1.0f, false);
- events.ScheduleEvent(EVENT_RESUME_ESCORT, 3500);
+ events.ScheduleEvent(EVENT_RESUME_ESCORT, 3500ms);
break;
//Brann stops in front of Sjonnir and awaits the start of the battle.
case 36:
@@ -987,7 +972,6 @@ public:
void JustEngagedWith(Unit*) override
{
- events.ScheduleEvent(EVENT_DRP_CHARGE, 10s);
events.ScheduleEvent(EVENT_DRP_CLEAVE, 7s);
}
@@ -1002,14 +986,6 @@ public:
switch (events.ExecuteEvent())
{
- case EVENT_DRP_CHARGE:
- {
- if (Unit* tgt = SelectTarget(SelectTargetMethod::Random, 0))
- me->CastSpell(tgt, SPELL_DRP_CHARGE, false);
-
- events.Repeat(10s);
- break;
- }
case EVENT_DRP_CLEAVE:
{
me->CastSpell(me->GetVictim(), SPELL_DRP_CLEAVE, false);
@@ -1018,6 +994,14 @@ public:
}
}
+ if (Unit* victim = me->GetVictim())
+ {
+ if (!me->IsWithinMeleeRange(victim) && !me->HasUnitState(UNIT_STATE_CHARGING))
+ {
+ me->CastSpell(victim, SPELL_DRP_CHARGE, false);
+ }
+ }
+
DoMeleeAttackIfReady();
}
};
@@ -1062,13 +1046,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;
}
@@ -1101,7 +1085,7 @@ public:
void JustEngagedWith(Unit*) override
{
events.ScheduleEvent(EVENT_IGC_CRUSH, 6s);
- events.ScheduleEvent(EVENT_IGC_GROUND_SMASH, 4s);
+ events.ScheduleEvent(EVENT_IGC_GROUND_SMASH, 20s);
}
void UpdateAI(uint32 diff) override
{
@@ -1122,8 +1106,8 @@ public:
}
case EVENT_IGC_GROUND_SMASH:
{
- me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_IGC_GROUND_SMASH_H : SPELL_IGC_GROUND_SMASH, false);
- events.Repeat(5s);
+ me->CastSpell(me->GetVictim(), SPELL_IGC_GROUND_SMASH, false);
+ events.Repeat(20s, 40s);
break;
}
}
@@ -1139,13 +1123,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_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
index 9eec77e622..4d43d6f00c 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
@@ -443,7 +443,7 @@ public:
if (me->IsInCombat())
events.ScheduleEvent(EVENT_DESPAWN_ALGALON_4, 26s);
events.ScheduleEvent(EVENT_DESPAWN_ALGALON_5, 32s);
- me->DespawnOrUnsummon(39000);
+ me->DespawnOrUnsummon(39s);
me->SetReactState(REACT_PASSIVE);
me->AttackStop();
@@ -484,7 +484,7 @@ public:
return;
}
- uint32 introDelay = 0;
+ Milliseconds introDelay = 0ms;
me->setActive(true);
me->SetInCombatWithZone();
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
@@ -495,27 +495,27 @@ public:
if (!_firstPull)
{
events.ScheduleEvent(EVENT_START_COMBAT, 0ms);
- introDelay = 8000;
+ introDelay = 8s;
}
else
{
summons.DespawnEntry(NPC_AZEROTH);
_firstPull = false;
Talk(SAY_ALGALON_START_TIMER);
- introDelay = 22000;
+ introDelay = 22s;
events.ScheduleEvent(EVENT_START_COMBAT, 14s);
m_pInstance->SetData(DATA_DESPAWN_ALGALON, 0);
}
- events.ScheduleEvent(EVENT_REMOVE_UNNATTACKABLE, introDelay - 500);
+ events.ScheduleEvent(EVENT_REMOVE_UNNATTACKABLE, introDelay - 500ms);
events.ScheduleEvent(EVENT_INTRO_TIMER_DONE, introDelay);
- events.ScheduleEvent(EVENT_QUANTUM_STRIKE, 3500 + introDelay);
- events.ScheduleEvent(EVENT_PHASE_PUNCH, 15500 + introDelay);
- events.ScheduleEvent(EVENT_SUMMON_COLLAPSING_STAR, 16500 + introDelay);
- events.ScheduleEvent(EVENT_COSMIC_SMASH, 25000 + introDelay);
- events.ScheduleEvent(EVENT_ACTIVATE_LIVING_CONSTELLATION, 50500 + introDelay);
- events.ScheduleEvent(EVENT_BIG_BANG, 90000 + introDelay);
- events.ScheduleEvent(EVENT_ASCEND_TO_THE_HEAVENS, 360000 + introDelay);
+ events.ScheduleEvent(EVENT_QUANTUM_STRIKE, 3500ms + introDelay);
+ events.ScheduleEvent(EVENT_PHASE_PUNCH, 15500ms + introDelay);
+ events.ScheduleEvent(EVENT_SUMMON_COLLAPSING_STAR, 16500ms + introDelay);
+ events.ScheduleEvent(EVENT_COSMIC_SMASH, 25s + introDelay);
+ events.ScheduleEvent(EVENT_ACTIVATE_LIVING_CONSTELLATION, 50500ms + introDelay);
+ events.ScheduleEvent(EVENT_BIG_BANG, 90s + introDelay);
+ events.ScheduleEvent(EVENT_ASCEND_TO_THE_HEAVENS, 360s + introDelay);
events.ScheduleEvent(EVENT_CHECK_HERALD_ITEMS, 5s);
DoCheckHeraldOfTheTitans();
@@ -574,7 +574,7 @@ public:
summon->SetHomePosition(x, y, z, o);
summon->UpdatePosition(x, y, z, o, true);
summon->StopMovingOnCurrentPos();
- summon->m_Events.AddEvent(new CosmicSmashDamageEvent(summon), summon->m_Events.CalculateTime(4000));
+ summon->m_Events.AddEventAtOffset(new CosmicSmashDamageEvent(summon), 4s);
break;
}
case NPC_UNLEASHED_DARK_MATTER:
@@ -688,7 +688,7 @@ public:
break;
case EVENT_QUANTUM_STRIKE:
me->CastSpell(me->GetVictim(), SPELL_QUANTUM_STRIKE, false);
- events.Repeat(3000ms, 4500ms);
+ events.Repeat(3s, 4500ms);
break;
case EVENT_PHASE_PUNCH:
me->CastSpell(me->GetVictim(), SPELL_PHASE_PUNCH, false);
@@ -795,7 +795,7 @@ public:
case EVENT_OUTRO_11:
me->SetStandState(UNIT_STAND_STATE_STAND);
me->CastSpell(me, SPELL_TELEPORT, false);
- me->DespawnOrUnsummon(3000);
+ me->DespawnOrUnsummon(3s);
break;
case EVENT_DESPAWN_ALGALON_1:
Talk(SAY_ALGALON_DESPAWN_1);
@@ -812,7 +812,7 @@ public:
case EVENT_DESPAWN_ALGALON_5:
me->SetStandState(UNIT_STAND_STATE_STAND);
me->CastSpell(me, SPELL_TELEPORT, false);
- me->DespawnOrUnsummon(3000);
+ me->DespawnOrUnsummon(3s);
break;
case EVENT_CHECK_HERALD_ITEMS:
if (!DoCheckHeraldOfTheTitans())
@@ -871,12 +871,12 @@ public:
if (movementType != POINT_MOTION_TYPE)
return;
- uint32 delay = 1;
+ Milliseconds delay = 1ms;
_currentPoint = pointId + 1;
switch (pointId)
{
case 2:
- delay = 8000;
+ delay = 8s;
me->SetWalk(true);
break;
case 6:
@@ -886,7 +886,7 @@ public:
events.ScheduleEvent(EVENT_SUMMON_ALGALON, 7500ms);
return;
case 10:
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
return;
case POINT_BRANN_OUTRO:
case POINT_BRANN_OUTRO_END:
@@ -1010,7 +1010,7 @@ public:
break;
case ACTION_BIG_BANG:
events.SetPhase(PHASE_BIG_BANG);
- events.DelayEvents(9500);
+ events.DelayEvents(9500ms);
events.ScheduleEvent(EVENT_RESUME_UPDATING, 9500ms);
break;
}
@@ -1025,10 +1025,10 @@ public:
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, EVENT_ID_SUPERMASSIVE_START);
caster->CastSpell((Unit*)nullptr, SPELL_BLACK_HOLE_CREDIT, TRIGGERED_FULL_MASK);
- caster->ToCreature()->DespawnOrUnsummon(1);
- me->DespawnOrUnsummon(1);
+ caster->ToCreature()->DespawnOrUnsummon(1ms);
+ me->DespawnOrUnsummon(1ms);
if (Creature* voidZone = caster->FindNearestCreature(NPC_ALGALON_VOID_ZONE_VISUAL_STALKER, 10.0f))
- voidZone->DespawnOrUnsummon(1);
+ voidZone->DespawnOrUnsummon(1ms);
}
void UpdateAI(uint32 diff) override
@@ -1146,7 +1146,7 @@ public:
_locked = true;
// Start Algalon event
me->SetGameObjectFlag(GO_FLAG_IN_USE);
- events.ScheduleEvent(EVENT_DESPAWN_CONSOLE, 5000ms);
+ events.ScheduleEvent(EVENT_DESPAWN_CONSOLE, 5s);
if (Creature* brann = me->SummonCreature(NPC_BRANN_BRONZBEARD_ALG, BrannIntroSpawnPos))
brann->AI()->DoAction(ACTION_START_INTRO);
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 c56188547b..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
{
@@ -355,7 +335,7 @@ public:
case EVENT_OVERWHELMING_POWER:
Talk(SAY_STEELBREAKER_POWER);
me->CastSpell(me->GetVictim(), SPELL_OVERWHELMING_POWER, true);
- events.RepeatEvent(RAID_MODE(61000, 36000));
+ events.Repeat(RAID_MODE(61s, 36s));
break;
case EVENT_ENRAGE:
Talk(SAY_STEELBREAKER_BERSERK);
@@ -418,7 +398,7 @@ public:
if (pInstance)
pInstance->SetData(TYPE_ASSEMBLY, NOT_STARTED);
- me->m_Events.AddEvent(new CastRunesEvent(*me), me->m_Events.CalculateTime(8000));
+ me->m_Events.AddEventAtOffset(new CastRunesEvent(*me), 8s);
}
void JustReachedHome() override
@@ -579,7 +559,7 @@ public:
if (Player* target = SelectTargetFromPlayerList(150))
me->GetMotionMaster()->MoveFollow(target, 0.0f, 0.0f);
else
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
void MovementInform(uint32 type, uint32 /*id*/) override
@@ -588,7 +568,7 @@ public:
{
_boomed = true;
me->CastSpell(me, SPELL_LIGHTNING_BLAST, true);
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
}
};
@@ -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;
@@ -805,7 +785,7 @@ public:
case EVENT_LIGHTNING_LAND:
{
float speed = me->GetDistance(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()) / (1000.0f * 0.001f);
- me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), speed);
+ me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), FORCED_MOVEMENT_NONE, speed);
events.ScheduleEvent(EVENT_LAND_LAND, 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;
@@ -902,7 +882,7 @@ class spell_assembly_rune_of_summoning_aura : public AuraScript
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (TempSummon* summ = GetTarget()->ToTempSummon())
- summ->DespawnOrUnsummon(1);
+ summ->DespawnOrUnsummon(1ms);
}
void Register() override
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp
index 1011167987..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,
@@ -255,7 +240,7 @@ public:
case EVENT_SENTINEL_BLAST:
me->CastSpell(me, SPELL_SENTINEL_BLAST, false);
events.Repeat(35s);
- events.DelayEvents(5000, 0);
+ events.DelayEvents(5s, 0);
break;
case EVENT_RESPAWN_FERAL_DEFENDER:
{
@@ -393,7 +378,7 @@ public:
else
{
summons.DespawnAll();
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
if (_feralEssenceStack)
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 77d1053fce..46f8e0bc40 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
@@ -381,8 +381,7 @@ public:
{
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
TurnGates(true, false);
- me->MonsterMoveWithSpeed(homePos.GetPositionX(), homePos.GetPositionY(), homePos.GetPositionZ(), 100.0f);
- me->UpdatePosition(homePos);
+ me->GetMotionMaster()->MovePoint(0, homePos.GetPositionX(), homePos.GetPositionY(), homePos.GetPositionZ(), FORCED_MOVEMENT_NONE, 100.0f);
_speakTimer = 60000;
}
else if (_speakTimer > 63500)
@@ -748,7 +747,7 @@ public:
_despawnTimer = 0;
if (Vehicle* veh = me->GetVehicle())
if (veh->GetPassenger(0) == me || veh->GetPassenger(1) == me)
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
}
@@ -1090,7 +1089,8 @@ public:
{
summons.DespawnAll();
_spellTimer = 0;
- Start(false, false, ObjectGuid::Empty, nullptr, false, true);
+ me->SetWalk(true);
+ Start(false, ObjectGuid::Empty, nullptr, false, true);
if (Aura* aur = me->AddAura(SPELL_FREYA_DUMMY_YELLOW, me))
{
aur->SetMaxDuration(-1);
@@ -1157,7 +1157,7 @@ public:
_beamTimer = 0;
_removeTimer = 1;
- me->DespawnOrUnsummon(5 * IN_MILLISECONDS);
+ me->DespawnOrUnsummon(5s);
}
}
if (_removeTimer)
@@ -1364,7 +1364,7 @@ public:
liquid->CastSpell(liquid, SPELL_DUST_CLOUD_IMPACT, true);
}
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
}
@@ -1416,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;
}
}
@@ -1750,7 +1750,7 @@ class spell_vehicle_grab_pyrite : public SpellScript
target->CastSpell(seat, GetEffectValue());
if (target->IsCreature())
- target->ToCreature()->DespawnOrUnsummon(1300);
+ target->ToCreature()->DespawnOrUnsummon(1300ms);
}
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
index df194ce325..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,8 +978,8 @@ 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->DespawnOrUnsummon(2000);
+ me->CastSpell(me, SPELL_LIFEBINDER_HEAL, true);
+ me->DespawnOrUnsummon(2s);
_healTimer = 0;
}
}
@@ -1063,7 +1018,7 @@ public:
if (_despawnTimer >= 22000)
{
me->RemoveAurasDueToSpell(SPELL_AUTO_GROW);
- me->DespawnOrUnsummon(2200);
+ me->DespawnOrUnsummon(2200ms);
_despawnTimer = 0;
}
}
@@ -1203,7 +1158,7 @@ public:
if (Unit* target = SelectTargetFromPlayerList(80))
AttackStart(target);
else
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
events.Repeat(10s);
break;
}
@@ -1249,8 +1204,8 @@ public:
_explodeTimer += diff;
if (_explodeTimer >= 11000)
{
- me->CastSpell(me, me->GetMap()->Is25ManRaid() ? SPELL_NATURE_BOMB_DAMAGE_25 : SPELL_NATURE_BOMB_DAMAGE_10, false);
- me->DespawnOrUnsummon(1000);
+ me->CastSpell(me, SPELL_NATURE_BOMB_DAMAGE, false);
+ me->DespawnOrUnsummon(1s);
_explodeTimer = 0;
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
index a4351a818e..cb7d6c5004 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
@@ -266,7 +266,7 @@ public:
Talk(SAY_EMOTE_SURGE_OF_DARKNESS);
me->CastSpell(me, SPELL_SURGE_OF_DARKNESS, false);
events.Repeat(63s);
- events.DelayEvents(10000, 1);
+ events.DelayEvents(10s, 1);
break;
case EVENT_SPELL_MARK_OF_THE_FACELESS:
{
@@ -312,8 +312,8 @@ public:
sv->GetMotionMaster()->MoveCharge(1852.78f, 81.38f, 342.461f, 28.0f);
}
- events.DelayEvents(12000, 0);
- events.DelayEvents(12000, 1);
+ events.DelayEvents(12s, 0);
+ events.DelayEvents(12s, 1);
events.ScheduleEvent(EVENT_SARONITE_VAPORS_SWIRL, 6s);
}
}
@@ -450,7 +450,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- me->DespawnOrUnsummon(3000);
+ me->DespawnOrUnsummon(3s);
if (pInstance)
if (Creature* vezax = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(TYPE_VEZAX)))
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
index b318a09207..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:
@@ -704,18 +699,18 @@ public:
if (Unit* s = me->ToTempSummon()->GetSummonerUnit())
{
if ((s->IsPlayer() && !s->HasAura(SPELL_FLASH_FREEZE_TRAPPED_PLAYER)) || (s->IsCreature() && !s->HasAura(SPELL_FLASH_FREEZE_TRAPPED_NPC)))
- me->DespawnOrUnsummon(2000);
+ me->DespawnOrUnsummon(2s);
else if (s->IsPlayer())
if (InstanceScript* instanceScript = me->GetInstanceScript())
if (instanceScript->GetData(TYPE_HODIR) == NOT_STARTED)
{
s->CastSpell(s, SPELL_FLASH_FREEZE_INSTAKILL, true);
- me->DespawnOrUnsummon(2000);
+ me->DespawnOrUnsummon(2s);
}
}
else
{
- me->DespawnOrUnsummon(2000);
+ me->DespawnOrUnsummon(2s);
}
}
}
@@ -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 cda5a3629c..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
@@ -247,7 +243,7 @@ public:
bShattered = false;
lastShatterMSTime = 0;
events.Reset();
- events.ScheduleEvent(EVENT_ACTIVATE_CONSTRUCT, RAID_MODE(40000, 30000));
+ events.ScheduleEvent(EVENT_ACTIVATE_CONSTRUCT, RAID_MODE(40s, 30s));
events.ScheduleEvent(EVENT_SPELL_SCORCH, 10s);
events.ScheduleEvent(EVENT_SPELL_FLAME_JETS, 32s);
events.ScheduleEvent(EVENT_GRAB, 25s);
@@ -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);
}
}
@@ -347,14 +343,14 @@ public:
me->CastSpell(me, SPELL_BERSERK, true);
break;
}
- events.RepeatEvent(RAID_MODE(40000, 30000));
+ events.Repeat(RAID_MODE(40s, 30s));
break;
case EVENT_SPELL_SCORCH:
Talk(SAY_SCORCH);
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 34f5cf1555..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,
@@ -339,9 +316,9 @@ public:
go->SetLootRecipient(me);
}
if (Creature* arm = ObjectAccessor::GetCreature(*me, _left))
- arm->DespawnOrUnsummon(3000); // visual
+ arm->DespawnOrUnsummon(3s); // visual
if (Creature* arm = ObjectAccessor::GetCreature(*me, _right))
- arm->DespawnOrUnsummon(3000); // visual
+ arm->DespawnOrUnsummon(3s); // visual
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetDisableGravity(true);
}
@@ -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 9823a3d9ed..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
@@ -378,8 +363,8 @@ public:
events.ScheduleEvent(EVENT_COMPUTER_SAY_MINUTES, 3s);
minutesTalkNum = Is25ManRaid() ? TALK_COMPUTER_TEN : TALK_COMPUTER_EIGHT;
for (uint32 i = 0; i < uint32(TALK_COMPUTER_ZERO - minutesTalkNum - 1); ++i)
- events.ScheduleEvent(EVENT_COMPUTER_SAY_MINUTES, (i + 1)*MINUTE * IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_COMPUTER_SAY_MINUTES, (TALK_COMPUTER_ZERO - minutesTalkNum)*MINUTE * IN_MILLISECONDS + 6000);
+ events.ScheduleEvent(EVENT_COMPUTER_SAY_MINUTES, Milliseconds((i + 1) * 60000));
+ events.ScheduleEvent(EVENT_COMPUTER_SAY_MINUTES, Milliseconds((TALK_COMPUTER_ZERO - minutesTalkNum) * 60000));
}
// ensure LMK2 is at proper position
@@ -601,7 +586,7 @@ public:
{
me->EnterVehicle(VX001, 4);
float speed = ACU->GetDistance(2737.75f, 2574.22f, 381.34f) / 2.0f;
- ACU->MonsterMoveWithSpeed(2737.75f, 2574.22f, 381.34f, speed);
+ ACU->GetMotionMaster()->MovePoint(0, 2737.75f, 2574.22f, 381.34f, FORCED_MOVEMENT_NONE, speed);
ACU->SetPosition(2737.75f, 2574.22f, 381.34f, M_PI);
events.ScheduleEvent(EVENT_SAY_VX001_DEAD, 2s);
break;
@@ -740,17 +725,17 @@ public:
LMK2->InterruptNonMeleeSpells(false);
LMK2->AttackStop();
LMK2->AI()->SetData(1, 0);
- LMK2->DespawnOrUnsummon(7000);
+ LMK2->DespawnOrUnsummon(7s);
LMK2->SetReactState(REACT_PASSIVE);
VX001->InterruptNonMeleeSpells(false);
VX001->AttackStop();
VX001->AI()->SetData(1, 0);
- VX001->DespawnOrUnsummon(7000);
+ VX001->DespawnOrUnsummon(7s);
VX001->SetReactState(REACT_PASSIVE);
ACU->InterruptNonMeleeSpells(false);
ACU->AttackStop();
ACU->AI()->SetData(1, 0);
- ACU->DespawnOrUnsummon(7000);
+ ACU->DespawnOrUnsummon(7s);
ACU->SetReactState(REACT_PASSIVE);
Position exitPos = me->GetPosition();
@@ -1221,7 +1206,7 @@ public:
if (p->GetEntry() == NPC_LEVIATHAN_MKII_CANNON && !apply)
{
Unit::Kill(p, p);
- p->ToCreature()->DespawnOrUnsummon(6000);
+ p->ToCreature()->DespawnOrUnsummon(6s);
}
}
@@ -1343,7 +1328,7 @@ public:
for (uint8 i = 0; i < 2; ++i)
if (Unit* r = vk->GetPassenger(5 + i))
if (r->IsCreature())
- r->ToCreature()->DespawnOrUnsummon(1);
+ r->ToCreature()->DespawnOrUnsummon(1ms);
}
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
@@ -1555,7 +1540,7 @@ public:
void PassengerBoarded(Unit* p, int8 /*seat*/, bool apply) override
{
if (p->GetEntry() == NPC_ROCKET_VISUAL && !apply)
- p->ToCreature()->DespawnOrUnsummon(8000);
+ p->ToCreature()->DespawnOrUnsummon(8s);
}
void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
@@ -1681,8 +1666,7 @@ public:
me->InterruptNonMeleeSpells(false);
me->RemoveAllAurasExceptType(SPELL_AURA_CONTROL_VEHICLE);
- me->MonsterMoveWithSpeed(2744.65f, 2569.46f, 381.34f, me->GetDistance(2744.65f, 2569.46f, 381.34f));
- me->UpdatePosition(2744.65f, 2569.46f, 381.34f, M_PI, false);
+ me->GetMotionMaster()->MovePoint(0, 2744.65f, 2569.46f, 381.34f);
if (Creature* c = GetMimiron())
c->AI()->SetData(0, 3);
@@ -1740,8 +1724,7 @@ public:
}
float speed = me->GetExactDist(x, y, 381.34f);
- me->MonsterMoveWithSpeed(x, y, 381.34f, speed);
- me->UpdatePosition(x, y, 381.34f, me->GetAngle(victim), false);
+ me->GetMotionMaster()->MovePoint(0, x, y, 381.34f, FORCED_MOVEMENT_NONE, speed);
if (mc)
{
mc->AI()->SetData(0, 0);
@@ -1793,14 +1776,12 @@ public:
case EVENT_MAGNETIC_CORE_PULL_DOWN:
me->CastSpell(me, SPELL_MAGNETIC_CORE, true);
me->CastSpell(me, SPELL_SPINNING, true);
- me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), 365.34f, me->GetExactDist(me->GetPositionX(), me->GetPositionY(), 365.34f));
- me->UpdatePosition(me->GetPositionX(), me->GetPositionY(), 365.34f, me->GetOrientation(), false);
+ me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), 365.34f, FORCED_MOVEMENT_NONE, me->GetExactDist(me->GetPositionX(), me->GetPositionY(), 365.34f));
events.ScheduleEvent(EVENT_MAGNETIC_CORE_FREE, 20s);
break;
case EVENT_MAGNETIC_CORE_FREE:
me->RemoveAura(SPELL_SPINNING);
- me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), 381.34f, me->GetDistance(me->GetPositionX(), me->GetPositionY(), 381.34f));
- me->UpdatePosition(me->GetPositionX(), me->GetPositionY(), 381.34f, me->GetOrientation(), false);
+ me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), 381.34f, FORCED_MOVEMENT_NONE, me->GetDistance(me->GetPositionX(), me->GetPositionY(), 381.34f));
events.ScheduleEvent(EVENT_MAGNETIC_CORE_REMOVE_IMMOBILIZE, 1s);
break;
case EVENT_MAGNETIC_CORE_REMOVE_IMMOBILIZE:
@@ -1893,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
{
@@ -1931,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:
@@ -1960,7 +1951,7 @@ public:
void SetData(uint32 /*id*/, uint32 /*value*/) override
{
- me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 100.0f, false, true);
+ me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 100.0f, FORCED_MOVEMENT_NONE, 0.f, false, true);
}
void UpdateAI(uint32 /*diff*/) override
@@ -2015,7 +2006,7 @@ public:
if (despawnTimer <= diff)
{
despawnTimer = 60000;
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
else
despawnTimer -= diff;
@@ -2081,7 +2072,7 @@ public:
bot->CastSpell(bot, SPELL_EMERGENCY_MODE, true);
}
- me->DespawnOrUnsummon(500);
+ me->DespawnOrUnsummon(500ms);
timer = 99999;
}
else
@@ -2098,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,
});
}
@@ -2109,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);
}
}
@@ -2346,7 +2335,7 @@ public:
CAST_AI(npc_ulduar_flames_initial::npc_ulduar_flames_initialAI, c->AI())->RemoveFlame(me->GetGUID());
me->RemoveAllAuras();
- me->DespawnOrUnsummon(2500);
+ me->DespawnOrUnsummon(2500ms);
}
break;
case SPELL_VX001_FROST_BOMB:
@@ -2502,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 8d9dae387f..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())
@@ -683,7 +663,7 @@ public:
{
razorscale->AI()->AttackStart(player);
razorscale->GetMotionMaster()->MoveIdle();
- razorscale->GetMotionMaster()->MovePoint(POINT_RAZORSCALE_INIT, 588.0f, -178.0f, 490.0f, false, false);
+ razorscale->GetMotionMaster()->MovePoint(POINT_RAZORSCALE_INIT, 588.0f, -178.0f, 490.0f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false, false);
}
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
index d2b1aee4c4..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
@@ -859,7 +832,7 @@ public:
else if (param == ACTION_SIF_TRANSFORM)
{
me->CastSpell(me, SPELL_SIF_TRANSFORM, true);
- me->DespawnOrUnsummon(5000);
+ me->DespawnOrUnsummon(5s);
events.Reset();
_allowCast = false;
}
@@ -875,7 +848,7 @@ public:
{
case EVENT_SIF_FINISH_DOMINION:
Talk(SAY_SIF_HM_MISSED);
- me->DespawnOrUnsummon(5000);
+ me->DespawnOrUnsummon(5s);
break;
case EVENT_SIF_START_TALK:
Talk(SAY_SIF_AGGRO);
@@ -934,7 +907,7 @@ public:
{
InitWaypoint();
Reset();
- Start(false, true);
+ Start(false);
}
uint32 Timer;
@@ -1020,7 +993,7 @@ public:
{
InitWaypoint();
Reset();
- Start(false, true);
+ Start(false);
SetDespawnAtEnd(false);
}
@@ -1044,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
@@ -1206,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);
@@ -1331,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 750df991f1..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,
@@ -611,7 +600,7 @@ public:
if (!urand(0, 2))
pXT002->AI()->Talk(EMOTE_SCRAPBOT);
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
}
@@ -657,7 +646,7 @@ public:
if (Unit* target = SelectTargetFromPlayerList(200))
AttackStart(target);
else
- me->DespawnOrUnsummon(500);
+ me->DespawnOrUnsummon(500ms);
}
void UpdateAI(uint32 diff) override
@@ -769,12 +758,12 @@ public:
// so that can't be the issue
// See BoomEvent class
// Schedule 1s delayed
- me->m_Events.AddEvent(new BoomEvent(me), me->m_Events.CalculateTime(1 * IN_MILLISECONDS));
+ me->m_Events.AddEventAtOffset(new BoomEvent(me), 1s);
}
void JustDied(Unit* /*killer*/) override
{
- me->m_Events.AddEvent(new BoomEvent(me), me->m_Events.CalculateTime(1 * IN_MILLISECONDS));
+ me->m_Events.AddEventAtOffset(new BoomEvent(me), 1s);
}
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp
index e2c684870c..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,
@@ -696,11 +691,11 @@ public:
yoggb->AI()->Talk(EMOTE_YOGG_SARON_BRAIN_SHATTERED);
}
- uint32 timer = events.GetNextEventTime(EVENT_SARA_P2_OPEN_PORTALS);
- uint32 portalTime = (timer > events.GetTimer() ? timer - events.GetTimer() : 0);
- events.DelayEvents(param + 100);
+ Milliseconds timer = events.GetTimeUntilEvent(EVENT_SARA_P2_OPEN_PORTALS);
+ Milliseconds portalTime = (timer > 0ms ? timer : 0ms);
+ events.DelayEvents(Milliseconds(param + 100));
events.RescheduleEvent(EVENT_SARA_P2_OPEN_PORTALS, portalTime, 0, EVENT_PHASE_TWO);
- events.ScheduleEvent(EVENT_SARA_P2_REMOVE_STUN, param, 0, EVENT_PHASE_TWO);
+ events.ScheduleEvent(EVENT_SARA_P2_REMOVE_STUN, Milliseconds(param), 0, EVENT_PHASE_TWO);
me->CastSpell(me, SPELL_SHATTERED_ILLUSION, true);
}
@@ -804,7 +799,7 @@ public:
events.ScheduleEvent(EVENT_SARA_P1_SPELLS, 0ms, 1, EVENT_PHASE_ONE);
break;
case EVENT_SARA_P1_SUMMON:
- events.RepeatEvent(20000 - (std::min(_summonedGuardiansCount, (uint8)5) * 2000));
+ events.Repeat(Milliseconds(20000 - (std::min(_summonedGuardiansCount, (uint8)5) * 2000)));
++_summonedGuardiansCount;
InformCloud();
break;
@@ -824,14 +819,14 @@ public:
}
me->CastCustomSpell(spell, SPELLVALUE_MAX_TARGETS, 1, nullptr, false);
- events.RepeatEvent(me->GetMap()->Is25ManRaid() ? urand(0, 3000) : 4000 + urand(0, 2000));
+ events.Repeat(me->GetMap()->Is25ManRaid() ? randtime(0ms, 3s) : randtime(4s, 6s));
break;
}
case EVENT_SARA_P2_START:
{
EntryCheckPredicate pred(NPC_YOGG_SARON);
summons.DoAction(ACTION_YOGG_SARON_APPEAR, pred);
- events.RescheduleEvent(EVENT_SARA_P2_SPAWN_START_TENTACLES, 500, 0, EVENT_PHASE_TWO);
+ events.RescheduleEvent(EVENT_SARA_P2_SPAWN_START_TENTACLES, 500ms, 0, EVENT_PHASE_TWO);
// Spawn Brain!
me->SummonCreature(NPC_BRAIN_OF_YOGG_SARON, 1981.3f, -25.43f, 265);
@@ -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:
@@ -856,15 +851,15 @@ public:
break;
case EVENT_SARA_P2_SUMMON_T1: // CRUSHER
SpawnTentacle(NPC_CRUSHER_TENTACLE);
- events.RepeatEvent((50000 + urand(0, 10000)) * _summonSpeed);
+ events.Repeat(Milliseconds(uint32((50000 + urand(0, 10000)) * _summonSpeed)));
break;
case EVENT_SARA_P2_SUMMON_T2: // CONSTRICTOR
SpawnTentacle(NPC_CONSTRICTOR_TENTACLE);
- events.RepeatEvent((15000 + urand(0, 5000)) * _summonSpeed);
+ events.Repeat(Milliseconds(uint32((15000 + urand(0, 5000))* _summonSpeed)));
break;
case EVENT_SARA_P2_SUMMON_T3: // CORRUPTOR
SpawnTentacle(NPC_CORRUPTOR_TENTACLE);
- events.RepeatEvent((30000 + urand(0, 10000)) * _summonSpeed);
+ events.Repeat(Milliseconds(uint32((30000 + urand(0, 10000))* _summonSpeed)));
break;
case EVENT_SARA_P2_BRAIN_LINK:
me->CastCustomSpell(SPELL_BRAIN_LINK, SPELLVALUE_MAX_TARGETS, 1, me, false);
@@ -901,9 +896,9 @@ public:
events.ScheduleEvent(EVENT_SARA_P2_DEATH_RAY, 15s, 0, EVENT_PHASE_TWO);
events.ScheduleEvent(EVENT_SARA_P2_SUMMON_T1, 50s, 60s, 0, EVENT_PHASE_TWO);
events.ScheduleEvent(EVENT_SARA_P2_SUMMON_T2, 15s, 20s, 0, EVENT_PHASE_TWO);
- events.ScheduleEvent(EVENT_SARA_P2_SUMMON_T3, 30000 + urand(0, 10000), 0, EVENT_PHASE_TWO);
- events.ScheduleEvent(EVENT_SARA_P2_BRAIN_LINK, 0, 0, EVENT_PHASE_TWO);
- events.ScheduleEvent(EVENT_SARA_P2_OPEN_PORTALS, 60000, 0, EVENT_PHASE_TWO);
+ events.ScheduleEvent(EVENT_SARA_P2_SUMMON_T3, 30s + randtime(0ms, 10s), 0, EVENT_PHASE_TWO);
+ events.ScheduleEvent(EVENT_SARA_P2_BRAIN_LINK, 0ms, 0, EVENT_PHASE_TWO);
+ events.ScheduleEvent(EVENT_SARA_P2_OPEN_PORTALS, 60s, 0, EVENT_PHASE_TWO);
break;
case EVENT_SARA_P1_BERSERK:
if (me->GetInstanceScript())
@@ -937,7 +932,7 @@ public:
{
InitWaypoint();
Reset();
- Start(false, true, ObjectGuid::Empty, nullptr, false, true);
+ Start(false, ObjectGuid::Empty, nullptr, false, true);
}
uint32 _checkTimer;
@@ -1167,20 +1162,20 @@ public:
me->RemoveAura(SPELL_SHADOW_BARRIER);
- events.ScheduleEvent(EVENT_YS_LUNATIC_GAZE, 7000);
- events.ScheduleEvent(EVENT_YS_SHADOW_BEACON, 20000);
- events.ScheduleEvent(EVENT_YS_SUMMON_GUARDIAN, 0);
+ events.ScheduleEvent(EVENT_YS_LUNATIC_GAZE, 7s);
+ events.ScheduleEvent(EVENT_YS_SHADOW_BEACON, 20s);
+ events.ScheduleEvent(EVENT_YS_SUMMON_GUARDIAN, 0ms);
_thirdPhase = true;
Talk(SAY_YOGG_SARON_PHASE_3);
}
else if (param == ACTION_YOGG_SARON_HARD_MODE)
{
- events.ScheduleEvent(EVENT_YS_DEAFENING_ROAR, 50000);
+ events.ScheduleEvent(EVENT_YS_DEAFENING_ROAR, 50s);
}
else if (param == ACTION_YOGG_SARON_SHADOW_BEACON)
{
- events.RescheduleEvent(EVENT_YS_SHADOW_BEACON, 40000);
+ events.RescheduleEvent(EVENT_YS_SHADOW_BEACON, 40s);
}
else if (param == ACTION_REMOVE_STUN)
{
@@ -1677,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)
@@ -1719,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));
}
};
};
@@ -1807,7 +1802,7 @@ public:
}
me->ReplaceAllNpcFlags(UNIT_NPC_FLAG_NONE);
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
private:
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 a3d0626fa1..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)
@@ -80,7 +77,7 @@ struct npc_frost_tomb : public NullCreatureAI
if (PrisonerGUID)
if (Unit* p = ObjectAccessor::GetUnit(*me, PrisonerGUID))
p->RemoveAurasDueToSpell(SPELL_FROST_TOMB_AURA);
- me->DespawnOrUnsummon(5000);
+ me->DespawnOrUnsummon(5s);
}
void UpdateAI(uint32 /*diff*/) override
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 62263725b5..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};
@@ -111,8 +111,8 @@ struct npc_enslaved_proto_drake : public ScriptedAI
{
_events.Reset();
_events.ScheduleEvent(EVENT_REND, 2s, 3s);
- _events.ScheduleEvent(EVENT_FLAME_BREATH, 5500ms, 7000ms);
- _events.ScheduleEvent(EVENT_KNOCKAWAY, 3500ms, 6000ms);
+ _events.ScheduleEvent(EVENT_FLAME_BREATH, 5500ms, 7s);
+ _events.ScheduleEvent(EVENT_KNOCKAWAY, 3500ms, 6s);
}
void MovementInform(uint32 type, uint32 id) override
@@ -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);
}
}
@@ -167,7 +167,7 @@ struct npc_enslaved_proto_drake : public ScriptedAI
break;
case EVENT_KNOCKAWAY:
DoCast(SPELL_KNOCK_AWAY);
- _events.ScheduleEvent(EVENT_KNOCKAWAY, 7000ms, 8500ms);
+ _events.ScheduleEvent(EVENT_KNOCKAWAY, 7s, 8500ms);
break;
default:
break;
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 92fc069d45..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
@@ -157,7 +156,7 @@ public:
me->SetImmuneToAll(true);
Started = true;
me->setActive(true);
- events2.ScheduleEvent(EVENT_SVALA_START, 5000);
+ events2.ScheduleEvent(EVENT_SVALA_START, 5s);
if (Creature* pArthas = me->SummonCreature(NPC_ARTHAS, 295.81f, -366.16f, 92.57f, 1.58f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 59000))
ArthasGUID = pArthas->GetGUID();
@@ -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:
@@ -339,7 +338,7 @@ public:
me->SetControlled(true, UNIT_STATE_ROOT);
}
- events.DelayEvents(25001); // +1 just to be sure
+ events.DelayEvents(25001ms); // +1 just to be sure
events.ScheduleEvent(EVENT_SORROWGRAVE_RITUAL_SPELLS, 0ms);
events.ScheduleEvent(EVENT_SORROWGRAVE_FINISH_RITUAL, 25s);
return;
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
index 0a1487f159..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,
@@ -217,7 +212,7 @@ public:
{
if (me->GetHealth() < std::max(0.0f, float(me->GetMaxHealth() * (1.0f - (IsHeroic() ? 0.2f : 0.334f)*float(BoatNum + 1)))))
{
- events.DelayEvents(12000);
+ events.DelayEvents(12s);
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->InterruptNonMeleeSpells(true);
me->CastSpell(me, SPELL_SCREAMS_OF_THE_DEAD, true);
@@ -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/boss_ichoron.cpp b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
index 6ac9bdbf37..326ac6e7a0 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
@@ -344,7 +344,7 @@ public:
if (Creature* pIchoron = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_ICHORON_GUID)))
if (pIchoron->AI())
pIchoron->AI()->DoAction(ACTION_WATER_ELEMENT_KILLED);
- me->DespawnOrUnsummon(2500);
+ me->DespawnOrUnsummon(2500ms);
}
void AttackStart(Unit* /*who*/) override {}
diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
index 27b354bee4..7cfab3ed2e 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
@@ -121,7 +121,7 @@ public:
while (entry1 == entry2);
me->CastSpell((Unit*)nullptr, entry2, true);
}
- events.RepeatEvent(45000);
+ events.Repeat(45s);
events.RescheduleEvent(EVENT_SPELL_ARCANE_BUFFET, 5s);
events.RescheduleEvent(EVENT_CHECK_DISTANCE, 6s);
}
@@ -135,7 +135,7 @@ public:
if (me->GetDistance(c) < 3.0f)
{
c->CastSpell(me, SPELL_ARCANE_POWER, false);
- c->DespawnOrUnsummon(8000);
+ c->DespawnOrUnsummon(8s);
found = true;
}
if (found)
diff --git a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
index f7ec86e1b8..65263e655c 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
@@ -222,7 +222,7 @@ public:
if (Creature* c = pInstance->instance->GetCreature(SummonedGUID))
c->DespawnOrUnsummon();
}
- me->DespawnOrUnsummon(5000);
+ me->DespawnOrUnsummon(5s);
}
void SummonedCreatureDespawn(Creature* pSummoned) override
diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
index 8406b3527c..4fa7bb52ce 100644
--- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
+++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
@@ -92,7 +92,7 @@ public:
uiFirstBoss = 0;
uiSecondBoss = 0;
events.Reset();
- events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0);
+ events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0ms);
GateHealth = 100;
WaveCount = 0;
PortalLocation = 0;
@@ -666,7 +666,7 @@ public:
EncounterStatus = NOT_STARTED;
CLEANED = false;
events.Reset();
- events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0);
+ events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0ms);
data >> m_auiEncounter[0];
data >> m_auiEncounter[1];
diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
index 1332cf6723..97fa245be4 100644
--- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
+++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
@@ -205,7 +205,7 @@ public:
break;
case EVENT_SUMMON_SABOTEOUR:
DoSummon(NPC_SABOTEOUR, me, 2.0f, 0, TEMPSUMMON_CORPSE_DESPAWN);
- me->DespawnOrUnsummon(3000);
+ me->DespawnOrUnsummon(3s);
break;
}
@@ -372,7 +372,7 @@ struct violet_hold_trashAI : public npc_escortAI
break;
}
SetDespawnAtEnd(false);
- Start(true, true);
+ Start(true);
}
npc_escortAI::UpdateAI(diff);
@@ -422,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
};
@@ -1111,7 +1093,7 @@ public:
break;
}
SetDespawnAtEnd(false);
- Start(true, true);
+ Start(true);
}
if (bOpening)
@@ -1136,7 +1118,7 @@ public:
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetDisplayId(11686);
me->CastSpell(me, SPELL_TELEPORT_VISUAL, true);
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
++count;
}
@@ -1198,11 +1180,11 @@ struct npc_violet_hold_defense_system : public ScriptedAI
{
case EVENT_ARCANE_LIGHTNING:
DoCastAOE(RAND(SPELL_ARCANE_LIGHTNING, SPELL_ARCANE_LIGHTNING_VISUAL));
- events.RepeatEvent(2000);
+ events.Repeat(2s);
break;
case EVENT_ARCANE_LIGHTNING_INSTAKILL:
DoCastAOE(SPELL_ARCANE_LIGHTNING_INSTAKILL);
- events.RepeatEvent(1000);
+ events.Repeat(1s);
break;
}
}
diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp
index 8f352e8936..3ee7f22721 100644
--- a/src/server/scripts/Northrend/zone_borean_tundra.cpp
+++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp
@@ -63,7 +63,7 @@ class spell_q11919_q11940_drake_hunt_aura : public AuraScript
GetCaster()->CastSpell(GetCaster(), SPELL_DRAKE_HATCHLING_SUBDUED, true);
owner->SetFaction(FACTION_FRIENDLY);
owner->SetImmuneToAll(true);
- owner->DespawnOrUnsummon(3 * MINUTE * IN_MILLISECONDS);
+ owner->DespawnOrUnsummon(180s);
}
void Register() override
@@ -464,7 +464,10 @@ public:
go->UseDoorOrButton();
if (npc_escortAI* pEscortAI = CAST_AI(npc_lurgglbr::npc_lurgglbrAI, creature->AI()))
- pEscortAI->Start(true, false, player->GetGUID());
+ {
+ creature->SetWalk(true);
+ pEscortAI->Start(true, player->GetGUID());
+ }
creature->SetFaction(player->GetTeamId() == TEAM_ALLIANCE ? FACTION_ESCORTEE_A_PASSIVE : FACTION_ESCORTEE_H_PASSIVE);
return true;
@@ -609,7 +612,7 @@ struct npc_beryl_sorcererAI : public CreatureAI
AttackStart(who);
}
- _events.ScheduleEvent(EVENT_FROSTBOLT, 3000, 4000);
+ _events.ScheduleEvent(EVENT_FROSTBOLT, 3s, 4s);
}
void SpellHit(Unit* unit, SpellInfo const* spell) override
@@ -914,7 +917,8 @@ 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);
- CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
+ 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,7 @@ public:
{
creature->SetStandState(UNIT_STAND_STATE_STAND);
creature->AI()->Talk(SAY_BONKER_2, player);
- CAST_AI(npc_escortAI, (creature->AI()))->Start(true, true, player->GetGUID());
+ CAST_AI(npc_escortAI, (creature->AI()))->Start(true, player->GetGUID());
}
return true;
}
@@ -1421,7 +1425,7 @@ public:
_playerGUID.Clear();
}
- void SetGUID(ObjectGuid guid, int32 /*action*/) override
+ void SetGUID(ObjectGuid const& guid, int32 /*action*/) override
{
if (_playerGUID)
return;
@@ -1431,7 +1435,7 @@ public:
if (Player* player = ObjectAccessor::GetPlayer(*me, _playerGUID))
me->SetFacingToObject(player);
- _events.ScheduleEvent(EVENT_TALK, 1000);
+ _events.ScheduleEvent(EVENT_TALK, 1s);
}
void UpdateAI(uint32 diff) override
@@ -1557,7 +1561,7 @@ public:
void Reset() override
{
me->SetImmuneToAll(true);
- _events.ScheduleEvent(EVENT_THASSARIAN_CAST, 1000);
+ _events.ScheduleEvent(EVENT_THASSARIAN_CAST, 1s);
}
void UpdateAI(uint32 diff) override
@@ -1648,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);
@@ -1684,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;
@@ -1692,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;
@@ -1726,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))
{
@@ -1734,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;
@@ -1884,7 +1888,7 @@ public:
if (Creature* leryssa = ObjectAccessor::GetCreature(*me, _leryssaGUID))
{
leryssa->SetWalk(false);
- leryssa->MonsterMoveWithSpeed(3726.751f, 3568.1633f, 477.44086f, leryssa->GetSpeed(MOVE_RUN));
+ leryssa->GetMotionMaster()->MovePoint(0, 3726.751f, 3568.1633f, 477.44086f, FORCED_MOVEMENT_RUN);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_23, 2s);
break;
@@ -1989,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);
}
}
@@ -2020,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 a211b22028..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(1);
- 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;
@@ -108,7 +90,7 @@ struct npc_preparations_for_war_vehicle : public NullCreatureAI
if (me->GetDistance2d(x, y) < 10.0f)
{
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
if (Vehicle* vehicle = me->GetVehicleKit())
if (Unit* passenger = vehicle->GetPassenger(0))
{
@@ -117,7 +99,7 @@ struct npc_preparations_for_war_vehicle : public NullCreatureAI
}
}
else
- me->GetMotionMaster()->MovePoint(0, x, y, z, false, false);
+ me->GetMotionMaster()->MovePoint(0, x, y, z, FORCED_MOVEMENT_NONE, 0.f, 0.f, false, false);
break;
}
}
diff --git a/src/server/scripts/Northrend/zone_dalaran.cpp b/src/server/scripts/Northrend/zone_dalaran.cpp
index d34530709d..e561a8e07a 100644
--- a/src/server/scripts/Northrend/zone_dalaran.cpp
+++ b/src/server/scripts/Northrend/zone_dalaran.cpp
@@ -592,7 +592,7 @@ struct npc_minigob_manabonk : public ScriptedAI
case EVENT_MOVE:
{
Position pos = me->GetRandomNearPosition((urand(15, 40)));
- me->GetMotionMaster()->MovePoint(0, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), true);
+ me->GetMotionMaster()->MovePoint(0, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ());
}
events.ScheduleEvent(EVENT_DESPAWN_VISUAL, 3s);
events.ScheduleEvent(EVENT_DESPAWN, 4s);
diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp
index 52aac2193b..f7b1252a61 100644
--- a/src/server/scripts/Northrend/zone_dragonblight.cpp
+++ b/src/server/scripts/Northrend/zone_dragonblight.cpp
@@ -491,9 +491,9 @@ public:
HideNozdormu();
if (Creature* cr = GetCopy())
cr->AI()->Talk(SAY_HOURGLASS_END_2, GetPlayer());
- me->DespawnOrUnsummon(500);
+ me->DespawnOrUnsummon(500ms);
if (GetCopy())
- GetCopy()->DespawnOrUnsummon(500);
+ GetCopy()->DespawnOrUnsummon(500ms);
break;
}
}
@@ -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,11 +622,11 @@ public:
if (type != WAYPOINT_MOTION_TYPE)
return;
- if (point == 8) // max-1
+ if (point == 9)
{
Talk(0);
me->RemoveAllAuras();
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
if (TempSummon* summon = me->ToTempSummon())
if (Unit* owner = summon->GetSummonerUnit())
if (Player* player = owner->ToPlayer())
@@ -726,7 +726,7 @@ public:
}
case EVENT_TAKE_OFF:
{
- me->DespawnOrUnsummon(4050);
+ me->DespawnOrUnsummon(4050ms);
me->SetOrientation(2.5f);
me->SetSpeedRate(MOVE_FLIGHT, 1.0f);
Position pos = me->GetPosition();
@@ -1055,12 +1055,12 @@ public:
if (fromReset)
{
if (Creature* c = me->FindNearestCreature(NPC_SAC_LIGHTS_VENGEANCE, 150.0f, true))
- c->DespawnOrUnsummon(1);
+ c->DespawnOrUnsummon(1ms);
if (Creature* c = me->FindNearestCreature(NPC_SAC_LIGHTS_VENGEANCE_VEH_1, 150.0f, true))
c->RemoveAllAuras();
}
if (Creature* c = me->FindNearestCreature(NPC_SAC_LIGHTS_VENGEANCE_VEH_2, 150.0f, true))
- c->DespawnOrUnsummon(1);
+ c->DespawnOrUnsummon(1ms);
if (GameObject* go = me->FindNearestGameObject(GO_SAC_LIGHTS_VENGEANCE_1, 150.0f))
go->Delete();
if (GameObject* go = me->FindNearestGameObject(GO_SAC_LIGHTS_VENGEANCE_2, 150.0f))
@@ -1093,9 +1093,9 @@ public:
me->GetMotionMaster()->Clear();
}
- void SetGUID(ObjectGuid guid, int32 /*id*/) override
+ void SetGUID(ObjectGuid const& guid, int32 /*id*/) override
{
- if (playerGUID || events.GetNextEventTime(998) || events.GetNextEventTime(2))
+ if (playerGUID || events.HasTimeUntilEvent(998) || events.HasTimeUntilEvent(2))
return;
me->setActive(true);
@@ -1289,18 +1289,18 @@ public:
{
c->CastSpell(v, SPELL_SAC_KILL_VEGARD, true);
v->SetDisplayId(11686);
- v->DespawnOrUnsummon(1000);
+ v->DespawnOrUnsummon(1s);
b->CastSpell(b, SPELL_SAC_HOLY_BOMB_EXPLOSION, true);
b->CastSpell(b, SPELL_SAC_SUMMON_GO_2, true);
if (Unit* vb = c->GetVehicleBase())
{
if (Unit* pass = vb->GetVehicleKit()->GetPassenger(0))
if (pass->IsCreature())
- pass->ToCreature()->DespawnOrUnsummon(1);
+ pass->ToCreature()->DespawnOrUnsummon(1ms);
vb->RemoveAllAuras();
- vb->ToCreature()->DespawnOrUnsummon(1);
+ vb->ToCreature()->DespawnOrUnsummon(1ms);
}
- c->ToCreature()->DespawnOrUnsummon(1);
+ c->ToCreature()->DespawnOrUnsummon(1ms);
}
}
break;
@@ -1325,7 +1325,7 @@ public:
if (spell->Id == SPELL_SAC_REPEL_HAMMER && target->IsCreature())
{
target->CastSpell((Unit*)nullptr, SPELL_SAC_THROW_HAMMER, true);
- target->ToCreature()->DespawnOrUnsummon(1);
+ target->ToCreature()->DespawnOrUnsummon(1ms);
if (Unit* c = target->GetVehicleBase())
c->RemoveAurasDueToSpell(SPELL_SAC_HOLY_ZONE_AURA);
}
@@ -1439,7 +1439,7 @@ public:
{
me->SetDisplayId(me->GetNativeDisplayId());
me->CastSpell(me, SPELL_SAC_EMERGE, true);
- me->m_Events.AddEvent(new SACActivateEvent(me), me->m_Events.CalculateTime(4000));
+ me->m_Events.AddEventAtOffset(new SACActivateEvent(me), 4s);
}
void Deactivate()
@@ -1452,7 +1452,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
me->RemoveAurasDueToSpell(SPELL_SAC_GHOUL_AREA_AURA);
- me->m_Events.AddEvent(new SACDeactivateEvent(me), me->m_Events.CalculateTime(4000));
+ me->m_Events.AddEventAtOffset(new SACDeactivateEvent(me), 4s);
}
void JustRespawned() override
@@ -1559,7 +1559,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
Talk(1);
- me->DespawnOrUnsummon(10000);
+ me->DespawnOrUnsummon(10s);
if (Creature* c = me->FindNearestCreature(NPC_SAC_LICH_KING, 200.0f, true))
c->AI()->SetData(3, 3);
}
@@ -2062,7 +2062,7 @@ class spell_q12096_q12092_dummy : public SpellScript
{
tree->CastSpell(player, SPELL_CREATE_ITEM_BARK);
tree->AI()->Talk(SAY_WALKER_FRIENDLY, player);
- tree->DespawnOrUnsummon(1000);
+ tree->DespawnOrUnsummon(1s);
}
else if (roll == 0) // enemy version
{
@@ -2114,8 +2114,8 @@ public:
void JustEngagedWith(Unit* who) override
{
- _events.ScheduleEvent(EVENT_HEMORRHAGE, urand(5000, 8000));
- _events.ScheduleEvent(EVENT_KIDNEY_SHOT, urand(12000, 15000));
+ _events.ScheduleEvent(EVENT_HEMORRHAGE, 5s, 8s);
+ _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 12s, 15s);
if (Player* player = who->ToPlayer())
Talk (SAY_AGGRO, player);
@@ -2321,7 +2321,7 @@ class spell_dragonblight_devour_ghoul_periodic : public AuraScript
if (GetUnitOwner() && GetUnitOwner()->ToCreature())
{
GetUnitOwner()->ExitVehicle();
- GetUnitOwner()->ToCreature()->DespawnOrUnsummon(2000);
+ GetUnitOwner()->ToCreature()->DespawnOrUnsummon(2s);
}
}
diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
index 1084acac01..81ae014d58 100644
--- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp
+++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
@@ -207,7 +207,7 @@ public:
Mrfloppy->GetMotionMaster()->MoveFollow(creature, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
if (npc_escortAI* pEscortAI = CAST_AI(npc_emily::npc_emilyAI, (creature->AI())))
- pEscortAI->Start(true, false, player->GetGUID());
+ pEscortAI->Start(true, player->GetGUID());
}
return true;
}
@@ -589,78 +589,78 @@ public:
case EVENT_WOUNDED_MOVE:
if (me->GetPositionY() == -2835.11f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
- me->DespawnOrUnsummon(20000);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_1, false);
+ me->DespawnOrUnsummon(20s);
}
if (me->GetPositionY() == -2981.89f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
- me->DespawnOrUnsummon(18000);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_3, false);
+ me->DespawnOrUnsummon(18s);
}
if (me->GetPositionY() == -2934.44f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
- me->DespawnOrUnsummon(9000);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_3, false);
+ me->DespawnOrUnsummon(9s);
}
if (me->GetPositionY() == -3020.99f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
- me->DespawnOrUnsummon(22000);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_1, false);
+ me->DespawnOrUnsummon(22s);
}
if (me->GetPositionY() == -2964.73f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_2, false);
- me->DespawnOrUnsummon(15000);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_2, false);
+ me->DespawnOrUnsummon(15s);
}
if (me->GetPositionY() == -2940.50f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
- me->DespawnOrUnsummon(20000);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_1, false);
+ me->DespawnOrUnsummon(20s);
}
if (me->GetPositionY() == -2847.93f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
- me->DespawnOrUnsummon(30000);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_1, false);
+ me->DespawnOrUnsummon(30s);
}
if (me->GetPositionY() == -2835.31f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
- me->DespawnOrUnsummon(27000);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_1, false);
+ me->DespawnOrUnsummon(27s);
}
if (me->GetPositionY() == -2822.20f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
- me->DespawnOrUnsummon(25000);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_1, false);
+ me->DespawnOrUnsummon(25s);
}
if (me->GetPositionY() == -2846.31f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
- me->DespawnOrUnsummon(21000);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_1, false);
+ me->DespawnOrUnsummon(21s);
}
if (me->GetPositionY() == -2897.23f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
- me->DespawnOrUnsummon(15000);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_3, false);
+ me->DespawnOrUnsummon(15s);
}
if (me->GetPositionY() == -2886.01f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
- me->DespawnOrUnsummon(25000);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_3, false);
+ me->DespawnOrUnsummon(25s);
}
if (me->GetPositionY() == -2906.89f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
- me->DespawnOrUnsummon(25000);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_3, false);
+ me->DespawnOrUnsummon(25s);
}
if (me->GetPositionY() == -3048.94f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_2, false);
- me->DespawnOrUnsummon(30000);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_2, false);
+ me->DespawnOrUnsummon(30s);
}
if (me->GetPositionY() == -2961.08f)
{
- me->GetMotionMaster()->MovePath(WOUNDED_MOVE_2, false);
- me->DespawnOrUnsummon(25000);
+ me->GetMotionMaster()->MoveWaypoint(WOUNDED_MOVE_2, false);
+ me->DespawnOrUnsummon(25s);
}
break;
case EVENT_CLEAVE:
@@ -871,7 +871,7 @@ public:
{
if (_following)
if (!me->HasAura(SPELL_FROG_LOVE))
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
_events.Update(diff);
@@ -898,7 +898,7 @@ public:
break;
case EVENT_LAKEFROG_5:
Talk(SAY_MAIDEN_1);
- me->DespawnOrUnsummon(4000);
+ me->DespawnOrUnsummon(4s);
break;
default:
break;
diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp
index 6022af4bca..ef005b6158 100644
--- a/src/server/scripts/Northrend/zone_howling_fjord.cpp
+++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp
@@ -44,9 +44,9 @@ public:
if (Creature* cow = me->FindNearestCreature(24797, 5.0f, true))
{
me->CastSpell(me, 44460, true);
- me->DespawnOrUnsummon(10000);
+ me->DespawnOrUnsummon(10s);
cow->CastSpell(cow, 44460, true);
- cow->DespawnOrUnsummon(10000);
+ cow->DespawnOrUnsummon(10s);
if (me->IsSummon())
if (Unit* owner = me->ToTempSummon()->GetSummonerUnit())
owner->CastSpell(owner, 44463, true);
@@ -191,7 +191,8 @@ public:
if (quest->GetQuestId() == QUEST_TRAIL_OF_FIRE)
{
creature->SetFaction(player->GetTeamId() == TEAM_ALLIANCE ? FACTION_ESCORTEE_A_PASSIVE : FACTION_ESCORTEE_H_PASSIVE);
- CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
+ 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;
}
}
@@ -309,7 +310,7 @@ public:
return;
me->SetWalk(true);
- Start(false, false, summonerGUID);
+ Start(false, summonerGUID);
}
void WaypointReached(uint32 waypointId) override
diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp
index 7db4f389ce..17e0e9589d 100644
--- a/src/server/scripts/Northrend/zone_icecrown.cpp
+++ b/src/server/scripts/Northrend/zone_icecrown.cpp
@@ -501,7 +501,7 @@ public:
events.RescheduleEvent(EVENT_SOUL_COAX, 5s);
}
else
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
break;
case EVENT_SOUL_COAX:
Talk(SAY_ARETE_1);
@@ -523,11 +523,8 @@ public:
{
soul->SetCanFly(true);
soul->SetVisible(true);
- Movement::MoveSplineInit init(soul);
- init.MoveTo(soul->GetPositionX(), soul->GetPositionY(), soul->GetPositionZ() + 5.0f);
- init.SetVelocity(1.0f);
- init.Launch();
soul->CastSpell(soul, 64462, true); // Drown
+ soul->GetMotionMaster()->MovePoint(0, soul->GetPositionX(), soul->GetPositionY(), soul->GetPositionZ() + 5.0f, FORCED_MOVEMENT_NONE, 1.f);
}
events.ScheduleEvent(EVENT_SCENE_1, 6s);
break;
@@ -580,14 +577,14 @@ public:
if (Creature* soul = ObjectAccessor::GetCreature(*me, _landgrenSoulGUID))
{
soul->AI()->Talk(SAY_SOUL_4);
- soul->DespawnOrUnsummon(2000);
+ soul->DespawnOrUnsummon(2s);
}
events.ScheduleEvent(EVENT_SCENE_10, 3s);
break;
case EVENT_SCENE_10:
me->ReplaceAllNpcFlags(UNIT_NPC_FLAG_QUESTGIVER);
Talk(SAY_ARETE_6);
- me->DespawnOrUnsummon(60000);
+ me->DespawnOrUnsummon(60s);
break;
}
}
@@ -718,7 +715,8 @@ public:
Talk(0);
events.Reset();
summons.DespawnAll();
- Start(false, false);
+ me->SetWalk(true);
+ Start(false);
int8 i = -1;
std::list<Creature*> cList;
@@ -796,7 +794,7 @@ public:
summon->SetUInt32Value(UNIT_NPC_EMOTESTATE, param);
break;
case ACTION_SUMMON_DESPAWN:
- summon->DespawnOrUnsummon(param);
+ summon->DespawnOrUnsummon(Milliseconds(param));
break;
case ACTION_SUMMON_ORIENTATION:
summon->SetFacingTo(param / 100.0f);
@@ -1022,9 +1020,9 @@ public:
{
if (summon->GetEntry() == NPC_TIRION_LICH_KING)
summon->CastSpell(summon, SPELL_LICH_KINGS_FURY, false);
- summon->DespawnOrUnsummon(summon->GetEntry() == NPC_TIRION_LICH_KING ? 10000 : 4000);
+ summon->DespawnOrUnsummon(summon->GetEntry() == NPC_TIRION_LICH_KING ? 10s : 4s);
}
- me->DespawnOrUnsummon(10000);
+ me->DespawnOrUnsummon(10s);
break;
}
}
@@ -1257,8 +1255,8 @@ public:
player->CastSpell(player, SPELL_WAITING_FOR_A_BOMBER, true);
player->CastSpell(player, SPELL_FLIGHT_ORDERS, true);
- events.ScheduleEvent(EVENT_START_FLIGHT, 0);
- events.ScheduleEvent(EVENT_TAKE_PASSENGER, 3000);
+ events.ScheduleEvent(EVENT_START_FLIGHT, 0ms);
+ events.ScheduleEvent(EVENT_TAKE_PASSENGER, 3s);
me->SetCanFly(true);
me->AddUnitMovementFlag(MOVEMENTFLAG_FLYING);
me->SetSpeed(MOVE_FLIGHT, 0.1f);
@@ -1310,29 +1308,11 @@ public:
turret->HandleSpellClick(owner, 0);
return;
}
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
break;
case EVENT_START_FLIGHT:
{
- WPPath* path = sSmartWaypointMgr->GetPath(me->GetEntry());
- if (!path || path->empty())
- {
- me->DespawnOrUnsummon(1);
- 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;
@@ -1342,7 +1322,7 @@ public:
// Check if path is finished
if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() != ESCORT_MOTION_TYPE)
{
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
return;
}
@@ -1381,7 +1361,7 @@ public:
station->RemoveAurasDueToSpell(SPELL_INFRA_GREEN_SHIELD);
}
if (!playerPresent)
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
events.ScheduleEvent(EVENT_SYNCHRONIZE_SHIELDS, 1s);
break;
diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
index 100a90a869..329ab98c09 100644
--- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp
+++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
@@ -605,7 +605,8 @@ public:
creature->GetMotionMaster()->MoveJumpTo(0, 0.4f, 0.4f);
creature->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE);
- pEscortAI->Start(false, false, player->GetGUID());
+ 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 d43a29a5e9..5a50bee8a3 100644
--- a/src/server/scripts/Northrend/zone_storm_peaks.cpp
+++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp
@@ -57,7 +57,7 @@ struct npc_frosthound : public npc_escortAI
{
me->SetFaction(who->GetFaction());
me->CastSpell(me, SPELL_SUMMON_PURSUERS_PERIODIC, true);
- Start(false, true, who->GetGUID());
+ Start(false, who->GetGUID());
Talk(TALK_EMOTE_FROSTHOUND_SNIFF, me);
}
}
@@ -159,7 +159,7 @@ public:
me->RemoveAllAurasExceptType(SPELL_AURA_MECHANIC_IMMUNITY);
Talk(1);
caster->ToPlayer()->KilledMonsterCredit(me->GetEntry());
- me->DespawnOrUnsummon(8000);
+ me->DespawnOrUnsummon(8s);
me->GetMotionMaster()->MoveJump(8721.94f, -1955, 963, 70.0f, 30.0f);
}
}
@@ -246,7 +246,7 @@ public:
void RollPath()
{
me->SetEntry(NPC_TIME_LOST_PROTO_DRAKE);
- Start(true, true, ObjectGuid::Empty, 0, false, true, true);
+ 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);
}
@@ -467,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)
{
@@ -849,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
@@ -912,7 +892,10 @@ public:
if (who->IsPlayer())
{
if (apply)
- Start(false, true, who->GetGUID());
+ {
+ me->SetWalk(false);
+ Start(false, who->GetGUID());
+ }
}
}
@@ -970,7 +953,7 @@ public:
};
if (who->IsPlayer())
- who->m_Events.AddEvent(new DelayedTransportPositionOffsets(who), who->m_Events.CalculateTime(500));
+ who->m_Events.AddEventAtOffset(new DelayedTransportPositionOffsets(who), 500ms);
return;
}
@@ -1084,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);
@@ -1149,13 +1124,13 @@ public:
}
else
{
- me->DespawnOrUnsummon(100);
+ me->DespawnOrUnsummon(100ms);
}
break;
case 24:
if (me->GetEntry() == NPC_PROPELLED_DEVICE_1)
{
- me->DespawnOrUnsummon(100);
+ me->DespawnOrUnsummon(100ms);
}
break;
default:
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/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp
index 8b36a31062..3a91af290b 100644
--- a/src/server/scripts/Northrend/zone_zuldrak.cpp
+++ b/src/server/scripts/Northrend/zone_zuldrak.cpp
@@ -591,7 +591,7 @@ public:
// pointer check not needed
DoCast(rageclaw, SPELL_FREE_RAGECLAW, true);
_rageclawGUID.Clear();
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
void SpellHit(Unit* caster, SpellInfo const* spell) override
@@ -660,7 +660,7 @@ public:
DoCast(me, SPELL_UNSHACKLED, true);
Talk(SAY_RAGECLAW);
me->GetMotionMaster()->MoveRandom(10);
- me->DespawnOrUnsummon(10000);
+ me->DespawnOrUnsummon(10s);
}
}
};
@@ -755,7 +755,7 @@ public:
case EVENT_RECRUIT_2:
me->SetWalk(true);
me->GetMotionMaster()->MovePoint(0, me->GetPositionX() + (cos(_heading) * 10), me->GetPositionY() + (std::sin(_heading) * 10), me->GetPositionZ());
- me->DespawnOrUnsummon(5000);
+ me->DespawnOrUnsummon(5s);
break;
default:
break;
diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp
index 3b7a60e266..df5dd8c7d3 100644
--- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp
+++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp
@@ -241,7 +241,7 @@ struct npc_stolen_soul : public ScriptedAI
});
}
- void SetGUID(ObjectGuid guid, int32 /*id*/) override
+ void SetGUID(ObjectGuid const& guid, int32 /*id*/) override
{
_targetGuid = guid;
}
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/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
index 1717a518d0..76c3d86efd 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
@@ -111,7 +111,7 @@ struct boss_grandmaster_vorpil : public BossAI
case 8:
return 7200ms;
case 9:
- return 6000ms;
+ return 6s;
default:
return 4800ms;
}
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp
index fcf8f38c5c..a4c40812fa 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp
@@ -114,7 +114,7 @@ struct boss_murmur : public BossAI
return true;
}
- void SetGUID(ObjectGuid guid, int32 index) override
+ void SetGUID(ObjectGuid const& guid, int32 index) override
{
if (index == GUID_MURMUR_NPCS)
{
diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
index da92628e0f..c1c9723055 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
@@ -507,7 +507,7 @@ struct boss_illidan_stormrage : public BossAI
Talk(SAY_ILLIDAN_EYE_BLAST);
me->SummonCreature(NPC_ILLIDAN_DB_TARGET, eyeBeamPos[beamPosId], TEMPSUMMON_TIMED_DESPAWN, 30000);
if (Creature* trigger = summons.GetCreatureWithEntry(NPC_ILLIDAN_DB_TARGET))
- trigger->GetMotionMaster()->MovePoint(0, eyeBeamPos[beamPosId + MAX_EYE_BEAM_POS], false, true);
+ trigger->GetMotionMaster()->MovePoint(0, eyeBeamPos[beamPosId + MAX_EYE_BEAM_POS], FORCED_MOVEMENT_NONE, 0.f, false, true);
// Reposition
me->m_Events.AddEventAtOffset([&] {
@@ -515,7 +515,7 @@ struct boss_illidan_stormrage : public BossAI
me->InterruptNonMeleeSpells(false);
me->SetControlled(false, UNIT_STATE_ROOT);
CycleBeamPos(beamPosId);
- me->GetMotionMaster()->MovePoint(POINT_ILLIDAN_HOVER, airHoverPos[beamPosId], false, true);
+ me->GetMotionMaster()->MovePoint(POINT_ILLIDAN_HOVER, airHoverPos[beamPosId], FORCED_MOVEMENT_NONE, 0.f, false, true);
}, 20s, GROUP_PHASE_FLYING);
});
// Check for Phase Transition
@@ -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);
}
}
@@ -923,7 +923,7 @@ struct npc_akama_illidan : public ScriptedAI
me->m_Events.AddEventAtOffset([&] {
Talk(SAY_AKAMA_COUNCIL_2);
me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
- }, 8000ms); // 7800ms
+ }, 8s); // 7800ms
}
break;
// Reached Door
@@ -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
}
}
@@ -1436,7 +1436,7 @@ class spell_illidan_parasitic_shadowfiend_trigger : public SpellScript
{
PreventHitDefaultEffect(effIndex);
if (Creature* target = GetHitCreature())
- target->DespawnOrUnsummon(1);
+ target->DespawnOrUnsummon(1ms);
}
void Register() override
@@ -1692,7 +1692,7 @@ class spell_illidan_cage_trap : public SpellScript
if (GetCaster()->GetExactDist2d(target) < 4.0f)
{
target->AI()->DoAction(ACTION_ILLIDAN_CAGED);
- GetCaster()->ToCreature()->DespawnOrUnsummon(1);
+ GetCaster()->ToCreature()->DespawnOrUnsummon(1ms);
if (GameObject* gobject = GetCaster()->FindNearestGameObject(GO_CAGE_TRAP, 10.0f))
gobject->SetLootState(GO_JUST_DEACTIVATED);
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp
index 8c22b8d04e..880a39615d 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp
@@ -262,7 +262,7 @@ struct boss_illidari_council_memberAI : public ScriptedAI
void KilledUnit(Unit*) override
{
- if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
+ if (!events.HasTimeUntilEvent(EVENT_KILL_TALK))
{
Talk(SAY_COUNCIL_SLAY);
events.ScheduleEvent(EVENT_KILL_TALK, 6s);
@@ -582,7 +582,7 @@ struct boss_veras_darkshadow : public boss_illidari_council_memberAI
break;
}
- if (events.GetNextEventTime(EVENT_SPELL_VANISH_OUT) == 0)
+ if (!events.HasTimeUntilEvent(EVENT_SPELL_VANISH_OUT))
DoMeleeAttackIfReady();
}
};
@@ -771,7 +771,7 @@ class spell_illidari_council_deadly_strike_aura : public AuraScript
if (Unit* target = GetUnitOwner()->GetAI()->SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
{
GetUnitOwner()->CastSpell(target, GetSpellInfo()->Effects[effect->GetEffIndex()].TriggerSpell, true);
- GetUnitOwner()->m_Events.AddEvent(new VerasEnvenom(*GetUnitOwner(), target->GetGUID()), GetUnitOwner()->m_Events.CalculateTime(urand(1500, 3500)));
+ GetUnitOwner()->m_Events.AddEventAtOffset(new VerasEnvenom(*GetUnitOwner(), target->GetGUID()), randtime(1500ms, 3500ms));
}
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
index 79d68ebfa0..9710a8382b 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
@@ -107,7 +107,7 @@ public:
{
summoner->GetAI()->DoAction(_action);
_owner.SetStandState(UNIT_STAND_STATE_SUBMERGED);
- _owner.DespawnOrUnsummon(200);
+ _owner.DespawnOrUnsummon(200ms);
}
return true;
}
@@ -284,7 +284,7 @@ public:
if (type != POINT_MOTION_TYPE || id != POINT_GO_BACK)
return;
- me->m_Events.AddEvent(new SuckBackEvent(*me, ACTION_ESSENCE_OF_SUFFERING), me->m_Events.CalculateTime(1500));
+ me->m_Events.AddEventAtOffset(new SuckBackEvent(*me, ACTION_ESSENCE_OF_SUFFERING), 1500ms);
me->SetTarget();
me->SetFacingTo(M_PI / 2.0f);
}
@@ -301,7 +301,7 @@ public:
Talk(SUFF_SAY_RECAP);
me->SetReactState(REACT_PASSIVE);
me->GetMotionMaster()->Clear();
- me->GetMotionMaster()->MovePoint(POINT_GO_BACK, me->GetHomePosition(), false);
+ me->GetMotionMaster()->MovePoint(POINT_GO_BACK, me->GetHomePosition(), FORCED_MOVEMENT_NONE, 0.f, false);
scheduler.CancelAll();
}
}
@@ -392,7 +392,7 @@ public:
if (type != POINT_MOTION_TYPE || id != POINT_GO_BACK)
return;
- me->m_Events.AddEvent(new SuckBackEvent(*me, ACTION_ESSENCE_OF_DESIRE), me->m_Events.CalculateTime(1500));
+ me->m_Events.AddEventAtOffset(new SuckBackEvent(*me, ACTION_ESSENCE_OF_DESIRE), 1500ms);
me->SetTarget();
me->SetFacingTo(M_PI / 2.0f);
}
@@ -408,7 +408,7 @@ public:
Talk(DESI_SAY_RECAP);
me->SetReactState(REACT_PASSIVE);
me->GetMotionMaster()->Clear();
- me->GetMotionMaster()->MovePoint(POINT_GO_BACK, me->GetHomePosition(), false);
+ me->GetMotionMaster()->MovePoint(POINT_GO_BACK, me->GetHomePosition(), FORCED_MOVEMENT_NONE, 0.f, false);
scheduler.CancelAll();
}
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
index 1cc778b25a..a8c18e4aa8 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
@@ -251,7 +251,7 @@ struct npc_akama_shade : public ScriptedAI
{
Talk(SAY_BROKEN_FREE_2);
}, 3);
- ScheduleUniqueTimedEvent(52000ms, [&]
+ ScheduleUniqueTimedEvent(52s, [&]
{
std::list<Creature*> brokens;
me->GetCreatureListWithEntryInGrid(brokens, NPC_ASHTONGUE_BROKEN, 40.0f);
@@ -391,7 +391,7 @@ struct npc_creature_generator_akama : public ScriptedAI
void SummonedCreatureDies(Creature* summon, Unit*) override
{
spawnCounter--;
- summon->DespawnOrUnsummon(10000);
+ summon->DespawnOrUnsummon(10s);
summons.Despawn(summon);
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp
index 8ec98b72fb..319e588f72 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp
@@ -139,7 +139,7 @@ struct boss_fathomlord_karathress : public BossAI
if (Creature* olum = instance->GetCreature(DATA_SEER_OLUM))
{
olum->SetWalk(true);
- olum->GetMotionMaster()->MovePoint(0, olumWalk, false);
+ olum->GetMotionMaster()->MovePoint(0, olumWalk, FORCED_MOVEMENT_NONE, 0.f, false);
olum->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
olum->SetNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
}
@@ -269,7 +269,7 @@ struct boss_fathomguard_sharkkis : public ScriptedAI
{
me->CastSpell(karathress, SPELL_POWER_OF_SHARKKIS, true);
karathress->AI()->Talk(SAY_GAIN_ABILITY2);
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
}
@@ -452,7 +452,7 @@ struct boss_fathomguard_tidalvess : public ScriptedAI
{
me->CastSpell(karathress, SPELL_POWER_OF_TIDALVESS, true);
karathress->AI()->Talk(SAY_GAIN_ABILITY1);
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
}
@@ -546,7 +546,7 @@ struct boss_fathomguard_caribdis : public ScriptedAI
{
me->CastSpell(karathress, SPELL_POWER_OF_CARIBDIS, true);
karathress->AI()->Talk(SAY_GAIN_ABILITY3);
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
}
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/SerpentShrine/boss_lady_vashj.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
index d631825a7f..da30b3d031 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
@@ -93,7 +93,7 @@ struct boss_lady_vashj : public BossAI
scheduler.CancelAll();
me->CastStop();
me->SetReactState(REACT_PASSIVE);
- me->GetMotionMaster()->MovePoint(POINT_HOME, me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY(), me->GetHomePosition().GetPositionZ(), true, true);
+ me->GetMotionMaster()->MovePoint(POINT_HOME, me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY(), me->GetHomePosition().GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, true, true);
});
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
index 08bdae70af..9d25ba77d1 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
@@ -88,7 +88,7 @@ struct boss_the_lurker_below : public BossAI
pool->SetRespawnTime(10);
pool->SaveRespawnTime(10);
}
- me->DespawnOrUnsummon(2000);
+ me->DespawnOrUnsummon(2s);
}
void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*type*/, SpellSchoolMask /*school*/) override
@@ -129,7 +129,7 @@ struct boss_the_lurker_below : public BossAI
{
BossAI::JustEngagedWith(who);
- SchedulerPhaseOne(38800ms, 91000ms);
+ SchedulerPhaseOne(38800ms, 91s);
}
void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) override
@@ -191,7 +191,7 @@ struct boss_the_lurker_below : public BossAI
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
scheduler.CancelAll();
- SchedulerPhaseOne(10000ms, 90750ms);
+ SchedulerPhaseOne(10s, 90750ms);
});
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp
index 1551d7c818..15b91e685e 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp
@@ -234,7 +234,7 @@ class spell_serpentshrine_cavern_serpentshrine_parasite_trigger : public SpellSc
{
PreventHitDefaultEffect(effIndex);
if (Creature* target = GetHitCreature())
- target->DespawnOrUnsummon(1);
+ target->DespawnOrUnsummon(1ms);
}
void Register() override
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp
index 95bba3d499..9f837911cd 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp
@@ -188,7 +188,7 @@ struct boss_ahune : public BossAI
{
BossAI::JustEngagedWith(who);
events.ScheduleEvent(EVENT_INITIAL_EMERGE, 4ms);
- events.ScheduleEvent(EVENT_SYNCH_HEALTH, 3000);
+ events.ScheduleEvent(EVENT_SYNCH_HEALTH, 3s);
}
void EnterEvadeMode(EvadeReason /*why*/) override
@@ -318,7 +318,7 @@ struct npc_frozen_core : public ScriptedAI
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetImmuneToPC(false);
me->RemoveAurasDueToSpell(SPELL_ICE_SPEAR_CONTROL_AURA);
- _events.ScheduleEvent(EVENT_SYNCH_HEALTH, 3000, 0, PHASE_TWO);
+ _events.ScheduleEvent(EVENT_SYNCH_HEALTH, 3s, 0, PHASE_TWO);
}
else if (action == ACTION_AHUNE_RESURFACE)
{
@@ -342,7 +342,7 @@ struct npc_frozen_core : public ScriptedAI
DoCast(ahune, SPELL_SYNCH_HEALTH, true);
else
DoCastSelf(SPELL_SUICIDE);
- _events.Repeat(3000ms, 3000ms);
+ _events.Repeat(3s, 3s);
break;
default:
break;
@@ -394,11 +394,11 @@ struct npc_ahune_bunny : public ScriptedAI
_submerged = false;
_events.Reset();
_events.SetPhase(PHASE_ONE);
- _events.ScheduleEvent(EVENT_SUMMON_AHUNE, 10000);
- _events.ScheduleEvent(EVENT_START_LOOKING_FOR_OPENING, 14000, 0, PHASE_ONE);
- _events.ScheduleEvent(EVENT_SUMMON_COLDWEAVE, 22000, 0, PHASE_ONE);
- _events.ScheduleEvent(EVENT_SUMMON_HAILSTONE, 14000, 0, PHASE_ONE);
- _events.ScheduleEvent(EVENT_AHUNE_PHASE_TWO, 108000, 0, PHASE_ONE);
+ _events.ScheduleEvent(EVENT_SUMMON_AHUNE, 10s);
+ _events.ScheduleEvent(EVENT_START_LOOKING_FOR_OPENING, 14s, 0, PHASE_ONE);
+ _events.ScheduleEvent(EVENT_SUMMON_COLDWEAVE, 22s, 0, PHASE_ONE);
+ _events.ScheduleEvent(EVENT_SUMMON_HAILSTONE, 14s, 0, PHASE_ONE);
+ _events.ScheduleEvent(EVENT_AHUNE_PHASE_TWO, 108s, 0, PHASE_ONE);
}
else if (action == ACTION_STOP_EVENT)
{
@@ -430,9 +430,9 @@ struct npc_ahune_bunny : public ScriptedAI
case EVENT_SUMMON_COLDWEAVE:
DoCast(SPELL_SUMMON_COLDWEAVE);
DoCast(SPELL_SUMMON_COLDWEAVE);
- _events.Repeat(8000ms);
+ _events.Repeat(8s);
if (_submerged)
- _events.ScheduleEvent(EVENT_SUMMON_FROSTWIND, 4000, 0, PHASE_ONE);
+ _events.ScheduleEvent(EVENT_SUMMON_FROSTWIND, 4s, 0, PHASE_ONE);
break;
case EVENT_SUMMON_FROSTWIND:
DoCast(SPELL_SUMMON_FROSTWIND);
@@ -458,17 +458,17 @@ struct npc_ahune_bunny : public ScriptedAI
ahune->AI()->DoAction(ACTION_AHUNE_RETREAT);
_events.Reset();
_events.SetPhase(PHASE_TWO);
- _events.ScheduleEvent(EVENT_CLOSE_OPENING, 25000, 0, PHASE_TWO);
- _events.ScheduleEvent(EVENT_AHUNE_PHASE_ONE, 35000, 0, PHASE_TWO);
+ _events.ScheduleEvent(EVENT_CLOSE_OPENING, 25s, 0, PHASE_TWO);
+ _events.ScheduleEvent(EVENT_AHUNE_PHASE_ONE, 35s, 0, PHASE_TWO);
break;
case EVENT_AHUNE_PHASE_ONE:
_submerged = true;
_events.Reset();
_events.SetPhase(PHASE_ONE);
- _events.ScheduleEvent(EVENT_SUMMON_COLDWEAVE, 8000, 0, PHASE_ONE);
- _events.ScheduleEvent(EVENT_SUMMON_HAILSTONE, 5000, 0, PHASE_ONE);
- _events.ScheduleEvent(EVENT_START_LOOKING_FOR_OPENING, 5000, 0, PHASE_ONE);
- _events.ScheduleEvent(EVENT_AHUNE_PHASE_TWO, 100000, 0, PHASE_ONE);
+ _events.ScheduleEvent(EVENT_SUMMON_COLDWEAVE, 8s, 0, PHASE_ONE);
+ _events.ScheduleEvent(EVENT_SUMMON_HAILSTONE, 5s, 0, PHASE_ONE);
+ _events.ScheduleEvent(EVENT_START_LOOKING_FOR_OPENING, 5s, 0, PHASE_ONE);
+ _events.ScheduleEvent(EVENT_AHUNE_PHASE_TWO, 100s, 0, PHASE_ONE);
break;
default:
break;
@@ -534,7 +534,7 @@ struct npc_earthen_ring_flamecaller : public ScriptedAI
switch (spellInfo->Id)
{
case SPELL_SHAMANS_LOOK_FOR_OPENING:
- _events.ScheduleEvent(EVENT_LOOKFOROPENING_0, 17000);
+ _events.ScheduleEvent(EVENT_LOOKFOROPENING_0, 17s);
break;
case SPELL_FOUND_OPENING:
Talk(EMOTE_RETREAT);
@@ -560,15 +560,15 @@ struct npc_earthen_ring_flamecaller : public ScriptedAI
{
case EVENT_LOOKFOROPENING_0:
LookOpening(true, 0);
- _events.ScheduleEvent(EVENT_LOOKFOROPENING_1, 26000);
+ _events.ScheduleEvent(EVENT_LOOKFOROPENING_1, 26s);
break;
case EVENT_LOOKFOROPENING_1:
LookOpening(true, 1);
- _events.ScheduleEvent(EVENT_LOOKFOROPENING_2, 25000);
+ _events.ScheduleEvent(EVENT_LOOKFOROPENING_2, 25s);
break;
case EVENT_LOOKFOROPENING_2:
LookOpening(true, 2);
- _events.ScheduleEvent(EVENT_STOP_LOOKING_FOR_OPENING, 27000);
+ _events.ScheduleEvent(EVENT_STOP_LOOKING_FOR_OPENING, 27s);
break;
case EVENT_STOP_LOOKING_FOR_OPENING:
LookOpening(false, _mySpot);
@@ -619,7 +619,7 @@ struct npc_ahune_ice_spear_bunny : public ScriptedAI
_scheduler.Schedule(2500ms, [this](TaskContext /*task*/)
{
DoCastSelf(SPELL_ICE_SPEAR_DELAY);
- me->DespawnOrUnsummon(3500);
+ me->DespawnOrUnsummon(3500ms);
});
}
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/CoilfangReservoir/underbog/boss_hungarfen.cpp b/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_hungarfen.cpp
index 73beb4eb0b..a8b98b64c0 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_hungarfen.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_hungarfen.cpp
@@ -123,7 +123,7 @@ struct npc_underbog_mushroom : public ScriptedAI
context.Schedule(4s, [this](TaskContext /*context*/)
{
me->RemoveAurasDueToSpell(SPELL_GROW);
- me->DespawnOrUnsummon(2000);
+ me->DespawnOrUnsummon(2s);
});
}
else
diff --git a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
index dfbdf0d915..355f2abad4 100644
--- a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
+++ b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
@@ -68,7 +68,7 @@ struct boss_gruul : public BossAI
{
_Reset();
_recentlySpoken = false;
- _caveInTimer = 29000ms;
+ _caveInTimer = 29s;
}
void JustEngagedWith(Unit* /*who*/) override
@@ -84,7 +84,7 @@ struct boss_gruul : public BossAI
}).Schedule(_caveInTimer, [this](TaskContext context)
{
DoCastRandomTarget(SPELL_CAVE_IN);
- if (_caveInTimer > 4000ms)
+ if (_caveInTimer > 4s)
{
_caveInTimer = _caveInTimer - 1500ms;
}
diff --git a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp
index c6624521f4..c7397da3e2 100644
--- a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp
+++ b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp
@@ -146,7 +146,7 @@ struct boss_high_king_maulgar : public BossAI
{
DoCastVictim(SPELL_MIGHTY_BLOW);
context.Repeat(16200ms, 19s);
- }).Schedule(67000ms, [this](TaskContext context)
+ }).Schedule(67s, [this](TaskContext context)
{
scheduler.DelayAll(15s);
DoCastSelf(SPELL_WHIRLWIND);
diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp
index 26a0c780b7..864d18a9a1 100644
--- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp
@@ -102,7 +102,7 @@ struct boss_vazruden_the_herald : public BossAI
if (summon->GetEntry() == NPC_HELLFIRE_SENTRY && summons.size() == 0)
{
Talk(SAY_INTRO);
- me->GetMotionMaster()->MovePoint(POINT_MIDDLE, -1406.5f, 1746.5f, 85.0f, false);
+ me->GetMotionMaster()->MovePoint(POINT_MIDDLE, -1406.5f, 1746.5f, 85.0f, FORCED_MOVEMENT_NONE, 0.f, false);
_JustEngagedWith();
}
else if (summons.size() == 0)
@@ -155,7 +155,7 @@ struct boss_nazan : public ScriptedAI
void EnterEvadeMode(EvadeReason /*why*/) override
{
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
void JustEngagedWith(Unit*) override
@@ -163,7 +163,7 @@ struct boss_nazan : public ScriptedAI
_scheduler.CancelAll();
_scheduler.Schedule(5ms, GROUP_PHASE_1, [this](TaskContext context)
{
- me->GetMotionMaster()->MovePoint(POINT_FLIGHT, NazanPos[urand(0, 2)], false);
+ me->GetMotionMaster()->MovePoint(POINT_FLIGHT, NazanPos[urand(0, 2)], FORCED_MOVEMENT_NONE, 0.f, false);
_scheduler.DelayAll(7s);
context.Repeat(30s);
}).Schedule(5s, GROUP_PHASE_1, [this](TaskContext context)
@@ -193,7 +193,7 @@ struct boss_nazan : public ScriptedAI
Talk(EMOTE_NAZAN);
me->SetReactState(REACT_PASSIVE);
me->InterruptNonMeleeSpells(true);
- me->GetMotionMaster()->MovePoint(POINT_MIDDLE, -1406.5f, 1746.5f, 81.2f, false);
+ me->GetMotionMaster()->MovePoint(POINT_MIDDLE, -1406.5f, 1746.5f, 81.2f, FORCED_MOVEMENT_NONE, 0.f, false);
}
}
@@ -262,7 +262,7 @@ struct boss_vazruden : public ScriptedAI
void EnterEvadeMode(EvadeReason /*why*/) override
{
Talk(SAY_WIPE);
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
void JustEngagedWith(Unit*) override
diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
index e37234663f..df645e4ecd 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
@@ -284,7 +284,7 @@ struct npc_target_trigger : public ScriptedAI
_scheduler.Schedule(5s, [this](TaskContext /*context*/)
{
DoCastSelf(SPELL_DEBRIS_DAMAGE);
- me->DespawnOrUnsummon(6000);
+ me->DespawnOrUnsummon(6s);
});
}
}
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 dab0d05907..327664c2bd 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
@@ -140,7 +140,7 @@ struct boss_alar : public BossAI
_noQuillTimes = 0;
_platformRoll = RAND(0, 1);
_platform = _platformRoll ? 0 : 3;
- me->GetMotionMaster()->MovePoint(POINT_QUILL, alarPoints[POINT_QUILL], false, true);
+ me->GetMotionMaster()->MovePoint(POINT_QUILL, alarPoints[POINT_QUILL], FORCED_MOVEMENT_NONE, 0.f, false, true);
_platformMoveRepeatTimer = 16s;
}
else
@@ -150,7 +150,7 @@ struct boss_alar : public BossAI
me->SetOrientation(alarPoints[_platform].GetOrientation());
SpawnPhoenixes(1, me);
}
- me->GetMotionMaster()->MovePoint(POINT_PLATFORM, alarPoints[_platform], false, true);
+ me->GetMotionMaster()->MovePoint(POINT_PLATFORM, alarPoints[_platform], FORCED_MOVEMENT_NONE, 0.f, false, true);
_platform = (_platform+1)%4;
_platformMoveRepeatTimer = 30s;
}
@@ -258,7 +258,7 @@ struct boss_alar : public BossAI
}, 30s);
ScheduleTimedEvent(34s, [&]
{
- me->GetMotionMaster()->MovePoint(POINT_DIVE, alarPoints[POINT_DIVE], false, true);
+ me->GetMotionMaster()->MovePoint(POINT_DIVE, alarPoints[POINT_DIVE], FORCED_MOVEMENT_NONE, 0.f, false, true);
scheduler.DelayAll(15s);
}, 57s);
@@ -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
@@ -452,10 +442,10 @@ class spell_alar_flame_quills : public AuraScript
// 24 spells in total
for (uint8 i = 0; i < 21; ++i)
- GetUnitOwner()->m_Events.AddEvent(new CastQuill(GetUnitOwner(), SPELL_QUILL_MISSILE_1 + i), GetUnitOwner()->m_Events.CalculateTime(i * 40));
- GetUnitOwner()->m_Events.AddEvent(new CastQuill(GetUnitOwner(), SPELL_QUILL_MISSILE_2 + 0), GetUnitOwner()->m_Events.CalculateTime(22 * 40));
- GetUnitOwner()->m_Events.AddEvent(new CastQuill(GetUnitOwner(), SPELL_QUILL_MISSILE_2 + 1), GetUnitOwner()->m_Events.CalculateTime(23 * 40));
- GetUnitOwner()->m_Events.AddEvent(new CastQuill(GetUnitOwner(), SPELL_QUILL_MISSILE_2 + 2), GetUnitOwner()->m_Events.CalculateTime(24 * 40));
+ GetUnitOwner()->m_Events.AddEventAtOffset(new CastQuill(GetUnitOwner(), SPELL_QUILL_MISSILE_1 + i), Milliseconds(i * 40));
+ GetUnitOwner()->m_Events.AddEventAtOffset(new CastQuill(GetUnitOwner(), SPELL_QUILL_MISSILE_2 + 0), Milliseconds(22 * 40));
+ GetUnitOwner()->m_Events.AddEventAtOffset(new CastQuill(GetUnitOwner(), SPELL_QUILL_MISSILE_2 + 1), Milliseconds(23 * 40));
+ GetUnitOwner()->m_Events.AddEventAtOffset(new CastQuill(GetUnitOwner(), SPELL_QUILL_MISSILE_2 + 2), Milliseconds(24 * 40));
}
void Register() override
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
index 117712e48f..0280250238 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
@@ -269,7 +269,7 @@ struct boss_kaelthas : public BossAI
void AttackStart(Unit* who) override
{
- if (_phase == PHASE_FINAL /* check is scheduled&& events.GetNextEventTime(EVENT_GRAVITY_LAPSE_END) == 0*/)
+ if (_phase == PHASE_FINAL /* check is scheduled&& !events.HasTimeUntilEvent(EVENT_GRAVITY_LAPSE_END)*/)
BossAI::AttackStart(who);
}
@@ -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)
{
@@ -364,11 +364,11 @@ struct boss_kaelthas : public BossAI
{
DoCastVictim(SPELL_FIREBALL);
}, 2400ms, 7500ms);
- ScheduleTimedEvent(10000ms, [&]
+ ScheduleTimedEvent(10s, [&]
{
DoCastRandomTarget(SPELL_FLAME_STRIKE, 0, 100.0f);
}, 30250ms, 50650ms);
- ScheduleTimedEvent(50000ms, [&]
+ ScheduleTimedEvent(50s, [&]
{
Talk(SAY_SUMMON_PHOENIX);
DoCastSelf(SPELL_PHOENIX);
@@ -429,7 +429,7 @@ struct boss_kaelthas : public BossAI
DoCastSelf(SPELL_KAEL_EXPLODES1, true);
DoCastSelf(SPELL_KAEL_GAINING_POWER);
}, EVENT_SCENE_2);
- ScheduleUniqueTimedEvent(4000ms, [&]
+ ScheduleUniqueTimedEvent(4s, [&]
{
me->SetTarget();
for (uint8 i = 0; i < 2; ++i)
@@ -440,7 +440,7 @@ struct boss_kaelthas : public BossAI
me->GetMotionMaster()->MoveTakeoff(POINT_AIR, me->GetPositionX(), me->GetPositionY(), 75.0f, 2.99, true); // AnimType Movement::ToFly does not exist for Kael
DoCastSelf(SPELL_GROW, true);
}, EVENT_SCENE_3);
- ScheduleUniqueTimedEvent(7000ms, [&]
+ ScheduleUniqueTimedEvent(7s, [&]
{
me->SetTarget();
DoCastSelf(SPELL_GROW, true);
@@ -450,7 +450,7 @@ struct boss_kaelthas : public BossAI
if (Creature* trigger = me->SummonCreature(WORLD_TRIGGER, triggersPos[i + 2], TEMPSUMMON_TIMED_DESPAWN, 60000))
trigger->CastSpell(me, SPELL_NETHERBEAM1 + i, false);
}, EVENT_SCENE_4);
- ScheduleUniqueTimedEvent(10000ms, [&]
+ ScheduleUniqueTimedEvent(10s, [&]
{
me->SetTarget();
DoCastSelf(SPELL_GROW, true);
@@ -460,7 +460,7 @@ struct boss_kaelthas : public BossAI
if (Creature* trigger = me->SummonCreature(WORLD_TRIGGER, triggersPos[i + 4], TEMPSUMMON_TIMED_DESPAWN, 60000))
trigger->CastSpell(me, SPELL_NETHERBEAM1 + i, false);
}, EVENT_SCENE_5);
- ScheduleUniqueTimedEvent(14000ms, [&]
+ ScheduleUniqueTimedEvent(14s, [&]
{
DoCastSelf(SPELL_GROW, true);
DoCastSelf(SPELL_KAEL_EXPLODES4, true);
@@ -470,7 +470,7 @@ struct boss_kaelthas : public BossAI
{
SetRoomState(GO_STATE_ACTIVE);
}, EVENT_SCENE_7);
- ScheduleUniqueTimedEvent(19000ms, [&]
+ ScheduleUniqueTimedEvent(19s, [&]
{
summons.DespawnEntry(WORLD_TRIGGER);
me->RemoveAurasDueToSpell(SPELL_NETHERBEAM_AURA1);
@@ -478,7 +478,7 @@ struct boss_kaelthas : public BossAI
me->RemoveAurasDueToSpell(SPELL_NETHERBEAM_AURA3);
DoCastSelf(SPELL_KAEL_EXPLODES5, true);
}, EVENT_SCENE_8);
- ScheduleUniqueTimedEvent(22000ms, [&]
+ ScheduleUniqueTimedEvent(22s, [&]
{
DoCastSelf(SPELL_DARK_BANISH_STATE, true);
DoCastSelf(SPELL_ARCANE_EXPLOSION_VISUAL, true);
@@ -528,14 +528,14 @@ struct boss_kaelthas : public BossAI
me->CastStop();
DoCastSelf(SPELL_KAEL_FULL_POWER);
}, EVENT_SCENE_16);
- ScheduleUniqueTimedEvent(32000ms, [&]
+ ScheduleUniqueTimedEvent(32s, [&]
{
DoCastSelf(SPELL_KAEL_PHASE_TWO, true);
DoCastSelf(SPELL_PURE_NETHER_BEAM4, true);
DoCastSelf(SPELL_PURE_NETHER_BEAM5, true);
DoCastSelf(SPELL_PURE_NETHER_BEAM6, true);
}, EVENT_SCENE_17);
- ScheduleUniqueTimedEvent(36000ms, [&]
+ ScheduleUniqueTimedEvent(36s, [&]
{
summons.DespawnEntry(WORLD_TRIGGER);
me->CastStop();
@@ -559,7 +559,7 @@ struct boss_kaelthas : public BossAI
switch (kaelAction)
{
case ACTION_START_THALADRED:
- attackStartTimer = 7000ms;
+ attackStartTimer = 7s;
advisorNPCId = NPC_THALADRED;
break;
case ACTION_START_SANGUINAR:
@@ -567,7 +567,7 @@ struct boss_kaelthas : public BossAI
advisorNPCId = NPC_LORD_SANGUINAR;
break;
case ACTION_START_CAPERNIAN:
- attackStartTimer = 9000ms;
+ attackStartTimer = 9s;
advisorNPCId = NPC_CAPERNIAN;
break;
case ACTION_START_TELONICUS:
@@ -655,18 +655,18 @@ struct boss_kaelthas : public BossAI
me->AttackStop();
me->CastStop();
me->SetReactState(REACT_PASSIVE);
- me->GetMotionMaster()->MovePoint(POINT_MIDDLE, me->GetHomePosition(), true, true);
+ me->GetMotionMaster()->MovePoint(POINT_MIDDLE, me->GetHomePosition(), FORCED_MOVEMENT_NONE, 0.f, true, true);
}
});
- ScheduleTimedEvent(1000ms, [&]
+ ScheduleTimedEvent(1s, [&]
{
DoCastVictim(SPELL_FIREBALL);
}, 2400ms, 7500ms);
- ScheduleTimedEvent(15000ms, [&]
+ ScheduleTimedEvent(15s, [&]
{
DoCastRandomTarget(SPELL_FLAME_STRIKE, 0, 100.0f);
}, 30250ms, 50650ms);
- ScheduleTimedEvent(50000ms, [&]
+ ScheduleTimedEvent(50s, [&]
{
Talk(SAY_SUMMON_PHOENIX);
DoCastSelf(SPELL_PHOENIX);
@@ -855,7 +855,7 @@ struct npc_capernian : public advisor_baseAI
DoCastVictim(SPELL_CAPERNIAN_FIREBALL);
}
}, 2500ms);
- ScheduleTimedEvent(7000ms, 10000ms, [&]{
+ ScheduleTimedEvent(7s, 10s, [&]{
DoCastRandomTarget(SPELL_CONFLAGRATION, 0, 30.0f);
}, 18500ms, 20500ms);
ScheduleTimedEvent(3s, [&]{
@@ -893,16 +893,16 @@ struct npc_thaladred : public advisor_baseAI
me->AddThreat(target, 10000000.0f);
Talk(EMOTE_THALADRED_FIXATE, target);
}
- }, 10000ms);
- ScheduleTimedEvent(4000ms, 19350ms, [&]
+ }, 10s);
+ ScheduleTimedEvent(4s, 19350ms, [&]
{
DoCastVictim(SPELL_PSYCHIC_BLOW);
}, 15700ms, 48900ms);
- ScheduleTimedEvent(3000ms, 6050ms, [&]
+ ScheduleTimedEvent(3s, 6050ms, [&]
{
DoCastVictim(SPELL_REND);
}, 15700ms, 48900ms);
- ScheduleTimedEvent(3000ms, 6050ms, [&]
+ ScheduleTimedEvent(3s, 6050ms, [&]
{
if (Unit* victim = me->GetVictim())
{
@@ -1013,7 +1013,7 @@ class spell_kaelthas_flame_strike : public AuraScript
{
GetUnitOwner()->RemoveAllAuras();
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_FLAME_STRIKE_DAMAGE, true);
- GetUnitOwner()->ToCreature()->DespawnOrUnsummon(2000);
+ GetUnitOwner()->ToCreature()->DespawnOrUnsummon(2s);
}
void Register() override
@@ -1032,7 +1032,7 @@ public:
bool Execute(uint64 /*execTime*/, uint32 /*diff*/) override
{
if (_owner->IsBeingTeleportedNear())
- _owner->m_Events.AddEvent(new lapseTeleport(_owner), _owner->m_Events.CalculateTime(1));
+ _owner->m_Events.AddEventAtOffset(new lapseTeleport(_owner), 1ms);
else if (!_owner->IsBeingTeleported())
{
_owner->CastSpell(_owner, SPELL_GRAVITY_LAPSE_KNOCKBACK, true);
@@ -1062,7 +1062,7 @@ class spell_kaelthas_gravity_lapse : public SpellScript
if (Player* target = GetHitPlayer())
{
GetCaster()->CastSpell(target, _currentSpellId++, true);
- target->m_Events.AddEvent(new lapseTeleport(target), target->m_Events.CalculateTime(1));
+ target->m_Events.AddEventAtOffset(new lapseTeleport(target), 1ms);
}
}
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
index 1aa95aa7d3..8c992b8808 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
@@ -97,8 +97,8 @@ public:
me->SetReactState(REACT_PASSIVE);
me->SetImmuneToAll(true);
events2.Reset();
- events2.ScheduleEvent(EVENT_TELEPORT_VISUAL, 0);
- events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO1, 3000);
+ events2.ScheduleEvent(EVENT_TELEPORT_VISUAL, 0ms);
+ events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO1, 3s);
}
void Reset() override
@@ -125,9 +125,9 @@ public:
void JustEngagedWith(Unit*) override
{
- events.ScheduleEvent(EVENT_MILL_CHECK_HEALTH, 1000);
- events.ScheduleEvent(EVENT_MILL_PYROBLAST, 30000);
- events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 2000);
+ events.ScheduleEvent(EVENT_MILL_CHECK_HEALTH, 1s);
+ events.ScheduleEvent(EVENT_MILL_PYROBLAST, 30s);
+ events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 2s);
}
void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*type*/, SpellSchoolMask /*school*/) override
@@ -150,52 +150,52 @@ public:
break;
case EVENT_MILLHOUSE_INTRO1:
Talk(SAY_INTRO_1);
- events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO2, 18000);
+ events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO2, 18s);
break;
case EVENT_MILLHOUSE_INTRO2:
Talk(SAY_INTRO_2);
- events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO3, 8000);
+ events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO3, 8s);
break;
case EVENT_MILLHOUSE_INTRO3:
Talk(SAY_INTRO_3);
- events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO4, 6000);
+ events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO4, 6s);
break;
case EVENT_MILLHOUSE_INTRO4:
Talk(SAY_INTRO_4);
- events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO5, 8000);
+ events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO5, 8s);
break;
case EVENT_MILLHOUSE_INTRO5:
Talk(SAY_WATER);
me->CastSpell(me, SPELL_CONJURE_WATER, false);
- events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO6, 7000);
+ events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO6, 7s);
break;
case EVENT_MILLHOUSE_INTRO6:
Talk(SAY_BUFFS);
me->CastSpell(me, SPELL_ICE_ARMOR, false);
- events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO7, 7000);
+ events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO7, 7s);
break;
case EVENT_MILLHOUSE_INTRO7:
Talk(SAY_DRINK);
me->CastSpell(me, SPELL_ARCANE_INTELLECT, false);
- events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO8, 7000);
+ events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO8, 7s);
break;
case EVENT_MILLHOUSE_INTRO8:
Talk(SAY_READY);
me->GetMotionMaster()->MovePoint(1, 445.82f, -158.38f, 43.067f);
- events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO9, 5000);
+ events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO9, 5s);
break;
case EVENT_MILLHOUSE_INTRO9:
me->SetFacingTo(M_PI * 1.5f);
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), M_PI * 1.5f);
me->SetImmuneToAll(false);
me->SetReactState(REACT_AGGRESSIVE);
- events2.ScheduleEvent(EVENT_SEARCH_FIGHT, 1000);
+ events2.ScheduleEvent(EVENT_SEARCH_FIGHT, 1s);
break;
case EVENT_SEARCH_FIGHT:
if (!me->IsInCombat() && !me->IsInEvadeMode())
if (Unit* target = me->SelectNearbyTarget(nullptr, 30.0f))
AttackStart(target);
- events2.ScheduleEvent(EVENT_SEARCH_FIGHT, 1000);
+ events2.ScheduleEvent(EVENT_SEARCH_FIGHT, 1s);
break;
}
@@ -214,27 +214,27 @@ public:
Talk(SAY_LOWHP);
break;
}
- events.ScheduleEvent(EVENT_MILL_CHECK_HEALTH, 1000);
+ events.ScheduleEvent(EVENT_MILL_CHECK_HEALTH, 1s);
break;
case EVENT_MILL_PYROBLAST:
Talk(SAY_PYRO);
me->CastSpell(me->GetVictim(), SPELL_PYROBLAST, false);
- events.ScheduleEvent(EVENT_MILL_PYROBLAST, 30000);
+ events.ScheduleEvent(EVENT_MILL_PYROBLAST, 30s);
break;
case EVENT_MILL_BASE_SPELL:
switch (RAND(SPELL_FIREBALL, SPELL_ARCANE_MISSILES, SPELL_FROSTBOLT))
{
case SPELL_FIREBALL:
me->CastSpell(me->GetVictim(), SPELL_FIREBALL, false);
- events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 4000);
+ events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 4s);
break;
case SPELL_ARCANE_MISSILES:
me->CastSpell(me->GetVictim(), SPELL_ARCANE_MISSILES, false);
- events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 9000);
+ events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 9s);
break;
case SPELL_FROSTBOLT:
me->CastSpell(me->GetVictim(), SPELL_FROSTBOLT, false);
- events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 4000);
+ events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 4s);
break;
default:
break;
@@ -390,8 +390,8 @@ public:
me->setActive(true);
me->InterruptNonMeleeSpells(false);
me->SetImmuneToAll(true);
- events.ScheduleEvent(EVENT_WARDEN_INTRO1, 1500);
- events.ScheduleEvent(EVENT_WARDEN_CHECK_PLAYERS, 1000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO1, 1500ms);
+ events.ScheduleEvent(EVENT_WARDEN_CHECK_PLAYERS, 1s);
instance->SetBossState(DATA_WARDEN_MELLICHAR, IN_PROGRESS);
}
damage = 0;
@@ -410,13 +410,13 @@ public:
switch (type)
{
case DATA_WARDEN_1:
- events.ScheduleEvent(EVENT_WARDEN_INTRO8, 2000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO8, 2s);
break;
case DATA_WARDEN_3:
- events.ScheduleEvent(EVENT_WARDEN_INTRO19, 2000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO19, 2s);
break;
case DATA_WARDEN_4:
- events.ScheduleEvent(EVENT_WARDEN_INTRO24, 2000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO24, 2s);
break;
}
}
@@ -432,35 +432,35 @@ public:
CreatureAI::EnterEvadeMode();
return;
}
- events.ScheduleEvent(EVENT_WARDEN_CHECK_PLAYERS, 1000);
+ events.ScheduleEvent(EVENT_WARDEN_CHECK_PLAYERS, 1s);
break;
case EVENT_WARDEN_INTRO1:
Talk(YELL_INTRO1);
me->SetFacingTo(M_PI / 2.0f);
me->CastSpell(me, SPELL_BUBBLE_VISUAL, false);
- events.ScheduleEvent(EVENT_WARDEN_INTRO2, 1400);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO2, 1400ms);
break;
case EVENT_WARDEN_INTRO2:
instance->HandleGameObject(instance->GetGuidData(DATA_WARDENS_SHIELD), false);
- events.ScheduleEvent(EVENT_WARDEN_INTRO3, 20000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO3, 20s);
break;
case EVENT_WARDEN_INTRO3:
Talk(YELL_INTRO2);
- events.ScheduleEvent(EVENT_WARDEN_INTRO4, 5000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO4, 5s);
break;
case EVENT_WARDEN_INTRO4:
me->SetFacingTo(0.5f);
me->CastSpell((Unit*)nullptr, SPELL_TARGET_ALPHA, false);
- events.ScheduleEvent(EVENT_WARDEN_INTRO5, 2000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO5, 2s);
break;
case EVENT_WARDEN_INTRO5:
instance->SetData(DATA_WARDEN_1, IN_PROGRESS);
- events.ScheduleEvent(EVENT_WARDEN_INTRO6, 3000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO6, 3s);
break;
case EVENT_WARDEN_INTRO6:
me->SetFacingTo(M_PI * 1.5f);
me->CastSpell((Unit*)nullptr, SPELL_TARGET_OMEGA, false);
- events.ScheduleEvent(EVENT_WARDEN_INTRO7, 5000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO7, 5s);
break;
case EVENT_WARDEN_INTRO7:
me->SummonCreature(RAND(NPC_TRICKSTER, NPC_PH_HUNTER), 478.326f, -148.505f, 42.56f, 3.19f, TEMPSUMMON_MANUAL_DESPAWN);
@@ -470,44 +470,44 @@ public:
Talk(YELL_RELEASE1);
me->InterruptNonMeleeSpells(false);
me->SetFacingTo(2.6f);
- events.ScheduleEvent(EVENT_WARDEN_INTRO10, 4000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO10, 4s);
break;
case EVENT_WARDEN_INTRO10:
me->CastSpell((Unit*)nullptr, SPELL_TARGET_BETA, false);
- events.ScheduleEvent(EVENT_WARDEN_INTRO11, 2000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO11, 2s);
break;
case EVENT_WARDEN_INTRO11:
Talk(YELL_RELEASE2A);
instance->SetData(DATA_WARDEN_2, IN_PROGRESS);
- events.ScheduleEvent(EVENT_WARDEN_INTRO12, 2000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO12, 2s);
break;
case EVENT_WARDEN_INTRO12:
me->SetFacingTo(M_PI * 1.5f);
me->CastSpell((Unit*)nullptr, SPELL_TARGET_OMEGA, false);
- events.ScheduleEvent(EVENT_WARDEN_INTRO13, 6000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO13, 6s);
break;
case EVENT_WARDEN_INTRO13:
me->SummonCreature(NPC_MILLHOUSE, 413.292f, -148.378f, 42.56f, 6.27f, TEMPSUMMON_MANUAL_DESPAWN);
- events.ScheduleEvent(EVENT_WARDEN_INTRO14, 14000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO14, 14s);
break;
case EVENT_WARDEN_INTRO14:
Talk(YELL_RELEASE2B);
me->InterruptNonMeleeSpells(false);
me->SetFacingTo(3.3f);
- events.ScheduleEvent(EVENT_WARDEN_INTRO15, 5000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO15, 5s);
break;
case EVENT_WARDEN_INTRO15:
me->CastSpell((Unit*)nullptr, SPELL_TARGET_DELTA, false);
- events.ScheduleEvent(EVENT_WARDEN_INTRO16, 2000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO16, 2s);
break;
case EVENT_WARDEN_INTRO16:
instance->SetData(DATA_WARDEN_3, IN_PROGRESS);
- events.ScheduleEvent(EVENT_WARDEN_INTRO17, 2000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO17, 2s);
break;
case EVENT_WARDEN_INTRO17:
me->SetFacingTo(M_PI * 1.5f);
me->CastSpell((Unit*)nullptr, SPELL_TARGET_OMEGA, false);
- events.ScheduleEvent(EVENT_WARDEN_INTRO18, 6000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO18, 6s);
break;
case EVENT_WARDEN_INTRO18:
me->SummonCreature(RAND(NPC_AKKIRIS, NPC_SULFURON), 420.179f, -174.396f, 42.58f, 0.02f, TEMPSUMMON_MANUAL_DESPAWN);
@@ -517,20 +517,20 @@ public:
Talk(YELL_RELEASE3);
me->InterruptNonMeleeSpells(false);
me->SetFacingTo(6.05f);
- events.ScheduleEvent(EVENT_WARDEN_INTRO20, 4000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO20, 4s);
break;
case EVENT_WARDEN_INTRO20:
me->CastSpell((Unit*)nullptr, SPELL_TARGET_GAMMA, false);
- events.ScheduleEvent(EVENT_WARDEN_INTRO21, 2000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO21, 2s);
break;
case EVENT_WARDEN_INTRO21:
instance->SetData(DATA_WARDEN_4, IN_PROGRESS);
- events.ScheduleEvent(EVENT_WARDEN_INTRO22, 2000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO22, 2s);
break;
case EVENT_WARDEN_INTRO22:
me->SetFacingTo(M_PI * 1.5f);
me->CastSpell((Unit*)nullptr, SPELL_TARGET_OMEGA, false);
- events.ScheduleEvent(EVENT_WARDEN_INTRO23, 6000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO23, 6s);
break;
case EVENT_WARDEN_INTRO23:
me->SummonCreature(RAND(NPC_TW_DRAK, NPC_BL_DRAK), 471.795f, -174.58f, 42.58f, 3.06f, TEMPSUMMON_MANUAL_DESPAWN);
@@ -540,7 +540,7 @@ public:
instance->SetData(DATA_WARDEN_5, IN_PROGRESS);
Talk(YELL_RELEASE4);
me->InterruptNonMeleeSpells(false);
- events.ScheduleEvent(EVENT_WARDEN_INTRO25, 8000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO25, 8s);
break;
case EVENT_WARDEN_INTRO25:
if (Creature* cr = me->SummonCreature(NPC_HARBINGER_SKYRISS, 445.763f, -191.639f, 44.64f, 1.60f, TEMPSUMMON_MANUAL_DESPAWN))
@@ -548,22 +548,22 @@ public:
cr->SetImmuneToAll(true);
cr->CastSpell(cr, SPELL_TELEPORT_VISUAL, true);
}
- events.ScheduleEvent(EVENT_WARDEN_INTRO26, 1000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO26, 1s);
break;
case EVENT_WARDEN_INTRO26:
if (Creature* creature = summons.GetCreatureWithEntry(NPC_HARBINGER_SKYRISS))
creature->AI()->Talk(SAY_HARBINGER_INTRO);
- events.ScheduleEvent(EVENT_WARDEN_INTRO27, 23000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO27, 23s);
break;
case EVENT_WARDEN_INTRO27:
Talk(YELL_WELCOME);
- events.ScheduleEvent(EVENT_WARDEN_INTRO28, 5000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO28, 5s);
break;
case EVENT_WARDEN_INTRO28:
instance->HandleGameObject(instance->GetGuidData(DATA_WARDENS_SHIELD), true);
if (Creature* creature = summons.GetCreatureWithEntry(NPC_HARBINGER_SKYRISS))
creature->CastSpell((Unit*)nullptr, SPELL_MIND_REND, false);
- events.ScheduleEvent(EVENT_WARDEN_INTRO29, 4000);
+ events.ScheduleEvent(EVENT_WARDEN_INTRO29, 4s);
break;
case EVENT_WARDEN_INTRO29:
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp
index 799272204e..4d5329ac0b 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp
@@ -165,7 +165,7 @@ struct boss_wrath_scryer_soccothrates : public BossAI
if (!preFight && who->IsPlayer() && me->IsWithinDistInMap(who, 70.0f))
{
Talk(SAY_SOCCOTHRATES_CONVO_1);
- events2.ScheduleEvent(EVENT_PREFIGHT_1, 2000);
+ events2.ScheduleEvent(EVENT_PREFIGHT_1, 2s);
preFight = true;
}
}
@@ -178,38 +178,38 @@ struct boss_wrath_scryer_soccothrates : public BossAI
case EVENT_PREFIGHT_1:
if (Creature* dalliah = instance->GetCreature(DATA_DALLIAH))
dalliah->AI()->Talk(SAY_DALLIAH_CONVO_1);
- events2.ScheduleEvent(EVENT_PREFIGHT_2, 3000);
+ events2.ScheduleEvent(EVENT_PREFIGHT_2, 3s);
break;
case EVENT_PREFIGHT_2:
Talk(SAY_SOCCOTHRATES_CONVO_2);
- events2.ScheduleEvent(EVENT_PREFIGHT_3, 3000);
+ events2.ScheduleEvent(EVENT_PREFIGHT_3, 3s);
break;
case EVENT_PREFIGHT_3:
if (Creature* dalliah = instance->GetCreature(DATA_DALLIAH))
dalliah->AI()->Talk(SAY_DALLIAH_CONVO_2);
- events2.ScheduleEvent(EVENT_PREFIGHT_4, 6000);
+ events2.ScheduleEvent(EVENT_PREFIGHT_4, 6s);
break;
case EVENT_PREFIGHT_4:
Talk(SAY_SOCCOTHRATES_CONVO_3);
- events2.ScheduleEvent(EVENT_PREFIGHT_5, 2000);
+ events2.ScheduleEvent(EVENT_PREFIGHT_5, 2s);
break;
case EVENT_PREFIGHT_5:
if (Creature* dalliah = instance->GetCreature(DATA_DALLIAH))
dalliah->AI()->Talk(SAY_DALLIAH_CONVO_3);
- events2.ScheduleEvent(EVENT_PREFIGHT_6, 3000);
+ events2.ScheduleEvent(EVENT_PREFIGHT_6, 3s);
break;
case EVENT_PREFIGHT_6:
Talk(SAY_SOCCOTHRATES_CONVO_4);
- events2.ScheduleEvent(EVENT_PREFIGHT_7, 2000);
+ events2.ScheduleEvent(EVENT_PREFIGHT_7, 2s);
break;
case EVENT_PREFIGHT_7:
if (Creature* dalliah = instance->GetCreature(DATA_DALLIAH))
dalliah->GetMotionMaster()->MovePoint(0, 118.6048f, 96.84852f, 22.44115f);
- events2.ScheduleEvent(EVENT_PREFIGHT_8, 4000);
+ events2.ScheduleEvent(EVENT_PREFIGHT_8, 4s);
break;
case EVENT_PREFIGHT_8:
me->GetMotionMaster()->MovePoint(0, 122.1035f, 192.7203f, 22.44115f);
- events2.ScheduleEvent(EVENT_PREFIGHT_9, 4000);
+ events2.ScheduleEvent(EVENT_PREFIGHT_9, 4s);
break;
case EVENT_PREFIGHT_9:
if (Creature* dalliah = instance->GetCreature(DATA_DALLIAH))
diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
index 16e37a698d..f9f862fd3a 100644
--- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
+++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
@@ -98,7 +98,7 @@ public:
CannonGUID = caster->GetGUID();
PartyTime = true;
- events.ScheduleEvent(EVENT_PARTY_TIMER, 3000);
+ events.ScheduleEvent(EVENT_PARTY_TIMER, 3s);
}
if (count >= 3)
@@ -116,7 +116,7 @@ public:
if (Creature* bunny = GetClosestCreatureWithEntry(me, NPC_EXPLOSION_BUNNY, 200.0f))
bunny->CastSpell(nullptr, SPELL_EXPLOSION, TRIGGERED_NONE);
if (Creature* cannon = ObjectAccessor::GetCreature(*me, CannonGUID))
- cannon->DespawnOrUnsummon(5000);
+ cannon->DespawnOrUnsummon(5s);
}
me->SummonGameObject(GO_BIG_FIRE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 60);
@@ -160,7 +160,7 @@ public:
me->SummonCreature(NPC_HOUND, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);
else
me->SummonCreature(NPC_FEL_IMP, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);
- events.ScheduleEvent(EVENT_PARTY_TIMER, 3000);
+ events.ScheduleEvent(EVENT_PARTY_TIMER, 3s);
break;
}
}
@@ -460,7 +460,7 @@ public:
Talk(SAY_SPELL_INFLUENCE, who);
/// @todo Move the below to updateAI and run if this statement == true
DoCast(who, SPELL_DISPELLING_ANALYSIS, true);
- bird->DespawnOrUnsummon(2000);
+ bird->DespawnOrUnsummon(2s);
}
}
}
@@ -577,18 +577,18 @@ public:
if (!CheckPlayer())
ResetNode();
else
- _events.ScheduleEvent(EVENT_SIMON_PERIODIC_PLAYER_CHECK, 2000);
+ _events.ScheduleEvent(EVENT_SIMON_PERIODIC_PLAYER_CHECK, 2s);
break;
case EVENT_SIMON_SETUP_PRE_GAME:
SetUpPreGame();
_events.CancelEvent(EVENT_SIMON_GAME_TICK);
- _events.ScheduleEvent(EVENT_SIMON_PLAY_SEQUENCE, 1000);
+ _events.ScheduleEvent(EVENT_SIMON_PLAY_SEQUENCE, 1s);
break;
case EVENT_SIMON_PLAY_SEQUENCE:
if (!playableSequence.empty())
{
PlayNextColor();
- _events.ScheduleEvent(EVENT_SIMON_PLAY_SEQUENCE, 1500);
+ _events.ScheduleEvent(EVENT_SIMON_PLAY_SEQUENCE, 1500ms);
}
else
{
@@ -597,16 +597,16 @@ public:
playerSequence.clear();
PrepareClusters();
gameTicks = 0;
- _events.ScheduleEvent(EVENT_SIMON_GAME_TICK, 3000);
+ _events.ScheduleEvent(EVENT_SIMON_GAME_TICK, 3s);
}
break;
case EVENT_SIMON_GAME_TICK:
DoCast(SPELL_AUDIBLE_GAME_TICK);
if (gameTicks > gameLevel)
- _events.ScheduleEvent(EVENT_SIMON_TOO_LONG_TIME, 500);
+ _events.ScheduleEvent(EVENT_SIMON_TOO_LONG_TIME, 500ms);
else
- _events.ScheduleEvent(EVENT_SIMON_GAME_TICK, 3000);
+ _events.ScheduleEvent(EVENT_SIMON_GAME_TICK, 3s);
gameTicks++;
break;
case EVENT_SIMON_RESET_CLUSTERS:
@@ -633,7 +633,7 @@ public:
if (gameLevel == 10)
ResetNode();
else
- _events.ScheduleEvent(EVENT_SIMON_SETUP_PRE_GAME, 1000);
+ _events.ScheduleEvent(EVENT_SIMON_SETUP_PRE_GAME, 1s);
break;
case ACTION_SIMON_CORRECT_FULL_SEQUENCE:
gameLevel++;
@@ -665,12 +665,12 @@ public:
PlayColor(pressedColor);
playerSequence.push_back(pressedColor);
- _events.ScheduleEvent(EVENT_SIMON_RESET_CLUSTERS, 500);
+ _events.ScheduleEvent(EVENT_SIMON_RESET_CLUSTERS, 500ms);
CheckPlayerSequence();
}
// Used for getting involved player guid. Parameter id is used for defining if is a large(Monument) or small(Relic) node
- void SetGUID(ObjectGuid guid, int32 id) override
+ void SetGUID(ObjectGuid const& guid, int32 id) override
{
me->SetCanFly(true);
@@ -752,8 +752,8 @@ public:
}
_events.Reset();
- _events.ScheduleEvent(EVENT_SIMON_ROUND_FINISHED, 1000);
- _events.ScheduleEvent(EVENT_SIMON_PERIODIC_PLAYER_CHECK, 2000);
+ _events.ScheduleEvent(EVENT_SIMON_ROUND_FINISHED, 1s);
+ _events.ScheduleEvent(EVENT_SIMON_PERIODIC_PLAYER_CHECK, 2s);
if (GameObject* relic = me->FindNearestGameObject(large ? GO_APEXIS_MONUMENT : GO_APEXIS_RELIC, searchDistance))
relic->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
@@ -775,7 +775,7 @@ public:
if (GameObject* relic = me->FindNearestGameObject(large ? GO_APEXIS_MONUMENT : GO_APEXIS_RELIC, searchDistance))
relic->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
/*
@@ -1086,7 +1086,7 @@ public:
// Spell 37392 does not exist in dbc, manually spawning
me->SummonCreature(NPC_OSCILLATING_FREQUENCY_SCANNER_TOP_BUNNY, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation(), TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 50000);
me->SummonGameObject(GO_OSCILLATING_FREQUENCY_SCANNER, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation(), 0, 0, 0, 0, 50);
- me->DespawnOrUnsummon(50000);
+ me->DespawnOrUnsummon(50s);
}
timer = 500;
diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
index 66a12acc65..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())
- Start(false, false, creature->GetOwner()->GetGUID());
+ {
+ creature->SetWalk(true);
+ Start(false, creature->GetOwner()->GetGUID());
+ }
creature->SetSpeed(MOVE_WALK, 1.5f);
DoCast(SPELL_GUIDED_BY_THE_SPIRITS);
Reset();
@@ -209,7 +212,7 @@ public:
{
ryga->SetWalk(true);
ryga->SetSpeed(MOVE_WALK, 1.0f);
- ryga->GetMotionMaster()->MovePoint(0, 515.877991f, 3885.67627f, 190.470535f, true);
+ ryga->GetMotionMaster()->MovePoint(0, 515.877991f, 3885.67627f, 190.470535f, FORCED_MOVEMENT_NONE, 0.f, true);
Reset();
}
}
@@ -234,7 +237,7 @@ public:
ryga->SetStandState(UNIT_STAND_STATE_STAND);
ryga->SetWalk(true);
ryga->SetSpeed(MOVE_WALK, 1.0f);
- ryga->GetMotionMaster()->MovePoint(0, 504.59201f, 3882.12988f, 192.156006f, true);
+ ryga->GetMotionMaster()->MovePoint(0, 504.59201f, 3882.12988f, 192.156006f, FORCED_MOVEMENT_NONE, 0.f, true);
Reset();
}
}
@@ -312,7 +315,8 @@ public:
{
me->SetReactState(REACT_AGGRESSIVE);
me->SetFaction(FACTION_ESCORTEE_H_PASSIVE);
- npc_escortAI::Start(true, false, 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 d0c6df3803..5d815569ba 100644
--- a/src/server/scripts/Outland/zone_nagrand.cpp
+++ b/src/server/scripts/Outland/zone_nagrand.cpp
@@ -65,7 +65,8 @@ public:
{
creature->SetStandState(UNIT_STAND_STATE_STAND);
creature->SetFaction(FACTION_ESCORTEE_H_NEUTRAL_ACTIVE);
- EscortAI->Start(true, false, player->GetGUID(), quest);
+ creature->SetWalk(true);
+ EscortAI->Start(true, player->GetGUID(), quest);
creature->AI()->Talk(SAY_MAG_START);
creature->SummonCreature(NPC_MURK_RAIDER, m_afAmbushA[0] + 2.5f, m_afAmbushA[1] - 2.5f, m_afAmbushA[2], 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
@@ -133,7 +134,7 @@ public:
if (Player* player = GetPlayerForEscort())
player->GroupEventHappens(QUEST_TOTEM_KARDASH_H, me);
- SetRun();
+ me->SetWalk(false);
break;
}
}
@@ -303,10 +304,11 @@ public:
uint32 HealTimer;
uint32 FrostShockTimer;
- void SetGUID(ObjectGuid guid, int32 /*questId*/) override
+ void SetGUID(ObjectGuid const& guid, int32 /*questId*/) override
{
me->SetStandState(UNIT_STAND_STATE_STAND);
- Start(true, false, guid);
+ me->SetWalk(true);
+ Start(true, guid);
Talk(SAY_KUR_START);
me->SummonCreature(NPC_KUR_MURK_RAIDER, kurenaiAmbushA[0] + 2.5f, kurenaiAmbushA[1] - 2.5f, kurenaiAmbushA[2], 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 50000);
@@ -361,7 +363,7 @@ public:
if (Player* player = GetPlayerForEscort())
player->GroupEventHappens(QUEST_TOTEM_KARDASH_A, me);
- SetRun();
+ me->SetWalk(false);
break;
}
}
@@ -464,7 +466,7 @@ public:
player->KilledMonsterCredit(NPC_MAGHAR_PRISONER);
prisoner->AI()->Talk(SAY_FREE, player);
- prisoner->DespawnOrUnsummon(6000);
+ prisoner->DespawnOrUnsummon(6s);
}
return true;
diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp
index ceb94b60e5..cc4f68aa24 100644
--- a/src/server/scripts/Outland/zone_netherstorm.cpp
+++ b/src/server/scripts/Outland/zone_netherstorm.cpp
@@ -99,11 +99,11 @@ public:
npc_escortAI::MoveInLineOfSight(who);
}
- void SetGUID(ObjectGuid playerGUID, int32 type) override
+ void SetGUID(ObjectGuid const& playerGUID, int32 type) override
{
if (type == DATA_START_ENCOUNTER)
{
- Start(true, true, playerGUID);
+ Start(true, playerGUID);
SetEscortPaused(true);
started = true;
@@ -126,7 +126,7 @@ public:
me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_ACTIVE);
Talk(SAY_SAEED_0);
- events.ScheduleEvent(EVENT_START_WALK, 3000);
+ events.ScheduleEvent(EVENT_START_WALK, 3s);
}
else if (type == DATA_START_FIGHT)
{
@@ -178,7 +178,7 @@ public:
SetEscortPaused(true);
break;
case 18:
- events.ScheduleEvent(EVENT_START_FIGHT1, 0);
+ events.ScheduleEvent(EVENT_START_FIGHT1, 0ms);
SetEscortPaused(true);
break;
case 19:
@@ -227,7 +227,7 @@ public:
break;
case EVENT_START_FIGHT1:
Talk(SAY_SAEED_3);
- events.ScheduleEvent(EVENT_START_FIGHT2, 3000);
+ events.ScheduleEvent(EVENT_START_FIGHT2, 3s);
break;
case EVENT_START_FIGHT2:
if (Creature* dimensius = me->FindNearestCreature(NPC_DIMENSIUS, 50.0f))
@@ -605,7 +605,8 @@ public:
creature->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE);
creature->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
creature->AI()->Talk(SAY_BESSY_0);
- CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
+ creature->SetWalk(true);
+ CAST_AI(npc_escortAI, (creature->AI()))->Start(true, player->GetGUID());
}
return true;
}
@@ -771,7 +772,8 @@ 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);
- pEscortAI->Start(false, false, player->GetGUID());
+ creature->SetWalk(true);
+ pEscortAI->Start(false, player->GetGUID());
}
}
return true;
diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
index 3e78e17db5..5e31fb4f90 100644
--- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
+++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
@@ -133,7 +133,7 @@ public:
{
ground = me->GetMapHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
SummonInfernal();
- events.ScheduleEvent(EVENT_CAST_SUMMON_INFERNAL, urand(1000, 3000));
+ events.ScheduleEvent(EVENT_CAST_SUMMON_INFERNAL, 1s, 3s);
}
void SetData(uint32 id, uint32 data) override
@@ -161,7 +161,7 @@ public:
if (Unit* infernal = ObjectAccessor::GetUnit(*me, infernalGUID))
if (infernal->GetDisplayId() == MODEL_INVISIBLE)
me->CastSpell(infernal, SPELL_SUMMON_INFERNAL, true);
- events.ScheduleEvent(EVENT_CAST_SUMMON_INFERNAL, 12000);
+ events.ScheduleEvent(EVENT_CAST_SUMMON_INFERNAL, 12s);
break;
}
default:
@@ -566,8 +566,8 @@ public:
void JustEngagedWith(Unit* /*who*/) override
{
- events.ScheduleEvent(EVENT_KICK, urand(5000, 10000));
- events.ScheduleEvent(EVENT_SUNDER, urand(5000, 10000));
+ events.ScheduleEvent(EVENT_KICK, 5s, 10s);
+ events.ScheduleEvent(EVENT_SUNDER, 5s, 10s);
}
void SpellHit(Unit* caster, SpellInfo const* spell) override
@@ -582,7 +582,7 @@ public:
Tapped = true;
caster->GetClosePoint(x, y, z, me->GetObjectSize());
Talk(SAY_1);
- events.ScheduleEvent(EVENT_WALK_TO_MUTTON, 0);
+ events.ScheduleEvent(EVENT_WALK_TO_MUTTON, 0ms);
}
}
@@ -593,7 +593,7 @@ public:
if (GameObject* food = me->FindNearestGameObject(DELICIOUS_MUTTON, 5.0f))
me->SetFacingToObject(food);
me->HandleEmoteCommand(EMOTE_ONESHOT_EAT);
- events.ScheduleEvent(EVENT_POISONED, 5000);
+ events.ScheduleEvent(EVENT_POISONED, 5s);
}
}
@@ -617,7 +617,7 @@ public:
{
case EVENT_WALK_TO_MUTTON:
me->SetWalk(true);
- me->GetMotionMaster()->MovePoint(1, x, y, z, true);
+ me->GetMotionMaster()->MovePoint(1, x, y, z);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
me->HandleEmoteCommand(EMOTE_ONESHOT_CHEER);
break;
@@ -628,7 +628,7 @@ public:
Talk(SAY_POISONED_1);
CreditPlayer();
me->CastSpell(me, SPELL_VOMIT);
- events.ScheduleEvent(EVENT_KILL, 5000);
+ events.ScheduleEvent(EVENT_KILL, 5s);
break;
case EVENT_KILL:
Unit::DealDamage(me, me, me->GetHealth(), nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false);
@@ -642,11 +642,11 @@ public:
case EVENT_KICK:
if (me->GetVictim()->HasUnitState(SPELL_STATE_CASTING))
DoCastVictim(SPELL_KICK);
- events.RepeatEvent(urand(5000, 10000));
+ events.Repeat(5s, 10s);
break;
case EVENT_SUNDER:
DoCastVictim(SPELL_SUNDER);
- events.RepeatEvent(urand(5000, 10000));
+ events.Repeat(5s, 10s);
break;
}
@@ -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 29382d6ae4..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)
- Start(false, false, summoner->GetGUID());
+ {
+ 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 ffbed2ade5..38cb0214b1 100644
--- a/src/server/scripts/Outland/zone_terokkar_forest.cpp
+++ b/src/server/scripts/Outland/zone_terokkar_forest.cpp
@@ -433,9 +433,9 @@ public:
void JustEngagedWith(Unit*) override
{
events.Reset();
- events.ScheduleEvent(EVENT_SPELL_WRATH, 0);
- events.ScheduleEvent(EVENT_SPELL_MOONFIRE, 4000);
- events.ScheduleEvent(EVENT_SPELL_ENTANGLING_ROOTS, 10000);
+ events.ScheduleEvent(EVENT_SPELL_WRATH, 0ms);
+ events.ScheduleEvent(EVENT_SPELL_MOONFIRE, 4s);
+ events.ScheduleEvent(EVENT_SPELL_ENTANGLING_ROOTS, 10s);
}
void UpdateEscortAI(uint32 diff) override
@@ -451,15 +451,15 @@ public:
{
case EVENT_SPELL_WRATH:
me->CastSpell(me->GetVictim(), SPELL_WRATH, false);
- events.ScheduleEvent(EVENT_SPELL_WRATH, 3000);
+ events.ScheduleEvent(EVENT_SPELL_WRATH, 3s);
break;
case EVENT_SPELL_MOONFIRE:
me->CastSpell(me->GetVictim(), SPELL_MOONFIRE, false);
- events.ScheduleEvent(EVENT_SPELL_MOONFIRE, 12000);
+ events.ScheduleEvent(EVENT_SPELL_MOONFIRE, 12s);
break;
case EVENT_SPELL_ENTANGLING_ROOTS:
me->CastSpell(me->GetVictim(), SPELL_ENTANGLING_ROOTS, false);
- events.ScheduleEvent(EVENT_SPELL_ENTANGLING_ROOTS, 20000);
+ events.ScheduleEvent(EVENT_SPELL_ENTANGLING_ROOTS, 20s);
break;
}
@@ -473,7 +473,8 @@ public:
{
if (quest->GetQuestId() == QUEST_EFTW_H || quest->GetQuestId() == QUEST_EFTW_A)
{
- CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
+ creature->SetWalk(true);
+ CAST_AI(npc_escortAI, (creature->AI()))->Start(true, player->GetGUID());
creature->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_ACTIVE);
}
return true;
diff --git a/src/server/scripts/Pet/pet_generic.cpp b/src/server/scripts/Pet/pet_generic.cpp
index 6e91d2a19a..8af8b89abc 100644
--- a/src/server/scripts/Pet/pet_generic.cpp
+++ b/src/server/scripts/Pet/pet_generic.cpp
@@ -49,7 +49,7 @@ struct npc_pet_gen_soul_trader_beacon : public ScriptedAI
npc_pet_gen_soul_trader_beacon(Creature* c) : ScriptedAI(c)
{
events.Reset();
- events.ScheduleEvent(EVENT_INITIAL_TALK, 0);
+ events.ScheduleEvent(EVENT_INITIAL_TALK, 0ms);
if (me->ToTempSummon())
if (Unit* owner = me->ToTempSummon()->GetOwner())
{
@@ -65,7 +65,7 @@ struct npc_pet_gen_soul_trader_beacon : public ScriptedAI
if (spellInfo->Id == SPELL_STEAL_ESSENCE_VISUAL && target == me)
{
Talk(1);
- events.ScheduleEvent(EVENT_ADD_TOKEN, 3000);
+ events.ScheduleEvent(EVENT_ADD_TOKEN, 3s);
me->CastSpell(me, SPELL_EMOTE_STATE_SWIM_RUN, true);
}
}
@@ -160,7 +160,7 @@ struct npc_pet_gen_argent_pony_bridle : public ScriptedAI
if (Unit* owner = me->GetCharmerOrOwner())
{
me->GetMotionMaster()->Clear(false);
- me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, me->GetFollowAngle(), MOTION_SLOT_ACTIVE);
+ me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, MINI_PET_FOLLOW_ANGLE, MOTION_SLOT_ACTIVE);
}
}
@@ -193,7 +193,7 @@ struct npc_pet_gen_argent_pony_bridle : public ScriptedAI
duration = cooldown;
aura = SPELL_AURA_POSTMAN_S + i;
_state = argentPonyService[TEAM_ALLIANCE][i];
- me->ToTempSummon()->UnSummon(duration);
+ me->ToTempSummon()->UnSummon(Milliseconds(duration));
break;
}
}
@@ -204,7 +204,7 @@ struct npc_pet_gen_argent_pony_bridle : public ScriptedAI
duration = cooldown * IN_MILLISECONDS;
aura = SPELL_AURA_BANK_G + i;
_state = argentPonyService[TEAM_HORDE][i];
- me->ToTempSummon()->UnSummon(duration);
+ me->ToTempSummon()->UnSummon(Milliseconds(duration));
break;
}
}
@@ -327,7 +327,7 @@ struct npc_pet_gen_argent_pony_bridle : public ScriptedAI
creature->CastSpell(creature, spellId, true);
player->AddSpellCooldown(spellId, 0, 3 * MINUTE * IN_MILLISECONDS);
player->AddSpellCooldown(player->GetTeamId(true) ? SPELL_AURA_TIRED_G : SPELL_AURA_TIRED_S, 0, 3 * MINUTE * IN_MILLISECONDS + 4 * HOUR * IN_MILLISECONDS);
- creature->DespawnOrUnsummon(3 * MINUTE * IN_MILLISECONDS);
+ creature->DespawnOrUnsummon(180s);
}
return true;
}
@@ -388,7 +388,7 @@ struct npc_pet_gen_target_following_bomb : public NullCreatureAI
if (me->GetDistance(target) < 3.0f)
{
me->CastSpell(me, bombSpellId, false);
- me->DespawnOrUnsummon(500);
+ me->DespawnOrUnsummon(500ms);
}
}
else if (!me->HasUnitState(UNIT_STATE_FOLLOW))
@@ -557,7 +557,7 @@ struct npc_pet_gen_imp_in_a_bottle : public NullCreatureAI
if (_talkTimer >= 5000)
{
_talkTimer = 0;
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
if (!_hasParty)
Talk(0, ObjectAccessor::GetPlayer(*me, _ownerGUID));
else if (Player* player = ObjectAccessor::GetPlayer(*me, _ownerGUID))
@@ -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);
}
}
}
@@ -709,7 +709,7 @@ struct npc_pet_gen_toxic_wasteling : public PassiveAI
if (Unit* owner = me->GetCharmerOrOwner())
{
me->GetMotionMaster()->Clear(false);
- me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, me->GetFollowAngle(), MOTION_SLOT_ACTIVE);
+ me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, MINI_PET_FOLLOW_ANGLE, MOTION_SLOT_ACTIVE);
}
me->AddAura(71854, me); // Growth
checkTimer = 0;
diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp
index 72ab586eca..9f3d40c3bb 100644
--- a/src/server/scripts/Pet/pet_mage.cpp
+++ b/src/server/scripts/Pet/pet_mage.cpp
@@ -62,10 +62,18 @@ struct npc_pet_mage_mirror_image : CasterAI
ObjectGuid _ebonGargoyleGUID;
uint32 checktarget;
uint32 dist = urand(1, 5);
+ bool _delayAttack;
void InitializeAI() override
{
CasterAI::InitializeAI();
+
+ _delayAttack = true;
+ me->m_Events.AddEventAtOffset([this]()
+ {
+ _delayAttack = false;
+ }, 1200ms);
+
Unit* owner = me->GetOwner();
if (!owner)
return;
@@ -130,7 +138,7 @@ struct npc_pet_mage_mirror_image : CasterAI
newAura->SetDuration(visAura->GetDuration());
}
- me->m_Events.AddEvent(new DeathEvent(*me), me->m_Events.CalculateTime(29500));
+ me->m_Events.AddEventAtOffset(new DeathEvent(*me), 29500ms);
}
// Do not reload Creature templates on evade mode enter - prevent visual lost
@@ -185,10 +193,11 @@ struct npc_pet_mage_mirror_image : CasterAI
void UpdateAI(uint32 diff) override
{
- events.Update(diff);
- if (events.GetTimer() < 1200)
+ if (_delayAttack)
return;
+ events.Update(diff);
+
if (!me->IsInCombat() || !me->GetVictim())
{
MySelectNextTarget();
@@ -212,7 +221,7 @@ struct npc_pet_mage_mirror_image : CasterAI
if (uint32 spellId = events.ExecuteEvent())
{
- events.RescheduleEvent(spellId, spellId == 59637 ? 6500 : 2500);
+ events.RescheduleEvent(spellId, spellId == 59637 ? 6500ms : 2500ms);
me->CastSpell(me->GetVictim(), spellId, false);
}
}
diff --git a/src/server/scripts/Pet/pet_shaman.cpp b/src/server/scripts/Pet/pet_shaman.cpp
index d5266ea04e..286571a82c 100644
--- a/src/server/scripts/Pet/pet_shaman.cpp
+++ b/src/server/scripts/Pet/pet_shaman.cpp
@@ -49,7 +49,7 @@ struct npc_pet_shaman_earth_elemental : public ScriptedAI
void JustEngagedWith(Unit*) override
{
_events.Reset();
- _events.ScheduleEvent(EVENT_SHAMAN_ANGEREDEARTH, 0);
+ _events.ScheduleEvent(EVENT_SHAMAN_ANGEREDEARTH, 0ms);
}
void InitializeAI() override { }
@@ -74,7 +74,7 @@ struct npc_pet_shaman_earth_elemental : public ScriptedAI
if (_events.ExecuteEvent() == EVENT_SHAMAN_ANGEREDEARTH)
{
DoCastVictim(SPELL_SHAMAN_ANGEREDEARTH);
- _events.ScheduleEvent(EVENT_SHAMAN_ANGEREDEARTH, urand(5000, 20000));
+ _events.ScheduleEvent(EVENT_SHAMAN_ANGEREDEARTH, 5s, 20s);
}
DoMeleeAttackIfReady();
@@ -94,9 +94,9 @@ struct npc_pet_shaman_fire_elemental : public ScriptedAI
void JustEngagedWith(Unit*) override
{
_events.Reset();
- _events.ScheduleEvent(EVENT_SHAMAN_FIRENOVA, urand(5000, 20000));
- _events.ScheduleEvent(EVENT_SHAMAN_FIREBLAST, urand(5000, 20000));
- //_events.ScheduleEvent(EVENT_SHAMAN_FIRESHIELD, 0);
+ _events.ScheduleEvent(EVENT_SHAMAN_FIRENOVA, 5s, 20s);
+ _events.ScheduleEvent(EVENT_SHAMAN_FIREBLAST, 5s, 20s);
+ //_events.ScheduleEvent(EVENT_SHAMAN_FIRESHIELD, 0ms);
me->RemoveAurasDueToSpell(SPELL_SHAMAN_FIRESHIELD);
me->CastSpell(me, SPELL_SHAMAN_FIRESHIELD, true);
@@ -124,11 +124,11 @@ struct npc_pet_shaman_fire_elemental : public ScriptedAI
{
case EVENT_SHAMAN_FIRENOVA:
me->CastSpell(me, SPELL_SHAMAN_FIRENOVA, false);
- _events.ScheduleEvent(EVENT_SHAMAN_FIRENOVA, urand(8000, 15000));
+ _events.ScheduleEvent(EVENT_SHAMAN_FIRENOVA, 8s, 15s);
break;
case EVENT_SHAMAN_FIREBLAST:
me->CastSpell(me->GetVictim(), SPELL_SHAMAN_FIREBLAST, false);
- _events.ScheduleEvent(EVENT_SHAMAN_FIREBLAST, urand(4000, 8000));
+ _events.ScheduleEvent(EVENT_SHAMAN_FIREBLAST, 4s, 8s);
break;
default:
break;
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 5b1d646acc..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);
}
}
@@ -3706,7 +3706,7 @@ class spell_gen_despawn_self : public SpellScript
void HandleDummy(SpellEffIndex effIndex)
{
if (GetSpellInfo()->Effects[effIndex].Effect == SPELL_EFFECT_DUMMY || GetSpellInfo()->Effects[effIndex].Effect == SPELL_EFFECT_SCRIPT_EFFECT)
- GetCaster()->ToCreature()->DespawnOrUnsummon(1);
+ GetCaster()->ToCreature()->DespawnOrUnsummon(1ms);
}
void Register() override
@@ -5528,6 +5528,148 @@ class spell_gen_food_heart_emote : public AuraScript
}
};
+// 456 - SHOWLABEL Only OFF
+class spell_gen_showlabel_off : public SpellScript
+{
+ PrepareSpellScript(spell_gen_showlabel_off)
+
+ void HandleScriptEffect(SpellEffIndex /*effIndex*/)
+ {
+ if (Player* player = GetCaster()->ToPlayer())
+ player->SetGMChat(false);
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_gen_showlabel_off::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
+// 2765 - SHOWLABEL Only ON
+class spell_gen_showlabel_on : public SpellScript
+{
+ PrepareSpellScript(spell_gen_showlabel_on)
+
+ void HandleScriptEffect(SpellEffIndex /*effIndex*/)
+ {
+ if (Player* player = GetCaster()->ToPlayer())
+ player->SetGMChat(true);
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_gen_showlabel_on::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
+// 1509 - GM Only OFF
+class spell_gen_gm_off : public SpellScript
+{
+ PrepareSpellScript(spell_gen_gm_off)
+
+ void HandleScriptEffect(SpellEffIndex /*effIndex*/)
+ {
+ if (Player* player = GetCaster()->ToPlayer())
+ {
+ player->SetGameMaster(false);
+ player->UpdateTriggerVisibility();
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_gen_gm_off::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
+// 18139 - GM Only ON
+class spell_gen_gm_on : public SpellScript
+{
+ PrepareSpellScript(spell_gen_gm_on)
+
+ void HandleScriptEffect(SpellEffIndex /*effIndex*/)
+ {
+ if (Player* player = GetCaster()->ToPlayer())
+ {
+ player->SetGameMaster(true);
+ player->UpdateTriggerVisibility();
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_gen_gm_on::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
+// 6147 - INVIS Only OFF
+class spell_gen_invis_off : public SpellScript
+{
+ PrepareSpellScript(spell_gen_invis_off)
+
+ void HandleScriptEffect(SpellEffIndex /*effIndex*/)
+ {
+ if (Player* player = GetCaster()->ToPlayer())
+ player->SetGMVisible(true);
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_gen_invis_off::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
+// 2763 - INVIS Only ON
+class spell_gen_invis_on : public SpellScript
+{
+ PrepareSpellScript(spell_gen_invis_on)
+
+ void HandleScriptEffect(SpellEffIndex /*effIndex*/)
+ {
+ if (Player* player = GetCaster()->ToPlayer())
+ player->SetGMVisible(false);
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_gen_invis_on::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
+// 20114, 24675 - BM Only OFF
+class spell_gen_bm_off : public SpellScript
+{
+ PrepareSpellScript(spell_gen_bm_off)
+
+ void HandleScriptEffect(SpellEffIndex /*effIndex*/)
+ {
+ if (Player* player = GetCaster()->ToPlayer())
+ player->SetBeastMaster(false);
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_gen_bm_off::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
+// 20115, 24676 - BM Only ON
+class spell_gen_bm_on : public SpellScript
+{
+ PrepareSpellScript(spell_gen_bm_on)
+
+ void HandleScriptEffect(SpellEffIndex /*effIndex*/)
+ {
+ if (Player* player = GetCaster()->ToPlayer())
+ player->SetBeastMaster(true);
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_gen_bm_on::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
void AddSC_generic_spell_scripts()
{
RegisterSpellScript(spell_silithyst);
@@ -5693,4 +5835,12 @@ void AddSC_generic_spell_scripts()
RegisterSpellScriptWithArgs(spell_gen_translocate, "spell_gen_translocate_up", SPELL_TRANSLOCATION_UP);
RegisterSpellScript(spell_gen_cooldown_all);
RegisterSpellScript(spell_gen_food_heart_emote);
+ RegisterSpellScript(spell_gen_showlabel_off);
+ RegisterSpellScript(spell_gen_showlabel_on);
+ RegisterSpellScript(spell_gen_gm_off);
+ RegisterSpellScript(spell_gen_gm_on);
+ RegisterSpellScript(spell_gen_invis_off);
+ RegisterSpellScript(spell_gen_invis_on);
+ RegisterSpellScript(spell_gen_bm_on);
+ RegisterSpellScript(spell_gen_bm_off);
}
diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp
index d3325403ad..8ec480ca06 100644
--- a/src/server/scripts/Spells/spell_hunter.cpp
+++ b/src/server/scripts/Spells/spell_hunter.cpp
@@ -302,7 +302,7 @@ class spell_hun_taming_the_beast : public AuraScript
{
if (Unit* target = GetTarget())
if (Creature* creature = target->ToCreature())
- creature->DespawnOrUnsummon(1);
+ creature->DespawnOrUnsummon(1ms);
}
void Register() override
diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp
index 29269f5379..25c46b9d56 100644
--- a/src/server/scripts/Spells/spell_item.cpp
+++ b/src/server/scripts/Spells/spell_item.cpp
@@ -347,7 +347,7 @@ class spell_item_rocket_chicken : public AuraScript
{
if (roll_chance_i(5))
{
- GetTarget()->ToCreature()->DespawnOrUnsummon(8000);
+ GetTarget()->ToCreature()->DespawnOrUnsummon(8s);
GetTarget()->Kill(GetTarget(), GetTarget());
}
else if (roll_chance_i(50))
@@ -468,7 +468,7 @@ class spell_item_toxic_wasteling : public SpellScript
GetCaster()->GetMotionMaster()->MoveIdle();
GetCaster()->ToCreature()->SetHomePosition(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0.0f);
GetCaster()->GetMotionMaster()->MoveJump(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 12.0f, 3.0f, 1);
- target->DespawnOrUnsummon(1500);
+ target->DespawnOrUnsummon(1500ms);
}
}
@@ -505,7 +505,7 @@ class spell_item_lil_xt : public SpellScript
return;
if (GetCaster()->IsCreature() && GetCaster()->ToCreature()->AI())
GetCaster()->ToCreature()->AI()->Talk(2);
- target->DespawnOrUnsummon(500);
+ target->DespawnOrUnsummon(500ms);
}
void Register() override
@@ -1083,7 +1083,7 @@ class spell_item_enchanted_broom_periodic : public AuraScript
{
if (owner->isMoving())
{
- GetTarget()->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, GetTarget()->GetFollowAngle(), MOTION_SLOT_ACTIVE);
+ GetTarget()->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, MINI_PET_FOLLOW_ANGLE, MOTION_SLOT_ACTIVE);
}
else
{
@@ -1206,27 +1206,38 @@ class spell_item_direbrew_remote_aura : public AuraScript
}
};
-enum EyeOfGruul
+enum HealingTrance
{
- SPELL_DRUID_ITEM_HEALING_TRANCE = 37721,
- SPELL_PALADIN_ITEM_HEALING_TRANCE = 37723,
- SPELL_PRIEST_ITEM_HEALING_TRANCE = 37706,
- SPELL_SHAMAN_ITEM_HEALING_TRANCE = 37722
+ SPELL_HEALING_DISCOUNT = 37705,
+ SPELL_SOUL_PRESERVER = 60510,
+ SPELL_PRIEST_EYE_OF_GRUUL_HEALING_TRANCE = 37706,
+ SPELL_DRUID_EYE_OF_GRUUL_HEALING_TRANCE = 37721,
+ SPELL_SHAMAN_EYE_OF_GRUUL_HEALING_TRANCE = 37722,
+ SPELL_PALADIN_EYE_OF_GRUUL_HEALING_TRANCE = 37723,
+ SPELL_DRUID_SOUL_PRESERVER_HEALING_TRANCE = 60512,
+ SPELL_PALADIN_SOUL_PRESERVER_HEALING_TRANCE = 60513,
+ SPELL_PRIEST_SOUL_PRESERVER_HEALING_TRANCE = 60514,
+ SPELL_SHAMAN_SOUL_PRESERVER_HEALING_TRANCE = 60515,
};
// 37705 - Healing Discount
-class spell_item_eye_of_gruul_healing_discount : public AuraScript
+// 60510 - Soul Preserver
+class spell_item_healing_trance : public AuraScript
{
- PrepareAuraScript(spell_item_eye_of_gruul_healing_discount);
+ PrepareAuraScript(spell_item_healing_trance);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo(
{
- SPELL_DRUID_ITEM_HEALING_TRANCE,
- SPELL_PALADIN_ITEM_HEALING_TRANCE,
- SPELL_PRIEST_ITEM_HEALING_TRANCE,
- SPELL_SHAMAN_ITEM_HEALING_TRANCE
+ SPELL_PRIEST_EYE_OF_GRUUL_HEALING_TRANCE,
+ SPELL_DRUID_EYE_OF_GRUUL_HEALING_TRANCE,
+ SPELL_SHAMAN_EYE_OF_GRUUL_HEALING_TRANCE,
+ SPELL_PALADIN_EYE_OF_GRUUL_HEALING_TRANCE,
+ SPELL_DRUID_SOUL_PRESERVER_HEALING_TRANCE,
+ SPELL_PALADIN_SOUL_PRESERVER_HEALING_TRANCE,
+ SPELL_PRIEST_SOUL_PRESERVER_HEALING_TRANCE,
+ SPELL_SHAMAN_SOUL_PRESERVER_HEALING_TRANCE,
});
}
@@ -1235,32 +1246,57 @@ class spell_item_eye_of_gruul_healing_discount : public AuraScript
PreventDefaultAction();
if (Unit* unitTarget = GetTarget())
{
- uint32 spell_id = 0;
- switch (unitTarget->getClass())
+ uint32 const itemSpell = GetSpellInfo()->Id;
+ uint32 spellId = 0;
+
+ if (itemSpell == SPELL_HEALING_DISCOUNT)
+ {
+ switch (unitTarget->getClass())
+ {
+ case CLASS_DRUID:
+ spellId = SPELL_DRUID_EYE_OF_GRUUL_HEALING_TRANCE;
+ break;
+ case CLASS_PALADIN:
+ spellId = SPELL_PALADIN_EYE_OF_GRUUL_HEALING_TRANCE;
+ break;
+ case CLASS_PRIEST:
+ spellId = SPELL_PRIEST_EYE_OF_GRUUL_HEALING_TRANCE;
+ break;
+ case CLASS_SHAMAN:
+ spellId = SPELL_SHAMAN_EYE_OF_GRUUL_HEALING_TRANCE;
+ break;
+ default:
+ return; // ignore for non-healing classes
+ }
+ }
+ else if (itemSpell == SPELL_SOUL_PRESERVER)
{
+ switch (unitTarget->getClass())
+ {
case CLASS_DRUID:
- spell_id = SPELL_DRUID_ITEM_HEALING_TRANCE;
+ spellId = SPELL_DRUID_SOUL_PRESERVER_HEALING_TRANCE;
break;
case CLASS_PALADIN:
- spell_id = SPELL_PALADIN_ITEM_HEALING_TRANCE;
+ spellId = SPELL_PALADIN_SOUL_PRESERVER_HEALING_TRANCE;
break;
case CLASS_PRIEST:
- spell_id = SPELL_PRIEST_ITEM_HEALING_TRANCE;
+ spellId = SPELL_PRIEST_SOUL_PRESERVER_HEALING_TRANCE;
break;
case CLASS_SHAMAN:
- spell_id = SPELL_SHAMAN_ITEM_HEALING_TRANCE;
+ spellId = SPELL_SHAMAN_SOUL_PRESERVER_HEALING_TRANCE;
break;
default:
return; // ignore for non-healing classes
+ }
}
- unitTarget->CastSpell(unitTarget, spell_id, true, nullptr, aurEff);
+ unitTarget->CastSpell(unitTarget, spellId, true, nullptr, aurEff);
}
}
void Register() override
{
- OnEffectProc += AuraEffectProcFn(spell_item_eye_of_gruul_healing_discount::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
+ OnEffectProc += AuraEffectProcFn(spell_item_healing_trance::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
}
};
@@ -1467,16 +1503,20 @@ class spell_item_blessing_of_ancient_kings : public AuraScript
HealInfo* healInfo = eventInfo.GetHealInfo();
if (!healInfo)
- {
return;
- }
int32 absorb = int32(CalculatePct(healInfo->GetHeal(), 15.0f));
// xinef: all heals contribute to one bubble
if (AuraEffect* protEff = eventInfo.GetProcTarget()->GetAuraEffect(SPELL_PROTECTION_OF_ANCIENT_KINGS, 0/*, eventInfo.GetActor()->GetGUID()*/))
{
- // The shield can grow to a maximum size of 20,000 damage absorbtion
- protEff->SetAmount(std::min<int32>(protEff->GetAmount() + absorb, 20000));
+ // The shield is supposed to cap out at 20,000 absorption...
+ absorb += protEff->GetAmount();
+
+ // ...but Blizz wrote this instead. See #23152 for details
+ if (absorb > 20000)
+ absorb = 200000;
+
+ protEff->SetAmount(absorb);
// Refresh and return to prevent replacing the aura
protEff->GetBase()->RefreshDuration();
@@ -1629,7 +1669,7 @@ public:
_player->HandleEmoteCommand(RAND(EMOTE_ONESHOT_APPLAUD, EMOTE_ONESHOT_DANCESPECIAL, EMOTE_ONESHOT_LAUGH, EMOTE_ONESHOT_CHEER, EMOTE_ONESHOT_CHICKEN));
}
- _player->m_Events.AddEvent(this, RAND(_player->m_Events.CalculateTime(5000), _player->m_Events.CalculateTime(10000), _player->m_Events.CalculateTime(15000)));
+ _player->m_Events.AddEventAtOffset(this, RAND(5s, 10s, 15s));
return false; // do not delete re-added event in EventProcessor::Update
}
@@ -1650,7 +1690,7 @@ class spell_item_party_time : public AuraScript
return;
}
- player->m_Events.AddEvent(new PartyTimeEmoteEvent(player), RAND(player->m_Events.CalculateTime(5000), player->m_Events.CalculateTime(10000), player->m_Events.CalculateTime(15000)));
+ player->m_Events.AddEventAtOffset(new PartyTimeEmoteEvent(player), RAND(5s, 10s, 15s));
}
void Register() override
@@ -4292,7 +4332,7 @@ void AddSC_item_spell_scripts()
RegisterSpellScript(spell_item_summon_or_dismiss);
RegisterSpellScript(spell_item_draenic_pale_ale);
RegisterSpellAndAuraScriptPair(spell_item_direbrew_remote, spell_item_direbrew_remote_aura);
- RegisterSpellScript(spell_item_eye_of_gruul_healing_discount);
+ RegisterSpellScript(spell_item_healing_trance);
RegisterSpellScript(spell_item_summon_argent_knight);
RegisterSpellScript(spell_item_instant_statue);
// 23074 Arcanite Dragonling
diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp
index 127bd957aa..9020cb9918 100644
--- a/src/server/scripts/Spells/spell_quest.cpp
+++ b/src/server/scripts/Spells/spell_quest.cpp
@@ -68,7 +68,7 @@ class spell_q11065_wrangle_some_aether_rays_aura : public AuraScript
{
cr->CastSpell(player, 40926, true);
cr->GetMotionMaster()->MoveFollow(player, 5.0f, 2 * M_PI * rand_norm());
- ar->ToCreature()->DespawnOrUnsummon(500);
+ ar->ToCreature()->DespawnOrUnsummon(500ms);
}
}
}
@@ -756,10 +756,10 @@ private:
uint32 _originalEntry;
uint32 _newEntry;
bool _shouldAttack;
- uint32 _despawnTime;
+ Milliseconds _despawnTime;
public:
- spell_generic_quest_update_entry_SpellScript(uint16 spellEffect, uint8 effIndex, uint32 originalEntry, uint32 newEntry, bool shouldAttack, uint32 despawnTime = 0) :
+ spell_generic_quest_update_entry_SpellScript(uint16 spellEffect, uint8 effIndex, uint32 originalEntry, uint32 newEntry, bool shouldAttack, Milliseconds despawnTime = 0ms) :
SpellScript(), _spellEffect(spellEffect), _effIndex(effIndex), _originalEntry(originalEntry),
_newEntry(newEntry), _shouldAttack(shouldAttack), _despawnTime(despawnTime) { }
@@ -772,7 +772,7 @@ public:
if (_shouldAttack && creatureTarget->IsAIEnabled)
creatureTarget->AI()->AttackStart(GetCaster());
- if (_despawnTime)
+ if (_despawnTime > 0ms)
creatureTarget->DespawnOrUnsummon(_despawnTime);
}
}
@@ -900,10 +900,11 @@ enum Quests6124_6129Data
NPC_SICKLY_GAZELLE = 12296,
NPC_CURED_GAZELLE = 12297,
NPC_SICKLY_DEER = 12298,
- NPC_CURED_DEER = 12299,
- DESPAWN_TIME = 30000
+ NPC_CURED_DEER = 12299
};
+constexpr Milliseconds DESPAWN_TIME = 30s;
+
class spell_q6124_6129_apply_salve : public SpellScript
{
PrepareSpellScript(spell_q6124_6129_apply_salve);
@@ -1364,12 +1365,15 @@ class spell_q12937_relief_for_the_fallen : public AuraScript
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
+ if (!GetCaster() || !GetCaster()->IsPlayer())
+ return;
+
Player* caster = GetCaster()->ToPlayer();
Unit* target = GetUnitOwner();
if (target && target->ToCreature())
{
caster->KilledMonsterCredit(NPC_FALLEN_EARTHEN_DEFENDER);
- target->ToCreature()->DespawnOrUnsummon(5000);
+ target->ToCreature()->DespawnOrUnsummon(5s);
target->SetStandState(UNIT_STAND_STATE_STAND);
target->ToCreature()->AI()->Talk(TALK_FALLEN_EARTHEN_HEALED);
@@ -1510,7 +1514,7 @@ class spell_q9874_liquid_fire : public SpellScript
{
caster->KilledMonsterCredit(NPC_VILLAGER_KILL_CREDIT);
target->CastSpell(target, SPELL_FLAMES, true);
- target->DespawnOrUnsummon(20000);
+ target->DespawnOrUnsummon(20s);
}
}
@@ -1557,7 +1561,7 @@ class spell_q12805_lifeblood_dummy : public SpellScript
caster->KilledMonsterCredit(NPC_SHARD_KILL_CREDIT);
target->CastSpell(target, uint32(GetEffectValue()), true);
- target->DespawnOrUnsummon(2000);
+ target->DespawnOrUnsummon(2s);
}
void Register() override
@@ -2141,7 +2145,7 @@ class spell_q12690_burst_at_the_seams : public SpellScript
void HandleScript(SpellEffIndex /*effIndex*/)
{
- GetCaster()->ToCreature()->DespawnOrUnsummon(2 * IN_MILLISECONDS);
+ GetCaster()->ToCreature()->DespawnOrUnsummon(2s);
}
void Register() override
diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp
index 814871ee1d..6caf5982d2 100644
--- a/src/server/scripts/World/boss_emerald_dragons.cpp
+++ b/src/server/scripts/World/boss_emerald_dragons.cpp
@@ -105,9 +105,9 @@ struct emerald_dragonAI : public WorldBossAI
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
me->SetReactState(REACT_AGGRESSIVE);
DoCast(me, SPELL_MARK_OF_NATURE_AURA, true);
- events.ScheduleEvent(EVENT_TAIL_SWEEP, 4000);
- events.ScheduleEvent(EVENT_NOXIOUS_BREATH, urand(7500, 15000));
- events.ScheduleEvent(EVENT_SEEPING_FOG, urand(12500, 20000));
+ events.ScheduleEvent(EVENT_TAIL_SWEEP, 4s);
+ events.ScheduleEvent(EVENT_NOXIOUS_BREATH, 7500ms, 15s);
+ events.ScheduleEvent(EVENT_SEEPING_FOG, 12500ms, 20s);
events.ScheduleEvent(EVENT_SUMMON_PLAYER, 1s);
}
@@ -128,17 +128,17 @@ struct emerald_dragonAI : public WorldBossAI
// Despawntime is 2 minutes, so reschedule it for new cast after 2 minutes + a minor "random time" (30 seconds at max)
DoCast(me, SPELL_SEEPING_FOG_LEFT, true);
DoCast(me, SPELL_SEEPING_FOG_RIGHT, true);
- events.ScheduleEvent(EVENT_SEEPING_FOG, urand(120000, 150000));
+ events.ScheduleEvent(EVENT_SEEPING_FOG, 120s, 150s);
break;
case EVENT_NOXIOUS_BREATH:
// Noxious Breath is cast on random intervals, no less than 7.5 seconds between
DoCast(me, SPELL_NOXIOUS_BREATH);
- events.ScheduleEvent(EVENT_NOXIOUS_BREATH, urand(7500, 15000));
+ events.ScheduleEvent(EVENT_NOXIOUS_BREATH, 7500ms, 15s);
break;
case EVENT_TAIL_SWEEP:
// Tail Sweep is cast every two seconds, no matter what goes on in front of the dragon
DoCast(me, SPELL_TAIL_SWEEP);
- events.ScheduleEvent(EVENT_TAIL_SWEEP, 2000);
+ events.ScheduleEvent(EVENT_TAIL_SWEEP, 2s);
break;
case EVENT_SUMMON_PLAYER:
if (Unit* target = me->GetVictim())
@@ -219,7 +219,7 @@ public:
});
}
- void SetGUID(ObjectGuid guid, int32 type) override
+ void SetGUID(ObjectGuid const& guid, int32 type) override
{
if (type == GUID_DRAGON)
{
@@ -304,7 +304,7 @@ public:
{
_stage = 1;
emerald_dragonAI::Reset();
- events.ScheduleEvent(EVENT_LIGHTNING_WAVE, 12000);
+ events.ScheduleEvent(EVENT_LIGHTNING_WAVE, 12s);
}
void JustEngagedWith(Unit* who) override
@@ -344,7 +344,7 @@ public:
{
case EVENT_LIGHTNING_WAVE:
DoCastVictim(SPELL_LIGHTNING_WAVE);
- events.ScheduleEvent(EVENT_LIGHTNING_WAVE, urand(10000, 20000));
+ events.ScheduleEvent(EVENT_LIGHTNING_WAVE, 10s, 20s);
break;
default:
emerald_dragonAI::ExecuteEvent(eventId);
@@ -476,7 +476,7 @@ public:
if (moveType == FOLLOW_MOTION_TYPE && data == _summonerGuid.GetCounter())
{
me->CastSpell((Unit*)nullptr, SPELL_DARK_OFFERING, false);
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
}
@@ -524,7 +524,7 @@ public:
{
_stage = 1;
emerald_dragonAI::Reset();
- events.ScheduleEvent(EVENT_VOLATILE_INFECTION, 12000);
+ events.ScheduleEvent(EVENT_VOLATILE_INFECTION, 12s);
}
void KilledUnit(Unit* who) override
@@ -559,7 +559,7 @@ public:
{
case EVENT_VOLATILE_INFECTION:
DoCastVictim(SPELL_VOLATILE_INFECTION);
- events.ScheduleEvent(EVENT_VOLATILE_INFECTION, 120000);
+ events.ScheduleEvent(EVENT_VOLATILE_INFECTION, 120s);
break;
default:
emerald_dragonAI::ExecuteEvent(eventId);
@@ -624,8 +624,8 @@ public:
_banishedTimer = 0;
emerald_dragonAI::Reset();
- events.ScheduleEvent(EVENT_ARCANE_BLAST, 12000);
- events.ScheduleEvent(EVENT_BELLOWING_ROAR, 30000);
+ events.ScheduleEvent(EVENT_ARCANE_BLAST, 12s);
+ events.ScheduleEvent(EVENT_BELLOWING_ROAR, 30s);
}
void JustEngagedWith(Unit* who) override
@@ -671,11 +671,11 @@ public:
{
case EVENT_ARCANE_BLAST:
DoCast(SPELL_ARCANE_BLAST);
- events.ScheduleEvent(EVENT_ARCANE_BLAST, urand(7000, 12000));
+ events.ScheduleEvent(EVENT_ARCANE_BLAST, 7s, 12s);
break;
case EVENT_BELLOWING_ROAR:
DoCast(SPELL_BELLOWING_ROAR);
- events.ScheduleEvent(EVENT_BELLOWING_ROAR, urand(20000, 30000));
+ events.ScheduleEvent(EVENT_BELLOWING_ROAR, 20s, 30s);
break;
default:
emerald_dragonAI::ExecuteEvent(eventId);
diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp
index ff9adc9635..b28ffaade3 100644
--- a/src/server/scripts/World/go_scripts.cpp
+++ b/src/server/scripts/World/go_scripts.cpp
@@ -283,7 +283,7 @@ public:
for (std::list<Creature*>::const_iterator itr = cList.begin(); itr != cList.end(); ++itr)
{
player->KilledMonsterCredit(NPC_WINTERFIN_TADPOLE);
- (*itr)->DespawnOrUnsummon(urand(45000, 60000));
+ (*itr)->DespawnOrUnsummon(randtime(45s, 60s));
(*itr)->GetMotionMaster()->MoveFollow(player, 1.0f, frand(0.0f, 2 * M_PI), MOTION_SLOT_CONTROLLED);
}
}
@@ -412,7 +412,7 @@ public:
void Initialize()
{
- _events.ScheduleEvent(EVENT_CHECK, 1000);
+ _events.ScheduleEvent(EVENT_CHECK, 1s);
}
void UpdateAI(uint32 const diff) override
@@ -432,7 +432,7 @@ public:
}
else
{
- _events.ScheduleEvent(EVENT_CHECK, 1000);
+ _events.ScheduleEvent(EVENT_CHECK, 1s);
}
break;
}
@@ -474,7 +474,7 @@ public:
{
go_l70_etc_musicAI(GameObject* go) : GameObjectAI(go)
{
- _events.ScheduleEvent(EVENT_ETC_START_MUSIC, 1600);
+ _events.ScheduleEvent(EVENT_ETC_START_MUSIC, 1600ms);
}
void UpdateAI(uint32 diff) override
@@ -489,7 +489,7 @@ public:
me->PlayDirectMusic(MUSIC_L70_ETC_MUSIC_LOUD);
else
me->PlayDirectMusic(MUSIC_L70_ETC_MUSIC);
- _events.ScheduleEvent(EVENT_ETC_START_MUSIC, 1600); // Every 1.6 seconds SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value)
+ _events.ScheduleEvent(EVENT_ETC_START_MUSIC, 1600ms); // Every 1.6 seconds SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value)
break;
default:
break;
@@ -521,15 +521,12 @@ enum BrewfestMusic
};
// These are in seconds
-enum BrewfestMusicTime
-{
- EVENT_BREWFESTDWARF01_TIME = 95000,
- EVENT_BREWFESTDWARF02_TIME = 155000,
- EVENT_BREWFESTDWARF03_TIME = 23000,
- EVENT_BREWFESTGOBLIN01_TIME = 68000,
- EVENT_BREWFESTGOBLIN02_TIME = 93000,
- EVENT_BREWFESTGOBLIN03_TIME = 28000
-};
+constexpr Milliseconds EVENT_BREWFESTDWARF01_TIME = 95s;
+constexpr Milliseconds EVENT_BREWFESTDWARF02_TIME = 155s;
+constexpr Milliseconds EVENT_BREWFESTDWARF03_TIME = 23s;
+constexpr Milliseconds EVENT_BREWFESTGOBLIN01_TIME = 68s;
+constexpr Milliseconds EVENT_BREWFESTGOBLIN02_TIME = 93s;
+constexpr Milliseconds EVENT_BREWFESTGOBLIN03_TIME = 28s;
enum BrewfestMusicEvents
{
@@ -546,8 +543,8 @@ public:
{
go_brewfest_musicAI(GameObject* go) : GameObjectAI(go)
{
- _events.ScheduleEvent(EVENT_BM_SELECT_MUSIC, 1000);
- _events.ScheduleEvent(EVENT_BM_START_MUSIC, 1500);
+ _events.ScheduleEvent(EVENT_BM_SELECT_MUSIC, 1s);
+ _events.ScheduleEvent(EVENT_BM_START_MUSIC, 1500ms);
_currentMusicEvent = EVENT_BREWFESTGOBLIN01;
}
@@ -564,7 +561,7 @@ public:
break;
// Select random music sample
uint32 rnd = urand(0, 2);
- uint32 musicTime = 1000;
+ Milliseconds musicTime = 1s;
//Restart the current selected music
_currentMusicEvent = 0;
//Check zone to play correct music
@@ -652,7 +649,7 @@ public:
{
me->PlayDirectMusic(_currentMusicEvent);
}
- _events.ScheduleEvent(EVENT_BM_START_MUSIC, 5000); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client
+ _events.ScheduleEvent(EVENT_BM_START_MUSIC, 5s); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client
break;
default:
break;
@@ -695,7 +692,7 @@ public:
go_pirate_day_musicAI(GameObject* go) : GameObjectAI(go)
{
- _events.ScheduleEvent(EVENT_PDM_START_MUSIC, 1000);
+ _events.ScheduleEvent(EVENT_PDM_START_MUSIC, 1s);
}
void UpdateAI(uint32 diff) override
@@ -709,7 +706,7 @@ public:
if (!IsHolidayActive(HOLIDAY_PIRATES_DAY))
break;
me->PlayDirectMusic(MUSIC_PIRATE_DAY_MUSIC);
- _events.ScheduleEvent(EVENT_PDM_START_MUSIC, 5000); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value)
+ _events.ScheduleEvent(EVENT_PDM_START_MUSIC, 5s); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value)
break;
default:
break;
@@ -750,7 +747,7 @@ public:
go_darkmoon_faire_musicAI(GameObject* go) : GameObjectAI(go)
{
- _events.ScheduleEvent(EVENT_DFM_START_MUSIC, 1000);
+ _events.ScheduleEvent(EVENT_DFM_START_MUSIC, 1s);
}
void UpdateAI(uint32 diff) override
@@ -764,7 +761,7 @@ public:
if (!IsHolidayActive(HOLIDAY_DARKMOON_FAIRE_ELWYNN) || !IsHolidayActive(HOLIDAY_DARKMOON_FAIRE_THUNDER) || !IsHolidayActive(HOLIDAY_DARKMOON_FAIRE_SHATTRATH))
break;
me->PlayDirectMusic(MUSIC_DARKMOON_FAIRE_MUSIC);
- _events.ScheduleEvent(EVENT_DFM_START_MUSIC, 5000); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value)
+ _events.ScheduleEvent(EVENT_DFM_START_MUSIC, 5s); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value)
break;
default:
break;
@@ -805,7 +802,7 @@ public:
{
go_midsummer_musicAI(GameObject* go) : GameObjectAI(go)
{
- _events.ScheduleEvent(EVENT_MM_START_MUSIC, 1000);
+ _events.ScheduleEvent(EVENT_MM_START_MUSIC, 1s);
}
void UpdateAI(uint32 diff) override
@@ -836,7 +833,7 @@ public:
}
}
- _events.ScheduleEvent(EVENT_MM_START_MUSIC, 5000); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value)
+ _events.ScheduleEvent(EVENT_MM_START_MUSIC, 5s); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value)
break;
}
default:
@@ -895,7 +892,7 @@ public:
_playerGUID = player->GetGUID();
me->SetGameObjectFlag((GameObjectFlags)1);
me->RemoveByteFlag(GAMEOBJECT_BYTES_1, 0, 1);
- _events.ScheduleEvent(EVENT_STILLBLADE_SPAWN, 1000);
+ _events.ScheduleEvent(EVENT_STILLBLADE_SPAWN, 1s);
}
}
return true;
@@ -914,7 +911,7 @@ public:
if (Player* player = ObjectAccessor::GetPlayer(*me, _playerGUID))
{
player->SummonCreature(NPC_STILLBLADE, 8032.587f, -7524.518f, 149.68073f, 6.161012172698974609f, TEMPSUMMON_DEAD_DESPAWN, 60000);
- _events.ScheduleEvent(EVENT_RESET_BRAZIER, 4000);
+ _events.ScheduleEvent(EVENT_RESET_BRAZIER, 4s);
}
break;
}
@@ -1066,7 +1063,7 @@ class go_southfury_moonstone : public GameObjectScript
public:
go_southfury_moonstone() : GameObjectScript("go_southfury_moonstone") { }
- bool OnGossipHello(Player* player, GameObject* /*go*/) override
+ bool OnGossipHello(Player* player, GameObject* go) override
{
//implicitTarget=48 not implemented as of writing this code, and manual summon may be just ok for our purpose
//player->CastSpell(player, SPELL_SUMMON_RIZZLE, false);
@@ -1076,6 +1073,7 @@ public:
// no need casting spell blackjack, it's casted by script npc_rizzle_sprysprocket.
//creature->CastSpell(player, SPELL_BLACKJACK, false);
creature->AI()->AttackStart(player);
+ go->DespawnOrUnsummon(8000ms);
}
return false;
@@ -1696,7 +1694,7 @@ public:
for (std::list<Creature*>::const_iterator itr = childrenList.begin(); itr != childrenList.end(); ++itr)
{
player->KilledMonsterCredit(NPC_CAPTIVE_CHILD, (*itr)->GetGUID());
- (*itr)->DespawnOrUnsummon(5000);
+ (*itr)->DespawnOrUnsummon(5s);
(*itr)->GetMotionMaster()->MovePoint(1, go->GetPositionX() + 5, go->GetPositionY(), go->GetPositionZ());
(*itr)->AI()->Talk(SAY_FREE_0);
(*itr)->GetMotionMaster()->Clear();
@@ -1821,7 +1819,7 @@ public:
{
// Reset
once = false;
- _events.ScheduleEvent(EVENT_TIME, 1000);
+ _events.ScheduleEvent(EVENT_TIME, 1s);
}
while (uint32 eventId = _events.ExecuteEvent())
@@ -1844,7 +1842,7 @@ public:
// Schedule ring event
for (auto i = 0; i < _rings; ++i)
{
- _events.ScheduleEvent(EVENT_RING_BELL, (i * 4 + 1) * 1000);
+ _events.ScheduleEvent(EVENT_RING_BELL, Seconds(i * 4 + 1));
}
break;
}
diff --git a/src/server/scripts/World/npc_stave_of_ancients.cpp b/src/server/scripts/World/npc_stave_of_ancients.cpp
index 20c64c4921..159ff1e72c 100644
--- a/src/server/scripts/World/npc_stave_of_ancients.cpp
+++ b/src/server/scripts/World/npc_stave_of_ancients.cpp
@@ -42,7 +42,7 @@ void NPCStaveQuestAI::RevealForm()
{
me->UpdateEntry(GetFormEntry("evil"));
me->SetFullHealth();
- me->DespawnOrUnsummon(900000);
+ me->DespawnOrUnsummon(900s);
}
}
@@ -306,11 +306,11 @@ public:
me->CastSpell(who, SPELL_FOOLS_PLIGHT, true);
}
- events.ScheduleEvent(EVENT_FOOLS_PLIGHT, urand(2000, 3000));
- events.ScheduleEvent(EVENT_RANGE_CHECK, 1000);
- events.ScheduleEvent(EVENT_UNFAIR_FIGHT, 1000);
- events.ScheduleEvent(ARTORIUS_EVENT_DEMONIC_DOOM, urand(3000, 5000));
- events.ScheduleEvent(ARTORIUS_EVENT_DEMONIC_ENRAGE, urand(6000, 8000));
+ events.ScheduleEvent(EVENT_FOOLS_PLIGHT, 2s, 3s);
+ events.ScheduleEvent(EVENT_RANGE_CHECK, 1s);
+ events.ScheduleEvent(EVENT_UNFAIR_FIGHT, 1s);
+ events.ScheduleEvent(ARTORIUS_EVENT_DEMONIC_DOOM, 3s, 5s);
+ events.ScheduleEvent(ARTORIUS_EVENT_DEMONIC_ENRAGE, 6s, 8s);
}
void UpdateAI(uint32 diff) override
@@ -325,7 +325,7 @@ public:
me->Say(ARTORIUS_SAY);
me->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
- events.ScheduleEvent(EVENT_REVEAL, 5000);
+ events.ScheduleEvent(EVENT_REVEAL, 5s);
break;
case EVENT_REVEAL:
RevealForm();
@@ -355,7 +355,7 @@ public:
{
me->CastSpell(me->GetVictim(), SPELL_FOOLS_PLIGHT, true);
}
- events.RepeatEvent(urand(3000, 6000));
+ events.Repeat(3s, 6s);
break;
case EVENT_RANGE_CHECK:
if (!me->GetVictim() || !me->GetVictim()->IsWithinDist2d(me, 60.0f))
@@ -364,7 +364,7 @@ public:
}
else
{
- events.RepeatEvent(2000);
+ events.Repeat(2s);
}
break;
case EVENT_UNFAIR_FIGHT:
@@ -373,21 +373,21 @@ public:
SetHomePosition();
me->SetUnitFlag(UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_ATTACKABLE_1);
me->SetImmuneToAll(true);
- me->DespawnOrUnsummon(5000);
+ me->DespawnOrUnsummon(5s);
break;
}
- events.RepeatEvent(2000);
+ events.Repeat(2s);
break;
case ARTORIUS_EVENT_DEMONIC_DOOM:
if (!me->GetVictim()->HasAura(ARTORIUS_SPELL_DEMONIC_DOOM))
{
me->CastSpell(me->GetVictim(), ARTORIUS_SPELL_DEMONIC_DOOM, false);
}
- events.RepeatEvent(urand(5000, 10000));
+ events.Repeat(5s, 10s);
break;
case ARTORIUS_EVENT_DEMONIC_ENRAGE:
me->CastSpell(me, SPELL_DEMONIC_ENRAGE, false);
- events.RepeatEvent(urand(22000, 39000));
+ events.Repeat(22s, 39s);
break;
}
@@ -423,7 +423,7 @@ public:
if (action == EVENT_ENCOUNTER_START)
{
PrepareForEncounter();
- events.ScheduleEvent(EVENT_ENCOUNTER_START, 5000);
+ events.ScheduleEvent(EVENT_ENCOUNTER_START, 5s);
}
}
};
@@ -476,7 +476,7 @@ public:
{
if (flaggedForDespawn)
{
- me->DespawnOrUnsummon(0);
+ me->DespawnOrUnsummon(0ms);
flaggedForDespawn = false;
}
}
@@ -640,7 +640,7 @@ public:
}
else
{
- Precious()->DespawnOrUnsummon(0);
+ Precious()->DespawnOrUnsummon(0ms);
}
}
@@ -649,7 +649,7 @@ public:
ResetState(SIMONE_SPELL_SILENCE);
events.Reset();
- events.ScheduleEvent(SIMONE_EVENT_CHECK_PET_STATE, 2000);
+ events.ScheduleEvent(SIMONE_EVENT_CHECK_PET_STATE, 2s);
}
void JustEngagedWith(Unit* who) override
@@ -664,13 +664,13 @@ public:
me->CastSpell(who, SPELL_FOOLS_PLIGHT, true);
}
- events.ScheduleEvent(EVENT_RANGE_CHECK, 1000);
- events.ScheduleEvent(EVENT_UNFAIR_FIGHT, 1000);
- events.ScheduleEvent(SIMONE_EVENT_CHAIN_LIGHTNING, 3000);
- events.ScheduleEvent(SIMONE_EVENT_TEMPTRESS_KISS, 1000);
+ events.ScheduleEvent(EVENT_RANGE_CHECK, 1s);
+ events.ScheduleEvent(EVENT_UNFAIR_FIGHT, 1s);
+ events.ScheduleEvent(SIMONE_EVENT_CHAIN_LIGHTNING, 3s);
+ events.ScheduleEvent(SIMONE_EVENT_TEMPTRESS_KISS, 1s);
}
- events.ScheduleEvent(EVENT_FOOLS_PLIGHT, urand(2000, 3000));
+ events.ScheduleEvent(EVENT_FOOLS_PLIGHT, 2s, 3s);
}
void UpdateAI(uint32 diff) override
@@ -685,7 +685,7 @@ public:
me->TextEmote(SIMONE_EMOTE, GetGossipPlayer());
me->HandleEmoteCommand(EMOTE_ONESHOT_NONE);
me->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH);
- events.ScheduleEvent(SIMONE_EVENT_TALK, 4000);
+ events.ScheduleEvent(SIMONE_EVENT_TALK, 4s);
break;
case SIMONE_EVENT_TALK:
me->Say(SIMONE_SAY, GetGossipPlayer());
@@ -695,7 +695,7 @@ public:
{
Precious()->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
- events.ScheduleEvent(EVENT_REVEAL, 5000);
+ events.ScheduleEvent(EVENT_REVEAL, 5s);
break;
case EVENT_REVEAL:
RevealForm();
@@ -713,7 +713,7 @@ public:
HandlePetRespawn();
}
- events.ScheduleEvent(SIMONE_EVENT_CHECK_PET_STATE, 1000);
+ events.ScheduleEvent(SIMONE_EVENT_CHECK_PET_STATE, 1s);
}
break;
}
@@ -730,7 +730,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING) && eventId != EVENT_RANGE_CHECK && eventId != EVENT_UNFAIR_FIGHT)
{
- events.RepeatEvent(1000);
+ events.Repeat(1s);
return;
}
@@ -742,7 +742,7 @@ public:
{
me->CastSpell(me->GetVictim(), SPELL_FOOLS_PLIGHT, true);
}
- events.RepeatEvent(urand(3000, 6000));
+ events.Repeat(3s, 6s);
break;
case EVENT_RANGE_CHECK:
if (!me->GetVictim()->IsWithinDist2d(me, 60.0f))
@@ -751,7 +751,7 @@ public:
}
else
{
- events.RepeatEvent(2000);
+ events.Repeat(2s);
}
break;
case EVENT_UNFAIR_FIGHT:
@@ -765,20 +765,20 @@ public:
me->SetUnitFlag(UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_ATTACKABLE_1);
me->SetImmuneToAll(true);
- Precious()->DespawnOrUnsummon(5000);
+ Precious()->DespawnOrUnsummon(5s);
- me->DespawnOrUnsummon(5000);
+ me->DespawnOrUnsummon(5s);
break;
}
- events.RepeatEvent(2000);
+ events.Repeat(2s);
break;
case SIMONE_EVENT_CHAIN_LIGHTNING:
me->CastSpell(me->GetVictim(), SIMONE_SPELL_CHAIN_LIGHTNING, false);
- events.RepeatEvent(7000);
+ events.Repeat(7s);
break;
case SIMONE_EVENT_TEMPTRESS_KISS:
me->CastSpell(me->GetVictim(), SIMONE_SPELL_TEMPTRESS_KISS, false);
- events.RepeatEvent(45000);
+ events.Repeat(45s);
break;
}
@@ -805,7 +805,7 @@ public:
PreciousAI()->PrepareForEncounter();
}
gossipPlayerGUID = playerGUID;
- events.ScheduleEvent(EVENT_ENCOUNTER_START, 1000);
+ events.ScheduleEvent(EVENT_ENCOUNTER_START, 1s);
}
};
@@ -906,11 +906,11 @@ public:
me->CastSpell(who, SPELL_FOOLS_PLIGHT, true);
}
- events.ScheduleEvent(EVENT_FOOLS_PLIGHT, urand(2000, 3000));
- events.ScheduleEvent(EVENT_RANGE_CHECK, 1000);
- events.ScheduleEvent(EVENT_UNFAIR_FIGHT, 1000);
- events.ScheduleEvent(NELSON_EVENT_DREADFUL_FRIGHT, 10000);
- events.ScheduleEvent(NELSON_EVENT_CREEPING_DOOM, 5000);
+ events.ScheduleEvent(EVENT_FOOLS_PLIGHT, 2s, 3s);
+ events.ScheduleEvent(EVENT_RANGE_CHECK, 1s);
+ events.ScheduleEvent(EVENT_UNFAIR_FIGHT, 1s);
+ events.ScheduleEvent(NELSON_EVENT_DREADFUL_FRIGHT, 10s);
+ events.ScheduleEvent(NELSON_EVENT_CREEPING_DOOM, 5s);
}
void UpdateAI(uint32 diff) override
@@ -925,7 +925,7 @@ public:
me->Say(NELSON_SAY);
me->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
- events.ScheduleEvent(EVENT_REVEAL, 5000);
+ events.ScheduleEvent(EVENT_REVEAL, 5s);
break;
case EVENT_REVEAL:
RevealForm();
@@ -944,7 +944,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING))
{
- events.RepeatEvent(1000);
+ events.Repeat(1s);
return;
}
@@ -956,7 +956,7 @@ public:
{
me->CastSpell(me->GetVictim(), SPELL_FOOLS_PLIGHT, true);
}
- events.RepeatEvent(urand(3000, 6000));
+ events.Repeat(3s, 6s);
break;
case EVENT_RANGE_CHECK:
if (!me->GetVictim()->IsWithinDist2d(me, 60.0f))
@@ -965,7 +965,7 @@ public:
}
else
{
- events.RepeatEvent(2000);
+ events.Repeat(2s);
}
break;
case EVENT_UNFAIR_FIGHT:
@@ -978,18 +978,18 @@ public:
me->CombatStop(true);
me->Say(NELSON_DESPAWN_SAY);
me->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
- me->DespawnOrUnsummon(5000);
+ me->DespawnOrUnsummon(5s);
break;
}
- events.RepeatEvent(2000);
+ events.Repeat(2s);
break;
case NELSON_EVENT_DREADFUL_FRIGHT:
me->CastSpell(me->GetVictim(), NELSON_SPELL_DREADFUL_FRIGHT, false);
- events.RepeatEvent(urand(12000, 19000));
+ events.Repeat(12s, 19s);
break;
case NELSON_EVENT_CREEPING_DOOM:
me->CastSpell(me->GetVictim(), NELSON_SPELL_CREEPING_DOOM, false);
- events.RepeatEvent(urand(10000, 12000));
+ events.Repeat(10s, 12s);
break;
}
@@ -1016,7 +1016,7 @@ public:
if (action == EVENT_ENCOUNTER_START)
{
PrepareForEncounter();
- events.ScheduleEvent(EVENT_ENCOUNTER_START, 5000);
+ events.ScheduleEvent(EVENT_ENCOUNTER_START, 5s);
}
}
};
@@ -1077,12 +1077,12 @@ public:
me->CastSpell(who, SPELL_FOOLS_PLIGHT, true);
}
- events.ScheduleEvent(FRANKLIN_EVENT_DEMONIC_ENRAGE, urand(9000, 13000));
- events.ScheduleEvent(EVENT_RANGE_CHECK, 1000);
- events.ScheduleEvent(EVENT_UNFAIR_FIGHT, 1000);
+ events.ScheduleEvent(FRANKLIN_EVENT_DEMONIC_ENRAGE, 9s, 13s);
+ events.ScheduleEvent(EVENT_RANGE_CHECK, 1s);
+ events.ScheduleEvent(EVENT_UNFAIR_FIGHT, 1s);
}
- events.ScheduleEvent(EVENT_FOOLS_PLIGHT, urand(2000, 3000));
+ events.ScheduleEvent(EVENT_FOOLS_PLIGHT, 2s, 3s);
}
void UpdateAI(uint32 diff) override
@@ -1097,7 +1097,7 @@ public:
me->Say(FRANKLIN_SAY, GetGossipPlayer());
me->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
- events.ScheduleEvent(EVENT_REVEAL, 5000);
+ events.ScheduleEvent(EVENT_REVEAL, 5s);
break;
case EVENT_REVEAL:
RevealForm();
@@ -1116,7 +1116,7 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING))
{
- events.RepeatEvent(1000);
+ events.Repeat(1s);
return;
}
@@ -1128,7 +1128,7 @@ public:
{
me->CastSpell(me->GetVictim(), SPELL_FOOLS_PLIGHT, true);
}
- events.RepeatEvent(urand(3000, 6000));
+ events.Repeat(3s, 6s);
break;
case EVENT_RANGE_CHECK:
if (!me->GetVictim()->IsWithinDist2d(me, 60.0f))
@@ -1137,7 +1137,7 @@ public:
}
else
{
- events.RepeatEvent(2000);
+ events.Repeat(2s);
}
break;
case EVENT_UNFAIR_FIGHT:
@@ -1149,15 +1149,15 @@ public:
me->CombatStop(true);
me->Say(FRANKLIN_DESPAWN_SAY);
me->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
- me->DespawnOrUnsummon(5000);
+ me->DespawnOrUnsummon(5s);
break;
}
- events.RepeatEvent(2000);
+ events.Repeat(2s);
break;
case FRANKLIN_EVENT_DEMONIC_ENRAGE:
me->CastSpell(me, SPELL_DEMONIC_ENRAGE, false);
me->TextEmote(FRANKLIN_ENRAGE_EMOTE);
- events.RepeatEvent(urand(9000, 22000));
+ events.Repeat(9s, 22s);
break;
}
@@ -1189,7 +1189,7 @@ public:
{
PrepareForEncounter();
gossipPlayerGUID = playerGUID;
- events.ScheduleEvent(EVENT_ENCOUNTER_START, 5000);
+ events.ScheduleEvent(EVENT_ENCOUNTER_START, 5s);
}
};
diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp
index 6612f6dc09..af5e033a2f 100644
--- a/src/server/scripts/World/npcs_special.cpp
+++ b/src/server/scripts/World/npcs_special.cpp
@@ -68,7 +68,7 @@ public:
npc_elder_clearwaterAI(Creature* c) : ScriptedAI(c)
{
events.Reset();
- events.ScheduleEvent(EVENT_CLEARWATER_ANNOUNCE, 1000, 1, 0);
+ events.ScheduleEvent(EVENT_CLEARWATER_ANNOUNCE, 1s, 1, 0);
finished = false;
preWarning = false;
startWarning = false;
@@ -126,7 +126,7 @@ public:
}
}
- events.RepeatEvent(1000);
+ events.Repeat(1s);
break;
}
}
@@ -1421,7 +1421,8 @@ public:
break;
}
- Start(false, true);
+ me->SetWalk(true);
+ Start(false);
}
else
EnterEvadeMode(); //something went wrong