summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/apps/worldserver/worldserver.conf.dist12
-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/UnitAI.h2
-rw-r--r--src/server/game/AI/CreatureAI.cpp4
-rw-r--r--src/server/game/AI/CreatureAI.h2
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.cpp21
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.h12
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp38
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedEscortAI.h4
-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.cpp35
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.h8
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp28
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp17
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h4
-rw-r--r--src/server/game/Battlefield/Battlefield.cpp4
-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/BattlegroundQueue.cpp2
-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/BattlegroundWS.cpp18
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundWS.h11
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp27
-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.cpp178
-rw-r--r--src/server/game/Entities/Creature/Creature.h19
-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.cpp43
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h4
-rw-r--r--src/server/game/Entities/Object/Object.cpp54
-rw-r--r--src/server/game/Entities/Object/Object.h3
-rw-r--r--src/server/game/Entities/Object/ObjectGuid.h2
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp6
-rw-r--r--src/server/game/Entities/Pet/Pet.h2
-rw-r--r--src/server/game/Entities/Pet/PetDefines.h7
-rw-r--r--src/server/game/Entities/Player/Player.cpp265
-rw-r--r--src/server/game/Entities/Player/Player.h21
-rw-r--r--src/server/game/Entities/Player/PlayerQuest.cpp4
-rw-r--r--src/server/game/Entities/Player/PlayerStorage.cpp2
-rw-r--r--src/server/game/Entities/Player/SocialMgr.cpp20
-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.cpp576
-rw-r--r--src/server/game/Entities/Unit/Unit.h44
-rw-r--r--src/server/game/Entities/Unit/UnitDefines.h6
-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/Handlers/CalendarHandler.cpp36
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp17
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp81
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp428
-rw-r--r--src/server/game/Maps/Map.cpp28
-rw-r--r--src/server/game/Maps/Map.h22
-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/Language.h3
-rw-r--r--src/server/game/Movement/MotionMaster.cpp45
-rw-r--r--src/server/game/Movement/MotionMaster.h19
-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.cpp1
-rw-r--r--src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp1
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInit.cpp9
-rw-r--r--src/server/game/Scripting/MapScripts.cpp5
-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/Protocol/Opcodes.cpp10
-rw-r--r--src/server/game/Server/WorldSession.cpp9
-rw-r--r--src/server/game/Server/WorldSession.h39
-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/Spell.cpp6
-rw-r--r--src/server/game/Spells/SpellEffects.cpp13
-rw-r--r--src/server/game/Spells/SpellInfoCorrections.cpp6
-rw-r--r--src/server/game/Texts/CreatureTextMgr.cpp81
-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.cpp2
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp28
-rw-r--r--src/server/scripts/Commands/cs_gm.cpp12
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp81
-rw-r--r--src/server/scripts/Commands/cs_mmaps.cpp35
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp11
-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.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp8
-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.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp8
-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.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp2
-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_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.cpp6
-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/ScarletEnclave/chapter1.cpp22
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp36
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp32
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp23
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp2
-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.cpp62
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp21
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp96
-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_zuljin.cpp5
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp4
-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.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/zone_ghostlands.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/zone_hinterlands.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp154
-rw-r--r--src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp18
-rw-r--r--src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/zone_undercity.cpp77
-rw-r--r--src/server/scripts/EasternKingdoms/zone_westfall.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/zone_wetlands.cpp6
-rw-r--r--src/server/scripts/Events/brewfest.cpp16
-rw-r--r--src/server/scripts/Events/hallows_end.cpp26
-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_archimonde.cpp4
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp6
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp16
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp16
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp16
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp18
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp12
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp20
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp174
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp14
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp141
-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.cpp2
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp2
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp4
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp3
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp2
-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/zulfarrak.cpp12
-rw-r--r--src/server/scripts/Kalimdor/kalimdor_script_loader.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_ashenvale.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_azshara.cpp361
-rw-r--r--src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_darkshore.cpp6
-rw-r--r--src/server/scripts/Kalimdor/zone_desolace.cpp17
-rw-r--r--src/server/scripts/Kalimdor/zone_moonglade.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_silithus.cpp4
-rw-r--r--src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_tanaris.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_the_barrens.cpp10
-rw-r--r--src/server/scripts/Kalimdor/zone_thousand_needles.cpp4
-rw-r--r--src/server/scripts/Kalimdor/zone_ungoro_crater.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_winterspring.cpp10
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp4
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp10
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp12
-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.cpp14
-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.cpp11
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp9
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp27
-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.cpp8
-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/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/HallsOfReflection/boss_falric.cpp2
-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.cpp4
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp8
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp18
-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.cpp4
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp82
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp2
-rw-r--r--src/server/scripts/Northrend/Gundrak/gundrak.h11
-rw-r--r--src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp45
-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.cpp16
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp39
-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.cpp16
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp34
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp91
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp28
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp83
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp10
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp6
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp4
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp4
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp4
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp4
-rw-r--r--src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp27
-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_eregos.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp6
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp514
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp302
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp291
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp699
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h11
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp58
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp30
-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.cpp12
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp13
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp8
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp8
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp6
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp38
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp10
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp8
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp41
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp6
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp4
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp2
-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.cpp14
-rw-r--r--src/server/scripts/Northrend/zone_borean_tundra.cpp19
-rw-r--r--src/server/scripts/Northrend/zone_crystalsong_forest.cpp6
-rw-r--r--src/server/scripts/Northrend/zone_dalaran.cpp2
-rw-r--r--src/server/scripts/Northrend/zone_dragonblight.cpp40
-rw-r--r--src/server/scripts/Northrend/zone_grizzly_hills.cpp36
-rw-r--r--src/server/scripts/Northrend/zone_howling_fjord.cpp8
-rw-r--r--src/server/scripts/Northrend/zone_icecrown.cpp31
-rw-r--r--src/server/scripts/Northrend/zone_sholazar_basin.cpp2
-rw-r--r--src/server/scripts/Northrend/zone_storm_peaks.cpp141
-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_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.cpp10
-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_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/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/TempestKeep/Eye/boss_alar.cpp14
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp50
-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.cpp8
-rw-r--r--src/server/scripts/Outland/zone_nagrand.cpp12
-rw-r--r--src/server/scripts/Outland/zone_netherstorm.cpp15
-rw-r--r--src/server/scripts/Outland/zone_shadowmoon_valley.cpp20
-rw-r--r--src/server/scripts/Outland/zone_shattrath_city.cpp2
-rw-r--r--src/server/scripts/Outland/zone_terokkar_forest.cpp14
-rw-r--r--src/server/scripts/Pet/pet_generic.cpp18
-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.cpp152
-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
370 files changed, 5075 insertions, 4916 deletions
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/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/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..f338e77895 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;
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 043fa814bd..bbef2c4a76 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);
}
});
@@ -531,10 +531,6 @@ void ScriptedAI::SetEquipmentSlots(bool loadDefault, int32 mainHand /*= EQUIP_NO
if (loadDefault)
{
me->LoadEquipment(me->GetOriginalEquipmentId(), true);
- if (me->HasWeapon(OFF_ATTACK))
- me->SetCanDualWield(true);
- else
- me->SetCanDualWield(false);
return;
}
@@ -547,10 +543,6 @@ void ScriptedAI::SetEquipmentSlots(bool loadDefault, int32 mainHand /*= EQUIP_NO
if (offHand >= 0)
{
me->SetVirtualItem(1, uint32(offHand));
- if (offHand >= 1)
- me->SetCanDualWield(true);
- else
- me->SetCanDualWield(false);
}
if (ranged >= 0)
@@ -560,6 +552,11 @@ void ScriptedAI::SetEquipmentSlots(bool loadDefault, int32 mainHand /*= EQUIP_NO
}
}
+void ScriptedAI::SetRun(bool run)
+{
+ me->SetWalk(!run);
+}
+
enum eNPCs
{
NPC_BROODLORD = 12017,
@@ -662,7 +659,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..d3a13f3003 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;
@@ -227,6 +227,8 @@ struct ScriptedAI : public CreatureAI
// Called when AI is temporarily replaced or put back when possess is applied or removed
void OnPossess(bool /*apply*/) {}
+ void SetRun(bool run);
+
enum class Axis
{
AXIS_X,
@@ -355,11 +357,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 +465,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..7fe07cf1e4 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*/)
@@ -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/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..b9a78c6d94 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -43,9 +43,6 @@ 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;
@@ -190,7 +187,7 @@ 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)
{
if (HasEscortState(SMART_ESCORT_ESCORTING))
StopPath();
@@ -208,7 +205,6 @@ void SmartAI::StartPath(bool run, uint32 path, bool repeat, Unit* invoker)
{
AddEscortState(SMART_ESCORT_ESCORTING);
mCanRepeatPath = repeat;
- SetRun(run);
if (invoker && invoker->IsPlayer())
{
@@ -219,7 +215,7 @@ void SmartAI::StartPath(bool run, uint32 path, bool repeat, Unit* invoker)
Movement::PointsArray pathPoints;
GenerateWayPointArray(&pathPoints);
- me->GetMotionMaster()->MoveSplinePath(&pathPoints);
+ me->GetMotionMaster()->MoveSplinePath(&pathPoints, forcedMovement);
GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_START, nullptr, wp->id, GetScript()->GetPathId());
}
}
@@ -256,7 +252,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();
@@ -362,7 +357,7 @@ void SmartAI::EndPath(bool fail)
if (mCanRepeatPath)
{
if (IsAIControlled())
- StartPath(mRun, GetScript()->GetPathId(), true);
+ StartPath(FORCED_MOVEMENT_NONE, GetScript()->GetPathId(), true);
}
else
GetScript()->SetPathId(0);
@@ -373,8 +368,6 @@ void SmartAI::EndPath(bool fail)
void SmartAI::ResumePath()
{
- SetRun(mRun);
-
if (mLastWP)
{
Movement::PointsArray pathPoints;
@@ -389,10 +382,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 +402,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;
@@ -469,7 +461,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();
@@ -629,7 +620,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();
@@ -675,7 +665,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);
@@ -850,7 +839,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 +940,7 @@ void SmartAI::OnCharmed(bool /* apply */)
if (!charmed && !me->IsInEvadeMode())
{
if (mCanRepeatPath)
- StartPath(mRun, GetScript()->GetPathId(), true);
- else
- me->SetWalk(!mRun);
+ StartPath(FORCED_MOVEMENT_NONE, GetScript()->GetPathId(), true);
if (Unit* charmer = me->GetCharmer())
AttackStart(charmer);
@@ -993,7 +979,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 +988,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 +1088,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);
}
diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h
index 5bd9fcd8b3..d8ac699dc6 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.h
+++ b/src/server/game/AI/SmartScripts/SmartAI.h
@@ -52,7 +52,7 @@ public:
bool IsAIControlled() const;
// Start moving to the desired MovePoint
- void StartPath(bool run = false, uint32 path = 0, bool repeat = false, Unit* invoker = nullptr);
+ void StartPath(ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE, uint32 path = 0, bool repeat = false, Unit* invoker = nullptr);
bool LoadPath(uint32 entry);
void PausePath(uint32 delay, bool forced = false);
void StopPath(uint32 DespawnTime = 0, uint32 quest = 0, bool fail = false);
@@ -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);
@@ -240,7 +237,6 @@ private:
uint32 mEscortNPCFlags;
uint32 GetWPCount() { return mWayPoints ? mWayPoints->size() : 0; }
bool mCanRepeatPath;
- bool mRun;
bool mEvadeDisabled;
bool mCanAutoAttack;
bool mForcedPaused;
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 1a64641e95..38febbc9fa 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);
}
}
@@ -1731,7 +1728,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
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;
@@ -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);
}
}
@@ -2543,9 +2541,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);
}
}
}
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index 6db3e4cb2d..47c5c91660 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -555,6 +555,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:
@@ -866,6 +867,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);
@@ -1562,11 +1564,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;
@@ -1743,8 +1745,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:
{
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index 47b0d47961..9e6c15522c 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -1041,7 +1041,7 @@ struct SmartAction
struct
{
- SAIBool run;
+ uint32 forcedMovement;
uint32 pathID;
SAIBool repeat;
uint32 quest;
@@ -1295,7 +1295,7 @@ struct SmartAction
uint32 pathId1;
uint32 pathId2;
uint32 repeat;
- uint32 run;
+ uint32 forcedMovement;
} startClosestWaypoint;
struct
diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp
index f74aebff2f..2adb610478 100644
--- a/src/server/game/Battlefield/Battlefield.cpp
+++ b/src/server/game/Battlefield/Battlefield.cpp
@@ -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/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp
index 81832437b8..f34d833c4c 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)
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/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/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index 2449fada7a..0d4e6a27b4 100644
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -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 19fe38a3c9..4b18aa2e90 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;
}
@@ -525,7 +525,8 @@ bool Creature::InitEntry(uint32 Entry, const CreatureData* data)
SetFloatValue(UNIT_FIELD_HOVERHEIGHT, cinfo->HoverHeight);
- SetCanDualWield(cinfo->HasFlagsExtra(CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK));
+ if (cinfo->HasFlagsExtra(CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK))
+ SetDualWieldMode(DualWieldMode::ENABLED);
// checked at loading
m_defaultMovementType = MovementGeneratorType(cinfo->MovementType);
@@ -571,7 +572,8 @@ bool Creature::UpdateEntry(uint32 Entry, const CreatureData* data, bool changele
ReplaceAllDynamicFlags(dynamicflags);
- SetCanDualWield(cInfo->HasFlagsExtra(CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK));
+ if (cInfo->HasFlagsExtra(CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK))
+ SetDualWieldMode(DualWieldMode::ENABLED);
SetAttackTime(BASE_ATTACK, cInfo->BaseAttackTime);
SetAttackTime(OFF_ATTACK, cInfo->BaseAttackTime);
@@ -1996,7 +1998,7 @@ void Creature::setDeathState(DeathState state, bool despawn)
m_formation->FormationReset(true, false);
bool needsFalling = !despawn && (IsFlying() || IsHovering()) && !IsUnderWater();
- SetHover(false, false, false);
+ SetHover(false);
SetDisableGravity(false, false, false);
if (needsFalling)
@@ -2157,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;
}
@@ -2172,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)
@@ -2202,7 +2204,7 @@ void Creature::DespawnOnEvade(Seconds respawnDelay)
return;
}
- DespawnOrUnsummon(Milliseconds(0), respawnDelay);
+ DespawnOrUnsummon(0ms, respawnDelay);
}
void Creature::InitializeReactState()
@@ -2462,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)));
}
}
}
@@ -3195,10 +3197,23 @@ bool Creature::IsImmuneToKnockback() const
bool Creature::HasWeapon(WeaponAttackType type) const
{
+ if (type == OFF_ATTACK)
+ {
+ switch (_dualWieldMode)
+ {
+ case DualWieldMode::ENABLED:
+ return true;
+ case DualWieldMode::DISABLED:
+ return false;
+ case DualWieldMode::AUTO:
+ default:
+ break;
+ }
+ }
+
const uint8 slot = uint8(type);
ItemEntry const* item = sItemStore.LookupEntry(GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + slot));
-
- return ((item && item->ClassID == ITEM_CLASS_WEAPON) || (type == OFF_ATTACK && CanDualWield()));
+ return (item && item->ClassID == ITEM_CLASS_WEAPON);
}
/**
@@ -3229,8 +3244,9 @@ bool Creature::SetDisableGravity(bool disable, bool packetOnly /*= false*/, bool
{
WorldPacket data(disable ? SMSG_MOVE_GRAVITY_DISABLE : SMSG_MOVE_GRAVITY_ENABLE, 12);
data << GetPackGUID();
- data << uint32(0); //! movement counter
+ 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();
@@ -3303,107 +3319,6 @@ void Creature::RefreshSwimmingFlag(bool recheck)
SetUnitFlag(UNIT_FLAG_SWIMMING);
}
-bool Creature::SetCanFly(bool enable, bool /*packetOnly*/ /* = false */)
-{
- if (!Unit::SetCanFly(enable))
- return false;
-
- if (m_movedByPlayer)
- {
- sScriptMgr->AnticheatSetCanFlybyServer(m_movedByPlayer->ToPlayer(), enable);
-
- if (!enable)
- m_movedByPlayer->ToPlayer()->SetFallInformation(GameTime::GetGameTime().count(), m_movedByPlayer->ToPlayer()->GetPositionZ());
-
- WorldPacket data(enable ? SMSG_MOVE_SET_CAN_FLY : SMSG_MOVE_UNSET_CAN_FLY, 12);
- data << GetPackGUID();
- data << uint32(0); //! movement counter
- m_movedByPlayer->ToPlayer()->SendDirectMessage(&data);
-
- data.Initialize(MSG_MOVE_UPDATE_CAN_FLY, 64);
- data << GetPackGUID();
- BuildMovementPacket(&data);
- m_movedByPlayer->ToPlayer()->SendMessageToSet(&data, false);
- return true;
- }
-
- WorldPacket data(enable ? SMSG_SPLINE_MOVE_SET_FLYING : SMSG_SPLINE_MOVE_UNSET_FLYING, 9);
- data << GetPackGUID();
- SendMessageToSet(&data, false);
- return true;
-}
-
-bool Creature::SetWaterWalking(bool enable, bool packetOnly /* = false */)
-{
- if (!packetOnly && !Unit::SetWaterWalking(enable))
- return false;
-
- if (m_movedByPlayer)
- {
- WorldPacket data(enable ? SMSG_MOVE_WATER_WALK : SMSG_MOVE_LAND_WALK, 12);
- data << GetPackGUID();
- data << uint32(0); //! movement counter
- m_movedByPlayer->ToPlayer()->SendDirectMessage(&data);
-
- data.Initialize(MSG_MOVE_WATER_WALK, 64);
- data << GetPackGUID();
- BuildMovementPacket(&data);
- m_movedByPlayer->ToPlayer()->SendMessageToSet(&data, false);
- return true;
- }
-
- WorldPacket data(enable ? SMSG_SPLINE_MOVE_WATER_WALK : SMSG_SPLINE_MOVE_LAND_WALK, 9);
- data << GetPackGUID();
- SendMessageToSet(&data, true);
- return true;
-}
-
-bool Creature::SetFeatherFall(bool enable, bool packetOnly /* = false */)
-{
- if (!packetOnly && !Unit::SetFeatherFall(enable))
- return false;
-
- if (m_movedByPlayer)
- {
- WorldPacket data(enable ? SMSG_MOVE_FEATHER_FALL : SMSG_MOVE_NORMAL_FALL, 12);
- data << GetPackGUID();
- data << uint32(0); //! movement counter
- m_movedByPlayer->ToPlayer()->SendDirectMessage(&data);
-
- data.Initialize(MSG_MOVE_FEATHER_FALL, 64);
- data << GetPackGUID();
- BuildMovementPacket(&data);
- m_movedByPlayer->ToPlayer()->SendMessageToSet(&data, false);
- return true;
- }
-
- WorldPacket data(enable ? SMSG_SPLINE_MOVE_FEATHER_FALL : SMSG_SPLINE_MOVE_NORMAL_FALL, 9);
- data << GetPackGUID();
- SendMessageToSet(&data, true);
- return true;
-}
-
-bool Creature::SetHover(bool enable, bool packetOnly /*= false*/, bool updateAnimationTier /*= true*/)
-{
- if (!packetOnly && !Unit::SetHover(enable))
- return false;
-
- 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(enable ? SMSG_SPLINE_MOVE_SET_HOVER : SMSG_SPLINE_MOVE_UNSET_HOVER, 9);
- data << GetPackGUID();
- SendMessageToSet(&data, false);
- return true;
-}
-
float Creature::GetAggroRange(Unit const* target) const
{
// Determines the aggro range for creatures
@@ -3798,6 +3713,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;
@@ -3820,7 +3762,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 a2c2947020..1ea5600452 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:
@@ -143,10 +147,6 @@ public:
bool SetWalk(bool enable) override;
bool SetDisableGravity(bool disable, bool packetOnly = false, bool updateAnimationTier = true) override;
bool SetSwim(bool enable) override;
- bool SetCanFly(bool enable, bool packetOnly = false) override;
- bool SetWaterWalking(bool enable, bool packetOnly = false) override;
- bool SetFeatherFall(bool enable, bool packetOnly = false) override;
- bool SetHover(bool enable, bool packetOnly = false, bool updateAnimationTier = true) override;
bool HasSpellFocus(Spell const* focusSpell = nullptr) const;
struct
@@ -283,8 +283,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; }
@@ -392,6 +391,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;
@@ -502,7 +505,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;
@@ -523,6 +526,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..08d2abdc53 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -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)
{
@@ -1731,34 +1731,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 +1774,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
@@ -3046,13 +3051,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..5ca9ad61ee 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; }
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index a183d14672..d39645bb4c 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -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();
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index 23784c9c63..141a7cf73f 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -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..f730f99e28 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;
}
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..ea7380ed23 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;
@@ -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 02adb9ef0c..7bca647f7a 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -90,6 +90,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
@@ -1337,9 +1338,10 @@ void Player::SendTeleportAckPacket()
{
WorldPacket data(MSG_MOVE_TELEPORT_ACK, 41);
data << GetPackGUID();
- data << uint32(0); // this value increments every time
+ data << GetSession()->GetOrderCounter(); // movement counter
BuildMovementPacket(&data);
GetSession()->SendPacket(&data);
+ GetSession()->IncrementOrderCounter();
}
bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options /*= 0*/, Unit* target /*= nullptr*/, bool newInstance /*= false*/)
@@ -2086,7 +2088,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)
@@ -2143,7 +2145,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))
{
@@ -2499,6 +2501,7 @@ void Player::GiveLevel(uint8 level)
m_Played_time[PLAYED_TIME_LEVEL] = 0; // Level Played Time reset
_ApplyAllLevelScaleItemMods(false);
+ _RemoveAllAuraStatMods();
SetLevel(level);
@@ -2521,6 +2524,7 @@ void Player::GiveLevel(uint8 level)
UpdateSkillsToMaxSkillsForLevel();
_ApplyAllLevelScaleItemMods(true);
+ _ApplyAllAuraStatMods();
if (!isDead())
{
@@ -3800,7 +3804,7 @@ bool Player::resetTalents(bool noResetCost)
if (m_canTitanGrip)
SetCanTitanGrip(false);
// xinef: remove dual wield if player does not have dual wield spell (shamans)
- if (!HasSpell(674) && m_canDualWield)
+ if (!HasSpell(674) && CanDualWield())
SetCanDualWield(false);
AutoUnequipOffhandIfNeed();
@@ -4425,27 +4429,23 @@ void Player::DeleteOldRecoveryItems(uint32 keepDays)
void Player::SetMovement(PlayerMovementType pType)
{
WorldPacket data;
+ const PackedGuid& guid = GetPackGUID();
switch (pType)
{
- case MOVE_ROOT:
- data.Initialize(SMSG_FORCE_MOVE_ROOT, GetPackGUID().size() + 4);
- break;
- case MOVE_UNROOT:
- data.Initialize(SMSG_FORCE_MOVE_UNROOT, GetPackGUID().size() + 4);
- break;
case MOVE_WATER_WALK:
- data.Initialize(SMSG_MOVE_WATER_WALK, GetPackGUID().size() + 4);
+ data.Initialize(SMSG_MOVE_WATER_WALK, guid.size() + 4);
break;
case MOVE_LAND_WALK:
- data.Initialize(SMSG_MOVE_LAND_WALK, GetPackGUID().size() + 4);
+ data.Initialize(SMSG_MOVE_LAND_WALK, guid.size() + 4);
break;
default:
LOG_ERROR("entities.player", "Player::SetMovement: Unsupported move type ({}), data not sent to client.", pType);
return;
}
- data << GetPackGUID();
- data << uint32(0);
+ data << guid;
+ data << GetSession()->GetOrderCounter(); // movement counter
GetSession()->SendPacket(&data);
+ GetSession()->IncrementOrderCounter();
}
/* Preconditions:
@@ -4485,10 +4485,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)
@@ -4525,7 +4525,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;
@@ -4589,7 +4589,7 @@ void Player::KillPlayer()
if (IsFlying() && !GetTransport())
GetMotionMaster()->MoveFall();
- SetMovement(MOVE_ROOT);
+ SendMoveRoot(true);
StopMirrorTimers(); //disable timers(bars)
@@ -4616,7 +4616,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);
@@ -9014,7 +9014,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();
@@ -9035,7 +9035,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
@@ -9129,7 +9129,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)
@@ -11698,16 +11698,56 @@ 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 (HasRootAura())
+ if (IsImmobilizedState())
+ {
+ auto const counter = GetSession()->GetOrderCounter();
+ setCompoundState << uint8(2 + GetPackGUID().size() + 4);
+ setCompoundState << uint16(SMSG_FORCE_MOVE_ROOT);
+ setCompoundState << GetPackGUID();
+ setCompoundState << uint32(counter);
+ GetSession()->IncrementOrderCounter();
+ }
+
+ if (HasAuraType(SPELL_AURA_FEATHER_FALL))
+ {
+ auto const counter = GetSession()->GetOrderCounter();
+ setCompoundState << uint8(2 + GetPackGUID().size() + 4);
+ setCompoundState << uint16(SMSG_MOVE_FEATHER_FALL);
+ setCompoundState << GetPackGUID();
+ setCompoundState << uint32(counter);
+ GetSession()->IncrementOrderCounter();
+ }
+
+ if (HasAuraType(SPELL_AURA_WATER_WALK))
{
- WorldPacket data2(SMSG_FORCE_MOVE_ROOT, 10);
- data2 << GetPackGUID();
- data2 << (uint32)2;
- SendMessageToSet(&data2, true);
+ auto const counter = GetSession()->GetOrderCounter();
+ setCompoundState << uint8(2 + GetPackGUID().size() + 4);
+ setCompoundState << uint16(SMSG_MOVE_WATER_WALK);
+ setCompoundState << GetPackGUID();
+ setCompoundState << uint32(counter);
+ GetSession()->IncrementOrderCounter();
+ }
+
+ if (HasAuraType(SPELL_AURA_HOVER))
+ {
+ auto const counter = GetSession()->GetOrderCounter();
+ setCompoundState << uint8(2 + GetPackGUID().size() + 4);
+ setCompoundState << uint16(SMSG_MOVE_SET_HOVER);
+ setCompoundState << GetPackGUID();
+ setCompoundState << uint32(counter);
+ GetSession()->IncrementOrderCounter();
+ }
+
+ // TODO: Pending mount protocol
+
+ if (setCompoundState.size() > 4)
+ {
+ setCompoundState.put<uint32>(0, setCompoundState.size() - 4);
+ SendDirectMessage(&setCompoundState);
}
SendEnchantmentDurations(); // must be after add to map
@@ -14325,6 +14365,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))
@@ -14332,9 +14439,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;
}
@@ -15270,7 +15379,7 @@ void Player::ActivateSpec(uint8 spec)
if (!HasTalent(46917, GetActiveSpec()) && m_canTitanGrip)
SetCanTitanGrip(false);
// xinef: remove dual wield if player does not have dual wield spell (shamans)
- if (!HasSpell(674) && m_canDualWield)
+ if (!HasSpell(674) && CanDualWield())
SetCanDualWield(false);
AutoUnequipOffhandIfNeed();
@@ -15932,8 +16041,9 @@ bool Player::SetDisableGravity(bool disable, bool packetOnly /*= false*/, bool /
WorldPacket data(disable ? SMSG_MOVE_GRAVITY_DISABLE : SMSG_MOVE_GRAVITY_ENABLE, 12);
data << GetPackGUID();
- data << uint32(0); //! movement counter
+ data << GetSession()->GetOrderCounter(); // movement counter
SendDirectMessage(&data);
+ GetSession()->IncrementOrderCounter();
data.Initialize(MSG_MOVE_GRAVITY_CHNG, 64);
data << GetPackGUID();
@@ -15942,91 +16052,6 @@ bool Player::SetDisableGravity(bool disable, bool packetOnly /*= false*/, bool /
return true;
}
-bool Player::SetCanFly(bool apply, bool packetOnly /*= false*/)
-{
- sScriptMgr->AnticheatSetCanFlybyServer(this, apply);
-
- if (!packetOnly && !Unit::SetCanFly(apply))
- return false;
-
- if (!apply)
- SetFallInformation(GameTime::GetGameTime().count(), GetPositionZ());
-
- WorldPacket data(apply ? SMSG_MOVE_SET_CAN_FLY : SMSG_MOVE_UNSET_CAN_FLY, 12);
- data << GetPackGUID();
- data << uint32(0); //! movement counter
- SendDirectMessage(&data);
-
- data.Initialize(MSG_MOVE_UPDATE_CAN_FLY, 64);
- data << GetPackGUID();
- BuildMovementPacket(&data);
- SendMessageToSet(&data, false);
- return true;
-}
-
-bool Player::SetHover(bool apply, bool packetOnly /*= false*/, bool /*updateAnimationTier = true*/)
-{
- // moved inside, flag can be removed on landing and wont send appropriate packet to client when aura is removed
- if (!packetOnly /* && !Unit::SetHover(apply)*/)
- {
- Unit::SetHover(apply);
- // return false;
- }
-
- WorldPacket data(apply ? SMSG_MOVE_SET_HOVER : SMSG_MOVE_UNSET_HOVER, 12);
- data << GetPackGUID();
- data << uint32(0); //! movement counter
- SendDirectMessage(&data);
-
- data.Initialize(MSG_MOVE_HOVER, 64);
- data << GetPackGUID();
- BuildMovementPacket(&data);
- SendMessageToSet(&data, false);
- return true;
-}
-
-bool Player::SetWaterWalking(bool apply, bool packetOnly /*= false*/)
-{
- // moved inside, flag can be removed on landing and wont send appropriate packet to client when aura is removed
- if (!packetOnly /* && !Unit::SetWaterWalking(apply)*/)
- {
- Unit::SetWaterWalking(apply);
- // return false;
- }
-
- WorldPacket data(apply ? SMSG_MOVE_WATER_WALK : SMSG_MOVE_LAND_WALK, 12);
- data << GetPackGUID();
- data << uint32(0); //! movement counter
- SendDirectMessage(&data);
-
- data.Initialize(MSG_MOVE_WATER_WALK, 64);
- data << GetPackGUID();
- BuildMovementPacket(&data);
- SendMessageToSet(&data, false);
- return true;
-}
-
-bool Player::SetFeatherFall(bool apply, bool packetOnly /*= false*/)
-{
- // Xinef: moved inside, flag can be removed on landing and wont send appropriate packet to client when aura is removed
- if (!packetOnly/* && !Unit::SetFeatherFall(apply)*/)
- {
- Unit::SetFeatherFall(apply);
- //return false;
- }
-
- WorldPacket data(apply ? SMSG_MOVE_FEATHER_FALL : SMSG_MOVE_NORMAL_FALL, 12);
- data << GetPackGUID();
- data << uint32(0); //! movement counter
- SendDirectMessage(&data);
-
- data.Initialize(MSG_MOVE_FEATHER_FALL, 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 c8dd9fc7ab..ef7ca602d9 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();
@@ -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();
@@ -2549,7 +2549,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;
@@ -2564,13 +2566,10 @@ public:
void RemoveFromWhisperWhiteList(ObjectGuid guid) { WhisperList.remove(guid); }
bool SetDisableGravity(bool disable, bool packetOnly = false, bool updateAnimationTier = true) override;
- bool SetCanFly(bool apply, bool packetOnly = false) override;
- bool SetWaterWalking(bool apply, bool packetOnly = false) override;
- bool SetFeatherFall(bool apply, bool packetOnly = false) override;
- bool SetHover(bool enable, 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); }
// saving
void AdditionalSavingAddMask(uint8 mask) { m_additionalSaveTimer = 2000; m_additionalSaveMask |= mask; }
diff --git a/src/server/game/Entities/Player/PlayerQuest.cpp b/src/server/game/Entities/Player/PlayerQuest.cpp
index 9f663ff2fa..a8307c7887 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);
diff --git a/src/server/game/Entities/Player/PlayerStorage.cpp b/src/server/game/Entities/Player/PlayerStorage.cpp
index d45533ad63..a932af812d 100644
--- a/src/server/game/Entities/Player/PlayerStorage.cpp
+++ b/src/server/game/Entities/Player/PlayerStorage.cpp
@@ -6833,7 +6833,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/SocialMgr.cpp b/src/server/game/Entities/Player/SocialMgr.cpp
index d5b5fdf59a..8ace058736 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
@@ -176,7 +176,7 @@ void PlayerSocial::SendSocialList(Player* player, uint32 flags)
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);
@@ -316,7 +316,7 @@ void SocialMgr::BroadcastToFriendListers(Player* player, WorldPacket* 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 7963773799..54b9148330 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -242,9 +242,7 @@ Unit::Unit() : WorldObject(),
m_modAttackSpeedPct[OFF_ATTACK] = 1.0f;
m_modAttackSpeedPct[RANGED_ATTACK] = 1.0f;
- m_canDualWield = false;
-
- m_rootTimes = 0;
+ _dualWieldMode = DualWieldMode::AUTO;
m_state = 0;
m_deathState = DeathState::Alive;
@@ -868,6 +866,9 @@ uint32 Unit::DealDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage
// interrupting auras with AURA_INTERRUPT_FLAG_DAMAGE before checking !damage (absorbed damage breaks that type of auras)
if (spellProto)
{
+ if (attacker && damagetype != DOT && spellProto->DmgClass == SPELL_DAMAGE_CLASS_MELEE && !(spellProto->GetSchoolMask() & SPELL_SCHOOL_MASK_HOLY))
+ attacker->DealDamageShieldDamage(victim);
+
if (!spellProto->HasAttribute(SPELL_ATTR4_REACTIVE_DAMAGE_PROC))
victim->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TAKE_DAMAGE, spellProto->Id);
}
@@ -1085,12 +1086,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);
}
@@ -1975,57 +1974,60 @@ void Unit::DealMeleeDamage(CalcDamageInfo* damageInfo, bool durabilityLoss)
// Do effect if any damage done to target
if (damageInfo->damages[0].damage + damageInfo->damages[1].damage)
+ DealDamageShieldDamage(victim);
+}
+
+void Unit::DealDamageShieldDamage(Unit* victim)
+{
+ // We're going to call functions which can modify content of the list during iteration over it's elements
+ // Let's copy the list so we can prevent iterator invalidation
+ AuraEffectList vDamageShieldsCopy(victim->GetAuraEffectsByType(SPELL_AURA_DAMAGE_SHIELD));
+ for (AuraEffectList::const_iterator dmgShieldItr = vDamageShieldsCopy.begin(); dmgShieldItr != vDamageShieldsCopy.end(); ++dmgShieldItr)
{
- // We're going to call functions which can modify content of the list during iteration over it's elements
- // Let's copy the list so we can prevent iterator invalidation
- AuraEffectList vDamageShieldsCopy(victim->GetAuraEffectsByType(SPELL_AURA_DAMAGE_SHIELD));
- for (AuraEffectList::const_iterator dmgShieldItr = vDamageShieldsCopy.begin(); dmgShieldItr != vDamageShieldsCopy.end(); ++dmgShieldItr)
+ SpellInfo const* i_spellProto = (*dmgShieldItr)->GetSpellInfo();
+ // Damage shield can be resisted...
+ if (SpellMissInfo missInfo = victim->SpellHitResult(this, i_spellProto, false))
{
- SpellInfo const* i_spellProto = (*dmgShieldItr)->GetSpellInfo();
- // Damage shield can be resisted...
- if (SpellMissInfo missInfo = victim->SpellHitResult(this, i_spellProto, false))
- {
- victim->SendSpellMiss(this, i_spellProto->Id, missInfo);
- continue;
- }
+ victim->SendSpellMiss(this, i_spellProto->Id, missInfo);
+ continue;
+ }
- // ...or immuned
- if (IsImmunedToDamageOrSchool(i_spellProto))
- {
- victim->SendSpellDamageImmune(this, i_spellProto->Id);
- continue;
- }
+ // ...or immuned
+ if (IsImmunedToDamageOrSchool(i_spellProto))
+ {
+ victim->SendSpellDamageImmune(this, i_spellProto->Id);
+ continue;
+ }
- uint32 damage = uint32(std::max(0, (*dmgShieldItr)->GetAmount())); // xinef: done calculated at amount calculation
+ uint32 damage = uint32(std::max(0, (*dmgShieldItr)->GetAmount())); // xinef: done calculated at amount calculation
- if (Unit* caster = (*dmgShieldItr)->GetCaster())
- {
- damage = caster->SpellDamageBonusDone(this, i_spellProto, damage, SPELL_DIRECT_DAMAGE, (*dmgShieldItr)->GetEffIndex());
- damage = this->SpellDamageBonusTaken(caster, i_spellProto, damage, SPELL_DIRECT_DAMAGE);
- }
+ if (Unit* caster = (*dmgShieldItr)->GetCaster())
+ {
+ damage = caster->SpellDamageBonusDone(this, i_spellProto, damage, SPELL_DIRECT_DAMAGE, (*dmgShieldItr)->GetEffIndex());
+ damage = this->SpellDamageBonusTaken(caster, i_spellProto, damage, SPELL_DIRECT_DAMAGE);
+ }
- uint32 absorb = 0;
+ uint32 absorb = 0;
- DamageInfo dmgInfo(victim, this, damage, i_spellProto, i_spellProto->GetSchoolMask(), SPELL_DIRECT_DAMAGE);
- Unit::CalcAbsorbResist(dmgInfo);
- absorb = dmgInfo.GetAbsorb();
- damage = dmgInfo.GetDamage();
+ DamageInfo dmgInfo(victim, this, damage, i_spellProto, i_spellProto->GetSchoolMask(), SPELL_DIRECT_DAMAGE);
+ Unit::CalcAbsorbResist(dmgInfo);
+ absorb = dmgInfo.GetAbsorb();
+ damage = dmgInfo.GetDamage();
- Unit::DealDamageMods(this, damage, &absorb);
+ Unit::DealDamageMods(this, damage, &absorb);
- /// @todo: Move this to a packet handler
- WorldPacket data(SMSG_SPELLDAMAGESHIELD, (8 + 8 + 4 + 4 + 4 + 4));
- data << victim->GetGUID();
- data << GetGUID();
- data << uint32(i_spellProto->Id);
- data << uint32(damage); // Damage
- int32 overkill = int32(damage) - int32(GetHealth());
- data << uint32(overkill > 0 ? overkill : 0); // Overkill
- data << uint32(i_spellProto->GetSchoolMask());
- victim->SendMessageToSet(&data, true);
+ /// @todo: Move this to a packet handler
+ WorldPacket data(SMSG_SPELLDAMAGESHIELD, (8 + 8 + 4 + 4 + 4 + 4));
+ data << victim->GetGUID();
+ data << GetGUID();
+ data << uint32(i_spellProto->Id);
+ data << uint32(damage); // Damage
+ int32 overkill = int32(damage) - int32(GetHealth());
+ data << uint32(overkill > 0 ? overkill : 0); // Overkill
+ data << uint32(i_spellProto->GetSchoolMask());
+ victim->SendMessageToSet(&data, true);
- Unit::DealDamage(victim, this, damage, 0, SPELL_DIRECT_DAMAGE, i_spellProto->GetSchoolMask(), i_spellProto, true);
- }
+ Unit::DealDamage(victim, this, damage, 0, SPELL_DIRECT_DAMAGE, i_spellProto->GetSchoolMask(), i_spellProto, true);
}
}
@@ -4332,10 +4334,10 @@ void Unit::ProcessTerrainStatusUpdate()
LiquidData const& liquidData = GetLiquidData();
- // remove appropriate auras if we are swimming/not swimming respectively
- if (liquidData.Status & MAP_LIQUID_STATUS_SWIMMING)
+ // remove appropriate auras if we are swimming/not swimming respectively - exact mirror of client logic
+ if (liquidData.Status & MAP_LIQUID_STATUS_SWIMMING && (liquidData.Level - GetPositionZ()) > GetCollisionHeight() * 0.75f) // Shallow water at ~75% of collision height)
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_NOT_ABOVEWATER);
- else if (!isSwimming())
+ else
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_NOT_UNDERWATER);
// liquid aura handling
@@ -9285,28 +9287,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
@@ -11091,7 +11071,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))
{
@@ -13607,9 +13587,10 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
WorldPacket data(SMSG_MOVE_SET_COLLISION_HGT, GetPackGUID().size() + 4 + 4);
data << GetPackGUID();
- data << uint32(GameTime::GetGameTime().count()); // Packet counter
+ data << player->GetSession()->GetOrderCounter(); // movement counter
data << player->GetCollisionHeight();
player->GetSession()->SendPacket(&data);
+ player->GetSession()->IncrementOrderCounter();
}
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_MOUNT);
@@ -13623,13 +13604,14 @@ void Unit::Dismount()
SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0);
RemoveUnitFlag(UNIT_FLAG_MOUNT);
- if (Player* thisPlayer = ToPlayer())
+ if (Player* player = ToPlayer())
{
WorldPacket data(SMSG_MOVE_SET_COLLISION_HGT, GetPackGUID().size() + 4 + 4);
data << GetPackGUID();
- data << uint32(GameTime::GetGameTime().count()); // Packet counter
- data << thisPlayer->GetCollisionHeight();
- thisPlayer->GetSession()->SendPacket(&data);
+ data << player->GetSession()->GetOrderCounter(); // movement counter
+ data << player->GetCollisionHeight();
+ player->GetSession()->SendPacket(&data);
+ player->GetSession()->IncrementOrderCounter();
}
WorldPacket data(SMSG_DISMOUNT, 8);
@@ -14643,11 +14625,13 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
return;
}
data << GetPackGUID();
- data << (uint32)0; // moveEvent, NUM_PMOVE_EVTS = 0x39
+ 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();
}
}
@@ -16806,6 +16790,15 @@ bool Unit::IsStandState() const
return !IsSitState() && s != UNIT_STAND_STATE_SLEEP && s != UNIT_STAND_STATE_KNEEL;
}
+bool Unit::IsStandUpOnMovementState() const
+{
+ uint8 s = getStandState();
+ return
+ s == UNIT_STAND_STATE_SIT_CHAIR || s == UNIT_STAND_STATE_SIT_LOW_CHAIR ||
+ s == UNIT_STAND_STATE_SIT_MEDIUM_CHAIR || s == UNIT_STAND_STATE_SIT_HIGH_CHAIR ||
+ s == UNIT_STAND_STATE_SIT || s == UNIT_STAND_STATE_SLEEP;
+}
+
void Unit::SetStandState(uint8 state)
{
SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_STAND_STATE, state);
@@ -18298,74 +18291,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)
{
- if (m_rootTimes > 0) // blizzard internal check?
- m_rootTimes++;
+ AddUnitState(state);
- // 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);
+ SendMoveRoot(true);
+ }
+ else
+ {
+ ClearUnitState(state);
- if (IsFalling())
- {
- AddUnitMovementFlag(MOVEMENTFLAG_PENDING_ROOT);
- }
- else
- {
- AddUnitMovementFlag(MOVEMENTFLAG_ROOT);
- }
+ // Prevent giving ability to move if more immobilizers are active
+ if (!IsImmobilizedState())
+ SendMoveRoot(false);
+ }
+}
- // Creature specific
- if (!IsPlayer())
- {
- if (isStun && movespline->Finalized())
- {
- StopMovingOnCurrentPos();
- }
- else
- {
- StopMoving();
- }
- }
+void Unit::SendMoveRoot(bool apply)
+{
+ const Player* client = GetClientControlling();
- if (m_movedByPlayer)
+ // 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_rootTimes;
- m_movedByPlayer->ToPlayer()->SendDirectMessage(&data);
+ 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);
+ auto 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_rootTimes;
- m_movedByPlayer->ToPlayer()->SendDirectMessage(&data);
- }
- 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();
}
}
@@ -19261,16 +19245,14 @@ void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ)
WorldPacket data(SMSG_MOVE_KNOCK_BACK, (8 + 4 + 4 + 4 + 4 + 4));
data << GetPackGUID();
- data << uint32(0); // counter
+ data << player->GetSession()->GetOrderCounter(); // movement counter
data << float(vcos); // x direction
data << float(vsin); // y direction
data << float(speedXY); // Horizontal speed
data << float(-speedZ); // Z Movement speed (vertical)
player->GetSession()->SendPacket(&data);
-
- if (player->HasIncreaseMountedFlightSpeedAura() || player->HasFlyAura())
- player->SetCanFly(true, true);
+ player->GetSession()->IncrementOrderCounter();
player->SetCanKnockback(true);
}
@@ -19590,7 +19572,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);
@@ -19697,7 +19679,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
@@ -19717,7 +19699,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)
@@ -20104,7 +20086,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))
@@ -20133,24 +20115,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;
@@ -20376,7 +20340,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())
@@ -20387,24 +20351,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)
@@ -20464,98 +20424,186 @@ bool Unit::SetSwim(bool enable)
*
* Doesn't inform the client.
*/
-bool Unit::SetCanFly(bool enable, bool /*packetOnly = false */)
+void Unit::SetCanFly(bool enable)
{
- if (enable == HasUnitMovementFlag(MOVEMENTFLAG_CAN_FLY))
- return false;
+ bool isClientControlled = IsClientControlled();
- if (enable)
+ if (!isClientControlled)
{
- AddUnitMovementFlag(MOVEMENTFLAG_CAN_FLY);
- RemoveUnitMovementFlag(MOVEMENTFLAG_FALLING);
+ if (enable)
+ m_movementInfo.AddMovementFlag(MOVEMENTFLAG_CAN_FLY);
+ else
+ m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_CAN_FLY);
}
- else
+
+ if (!IsInWorld()) // is sent on add to map
+ return;
+
+ if (isClientControlled)
{
- RemoveUnitMovementFlag(MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_MASK_MOVING_FLY);
+ if (Player const* player = GetClientControlling())
+ {
+ auto const counter = player->GetSession()->GetOrderCounter();
+
+ 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->GetSession()->IncrementOrderCounter();
+ return;
+ }
}
- return true;
+ WorldPacket data(enable ? SMSG_SPLINE_MOVE_SET_FLYING : SMSG_SPLINE_MOVE_UNSET_FLYING, 9);
+ data << GetPackGUID();
+ SendMessageToSet(&data, true);
}
-/**
- * @brief Allow to walk on water. Doesn't inform the client.
- * Need to use SendMovementWaterWalking() if it's for players.
- */
-bool Unit::SetWaterWalking(bool enable, bool /*packetOnly = false*/)
+void Unit::SetFeatherFall(bool enable)
{
- if (enable == HasUnitMovementFlag(MOVEMENTFLAG_WATERWALKING))
- return false;
-
- if (enable)
- AddUnitMovementFlag(MOVEMENTFLAG_WATERWALKING);
- else
- RemoveUnitMovementFlag(MOVEMENTFLAG_WATERWALKING);
+ bool isClientControlled = IsClientControlled();
- return true;
-}
+ if (!isClientControlled)
+ {
+ if (enable)
+ m_movementInfo.AddMovementFlag(MOVEMENTFLAG_FALLING_SLOW);
+ else
+ m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_FALLING_SLOW);
+ }
-void Unit::SendMovementWaterWalking(Player* sendTo)
-{
- if (!movespline->Initialized())
+ if (!IsInWorld()) // is sent on add to map
return;
- WorldPacket data(SMSG_SPLINE_MOVE_WATER_WALK, 9);
+
+ if (isClientControlled)
+ {
+ if (Player const* player = GetClientControlling())
+ {
+ auto 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->GetSession()->IncrementOrderCounter();
+
+ // start fall from current height
+ if (!enable)
+ const_cast<Player*>(player)->SetFallInformation(0, GetPositionZ());
+
+ return;
+ }
+ }
+
+ WorldPacket data(enable ? SMSG_SPLINE_MOVE_FEATHER_FALL : SMSG_SPLINE_MOVE_NORMAL_FALL);
data << GetPackGUID();
- sendTo->SendDirectMessage(&data);
+ SendMessageToSet(&data, true);
}
-bool Unit::SetFeatherFall(bool enable, bool /*packetOnly = false*/)
+void Unit::SetHover(bool enable)
{
- if (enable == HasUnitMovementFlag(MOVEMENTFLAG_FALLING_SLOW))
- return false;
+ bool isClientControlled = IsClientControlled();
+
+ if (!isClientControlled)
+ {
+ if (enable)
+ m_movementInfo.AddMovementFlag(MOVEMENTFLAG_HOVER);
+ else
+ m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_HOVER);
+ }
+
+ float hoverHeight = GetHoverHeight();
if (enable)
- AddUnitMovementFlag(MOVEMENTFLAG_FALLING_SLOW);
+ {
+ if (hoverHeight && GetPositionZ() - GetMap()->GetHeight(GetPhaseMask(), GetPositionX(), GetPositionY(), GetPositionZ()) < hoverHeight)
+ Relocate(GetPositionX(), GetPositionY(), GetPositionZ() + hoverHeight);
+ }
else
- RemoveUnitMovementFlag(MOVEMENTFLAG_FALLING_SLOW);
-
- return true;
-}
+ {
+ if (IsAlive() || !IsUnit())
+ {
+ float newZ = std::max<float>(GetMap()->GetHeight(GetPhaseMask(), GetPositionX(), GetPositionY(), GetPositionZ()), GetPositionZ() - hoverHeight);
+ UpdateAllowedPositionZ(GetPositionX(), GetPositionY(), newZ);
+ Relocate(GetPositionX(), GetPositionY(), newZ);
+ }
+ }
-void Unit::SendMovementFeatherFall(Player* sendTo)
-{
- if (!movespline->Initialized())
+ if (!IsInWorld()) // is sent on add to map
return;
- WorldPacket data(SMSG_SPLINE_MOVE_FEATHER_FALL, 9);
+
+ if (isClientControlled)
+ {
+ if (Player const* player = GetClientControlling())
+ {
+ WorldPacket data(enable ? SMSG_MOVE_SET_HOVER : SMSG_MOVE_UNSET_HOVER, GetPackGUID().size() + 4);
+
+ auto const counter = player->GetSession()->GetOrderCounter();
+
+ data << GetPackGUID();
+ data << counter;
+ player->GetSession()->SendPacket(&data);
+ player->GetSession()->IncrementOrderCounter();
+ return;
+ }
+ }
+
+ WorldPacket data(enable ? SMSG_SPLINE_MOVE_SET_HOVER : SMSG_SPLINE_MOVE_UNSET_HOVER, 9);
data << GetPackGUID();
- sendTo->SendDirectMessage(&data);
+ SendMessageToSet(&data, true);
}
-bool Unit::SetHover(bool enable, bool /*packetOnly = false*/, bool /*updateAnimationTier = true*/)
+void Unit::SetWaterWalking(bool enable)
{
- if (enable == HasUnitMovementFlag(MOVEMENTFLAG_HOVER))
- return false;
+ bool isClientControlled = IsClientControlled();
- float hoverHeight = GetFloatValue(UNIT_FIELD_HOVERHEIGHT);
-
- if (enable)
+ if (!isClientControlled)
{
- AddUnitMovementFlag(MOVEMENTFLAG_HOVER);
- if (hoverHeight && GetPositionZ() - GetFloorZ() < hoverHeight)
- UpdateHeight(GetPositionZ() + hoverHeight);
+ if (enable)
+ m_movementInfo.AddMovementFlag(MOVEMENTFLAG_WATERWALKING);
+ else
+ m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_WATERWALKING);
}
- else
+
+ if (!IsInWorld()) // is sent on add to map
+ return;
+
+ if (isClientControlled)
{
- RemoveUnitMovementFlag(MOVEMENTFLAG_HOVER);
- if (hoverHeight && (!isDying() || !IsCreature()))
+ if (Player const* player = GetClientControlling())
{
- float newZ = std::max<float>(GetFloorZ(), GetPositionZ() - hoverHeight);
- UpdateAllowedPositionZ(GetPositionX(), GetPositionY(), newZ);
- UpdateHeight(newZ);
+ auto 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->GetSession()->IncrementOrderCounter();
+ return;
}
- SendMovementFlagUpdate(); // pussywizard: needed for falling after death (instead of falling onto air at hover height)
}
- return true;
+ WorldPacket data(enable ? SMSG_SPLINE_MOVE_WATER_WALK : SMSG_SPLINE_MOVE_LAND_WALK, 9);
+ data << GetPackGUID();
+ SendMessageToSet(&data, true);
+}
+
+void Unit::SendMovementWaterWalking(Player* sendTo)
+{
+ if (!movespline->Initialized())
+ return;
+ WorldPacket data(SMSG_SPLINE_MOVE_WATER_WALK, 9);
+ data << GetPackGUID();
+ sendTo->SendDirectMessage(&data);
+}
+
+void Unit::SendMovementFeatherFall(Player* sendTo)
+{
+ if (!movespline->Initialized())
+ return;
+ WorldPacket data(SMSG_SPLINE_MOVE_FEATHER_FALL, 9);
+ data << GetPackGUID();
+ sendTo->SendDirectMessage(&data);
}
void Unit::SendMovementHover(Player* sendTo)
@@ -20719,7 +20767,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;
@@ -21203,3 +21254,58 @@ std::string Unit::GetDebugInfo() const
<< " Class: " << std::to_string(getClass());
return sstr.str();
}
+
+bool Unit::IsClientControlled(Player const* exactClient /*= nullptr*/) const
+{
+ // Severvide method to check if unit is client controlled (optionally check for specific client in control)
+
+ // Applies only to player controlled units
+ if (!HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED))
+ return false;
+
+ // These flags are meant to be used when server controls this unit, client control is taken away
+ if (HasFlag(UNIT_FIELD_FLAGS, (UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_CONFUSED | UNIT_FLAG_FLEEING)))
+ return false;
+
+ // If unit is possessed, it has lost original control...
+ if (ObjectGuid const& guid = GetCharmerGUID())
+ {
+ // ... but if it is a possessing charm, then we have to check if some other player controls it
+ if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_POSSESSED) && guid.IsPlayer())
+ return (exactClient ? (exactClient->GetGUID() == guid) : true);
+ return false;
+ }
+
+ // By default: players have client control over themselves
+ if (IsPlayer())
+ return (exactClient ? (exactClient == this) : true);
+ return false;
+}
+
+Player const* Unit::GetClientControlling() const
+{
+ // Serverside reverse "mover" deduction logic at controlled unit
+
+ // Applies only to player controlled units
+ if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED))
+ {
+ // Charm always removes control from original client...
+ if (GetCharmerGUID())
+ {
+ // ... but if it is a possessing charm, some other client may have control
+ if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_POSSESSED))
+ {
+ Unit const* charmer = GetCharmer();
+ if (charmer && charmer->IsPlayer())
+ return static_cast<Player const*>(charmer);
+ }
+ }
+ else if (IsPlayer())
+ {
+ // Check if anything prevents original client from controlling
+ if (IsClientControlled(static_cast<Player const*>(this)))
+ return static_cast<Player const*>(this);
+ }
+ }
+ return nullptr;
+}
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 2fcccdb905..f2fe6bb353 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -567,6 +567,13 @@ enum class SearchMethod
typedef std::list<Player*> SharedVisionList;
+enum class DualWieldMode : uint8
+{
+ AUTO = 0, // non-player units must have a valid offhand weapon to enable dual wield
+ DISABLED = 1,
+ ENABLED = 2,
+};
+
struct AttackPosition {
AttackPosition(Position pos) : _pos(std::move(pos)), _taken(false) {}
bool operator==(const int val)
@@ -737,6 +744,7 @@ public:
void SetExtraUnitMovementFlags(uint16 f) { m_movementInfo.flags2 = f; }
inline bool IsCrowdControlled() const { return HasFlag(UNIT_FIELD_FLAGS, (UNIT_FLAG_CONFUSED | UNIT_FLAG_FLEEING | UNIT_FLAG_STUNNED)); }
+ inline bool IsImmobilizedState() const { return HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED); }
/*********************************************************/
/*** UNIT TYPES, CLASSES, RACES... ***/
@@ -819,6 +827,11 @@ public:
bool IsValidAssistTarget(Unit const* target) const;
bool _IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) const;
+ // Client controlled: check if unit currently is under client control (has active "mover"), optionally check for specific client (server-side)
+ bool IsClientControlled(Player const* exactClient = nullptr) const;
+ // Controlling client: server PoV on which client (player) controls movement of the unit at the moment, obtain "mover" (server-side)
+ Player const* GetClientControlling() const;
+
// Combat range
[[nodiscard]] float GetBoundaryRadius() const { return m_floatValues[UNIT_FIELD_BOUNDINGRADIUS]; }
[[nodiscard]] float GetCombatReach() const override { return m_floatValues[UNIT_FIELD_COMBATREACH]; }
@@ -917,8 +930,9 @@ public:
// Weapons systems
[[nodiscard]] bool haveOffhandWeapon() const;
- [[nodiscard]] bool CanDualWield() const { return m_canDualWield; }
- virtual void SetCanDualWield(bool value) { m_canDualWield = value; }
+ [[nodiscard]] bool CanDualWield() const { return _dualWieldMode == DualWieldMode::ENABLED; }
+ virtual void SetCanDualWield(bool value) { _dualWieldMode = value ? DualWieldMode::ENABLED : DualWieldMode::DISABLED; }
+ virtual void SetDualWieldMode(DualWieldMode mode) { _dualWieldMode = mode; }
virtual bool HasWeapon(WeaponAttackType type) const = 0;
inline bool HasMainhandWeapon() const { return HasWeapon(BASE_ATTACK); }
@@ -1157,6 +1171,7 @@ public:
static uint32 DealDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage const* cleanDamage = nullptr, DamageEffectType damagetype = DIRECT_DAMAGE, SpellSchoolMask damageSchoolMask = SPELL_SCHOOL_MASK_NORMAL, SpellInfo const* spellProto = nullptr, bool durabilityLoss = true, bool allowGM = false, Spell const* spell = nullptr);
void DealMeleeDamage(CalcDamageInfo* damageInfo, bool durabilityLoss);
void DealSpellDamage(SpellNonMeleeDamage* damageInfo, bool durabilityLoss, Spell const* spell = nullptr);
+ void DealDamageShieldDamage(Unit* victim);
static void DealDamageMods(Unit const* victim, uint32& damage, uint32* absorb);
static void Kill(Unit* killer, Unit* victim, bool durabilityLoss = true, WeaponAttackType attackType = BASE_ATTACK, SpellInfo const* spellProto = nullptr, Spell const* spell = nullptr);
@@ -1629,6 +1644,7 @@ public:
[[nodiscard]] virtual bool CanFly() const = 0;
[[nodiscard]] bool IsFlying() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_FLYING | MOVEMENTFLAG_DISABLE_GRAVITY); }
[[nodiscard]] bool IsFalling() const;
+ [[nodiscard]] bool IsRooted() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_ROOT); }
[[nodiscard]] float GetHoverHeight() const { return IsHovering() ? GetFloatValue(UNIT_FIELD_HOVERHEIGHT) : 0.0f; }
@@ -1661,17 +1677,15 @@ 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);
virtual bool SetSwim(bool enable);
- virtual bool SetCanFly(bool enable, bool packetOnly = false);
- virtual bool SetWaterWalking(bool enable, bool packetOnly = false);
- virtual bool SetFeatherFall(bool enable, bool packetOnly = false);
- virtual bool SetHover(bool enable, bool packetOnly = false, bool updateAnimationTier = true);
+ void SetCanFly(bool enable);
+ void SetWaterWalking(bool enable);
+ void SetFeatherFall(bool enable);
+ void SetHover(bool enable);
MotionMaster* GetMotionMaster() { return i_motionMaster; }
[[nodiscard]] const MotionMaster* GetMotionMaster() const { return i_motionMaster; }
@@ -1698,6 +1712,7 @@ public:
[[nodiscard]] uint8 getStandState() const { return GetByteValue(UNIT_FIELD_BYTES_1, 0); }
[[nodiscard]] bool IsSitState() const;
[[nodiscard]] bool IsStandState() const;
+ [[nodiscard]] bool IsStandUpOnMovementState() const;
void SetStandState(uint8 state);
void SetStandFlags(uint8 flags) { SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_VIS_FLAG, flags); }
@@ -1904,8 +1919,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;
@@ -1988,7 +2003,7 @@ public:
//----------- Public variables ----------//
uint32 m_extraAttacks;
- bool m_canDualWield;
+ DualWieldMode _dualWieldMode;
ControlSet m_Controlled;
@@ -2049,7 +2064,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;
@@ -2121,8 +2137,6 @@ protected:
bool m_applyResilience;
bool _instantCast;
- uint32 m_rootTimes;
-
private:
bool IsTriggeredAtSpellProcEvent(Unit* victim, Aura* aura, WeaponAttackType attType, bool isVictim, bool active, SpellProcEventEntry const*& spellProcEvent, ProcEventInfo const& eventInfo);
bool HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown, ProcEventInfo const& eventInfo);
diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h
index e6885fe162..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, // serverside only - should never be changed outside of core and hence shouldnt have a defined static value and be 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
@@ -412,6 +414,8 @@ enum MovementFlags
MOVEMENTFLAG_MASK_PLAYER_ONLY =
MOVEMENTFLAG_FLYING,
+ MOVEMENTFLAG_MASK_MOVING_OR_TURN = MOVEMENTFLAG_MASK_MOVING | MOVEMENTFLAG_MASK_TURNING,
+
/// Movement flags that have change status opcodes associated for players
MOVEMENTFLAG_MASK_HAS_PLAYER_STATUS_OPCODE = MOVEMENTFLAG_DISABLE_GRAVITY | MOVEMENTFLAG_ROOT |
MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_WATERWALKING | MOVEMENTFLAG_FALLING_SLOW | MOVEMENTFLAG_HOVER
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/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..ac7ab27834 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -1164,8 +1164,11 @@ 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);
+ }
pCurrChar->SendInitialPacketsBeforeAddToMap();
@@ -1754,9 +1757,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/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index 942eae9c54..03c91c298c 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);
@@ -949,12 +949,6 @@ void WorldSession::HandleNextCinematicCamera(WorldPacket& /*recv_data*/)
GetPlayer()->GetCinematicMgr()->BeginCinematic();
}
-void WorldSession::HandleFeatherFallAck(WorldPacket& recv_data)
-{
- // no used
- recv_data.rfinish(); // prevent warnings spam
-}
-
void WorldSession::HandleSetActionBarToggles(WorldPacket& recv_data)
{
uint8 ActionBar;
@@ -1144,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)
@@ -1519,12 +1486,13 @@ void WorldSession::HandleCancelMountAuraOpcode(WorldPacket& /*recv_data*/)
_player->RemoveAurasByType(SPELL_AURA_MOUNTED);
}
-void WorldSession::HandleMoveSetCanFlyAckOpcode(WorldPacket& recv_data)
+void WorldSession::HandleMoveFlagChangeOpcode(WorldPacket& recv_data)
{
- // fly mode on/off
- LOG_DEBUG("network", "WORLD: CMSG_MOVE_SET_CAN_FLY_ACK");
+ LOG_DEBUG("network", "WORLD: {}", GetOpcodeNameForLogging((Opcodes)recv_data.GetOpcode()));
ObjectGuid guid;
+ uint32 counter;
+ uint32 isApplied;
recv_data >> guid.ReadAsPacked();
if (!_player)
@@ -1533,17 +1501,42 @@ void WorldSession::HandleMoveSetCanFlyAckOpcode(WorldPacket& recv_data)
return;
}
- recv_data.read_skip<uint32>(); // unk
+ recv_data >> counter;
MovementInfo movementInfo;
movementInfo.guid = guid;
ReadMovementInfo(recv_data, &movementInfo);
- recv_data.read_skip<float>(); // unk2
+ recv_data >> isApplied;
sScriptMgr->AnticheatSetCanFlybyServer(_player, movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY));
- _player->m_mover->m_movementInfo.flags = movementInfo.GetMovementFlags();
+ Unit* mover = _player->m_mover;
+ Player* plrMover = mover->ToPlayer();
+
+ mover->m_movementInfo.flags = movementInfo.GetMovementFlags();
+
+ Opcodes response;
+
+ switch (recv_data.GetOpcode())
+ {
+ case CMSG_MOVE_HOVER_ACK: response = MSG_MOVE_HOVER; break;
+ 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;
+ 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);
}
void WorldSession::HandleRequestPetInfo(WorldPackets::Pet::RequestPetInfo& /*packet*/)
diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp
index 77b5bb43bd..6bf1b899b2 100644
--- a/src/server/game/Handlers/MovementHandler.cpp
+++ b/src/server/game/Handlers/MovementHandler.cpp
@@ -370,82 +370,44 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData)
movementInfo.guid = guid;
ReadMovementInfo(recvData, &movementInfo);
- // Stop emote on move
- if (Player* plrMover = mover->ToPlayer())
+ if (!ProcessMovementInfo(movementInfo, mover, plrMover, recvData))
{
- if (plrMover->GetUInt32Value(UNIT_NPC_EMOTESTATE) != EMOTE_ONESHOT_NONE && movementInfo.HasMovementFlag(MOVEMENTFLAG_MASK_MOVING))
- {
- plrMover->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
- }
- }
-
- if (!movementInfo.pos.IsPositionValid())
- {
- if (plrMover)
- {
- sScriptMgr->AnticheatUpdateMovementInfo(plrMover, movementInfo);
- }
-
recvData.rfinish(); // prevent warnings spam
return;
}
- if (!mover->movespline->Finalized())
- {
- recvData.rfinish(); // prevent warnings spam
- return;
- }
+ /* process position-change */
+ WorldPacket data(opcode, recvData.size());
+ movementInfo.guid = mover->GetGUID();
+ WriteMovementInfo(&data, &movementInfo);
+ mover->SendMessageToSet(&data, _player);
+}
- // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
- if (mover->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE))
+void WorldSession::SynchronizeMovement(MovementInfo& movementInfo)
+{
+ int64 movementTime = (int64)movementInfo.time + _timeSyncClockDelta;
+ if (_timeSyncClockDelta == 0 || movementTime < 0 || movementTime > 0xFFFFFFFF)
{
- // Xinef: skip moving packets
- if (movementInfo.HasMovementFlag(MOVEMENTFLAG_MASK_MOVING))
- {
- if (plrMover)
- {
- sScriptMgr->AnticheatUpdateMovementInfo(plrMover, movementInfo);
- }
- return;
- }
- movementInfo.pos.Relocate(mover->GetPositionX(), mover->GetPositionY(), mover->GetPositionZ());
-
- if (mover->IsCreature())
- {
- movementInfo.transport.guid = mover->m_movementInfo.transport.guid;
- movementInfo.transport.pos.Relocate(mover->m_movementInfo.transport.pos.GetPositionX(), mover->m_movementInfo.transport.pos.GetPositionY(), mover->m_movementInfo.transport.pos.GetPositionZ());
- movementInfo.transport.seat = mover->m_movementInfo.transport.seat;
- }
+ LOG_INFO("misc", "The computed movement time using clockDelta is erronous. Using fallback instead");
+ movementInfo.time = getMSTime();
}
-
- if (movementInfo.HasMovementFlag(MOVEMENTFLAG_ONTRANSPORT))
+ else
{
- // We were teleported, skip packets that were broadcast before teleport
- if (movementInfo.pos.GetExactDist2d(mover) > SIZE_OF_GRIDS)
- {
- if (plrMover)
- {
- sScriptMgr->AnticheatUpdateMovementInfo(plrMover, movementInfo);
- //LOG_INFO("anticheat", "MovementHandler:: 2 We were teleported, skip packets that were broadcast before teleport");
- }
- recvData.rfinish(); // prevent warnings spam
- return;
- }
+ movementInfo.time = (uint32)movementTime;
+ }
+}
- if (!Acore::IsValidMapCoord(movementInfo.pos.GetPositionX() + movementInfo.transport.pos.GetPositionX(), movementInfo.pos.GetPositionY() + movementInfo.transport.pos.GetPositionY(),
- movementInfo.pos.GetPositionZ() + movementInfo.transport.pos.GetPositionZ(), movementInfo.pos.GetOrientation() + movementInfo.transport.pos.GetOrientation()))
- {
- if (plrMover)
- {
- sScriptMgr->AnticheatUpdateMovementInfo(plrMover, movementInfo);
- }
+void WorldSession::HandleMoverRelocation(MovementInfo& movementInfo, Unit* mover)
+{
+ SynchronizeMovement(movementInfo);
- recvData.rfinish(); // prevent warnings spam
- return;
- }
+ mover->UpdatePosition(movementInfo.pos);
+ mover->m_movementInfo = movementInfo;
+ if (mover->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_ONTRANSPORT))
+ {
// if we boarded a transport, add us to it
- if (plrMover)
+ if (Player* plrMover = mover->ToPlayer())
{
if (!plrMover->GetTransport())
{
@@ -483,44 +445,92 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData)
}
}
}
- else if (plrMover && plrMover->GetTransport()) // if we were on a transport, leave
+ else if (mover->IsPlayer())
{
- sScriptMgr->AnticheatSetUnderACKmount(plrMover); // just for safe
+ if (Player* plrMover = mover->ToPlayer())
+ {
+ if (plrMover->GetTransport()) // if we were on a transport, leave
+ {
+ sScriptMgr->AnticheatSetUnderACKmount(plrMover); // just for safe
- plrMover->m_transport->RemovePassenger(plrMover);
- plrMover->m_transport = nullptr;
- movementInfo.transport.Reset();
+ plrMover->m_transport->RemovePassenger(plrMover);
+ plrMover->m_transport = nullptr;
+ movementInfo.transport.Reset();
+ }
+ }
}
- // fall damage generation (ignore in flight case that can be triggered also at lags in moment teleportation to another map).
- if (opcode == MSG_MOVE_FALL_LAND && plrMover && !plrMover->IsInFlight())
+ // Some vehicles allow the passenger to turn by himself
+ if (Vehicle* vehicle = mover->GetVehicle())
{
- plrMover->HandleFall(movementInfo);
-
- sScriptMgr->AnticheatSetJumpingbyOpcode(plrMover, false);
+ if (VehicleSeatEntry const* seat = vehicle->GetSeatForPassenger(mover))
+ {
+ if (seat->m_flags & VEHICLE_SEAT_FLAG_ALLOW_TURNING && movementInfo.pos.GetOrientation() != mover->GetOrientation())
+ {
+ mover->SetOrientation(movementInfo.pos.GetOrientation());
+ mover->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TURNING);
+ }
+ }
}
- // interrupt parachutes upon falling or landing in water
- if (opcode == MSG_MOVE_FALL_LAND || opcode == MSG_MOVE_START_SWIM)
+ if (Player* plrMover = mover->ToPlayer()) // nothing is charmed, or player charmed
{
- mover->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_LANDING); // Parachutes
+ if (plrMover->IsSitState() && (movementInfo.flags & (MOVEMENTFLAG_MASK_MOVING | MOVEMENTFLAG_MASK_TURNING)))
+ plrMover->SetStandState(UNIT_STAND_STATE_STAND);
- if (plrMover)
+ if (movementInfo.pos.GetPositionZ() < plrMover->GetMap()->GetMinHeight(movementInfo.pos.GetPositionX(), movementInfo.pos.GetPositionY()))
{
- sScriptMgr->AnticheatSetJumpingbyOpcode(plrMover, false);
+ if (!plrMover->GetBattleground() || !plrMover->GetBattleground()->HandlePlayerUnderMap(_player))
+ {
+ if (plrMover->IsAlive())
+ {
+ plrMover->SetPlayerFlag(PLAYER_FLAGS_IS_OUT_OF_BOUNDS);
+ plrMover->EnvironmentalDamage(DAMAGE_FALL_TO_VOID, GetPlayer()->GetMaxHealth());
+ // player can be alive if GM
+ if (plrMover->IsAlive())
+ plrMover->KillPlayer();
+ }
+ else if (!plrMover->HasPlayerFlag(PLAYER_FLAGS_IS_OUT_OF_BOUNDS))
+ {
+ GraveyardStruct const* grave = sGraveyard->GetClosestGraveyard(plrMover, plrMover->GetTeamId());
+ if (grave)
+ {
+ plrMover->TeleportTo(grave->Map, grave->x, grave->y, grave->z, plrMover->GetOrientation());
+ plrMover->Relocate(grave->x, grave->y, grave->z, plrMover->GetOrientation());
+ }
+ }
+ }
}
}
+}
- if (plrMover && ((movementInfo.flags & MOVEMENTFLAG_SWIMMING) != 0) != plrMover->IsInWater())
+bool WorldSession::VerifyMovementInfo(MovementInfo const& movementInfo, Player* plrMover, Unit* mover, Opcodes opcode) const
+{
+ if (!movementInfo.pos.IsPositionValid())
{
- // now client not include swimming flag in case jumping under water
- plrMover->SetInWater(!plrMover->IsInWater() || plrMover->GetMap()->IsUnderWater(plrMover->GetPhaseMask(), movementInfo.pos.GetPositionX(),
- movementInfo.pos.GetPositionY(), movementInfo.pos.GetPositionZ(), plrMover->GetCollisionHeight()));
+ if (plrMover)
+ {
+ sScriptMgr->AnticheatUpdateMovementInfo(plrMover, movementInfo);
+ }
+
+ return false;
}
- if (plrMover)//Hook for OnPlayerMove
+ if (!mover->movespline->Finalized())
+ return false;
+
+ // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
+ if (mover->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE))
{
- sScriptMgr->OnPlayerMove(plrMover, movementInfo, opcode);
+ // Xinef: skip moving packets
+ if (movementInfo.HasMovementFlag(MOVEMENTFLAG_MASK_MOVING))
+ {
+ if (plrMover)
+ {
+ sScriptMgr->AnticheatUpdateMovementInfo(plrMover, movementInfo);
+ }
+ return false;
+ }
}
bool jumpopcode = false;
@@ -530,7 +540,7 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData)
if (plrMover && !sScriptMgr->AnticheatHandleDoubleJump(plrMover, mover))
{
plrMover->GetSession()->KickPlayer();
- return;
+ return false;
}
}
@@ -538,74 +548,104 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData)
if (plrMover && !sScriptMgr->AnticheatCheckMovementInfo(plrMover, movementInfo, mover, jumpopcode))
{
plrMover->GetSession()->KickPlayer();
- return;
+ return false;
}
- /* process position-change */
- WorldPacket data(opcode, recvData.size());
- int64 movementTime = (int64)movementInfo.time + _timeSyncClockDelta;
- if (_timeSyncClockDelta == 0 || movementTime < 0 || movementTime > 0xFFFFFFFF)
+ if (movementInfo.HasMovementFlag(MOVEMENTFLAG_ONTRANSPORT))
{
- LOG_INFO("misc", "The computed movement time using clockDelta is erronous. Using fallback instead");
- movementInfo.time = getMSTime();
+ // We were teleported, skip packets that were broadcast before teleport
+ if (movementInfo.pos.GetExactDist2d(mover) > SIZE_OF_GRIDS)
+ {
+ if (plrMover)
+ {
+ sScriptMgr->AnticheatUpdateMovementInfo(plrMover, movementInfo);
+ //LOG_INFO("anticheat", "MovementHandler:: 2 We were teleported, skip packets that were broadcast before teleport");
+ }
+ return false;
+ }
+
+ if (!Acore::IsValidMapCoord(movementInfo.pos.GetPositionX() + movementInfo.transport.pos.GetPositionX(), movementInfo.pos.GetPositionY() + movementInfo.transport.pos.GetPositionY(),
+ movementInfo.pos.GetPositionZ() + movementInfo.transport.pos.GetPositionZ(), movementInfo.pos.GetOrientation() + movementInfo.transport.pos.GetOrientation()))
+ {
+ if (plrMover)
+ {
+ sScriptMgr->AnticheatUpdateMovementInfo(plrMover, movementInfo);
+ }
+
+ return false;
+ }
}
- else
+
+ // rooted mover sent packet without root or moving AND root - ignore, due to client crash possibility
+ if (opcode != CMSG_FORCE_MOVE_UNROOT_ACK)
+ if (mover->IsRooted() && (!movementInfo.HasMovementFlag(MOVEMENTFLAG_ROOT) || movementInfo.HasMovementFlag(MOVEMENTFLAG_MASK_MOVING)))
+ return false;
+
+ return true;
+}
+
+bool WorldSession::ProcessMovementInfo(MovementInfo& movementInfo, Unit* mover, Player* plrMover, WorldPacket& recvData)
+{
+ Opcodes opcode = (Opcodes)recvData.GetOpcode();
+ if (!VerifyMovementInfo(movementInfo, plrMover, mover, opcode))
+ return false;
+
+ if (mover->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE))
{
- movementInfo.time = (uint32) movementTime;
+ movementInfo.pos.Relocate(mover->GetPositionX(), mover->GetPositionY(), mover->GetPositionZ());
+
+ if (mover->IsCreature())
+ {
+ movementInfo.transport.guid = mover->m_movementInfo.transport.guid;
+ movementInfo.transport.pos.Relocate(mover->m_movementInfo.transport.pos.GetPositionX(), mover->m_movementInfo.transport.pos.GetPositionY(), mover->m_movementInfo.transport.pos.GetPositionZ());
+ movementInfo.transport.seat = mover->m_movementInfo.transport.seat;
+ }
}
- movementInfo.guid = mover->GetGUID();
- WriteMovementInfo(&data, &movementInfo);
- mover->SendMessageToSet(&data, _player);
+ // fall damage generation (ignore in flight case that can be triggered also at lags in moment teleportation to another map).
+ if (opcode == MSG_MOVE_FALL_LAND && plrMover && !plrMover->IsInFlight())
+ {
+ plrMover->HandleFall(movementInfo);
- mover->m_movementInfo = movementInfo;
+ sScriptMgr->AnticheatSetJumpingbyOpcode(plrMover, false);
+ }
- // Some vehicles allow the passenger to turn by himself
- if (Vehicle* vehicle = mover->GetVehicle())
+ // interrupt parachutes upon falling or landing in water
+ if (opcode == MSG_MOVE_FALL_LAND || opcode == MSG_MOVE_START_SWIM)
{
- if (VehicleSeatEntry const* seat = vehicle->GetSeatForPassenger(mover))
+ mover->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_LANDING); // Parachutes
+
+ if (plrMover)
{
- if (seat->m_flags & VEHICLE_SEAT_FLAG_ALLOW_TURNING && movementInfo.pos.GetOrientation() != mover->GetOrientation())
- {
- mover->SetOrientation(movementInfo.pos.GetOrientation());
- mover->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TURNING);
- }
+ sScriptMgr->AnticheatSetJumpingbyOpcode(plrMover, false);
}
+ }
- return;
+ if (plrMover && ((movementInfo.flags & MOVEMENTFLAG_SWIMMING) != 0) != plrMover->IsInWater())
+ {
+ // now client not include swimming flag in case jumping under water
+ plrMover->SetInWater(!plrMover->IsInWater() || plrMover->GetMap()->IsUnderWater(plrMover->GetPhaseMask(), movementInfo.pos.GetPositionX(),
+ movementInfo.pos.GetPositionY(), movementInfo.pos.GetPositionZ(), plrMover->GetCollisionHeight()));
}
- mover->UpdatePosition(movementInfo.pos);
+ if (plrMover)//Hook for OnPlayerMove
+ {
+ sScriptMgr->OnPlayerMove(plrMover, movementInfo, opcode);
+ }
- if (plrMover) // nothing is charmed, or player charmed
+ if (movementInfo.GetMovementFlags() & MOVEMENTFLAG_MASK_MOVING_OR_TURN)
{
- if (plrMover->IsSitState() && (movementInfo.flags & (MOVEMENTFLAG_MASK_MOVING | MOVEMENTFLAG_MASK_TURNING)))
- plrMover->SetStandState(UNIT_STAND_STATE_STAND);
+ if (mover->IsStandState())
+ mover->SetStandState(UNIT_STAND_STATE_STAND);
+ mover->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
+ }
+ HandleMoverRelocation(movementInfo, mover);
+
+ if (plrMover && opcode != CMSG_MOVE_KNOCK_BACK_ACK)
plrMover->UpdateFallInformationIfNeed(movementInfo, opcode);
- if (movementInfo.pos.GetPositionZ() < plrMover->GetMap()->GetMinHeight(movementInfo.pos.GetPositionX(), movementInfo.pos.GetPositionY()))
- if (!plrMover->GetBattleground() || !plrMover->GetBattleground()->HandlePlayerUnderMap(_player))
- {
- if (plrMover->IsAlive())
- {
- plrMover->SetPlayerFlag(PLAYER_FLAGS_IS_OUT_OF_BOUNDS);
- plrMover->EnvironmentalDamage(DAMAGE_FALL_TO_VOID, GetPlayer()->GetMaxHealth());
- // player can be alive if GM
- if (plrMover->IsAlive())
- plrMover->KillPlayer();
- }
- else if (!plrMover->HasPlayerFlag(PLAYER_FLAGS_IS_OUT_OF_BOUNDS))
- {
- GraveyardStruct const* grave = sGraveyard->GetClosestGraveyard(plrMover, plrMover->GetTeamId());
- if (grave)
- {
- plrMover->TeleportTo(grave->Map, grave->x, grave->y, grave->z, plrMover->GetOrientation());
- plrMover->Relocate(grave->x, grave->y, grave->z, plrMover->GetOrientation());
- }
- }
- }
- }
+ return true;
}
void WorldSession::HandleForceSpeedChangeAck(WorldPacket& recvData)
@@ -762,11 +802,13 @@ void WorldSession::HandleMoveKnockBackAck(WorldPacket& recvData)
{
LOG_DEBUG("network", "CMSG_MOVE_KNOCK_BACK_ACK");
+ Unit* mover = _player->m_mover;
+
ObjectGuid guid;
recvData >> guid.ReadAsPacked();
// pussywizard: typical check for incomming movement packets
- if (!_player->m_mover || !_player->m_mover->IsInWorld() || _player->m_mover->IsDuringRemoveFromWorld() || guid != _player->m_mover->GetGUID())
+ if (!mover || !mover->IsInWorld() || mover->IsDuringRemoveFromWorld() || guid != mover->GetGUID())
{
recvData.rfinish(); // prevent warnings spam
return;
@@ -778,7 +820,10 @@ void WorldSession::HandleMoveKnockBackAck(WorldPacket& recvData)
movementInfo.guid = guid;
ReadMovementInfo(recvData, &movementInfo);
- _player->m_mover->m_movementInfo = movementInfo;
+ mover->m_movementInfo = movementInfo;
+
+ if (mover->IsPlayer() && static_cast<Player*>(mover)->IsFreeFlying())
+ mover->SetCanFly(true);
WorldPacket data(MSG_MOVE_KNOCK_BACK, 66);
data << guid.WriteAsPacked();
@@ -793,38 +838,6 @@ void WorldSession::HandleMoveKnockBackAck(WorldPacket& recvData)
_player->SendMessageToSet(&data, false);
}
-void WorldSession::HandleMoveHoverAck(WorldPacket& recvData)
-{
- LOG_DEBUG("network", "CMSG_MOVE_HOVER_ACK");
-
- ObjectGuid guid;
- recvData >> guid.ReadAsPacked();
-
- recvData.read_skip<uint32>(); // unk
-
- MovementInfo movementInfo;
- movementInfo.guid = guid;
- ReadMovementInfo(recvData, &movementInfo);
-
- recvData.read_skip<uint32>(); // unk2
-}
-
-void WorldSession::HandleMoveWaterWalkAck(WorldPacket& recvData)
-{
- LOG_DEBUG("network", "CMSG_MOVE_WATER_WALK_ACK");
-
- ObjectGuid guid;
- recvData >> guid.ReadAsPacked();
-
- recvData.read_skip<uint32>(); // unk
-
- MovementInfo movementInfo;
- movementInfo.guid = guid;
- ReadMovementInfo(recvData, &movementInfo);
-
- recvData.read_skip<uint32>(); // unk2
-}
-
void WorldSession::HandleSummonResponseOpcode(WorldPacket& recvData)
{
if (!_player->IsAlive() || _player->IsInCombat())
@@ -954,79 +967,36 @@ void WorldSession::ComputeNewClockDelta()
void WorldSession::HandleMoveRootAck(WorldPacket& recvData)
{
- ObjectGuid guid;
- recvData >> guid.ReadAsPacked();
+ LOG_DEBUG("network", "WORLD: {}", GetOpcodeNameForLogging((Opcodes)recvData.GetOpcode()));
- 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);
-
- /* 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;
+ uint32 counter;
+ MovementInfo movementInfo;
recvData >> guid.ReadAsPacked();
+ recvData >> counter;
+ ReadMovementInfo(recvData, &movementInfo);
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 (recvData.GetOpcode() == CMSG_FORCE_MOVE_UNROOT_ACK) // unroot case
{
- LOG_INFO("misc", "The computed movement time using clockDelta is erronous. Using fallback instead");
- movementInfo.time = getMSTime();
- }
- else
- {
- movementInfo.time = (uint32)movementTime;
+ if (!mover->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_ROOT))
+ return;
}
-
- if (G3D::fuzzyEq(movementInfo.fallTime, 0.f))
+ else // root case
{
- movementInfo.RemoveMovementFlag(MOVEMENTFLAG_FALLING);
+ if (mover->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_ROOT))
+ return;
}
- movementInfo.guid = mover->GetGUID();
- mover->m_movementInfo = movementInfo;
- mover->UpdatePosition(movementInfo.pos);
+ if (!ProcessMovementInfo(movementInfo, mover, _player, recvData))
+ return;
+ WorldPacket data(recvData.GetOpcode() == CMSG_FORCE_MOVE_UNROOT_ACK ? MSG_MOVE_UNROOT : MSG_MOVE_ROOT);
+ data << guid.WriteAsPacked();
+ WriteMovementInfo(&data, &movementInfo);
+ mover->SendMessageToSet(&data, _player);
}
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index de0e4a9bd6..1aa7a3ee86 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();
@@ -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/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/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..c229abdbc4 100644
--- a/src/server/game/Movement/MotionMaster.cpp
+++ b/src/server/game/Movement/MotionMaster.cpp
@@ -387,6 +387,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 +470,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 +478,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,15 +495,15 @@ 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::MoveSplinePath(uint32 path_id, ForcedMovement forcedMovement)
{
// convert the path id to a Movement::PointsArray*
Movement::PointsArray* points = new Movement::PointsArray();
@@ -514,7 +515,7 @@ void MotionMaster::MoveSplinePath(uint32 path_id)
}
// pass the new PointsArray* to the appropriate MoveSplinePath function
- MoveSplinePath(points);
+ MoveSplinePath(points, forcedMovement);
}
/**
@@ -539,8 +540,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 +570,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 +609,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 +649,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 +692,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 +710,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);
}
}
diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h
index 0fcf5abae8..bc4cc996b4 100644
--- a/src/server/game/Movement/MotionMaster.h
+++ b/src/server/game/Movement/MotionMaster.h
@@ -80,6 +80,15 @@ enum RotateDirection
ROTATE_DIRECTION_RIGHT
};
+enum ForcedMovement
+{
+ FORCED_MOVEMENT_NONE = 0,
+ FORCED_MOVEMENT_WALK = 1,
+ FORCED_MOVEMENT_RUN = 2,
+
+ FORCED_MOVEMENT_MAX
+};
+
struct ChaseRange
{
ChaseRange(float range);
@@ -210,11 +219,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 MoveSplinePath(uint32 path_id, ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE);
// 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);
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..b8ee76d299 100644
--- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp
@@ -365,7 +365,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..ce93e485bc 100644
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
@@ -56,7 +56,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)
diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp
index c2f6664b68..a9d3dd5308 100644
--- a/src/server/game/Movement/Spline/MoveSplineInit.cpp
+++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp
@@ -23,6 +23,7 @@
#include "Unit.h"
#include "Vehicle.h"
#include "WorldPacket.h"
+#include "Log.h"
namespace Movement
{
@@ -103,7 +104,13 @@ namespace Movement
bool isOrientationOnly = args.path.size() == 2 && args.path[0] == args.path[1];
- if ((moveFlags & MOVEMENTFLAG_ROOT) || isOrientationOnly)
+ if (moveFlags & MOVEMENTFLAG_ROOT) // This case should essentially never occur - hence the trace logging - hints to issues elsewhere
+ {
+ LOG_TRACE("movement", "Invalid movement during root. Entry: {} IsImmobilized {}, moveflags {}", unit->GetEntry(), unit->IsImmobilizedState() ? "true" : "false", moveFlags);
+ moveFlags &= ~MOVEMENTFLAG_MASK_MOVING;
+ }
+
+ if (isOrientationOnly)
moveFlags &= ~MOVEMENTFLAG_MASK_MOVING;
if (!args.HasVelocity)
diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp
index 76e945a9c5..8f9184da9d 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:
@@ -880,7 +880,6 @@ void Map::ScriptsProcess()
if (!cSource->IsAlive())
return;
- cSource->GetMotionMaster()->MovementExpired();
cSource->GetMotionMaster()->MoveIdle();
switch (step.script->Movement.MovementType)
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/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index bc12f7764f..cbb576580f 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::HandleMoveHoverAck );
+ /*0x0F6*/ DEFINE_HANDLER(CMSG_MOVE_HOVER_ACK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &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 );
@@ -847,8 +847,8 @@ void OpcodeTable::Initialize()
/*0x2CC*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_INSTANCE_INFO, STATUS_NEVER);
/*0x2CD*/ DEFINE_HANDLER(CMSG_REQUEST_RAID_INFO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestRaidInfoOpcode );
/*0x2CE*/ DEFINE_HANDLER(CMSG_MOVE_TIME_SKIPPED, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveTimeSkippedOpcode );
- /*0x2CF*/ DEFINE_HANDLER(CMSG_MOVE_FEATHER_FALL_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleFeatherFallAck );
- /*0x2D0*/ DEFINE_HANDLER(CMSG_MOVE_WATER_WALK_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveWaterWalkAck );
+ /*0x2CF*/ DEFINE_HANDLER(CMSG_MOVE_FEATHER_FALL_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveFlagChangeOpcode );
+ /*0x2D0*/ DEFINE_HANDLER(CMSG_MOVE_WATER_WALK_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveFlagChangeOpcode );
/*0x2D1*/ DEFINE_HANDLER(CMSG_MOVE_NOT_ACTIVE_MOVER, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveNotActiveMover );
/*0x2D2*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_SOUND, STATUS_NEVER);
/*0x2D3*/ DEFINE_HANDLER(CMSG_BATTLEFIELD_STATUS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldStatusOpcode );
@@ -965,7 +965,7 @@ void OpcodeTable::Initialize()
/*0x342*/ DEFINE_HANDLER(MSG_MOVE_STOP_SWIM_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
/*0x343*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_CAN_FLY, STATUS_NEVER);
/*0x344*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_CAN_FLY, STATUS_NEVER);
- /*0x345*/ DEFINE_HANDLER(CMSG_MOVE_SET_CAN_FLY_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveSetCanFlyAckOpcode );
+ /*0x345*/ DEFINE_HANDLER(CMSG_MOVE_SET_CAN_FLY_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveFlagChangeOpcode );
/*0x346*/ DEFINE_HANDLER(CMSG_MOVE_SET_FLY, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
/*0x347*/ DEFINE_HANDLER(CMSG_SOCKET_GEMS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSocketOpcode );
/*0x348*/ DEFINE_HANDLER(CMSG_ARENA_TEAM_CREATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index c8d336fe53..5ac8895c68 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -136,7 +136,8 @@ WorldSession::WorldSession(uint32 id, std::string&& name, uint32 accountFlags, s
_addonMessageReceiveCount(0),
_timeSyncClockDeltaQueue(6),
_timeSyncClockDelta(0),
- _pendingTimeSyncRequests()
+ _pendingTimeSyncRequests(),
+ _orderCounter(0)
{
memset(m_Tutorials, 0, sizeof(m_Tutorials));
@@ -1509,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 c5fa3c8aee..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
@@ -379,6 +388,10 @@ public:
void ReadMovementInfo(WorldPacket& data, MovementInfo* mi);
void WriteMovementInfo(WorldPacket* data, MovementInfo* mi);
+ void SynchronizeMovement(MovementInfo& movementInfo);
+ void HandleMoverRelocation(MovementInfo& movementInfo, Unit* mover);
+ bool VerifyMovementInfo(MovementInfo const& movementInfo, Player* plrMover, Unit* mover, Opcodes opcode) const;
+ bool ProcessMovementInfo(MovementInfo& movementInfo, Unit* mover, Player* plrMover, WorldPacket& recvData);
void SendPacket(WorldPacket const* packet);
void SendPetNameInvalid(uint32 error, std::string const& name, DeclinedName* declinedName);
@@ -582,6 +595,10 @@ public:
// Time Synchronisation
void ResetTimeSync();
void SendTimeSync();
+
+ // Movement packet order
+ uint32 GetOrderCounter() const { return _orderCounter; }
+ void IncrementOrderCounter() { ++_orderCounter; }
public: // opcodes handlers
void Handle_NULL(WorldPacket& null); // not used
void Handle_EarlyProccess(WorldPacket& recvPacket); // just mark packets processed in WorldSocket::OnRead
@@ -611,7 +628,6 @@ public: // opcodes handlers
void HandlePlayedTime(WorldPackets::Character::PlayedTimeClient& packet);
// new
- void HandleMoveUnRootAck(WorldPacket& recvPacket);
void HandleMoveRootAck(WorldPacket& recvPacket);
// new inspect
@@ -620,11 +636,6 @@ public: // opcodes handlers
// new party stats
void HandleInspectHonorStatsOpcode(WorldPacket& recvPacket);
- void HandleMoveWaterWalkAck(WorldPacket& recvPacket);
- void HandleFeatherFallAck(WorldPacket& recvData);
-
- void HandleMoveHoverAck(WorldPacket& recvData);
-
void HandleMountSpecialAnimOpcode(WorldPacket& recvdata);
// character view
@@ -969,7 +980,7 @@ public: // opcodes handlers
void HandleFarSightOpcode(WorldPacket& recvData);
void HandleSetDungeonDifficultyOpcode(WorldPacket& recvData);
void HandleSetRaidDifficultyOpcode(WorldPacket& recvData);
- void HandleMoveSetCanFlyAckOpcode(WorldPacket& recvData);
+ void HandleMoveFlagChangeOpcode(WorldPacket& recvData);
void HandleSetTitleOpcode(WorldPacket& recvData);
void HandleRealmSplitOpcode(WorldPacket& recvData);
void HandleTimeSyncResp(WorldPacket& recvData);
@@ -1033,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
@@ -1070,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);
@@ -1082,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);
@@ -1127,6 +1138,8 @@ public: // opcodes handlers
void InitializeSession();
void InitializeSessionCallback(CharacterDatabaseQueryHolder const& realmHolder, uint32 clientCacheVersion);
+ void SetPacketLogging(bool state);
+
private:
void ProcessQueryCallbacks();
@@ -1237,6 +1250,8 @@ private:
uint32 _timeSyncNextCounter;
uint32 _timeSyncTimer;
+ uint32 _orderCounter;
+
WorldSession(WorldSession const& right) = delete;
WorldSession& operator=(WorldSession const& right) = delete;
};
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/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 4ae8bfca43..644cce3b65 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))
{
@@ -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..7c0cd6c45e 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;
}
@@ -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;
}
diff --git a/src/server/game/Spells/SpellInfoCorrections.cpp b/src/server/game/Spells/SpellInfoCorrections.cpp
index 9873af3253..6712f11091 100644
--- a/src/server/game/Spells/SpellInfoCorrections.cpp
+++ b/src/server/game/Spells/SpellInfoCorrections.cpp
@@ -5151,6 +5151,12 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
});
+ // Earth Shield
+ ApplySpellFix({ 55599, 58981 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx5 |= SPELL_ATTR5_LIMIT_N;
+ });
+
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..0a69981cda 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;
}
@@ -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..b22c0de6ab 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)
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index 40bb89b93b..1113d73a5a 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 =
{
@@ -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 302fb5803b..3680aea36a 100644
--- a/src/server/scripts/Commands/cs_gm.cpp
+++ b/src/server/scripts/Commands/cs_gm.cpp
@@ -92,24 +92,18 @@ public:
if (!target)
target = handler->GetSession()->GetPlayer();
- WorldPacket data(12);
-
bool canFly = false;
if (enable.has_value())
{
- data.SetOpcode(*enable ? SMSG_MOVE_SET_CAN_FLY : SMSG_MOVE_UNSET_CAN_FLY);
canFly = *enable;
+ target->SetCanFly(canFly);
}
else
{
- canFly = handler->GetSession()->GetPlayer()->CanFly();
- data.SetOpcode(canFly ? SMSG_MOVE_UNSET_CAN_FLY : SMSG_MOVE_SET_CAN_FLY);
- canFly = !canFly;
+ canFly = !handler->GetSession()->GetPlayer()->CanFly();
+ target->SetCanFly(canFly);
}
- data << target->GetPackGUID();
- data << uint32(0); // unknown
- target->SendMessageToSet(&data, true);
handler->PSendSysMessage(LANG_COMMAND_FLYMODE_STATUS, handler->GetNameLink(target), canFly ? "on" : "off");
return true;
}
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 4ca8b5b37f..4fb628606c 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;
@@ -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/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..d95e3b1245 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,7 @@ public:
case 0:
Talk(SAY_TEXT5);
HandleGameObject(DATA_ARENA4, false);
- Start(false, false);
+ Start(false);
eventTimer = 0;
break;
case 1:
@@ -603,7 +604,7 @@ public:
creature->CastSpell(creature, SPELL_DRUNKEN_RAGE, false);
if (npc_escortAI* escortAI = CAST_AI(npc_rocknot::npc_rocknotAI, creature->AI()))
- escortAI->Start(false, false);
+ 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..fc49d131f5 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
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_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..82e19a6944 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);
}
}
@@ -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);
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..b08470c026 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp
@@ -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);
}
}
}
@@ -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..873cfdc746 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)
{
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp
index 614976c5ae..712f9c5a2b 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp
@@ -435,7 +435,7 @@ 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);
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_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..dcb58c3656 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
@@ -170,7 +170,7 @@ public:
if (m_uiEventId == EVENT_OZ)
instance->SetData(DATA_OPERA_OZ_DEATHCOUNT, IN_PROGRESS);
- Start(false, false);
+ Start(false);
}
void JustEngagedWith(Unit* /*who*/) override { }
@@ -523,9 +523,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/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
index 4747e77658..eebdc7b9f4 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;
}
@@ -760,22 +760,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 +806,7 @@ public:
ObjectGuid prisonerGUID;
- void SetGUID(ObjectGuid guid, int32 /*id*/) override
+ void SetGUID(ObjectGuid const& guid, int32 /*id*/) override
{
if (!prisonerGUID)
prisonerGUID = guid;
@@ -866,7 +866,7 @@ public:
ObjectGuid minerGUID;
- void SetGUID(ObjectGuid guid, int32 /*id*/) override
+ void SetGUID(ObjectGuid const& guid, int32 /*id*/) override
{
minerGUID = guid;
}
@@ -980,7 +980,7 @@ public:
{
carGUID = who->GetVehicleBase()->GetGUID();
InitWaypoint();
- Start(false, false, who->GetGUID());
+ Start(false, who->GetGUID());
SetDespawnAtFar(false);
}
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
index 9c71aad73a..5a1c4218b4 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
@@ -613,7 +613,7 @@ public:
me->GetMotionMaster()->MovePath(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);
}
}
}
@@ -800,7 +800,7 @@ public:
me->GetMotionMaster()->MovePath(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..bf307fe0c8 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;
@@ -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..4634ead0ef 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
@@ -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
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..3034bb96e0 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;
}
}
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
index c9b0ad3f12..04fa2023d1 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
@@ -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;
}
@@ -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 ddd75f48af..af4a14d7d8 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
@@ -178,7 +178,12 @@ struct npc_kiljaeden_controller : public NullCreatureAI
{
summons.Summon(summon);
if (summon->GetEntry() == NPC_SINISTER_REFLECTION)
- summon->SetInCombatWithZone();
+ {
+ summon->m_Events.AddEventAtOffset([summon] {
+ if (summon && summon->IsAlive() && !summon->IsInCombat())
+ summon->SetInCombatWithZone();
+ }, 5s);
+ }
else if (summon->GetEntry() == NPC_KALECGOS_KJ)
summon->setActive(true);
}
@@ -382,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();
@@ -549,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));
}
}
@@ -714,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);
}
}
@@ -724,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);
@@ -757,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);
@@ -770,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))
@@ -840,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))
@@ -873,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))
@@ -881,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)
@@ -924,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_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..4b28c85feb 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);
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_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
index e02c69e0f3..7ba24407fe 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
@@ -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..a7162ffc88 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();
+ SetRun(true);
break;
case 19:
Talk(SAY_PROGRESS_7, player);
@@ -106,7 +106,7 @@ public:
if (quest->GetQuestId() == QUEST_SUNKEN_TREASURE)
{
Talk(SAY_PROGRESS_1, player);
- npc_escortAI::Start(false, false, player->GetGUID(), quest);
+ npc_escortAI::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..b92bcb6168 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
diff --git a/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp b/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp
index cd3612d4eb..5c50dc91e6 100644
--- a/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp
@@ -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..09eaaed428 100644
--- a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp
@@ -113,7 +113,7 @@ 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());
+ npc_escortAI::Start(true, player->GetGUID());
}
}
};
diff --git a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp
index 4659c2b79a..dc13269327 100644
--- a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp
@@ -132,7 +132,7 @@ public:
if (GameObject* go = me->FindNearestGameObject(GO_RINJI_CAGE, INTERACTION_DISTANCE))
go->UseDoorOrButton();
- npc_escortAI::Start(false, false, player->GetGUID(), quest);
+ npc_escortAI::Start(false, player->GetGUID(), quest);
}
}
@@ -156,7 +156,7 @@ public:
case 17:
Talk(SAY_RIN_COMPLETE, player);
player->GroupEventHappens(QUEST_RINJI_TRAPPED, me);
- SetRun();
+ SetRun(true);
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..c3d7edd075 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
}
}
@@ -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..b0783d371f 100644
--- a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp
@@ -61,7 +61,7 @@ public:
if (quest->GetQuestId() == QUEST_MISSING_IN_ACTION)
{
Talk(SAY_CORPORAL_1, player);
- npc_escortAI::Start(true, false, player->GetGUID(), quest);
+ npc_escortAI::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..12f1203981 100644
--- a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp
@@ -111,7 +111,7 @@ 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());
+ pEscortAI->Start(true, player->GetGUID());
}
return true;
@@ -328,7 +328,7 @@ public:
{
HasEnded = false;
TalkRNG = urand(0,1);
- events.ScheduleEvent(EVENT_APPA_INTRO, 2000);
+ events.ScheduleEvent(EVENT_APPA_INTRO, 2s);
summons.DespawnAll();
}
@@ -387,31 +387,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..d8203ed9f9 100644
--- a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
@@ -406,7 +406,7 @@ public:
{
if (Player* player = GetPlayerForEscort())
{
- CAST_AI(npc_lord_gregor_lescovar::npc_lord_gregor_lescovarAI, pLescovar->AI())->Start(false, false, player->GetGUID());
+ 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 +448,7 @@ 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());
+ 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..ad627959ff 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,8 @@ public:
if (auto ai = CAST_AI(npc_varian_wrynn::npc_varian_wrynnAI, creature->AI()))
{
- ai->Start(true, true, player->GetGUID());
+ creature->SetWalk(false);
+ ai->Start(true, player->GetGUID());
if (Creature* jaina = GetClosestCreatureWithEntry(creature, NPC_JAINA, 50.0f))
ai->jainaGUID = jaina->GetGUID();
else
@@ -1218,27 +1218,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 +1246,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))
@@ -1614,7 +1614,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 +1665,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 +1727,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 +1789,7 @@ public:
break;
case 54:
Talk(WRYNN_SAY_APO_7);
- SetRun(false);
+ me->SetWalk(true);
JumpToNextStep(4 * IN_MILLISECONDS);
break;
case 55:
@@ -1845,7 +1845,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 +2236,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 +2478,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:
@@ -2972,7 +2973,7 @@ 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);
@@ -3005,7 +3006,7 @@ 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);
JumpToNextStep(3 * IN_MILLISECONDS);
@@ -3054,10 +3055,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 +3078,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 +3183,7 @@ public:
SpawnWave(6);
SetEscortPaused(false);
bStepping = false;
- SetRun(false);
+ me->SetWalk(true);
JumpToNextStep(0 * IN_MILLISECONDS);
break;
}
@@ -3226,7 +3227,7 @@ public:
FollowThrall();
SetEscortPaused(false);
bStepping = false;
- SetRun(false);
+ me->SetWalk(true);
JumpToNextStep(0 * IN_MILLISECONDS);
break;
// Top of Undercity Discussion
@@ -3266,7 +3267,7 @@ public:
FollowThrall();
SetEscortPaused(false);
bStepping = false;
- SetRun(false);
+ me->SetWalk(true);
JumpToNextStep(0 * IN_MILLISECONDS);
break;
case 63:
@@ -3284,7 +3285,7 @@ public:
FollowThrall();
SetEscortPaused(false);
bStepping = false;
- SetRun(false);
+ me->SetWalk(true);
JumpToNextStep(0 * IN_MILLISECONDS);
break;
case 67:
@@ -3299,7 +3300,7 @@ public:
FollowThrall();
SetEscortPaused(false);
bStepping = false;
- SetRun(false);
+ me->SetWalk(true);
JumpToNextStep(0 * IN_MILLISECONDS);
break;
// KHANOK - Valimathtas Intro
@@ -3332,10 +3333,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 +3476,7 @@ public:
FollowThrall();
SetEscortPaused(false);
bStepping = false;
- SetRun(false);
+ me->SetWalk(true);
JumpToNextStep(0 * IN_MILLISECONDS);
break;
case 109:
@@ -3491,7 +3492,7 @@ public:
FollowThrall();
SetEscortPaused(false);
bStepping = false;
- SetRun(true);
+ me->SetWalk(false);
JumpToNextStep(0 * IN_MILLISECONDS);
break;
case 112:
@@ -3662,7 +3663,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 +3707,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 +3808,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 +3866,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..fe71253764 100644
--- a/src/server/scripts/EasternKingdoms/zone_westfall.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_westfall.cpp
@@ -56,9 +56,9 @@ public:
if (quest->GetQuestId() == QUEST_TOME_VALOR)
{
creature->AI()->Talk(SAY_DS_START);
-
+ creature->SetWalk(false);
if (npc_escortAI* pEscortAI = CAST_AI(npc_daphne_stilwell::npc_daphne_stilwellAI, creature->AI()))
- pEscortAI->Start(true, true, player->GetGUID());
+ pEscortAI->Start(true, player->GetGUID());
}
return true;
diff --git a/src/server/scripts/EasternKingdoms/zone_wetlands.cpp b/src/server/scripts/EasternKingdoms/zone_wetlands.cpp
index 9118411816..97efd21c69 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,7 @@ 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);
+ 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..5bda46f138 100644
--- a/src/server/scripts/Events/hallows_end.cpp
+++ b/src/server/scripts/Events/hallows_end.cpp
@@ -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())
@@ -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_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..4d0c1c3c9e 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp
@@ -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..a4855f855c 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;
}
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..db6e61927d 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp
@@ -77,12 +77,12 @@ 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
@@ -116,15 +116,15 @@ 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);
+ 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);
@@ -132,7 +132,7 @@ public:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true))
me->CastSpell(target, DUNGEON_MODE(SPELL_TIME_STEP_N, SPELL_TIME_STEP_H), 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..bc066fd1f2 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
@@ -80,17 +80,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
@@ -146,22 +146,22 @@ public:
{
case EVENT_SPELL_CARRION_SWARM:
me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_CARRION_SWARM_N, SPELL_CARRION_SWARM_H), false);
- events.RepeatEvent(7000);
+ 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);
+ 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);
+ 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..e97fab3633 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp
@@ -66,9 +66,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
@@ -98,16 +98,16 @@ public:
{
case EVENT_SPELL_DISEASE_EXPULSION:
me->CastSpell(me, DUNGEON_MODE(SPELL_DISEASE_EXPULSION_N, SPELL_DISEASE_EXPULSION_H), false);
- events.RepeatEvent(6000);
+ 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);
+ 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..9ea60c7b03 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp
@@ -84,12 +84,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
@@ -130,29 +130,29 @@ public:
{
case EVENT_SPELL_SHADOW_BOLT:
me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_SHADOW_BOLT_N, SPELL_SHADOW_BOLT_H), false);
- events.RepeatEvent(10000);
+ 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..cd5818bfec 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
@@ -385,7 +385,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,12 +418,12 @@ 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);
+ actionEvents.ScheduleEvent(EVENT_ACTION_PHASE2, 12s);
SetRun(false);
eventInRun = true;
@@ -435,7 +435,7 @@ public:
waveGroupId = 10;
eventInRun = true;
SetRun(true);
- actionEvents.ScheduleEvent(EVENT_ACTION_PHASE2 + 9, 10000);
+ actionEvents.ScheduleEvent(EVENT_ACTION_PHASE2 + 9, 10s);
}
else if (param == ACTION_START_TOWN_HALL)
{
@@ -486,7 +486,7 @@ public:
{
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())
@@ -547,7 +547,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
@@ -579,7 +579,7 @@ public:
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;
@@ -652,7 +652,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;
@@ -678,40 +678,40 @@ public:
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);
+ 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);
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;
@@ -1188,13 +1179,13 @@ public:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
me->CastSpell(target, DUNGEON_MODE(SPELL_ARTHAS_EXORCISM_N, SPELL_ARTHAS_EXORCISM_H), 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/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..141fe70d8d 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);
+ 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);
+ 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);
@@ -382,7 +382,7 @@ 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);
@@ -394,20 +394,20 @@ public:
SetRun(false);
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);
@@ -430,14 +430,14 @@ public:
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:
@@ -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,7 +1010,8 @@ public:
{
me->SetStandState(UNIT_STAND_STATE_STAND);
me->RemoveAllAuras();
- Start(false, true);
+ me->SetWalk(false);
+ Start(false);
}
void WaypointReached(uint32 waypointId) override
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..0bd0febc7f 100644
--- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
@@ -115,7 +115,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- me->DespawnOrUnsummon(5000);
+ me->DespawnOrUnsummon(5s);
}
void sQuestAccept(Player* /*player*/, Quest const* quest) 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..10141d57ca 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)
{
@@ -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..21e505b3de 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
@@ -209,7 +209,8 @@ struct npc_general_andorov : public npc_escortAI
_initialAttackTimer = 5 * IN_MILLISECONDS;
_paused = false;
- Start(false, true);
+ me->SetWalk(false);
+ 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..2d97ba3daf 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
@@ -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/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..c4d2c80a6d 100644
--- a/src/server/scripts/Kalimdor/zone_ashenvale.cpp
+++ b/src/server/scripts/Kalimdor/zone_ashenvale.cpp
@@ -121,7 +121,7 @@ public:
{
Talk(SAY_MUG_START1);
me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE);
- npc_escortAI::Start(true, false, player->GetGUID());
+ npc_escortAI::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..b2f46e1947 100644
--- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
@@ -289,7 +289,7 @@ public:
case EVENT_START_ESCORT:
if (Player* player = ObjectAccessor::GetPlayer(*me, _player))
{
- npc_escortAI::Start(true, false, player->GetGUID());
+ npc_escortAI::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..02b0ae8851 100644
--- a/src/server/scripts/Kalimdor/zone_darkshore.cpp
+++ b/src/server/scripts/Kalimdor/zone_darkshore.cpp
@@ -397,7 +397,7 @@ 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());
+ pEscortAI->Start(false, player->GetGUID());
creature->SetFaction(FACTION_ESCORTEE_A_NEUTRAL_PASSIVE);
}
@@ -463,7 +463,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 +552,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..c6a6ecd935 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,8 @@ public:
case EVENT_RESTART_ESCORT:
CheckCaravan();
SetDespawnAtEnd(false);
- Start(true, true, ObjectGuid::Empty, 0, false, false, true);
+ SetRun(true);
+ Start(true, ObjectGuid::Empty, 0, false, false, true);
break;
}
@@ -474,7 +475,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..8ef469fe10 100644
--- a/src/server/scripts/Kalimdor/zone_moonglade.cpp
+++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp
@@ -384,7 +384,7 @@ public:
AddWaypoint(i, Clintar_spirit_WP[i][0], Clintar_spirit_WP[i][1], Clintar_spirit_WP[i][2], (uint32)Clintar_spirit_WP[i][4]);
}
PlayerGUID = player->GetGUID();
- Start(true, false, PlayerGUID);
+ 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..e846552436 100644
--- a/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp
+++ b/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp
@@ -137,7 +137,7 @@ 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());
+ 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..bf080107b1 100644
--- a/src/server/scripts/Kalimdor/zone_tanaris.cpp
+++ b/src/server/scripts/Kalimdor/zone_tanaris.cpp
@@ -260,7 +260,7 @@ public:
float Radius = 10.0f;
if (me->IsWithinDistInMap(who, Radius))
{
- Start(false, false, who->GetGUID());
+ 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..984180386d 100644
--- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp
+++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp
@@ -55,7 +55,7 @@ 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);
+ pEscortAI->Start(false, player->GetGUID(), quest);
}
return true;
}
@@ -300,11 +300,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
@@ -528,7 +528,7 @@ public:
break;
case 18:
Talk(SAY_PROGRESS_1, player);
- SetRun();
+ SetRun(true);
break;
}
}
@@ -594,7 +594,7 @@ 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());
+ 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..5a3de8eda3 100644
--- a/src/server/scripts/Kalimdor/zone_thousand_needles.cpp
+++ b/src/server/scripts/Kalimdor/zone_thousand_needles.cpp
@@ -66,7 +66,7 @@ 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);
+ pEscortAI->Start(false, player->GetGUID(), quest);
}
return true;
}
@@ -148,7 +148,7 @@ 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);
+ 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..4ccf3b6b37 100644
--- a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp
+++ b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp
@@ -48,7 +48,7 @@ public:
{
if (quest->GetQuestId() == QUEST_CHASING_AME)
{
- CAST_AI(npc_escortAI, (creature->AI()))->Start(false, false, player->GetGUID());
+ 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..4339da1834 100644
--- a/src/server/scripts/Kalimdor/zone_winterspring.cpp
+++ b/src/server/scripts/Kalimdor/zone_winterspring.cpp
@@ -286,7 +286,7 @@ 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);
+ escortAI->Start(false, player->GetGUID(), quest);
return true;
}
@@ -486,7 +486,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 +494,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 +502,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 +526,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/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
index 3cdb5967fd..ef3bebdfab 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
@@ -114,7 +114,7 @@ class boss_anub_arak : public CreatureScript
void KilledUnit(Unit* /*victim*/) 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/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
index f3f9396ba0..8f66ac8ce6 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;
}
@@ -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/ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp
index 574db03388..d342ea7860 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp
@@ -173,7 +173,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 +247,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 +397,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;
@@ -504,7 +504,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 +663,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/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
index e0c14e515f..51f872bb72 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
@@ -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:
@@ -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:
@@ -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:
@@ -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..b8c16d4bf5 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
@@ -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..3aea12fb0a 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
@@ -125,8 +125,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 +409,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);
@@ -607,7 +607,8 @@ public:
break;
}
- Start(false, true);
+ me->SetWalk(false);
+ Start(false);
uiWaypoint = uiType;
}
@@ -722,7 +723,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..497b0c42d5 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp
@@ -131,7 +131,7 @@ public:
void EnterEvadeMode(EvadeReason why) override
{
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
ScriptedAI::EnterEvadeMode(why);
}
@@ -182,7 +182,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 +214,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 +339,8 @@ public:
void Reset() override
{
- Start(false, true, ObjectGuid::Empty, nullptr);
+ me->SetWalk(false);
+ Start(false, ObjectGuid::Empty, nullptr);
SetDespawnAtEnd(true);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetImmuneToAll(true);
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..7262a5528a 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
@@ -246,10 +246,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 +311,7 @@ public:
me->CastSpell(target, SPELL_MINIONS_CHARGE, false);
}
}
- events.Repeat(4500ms, 6000ms);
+ events.Repeat(4500ms, 6s);
}
break;
case EVENT_SHIELD_BREAKER:
@@ -341,7 +347,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 +372,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 +416,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 +549,8 @@ public:
return;
}
- Start(false, true);
+ me->SetWalk(false);
+ Start(false);
}
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
@@ -628,7 +641,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 +767,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..0e116a4288 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
@@ -502,7 +502,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
me->CastSpell(me, RAID_MODE(SPELL_TRAITOR_KING_10, SPELL_TRAITOR_KING_25, SPELL_TRAITOR_KING_10, SPELL_TRAITOR_KING_25), true);
- me->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
@@ -574,7 +574,7 @@ public:
if (spell->Id == SPELL_SPIKE_FAIL)
{
me->RemoveAllAuras();
- me->DespawnOrUnsummon(1500);
+ me->DespawnOrUnsummon(1500ms);
}
}
@@ -655,7 +655,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);
}
}
@@ -710,7 +710,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/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/HallsOfReflection/boss_falric.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp
index d5e01c2da0..33c5167f22 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp
@@ -131,7 +131,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;
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..0811908824 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp
@@ -112,7 +112,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);
@@ -178,7 +178,7 @@ public:
}
if (spell->Id == uint32(SPELL_FORGE_BLADE))
{
- events.RescheduleEvent(EVENT_SPELL_CHILLING_WAVE, 10000);
+ events.RescheduleEvent(EVENT_SPELL_CHILLING_WAVE, 10s);
SetEquipmentSlots(false, EQUIP_ID_SWORD);
me->SetReactState(REACT_AGGRESSIVE);
me->SetControlled(false, UNIT_STATE_ROOT);
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
index c5d341dc9f..f18fecfa2f 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);
}
}
@@ -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)
@@ -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..4ff7de00c7 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
@@ -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..b3174fb378 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);
}
@@ -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;
}
@@ -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..492ceb0081 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp
@@ -133,7 +133,7 @@ public:
despawnTime = (summon->GetDistance(target) / 40.0f * 1000) + 500;
}
- summon->DespawnOrUnsummon(despawnTime);
+ summon->DespawnOrUnsummon(Milliseconds(despawnTime));
}
uint32 GetData(uint32 /*type*/) const override
@@ -149,7 +149,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/boss_moorabi.cpp b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
index a85172a2d6..a9b989e6e4 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
@@ -83,6 +83,7 @@ public:
BossAI::Reset();
events2.Reset();
events2.ScheduleEvent(EVENT_PHANTOM, 21s);
+ me->SetCanDualWield(true);
}
void JustEngagedWith(Unit* who) override
@@ -91,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)
@@ -104,6 +111,7 @@ public:
me->RemoveAurasDueToSpell(SPELL_MOJO_FRENZY);
events.CancelEvent(EVENT_TRANSFORMATION);
Talk(EMOTE_TRANSFORMED);
+ me->SetCanDualWield(false);
}
}
@@ -111,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);
@@ -142,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..ea340b4c0c 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,
diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
index 5e32259383..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"
@@ -105,6 +106,9 @@ public:
break;
case GO_ECK_DOORS:
case GO_ECK_UNDERWATER_GATE:
+ if (instance->IsHeroic())
+ AddDoor(gameobject);
+ break;
case GO_GAL_DARAH_DOORS0:
case GO_GAL_DARAH_DOORS1:
case GO_GAL_DARAH_DOORS2:
@@ -119,6 +123,9 @@ public:
{
case GO_ECK_DOORS:
case GO_ECK_UNDERWATER_GATE:
+ if (instance->IsHeroic())
+ RemoveDoor(gameobject);
+ break;
case GO_GAL_DARAH_DOORS0:
case GO_GAL_DARAH_DOORS1:
case GO_GAL_DARAH_DOORS2:
@@ -131,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);
@@ -188,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..fdf3165791 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
@@ -583,14 +583,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 +651,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 +845,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 +1030,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..11d0142cec 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
@@ -233,7 +233,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:
{
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..b1239521bb 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);
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..ef366c7072 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
@@ -131,13 +131,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)
@@ -211,7 +211,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 +283,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 +373,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 +798,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..3aef1085b5 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
@@ -552,7 +552,7 @@ public:
if (--_counter)
{
- _owner->m_Events.AddEvent(this, _owner->m_Events.CalculateTime(3000));
+ _owner->m_Events.AddEventAtOffset(this, 3s);
return false;
}
@@ -826,12 +826,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 +862,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 +872,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 +885,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;
@@ -944,7 +944,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 +956,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);
@@ -1081,11 +1081,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 +1098,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);
}
@@ -1150,12 +1150,9 @@ public:
// 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 +1177,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 +1189,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 +1213,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 +1505,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 +2078,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 +2134,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 +2238,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);
}
}
@@ -2452,7 +2449,7 @@ public:
if (IsHeroic())
GoSiphon();
else
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
@@ -2522,7 +2519,7 @@ public:
if (IsHeroic())
GoSiphon();
else
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
break;
case POINT_START_SIPHON:
@@ -2539,7 +2536,7 @@ public:
}
}
- void SetGUID(ObjectGuid guid, int32 /* = 0*/) override
+ void SetGUID(ObjectGuid const& guid, int32 /* = 0*/) override
{
_grabbedPlayer = guid;
}
@@ -2568,7 +2565,7 @@ public:
me->AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD);
me->SetCanFly(false);
me->SetDisableGravity(false);
- me->GetMotionMaster()->MovePoint(POINT_DROP_PLAYER, _destPoint, false);
+ me->GetMotionMaster()->MovePoint(POINT_DROP_PLAYER, _destPoint, FORCED_MOVEMENT_NONE, 0.f, false);
me->SetDisableGravity(true, true);
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
break;
@@ -2620,7 +2617,7 @@ public:
me->GetMotionMaster()->Clear();
me->StopMovingOnCurrentPos();
- _events.ScheduleEvent(EVENT_MOVE_TO_DROP_POS, 0);
+ _events.ScheduleEvent(EVENT_MOVE_TO_DROP_POS, 0ms);
}
};
@@ -2886,7 +2883,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 +2999,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 +3050,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 +3098,7 @@ public:
{
_events.Reset();
me->CastSpell((Unit*)nullptr, SPELL_RESTORE_SOUL, false);
- me->DespawnOrUnsummon(3000);
+ me->DespawnOrUnsummon(3s);
}
break;
}
@@ -3121,14 +3118,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 +3414,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 +3447,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..d04cfdafe5 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
@@ -177,14 +177,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 +193,7 @@ private:
Creature* _trigger;
ObjectGuid _originalCaster;
uint32 _spellId;
- uint32 _despawnTime;
+ Milliseconds _despawnTime;
};
class AuraRemoveEvent : public BasicEvent
@@ -406,7 +406,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 +417,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);
}
}
@@ -579,7 +579,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 +750,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
@@ -886,7 +886,7 @@ public:
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->DespawnOrUnsummon(1s);
break;
default:
break;
@@ -1054,7 +1054,7 @@ public:
timer = 0;
me->SetDisplayId(11686);
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
- me->DespawnOrUnsummon(2000);
+ me->DespawnOrUnsummon(2s);
}
else
timer -= diff;
@@ -1096,7 +1096,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..5af60575cb 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -534,12 +534,12 @@ public:
if (Creature* factionNPC = ObjectAccessor::GetCreature(*me, _factionNPC))
{
factionNPC->GetMotionMaster()->MovePath(factionNPC->GetSpawnId() * 10, false);
- factionNPC->DespawnOrUnsummon(46500);
+ 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,8 @@ public:
case EVENT_START_PATHING:
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetImmuneToAll(false);
- Start(true, true);
+ me->SetWalk(false);
+ Start(true);
break;
case EVENT_SCOURGE_STRIKE:
DoCastVictim(SPELL_SCOURGE_STRIKE);
@@ -1016,15 +1017,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 +1811,7 @@ public:
{
_vehicleCheckTimer = 500;
if (!me->GetVehicle())
- me->DespawnOrUnsummon(100);
+ me->DespawnOrUnsummon(100ms);
}
else
_vehicleCheckTimer -= diff;
@@ -2151,7 +2152,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 +2797,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 +2863,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 +2896,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 +3338,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 +3348,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 +3522,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..8298f5a751 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:
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
index 30b678a876..7451caa1ab 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
@@ -115,7 +115,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);
@@ -194,7 +194,7 @@ public:
case EVENT_DECIMATE:
Talk(EMOTE_DECIMATE);
me->CastSpell(me, RAID_MODE(SPELL_DECIMATE_10, SPELL_DECIMATE_25), false);
- events.RepeatEvent(RAID_MODE(110000, 90000));
+ events.Repeat(RAID_MODE(110s, 90s));
break;
case EVENT_SUMMON_ZOMBIE:
{
@@ -218,7 +218,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..3e2ae759c9 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
@@ -440,7 +440,7 @@ public:
if (gothikWaves[waveCount][0])
{
SummonHelpers(gothikWaves[waveCount][0]);
- events.RepeatEvent(gothikWaves[waveCount][1]);
+ events.Repeat(Milliseconds(gothikWaves[waveCount][1]));
}
else
{
@@ -522,7 +522,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..7be64fe007 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
@@ -102,7 +102,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));
+ events.ScheduleEvent(EVENT_BERSERK, RAID_MODE(720s, 540s));
}
void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override
@@ -177,7 +177,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();
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
index 57866c7b00..384ffda0f1 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
@@ -451,7 +451,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 +507,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_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
index 98717dcbb1..22de0dac72 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
@@ -280,7 +280,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 +349,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/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..a61e0089c2 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -471,7 +471,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,7 +521,7 @@ 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();
@@ -674,7 +674,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 +727,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 +803,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 +898,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);
@@ -998,7 +998,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 +1013,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);
}
}
}
@@ -1459,14 +1458,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/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_eregos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp
index 4b491b156d..db9d41b63a 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp
@@ -208,7 +208,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..129df1e67b 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp
@@ -300,7 +300,7 @@ public:
me->ClearUnitState(UNIT_STATE_CASTING);
DoCastAOE(DUNGEON_MODE(SPELL_EMPOWERED_ARCANE_EXPLOSION_N, SPELL_EMPOWERED_ARCANE_EXPLOSION_H));
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;
}
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
index 01cdb73fb3..87d4b4b806 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
@@ -387,7 +387,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 +444,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 +461,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 };
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
index 9435ba6491..29639ad84d 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
@@ -106,334 +106,318 @@ enum Yells
EMOTE_BERSEKER_STANCE = 8,
};
-class boss_bjarngrim : public CreatureScript
+struct boss_bjarngrim : public npc_escortAI
{
-public:
- boss_bjarngrim() : CreatureScript("boss_bjarngrim") { }
-
- CreatureAI* GetAI(Creature* creature) const override
+ boss_bjarngrim(Creature* creature) : npc_escortAI(creature), summons(creature)
{
- return GetHallsOfLightningAI<boss_bjarngrimAI>(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, ObjectGuid::Empty, nullptr, false, true);
}
- 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()))
+ {
+ dwarf->GetMotionMaster()->MoveFollow(me, 3, rand_norm() * 2 * 3.14f);
+ summons.Summon(dwarf);
+ }
- void Reset() override
- {
- events.Reset();
- summons.DespawnAll();
+ me->RemoveAllAuras();
+ me->CastSpell(me, SPELL_TEMPORARY_ELECTRICAL_CHARGE, true);
- 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);
- }
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_BJARNGRIM, NOT_STARTED);
- me->RemoveAllAuras();
- me->CastSpell(me, SPELL_TEMPORARY_ELECTRICAL_CHARGE, true);
- RollStance(0, STANCE_DEFENSIVE);
+ me->CastSpell(me, SPELL_BATTLE_STANCE, true);
+ SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SHIELD, EQUIP_NO_CHANGE);
+ }
- if (m_pInstance)
- m_pInstance->SetData(TYPE_BJARNGRIM, NOT_STARTED);
- }
+ void JustEngagedWith(Unit*) override
+ {
+ me->SetInCombatWithZone();
+ Talk(SAY_AGGRO);
- void JustEngagedWith(Unit*) override
- {
- me->SetInCombatWithZone();
- Talk(SAY_AGGRO);
+ RollStance(STANCE_BATTLE);
- events.ScheduleEvent(EVENT_BJARNGRIM_CHANGE_STANCE, 20s, 0);
+ events.ScheduleEvent(EVENT_BJARNGRIM_CHANGE_STANCE, 20s, 0);
- // 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);
+ // 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);
- // BERSERKER STANCE
- events.ScheduleEvent(EVENT_BJARNGRIM_MORTAL_STRIKE, 24s, STANCE_BERSERKER);
- events.ScheduleEvent(EVENT_BJARNGRIM_WHIRLWIND, 26s, STANCE_BERSERKER);
+ // 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);
- // 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);
+ // 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);
- if (m_pInstance)
- {
- m_pInstance->SetData(TYPE_BJARNGRIM, IN_PROGRESS);
- m_pInstance->SetData(DATA_BJARNGRIM_ACHIEVEMENT, me->HasAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE));
- }
+ if (m_pInstance)
+ {
+ m_pInstance->SetData(TYPE_BJARNGRIM, IN_PROGRESS);
+ m_pInstance->SetData(DATA_BJARNGRIM_ACHIEVEMENT, me->HasAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE));
}
+ }
- 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 JustDied(Unit*) override
- {
- Talk(SAY_DEATH);
+ void JustDied(Unit*) override
+ {
+ Talk(SAY_DEATH);
- if (m_pInstance)
- m_pInstance->SetData(TYPE_BJARNGRIM, DONE);
- }
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_BJARNGRIM, DONE);
+ }
- void RemoveStanceAura(uint8 stance)
+ void RemoveStanceAura(uint8 stance)
+ {
+ switch (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;
- }
+ 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 RollStance(uint8 stance, uint8 force = 0)
+ {
+ if (urand(0, 1))
+ stance = (++stance == 4 ? 1 : stance);
+ else
+ stance = (--stance == 0 ? 3 : stance);
- void RollStance(uint8 stance, uint8 force = 0)
+ if (force)
+ stance = force;
+
+ switch (stance)
{
- if (urand(0, 1))
- stance = (++stance == 4 ? 1 : stance);
- else
- stance = (--stance == 0 ? 3 : 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(20s, STANCE_BERSERKER);
+ events.DelayEvents(20s, STANCE_BATTLE);
- me->CastSpell(me, SPELL_DEFENSIVE_STANCE, true);
- me->CastSpell(me, SPELL_DEFENSIVE_AURA, true);
+ SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SHIELD, EQUIP_NO_CHANGE);
+ break;
+ case STANCE_BERSERKER:
+ Talk(SAY_BERSERKER_STANCE);
- events.DelayEvents(20000, STANCE_BERSERKER);
- events.DelayEvents(20000, 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(20s, STANCE_DEFENSIVE);
+ events.DelayEvents(20s, STANCE_BATTLE);
- me->CastSpell(me, SPELL_BERSERKER_STANCE, true);
- me->CastSpell(me, SPELL_BERSERKER_AURA, true);
+ SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SWORD, EQUIP_NO_CHANGE);
+ break;
+ case STANCE_BATTLE:
+ Talk(SAY_BATTLE_STANCE);
- events.DelayEvents(20000, STANCE_DEFENSIVE);
- events.DelayEvents(20000, 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(20s, STANCE_BERSERKER);
+ events.DelayEvents(20s, STANCE_DEFENSIVE);
- me->CastSpell(me, SPELL_BATTLE_STANCE, true);
- me->CastSpell(me, SPELL_BATTLE_AURA, true);
+ SetEquipmentSlots(false, EQUIP_MACE, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
+ break;
+ }
- events.DelayEvents(20000, STANCE_BERSERKER);
- events.DelayEvents(20000, STANCE_DEFENSIVE);
+ m_uiStance = stance;
+ }
- SetEquipmentSlots(false, EQUIP_MACE, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
- break;
- }
+ void WaypointReached(uint32 Point) override
+ {
+ 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);
+ }
- m_uiStance = stance;
- }
+ void UpdateEscortAI(uint32 diff) override
+ {
+ if (!me->IsInCombat())
+ return;
- void WaypointReached(uint32 Point) override
+ // Return since we have no target
+ if (!UpdateVictim())
{
- 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);
+ Reset();
+ return;
}
- void UpdateEscortAI(uint32 diff) override
- {
- if (!me->IsInCombat())
- return;
-
- // Return since we have no target
- if (!UpdateVictim())
- {
- Reset();
- return;
- }
+ events.Update(diff);
- events.Update(diff);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ switch (events.ExecuteEvent())
+ {
+ case EVENT_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;
+ }
- 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;
- }
+ DoMeleeAttackIfReady();
+ }
- 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, me->GetMap()->IsHeroic() ? SPELL_RENEW_STEEL_H : SPELL_RENEW_STEEL_N, 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..f2e3def24c 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
@@ -68,211 +68,191 @@ enum IonarEvents
EVENT_RESTORE = 5,
};
-class boss_ionar : public CreatureScript
+struct boss_ionar : public BossAI
{
-public:
- boss_ionar() : CreatureScript("boss_ionar") { }
-
- CreatureAI* GetAI(Creature* creature) const override
+ boss_ionar(Creature* creature) : BossAI(creature, DATA_IONAR), summons(creature)
{
- return GetHallsOfLightningAI<boss_ionarAI>(creature);
+ m_pInstance = creature->GetInstanceScript();
}
- struct boss_ionarAI : public ScriptedAI
+ void Reset() override
{
- boss_ionarAI(Creature* creature) : ScriptedAI(creature), summons(creature)
- {
- m_pInstance = creature->GetInstanceScript();
- }
+ HealthCheck = 50;
+ events.Reset();
+ summons.DespawnAll();
- InstanceScript* m_pInstance;
- EventMap events;
- SummonList summons;
- uint8 HealthCheck;
+ me->SetVisible(true);
- void Reset() override
- {
- HealthCheck = 50;
- events.Reset();
- summons.DespawnAll();
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_IONAR, NOT_STARTED);
+ }
- me->SetVisible(true);
+ void ScheduleEvents(bool spark)
+ {
+ events.SetPhase(1);
+ if (!spark)
+ events.RescheduleEvent(EVENT_CHECK_HEALTH, 1s, 0, 1);
- if (m_pInstance)
- m_pInstance->SetData(TYPE_IONAR, NOT_STARTED);
- }
+ events.RescheduleEvent(EVENT_BALL_LIGHTNING, 10s, 0, 1);
+ events.RescheduleEvent(EVENT_STATIC_OVERLOAD, 5s, 0, 1);
+ }
- void ScheduleEvents(bool spark)
- {
- events.SetPhase(1);
- if (!spark)
- events.RescheduleEvent(EVENT_CHECK_HEALTH, 1s, 0, 1);
+ void JustEngagedWith(Unit*) override
+ {
+ me->SetInCombatWithZone();
+ Talk(SAY_AGGRO);
- events.RescheduleEvent(EVENT_BALL_LIGHTNING, 10s, 0, 1);
- events.RescheduleEvent(EVENT_STATIC_OVERLOAD, 5s, 0, 1);
- }
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_IONAR, IN_PROGRESS);
- void JustEngagedWith(Unit*) override
- {
- me->SetInCombatWithZone();
- Talk(SAY_AGGRO);
+ ScheduleEvents(false);
+ }
- if (m_pInstance)
- m_pInstance->SetData(TYPE_IONAR, IN_PROGRESS);
+ void JustDied(Unit*) override
+ {
+ Talk(SAY_DEATH);
- ScheduleEvents(false);
- }
+ summons.DespawnAll();
- void JustDied(Unit*) override
- {
- Talk(SAY_DEATH);
-
- summons.DespawnAll();
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_IONAR, DONE);
+ }
- 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()
+ Creature* spark;
+ for (uint8 i = 0; i < 5; ++i)
{
- Talk(SAY_SPLIT);
-
- Creature* spark;
- for (uint8 i = 0; i < 5; ++i)
+ if ((spark = me->SummonCreature(NPC_SPARK_OF_IONAR, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, 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);
-
- if (Player* tgt = SelectTargetFromPlayerList(100))
- spark->GetMotionMaster()->MoveFollow(tgt, 0.0f, 0.0f, MOTION_SLOT_CONTROLLED);
- }
+ 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);
+
+ 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);
+ me->SetVisible(false);
+ me->SetControlled(true, UNIT_STATE_STUNNED);
- events.SetPhase(2);
- events.ScheduleEvent(EVENT_CALL_SPARKS, 15s, 0, 2);
- }
+ events.SetPhase(2);
+ events.ScheduleEvent(EVENT_CALL_SPARKS, 15s, 0, 2);
+ }
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- events.Update(diff);
+ events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- switch (events.ExecuteEvent())
- {
- case EVENT_BALL_LIGHTNING:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random))
- me->CastSpell(target, me->GetMap()->IsHeroic() ? SPELL_BALL_LIGHTNING_H : SPELL_BALL_LIGHTNING_N, false);
-
- 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.Repeat(5s, 6s);
- break;
- case EVENT_CHECK_HEALTH:
- if (HealthBelowPct(HealthCheck))
- me->CastSpell(me, SPELL_DISPERSE, false);
-
- 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:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random))
+ me->CastSpell(target, me->GetMap()->IsHeroic() ? SPELL_BALL_LIGHTNING_H : SPELL_BALL_LIGHTNING_N, false);
+
+ 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.Repeat(5s, 6s);
+ break;
+ case EVENT_CHECK_HEALTH:
+ if (HealthBelowPct(HealthCheck))
+ me->CastSpell(me, SPELL_DISPERSE, false);
+
+ events.Repeat(1s);
+ return;
+ 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, 2s, 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();
+ }
+
+ private:
+ InstanceScript* m_pInstance;
+ EventMap events;
+ SummonList summons;
+ uint8 HealthCheck;
};
-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) { }
+
+ void MoveInLineOfSight(Unit*) override { }
+ void UpdateAI(uint32) override { }
+ void AttackStart(Unit* /*who*/) override { }
- CreatureAI* GetAI(Creature* creature) const override
+ void Reset() override { returning = false; }
+
+ void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
{
- return GetHallsOfLightningAI<npc_spark_of_ionarAI>(creature);
+ damage = 0;
}
- struct npc_spark_of_ionarAI : public ScriptedAI
+ void DoAction(int32 param) override
{
- npc_spark_of_ionarAI(Creature* creature) : ScriptedAI(creature) { }
-
- bool returning;
-
- void MoveInLineOfSight(Unit*) override { }
- void UpdateAI(uint32) override { }
- void AttackStart(Unit* /*who*/) override { }
-
- void Reset() override { returning = false; }
-
- void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
+ if (param == ACTION_CALLBACK)
{
- damage = 0;
+ me->SetSpeed(MOVE_RUN, 2.5f);
+ me->GetThreatMgr().ClearAllThreat();
+ me->CombatStop(true);
+ me->GetMotionMaster()->MoveTargetedHome();
+ returning = true;
}
-
- void DoAction(int32 param) override
+ else if (param == ACTION_SPARK_DESPAWN)
{
- 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();
+ 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:
+ bool returning;
};
// 52658, 59795 - Static Overload
@@ -302,7 +282,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..43f9d4d451 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
@@ -60,198 +60,187 @@ enum LokenEvents
EVENT_AURA_REMOVE = 5
};
-class boss_loken : public CreatureScript
+struct boss_loken : public BossAI
{
-public:
- boss_loken() : CreatureScript("boss_loken") { }
-
- CreatureAI* GetAI(Creature* creature) const override
+ boss_loken(Creature* creature) : BossAI(creature, DATA_LOKEN)
{
- return GetHallsOfLightningAI<boss_lokenAI>(creature);
+ m_pInstance = creature->GetInstanceScript();
+ if (m_pInstance)
+ isActive = m_pInstance->GetData(TYPE_LOKEN_INTRO);
}
- struct boss_lokenAI : public ScriptedAI
+ void MoveInLineOfSight(Unit*) override { }
+
+ void Reset() override
{
- boss_lokenAI(Creature* creature) : ScriptedAI(creature)
+ events.Reset();
+ if (m_pInstance)
{
- m_pInstance = creature->GetInstanceScript();
- if (m_pInstance)
- isActive = m_pInstance->GetData(TYPE_LOKEN_INTRO);
+ m_pInstance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEVEMENT_TIMELY_DEATH);
+ m_pInstance->SetData(TYPE_LOKEN, NOT_STARTED);
}
- InstanceScript* m_pInstance;
- EventMap events;
-
- bool isActive;
- uint32 IntroTimer;
- uint8 HealthCheck;
+ HealthCheck = 75;
+ IntroTimer = 0;
+ me->RemoveAllAuras();
- void MoveInLineOfSight(Unit*) override { }
-
- void Reset() override
+ if (!isActive)
{
- 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);
- }
+ me->SetControlled(true, UNIT_STATE_STUNNED);
+ me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
}
-
- void JustEngagedWith(Unit*) override
+ else
{
- me->SetInCombatWithZone();
- Talk(SAY_AGGRO);
-
- events.ScheduleEvent(EVENT_ARC_LIGHTNING, 10s);
- events.ScheduleEvent(EVENT_SHOCKWAVE, 3s);
- events.ScheduleEvent(EVENT_LIGHTNING_NOVA, 15s);
+ me->SetControlled(false, UNIT_STATE_STUNNED);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
+ }
+ }
- if (m_pInstance)
- {
- m_pInstance->SetData(TYPE_LOKEN, IN_PROGRESS);
+ void JustEngagedWith(Unit*) override
+ {
+ me->SetInCombatWithZone();
+ Talk(SAY_AGGRO);
- if (me->GetMap()->IsHeroic())
- m_pInstance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEVEMENT_TIMELY_DEATH);
- }
- }
+ events.ScheduleEvent(EVENT_ARC_LIGHTNING, 10s);
+ events.ScheduleEvent(EVENT_SHOCKWAVE, 3s);
+ events.ScheduleEvent(EVENT_LIGHTNING_NOVA, 15s);
- void JustDied(Unit*) override
+ if (m_pInstance)
{
- Talk(SAY_DEATH);
+ m_pInstance->SetData(TYPE_LOKEN, IN_PROGRESS);
- if (m_pInstance)
- m_pInstance->SetData(TYPE_LOKEN, DONE);
+ if (me->GetMap()->IsHeroic())
+ m_pInstance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEVEMENT_TIMELY_DEATH);
}
+ }
+
+ void JustDied(Unit*) override
+ {
+ Talk(SAY_DEATH);
- void LokenSpeach(bool hp)
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_LOKEN, DONE);
+ }
+
+ void LokenSpeach(bool hp)
+ {
+ if (hp)
{
- if (hp)
+ switch (HealthCheck)
{
- switch (HealthCheck)
- {
- case 75:
- Talk(SAY_75HEALTH);
- break;
- case 50:
- Talk(SAY_50HEALTH);
- break;
- case 25:
- Talk(SAY_25HEALTH);
- break;
- }
+ case 75:
+ Talk(SAY_75HEALTH);
+ break;
+ case 50:
+ Talk(SAY_50HEALTH);
+ break;
+ case 25:
+ Talk(SAY_25HEALTH);
+ break;
}
- else
- Talk(SAY_NOVA);
}
+ else
+ Talk(SAY_NOVA);
+ }
- 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 UpdateAI(uint32 diff) override
+ void UpdateAI(uint32 diff) override
+ {
+ if (!isActive)
{
- if (!isActive)
+ IntroTimer += diff;
+ if (IntroTimer > 5000 && IntroTimer < 10000)
{
- IntroTimer += diff;
- if (IntroTimer > 5000 && IntroTimer < 10000)
+ if (SelectTargetFromPlayerList(60))
{
- if (SelectTargetFromPlayerList(60))
- {
- Talk(SAY_INTRO_1);
- IntroTimer = 10000;
- }
- else
- IntroTimer = 0;
+ 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 (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);
- if (Player* target = SelectTargetFromPlayerList(80))
- AttackStart(target);
- }
+ me->SetControlled(false, UNIT_STATE_STUNNED);
+ me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
- return;
+ if (Player* target = SelectTargetFromPlayerList(80))
+ AttackStart(target);
}
- //Return since we have no target
- if (!UpdateVictim())
- return;
+ return;
+ }
- events.Update(diff);
+ //Return since we have no target
+ if (!UpdateVictim())
+ return;
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ events.Update(diff);
- 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);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- events.DelayEvents(5s);
- events.ScheduleEvent(EVENT_AURA_REMOVE, me->GetMap()->IsHeroic() ? 4s : 5s);
+ switch (events.ExecuteEvent())
+ {
+ case EVENT_CHECK_HEALTH:
+ if (HealthBelowPct(HealthCheck))
+ {
+ LokenSpeach(true);
+ HealthCheck -= 25;
+ }
- 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(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;
+ }
- events.Repeat(12s);
- break;
- case EVENT_AURA_REMOVE:
- me->RemoveAura(SPELL_LIGHTNING_NOVA_THUNDERS);
- break;
- }
+ DoMeleeAttackIfReady();
+ }
+ private:
+ InstanceScript* m_pInstance;
+ EventMap events;
- DoMeleeAttackIfReady();
- }
- };
+ bool isActive;
+ uint32 IntroTimer;
+ uint8 HealthCheck;
};
class spell_loken_pulsing_shockwave : public SpellScript
@@ -276,6 +265,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..41bfd38d1d 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
@@ -78,336 +78,315 @@ enum Yells
EMOTE_SHATTER = 6,
};
-class boss_volkhan : public CreatureScript
+struct boss_volkhan : public BossAI
{
-public:
- boss_volkhan() : CreatureScript("boss_volkhan") { }
-
- CreatureAI* GetAI(Creature* creature) const override
+ boss_volkhan(Creature* creature) : BossAI(creature, DATA_VOLKHAN), summons(creature)
{
- return GetHallsOfLightningAI<boss_volkhanAI>(creature);
+ m_pInstance = creature->GetInstanceScript();
}
- struct boss_volkhanAI : public ScriptedAI
+ void Reset() override
{
- boss_volkhanAI(Creature* creature) : ScriptedAI(creature), summons(creature)
+ x = y = z = PointID = ShatteredCount = 0;
+ HealthCheck = 100;
+ events.Reset();
+ summons.DespawnAll();
+ me->SetSpeed(MOVE_RUN, 1.2f, true);
+ me->SetReactState(REACT_AGGRESSIVE);
+
+ if (m_pInstance)
{
- m_pInstance = creature->GetInstanceScript();
+ m_pInstance->SetData(TYPE_VOLKHAN, NOT_STARTED);
+ m_pInstance->SetData(DATA_VOLKHAN_ACHIEVEMENT, true);
}
+ }
- InstanceScript* m_pInstance;
- EventMap events;
- SummonList summons;
- uint8 HealthCheck;
- float x, y, z;
- uint8 PointID;
- uint8 ShatteredCount;
+ void JustEngagedWith(Unit*) override
+ {
+ me->SetInCombatWithZone();
+ Talk(SAY_AGGRO);
- void Reset() override
- {
- x = y = z = PointID = ShatteredCount = 0;
- HealthCheck = 100;
- events.Reset();
- summons.DespawnAll();
- me->SetSpeed(MOVE_RUN, 1.2f, true);
- me->SetReactState(REACT_AGGRESSIVE);
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_VOLKHAN, IN_PROGRESS);
- if (m_pInstance)
- {
- m_pInstance->SetData(TYPE_VOLKHAN, NOT_STARTED);
- m_pInstance->SetData(DATA_VOLKHAN_ACHIEVEMENT, true);
- }
- }
+ ScheduleEvents(false);
+ }
- void JustEngagedWith(Unit*) override
- {
- me->SetInCombatWithZone();
- Talk(SAY_AGGRO);
+ void JustDied(Unit*) override
+ {
+ Talk(SAY_DEATH);
- if (m_pInstance)
- m_pInstance->SetData(TYPE_VOLKHAN, IN_PROGRESS);
+ summons.DespawnAll();
- ScheduleEvents(false);
- }
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_VOLKHAN, DONE);
+ }
- void JustDied(Unit*) override
+ void GetNextPos()
+ {
+ if (me->GetPositionY() < -180)
{
- Talk(SAY_DEATH);
+ if (me->GetPositionX() > 1330)
+ x = 1355;
+ else
+ x = 1308;
- summons.DespawnAll();
+ y = -178;
+ z = 52.5f;
+ }
+ else if (me->GetPositionY() < -145)
+ {
+ if (me->GetPositionX() > 1330)
+ x = 1355;
+ else
+ x = 1308;
- if (m_pInstance)
- m_pInstance->SetData(TYPE_VOLKHAN, DONE);
+ y = -137;
+ z = 52.5f;
}
+ else if (me->GetPositionY() < -130)
+ {
+ if (me->GetPositionX() > 1330)
+ x = 1343;
+ else
+ x = 1320;
- void GetNextPos()
+ y = -123;
+ z = 56.7f;
+ }
+ else
{
- if (me->GetPositionY() < -180)
- {
- if (me->GetPositionX() > 1330)
- x = 1355;
- else
- x = 1308;
+ PointID = POINT_ANVIL;
+ x = 1327;
+ y = -96;
+ z = 56.7f;
+ }
+ }
- y = -178;
- z = 52.5f;
- }
- else if (me->GetPositionY() < -145)
- {
- if (me->GetPositionX() > 1330)
- x = 1355;
- else
- x = 1308;
+ void KilledUnit(Unit* victim) override
+ {
+ if (!victim->IsPlayer())
+ return;
- y = -137;
- z = 52.5f;
- }
- else if (me->GetPositionY() < -130)
- {
- if (me->GetPositionX() > 1330)
- x = 1343;
- else
- x = 1320;
+ Talk(SAY_SLAY);
+ }
- y = -123;
- z = 56.7f;
- }
- else
- {
- PointID = POINT_ANVIL;
- x = 1327;
- y = -96;
- z = 56.7f;
- }
- }
+ void ScheduleEvents(bool anvil)
+ {
+ events.SetPhase(1);
+ events.RescheduleEvent(EVENT_HEAT, 8s, 0, 1);
+ events.RescheduleEvent(EVENT_SHATTER, 10s, 0, 1);
+ events.RescheduleEvent(EVENT_CHECK_HEALTH, anvil ? 1s : 6s, 0, 1);
+ events.RescheduleEvent(EVENT_POSITION, 4s, 0, 1);
+ }
- void KilledUnit(Unit* victim) override
+ void JustSummoned(Creature* summon) override
+ {
+ summons.Summon(summon);
+ if (summon->GetEntry() == NPC_MOLTEN_GOLEM)
{
- if (!victim->IsPlayer())
- return;
+ summon->SetFaction(me->GetFaction());
- Talk(SAY_SLAY);
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random))
+ summon->AI()->AttackStart(target);
}
+ }
- void ScheduleEvents(bool anvil)
+ void DoAction(int32 param) override
+ {
+ if (param == ACTION_DESTROYED)
{
- 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);
+ ShatteredCount++;
+ if (ShatteredCount > 4)
+ m_pInstance->SetData(DATA_VOLKHAN_ACHIEVEMENT, false);
}
+ }
- void JustSummoned(Creature* summon) override
- {
- summons.Summon(summon);
- if (summon->GetEntry() == NPC_MOLTEN_GOLEM)
- {
- summon->SetFaction(me->GetFaction());
+ void MovementInform(uint32 type, uint32 id) override
+ {
+ if (type != POINT_MOTION_TYPE)
+ return;
- if (Unit* target = SelectTarget(SelectTargetMethod::Random))
- summon->AI()->AttackStart(target);
- }
+ if (id == POINT_ANVIL)
+ {
+ 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);
}
+ else
+ events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, 0ms, 0, 2);
+ }
- void DoAction(int32 param) override
+ void SpellHitTarget(Unit* /*who*/, SpellInfo const* spellInfo) override
+ {
+ if (spellInfo->Id == SPELL_TEMPER)
{
- if (param == ACTION_DESTROYED)
- {
- ShatteredCount++;
- if (ShatteredCount > 4)
- m_pInstance->SetData(DATA_VOLKHAN_ACHIEVEMENT, false);
- }
+ 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()
+ {
+ events.SetPhase(2);
+ HealthCheck -= 20;
+ me->SetSpeed(MOVE_RUN, 4.0f, true);
+ me->SetReactState(REACT_PASSIVE);
- if (id == POINT_ANVIL)
- {
- 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);
- }
- else
- events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, 0ms, 0, 2);
- }
+ Talk(SAY_FORGE);
- 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);
- }
- }
+ if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
+ me->GetMotionMaster()->MovementExpired();
- void GoToAnvil()
- {
- events.SetPhase(2);
- HealthCheck -= 20;
- me->SetSpeed(MOVE_RUN, 4.0f, true);
- me->SetReactState(REACT_PASSIVE);
+ events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, 0ms, 0, 2);
+ }
- Talk(SAY_FORGE);
+ void UpdateAI(uint32 diff) override
+ {
+ //Return since we have no target
+ if (!UpdateVictim())
+ return;
- if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
- me->GetMotionMaster()->MovementExpired();
+ events.Update(diff);
- events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, 0ms, 0, 2);
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- void UpdateAI(uint32 diff) override
+ switch (events.ExecuteEvent())
{
- //Return since we have no target
- if (!UpdateVictim())
+ 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);
- 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;
- }
+ DoMeleeAttackIfReady();
+ }
- DoMeleeAttackIfReady();
- }
- };
+ private:
+ InstanceScript* m_pInstance;
+ EventMap events;
+ SummonList summons;
+ uint8 HealthCheck;
+ float x, y, z;
+ uint8 PointID;
+ uint8 ShatteredCount;
};
-class npc_molten_golem : public CreatureScript
+struct npc_molten_golem : public ScriptedAI
{
-public:
- npc_molten_golem() : CreatureScript("npc_molten_golem") { }
-
- CreatureAI* GetAI(Creature* creature) const override
+ npc_molten_golem(Creature* creature) : ScriptedAI(creature)
{
- return GetHallsOfLightningAI<npc_molten_golemAI>(creature);
+ m_pInstance = creature->GetInstanceScript();
}
- struct npc_molten_golemAI : public ScriptedAI
+ void Reset() override
{
- npc_molten_golemAI(Creature* creature) : ScriptedAI(creature)
- {
- m_pInstance = creature->GetInstanceScript();
- }
-
- EventMap events;
- InstanceScript* m_pInstance;
+ events.Reset();
+ events.ScheduleEvent(EVENT_BLAST, 7s);
+ events.ScheduleEvent(EVENT_IMMOLATION, 3s);
+ }
- void Reset() override
+ void DamageTaken(Unit*, uint32& uiDamage, DamageEffectType, SpellSchoolMask) override
+ {
+ if (me->GetEntry() == NPC_BRITTLE_GOLEM)
{
- events.Reset();
- events.ScheduleEvent(EVENT_BLAST, 7s);
- events.ScheduleEvent(EVENT_IMMOLATION, 3s);
+ uiDamage = 0;
+ return;
}
- void DamageTaken(Unit*, uint32& uiDamage, DamageEffectType, SpellSchoolMask) override
+ if (uiDamage >= me->GetHealth())
{
- if (me->GetEntry() == NPC_BRITTLE_GOLEM)
- {
- uiDamage = 0;
- return;
- }
+ 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 (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->IsNonMeleeSpellCast(false))
+ me->InterruptNonMeleeSpells(false);
- if (me->IsNonMeleeSpellCast(false))
- me->InterruptNonMeleeSpells(false);
-
- me->SetControlled(true, UNIT_STATE_STUNNED);
- }
+ me->SetControlled(true, UNIT_STATE_STUNNED);
}
+ }
- void DoAction(int32 param) override
+ void DoAction(int32 param) override
+ {
+ if (me->GetEntry() == NPC_BRITTLE_GOLEM && param == ACTION_SHATTER)
{
- 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);
+ if (Creature* volkhan = m_pInstance->GetCreature(DATA_VOLKHAN))
+ volkhan->AI()->DoAction(ACTION_DESTROYED);
- me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_SHATTER_H : SPELL_SHATTER_N, true);
- me->DespawnOrUnsummon(500);
- }
+ me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_SHATTER_H : SPELL_SHATTER_N, true);
+ me->DespawnOrUnsummon(500ms);
}
+ }
- void UpdateAI(uint32 diff) override
- {
- //Return since we have no target or if we are frozen
- if (!UpdateVictim() || me->GetEntry() == NPC_BRITTLE_GOLEM)
- 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;
- events.Update(diff);
+ events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- switch (events.ExecuteEvent())
- {
- case EVENT_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();
+ 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();
+ }
+private:
+ EventMap events;
+ InstanceScript* m_pInstance;
};
enum monumentSpells
@@ -443,141 +422,127 @@ enum monumentEvents
EVENT_UNFREEZE = 20,
};
-class npc_hol_monument : public CreatureScript
+struct npc_hol_monument : public ScriptedAI
{
-public:
- npc_hol_monument() : CreatureScript("npc_hol_monument") {}
-
- CreatureAI* GetAI(Creature* creature) const override
+ npc_hol_monument(Creature* creature) : ScriptedAI(creature)
{
- return GetHallsOfLightningAI<npc_hol_monumentAI>(creature);
+ _attackGUID.Clear();
+ _isActive = urand(0, 1);
+ me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
+ me->CastSpell(me, SPELL_FREEZE_ANIM, true);
}
- struct npc_hol_monumentAI : public ScriptedAI
+ void MoveInLineOfSight(Unit* who) override
{
- npc_hol_monumentAI(Creature* creature) : ScriptedAI(creature)
+ if (_attackGUID)
+ ScriptedAI::MoveInLineOfSight(who);
+ else if (_isActive && who->IsPlayer())
{
- _attackGUID.Clear();
- _isActive = urand(0, 1);
- me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
- me->CastSpell(me, SPELL_FREEZE_ANIM, true);
- }
-
- EventMap events;
- bool _isActive;
- ObjectGuid _attackGUID;
-
- void Reset() override
- {
- }
-
- 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)
{
- 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);
- }
+ _isActive = false;
+ _attackGUID = who->GetGUID();
+ events.Reset();
+ events.RescheduleEvent(EVENT_UNFREEZE, 5s);
}
}
+ }
- void JustEngagedWith(Unit*) override
+ void JustEngagedWith(Unit*) override
+ {
+ events.Reset();
+ if (me->GetEntry() == 28961) // NPC_TITANIUM_SIEGEBREAKER
{
- 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);
- }
+ 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);
}
-
- void AttackStart(Unit* who) override
+ else
{
- if (!_attackGUID || !_isActive)
- return;
- ScriptedAI::AttackStart(who);
+ events.ScheduleEvent(EVENT_THROW, 10s, 25s);
+ events.ScheduleEvent(EVENT_DEADLY_THROW, 15s, 30s);
+ events.ScheduleEvent(EVENT_DEFLECTION, 15s);
}
+ }
- void UpdateAI(uint32 diff) override
- {
- if (!_isActive && !_attackGUID)
- return;
+ void AttackStart(Unit* who) override
+ {
+ if (!_attackGUID || !_isActive)
+ return;
+ ScriptedAI::AttackStart(who);
+ }
- events.Update(diff);
- uint32 eventId = events.ExecuteEvent();
+ void UpdateAI(uint32 diff) override
+ {
+ if (!_isActive && !_attackGUID)
+ return;
- 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;
- }
+ events.Update(diff);
+ uint32 eventId = events.ExecuteEvent();
- //Return since we have no target or if we are disabled from fight
- if (!UpdateVictim())
- return;
+ 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;
+ }
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ //Return since we have no target or if we are disabled from fight
+ if (!UpdateVictim())
+ return;
- 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 (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;
}
- };
+
+ DoMeleeAttackIfReady();
+ }
+
+ private:
+ EventMap events;
+ bool _isActive;
+ ObjectGuid _attackGUID;
};
void AddSC_boss_volkhan()
{
- new boss_volkhan();
- new npc_molten_golem();
- new npc_hol_monument();
+ RegisterHallOfLightningCreatureAI(boss_volkhan);
+ RegisterHallOfLightningCreatureAI(npc_molten_golem);
+ RegisterHallOfLightningCreatureAI(npc_hol_monument);
}
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..4851d2428f 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h
@@ -24,6 +24,15 @@
#define HallsOfLightningScriptName "instance_halls_of_lightning"
+enum BossIds
+{
+ DATA_BJARNGRIM = 0,
+ DATA_IONAR = 1,
+ DATA_LOKEN = 2,
+ DATA_VOLKHAN = 3,
+ MAX_ENCOUNTERS
+};
+
enum HoLEvents
{
TYPE_BJARNGRIM = 0,
@@ -60,4 +69,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..2caa5c5399 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
@@ -32,35 +32,19 @@ public:
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));
-
+ SetBossNumber(MAX_ENCOUNTERS);
volkhanAchievement = false;
bjarngrimAchievement = false;
- }
+ };
bool IsEncounterInProgress() const override
{
+ if (InstanceScript::IsEncounterInProgress())
+ return true;
+
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
{
if (m_auiEncounter[i] == IN_PROGRESS && i != TYPE_LOKEN_INTRO)
@@ -195,22 +179,22 @@ public:
return m_auiEncounter[uiType];
}
- 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;
- }
+ private:
+ uint32 m_auiEncounter[MAX_ENCOUNTER];
- return ObjectGuid::Empty;
- }
+ 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;
};
};
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
index d51461f6a6..5292e69e40 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
@@ -426,7 +426,7 @@ public:
void JustEngagedWith(Unit*) override
{
- events.ScheduleEvent(EVENT_TOXIC_VOLLEY, 5000);
+ events.ScheduleEvent(EVENT_TOXIC_VOLLEY, 5s);
}
void JustDied(Unit* /*killer*/) override
{
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp
index 8202f673a7..809245c986 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp
@@ -391,7 +391,8 @@ public:
switch (action)
{
case ACTION_START_ESCORT_EVENT:
- Start(false, true, ObjectGuid::Empty, 0, true, false);
+ me->SetWalk(false);
+ Start(false, ObjectGuid::Empty, 0, true, false);
Talk(SAY_BRANN_ESCORT_START);
me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE);
me->SetReactState(REACT_AGGRESSIVE);
@@ -443,8 +444,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 +457,8 @@ public:
door->SetGoState(GO_STATE_READY);
break;
case ACTION_OPEN_DOOR:
- Start(false, true, ObjectGuid::Empty, 0, true, false);
+ me->SetWalk(false);
+ Start(false, ObjectGuid::Empty, 0, true, false);
SetNextWaypoint(34, false);
SetEscortPaused(false);
me->RemoveAura(58506);
@@ -508,7 +510,7 @@ public:
kaddrak->CastSpell(plr, DUNGEON_MODE(SPELL_GLARE_OF_THE_TRIBUNAL, SPELL_GLARE_OF_THE_TRIBUNAL_H), true);
}
- events.RescheduleEvent(EVENT_KADDRAK_SWITCH_EYE, 1000ms);
+ events.RescheduleEvent(EVENT_KADDRAK_SWITCH_EYE, 1s);
events.Repeat(1500ms);
break;
}
@@ -550,7 +552,7 @@ public:
darkMatterTargetGUID = cr->GetGUID();
- events.RescheduleEvent(EVENT_DARK_MATTER_START, 5000ms);
+ events.RescheduleEvent(EVENT_DARK_MATTER_START, 5s);
}
}
events.Repeat(30s);
@@ -571,11 +573,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)
{
@@ -594,7 +596,7 @@ 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->DespawnOrUnsummon(500ms);
}
break;
}
@@ -625,12 +627,12 @@ public:
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);
+ events.ScheduleEvent(EVENT_SUMMON_STORMCALLER, Seconds(urand(10 - WaveNum, 15 - WaveNum)));
if (WaveNum > 5)
- events.ScheduleEvent(EVENT_SUMMON_CUSTODIAN, urand(10 - WaveNum, 15 - WaveNum) * 1000);
+ events.ScheduleEvent(EVENT_SUMMON_CUSTODIAN, Seconds(urand(10 - WaveNum, 15 - WaveNum)));
WaveNum++;
- events.RepeatEvent(Time);
+ events.Repeat(Milliseconds(Time));
break;
}
case EVENT_SUMMON_STORMCALLER:
@@ -931,10 +933,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:
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..1e6dec95fe 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
@@ -355,7 +355,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 +418,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 +579,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 +588,7 @@ public:
{
_boomed = true;
me->CastSpell(me, SPELL_LIGHTNING_BLAST, true);
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
}
};
@@ -805,7 +805,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;
}
@@ -902,7 +902,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..a4b1ef6754 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp
@@ -255,7 +255,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 +393,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..07e1ac92fd 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,7 @@ public:
{
summons.DespawnAll();
_spellTimer = 0;
- Start(false, false, ObjectGuid::Empty, nullptr, false, true);
+ Start(false, ObjectGuid::Empty, nullptr, false, true);
if (Aura* aur = me->AddAura(SPELL_FREYA_DUMMY_YELLOW, me))
{
aur->SetMaxDuration(-1);
@@ -1157,7 +1156,7 @@ public:
_beamTimer = 0;
_removeTimer = 1;
- me->DespawnOrUnsummon(5 * IN_MILLISECONDS);
+ me->DespawnOrUnsummon(5s);
}
}
if (_removeTimer)
@@ -1364,7 +1363,7 @@ public:
liquid->CastSpell(liquid, SPELL_DUST_CLOUD_IMPACT, true);
}
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
}
@@ -1750,7 +1749,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..9bb1d122ae 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
@@ -1024,7 +1024,7 @@ public:
{
me->RemoveAurasDueToSpell(SPELL_AUTO_GROW);
me->CastSpell(me, me->GetMap()->Is25ManRaid() ? SPELL_LIFEBINDER_HEAL_25 : SPELL_LIFEBINDER_HEAL_10, true);
- me->DespawnOrUnsummon(2000);
+ me->DespawnOrUnsummon(2s);
_healTimer = 0;
}
}
@@ -1063,7 +1063,7 @@ public:
if (_despawnTimer >= 22000)
{
me->RemoveAurasDueToSpell(SPELL_AUTO_GROW);
- me->DespawnOrUnsummon(2200);
+ me->DespawnOrUnsummon(2200ms);
_despawnTimer = 0;
}
}
@@ -1203,7 +1203,7 @@ public:
if (Unit* target = SelectTargetFromPlayerList(80))
AttackStart(target);
else
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
events.Repeat(10s);
break;
}
@@ -1250,7 +1250,7 @@ public:
if (_explodeTimer >= 11000)
{
me->CastSpell(me, me->GetMap()->Is25ManRaid() ? SPELL_NATURE_BOMB_DAMAGE_25 : SPELL_NATURE_BOMB_DAMAGE_10, false);
- me->DespawnOrUnsummon(1000);
+ 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..013418f223 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
@@ -704,18 +704,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);
}
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
index cda5a3629c..133868f332 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
@@ -247,7 +247,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);
@@ -347,7 +347,7 @@ 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);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
index 34f5cf1555..b9a12638ba 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
@@ -339,9 +339,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);
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
index 9823a3d9ed..d7ba40cdec 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
@@ -378,8 +378,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 +601,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 +740,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 +1221,7 @@ public:
if (p->GetEntry() == NPC_LEVIATHAN_MKII_CANNON && !apply)
{
Unit::Kill(p, p);
- p->ToCreature()->DespawnOrUnsummon(6000);
+ p->ToCreature()->DespawnOrUnsummon(6s);
}
}
@@ -1343,7 +1343,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 +1555,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 +1681,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 +1739,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 +1791,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:
@@ -1960,7 +1956,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 +2011,7 @@ public:
if (despawnTimer <= diff)
{
despawnTimer = 60000;
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
else
despawnTimer -= diff;
@@ -2081,7 +2077,7 @@ public:
bot->CastSpell(bot, SPELL_EMERGENCY_MODE, true);
}
- me->DespawnOrUnsummon(500);
+ me->DespawnOrUnsummon(500ms);
timer = 99999;
}
else
@@ -2346,7 +2342,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:
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
index 8d9dae387f..1b33773507 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
@@ -683,7 +683,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..006798aebc 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
@@ -859,7 +859,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 +875,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 +934,8 @@ public:
{
InitWaypoint();
Reset();
- Start(false, true);
+ me->SetWalk(false);
+ Start(false);
}
uint32 Timer;
@@ -1020,7 +1021,8 @@ public:
{
InitWaypoint();
Reset();
- Start(false, true);
+ me->SetWalk(false);
+ Start(false);
SetDespawnAtEnd(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..570e7a266d 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
@@ -611,7 +611,7 @@ public:
if (!urand(0, 2))
pXT002->AI()->Talk(EMOTE_SCRAPBOT);
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
}
}
@@ -657,7 +657,7 @@ public:
if (Unit* target = SelectTargetFromPlayerList(200))
AttackStart(target);
else
- me->DespawnOrUnsummon(500);
+ me->DespawnOrUnsummon(500ms);
}
void UpdateAI(uint32 diff) override
@@ -769,12 +769,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..c26a9ff053 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp
@@ -696,11 +696,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 +804,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 +824,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);
@@ -856,15 +856,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 +901,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 +937,8 @@ public:
{
InitWaypoint();
Reset();
- Start(false, true, ObjectGuid::Empty, nullptr, false, true);
+ me->SetWalk(false);
+ Start(false, ObjectGuid::Empty, nullptr, false, true);
}
uint32 _checkTimer;
@@ -1167,20 +1168,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)
{
@@ -1807,7 +1808,7 @@ public:
}
me->ReplaceAllNpcFlags(UNIT_NPC_FLAG_NONE);
- me->DespawnOrUnsummon(1000);
+ me->DespawnOrUnsummon(1s);
}
private:
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
index a3d0626fa1..41a35a583d 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
@@ -80,7 +80,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/utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
index 62263725b5..825efd9693 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
@@ -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
@@ -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_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
index 92fc069d45..32054ef609 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
@@ -157,7 +157,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();
@@ -339,7 +339,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..3631886146 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
@@ -217,7 +217,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);
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..3489764e91 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,8 @@ struct violet_hold_trashAI : public npc_escortAI
break;
}
SetDespawnAtEnd(false);
- Start(true, true);
+ me->SetWalk(false);
+ Start(true);
}
npc_escortAI::UpdateAI(diff);
@@ -1111,7 +1112,8 @@ public:
break;
}
SetDespawnAtEnd(false);
- Start(true, true);
+ me->SetWalk(false);
+ Start(true);
}
if (bOpening)
@@ -1136,7 +1138,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 +1200,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..21f81d4efb 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,7 @@ public:
go->UseDoorOrButton();
if (npc_escortAI* pEscortAI = CAST_AI(npc_lurgglbr::npc_lurgglbrAI, creature->AI()))
- pEscortAI->Start(true, false, player->GetGUID());
+ pEscortAI->Start(true, player->GetGUID());
creature->SetFaction(player->GetTeamId() == TEAM_ALLIANCE ? FACTION_ESCORTEE_A_PASSIVE : FACTION_ESCORTEE_H_PASSIVE);
return true;
@@ -609,7 +609,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 +914,7 @@ public:
creature->SetFaction(player->GetTeamId() == TEAM_ALLIANCE ? FACTION_ESCORTEE_A_PASSIVE : FACTION_ESCORTEE_H_PASSIVE);
creature->SetStandState(UNIT_STAND_STATE_STAND);
creature->AI()->Talk(SAY_1, player);
- CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
+ CAST_AI(npc_escortAI, (creature->AI()))->Start(true, player->GetGUID());
}
return true;
}
@@ -995,7 +995,8 @@ 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());
+ creature->SetWalk(false);
+ CAST_AI(npc_escortAI, (creature->AI()))->Start(true, player->GetGUID());
}
return true;
}
@@ -1421,7 +1422,7 @@ public:
_playerGUID.Clear();
}
- void SetGUID(ObjectGuid guid, int32 /*action*/) override
+ void SetGUID(ObjectGuid const& guid, int32 /*action*/) override
{
if (_playerGUID)
return;
@@ -1431,7 +1432,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 +1558,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
@@ -1884,7 +1885,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;
diff --git a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp
index a211b22028..ac3aa4ef27 100644
--- a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp
+++ b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp
@@ -44,7 +44,7 @@ struct npc_preparations_for_war_vehicle : public NullCreatureAI
WPPath* path = sSmartWaypointMgr->GetPath(me->GetEntry());
if (!path || path->empty())
{
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
return;
}
@@ -108,7 +108,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 +117,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..5710efa291 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;
}
}
@@ -626,7 +626,7 @@ public:
{
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..50c4518be1 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;
}
@@ -590,77 +590,77 @@ public:
if (me->GetPositionY() == -2835.11f)
{
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
- me->DespawnOrUnsummon(20000);
+ me->DespawnOrUnsummon(20s);
}
if (me->GetPositionY() == -2981.89f)
{
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
- me->DespawnOrUnsummon(18000);
+ me->DespawnOrUnsummon(18s);
}
if (me->GetPositionY() == -2934.44f)
{
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
- me->DespawnOrUnsummon(9000);
+ me->DespawnOrUnsummon(9s);
}
if (me->GetPositionY() == -3020.99f)
{
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
- me->DespawnOrUnsummon(22000);
+ me->DespawnOrUnsummon(22s);
}
if (me->GetPositionY() == -2964.73f)
{
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_2, false);
- me->DespawnOrUnsummon(15000);
+ me->DespawnOrUnsummon(15s);
}
if (me->GetPositionY() == -2940.50f)
{
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
- me->DespawnOrUnsummon(20000);
+ me->DespawnOrUnsummon(20s);
}
if (me->GetPositionY() == -2847.93f)
{
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
- me->DespawnOrUnsummon(30000);
+ me->DespawnOrUnsummon(30s);
}
if (me->GetPositionY() == -2835.31f)
{
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
- me->DespawnOrUnsummon(27000);
+ me->DespawnOrUnsummon(27s);
}
if (me->GetPositionY() == -2822.20f)
{
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
- me->DespawnOrUnsummon(25000);
+ me->DespawnOrUnsummon(25s);
}
if (me->GetPositionY() == -2846.31f)
{
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
- me->DespawnOrUnsummon(21000);
+ me->DespawnOrUnsummon(21s);
}
if (me->GetPositionY() == -2897.23f)
{
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
- me->DespawnOrUnsummon(15000);
+ me->DespawnOrUnsummon(15s);
}
if (me->GetPositionY() == -2886.01f)
{
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
- me->DespawnOrUnsummon(25000);
+ me->DespawnOrUnsummon(25s);
}
if (me->GetPositionY() == -2906.89f)
{
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
- me->DespawnOrUnsummon(25000);
+ me->DespawnOrUnsummon(25s);
}
if (me->GetPositionY() == -3048.94f)
{
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_2, false);
- me->DespawnOrUnsummon(30000);
+ me->DespawnOrUnsummon(30s);
}
if (me->GetPositionY() == -2961.08f)
{
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_2, false);
- me->DespawnOrUnsummon(25000);
+ 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..fcd725290d 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,7 @@ 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());
+ CAST_AI(npc_escortAI, (creature->AI()))->Start(true, player->GetGUID());
}
return true;
}
@@ -309,7 +309,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..3a23551cf2 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,7 @@ public:
Talk(0);
events.Reset();
summons.DespawnAll();
- Start(false, false);
+ Start(false);
int8 i = -1;
std::list<Creature*> cList;
@@ -796,7 +793,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 +1019,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 +1254,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,14 +1307,14 @@ 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);
+ me->DespawnOrUnsummon(1ms);
return;
}
@@ -1342,7 +1339,7 @@ public:
// Check if path is finished
if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() != ESCORT_MOTION_TYPE)
{
- me->DespawnOrUnsummon(1);
+ me->DespawnOrUnsummon(1ms);
return;
}
@@ -1381,7 +1378,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..07bdfc2e95 100644
--- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp
+++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
@@ -605,7 +605,7 @@ public:
creature->GetMotionMaster()->MoveJumpTo(0, 0.4f, 0.4f);
creature->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE);
- pEscortAI->Start(false, false, player->GetGUID());
+ pEscortAI->Start(false, player->GetGUID());
creature->AI()->Talk(SAY_WP_1);
}
}
diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp
index 35fd65e310..559c8e823f 100644
--- a/src/server/scripts/Northrend/zone_storm_peaks.cpp
+++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp
@@ -28,88 +28,91 @@
#include "Vehicle.h"
#include "WaypointMgr.h"
-enum qSniffing
+enum qSniffingOutThePerpetrator
{
+ NPC_FROSTHOUND = 29677,
SPELL_SUMMON_PURSUERS_PERIODIC = 54993,
SPELL_SNIFFING_CREDIT = 55477,
+ TALK_EMOTE_FROSTHOUND_SNIFF = 0,
+ TALK_SEEN = 1,
+ TALK_CONFRONT = 2,
+ TALK_EMOTE_TRACKED_COMPLETE = 3,
};
-class npc_frosthound : public CreatureScript
+struct npc_frosthound : public npc_escortAI
{
-public:
- npc_frosthound() : CreatureScript("npc_frosthound") { }
-
- struct npc_frosthoundAI : public npc_escortAI
- {
- npc_frosthoundAI(Creature* creature) : npc_escortAI(creature) {}
+ explicit npc_frosthound(Creature* creature) : npc_escortAI(creature), _summons(creature) {}
- void AttackStart(Unit* /*who*/) override {}
- void JustEngagedWith(Unit* /*who*/) override {}
- void EnterEvadeMode(EvadeReason /* why */) override {}
+ void AttackStart(Unit* /*who*/) override {}
+ void JustEngagedWith(Unit* /*who*/) override {}
+ void EnterEvadeMode(EvadeReason /* why */) override {}
+ void JustDied(Unit* /*killer*/) override { }
+ void OnCharmed(bool /*apply*/) override { }
- void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override
+ void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override
+ {
+ if (who->IsPlayer())
{
- if (who->IsPlayer())
+ if (apply)
{
- if (apply)
- {
- me->SetFaction(who->GetFaction());
- me->CastSpell(me, SPELL_SUMMON_PURSUERS_PERIODIC, true);
- Start(false, true, who->GetGUID());
- }
+ me->SetFaction(who->GetFaction());
+ me->CastSpell(me, SPELL_SUMMON_PURSUERS_PERIODIC, true);
+ me->SetWalk(false);
+ Start(false, who->GetGUID());
+ Talk(TALK_EMOTE_FROSTHOUND_SNIFF, me);
}
}
+ }
- void JustDied(Unit* /*killer*/) override
- {
- }
-
- void OnCharmed(bool /*apply*/) override
- {
- }
+ void UpdateAI(uint32 diff) override
+ {
+ npc_escortAI::UpdateAI(diff);
- void UpdateAI(uint32 diff) override
- {
- npc_escortAI::UpdateAI(diff);
+ if (!UpdateVictim())
+ return;
+ }
- if (!UpdateVictim())
- return;
- }
+ void WaypointReached(uint32 waypointId) override
+ {
+ Player* player = GetPlayerForEscort();
+ if (!player)
+ return;
- void WaypointReached(uint32 waypointId) override
+ switch (waypointId)
{
- Player* player = GetPlayerForEscort();
- if (!player)
- return;
-
- switch (waypointId)
- {
- case 0:
- me->TextEmote("You've been seen! Use the net and Freezing elixir to keep the dwarves away!", nullptr, true);
- break;
- case 19:
- me->TextEmote("The frosthound has located the thief's hiding place. Confront him!", 0, true);
- if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
- summoner->ToPlayer()->KilledMonsterCredit(29677);
- break;
- }
+ case 0:
+ Talk(TALK_SEEN, player);
+ break;
+ case 34:
+ Talk(TALK_EMOTE_TRACKED_COMPLETE, me);
+ Talk(TALK_CONFRONT, player);
+ if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
+ summoner->ToPlayer()->KilledMonsterCredit(NPC_FROSTHOUND);
+ _summons.DespawnAll();
+ break;
+ default:
+ break;
}
+ }
- void JustSummoned(Creature* cr) override
- {
- cr->ToTempSummon()->SetTempSummonType(TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT);
- cr->ToTempSummon()->InitStats(20000);
- if (urand(0, 1))
- cr->GetMotionMaster()->MoveFollow(me, 0.0f, 0.0f);
- else if (cr->AI())
- cr->AI()->AttackStart(me);
- }
- };
+ void JustSummoned(Creature* cr) override
+ {
+ _summons.Summon(cr);
+ cr->ToTempSummon()->SetTempSummonType(TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT);
+ cr->ToTempSummon()->InitStats(20000);
+ if (urand(0, 1))
+ cr->GetMotionMaster()->MoveFollow(me, 0.0f, 0.0f);
+ else if (cr->AI())
+ cr->AI()->AttackStart(me);
+ }
- CreatureAI* GetAI(Creature* creature) const override
+ void Reset() override
{
- return new npc_frosthoundAI(creature);
+ _summons.DespawnAll();
}
+
+private:
+ SummonList _summons;
};
enum eIronWatcher
@@ -157,7 +160,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);
}
}
@@ -244,7 +247,8 @@ public:
void RollPath()
{
me->SetEntry(NPC_TIME_LOST_PROTO_DRAKE);
- Start(true, true, ObjectGuid::Empty, 0, false, true, true);
+ me->SetWalk(false);
+ Start(true, ObjectGuid::Empty, 0, false, true, true);
SetNextWaypoint(urand(0, 250), true);
me->UpdateEntry(roll_chance_i(25) ? NPC_TIME_LOST_PROTO_DRAKE : NPC_VYRAGOSA, 0, false);
}
@@ -910,7 +914,10 @@ public:
if (who->IsPlayer())
{
if (apply)
- Start(false, true, who->GetGUID());
+ {
+ me->SetWalk(false);
+ Start(false, who->GetGUID());
+ }
}
}
@@ -968,7 +975,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;
}
@@ -1147,13 +1154,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:
@@ -1194,7 +1201,7 @@ class spell_feed_stormcrest_eagle : public SpellScript
void AddSC_storm_peaks()
{
- new npc_frosthound();
+ RegisterCreatureAI(npc_frosthound);
new npc_iron_watcher();
new npc_time_lost_proto_drake();
new npc_wild_wyrm();
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_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..c774c1a5e3 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
@@ -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
@@ -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_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/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/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
index dab0d05907..57b86cae37 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);
@@ -452,10 +452,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..871d014d98 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);
}
@@ -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..9438aa8082 100644
--- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
+++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
@@ -171,7 +171,7 @@ public:
npc_ancestral_wolfAI(Creature* creature) : npc_escortAI(creature)
{
if (creature->GetOwner() && creature->GetOwner()->IsPlayer())
- Start(false, false, creature->GetOwner()->GetGUID());
+ Start(false, creature->GetOwner()->GetGUID());
creature->SetSpeed(MOVE_WALK, 1.5f);
DoCast(SPELL_GUIDED_BY_THE_SPIRITS);
Reset();
@@ -209,7 +209,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 +234,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 +312,7 @@ public:
{
me->SetReactState(REACT_AGGRESSIVE);
me->SetFaction(FACTION_ESCORTEE_H_PASSIVE);
- npc_escortAI::Start(true, false, player->GetGUID());
+ npc_escortAI::Start(true, player->GetGUID());
}
}
diff --git a/src/server/scripts/Outland/zone_nagrand.cpp b/src/server/scripts/Outland/zone_nagrand.cpp
index d0c6df3803..87051cbc51 100644
--- a/src/server/scripts/Outland/zone_nagrand.cpp
+++ b/src/server/scripts/Outland/zone_nagrand.cpp
@@ -65,7 +65,7 @@ public:
{
creature->SetStandState(UNIT_STAND_STATE_STAND);
creature->SetFaction(FACTION_ESCORTEE_H_NEUTRAL_ACTIVE);
- EscortAI->Start(true, false, player->GetGUID(), quest);
+ 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 +133,7 @@ public:
if (Player* player = GetPlayerForEscort())
player->GroupEventHappens(QUEST_TOTEM_KARDASH_H, me);
- SetRun();
+ SetRun(true);
break;
}
}
@@ -303,10 +303,10 @@ 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);
+ 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 +361,7 @@ public:
if (Player* player = GetPlayerForEscort())
player->GroupEventHappens(QUEST_TOTEM_KARDASH_A, me);
- SetRun();
+ SetRun(true);
break;
}
}
@@ -464,7 +464,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..d53cf6c33d 100644
--- a/src/server/scripts/Outland/zone_netherstorm.cpp
+++ b/src/server/scripts/Outland/zone_netherstorm.cpp
@@ -99,11 +99,12 @@ 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);
+ me->SetWalk(false);
+ Start(true, playerGUID);
SetEscortPaused(true);
started = true;
@@ -126,7 +127,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 +179,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 +228,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 +606,7 @@ 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());
+ CAST_AI(npc_escortAI, (creature->AI()))->Start(true, player->GetGUID());
}
return true;
}
@@ -771,7 +772,7 @@ public:
if (npc_maxx_a_million_escortAI* pEscortAI = CAST_AI(npc_maxx_a_million_escort::npc_maxx_a_million_escortAI, creature->AI()))
{
creature->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE);
- pEscortAI->Start(false, false, player->GetGUID());
+ 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..fe7d81d4e6 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;
}
diff --git a/src/server/scripts/Outland/zone_shattrath_city.cpp b/src/server/scripts/Outland/zone_shattrath_city.cpp
index 29382d6ae4..045e4cfb7c 100644
--- a/src/server/scripts/Outland/zone_shattrath_city.cpp
+++ b/src/server/scripts/Outland/zone_shattrath_city.cpp
@@ -246,7 +246,7 @@ public:
Player* player = summoner->ToPlayer();
if (player && player->GetQuestStatus(10211) == QUEST_STATUS_INCOMPLETE)
- Start(false, false, summoner->GetGUID());
+ 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..ba19c737e0 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,7 @@ public:
{
if (quest->GetQuestId() == QUEST_EFTW_H || quest->GetQuestId() == QUEST_EFTW_A)
{
- CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
+ 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..5b8fc12e19 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))
@@ -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..a3a62ae7e8 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -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