aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/authserver/Authentication/AuthCodes.cpp3
-rw-r--r--src/server/authserver/Authentication/AuthCodes.h2
-rw-r--r--src/server/authserver/CMakeLists.txt4
-rw-r--r--src/server/authserver/Main.cpp276
-rw-r--r--src/server/authserver/PrecompiledHeaders/authPCH.h4
-rw-r--r--src/server/authserver/Realms/RealmList.cpp99
-rw-r--r--src/server/authserver/Realms/RealmList.h54
-rw-r--r--src/server/authserver/Server/AuthSession.cpp (renamed from src/server/authserver/Server/AuthSocket.cpp)798
-rw-r--r--src/server/authserver/Server/AuthSession.h100
-rw-r--r--src/server/authserver/Server/AuthSocket.h83
-rw-r--r--src/server/authserver/Server/RealmAcceptor.h70
-rw-r--r--src/server/authserver/Server/RealmSocket.cpp291
-rw-r--r--src/server/authserver/Server/RealmSocket.h80
-rw-r--r--src/server/authserver/authserver.conf.dist7
-rw-r--r--src/server/collision/BoundingIntervalHierarchy.cpp12
-rw-r--r--src/server/collision/BoundingIntervalHierarchy.h4
-rw-r--r--src/server/collision/CMakeLists.txt2
-rw-r--r--src/server/collision/DynamicTree.cpp2
-rw-r--r--src/server/collision/Management/MMapFactory.h3
-rw-r--r--src/server/collision/Management/MMapManager.h9
-rw-r--r--src/server/collision/Management/VMapManager2.cpp8
-rw-r--r--src/server/collision/Management/VMapManager2.h36
-rw-r--r--src/server/collision/Maps/MapTree.cpp7
-rw-r--r--src/server/collision/Maps/MapTree.h14
-rw-r--r--src/server/collision/Maps/TileAssembler.h2
-rw-r--r--src/server/collision/Models/GameObjectModel.cpp7
-rw-r--r--src/server/collision/Models/GameObjectModel.h3
-rw-r--r--src/server/collision/Models/ModelInstance.cpp8
-rw-r--r--src/server/collision/Models/ModelInstance.h4
-rw-r--r--src/server/collision/Models/WorldModel.cpp14
-rw-r--r--src/server/collision/Models/WorldModel.h6
-rw-r--r--src/server/collision/RegularGrid.h4
-rw-r--r--src/server/collision/VMapDefinitions.h1
-rw-r--r--src/server/game/AI/CoreAI/CombatAI.cpp8
-rw-r--r--src/server/game/AI/CoreAI/CombatAI.h40
-rw-r--r--src/server/game/AI/CoreAI/GameObjectAI.h2
-rw-r--r--src/server/game/AI/CoreAI/GuardAI.h6
-rw-r--r--src/server/game/AI/CoreAI/PassiveAI.cpp2
-rw-r--r--src/server/game/AI/CoreAI/PassiveAI.h34
-rw-r--r--src/server/game/AI/CoreAI/PetAI.cpp22
-rw-r--r--src/server/game/AI/CoreAI/PetAI.h20
-rw-r--r--src/server/game/AI/CoreAI/ReactorAI.h4
-rw-r--r--src/server/game/AI/CoreAI/TotemAI.h8
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.cpp9
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.h9
-rw-r--r--src/server/game/AI/CreatureAI.cpp17
-rw-r--r--src/server/game/AI/CreatureAI.h3
-rw-r--r--src/server/game/AI/CreatureAIFactory.h10
-rw-r--r--src/server/game/AI/CreatureAIImpl.h353
-rw-r--r--src/server/game/AI/CreatureAISelector.cpp8
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.cpp15
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.h61
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp4
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedEscortAI.h18
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp6
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h16
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp30
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.h103
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp176
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.h4
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp4
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h41
-rw-r--r--src/server/game/Accounts/AccountMgr.cpp31
-rw-r--r--src/server/game/Accounts/AccountMgr.h11
-rw-r--r--src/server/game/Accounts/RBAC.h65
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp53
-rw-r--r--src/server/game/Achievements/AchievementMgr.h22
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.cpp4
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.h13
-rw-r--r--src/server/game/Battlefield/Battlefield.cpp103
-rw-r--r--src/server/game/Battlefield/Battlefield.h27
-rw-r--r--src/server/game/Battlefield/BattlefieldMgr.h15
-rw-r--r--src/server/game/Battlefield/Zones/BattlefieldWG.cpp590
-rw-r--r--src/server/game/Battlefield/Zones/BattlefieldWG.h637
-rw-r--r--src/server/game/Battlegrounds/Arena.cpp252
-rw-r--r--src/server/game/Battlegrounds/Arena.h58
-rw-r--r--src/server/game/Battlegrounds/ArenaScore.h104
-rw-r--r--src/server/game/Battlegrounds/ArenaTeam.cpp4
-rw-r--r--src/server/game/Battlegrounds/ArenaTeam.h3
-rw-r--r--src/server/game/Battlegrounds/ArenaTeamMgr.cpp2
-rw-r--r--src/server/game/Battlegrounds/ArenaTeamMgr.h12
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp409
-rw-r--r--src/server/game/Battlegrounds/Battleground.h141
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.cpp475
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.h85
-rw-r--r--src/server/game/Battlegrounds/BattlegroundQueue.cpp6
-rw-r--r--src/server/game/Battlegrounds/BattlegroundQueue.h8
-rw-r--r--src/server/game/Battlegrounds/BattlegroundScore.h121
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp53
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAB.h76
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp260
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAV.h314
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp73
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundBE.h24
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp191
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundDS.h83
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp26
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundEY.h75
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp95
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundIC.h85
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp63
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundNA.h21
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp63
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundRL.h21
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp125
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundRV.h41
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp484
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundSA.h312
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp22
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundWS.h75
-rw-r--r--src/server/game/CMakeLists.txt4
-rw-r--r--src/server/game/Calendar/CalendarMgr.cpp29
-rw-r--r--src/server/game/Calendar/CalendarMgr.h20
-rw-r--r--src/server/game/Chat/Channels/Channel.h16
-rw-r--r--src/server/game/Chat/Channels/ChannelMgr.cpp8
-rw-r--r--src/server/game/Chat/Channels/ChannelMgr.h13
-rw-r--r--src/server/game/Chat/Chat.cpp4
-rw-r--r--src/server/game/Chat/Chat.h16
-rw-r--r--src/server/game/Chat/ChatLink.h29
-rw-r--r--src/server/game/Combat/ThreatManager.h6
-rw-r--r--src/server/game/Combat/UnitEvents.h2
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp85
-rw-r--r--src/server/game/Conditions/ConditionMgr.h14
-rw-r--r--src/server/game/Conditions/DisableMgr.cpp12
-rw-r--r--src/server/game/DataStores/DBCEnums.h37
-rw-r--r--src/server/game/DataStores/DBCStores.cpp30
-rw-r--r--src/server/game/DataStores/DBCStores.h6
-rw-r--r--src/server/game/DataStores/DBCStructure.h64
-rw-r--r--src/server/game/DataStores/DBCfmt.h3
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp158
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.h20
-rw-r--r--src/server/game/DungeonFinding/LFGPlayerData.cpp10
-rw-r--r--src/server/game/DungeonFinding/LFGPlayerData.h3
-rw-r--r--src/server/game/DungeonFinding/LFGScripts.cpp18
-rw-r--r--src/server/game/DungeonFinding/LFGScripts.h18
-rw-r--r--src/server/game/Entities/Corpse/Corpse.h4
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp157
-rw-r--r--src/server/game/Entities/Creature/Creature.h149
-rw-r--r--src/server/game/Entities/Creature/CreatureGroups.cpp8
-rw-r--r--src/server/game/Entities/Creature/CreatureGroups.h17
-rw-r--r--src/server/game/Entities/Creature/GossipDef.cpp37
-rw-r--r--src/server/game/Entities/Creature/TemporarySummon.h42
-rw-r--r--src/server/game/Entities/DynamicObject/DynamicObject.cpp15
-rw-r--r--src/server/game/Entities/DynamicObject/DynamicObject.h8
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp264
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h72
-rw-r--r--src/server/game/Entities/Item/Container/Bag.h14
-rw-r--r--src/server/game/Entities/Item/Item.cpp14
-rw-r--r--src/server/game/Entities/Item/Item.h6
-rw-r--r--src/server/game/Entities/Item/ItemEnchantmentMgr.cpp2
-rw-r--r--src/server/game/Entities/Item/ItemPrototype.h6
-rw-r--r--src/server/game/Entities/Object/Object.cpp127
-rw-r--r--src/server/game/Entities/Object/Object.h76
-rw-r--r--src/server/game/Entities/Object/ObjectPosSelector.cpp2
-rw-r--r--src/server/game/Entities/Object/ObjectPosSelector.h12
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateData.cpp6
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateData.h8
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp79
-rw-r--r--src/server/game/Entities/Pet/Pet.h30
-rw-r--r--src/server/game/Entities/Pet/PetDefines.h2
-rw-r--r--src/server/game/Entities/Player/Player.cpp1125
-rw-r--r--src/server/game/Entities/Player/Player.h213
-rw-r--r--src/server/game/Entities/Player/SocialMgr.cpp4
-rw-r--r--src/server/game/Entities/Player/SocialMgr.h11
-rw-r--r--src/server/game/Entities/Totem/Totem.h26
-rw-r--r--src/server/game/Entities/Transport/Transport.cpp75
-rw-r--r--src/server/game/Entities/Transport/Transport.h25
-rw-r--r--src/server/game/Entities/Unit/StatSystem.cpp10
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp1086
-rw-r--r--src/server/game/Entities/Unit/Unit.h72
-rwxr-xr-xsrc/server/game/Entities/Vehicle/Vehicle.cpp45
-rw-r--r--src/server/game/Entities/Vehicle/Vehicle.h8
-rw-r--r--src/server/game/Entities/Vehicle/VehicleDefines.h2
-rw-r--r--src/server/game/Events/GameEventMgr.cpp18
-rw-r--r--src/server/game/Events/GameEventMgr.h13
-rw-r--r--src/server/game/Globals/ObjectAccessor.cpp23
-rw-r--r--src/server/game/Globals/ObjectAccessor.h63
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp724
-rw-r--r--src/server/game/Globals/ObjectMgr.h148
-rw-r--r--src/server/game/Grids/GridDefines.h10
-rw-r--r--src/server/game/Grids/GridStates.cpp12
-rw-r--r--src/server/game/Grids/GridStates.h15
-rw-r--r--src/server/game/Grids/Notifiers/GridNotifiers.cpp7
-rw-r--r--src/server/game/Grids/Notifiers/GridNotifiers.h8
-rw-r--r--src/server/game/Groups/Group.cpp11
-rw-r--r--src/server/game/Groups/Group.h4
-rw-r--r--src/server/game/Groups/GroupMgr.cpp2
-rw-r--r--src/server/game/Groups/GroupMgr.h9
-rw-r--r--src/server/game/Groups/GroupReference.h6
-rw-r--r--src/server/game/Guilds/Guild.cpp13
-rw-r--r--src/server/game/Guilds/Guild.h40
-rw-r--r--src/server/game/Guilds/GuildMgr.h12
-rw-r--r--src/server/game/Handlers/AddonHandler.cpp4
-rw-r--r--src/server/game/Handlers/AddonHandler.h19
-rw-r--r--src/server/game/Handlers/ArenaTeamHandler.cpp32
-rw-r--r--src/server/game/Handlers/AuctionHouseHandler.cpp21
-rw-r--r--src/server/game/Handlers/BattleGroundHandler.cpp8
-rw-r--r--src/server/game/Handlers/CalendarHandler.cpp98
-rw-r--r--src/server/game/Handlers/ChannelHandler.cpp5
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp56
-rw-r--r--src/server/game/Handlers/ChatHandler.cpp2
-rw-r--r--src/server/game/Handlers/CombatHandler.cpp6
-rw-r--r--src/server/game/Handlers/GroupHandler.cpp4
-rw-r--r--src/server/game/Handlers/GuildHandler.cpp2
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp79
-rw-r--r--src/server/game/Handlers/LootHandler.cpp41
-rw-r--r--src/server/game/Handlers/MailHandler.cpp22
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp43
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp44
-rw-r--r--src/server/game/Handlers/NPCHandler.cpp7
-rw-r--r--src/server/game/Handlers/NPCHandler.h6
-rw-r--r--src/server/game/Handlers/PetHandler.cpp24
-rw-r--r--src/server/game/Handlers/QueryHandler.cpp80
-rw-r--r--src/server/game/Handlers/QuestHandler.cpp3
-rw-r--r--src/server/game/Handlers/SkillHandler.cpp12
-rw-r--r--src/server/game/Handlers/SpellHandler.cpp2
-rw-r--r--src/server/game/Handlers/TicketHandler.cpp12
-rw-r--r--src/server/game/Handlers/TradeHandler.cpp186
-rw-r--r--src/server/game/Handlers/VehicleHandler.cpp4
-rw-r--r--src/server/game/Instances/InstanceSaveMgr.cpp6
-rw-r--r--src/server/game/Instances/InstanceSaveMgr.h36
-rw-r--r--src/server/game/Instances/InstanceScript.cpp19
-rw-r--r--src/server/game/Instances/InstanceScript.h8
-rw-r--r--src/server/game/Loot/LootMgr.h31
-rw-r--r--src/server/game/Maps/Map.cpp100
-rw-r--r--src/server/game/Maps/Map.h61
-rw-r--r--src/server/game/Maps/MapInstanced.cpp4
-rw-r--r--src/server/game/Maps/MapInstanced.h12
-rw-r--r--src/server/game/Maps/MapManager.cpp28
-rw-r--r--src/server/game/Maps/MapManager.h18
-rw-r--r--src/server/game/Maps/MapReference.h6
-rw-r--r--src/server/game/Maps/MapUpdater.cpp135
-rw-r--r--src/server/game/Maps/MapUpdater.h52
-rw-r--r--src/server/game/Maps/TransportMgr.cpp14
-rw-r--r--src/server/game/Maps/TransportMgr.h16
-rw-r--r--src/server/game/Miscellaneous/Formulas.h33
-rw-r--r--src/server/game/Miscellaneous/Language.h81
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h35
-rw-r--r--src/server/game/Movement/FollowerReference.h6
-rw-r--r--src/server/game/Movement/MotionMaster.cpp4
-rwxr-xr-xsrc/server/game/Movement/MovementGenerator.h12
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp2
-rw-r--r--src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp8
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h6
-rw-r--r--src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h2
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/IdleMovementGenerator.h34
-rw-r--r--src/server/game/Movement/MovementGenerators/PointMovementGenerator.h14
-rw-r--r--src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp10
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp24
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h4
-rw-r--r--src/server/game/Movement/PathGenerator.cpp68
-rw-r--r--src/server/game/Movement/PathGenerator.h2
-rw-r--r--src/server/game/Movement/Spline/MoveSpline.cpp6
-rw-r--r--src/server/game/Movement/Spline/MoveSplineFlag.h4
-rw-r--r--src/server/game/Movement/Spline/MovementTypedefs.h4
-rw-r--r--src/server/game/Movement/Spline/MovementUtil.cpp8
-rw-r--r--src/server/game/Movement/Spline/Spline.cpp4
-rw-r--r--src/server/game/Movement/Waypoints/Path.h4
-rw-r--r--src/server/game/Movement/Waypoints/WaypointManager.cpp22
-rw-r--r--src/server/game/Movement/Waypoints/WaypointManager.h27
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvP.cpp44
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvP.h27
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp9
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvPMgr.h13
-rw-r--r--src/server/game/Pools/PoolMgr.h13
-rw-r--r--src/server/game/PrecompiledHeaders/gamePCH.h3
-rw-r--r--src/server/game/Quests/QuestDef.cpp14
-rw-r--r--src/server/game/Quests/QuestDef.h10
-rw-r--r--src/server/game/Reputation/ReputationMgr.cpp4
-rw-r--r--src/server/game/Scripting/MapScripts.cpp7
-rw-r--r--src/server/game/Scripting/ScriptLoader.cpp22
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp109
-rw-r--r--src/server/game/Scripting/ScriptMgr.h131
-rw-r--r--src/server/game/Scripting/ScriptSystem.h13
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h19
-rw-r--r--src/server/game/Server/Protocol/PacketLog.cpp93
-rw-r--r--src/server/game/Server/Protocol/PacketLog.h18
-rw-r--r--src/server/game/Server/Protocol/ServerPktHeader.h63
-rw-r--r--src/server/game/Server/WorldSession.cpp348
-rw-r--r--src/server/game/Server/WorldSession.h85
-rw-r--r--src/server/game/Server/WorldSocket.cpp1051
-rw-r--r--src/server/game/Server/WorldSocket.h302
-rw-r--r--src/server/game/Server/WorldSocketAcceptor.h67
-rw-r--r--src/server/game/Server/WorldSocketMgr.cpp360
-rw-r--r--src/server/game/Server/WorldSocketMgr.h74
-rw-r--r--src/server/game/Skills/SkillDiscovery.cpp2
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp261
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.h12
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.cpp161
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.h22
-rw-r--r--src/server/game/Spells/Spell.cpp248
-rw-r--r--src/server/game/Spells/Spell.h25
-rw-r--r--src/server/game/Spells/SpellEffects.cpp144
-rw-r--r--src/server/game/Spells/SpellInfo.cpp37
-rw-r--r--src/server/game/Spells/SpellMgr.cpp73
-rw-r--r--src/server/game/Spells/SpellMgr.h41
-rw-r--r--src/server/game/Spells/SpellScript.cpp2
-rw-r--r--src/server/game/Spells/SpellScript.h18
-rw-r--r--src/server/game/Texts/CreatureTextMgr.cpp131
-rw-r--r--src/server/game/Texts/CreatureTextMgr.h27
-rw-r--r--src/server/game/Tickets/TicketMgr.cpp2
-rw-r--r--src/server/game/Tickets/TicketMgr.h13
-rw-r--r--src/server/game/Tools/CharacterDatabaseCleaner.cpp6
-rw-r--r--src/server/game/Warden/Warden.cpp2
-rw-r--r--src/server/game/Warden/WardenCheckMgr.cpp2
-rw-r--r--src/server/game/Warden/WardenCheckMgr.h18
-rw-r--r--src/server/game/Warden/WardenMac.h14
-rw-r--r--src/server/game/Warden/WardenWin.cpp6
-rw-r--r--src/server/game/Warden/WardenWin.h14
-rw-r--r--src/server/game/Weather/Weather.cpp4
-rw-r--r--src/server/game/Weather/WeatherMgr.cpp9
-rw-r--r--src/server/game/World/World.cpp146
-rw-r--r--src/server/game/World/World.h54
-rw-r--r--src/server/scripts/CMakeLists.txt3
-rw-r--r--src/server/scripts/Commands/cs_account.cpp17
-rw-r--r--src/server/scripts/Commands/cs_achievement.cpp2
-rw-r--r--src/server/scripts/Commands/cs_arena.cpp2
-rw-r--r--src/server/scripts/Commands/cs_ban.cpp45
-rw-r--r--src/server/scripts/Commands/cs_bf.cpp2
-rw-r--r--src/server/scripts/Commands/cs_cast.cpp2
-rw-r--r--src/server/scripts/Commands/cs_character.cpp2
-rw-r--r--src/server/scripts/Commands/cs_cheat.cpp2
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp51
-rw-r--r--src/server/scripts/Commands/cs_deserter.cpp2
-rw-r--r--src/server/scripts/Commands/cs_disable.cpp2
-rw-r--r--src/server/scripts/Commands/cs_event.cpp2
-rw-r--r--src/server/scripts/Commands/cs_gm.cpp4
-rw-r--r--src/server/scripts/Commands/cs_go.cpp34
-rw-r--r--src/server/scripts/Commands/cs_gobject.cpp2
-rw-r--r--src/server/scripts/Commands/cs_group.cpp2
-rw-r--r--src/server/scripts/Commands/cs_guild.cpp2
-rw-r--r--src/server/scripts/Commands/cs_honor.cpp2
-rw-r--r--src/server/scripts/Commands/cs_instance.cpp2
-rw-r--r--src/server/scripts/Commands/cs_learn.cpp23
-rw-r--r--src/server/scripts/Commands/cs_lfg.cpp4
-rw-r--r--src/server/scripts/Commands/cs_list.cpp59
-rw-r--r--src/server/scripts/Commands/cs_lookup.cpp2
-rw-r--r--src/server/scripts/Commands/cs_message.cpp2
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp73
-rw-r--r--src/server/scripts/Commands/cs_mmaps.cpp6
-rw-r--r--src/server/scripts/Commands/cs_modify.cpp9
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp52
-rw-r--r--src/server/scripts/Commands/cs_pet.cpp2
-rw-r--r--src/server/scripts/Commands/cs_quest.cpp7
-rw-r--r--src/server/scripts/Commands/cs_rbac.cpp6
-rw-r--r--src/server/scripts/Commands/cs_reload.cpp320
-rw-r--r--src/server/scripts/Commands/cs_reset.cpp8
-rw-r--r--src/server/scripts/Commands/cs_send.cpp2
-rw-r--r--src/server/scripts/Commands/cs_server.cpp2
-rw-r--r--src/server/scripts/Commands/cs_tele.cpp2
-rw-r--r--src/server/scripts/Commands/cs_ticket.cpp2
-rw-r--r--src/server/scripts/Commands/cs_titles.cpp2
-rw-r--r--src/server/scripts/Commands/cs_wp.cpp108
-rw-r--r--src/server/scripts/Custom/CMakeLists.txt3
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp26
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp106
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp101
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp149
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp139
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp163
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp88
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp99
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp118
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_magmus.cpp114
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp103
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp244
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp22
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp47
-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.cpp44
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp40
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_firemaw.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_flamegor.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp34
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp22
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp20
-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.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp18
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp16
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/CMakeLists.txt5
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp69
-rw-r--r--src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp16
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp147
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp48
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp64
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp24
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp56
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp36
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp77
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp225
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp36
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp72
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp131
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp431
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp256
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp414
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h36
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp104
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp52
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp328
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp159
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp126
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp144
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp147
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp143
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp24
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp80
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp17
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp64
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp105
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp274
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h38
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp16
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp16
-rw-r--r--src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp24
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp16
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp31
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp16
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp16
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp25
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp38
-rw-r--r--src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp18
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp58
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp56
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp83
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp106
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp60
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp42
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp26
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp39
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp40
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp91
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp68
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp51
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp46
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp30
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp26
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp40
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp18
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp44
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp18
-rw-r--r--src/server/scripts/EasternKingdoms/boss_kruul.cpp163
-rw-r--r--src/server/scripts/EasternKingdoms/zone_alterac_mountains.cpp35
-rw-r--r--src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/zone_duskwood.cpp66
-rw-r--r--src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp24
-rw-r--r--src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp308
-rw-r--r--src/server/scripts/EasternKingdoms/zone_ghostlands.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/zone_hinterlands.cpp34
-rw-r--r--src/server/scripts/EasternKingdoms/zone_ironforge.cpp23
-rw-r--r--src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp18
-rw-r--r--src/server/scripts/EasternKingdoms/zone_loch_modan.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp36
-rw-r--r--src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp70
-rw-r--r--src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/zone_swamp_of_sorrows.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/zone_tirisfal_glades.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/zone_undercity.cpp40
-rw-r--r--src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp44
-rw-r--r--src/server/scripts/EasternKingdoms/zone_westfall.cpp207
-rw-r--r--src/server/scripts/EasternKingdoms/zone_wetlands.cpp16
-rw-r--r--src/server/scripts/Events/CMakeLists.txt4
-rw-r--r--src/server/scripts/Events/childrens_week.cpp38
-rw-r--r--src/server/scripts/Examples/example_commandscript.cpp2
-rw-r--r--src/server/scripts/Examples/example_creature.cpp20
-rw-r--r--src/server/scripts/Examples/example_escort.cpp18
-rw-r--r--src/server/scripts/Examples/example_gossip_codebox.cpp6
-rw-r--r--src/server/scripts/Examples/example_misc.cpp6
-rw-r--r--src/server/scripts/Examples/example_spell.cpp38
-rw-r--r--src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp18
-rw-r--r--src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp10
-rw-r--r--src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp10
-rw-r--r--src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp10
-rw-r--r--src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp14
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp30
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp65
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp42
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp26
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp24
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp28
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp66
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp194
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp20
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp12
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp10
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp14
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp12
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp12
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp100
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp22
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp12
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp16
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp20
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp12
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp63
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp14
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp14
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp14
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp23
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp31
-rw-r--r--src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp2
-rw-r--r--src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp10
-rw-r--r--src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp8
-rw-r--r--src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp8
-rw-r--r--src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp10
-rw-r--r--src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp2
-rw-r--r--src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp22
-rw-r--r--src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp29
-rw-r--r--src/server/scripts/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp2
-rw-r--r--src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp12
-rw-r--r--src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp12
-rw-r--r--src/server/scripts/Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp10
-rw-r--r--src/server/scripts/Kalimdor/RazorfenDowns/boss_tuten_kash.cpp10
-rw-r--r--src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp14
-rw-r--r--src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp104
-rw-r--r--src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp8
-rw-r--r--src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp96
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp35
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp24
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp10
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp10
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp25
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp10
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp10
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp32
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp108
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp16
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp8
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp8
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp20
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp20
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp42
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp27
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp14
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp28
-rw-r--r--src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp16
-rw-r--r--src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp24
-rw-r--r--src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp12
-rw-r--r--src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp14
-rw-r--r--src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp48
-rw-r--r--src/server/scripts/Kalimdor/boss_azuregos.cpp266
-rw-r--r--src/server/scripts/Kalimdor/zone_ashenvale.cpp40
-rw-r--r--src/server/scripts/Kalimdor/zone_azshara.cpp42
-rw-r--r--src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp73
-rw-r--r--src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp69
-rw-r--r--src/server/scripts/Kalimdor/zone_darkshore.cpp36
-rw-r--r--src/server/scripts/Kalimdor/zone_desolace.cpp26
-rw-r--r--src/server/scripts/Kalimdor/zone_durotar.cpp62
-rw-r--r--src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp169
-rw-r--r--src/server/scripts/Kalimdor/zone_felwood.cpp4
-rw-r--r--src/server/scripts/Kalimdor/zone_feralas.cpp43
-rw-r--r--src/server/scripts/Kalimdor/zone_moonglade.cpp44
-rw-r--r--src/server/scripts/Kalimdor/zone_mulgore.cpp20
-rw-r--r--src/server/scripts/Kalimdor/zone_orgrimmar.cpp28
-rw-r--r--src/server/scripts/Kalimdor/zone_silithus.cpp42
-rw-r--r--src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp14
-rw-r--r--src/server/scripts/Kalimdor/zone_tanaris.cpp58
-rw-r--r--src/server/scripts/Kalimdor/zone_teldrassil.cpp10
-rw-r--r--src/server/scripts/Kalimdor/zone_the_barrens.cpp56
-rw-r--r--src/server/scripts/Kalimdor/zone_thousand_needles.cpp46
-rw-r--r--src/server/scripts/Kalimdor/zone_thunder_bluff.cpp12
-rw-r--r--src/server/scripts/Kalimdor/zone_ungoro_crater.cpp30
-rw-r--r--src/server/scripts/Kalimdor/zone_winterspring.cpp16
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp26
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp193
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp22
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp60
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp42
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp40
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp21
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp12
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp74
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp14
-rw-r--r--src/server/scripts/Northrend/CMakeLists.txt1
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp36
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp14
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp88
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp32
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp32
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp193
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp24
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp24
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp10
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp56
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp26
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp74
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp34
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp34
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp72
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp172
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp72
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp100
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp91
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp32
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp86
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h5
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp32
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp50
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp18
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp40
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp14
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp44
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp42
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp24
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp20
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp162
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp164
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp3343
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h275
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp1168
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp30
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp58
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp102
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp54
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp28
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp66
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_eck.cpp14
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp16
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp16
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp32
-rw-r--r--src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp26
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp191
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp66
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp154
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp85
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp215
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp73
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp77
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp125
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp152
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp161
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp313
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp154
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp176
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h24
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp22
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp221
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp19
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp27
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp76
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp15
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp64
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp26
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp24
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp69
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp24
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp18
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_noth.cpp20
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp14
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp14
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp24
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp82
-rw-r--r--src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp28
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp253
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp26
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp22
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp14
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp10
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp26
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp20
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp24
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp26
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp23
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp28
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp26
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp56
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp26
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp68
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp32
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp40
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp16
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp46
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp16
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp220
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp14
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp30
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp80
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp18
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp98
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp64
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp56
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp162
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp163
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp58
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp99
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp46
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp57
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp1419
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp98
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp14
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp109
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp348
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp173
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h35
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/ulduar_teleporter.cpp124
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp46
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp38
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp34
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp18
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp32
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp96
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp34
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp46
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp26
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp16
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp20
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp24
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp32
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp26
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp10
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp16
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_erekem.cpp28
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp42
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp14
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_moragg.cpp14
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp28
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp24
-rw-r--r--src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp24
-rw-r--r--src/server/scripts/Northrend/VioletHold/violet_hold.cpp102
-rw-r--r--src/server/scripts/Northrend/isle_of_conquest.cpp129
-rw-r--r--src/server/scripts/Northrend/zone_borean_tundra.cpp272
-rw-r--r--src/server/scripts/Northrend/zone_crystalsong_forest.cpp22
-rw-r--r--src/server/scripts/Northrend/zone_dalaran.cpp128
-rw-r--r--src/server/scripts/Northrend/zone_dragonblight.cpp49
-rw-r--r--src/server/scripts/Northrend/zone_grizzly_hills.cpp106
-rw-r--r--src/server/scripts/Northrend/zone_howling_fjord.cpp46
-rw-r--r--src/server/scripts/Northrend/zone_icecrown.cpp114
-rw-r--r--src/server/scripts/Northrend/zone_sholazar_basin.cpp217
-rw-r--r--src/server/scripts/Northrend/zone_storm_peaks.cpp104
-rw-r--r--src/server/scripts/Northrend/zone_wintergrasp.cpp53
-rw-r--r--src/server/scripts/Northrend/zone_zuldrak.cpp78
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp285
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPEP.h79
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp65
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPHP.h26
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp170
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPNA.h105
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp10
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPSI.h2
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp68
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPTF.h24
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp101
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPZM.h67
-rw-r--r--src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp53
-rw-r--r--src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp26
-rw-r--r--src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp2
-rw-r--r--src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp44
-rw-r--r--src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp16
-rw-r--r--src/server/scripts/Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp2
-rw-r--r--src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp12
-rw-r--r--src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp46
-rw-r--r--src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp24
-rw-r--r--src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp12
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp16
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp12
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp22
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp24
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp16
-rw-r--r--src/server/scripts/Outland/BlackTemple/black_temple.cpp72
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp (renamed from src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp)109
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_illidan.cpp166
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp24
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp86
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp140
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_supremus.cpp32
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp58
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp22
-rw-r--r--src/server/scripts/Outland/BlackTemple/illidari_council.cpp104
-rw-r--r--src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp14
-rw-r--r--src/server/scripts/Outland/CMakeLists.txt2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp85
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp18
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp116
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp88
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp32
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp24
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp26
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp237
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp26
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp32
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp20
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp12
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp12
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp12
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp26
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp22
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp2
-rw-r--r--src/server/scripts/Outland/GruulsLair/boss_gruul.cpp24
-rw-r--r--src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp62
-rw-r--r--src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp16
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp30
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp54
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp18
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp18
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp24
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp58
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp14
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp12
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp68
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp18
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp48
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp56
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp24
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp16
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp54
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp38
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp154
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp16
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp18
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp8
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp10
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp10
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp25
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp18
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp20
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp10
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp30
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp14
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp26
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp16
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp12
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp20
-rw-r--r--src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp20
-rw-r--r--src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp18
-rw-r--r--src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp20
-rw-r--r--src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp14
-rw-r--r--src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp32
-rw-r--r--src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp12
-rw-r--r--src/server/scripts/Outland/boss_doomlord_kazzak.cpp20
-rw-r--r--src/server/scripts/Outland/boss_doomwalker.cpp14
-rw-r--r--src/server/scripts/Outland/zone_blades_edge_mountains.cpp86
-rw-r--r--src/server/scripts/Outland/zone_hellfire_peninsula.cpp34
-rw-r--r--src/server/scripts/Outland/zone_nagrand.cpp66
-rw-r--r--src/server/scripts/Outland/zone_netherstorm.cpp387
-rw-r--r--src/server/scripts/Outland/zone_shadowmoon_valley.cpp232
-rw-r--r--src/server/scripts/Outland/zone_shattrath_city.cpp44
-rw-r--r--src/server/scripts/Outland/zone_terokkar_forest.cpp102
-rw-r--r--src/server/scripts/Outland/zone_zangarmarsh.cpp36
-rw-r--r--src/server/scripts/Pet/pet_dk.cpp10
-rw-r--r--src/server/scripts/Pet/pet_generic.cpp10
-rw-r--r--src/server/scripts/Pet/pet_hunter.cpp24
-rw-r--r--src/server/scripts/Pet/pet_mage.cpp6
-rw-r--r--src/server/scripts/Pet/pet_priest.cpp8
-rw-r--r--src/server/scripts/Pet/pet_shaman.cpp12
-rw-r--r--src/server/scripts/Spells/spell_dk.cpp308
-rw-r--r--src/server/scripts/Spells/spell_druid.cpp140
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp530
-rw-r--r--src/server/scripts/Spells/spell_holiday.cpp42
-rw-r--r--src/server/scripts/Spells/spell_hunter.cpp126
-rw-r--r--src/server/scripts/Spells/spell_item.cpp370
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp78
-rw-r--r--src/server/scripts/Spells/spell_paladin.cpp154
-rw-r--r--src/server/scripts/Spells/spell_pet.cpp130
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp119
-rw-r--r--src/server/scripts/Spells/spell_quest.cpp286
-rw-r--r--src/server/scripts/Spells/spell_rogue.cpp86
-rw-r--r--src/server/scripts/Spells/spell_shaman.cpp161
-rw-r--r--src/server/scripts/Spells/spell_warlock.cpp119
-rw-r--r--src/server/scripts/Spells/spell_warrior.cpp121
-rw-r--r--src/server/scripts/World/CMakeLists.txt15
-rw-r--r--src/server/scripts/World/achievement_scripts.cpp32
-rw-r--r--src/server/scripts/World/action_ip_logger.cpp315
-rw-r--r--src/server/scripts/World/areatrigger_scripts.cpp59
-rw-r--r--src/server/scripts/World/boss_emerald_dragons.cpp83
-rw-r--r--src/server/scripts/World/chat_log.cpp10
-rw-r--r--src/server/scripts/World/go_scripts.cpp91
-rw-r--r--src/server/scripts/World/guards.cpp32
-rw-r--r--src/server/scripts/World/item_scripts.cpp22
-rw-r--r--src/server/scripts/World/mob_generic_creature.cpp22
-rw-r--r--src/server/scripts/World/npc_innkeeper.cpp6
-rw-r--r--src/server/scripts/World/npc_professions.cpp148
-rw-r--r--src/server/scripts/World/npc_taxi.cpp4
-rw-r--r--src/server/scripts/World/npcs_special.cpp311
-rw-r--r--src/server/shared/AutoPtr.h53
-rw-r--r--src/server/shared/CMakeLists.txt8
-rw-r--r--src/server/shared/Common.h88
-rw-r--r--src/server/shared/CompilerDefs.h8
-rw-r--r--src/server/shared/Configuration/Config.cpp142
-rw-r--r--src/server/shared/Configuration/Config.h47
-rw-r--r--src/server/shared/Containers.h28
-rw-r--r--src/server/shared/Cryptography/ARC4.h2
-rw-r--r--src/server/shared/Cryptography/Authentication/AuthCrypt.cpp2
-rw-r--r--src/server/shared/Cryptography/BigNumber.cpp9
-rw-r--r--src/server/shared/Cryptography/BigNumber.h4
-rw-r--r--src/server/shared/Cryptography/OpenSSLCrypto.cpp21
-rw-r--r--src/server/shared/Cryptography/SHA1.cpp1
-rw-r--r--src/server/shared/Cryptography/WardenKeyGeneration.h2
-rw-r--r--src/server/shared/DataStores/DBCFileLoader.h3
-rw-r--r--src/server/shared/DataStores/DBCStore.h7
-rw-r--r--src/server/shared/Database/AdhocStatement.cpp20
-rw-r--r--src/server/shared/Database/AdhocStatement.h14
-rw-r--r--src/server/shared/Database/DatabaseWorker.cpp46
-rw-r--r--src/server/shared/Database/DatabaseWorker.h27
-rw-r--r--src/server/shared/Database/DatabaseWorkerPool.h158
-rw-r--r--src/server/shared/Database/Implementation/CharacterDatabase.h4
-rw-r--r--src/server/shared/Database/Implementation/LoginDatabase.cpp16
-rw-r--r--src/server/shared/Database/Implementation/LoginDatabase.h11
-rw-r--r--src/server/shared/Database/Implementation/WorldDatabase.cpp12
-rw-r--r--src/server/shared/Database/Implementation/WorldDatabase.h5
-rw-r--r--src/server/shared/Database/MySQLConnection.cpp21
-rw-r--r--src/server/shared/Database/MySQLConnection.h19
-rw-r--r--src/server/shared/Database/MySQLThreading.h27
-rw-r--r--src/server/shared/Database/PreparedStatement.cpp22
-rw-r--r--src/server/shared/Database/PreparedStatement.h19
-rw-r--r--src/server/shared/Database/QueryHolder.cpp11
-rw-r--r--src/server/shared/Database/QueryHolder.h21
-rw-r--r--src/server/shared/Database/QueryResult.cpp23
-rw-r--r--src/server/shared/Database/QueryResult.h13
-rw-r--r--src/server/shared/Database/SQLOperation.h11
-rw-r--r--src/server/shared/Database/Transaction.h4
-rw-r--r--src/server/shared/Debugging/Errors.cpp12
-rw-r--r--src/server/shared/Debugging/Errors.h16
-rw-r--r--src/server/shared/Debugging/WheatyExceptionReport.cpp380
-rw-r--r--src/server/shared/Debugging/WheatyExceptionReport.h137
-rw-r--r--src/server/shared/Define.h58
-rw-r--r--src/server/shared/Dynamic/FactoryHolder.h6
-rw-r--r--src/server/shared/Dynamic/HashNamespace.h119
-rw-r--r--src/server/shared/Dynamic/LinkedList.h2
-rw-r--r--src/server/shared/Dynamic/ObjectRegistry.h12
-rw-r--r--src/server/shared/Dynamic/UnorderedMap.h72
-rw-r--r--src/server/shared/Dynamic/UnorderedSet.h66
-rw-r--r--src/server/shared/Logging/Appender.cpp3
-rw-r--r--src/server/shared/Logging/Appender.h9
-rw-r--r--src/server/shared/Logging/AppenderConsole.cpp6
-rw-r--r--src/server/shared/Logging/AppenderConsole.h4
-rw-r--r--src/server/shared/Logging/AppenderDB.h2
-rw-r--r--src/server/shared/Logging/AppenderFile.cpp2
-rw-r--r--src/server/shared/Logging/AppenderFile.h6
-rw-r--r--src/server/shared/Logging/Log.cpp40
-rw-r--r--src/server/shared/Logging/Log.h82
-rw-r--r--src/server/shared/Logging/LogWorker.cpp50
-rw-r--r--src/server/shared/Logging/LogWorker.h47
-rw-r--r--src/server/shared/Networking/AsyncAcceptor.h73
-rw-r--r--src/server/shared/Networking/MessageBuffer.h95
-rw-r--r--src/server/shared/Networking/Socket.h252
-rw-r--r--src/server/shared/Packets/ByteBuffer.cpp19
-rw-r--r--src/server/shared/Packets/ByteBuffer.h62
-rw-r--r--src/server/shared/Packets/WorldPacket.h24
-rw-r--r--src/server/shared/Threading/Callback.h49
-rw-r--r--src/server/shared/Threading/DelayExecutor.cpp109
-rw-r--r--src/server/shared/Threading/DelayExecutor.h37
-rw-r--r--src/server/shared/Threading/LockedQueue.h240
-rw-r--r--src/server/shared/Threading/ProcessPriority.h105
-rw-r--r--src/server/shared/Threading/ProducerConsumerQueue.h111
-rw-r--r--src/server/shared/Threading/Threading.cpp235
-rw-r--r--src/server/shared/Threading/Threading.h108
-rw-r--r--src/server/shared/Utilities/ServiceWin32.cpp11
-rw-r--r--src/server/shared/Utilities/SignalHandler.h41
-rw-r--r--src/server/shared/Utilities/Timer.h248
-rw-r--r--src/server/shared/Utilities/Util.cpp78
-rw-r--r--src/server/shared/Utilities/Util.h387
-rw-r--r--src/server/worldserver/CMakeLists.txt10
-rw-r--r--src/server/worldserver/CommandLine/CliRunnable.cpp2
-rw-r--r--src/server/worldserver/CommandLine/CliRunnable.h7
-rw-r--r--src/server/worldserver/Main.cpp548
-rw-r--r--src/server/worldserver/Master.cpp508
-rw-r--r--src/server/worldserver/Master.h45
-rw-r--r--src/server/worldserver/PrecompiledHeaders/worldPCH.h2
-rw-r--r--src/server/worldserver/RemoteAccess/RARunnable.cpp84
-rw-r--r--src/server/worldserver/RemoteAccess/RARunnable.h43
-rw-r--r--src/server/worldserver/RemoteAccess/RASession.cpp222
-rw-r--r--src/server/worldserver/RemoteAccess/RASession.h63
-rw-r--r--src/server/worldserver/RemoteAccess/RASocket.cpp424
-rw-r--r--src/server/worldserver/RemoteAccess/RASocket.h64
-rw-r--r--src/server/worldserver/TCSoap/TCSoap.cpp44
-rw-r--r--src/server/worldserver/TCSoap/TCSoap.h34
-rw-r--r--src/server/worldserver/WorldThread/WorldRunnable.cpp98
-rw-r--r--src/server/worldserver/WorldThread/WorldRunnable.h35
-rw-r--r--src/server/worldserver/worldserver.conf.dist59
-rw-r--r--src/tools/map_extractor/System.cpp2
-rw-r--r--src/tools/map_extractor/adt.h4
-rw-r--r--src/tools/map_extractor/dbcfile.h4
-rw-r--r--src/tools/map_extractor/loadlib/loadlib.h5
-rw-r--r--src/tools/map_extractor/wdt.h4
-rw-r--r--src/tools/mesh_extractor/ContinentBuilder.cpp18
-rw-r--r--src/tools/mesh_extractor/DoodadHandler.cpp6
-rw-r--r--src/tools/mesh_extractor/MeshExtractor.cpp6
-rw-r--r--src/tools/mesh_extractor/TileBuilder.cpp2
-rw-r--r--src/tools/mesh_extractor/Utils.cpp2
-rw-r--r--src/tools/mesh_extractor/WorldModelHandler.cpp2
-rw-r--r--src/tools/mmaps_generator/CMakeLists.txt8
-rw-r--r--src/tools/mmaps_generator/MapBuilder.cpp104
-rw-r--r--src/tools/mmaps_generator/MapBuilder.h92
-rw-r--r--src/tools/mmaps_generator/PathCommon.h23
-rw-r--r--src/tools/mmaps_generator/PathGenerator.cpp5
-rw-r--r--src/tools/mmaps_generator/TerrainBuilder.cpp4
-rw-r--r--src/tools/vmap4_extractor/adtfile.cpp2
-rw-r--r--src/tools/vmap4_extractor/adtfile.h6
-rw-r--r--src/tools/vmap4_extractor/loadlib/loadlib.h5
-rw-r--r--src/tools/vmap4_extractor/model.cpp21
-rw-r--r--src/tools/vmap4_extractor/wmo.h4
1067 files changed, 33483 insertions, 32991 deletions
diff --git a/src/server/authserver/Authentication/AuthCodes.cpp b/src/server/authserver/Authentication/AuthCodes.cpp
index 1bf5dcad51f..55517884b8e 100644
--- a/src/server/authserver/Authentication/AuthCodes.cpp
+++ b/src/server/authserver/Authentication/AuthCodes.cpp
@@ -25,6 +25,7 @@ namespace AuthHelper
{15595, 4, 3, 4, ' '},
{14545, 4, 2, 2, ' '},
{13623, 4, 0, 6, 'a'},
+ {13930, 3, 3, 5, 'a'}, // 3.3.5a China Mainland build
{12340, 3, 3, 5, 'a'},
{11723, 3, 3, 3, 'a'},
{11403, 3, 3, 2, ' '},
@@ -78,4 +79,4 @@ namespace AuthHelper
return NULL;
}
-};
+}
diff --git a/src/server/authserver/Authentication/AuthCodes.h b/src/server/authserver/Authentication/AuthCodes.h
index 5e6522f8981..97b4779da0e 100644
--- a/src/server/authserver/Authentication/AuthCodes.h
+++ b/src/server/authserver/Authentication/AuthCodes.h
@@ -92,6 +92,6 @@ namespace AuthHelper
bool IsAcceptedClientBuild(int build);
bool IsPostBCAcceptedClientBuild(int build);
bool IsPreBCAcceptedClientBuild(int build);
-};
+}
#endif
diff --git a/src/server/authserver/CMakeLists.txt b/src/server/authserver/CMakeLists.txt
index 4391ac0450a..d6f0515a8e1 100644
--- a/src/server/authserver/CMakeLists.txt
+++ b/src/server/authserver/CMakeLists.txt
@@ -50,13 +50,13 @@ include_directories(
${CMAKE_SOURCE_DIR}/src/server/shared/Cryptography
${CMAKE_SOURCE_DIR}/src/server/shared/Cryptography/Authentication
${CMAKE_SOURCE_DIR}/src/server/shared/Logging
+ ${CMAKE_SOURCE_DIR}/src/server/shared/Networking
${CMAKE_SOURCE_DIR}/src/server/shared/Threading
${CMAKE_SOURCE_DIR}/src/server/shared/Utilities
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/Authentication
${CMAKE_CURRENT_SOURCE_DIR}/Realms
${CMAKE_CURRENT_SOURCE_DIR}/Server
- ${ACE_INCLUDE_DIR}
${MYSQL_INCLUDE_DIR}
${OPENSSL_INCLUDE_DIR}
)
@@ -79,7 +79,7 @@ target_link_libraries(authserver
${MYSQL_LIBRARY}
${OPENSSL_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
- ${ACE_LIBRARY}
+ ${Boost_LIBRARIES}
)
if( WIN32 )
diff --git a/src/server/authserver/Main.cpp b/src/server/authserver/Main.cpp
index d1b2b614037..f26c0342654 100644
--- a/src/server/authserver/Main.cpp
+++ b/src/server/authserver/Main.cpp
@@ -24,28 +24,26 @@
* authentication server
*/
-#include <ace/Dev_Poll_Reactor.h>
-#include <ace/TP_Reactor.h>
-#include <ace/ACE.h>
-#include <ace/Sig_Handler.h>
+#include <cstdlib>
+#include <boost/date_time/posix_time/posix_time.hpp>
+#include <boost/program_options.hpp>
+#include <iostream>
#include <openssl/opensslv.h>
#include <openssl/crypto.h>
+#include "AsyncAcceptor.h"
+#include "AuthSession.h"
#include "Common.h"
-#include "Database/DatabaseEnv.h"
#include "Configuration/Config.h"
+#include "Database/DatabaseEnv.h"
#include "Log.h"
+#include "ProcessPriority.h"
+#include "RealmList.h"
#include "SystemConfig.h"
#include "Util.h"
-#include "SignalHandler.h"
-#include "RealmList.h"
-#include "RealmAcceptor.h"
-#ifdef __linux__
-#include <sched.h>
-#include <sys/resource.h>
-#define PROCESS_HIGH_PRIORITY -15 // [-20, 19], default is 0
-#endif
+using boost::asio::ip::tcp;
+using namespace boost::program_options;
#ifndef _TRINITY_REALM_CONFIG
# define _TRINITY_REALM_CONFIG "authserver.conf"
@@ -53,77 +51,35 @@
bool StartDB();
void StopDB();
+void SignalHandler(const boost::system::error_code& error, int signalNumber);
+void KeepDatabaseAliveHandler(const boost::system::error_code& error);
+variables_map GetConsoleArguments(int argc, char** argv, std::string& configFile);
-bool stopEvent = false; // Setting it to true stops the server
+boost::asio::io_service _ioService;
+boost::asio::deadline_timer _dbPingTimer(_ioService);
+uint32 _dbPingInterval;
+LoginDatabaseWorkerPool LoginDatabase;
-LoginDatabaseWorkerPool LoginDatabase; // Accessor to the authserver database
-
-/// Handle authserver's termination signals
-class AuthServerSignalHandler : public Trinity::SignalHandler
+int main(int argc, char** argv)
{
-public:
- virtual void HandleSignal(int sigNum)
- {
- switch (sigNum)
- {
- case SIGINT:
- case SIGTERM:
- stopEvent = true;
- break;
- }
- }
-};
-
-/// Print out the usage string for this program on the console.
-void usage(const char* prog)
-{
- TC_LOG_INFO("server.authserver", "Usage: \n %s [<options>]\n"
- " -c config_file use config_file as configuration file\n\r",
- prog);
-}
-
-/// Launch the auth server
-extern int main(int argc, char** argv)
-{
- // Command line parsing to get the configuration file name
- char const* configFile = _TRINITY_REALM_CONFIG;
- int count = 1;
- while (count < argc)
- {
- if (strcmp(argv[count], "-c") == 0)
- {
- if (++count >= argc)
- {
- printf("Runtime-Error: -c option requires an input argument\n");
- usage(argv[0]);
- return 1;
- }
- else
- configFile = argv[count];
- }
- ++count;
- }
+ std::string configFile = _TRINITY_REALM_CONFIG;
+ auto vm = GetConsoleArguments(argc, argv, configFile);
+ // exit if help is enabled
+ if (vm.count("help"))
+ return 0;
- if (!sConfigMgr->LoadInitial(configFile))
+ std::string configError;
+ if (!sConfigMgr->LoadInitial(configFile, configError))
{
- printf("Invalid or missing configuration file : %s\n", configFile);
- printf("Verify that the file exists and has \'[authserver]\' written in the top of the file!\n");
+ printf("Error in config file: %s\n", configError.c_str());
return 1;
}
TC_LOG_INFO("server.authserver", "%s (authserver)", _FULLVERSION);
TC_LOG_INFO("server.authserver", "<Ctrl-C> to stop.\n");
- TC_LOG_INFO("server.authserver", "Using configuration file %s.", configFile);
-
- TC_LOG_WARN("server.authserver", "%s (Library: %s)", OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION));
-
-#if defined (ACE_HAS_EVENT_POLL) || defined (ACE_HAS_DEV_POLL)
- ACE_Reactor::instance(new ACE_Reactor(new ACE_Dev_Poll_Reactor(ACE::max_handles(), 1), 1), true);
-#else
- ACE_Reactor::instance(new ACE_Reactor(new ACE_TP_Reactor(), true), true);
-#endif
-
- TC_LOG_DEBUG("server.authserver", "Max allowed open files is %d", ACE::max_handles());
+ TC_LOG_INFO("server.authserver", "Using configuration file %s.", configFile.c_str());
+ TC_LOG_INFO("server.authserver", "Using SSL version: %s (library: %s)", OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION));
+ TC_LOG_INFO("server.authserver", "Using Boost version: %i.%i.%i", BOOST_VERSION / 100000, BOOST_VERSION / 100 % 1000, BOOST_VERSION % 100);
// authserver PID file creation
std::string pidFile = sConfigMgr->GetStringDefault("PidFile", "");
@@ -143,129 +99,44 @@ extern int main(int argc, char** argv)
return 1;
// Get the list of realms for the server
- sRealmList->Initialize(sConfigMgr->GetIntDefault("RealmsStateUpdateDelay", 20));
+ sRealmList->Initialize(_ioService, sConfigMgr->GetIntDefault("RealmsStateUpdateDelay", 20));
+
if (sRealmList->size() == 0)
{
TC_LOG_ERROR("server.authserver", "No valid realms specified.");
+ StopDB();
return 1;
}
- // Launch the listening network socket
- RealmAcceptor acceptor;
-
- int32 rmport = sConfigMgr->GetIntDefault("RealmServerPort", 3724);
- if (rmport < 0 || rmport > 0xFFFF)
+ // Start the listening port (acceptor) for auth connections
+ int32 port = sConfigMgr->GetIntDefault("RealmServerPort", 3724);
+ if (port < 0 || port > 0xFFFF)
{
TC_LOG_ERROR("server.authserver", "Specified port out of allowed range (1-65535)");
+ StopDB();
return 1;
}
- std::string bind_ip = sConfigMgr->GetStringDefault("BindIP", "0.0.0.0");
-
- ACE_INET_Addr bind_addr(uint16(rmport), bind_ip.c_str());
-
- if (acceptor.open(bind_addr, ACE_Reactor::instance(), ACE_NONBLOCK) == -1)
- {
- TC_LOG_ERROR("server.authserver", "Auth server can not bind to %s:%d", bind_ip.c_str(), rmport);
- return 1;
- }
-
- // Initialize the signal handlers
- AuthServerSignalHandler SignalINT, SignalTERM;
-
- // Register authservers's signal handlers
- ACE_Sig_Handler Handler;
- Handler.register_handler(SIGINT, &SignalINT);
- Handler.register_handler(SIGTERM, &SignalTERM);
-
-#if defined(_WIN32) || defined(__linux__)
-
- ///- Handle affinity for multiple processors and process priority
- uint32 affinity = sConfigMgr->GetIntDefault("UseProcessors", 0);
- bool highPriority = sConfigMgr->GetBoolDefault("ProcessPriority", false);
-
-#ifdef _WIN32 // Windows
-
- HANDLE hProcess = GetCurrentProcess();
- if (affinity > 0)
- {
- ULONG_PTR appAff;
- ULONG_PTR sysAff;
-
- if (GetProcessAffinityMask(hProcess, &appAff, &sysAff))
- {
- // remove non accessible processors
- ULONG_PTR currentAffinity = affinity & appAff;
-
- if (!currentAffinity)
- TC_LOG_ERROR("server.authserver", "Processors marked in UseProcessors bitmask (hex) %x are not accessible for the authserver. Accessible processors bitmask (hex): %x", affinity, appAff);
- else if (SetProcessAffinityMask(hProcess, currentAffinity))
- TC_LOG_INFO("server.authserver", "Using processors (bitmask, hex): %x", currentAffinity);
- else
- TC_LOG_ERROR("server.authserver", "Can't set used processors (hex): %x", currentAffinity);
- }
- }
-
- if (highPriority)
- {
- if (SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS))
- TC_LOG_INFO("server.authserver", "authserver process priority class set to HIGH");
- else
- TC_LOG_ERROR("server.authserver", "Can't set authserver process priority class.");
- }
-
-#else // Linux
-
- if (affinity > 0)
- {
- cpu_set_t mask;
- CPU_ZERO(&mask);
-
- for (unsigned int i = 0; i < sizeof(affinity) * 8; ++i)
- if (affinity & (1 << i))
- CPU_SET(i, &mask);
-
- if (sched_setaffinity(0, sizeof(mask), &mask))
- TC_LOG_ERROR("server.authserver", "Can't set used processors (hex): %x, error: %s", affinity, strerror(errno));
- else
- {
- CPU_ZERO(&mask);
- sched_getaffinity(0, sizeof(mask), &mask);
- TC_LOG_INFO("server.authserver", "Using processors (bitmask, hex): %lx", *(__cpu_mask*)(&mask));
- }
- }
+ std::string bindIp = sConfigMgr->GetStringDefault("BindIP", "0.0.0.0");
+ AsyncAcceptor<AuthSession> authServer(_ioService, bindIp, port);
- if (highPriority)
- {
- if (setpriority(PRIO_PROCESS, 0, PROCESS_HIGH_PRIORITY))
- TC_LOG_ERROR("server.authserver", "Can't set authserver process priority class, error: %s", strerror(errno));
- else
- TC_LOG_INFO("server.authserver", "authserver process priority class set to %i", getpriority(PRIO_PROCESS, 0));
- }
-
-#endif
+ // Set signal handlers
+ boost::asio::signal_set signals(_ioService, SIGINT, SIGTERM);
+#if PLATFORM == PLATFORM_WINDOWS
+ signals.add(SIGBREAK);
#endif
+ signals.async_wait(SignalHandler);
- // maximum counter for next ping
- uint32 numLoops = (sConfigMgr->GetIntDefault("MaxPingTime", 30) * (MINUTE * 1000000 / 100000));
- uint32 loopCounter = 0;
+ // Set process priority according to configuration settings
+ SetProcessPriority("server.authserver");
- // Wait for termination signal
- while (!stopEvent)
- {
- // dont move this outside the loop, the reactor will modify it
- ACE_Time_Value interval(0, 100000);
+ // Enabled a timed callback for handling the database keep alive ping
+ _dbPingInterval = sConfigMgr->GetIntDefault("MaxPingTime", 30);
+ _dbPingTimer.expires_from_now(boost::posix_time::minutes(_dbPingInterval));
+ _dbPingTimer.async_wait(KeepDatabaseAliveHandler);
- if (ACE_Reactor::instance()->run_reactor_event_loop(interval) == -1)
- break;
-
- if ((++loopCounter) == numLoops)
- {
- loopCounter = 0;
- TC_LOG_INFO("server.authserver", "Ping MySQL to keep connection alive");
- LoginDatabase.KeepAlive();
- }
- }
+ // Start the io service worker loop
+ _ioService.run();
// Close the Database Pool and library
StopDB();
@@ -274,6 +145,7 @@ extern int main(int argc, char** argv)
return 0;
}
+
/// Initialize connection to the database
bool StartDB()
{
@@ -318,3 +190,45 @@ void StopDB()
LoginDatabase.Close();
MySQL::Library_End();
}
+
+void SignalHandler(const boost::system::error_code& error, int /*signalNumber*/)
+{
+ if (!error)
+ _ioService.stop();
+}
+
+void KeepDatabaseAliveHandler(const boost::system::error_code& error)
+{
+ if (!error)
+ {
+ TC_LOG_INFO("server.authserver", "Ping MySQL to keep connection alive");
+ LoginDatabase.KeepAlive();
+
+ _dbPingTimer.expires_from_now(boost::posix_time::minutes(_dbPingInterval));
+ _dbPingTimer.async_wait(KeepDatabaseAliveHandler);
+ }
+}
+
+variables_map GetConsoleArguments(int argc, char** argv, std::string& configFile)
+{
+ options_description all("Allowed options");
+ all.add_options()
+ ("help,h", "print usage message")
+ ("config,c", value<std::string>(&configFile)->default_value(_TRINITY_REALM_CONFIG), "use <arg> as configuration file")
+ ;
+ variables_map variablesMap;
+ try
+ {
+ store(command_line_parser(argc, argv).options(all).allow_unregistered().run(), variablesMap);
+ notify(variablesMap);
+ }
+ catch (std::exception& e) {
+ std::cerr << e.what() << "\n";
+ }
+
+ if (variablesMap.count("help")) {
+ std::cout << all << "\n";
+ }
+
+ return variablesMap;
+}
diff --git a/src/server/authserver/PrecompiledHeaders/authPCH.h b/src/server/authserver/PrecompiledHeaders/authPCH.h
index 5fc3b0a3416..ef757a656d5 100644
--- a/src/server/authserver/PrecompiledHeaders/authPCH.h
+++ b/src/server/authserver/PrecompiledHeaders/authPCH.h
@@ -1,6 +1,6 @@
+#include "Common.h"
#include "Configuration/Config.h"
#include "Database/DatabaseEnv.h"
#include "Log.h"
#include "RealmList.h"
-#include "RealmSocket.h"
-#include "Common.h"
+#include "AuthSession.h"
diff --git a/src/server/authserver/Realms/RealmList.cpp b/src/server/authserver/Realms/RealmList.cpp
index 4aeecfc0aaa..8f11d3882ce 100644
--- a/src/server/authserver/Realms/RealmList.cpp
+++ b/src/server/authserver/Realms/RealmList.cpp
@@ -16,22 +16,31 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <boost/asio/ip/tcp.hpp>
#include "Common.h"
#include "RealmList.h"
#include "Database/DatabaseEnv.h"
-RealmList::RealmList() : m_UpdateInterval(0), m_NextUpdateTime(time(NULL)) { }
+namespace boost { namespace asio { namespace ip { class address; } } }
+
+RealmList::RealmList() : m_UpdateInterval(0), m_NextUpdateTime(time(NULL)), _resolver(nullptr) { }
+RealmList::~RealmList()
+{
+ delete _resolver;
+}
// Load the realm list from the database
-void RealmList::Initialize(uint32 updateInterval)
+void RealmList::Initialize(boost::asio::io_service& ioService, uint32 updateInterval)
{
+ _resolver = new boost::asio::ip::tcp::resolver(ioService);
m_UpdateInterval = updateInterval;
// Get the content of the realmlist table in the database
UpdateRealms(true);
}
-void RealmList::UpdateRealm(uint32 id, const std::string& name, ACE_INET_Addr const& address, ACE_INET_Addr const& localAddr, ACE_INET_Addr const& localSubmask, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, float popu, uint32 build)
+void RealmList::UpdateRealm(uint32 id, const std::string& name, ip::address const& address, ip::address const& localAddr,
+ ip::address const& localSubmask, uint16 port, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, float population, uint32 build)
{
// Create new if not exist or update existed
Realm& realm = m_realms[name];
@@ -42,12 +51,14 @@ void RealmList::UpdateRealm(uint32 id, const std::string& name, ACE_INET_Addr co
realm.flag = flag;
realm.timezone = timezone;
realm.allowedSecurityLevel = allowedSecurityLevel;
- realm.populationLevel = popu;
+ realm.populationLevel = population;
// Append port to IP address.
+
realm.ExternalAddress = address;
realm.LocalAddress = localAddr;
realm.LocalSubnetMask = localSubmask;
+ realm.port = port;
realm.gamebuild = build;
}
@@ -78,28 +89,64 @@ void RealmList::UpdateRealms(bool init)
{
do
{
- Field* fields = result->Fetch();
- uint32 realmId = fields[0].GetUInt32();
- std::string name = fields[1].GetString();
- std::string externalAddress = fields[2].GetString();
- std::string localAddress = fields[3].GetString();
- std::string localSubmask = fields[4].GetString();
- uint16 port = fields[5].GetUInt16();
- uint8 icon = fields[6].GetUInt8();
- RealmFlags flag = RealmFlags(fields[7].GetUInt8());
- uint8 timezone = fields[8].GetUInt8();
- uint8 allowedSecurityLevel = fields[9].GetUInt8();
- float pop = fields[10].GetFloat();
- uint32 build = fields[11].GetUInt32();
-
- ACE_INET_Addr externalAddr(port, externalAddress.c_str(), AF_INET);
- ACE_INET_Addr localAddr(port, localAddress.c_str(), AF_INET);
- ACE_INET_Addr submask(0, localSubmask.c_str(), AF_INET);
-
- UpdateRealm(realmId, name, externalAddr, localAddr, submask, icon, flag, timezone, (allowedSecurityLevel <= SEC_ADMINISTRATOR ? AccountTypes(allowedSecurityLevel) : SEC_ADMINISTRATOR), pop, build);
-
- if (init)
- TC_LOG_INFO("server.authserver", "Added realm \"%s\" at %s:%u.", name.c_str(), m_realms[name].ExternalAddress.get_host_addr(), port);
+ try
+ {
+ boost::asio::ip::tcp::resolver::iterator end;
+
+ Field* fields = result->Fetch();
+ uint32 realmId = fields[0].GetUInt32();
+ std::string name = fields[1].GetString();
+ boost::asio::ip::tcp::resolver::query externalAddressQuery(ip::tcp::v4(), fields[2].GetString(), "");
+
+ boost::system::error_code ec;
+ boost::asio::ip::tcp::resolver::iterator endPoint = _resolver->resolve(externalAddressQuery, ec);
+ if (endPoint == end || ec)
+ {
+ TC_LOG_ERROR("server.authserver", "Could not resolve address %s", fields[2].GetString().c_str());
+ return;
+ }
+
+ ip::address externalAddress = (*endPoint).endpoint().address();
+
+ boost::asio::ip::tcp::resolver::query localAddressQuery(ip::tcp::v4(), fields[3].GetString(), "");
+ endPoint = _resolver->resolve(localAddressQuery, ec);
+ if (endPoint == end || ec)
+ {
+ TC_LOG_ERROR("server.authserver", "Could not resolve address %s", fields[3].GetString().c_str());
+ return;
+ }
+
+ ip::address localAddress = (*endPoint).endpoint().address();
+
+ boost::asio::ip::tcp::resolver::query localSubmaskQuery(ip::tcp::v4(), fields[4].GetString(), "");
+ endPoint = _resolver->resolve(localSubmaskQuery, ec);
+ if (endPoint == end || ec)
+ {
+ TC_LOG_ERROR("server.authserver", "Could not resolve address %s", fields[4].GetString().c_str());
+ return;
+ }
+
+ ip::address localSubmask = (*endPoint).endpoint().address();
+
+ uint16 port = fields[5].GetUInt16();
+ uint8 icon = fields[6].GetUInt8();
+ RealmFlags flag = RealmFlags(fields[7].GetUInt8());
+ uint8 timezone = fields[8].GetUInt8();
+ uint8 allowedSecurityLevel = fields[9].GetUInt8();
+ float pop = fields[10].GetFloat();
+ uint32 build = fields[11].GetUInt32();
+
+ UpdateRealm(realmId, name, externalAddress, localAddress, localSubmask, port, icon, flag, timezone,
+ (allowedSecurityLevel <= SEC_ADMINISTRATOR ? AccountTypes(allowedSecurityLevel) : SEC_ADMINISTRATOR), pop, build);
+
+ if (init)
+ TC_LOG_INFO("server.authserver", "Added realm \"%s\" at %s:%u.", name.c_str(), m_realms[name].ExternalAddress.to_string().c_str(), port);
+ }
+ catch (std::exception& ex)
+ {
+ TC_LOG_ERROR("server.authserver", "Realmlist::UpdateRealms has thrown an exception: %s", ex.what());
+ ASSERT(false);
+ }
}
while (result->NextRow());
}
diff --git a/src/server/authserver/Realms/RealmList.h b/src/server/authserver/Realms/RealmList.h
index 1d76c39e4f0..b8630f23a0e 100644
--- a/src/server/authserver/Realms/RealmList.h
+++ b/src/server/authserver/Realms/RealmList.h
@@ -19,30 +19,33 @@
#ifndef _REALMLIST_H
#define _REALMLIST_H
-#include <ace/Singleton.h>
-#include <ace/Null_Mutex.h>
-#include <ace/INET_Addr.h>
+#include <boost/asio/ip/address.hpp>
+#include <boost/asio/ip/tcp.hpp>
+#include <boost/asio/io_service.hpp>
#include "Common.h"
+using namespace boost::asio;
+
enum RealmFlags
{
- REALM_FLAG_NONE = 0x00,
- REALM_FLAG_INVALID = 0x01,
- REALM_FLAG_OFFLINE = 0x02,
- REALM_FLAG_SPECIFYBUILD = 0x04,
- REALM_FLAG_UNK1 = 0x08,
- REALM_FLAG_UNK2 = 0x10,
- REALM_FLAG_RECOMMENDED = 0x20,
- REALM_FLAG_NEW = 0x40,
- REALM_FLAG_FULL = 0x80
+ REALM_FLAG_NONE = 0x00,
+ REALM_FLAG_INVALID = 0x01,
+ REALM_FLAG_OFFLINE = 0x02,
+ REALM_FLAG_SPECIFYBUILD = 0x04,
+ REALM_FLAG_UNK1 = 0x08,
+ REALM_FLAG_UNK2 = 0x10,
+ REALM_FLAG_RECOMMENDED = 0x20,
+ REALM_FLAG_NEW = 0x40,
+ REALM_FLAG_FULL = 0x80
};
// Storage object for a realm
struct Realm
{
- ACE_INET_Addr ExternalAddress;
- ACE_INET_Addr LocalAddress;
- ACE_INET_Addr LocalSubnetMask;
+ ip::address ExternalAddress;
+ ip::address LocalAddress;
+ ip::address LocalSubnetMask;
+ uint16 port;
std::string name;
uint8 icon;
RealmFlags flag;
@@ -59,10 +62,15 @@ class RealmList
public:
typedef std::map<std::string, Realm> RealmMap;
- RealmList();
- ~RealmList() { }
+ static RealmList* instance()
+ {
+ static RealmList instance;
+ return &instance;
+ }
+
+ ~RealmList();
- void Initialize(uint32 updateInterval);
+ void Initialize(boost::asio::io_service& ioService, uint32 updateInterval);
void UpdateIfNeed();
@@ -73,13 +81,17 @@ public:
uint32 size() const { return m_realms.size(); }
private:
- void UpdateRealms(bool init=false);
- void UpdateRealm(uint32 id, const std::string& name, ACE_INET_Addr const& address, ACE_INET_Addr const& localAddr, ACE_INET_Addr const& localSubmask, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, float popu, uint32 build);
+ RealmList();
+
+ void UpdateRealms(bool init = false);
+ void UpdateRealm(uint32 id, const std::string& name, ip::address const& address, ip::address const& localAddr,
+ ip::address const& localSubmask, uint16 port, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, float population, uint32 build);
RealmMap m_realms;
uint32 m_UpdateInterval;
time_t m_NextUpdateTime;
+ boost::asio::ip::tcp::resolver* _resolver;
};
-#define sRealmList ACE_Singleton<RealmList, ACE_Null_Mutex>::instance()
+#define sRealmList RealmList::instance()
#endif
diff --git a/src/server/authserver/Server/AuthSocket.cpp b/src/server/authserver/Server/AuthSession.cpp
index c7bb600024a..8276183fb10 100644
--- a/src/server/authserver/Server/AuthSocket.cpp
+++ b/src/server/authserver/Server/AuthSession.cpp
@@ -1,68 +1,58 @@
/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <algorithm>
-#include <openssl/md5.h>
-
-#include "Common.h"
-#include "Database/DatabaseEnv.h"
-#include "ByteBuffer.h"
-#include "Configuration/Config.h"
+* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "AuthSession.h"
#include "Log.h"
-#include "RealmList.h"
-#include "AuthSocket.h"
#include "AuthCodes.h"
-#include "TOTP.h"
+#include "Database/DatabaseEnv.h"
#include "SHA1.h"
+#include "TOTP.h"
#include "openssl/crypto.h"
+#include "Configuration/Config.h"
+#include "RealmList.h"
+#include <boost/lexical_cast.hpp>
-#define ChunkSize 2048
+using boost::asio::ip::tcp;
enum eAuthCmd
{
- AUTH_LOGON_CHALLENGE = 0x00,
- AUTH_LOGON_PROOF = 0x01,
- AUTH_RECONNECT_CHALLENGE = 0x02,
- AUTH_RECONNECT_PROOF = 0x03,
- REALM_LIST = 0x10,
- XFER_INITIATE = 0x30,
- XFER_DATA = 0x31,
- XFER_ACCEPT = 0x32,
- XFER_RESUME = 0x33,
- XFER_CANCEL = 0x34
+ AUTH_LOGON_CHALLENGE = 0x00,
+ AUTH_LOGON_PROOF = 0x01,
+ AUTH_RECONNECT_CHALLENGE = 0x02,
+ AUTH_RECONNECT_PROOF = 0x03,
+ REALM_LIST = 0x10,
+ XFER_INITIATE = 0x30,
+ XFER_DATA = 0x31,
+ XFER_ACCEPT = 0x32,
+ XFER_RESUME = 0x33,
+ XFER_CANCEL = 0x34
};
enum eStatus
{
- STATUS_CONNECTED = 0,
+ STATUS_CONNECTED = 0,
STATUS_AUTHED
};
-// GCC have alternative #pragma pack(N) syntax and old gcc version not support pack(push, N), also any gcc version not support it at some paltform
-#if defined(__GNUC__)
-#pragma pack(1)
-#else
#pragma pack(push, 1)
-#endif
typedef struct AUTH_LOGON_CHALLENGE_C
{
- uint8 cmd;
uint8 error;
uint16 size;
uint8 gamename[4];
@@ -81,12 +71,11 @@ typedef struct AUTH_LOGON_CHALLENGE_C
typedef struct AUTH_LOGON_PROOF_C
{
- uint8 cmd;
uint8 A[32];
uint8 M1[20];
uint8 crc_hash[20];
uint8 number_of_keys;
- uint8 securityFlags; // 0x00-0x04
+ uint8 securityFlags;
} sAuthLogonProof_C;
typedef struct AUTH_LOGON_PROOF_S
@@ -94,8 +83,8 @@ typedef struct AUTH_LOGON_PROOF_S
uint8 cmd;
uint8 error;
uint8 M2[20];
- uint32 unk1;
- uint32 unk2;
+ uint32 AccountFlags;
+ uint32 SurveyId;
uint16 unk3;
} sAuthLogonProof_S;
@@ -109,252 +98,103 @@ typedef struct AUTH_LOGON_PROOF_S_OLD
typedef struct AUTH_RECONNECT_PROOF_C
{
- uint8 cmd;
uint8 R1[16];
uint8 R2[20];
uint8 R3[20];
uint8 number_of_keys;
} sAuthReconnectProof_C;
-typedef struct XFER_INIT
-{
- uint8 cmd; // XFER_INITIATE
- uint8 fileNameLen; // strlen(fileName);
- uint8 fileName[5]; // fileName[fileNameLen]
- uint64 file_size; // file size (bytes)
- uint8 md5[MD5_DIGEST_LENGTH]; // MD5
-} XFER_INIT;
-
-typedef struct XFER_DATA
-{
- uint8 opcode;
- uint16 data_size;
- uint8 data[ChunkSize];
-} XFER_DATA_STRUCT;
-
-typedef struct AuthHandler
-{
- eAuthCmd cmd;
- uint32 status;
- bool (AuthSocket::*handler)(void);
-} AuthHandler;
-
-// GCC have alternative #pragma pack() syntax and old gcc version not support pack(pop), also any gcc version not support it at some paltform
-#if defined(__GNUC__)
-#pragma pack()
-#else
#pragma pack(pop)
-#endif
-// Launch a thread to transfer a patch to the client
-class PatcherRunnable: public ACE_Based::Runnable
+enum class BufferSizes : uint32
{
-public:
- PatcherRunnable(class AuthSocket*);
- void run();
-
-private:
- AuthSocket* mySocket;
+ SRP_6_V = 0x20,
+ SRP_6_S = 0x20,
};
-typedef struct PATCH_INFO
-{
- uint8 md5[MD5_DIGEST_LENGTH];
-} PATCH_INFO;
-
-// Caches MD5 hash of client patches present on the server
-class Patcher
-{
-public:
- typedef std::map<std::string, PATCH_INFO*> Patches;
- ~Patcher();
- Patcher();
- Patches::const_iterator begin() const { return _patches.begin(); }
- Patches::const_iterator end() const { return _patches.end(); }
- void LoadPatchMD5(char*);
- bool GetHash(char * pat, uint8 mymd5[16]);
-
-private:
- void LoadPatchesInfo();
- Patches _patches;
-};
-
-const AuthHandler table[] =
-{
- { AUTH_LOGON_CHALLENGE, STATUS_CONNECTED, &AuthSocket::_HandleLogonChallenge },
- { AUTH_LOGON_PROOF, STATUS_CONNECTED, &AuthSocket::_HandleLogonProof },
- { AUTH_RECONNECT_CHALLENGE, STATUS_CONNECTED, &AuthSocket::_HandleReconnectChallenge},
- { AUTH_RECONNECT_PROOF, STATUS_CONNECTED, &AuthSocket::_HandleReconnectProof },
- { REALM_LIST, STATUS_AUTHED, &AuthSocket::_HandleRealmList },
- { XFER_ACCEPT, STATUS_CONNECTED, &AuthSocket::_HandleXferAccept },
- { XFER_RESUME, STATUS_CONNECTED, &AuthSocket::_HandleXferResume },
- { XFER_CANCEL, STATUS_CONNECTED, &AuthSocket::_HandleXferCancel }
-};
-
-#define AUTH_TOTAL_COMMANDS 8
-
-// Holds the MD5 hash of client patches present on the server
-Patcher PatchesCache;
+#define REALM_LIST_PACKET_SIZE 4
+#define XFER_ACCEPT_SIZE 0
+#define XFER_RESUME_SIZE 8
+#define XFER_CANCEL_SIZE 0
-// Constructor - set the N and g values for SRP6
-AuthSocket::AuthSocket(RealmSocket& socket) :
- pPatch(NULL), socket_(socket), _authed(false), _build(0),
- _expversion(0), _accountSecurityLevel(SEC_PLAYER)
+std::unordered_map<uint8, AuthHandler> AuthSession::InitHandlers()
{
- N.SetHexStr("894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7");
- g.SetDword(7);
-}
+ std::unordered_map<uint8, AuthHandler> handlers;
-// Close patch file descriptor before leaving
-AuthSocket::~AuthSocket(void) { }
+ handlers[AUTH_LOGON_CHALLENGE] = { STATUS_CONNECTED, sizeof(AUTH_LOGON_CHALLENGE_C), &AuthSession::HandleLogonChallenge };
+ handlers[AUTH_LOGON_PROOF] = { STATUS_CONNECTED, sizeof(AUTH_LOGON_PROOF_C), &AuthSession::HandleLogonProof };
+ handlers[AUTH_RECONNECT_CHALLENGE] = { STATUS_CONNECTED, sizeof(AUTH_LOGON_CHALLENGE_C), &AuthSession::HandleReconnectChallenge };
+ handlers[AUTH_RECONNECT_PROOF] = { STATUS_CONNECTED, sizeof(AUTH_RECONNECT_PROOF_C), &AuthSession::HandleReconnectProof };
+ handlers[REALM_LIST] = { STATUS_AUTHED, REALM_LIST_PACKET_SIZE, &AuthSession::HandleRealmList };
+ handlers[XFER_ACCEPT] = { STATUS_AUTHED, XFER_ACCEPT_SIZE, &AuthSession::HandleXferAccept };
+ handlers[XFER_RESUME] = { STATUS_AUTHED, XFER_RESUME_SIZE, &AuthSession::HandleXferResume };
+ handlers[XFER_CANCEL] = { STATUS_AUTHED, XFER_CANCEL_SIZE, &AuthSession::HandleXferCancel };
-// Accept the connection
-void AuthSocket::OnAccept(void)
-{
- TC_LOG_DEBUG("server.authserver", "'%s:%d' Accepting connection", socket().getRemoteAddress().c_str(), socket().getRemotePort());
+ return handlers;
}
-void AuthSocket::OnClose(void)
-{
- TC_LOG_DEBUG("server.authserver", "AuthSocket::OnClose");
-}
+std::unordered_map<uint8, AuthHandler> const Handlers = AuthSession::InitHandlers();
-// Read the packet from the client
-void AuthSocket::OnRead()
+void AuthSession::ReadHeaderHandler()
{
- #define MAX_AUTH_LOGON_CHALLENGES_IN_A_ROW 3
- uint32 challengesInARow = 0;
- uint8 _cmd;
- while (1)
+ uint8 cmd = GetHeaderBuffer()[0];
+ auto itr = Handlers.find(cmd);
+ if (itr != Handlers.end())
{
- if (!socket().recv_soft((char *)&_cmd, 1))
- return;
-
- if (_cmd == AUTH_LOGON_CHALLENGE)
+ // Handle dynamic size packet
+ if (cmd == AUTH_LOGON_CHALLENGE || cmd == AUTH_RECONNECT_CHALLENGE)
{
- ++challengesInARow;
- if (challengesInARow == MAX_AUTH_LOGON_CHALLENGES_IN_A_ROW)
- {
- TC_LOG_WARN("server.authserver", "Got %u AUTH_LOGON_CHALLENGE in a row from '%s', possible ongoing DoS", challengesInARow, socket().getRemoteAddress().c_str());
- socket().shutdown();
- return;
- }
- }
-
- size_t i;
-
- // Circle through known commands and call the correct command handler
- for (i = 0; i < AUTH_TOTAL_COMMANDS; ++i)
- {
- if ((uint8)table[i].cmd == _cmd && (table[i].status == STATUS_CONNECTED || (_authed && table[i].status == STATUS_AUTHED)))
- {
- TC_LOG_DEBUG("server.authserver", "Got data for cmd %u recv length %u", (uint32)_cmd, (uint32)socket().recv_len());
-
- if (!(*this.*table[i].handler)())
- {
- TC_LOG_DEBUG("server.authserver", "Command handler failed for cmd %u recv length %u", (uint32)_cmd, (uint32)socket().recv_len());
- return;
- }
- break;
- }
- }
+ ReadData(sizeof(uint8) + sizeof(uint16)); //error + size
+ sAuthLogonChallenge_C* challenge = reinterpret_cast<sAuthLogonChallenge_C*>(GetDataBuffer());
- // Report unknown packets in the error log
- if (i == AUTH_TOTAL_COMMANDS)
- {
- TC_LOG_ERROR("server.authserver", "Got unknown packet from '%s'", socket().getRemoteAddress().c_str());
- socket().shutdown();
- return;
+ AsyncReadData(challenge->size);
}
+ else
+ AsyncReadData(itr->second.packetSize);
}
+ else
+ CloseSocket();
}
-// Make the SRP6 calculation from hash in dB
-void AuthSocket::_SetVSFields(const std::string& rI)
+void AuthSession::ReadDataHandler()
{
- s.SetRand(s_BYTE_SIZE * 8);
-
- BigNumber I;
- I.SetHexStr(rI.c_str());
-
- // In case of leading zeros in the rI hash, restore them
- uint8 mDigest[SHA_DIGEST_LENGTH];
- memset(mDigest, 0, SHA_DIGEST_LENGTH);
- if (I.GetNumBytes() <= SHA_DIGEST_LENGTH)
- memcpy(mDigest, I.AsByteArray().get(), I.GetNumBytes());
-
- std::reverse(mDigest, mDigest + SHA_DIGEST_LENGTH);
-
- SHA1Hash sha;
- sha.UpdateData(s.AsByteArray().get(), s.GetNumBytes());
- sha.UpdateData(mDigest, SHA_DIGEST_LENGTH);
- sha.Finalize();
- BigNumber x;
- x.SetBinary(sha.GetDigest(), sha.GetLength());
- v = g.ModExp(x, N);
-
- // No SQL injection (username escaped)
- char *v_hex, *s_hex;
- v_hex = v.AsHexStr();
- s_hex = s.AsHexStr();
-
- PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_VS);
- stmt->setString(0, v_hex);
- stmt->setString(1, s_hex);
- stmt->setString(2, _login);
- LoginDatabase.Execute(stmt);
+ if (!(*this.*Handlers.at(GetHeaderBuffer()[0]).handler)())
+ {
+ CloseSocket();
+ return;
+ }
- OPENSSL_free(v_hex);
- OPENSSL_free(s_hex);
+ AsyncReadHeader();
}
-// Logon Challenge command handler
-bool AuthSocket::_HandleLogonChallenge()
+void AuthSession::AsyncWrite(ByteBuffer& packet)
{
- TC_LOG_DEBUG("server.authserver", "Entering _HandleLogonChallenge");
- if (socket().recv_len() < sizeof(sAuthLogonChallenge_C))
- return false;
+ if (!IsOpen())
+ return;
- // Read the first 4 bytes (header) to get the length of the remaining of the packet
- std::vector<uint8> buf;
- buf.resize(4);
+ std::lock_guard<std::mutex> guard(_writeLock);
- socket().recv((char *)&buf[0], 4);
+ bool needsWriteStart = _writeQueue.empty();
- EndianConvertPtr<uint16>(&buf[0]);
+ _writeQueue.push(std::move(packet));
- uint16 remaining = ((sAuthLogonChallenge_C *)&buf[0])->size;
- TC_LOG_DEBUG("server.authserver", "[AuthChallenge] got header, body is %#04x bytes", remaining);
+ if (needsWriteStart)
+ Base::AsyncWrite(_writeQueue.front());
+}
- if ((remaining < sizeof(sAuthLogonChallenge_C) - buf.size()) || (socket().recv_len() < remaining))
- return false;
+bool AuthSession::HandleLogonChallenge()
+{
+ sAuthLogonChallenge_C* challenge = reinterpret_cast<sAuthLogonChallenge_C*>(GetDataBuffer());
- //No big fear of memory outage (size is int16, i.e. < 65536)
- buf.resize(remaining + buf.size() + 1);
- buf[buf.size() - 1] = 0;
- sAuthLogonChallenge_C *ch = (sAuthLogonChallenge_C*)&buf[0];
-
- // Read the remaining of the packet
- socket().recv((char *)&buf[4], remaining);
- TC_LOG_DEBUG("server.authserver", "[AuthChallenge] got full packet, %#04x bytes", ch->size);
- TC_LOG_DEBUG("server.authserver", "[AuthChallenge] name(%d): '%s'", ch->I_len, ch->I);
-
- // BigEndian code, nop in little endian case
- // size already converted
- EndianConvertPtr<uint32>(&ch->gamename[0]);
- EndianConvert(ch->build);
- EndianConvertPtr<uint32>(&ch->platform[0]);
- EndianConvertPtr<uint32>(&ch->os[0]);
- EndianConvertPtr<uint32>(&ch->country[0]);
- EndianConvert(ch->timezone_bias);
- EndianConvert(ch->ip);
+ //TC_LOG_DEBUG("server.authserver", "[AuthChallenge] got full packet, %#04x bytes", challenge->size);
+ TC_LOG_DEBUG("server.authserver", "[AuthChallenge] name(%d): '%s'", challenge->I_len, challenge->I);
ByteBuffer pkt;
- _login = (const char*)ch->I;
- _build = ch->build;
+ _login.assign((const char*)challenge->I, challenge->I_len);
+ _build = challenge->build;
_expversion = uint8(AuthHelper::IsPostBCAcceptedClientBuild(_build) ? POST_BC_EXP_FLAG : (AuthHelper::IsPreBCAcceptedClientBuild(_build) ? PRE_BC_EXP_FLAG : NO_VALID_EXP_FLAG));
- _os = (const char*)ch->os;
+ _os = (const char*)challenge->os;
if (_os.size() > 4)
return false;
@@ -368,14 +208,16 @@ bool AuthSocket::_HandleLogonChallenge()
// Verify that this IP is not in the ip_banned table
LoginDatabase.Execute(LoginDatabase.GetPreparedStatement(LOGIN_DEL_EXPIRED_IP_BANS));
- std::string const& ip_address = socket().getRemoteAddress();
+ std::string ipAddress = GetRemoteIpAddress().to_string();
+ uint16 port = GetRemotePort();
+
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_IP_BANNED);
- stmt->setString(0, ip_address);
+ stmt->setString(0, ipAddress);
PreparedQueryResult result = LoginDatabase.Query(stmt);
if (result)
{
pkt << uint8(WOW_FAIL_BANNED);
- TC_LOG_DEBUG("server.authserver", "'%s:%d' [AuthChallenge] Banned ip tries to login!", socket().getRemoteAddress().c_str(), socket().getRemotePort());
+ TC_LOG_DEBUG("server.authserver", "'%s:%d' [AuthChallenge] Banned ip tries to login!", ipAddress.c_str(), port);
}
else
{
@@ -394,9 +236,9 @@ bool AuthSocket::_HandleLogonChallenge()
if (fields[2].GetUInt8() == 1) // if ip is locked
{
TC_LOG_DEBUG("server.authserver", "[AuthChallenge] Account '%s' is locked to IP - '%s'", _login.c_str(), fields[4].GetCString());
- TC_LOG_DEBUG("server.authserver", "[AuthChallenge] Player address is '%s'", ip_address.c_str());
+ TC_LOG_DEBUG("server.authserver", "[AuthChallenge] Player address is '%s'", ipAddress.c_str());
- if (strcmp(fields[4].GetCString(), ip_address.c_str()) != 0)
+ if (strcmp(fields[4].GetCString(), ipAddress.c_str()) != 0)
{
TC_LOG_DEBUG("server.authserver", "[AuthChallenge] Account IP differs");
pkt << uint8(WOW_FAIL_LOCKED_ENFORCED);
@@ -413,7 +255,7 @@ bool AuthSocket::_HandleLogonChallenge()
TC_LOG_DEBUG("server.authserver", "[AuthChallenge] Account '%s' is not locked to country", _login.c_str());
else if (!accountCountry.empty())
{
- uint32 ip = inet_addr(ip_address.c_str());
+ uint32 ip = inet_addr(ipAddress.c_str());
EndianConvertReverse(ip);
stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_LOGON_COUNTRY);
@@ -421,7 +263,9 @@ bool AuthSocket::_HandleLogonChallenge()
if (PreparedQueryResult sessionCountryQuery = LoginDatabase.Query(stmt))
{
std::string loginCountry = (*sessionCountryQuery)[0].GetString();
- TC_LOG_DEBUG("server.authserver", "[AuthChallenge] Account '%s' is locked to country: '%s' Player country is '%s'", _login.c_str(), accountCountry.c_str(), loginCountry.c_str());
+ TC_LOG_DEBUG("server.authserver", "[AuthChallenge] Account '%s' is locked to country: '%s' Player country is '%s'", _login.c_str(),
+ accountCountry.c_str(), loginCountry.c_str());
+
if (loginCountry != accountCountry)
{
TC_LOG_DEBUG("server.authserver", "[AuthChallenge] Account country differs.");
@@ -450,12 +294,14 @@ bool AuthSocket::_HandleLogonChallenge()
if ((*banresult)[0].GetUInt32() == (*banresult)[1].GetUInt32())
{
pkt << uint8(WOW_FAIL_BANNED);
- TC_LOG_DEBUG("server.authserver", "'%s:%d' [AuthChallenge] Banned account %s tried to login!", socket().getRemoteAddress().c_str(), socket().getRemotePort(), _login.c_str ());
+ TC_LOG_DEBUG("server.authserver", "'%s:%d' [AuthChallenge] Banned account %s tried to login!", ipAddress.c_str(),
+ port, _login.c_str());
}
else
{
pkt << uint8(WOW_FAIL_SUSPENDED);
- TC_LOG_DEBUG("server.authserver", "'%s:%d' [AuthChallenge] Temporarily banned account %s tried to login!", socket().getRemoteAddress().c_str(), socket().getRemotePort(), _login.c_str ());
+ TC_LOG_DEBUG("server.authserver", "'%s:%d' [AuthChallenge] Temporarily banned account %s tried to login!",
+ ipAddress.c_str(), port, _login.c_str());
}
}
else
@@ -470,8 +316,8 @@ bool AuthSocket::_HandleLogonChallenge()
TC_LOG_DEBUG("network", "database authentication values: v='%s' s='%s'", databaseV.c_str(), databaseS.c_str());
// multiply with 2 since bytes are stored as hexstring
- if (databaseV.size() != s_BYTE_SIZE * 2 || databaseS.size() != s_BYTE_SIZE * 2)
- _SetVSFields(rI);
+ if (databaseV.size() != size_t(BufferSizes::SRP_6_V) * 2 || databaseS.size() != size_t(BufferSizes::SRP_6_S) * 2)
+ SetVSFields(rI);
else
{
s.SetHexStr(databaseS.c_str());
@@ -496,10 +342,10 @@ bool AuthSocket::_HandleLogonChallenge()
// B may be calculated < 32B so we force minimal length to 32B
pkt.append(B.AsByteArray(32).get(), 32); // 32 bytes
pkt << uint8(1);
- pkt.append(g.AsByteArray().get(), 1);
+ pkt.append(g.AsByteArray(1).get(), 1);
pkt << uint8(32);
pkt.append(N.AsByteArray(32).get(), 32);
- pkt.append(s.AsByteArray().get(), s.GetNumBytes()); // 32 bytes
+ pkt.append(s.AsByteArray(int32(BufferSizes::SRP_6_S)).get(), size_t(BufferSizes::SRP_6_S)); // 32 bytes
pkt.append(unk3.AsByteArray(16).get(), 16);
uint8 securityFlags = 0;
@@ -533,10 +379,12 @@ bool AuthSocket::_HandleLogonChallenge()
_localizationName.resize(4);
for (int i = 0; i < 4; ++i)
- _localizationName[i] = ch->country[4-i-1];
+ _localizationName[i] = challenge->country[4 - i - 1];
- TC_LOG_DEBUG("server.authserver", "'%s:%d' [AuthChallenge] account %s is using '%c%c%c%c' locale (%u)", socket().getRemoteAddress().c_str(), socket().getRemotePort(),
- _login.c_str (), ch->country[3], ch->country[2], ch->country[1], ch->country[0], GetLocaleByName(_localizationName)
+ TC_LOG_DEBUG("server.authserver", "'%s:%d' [AuthChallenge] account %s is using '%c%c%c%c' locale (%u)",
+ ipAddress.c_str(), port, _login.c_str(),
+ challenge->country[3], challenge->country[2], challenge->country[1], challenge->country[0],
+ GetLocaleByName(_localizationName)
);
}
}
@@ -545,39 +393,35 @@ bool AuthSocket::_HandleLogonChallenge()
pkt << uint8(WOW_FAIL_UNKNOWN_ACCOUNT);
}
- socket().send((char const*)pkt.contents(), pkt.size());
+ AsyncWrite(pkt);
return true;
}
// Logon Proof command handler
-bool AuthSocket::_HandleLogonProof()
+bool AuthSession::HandleLogonProof()
{
+
TC_LOG_DEBUG("server.authserver", "Entering _HandleLogonProof");
// Read the packet
- sAuthLogonProof_C lp;
-
- if (!socket().recv((char *)&lp, sizeof(sAuthLogonProof_C)))
- return false;
+ sAuthLogonProof_C *logonProof = reinterpret_cast<sAuthLogonProof_C*>(GetDataBuffer());
// If the client has no valid version
if (_expversion == NO_VALID_EXP_FLAG)
{
// Check if we have the appropriate patch on the disk
TC_LOG_DEBUG("network", "Client with invalid version, patching is not implemented");
- socket().shutdown();
- return true;
+ return false;
}
// Continue the SRP6 calculation based on data received from the client
BigNumber A;
- A.SetBinary(lp.A, 32);
+ A.SetBinary(logonProof->A, 32);
// SRP safeguard: abort if A == 0
if (A.isZero())
{
- socket().shutdown();
- return true;
+ return false;
}
SHA1Hash sha;
@@ -642,12 +486,12 @@ bool AuthSocket::_HandleLogonProof()
sha.UpdateBigNumbers(&s, &A, &B, &K, NULL);
sha.Finalize();
BigNumber M;
- M.SetBinary(sha.GetDigest(), 20);
+ M.SetBinary(sha.GetDigest(), sha.GetLength());
// Check if SRP6 results match (password is correct), else send an error
- if (!memcmp(M.AsByteArray().get(), lp.M1, 20))
+ if (!memcmp(M.AsByteArray(sha.GetLength()).get(), logonProof->M1, 20))
{
- TC_LOG_DEBUG("server.authserver", "'%s:%d' User '%s' successfully authenticated", socket().getRemoteAddress().c_str(), socket().getRemotePort(), _login.c_str());
+ TC_LOG_DEBUG("server.authserver", "'%s:%d' User '%s' successfully authenticated", GetRemoteIpAddress().to_string().c_str(), GetRemotePort(), _login.c_str());
// Update the sessionkey, last_ip, last login time and reset number of failed logins in the account table for this account
// No SQL injection (escaped user name) and IP address as received by socket
@@ -655,7 +499,7 @@ bool AuthSocket::_HandleLogonProof()
PreparedStatement *stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_LOGONPROOF);
stmt->setString(0, K_hex);
- stmt->setString(1, socket().getRemoteAddress().c_str());
+ stmt->setString(1, GetRemoteIpAddress().to_string().c_str());
stmt->setUInt32(2, GetLocaleByName(_localizationName));
stmt->setString(3, _os);
stmt->setString(4, _login);
@@ -669,34 +513,39 @@ bool AuthSocket::_HandleLogonProof()
sha.Finalize();
// Check auth token
- if ((lp.securityFlags & 0x04) || !_tokenKey.empty())
+ if ((logonProof->securityFlags & 0x04) || !_tokenKey.empty())
{
- uint8 size;
- socket().recv((char*)&size, 1);
- char* token = new char[size + 1];
- token[size] = '\0';
- socket().recv(token, size);
- unsigned int validToken = TOTP::GenerateToken(_tokenKey.c_str());
- unsigned int incomingToken = atoi(token);
- delete[] token;
+ ReadData(1);
+ uint8 size = *(GetDataBuffer() + sizeof(sAuthLogonProof_C));
+ ReadData(size);
+ std::string token(reinterpret_cast<char*>(GetDataBuffer() + sizeof(sAuthLogonProof_C) + sizeof(size)), size);
+ uint32 validToken = TOTP::GenerateToken(_tokenKey.c_str());
+ uint32 incomingToken = atoi(token.c_str());
if (validToken != incomingToken)
{
- char data[] = { AUTH_LOGON_PROOF, WOW_FAIL_UNKNOWN_ACCOUNT, 3, 0 };
- socket().send(data, sizeof(data));
+ ByteBuffer packet;
+ packet << uint8(AUTH_LOGON_PROOF);
+ packet << uint8(WOW_FAIL_UNKNOWN_ACCOUNT);
+ packet << uint8(3);
+ packet << uint8(0);
+ AsyncWrite(packet);
return false;
}
}
+ ByteBuffer packet;
if (_expversion & POST_BC_EXP_FLAG) // 2.x and 3.x clients
{
sAuthLogonProof_S proof;
memcpy(proof.M2, sha.GetDigest(), 20);
proof.cmd = AUTH_LOGON_PROOF;
proof.error = 0;
- proof.unk1 = 0x00800000; // Accountflags. 0x01 = GM, 0x08 = Trial, 0x00800000 = Pro pass (arena tournament)
- proof.unk2 = 0x00; // SurveyId
- proof.unk3 = 0x00;
- socket().send((char *)&proof, sizeof(proof));
+ proof.AccountFlags = 0x00800000; // 0x01 = GM, 0x08 = Trial, 0x00800000 = Pro pass (arena tournament)
+ proof.SurveyId = 0;
+ proof.unk3 = 0;
+
+ packet.resize(sizeof(proof));
+ std::memcpy(packet.contents(), &proof, sizeof(proof));
}
else
{
@@ -705,23 +554,43 @@ bool AuthSocket::_HandleLogonProof()
proof.cmd = AUTH_LOGON_PROOF;
proof.error = 0;
proof.unk2 = 0x00;
- socket().send((char *)&proof, sizeof(proof));
+
+ packet.resize(sizeof(proof));
+ std::memcpy(packet.contents(), &proof, sizeof(proof));
}
- _authed = true;
+ AsyncWrite(packet);
+ _isAuthenticated = true;
}
else
{
- char data[4] = { AUTH_LOGON_PROOF, WOW_FAIL_UNKNOWN_ACCOUNT, 3, 0 };
- socket().send(data, sizeof(data));
+ ByteBuffer packet;
+ packet << uint8(AUTH_LOGON_PROOF);
+ packet << uint8(WOW_FAIL_UNKNOWN_ACCOUNT);
+ packet << uint8(3);
+ packet << uint8(0);
+ AsyncWrite(packet);
- TC_LOG_DEBUG("server.authserver", "'%s:%d' [AuthChallenge] account %s tried to login with invalid password!", socket().getRemoteAddress().c_str(), socket().getRemotePort(), _login.c_str ());
+ TC_LOG_DEBUG("server.authserver", "'%s:%d' [AuthChallenge] account %s tried to login with invalid password!",
+ GetRemoteIpAddress().to_string().c_str(), GetRemotePort(), _login.c_str());
uint32 MaxWrongPassCount = sConfigMgr->GetIntDefault("WrongPass.MaxCount", 0);
+
+ // We can not include the failed account login hook. However, this is a workaround to still log this.
+ if (sConfigMgr->GetBoolDefault("Wrong.Password.Login.Logging", false))
+ {
+ PreparedStatement* logstmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_FALP_IP_LOGGING);
+ logstmt->setString(0, _login);
+ logstmt->setString(1, GetRemoteIpAddress().to_string());
+ logstmt->setString(2, "Logged on failed AccountLogin due wrong password");
+
+ LoginDatabase.Execute(logstmt);
+ }
+
if (MaxWrongPassCount > 0)
{
//Increment number of failed logins by one and if it reaches the limit temporarily ban that account or IP
- PreparedStatement *stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_FAILEDLOGINS);
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_FAILEDLOGINS);
stmt->setString(0, _login);
LoginDatabase.Execute(stmt);
@@ -746,17 +615,17 @@ bool AuthSocket::_HandleLogonProof()
LoginDatabase.Execute(stmt);
TC_LOG_DEBUG("server.authserver", "'%s:%d' [AuthChallenge] account %s got banned for '%u' seconds because it failed to authenticate '%u' times",
- socket().getRemoteAddress().c_str(), socket().getRemotePort(), _login.c_str(), WrongPassBanTime, failed_logins);
+ GetRemoteIpAddress().to_string().c_str(), GetRemotePort(), _login.c_str(), WrongPassBanTime, failed_logins);
}
else
{
stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_IP_AUTO_BANNED);
- stmt->setString(0, socket().getRemoteAddress());
+ stmt->setString(0, GetRemoteIpAddress().to_string());
stmt->setUInt32(1, WrongPassBanTime);
LoginDatabase.Execute(stmt);
- TC_LOG_DEBUG("server.authserver", "'%s:%d' [AuthChallenge] IP %s got banned for '%u' seconds because account %s failed to authenticate '%u' times",
- socket().getRemoteAddress().c_str(), socket().getRemotePort(), socket().getRemoteAddress().c_str(), WrongPassBanTime, _login.c_str(), failed_logins);
+ TC_LOG_DEBUG("server.authserver", "'%s:%d' [AuthChallenge] IP got banned for '%u' seconds because account %s failed to authenticate '%u' times",
+ GetRemoteIpAddress().to_string().c_str(), GetRemotePort(), WrongPassBanTime, _login.c_str(), failed_logins);
}
}
}
@@ -766,38 +635,15 @@ bool AuthSocket::_HandleLogonProof()
return true;
}
-// Reconnect Challenge command handler
-bool AuthSocket::_HandleReconnectChallenge()
+bool AuthSession::HandleReconnectChallenge()
{
TC_LOG_DEBUG("server.authserver", "Entering _HandleReconnectChallenge");
- if (socket().recv_len() < sizeof(sAuthLogonChallenge_C))
- return false;
-
- // Read the first 4 bytes (header) to get the length of the remaining of the packet
- std::vector<uint8> buf;
- buf.resize(4);
-
- socket().recv((char *)&buf[0], 4);
-
- EndianConvertPtr<uint16>(&buf[0]);
-
- uint16 remaining = ((sAuthLogonChallenge_C *)&buf[0])->size;
- TC_LOG_DEBUG("server.authserver", "[ReconnectChallenge] got header, body is %#04x bytes", remaining);
+ sAuthLogonChallenge_C* challenge = reinterpret_cast<sAuthLogonChallenge_C*>(GetDataBuffer());
- if ((remaining < sizeof(sAuthLogonChallenge_C) - buf.size()) || (socket().recv_len() < remaining))
- return false;
-
- // No big fear of memory outage (size is int16, i.e. < 65536)
- buf.resize(remaining + buf.size() + 1);
- buf[buf.size() - 1] = 0;
- sAuthLogonChallenge_C *ch = (sAuthLogonChallenge_C*)&buf[0];
+ //TC_LOG_DEBUG("server.authserver", "[AuthChallenge] got full packet, %#04x bytes", challenge->size);
+ TC_LOG_DEBUG("server.authserver", "[AuthChallenge] name(%d): '%s'", challenge->I_len, challenge->I);
- // Read the remaining of the packet
- socket().recv((char *)&buf[4], remaining);
- TC_LOG_DEBUG("server.authserver", "[ReconnectChallenge] got full packet, %#04x bytes", ch->size);
- TC_LOG_DEBUG("server.authserver", "[ReconnectChallenge] name(%d): '%s'", ch->I_len, ch->I);
-
- _login = (const char*)ch->I;
+ _login.assign((const char*)challenge->I, challenge->I_len);
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_SESSIONKEY);
stmt->setString(0, _login);
@@ -806,15 +652,15 @@ bool AuthSocket::_HandleReconnectChallenge()
// Stop if the account is not found
if (!result)
{
- TC_LOG_ERROR("server.authserver", "'%s:%d' [ERROR] user %s tried to login and we cannot find his session key in the database.", socket().getRemoteAddress().c_str(), socket().getRemotePort(), _login.c_str());
- socket().shutdown();
+ TC_LOG_ERROR("server.authserver", "'%s:%d' [ERROR] user %s tried to login and we cannot find his session key in the database.",
+ GetRemoteIpAddress().to_string().c_str(), GetRemotePort(), _login.c_str());
return false;
}
// Reinitialize build, expansion and the account securitylevel
- _build = ch->build;
+ _build = challenge->build;
_expversion = uint8(AuthHelper::IsPostBCAcceptedClientBuild(_build) ? POST_BC_EXP_FLAG : (AuthHelper::IsPreBCAcceptedClientBuild(_build) ? PRE_BC_EXP_FLAG : NO_VALID_EXP_FLAG));
- _os = (const char*)ch->os;
+ _os = (const char*)challenge->os;
if (_os.size() > 4)
return false;
@@ -826,7 +672,7 @@ bool AuthSocket::_HandleReconnectChallenge()
uint8 secLevel = fields[2].GetUInt8();
_accountSecurityLevel = secLevel <= SEC_ADMINISTRATOR ? AccountTypes(secLevel) : SEC_ADMINISTRATOR;
- K.SetHexStr ((*result)[0].GetCString());
+ K.SetHexStr((*result)[0].GetCString());
// Sending response
ByteBuffer pkt;
@@ -835,24 +681,21 @@ bool AuthSocket::_HandleReconnectChallenge()
_reconnectProof.SetRand(16 * 8);
pkt.append(_reconnectProof.AsByteArray(16).get(), 16); // 16 bytes random
pkt << uint64(0x00) << uint64(0x00); // 16 bytes zeros
- socket().send((char const*)pkt.contents(), pkt.size());
+
+ AsyncWrite(pkt);
+
return true;
}
-
-// Reconnect Proof command handler
-bool AuthSocket::_HandleReconnectProof()
+bool AuthSession::HandleReconnectProof()
{
TC_LOG_DEBUG("server.authserver", "Entering _HandleReconnectProof");
- // Read the packet
- sAuthReconnectProof_C lp;
- if (!socket().recv((char *)&lp, sizeof(sAuthReconnectProof_C)))
- return false;
+ sAuthReconnectProof_C *reconnectProof = reinterpret_cast<sAuthReconnectProof_C*>(GetDataBuffer());
if (_login.empty() || !_reconnectProof.GetNumBytes() || !K.GetNumBytes())
return false;
BigNumber t1;
- t1.SetBinary(lp.R1, 16);
+ t1.SetBinary(reconnectProof->R1, 16);
SHA1Hash sha;
sha.Initialize();
@@ -860,55 +703,63 @@ bool AuthSocket::_HandleReconnectProof()
sha.UpdateBigNumbers(&t1, &_reconnectProof, &K, NULL);
sha.Finalize();
- if (!memcmp(sha.GetDigest(), lp.R2, SHA_DIGEST_LENGTH))
+ if (!memcmp(sha.GetDigest(), reconnectProof->R2, SHA_DIGEST_LENGTH))
{
// Sending response
ByteBuffer pkt;
pkt << uint8(AUTH_RECONNECT_PROOF);
pkt << uint8(0x00);
pkt << uint16(0x00); // 2 bytes zeros
- socket().send((char const*)pkt.contents(), pkt.size());
- _authed = true;
+ AsyncWrite(pkt);
+ _isAuthenticated = true;
return true;
}
else
{
- TC_LOG_ERROR("server.authserver", "'%s:%d' [ERROR] user %s tried to login, but session is invalid.", socket().getRemoteAddress().c_str(), socket().getRemotePort(), _login.c_str());
- socket().shutdown();
+ TC_LOG_ERROR("server.authserver", "'%s:%d' [ERROR] user %s tried to login, but session is invalid.", GetRemoteIpAddress().to_string().c_str(),
+ GetRemotePort(), _login.c_str());
return false;
}
}
-ACE_INET_Addr const& AuthSocket::GetAddressForClient(Realm const& realm, ACE_INET_Addr const& clientAddr)
+tcp::endpoint const GetAddressForClient(Realm const& realm, ip::address const& clientAddr)
{
+ ip::address realmIp;
+
// Attempt to send best address for client
if (clientAddr.is_loopback())
{
// Try guessing if realm is also connected locally
if (realm.LocalAddress.is_loopback() || realm.ExternalAddress.is_loopback())
- return clientAddr;
-
- // Assume that user connecting from the machine that authserver is located on
- // has all realms available in his local network
- return realm.LocalAddress;
+ realmIp = clientAddr;
+ else
+ {
+ // Assume that user connecting from the machine that authserver is located on
+ // has all realms available in his local network
+ realmIp = realm.LocalAddress;
+ }
+ }
+ else
+ {
+ if (clientAddr.is_v4() &&
+ (clientAddr.to_v4().to_ulong() & realm.LocalSubnetMask.to_v4().to_ulong()) ==
+ (realm.LocalAddress.to_v4().to_ulong() & realm.LocalSubnetMask.to_v4().to_ulong()))
+ {
+ realmIp = realm.LocalAddress;
+ }
+ else
+ realmIp = realm.ExternalAddress;
}
- // Check if connecting client is in the same network
- if (IsIPAddrInNetwork(realm.LocalAddress, clientAddr, realm.LocalSubnetMask))
- return realm.LocalAddress;
+ tcp::endpoint endpoint(realmIp, realm.port);
// Return external IP
- return realm.ExternalAddress;
+ return endpoint;
}
-// Realm List command handler
-bool AuthSocket::_HandleRealmList()
+bool AuthSession::HandleRealmList()
{
TC_LOG_DEBUG("server.authserver", "Entering _HandleRealmList");
- if (socket().recv_len() < 5)
- return false;
-
- socket().recv_skip(5);
// Get the user id (else close the connection)
// No SQL injection (prepared statement)
@@ -917,8 +768,8 @@ bool AuthSocket::_HandleRealmList()
PreparedQueryResult result = LoginDatabase.Query(stmt);
if (!result)
{
- TC_LOG_ERROR("server.authserver", "'%s:%d' [ERROR] user %s tried to login but we cannot find him in the database.", socket().getRemoteAddress().c_str(), socket().getRemotePort(), _login.c_str());
- socket().shutdown();
+ TC_LOG_ERROR("server.authserver", "'%s:%d' [ERROR] user %s tried to login but we cannot find him in the database.", GetRemoteIpAddress().to_string().c_str(),
+ GetRemotePort(), _login.c_str());
return false;
}
@@ -928,9 +779,6 @@ bool AuthSocket::_HandleRealmList()
// Update realm list if need
sRealmList->UpdateIfNeed();
- ACE_INET_Addr clientAddr;
- socket().peer().get_remote_addr(clientAddr);
-
// Circle through realms in the RealmList and construct the return packet (including # of user characters in each realm)
ByteBuffer pkt;
@@ -963,9 +811,6 @@ bool AuthSocket::_HandleRealmList()
name = ss.str();
}
- // We don't need the port number from which client connects with but the realm's port
- clientAddr.set_port_number(realm.ExternalAddress.get_port_number());
-
uint8 lock = (realm.allowedSecurityLevel > _accountSecurityLevel) ? 1 : 0;
uint8 AmountOfCharacters = 0;
@@ -981,12 +826,12 @@ bool AuthSocket::_HandleRealmList()
pkt << lock; // if 1, then realm locked
pkt << uint8(flag); // RealmFlags
pkt << name;
- pkt << GetAddressString(GetAddressForClient(realm, clientAddr));
+ pkt << boost::lexical_cast<std::string>(GetAddressForClient(realm, GetRemoteIpAddress()));
pkt << realm.populationLevel;
pkt << AmountOfCharacters;
pkt << realm.timezone; // realm category
if (_expversion & POST_BC_EXP_FLAG) // 2.x and 3.x clients
- pkt << uint8(0x2C); // unk, may be realm number/id?
+ pkt << uint8(realm.m_ID);
else
pkt << uint8(0x0); // 1.12.1 and 1.12.2 clients
@@ -1025,183 +870,68 @@ bool AuthSocket::_HandleRealmList()
hdr << uint16(pkt.size() + RealmListSizeBuffer.size());
hdr.append(RealmListSizeBuffer); // append RealmList's size buffer
hdr.append(pkt); // append realms in the realmlist
-
- socket().send((char const*)hdr.contents(), hdr.size());
-
+ AsyncWrite(hdr);
return true;
}
// Resume patch transfer
-bool AuthSocket::_HandleXferResume()
+bool AuthSession::HandleXferResume()
{
TC_LOG_DEBUG("server.authserver", "Entering _HandleXferResume");
- // Check packet length and patch existence
- if (socket().recv_len() < 9 || !pPatch) // FIXME: pPatch is never used
- {
- TC_LOG_ERROR("server.authserver", "Error while resuming patch transfer (wrong packet)");
- return false;
- }
-
- // Launch a PatcherRunnable thread starting at given patch file offset
- uint64 start;
- socket().recv_skip(1);
- socket().recv((char*)&start, sizeof(start));
- fseek(pPatch, long(start), 0);
-
- ACE_Based::Thread u(new PatcherRunnable(this));
+ //uint8
+ //uint64
return true;
}
// Cancel patch transfer
-bool AuthSocket::_HandleXferCancel()
+bool AuthSession::HandleXferCancel()
{
TC_LOG_DEBUG("server.authserver", "Entering _HandleXferCancel");
-
- // Close and delete the socket
- socket().recv_skip(1); //clear input buffer
- socket().shutdown();
-
- return true;
+ //uint8
+ return false;
}
// Accept patch transfer
-bool AuthSocket::_HandleXferAccept()
+bool AuthSession::HandleXferAccept()
{
TC_LOG_DEBUG("server.authserver", "Entering _HandleXferAccept");
-
- // Check packet length and patch existence
- if (!pPatch)
- {
- TC_LOG_ERROR("server.authserver", "Error while accepting patch transfer (wrong packet)");
- return false;
- }
-
- // Launch a PatcherRunnable thread, starting at the beginning of the patch file
- socket().recv_skip(1); // clear input buffer
- fseek(pPatch, 0, 0);
-
- ACE_Based::Thread u(new PatcherRunnable(this));
+ //uint8
return true;
}
-PatcherRunnable::PatcherRunnable(class AuthSocket* as)
-{
- mySocket = as;
-}
-
-// Send content of patch file to the client
-void PatcherRunnable::run() { }
-
-// Preload MD5 hashes of existing patch files on server
-#ifndef _WIN32
-#include <dirent.h>
-#include <errno.h>
-void Patcher::LoadPatchesInfo()
-{
- DIR *dirp;
- struct dirent *dp;
- dirp = opendir("./patches/");
-
- if (!dirp)
- return;
-
- while (dirp)
- {
- errno = 0;
- if ((dp = readdir(dirp)) != NULL)
- {
- int l = strlen(dp->d_name);
-
- if (l < 8)
- continue;
-
- if (!memcmp(&dp->d_name[l - 4], ".mpq", 4))
- LoadPatchMD5(dp->d_name);
- }
- else
- {
- if (errno != 0)
- {
- closedir(dirp);
- return;
- }
- break;
- }
- }
-
- if (dirp)
- closedir(dirp);
-}
-#else
-void Patcher::LoadPatchesInfo()
-{
- WIN32_FIND_DATA fil;
- HANDLE hFil = FindFirstFile("./patches/*.mpq", &fil);
- if (hFil == INVALID_HANDLE_VALUE)
- return; // no patches were found
-
- do
- LoadPatchMD5(fil.cFileName);
- while (FindNextFile(hFil, &fil));
-}
-#endif
-
-// Calculate and store MD5 hash for a given patch file
-void Patcher::LoadPatchMD5(char *szFileName)
+// Make the SRP6 calculation from hash in dB
+void AuthSession::SetVSFields(const std::string& rI)
{
- // Try to open the patch file
- std::string path = "./patches/";
- path += szFileName;
- FILE* pPatch = fopen(path.c_str(), "rb");
- TC_LOG_DEBUG("network", "Loading patch info from %s\n", path.c_str());
+ s.SetRand(int32(BufferSizes::SRP_6_S) * 8);
- if (!pPatch)
- {
- TC_LOG_ERROR("server.authserver", "Error loading patch %s\n", path.c_str());
- return;
- }
-
- // Calculate the MD5 hash
- MD5_CTX ctx;
- MD5_Init(&ctx);
- uint8* buf = new uint8[512 * 1024];
-
- while (!feof(pPatch))
- {
- size_t read = fread(buf, 1, 512 * 1024, pPatch);
- MD5_Update(&ctx, buf, read);
- }
+ BigNumber I;
+ I.SetHexStr(rI.c_str());
- delete [] buf;
- fclose(pPatch);
+ // In case of leading zeros in the rI hash, restore them
+ uint8 mDigest[SHA_DIGEST_LENGTH];
+ memcpy(mDigest, I.AsByteArray(SHA_DIGEST_LENGTH).get(), SHA_DIGEST_LENGTH);
- // Store the result in the internal patch hash map
- _patches[path] = new PATCH_INFO;
- MD5_Final((uint8 *)&_patches[path]->md5, &ctx);
-}
+ std::reverse(mDigest, mDigest + SHA_DIGEST_LENGTH);
-// Get cached MD5 hash for a given patch file
-bool Patcher::GetHash(char * pat, uint8 mymd5[16])
-{
- for (Patches::iterator i = _patches.begin(); i != _patches.end(); ++i)
- if (!stricmp(pat, i->first.c_str()))
- {
- memcpy(mymd5, i->second->md5, 16);
- return true;
- }
+ SHA1Hash sha;
+ sha.UpdateData(s.AsByteArray(uint32(BufferSizes::SRP_6_S)).get(), (uint32(BufferSizes::SRP_6_S)));
+ sha.UpdateData(mDigest, SHA_DIGEST_LENGTH);
+ sha.Finalize();
+ BigNumber x;
+ x.SetBinary(sha.GetDigest(), sha.GetLength());
+ v = g.ModExp(x, N);
- return false;
-}
+ // No SQL injection (username escaped)
+ char *v_hex, *s_hex;
+ v_hex = v.AsHexStr();
+ s_hex = s.AsHexStr();
-// Launch the patch hashing mechanism on object creation
-Patcher::Patcher()
-{
- LoadPatchesInfo();
-}
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_VS);
+ stmt->setString(0, v_hex);
+ stmt->setString(1, s_hex);
+ stmt->setString(2, _login);
+ LoginDatabase.Execute(stmt);
-// Empty and delete the patch map on termination
-Patcher::~Patcher()
-{
- for (Patches::iterator i = _patches.begin(); i != _patches.end(); ++i)
- delete i->second;
+ OPENSSL_free(v_hex);
+ OPENSSL_free(s_hex);
}
diff --git a/src/server/authserver/Server/AuthSession.h b/src/server/authserver/Server/AuthSession.h
new file mode 100644
index 00000000000..3497e3a030c
--- /dev/null
+++ b/src/server/authserver/Server/AuthSession.h
@@ -0,0 +1,100 @@
+/*
+* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __AUTHSESSION_H__
+#define __AUTHSESSION_H__
+
+#include "Common.h"
+#include "ByteBuffer.h"
+#include "Socket.h"
+#include "BigNumber.h"
+#include <memory>
+#include <boost/asio/ip/tcp.hpp>
+
+using boost::asio::ip::tcp;
+
+struct AuthHandler;
+
+class AuthSession : public Socket<AuthSession, ByteBuffer>
+{
+ typedef Socket<AuthSession, ByteBuffer> Base;
+
+public:
+ static std::unordered_map<uint8, AuthHandler> InitHandlers();
+
+ AuthSession(tcp::socket&& socket) : Socket(std::move(socket), 1),
+ _isAuthenticated(false), _build(0), _expversion(0), _accountSecurityLevel(SEC_PLAYER)
+ {
+ N.SetHexStr("894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7");
+ g.SetDword(7);
+ }
+
+ void Start() override
+ {
+ AsyncReadHeader();
+ }
+
+ using Base::AsyncWrite;
+ void AsyncWrite(ByteBuffer& packet);
+
+protected:
+ void ReadHeaderHandler() override;
+ void ReadDataHandler() override;
+
+private:
+ bool HandleLogonChallenge();
+ bool HandleLogonProof();
+ bool HandleReconnectChallenge();
+ bool HandleReconnectProof();
+ bool HandleRealmList();
+
+ //data transfer handle for patch
+ bool HandleXferResume();
+ bool HandleXferCancel();
+ bool HandleXferAccept();
+
+ void SetVSFields(const std::string& rI);
+
+ BigNumber N, s, g, v;
+ BigNumber b, B;
+ BigNumber K;
+ BigNumber _reconnectProof;
+
+ bool _isAuthenticated;
+ std::string _tokenKey;
+ std::string _login;
+ std::string _localizationName;
+ std::string _os;
+ uint16 _build;
+ uint8 _expversion;
+
+ AccountTypes _accountSecurityLevel;
+};
+
+#pragma pack(push, 1)
+
+struct AuthHandler
+{
+ uint32 status;
+ size_t packetSize;
+ bool (AuthSession::*handler)();
+};
+
+#pragma pack(pop)
+
+#endif
diff --git a/src/server/authserver/Server/AuthSocket.h b/src/server/authserver/Server/AuthSocket.h
deleted file mode 100644
index 5e04d459ba1..00000000000
--- a/src/server/authserver/Server/AuthSocket.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _AUTHSOCKET_H
-#define _AUTHSOCKET_H
-
-#include "Common.h"
-#include "BigNumber.h"
-#include "RealmSocket.h"
-
-class ACE_INET_Addr;
-struct Realm;
-
-// Handle login commands
-class AuthSocket: public RealmSocket::Session
-{
-public:
- const static int s_BYTE_SIZE = 32;
-
- AuthSocket(RealmSocket& socket);
- virtual ~AuthSocket(void);
-
- virtual void OnRead(void);
- virtual void OnAccept(void);
- virtual void OnClose(void);
-
- static ACE_INET_Addr const& GetAddressForClient(Realm const& realm, ACE_INET_Addr const& clientAddr);
-
- bool _HandleLogonChallenge();
- bool _HandleLogonProof();
- bool _HandleReconnectChallenge();
- bool _HandleReconnectProof();
- bool _HandleRealmList();
-
- //data transfer handle for patch
- bool _HandleXferResume();
- bool _HandleXferCancel();
- bool _HandleXferAccept();
-
- void _SetVSFields(const std::string& rI);
-
- FILE* pPatch;
- ACE_Thread_Mutex patcherLock;
-
-private:
- RealmSocket& socket_;
- RealmSocket& socket(void) { return socket_; }
-
- BigNumber N, s, g, v;
- BigNumber b, B;
- BigNumber K;
- BigNumber _reconnectProof;
-
- bool _authed;
-
- std::string _login;
- std::string _tokenKey;
-
- // Since GetLocaleByName() is _NOT_ bijective, we have to store the locale as a string. Otherwise we can't differ
- // between enUS and enGB, which is important for the patch system
- std::string _localizationName;
- std::string _os;
- uint16 _build;
- uint8 _expversion;
- AccountTypes _accountSecurityLevel;
-};
-
-#endif
diff --git a/src/server/authserver/Server/RealmAcceptor.h b/src/server/authserver/Server/RealmAcceptor.h
deleted file mode 100644
index e89135c4896..00000000000
--- a/src/server/authserver/Server/RealmAcceptor.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __REALMACCEPTOR_H__
-#define __REALMACCEPTOR_H__
-
-#include <ace/Acceptor.h>
-#include <ace/SOCK_Acceptor.h>
-
-#include "RealmSocket.h"
-#include "AuthSocket.h"
-
-class RealmAcceptor : public ACE_Acceptor<RealmSocket, ACE_SOCK_Acceptor>
-{
-public:
- RealmAcceptor(void) { }
- virtual ~RealmAcceptor(void)
- {
- if (reactor())
- reactor()->cancel_timer(this, 1);
- }
-
-protected:
- virtual int make_svc_handler(RealmSocket* &sh)
- {
- if (sh == 0)
- ACE_NEW_RETURN(sh, RealmSocket, -1);
-
- sh->reactor(reactor());
- sh->set_session(new AuthSocket(*sh));
- return 0;
- }
-
- virtual int handle_timeout(const ACE_Time_Value& /*current_time*/, const void* /*act = 0*/)
- {
- TC_LOG_DEBUG("server.authserver", "Resuming acceptor");
- reactor()->cancel_timer(this, 1);
- return reactor()->register_handler(this, ACE_Event_Handler::ACCEPT_MASK);
- }
-
- virtual int handle_accept_error(void)
- {
-#if defined(ENFILE) && defined(EMFILE)
- if (errno == ENFILE || errno == EMFILE)
- {
- TC_LOG_ERROR("server.authserver", "Out of file descriptors, suspending incoming connections for 10 seconds");
- reactor()->remove_handler(this, ACE_Event_Handler::ACCEPT_MASK | ACE_Event_Handler::DONT_CALL);
- reactor()->schedule_timer(this, NULL, ACE_Time_Value(10));
- }
-#endif
- return 0;
- }
-};
-
-#endif
diff --git a/src/server/authserver/Server/RealmSocket.cpp b/src/server/authserver/Server/RealmSocket.cpp
deleted file mode 100644
index 1013639cc50..00000000000
--- a/src/server/authserver/Server/RealmSocket.cpp
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <ace/OS_NS_string.h>
-#include <ace/INET_Addr.h>
-#include <ace/SString.h>
-
-#include "RealmSocket.h"
-#include "Log.h"
-
-RealmSocket::Session::Session(void) { }
-
-RealmSocket::Session::~Session(void) { }
-
-RealmSocket::RealmSocket(void) :
- input_buffer_(4096), session_(NULL),
- _remoteAddress(), _remotePort(0)
-{
- reference_counting_policy().value(ACE_Event_Handler::Reference_Counting_Policy::ENABLED);
-
- msg_queue()->high_water_mark(8 * 1024 * 1024);
- msg_queue()->low_water_mark(8 * 1024 * 1024);
-}
-
-RealmSocket::~RealmSocket(void)
-{
- if (msg_queue())
- msg_queue()->close();
-
- // delete RealmSocketObject must never be called from our code.
- closing_ = true;
-
- delete session_;
-
- peer().close();
-}
-
-int RealmSocket::open(void * arg)
-{
- ACE_INET_Addr addr;
-
- if (peer().get_remote_addr(addr) == -1)
- {
- TC_LOG_ERROR("server.authserver", "Error %s while opening realm socket!", ACE_OS::strerror(errno));
- return -1;
- }
-
- _remoteAddress = addr.get_host_addr();
- _remotePort = addr.get_port_number();
-
- // Register with ACE Reactor
- if (Base::open(arg) == -1)
- return -1;
-
- if (session_)
- session_->OnAccept();
-
- // reactor takes care of the socket from now on
- remove_reference();
-
- return 0;
-}
-
-int RealmSocket::close(u_long)
-{
- shutdown();
-
- closing_ = true;
-
- remove_reference();
-
- return 0;
-}
-
-const std::string& RealmSocket::getRemoteAddress(void) const
-{
- return _remoteAddress;
-}
-
-uint16 RealmSocket::getRemotePort(void) const
-{
- return _remotePort;
-}
-
-size_t RealmSocket::recv_len(void) const
-{
- return input_buffer_.length();
-}
-
-bool RealmSocket::recv_soft(char *buf, size_t len)
-{
- if (input_buffer_.length() < len)
- return false;
-
- ACE_OS::memcpy(buf, input_buffer_.rd_ptr(), len);
-
- return true;
-}
-
-bool RealmSocket::recv(char *buf, size_t len)
-{
- bool ret = recv_soft(buf, len);
-
- if (ret)
- recv_skip(len);
-
- return ret;
-}
-
-void RealmSocket::recv_skip(size_t len)
-{
- input_buffer_.rd_ptr(len);
-}
-
-ssize_t RealmSocket::noblk_send(ACE_Message_Block &message_block)
-{
- const size_t len = message_block.length();
-
- if (len == 0)
- return -1;
-
- // Try to send the message directly.
-#ifdef MSG_NOSIGNAL
- ssize_t n = peer().send(message_block.rd_ptr(), len, MSG_NOSIGNAL);
-#else
- ssize_t n = peer().send(message_block.rd_ptr(), len);
-#endif // MSG_NOSIGNAL
-
- if (n < 0)
- {
- if (errno == EWOULDBLOCK) // Blocking signal
- return 0;
- else // Error happened
- return -1;
- }
- else if (n == 0)
- {
- // Can this happen ?
- return -1;
- }
-
- // return bytes transmitted
- return n;
-}
-
-bool RealmSocket::send(const char *buf, size_t len)
-{
- if (buf == NULL || len == 0)
- return true;
-
- ACE_Data_Block db(len, ACE_Message_Block::MB_DATA, (const char*)buf, 0, 0, ACE_Message_Block::DONT_DELETE, 0);
- ACE_Message_Block message_block(&db, ACE_Message_Block::DONT_DELETE, 0);
-
- message_block.wr_ptr(len);
-
- if (msg_queue()->is_empty())
- {
- // Try to send it directly.
- ssize_t n = noblk_send(message_block);
-
- if (n < 0)
- return false;
-
- size_t un = size_t(n);
- if (un == len)
- return true;
-
- // fall down
- message_block.rd_ptr(un);
- }
-
- ACE_Message_Block* mb = message_block.clone();
-
- if (msg_queue()->enqueue_tail(mb, (ACE_Time_Value *)(&ACE_Time_Value::zero)) == -1)
- {
- mb->release();
- return false;
- }
-
- if (reactor()->schedule_wakeup(this, ACE_Event_Handler::WRITE_MASK) == -1)
- return false;
-
- return true;
-}
-
-int RealmSocket::handle_output(ACE_HANDLE)
-{
- if (closing_)
- return -1;
-
- ACE_Message_Block* mb = 0;
-
- if (msg_queue()->is_empty())
- {
- reactor()->cancel_wakeup(this, ACE_Event_Handler::WRITE_MASK);
- return 0;
- }
-
- if (msg_queue()->dequeue_head(mb, (ACE_Time_Value *)(&ACE_Time_Value::zero)) == -1)
- return -1;
-
- ssize_t n = noblk_send(*mb);
-
- if (n < 0)
- {
- mb->release();
- return -1;
- }
- else if (size_t(n) == mb->length())
- {
- mb->release();
- return 1;
- }
- else
- {
- mb->rd_ptr(n);
-
- if (msg_queue()->enqueue_head(mb, (ACE_Time_Value *) &ACE_Time_Value::zero) == -1)
- {
- mb->release();
- return -1;
- }
-
- return 0;
- }
-
- ACE_NOTREACHED(return -1);
-}
-
-int RealmSocket::handle_close(ACE_HANDLE h, ACE_Reactor_Mask)
-{
- // As opposed to WorldSocket::handle_close, we don't need locks here.
- closing_ = true;
-
- if (h == ACE_INVALID_HANDLE)
- peer().close_writer();
-
- if (session_)
- session_->OnClose();
-
- reactor()->remove_handler(this, ACE_Event_Handler::DONT_CALL | ACE_Event_Handler::ALL_EVENTS_MASK);
- return 0;
-}
-
-int RealmSocket::handle_input(ACE_HANDLE)
-{
- if (closing_)
- return -1;
-
- const ssize_t space = input_buffer_.space();
-
- ssize_t n = peer().recv(input_buffer_.wr_ptr(), space);
-
- if (n < 0)
- return errno == EWOULDBLOCK ? 0 : -1;
- else if (n == 0) // EOF
- return -1;
-
- input_buffer_.wr_ptr((size_t)n);
-
- if (session_ != NULL)
- {
- session_->OnRead();
- input_buffer_.crunch();
- }
-
- // return 1 in case there is more data to read from OS
- return n == space ? 1 : 0;
-}
-
-void RealmSocket::set_session(Session* session)
-{
- delete session_;
-
- session_ = session;
-}
diff --git a/src/server/authserver/Server/RealmSocket.h b/src/server/authserver/Server/RealmSocket.h
deleted file mode 100644
index c1190d638b3..00000000000
--- a/src/server/authserver/Server/RealmSocket.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __REALMSOCKET_H__
-#define __REALMSOCKET_H__
-
-#include <ace/Synch_Traits.h>
-#include <ace/Svc_Handler.h>
-#include <ace/SOCK_Stream.h>
-#include <ace/Message_Block.h>
-#include <ace/Basic_Types.h>
-#include "Common.h"
-
-class RealmSocket : public ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_NULL_SYNCH>
-{
-private:
- typedef ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_NULL_SYNCH> Base;
-
-public:
- class Session
- {
- public:
- Session(void);
- virtual ~Session(void);
-
- virtual void OnRead(void) = 0;
- virtual void OnAccept(void) = 0;
- virtual void OnClose(void) = 0;
- };
-
- RealmSocket(void);
- virtual ~RealmSocket(void);
-
- size_t recv_len(void) const;
- bool recv_soft(char *buf, size_t len);
- bool recv(char *buf, size_t len);
- void recv_skip(size_t len);
-
- bool send(const char *buf, size_t len);
-
- const std::string& getRemoteAddress(void) const;
-
- uint16 getRemotePort(void) const;
-
- virtual int open(void *);
-
- virtual int close(u_long);
-
- virtual int handle_input(ACE_HANDLE = ACE_INVALID_HANDLE);
- virtual int handle_output(ACE_HANDLE = ACE_INVALID_HANDLE);
-
- virtual int handle_close(ACE_HANDLE = ACE_INVALID_HANDLE, ACE_Reactor_Mask = ACE_Event_Handler::ALL_EVENTS_MASK);
-
- void set_session(Session* session);
-
-private:
- ssize_t noblk_send(ACE_Message_Block &message_block);
-
- ACE_Message_Block input_buffer_;
- Session* session_;
- std::string _remoteAddress;
- uint16 _remotePort;
-};
-
-#endif /* __REALMSOCKET_H__ */
diff --git a/src/server/authserver/authserver.conf.dist b/src/server/authserver/authserver.conf.dist
index 83edf9669ac..b7dee9ac08b 100644
--- a/src/server/authserver/authserver.conf.dist
+++ b/src/server/authserver/authserver.conf.dist
@@ -148,6 +148,13 @@ LoginDatabaseInfo = "127.0.0.1;3306;trinity;trinity;auth"
LoginDatabase.WorkerThreads = 1
#
+# Wrong.Password.Login.Logging
+# Description: Additionally log attempted wrong password logging
+# Default: 0 - (Disabled)
+# 1 - (Enabled)
+
+Wrong.Password.Login.Logging = 0
+#
###################################################################################################
###################################################################################################
diff --git a/src/server/collision/BoundingIntervalHierarchy.cpp b/src/server/collision/BoundingIntervalHierarchy.cpp
index d90009c03f3..c933fc8f4e3 100644
--- a/src/server/collision/BoundingIntervalHierarchy.cpp
+++ b/src/server/collision/BoundingIntervalHierarchy.cpp
@@ -72,11 +72,11 @@ void BIH::subdivide(int left, int right, std::vector<uint32> &tempTree, buildDat
axis = d.primaryAxis();
split = 0.5f * (gridBox.lo[axis] + gridBox.hi[axis]);
// partition L/R subsets
- clipL = -G3D::inf();
- clipR = G3D::inf();
+ clipL = -G3D::finf();
+ clipR = G3D::finf();
rightOrig = right; // save this for later
- float nodeL = G3D::inf();
- float nodeR = -G3D::inf();
+ float nodeL = G3D::finf();
+ float nodeR = -G3D::finf();
for (int i = left; i <= right;)
{
int obj = dat.indices[i];
@@ -187,13 +187,13 @@ void BIH::subdivide(int left, int right, std::vector<uint32> &tempTree, buildDat
stats.updateInner();
tempTree[nodeIndex + 0] = (prevAxis << 30) | nextIndex;
tempTree[nodeIndex + 1] = floatToRawIntBits(prevClip);
- tempTree[nodeIndex + 2] = floatToRawIntBits(G3D::inf());
+ tempTree[nodeIndex + 2] = floatToRawIntBits(G3D::finf());
} else {
// create a node with a right child
// write leaf node
stats.updateInner();
tempTree[nodeIndex + 0] = (prevAxis << 30) | (nextIndex - 3);
- tempTree[nodeIndex + 1] = floatToRawIntBits(-G3D::inf());
+ tempTree[nodeIndex + 1] = floatToRawIntBits(-G3D::finf());
tempTree[nodeIndex + 2] = floatToRawIntBits(prevClip);
}
// count stats for the unused leaf
diff --git a/src/server/collision/BoundingIntervalHierarchy.h b/src/server/collision/BoundingIntervalHierarchy.h
index 4d38bfc18c4..491a299ca68 100644
--- a/src/server/collision/BoundingIntervalHierarchy.h
+++ b/src/server/collision/BoundingIntervalHierarchy.h
@@ -177,7 +177,7 @@ class BIH
{
uint32 tn = tree[node];
uint32 axis = (tn & (3 << 30)) >> 30;
- bool BVH2 = tn & (1 << 29);
+ bool BVH2 = (tn & (1 << 29)) != 0;
int offset = tn & ~(7 << 29);
if (!BVH2)
{
@@ -271,7 +271,7 @@ class BIH
{
uint32 tn = tree[node];
uint32 axis = (tn & (3 << 30)) >> 30;
- bool BVH2 = tn & (1 << 29);
+ bool BVH2 = (tn & (1 << 29)) != 0;
int offset = tn & ~(7 << 29);
if (!BVH2)
{
diff --git a/src/server/collision/CMakeLists.txt b/src/server/collision/CMakeLists.txt
index a83bb9dad1c..378bd62a78a 100644
--- a/src/server/collision/CMakeLists.txt
+++ b/src/server/collision/CMakeLists.txt
@@ -34,6 +34,7 @@ include_directories(
${CMAKE_BINARY_DIR}
${CMAKE_SOURCE_DIR}/dep/g3dlite/include
${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour
+ ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour/Include
${CMAKE_SOURCE_DIR}/src/server/shared
${CMAKE_SOURCE_DIR}/src/server/shared/Configuration
${CMAKE_SOURCE_DIR}/src/server/shared/Debugging
@@ -74,7 +75,6 @@ include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/Management
${CMAKE_CURRENT_SOURCE_DIR}/Maps
${CMAKE_CURRENT_SOURCE_DIR}/Models
- ${ACE_INCLUDE_DIR}
${MYSQL_INCLUDE_DIR}
)
diff --git a/src/server/collision/DynamicTree.cpp b/src/server/collision/DynamicTree.cpp
index f6d85df704a..a88c7573707 100644
--- a/src/server/collision/DynamicTree.cpp
+++ b/src/server/collision/DynamicTree.cpp
@@ -256,5 +256,5 @@ float DynamicMapTree::getHeight(float x, float y, float z, float maxSearchDist,
if (callback.didHit())
return v.z - maxSearchDist;
else
- return -G3D::inf();
+ return -G3D::finf();
}
diff --git a/src/server/collision/Management/MMapFactory.h b/src/server/collision/Management/MMapFactory.h
index 837c893f038..4b883d43613 100644
--- a/src/server/collision/Management/MMapFactory.h
+++ b/src/server/collision/Management/MMapFactory.h
@@ -19,11 +19,12 @@
#ifndef _MMAP_FACTORY_H
#define _MMAP_FACTORY_H
+#include "Define.h"
#include "MMapManager.h"
-#include "UnorderedMap.h"
#include "DetourAlloc.h"
#include "DetourNavMesh.h"
#include "DetourNavMeshQuery.h"
+#include <unordered_map>
namespace MMAP
{
diff --git a/src/server/collision/Management/MMapManager.h b/src/server/collision/Management/MMapManager.h
index 7840921e4e6..798d0206538 100644
--- a/src/server/collision/Management/MMapManager.h
+++ b/src/server/collision/Management/MMapManager.h
@@ -19,17 +19,18 @@
#ifndef _MMAP_MANAGER_H
#define _MMAP_MANAGER_H
-#include "UnorderedMap.h"
+#include "Define.h"
#include "DetourAlloc.h"
#include "DetourNavMesh.h"
#include "DetourNavMeshQuery.h"
#include <string>
+#include <unordered_map>
// move map related classes
namespace MMAP
{
- typedef UNORDERED_MAP<uint32, dtTileRef> MMapTileSet;
- typedef UNORDERED_MAP<uint32, dtNavMeshQuery*> NavMeshQuerySet;
+ typedef std::unordered_map<uint32, dtTileRef> MMapTileSet;
+ typedef std::unordered_map<uint32, dtNavMeshQuery*> NavMeshQuerySet;
// dummy struct to hold map's mmap data
struct MMapData
@@ -52,7 +53,7 @@ namespace MMAP
};
- typedef UNORDERED_MAP<uint32, MMapData*> MMapDataSet;
+ typedef std::unordered_map<uint32, MMapData*> MMapDataSet;
// singleton class
// holds all all access to mmap loading unloading and meshes
diff --git a/src/server/collision/Management/VMapManager2.cpp b/src/server/collision/Management/VMapManager2.cpp
index 813a3c04288..484fdcd8ea4 100644
--- a/src/server/collision/Management/VMapManager2.cpp
+++ b/src/server/collision/Management/VMapManager2.cpp
@@ -25,8 +25,6 @@
#include "ModelInstance.h"
#include "WorldModel.h"
#include <G3D/Vector3.h>
-#include <ace/Null_Mutex.h>
-#include <ace/Singleton.h>
#include "DisableMgr.h"
#include "DBCStores.h"
#include "Log.h"
@@ -196,7 +194,7 @@ namespace VMAP
{
Vector3 pos = convertPositionToInternalRep(x, y, z);
float height = instanceTree->second->getHeight(pos, maxSearchDist);
- if (!(height < G3D::inf()))
+ if (!(height < G3D::finf()))
return height = VMAP_INVALID_HEIGHT_VALUE; // No height
return height;
@@ -252,7 +250,7 @@ namespace VMAP
WorldModel* VMapManager2::acquireModelInstance(const std::string& basepath, const std::string& filename)
{
//! Critical section, thread safe access to iLoadedModelFiles
- TRINITY_GUARD(ACE_Thread_Mutex, LoadedModelFilesLock);
+ std::lock_guard<std::mutex> lock(LoadedModelFilesLock);
ModelFileMap::iterator model = iLoadedModelFiles.find(filename);
if (model == iLoadedModelFiles.end())
@@ -275,7 +273,7 @@ namespace VMAP
void VMapManager2::releaseModelInstance(const std::string &filename)
{
//! Critical section, thread safe access to iLoadedModelFiles
- TRINITY_GUARD(ACE_Thread_Mutex, LoadedModelFilesLock);
+ std::lock_guard<std::mutex> lock(LoadedModelFilesLock);
ModelFileMap::iterator model = iLoadedModelFiles.find(filename);
if (model == iLoadedModelFiles.end())
diff --git a/src/server/collision/Management/VMapManager2.h b/src/server/collision/Management/VMapManager2.h
index abddd5d7cc3..04292e7d8e4 100644
--- a/src/server/collision/Management/VMapManager2.h
+++ b/src/server/collision/Management/VMapManager2.h
@@ -19,10 +19,10 @@
#ifndef _VMAPMANAGER2_H
#define _VMAPMANAGER2_H
-#include "IVMapManager.h"
-#include "Dynamic/UnorderedMap.h"
+#include <mutex>
+#include <unordered_map>
#include "Define.h"
-#include <ace/Thread_Mutex.h>
+#include "IVMapManager.h"
//===========================================================
@@ -53,7 +53,7 @@ namespace VMAP
class ManagedModel
{
public:
- ManagedModel() : iModel(0), iRefCount(0) { }
+ ManagedModel() : iModel(nullptr), iRefCount(0) { }
void setModel(WorldModel* model) { iModel = model; }
WorldModel* getModel() { return iModel; }
void incRefCount() { ++iRefCount; }
@@ -63,8 +63,8 @@ namespace VMAP
int iRefCount;
};
- typedef UNORDERED_MAP<uint32, StaticMapTree*> InstanceTreeMap;
- typedef UNORDERED_MAP<std::string, ManagedModel> ModelFileMap;
+ typedef std::unordered_map<uint32, StaticMapTree*> InstanceTreeMap;
+ typedef std::unordered_map<std::string, ManagedModel> ModelFileMap;
class VMapManager2 : public IVMapManager
{
@@ -73,7 +73,7 @@ namespace VMAP
ModelFileMap iLoadedModelFiles;
InstanceTreeMap iInstanceMapTrees;
// Mutex for iLoadedModelFiles
- ACE_Thread_Mutex LoadedModelFilesLock;
+ std::mutex LoadedModelFilesLock;
bool _loadMap(uint32 mapId, const std::string& basePath, uint32 tileX, uint32 tileY);
/* void _unloadMap(uint32 pMapId, uint32 x, uint32 y); */
@@ -86,32 +86,32 @@ namespace VMAP
VMapManager2();
~VMapManager2(void);
- int loadMap(const char* pBasePath, unsigned int mapId, int x, int y);
+ int loadMap(const char* pBasePath, unsigned int mapId, int x, int y) override;
- void unloadMap(unsigned int mapId, int x, int y);
- void unloadMap(unsigned int mapId);
+ void unloadMap(unsigned int mapId, int x, int y) override;
+ void unloadMap(unsigned int mapId) override;
- bool isInLineOfSight(unsigned int mapId, float x1, float y1, float z1, float x2, float y2, float z2) ;
+ bool isInLineOfSight(unsigned int mapId, float x1, float y1, float z1, float x2, float y2, float z2) override ;
/**
fill the hit pos and return true, if an object was hit
*/
- bool getObjectHitPos(unsigned int mapId, float x1, float y1, float z1, float x2, float y2, float z2, float& rx, float& ry, float& rz, float modifyDist);
- float getHeight(unsigned int mapId, float x, float y, float z, float maxSearchDist);
+ bool getObjectHitPos(unsigned int mapId, float x1, float y1, float z1, float x2, float y2, float z2, float& rx, float& ry, float& rz, float modifyDist) override;
+ float getHeight(unsigned int mapId, float x, float y, float z, float maxSearchDist) override;
- bool processCommand(char* /*command*/) { return false; } // for debug and extensions
+ bool processCommand(char* /*command*/) override { return false; } // for debug and extensions
- bool getAreaInfo(unsigned int pMapId, float x, float y, float& z, uint32& flags, int32& adtId, int32& rootId, int32& groupId) const;
- bool GetLiquidLevel(uint32 pMapId, float x, float y, float z, uint8 reqLiquidType, float& level, float& floor, uint32& type) const;
+ bool getAreaInfo(unsigned int pMapId, float x, float y, float& z, uint32& flags, int32& adtId, int32& rootId, int32& groupId) const override;
+ bool GetLiquidLevel(uint32 pMapId, float x, float y, float z, uint8 reqLiquidType, float& level, float& floor, uint32& type) const override;
WorldModel* acquireModelInstance(const std::string& basepath, const std::string& filename);
void releaseModelInstance(const std::string& filename);
// what's the use of this? o.O
- virtual std::string getDirFileName(unsigned int mapId, int /*x*/, int /*y*/) const
+ virtual std::string getDirFileName(unsigned int mapId, int /*x*/, int /*y*/) const override
{
return getMapFileName(mapId);
}
- virtual bool existsMap(const char* basePath, unsigned int mapId, int x, int y);
+ virtual bool existsMap(const char* basePath, unsigned int mapId, int x, int y) override;
public:
void getInstanceMapTree(InstanceTreeMap &instanceMapTree);
};
diff --git a/src/server/collision/Maps/MapTree.cpp b/src/server/collision/Maps/MapTree.cpp
index bb57079c389..d62b2b21224 100644
--- a/src/server/collision/Maps/MapTree.cpp
+++ b/src/server/collision/Maps/MapTree.cpp
@@ -157,8 +157,7 @@ namespace VMAP
{
float maxDist = (pos2 - pos1).magnitude();
// return false if distance is over max float, in case of cheater teleporting to the end of the universe
- if (maxDist == std::numeric_limits<float>::max() ||
- maxDist == std::numeric_limits<float>::infinity())
+ if (maxDist == std::numeric_limits<float>::max() || !std::isfinite(maxDist))
return false;
// valid map coords should *never ever* produce float overflow, but this would produce NaNs too
@@ -226,7 +225,7 @@ namespace VMAP
float StaticMapTree::getHeight(const Vector3& pPos, float maxSearchDist) const
{
- float height = G3D::inf();
+ float height = G3D::finf();
Vector3 dir = Vector3(0, 0, -1);
G3D::Ray ray(pPos, dir); // direction with length of 1
float maxDist = maxSearchDist;
@@ -296,7 +295,7 @@ namespace VMAP
success = readChunk(rf, chunk, "GOBJ", 4);
}
- iIsTiled = bool(tiled);
+ iIsTiled = tiled != '\0';
// global model spawns
// only non-tiled maps have them, and if so exactly one (so far at least...)
diff --git a/src/server/collision/Maps/MapTree.h b/src/server/collision/Maps/MapTree.h
index 90d61cbb88b..2f483a8822c 100644
--- a/src/server/collision/Maps/MapTree.h
+++ b/src/server/collision/Maps/MapTree.h
@@ -20,8 +20,8 @@
#define _MAPTREE_H
#include "Define.h"
-#include "Dynamic/UnorderedMap.h"
#include "BoundingIntervalHierarchy.h"
+#include <unordered_map>
namespace VMAP
{
@@ -31,7 +31,7 @@ namespace VMAP
struct LocationInfo
{
- LocationInfo(): hitInstance(0), hitModel(0), ground_Z(-G3D::inf()) { }
+ LocationInfo(): hitInstance(nullptr), hitModel(nullptr), ground_Z(-G3D::finf()) { }
const ModelInstance* hitInstance;
const GroupModel* hitModel;
float ground_Z;
@@ -39,8 +39,8 @@ namespace VMAP
class StaticMapTree
{
- typedef UNORDERED_MAP<uint32, bool> loadedTileMap;
- typedef UNORDERED_MAP<uint32, uint32> loadedSpawnMap;
+ typedef std::unordered_map<uint32, bool> loadedTileMap;
+ typedef std::unordered_map<uint32, uint32> loadedSpawnMap;
private:
uint32 iMapID;
bool iIsTiled;
@@ -81,11 +81,15 @@ namespace VMAP
bool isTiled() const { return iIsTiled; }
uint32 numLoadedTiles() const { return iLoadedTiles.size(); }
void getModelInstances(ModelInstance* &models, uint32 &count);
+
+ private:
+ StaticMapTree(StaticMapTree const& right) = delete;
+ StaticMapTree& operator=(StaticMapTree const& right) = delete;
};
struct AreaInfo
{
- AreaInfo(): result(false), ground_Z(-G3D::inf()), flags(0), adtId(0),
+ AreaInfo(): result(false), ground_Z(-G3D::finf()), flags(0), adtId(0),
rootId(0), groupId(0) { }
bool result;
float ground_Z;
diff --git a/src/server/collision/Maps/TileAssembler.h b/src/server/collision/Maps/TileAssembler.h
index 26a884551cd..2167f1e5689 100644
--- a/src/server/collision/Maps/TileAssembler.h
+++ b/src/server/collision/Maps/TileAssembler.h
@@ -46,7 +46,7 @@ namespace VMAP
float iScale;
void init()
{
- iRotation = G3D::Matrix3::fromEulerAnglesZYX(G3D::pi()*iDir.y/180.f, G3D::pi()*iDir.x/180.f, G3D::pi()*iDir.z/180.f);
+ iRotation = G3D::Matrix3::fromEulerAnglesZYX(G3D::pif()*iDir.y/180.f, G3D::pif()*iDir.x/180.f, G3D::pif()*iDir.z/180.f);
}
G3D::Vector3 transform(const G3D::Vector3& pIn) const;
void moveToBasePos(const G3D::Vector3& pBasePos) { iPos -= pBasePos; }
diff --git a/src/server/collision/Models/GameObjectModel.cpp b/src/server/collision/Models/GameObjectModel.cpp
index 42584693a13..bb2837be4c4 100644
--- a/src/server/collision/Models/GameObjectModel.cpp
+++ b/src/server/collision/Models/GameObjectModel.cpp
@@ -43,7 +43,7 @@ struct GameobjectModelData
std::string name;
};
-typedef UNORDERED_MAP<uint32, GameobjectModelData> ModelList;
+typedef std::unordered_map<uint32, GameobjectModelData> ModelList;
ModelList model_list;
void LoadGameObjectModelList()
@@ -140,6 +140,7 @@ bool GameObjectModel::initialize(const GameObject& go, const GameObjectDisplayIn
}
#endif
+ owner = &go;
return true;
}
@@ -161,11 +162,11 @@ GameObjectModel* GameObjectModel::Create(const GameObject& go)
bool GameObjectModel::intersectRay(const G3D::Ray& ray, float& MaxDist, bool StopAtFirstHit, uint32 ph_mask) const
{
- if (!(phasemask & ph_mask))
+ if (!(phasemask & ph_mask) || !owner->isSpawned())
return false;
float time = ray.intersectionTime(iBound);
- if (time == G3D::inf())
+ if (time == G3D::finf())
return false;
// child bounds are defined in object space:
diff --git a/src/server/collision/Models/GameObjectModel.h b/src/server/collision/Models/GameObjectModel.h
index 6088b924343..99c9b1337b3 100644
--- a/src/server/collision/Models/GameObjectModel.h
+++ b/src/server/collision/Models/GameObjectModel.h
@@ -44,8 +44,9 @@ class GameObjectModel /*, public Intersectable*/
float iInvScale;
float iScale;
VMAP::WorldModel* iModel;
+ GameObject const* owner;
- GameObjectModel() : phasemask(0), iInvScale(0), iScale(0), iModel(NULL) { }
+ GameObjectModel() : phasemask(0), iInvScale(0), iScale(0), iModel(NULL), owner(NULL) { }
bool initialize(const GameObject& go, const GameObjectDisplayInfoEntry& info);
public:
diff --git a/src/server/collision/Models/ModelInstance.cpp b/src/server/collision/Models/ModelInstance.cpp
index 3262c154965..bd84548d792 100644
--- a/src/server/collision/Models/ModelInstance.cpp
+++ b/src/server/collision/Models/ModelInstance.cpp
@@ -28,7 +28,7 @@ namespace VMAP
{
ModelInstance::ModelInstance(const ModelSpawn &spawn, WorldModel* model): ModelSpawn(spawn), iModel(model)
{
- iInvRot = G3D::Matrix3::fromEulerAnglesZYX(G3D::pi()*iRot.y/180.f, G3D::pi()*iRot.x/180.f, G3D::pi()*iRot.z/180.f).inverse();
+ iInvRot = G3D::Matrix3::fromEulerAnglesZYX(G3D::pif()*iRot.y/180.f, G3D::pif()*iRot.x/180.f, G3D::pif()*iRot.z/180.f).inverse();
iInvScale = 1.f/iScale;
}
@@ -40,7 +40,7 @@ namespace VMAP
return false;
}
float time = pRay.intersectionTime(iBound);
- if (time == G3D::inf())
+ if (time == G3D::finf())
{
// std::cout << "Ray does not hit '" << name << "'\n";
@@ -167,7 +167,7 @@ namespace VMAP
check += fread(&spawn.iPos, sizeof(float), 3, rf);
check += fread(&spawn.iRot, sizeof(float), 3, rf);
check += fread(&spawn.iScale, sizeof(float), 1, rf);
- bool has_bound = (spawn.flags & MOD_HAS_BOUND);
+ bool has_bound = (spawn.flags & MOD_HAS_BOUND) != 0;
if (has_bound) // only WMOs have bound in MPQ, only available after computation
{
Vector3 bLow, bHigh;
@@ -206,7 +206,7 @@ namespace VMAP
check += fwrite(&spawn.iPos, sizeof(float), 3, wf);
check += fwrite(&spawn.iRot, sizeof(float), 3, wf);
check += fwrite(&spawn.iScale, sizeof(float), 1, wf);
- bool has_bound = (spawn.flags & MOD_HAS_BOUND);
+ bool has_bound = (spawn.flags & MOD_HAS_BOUND) != 0;
if (has_bound) // only WMOs have bound in MPQ, only available after computation
{
check += fwrite(&spawn.iBound.low(), sizeof(float), 3, wf);
diff --git a/src/server/collision/Models/ModelInstance.h b/src/server/collision/Models/ModelInstance.h
index 3ea68f57ba4..1cb8fdde942 100644
--- a/src/server/collision/Models/ModelInstance.h
+++ b/src/server/collision/Models/ModelInstance.h
@@ -63,9 +63,9 @@ namespace VMAP
class ModelInstance: public ModelSpawn
{
public:
- ModelInstance(): iInvScale(0.0f), iModel(0) { }
+ ModelInstance(): iInvScale(0.0f), iModel(nullptr) { }
ModelInstance(const ModelSpawn &spawn, WorldModel* model);
- void setUnloaded() { iModel = 0; }
+ void setUnloaded() { iModel = nullptr; }
bool intersectRay(const G3D::Ray& pRay, float& pMaxDist, bool pStopAtFirstHit) const;
void intersectPoint(const G3D::Vector3& p, AreaInfo &info) const;
bool GetLocationInfo(const G3D::Vector3& p, LocationInfo &info) const;
diff --git a/src/server/collision/Models/WorldModel.cpp b/src/server/collision/Models/WorldModel.cpp
index 99f3782215d..5962b343544 100644
--- a/src/server/collision/Models/WorldModel.cpp
+++ b/src/server/collision/Models/WorldModel.cpp
@@ -42,7 +42,7 @@ namespace VMAP
const Vector3 p(ray.direction().cross(e2));
const float a = e1.dot(p);
- if (fabs(a) < EPS) {
+ if (std::fabs(a) < EPS) {
// Determinant is ill-conditioned; abort early
return false;
}
@@ -108,7 +108,7 @@ namespace VMAP
iFlags = new uint8[width*height];
}
- WmoLiquid::WmoLiquid(const WmoLiquid &other): iHeight(0), iFlags(0)
+ WmoLiquid::WmoLiquid(const WmoLiquid &other): iHeight(nullptr), iFlags(nullptr)
{
*this = other; // use assignment operator...
}
@@ -135,14 +135,14 @@ namespace VMAP
memcpy(iHeight, other.iHeight, (iTilesX+1)*(iTilesY+1)*sizeof(float));
}
else
- iHeight = 0;
+ iHeight = nullptr;
if (other.iFlags)
{
iFlags = new uint8[iTilesX * iTilesY];
memcpy(iFlags, other.iFlags, iTilesX * iTilesY);
}
else
- iFlags = 0;
+ iFlags = nullptr;
return *this;
}
@@ -254,7 +254,7 @@ namespace VMAP
GroupModel::GroupModel(const GroupModel &other):
iBound(other.iBound), iMogpFlags(other.iMogpFlags), iGroupWMOID(other.iGroupWMOID),
- vertices(other.vertices), triangles(other.triangles), meshTree(other.meshTree), iLiquid(0)
+ vertices(other.vertices), triangles(other.triangles), meshTree(other.meshTree), iLiquid(nullptr)
{
if (other.iLiquid)
iLiquid = new WmoLiquid(*other.iLiquid);
@@ -388,7 +388,7 @@ namespace VMAP
return false;
GModelRayCallback callback(triangles, vertices);
Vector3 rPos = pos - 0.1f * down;
- float dist = G3D::inf();
+ float dist = G3D::finf();
G3D::Ray ray(rPos, down);
bool hit = IntersectRay(ray, dist, false);
if (hit)
@@ -446,7 +446,7 @@ namespace VMAP
class WModelAreaCallback {
public:
WModelAreaCallback(const std::vector<GroupModel> &vals, const Vector3 &down):
- prims(vals.begin()), hit(vals.end()), minVol(G3D::inf()), zDist(G3D::inf()), zVec(down) { }
+ prims(vals.begin()), hit(vals.end()), minVol(G3D::finf()), zDist(G3D::finf()), zVec(down) { }
std::vector<GroupModel>::const_iterator prims;
std::vector<GroupModel>::const_iterator hit;
float minVol;
diff --git a/src/server/collision/Models/WorldModel.h b/src/server/collision/Models/WorldModel.h
index 8778998a6b7..da1f58a79c6 100644
--- a/src/server/collision/Models/WorldModel.h
+++ b/src/server/collision/Models/WorldModel.h
@@ -59,7 +59,7 @@ namespace VMAP
bool writeToFile(FILE* wf);
static bool readFromFile(FILE* rf, WmoLiquid* &liquid);
private:
- WmoLiquid(): iTilesX(0), iTilesY(0), iType(0), iHeight(0), iFlags(0) { }
+ WmoLiquid() : iTilesX(0), iTilesY(0), iCorner(), iType(0), iHeight(NULL), iFlags(NULL) { }
uint32 iTilesX; //!< number of tiles in x direction, each
uint32 iTilesY;
G3D::Vector3 iCorner; //!< the lower corner
@@ -74,10 +74,10 @@ namespace VMAP
class GroupModel
{
public:
- GroupModel(): iMogpFlags(0), iGroupWMOID(0), iLiquid(0) { }
+ GroupModel() : iBound(), iMogpFlags(0), iGroupWMOID(0), iLiquid(NULL) { }
GroupModel(const GroupModel &other);
GroupModel(uint32 mogpFlags, uint32 groupWMOID, const G3D::AABox &bound):
- iBound(bound), iMogpFlags(mogpFlags), iGroupWMOID(groupWMOID), iLiquid(0) { }
+ iBound(bound), iMogpFlags(mogpFlags), iGroupWMOID(groupWMOID), iLiquid(NULL) { }
~GroupModel() { delete iLiquid; }
//! pass mesh data to object and create BIH. Passed vectors get get swapped with old geometry!
diff --git a/src/server/collision/RegularGrid.h b/src/server/collision/RegularGrid.h
index d1832c1ea06..6a2a07968ad 100644
--- a/src/server/collision/RegularGrid.h
+++ b/src/server/collision/RegularGrid.h
@@ -159,8 +159,8 @@ public:
//int Cycles = std::max((int)ceilf(max_dist/tMaxX),(int)ceilf(max_dist/tMaxY));
//int i = 0;
- float tDeltaX = voxel * fabs(kx_inv);
- float tDeltaY = voxel * fabs(ky_inv);
+ float tDeltaX = voxel * std::fabs(kx_inv);
+ float tDeltaY = voxel * std::fabs(ky_inv);
do
{
if (Node* node = nodes[cell.x][cell.y])
diff --git a/src/server/collision/VMapDefinitions.h b/src/server/collision/VMapDefinitions.h
index 0bc74df51ec..8cd965ddffd 100644
--- a/src/server/collision/VMapDefinitions.h
+++ b/src/server/collision/VMapDefinitions.h
@@ -19,6 +19,7 @@
#ifndef _VMAPDEFINITIONS_H
#define _VMAPDEFINITIONS_H
#include <cstring>
+#include <cstdio>
#define LIQUID_TILE_SIZE (533.333f / 128.f)
diff --git a/src/server/game/AI/CoreAI/CombatAI.cpp b/src/server/game/AI/CoreAI/CombatAI.cpp
index 943919451a9..78ba5d0719c 100644
--- a/src/server/game/AI/CoreAI/CombatAI.cpp
+++ b/src/server/game/AI/CoreAI/CombatAI.cpp
@@ -76,7 +76,7 @@ void CombatAI::EnterCombat(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, AISpellInfo[*i].cooldown + rand32() % AISpellInfo[*i].cooldown);
}
}
@@ -93,7 +93,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, AISpellInfo[spellId].cooldown + rand32() % AISpellInfo[spellId].cooldown);
}
else
DoMeleeAttackIfReady();
@@ -125,7 +125,7 @@ void CasterAI::EnterCombat(Unit* who)
if (spells.empty())
return;
- uint32 spell = rand()%spells.size();
+ uint32 spell = rand32() % spells.size();
uint32 count = 0;
for (SpellVct::iterator itr = spells.begin(); itr != spells.end(); ++itr, ++count)
{
@@ -151,7 +151,7 @@ void CasterAI::UpdateAI(uint32 diff)
events.Update(diff);
- if (me->GetVictim()->HasBreakableByDamageCrowdControlAura(me))
+ if (me->GetVictim() && me->EnsureVictim()->HasBreakableByDamageCrowdControlAura(me))
{
me->InterruptNonMeleeSpells(false);
return;
diff --git a/src/server/game/AI/CoreAI/CombatAI.h b/src/server/game/AI/CoreAI/CombatAI.h
index f73daa2d720..4b6af3cbdda 100644
--- a/src/server/game/AI/CoreAI/CombatAI.h
+++ b/src/server/game/AI/CoreAI/CombatAI.h
@@ -30,7 +30,7 @@ class AggressorAI : public CreatureAI
public:
explicit AggressorAI(Creature* c) : CreatureAI(c) { }
- void UpdateAI(uint32);
+ void UpdateAI(uint32) override;
static int Permissible(const Creature*);
};
@@ -41,12 +41,12 @@ class CombatAI : public CreatureAI
public:
explicit CombatAI(Creature* c) : CreatureAI(c) { }
- void InitializeAI();
- void Reset();
- void EnterCombat(Unit* who);
- void JustDied(Unit* killer);
- void UpdateAI(uint32 diff);
- void SpellInterrupted(uint32 spellId, uint32 unTimeMs);
+ void InitializeAI() override;
+ void Reset() override;
+ void EnterCombat(Unit* who) override;
+ void JustDied(Unit* killer) override;
+ void UpdateAI(uint32 diff) override;
+ void SpellInterrupted(uint32 spellId, uint32 unTimeMs) override;
static int Permissible(Creature const* /*creature*/) { return PERMIT_BASE_NO; }
@@ -59,10 +59,10 @@ class CasterAI : public CombatAI
{
public:
explicit CasterAI(Creature* c) : CombatAI(c) { m_attackDist = MELEE_RANGE; }
- void InitializeAI();
- void AttackStart(Unit* victim) { AttackStartCaster(victim, m_attackDist); }
- void UpdateAI(uint32 diff);
- void EnterCombat(Unit* /*who*/);
+ void InitializeAI() override;
+ void AttackStart(Unit* victim) override { AttackStartCaster(victim, m_attackDist); }
+ void UpdateAI(uint32 diff) override;
+ void EnterCombat(Unit* /*who*/) override;
private:
float m_attackDist;
};
@@ -71,8 +71,8 @@ struct ArcherAI : public CreatureAI
{
public:
explicit ArcherAI(Creature* c);
- void AttackStart(Unit* who);
- void UpdateAI(uint32 diff);
+ void AttackStart(Unit* who) override;
+ void UpdateAI(uint32 diff) override;
static int Permissible(Creature const* /*creature*/) { return PERMIT_BASE_NO; }
@@ -84,9 +84,9 @@ struct TurretAI : public CreatureAI
{
public:
explicit TurretAI(Creature* c);
- bool CanAIAttack(Unit const* who) const;
- void AttackStart(Unit* who);
- void UpdateAI(uint32 diff);
+ bool CanAIAttack(Unit const* who) const override;
+ void AttackStart(Unit* who) override;
+ void UpdateAI(uint32 diff) override;
static int Permissible(Creature const* /*creature*/) { return PERMIT_BASE_NO; }
@@ -102,10 +102,10 @@ struct VehicleAI : public CreatureAI
public:
explicit VehicleAI(Creature* creature);
- void UpdateAI(uint32 diff);
- void MoveInLineOfSight(Unit*) { }
- void AttackStart(Unit*) { }
- void OnCharmed(bool apply);
+ void UpdateAI(uint32 diff) override;
+ void MoveInLineOfSight(Unit*) override { }
+ void AttackStart(Unit*) override { }
+ void OnCharmed(bool apply) override;
static int Permissible(Creature const* /*creature*/) { return PERMIT_BASE_NO; }
diff --git a/src/server/game/AI/CoreAI/GameObjectAI.h b/src/server/game/AI/CoreAI/GameObjectAI.h
index 36ca2c3253f..6e03103e269 100644
--- a/src/server/game/AI/CoreAI/GameObjectAI.h
+++ b/src/server/game/AI/CoreAI/GameObjectAI.h
@@ -68,7 +68,7 @@ class NullGameObjectAI : public GameObjectAI
public:
explicit NullGameObjectAI(GameObject* g);
- void UpdateAI(uint32 /*diff*/) { }
+ void UpdateAI(uint32 /*diff*/) override { }
static int Permissible(GameObject const* /*go*/) { return PERMIT_BASE_IDLE; }
};
diff --git a/src/server/game/AI/CoreAI/GuardAI.h b/src/server/game/AI/CoreAI/GuardAI.h
index 9af047e8906..c2b05d71e03 100644
--- a/src/server/game/AI/CoreAI/GuardAI.h
+++ b/src/server/game/AI/CoreAI/GuardAI.h
@@ -29,10 +29,10 @@ class GuardAI : public ScriptedAI
explicit GuardAI(Creature* creature);
static int Permissible(Creature const* creature);
- bool CanSeeAlways(WorldObject const* obj);
+ bool CanSeeAlways(WorldObject const* obj) override;
- void EnterEvadeMode();
- void JustDied(Unit* killer);
+ void EnterEvadeMode() override;
+ void JustDied(Unit* killer) override;
};
#endif
diff --git a/src/server/game/AI/CoreAI/PassiveAI.cpp b/src/server/game/AI/CoreAI/PassiveAI.cpp
index 07987cf8cec..3ae73636619 100644
--- a/src/server/game/AI/CoreAI/PassiveAI.cpp
+++ b/src/server/game/AI/CoreAI/PassiveAI.cpp
@@ -75,5 +75,5 @@ void CritterAI::EnterEvadeMode()
void TriggerAI::IsSummonedBy(Unit* summoner)
{
if (me->m_spells[0])
- me->CastSpell(me, me->m_spells[0], false, 0, 0, summoner->GetGUID());
+ me->CastSpell(me, me->m_spells[0], false, nullptr, nullptr, summoner->GetGUID());
}
diff --git a/src/server/game/AI/CoreAI/PassiveAI.h b/src/server/game/AI/CoreAI/PassiveAI.h
index 33bfde4f9f2..7f5ab5f29a2 100644
--- a/src/server/game/AI/CoreAI/PassiveAI.h
+++ b/src/server/game/AI/CoreAI/PassiveAI.h
@@ -26,9 +26,9 @@ class PassiveAI : public CreatureAI
public:
explicit PassiveAI(Creature* c);
- void MoveInLineOfSight(Unit*) { }
- void AttackStart(Unit*) { }
- void UpdateAI(uint32);
+ void MoveInLineOfSight(Unit*) override { }
+ void AttackStart(Unit*) override { }
+ void UpdateAI(uint32) override;
static int Permissible(const Creature*) { return PERMIT_BASE_IDLE; }
};
@@ -38,13 +38,13 @@ class PossessedAI : public CreatureAI
public:
explicit PossessedAI(Creature* c);
- void MoveInLineOfSight(Unit*) { }
- void AttackStart(Unit* target);
- void UpdateAI(uint32);
- void EnterEvadeMode() { }
+ void MoveInLineOfSight(Unit*) override { }
+ void AttackStart(Unit* target) override;
+ void UpdateAI(uint32) override;
+ void EnterEvadeMode() override { }
- void JustDied(Unit*);
- void KilledUnit(Unit* victim);
+ void JustDied(Unit*) override;
+ void KilledUnit(Unit* victim) override;
static int Permissible(const Creature*) { return PERMIT_BASE_IDLE; }
};
@@ -54,11 +54,11 @@ class NullCreatureAI : public CreatureAI
public:
explicit NullCreatureAI(Creature* c);
- void MoveInLineOfSight(Unit*) { }
- void AttackStart(Unit*) { }
- void UpdateAI(uint32) { }
- void EnterEvadeMode() { }
- void OnCharmed(bool /*apply*/) { }
+ void MoveInLineOfSight(Unit*) override { }
+ void AttackStart(Unit*) override { }
+ void UpdateAI(uint32) override { }
+ void EnterEvadeMode() override { }
+ void OnCharmed(bool /*apply*/) override { }
static int Permissible(const Creature*) { return PERMIT_BASE_IDLE; }
};
@@ -68,15 +68,15 @@ class CritterAI : public PassiveAI
public:
explicit CritterAI(Creature* c) : PassiveAI(c) { }
- void DamageTaken(Unit* done_by, uint32& /*damage*/);
- void EnterEvadeMode();
+ void DamageTaken(Unit* done_by, uint32& /*damage*/) override;
+ void EnterEvadeMode() override;
};
class TriggerAI : public NullCreatureAI
{
public:
explicit TriggerAI(Creature* c) : NullCreatureAI(c) { }
- void IsSummonedBy(Unit* summoner);
+ void IsSummonedBy(Unit* summoner) override;
};
#endif
diff --git a/src/server/game/AI/CoreAI/PetAI.cpp b/src/server/game/AI/CoreAI/PetAI.cpp
index d6e749b942a..603c34e2403 100644
--- a/src/server/game/AI/CoreAI/PetAI.cpp
+++ b/src/server/game/AI/CoreAI/PetAI.cpp
@@ -86,10 +86,11 @@ void PetAI::UpdateAI(uint32 diff)
else
m_updateAlliesTimer -= diff;
- if (me->GetVictim() && me->GetVictim()->IsAlive())
+ if (me->GetVictim() && me->EnsureVictim()->IsAlive())
{
// is only necessary to stop casting, the pet must not exit combat
- if (me->GetVictim()->HasBreakableByDamageCrowdControlAura(me))
+ if (!me->GetCurrentSpell(CURRENT_CHANNELED_SPELL) && // ignore channeled spells (Pin, Seduction)
+ me->EnsureVictim()->HasBreakableByDamageCrowdControlAura(me))
{
me->InterruptNonMeleeSpells(false);
return;
@@ -182,7 +183,11 @@ void PetAI::UpdateAI(uint32 diff)
}
if (spellInfo->HasEffect(SPELL_EFFECT_JUMP_DEST))
+ {
+ if (!spellUsed)
+ delete spell;
continue; // Pets must only jump to target
+ }
// No enemy, check friendly
if (!spellUsed)
@@ -231,7 +236,7 @@ void PetAI::UpdateAI(uint32 diff)
SpellCastTargets targets;
targets.SetUnitTarget(target);
- if (!me->HasInArc(M_PI, target))
+ if (!me->HasInArc(float(M_PI), target))
{
me->SetInFront(target);
if (target && target->GetTypeId() == TYPEID_PLAYER)
@@ -241,8 +246,6 @@ void PetAI::UpdateAI(uint32 diff)
me->SendUpdateToPlayer(owner->ToPlayer());
}
- me->AddCreatureSpellCooldown(spell->m_spellInfo->Id);
-
spell->prepare(&targets);
}
@@ -345,7 +348,7 @@ void PetAI::OwnerAttackedBy(Unit* attacker)
return;
// Prevent pet from disengaging from current target
- if (me->GetVictim() && me->GetVictim()->IsAlive())
+ if (me->GetVictim() && me->EnsureVictim()->IsAlive())
return;
// Continue to evaluate and attack if necessary
@@ -366,7 +369,7 @@ void PetAI::OwnerAttacked(Unit* target)
return;
// Prevent pet from disengaging from current target
- if (me->GetVictim() && me->GetVictim()->IsAlive())
+ if (me->GetVictim() && me->EnsureVictim()->IsAlive())
return;
// Continue to evaluate and attack if necessary
@@ -459,9 +462,6 @@ void PetAI::DoAttack(Unit* target, bool chase)
if (me->Attack(target, true))
{
- if (Unit* owner = me->GetOwner())
- owner->SetInCombatWith(target);
-
// Play sound to let the player know the pet is attacking something it picked on its own
if (me->HasReactState(REACT_AGGRESSIVE) && !me->GetCharmInfo()->IsCommandAttack())
me->SendPetAIReaction(me->GetGUID());
@@ -627,7 +627,7 @@ void PetAI::AttackedBy(Unit* attacker)
return;
// Prevent pet from disengaging from current target
- if (me->GetVictim() && me->GetVictim()->IsAlive())
+ if (me->GetVictim() && me->EnsureVictim()->IsAlive())
return;
// Continue to evaluate and attack if necessary
diff --git a/src/server/game/AI/CoreAI/PetAI.h b/src/server/game/AI/CoreAI/PetAI.h
index 450f68443f0..c24bf3a0c1b 100644
--- a/src/server/game/AI/CoreAI/PetAI.h
+++ b/src/server/game/AI/CoreAI/PetAI.h
@@ -31,23 +31,23 @@ class PetAI : public CreatureAI
explicit PetAI(Creature* c);
- void UpdateAI(uint32);
+ void UpdateAI(uint32) override;
static int Permissible(const Creature*);
- void KilledUnit(Unit* /*victim*/);
- void AttackStart(Unit* target);
- void MovementInform(uint32 moveType, uint32 data);
- void OwnerAttackedBy(Unit* attacker);
- void OwnerAttacked(Unit* target);
- void AttackedBy(Unit* attacker);
- void ReceiveEmote(Player* player, uint32 textEmote);
+ void KilledUnit(Unit* /*victim*/) override;
+ void AttackStart(Unit* target) override;
+ void MovementInform(uint32 moveType, uint32 data) override;
+ void OwnerAttackedBy(Unit* attacker) override;
+ void OwnerAttacked(Unit* target) override;
+ void AttackedBy(Unit* attacker) override;
+ void ReceiveEmote(Player* player, uint32 textEmote) override;
// The following aren't used by the PetAI but need to be defined to override
// default CreatureAI functions which interfere with the PetAI
//
- void MoveInLineOfSight(Unit* /*who*/) { } // CreatureAI interferes with returning pets
+ void MoveInLineOfSight(Unit* /*who*/) override { } // CreatureAI interferes with returning pets
void MoveInLineOfSight_Safe(Unit* /*who*/) { } // CreatureAI interferes with returning pets
- void EnterEvadeMode() { } // For fleeing, pets don't use this type of Evade mechanic
+ void EnterEvadeMode() override { } // For fleeing, pets don't use this type of Evade mechanic
private:
bool _isVisible(Unit*) const;
diff --git a/src/server/game/AI/CoreAI/ReactorAI.h b/src/server/game/AI/CoreAI/ReactorAI.h
index 417944f9ba2..2fdccac802d 100644
--- a/src/server/game/AI/CoreAI/ReactorAI.h
+++ b/src/server/game/AI/CoreAI/ReactorAI.h
@@ -29,8 +29,8 @@ class ReactorAI : public CreatureAI
explicit ReactorAI(Creature* c) : CreatureAI(c) { }
- void MoveInLineOfSight(Unit*) { }
- void UpdateAI(uint32 diff);
+ void MoveInLineOfSight(Unit*) override { }
+ void UpdateAI(uint32 diff) override;
static int Permissible(const Creature*);
};
diff --git a/src/server/game/AI/CoreAI/TotemAI.h b/src/server/game/AI/CoreAI/TotemAI.h
index 4d5f03566ba..93106b91492 100644
--- a/src/server/game/AI/CoreAI/TotemAI.h
+++ b/src/server/game/AI/CoreAI/TotemAI.h
@@ -31,11 +31,11 @@ class TotemAI : public CreatureAI
explicit TotemAI(Creature* c);
- void MoveInLineOfSight(Unit* who);
- void AttackStart(Unit* victim);
- void EnterEvadeMode();
+ void MoveInLineOfSight(Unit* who) override;
+ void AttackStart(Unit* victim) override;
+ void EnterEvadeMode() override;
- void UpdateAI(uint32 diff);
+ void UpdateAI(uint32 diff) override;
static int Permissible(Creature const* creature);
private:
diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp
index 8bf34527769..90bd3e8627a 100644
--- a/src/server/game/AI/CoreAI/UnitAI.cpp
+++ b/src/server/game/AI/CoreAI/UnitAI.cpp
@@ -28,7 +28,6 @@
void UnitAI::AttackStart(Unit* victim)
{
-
if (victim && me->Attack(victim, true))
me->GetMotionMaster()->MoveChase(victim);
}
@@ -104,7 +103,7 @@ void UnitAI::DoAddAuraToAllHostilePlayers(uint32 spellid)
ThreatContainer::StorageType threatlist = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
{
- if (Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid()))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()))
if (unit->GetTypeId() == TYPEID_PLAYER)
me->AddAura(spellid, unit);
}
@@ -118,7 +117,7 @@ void UnitAI::DoCastToAllHostilePlayers(uint32 spellid, bool triggered)
ThreatContainer::StorageType threatlist = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
{
- if (Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid()))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()))
if (unit->GetTypeId() == TYPEID_PLAYER)
me->CastSpell(unit, spellid, triggered);
}
@@ -142,7 +141,7 @@ void UnitAI::DoCast(uint32 spellId)
{
if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId))
{
- bool playerOnly = spellInfo->AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_PLAYERS;
+ bool playerOnly = (spellInfo->AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_PLAYERS) != 0;
target = SelectTarget(SELECT_TARGET_RANDOM, 0, spellInfo->GetMaxRange(false), playerOnly);
}
break;
@@ -157,7 +156,7 @@ void UnitAI::DoCast(uint32 spellId)
{
if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId))
{
- bool playerOnly = spellInfo->AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_PLAYERS;
+ bool playerOnly = (spellInfo->AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_PLAYERS) != 0;
float range = spellInfo->GetMaxRange(false);
DefaultTargetSelector targetSelector(me, range, playerOnly, -(int32)spellId);
diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h
index 960d9f8903b..979fe4fe558 100644
--- a/src/server/game/AI/CoreAI/UnitAI.h
+++ b/src/server/game/AI/CoreAI/UnitAI.h
@@ -258,10 +258,13 @@ class UnitAI
virtual void sGossipSelectCode(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/, char const* /*code*/) { }
virtual void sQuestAccept(Player* /*player*/, Quest const* /*quest*/) { }
virtual void sQuestSelect(Player* /*player*/, Quest const* /*quest*/) { }
- virtual void sQuestComplete(Player* /*player*/, Quest const* /*quest*/) { }
virtual void sQuestReward(Player* /*player*/, Quest const* /*quest*/, uint32 /*opt*/) { }
virtual bool sOnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/) { return false; }
virtual void sOnGameEvent(bool /*start*/, uint16 /*eventId*/) { }
+
+ private:
+ UnitAI(UnitAI const& right) = delete;
+ UnitAI& operator=(UnitAI const& right) = delete;
};
class PlayerAI : public UnitAI
@@ -271,13 +274,13 @@ class PlayerAI : public UnitAI
public:
explicit PlayerAI(Player* player) : UnitAI((Unit*)player), me(player) { }
- void OnCharmed(bool apply);
+ void OnCharmed(bool apply) override;
};
class SimpleCharmedAI : public PlayerAI
{
public:
- void UpdateAI(uint32 diff);
+ void UpdateAI(uint32 diff) override;
SimpleCharmedAI(Player* player): PlayerAI(player) { }
};
diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp
index 07c75eb424f..7a79bb722a0 100644
--- a/src/server/game/AI/CreatureAI.cpp
+++ b/src/server/game/AI/CreatureAI.cpp
@@ -43,6 +43,11 @@ void CreatureAI::Talk(uint8 id, WorldObject const* whisperTarget /*= NULL*/)
sCreatureTextMgr->SendChat(me, id, whisperTarget);
}
+void CreatureAI::TalkToMap(uint8 id, WorldObject const* whisperTarget /*= NULL*/)
+{
+ sCreatureTextMgr->SendChat(me, id, whisperTarget, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP);
+}
+
void CreatureAI::DoZoneInCombat(Creature* creature /*= NULL*/, float maxRangeToNearestTarget /* = 50.0f*/)
{
if (!creature)
@@ -199,7 +204,8 @@ bool CreatureAI::UpdateVictimWithGaze()
if (Unit* victim = me->SelectVictim())
AttackStart(victim);
- return me->GetVictim();
+
+ return me->GetVictim() != nullptr;
}
bool CreatureAI::UpdateVictim()
@@ -211,7 +217,8 @@ bool CreatureAI::UpdateVictim()
{
if (Unit* victim = me->SelectVictim())
AttackStart(victim);
- return me->GetVictim();
+
+ return me->GetVictim() != nullptr;
}
else if (me->getThreatManager().isThreatListEmpty())
{
@@ -252,15 +259,13 @@ Creature* CreatureAI::DoSummon(uint32 entry, const Position& pos, uint32 despawn
Creature* CreatureAI::DoSummon(uint32 entry, WorldObject* obj, float radius, uint32 despawnTime, TempSummonType summonType)
{
- Position pos;
- obj->GetRandomNearPosition(pos, radius);
+ Position pos = obj->GetRandomNearPosition(radius);
return me->SummonCreature(entry, pos, summonType, despawnTime);
}
Creature* CreatureAI::DoSummonFlyer(uint32 entry, WorldObject* obj, float flightZ, float radius, uint32 despawnTime, TempSummonType summonType)
{
- Position pos;
- obj->GetRandomNearPosition(pos, radius);
+ Position pos = obj->GetRandomNearPosition(radius);
pos.m_positionZ += flightZ;
return me->SummonCreature(entry, pos, summonType, despawnTime);
}
diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h
index 6357ac33f1e..b79dd6abbc8 100644
--- a/src/server/game/AI/CreatureAI.h
+++ b/src/server/game/AI/CreatureAI.h
@@ -79,6 +79,7 @@ class CreatureAI : public UnitAI
public:
void Talk(uint8 id, WorldObject const* whisperTarget = NULL);
+ void TalkToMap(uint8 id, WorldObject const* whisperTarget = NULL);
explicit CreatureAI(Creature* creature) : UnitAI(creature), me(creature), m_MoveInLineOfSight_locked(false) { }
virtual ~CreatureAI() { }
@@ -126,7 +127,7 @@ class CreatureAI : public UnitAI
// Called at waypoint reached or point movement finished
virtual void MovementInform(uint32 /*type*/, uint32 /*id*/) { }
- void OnCharmed(bool apply);
+ void OnCharmed(bool apply) override;
// Called at reaching home after evade
virtual void JustReachedHome() { }
diff --git a/src/server/game/AI/CreatureAIFactory.h b/src/server/game/AI/CreatureAIFactory.h
index fc2d009e673..61e3cd2b240 100644
--- a/src/server/game/AI/CreatureAIFactory.h
+++ b/src/server/game/AI/CreatureAIFactory.h
@@ -34,9 +34,9 @@ struct CreatureAIFactory : public SelectableAI
{
CreatureAIFactory(const char* name) : SelectableAI(name) { }
- CreatureAI* Create(void*) const;
+ CreatureAI* Create(void*) const override;
- int Permit(const Creature* c) const { return REAL_AI::Permissible(c); }
+ int Permit(const Creature* c) const override { return REAL_AI::Permissible(c); }
};
template<class REAL_AI>
@@ -49,7 +49,6 @@ CreatureAIFactory<REAL_AI>::Create(void* data) const
typedef FactoryHolder<CreatureAI> CreatureAICreator;
typedef FactoryHolder<CreatureAI>::FactoryHolderRegistry CreatureAIRegistry;
-typedef FactoryHolder<CreatureAI>::FactoryHolderRepository CreatureAIRepository;
//GO
struct SelectableGameObjectAI : public FactoryHolder<GameObjectAI>, public Permissible<GameObject>
@@ -62,9 +61,9 @@ struct GameObjectAIFactory : public SelectableGameObjectAI
{
GameObjectAIFactory(const char* name) : SelectableGameObjectAI(name) { }
- GameObjectAI* Create(void*) const;
+ GameObjectAI* Create(void*) const override;
- int Permit(const GameObject* g) const { return REAL_GO_AI::Permissible(g); }
+ int Permit(const GameObject* g) const override { return REAL_GO_AI::Permissible(g); }
};
template<class REAL_GO_AI>
@@ -77,5 +76,4 @@ GameObjectAIFactory<REAL_GO_AI>::Create(void* data) const
typedef FactoryHolder<GameObjectAI> GameObjectAICreator;
typedef FactoryHolder<GameObjectAI>::FactoryHolderRegistry GameObjectAIRegistry;
-typedef FactoryHolder<GameObjectAI>::FactoryHolderRepository GameObjectAIRepository;
#endif
diff --git a/src/server/game/AI/CreatureAIImpl.h b/src/server/game/AI/CreatureAIImpl.h
index 7447e290ba9..838171a544e 100644
--- a/src/server/game/AI/CreatureAIImpl.h
+++ b/src/server/game/AI/CreatureAIImpl.h
@@ -311,359 +311,6 @@ const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, c
}
}
-class EventMap
-{
- /**
- * Internal storage type.
- * Key: Time as uint32 when the event should occur.
- * Value: The event data as uint32.
- *
- * Structure of event data:
- * - Bit 0 - 15: Event Id.
- * - Bit 16 - 23: Group
- * - Bit 24 - 31: Phase
- * - Pattern: 0xPPGGEEEE
- */
- typedef std::multimap<uint32, uint32> EventStore;
-
- public:
- EventMap() : _time(0), _phase(0) { }
-
- /**
- * @name Reset
- * @brief Removes all scheduled events and resets time and phase.
- */
- void Reset()
- {
- _eventMap.clear();
- _time = 0;
- _phase = 0;
- }
-
- /**
- * @name Update
- * @brief Updates the timer of the event map.
- * @param time Value to be added to time.
- */
- void Update(uint32 time)
- {
- _time += time;
- }
-
- /**
- * @name GetTimer
- * @return Current timer value.
- */
- uint32 GetTimer() const
- {
- return _time;
- }
-
- /**
- * @name GetPhaseMask
- * @return Active phases as mask.
- */
- uint8 GetPhaseMask() const
- {
- return _phase;
- }
-
- /**
- * @name Empty
- * @return True, if there are no events scheduled.
- */
- bool Empty() const
- {
- return _eventMap.empty();
- }
-
- /**
- * @name SetPhase
- * @brief Sets the phase of the map (absolute).
- * @param phase Phase which should be set. Values: 1 - 8. 0 resets phase.
- */
- void SetPhase(uint8 phase)
- {
- if (!phase)
- _phase = 0;
- else if (phase <= 8)
- _phase = (1 << (phase - 1));
- }
-
- /**
- * @name AddPhase
- * @brief Activates the given phase (bitwise).
- * @param phase Phase which should be activated. Values: 1 - 8
- */
- void AddPhase(uint8 phase)
- {
- if (phase && phase <= 8)
- _phase |= (1 << (phase - 1));
- }
-
- /**
- * @name RemovePhase
- * @brief Deactivates the given phase (bitwise).
- * @param phase Phase which should be deactivated. Values: 1 - 8.
- */
- void RemovePhase(uint8 phase)
- {
- if (phase && phase <= 8)
- _phase &= ~(1 << (phase - 1));
- }
-
- /**
- * @name ScheduleEvent
- * @brief Creates new event entry in map.
- * @param eventId The id of the new event.
- * @param time The time in milliseconds until the event occurs.
- * @param group The group which the event is associated to. Has to be between 1 and 8. 0 means it has no group.
- * @param phase The phase in which the event can occur. Has to be between 1 and 8. 0 means it can occur in all phases.
- */
- void ScheduleEvent(uint32 eventId, uint32 time, uint32 group = 0, uint8 phase = 0)
- {
- if (group && group <= 8)
- eventId |= (1 << (group + 15));
-
- if (phase && phase <= 8)
- eventId |= (1 << (phase + 23));
-
- _eventMap.insert(EventStore::value_type(_time + time, eventId));
- }
-
- /**
- * @name RescheduleEvent
- * @brief Cancels the given event and reschedules it.
- * @param eventId The id of the event.
- * @param time The time in milliseconds until the event occurs.
- * @param group The group which the event is associated to. Has to be between 1 and 8. 0 means it has no group.
- * @param phase The phase in which the event can occur. Has to be between 1 and 8. 0 means it can occur in all phases.
- */
- void RescheduleEvent(uint32 eventId, uint32 time, uint32 group = 0, uint8 phase = 0)
- {
- CancelEvent(eventId);
- ScheduleEvent(eventId, time, group, phase);
- }
-
- /**
- * @name RepeatEvent
- * @brief Cancels the closest event and reschedules it.
- * @param time Time until the event occurs.
- */
- void RepeatEvent(uint32 time)
- {
- if (Empty())
- return;
-
- uint32 eventId = _eventMap.begin()->second;
- _eventMap.erase(_eventMap.begin());
- ScheduleEvent(eventId, time);
- }
-
- /**
- * @name PopEvent
- * @brief Remove the first event in the map.
- */
- void PopEvent()
- {
- if (!Empty())
- _eventMap.erase(_eventMap.begin());
- }
-
- /**
- * @name ExecuteEvent
- * @brief Returns the next event to execute and removes it from map.
- * @return Id of the event to execute.
- */
- uint32 ExecuteEvent()
- {
- while (!Empty())
- {
- EventStore::iterator itr = _eventMap.begin();
-
- if (itr->first > _time)
- return 0;
- else if (_phase && (itr->second & 0xFF000000) && !((itr->second >> 24) & _phase))
- _eventMap.erase(itr);
- else
- {
- uint32 eventId = (itr->second & 0x0000FFFF);
- _eventMap.erase(itr);
- return eventId;
- }
- }
-
- return 0;
- }
-
- /**
- * @name GetEvent
- * @brief Returns the next event to execute.
- * @return Id of the event to execute.
- */
- uint32 GetEvent()
- {
- while (!Empty())
- {
- EventStore::iterator itr = _eventMap.begin();
-
- if (itr->first > _time)
- return 0;
- else if (_phase && (itr->second & 0xFF000000) && !(itr->second & (_phase << 24)))
- _eventMap.erase(itr);
- else
- return (itr->second & 0x0000FFFF);
- }
-
- return 0;
- }
-
- /**
- * @name DelayEvents
- * @brief Delays all events in the map. If delay is greater than or equal internal timer, delay will be 0.
- * @param delay Amount of delay.
- */
- void DelayEvents(uint32 delay)
- {
- _time = delay < _time ? _time - delay : 0;
- }
-
- /**
- * @name DelayEvents
- * @brief Delay all events of the same group.
- * @param delay Amount of delay.
- * @param group Group of the events.
- */
- void DelayEvents(uint32 delay, uint32 group)
- {
- if (!group || group > 8 || Empty())
- return;
-
- EventStore delayed;
-
- for (EventStore::iterator itr = _eventMap.begin(); itr != _eventMap.end();)
- {
- if (itr->second & (1 << (group + 15)))
- {
- delayed.insert(EventStore::value_type(itr->first + delay, itr->second));
- _eventMap.erase(itr++);
- }
- else
- ++itr;
- }
-
- _eventMap.insert(delayed.begin(), delayed.end());
- }
-
- /**
- * @name CancelEvent
- * @brief Cancels all events of the specified id.
- * @param eventId Event id to cancel.
- */
- void CancelEvent(uint32 eventId)
- {
- if (Empty())
- return;
-
- for (EventStore::iterator itr = _eventMap.begin(); itr != _eventMap.end();)
- {
- if (eventId == (itr->second & 0x0000FFFF))
- _eventMap.erase(itr++);
- else
- ++itr;
- }
- }
-
- /**
- * @name CancelEventGroup
- * @brief Cancel events belonging to specified group.
- * @param group Group to cancel.
- */
- void CancelEventGroup(uint32 group)
- {
- if (!group || group > 8 || Empty())
- return;
-
- for (EventStore::iterator itr = _eventMap.begin(); itr != _eventMap.end();)
- {
- if (itr->second & (1 << (group + 15)))
- _eventMap.erase(itr++);
- else
- ++itr;
- }
- }
-
- /**
- * @name GetNextEventTime
- * @brief Returns closest occurence of specified event.
- * @param eventId Wanted event id.
- * @return Time of found event.
- */
- uint32 GetNextEventTime(uint32 eventId) const
- {
- if (Empty())
- return 0;
-
- for (EventStore::const_iterator itr = _eventMap.begin(); itr != _eventMap.end(); ++itr)
- if (eventId == (itr->second & 0x0000FFFF))
- return itr->first;
-
- return 0;
- }
-
- /**
- * @name GetNextEventTime
- * @return Time of next event.
- */
- uint32 GetNextEventTime() const
- {
- return Empty() ? 0 : _eventMap.begin()->first;
- }
-
- /**
- * @name IsInPhase
- * @brief Returns wether event map is in specified phase or not.
- * @param phase Wanted phase.
- * @return True, if phase of event map contains specified phase.
- */
- bool IsInPhase(uint8 phase)
- {
- return phase <= 8 && (!phase || _phase & (1 << (phase - 1)));
- }
-
- private:
- /**
- * @name _time
- * @brief Internal timer.
- *
- * This does not represent the real date/time value.
- * It's more like a stopwatch: It can run, it can be stopped,
- * it can be resetted and so on. Events occur when this timer
- * has reached their time value. Its value is changed in the
- * Update method.
- */
- uint32 _time;
-
- /**
- * @name _phase
- * @brief Phase mask of the event map.
- *
- * Contains the phases the event map is in. Multiple
- * phases from 1 to 8 can be set with SetPhase or
- * AddPhase. RemovePhase deactives a phase.
- */
- uint8 _phase;
-
- /**
- * @name _eventMap
- * @brief Internal event storage map. Contains the scheduled events.
- *
- * See typedef at the beginning of the class for more
- * details.
- */
- EventStore _eventMap;
-};
-
enum AITarget
{
AITARGET_SELF,
diff --git a/src/server/game/AI/CreatureAISelector.cpp b/src/server/game/AI/CreatureAISelector.cpp
index 473af0d787e..3643bccdb6f 100644
--- a/src/server/game/AI/CreatureAISelector.cpp
+++ b/src/server/game/AI/CreatureAISelector.cpp
@@ -31,7 +31,7 @@ namespace FactorySelector
CreatureAI* selectAI(Creature* creature)
{
const CreatureAICreator* ai_factory = NULL;
- CreatureAIRegistry& ai_registry(*CreatureAIRepository::instance());
+ CreatureAIRegistry& ai_registry(*CreatureAIRegistry::instance());
if (creature->IsPet())
ai_factory = ai_registry.GetRegistryItem("PetAI");
@@ -68,7 +68,7 @@ namespace FactorySelector
else
ai_factory = ai_registry.GetRegistryItem("NullCreatureAI");
}
- else if (creature->GetCreatureType() == CREATURE_TYPE_CRITTER && !creature->HasUnitTypeMask(UNIT_MASK_GUARDIAN))
+ else if (creature->IsCritter() && !creature->HasUnitTypeMask(UNIT_MASK_GUARDIAN))
ai_factory = ai_registry.GetRegistryItem("CritterAI");
}
@@ -101,7 +101,7 @@ namespace FactorySelector
MovementGenerator* selectMovementGenerator(Creature* creature)
{
- MovementGeneratorRegistry& mv_registry(*MovementGeneratorRepository::instance());
+ MovementGeneratorRegistry& mv_registry(*MovementGeneratorRegistry::instance());
ASSERT(creature->GetCreatureTemplate());
const MovementGeneratorCreator* mv_factory = mv_registry.GetRegistryItem(creature->GetDefaultMovementType());
@@ -130,7 +130,7 @@ namespace FactorySelector
GameObjectAI* SelectGameObjectAI(GameObject* go)
{
const GameObjectAICreator* ai_factory = NULL;
- GameObjectAIRegistry& ai_registry(*GameObjectAIRepository::instance());
+ GameObjectAIRegistry& ai_registry(*GameObjectAIRegistry::instance());
// scriptname in db
if (GameObjectAI* scriptedAI = sScriptMgr->GetGameObjectAI(go))
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
index 36c1d384693..06820b03218 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
@@ -37,7 +37,7 @@ void SummonList::DoZoneInCombat(uint32 entry)
{
for (StorageType::iterator i = storage_.begin(); i != storage_.end();)
{
- Creature* summon = Unit::GetCreature(*me, *i);
+ Creature* summon = ObjectAccessor::GetCreature(*me, *i);
++i;
if (summon && summon->IsAIEnabled
&& (!entry || summon->GetEntry() == entry))
@@ -51,7 +51,7 @@ void SummonList::DespawnEntry(uint32 entry)
{
for (StorageType::iterator i = storage_.begin(); i != storage_.end();)
{
- Creature* summon = Unit::GetCreature(*me, *i);
+ Creature* summon = ObjectAccessor::GetCreature(*me, *i);
if (!summon)
i = storage_.erase(i);
else if (summon->GetEntry() == entry)
@@ -68,7 +68,7 @@ void SummonList::DespawnAll()
{
while (!storage_.empty())
{
- Creature* summon = Unit::GetCreature(*me, storage_.front());
+ Creature* summon = ObjectAccessor::GetCreature(*me, storage_.front());
storage_.pop_front();
if (summon)
summon->DespawnOrUnsummon();
@@ -79,7 +79,7 @@ void SummonList::RemoveNotExisting()
{
for (StorageType::iterator i = storage_.begin(); i != storage_.end();)
{
- if (Unit::GetCreature(*me, *i))
+ if (ObjectAccessor::GetCreature(*me, *i))
++i;
else
i = storage_.erase(i);
@@ -90,7 +90,7 @@ bool SummonList::HasEntry(uint32 entry) const
{
for (StorageType::const_iterator i = storage_.begin(); i != storage_.end(); ++i)
{
- Creature* summon = Unit::GetCreature(*me, *i);
+ Creature* summon = ObjectAccessor::GetCreature(*me, *i);
if (summon && summon->GetEntry() == entry)
return true;
}
@@ -271,7 +271,7 @@ void ScriptedAI::DoResetThreat()
for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
{
- Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (unit && DoGetThreat(unit))
DoModifyThreatPercent(unit, -100);
}
@@ -478,10 +478,7 @@ void BossAI::_JustDied()
events.Reset();
summons.DespawnAll();
if (instance)
- {
instance->SetBossState(_bossId, DONE);
- instance->SaveToDB();
- }
}
void BossAI::_EnterCombat()
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
index cee6ba3c379..788da26ea4a 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
@@ -25,6 +25,15 @@
#include "InstanceScript.h"
#define CAST_AI(a, b) (dynamic_cast<a*>(b))
+#define ENSURE_AI(a,b) (EnsureAI<a>(b))
+
+template<class T, class U>
+T* EnsureAI(U* ai)
+{
+ T* cast_ai = dynamic_cast<T*>(ai);
+ ASSERT(cast_ai);
+ return cast_ai;
+};
class InstanceScript;
@@ -98,7 +107,7 @@ public:
Trinity::Containers::RandomResizeList<uint64, Predicate>(listCopy, predicate, max);
for (StorageType::iterator i = listCopy.begin(); i != listCopy.end(); )
{
- Creature* summon = Unit::GetCreature(*me, *i++);
+ Creature* summon = ObjectAccessor::GetCreature(*me, *i++);
if (summon && summon->IsAIEnabled)
summon->AI()->DoAction(info);
}
@@ -141,31 +150,31 @@ struct ScriptedAI : public CreatureAI
void AttackStartNoMove(Unit* target);
// Called at any Damage from any attacker (before damage apply)
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) { }
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { }
//Called at World update tick
- virtual void UpdateAI(uint32 diff);
+ virtual void UpdateAI(uint32 diff) override;
//Called at creature death
- void JustDied(Unit* /*killer*/) { }
+ void JustDied(Unit* /*killer*/) override { }
//Called at creature killing another unit
- void KilledUnit(Unit* /*victim*/) { }
+ void KilledUnit(Unit* /*victim*/) override { }
// Called when the creature summon successfully other creature
- void JustSummoned(Creature* /*summon*/) { }
+ void JustSummoned(Creature* /*summon*/) override { }
// Called when a summoned creature is despawned
- void SummonedCreatureDespawn(Creature* /*summon*/) { }
+ void SummonedCreatureDespawn(Creature* /*summon*/) override { }
// Called when hit by a spell
- void SpellHit(Unit* /*caster*/, SpellInfo const* /*spell*/) { }
+ void SpellHit(Unit* /*caster*/, SpellInfo const* /*spell*/) override { }
// Called when spell hits a target
- void SpellHitTarget(Unit* /*target*/, SpellInfo const* /*spell*/) { }
+ void SpellHitTarget(Unit* /*target*/, SpellInfo const* /*spell*/) override { }
//Called at waypoint reached or PointMovement end
- void MovementInform(uint32 /*type*/, uint32 /*id*/) { }
+ void MovementInform(uint32 /*type*/, uint32 /*id*/) override { }
// Called when AI is temporarily replaced or put back when possess is applied or removed
void OnPossess(bool /*apply*/) { }
@@ -185,13 +194,13 @@ struct ScriptedAI : public CreatureAI
// *************
//Called at creature reset either by death or evade
- void Reset() { }
+ void Reset() override { }
//Called at creature aggro either by MoveInLOS or Attack Start
- void EnterCombat(Unit* /*victim*/) { }
+ void EnterCombat(Unit* /*victim*/) override { }
// Called before EnterCombat even before the creature is in combat.
- void AttackStart(Unit* /*target*/);
+ void AttackStart(Unit* /*target*/) override;
// *************
//AI Helper Functions
@@ -339,10 +348,10 @@ class BossAI : public ScriptedAI
InstanceScript* const instance;
BossBoundaryMap const* GetBoundary() const { return _boundary; }
- void JustSummoned(Creature* summon);
- void SummonedCreatureDespawn(Creature* summon);
+ void JustSummoned(Creature* summon) override;
+ void SummonedCreatureDespawn(Creature* summon) override;
- virtual void UpdateAI(uint32 diff);
+ virtual void UpdateAI(uint32 diff) override;
// Hook used to execute events scheduled into EventMap without the need
// to override UpdateAI
@@ -350,10 +359,10 @@ class BossAI : public ScriptedAI
// is supposed to run more than once
virtual void ExecuteEvent(uint32 /*eventId*/) { }
- void Reset() { _Reset(); }
- void EnterCombat(Unit* /*who*/) { _EnterCombat(); }
- void JustDied(Unit* /*killer*/) { _JustDied(); }
- void JustReachedHome() { _JustReachedHome(); }
+ void Reset() override { _Reset(); }
+ void EnterCombat(Unit* /*who*/) override { _EnterCombat(); }
+ void JustDied(Unit* /*killer*/) override { _JustDied(); }
+ void JustReachedHome() override { _JustReachedHome(); }
protected:
void _Reset();
@@ -387,10 +396,10 @@ class WorldBossAI : public ScriptedAI
WorldBossAI(Creature* creature);
virtual ~WorldBossAI() { }
- void JustSummoned(Creature* summon);
- void SummonedCreatureDespawn(Creature* summon);
+ void JustSummoned(Creature* summon) override;
+ void SummonedCreatureDespawn(Creature* summon) override;
- virtual void UpdateAI(uint32 diff);
+ virtual void UpdateAI(uint32 diff) override;
// Hook used to execute events scheduled into EventMap without the need
// to override UpdateAI
@@ -398,9 +407,9 @@ class WorldBossAI : public ScriptedAI
// is supposed to run more than once
virtual void ExecuteEvent(uint32 /*eventId*/) { }
- void Reset() { _Reset(); }
- void EnterCombat(Unit* /*who*/) { _EnterCombat(); }
- void JustDied(Unit* /*killer*/) { _JustDied(); }
+ void Reset() override { _Reset(); }
+ void EnterCombat(Unit* /*who*/) override { _EnterCombat(); }
+ void JustDied(Unit* /*killer*/) override { _JustDied(); }
protected:
void _Reset();
diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
index dcf5bd56fa6..d06f90c1aeb 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
@@ -77,7 +77,7 @@ bool npc_escortAI::AssistPlayerInCombat(Unit* who)
return false;
//not a player
- if (!who->GetVictim()->GetCharmerOrOwnerPlayerOrPlayerItself())
+ if (!who->EnsureVictim()->GetCharmerOrOwnerPlayerOrPlayerItself())
return false;
//never attack friendly
@@ -166,7 +166,7 @@ void npc_escortAI::JustRespawned()
//add a small delay before going to first waypoint, normal in near all cases
m_uiWPWaitTimer = 2500;
- if (me->getFaction() != me->GetCreatureTemplate()->faction_A)
+ if (me->getFaction() != me->GetCreatureTemplate()->faction)
me->RestoreFaction();
Reset();
diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h
index 4aa00d74e4e..b8c9ee57aeb 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h
+++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h
@@ -56,22 +56,22 @@ struct npc_escortAI : public ScriptedAI
~npc_escortAI() { }
// CreatureAI functions
- void AttackStart(Unit* who);
+ void AttackStart(Unit* who) override;
- void MoveInLineOfSight(Unit* who);
+ void MoveInLineOfSight(Unit* who) override;
- void JustDied(Unit*);
+ void JustDied(Unit*) override;
- void JustRespawned();
+ void JustRespawned() override;
void ReturnToLastPoint();
- void EnterEvadeMode();
+ void EnterEvadeMode() override;
- void UpdateAI(uint32 diff); //the "internal" update, calls UpdateEscortAI()
+ void UpdateAI(uint32 diff) override; //the "internal" update, calls UpdateEscortAI()
virtual void UpdateEscortAI(uint32 const diff); //used when it's needed to add code in update (abilities, scripted events, etc)
- void MovementInform(uint32, uint32);
+ void MovementInform(uint32, uint32) override;
// EscortAI functions
void AddWaypoint(uint32 id, float x, float y, float z, uint32 waitTime = 0); // waitTime is in ms
@@ -93,8 +93,8 @@ struct npc_escortAI : public ScriptedAI
void SetRun(bool on = true);
void SetEscortPaused(bool on);
- bool HasEscortState(uint32 escortState) { return (m_uiEscortState & escortState); }
- virtual bool IsEscorted() { return (m_uiEscortState & STATE_ESCORT_ESCORTING); }
+ bool HasEscortState(uint32 escortState) { return (m_uiEscortState & escortState) != 0; }
+ virtual bool IsEscorted() override { return (m_uiEscortState & STATE_ESCORT_ESCORTING); }
void SetMaxPlayerDistance(float newMax) { MaxPlayerDistance = newMax; }
float GetMaxPlayerDistance() { return MaxPlayerDistance; }
diff --git a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp
index 0fbfc2cebac..a106c98c786 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp
@@ -74,7 +74,7 @@ bool FollowerAI::AssistPlayerInCombat(Unit* who)
return false;
//not a player
- if (!who->GetVictim()->GetCharmerOrOwnerPlayerOrPlayerItself())
+ if (!who->EnsureVictim()->GetCharmerOrOwnerPlayerOrPlayerItself())
return false;
//never attack friendly
@@ -165,8 +165,8 @@ void FollowerAI::JustRespawned()
if (!IsCombatMovementAllowed())
SetCombatMovement(true);
- if (me->getFaction() != me->GetCreatureTemplate()->faction_A)
- me->setFaction(me->GetCreatureTemplate()->faction_A);
+ if (me->getFaction() != me->GetCreatureTemplate()->faction)
+ me->setFaction(me->GetCreatureTemplate()->faction);
Reset();
}
diff --git a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h
index df435fa5c9a..adb17ef76b1 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h
+++ b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h
@@ -40,19 +40,19 @@ class FollowerAI : public ScriptedAI
//virtual void WaypointReached(uint32 uiPointId) = 0;
- void MovementInform(uint32 motionType, uint32 pointId);
+ void MovementInform(uint32 motionType, uint32 pointId) override;
- void AttackStart(Unit*);
+ void AttackStart(Unit*) override;
- void MoveInLineOfSight(Unit*);
+ void MoveInLineOfSight(Unit*) override;
- void EnterEvadeMode();
+ void EnterEvadeMode() override;
- void JustDied(Unit*);
+ void JustDied(Unit*) override;
- void JustRespawned();
+ void JustRespawned() override;
- void UpdateAI(uint32); //the "internal" update, calls UpdateFollowerAI()
+ void UpdateAI(uint32) override; //the "internal" update, calls UpdateFollowerAI()
virtual void UpdateFollowerAI(uint32); //used when it's needed to add code in update (abilities, scripted events, etc)
void StartFollow(Player* player, uint32 factionForFollower = 0, const Quest* quest = NULL);
@@ -60,7 +60,7 @@ class FollowerAI : public ScriptedAI
void SetFollowPaused(bool bPaused); //if special event require follow mode to hold/resume during the follow
void SetFollowComplete(bool bWithEndEvent = false);
- bool HasFollowState(uint32 uiFollowState) { return (m_uiFollowState & uiFollowState); }
+ bool HasFollowState(uint32 uiFollowState) { return (m_uiFollowState & uiFollowState) != 0; }
protected:
Player* GetLeaderForFollower();
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp
index 23dea877776..41f783f4289 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -47,7 +47,7 @@ SmartAI::SmartAI(Creature* c) : CreatureAI(c)
me->SetWalk(false);
mRun = false;
- me->GetPosition(&mLastOOCPos);
+ mLastOOCPos = me->GetPosition();
mCanAutoAttack = true;
mCanCombatMove = true;
@@ -132,7 +132,7 @@ void SmartAI::StartPath(bool run, uint32 path, bool repeat, Unit* /*invoker*/)
if (WayPoint* wp = GetNextWayPoint())
{
- me->GetPosition(&mLastOOCPos);
+ mLastOOCPos = me->GetPosition();
me->GetMotionMaster()->MovePoint(wp->id, wp->x, wp->y, wp->z);
GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_START, NULL, wp->id, GetScript()->GetPathId());
}
@@ -162,7 +162,7 @@ void SmartAI::PausePath(uint32 delay, bool forced)
return;
}
mForcedPaused = forced;
- me->GetPosition(&mLastOOCPos);
+ mLastOOCPos = me->GetPosition();
AddEscortState(SMART_ESCORT_PAUSED);
mWPPauseTimer = delay;
if (forced)
@@ -184,7 +184,7 @@ void SmartAI::StopPath(uint32 DespawnTime, uint32 quest, bool fail)
SetDespawnTime(DespawnTime);
//mDespawnTime = DespawnTime;
- me->GetPosition(&mLastOOCPos);
+ mLastOOCPos = me->GetPosition();
me->StopMoving();//force stop
me->GetMotionMaster()->MoveIdle();
GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_STOPPED, NULL, mLastWP->id, GetScript()->GetPathId());
@@ -437,8 +437,11 @@ void SmartAI::EnterEvadeMode()
}
else if (mFollowGuid)
{
- if (Unit* target = me->GetUnit(*me, mFollowGuid))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, mFollowGuid))
me->GetMotionMaster()->MoveFollow(target, mFollowDist, mFollowAngle);
+
+ // evade is not cleared in MoveFollow, so we can't keep it
+ me->ClearUnitState(UNIT_STATE_EVADE);
}
else
me->GetMotionMaster()->MoveTargetedHome();
@@ -499,7 +502,7 @@ bool SmartAI::AssistPlayerInCombat(Unit* who)
return false;
//not a player
- if (!who->GetVictim()->GetCharmerOrOwnerPlayerOrPlayerItself())
+ if (!who->EnsureVictim()->GetCharmerOrOwnerPlayerOrPlayerItself())
return false;
//never attack friendly
@@ -532,11 +535,11 @@ void SmartAI::JustRespawned()
mDespawnState = 0;
mEscortState = SMART_ESCORT_NONE;
me->SetVisible(true);
- if (me->getFaction() != me->GetCreatureTemplate()->faction_A)
+ if (me->getFaction() != me->GetCreatureTemplate()->faction)
me->RestoreFaction();
- GetScript()->ProcessEventsFor(SMART_EVENT_RESPAWN);
mJustReset = true;
JustReachedHome();
+ GetScript()->ProcessEventsFor(SMART_EVENT_RESPAWN);
mFollowGuid = 0;//do not reset follower on Reset(), we need it after combat evade
mFollowDist = 0;
mFollowAngle = 0;
@@ -572,7 +575,7 @@ void SmartAI::EnterCombat(Unit* enemy)
{
me->InterruptNonMeleeSpells(false); // must be before ProcessEvents
GetScript()->ProcessEventsFor(SMART_EVENT_AGGRO, enemy);
- me->GetPosition(&mLastOOCPos);
+ mLastOOCPos = me->GetPosition();
SetRun(mRun);
if (me->GetMotionMaster()->GetMotionSlotType(MOTION_SLOT_ACTIVE) == POINT_MOTION_TYPE)
me->GetMotionMaster()->MovementExpired();
@@ -618,10 +621,7 @@ void SmartAI::DamageTaken(Unit* doneBy, uint32& damage)
{
GetScript()->ProcessEventsFor(SMART_EVENT_DAMAGED, doneBy, damage);
if (mInvincibilityHpLevel && (damage >= me->GetHealth() - mInvincibilityHpLevel))
- {
- damage = 0;
- me->SetHealth(mInvincibilityHpLevel);
- }
+ damage = me->GetHealth() - mInvincibilityHpLevel; // damage should not be nullified, because of player damage req.
}
void SmartAI::HealReceived(Unit* doneBy, uint32& addhealth)
@@ -931,7 +931,7 @@ class SmartTrigger : public AreaTriggerScript
SmartTrigger() : AreaTriggerScript("SmartTrigger") { }
- bool OnTrigger(Player* player, AreaTriggerEntry const* trigger)
+ bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) override
{
if (!player->IsAlive())
return false;
@@ -944,7 +944,7 @@ class SmartTrigger : public AreaTriggerScript
}
};
-void AddSC_SmartSCripts()
+void AddSC_SmartScripts()
{
new SmartTrigger();
}
diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h
index 4d66b976746..b0d5d4f8343 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.h
+++ b/src/server/game/AI/SmartScripts/SmartAI.h
@@ -70,94 +70,94 @@ class SmartAI : public CreatureAI
bool IsEscortInvokerInRange();
// Called when creature is spawned or respawned
- void JustRespawned();
+ void JustRespawned() override;
// Called at reaching home after evade, InitializeAI(), EnterEvadeMode() for resetting variables
- void JustReachedHome();
+ void JustReachedHome() override;
// Called for reaction at enter to combat if not in combat yet (enemy can be NULL)
- void EnterCombat(Unit* enemy);
+ void EnterCombat(Unit* enemy) override;
// Called for reaction at stopping attack at no attackers or targets
- void EnterEvadeMode();
+ void EnterEvadeMode() override;
// Called when the creature is killed
- void JustDied(Unit* killer);
+ void JustDied(Unit* killer) override;
// Called when the creature kills a unit
- void KilledUnit(Unit* victim);
+ void KilledUnit(Unit* victim) override;
// Called when the creature summon successfully other creature
- void JustSummoned(Creature* creature);
+ void JustSummoned(Creature* creature) override;
// Tell creature to attack and follow the victim
- void AttackStart(Unit* who);
+ void AttackStart(Unit* who) override;
// Called if IsVisible(Unit* who) is true at each *who move, reaction at visibility zone enter
- void MoveInLineOfSight(Unit* who);
+ void MoveInLineOfSight(Unit* who) override;
// Called when hit by a spell
- void SpellHit(Unit* unit, const SpellInfo* spellInfo);
+ void SpellHit(Unit* unit, const SpellInfo* spellInfo) override;
// Called when spell hits a target
- void SpellHitTarget(Unit* target, const SpellInfo* spellInfo);
+ void SpellHitTarget(Unit* target, const SpellInfo* spellInfo) override;
// Called at any Damage from any attacker (before damage apply)
- void DamageTaken(Unit* doneBy, uint32& damage);
+ void DamageTaken(Unit* doneBy, uint32& damage) override;
// Called when the creature receives heal
- void HealReceived(Unit* doneBy, uint32& addhealth);
+ void HealReceived(Unit* doneBy, uint32& addhealth) override;
// Called at World update tick
- void UpdateAI(uint32 diff);
+ void UpdateAI(uint32 diff) override;
// Called at text emote receive from player
- void ReceiveEmote(Player* player, uint32 textEmote);
+ void ReceiveEmote(Player* player, uint32 textEmote) override;
// Called at waypoint reached or point movement finished
- void MovementInform(uint32 MovementType, uint32 Data);
+ void MovementInform(uint32 MovementType, uint32 Data) override;
// Called when creature is summoned by another unit
- void IsSummonedBy(Unit* summoner);
+ void IsSummonedBy(Unit* summoner) override;
// Called at any Damage to any victim (before damage apply)
- void DamageDealt(Unit* doneTo, uint32& damage, DamageEffectType /*damagetype*/);
+ void DamageDealt(Unit* doneTo, uint32& damage, DamageEffectType /*damagetype*/) override;
// Called when a summoned creature dissapears (UnSommoned)
- void SummonedCreatureDespawn(Creature* unit);
+ void SummonedCreatureDespawn(Creature* unit) override;
// called when the corpse of this creature gets removed
- void CorpseRemoved(uint32& respawnDelay);
+ void CorpseRemoved(uint32& respawnDelay) override;
// Called at World update tick if creature is charmed
void UpdateAIWhileCharmed(const uint32 diff);
// Called when a Player/Creature enters the creature (vehicle)
- void PassengerBoarded(Unit* who, int8 seatId, bool apply);
+ void PassengerBoarded(Unit* who, int8 seatId, bool apply) override;
// Called when gets initialized, when creature is added to world
- void InitializeAI();
+ void InitializeAI() override;
// Called when creature gets charmed by another unit
- void OnCharmed(bool apply);
+ void OnCharmed(bool apply) override;
// Called when victim is in line of sight
- bool CanAIAttack(const Unit* who) const;
+ bool CanAIAttack(const Unit* who) const override;
// Used in scripts to share variables
- void DoAction(int32 param = 0);
+ void DoAction(int32 param = 0) override;
// Used in scripts to share variables
- uint32 GetData(uint32 id = 0) const;
+ uint32 GetData(uint32 id = 0) const override;
// Used in scripts to share variables
- void SetData(uint32 id, uint32 value);
+ void SetData(uint32 id, uint32 value) override;
// Used in scripts to share variables
- void SetGUID(uint64 guid, int32 id = 0);
+ void SetGUID(uint64 guid, int32 id = 0) override;
// Used in scripts to share variables
- uint64 GetGUID(int32 id = 0) const;
+ uint64 GetGUID(int32 id = 0) const override;
//core related
static int Permissible(const Creature*);
@@ -174,15 +174,14 @@ class SmartAI : public CreatureAI
void SetInvincibilityHpLevel(uint32 level) { mInvincibilityHpLevel = level; }
- void sGossipHello(Player* player);
- void sGossipSelect(Player* player, uint32 sender, uint32 action);
- void sGossipSelectCode(Player* player, uint32 sender, uint32 action, const char* code);
- void sQuestAccept(Player* player, Quest const* quest);
- //void sQuestSelect(Player* player, Quest const* quest);
- //void sQuestComplete(Player* player, Quest const* quest);
- void sQuestReward(Player* player, Quest const* quest, uint32 opt);
- bool sOnDummyEffect(Unit* caster, uint32 spellId, SpellEffIndex effIndex);
- void sOnGameEvent(bool start, uint16 eventId);
+ void sGossipHello(Player* player) override;
+ void sGossipSelect(Player* player, uint32 sender, uint32 action) override;
+ void sGossipSelectCode(Player* player, uint32 sender, uint32 action, const char* code) override;
+ void sQuestAccept(Player* player, Quest const* quest) override;
+ //void sQuestSelect(Player* player, Quest const* quest) override;
+ void sQuestReward(Player* player, Quest const* quest, uint32 opt) override;
+ bool sOnDummyEffect(Unit* caster, uint32 spellId, SpellEffIndex effIndex) override;
+ void sOnGameEvent(bool start, uint16 eventId) override;
uint32 mEscortQuestID;
@@ -193,7 +192,7 @@ class SmartAI : public CreatureAI
}
void StartDespawn() { mDespawnState = 2; }
- void OnSpellClick(Unit* clicker, bool& result);
+ void OnSpellClick(Unit* clicker, bool& result) override;
private:
uint32 mFollowCreditType;
@@ -237,23 +236,23 @@ class SmartGameObjectAI : public GameObjectAI
SmartGameObjectAI(GameObject* g) : GameObjectAI(g) { }
~SmartGameObjectAI() { }
- void UpdateAI(uint32 diff);
- void InitializeAI();
- void Reset();
+ void UpdateAI(uint32 diff) override;
+ void InitializeAI() override;
+ void Reset() override;
SmartScript* GetScript() { return &mScript; }
static int Permissible(const GameObject* g);
- bool GossipHello(Player* player);
- bool GossipSelect(Player* player, uint32 sender, uint32 action);
- bool GossipSelectCode(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/, const char* /*code*/);
- bool QuestAccept(Player* player, Quest const* quest);
- bool QuestReward(Player* player, Quest const* quest, uint32 opt);
- void Destroyed(Player* player, uint32 eventId);
- void SetData(uint32 id, uint32 value);
+ bool GossipHello(Player* player) override;
+ bool GossipSelect(Player* player, uint32 sender, uint32 action) override;
+ bool GossipSelectCode(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/, const char* /*code*/) override;
+ bool QuestAccept(Player* player, Quest const* quest) override;
+ bool QuestReward(Player* player, Quest const* quest, uint32 opt) override;
+ void Destroyed(Player* player, uint32 eventId) override;
+ void SetData(uint32 id, uint32 value) override;
void SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker);
- void OnGameEvent(bool start, uint16 eventId);
- void OnStateChanged(uint32 state, Unit* unit);
- void EventInform(uint32 eventId);
+ void OnGameEvent(bool start, uint16 eventId) override;
+ void OnStateChanged(uint32 state, Unit* unit) override;
+ void EventInform(uint32 eventId) override;
private:
SmartScript mScript;
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 231f3808aa9..722f86a2392 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -38,25 +38,24 @@
#include "MoveSplineInit.h"
#include "GameEventMgr.h"
-class TrinityStringTextBuilder
+class BroadcastTextBuilder
{
public:
- TrinityStringTextBuilder(WorldObject* obj, ChatMsg msgtype, int32 id, uint32 language, WorldObject* target)
- : _source(obj), _msgType(msgtype), _textId(id), _language(language), _target(target)
- {
- }
+ BroadcastTextBuilder(WorldObject const* obj, ChatMsg msgtype, uint32 id, WorldObject const* target, uint32 gender = GENDER_MALE)
+ : _source(obj), _msgType(msgtype), _textId(id), _target(target), _gender(gender) { }
size_t operator()(WorldPacket* data, LocaleConstant locale) const
{
- std::string text = sObjectMgr->GetTrinityString(_textId, locale);
- return ChatHandler::BuildChatPacket(*data, _msgType, Language(_language), _source, _target, text, 0, "", locale);
+ BroadcastText const* bct = sObjectMgr->GetBroadcastText(_textId);
+
+ return ChatHandler::BuildChatPacket(*data, _msgType, bct ? Language(bct->Language) : LANG_UNIVERSAL, _source, _target, bct ? bct->GetText(locale, _gender) : "", 0, "", locale);
}
- WorldObject* _source;
+ WorldObject const* _source;
ChatMsg _msgType;
- int32 _textId;
- uint32 _language;
- WorldObject* _target;
+ uint32 _textId;
+ WorldObject const* _target;
+ uint32 _gender;
};
SmartScript::SmartScript()
@@ -262,11 +261,11 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
if (CreatureTemplate const* ci = sObjectMgr->GetCreatureTemplate((*itr)->ToCreature()->GetEntry()))
{
- if ((*itr)->ToCreature()->getFaction() != ci->faction_A)
+ if ((*itr)->ToCreature()->getFaction() != ci->faction)
{
- (*itr)->ToCreature()->setFaction(ci->faction_A);
+ (*itr)->ToCreature()->setFaction(ci->faction);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_FACTION: Creature entry %u, GuidLow %u set faction to %u",
- (*itr)->GetEntry(), (*itr)->GetGUIDLow(), ci->faction_A);
+ (*itr)->GetEntry(), (*itr)->GetGUIDLow(), ci->faction);
}
}
}
@@ -430,7 +429,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
ThreatContainer::StorageType threatList = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator i = threatList.begin(); i != threatList.end(); ++i)
{
- if (Unit* target = Unit::GetUnit(*me, (*i)->getUnitGuid()))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()))
{
me->getThreatManager().modifyThreatPercent(target, e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_THREAT_ALL_PCT: Creature guidLow %u modify threat for unit %u, value %i",
@@ -478,7 +477,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (IsPlayer(*itr))
{
- (*itr)->ToPlayer()->AreaExploredOrEventHappens(e.action.quest.quest);
+ (*itr)->ToPlayer()->GroupEventHappens(e.action.quest.quest, me);
+
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_CALL_AREAEXPLOREDOREVENTHAPPENS: Player guidLow %u credited quest %u",
(*itr)->GetGUIDLow(), e.action.quest.quest);
}
@@ -489,9 +489,6 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
}
case SMART_ACTION_CAST:
{
- if (!me)
- break;
-
ObjectList* targets = GetTargets(e, unit);
if (!targets)
break;
@@ -503,31 +500,36 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (!(e.action.cast.flags & SMARTCAST_AURA_NOT_PRESENT) || !(*itr)->ToUnit()->HasAura(e.action.cast.spell))
{
- if (e.action.cast.flags & SMARTCAST_INTERRUPT_PREVIOUS)
- me->InterruptNonMeleeSpells(false);
-
- if (e.action.cast.flags & SMARTCAST_COMBAT_MOVE)
+ if (me)
{
- // If cast flag SMARTCAST_COMBAT_MOVE is set combat movement will not be allowed
- // unless target is outside spell range, out of mana, or LOS.
+ if (e.action.cast.flags & SMARTCAST_INTERRUPT_PREVIOUS)
+ me->InterruptNonMeleeSpells(false);
- bool _allowMove = false;
- SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(e.action.cast.spell);
- int32 mana = me->GetPower(POWER_MANA);
+ if (e.action.cast.flags & SMARTCAST_COMBAT_MOVE)
+ {
+ // If cast flag SMARTCAST_COMBAT_MOVE is set combat movement will not be allowed
+ // unless target is outside spell range, out of mana, or LOS.
+
+ bool _allowMove = false;
+ SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(e.action.cast.spell);
+ int32 mana = me->GetPower(POWER_MANA);
- if (me->GetDistance(*itr) > spellInfo->GetMaxRange(true) ||
- me->GetDistance(*itr) < spellInfo->GetMinRange(true) ||
- !me->IsWithinLOSInMap(*itr) ||
- mana < spellInfo->CalcPowerCost(me, spellInfo->GetSchoolMask()))
+ if (me->GetDistance(*itr) > spellInfo->GetMaxRange(true) ||
+ me->GetDistance(*itr) < spellInfo->GetMinRange(true) ||
+ !me->IsWithinLOSInMap(*itr) ||
+ mana < spellInfo->CalcPowerCost(me, spellInfo->GetSchoolMask()))
_allowMove = true;
- CAST_AI(SmartAI, me->AI())->SetCombatMove(_allowMove);
- }
+ ENSURE_AI(SmartAI, me->AI())->SetCombatMove(_allowMove);
+ }
- me->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED));
+ me->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED) != 0);
+ }
+ else if (go)
+ go->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED) != 0);
- TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_CAST:: Creature %u casts spell %u on target %u with castflags %u",
- me->GetGUIDLow(), e.action.cast.spell, (*itr)->GetGUIDLow(), e.action.cast.flags);
+ TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_CAST:: %s: %u casts spell %u on target %u with castflags %u",
+ GetLogNameForGuid(me ? me->GetGUID() : go->GetGUID()), me ? me->GetGUIDLow() : go->GetGUIDLow(), e.action.cast.spell, (*itr)->GetGUIDLow(), e.action.cast.flags);
}
else
TC_LOG_DEBUG("scripts.ai", "Spell %u not cast because it has flag SMARTCAST_AURA_NOT_PRESENT and the target (Guid: " UI64FMTD " Entry: %u Type: %u) already has the aura", e.action.cast.spell, (*itr)->GetGUID(), (*itr)->GetEntry(), uint32((*itr)->GetTypeId()));
@@ -556,7 +558,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (e.action.cast.flags & SMARTCAST_INTERRUPT_PREVIOUS)
tempLastInvoker->InterruptNonMeleeSpells(false);
- tempLastInvoker->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED));
+ tempLastInvoker->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED) != 0);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_INVOKER_CAST: Invoker %u casts spell %u on target %u with castflags %u",
tempLastInvoker->GetGUIDLow(), e.action.cast.spell, (*itr)->GetGUIDLow(), e.action.cast.flags);
}
@@ -706,7 +708,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (!IsSmart())
break;
- CAST_AI(SmartAI, me->AI())->SetAutoAttack(e.action.autoAttack.attack);
+ ENSURE_AI(SmartAI, me->AI())->SetAutoAttack(e.action.autoAttack.attack != 0);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_AUTO_ATTACK: Creature: %u bool on = %u",
me->GetGUIDLow(), e.action.autoAttack.attack);
break;
@@ -716,8 +718,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (!IsSmart())
break;
- bool move = e.action.combatMove.move;
- CAST_AI(SmartAI, me->AI())->SetCombatMove(move);
+ bool move = e.action.combatMove.move != 0;
+ ENSURE_AI(SmartAI, me->AI())->SetCombatMove(move);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_ALLOW_COMBAT_MOVEMENT: Creature %u bool on = %u",
me->GetGUIDLow(), e.action.combatMove.move);
break;
@@ -760,7 +762,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
me->DoFleeToGetAssistance();
if (e.action.flee.withEmote)
{
- TrinityStringTextBuilder builder(me, CHAT_MSG_MONSTER_EMOTE, LANG_FLEE, LANG_UNIVERSAL, NULL);
+ BroadcastTextBuilder builder(me, CHAT_MSG_MONSTER_EMOTE, BROADCAST_TEXT_FLEE_FOR_ASSIST, NULL, me->getGender());
sCreatureTextMgr->SendChatPacket(me, builder, CHAT_MSG_MONSTER_EMOTE);
}
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_FLEE_FOR_ASSIST: Creature %u DoFleeToGetAssistance", me->GetGUIDLow());
@@ -816,7 +818,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
ObjectList* targets = GetTargets(e, unit);
if (!targets)
{
- CAST_AI(SmartAI, me->AI())->StopFollow();
+ ENSURE_AI(SmartAI, me->AI())->StopFollow();
break;
}
@@ -824,7 +826,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
if (IsUnit(*itr))
{
- CAST_AI(SmartAI, me->AI())->SetFollow((*itr)->ToUnit(), (float)e.action.follow.dist, (float)e.action.follow.angle, e.action.follow.credit, e.action.follow.entry, e.action.follow.creditType);
+ ENSURE_AI(SmartAI, me->AI())->SetFollow((*itr)->ToUnit(), (float)e.action.follow.dist, (float)e.action.follow.angle, e.action.follow.credit, e.action.follow.entry, e.action.follow.creditType);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_FOLLOW: Creature %u following target %u",
me->GetGUIDLow(), (*itr)->GetGUIDLow());
break;
@@ -973,7 +975,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
if (IsCreature(*itr))
- (*itr)->ToCreature()->UpdateEntry(e.action.updateTemplate.creature, e.action.updateTemplate.team ? HORDE : ALLIANCE);
+ (*itr)->ToCreature()->UpdateEntry(e.action.updateTemplate.creature);
delete targets;
break;
@@ -1003,7 +1005,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
me->CallForHelp((float)e.action.callHelp.range);
if (e.action.callHelp.withEmote)
{
- TrinityStringTextBuilder builder(me, CHAT_MSG_MONSTER_EMOTE, LANG_CALL_FOR_HELP, LANG_UNIVERSAL, NULL);
+ BroadcastTextBuilder builder(me, CHAT_MSG_MONSTER_EMOTE, BROADCAST_TEXT_CALL_FOR_HELP, NULL, me->getGender());
sCreatureTextMgr->SendChatPacket(me, builder, CHAT_MSG_MONSTER_EMOTE);
}
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_CALL_FOR_HELP: Creature %u", me->GetGUIDLow());
@@ -1034,8 +1036,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if ((*itr)->ToUnit()->IsAlive() && IsSmart((*itr)->ToCreature()))
{
- CAST_AI(SmartAI, (*itr)->ToCreature()->AI())->SetDespawnTime(e.action.forceDespawn.delay + 1); // Next tick
- CAST_AI(SmartAI, (*itr)->ToCreature()->AI())->StartDespawn();
+ ENSURE_AI(SmartAI, (*itr)->ToCreature()->AI())->SetDespawnTime(e.action.forceDespawn.delay + 1); // Next tick
+ ENSURE_AI(SmartAI, (*itr)->ToCreature()->AI())->StartDespawn();
}
else
(*itr)->ToCreature()->DespawnOrUnsummon(e.action.forceDespawn.delay);
@@ -1137,13 +1139,13 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
case SMART_ACTION_SET_VISIBILITY:
{
if (me)
- me->SetVisible(e.action.visibility.state);
+ me->SetVisible(e.action.visibility.state != 0);
break;
}
case SMART_ACTION_SET_ACTIVE:
{
if (WorldObject* baseObj = GetBaseObject())
- baseObj->setActive(e.action.active.state);
+ baseObj->setActive(e.action.active.state != 0);
break;
}
@@ -1319,7 +1321,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (!IsSmart())
break;
- CAST_AI(SmartAI, me->AI())->SetFly(e.action.setFly.fly);
+ ENSURE_AI(SmartAI, me->AI())->SetFly(e.action.setFly.fly != 0);
break;
}
case SMART_ACTION_SET_RUN:
@@ -1327,7 +1329,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (!IsSmart())
break;
- CAST_AI(SmartAI, me->AI())->SetRun(e.action.setRun.run);
+ ENSURE_AI(SmartAI, me->AI())->SetRun(e.action.setRun.run != 0);
break;
}
case SMART_ACTION_SET_SWIM:
@@ -1335,7 +1337,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (!IsSmart())
break;
- CAST_AI(SmartAI, me->AI())->SetSwim(e.action.setSwim.swim);
+ ENSURE_AI(SmartAI, me->AI())->SetSwim(e.action.setSwim.swim != 0);
break;
}
case SMART_ACTION_WP_START:
@@ -1343,18 +1345,18 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (!IsSmart())
break;
- bool run = e.action.wpStart.run;
+ bool run = e.action.wpStart.run != 0;
uint32 entry = e.action.wpStart.pathID;
- bool repeat = e.action.wpStart.repeat;
+ bool repeat = e.action.wpStart.repeat != 0;
ObjectList* targets = GetTargets(e, unit);
StoreTargetList(targets, SMART_ESCORT_TARGETS);
me->SetReactState((ReactStates)e.action.wpStart.reactState);
- CAST_AI(SmartAI, me->AI())->StartPath(run, entry, repeat, unit);
+ ENSURE_AI(SmartAI, me->AI())->StartPath(run, entry, repeat, unit);
uint32 quest = e.action.wpStart.quest;
uint32 DespawnTime = e.action.wpStart.despawnTime;
- CAST_AI(SmartAI, me->AI())->mEscortQuestID = quest;
- CAST_AI(SmartAI, me->AI())->SetDespawnTime(DespawnTime);
+ ENSURE_AI(SmartAI, me->AI())->mEscortQuestID = quest;
+ ENSURE_AI(SmartAI, me->AI())->SetDespawnTime(DespawnTime);
break;
}
case SMART_ACTION_WP_PAUSE:
@@ -1363,7 +1365,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
break;
uint32 delay = e.action.wpPause.delay;
- CAST_AI(SmartAI, me->AI())->PausePath(delay, e.GetEventType() == SMART_EVENT_WAYPOINT_REACHED ? false : true);
+ ENSURE_AI(SmartAI, me->AI())->PausePath(delay, e.GetEventType() == SMART_EVENT_WAYPOINT_REACHED ? false : true);
break;
}
case SMART_ACTION_WP_STOP:
@@ -1373,8 +1375,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
uint32 DespawnTime = e.action.wpStop.despawnTime;
uint32 quest = e.action.wpStop.quest;
- bool fail = e.action.wpStop.fail;
- CAST_AI(SmartAI, me->AI())->StopPath(DespawnTime, quest, fail);
+ bool fail = e.action.wpStop.fail != 0;
+ ENSURE_AI(SmartAI, me->AI())->StopPath(DespawnTime, quest, fail);
break;
}
case SMART_ACTION_WP_RESUME:
@@ -1382,7 +1384,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (!IsSmart())
break;
- CAST_AI(SmartAI, me->AI())->ResumePath();
+ ENSURE_AI(SmartAI, me->AI())->ResumePath();
break;
}
case SMART_ACTION_SET_ORIENTATION:
@@ -1611,7 +1613,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
break;
float attackDistance = float(e.action.setRangedMovement.distance);
- float attackAngle = float(e.action.setRangedMovement.angle) / 180.0f * M_PI;
+ float attackAngle = float(e.action.setRangedMovement.angle) / 180.0f * float(M_PI);
ObjectList* targets = GetTargets(e, unit);
if (targets)
@@ -1619,7 +1621,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
for (ObjectList::iterator itr = targets->begin(); itr != targets->end(); ++itr)
if (Creature* target = (*itr)->ToCreature())
if (IsSmart(target) && target->GetVictim())
- if (CAST_AI(SmartAI, target->AI())->CanCombatMove())
+ if (ENSURE_AI(SmartAI, target->AI())->CanCombatMove())
target->GetMotionMaster()->MoveChase(target->GetVictim(), attackDistance, attackAngle);
delete targets;
@@ -1641,12 +1643,12 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (Creature* target = (*itr)->ToCreature())
{
if (IsSmart(target))
- CAST_AI(SmartAI, target->AI())->SetScript9(e, e.action.timedActionList.id, GetLastInvoker());
+ ENSURE_AI(SmartAI, target->AI())->SetScript9(e, e.action.timedActionList.id, GetLastInvoker());
}
else if (GameObject* goTarget = (*itr)->ToGameObject())
{
if (IsSmartGO(goTarget))
- CAST_AI(SmartGameObjectAI, goTarget->AI())->SetScript9(e, e.action.timedActionList.id, GetLastInvoker());
+ ENSURE_AI(SmartGameObjectAI, goTarget->AI())->SetScript9(e, e.action.timedActionList.id, GetLastInvoker());
}
}
@@ -1728,7 +1730,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
interruptedSpell = true;
}
- unit->CastSpell((*it)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED));
+ unit->CastSpell((*it)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED) != 0);
}
else
TC_LOG_DEBUG("scripts.ai", "Spell %u not cast because it has flag SMARTCAST_AURA_NOT_PRESENT and the target (Guid: " UI64FMTD " Entry: %u Type: %u) already has the aura", e.action.cast.spell, (*it)->GetGUID(), (*it)->GetEntry(), uint32((*it)->GetTypeId()));
@@ -1777,12 +1779,12 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (Creature* target = (*itr)->ToCreature())
{
if (IsSmart(target))
- CAST_AI(SmartAI, target->AI())->SetScript9(e, id, GetLastInvoker());
+ ENSURE_AI(SmartAI, target->AI())->SetScript9(e, id, GetLastInvoker());
}
else if (GameObject* goTarget = (*itr)->ToGameObject())
{
if (IsSmartGO(goTarget))
- CAST_AI(SmartGameObjectAI, goTarget->AI())->SetScript9(e, id, GetLastInvoker());
+ ENSURE_AI(SmartGameObjectAI, goTarget->AI())->SetScript9(e, id, GetLastInvoker());
}
}
@@ -1807,12 +1809,12 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (Creature* target = (*itr)->ToCreature())
{
if (IsSmart(target))
- CAST_AI(SmartAI, target->AI())->SetScript9(e, id, GetLastInvoker());
+ ENSURE_AI(SmartAI, target->AI())->SetScript9(e, id, GetLastInvoker());
}
else if (GameObject* goTarget = (*itr)->ToGameObject())
{
if (IsSmartGO(goTarget))
- CAST_AI(SmartGameObjectAI, goTarget->AI())->SetScript9(e, id, GetLastInvoker());
+ ENSURE_AI(SmartGameObjectAI, goTarget->AI())->SetScript9(e, id, GetLastInvoker());
}
}
@@ -1898,7 +1900,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
if (IsUnit(*itr))
- (*itr)->ToUnit()->InterruptNonMeleeSpells(e.action.interruptSpellCasting.withDelayed, e.action.interruptSpellCasting.spell_id, e.action.interruptSpellCasting.withInstant);
+ (*itr)->ToUnit()->InterruptNonMeleeSpells(e.action.interruptSpellCasting.withDelayed != 0, e.action.interruptSpellCasting.spell_id, e.action.interruptSpellCasting.withInstant != 0);
delete targets;
break;
@@ -2089,7 +2091,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
if (IsCreature(*itr))
- (*itr)->ToCreature()->setRegeneratingHealth(e.action.setHealthRegen.regenHealth);
+ (*itr)->ToCreature()->setRegeneratingHealth(e.action.setHealthRegen.regenHealth != 0);
delete targets;
break;
@@ -2102,7 +2104,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
if (IsCreature(*itr))
- (*itr)->ToCreature()->SetControlled(e.action.setRoot.root, UNIT_STATE_ROOT);
+ (*itr)->ToCreature()->SetControlled(e.action.setRoot.root != 0, UNIT_STATE_ROOT);
delete targets;
break;
@@ -2603,7 +2605,7 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder const& e, Unit* invoker /*
{
ThreatContainer::StorageType threatList = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator i = threatList.begin(); i != threatList.end(); ++i)
- if (Unit* temp = Unit::GetUnit(*me, (*i)->getUnitGuid()))
+ if (Unit* temp = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()))
l->push_back(temp);
}
break;
@@ -2611,7 +2613,7 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder const& e, Unit* invoker /*
case SMART_TARGET_CLOSEST_ENEMY:
{
if (me)
- if (Unit* target = me->SelectNearestTarget(e.target.closestAttackable.maxDist, e.target.closestAttackable.playerOnly))
+ if (Unit* target = me->SelectNearestTarget(e.target.closestAttackable.maxDist, e.target.closestAttackable.playerOnly != 0))
l->push_back(target);
break;
@@ -2619,7 +2621,7 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder const& e, Unit* invoker /*
case SMART_TARGET_CLOSEST_FRIENDLY:
{
if (me)
- if (Unit* target = DoFindClosestFriendlyInRange(e.target.closestFriendly.maxDist, e.target.closestFriendly.playerOnly))
+ if (Unit* target = DoFindClosestFriendlyInRange(e.target.closestFriendly.maxDist, e.target.closestFriendly.playerOnly != 0))
l->push_back(target);
break;
@@ -2691,9 +2693,9 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
}
case SMART_EVENT_TARGET_HEALTH_PCT:
{
- if (!me || !me->IsInCombat() || !me->GetVictim() || !me->GetVictim()->GetMaxHealth())
+ if (!me || !me->IsInCombat() || !me->GetVictim() || !me->EnsureVictim()->GetMaxHealth())
return;
- uint32 perc = (uint32)me->GetVictim()->GetHealthPct();
+ uint32 perc = (uint32)me->EnsureVictim()->GetHealthPct();
if (perc > e.event.minMaxRepeat.max || perc < e.event.minMaxRepeat.min)
return;
ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax, me->GetVictim());
@@ -2711,9 +2713,9 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
}
case SMART_EVENT_TARGET_MANA_PCT:
{
- if (!me || !me->IsInCombat() || !me->GetVictim() || !me->GetVictim()->GetMaxPower(POWER_MANA))
+ if (!me || !me->IsInCombat() || !me->GetVictim() || !me->EnsureVictim()->GetMaxPower(POWER_MANA))
return;
- uint32 perc = uint32(100.0f * me->GetVictim()->GetPower(POWER_MANA) / me->GetVictim()->GetMaxPower(POWER_MANA));
+ uint32 perc = uint32(100.0f * me->EnsureVictim()->GetPower(POWER_MANA) / me->EnsureVictim()->GetMaxPower(POWER_MANA));
if (perc > e.event.minMaxRepeat.max || perc < e.event.minMaxRepeat.min)
return;
ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax, me->GetVictim());
@@ -2793,7 +2795,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
{
if (!me || !me->GetVictim())
return;
- uint32 count = me->GetVictim()->GetAuraCount(e.event.aura.spell);
+ uint32 count = me->EnsureVictim()->GetAuraCount(e.event.aura.spell);
if (count < e.event.aura.count)
return;
ProcessTimedAction(e, e.event.aura.repeatMin, e.event.aura.repeatMax);
@@ -3212,7 +3214,7 @@ void SmartScript::InitTimer(SmartScriptHolder& e)
void SmartScript::RecalcTimer(SmartScriptHolder& e, uint32 min, uint32 max)
{
// min/max was checked at loading!
- e.timer = urand(uint32(min), uint32(max));
+ e.timer = urand(min, max);
e.active = e.timer ? false : true;
}
@@ -3463,16 +3465,10 @@ void SmartScript::OnInitialize(WorldObject* obj, AreaTriggerEntry const* at)
void SmartScript::OnMoveInLineOfSight(Unit* who)
{
- ProcessEventsFor(SMART_EVENT_OOC_LOS, who);
-
if (!me)
return;
- if (me->GetVictim())
- return;
-
- ProcessEventsFor(SMART_EVENT_IC_LOS, who);
-
+ ProcessEventsFor(me->IsInCombat() ? SMART_EVENT_IC_LOS : SMART_EVENT_OOC_LOS, who);
}
/*
diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h
index 244728a3037..0931756a026 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.h
+++ b/src/server/game/AI/SmartScripts/SmartScript.h
@@ -216,7 +216,7 @@ class SmartScript
}
void DecPhase(int32 p = 1) { mEventPhase -= (mEventPhase < (uint32)p ? (uint32)p - mEventPhase : (uint32)p); }
- bool IsInPhase(uint32 p) const { return (1 << (mEventPhase - 1)) & p; }
+ bool IsInPhase(uint32 p) const { return ((1 << (mEventPhase - 1)) & p) != 0; }
void SetPhase(uint32 p = 0) { mEventPhase = p; }
SmartAIEventList mEvents;
@@ -231,7 +231,7 @@ class SmartScript
SmartScriptType mScriptType;
uint32 mEventPhase;
- UNORDERED_MAP<int32, int32> mStoredDecimals;
+ std::unordered_map<int32, int32> mStoredDecimals;
uint32 mPathId;
SmartAIEventList mStoredEvents;
std::list<uint32>mRemIDs;
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index 993e6967ba5..2e8453904a1 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -37,7 +37,7 @@ void SmartWaypointMgr::LoadFromDB()
{
uint32 oldMSTime = getMSTime();
- for (UNORDERED_MAP<uint32, WPPath*>::iterator itr = waypoint_map.begin(); itr != waypoint_map.end(); ++itr)
+ for (std::unordered_map<uint32, WPPath*>::iterator itr = waypoint_map.begin(); itr != waypoint_map.end(); ++itr)
{
for (WPPath::iterator pathItr = itr->second->begin(); pathItr != itr->second->end(); ++pathItr)
delete pathItr->second;
@@ -96,7 +96,7 @@ void SmartWaypointMgr::LoadFromDB()
SmartWaypointMgr::~SmartWaypointMgr()
{
- for (UNORDERED_MAP<uint32, WPPath*>::iterator itr = waypoint_map.begin(); itr != waypoint_map.end(); ++itr)
+ for (std::unordered_map<uint32, WPPath*>::iterator itr = waypoint_map.begin(); itr != waypoint_map.end(); ++itr)
{
for (WPPath::iterator pathItr = itr->second->begin(); pathItr != itr->second->end(); ++pathItr)
delete pathItr->second;
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index ac67fac0bfd..fbcffb47b7c 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -452,7 +452,7 @@ enum SMART_ACTION
SMART_ACTION_CALL_KILLEDMONSTER = 33, // CreatureId,
SMART_ACTION_SET_INST_DATA = 34, // Field, Data
SMART_ACTION_SET_INST_DATA64 = 35, // Field,
- SMART_ACTION_UPDATE_TEMPLATE = 36, // Entry, Team
+ SMART_ACTION_UPDATE_TEMPLATE = 36, // Entry
SMART_ACTION_DIE = 37, // No Params
SMART_ACTION_SET_IN_COMBAT_WITH_ZONE = 38, // No Params
SMART_ACTION_CALL_FOR_HELP = 39, // Radius, With Emote
@@ -701,7 +701,6 @@ struct SmartAction
struct
{
uint32 creature;
- uint32 team;
} updateTemplate;
struct
@@ -1339,7 +1338,7 @@ struct SmartScriptHolder
bool enableTimed;
};
-typedef UNORDERED_MAP<uint32, WayPoint*> WPPath;
+typedef std::unordered_map<uint32, WayPoint*> WPPath;
typedef std::list<WorldObject*> ObjectList;
typedef std::list<uint64> GuidList;
@@ -1393,33 +1392,39 @@ public:
delete m_guidList;
}
};
-typedef UNORDERED_MAP<uint32, ObjectGuidList*> ObjectListMap;
+typedef std::unordered_map<uint32, ObjectGuidList*> ObjectListMap;
class SmartWaypointMgr
{
- friend class ACE_Singleton<SmartWaypointMgr, ACE_Null_Mutex>;
- SmartWaypointMgr() { }
- public:
+ private:
+ SmartWaypointMgr() { }
~SmartWaypointMgr();
+ public:
+ static SmartWaypointMgr* instance()
+ {
+ static SmartWaypointMgr instance;
+ return &instance;
+ }
+
void LoadFromDB();
WPPath* GetPath(uint32 id)
{
if (waypoint_map.find(id) != waypoint_map.end())
return waypoint_map[id];
- else return 0;
+ else return nullptr;
}
private:
- UNORDERED_MAP<uint32, WPPath*> waypoint_map;
+ std::unordered_map<uint32, WPPath*> waypoint_map;
};
// all events for a single entry
typedef std::vector<SmartScriptHolder> SmartAIEventList;
// all events for all entries / guids
-typedef UNORDERED_MAP<int32, SmartAIEventList> SmartAIEventMap;
+typedef std::unordered_map<int32, SmartAIEventList> SmartAIEventMap;
// Helper Stores
typedef std::map<uint32 /*entry*/, std::pair<uint32 /*spellId*/, SpellEffIndex /*effIndex*/> > CacheSpellContainer;
@@ -1427,11 +1432,17 @@ typedef std::pair<CacheSpellContainer::const_iterator, CacheSpellContainer::cons
class SmartAIMgr
{
- friend class ACE_Singleton<SmartAIMgr, ACE_Null_Mutex>;
- SmartAIMgr() { }
- public:
+ private:
+ SmartAIMgr() { }
~SmartAIMgr() { }
+ public:
+ static SmartAIMgr* instance()
+ {
+ static SmartAIMgr instance;
+ return &instance;
+ }
+
void LoadSmartAIFromDB();
SmartAIEventList GetScript(int32 entry, SmartScriptType type)
@@ -1599,6 +1610,6 @@ class SmartAIMgr
CacheSpellContainer KillCreditSpellStore;
};
-#define sSmartScriptMgr ACE_Singleton<SmartAIMgr, ACE_Null_Mutex>::instance()
-#define sSmartWaypointMgr ACE_Singleton<SmartWaypointMgr, ACE_Null_Mutex>::instance()
+#define sSmartScriptMgr SmartAIMgr::instance()
+#define sSmartWaypointMgr SmartWaypointMgr::instance()
#endif
diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp
index 8a5c6937ca0..ff30fe7ba35 100644
--- a/src/server/game/Accounts/AccountMgr.cpp
+++ b/src/server/game/Accounts/AccountMgr.cpp
@@ -21,6 +21,7 @@
#include "DatabaseEnv.h"
#include "ObjectAccessor.h"
#include "Player.h"
+#include "ScriptMgr.h"
#include "Util.h"
#include "SHA1.h"
#include "WorldSession.h"
@@ -166,10 +167,16 @@ AccountOpResult AccountMgr::ChangePassword(uint32 accountId, std::string newPass
std::string username;
if (!GetName(accountId, username))
+ {
+ sScriptMgr->OnFailedPasswordChange(accountId);
return AOR_NAME_NOT_EXIST; // account doesn't exist
+ }
if (utf8length(newPassword) > MAX_ACCOUNT_STR)
+ {
+ sScriptMgr->OnFailedPasswordChange(accountId);
return AOR_PASS_TOO_LONG;
+ }
normalizeString(username);
normalizeString(newPassword);
@@ -189,6 +196,7 @@ AccountOpResult AccountMgr::ChangePassword(uint32 accountId, std::string newPass
LoginDatabase.Execute(stmt);
+ sScriptMgr->OnPasswordChange(accountId);
return AOR_OK;
}
@@ -197,10 +205,16 @@ AccountOpResult AccountMgr::ChangeEmail(uint32 accountId, std::string newEmail)
std::string username;
if (!GetName(accountId, username))
+ {
+ sScriptMgr->OnFailedEmailChange(accountId);
return AOR_NAME_NOT_EXIST; // account doesn't exist
+ }
if (utf8length(newEmail) > MAX_EMAIL_STR)
+ {
+ sScriptMgr->OnFailedEmailChange(accountId);
return AOR_EMAIL_TOO_LONG;
+ }
normalizeString(username);
normalizeString(newEmail);
@@ -212,6 +226,7 @@ AccountOpResult AccountMgr::ChangeEmail(uint32 accountId, std::string newEmail)
LoginDatabase.Execute(stmt);
+ sScriptMgr->OnEmailChange(accountId);
return AOR_OK;
}
@@ -220,10 +235,16 @@ AccountOpResult AccountMgr::ChangeRegEmail(uint32 accountId, std::string newEmai
std::string username;
if (!GetName(accountId, username))
+ {
+ sScriptMgr->OnFailedEmailChange(accountId);
return AOR_NAME_NOT_EXIST; // account doesn't exist
+ }
if (utf8length(newEmail) > MAX_EMAIL_STR)
+ {
+ sScriptMgr->OnFailedEmailChange(accountId);
return AOR_EMAIL_TOO_LONG;
+ }
normalizeString(username);
normalizeString(newEmail);
@@ -235,6 +256,7 @@ AccountOpResult AccountMgr::ChangeRegEmail(uint32 accountId, std::string newEmai
LoginDatabase.Execute(stmt);
+ sScriptMgr->OnEmailChange(accountId);
return AOR_OK;
}
@@ -348,13 +370,8 @@ bool AccountMgr::normalizeString(std::string& utf8String)
size_t maxLength = MAX_ACCOUNT_STR;
if (!Utf8toWStr(utf8String, buffer, maxLength))
return false;
-#ifdef _MSC_VER
-#pragma warning(disable: 4996)
-#endif
+
std::transform(&buffer[0], buffer+maxLength, &buffer[0], wcharToUpperOnlyLatin);
-#ifdef _MSC_VER
-#pragma warning(default: 4996)
-#endif
return WStrToUtf8(buffer, maxLength, utf8String);
}
@@ -522,7 +539,7 @@ bool AccountMgr::HasPermission(uint32 accountId, uint32 permissionId, uint32 rea
return false;
}
- rbac::RBACData rbac(accountId, "", realmId);
+ rbac::RBACData rbac(accountId, "", realmId, GetSecurity(accountId));
rbac.LoadFromDB();
bool hasPermission = rbac.HasPermission(permissionId);
diff --git a/src/server/game/Accounts/AccountMgr.h b/src/server/game/Accounts/AccountMgr.h
index b3012ace177..c4b4bd93728 100644
--- a/src/server/game/Accounts/AccountMgr.h
+++ b/src/server/game/Accounts/AccountMgr.h
@@ -20,7 +20,6 @@
#define _ACCMGR_H
#include "RBAC.h"
-#include <ace/Singleton.h>
enum AccountOpResult
{
@@ -51,13 +50,17 @@ typedef std::map<uint8, rbac::RBACPermissionContainer> RBACDefaultPermissionsCon
class AccountMgr
{
- friend class ACE_Singleton<AccountMgr, ACE_Null_Mutex>;
-
private:
AccountMgr();
~AccountMgr();
public:
+ static AccountMgr* instance()
+ {
+ static AccountMgr instance;
+ return &instance;
+ }
+
AccountOpResult CreateAccount(std::string username, std::string password, std::string email);
static AccountOpResult DeleteAccount(uint32 accountId);
static AccountOpResult ChangeUsername(uint32 accountId, std::string newUsername, std::string newPassword);
@@ -95,5 +98,5 @@ class AccountMgr
rbac::RBACDefaultPermissionsContainer _defaultPermissions;
};
-#define sAccountMgr ACE_Singleton<AccountMgr, ACE_Null_Mutex>::instance()
+#define sAccountMgr AccountMgr::instance()
#endif
diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h
index dc5a2768668..855ffd51bb8 100644
--- a/src/server/game/Accounts/RBAC.h
+++ b/src/server/game/Accounts/RBAC.h
@@ -427,8 +427,8 @@ enum RBACPermissions
RBAC_PERM_COMMAND_REPAIRITEMS = 521,
RBAC_PERM_COMMAND_RESPAWN = 522,
RBAC_PERM_COMMAND_REVIVE = 523,
- RBAC_PERM_COMMAND_SAVE = 524,
- RBAC_PERM_COMMAND_SAVEALL = 525,
+ RBAC_PERM_COMMAND_SAVEALL = 524,
+ RBAC_PERM_COMMAND_SAVE = 525,
RBAC_PERM_COMMAND_SETSKILL = 526,
RBAC_PERM_COMMAND_SHOWAREA = 527,
RBAC_PERM_COMMAND_SUMMON = 528,
@@ -517,7 +517,7 @@ enum RBACPermissions
RBAC_PERM_COMMAND_RELOAD_ALL = 611,
RBAC_PERM_COMMAND_RELOAD_ALL_ACHIEVEMENT = 612,
RBAC_PERM_COMMAND_RELOAD_ALL_AREA = 613,
- RBAC_PERM_UNUSED_614 = 614, // unused
+ RBAC_PERM_COMMAND_RELOAD_BROADCAST_TEXT = 614,
RBAC_PERM_COMMAND_RELOAD_ALL_GOSSIP = 615,
RBAC_PERM_COMMAND_RELOAD_ALL_ITEM = 616,
RBAC_PERM_COMMAND_RELOAD_ALL_LOCALES = 617,
@@ -534,7 +534,7 @@ enum RBACPermissions
RBAC_PERM_COMMAND_RELOAD_COMMAND = 628,
RBAC_PERM_COMMAND_RELOAD_CONDITIONS = 629,
RBAC_PERM_COMMAND_RELOAD_CONFIG = 630,
- RBAC_PERM_UNUSED_631 = 631, // unused
+ RBAC_PERM_COMMAND_RELOAD_BATTLEGROUND_TEMPLATE = 631,
RBAC_PERM_UNUSED_632 = 632, // unused
RBAC_PERM_COMMAND_RELOAD_CREATURE_LINKED_RESPAWN = 633,
RBAC_PERM_COMMAND_RELOAD_CREATURE_LOOT_TEMPLATE = 634,
@@ -549,10 +549,10 @@ enum RBACPermissions
RBAC_PERM_COMMAND_RELOAD_EVENT_SCRIPTS = 643,
RBAC_PERM_COMMAND_RELOAD_FISHING_LOOT_TEMPLATE = 644,
RBAC_PERM_COMMAND_RELOAD_GAME_GRAVEYARD_ZONE = 645,
- RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTENDER = 646,
- RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUEST_LOOT_TEMPLATE = 647,
- RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTSTARTER = 648,
- RBAC_PERM_COMMAND_RELOAD_GAME_TELE = 649,
+ RBAC_PERM_COMMAND_RELOAD_GAME_TELE = 646,
+ RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTENDER = 647,
+ RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUEST_LOOT_TEMPLATE = 648,
+ RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTSTARTER = 649,
RBAC_PERM_COMMAND_RELOAD_GM_TICKETS = 650,
RBAC_PERM_COMMAND_RELOAD_GOSSIP_MENU = 651,
RBAC_PERM_COMMAND_RELOAD_GOSSIP_MENU_OPTION = 652,
@@ -585,34 +585,34 @@ enum RBACPermissions
RBAC_PERM_COMMAND_RELOAD_QUEST_TEMPLATE = 679,
RBAC_PERM_COMMAND_RELOAD_RBAC = 680,
RBAC_PERM_COMMAND_RELOAD_REFERENCE_LOOT_TEMPLATE = 681,
- RBAC_PERM_COMMAND_RELOAD_REPUTATION_REWARD_RATE = 682,
- RBAC_PERM_COMMAND_RELOAD_RESERVED_NAME = 683,
- RBAC_PERM_COMMAND_RELOAD_SKILL_DISCOVERY_TEMPLATE = 684,
- RBAC_PERM_COMMAND_RELOAD_SKILL_EXTRA_ITEM_TEMPLATE = 685,
- RBAC_PERM_COMMAND_RELOAD_SKILL_FISHING_BASE_LEVEL = 686,
- RBAC_PERM_COMMAND_RELOAD_SKINNING_LOOT_TEMPLATE = 687,
- RBAC_PERM_COMMAND_RELOAD_SMART_SCRIPTS = 688,
- RBAC_PERM_COMMAND_RELOAD_SPELL_AREA = 689,
- RBAC_PERM_COMMAND_RELOAD_SPELL_BONUS_DATA = 690,
- RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP = 691,
- RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP_STACK_RULES = 692,
- RBAC_PERM_COMMAND_RELOAD_SPELL_LEARN_SPELL = 693,
- RBAC_PERM_COMMAND_RELOAD_SPELL_LINKED_SPELL = 694,
+ RBAC_PERM_COMMAND_RELOAD_RESERVED_NAME = 682,
+ RBAC_PERM_COMMAND_RELOAD_REPUTATION_REWARD_RATE = 683,
+ RBAC_PERM_COMMAND_RELOAD_SPILLOVER_TEMPLATE = 684,
+ RBAC_PERM_COMMAND_RELOAD_SKILL_DISCOVERY_TEMPLATE = 685,
+ RBAC_PERM_COMMAND_RELOAD_SKILL_EXTRA_ITEM_TEMPLATE = 686,
+ RBAC_PERM_COMMAND_RELOAD_SKILL_FISHING_BASE_LEVEL = 687,
+ RBAC_PERM_COMMAND_RELOAD_SKINNING_LOOT_TEMPLATE = 688,
+ RBAC_PERM_COMMAND_RELOAD_SMART_SCRIPTS = 689,
+ RBAC_PERM_COMMAND_RELOAD_SPELL_REQUIRED = 690,
+ RBAC_PERM_COMMAND_RELOAD_SPELL_AREA = 691,
+ RBAC_PERM_COMMAND_RELOAD_SPELL_BONUS_DATA = 692,
+ RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP = 693,
+ RBAC_PERM_COMMAND_RELOAD_SPELL_LEARN_SPELL = 694,
RBAC_PERM_COMMAND_RELOAD_SPELL_LOOT_TEMPLATE = 695,
- RBAC_PERM_COMMAND_RELOAD_SPELL_PET_AURAS = 696,
- RBAC_PERM_COMMAND_RELOAD_SPELL_PROC = 697,
+ RBAC_PERM_COMMAND_RELOAD_SPELL_LINKED_SPELL = 696,
+ RBAC_PERM_COMMAND_RELOAD_SPELL_PET_AURAS = 697,
RBAC_PERM_COMMAND_RELOAD_SPELL_PROC_EVENT = 698,
- RBAC_PERM_COMMAND_RELOAD_SPELL_REQUIRED = 699,
+ RBAC_PERM_COMMAND_RELOAD_SPELL_PROC = 699,
RBAC_PERM_COMMAND_RELOAD_SPELL_SCRIPTS = 700,
RBAC_PERM_COMMAND_RELOAD_SPELL_TARGET_POSITION = 701,
RBAC_PERM_COMMAND_RELOAD_SPELL_THREATS = 702,
- RBAC_PERM_COMMAND_RELOAD_SPILLOVER_TEMPLATE = 703,
+ RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP_STACK_RULES = 703,
RBAC_PERM_COMMAND_RELOAD_TRINITY_STRING = 704,
- RBAC_PERM_COMMAND_RELOAD_VEHICLE_ACCESORY = 705,
- RBAC_PERM_COMMAND_RELOAD_VEHICLE_TEMPLATE_ACCESSORY = 706,
- RBAC_PERM_COMMAND_RELOAD_WARDEN_ACTION = 707,
- RBAC_PERM_COMMAND_RELOAD_WAYPOINT_DATA = 708,
- RBAC_PERM_COMMAND_RELOAD_WAYPOINT_SCRIPTS = 709,
+ RBAC_PERM_COMMAND_RELOAD_WARDEN_ACTION = 705,
+ RBAC_PERM_COMMAND_RELOAD_WAYPOINT_SCRIPTS = 706,
+ RBAC_PERM_COMMAND_RELOAD_WAYPOINT_DATA = 707,
+ RBAC_PERM_COMMAND_RELOAD_VEHICLE_ACCESORY = 708,
+ RBAC_PERM_COMMAND_RELOAD_VEHICLE_TEMPLATE_ACCESSORY = 709,
RBAC_PERM_COMMAND_RESET = 710,
RBAC_PERM_COMMAND_RESET_ACHIEVEMENTS = 711,
RBAC_PERM_COMMAND_RESET_HONOR = 712,
@@ -702,7 +702,7 @@ class RBACPermission
{
public:
RBACPermission(uint32 id = 0, std::string const& name = ""):
- _id(id), _name(name) { }
+ _id(id), _name(name), _perms() { }
/// Gets the Name of the Object
std::string const& GetName() const { return _name; }
@@ -737,7 +737,8 @@ class RBACData
{
public:
RBACData(uint32 id, std::string const& name, int32 realmId, uint8 secLevel = 255):
- _id(id), _name(name), _realmId(realmId), _secLevel(secLevel) { }
+ _id(id), _name(name), _realmId(realmId), _secLevel(secLevel),
+ _grantedPerms(), _deniedPerms(), _globalPerms() { }
/// Gets the Name of the Object
std::string const& GetName() const { return _name; }
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index a99da4050f6..547cd9a8502 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -47,22 +47,23 @@ namespace Trinity
class AchievementChatBuilder
{
public:
- AchievementChatBuilder(Player const& player, ChatMsg msgtype, int32 textId, uint32 ach_id)
- : i_player(player), i_msgtype(msgtype), i_textId(textId), i_achievementId(ach_id) { }
+ AchievementChatBuilder(Player const* player, ChatMsg msgType, uint32 textId, uint32 achievementId)
+ : _player(player), _msgType(msgType), _textId(textId), _achievementId(achievementId) { }
- void operator()(WorldPacket& data, LocaleConstant loc_idx)
+ void operator()(WorldPacket& data, LocaleConstant locale)
{
- std::string text = sObjectMgr->GetTrinityString(i_textId, loc_idx);
- ChatHandler::BuildChatPacket(data, i_msgtype, LANG_UNIVERSAL, &i_player, &i_player, text, i_achievementId);
+ BroadcastText const* bct = sObjectMgr->GetBroadcastText(_textId);
+
+ ChatHandler::BuildChatPacket(data, _msgType, bct ? Language(bct->Language) : LANG_UNIVERSAL, _player, _player, bct ? bct->GetText(locale, _player->getGender()) : "", _achievementId);
}
private:
- Player const& i_player;
- ChatMsg i_msgtype;
- int32 i_textId;
- uint32 i_achievementId;
+ Player const* _player;
+ ChatMsg _msgType;
+ uint32 _textId;
+ uint32 _achievementId;
};
-} // namespace Trinity
+} // namespace Trinity
bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria)
{
@@ -424,7 +425,7 @@ bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Un
{
time_t birthday_start = time_t(sWorld->getIntConfig(CONFIG_BIRTHDAY_TIME));
tm birthday_tm;
- ACE_OS::localtime_r(&birthday_start, &birthday_tm);
+ localtime_r(&birthday_start, &birthday_tm);
// exactly N birthday
birthday_tm.tm_year += birthday_login.nth_birthday;
@@ -660,9 +661,9 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement)
if (Guild* guild = sGuildMgr->GetGuildById(GetPlayer()->GetGuildId()))
{
- Trinity::AchievementChatBuilder say_builder(*GetPlayer(), CHAT_MSG_GUILD_ACHIEVEMENT, LANG_ACHIEVEMENT_EARNED, achievement->ID);
- Trinity::LocalizedPacketDo<Trinity::AchievementChatBuilder> say_do(say_builder);
- guild->BroadcastWorker(say_do, GetPlayer());
+ Trinity::AchievementChatBuilder _builder(GetPlayer(), CHAT_MSG_GUILD_ACHIEVEMENT, BROADCAST_TEXT_ACHIEVEMENT_EARNED, achievement->ID);
+ Trinity::LocalizedPacketDo<Trinity::AchievementChatBuilder> _localizer(_builder);
+ guild->BroadcastWorker(_localizer, GetPlayer());
}
if (achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_KILL | ACHIEVEMENT_FLAG_REALM_FIRST_REACH))
@@ -678,16 +679,10 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement)
// if player is in world he can tell his friends about new achievement
else if (GetPlayer()->IsInWorld())
{
- CellCoord p = Trinity::ComputeCellCoord(GetPlayer()->GetPositionX(), GetPlayer()->GetPositionY());
-
- Cell cell(p);
- cell.SetNoCreate();
-
- Trinity::AchievementChatBuilder say_builder(*GetPlayer(), CHAT_MSG_ACHIEVEMENT, LANG_ACHIEVEMENT_EARNED, achievement->ID);
- Trinity::LocalizedPacketDo<Trinity::AchievementChatBuilder> say_do(say_builder);
- Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::AchievementChatBuilder> > say_worker(GetPlayer(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), say_do);
- TypeContainerVisitor<Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::AchievementChatBuilder> >, WorldTypeMapContainer > message(say_worker);
- cell.Visit(p, message, *GetPlayer()->GetMap(), *GetPlayer(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY));
+ Trinity::AchievementChatBuilder _builder(GetPlayer(), CHAT_MSG_ACHIEVEMENT, BROADCAST_TEXT_ACHIEVEMENT_EARNED, achievement->ID);
+ Trinity::LocalizedPacketDo<Trinity::AchievementChatBuilder> _localizer(_builder);
+ Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::AchievementChatBuilder> > _worker(GetPlayer(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), _localizer);
+ GetPlayer()->VisitNearbyWorldObject(sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), _worker);
}
WorldPacket data(SMSG_ACHIEVEMENT_EARNED, 8+4+8);
@@ -1031,7 +1026,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
continue;
//FIXME: work only for instances where max == min for players
- if (((InstanceMap*)map)->GetMaxPlayers() != achievementCriteria->death_in_dungeon.manLimit)
+ if (map->ToInstanceMap()->GetMaxPlayers() != achievementCriteria->death_in_dungeon.manLimit)
continue;
SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
break;
@@ -1284,7 +1279,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
// check item level and quality via achievement_criteria_data
AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data || !data->Meets(GetPlayer(), 0, miscValue1))
+ if (!data || !data->Meets(GetPlayer(), nullptr, miscValue1))
continue;
SetCriteriaProgress(achievementCriteria, 1);
@@ -1306,7 +1301,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
// check item level via achievement_criteria_data
AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data || !data->Meets(GetPlayer(), 0, pProto->ItemLevel))
+ if (!data || !data->Meets(GetPlayer(), nullptr, pProto->ItemLevel))
continue;
SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
@@ -2589,7 +2584,7 @@ void AchievementGlobalMgr::LoadRewardLocales()
AchievementRewardLocale& data = m_achievementRewardLocales[entry];
- for (int i = 1; i < TOTAL_LOCALES; ++i)
+ for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
{
LocaleConstant locale = (LocaleConstant) i;
ObjectMgr::AddLocaleString(fields[1 + 2 * (i - 1)].GetString(), locale, data.subject);
@@ -2598,7 +2593,7 @@ void AchievementGlobalMgr::LoadRewardLocales()
}
while (result->NextRow());
- TC_LOG_INFO("server.loading", ">> Loaded %lu achievement reward locale strings in %u ms", (unsigned long)m_achievementRewardLocales.size(), GetMSTimeDiffToNow(oldMSTime));
+ TC_LOG_INFO("server.loading", ">> Loaded %u achievement reward locale strings in %u ms", uint32(m_achievementRewardLocales.size()), GetMSTimeDiffToNow(oldMSTime));
}
AchievementEntry const* AchievementGlobalMgr::GetAchievement(uint32 achievementId) const
diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h
index 0a3e711e2ef..219a8fd52fb 100644
--- a/src/server/game/Achievements/AchievementMgr.h
+++ b/src/server/game/Achievements/AchievementMgr.h
@@ -23,7 +23,6 @@
#include <string>
#include "Common.h"
-#include <ace/Singleton.h>
#include "DatabaseEnv.h"
#include "DBCEnums.h"
#include "DBCStores.h"
@@ -35,8 +34,8 @@ class WorldPacket;
typedef std::vector<AchievementCriteriaEntry const*> AchievementCriteriaEntryList;
typedef std::vector<AchievementEntry const*> AchievementEntryList;
-typedef UNORDERED_MAP<uint32, AchievementCriteriaEntryList> AchievementCriteriaListByAchievement;
-typedef UNORDERED_MAP<uint32, AchievementEntryList> AchievementListByReferencedId;
+typedef std::unordered_map<uint32, AchievementCriteriaEntryList> AchievementCriteriaListByAchievement;
+typedef std::unordered_map<uint32, AchievementEntryList> AchievementListByReferencedId;
struct CriteriaProgress
{
@@ -236,7 +235,7 @@ struct AchievementReward
uint32 mailTemplate;
};
-typedef UNORDERED_MAP<uint32, AchievementReward> AchievementRewards;
+typedef std::unordered_map<uint32, AchievementReward> AchievementRewards;
struct AchievementRewardLocale
{
@@ -244,7 +243,7 @@ struct AchievementRewardLocale
std::vector<std::string> text;
};
-typedef UNORDERED_MAP<uint32, AchievementRewardLocale> AchievementRewardLocales;
+typedef std::unordered_map<uint32, AchievementRewardLocale> AchievementRewardLocales;
struct CompletedAchievementData
{
@@ -252,8 +251,8 @@ struct CompletedAchievementData
bool changed;
};
-typedef UNORDERED_MAP<uint32, CriteriaProgress> CriteriaProgressMap;
-typedef UNORDERED_MAP<uint32, CompletedAchievementData> CompletedAchievementMap;
+typedef std::unordered_map<uint32, CriteriaProgress> CriteriaProgressMap;
+typedef std::unordered_map<uint32, CompletedAchievementData> CompletedAchievementMap;
enum ProgressType
{
@@ -305,11 +304,16 @@ class AchievementMgr
class AchievementGlobalMgr
{
- friend class ACE_Singleton<AchievementGlobalMgr, ACE_Null_Mutex>;
AchievementGlobalMgr() { }
~AchievementGlobalMgr() { }
public:
+ static AchievementGlobalMgr* instance()
+ {
+ static AchievementGlobalMgr instance;
+ return &instance;
+ }
+
AchievementCriteriaEntryList const& GetAchievementCriteriaByType(AchievementCriteriaTypes type) const
{
return m_AchievementCriteriasByType[type];
@@ -389,6 +393,6 @@ class AchievementGlobalMgr
AchievementRewardLocales m_achievementRewardLocales;
};
-#define sAchievementMgr ACE_Singleton<AchievementGlobalMgr, ACE_Null_Mutex>::instance()
+#define sAchievementMgr AchievementGlobalMgr::instance()
#endif
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
index 29d80f5fa6b..f4699f0519e 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
@@ -702,7 +702,7 @@ bool AuctionEntry::LoadFromDB(Field* fields)
return false;
}
- factionTemplateId = auctioneerInfo->faction_A;
+ factionTemplateId = auctioneerInfo->faction;
auctionHouseEntry = AuctionHouseMgr::GetAuctionHouseEntry(factionTemplateId);
if (!auctionHouseEntry)
{
@@ -825,7 +825,7 @@ bool AuctionEntry::LoadFromFieldList(Field* fields)
return false;
}
- factionTemplateId = auctioneerInfo->faction_A;
+ factionTemplateId = auctioneerInfo->faction;
auctionHouseEntry = AuctionHouseMgr::GetAuctionHouseEntry(factionTemplateId);
if (!auctionHouseEntry)
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h
index 506c4bea0c5..597da13cb1b 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.h
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h
@@ -19,8 +19,6 @@
#ifndef _AUCTION_HOUSE_MGR_H
#define _AUCTION_HOUSE_MGR_H
-#include <ace/Singleton.h>
-
#include "Common.h"
#include "DatabaseEnv.h"
#include "DBCStructure.h"
@@ -137,15 +135,18 @@ class AuctionHouseObject
class AuctionHouseMgr
{
- friend class ACE_Singleton<AuctionHouseMgr, ACE_Null_Mutex>;
-
private:
AuctionHouseMgr();
~AuctionHouseMgr();
public:
+ static AuctionHouseMgr* instance()
+ {
+ static AuctionHouseMgr instance;
+ return &instance;
+ }
- typedef UNORDERED_MAP<uint32, Item*> ItemMap;
+ typedef std::unordered_map<uint32, Item*> ItemMap;
AuctionHouseObject* GetAuctionsMap(uint32 factionTemplateId);
AuctionHouseObject* GetBidsMap(uint32 factionTemplateId);
@@ -193,6 +194,6 @@ class AuctionHouseMgr
ItemMap mAitems;
};
-#define sAuctionMgr ACE_Singleton<AuctionHouseMgr, ACE_Null_Mutex>::instance()
+#define sAuctionMgr AuctionHouseMgr::instance()
#endif
diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp
index d8674ed476b..b7ecd4b1e24 100644
--- a/src/server/game/Battlefield/Battlefield.cpp
+++ b/src/server/game/Battlefield/Battlefield.cpp
@@ -17,19 +17,18 @@
#include "Battlefield.h"
#include "BattlefieldMgr.h"
-#include "ObjectAccessor.h"
-#include "ObjectMgr.h"
-#include "Map.h"
-#include "MapManager.h"
-#include "Group.h"
-#include "WorldPacket.h"
-#include "GridNotifiers.h"
-#include "GridNotifiersImpl.h"
-#include "GridNotifiers.h"
-#include "GridNotifiersImpl.h"
+#include "Battleground.h"
#include "CellImpl.h"
#include "CreatureTextMgr.h"
+#include "GridNotifiers.h"
+#include "GridNotifiersImpl.h"
+#include "Group.h"
#include "GroupMgr.h"
+#include "Map.h"
+#include "MapManager.h"
+#include "ObjectAccessor.h"
+#include "ObjectMgr.h"
+#include "WorldPacket.h"
Battlefield::Battlefield()
{
@@ -54,7 +53,7 @@ Battlefield::Battlefield()
m_uiKickAfkPlayersTimer = 1000;
- m_LastResurectTimer = 30 * IN_MILLISECONDS;
+ m_LastResurrectTimer = 30 * IN_MILLISECONDS;
m_StartGroupingTimer = 0;
m_StartGrouping = false;
StalkerGuid = 0;
@@ -184,15 +183,15 @@ bool Battlefield::Update(uint32 diff)
}
- if (m_LastResurectTimer <= diff)
+ if (m_LastResurrectTimer <= diff)
{
for (uint8 i = 0; i < m_GraveyardList.size(); i++)
if (GetGraveyardById(i))
m_GraveyardList[i]->Resurrect();
- m_LastResurectTimer = RESURRECTION_INTERVAL;
+ m_LastResurrectTimer = RESURRECTION_INTERVAL;
}
else
- m_LastResurectTimer -= diff;
+ m_LastResurrectTimer -= diff;
return objective_changed;
}
@@ -201,7 +200,7 @@ void Battlefield::InvitePlayersInZoneToQueue()
{
for (uint8 team = 0; team < 2; ++team)
for (GuidSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr)
- if (Player* player = sObjectAccessor->FindPlayer(*itr))
+ if (Player* player = ObjectAccessor::FindPlayer(*itr))
InvitePlayerToQueue(player);
}
@@ -220,7 +219,7 @@ void Battlefield::InvitePlayersInQueueToWar()
{
for (GuidSet::const_iterator itr = m_PlayersInQueue[team].begin(); itr != m_PlayersInQueue[team].end(); ++itr)
{
- if (Player* player = sObjectAccessor->FindPlayer(*itr))
+ if (Player* player = ObjectAccessor::FindPlayer(*itr))
{
if (m_PlayersInWar[player->GetTeamId()].size() + m_InvitedPlayers[player->GetTeamId()].size() < m_MaxPlayer)
InvitePlayerToWar(player);
@@ -239,7 +238,7 @@ void Battlefield::InvitePlayersInZoneToWar()
for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team)
for (GuidSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr)
{
- if (Player* player = sObjectAccessor->FindPlayer(*itr))
+ if (Player* player = ObjectAccessor::FindPlayer(*itr))
{
if (m_PlayersInWar[player->GetTeamId()].count(player->GetGUID()) || m_InvitedPlayers[player->GetTeamId()].count(player->GetGUID()))
continue;
@@ -283,9 +282,9 @@ void Battlefield::InvitePlayerToWar(Player* player)
player->GetSession()->SendBfInvitePlayerToWar(m_BattleId, m_ZoneId, m_TimeForAcceptInvite);
}
-void Battlefield::InitStalker(uint32 entry, float x, float y, float z, float o)
+void Battlefield::InitStalker(uint32 entry, Position const& pos)
{
- if (Creature* creature = SpawnCreature(entry, x, y, z, o, TEAM_NEUTRAL))
+ if (Creature* creature = SpawnCreature(entry, pos, TEAM_NEUTRAL))
StalkerGuid = creature->GetGUID();
else
TC_LOG_ERROR("bg.battlefield", "Battlefield::InitStalker: could not spawn Stalker (Creature entry %u), zone messeges will be un-available", entry);
@@ -295,14 +294,14 @@ void Battlefield::KickAfkPlayers()
{
for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team)
for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr)
- if (Player* player = sObjectAccessor->FindPlayer(*itr))
+ if (Player* player = ObjectAccessor::FindPlayer(*itr))
if (player->isAFK())
KickPlayerFromBattlefield(*itr);
}
void Battlefield::KickPlayerFromBattlefield(uint64 guid)
{
- if (Player* player = sObjectAccessor->FindPlayer(guid))
+ if (Player* player = ObjectAccessor::FindPlayer(guid))
if (player->GetZoneId() == GetZoneId())
player->TeleportTo(KickPosition);
}
@@ -361,8 +360,8 @@ void Battlefield::DoPlaySoundToAll(uint32 SoundID)
for (int team = 0; team < BG_TEAMS_COUNT; team++)
for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr)
- if (Player* player = sObjectAccessor->FindPlayer(*itr))
- player->GetSession()->SendPacket(&data);
+ if (Player* player = ObjectAccessor::FindPlayer(*itr))
+ player->SendDirectMessage(&data);
}
bool Battlefield::HasPlayer(Player* player) const
@@ -410,13 +409,13 @@ void Battlefield::TeamCastSpell(TeamId team, int32 spellId)
if (spellId > 0)
{
for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr)
- if (Player* player = sObjectAccessor->FindPlayer(*itr))
+ if (Player* player = ObjectAccessor::FindPlayer(*itr))
player->CastSpell(player, uint32(spellId), true);
}
else
{
for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr)
- if (Player* player = sObjectAccessor->FindPlayer(*itr))
+ if (Player* player = ObjectAccessor::FindPlayer(*itr))
player->RemoveAuraFromStack(uint32(-spellId));
}
}
@@ -425,24 +424,24 @@ void Battlefield::BroadcastPacketToZone(WorldPacket& data) const
{
for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team)
for (GuidSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr)
- if (Player* player = sObjectAccessor->FindPlayer(*itr))
- player->GetSession()->SendPacket(&data);
+ if (Player* player = ObjectAccessor::FindPlayer(*itr))
+ player->SendDirectMessage(&data);
}
void Battlefield::BroadcastPacketToQueue(WorldPacket& data) const
{
for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team)
for (GuidSet::const_iterator itr = m_PlayersInQueue[team].begin(); itr != m_PlayersInQueue[team].end(); ++itr)
- if (Player* player = sObjectAccessor->FindPlayer(*itr))
- player->GetSession()->SendPacket(&data);
+ if (Player* player = ObjectAccessor::FindPlayer(*itr))
+ player->SendDirectMessage(&data);
}
void Battlefield::BroadcastPacketToWar(WorldPacket& data) const
{
for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team)
for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr)
- if (Player* player = sObjectAccessor->FindPlayer(*itr))
- player->GetSession()->SendPacket(&data);
+ if (Player* player = ObjectAccessor::FindPlayer(*itr))
+ player->SendDirectMessage(&data);
}
void Battlefield::SendWarningToAllInZone(uint32 entry)
@@ -463,7 +462,7 @@ void Battlefield::SendUpdateWorldState(uint32 field, uint32 value)
{
for (uint8 i = 0; i < BG_TEAMS_COUNT; ++i)
for (GuidSet::iterator itr = m_players[i].begin(); itr != m_players[i].end(); ++itr)
- if (Player* player = sObjectAccessor->FindPlayer(*itr))
+ if (Player* player = ObjectAccessor::FindPlayer(*itr))
player->SendUpdateWorldState(field, value);
}
@@ -632,11 +631,10 @@ void Battlefield::RemovePlayerFromResurrectQueue(uint64 playerGuid)
void Battlefield::SendAreaSpiritHealerQueryOpcode(Player* player, uint64 guid)
{
WorldPacket data(SMSG_AREA_SPIRIT_HEALER_TIME, 12);
- uint32 time = m_LastResurectTimer; // resurrect every 30 seconds
+ uint32 time = m_LastResurrectTimer; // resurrect every 30 seconds
data << guid << time;
- ASSERT(player && player->GetSession());
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
// ----------------------
@@ -681,7 +679,7 @@ void BfGraveyard::AddPlayer(uint64 playerGuid)
{
m_ResurrectQueue.insert(playerGuid);
- if (Player* player = sObjectAccessor->FindPlayer(playerGuid))
+ if (Player* player = ObjectAccessor::FindPlayer(playerGuid))
player->CastSpell(player, SPELL_WAITING_FOR_RESURRECT, true);
}
}
@@ -690,7 +688,7 @@ void BfGraveyard::RemovePlayer(uint64 playerGuid)
{
m_ResurrectQueue.erase(m_ResurrectQueue.find(playerGuid));
- if (Player* player = sObjectAccessor->FindPlayer(playerGuid))
+ if (Player* player = ObjectAccessor::FindPlayer(playerGuid))
player->RemoveAurasDueToSpell(SPELL_WAITING_FOR_RESURRECT);
}
@@ -702,7 +700,7 @@ void BfGraveyard::Resurrect()
for (GuidSet::const_iterator itr = m_ResurrectQueue.begin(); itr != m_ResurrectQueue.end(); ++itr)
{
// Get player object from his guid
- Player* player = sObjectAccessor->FindPlayer(*itr);
+ Player* player = ObjectAccessor::FindPlayer(*itr);
if (!player)
continue;
@@ -711,7 +709,7 @@ void BfGraveyard::Resurrect()
if (Creature* spirit = m_Bf->GetCreature(m_SpiritGuide[m_ControlTeam]))
spirit->CastSpell(spirit, SPELL_SPIRIT_HEAL, true);
- // Resurect player
+ // Resurrect player
player->CastSpell(player, SPELL_RESURRECTION_VISUAL, true);
player->ResurrectPlayer(1.0f);
player->CastSpell(player, 6962, true);
@@ -743,7 +741,7 @@ void BfGraveyard::RelocateDeadPlayers()
WorldSafeLocsEntry const* closestGrave = NULL;
for (GuidSet::const_iterator itr = m_ResurrectQueue.begin(); itr != m_ResurrectQueue.end(); ++itr)
{
- Player* player = sObjectAccessor->FindPlayer(*itr);
+ Player* player = ObjectAccessor::FindPlayer(*itr);
if (!player)
continue;
@@ -776,27 +774,27 @@ bool BfGraveyard::HasNpc(uint64 guid)
// ********************** Misc ***************************
// *******************************************************
-Creature* Battlefield::SpawnCreature(uint32 entry, const Position& pos, TeamId team)
+Creature* Battlefield::SpawnCreature(uint32 entry, Position const& pos, TeamId teamId)
{
- return SpawnCreature(entry, pos.m_positionX, pos.m_positionY, pos.m_positionZ, pos.m_orientation, team);
+ return SpawnCreature(entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), teamId);
}
-Creature* Battlefield::SpawnCreature(uint32 entry, float x, float y, float z, float o, TeamId team)
+Creature* Battlefield::SpawnCreature(uint32 entry, float x, float y, float z, float o, TeamId /*teamId*/)
{
//Get map object
Map* map = sMapMgr->CreateBaseMap(m_MapId);
if (!map)
{
TC_LOG_ERROR("bg.battlefield", "Battlefield::SpawnCreature: Can't create creature entry: %u map not found", entry);
- return 0;
+ return nullptr;
}
Creature* creature = new Creature();
- if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, PHASEMASK_NORMAL, entry, 0, team, x, y, z, o))
+ if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, PHASEMASK_NORMAL, entry, x, y, z, o))
{
TC_LOG_ERROR("bg.battlefield", "Battlefield::SpawnCreature: Can't create creature entry: %u", entry);
delete creature;
- return NULL;
+ return nullptr;
}
creature->SetHomePosition(x, y, z, o);
@@ -805,11 +803,8 @@ Creature* Battlefield::SpawnCreature(uint32 entry, float x, float y, float z, fl
if (!cinfo)
{
TC_LOG_ERROR("bg.battlefield", "Battlefield::SpawnCreature: entry %u does not exist.", entry);
- return NULL;
+ return nullptr;
}
- // force using DB speeds -- do we really need this?
- creature->SetSpeed(MOVE_WALK, cinfo->speed_walk);
- creature->SetSpeed(MOVE_RUN, cinfo->speed_run);
// Set creature in world
map->AddToMap(creature);
@@ -914,7 +909,7 @@ void BfCapturePoint::SendChangePhase()
// send this too, sometimes the slider disappears, dunno why :(
SendUpdateWorldState(capturePoint->GetGOInfo()->capturePoint.worldState1, 1);
// send these updates to only the ones in this objective
- SendUpdateWorldState(capturePoint->GetGOInfo()->capturePoint.worldstate2, (uint32) ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f));
+ SendUpdateWorldState(capturePoint->GetGOInfo()->capturePoint.worldstate2, (uint32) std::ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f));
// send this too, sometimes it resets :S
SendUpdateWorldState(capturePoint->GetGOInfo()->capturePoint.worldstate3, m_neutralValuePct);
}
@@ -990,7 +985,7 @@ bool BfCapturePoint::Update(uint32 diff)
{
for (GuidSet::iterator itr = m_activePlayers[team].begin(); itr != m_activePlayers[team].end();)
{
- if (Player* player = sObjectAccessor->FindPlayer(*itr))
+ if (Player* player = ObjectAccessor::FindPlayer(*itr))
{
if (!capturePoint->IsWithinDistInMap(player, radius) || !player->IsOutdoorPvPActive())
itr = HandlePlayerLeave(player);
@@ -1103,7 +1098,7 @@ void BfCapturePoint::SendUpdateWorldState(uint32 field, uint32 value)
{
for (uint8 team = 0; team < 2; ++team)
for (GuidSet::iterator itr = m_activePlayers[team].begin(); itr != m_activePlayers[team].end(); ++itr) // send to all players present in the area
- if (Player* player = sObjectAccessor->FindPlayer(*itr))
+ if (Player* player = ObjectAccessor::FindPlayer(*itr))
player->SendUpdateWorldState(field, value);
}
@@ -1124,7 +1119,7 @@ void BfCapturePoint::SendObjectiveComplete(uint32 id, uint64 guid)
// send to all players present in the area
for (GuidSet::iterator itr = m_activePlayers[team].begin(); itr != m_activePlayers[team].end(); ++itr)
- if (Player* player = sObjectAccessor->FindPlayer(*itr))
+ if (Player* player = ObjectAccessor::FindPlayer(*itr))
player->KilledMonsterCredit(id, guid);
}
diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h
index e0e223c9e56..c6bfee40cd2 100644
--- a/src/server/game/Battlefield/Battlefield.h
+++ b/src/server/game/Battlefield/Battlefield.h
@@ -18,13 +18,8 @@
#ifndef BATTLEFIELD_H_
#define BATTLEFIELD_H_
-#include "Utilities/Util.h"
#include "SharedDefines.h"
#include "ZoneScript.h"
-#include "WorldPacket.h"
-#include "GameObject.h"
-#include "Battleground.h"
-#include "ObjectAccessor.h"
enum BattlefieldTypes
{
@@ -110,7 +105,7 @@ class BfCapturePoint
bool DelCapturePoint();
// active Players in the area of the objective, 0 - alliance, 1 - horde
- GuidSet m_activePlayers[2];
+ GuidSet m_activePlayers[BG_TEAMS_COUNT];
// Total shift needed to capture the objective
float m_maxValue;
@@ -173,7 +168,7 @@ class BfGraveyard
// Check if this graveyard has a spirit guide
bool HasNpc(uint64 guid);
- // Check if a player is in this graveyard's ressurect queue
+ // Check if a player is in this graveyard's resurrect queue
bool HasPlayer(uint64 guid) { return m_ResurrectQueue.find(guid) != m_ResurrectQueue.end(); }
// Get the graveyard's ID.
@@ -182,7 +177,7 @@ class BfGraveyard
protected:
TeamId m_ControlTeam;
uint32 m_GraveyardId;
- uint64 m_SpiritGuide[2];
+ uint64 m_SpiritGuide[BG_TEAMS_COUNT];
GuidSet m_ResurrectQueue;
Battlefield* m_Bf;
};
@@ -250,12 +245,12 @@ class Battlefield : public ZoneScript
void HandlePlayerLeaveZone(Player* player, uint32 zone);
// All-purpose data storage 64 bit
- virtual uint64 GetData64(uint32 dataId) const { return m_Data64[dataId]; }
- virtual void SetData64(uint32 dataId, uint64 value) { m_Data64[dataId] = value; }
+ virtual uint64 GetData64(uint32 dataId) const override { return m_Data64[dataId]; }
+ virtual void SetData64(uint32 dataId, uint64 value) override { m_Data64[dataId] = value; }
// All-purpose data storage 32 bit
- virtual uint32 GetData(uint32 dataId) const { return m_Data32[dataId]; }
- virtual void SetData(uint32 dataId, uint32 value) { m_Data32[dataId] = value; }
+ virtual uint32 GetData(uint32 dataId) const override { return m_Data32[dataId]; }
+ virtual void SetData(uint32 dataId, uint32 value) override { m_Data32[dataId] = value; }
virtual void UpdateData(uint32 index, int32 pad) { m_Data32[index] += pad; }
// Battlefield - generic methods
@@ -285,8 +280,8 @@ class Battlefield : public ZoneScript
BfGraveyard* GetGraveyardById(uint32 id) const;
// Misc methods
- Creature* SpawnCreature(uint32 entry, float x, float y, float z, float o, TeamId team);
- Creature* SpawnCreature(uint32 entry, const Position& pos, TeamId team);
+ virtual Creature* SpawnCreature(uint32 entry, float x, float y, float z, float o, TeamId /*teamId*/);
+ Creature* SpawnCreature(uint32 entry, Position const& pos, TeamId /*teamId*/);
GameObject* SpawnGameObject(uint32 entry, float x, float y, float z, float o);
Creature* GetCreature(uint64 GUID);
@@ -344,7 +339,7 @@ class Battlefield : public ZoneScript
void InvitePlayerToQueue(Player* player);
void InvitePlayerToWar(Player* player);
- void InitStalker(uint32 entry, float x, float y, float z, float o);
+ void InitStalker(uint32 entry, Position const& pos);
protected:
uint64 StalkerGuid;
@@ -383,7 +378,7 @@ class Battlefield : public ZoneScript
// Graveyard variables
GraveyardVect m_GraveyardList; // Vector witch contain the different GY of the battle
- uint32 m_LastResurectTimer; // Timer for resurect player every 30 sec
+ uint32 m_LastResurrectTimer; // Timer for resurrect player every 30 sec
uint32 m_StartGroupingTimer; // Timer for invite players in area 15 minute before start battle
bool m_StartGrouping; // bool for know if all players in area has been invited
diff --git a/src/server/game/Battlefield/BattlefieldMgr.h b/src/server/game/Battlefield/BattlefieldMgr.h
index bb8a076d5d0..f51a7177a88 100644
--- a/src/server/game/Battlefield/BattlefieldMgr.h
+++ b/src/server/game/Battlefield/BattlefieldMgr.h
@@ -19,7 +19,6 @@
#define BATTLEFIELD_MGR_H_
#include "Battlefield.h"
-#include <ace/Singleton.h>
class Player;
class ZoneScript;
@@ -28,10 +27,11 @@ class ZoneScript;
class BattlefieldMgr
{
public:
- // ctor
- BattlefieldMgr();
- // dtor
- ~BattlefieldMgr();
+ static BattlefieldMgr* instance()
+ {
+ static BattlefieldMgr instance;
+ return &instance;
+ }
// create battlefield events
void InitBattlefield();
@@ -52,6 +52,9 @@ class BattlefieldMgr
void Update(uint32 diff);
private:
+ BattlefieldMgr();
+ ~BattlefieldMgr();
+
typedef std::vector<Battlefield*> BattlefieldSet;
typedef std::map<uint32 /*zoneId*/, Battlefield*> BattlefieldMap;
// contains all initiated battlefield events
@@ -64,6 +67,6 @@ class BattlefieldMgr
uint32 _updateTimer;
};
-#define sBattlefieldMgr ACE_Singleton<BattlefieldMgr, ACE_Null_Mutex>::instance()
+#define sBattlefieldMgr BattlefieldMgr::instance()
#endif // BATTLEFIELD_MGR_H_
diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp
index 7ec5a09508a..e05c918f501 100644
--- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp
+++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp
@@ -21,13 +21,13 @@
#include "BattlefieldWG.h"
#include "AchievementMgr.h"
+#include "Battleground.h"
#include "MapManager.h"
#include "ObjectMgr.h"
#include "Opcodes.h"
#include "Player.h"
#include "SpellAuras.h"
#include "TemporarySummon.h"
-#include "Vehicle.h"
#include "WorldSession.h"
BattlefieldWG::~BattlefieldWG()
@@ -41,14 +41,14 @@ BattlefieldWG::~BattlefieldWG()
bool BattlefieldWG::SetupBattlefield()
{
- InitStalker(BATTLEFIELD_WG_NPC_STALKER, WintergraspStalkerPos[0], WintergraspStalkerPos[1], WintergraspStalkerPos[2], WintergraspStalkerPos[3]);
-
m_TypeId = BATTLEFIELD_WG; // See enum BattlefieldTypes
m_BattleId = BATTLEFIELD_BATTLEID_WG;
m_ZoneId = BATTLEFIELD_WG_ZONEID;
m_MapId = BATTLEFIELD_WG_MAPID;
m_Map = sMapMgr->FindMap(m_MapId, 0);
+ InitStalker(BATTLEFIELD_WG_NPC_STALKER, WintergraspStalkerPos);
+
m_MaxPlayer = sWorld->getIntConfig(CONFIG_WINTERGRASP_PLR_MAX);
m_IsEnabled = sWorld->getBoolConfig(CONFIG_WINTERGRASP_ENABLE);
m_MinPlayer = sWorld->getIntConfig(CONFIG_WINTERGRASP_PLR_MIN);
@@ -84,7 +84,7 @@ bool BattlefieldWG::SetupBattlefield()
sWorld->setWorldState(ClockWorldState[0], uint64(m_NoWarBattleTime));
}
- m_isActive = bool(sWorld->getWorldState(BATTLEFIELD_WG_WORLD_STATE_ACTIVE));
+ m_isActive = sWorld->getWorldState(BATTLEFIELD_WG_WORLD_STATE_ACTIVE) != 0;
m_DefenderTeam = TeamId(sWorld->getWorldState(BATTLEFIELD_WG_WORLD_STATE_DEFENDER));
m_Timer = sWorld->getWorldState(ClockWorldState[0]);
@@ -156,8 +156,7 @@ bool BattlefieldWG::SetupBattlefield()
// Spawn turrets and hide them per default
for (uint8 i = 0; i < WG_MAX_TURRET; i++)
{
- Position towerCannonPos;
- WGTurret[i].GetPosition(&towerCannonPos);
+ Position towerCannonPos = WGTurret[i].GetPosition();
if (Creature* creature = SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, towerCannonPos, TEAM_ALLIANCE))
{
CanonList.insert(creature->GetGUID());
@@ -684,9 +683,9 @@ void BattlefieldWG::PromotePlayer(Player* killer)
if (!m_isActive)
return;
// Updating rank of player
- if (Aura* aur = killer->GetAura(SPELL_RECRUIT))
+ if (Aura* auraRecruit = killer->GetAura(SPELL_RECRUIT))
{
- if (aur->GetStackAmount() >= 5)
+ if (auraRecruit->GetStackAmount() >= 5)
{
killer->RemoveAura(SPELL_RECRUIT);
killer->CastSpell(killer, SPELL_CORPORAL, true);
@@ -695,9 +694,9 @@ void BattlefieldWG::PromotePlayer(Player* killer)
else
killer->CastSpell(killer, SPELL_RECRUIT, true);
}
- else if (Aura* aur = killer->GetAura(SPELL_CORPORAL))
+ else if (Aura* auraCorporal = killer->GetAura(SPELL_CORPORAL))
{
- if (aur->GetStackAmount() >= 5)
+ if (auraCorporal->GetStackAmount() >= 5)
{
killer->RemoveAura(SPELL_CORPORAL);
killer->CastSpell(killer, SPELL_LIEUTENANT, true);
@@ -848,7 +847,7 @@ void BattlefieldWG::SendInitWorldStatesTo(Player* player)
FillInitialWorldStates(data);
- player->GetSession()->SendPacket(&data);
+ player->SendDirectMessage(&data);
}
void BattlefieldWG::SendInitWorldStatesToAll()
@@ -1061,3 +1060,572 @@ BfGraveyardWG::BfGraveyardWG(BattlefieldWG* battlefield) : BfGraveyard(battlefie
m_Bf = battlefield;
m_GossipTextId = 0;
}
+
+BfWGGameObjectBuilding::BfWGGameObjectBuilding(BattlefieldWG* wg)
+{
+ m_WG = wg;
+ m_Team = 0;
+ m_BuildGUID = 0;
+ m_Type = 0;
+ m_WorldState = 0;
+ m_State = 0;
+ m_NameId = 0;
+}
+
+void BfWGGameObjectBuilding::Rebuild()
+{
+ switch (m_Type)
+ {
+ case BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER:
+ case BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST:
+ case BATTLEFIELD_WG_OBJECTTYPE_DOOR:
+ case BATTLEFIELD_WG_OBJECTTYPE_WALL:
+ m_Team = m_WG->GetDefenderTeam(); // Objects that are part of the keep should be the defender's
+ break;
+ case BATTLEFIELD_WG_OBJECTTYPE_TOWER:
+ m_Team = m_WG->GetAttackerTeam(); // The towers in the south should be the attacker's
+ break;
+ default:
+ m_Team = TEAM_NEUTRAL;
+ break;
+ }
+
+ if (GameObject* build = m_WG->GetGameObject(m_BuildGUID))
+ {
+ // Rebuild gameobject
+ if (build->IsDestructibleBuilding())
+ {
+ build->SetDestructibleState(GO_DESTRUCTIBLE_REBUILDING, NULL, true);
+ if (build->GetEntry() == GO_WINTERGRASP_VAULT_GATE)
+ if (GameObject* go = build->FindNearestGameObject(GO_WINTERGRASP_KEEP_COLLISION_WALL, 50.0f))
+ go->SetGoState(GO_STATE_READY);
+
+ // Update worldstate
+ m_State = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT - (m_Team * 3);
+ m_WG->SendUpdateWorldState(m_WorldState, m_State);
+ }
+ UpdateCreatureAndGo();
+ build->SetFaction(WintergraspFaction[m_Team]);
+ }
+}
+
+void BfWGGameObjectBuilding::Damaged()
+{
+ // Update worldstate
+ m_State = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DAMAGE - (m_Team * 3);
+ m_WG->SendUpdateWorldState(m_WorldState, m_State);
+
+ // Send warning message
+ if (m_NameId) // tower damage + name
+ m_WG->SendWarningToAllInZone(m_NameId);
+
+ for (uint64 guid : m_CreatureTopList[m_WG->GetAttackerTeam()])
+ if (Creature* creature = m_WG->GetCreature(guid))
+ m_WG->HideNpc(creature);
+
+ for (uint64 guid : m_TurretTopList)
+ if (Creature* creature = m_WG->GetCreature(guid))
+ m_WG->HideNpc(creature);
+
+ if (m_Type == BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER)
+ m_WG->UpdateDamagedTowerCount(m_WG->GetDefenderTeam());
+ else if (m_Type == BATTLEFIELD_WG_OBJECTTYPE_TOWER)
+ m_WG->UpdateDamagedTowerCount(m_WG->GetAttackerTeam());
+}
+
+void BfWGGameObjectBuilding::Destroyed()
+{
+ // Update worldstate
+ m_State = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DESTROY - (m_Team * 3);
+ m_WG->SendUpdateWorldState(m_WorldState, m_State);
+
+ // Warn players
+ if (m_NameId)
+ m_WG->SendWarningToAllInZone(m_NameId);
+
+ switch (m_Type)
+ {
+ // Inform the global wintergrasp script of the destruction of this object
+ case BATTLEFIELD_WG_OBJECTTYPE_TOWER:
+ case BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER:
+ m_WG->UpdatedDestroyedTowerCount(TeamId(m_Team));
+ break;
+ case BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST:
+ if (GameObject* build = m_WG->GetGameObject(m_BuildGUID))
+ if (GameObject* go = build->FindNearestGameObject(GO_WINTERGRASP_KEEP_COLLISION_WALL, 50.0f))
+ go->SetGoState(GO_STATE_ACTIVE);
+ m_WG->SetRelicInteractible(true);
+ if (m_WG->GetRelic())
+ m_WG->GetRelic()->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
+ else
+ TC_LOG_ERROR("misc", "BattlefieldWG: Relic not found.");
+ break;
+ }
+
+ m_WG->BrokenWallOrTower(TeamId(m_Team));
+}
+
+void BfWGGameObjectBuilding::Init(GameObject* go, uint32 type, uint32 worldstate, uint32 nameId)
+{
+ if (!go)
+ return;
+
+ // GameObject associated to object
+ m_BuildGUID = go->GetGUID();
+
+ // Type of building (WALL/TOWER/DOOR)
+ m_Type = type;
+
+ // WorldState for client (icon on map)
+ m_WorldState = worldstate;
+
+ // NameId for Warning text
+ m_NameId = nameId;
+
+ switch (m_Type)
+ {
+ case BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER:
+ case BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST:
+ case BATTLEFIELD_WG_OBJECTTYPE_DOOR:
+ case BATTLEFIELD_WG_OBJECTTYPE_WALL:
+ m_Team = m_WG->GetDefenderTeam(); // Objects that are part of the keep should be the defender's
+ break;
+ case BATTLEFIELD_WG_OBJECTTYPE_TOWER:
+ m_Team = m_WG->GetAttackerTeam(); // The towers in the south should be the attacker's
+ break;
+ default:
+ m_Team = TEAM_NEUTRAL;
+ break;
+ }
+
+ m_State = sWorld->getWorldState(m_WorldState);
+ switch (m_State)
+ {
+ case BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT:
+ case BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT:
+ go->SetDestructibleState(GO_DESTRUCTIBLE_REBUILDING, NULL, true);
+ break;
+ case BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DESTROY:
+ case BATTLEFIELD_WG_OBJECTSTATE_HORDE_DESTROY:
+ go->SetDestructibleState(GO_DESTRUCTIBLE_DESTROYED);
+ break;
+ case BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DAMAGE:
+ case BATTLEFIELD_WG_OBJECTSTATE_HORDE_DAMAGE:
+ go->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
+ break;
+ }
+
+ int32 towerId = -1;
+ switch (go->GetEntry())
+ {
+ case GO_WINTERGRASP_FORTRESS_TOWER_1:
+ towerId = 0;
+ break;
+ case GO_WINTERGRASP_FORTRESS_TOWER_2:
+ towerId = 1;
+ break;
+ case GO_WINTERGRASP_FORTRESS_TOWER_3:
+ towerId = 2;
+ break;
+ case GO_WINTERGRASP_FORTRESS_TOWER_4:
+ towerId = 3;
+ break;
+ case GO_WINTERGRASP_SHADOWSIGHT_TOWER:
+ towerId = 4;
+ break;
+ case GO_WINTERGRASP_WINTER_S_EDGE_TOWER:
+ towerId = 5;
+ break;
+ case GO_WINTERGRASP_FLAMEWATCH_TOWER:
+ towerId = 6;
+ break;
+ }
+
+ if (towerId > 3) // Attacker towers
+ {
+ // Spawn associate gameobjects
+ for (uint8 i = 0; i < AttackTowers[towerId - 4].nbObject; i++)
+ {
+ WintergraspObjectPositionData const& gobData = AttackTowers[towerId - 4].GameObject[i];
+ if (GameObject* goHorde = m_WG->SpawnGameObject(gobData.entryHorde, gobData.x, gobData.y, gobData.z, gobData.o))
+ m_GameObjectList[TEAM_HORDE].insert(goHorde->GetGUID());
+ if (GameObject* goAlliance = m_WG->SpawnGameObject(gobData.entryAlliance, gobData.x, gobData.y, gobData.z, gobData.o))
+ m_GameObjectList[TEAM_ALLIANCE].insert(goAlliance->GetGUID());
+ }
+
+ // Spawn associate npc bottom
+ for (uint8 i = 0; i < AttackTowers[towerId - 4].nbCreatureBottom; i++)
+ {
+ WintergraspObjectPositionData const& creatureData = AttackTowers[towerId - 4].CreatureBottom[i];
+ if (Creature* creature = m_WG->SpawnCreature(creatureData.entryHorde, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_HORDE))
+ m_CreatureBottomList[TEAM_HORDE].insert(creature->GetGUID());
+ if (Creature* creature = m_WG->SpawnCreature(creatureData.entryAlliance, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_ALLIANCE))
+ m_CreatureBottomList[TEAM_ALLIANCE].insert(creature->GetGUID());
+ }
+
+ // Spawn associate npc top
+ for (uint8 i = 0; i < AttackTowers[towerId - 4].nbCreatureTop; i++)
+ {
+ WintergraspObjectPositionData const& creatureData = AttackTowers[towerId - 4].CreatureTop[i];
+ if (Creature* creature = m_WG->SpawnCreature(creatureData.entryHorde, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_HORDE))
+ m_CreatureTopList[TEAM_HORDE].insert(creature->GetGUID());
+ if (Creature* creature = m_WG->SpawnCreature(creatureData.entryAlliance, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_ALLIANCE))
+ m_CreatureTopList[TEAM_ALLIANCE].insert(creature->GetGUID());
+ }
+ }
+
+ if (towerId >= 0)
+ {
+ // Spawn Turret bottom
+ for (uint8 i = 0; i < TowerCannon[towerId].nbTowerCannonBottom; i++)
+ {
+ Position const& turretPos = TowerCannon[towerId].TowerCannonBottom[i];
+ if (Creature* turret = m_WG->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, turretPos, TEAM_ALLIANCE))
+ {
+ m_TowerCannonBottomList.insert(turret->GetGUID());
+ switch (go->GetEntry())
+ {
+ case GO_WINTERGRASP_FORTRESS_TOWER_1:
+ case GO_WINTERGRASP_FORTRESS_TOWER_2:
+ case GO_WINTERGRASP_FORTRESS_TOWER_3:
+ case GO_WINTERGRASP_FORTRESS_TOWER_4:
+ turret->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]);
+ break;
+ case GO_WINTERGRASP_SHADOWSIGHT_TOWER:
+ case GO_WINTERGRASP_WINTER_S_EDGE_TOWER:
+ case GO_WINTERGRASP_FLAMEWATCH_TOWER:
+ turret->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]);
+ break;
+ }
+ m_WG->HideNpc(turret);
+ }
+ }
+
+ // Spawn Turret top
+ for (uint8 i = 0; i < TowerCannon[towerId].nbTurretTop; i++)
+ {
+ Position const& towerCannonPos = TowerCannon[towerId].TurretTop[i];
+ if (Creature* turret = m_WG->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, towerCannonPos, TeamId(0)))
+ {
+ m_TurretTopList.insert(turret->GetGUID());
+ switch (go->GetEntry())
+ {
+ case GO_WINTERGRASP_FORTRESS_TOWER_1:
+ case GO_WINTERGRASP_FORTRESS_TOWER_2:
+ case GO_WINTERGRASP_FORTRESS_TOWER_3:
+ case GO_WINTERGRASP_FORTRESS_TOWER_4:
+ turret->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]);
+ break;
+ case GO_WINTERGRASP_SHADOWSIGHT_TOWER:
+ case GO_WINTERGRASP_WINTER_S_EDGE_TOWER:
+ case GO_WINTERGRASP_FLAMEWATCH_TOWER:
+ turret->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]);
+ break;
+ }
+ m_WG->HideNpc(turret);
+ }
+ }
+ UpdateCreatureAndGo();
+ }
+}
+
+void BfWGGameObjectBuilding::UpdateCreatureAndGo()
+{
+ for (uint64 guid : m_CreatureTopList[m_WG->GetDefenderTeam()])
+ if (Creature* creature = m_WG->GetCreature(guid))
+ m_WG->HideNpc(creature);
+
+ for (uint64 guid : m_CreatureTopList[m_WG->GetAttackerTeam()])
+ if (Creature* creature = m_WG->GetCreature(guid))
+ m_WG->ShowNpc(creature, true);
+
+ for (uint64 guid : m_CreatureBottomList[m_WG->GetDefenderTeam()])
+ if (Creature* creature = m_WG->GetCreature(guid))
+ m_WG->HideNpc(creature);
+
+ for (uint64 guid : m_CreatureBottomList[m_WG->GetAttackerTeam()])
+ if (Creature* creature = m_WG->GetCreature(guid))
+ m_WG->ShowNpc(creature, true);
+
+ for (uint64 guid : m_GameObjectList[m_WG->GetDefenderTeam()])
+ if (GameObject* object = m_WG->GetGameObject(guid))
+ object->SetRespawnTime(RESPAWN_ONE_DAY);
+
+ for (uint64 guid : m_GameObjectList[m_WG->GetAttackerTeam()])
+ if (GameObject* object = m_WG->GetGameObject(guid))
+ object->SetRespawnTime(RESPAWN_IMMEDIATELY);
+}
+
+void BfWGGameObjectBuilding::UpdateTurretAttack(bool disable)
+{
+ for (uint64 guid : m_TowerCannonBottomList)
+ {
+ if (Creature* creature = m_WG->GetCreature(guid))
+ {
+ if (GameObject* build = m_WG->GetGameObject(m_BuildGUID))
+ {
+ if (disable)
+ m_WG->HideNpc(creature);
+ else
+ m_WG->ShowNpc(creature, true);
+
+ switch (build->GetEntry())
+ {
+ case GO_WINTERGRASP_FORTRESS_TOWER_1:
+ case GO_WINTERGRASP_FORTRESS_TOWER_2:
+ case GO_WINTERGRASP_FORTRESS_TOWER_3:
+ case GO_WINTERGRASP_FORTRESS_TOWER_4:
+ {
+ creature->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]);
+ break;
+ }
+ case GO_WINTERGRASP_SHADOWSIGHT_TOWER:
+ case GO_WINTERGRASP_WINTER_S_EDGE_TOWER:
+ case GO_WINTERGRASP_FLAMEWATCH_TOWER:
+ {
+ creature->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ for (uint64 guid : m_TurretTopList)
+ {
+ if (Creature* creature = m_WG->GetCreature(guid))
+ {
+ if (GameObject* build = m_WG->GetGameObject(m_BuildGUID))
+ {
+ if (disable)
+ m_WG->HideNpc(creature);
+ else
+ m_WG->ShowNpc(creature, true);
+
+ switch (build->GetEntry())
+ {
+ case GO_WINTERGRASP_FORTRESS_TOWER_1:
+ case GO_WINTERGRASP_FORTRESS_TOWER_2:
+ case GO_WINTERGRASP_FORTRESS_TOWER_3:
+ case GO_WINTERGRASP_FORTRESS_TOWER_4:
+ {
+ creature->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]);
+ break;
+ }
+ case GO_WINTERGRASP_SHADOWSIGHT_TOWER:
+ case GO_WINTERGRASP_WINTER_S_EDGE_TOWER:
+ case GO_WINTERGRASP_FLAMEWATCH_TOWER:
+ {
+ creature->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]);
+ break;
+ }
+ }
+ }
+ }
+ }
+}
+
+void BfWGGameObjectBuilding::Save()
+{
+ sWorld->setWorldState(m_WorldState, m_State);
+}
+
+WGWorkshop::WGWorkshop(BattlefieldWG* _bf, uint8 _workshopId)
+{
+ ASSERT(_bf || _workshopId < WG_MAX_WORKSHOP);
+
+ bf = _bf;
+ workshopId = _workshopId;
+ teamControl = BATTLEFIELD_WG_TEAM_NEUTRAL;
+ state = BATTLEFIELD_WG_OBJECTSTATE_NONE;
+}
+
+void WGWorkshop::GiveControlTo(uint8 team, bool init)
+{
+ switch (team)
+ {
+ case BATTLEFIELD_WG_TEAM_NEUTRAL:
+ {
+ // Send warning message to all player to inform a faction attack to a workshop
+ // alliance / horde attacking a workshop
+ bf->SendWarningToAllInZone(teamControl ? WorkshopsData[workshopId].text : WorkshopsData[workshopId].text + 1);
+ break;
+ }
+ case BATTLEFIELD_WG_TEAM_ALLIANCE:
+ case BATTLEFIELD_WG_TEAM_HORDE:
+ {
+ // Updating worldstate
+ state = team == BATTLEFIELD_WG_TEAM_ALLIANCE ? BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT : BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT;
+ bf->SendUpdateWorldState(WorkshopsData[workshopId].worldstate, state);
+
+ // Warning message
+ if (!init) // workshop taken - alliance
+ bf->SendWarningToAllInZone(team == BATTLEFIELD_WG_TEAM_ALLIANCE ? WorkshopsData[workshopId].text : WorkshopsData[workshopId].text + 1);
+
+ // Found associate graveyard and update it
+ if (workshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST)
+ if (bf->GetGraveyardById(workshopId))
+ bf->GetGraveyardById(workshopId)->GiveControlTo(team == BATTLEFIELD_WG_TEAM_ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE);
+
+ teamControl = team;
+ break;
+ }
+ }
+
+ if (!init)
+ bf->UpdateCounterVehicle(false);
+}
+
+void WGWorkshop::UpdateGraveyardAndWorkshop()
+{
+ if (workshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST)
+ bf->GetGraveyardById(workshopId)->GiveControlTo(TeamId(teamControl));
+ else
+ GiveControlTo(bf->GetDefenderTeam(), true);
+}
+
+void WGWorkshop::Save()
+{
+ sWorld->setWorldState(WorkshopsData[workshopId].worldstate, state);
+}
+
+WintergraspWorkshopData::WintergraspWorkshopData(BattlefieldWG* wg)
+{
+ m_WG = wg;
+ m_BuildGUID = 0;
+ m_Type = 0;
+ m_State = 0;
+ m_WorldState = 0;
+ m_TeamControl = 0;
+ m_NameId = 0;
+}
+
+void WintergraspWorkshopData::AddCreature(WintergraspObjectPositionData const& obj)
+{
+ if (Creature* creature = m_WG->SpawnCreature(obj.entryHorde, obj.x, obj.y, obj.z, obj.o, TEAM_HORDE))
+ m_CreatureOnPoint[TEAM_HORDE].insert(creature->GetGUID());
+
+ if (Creature* creature = m_WG->SpawnCreature(obj.entryAlliance, obj.x, obj.y, obj.z, obj.o, TEAM_ALLIANCE))
+ m_CreatureOnPoint[TEAM_ALLIANCE].insert(creature->GetGUID());
+}
+
+void WintergraspWorkshopData::AddGameObject(WintergraspObjectPositionData const& obj)
+{
+ if (GameObject* gameobject = m_WG->SpawnGameObject(obj.entryHorde, obj.x, obj.y, obj.z, obj.o))
+ m_GameObjectOnPoint[TEAM_HORDE].insert(gameobject->GetGUID());
+ if (GameObject* gameobject = m_WG->SpawnGameObject(obj.entryAlliance, obj.x, obj.y, obj.z, obj.o))
+ m_GameObjectOnPoint[TEAM_ALLIANCE].insert(gameobject->GetGUID());
+}
+
+void WintergraspWorkshopData::Init(uint32 worldstate, uint32 type, uint32 nameId)
+{
+ m_WorldState = worldstate;
+ m_Type = type;
+ m_NameId = nameId;
+}
+
+void WintergraspWorkshopData::GiveControlTo(uint8 team, bool init)
+{
+ switch (team)
+ {
+ case BATTLEFIELD_WG_TEAM_NEUTRAL:
+ {
+ // Send warning message to all player for inform a faction attack a workshop
+ // alliance / horde attacking workshop
+ m_WG->SendWarningToAllInZone(m_TeamControl ? m_NameId : m_NameId + 1);
+ break;
+ }
+ case BATTLEFIELD_WG_TEAM_ALLIANCE:
+ {
+ // Show Alliance creature
+ for (uint64 guid : m_CreatureOnPoint[TEAM_ALLIANCE])
+ if (Creature* creature = m_WG->GetCreature(guid))
+ m_WG->ShowNpc(creature, creature->GetEntry() != 30499);
+
+ // Hide Horde creature
+ for (uint64 guid : m_CreatureOnPoint[TEAM_HORDE])
+ if (Creature* creature = m_WG->GetCreature(guid))
+ m_WG->HideNpc(creature);
+
+ // Show Alliance gameobject
+ for (uint64 guid : m_GameObjectOnPoint[TEAM_ALLIANCE])
+ if (GameObject* object = m_WG->GetGameObject(guid))
+ object->SetRespawnTime(RESPAWN_IMMEDIATELY);
+
+ // Hide Horde gameobject
+ for (uint64 guid : m_GameObjectOnPoint[TEAM_HORDE])
+ if (GameObject* object = m_WG->GetGameObject(guid))
+ object->SetRespawnTime(RESPAWN_ONE_DAY);
+
+
+ // Updating worldstate
+ m_State = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT;
+ m_WG->SendUpdateWorldState(m_WorldState, m_State);
+
+ // Warning message
+ if (!init) // workshop taken - alliance
+ m_WG->SendWarningToAllInZone(m_NameId);
+
+ // Found associate graveyard and update it
+ if (m_Type < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST)
+ if (m_WG->GetGraveyardById(m_Type))
+ m_WG->GetGraveyardById(m_Type)->GiveControlTo(TEAM_ALLIANCE);
+
+ m_TeamControl = team;
+ break;
+ }
+ case BATTLEFIELD_WG_TEAM_HORDE:
+ {
+ // Show Horde creature
+ for (uint64 guid : m_CreatureOnPoint[TEAM_HORDE])
+ if (Creature* creature = m_WG->GetCreature(guid))
+ m_WG->ShowNpc(creature, creature->GetEntry() != 30400);
+
+ // Hide Alliance creature
+ for (uint64 guid : m_CreatureOnPoint[TEAM_ALLIANCE])
+ if (Creature* creature = m_WG->GetCreature(guid))
+ m_WG->HideNpc(creature);
+
+ // Hide Alliance gameobject
+ for (uint64 guid : m_GameObjectOnPoint[TEAM_ALLIANCE])
+ if (GameObject* object = m_WG->GetGameObject(guid))
+ object->SetRespawnTime(RESPAWN_ONE_DAY);
+
+ // Show Horde gameobject
+ for (uint64 guid : m_GameObjectOnPoint[TEAM_HORDE])
+ if (GameObject* object = m_WG->GetGameObject(guid))
+ object->SetRespawnTime(RESPAWN_IMMEDIATELY);
+
+ // Update worldstate
+ m_State = BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT;
+ m_WG->SendUpdateWorldState(m_WorldState, m_State);
+
+ // Warning message
+ if (!init) // workshop taken - horde
+ m_WG->SendWarningToAllInZone(m_NameId + 1);
+
+ // Update graveyard control
+ if (m_Type < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST)
+ if (m_WG->GetGraveyardById(m_Type))
+ m_WG->GetGraveyardById(m_Type)->GiveControlTo(TEAM_HORDE);
+
+ m_TeamControl = team;
+ break;
+ }
+ }
+ if (!init)
+ m_WG->UpdateCounterVehicle(false);
+}
+
+void WintergraspWorkshopData::UpdateGraveyardAndWorkshop()
+{
+ if (m_Type < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST)
+ m_WG->GetGraveyardById(m_Type)->GiveControlTo(TeamId(m_TeamControl));
+ else
+ GiveControlTo(m_WG->GetDefenderTeam(), true);
+}
+
+void WintergraspWorkshopData::Save()
+{
+ sWorld->setWorldState(m_WorldState, m_State);
+}
diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.h b/src/server/game/Battlefield/Zones/BattlefieldWG.h
index c54d8915a33..341ccdeb44c 100644
--- a/src/server/game/Battlefield/Zones/BattlefieldWG.h
+++ b/src/server/game/Battlefield/Zones/BattlefieldWG.h
@@ -18,10 +18,7 @@
#ifndef BATTLEFIELD_WG_
#define BATTLEFIELD_WG_
-#include "ObjectAccessor.h"
-#include "WorldPacket.h"
#include "Battlefield.h"
-#include "World.h"
class Group;
class BattlefieldWG;
@@ -151,10 +148,11 @@ class BfGraveyardWG : public BfGraveyard
public:
BfGraveyardWG(BattlefieldWG* Bf);
- void SetTextId(int32 textid) { m_GossipTextId = textid; }
- int32 GetTextId() { return m_GossipTextId; }
+ void SetTextId(uint32 textId) { m_GossipTextId = textId; }
+ uint32 GetTextId() { return m_GossipTextId; }
+
protected:
- int32 m_GossipTextId;
+ uint32 m_GossipTextId;
};
enum WGGraveyardId
@@ -233,6 +231,7 @@ uint32 const WGQuest[2][6] =
{ 13186, 13181, 13222, 13538, 13177, 13179 },
{ 13185, 13183, 13223, 13539, 13178, 13180 },
};
+
// 7 in sql, 7 in header
BfWGCoordGY const WGGraveYard[BATTLEFIELD_WG_GRAVEYARD_MAX] =
{
@@ -256,7 +255,7 @@ class WintergraspCapturePoint : public BfCapturePoint
void LinkToWorkshop(WGWorkshop* workshop) { m_Workshop = workshop; }
- void ChangeTeam(TeamId oldteam);
+ void ChangeTeam(TeamId oldteam) override;
TeamId GetTeam() const { return m_team; }
protected:
@@ -277,7 +276,7 @@ class BattlefieldWG : public Battlefield
* - Rebuild tower and wall
* - Invite player to war
*/
- void OnBattleStart();
+ void OnBattleStart() override;
/**
* \brief Called when battle end
@@ -288,13 +287,13 @@ class BattlefieldWG : public Battlefield
* - Remove vehicle
* \param endByTimer : true if battle ended when timer is at 00:00, false if battle ended by clicking on relic
*/
- void OnBattleEnd(bool endByTimer);
+ void OnBattleEnd(bool endByTimer) override;
/**
* \brief Called when grouping starts (15 minutes before battlestart)
* - Invite all player in zone to join queue
*/
- void OnStartGrouping();
+ void OnStartGrouping() override;
/**
* \brief Called when player accept invite to join battle
@@ -304,20 +303,20 @@ class BattlefieldWG : public Battlefield
* - Update tenacity
* \param player: Player who accepted invite
*/
- void OnPlayerJoinWar(Player* player);
+ void OnPlayerJoinWar(Player* player) override;
/**
* \brief Called when player left the battle
* - Update player aura
* \param player : Player who left the battle
*/
- void OnPlayerLeaveWar(Player* player);
+ void OnPlayerLeaveWar(Player* player) override;
/**
* \brief Called when player left the WG zone
* \param player : Player who left the zone
*/
- void OnPlayerLeaveZone(Player* player);
+ void OnPlayerLeaveZone(Player* player) override;
/**
* \brief Called when player enters in WG zone
@@ -325,7 +324,7 @@ class BattlefieldWG : public Battlefield
* - Update worldstate
* \param player : Player who enters the zone
*/
- void OnPlayerEnterZone(Player* player);
+ void OnPlayerEnterZone(Player* player) override;
/**
* \brief Called for update battlefield data
@@ -333,24 +332,24 @@ class BattlefieldWG : public Battlefield
* - Update imunity aura from graveyard
* \param diff : time elapsed since the last call (in ms)
*/
- bool Update(uint32 diff);
+ bool Update(uint32 diff) override;
/**
* \brief Called when a creature is created
* - Update vehicle count
*/
- void OnCreatureCreate(Creature* creature);
+ void OnCreatureCreate(Creature* creature) override;
/**
* \brief Called when a creature is removed
* - Update vehicle count
*/
- void OnCreatureRemove(Creature* creature);
+ void OnCreatureRemove(Creature* creature) override;
/**
* \brief Called when a gameobject is created
*/
- void OnGameObjectCreate(GameObject* go);
+ void OnGameObjectCreate(GameObject* go) override;
/**
* \brief Called when a wall/tower is broken
@@ -371,14 +370,14 @@ class BattlefieldWG : public Battlefield
*/
void UpdatedDestroyedTowerCount(TeamId team);
- void DoCompleteOrIncrementAchievement(uint32 achievement, Player* player, uint8 incrementNumber = 1);
+ void DoCompleteOrIncrementAchievement(uint32 achievement, Player* player, uint8 incrementNumber = 1) override;
void RemoveAurasFromPlayer(Player* player);
/**
* \brief Called when battlefield is setup, at server start
*/
- bool SetupBattlefield();
+ bool SetupBattlefield() override;
/// Return pointer to relic object
GameObject* GetRelic() { return GetGameObject(m_titansRelicGUID); }
@@ -396,22 +395,22 @@ class BattlefieldWG : public Battlefield
void UpdateCounterVehicle(bool init);
void SendInitWorldStatesTo(Player* player);
- void SendInitWorldStatesToAll();
- void FillInitialWorldStates(WorldPacket& data);
+ void SendInitWorldStatesToAll() override;
+ void FillInitialWorldStates(WorldPacket& data) override;
- void HandleKill(Player* killer, Unit* victim);
- void OnUnitDeath(Unit* unit);
+ void HandleKill(Player* killer, Unit* victim) override;
+ void OnUnitDeath(Unit* unit) override;
void PromotePlayer(Player* killer);
void UpdateTenacity();
- void ProcessEvent(WorldObject* obj, uint32 eventId);
+ void ProcessEvent(WorldObject* obj, uint32 eventId) override;
bool FindAndRemoveVehicleFromList(Unit* vehicle);
// returns the graveyardId in the specified area.
uint8 GetSpiritGraveyardId(uint32 areaId) const;
- uint32 GetData(uint32 data) const;
+ uint32 GetData(uint32 data) const override;
protected:
bool m_isRelicInteractible;
@@ -419,13 +418,13 @@ class BattlefieldWG : public Battlefield
Workshop WorkshopsList;
GuidSet DefenderPortalList;
- GuidSet m_KeepGameObject[2];
+ GuidSet m_KeepGameObject[BG_TEAMS_COUNT];
GameObjectBuilding BuildingsInZone;
- GuidSet m_vehicles[2];
+ GuidSet m_vehicles[BG_TEAMS_COUNT];
GuidSet CanonList;
- GuidSet KeepCreature[2];
- GuidSet OutsideCreature[2];
+ GuidSet KeepCreature[BG_TEAMS_COUNT];
+ GuidSet OutsideCreature[BG_TEAMS_COUNT];
uint32 m_tenacityStack;
uint32 m_saveTimer;
@@ -437,7 +436,8 @@ uint32 const VehNumWorldState[] = { 3680, 3490 };
uint32 const MaxVehNumWorldState[] = { 3681, 3491 };
uint32 const ClockWorldState[] = { 3781, 4354 };
uint32 const WintergraspFaction[] = { 1732, 1735, 35 };
-float const WintergraspStalkerPos[] = { 4948.985f, 2937.789f, 550.5172f, 1.815142f };
+
+Position const WintergraspStalkerPos = { 4948.985f, 2937.789f, 550.5172f, 1.815142f };
uint8 const WG_MAX_OBJ = 32;
uint8 const WG_MAX_TURRET = 15;
@@ -445,7 +445,7 @@ uint8 const WG_MAX_KEEP_NPC = 39;
uint8 const WG_MAX_OUTSIDE_NPC = 14;
uint8 const WG_OUTSIDE_ALLIANCE_NPC = 7;
uint8 const WG_MAX_TELEPORTER = 12;
-uint8 const WG_MAX_WORKSHOP = 6;
+uint8 const WG_MAX_WORKSHOP = 6;
enum WintergraspGameObjectBuildingType
{
@@ -1059,16 +1059,7 @@ const WGWorkshopData WorkshopsData[WG_MAX_WORKSHOP] =
// Structure for different buildings that can be destroyed during battle
struct BfWGGameObjectBuilding
{
- BfWGGameObjectBuilding(BattlefieldWG* WG)
- {
- m_WG = WG;
- m_Team = 0;
- m_BuildGUID = 0;
- m_Type = 0;
- m_WorldState = 0;
- m_State = 0;
- m_NameId = 0;
- }
+ BfWGGameObjectBuilding(BattlefieldWG* wg);
// the team that controls this point
uint8 m_Team;
@@ -1100,367 +1091,21 @@ struct BfWGGameObjectBuilding
GuidSet m_TowerCannonBottomList;
GuidSet m_TurretTopList;
- void Rebuild()
- {
- switch (m_Type)
- {
- case BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER:
- case BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST:
- case BATTLEFIELD_WG_OBJECTTYPE_DOOR:
- case BATTLEFIELD_WG_OBJECTTYPE_WALL:
- m_Team = m_WG->GetDefenderTeam(); // Objects that are part of the keep should be the defender's
- break;
- case BATTLEFIELD_WG_OBJECTTYPE_TOWER:
- m_Team = m_WG->GetAttackerTeam(); // The towers in the south should be the attacker's
- break;
- default:
- m_Team = TEAM_NEUTRAL;
- break;
- }
-
- if (GameObject* build = m_WG->GetGameObject(m_BuildGUID))
- {
- // Rebuild gameobject
- if (build->IsDestructibleBuilding())
- {
- build->SetDestructibleState(GO_DESTRUCTIBLE_REBUILDING, NULL, true);
- if (build->GetEntry() == GO_WINTERGRASP_VAULT_GATE)
- if (GameObject* go = build->FindNearestGameObject(GO_WINTERGRASP_KEEP_COLLISION_WALL, 50.0f))
- go->SetGoState(GO_STATE_READY);
-
- // Update worldstate
- m_State = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT - (m_Team * 3);
- m_WG->SendUpdateWorldState(m_WorldState, m_State);
- }
- UpdateCreatureAndGo();
- build->SetFaction(WintergraspFaction[m_Team]);
- }
- }
+ void Rebuild();
// Called when associated gameobject is damaged
- void Damaged()
- {
- // Update worldstate
- m_State = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DAMAGE - (m_Team * 3);
- m_WG->SendUpdateWorldState(m_WorldState, m_State);
-
- // Send warning message
- if (m_NameId) // tower damage + name
- m_WG->SendWarningToAllInZone(m_NameId);
-
- for (GuidSet::const_iterator itr = m_CreatureTopList[m_WG->GetAttackerTeam()].begin(); itr != m_CreatureTopList[m_WG->GetAttackerTeam()].end(); ++itr)
- if (Creature* creature = m_WG->GetCreature(*itr))
- m_WG->HideNpc(creature);
-
- for (GuidSet::const_iterator itr = m_TurretTopList.begin(); itr != m_TurretTopList.end(); ++itr)
- if (Creature* creature = m_WG->GetCreature(*itr))
- m_WG->HideNpc(creature);
-
- if (m_Type == BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER)
- m_WG->UpdateDamagedTowerCount(m_WG->GetDefenderTeam());
- else if (m_Type == BATTLEFIELD_WG_OBJECTTYPE_TOWER)
- m_WG->UpdateDamagedTowerCount(m_WG->GetAttackerTeam());
- }
+ void Damaged();
// Called when associated gameobject is destroyed
- void Destroyed()
- {
- // Update worldstate
- m_State = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DESTROY - (m_Team * 3);
- m_WG->SendUpdateWorldState(m_WorldState, m_State);
-
- // Warn players
- if (m_NameId)
- m_WG->SendWarningToAllInZone(m_NameId);
-
- switch (m_Type)
- {
- // Inform the global wintergrasp script of the destruction of this object
- case BATTLEFIELD_WG_OBJECTTYPE_TOWER:
- case BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER:
- m_WG->UpdatedDestroyedTowerCount(TeamId(m_Team));
- break;
- case BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST:
- if (GameObject* build = m_WG->GetGameObject(m_BuildGUID))
- if (GameObject* go = build->FindNearestGameObject(GO_WINTERGRASP_KEEP_COLLISION_WALL, 50.0f))
- go->SetGoState(GO_STATE_ACTIVE);
- m_WG->SetRelicInteractible(true);
- if (m_WG->GetRelic())
- m_WG->GetRelic()->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
- else
- TC_LOG_ERROR("misc", "BattlefieldWG: Relic not found.");
- break;
- }
-
- m_WG->BrokenWallOrTower(TeamId(m_Team));
- }
-
- void Init(GameObject* go, uint32 type, uint32 worldstate, uint32 nameid)
- {
- if (!go)
- return;
-
- // GameObject associated to object
- m_BuildGUID = go->GetGUID();
-
- // Type of building (WALL/TOWER/DOOR)
- m_Type = type;
-
- // WorldState for client (icon on map)
- m_WorldState = worldstate;
-
- // NameId for Warning text
- m_NameId = nameid;
-
- switch (m_Type)
- {
- case BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER:
- case BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST:
- case BATTLEFIELD_WG_OBJECTTYPE_DOOR:
- case BATTLEFIELD_WG_OBJECTTYPE_WALL:
- m_Team = m_WG->GetDefenderTeam(); // Objects that are part of the keep should be the defender's
- break;
- case BATTLEFIELD_WG_OBJECTTYPE_TOWER:
- m_Team = m_WG->GetAttackerTeam(); // The towers in the south should be the attacker's
- break;
- default:
- m_Team = TEAM_NEUTRAL;
- break;
- }
-
- m_State = sWorld->getWorldState(m_WorldState);
- switch (m_State)
- {
- case BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT:
- case BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT:
- go->SetDestructibleState(GO_DESTRUCTIBLE_REBUILDING, NULL, true);
- break;
- case BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DESTROY:
- case BATTLEFIELD_WG_OBJECTSTATE_HORDE_DESTROY:
- go->SetDestructibleState(GO_DESTRUCTIBLE_DESTROYED);
- break;
- case BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DAMAGE:
- case BATTLEFIELD_WG_OBJECTSTATE_HORDE_DAMAGE:
- go->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
- break;
- }
-
- int32 towerid = -1;
- switch (go->GetEntry())
- {
- case GO_WINTERGRASP_FORTRESS_TOWER_1:
- towerid = 0;
- break;
- case GO_WINTERGRASP_FORTRESS_TOWER_2:
- towerid = 1;
- break;
- case GO_WINTERGRASP_FORTRESS_TOWER_3:
- towerid = 2;
- break;
- case GO_WINTERGRASP_FORTRESS_TOWER_4:
- towerid = 3;
- break;
- case GO_WINTERGRASP_SHADOWSIGHT_TOWER:
- towerid = 4;
- break;
- case GO_WINTERGRASP_WINTER_S_EDGE_TOWER:
- towerid = 5;
- break;
- case GO_WINTERGRASP_FLAMEWATCH_TOWER:
- towerid = 6;
- break;
- }
+ void Destroyed();
- if (towerid > 3) // Attacker towers
- {
- // Spawn associate gameobjects
- for (uint8 i = 0; i < AttackTowers[towerid - 4].nbObject; i++)
- {
- WintergraspObjectPositionData gobData = AttackTowers[towerid - 4].GameObject[i];
- if (GameObject* go = m_WG->SpawnGameObject(gobData.entryHorde, gobData.x, gobData.y, gobData.z, gobData.o))
- m_GameObjectList[TEAM_HORDE].insert(go->GetGUID());
- if (GameObject* go = m_WG->SpawnGameObject(gobData.entryAlliance, gobData.x, gobData.y, gobData.z, gobData.o))
- m_GameObjectList[TEAM_ALLIANCE].insert(go->GetGUID());
- }
-
- // Spawn associate npc bottom
- for (uint8 i = 0; i < AttackTowers[towerid - 4].nbCreatureBottom; i++)
- {
- WintergraspObjectPositionData creatureData = AttackTowers[towerid - 4].CreatureBottom[i];
- if (Creature* creature = m_WG->SpawnCreature(creatureData.entryHorde, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_HORDE))
- m_CreatureBottomList[TEAM_HORDE].insert(creature->GetGUID());
- if (Creature* creature = m_WG->SpawnCreature(creatureData.entryAlliance, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_ALLIANCE))
- m_CreatureBottomList[TEAM_ALLIANCE].insert(creature->GetGUID());
- }
-
- // Spawn associate npc top
- for (uint8 i = 0; i < AttackTowers[towerid - 4].nbCreatureTop; i++)
- {
- WintergraspObjectPositionData creatureData = AttackTowers[towerid - 4].CreatureTop[i];
- if (Creature* creature = m_WG->SpawnCreature(creatureData.entryHorde, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_HORDE))
- m_CreatureTopList[TEAM_HORDE].insert(creature->GetGUID());
- if (Creature* creature = m_WG->SpawnCreature(creatureData.entryAlliance, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_ALLIANCE))
- m_CreatureTopList[TEAM_ALLIANCE].insert(creature->GetGUID());
- }
- }
-
- if (towerid >= 0)
- {
- // Spawn Turret bottom
- for (uint8 i = 0; i < TowerCannon[towerid].nbTowerCannonBottom; i++)
- {
- Position turretPos;
- TowerCannon[towerid].TowerCannonBottom[i].GetPosition(&turretPos);
- if (Creature* turret = m_WG->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, turretPos, TEAM_ALLIANCE))
- {
- m_TowerCannonBottomList.insert(turret->GetGUID());
- switch (go->GetEntry())
- {
- case GO_WINTERGRASP_FORTRESS_TOWER_1:
- case GO_WINTERGRASP_FORTRESS_TOWER_2:
- case GO_WINTERGRASP_FORTRESS_TOWER_3:
- case GO_WINTERGRASP_FORTRESS_TOWER_4:
- turret->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]);
- break;
- case GO_WINTERGRASP_SHADOWSIGHT_TOWER:
- case GO_WINTERGRASP_WINTER_S_EDGE_TOWER:
- case GO_WINTERGRASP_FLAMEWATCH_TOWER:
- turret->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]);
- break;
- }
- m_WG->HideNpc(turret);
- }
- }
-
- // Spawn Turret top
- for (uint8 i = 0; i < TowerCannon[towerid].nbTurretTop; i++)
- {
- Position towerCannonPos;
- TowerCannon[towerid].TurretTop[i].GetPosition(&towerCannonPos);
- if (Creature* turret = m_WG->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, towerCannonPos, TeamId(0)))
- {
- m_TurretTopList.insert(turret->GetGUID());
- switch (go->GetEntry())
- {
- case GO_WINTERGRASP_FORTRESS_TOWER_1:
- case GO_WINTERGRASP_FORTRESS_TOWER_2:
- case GO_WINTERGRASP_FORTRESS_TOWER_3:
- case GO_WINTERGRASP_FORTRESS_TOWER_4:
- turret->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]);
- break;
- case GO_WINTERGRASP_SHADOWSIGHT_TOWER:
- case GO_WINTERGRASP_WINTER_S_EDGE_TOWER:
- case GO_WINTERGRASP_FLAMEWATCH_TOWER:
- turret->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]);
- break;
- }
- m_WG->HideNpc(turret);
- }
- }
- UpdateCreatureAndGo();
- }
- }
-
- void UpdateCreatureAndGo()
- {
- for (GuidSet::const_iterator itr = m_CreatureTopList[m_WG->GetDefenderTeam()].begin(); itr != m_CreatureTopList[m_WG->GetDefenderTeam()].end(); ++itr)
- if (Creature* creature = m_WG->GetCreature(*itr))
- m_WG->HideNpc(creature);
-
- for (GuidSet::const_iterator itr = m_CreatureTopList[m_WG->GetAttackerTeam()].begin(); itr != m_CreatureTopList[m_WG->GetAttackerTeam()].end(); ++itr)
- if (Creature* creature = m_WG->GetCreature(*itr))
- m_WG->ShowNpc(creature, true);
-
- for (GuidSet::const_iterator itr = m_CreatureBottomList[m_WG->GetDefenderTeam()].begin(); itr != m_CreatureBottomList[m_WG->GetDefenderTeam()].end(); ++itr)
- if (Creature* creature = m_WG->GetCreature(*itr))
- m_WG->HideNpc(creature);
+ void Init(GameObject* go, uint32 type, uint32 worldstate, uint32 nameId);
- for (GuidSet::const_iterator itr = m_CreatureBottomList[m_WG->GetAttackerTeam()].begin(); itr != m_CreatureBottomList[m_WG->GetAttackerTeam()].end(); ++itr)
- if (Creature* creature = m_WG->GetCreature(*itr))
- m_WG->ShowNpc(creature, true);
+ void UpdateCreatureAndGo();
- for (GuidSet::const_iterator itr = m_GameObjectList[m_WG->GetDefenderTeam()].begin(); itr != m_GameObjectList[m_WG->GetDefenderTeam()].end(); ++itr)
- if (GameObject* object = m_WG->GetGameObject(*itr))
- object->SetRespawnTime(RESPAWN_ONE_DAY);
+ void UpdateTurretAttack(bool disable);
- for (GuidSet::const_iterator itr = m_GameObjectList[m_WG->GetAttackerTeam()].begin(); itr != m_GameObjectList[m_WG->GetAttackerTeam()].end(); ++itr)
- if (GameObject* object = m_WG->GetGameObject(*itr))
- object->SetRespawnTime(RESPAWN_IMMEDIATELY);
- }
-
- void UpdateTurretAttack(bool disable)
- {
- for (GuidSet::const_iterator itr = m_TowerCannonBottomList.begin(); itr != m_TowerCannonBottomList.end(); ++itr)
- {
- if (Creature* creature = m_WG->GetCreature(*itr))
- {
- if (GameObject* build = m_WG->GetGameObject(m_BuildGUID))
- {
- if (disable)
- m_WG->HideNpc(creature);
- else
- m_WG->ShowNpc(creature, true);
-
- switch (build->GetEntry())
- {
- case GO_WINTERGRASP_FORTRESS_TOWER_1:
- case GO_WINTERGRASP_FORTRESS_TOWER_2:
- case GO_WINTERGRASP_FORTRESS_TOWER_3:
- case GO_WINTERGRASP_FORTRESS_TOWER_4:
- {
- creature->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]);
- break;
- }
- case GO_WINTERGRASP_SHADOWSIGHT_TOWER:
- case GO_WINTERGRASP_WINTER_S_EDGE_TOWER:
- case GO_WINTERGRASP_FLAMEWATCH_TOWER:
- {
- creature->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]);
- break;
- }
- }
- }
- }
- }
-
- for (GuidSet::const_iterator itr = m_TurretTopList.begin(); itr != m_TurretTopList.end(); ++itr)
- {
- if (Creature* creature = m_WG->GetCreature(*itr))
- {
- if (GameObject* build = m_WG->GetGameObject(m_BuildGUID))
- {
- if (disable)
- m_WG->HideNpc(creature);
- else
- m_WG->ShowNpc(creature, true);
-
- switch (build->GetEntry())
- {
- case GO_WINTERGRASP_FORTRESS_TOWER_1:
- case GO_WINTERGRASP_FORTRESS_TOWER_2:
- case GO_WINTERGRASP_FORTRESS_TOWER_3:
- case GO_WINTERGRASP_FORTRESS_TOWER_4:
- {
- creature->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]);
- break;
- }
- case GO_WINTERGRASP_SHADOWSIGHT_TOWER:
- case GO_WINTERGRASP_WINTER_S_EDGE_TOWER:
- case GO_WINTERGRASP_FLAMEWATCH_TOWER:
- {
- creature->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]);
- break;
- }
- }
- }
- }
- }
- }
-
- void Save()
- {
- sWorld->setWorldState(m_WorldState, m_State);
- }
+ void Save();
};
struct WGWorkshop
@@ -1474,64 +1119,13 @@ struct WGWorkshop
// for worldstate
uint32 state;
- WGWorkshop(BattlefieldWG* _bf, uint8 _workshopId)
- {
- ASSERT(_bf || _workshopId < WG_MAX_WORKSHOP);
-
- bf = _bf;
- workshopId = _workshopId;
- teamControl = BATTLEFIELD_WG_TEAM_NEUTRAL;
- state = BATTLEFIELD_WG_OBJECTSTATE_NONE;
- }
+ WGWorkshop(BattlefieldWG* _bf, uint8 _workshopId);
- void GiveControlTo(uint8 team, bool init /* for first call in setup*/)
- {
- switch (team)
- {
- case BATTLEFIELD_WG_TEAM_NEUTRAL:
- {
- // Send warning message to all player to inform a faction attack to a workshop
- // alliance / horde attacking a workshop
- bf->SendWarningToAllInZone(teamControl ? WorkshopsData[workshopId].text : WorkshopsData[workshopId].text + 1);
- break;
- }
- case BATTLEFIELD_WG_TEAM_ALLIANCE:
- case BATTLEFIELD_WG_TEAM_HORDE:
- {
- // Updating worldstate
- state = team == BATTLEFIELD_WG_TEAM_ALLIANCE ? BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT : BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT;
- bf->SendUpdateWorldState(WorkshopsData[workshopId].worldstate, state);
-
- // Warning message
- if (!init) // workshop taken - alliance
- bf->SendWarningToAllInZone(team == BATTLEFIELD_WG_TEAM_ALLIANCE ? WorkshopsData[workshopId].text : WorkshopsData[workshopId].text+1);
-
- // Found associate graveyard and update it
- if (workshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST)
- if (bf->GetGraveyardById(workshopId))
- bf->GetGraveyardById(workshopId)->GiveControlTo(team == BATTLEFIELD_WG_TEAM_ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE);
-
- teamControl = team;
- break;
- }
- }
+ void GiveControlTo(uint8 team, bool init /*for first call in setup*/);
- if (!init)
- bf->UpdateCounterVehicle(false);
- }
+ void UpdateGraveyardAndWorkshop();
- void UpdateGraveyardAndWorkshop()
- {
- if (workshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST)
- bf->GetGraveyardById(workshopId)->GiveControlTo(TeamId(teamControl));
- else
- GiveControlTo(bf->GetDefenderTeam(), true);
- }
-
- void Save()
- {
- sWorld->setWorldState(WorkshopsData[workshopId].worldstate, state);
- }
+ void Save();
};
// Structure for the 6 workshop
@@ -1544,153 +1138,26 @@ struct WintergraspWorkshopData
uint32 m_WorldState;
uint32 m_TeamControl; // Team witch control the workshop
GuidSet m_CreatureOnPoint[2]; // Contain all Creature associate to this point
- GuidSet m_GameObjectOnPoint[2]; // Contain all Gameobject associate to this point
+ GuidSet m_GameObjectOnPoint[2]; // Contain all Gameobject associate to this point
uint32 m_NameId; // Id of trinity_string witch contain name of this node, using for alert message
- WintergraspWorkshopData(BattlefieldWG* WG)
- {
- m_WG = WG;
- m_BuildGUID = 0;
- m_Type = 0;
- m_State = 0;
- m_WorldState = 0;
- m_TeamControl = 0;
- m_NameId = 0;
- }
+ WintergraspWorkshopData(BattlefieldWG* wg);
// Spawning associate creature and store them
- void AddCreature(const WintergraspObjectPositionData& obj)
- {
- if (Creature* creature = m_WG->SpawnCreature(obj.entryHorde, obj.x, obj.y, obj.z, obj.o, TEAM_HORDE))
- m_CreatureOnPoint[TEAM_HORDE].insert(creature->GetGUID());
-
- if (Creature* creature = m_WG->SpawnCreature(obj.entryAlliance, obj.x, obj.y, obj.z, obj.o, TEAM_ALLIANCE))
- m_CreatureOnPoint[TEAM_ALLIANCE].insert(creature->GetGUID());
- }
+ void AddCreature(WintergraspObjectPositionData const& obj);
// Spawning Associate gameobject and store them
- void AddGameObject(const WintergraspObjectPositionData& obj)
- {
- if (GameObject* gameobject = m_WG->SpawnGameObject(obj.entryHorde, obj.x, obj.y, obj.z, obj.o))
- m_GameObjectOnPoint[TEAM_HORDE].insert(gameobject->GetGUID());
- if (GameObject* gameobject = m_WG->SpawnGameObject(obj.entryAlliance, obj.x, obj.y, obj.z, obj.o))
- m_GameObjectOnPoint[TEAM_ALLIANCE].insert(gameobject->GetGUID());
- }
+ void AddGameObject(WintergraspObjectPositionData const& obj);
// Init method, setup variable
- void Init(uint32 worldstate, uint32 type, uint32 nameid)
- {
- m_WorldState = worldstate;
- m_Type = type;
- m_NameId = nameid;
- }
+ void Init(uint32 worldstate, uint32 type, uint32 nameId);
// Called on change faction in CapturePoint class
- void GiveControlTo(uint8 team, bool init /* for first call in setup*/)
- {
- switch (team)
- {
- case BATTLEFIELD_WG_TEAM_NEUTRAL:
- {
- // Send warning message to all player for inform a faction attack a workshop
- // alliance / horde attacking workshop
- m_WG->SendWarningToAllInZone(m_TeamControl ? m_NameId : m_NameId + 1);
- break;
- }
- case BATTLEFIELD_WG_TEAM_ALLIANCE:
- {
- // Show Alliance creature
- for (GuidSet::const_iterator itr = m_CreatureOnPoint[TEAM_ALLIANCE].begin(); itr != m_CreatureOnPoint[TEAM_ALLIANCE].end(); ++itr)
- if (Creature* creature = m_WG->GetCreature(*itr))
- m_WG->ShowNpc(creature, creature->GetEntry() != 30499);
-
- // Hide Horde creature
- for (GuidSet::const_iterator itr = m_CreatureOnPoint[TEAM_HORDE].begin(); itr != m_CreatureOnPoint[TEAM_HORDE].end(); ++itr)
- if (Creature* creature = m_WG->GetCreature(*itr))
- m_WG->HideNpc(creature);
-
- // Show Alliance gameobject
- for (GuidSet::const_iterator itr = m_GameObjectOnPoint[TEAM_ALLIANCE].begin(); itr != m_GameObjectOnPoint[TEAM_ALLIANCE].end(); ++itr)
- if (GameObject* object = m_WG->GetGameObject(*itr))
- object->SetRespawnTime(RESPAWN_IMMEDIATELY);
-
- // Hide Horde gameobject
- for (GuidSet::const_iterator itr = m_GameObjectOnPoint[TEAM_HORDE].begin(); itr != m_GameObjectOnPoint[TEAM_HORDE].end(); ++itr)
- if (GameObject* object = m_WG->GetGameObject(*itr))
- object->SetRespawnTime(RESPAWN_ONE_DAY);
-
-
- // Updating worldstate
- m_State = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT;
- m_WG->SendUpdateWorldState(m_WorldState, m_State);
-
- // Warning message
- if (!init) // workshop taken - alliance
- m_WG->SendWarningToAllInZone(m_NameId);
-
- // Found associate graveyard and update it
- if (m_Type < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST)
- if (m_WG->GetGraveyardById(m_Type))
- m_WG->GetGraveyardById(m_Type)->GiveControlTo(TEAM_ALLIANCE);
-
- m_TeamControl = team;
- break;
- }
- case BATTLEFIELD_WG_TEAM_HORDE:
- {
- // Show Horde creature
- for (GuidSet::const_iterator itr = m_CreatureOnPoint[TEAM_HORDE].begin(); itr != m_CreatureOnPoint[TEAM_HORDE].end(); ++itr)
- if (Creature* creature = m_WG->GetCreature(*itr))
- m_WG->ShowNpc(creature, creature->GetEntry() != 30400);
-
- // Hide Alliance creature
- for (GuidSet::const_iterator itr = m_CreatureOnPoint[TEAM_ALLIANCE].begin(); itr != m_CreatureOnPoint[TEAM_ALLIANCE].end(); ++itr)
- if (Creature* creature = m_WG->GetCreature(*itr))
- m_WG->HideNpc(creature);
-
- // Hide Alliance gameobject
- for (GuidSet::const_iterator itr = m_GameObjectOnPoint[TEAM_ALLIANCE].begin(); itr != m_GameObjectOnPoint[TEAM_ALLIANCE].end(); ++itr)
- if (GameObject* object = m_WG->GetGameObject(*itr))
- object->SetRespawnTime(RESPAWN_ONE_DAY);
-
- // Show Horde gameobject
- for (GuidSet::const_iterator itr = m_GameObjectOnPoint[TEAM_HORDE].begin(); itr != m_GameObjectOnPoint[TEAM_HORDE].end(); ++itr)
- if (GameObject* object = m_WG->GetGameObject(*itr))
- object->SetRespawnTime(RESPAWN_IMMEDIATELY);
-
- // Update worlstate
- m_State = BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT;
- m_WG->SendUpdateWorldState(m_WorldState, m_State);
-
- // Warning message
- if (!init) // workshop taken - horde
- m_WG->SendWarningToAllInZone(m_NameId + 1);
-
- // Update graveyard control
- if (m_Type < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST)
- if (m_WG->GetGraveyardById(m_Type))
- m_WG->GetGraveyardById(m_Type)->GiveControlTo(TEAM_HORDE);
-
- m_TeamControl = team;
- break;
- }
- }
- if (!init)
- m_WG->UpdateCounterVehicle(false);
- }
+ void GiveControlTo(uint8 team, bool init /*for first call in setup*/);
- void UpdateGraveyardAndWorkshop()
- {
- if (m_Type < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST)
- m_WG->GetGraveyardById(m_Type)->GiveControlTo(TeamId(m_TeamControl));
- else
- GiveControlTo(m_WG->GetDefenderTeam(), true);
- }
+ void UpdateGraveyardAndWorkshop();
- void Save()
- {
- sWorld->setWorldState(m_WorldState, m_State);
- }
+ void Save();
};
#endif
diff --git a/src/server/game/Battlegrounds/Arena.cpp b/src/server/game/Battlegrounds/Arena.cpp
new file mode 100644
index 00000000000..cdc6fc3cac0
--- /dev/null
+++ b/src/server/game/Battlegrounds/Arena.cpp
@@ -0,0 +1,252 @@
+/*
+ * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "Arena.h"
+#include "ArenaScore.h"
+#include "ArenaTeamMgr.h"
+#include "Language.h"
+#include "ObjectAccessor.h"
+#include "Player.h"
+#include "World.h"
+#include "WorldSession.h"
+
+Arena::Arena()
+{
+ StartDelayTimes[BG_STARTING_EVENT_FIRST] = BG_START_DELAY_1M;
+ StartDelayTimes[BG_STARTING_EVENT_SECOND] = BG_START_DELAY_30S;
+ StartDelayTimes[BG_STARTING_EVENT_THIRD] = BG_START_DELAY_15S;
+ StartDelayTimes[BG_STARTING_EVENT_FOURTH] = BG_START_DELAY_NONE;
+
+ StartMessageIds[BG_STARTING_EVENT_FIRST] = LANG_ARENA_ONE_MINUTE;
+ StartMessageIds[BG_STARTING_EVENT_SECOND] = LANG_ARENA_THIRTY_SECONDS;
+ StartMessageIds[BG_STARTING_EVENT_THIRD] = LANG_ARENA_FIFTEEN_SECONDS;
+ StartMessageIds[BG_STARTING_EVENT_FOURTH] = LANG_ARENA_HAS_BEGUN;
+}
+
+void Arena::AddPlayer(Player* player)
+{
+ Battleground::AddPlayer(player);
+ PlayerScores[player->GetGUIDLow()] = new ArenaScore(player->GetGUID(), player->GetBGTeam());
+
+ if (player->GetBGTeam() == ALLIANCE) // gold
+ {
+ if (player->GetTeam() == HORDE)
+ player->CastSpell(player, SPELL_HORDE_GOLD_FLAG, true);
+ else
+ player->CastSpell(player, SPELL_ALLIANCE_GOLD_FLAG, true);
+ }
+ else // green
+ {
+ if (player->GetTeam() == HORDE)
+ player->CastSpell(player, SPELL_HORDE_GREEN_FLAG, true);
+ else
+ player->CastSpell(player, SPELL_ALLIANCE_GREEN_FLAG, true);
+ }
+
+ UpdateArenaWorldState();
+}
+
+void Arena::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/)
+{
+ if (GetStatus() == STATUS_WAIT_LEAVE)
+ return;
+
+ UpdateArenaWorldState();
+ CheckWinConditions();
+}
+
+void Arena::FillInitialWorldStates(WorldPacket& data)
+{
+ data << uint32(ARENA_WORLD_STATE_ALIVE_PLAYERS_GREEN) << uint32(GetAlivePlayersCountByTeam(HORDE));
+ data << uint32(ARENA_WORLD_STATE_ALIVE_PLAYERS_GOLD) << uint32(GetAlivePlayersCountByTeam(ALLIANCE));
+}
+
+void Arena::UpdateArenaWorldState()
+{
+ UpdateWorldState(ARENA_WORLD_STATE_ALIVE_PLAYERS_GREEN, GetAlivePlayersCountByTeam(HORDE));
+ UpdateWorldState(ARENA_WORLD_STATE_ALIVE_PLAYERS_GOLD, GetAlivePlayersCountByTeam(ALLIANCE));
+}
+
+void Arena::HandleKillPlayer(Player* player, Player* killer)
+{
+ if (GetStatus() != STATUS_IN_PROGRESS)
+ return;
+
+ Battleground::HandleKillPlayer(player, killer);
+
+ UpdateArenaWorldState();
+ CheckWinConditions();
+}
+
+void Arena::RemovePlayerAtLeave(uint64 guid, bool transport, bool sendPacket)
+{
+ if (isRated() && GetStatus() == STATUS_IN_PROGRESS)
+ {
+ BattlegroundPlayerMap::const_iterator itr = m_Players.find(guid);
+ if (itr != m_Players.end()) // check if the player was a participant of the match, or only entered through gm command (appear)
+ {
+ // if the player was a match participant, calculate rating
+ uint32 team = itr->second.Team;
+
+ ArenaTeam* winnerArenaTeam = sArenaTeamMgr->GetArenaTeamById(GetArenaTeamIdForTeam(GetOtherTeam(team)));
+ ArenaTeam* loserArenaTeam = sArenaTeamMgr->GetArenaTeamById(GetArenaTeamIdForTeam(team));
+
+ // left a rated match while the encounter was in progress, consider as loser
+ if (winnerArenaTeam && loserArenaTeam && winnerArenaTeam != loserArenaTeam)
+ {
+ if (Player* player = _GetPlayer(itr->first, itr->second.OfflineRemoveTime != 0, "Arena::RemovePlayerAtLeave"))
+ loserArenaTeam->MemberLost(player, GetArenaMatchmakerRating(GetOtherTeam(team)));
+ else
+ loserArenaTeam->OfflineMemberLost(guid, GetArenaMatchmakerRating(GetOtherTeam(team)));
+ }
+ }
+ }
+
+ // remove player
+ Battleground::RemovePlayerAtLeave(guid, transport, sendPacket);
+}
+
+void Arena::CheckWinConditions()
+{
+ if (!GetAlivePlayersCountByTeam(ALLIANCE) && GetPlayersCountByTeam(HORDE))
+ EndBattleground(HORDE);
+ else if (GetPlayersCountByTeam(ALLIANCE) && !GetAlivePlayersCountByTeam(HORDE))
+ EndBattleground(ALLIANCE);
+}
+
+void Arena::EndBattleground(uint32 winner)
+{
+ // arena rating calculation
+ if (isRated())
+ {
+ uint32 loserTeamRating = 0;
+ uint32 loserMatchmakerRating = 0;
+ int32 loserChange = 0;
+ int32 loserMatchmakerChange = 0;
+ uint32 winnerTeamRating = 0;
+ uint32 winnerMatchmakerRating = 0;
+ int32 winnerChange = 0;
+ int32 winnerMatchmakerChange = 0;
+
+ ArenaTeam* winnerArenaTeam = sArenaTeamMgr->GetArenaTeamById(GetArenaTeamIdForTeam(winner));
+ ArenaTeam* loserArenaTeam = sArenaTeamMgr->GetArenaTeamById(GetArenaTeamIdForTeam(GetOtherTeam(winner)));
+
+ if (winnerArenaTeam && loserArenaTeam && winnerArenaTeam != loserArenaTeam)
+ {
+ loserTeamRating = loserArenaTeam->GetRating();
+ loserMatchmakerRating = GetArenaMatchmakerRating(GetOtherTeam(winner));
+ winnerTeamRating = winnerArenaTeam->GetRating();
+ winnerMatchmakerRating = GetArenaMatchmakerRating(winner);
+
+ if (winner != 0)
+ {
+ winnerMatchmakerChange = winnerArenaTeam->WonAgainst(winnerMatchmakerRating, loserMatchmakerRating, winnerChange);
+ loserMatchmakerChange = loserArenaTeam->LostAgainst(loserMatchmakerRating, winnerMatchmakerRating, loserChange);
+
+ TC_LOG_DEBUG("bg.arena", "match Type: %u --- Winner: old rating: %u, rating gain: %d, old MMR: %u, MMR gain: %d --- Loser: old rating: %u, rating loss: %d, old MMR: %u, MMR loss: %d ---",
+ GetArenaType(), winnerTeamRating, winnerChange, winnerMatchmakerRating, winnerMatchmakerChange,
+ loserTeamRating, loserChange, loserMatchmakerRating, loserMatchmakerChange);
+
+ SetArenaMatchmakerRating(winner, winnerMatchmakerRating + winnerMatchmakerChange);
+ SetArenaMatchmakerRating(GetOtherTeam(winner), loserMatchmakerRating + loserMatchmakerChange);
+
+ // bg team that the client expects is different to TeamId
+ // alliance 1, horde 0
+ uint8 winnerTeam = winner == ALLIANCE ? BG_TEAM_ALLIANCE : BG_TEAM_HORDE;
+ uint8 loserTeam = winner == ALLIANCE ? BG_TEAM_HORDE : BG_TEAM_ALLIANCE;
+
+ _arenaTeamScores[winnerTeam].Assign(winnerChange, winnerMatchmakerRating, winnerArenaTeam->GetName());
+ _arenaTeamScores[loserTeam].Assign(loserChange, loserMatchmakerRating, loserArenaTeam->GetName());
+
+ TC_LOG_DEBUG("bg.arena", "Arena match Type: %u for Team1Id: %u - Team2Id: %u ended. WinnerTeamId: %u. Winner rating: +%d, Loser rating: %d",
+ GetArenaType(), GetArenaTeamIdByIndex(TEAM_ALLIANCE), GetArenaTeamIdByIndex(TEAM_HORDE), winnerArenaTeam->GetId(), winnerChange, loserChange);
+
+ if (sWorld->getBoolConfig(CONFIG_ARENA_LOG_EXTENDED_INFO))
+ for (auto const& score : PlayerScores)
+ if (Player* player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(score.first, 0, HIGHGUID_PLAYER)))
+ {
+ TC_LOG_DEBUG("bg.arena", "Statistics match Type: %u for %s (GUID: %u, Team: %d, IP: %s): %s",
+ GetArenaType(), player->GetName().c_str(), score.first, player->GetArenaTeamId(GetArenaType() == 5 ? 2 : GetArenaType() == 3),
+ player->GetSession()->GetRemoteAddress().c_str(), score.second->ToString().c_str());
+ }
+ }
+ // Deduct 16 points from each teams arena-rating if there are no winners after 45+2 minutes
+ else
+ {
+ _arenaTeamScores[BG_TEAM_ALLIANCE].Assign(ARENA_TIMELIMIT_POINTS_LOSS, winnerMatchmakerRating, winnerArenaTeam->GetName());
+ _arenaTeamScores[BG_TEAM_HORDE].Assign(ARENA_TIMELIMIT_POINTS_LOSS, loserMatchmakerRating, loserArenaTeam->GetName());
+
+ winnerArenaTeam->FinishGame(ARENA_TIMELIMIT_POINTS_LOSS);
+ loserArenaTeam->FinishGame(ARENA_TIMELIMIT_POINTS_LOSS);
+ }
+
+ uint8 aliveWinners = GetAlivePlayersCountByTeam(winner);
+
+ for (auto const& i : GetPlayers())
+ {
+ uint32 team = i.second.Team;
+
+ if (i.second.OfflineRemoveTime)
+ {
+ // if rated arena match - make member lost!
+ if (team == winner)
+ winnerArenaTeam->OfflineMemberLost(i.first, loserMatchmakerRating, winnerMatchmakerChange);
+ else
+ loserArenaTeam->OfflineMemberLost(i.first, winnerMatchmakerRating, loserMatchmakerChange);
+ continue;
+ }
+
+ Player* player = _GetPlayer(i.first, i.second.OfflineRemoveTime != 0, "Arena::EndBattleground");
+ if (!player)
+ continue;
+
+ // per player calculation
+ if (team == winner)
+ {
+ // update achievement BEFORE personal rating update
+ uint32 rating = player->GetArenaPersonalRating(winnerArenaTeam->GetSlot());
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA, rating ? rating : 1);
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA, GetMapId());
+
+ // Last standing - Rated 5v5 arena & be solely alive player
+ if (GetArenaType() == ARENA_TYPE_5v5 && aliveWinners == 1 && player->IsAlive())
+ player->CastSpell(player, SPELL_LAST_MAN_STANDING, true);
+
+ winnerArenaTeam->MemberWon(player, loserMatchmakerRating, winnerMatchmakerChange);
+ }
+ else
+ {
+ loserArenaTeam->MemberLost(player, winnerMatchmakerRating, loserMatchmakerChange);
+
+ // Arena lost => reset the win_rated_arena having the "no_lose" condition
+ player->ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA, ACHIEVEMENT_CRITERIA_CONDITION_NO_LOSE);
+ }
+ }
+
+ // save the stat changes
+ winnerArenaTeam->SaveToDB();
+ loserArenaTeam->SaveToDB();
+ // send updated arena team stats to players
+ // this way all arena team members will get notified, not only the ones who participated in this match
+ winnerArenaTeam->NotifyStatsChanged();
+ loserArenaTeam->NotifyStatsChanged();
+ }
+ }
+
+ // end battleground
+ Battleground::EndBattleground(winner);
+}
diff --git a/src/server/game/Battlegrounds/Arena.h b/src/server/game/Battlegrounds/Arena.h
new file mode 100644
index 00000000000..8aea92d496d
--- /dev/null
+++ b/src/server/game/Battlegrounds/Arena.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef TRINITY_ARENA_H
+#define TRINITY_ARENA_H
+
+#include "Battleground.h"
+
+enum ArenaSpellIds
+{
+ SPELL_ALLIANCE_GOLD_FLAG = 32724,
+ SPELL_ALLIANCE_GREEN_FLAG = 32725,
+ SPELL_HORDE_GOLD_FLAG = 35774,
+ SPELL_HORDE_GREEN_FLAG = 35775,
+
+ SPELL_LAST_MAN_STANDING = 26549 // Achievement Credit
+};
+
+enum ArenaWorldStates
+{
+ ARENA_WORLD_STATE_ALIVE_PLAYERS_GREEN = 3600,
+ ARENA_WORLD_STATE_ALIVE_PLAYERS_GOLD = 3601
+};
+
+class Arena : public Battleground
+{
+ protected:
+ Arena();
+
+ void AddPlayer(Player* player) override;
+ void RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/) override;
+
+ void FillInitialWorldStates(WorldPacket& data) override;
+ void UpdateArenaWorldState();
+
+ void HandleKillPlayer(Player* player, Player* killer) override;
+
+ private:
+ void RemovePlayerAtLeave(uint64 guid, bool transport, bool sendPacket) override;
+ void CheckWinConditions() override;
+ void EndBattleground(uint32 winner) override;
+};
+
+#endif // TRINITY_ARENA_H
diff --git a/src/server/game/Battlegrounds/ArenaScore.h b/src/server/game/Battlegrounds/ArenaScore.h
new file mode 100644
index 00000000000..bd0ea6b02e9
--- /dev/null
+++ b/src/server/game/Battlegrounds/ArenaScore.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef TRINITY_ARENA_SCORE_H
+#define TRINITY_ARENA_SCORE_H
+
+#include "BattlegroundScore.h"
+#include "SharedDefines.h"
+
+struct ArenaScore : public BattlegroundScore
+{
+ friend class Arena;
+
+ protected:
+ ArenaScore(uint64 playerGuid, uint32 team) : BattlegroundScore(playerGuid), TeamId(team == ALLIANCE ? BG_TEAM_ALLIANCE : BG_TEAM_HORDE) { }
+
+ void AppendToPacket(WorldPacket& data) final override
+ {
+ data << uint64(PlayerGuid);
+
+ data << uint32(KillingBlows);
+ data << uint8(TeamId);
+ data << uint32(DamageDone);
+ data << uint32(HealingDone);
+
+ BuildObjectivesBlock(data);
+ }
+
+ void BuildObjectivesBlock(WorldPacket& data) final override
+ {
+ data << uint32(0); // Objectives Count
+ }
+
+ // For Logging purpose
+ std::string ToString() const override
+ {
+ std::ostringstream stream;
+ stream << "Damage done: " << DamageDone << ", Healing done: " << HealingDone << ", Killing blows: " << KillingBlows;
+ return stream.str();
+ }
+
+ uint8 TeamId; // BattlegroundTeamId
+};
+
+struct ArenaTeamScore
+{
+ friend class Arena;
+ friend class Battleground;
+
+ protected:
+ ArenaTeamScore() : RatingChange(0), MatchmakerRating(0) { }
+
+ virtual ~ArenaTeamScore() { }
+
+ void Reset()
+ {
+ RatingChange = 0;
+ MatchmakerRating = 0;
+ TeamName.clear();
+ }
+
+ void Assign(int32 ratingChange, uint32 matchMakerRating, std::string const& teamName)
+ {
+ RatingChange = ratingChange;
+ MatchmakerRating = matchMakerRating;
+ TeamName = teamName;
+ }
+
+ void BuildRatingInfoBlock(WorldPacket& data)
+ {
+ uint32 ratingLost = std::abs(std::min(RatingChange, 0));
+ uint32 ratingWon = std::max(RatingChange, 0);
+
+ // should be old rating, new rating, and client will calculate rating change itself
+ data << uint32(ratingLost);
+ data << uint32(ratingWon);
+ data << uint32(MatchmakerRating);
+ }
+
+ void BuildTeamInfoBlock(WorldPacket& data)
+ {
+ data << TeamName;
+ }
+
+ int32 RatingChange;
+ uint32 MatchmakerRating;
+ std::string TeamName;
+};
+
+#endif // TRINITY_ARENA_SCORE_H
diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp
index 2ca60534f30..1bc83cccaa0 100644
--- a/src/server/game/Battlegrounds/ArenaTeam.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeam.cpp
@@ -604,7 +604,7 @@ uint32 ArenaTeam::GetPoints(uint32 memberRating)
points = 344;
}
else
- points = 1511.26f / (1.0f + 1639.28f * exp(-0.00412f * (float)rating));
+ points = 1511.26f / (1.0f + 1639.28f * std::exp(-0.00412f * float(rating)));
// Type penalties for teams < 5v5
if (Type == ARENA_TEAM_2v2)
@@ -649,7 +649,7 @@ float ArenaTeam::GetChanceAgainst(uint32 ownRating, uint32 opponentRating)
{
// Returns the chance to win against a team with the given rating, used in the rating adjustment calculation
// ELO system
- return 1.0f / (1.0f + exp(log(10.0f) * (float)((float)opponentRating - (float)ownRating) / 650.0f));
+ return 1.0f / (1.0f + std::exp(std::log(10.0f) * (float(opponentRating) - float(ownRating)) / 650.0f));
}
int32 ArenaTeam::GetMatchmakerRatingMod(uint32 ownRating, uint32 opponentRating, bool won /*, float& confidence_factor*/)
diff --git a/src/server/game/Battlegrounds/ArenaTeam.h b/src/server/game/Battlegrounds/ArenaTeam.h
index cd9e2be4318..d3b6342b273 100644
--- a/src/server/game/Battlegrounds/ArenaTeam.h
+++ b/src/server/game/Battlegrounds/ArenaTeam.h
@@ -20,7 +20,6 @@
#define TRINITYCORE_ARENATEAM_H
#include "QueryResult.h"
-#include <ace/Singleton.h>
#include <list>
#include <map>
@@ -130,7 +129,7 @@ class ArenaTeam
uint8 GetSlot() const { return GetSlotByType(GetType()); }
static uint8 GetSlotByType(uint32 type);
uint64 GetCaptain() const { return CaptainGuid; }
- std::string const& GetName() const { return TeamName; }
+ std::string const& GetName() const { return TeamName; }
const ArenaTeamStats& GetStats() const { return Stats; }
uint32 GetRating() const { return Stats.Rating; }
diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp
index 347db73f991..cd49158b5d0 100644
--- a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp
@@ -159,7 +159,7 @@ void ArenaTeamMgr::DistributeArenaPoints()
{
// Add points to player if online
if (Player* player = HashMapHolder<Player>::Find(playerItr->first))
- player->ModifyArenaPoints(playerItr->second, &trans);
+ player->ModifyArenaPoints(playerItr->second, trans);
else // Update database
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_CHAR_ARENA_POINTS);
diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.h b/src/server/game/Battlegrounds/ArenaTeamMgr.h
index 123cbe2d41b..118e9674fbf 100644
--- a/src/server/game/Battlegrounds/ArenaTeamMgr.h
+++ b/src/server/game/Battlegrounds/ArenaTeamMgr.h
@@ -22,12 +22,18 @@
class ArenaTeamMgr
{
- friend class ACE_Singleton<ArenaTeamMgr, ACE_Null_Mutex>;
+private:
ArenaTeamMgr();
~ArenaTeamMgr();
public:
- typedef UNORDERED_MAP<uint32, ArenaTeam*> ArenaTeamContainer;
+ static ArenaTeamMgr* instance()
+ {
+ static ArenaTeamMgr instance;
+ return &instance;
+ }
+
+ typedef std::unordered_map<uint32, ArenaTeam*> ArenaTeamContainer;
ArenaTeam* GetArenaTeamById(uint32 arenaTeamId) const;
ArenaTeam* GetArenaTeamByName(std::string const& arenaTeamName) const;
@@ -50,6 +56,6 @@ protected:
ArenaTeamContainer ArenaTeamStore;
};
-#define sArenaTeamMgr ACE_Singleton<ArenaTeamMgr, ACE_Null_Mutex>::instance()
+#define sArenaTeamMgr ArenaTeamMgr::instance()
#endif
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index c4aa3ef4481..3a59ffa8cf9 100644
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -16,11 +16,12 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "ArenaTeam.h"
-#include "ArenaTeamMgr.h"
+#include "ArenaScore.h"
#include "Battleground.h"
#include "BattlegroundMgr.h"
+#include "BattlegroundScore.h"
#include "Creature.h"
+#include "CreatureTextMgr.h"
#include "Chat.h"
#include "Formulas.h"
#include "GridNotifiersImpl.h"
@@ -33,7 +34,6 @@
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "Util.h"
-#include "World.h"
#include "WorldPacket.h"
namespace Trinity
@@ -100,13 +100,13 @@ namespace Trinity
int32 _arg1;
int32 _arg2;
};
-} // namespace Trinity
+} // namespace Trinity
template<class Do>
void Battleground::BroadcastWorker(Do& _do)
{
for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
- if (Player* player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)))
+ if (Player* player = _GetPlayer(itr, "BroadcastWorker"))
_do(player);
}
@@ -124,7 +124,7 @@ Battleground::Battleground()
m_InvitedHorde = 0;
m_ArenaType = 0;
m_IsArena = false;
- m_Winner = 2;
+ _winnerTeamId = BG_TEAM_NEUTRAL;
m_StartTime = 0;
m_ResetStatTimer = 0;
m_ValidStartPositionTimer = 0;
@@ -149,24 +149,9 @@ Battleground::Battleground()
m_StartMaxDist = 0.0f;
ScriptId = 0;
- m_TeamStartLocX[TEAM_ALLIANCE] = 0;
- m_TeamStartLocX[TEAM_HORDE] = 0;
-
- m_TeamStartLocY[TEAM_ALLIANCE] = 0;
- m_TeamStartLocY[TEAM_HORDE] = 0;
-
- m_TeamStartLocZ[TEAM_ALLIANCE] = 0;
- m_TeamStartLocZ[TEAM_HORDE] = 0;
-
- m_TeamStartLocO[TEAM_ALLIANCE] = 0;
- m_TeamStartLocO[TEAM_HORDE] = 0;
-
m_ArenaTeamIds[TEAM_ALLIANCE] = 0;
m_ArenaTeamIds[TEAM_HORDE] = 0;
- m_ArenaTeamRatingChanges[TEAM_ALLIANCE] = 0;
- m_ArenaTeamRatingChanges[TEAM_HORDE] = 0;
-
m_ArenaTeamMMR[TEAM_ALLIANCE] = 0;
m_ArenaTeamMMR[TEAM_HORDE] = 0;
@@ -261,14 +246,13 @@ void Battleground::Update(uint32 diff)
{
if (GetStartTime() >= 47 * MINUTE*IN_MILLISECONDS)
{
- UpdateArenaWorldState();
- CheckArenaAfterTimerConditions();
+ EndBattleground(0);
return;
}
}
else
{
- _ProcessRessurect(diff);
+ _ProcessResurrect(diff);
if (sBattlegroundMgr->GetPrematureFinishTime() && (GetPlayersCountByTeam(ALLIANCE) < GetMinPlayersPerTeam() || GetPlayersCountByTeam(HORDE) < GetMinPlayersPerTeam()))
_ProcessProgress(diff);
else if (m_PrematureCountDown)
@@ -300,17 +284,15 @@ inline void Battleground::_CheckSafePositions(uint32 diff)
{
m_ValidStartPositionTimer = 0;
- Position pos;
- float x, y, z, o;
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
if (Player* player = ObjectAccessor::FindPlayer(itr->first))
{
- player->GetPosition(&pos);
- GetTeamStartLoc(player->GetBGTeam(), x, y, z, o);
- if (pos.GetExactDistSq(x, y, z) > maxDist)
+ Position pos = player->GetPosition();
+ Position const* startPos = GetTeamStartPosition(Battleground::GetTeamIndexByTeamId(player->GetBGTeam()));
+ if (pos.GetExactDistSq(startPos) > maxDist)
{
TC_LOG_DEBUG("bg.battleground", "BATTLEGROUND: Sending %s back to start location (map: %u) (possible exploit)", player->GetName().c_str(), GetMapId());
- player->TeleportTo(GetMapId(), x, y, z, o);
+ player->TeleportTo(GetMapId(), startPos->GetPositionX(), startPos->GetPositionY(), startPos->GetPositionZ(), startPos->GetOrientation());
}
}
}
@@ -334,10 +316,10 @@ inline void Battleground::_ProcessOfflineQueue()
}
}
-inline void Battleground::_ProcessRessurect(uint32 diff)
+inline void Battleground::_ProcessResurrect(uint32 diff)
{
// *********************************************************
- // *** BATTLEGROUND RESSURECTION SYSTEM ***
+ // *** BATTLEGROUND RESURRECTION SYSTEM ***
// *********************************************************
// this should be handled by spell system
m_LastResurrectTime += diff;
@@ -537,7 +519,7 @@ inline void Battleground::_ProcessJoin(uint32 diff)
}
}
- CheckArenaWinConditions();
+ CheckWinConditions();
}
else
{
@@ -551,7 +533,7 @@ inline void Battleground::_ProcessJoin(uint32 diff)
}
// Announce BG starting
if (sWorld->getBoolConfig(CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE))
- sWorld->SendWorldText(LANG_BG_STARTED_ANNOUNCE_WORLD, GetName(), GetMinLevel(), GetMaxLevel());
+ sWorld->SendWorldText(LANG_BG_STARTED_ANNOUNCE_WORLD, GetName().c_str(), GetMinLevel(), GetMaxLevel());
}
}
}
@@ -578,7 +560,7 @@ inline void Battleground::_ProcessLeave(uint32 diff)
}
}
-inline Player* Battleground::_GetPlayer(uint64 guid, bool offlineRemove, char const* context) const
+Player* Battleground::_GetPlayer(uint64 guid, bool offlineRemove, char const* context) const
{
Player* player = NULL;
if (!offlineRemove)
@@ -591,17 +573,7 @@ inline Player* Battleground::_GetPlayer(uint64 guid, bool offlineRemove, char co
return player;
}
-inline Player* Battleground::_GetPlayer(BattlegroundPlayerMap::iterator itr, char const* context)
-{
- return _GetPlayer(itr->first, itr->second.OfflineRemoveTime, context);
-}
-
-inline Player* Battleground::_GetPlayer(BattlegroundPlayerMap::const_iterator itr, char const* context) const
-{
- return _GetPlayer(itr->first, itr->second.OfflineRemoveTime, context);
-}
-
-inline Player* Battleground::_GetPlayerForTeam(uint32 teamId, BattlegroundPlayerMap::const_iterator itr, char const* context) const
+Player* Battleground::_GetPlayerForTeam(uint32 teamId, BattlegroundPlayerMap::const_iterator itr, char const* context) const
{
Player* player = _GetPlayer(itr, context);
if (player)
@@ -615,13 +587,16 @@ inline Player* Battleground::_GetPlayerForTeam(uint32 teamId, BattlegroundPlayer
return player;
}
-void Battleground::SetTeamStartLoc(uint32 TeamID, float X, float Y, float Z, float O)
+void Battleground::SetTeamStartPosition(TeamId teamId, Position const& pos)
+{
+ ASSERT(teamId < TEAM_NEUTRAL);
+ StartPosition[teamId] = pos;
+}
+
+Position const* Battleground::GetTeamStartPosition(TeamId teamId) const
{
- TeamId idx = GetTeamIndexByTeamId(TeamID);
- m_TeamStartLocX[idx] = X;
- m_TeamStartLocY[idx] = Y;
- m_TeamStartLocZ[idx] = Z;
- m_TeamStartLocO[idx] = O;
+ ASSERT(teamId < TEAM_NEUTRAL);
+ return &StartPosition[teamId];
}
void Battleground::SendPacketToAll(WorldPacket* packet)
@@ -643,6 +618,11 @@ void Battleground::SendPacketToTeam(uint32 TeamID, WorldPacket* packet, Player*
}
}
+void Battleground::SendChatMessage(Creature* source, uint8 textId, WorldObject* target /*= NULL*/)
+{
+ sCreatureTextMgr->SendChat(source, textId, target, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP);
+}
+
void Battleground::PlaySoundToAll(uint32 SoundID)
{
WorldPacket data;
@@ -695,10 +675,21 @@ void Battleground::RewardHonorToTeam(uint32 Honor, uint32 TeamID)
void Battleground::RewardReputationToTeam(uint32 faction_id, uint32 Reputation, uint32 TeamID)
{
- if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(faction_id))
- for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
- if (Player* player = _GetPlayerForTeam(TeamID, itr, "RewardReputationToTeam"))
- player->GetReputationMgr().ModifyReputation(factionEntry, Reputation);
+ FactionEntry const* factionEntry = sFactionStore.LookupEntry(faction_id);
+ if (!factionEntry)
+ return;
+
+ for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
+ {
+ Player* player = _GetPlayerForTeam(TeamID, itr, "RewardReputationToTeam");
+ if (!player)
+ continue;
+
+ uint32 repGain = Reputation;
+ AddPct(repGain, player->GetTotalAuraModifier(SPELL_AURA_MOD_REPUTATION_GAIN));
+ AddPct(repGain, player->GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_FACTION_REPUTATION_GAIN, faction_id));
+ player->GetReputationMgr().ModifyReputation(factionEntry, repGain);
+ }
}
void Battleground::UpdateWorldState(uint32 Field, uint32 Value)
@@ -719,18 +710,6 @@ void Battleground::EndBattleground(uint32 winner)
{
RemoveFromBGFreeSlotQueue();
- ArenaTeam* winnerArenaTeam = NULL;
- ArenaTeam* loserArenaTeam = NULL;
-
- uint32 loserTeamRating = 0;
- uint32 loserMatchmakerRating = 0;
- int32 loserChange = 0;
- int32 loserMatchmakerChange = 0;
- uint32 winnerTeamRating = 0;
- uint32 winnerMatchmakerRating = 0;
- int32 winnerChange = 0;
- int32 winnerMatchmakerChange = 0;
-
int32 winmsg_id = 0;
if (winner == ALLIANCE)
@@ -739,7 +718,7 @@ void Battleground::EndBattleground(uint32 winner)
PlaySoundToAll(SOUND_ALLIANCE_WINS); // alliance wins sound
- SetWinner(WINNER_ALLIANCE);
+ SetWinner(BG_TEAM_ALLIANCE);
}
else if (winner == HORDE)
{
@@ -747,89 +726,26 @@ void Battleground::EndBattleground(uint32 winner)
PlaySoundToAll(SOUND_HORDE_WINS); // horde wins sound
- SetWinner(WINNER_HORDE);
+ SetWinner(BG_TEAM_HORDE);
}
else
{
- SetWinner(3);
+ SetWinner(BG_TEAM_NEUTRAL);
}
SetStatus(STATUS_WAIT_LEAVE);
//we must set it this way, because end time is sent in packet!
m_EndTime = TIME_TO_AUTOREMOVE;
- // arena rating calculation
- if (isArena() && isRated())
- {
- winnerArenaTeam = sArenaTeamMgr->GetArenaTeamById(GetArenaTeamIdForTeam(winner));
- loserArenaTeam = sArenaTeamMgr->GetArenaTeamById(GetArenaTeamIdForTeam(GetOtherTeam(winner)));
-
- if (winnerArenaTeam && loserArenaTeam && winnerArenaTeam != loserArenaTeam)
- {
- if (winner != WINNER_NONE)
- {
- loserTeamRating = loserArenaTeam->GetRating();
- loserMatchmakerRating = GetArenaMatchmakerRating(GetOtherTeam(winner));
- winnerTeamRating = winnerArenaTeam->GetRating();
- winnerMatchmakerRating = GetArenaMatchmakerRating(winner);
- winnerMatchmakerChange = winnerArenaTeam->WonAgainst(winnerMatchmakerRating, loserMatchmakerRating, winnerChange);
- loserMatchmakerChange = loserArenaTeam->LostAgainst(loserMatchmakerRating, winnerMatchmakerRating, loserChange);
- TC_LOG_DEBUG("bg.arena", "match Type: %u --- Winner: old rating: %u, rating gain: %d, old MMR: %u, MMR gain: %d --- Loser: old rating: %u, rating loss: %d, old MMR: %u, MMR loss: %d ---", m_ArenaType, winnerTeamRating, winnerChange, winnerMatchmakerRating,
- winnerMatchmakerChange, loserTeamRating, loserChange, loserMatchmakerRating, loserMatchmakerChange);
- SetArenaMatchmakerRating(winner, winnerMatchmakerRating + winnerMatchmakerChange);
- SetArenaMatchmakerRating(GetOtherTeam(winner), loserMatchmakerRating + loserMatchmakerChange);
- SetArenaTeamRatingChangeForTeam(winner, winnerChange);
- SetArenaTeamRatingChangeForTeam(GetOtherTeam(winner), loserChange);
- TC_LOG_DEBUG("bg.arena", "Arena match Type: %u for Team1Id: %u - Team2Id: %u ended. WinnerTeamId: %u. Winner rating: +%d, Loser rating: %d", m_ArenaType, m_ArenaTeamIds[TEAM_ALLIANCE], m_ArenaTeamIds[TEAM_HORDE], winnerArenaTeam->GetId(), winnerChange, loserChange);
- if (sWorld->getBoolConfig(CONFIG_ARENA_LOG_EXTENDED_INFO))
- for (Battleground::BattlegroundScoreMap::const_iterator itr = GetPlayerScoresBegin(); itr != GetPlayerScoresEnd(); ++itr)
- if (Player* player = ObjectAccessor::FindPlayer(itr->first))
- {
- TC_LOG_DEBUG("bg.arena", "Statistics match Type: %u for %s (GUID: " UI64FMTD ", Team: %d, IP: %s): %u damage, %u healing, %u killing blows",
- m_ArenaType, player->GetName().c_str(), itr->first, player->GetArenaTeamId(m_ArenaType == 5 ? 2 : m_ArenaType == 3),
- player->GetSession()->GetRemoteAddress().c_str(), itr->second->DamageDone, itr->second->HealingDone,
- itr->second->KillingBlows);
- }
- }
- // Deduct 16 points from each teams arena-rating if there are no winners after 45+2 minutes
- else
- {
- SetArenaTeamRatingChangeForTeam(ALLIANCE, ARENA_TIMELIMIT_POINTS_LOSS);
- SetArenaTeamRatingChangeForTeam(HORDE, ARENA_TIMELIMIT_POINTS_LOSS);
- winnerArenaTeam->FinishGame(ARENA_TIMELIMIT_POINTS_LOSS);
- loserArenaTeam->FinishGame(ARENA_TIMELIMIT_POINTS_LOSS);
- }
- }
- else
- {
- SetArenaTeamRatingChangeForTeam(ALLIANCE, 0);
- SetArenaTeamRatingChangeForTeam(HORDE, 0);
- }
- }
-
WorldPacket pvpLogData;
- sBattlegroundMgr->BuildPvpLogDataPacket(&pvpLogData, this);
+ BuildPvPLogDataPacket(pvpLogData);
BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(GetTypeID(), GetArenaType());
- uint8 aliveWinners = GetAlivePlayersCountByTeam(winner);
for (BattlegroundPlayerMap::iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
{
uint32 team = itr->second.Team;
- if (itr->second.OfflineRemoveTime)
- {
- //if rated arena match - make member lost!
- if (isArena() && isRated() && winnerArenaTeam && loserArenaTeam && winnerArenaTeam != loserArenaTeam)
- {
- if (team == winner)
- winnerArenaTeam->OfflineMemberLost(itr->first, loserMatchmakerRating, winnerMatchmakerChange);
- else
- loserArenaTeam->OfflineMemberLost(itr->first, winnerMatchmakerRating, loserMatchmakerChange);
- }
- continue;
- }
-
Player* player = _GetPlayer(itr, "EndBattleground");
if (!player)
continue;
@@ -838,10 +754,6 @@ void Battleground::EndBattleground(uint32 winner)
if (player->HasAuraType(SPELL_AURA_SPIRIT_OF_REDEMPTION))
player->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT);
- // Last standing - Rated 5v5 arena & be solely alive player
- if (team == winner && isArena() && isRated() && GetArenaType() == ARENA_TYPE_5v5 && aliveWinners == 1 && player->IsAlive())
- player->CastSpell(player, SPELL_THE_LAST_STANDING, true);
-
if (!player->IsAlive())
{
player->ResurrectPlayer(1.0f);
@@ -854,27 +766,6 @@ void Battleground::EndBattleground(uint32 winner)
player->getHostileRefManager().deleteReferences();
}
- // per player calculation
- if (isArena() && isRated() && winnerArenaTeam && loserArenaTeam && winnerArenaTeam != loserArenaTeam)
- {
- if (team == winner)
- {
- // update achievement BEFORE personal rating update
- uint32 rating = player->GetArenaPersonalRating(winnerArenaTeam->GetSlot());
- player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA, rating ? rating : 1);
- player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA, GetMapId());
-
- winnerArenaTeam->MemberWon(player, loserMatchmakerRating, winnerMatchmakerChange);
- }
- else
- {
- loserArenaTeam->MemberLost(player, winnerMatchmakerRating, loserMatchmakerChange);
-
- // Arena lost => reset the win_rated_arena having the "no_lose" condition
- player->ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA, ACHIEVEMENT_CRITERIA_CONDITION_NO_LOSE);
- }
- }
-
uint32 winner_kills = player->GetRandomWinner() ? sWorld->getIntConfig(CONFIG_BG_REWARD_WINNER_HONOR_LAST) : sWorld->getIntConfig(CONFIG_BG_REWARD_WINNER_HONOR_FIRST);
uint32 loser_kills = player->GetRandomWinner() ? sWorld->getIntConfig(CONFIG_BG_REWARD_LOSER_HONOR_LAST) : sWorld->getIntConfig(CONFIG_BG_REWARD_LOSER_HONOR_FIRST);
uint32 winner_arena = player->GetRandomWinner() ? sWorld->getIntConfig(CONFIG_BG_REWARD_WINNER_ARENA_LAST) : sWorld->getIntConfig(CONFIG_BG_REWARD_WINNER_ARENA_FIRST);
@@ -912,17 +803,6 @@ void Battleground::EndBattleground(uint32 winner)
player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND, 1);
}
- if (isArena() && isRated() && winnerArenaTeam && loserArenaTeam && winnerArenaTeam != loserArenaTeam)
- {
- // save the stat changes
- winnerArenaTeam->SaveToDB();
- loserArenaTeam->SaveToDB();
- // send updated arena team stats to players
- // this way all arena team members will get notified, not only the ones who participated in this match
- winnerArenaTeam->NotifyStatsChanged();
- loserArenaTeam->NotifyStatsChanged();
- }
-
if (winmsg_id)
SendMessageToAll(winmsg_id, CHAT_MSG_BG_SYSTEM_NEUTRAL);
}
@@ -953,7 +833,7 @@ void Battleground::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac
participant = true;
}
- BattlegroundScoreMap::iterator itr2 = PlayerScores.find(guid);
+ BattlegroundScoreMap::iterator itr2 = PlayerScores.find(GUID_LOPART(guid));
if (itr2 != PlayerScores.end())
{
delete itr2->second; // delete player's score
@@ -964,12 +844,14 @@ void Battleground::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac
Player* player = ObjectAccessor::FindPlayer(guid);
- // should remove spirit of redemption
if (player)
{
+ // should remove spirit of redemption
if (player->HasAuraType(SPELL_AURA_SPIRIT_OF_REDEMPTION))
player->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT);
+ player->RemoveAurasByType(SPELL_AURA_MOUNTED);
+
if (!player->IsAlive()) // resurrect on exit
{
player->ResurrectPlayer(1.0f);
@@ -989,26 +871,16 @@ void Battleground::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac
{
player->ClearAfkReports();
- if (!team) team = player->GetTeam();
-
// if arena, remove the specific arena auras
if (isArena())
{
- bgTypeId=BATTLEGROUND_AA; // set the bg type to all arenas (it will be used for queue refreshing)
+ bgTypeId = BATTLEGROUND_AA; // set the bg type to all arenas (it will be used for queue refreshing)
// unsummon current and summon old pet if there was one and there isn't a current pet
player->RemovePet(NULL, PET_SAVE_NOT_IN_SLOT);
player->ResummonPetTemporaryUnSummonedIfAny();
-
- if (isRated() && GetStatus() == STATUS_IN_PROGRESS)
- {
- //left a rated match while the encounter was in progress, consider as loser
- ArenaTeam* winnerArenaTeam = sArenaTeamMgr->GetArenaTeamById(GetArenaTeamIdForTeam(GetOtherTeam(team)));
- ArenaTeam* loserArenaTeam = sArenaTeamMgr->GetArenaTeamById(GetArenaTeamIdForTeam(team));
- if (winnerArenaTeam && loserArenaTeam && winnerArenaTeam != loserArenaTeam)
- loserArenaTeam->MemberLost(player, GetArenaMatchmakerRating(GetOtherTeam(team)));
- }
}
+
if (SendPacket)
{
WorldPacket data;
@@ -1019,26 +891,12 @@ void Battleground::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac
// this call is important, because player, when joins to battleground, this method is not called, so it must be called when leaving bg
player->RemoveBattlegroundQueueId(bgQueueTypeId);
}
- else
- // removing offline participant
- {
- if (isRated() && GetStatus() == STATUS_IN_PROGRESS)
- {
- //left a rated match while the encounter was in progress, consider as loser
- ArenaTeam* others_arena_team = sArenaTeamMgr->GetArenaTeamById(GetArenaTeamIdForTeam(GetOtherTeam(team)));
- ArenaTeam* players_arena_team = sArenaTeamMgr->GetArenaTeamById(GetArenaTeamIdForTeam(team));
- if (others_arena_team && players_arena_team)
- players_arena_team->OfflineMemberLost(guid, GetArenaMatchmakerRating(GetOtherTeam(team)));
- }
- }
// remove from raid group if player is member
if (Group* group = GetBgRaid(team))
{
if (!group->RemoveMember(guid)) // group was disbanded
- {
SetBgRaid(team, NULL);
- }
}
DecreaseInvitedCount(team);
//we should update battleground queue, but only if bg isn't ending
@@ -1073,7 +931,7 @@ void Battleground::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac
// this method is called when no players remains in battleground
void Battleground::Reset()
{
- SetWinner(WINNER_NONE);
+ SetWinner(BG_TEAM_NEUTRAL);
SetStatus(STATUS_WAIT_QUEUE);
SetStartTime(0);
SetEndTime(0);
@@ -1094,6 +952,9 @@ void Battleground::Reset()
delete itr->second;
PlayerScores.clear();
+ for (uint8 i = 0; i < BG_TEAMS_COUNT; ++i)
+ _arenaTeamScores[i].Reset();
+
ResetBGSubclass();
}
@@ -1143,21 +1004,6 @@ void Battleground::AddPlayer(Player* player)
if (isArena())
{
player->RemoveArenaEnchantments(TEMP_ENCHANTMENT_SLOT);
- if (team == ALLIANCE) // gold
- {
- if (player->GetTeam() == HORDE)
- player->CastSpell(player, SPELL_HORDE_GOLD_FLAG, true);
- else
- player->CastSpell(player, SPELL_ALLIANCE_GOLD_FLAG, true);
- }
- else // green
- {
- if (player->GetTeam() == HORDE)
- player->CastSpell(player, SPELL_HORDE_GREEN_FLAG, true);
- else
- player->CastSpell(player, SPELL_ALLIANCE_GREEN_FLAG, true);
- }
-
player->DestroyConjuredItems(true);
player->UnsummonPetTemporaryIfAny();
@@ -1344,47 +1190,47 @@ bool Battleground::HasFreeSlots() const
return GetPlayersSize() < GetMaxPlayers();
}
-void Battleground::UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor)
+void Battleground::BuildPvPLogDataPacket(WorldPacket& data)
{
- //this procedure is called from virtual function implemented in bg subclass
- BattlegroundScoreMap::const_iterator itr = PlayerScores.find(Source->GetGUID());
- if (itr == PlayerScores.end()) // player not found...
- return;
+ uint8 type = (isArena() ? 1 : 0);
- switch (type)
+ data.Initialize(MSG_PVP_LOG_DATA, 1 + 1 + 4 + 40 * GetPlayerScoresSize());
+ data << uint8(type); // type (battleground = 0 / arena = 1)
+
+ if (type) // arena
{
- case SCORE_KILLING_BLOWS: // Killing blows
- itr->second->KillingBlows += value;
- break;
- case SCORE_DEATHS: // Deaths
- itr->second->Deaths += value;
- break;
- case SCORE_HONORABLE_KILLS: // Honorable kills
- itr->second->HonorableKills += value;
- break;
- case SCORE_BONUS_HONOR: // Honor bonus
- // do not add honor in arenas
- if (isBattleground())
- {
- // reward honor instantly
- if (doAddHonor)
- Source->RewardHonor(NULL, 1, value); // RewardHonor calls UpdatePlayerScore with doAddHonor = false
- else
- itr->second->BonusHonor += value;
- }
- break;
- // used only in EY, but in MSG_PVP_LOG_DATA opcode
- case SCORE_DAMAGE_DONE: // Damage Done
- itr->second->DamageDone += value;
- break;
- case SCORE_HEALING_DONE: // Healing Done
- itr->second->HealingDone += value;
- break;
- default:
- TC_LOG_ERROR("bg.battleground", "Battleground::UpdatePlayerScore: unknown score type (%u) for BG (map: %u, instance id: %u)!",
- type, m_MapId, m_InstanceID);
- break;
+ for (uint8 i = 0; i < BG_TEAMS_COUNT; ++i)
+ _arenaTeamScores[i].BuildRatingInfoBlock(data);
+
+ for (uint8 i = 0; i < BG_TEAMS_COUNT; ++i)
+ _arenaTeamScores[i].BuildTeamInfoBlock(data);
}
+
+ if (GetStatus() == STATUS_WAIT_LEAVE)
+ {
+ data << uint8(1); // bg ended
+ data << uint8(GetWinner()); // who win
+ }
+ else
+ data << uint8(0); // bg not ended
+
+ data << uint32(GetPlayerScoresSize());
+ for (auto const& score : PlayerScores)
+ score.second->AppendToPacket(data);
+}
+
+bool Battleground::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor)
+{
+ BattlegroundScoreMap::const_iterator itr = PlayerScores.find(player->GetGUIDLow());
+ if (itr == PlayerScores.end()) // player not found...
+ return false;
+
+ if (type == SCORE_BONUS_HONOR && doAddHonor && isBattleground())
+ player->RewardHonor(NULL, 1, value); // RewardHonor calls UpdatePlayerScore with doAddHonor = false
+ else
+ itr->second->UpdateScore(type, value);
+
+ return true;
}
void Battleground::AddPlayerToResurrectQueue(uint64 npc_guid, uint64 player_guid)
@@ -1453,8 +1299,6 @@ bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float
if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), entry, GetBgMap(),
PHASEMASK_NORMAL, x, y, z, o, rotation0, rotation1, rotation2, rotation3, 100, GO_STATE_READY))
{
- TC_LOG_ERROR("sql.sql", "Battleground::AddObject: cannot create gameobject (entry: %u) for BG (map: %u, instance id: %u)!",
- entry, m_MapId, m_InstanceID);
TC_LOG_ERROR("bg.battleground", "Battleground::AddObject: cannot create gameobject (entry: %u) for BG (map: %u, instance id: %u)!",
entry, m_MapId, m_InstanceID);
delete go;
@@ -1492,6 +1336,11 @@ bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float
return true;
}
+bool Battleground::AddObject(uint32 type, uint32 entry, Position const& pos, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime /*= 0*/)
+{
+ return AddObject(type, entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), rotation0, rotation1, rotation2, rotation3, respawnTime);
+}
+
// Some doors aren't despawned so we cannot handle their closing in gameobject::update()
// It would be nice to correctly implement GO_ACTIVATED state and open/close doors in gameobject code
void Battleground::DoorClose(uint32 type)
@@ -1568,7 +1417,7 @@ void Battleground::SpawnBGObject(uint32 type, uint32 respawntime)
}
}
-Creature* Battleground::AddCreature(uint32 entry, uint32 type, uint32 teamval, float x, float y, float z, float o, uint32 respawntime)
+Creature* Battleground::AddCreature(uint32 entry, uint32 type, float x, float y, float z, float o, TeamId /*teamId = TEAM_NEUTRAL*/, uint32 respawntime /*= 0*/)
{
// If the assert is called, means that BgCreatures must be resized!
ASSERT(type < BgCreatures.size());
@@ -1578,7 +1427,7 @@ Creature* Battleground::AddCreature(uint32 entry, uint32 type, uint32 teamval, f
return NULL;
Creature* creature = new Creature();
- if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, PHASEMASK_NORMAL, entry, 0, teamval, x, y, z, o))
+ if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, PHASEMASK_NORMAL, entry, x, y, z, o))
{
TC_LOG_ERROR("bg.battleground", "Battleground::AddCreature: cannot create creature (entry: %u) for BG (map: %u, instance id: %u)!",
entry, m_MapId, m_InstanceID);
@@ -1596,9 +1445,6 @@ Creature* Battleground::AddCreature(uint32 entry, uint32 type, uint32 teamval, f
delete creature;
return NULL;
}
- // Force using DB speeds
- creature->SetSpeed(MOVE_WALK, cinfo->speed_walk);
- creature->SetSpeed(MOVE_RUN, cinfo->speed_run);
if (!map->AddToMap(creature))
{
@@ -1611,7 +1457,12 @@ Creature* Battleground::AddCreature(uint32 entry, uint32 type, uint32 teamval, f
if (respawntime)
creature->SetRespawnDelay(respawntime);
- return creature;
+ return creature;
+}
+
+Creature* Battleground::AddCreature(uint32 entry, uint32 type, Position const& pos, TeamId teamId /*= TEAM_NEUTRAL*/, uint32 respawntime /*= 0*/)
+{
+ return AddCreature(entry, type, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), teamId, respawntime);
}
bool Battleground::DelCreature(uint32 type)
@@ -1650,13 +1501,11 @@ bool Battleground::DelObject(uint32 type)
return false;
}
-bool Battleground::AddSpiritGuide(uint32 type, float x, float y, float z, float o, uint32 team)
+bool Battleground::AddSpiritGuide(uint32 type, float x, float y, float z, float o, TeamId teamId /*= TEAM_NEUTRAL*/)
{
- uint32 entry = (team == ALLIANCE) ?
- BG_CREATURE_ENTRY_A_SPIRITGUIDE :
- BG_CREATURE_ENTRY_H_SPIRITGUIDE;
+ uint32 entry = (teamId == TEAM_ALLIANCE) ? BG_CREATURE_ENTRY_A_SPIRITGUIDE : BG_CREATURE_ENTRY_H_SPIRITGUIDE;
- if (Creature* creature = AddCreature(entry, type, team, x, y, z, o))
+ if (Creature* creature = AddCreature(entry, type, x, y, z, o, teamId))
{
creature->setDeathState(DEAD);
creature->SetUInt64Value(UNIT_FIELD_CHANNEL_OBJECT, creature->GetGUID());
@@ -1676,6 +1525,11 @@ bool Battleground::AddSpiritGuide(uint32 type, float x, float y, float z, float
return false;
}
+bool Battleground::AddSpiritGuide(uint32 type, Position const& pos, TeamId teamId /*= TEAM_NEUTRAL*/)
+{
+ return AddSpiritGuide(type, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), teamId);
+}
+
void Battleground::SendMessageToAll(int32 entry, ChatMsg type, Player const* source)
{
if (!entry)
@@ -1708,7 +1562,7 @@ void Battleground::SendWarningToAll(int32 entry, ...)
std::map<uint32, WorldPacket> localizedPackets;
for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
- if (Player* player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)))
+ if (Player* player = _GetPlayer(itr, "SendWarningToAll"))
{
if (localizedPackets.find(player->GetSession()->GetSessionDbLocaleIndex()) == localizedPackets.end())
{
@@ -1855,7 +1709,7 @@ void Battleground::PlayerAddedToBGCheckIfBGIsRunning(Player* player)
BlockMovement(player);
- sBattlegroundMgr->BuildPvpLogDataPacket(&data, this);
+ BuildPvPLogDataPacket(data);
player->SendDirectMessage(&data);
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_IN_PROGRESS, GetEndTime(), GetStartTime(), GetArenaType(), player->GetBGTeam());
@@ -1892,27 +1746,6 @@ int32 Battleground::GetObjectType(uint64 guid)
return -1;
}
-void Battleground::HandleKillUnit(Creature* /*victim*/, Player* /*killer*/) { }
-
-void Battleground::CheckArenaAfterTimerConditions()
-{
- EndBattleground(WINNER_NONE);
-}
-
-void Battleground::CheckArenaWinConditions()
-{
- if (!GetAlivePlayersCountByTeam(ALLIANCE) && GetPlayersCountByTeam(HORDE))
- EndBattleground(HORDE);
- else if (GetPlayersCountByTeam(ALLIANCE) && !GetAlivePlayersCountByTeam(HORDE))
- EndBattleground(ALLIANCE);
-}
-
-void Battleground::UpdateArenaWorldState()
-{
- UpdateWorldState(0xe10, GetAlivePlayersCountByTeam(HORDE));
- UpdateWorldState(0xe11, GetAlivePlayersCountByTeam(ALLIANCE));
-}
-
void Battleground::SetBgRaid(uint32 TeamID, Group* bg_raid)
{
Group*& old_raid = TeamID == ALLIANCE ? m_BgRaids[TEAM_ALLIANCE] : m_BgRaids[TEAM_HORDE];
diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h
index 5e2aa4b2316..c2e5b03e3ae 100644
--- a/src/server/game/Battlegrounds/Battleground.h
+++ b/src/server/game/Battlegrounds/Battleground.h
@@ -19,15 +19,19 @@
#ifndef __BATTLEGROUND_H
#define __BATTLEGROUND_H
+#include "ArenaScore.h"
#include "Common.h"
#include "SharedDefines.h"
#include "DBCEnums.h"
+#include "WorldPacket.h"
+#include "Object.h"
class Creature;
class GameObject;
class Group;
class Player;
class Unit;
+class WorldObject;
class WorldPacket;
class BattlegroundMap;
@@ -100,17 +104,12 @@ enum BattlegroundSpells
SPELL_SPIRIT_HEAL = 22012, // Spirit Heal
SPELL_RESURRECTION_VISUAL = 24171, // Resurrection Impact Visual
SPELL_ARENA_PREPARATION = 32727, // use this one, 32728 not correct
- SPELL_ALLIANCE_GOLD_FLAG = 32724,
- SPELL_ALLIANCE_GREEN_FLAG = 32725,
- SPELL_HORDE_GOLD_FLAG = 35774,
- SPELL_HORDE_GREEN_FLAG = 35775,
SPELL_PREPARATION = 44521, // Preparation
SPELL_SPIRIT_HEAL_MANA = 44535, // Spirit Heal
SPELL_RECENTLY_DROPPED_FLAG = 42792, // Recently Dropped Flag
SPELL_AURA_PLAYER_INACTIVE = 43681, // Inactive
SPELL_HONORABLE_DEFENDER_25Y = 68652, // +50% honor when standing at a capture point that you control, 25yards radius (added in 3.2)
- SPELL_HONORABLE_DEFENDER_60Y = 66157, // +50% honor when standing at a capture point that you control, 60yards radius (added in 3.2), probably for 40+ player battlegrounds
- SPELL_THE_LAST_STANDING = 26549 // Arena achievement related
+ SPELL_HONORABLE_DEFENDER_60Y = 66157 // +50% honor when standing at a capture point that you control, 60yards radius (added in 3.2), probably for 40+ player battlegrounds
};
enum BattlegroundTimeIntervals
@@ -169,34 +168,6 @@ struct BattlegroundObjectInfo
uint32 spellid;
};
-enum ScoreType
-{
- SCORE_KILLING_BLOWS = 1,
- SCORE_DEATHS = 2,
- SCORE_HONORABLE_KILLS = 3,
- SCORE_BONUS_HONOR = 4,
- //EY, but in MSG_PVP_LOG_DATA opcode!
- SCORE_DAMAGE_DONE = 5,
- SCORE_HEALING_DONE = 6,
- //WS
- SCORE_FLAG_CAPTURES = 7,
- SCORE_FLAG_RETURNS = 8,
- //AB and IC
- SCORE_BASES_ASSAULTED = 9,
- SCORE_BASES_DEFENDED = 10,
- //AV
- SCORE_GRAVEYARDS_ASSAULTED = 11,
- SCORE_GRAVEYARDS_DEFENDED = 12,
- SCORE_TOWERS_ASSAULTED = 13,
- SCORE_TOWERS_DEFENDED = 14,
- SCORE_MINES_CAPTURED = 15,
- SCORE_LEADERS_KILLED = 16,
- SCORE_SECONDARY_OBJECTIVES = 17,
- //SOTA
- SCORE_DESTROYED_DEMOLISHER = 18,
- SCORE_DESTROYED_WALL = 19
-};
-
enum ArenaType
{
ARENA_TYPE_2v2 = 2,
@@ -204,21 +175,6 @@ enum ArenaType
ARENA_TYPE_5v5 = 5
};
-enum BattlegroundType
-{
- TYPE_BATTLEGROUND = 3,
- TYPE_ARENA = 4
-};
-
-enum BattlegroundWinner
-{
- WINNER_HORDE = 0,
- WINNER_ALLIANCE = 1,
- WINNER_NONE = 2
-};
-
-#define BG_TEAMS_COUNT 2
-
enum BattlegroundStartingEvents
{
BG_STARTING_EVENT_NONE = 0x00,
@@ -237,22 +193,6 @@ enum BattlegroundStartingEventsIds
};
#define BG_STARTING_EVENT_COUNT 4
-struct BattlegroundScore
-{
- BattlegroundScore() : KillingBlows(0), Deaths(0), HonorableKills(0), BonusHonor(0),
- DamageDone(0), HealingDone(0)
- { }
-
- virtual ~BattlegroundScore() { } //virtual destructor is used when deleting score from scores map
-
- uint32 KillingBlows;
- uint32 Deaths;
- uint32 HonorableKills;
- uint32 BonusHonor;
- uint32 DamageDone;
- uint32 HealingDone;
-};
-
enum BGHonorMode
{
BG_NORMAL = 0,
@@ -296,7 +236,7 @@ class Battleground
/* Battleground */
// Get methods:
- char const* GetName() const { return m_Name; }
+ std::string const& GetName() const { return m_Name; }
BattlegroundTypeId GetTypeID(bool GetRandom = false) const { return GetRandom ? m_RandomTypeID : m_TypeID; }
BattlegroundBracketId GetBracketId() const { return m_BracketId; }
uint32 GetInstanceID() const { return m_InstanceID; }
@@ -316,13 +256,13 @@ class Battleground
int32 GetStartDelayTime() const { return m_StartDelayTime; }
uint8 GetArenaType() const { return m_ArenaType; }
- uint8 GetWinner() const { return m_Winner; }
+ BattlegroundTeamId GetWinner() const { return _winnerTeamId; }
uint32 GetScriptId() const { return ScriptId; }
uint32 GetBonusHonorFromKill(uint32 kills) const;
bool IsRandom() const { return m_IsRandom; }
// Set methods:
- void SetName(char const* Name) { m_Name = Name; }
+ void SetName(std::string const& name) { m_Name = name; }
void SetTypeID(BattlegroundTypeId TypeID) { m_TypeID = TypeID; }
void SetRandomTypeID(BattlegroundTypeId TypeID) { m_RandomTypeID = TypeID; }
//here we can count minlevel and maxlevel for players
@@ -339,7 +279,7 @@ class Battleground
void SetRated(bool state) { m_IsRated = state; }
void SetArenaType(uint8 type) { m_ArenaType = type; }
void SetArenaorBGType(bool _isArena) { m_IsArena = _isArena; }
- void SetWinner(uint8 winner) { m_Winner = winner; }
+ void SetWinner(BattlegroundTeamId winnerTeamId) { _winnerTeamId = winnerTeamId; }
void SetScriptId(uint32 scriptId) { ScriptId = scriptId; }
void ModifyStartDelayTime(int diff) { m_StartDelayTime -= diff; }
@@ -367,9 +307,7 @@ class Battleground
BattlegroundPlayerMap const& GetPlayers() const { return m_Players; }
uint32 GetPlayersSize() const { return m_Players.size(); }
- typedef std::map<uint64, BattlegroundScore*> BattlegroundScoreMap;
- BattlegroundScoreMap::const_iterator GetPlayerScoresBegin() const { return PlayerScores.begin(); }
- BattlegroundScoreMap::const_iterator GetPlayerScoresEnd() const { return PlayerScores.end(); }
+ typedef std::map<uint32, BattlegroundScore*> BattlegroundScoreMap;
uint32 GetPlayerScoresSize() const { return PlayerScores.size(); }
uint32 GetReviveQueueSize() const { return m_ReviveQueue.size(); }
@@ -394,15 +332,8 @@ class Battleground
BattlegroundMap* GetBgMap() const { ASSERT(m_Map); return m_Map; }
BattlegroundMap* FindBgMap() const { return m_Map; }
- void SetTeamStartLoc(uint32 TeamID, float X, float Y, float Z, float O);
- void GetTeamStartLoc(uint32 TeamID, float &X, float &Y, float &Z, float &O) const
- {
- TeamId idx = GetTeamIndexByTeamId(TeamID);
- X = m_TeamStartLocX[idx];
- Y = m_TeamStartLocY[idx];
- Z = m_TeamStartLocZ[idx];
- O = m_TeamStartLocO[idx];
- }
+ void SetTeamStartPosition(TeamId teamId, Position const& pos);
+ Position const* GetTeamStartPosition(TeamId teamId) const;
void SetStartMaxDist(float startMaxDist) { m_StartMaxDist = startMaxDist; }
float GetStartMaxDist() const { return m_StartMaxDist; }
@@ -414,6 +345,8 @@ class Battleground
void SendPacketToAll(WorldPacket* packet);
void YellToAll(Creature* creature, const char* text, uint32 language);
+ void SendChatMessage(Creature* source, uint8 textId, WorldObject* target = NULL);
+
template<class Do>
void BroadcastWorker(Do& _do);
@@ -425,7 +358,7 @@ class Battleground
void RewardReputationToTeam(uint32 faction_id, uint32 Reputation, uint32 TeamID);
void UpdateWorldState(uint32 Field, uint32 Value);
void UpdateWorldStateForPlayer(uint32 Field, uint32 Value, Player* player);
- void EndBattleground(uint32 winner);
+ virtual void EndBattleground(uint32 winner);
void BlockMovement(Player* player);
void SendWarningToAll(int32 entry, ...);
@@ -439,7 +372,8 @@ class Battleground
Group* GetBgRaid(uint32 TeamID) const { return TeamID == ALLIANCE ? m_BgRaids[TEAM_ALLIANCE] : m_BgRaids[TEAM_HORDE]; }
void SetBgRaid(uint32 TeamID, Group* bg_raid);
- virtual void UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true);
+ void BuildPvPLogDataPacket(WorldPacket& data);
+ virtual bool UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true);
static TeamId GetTeamIndexByTeamId(uint32 Team) { return Team == ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE; }
uint32 GetPlayersCountByTeam(uint32 Team) const { return m_PlayersCount[GetTeamIndexByTeamId(Team)]; }
@@ -452,34 +386,28 @@ class Battleground
++m_PlayersCount[GetTeamIndexByTeamId(Team)];
}
+ virtual void CheckWinConditions() { }
+
// used for rated arena battles
void SetArenaTeamIdForTeam(uint32 Team, uint32 ArenaTeamId) { m_ArenaTeamIds[GetTeamIndexByTeamId(Team)] = ArenaTeamId; }
uint32 GetArenaTeamIdForTeam(uint32 Team) const { return m_ArenaTeamIds[GetTeamIndexByTeamId(Team)]; }
uint32 GetArenaTeamIdByIndex(uint32 index) const { return m_ArenaTeamIds[index]; }
- void SetArenaTeamRatingChangeForTeam(uint32 Team, int32 RatingChange) { m_ArenaTeamRatingChanges[GetTeamIndexByTeamId(Team)] = RatingChange; }
- int32 GetArenaTeamRatingChangeForTeam(uint32 Team) const { return m_ArenaTeamRatingChanges[GetTeamIndexByTeamId(Team)]; }
- int32 GetArenaTeamRatingChangeByIndex(uint32 index) const { return m_ArenaTeamRatingChanges[index]; }
void SetArenaMatchmakerRating(uint32 Team, uint32 MMR){ m_ArenaTeamMMR[GetTeamIndexByTeamId(Team)] = MMR; }
uint32 GetArenaMatchmakerRating(uint32 Team) const { return m_ArenaTeamMMR[GetTeamIndexByTeamId(Team)]; }
- uint32 GetArenaMatchmakerRatingByIndex(uint32 index) const { return m_ArenaTeamMMR[index]; }
- void CheckArenaAfterTimerConditions();
- void CheckArenaWinConditions();
- void UpdateArenaWorldState();
// Triggers handle
// must be implemented in BG subclass
virtual void HandleAreaTrigger(Player* /*player*/, uint32 /*Trigger*/);
// must be implemented in BG subclass if need AND call base class generic code
virtual void HandleKillPlayer(Player* player, Player* killer);
- virtual void HandleKillUnit(Creature* /*unit*/, Player* /*killer*/);
+ virtual void HandleKillUnit(Creature* /*creature*/, Player* /*killer*/) { }
// Battleground events
virtual void EventPlayerDroppedFlag(Player* /*player*/) { }
virtual void EventPlayerClickedOnFlag(Player* /*player*/, GameObject* /*target_obj*/) { }
void EventPlayerLoggedIn(Player* player);
void EventPlayerLoggedOut(Player* player);
- virtual void EventPlayerDamagedGO(Player* /*player*/, GameObject* /*go*/, uint32 /*eventType*/) { }
- virtual void EventPlayerUsedGO(Player* /*player*/, GameObject* /*go*/){ }
+ virtual void ProcessEvent(WorldObject* /*obj*/, uint32 /*eventId*/, WorldObject* /*invoker*/ = NULL) { }
// this function can be used by spell to interact with the BG map
virtual void DoAction(uint32 /*action*/, uint64 /*var*/) { }
@@ -505,11 +433,14 @@ class Battleground
BGObjects BgObjects;
BGCreatures BgCreatures;
void SpawnBGObject(uint32 type, uint32 respawntime);
- bool AddObject(uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime = 0);
- Creature* AddCreature(uint32 entry, uint32 type, uint32 teamval, float x, float y, float z, float o, uint32 respawntime = 0);
+ virtual bool AddObject(uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime = 0);
+ bool AddObject(uint32 type, uint32 entry, Position const& pos, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime = 0);
+ virtual Creature* AddCreature(uint32 entry, uint32 type, float x, float y, float z, float o, TeamId teamId = TEAM_NEUTRAL, uint32 respawntime = 0);
+ Creature* AddCreature(uint32 entry, uint32 type, Position const& pos, TeamId teamId = TEAM_NEUTRAL, uint32 respawntime = 0);
bool DelCreature(uint32 type);
bool DelObject(uint32 type);
- bool AddSpiritGuide(uint32 type, float x, float y, float z, float o, uint32 team);
+ virtual bool AddSpiritGuide(uint32 type, float x, float y, float z, float o, TeamId teamId = TEAM_NEUTRAL);
+ bool AddSpiritGuide(uint32 type, Position const& pos, TeamId teamId = TEAM_NEUTRAL);
int32 GetObjectType(uint64 guid);
void DoorOpen(uint32 type);
@@ -545,12 +476,12 @@ class Battleground
void PlayerAddedToBGCheckIfBGIsRunning(Player* player);
Player* _GetPlayer(uint64 guid, bool offlineRemove, const char* context) const;
- Player* _GetPlayer(BattlegroundPlayerMap::iterator itr, const char* context);
- Player* _GetPlayer(BattlegroundPlayerMap::const_iterator itr, const char* context) const;
+ Player* _GetPlayer(BattlegroundPlayerMap::iterator itr, const char* context) { return _GetPlayer(itr->first, itr->second.OfflineRemoveTime != 0, context); }
+ Player* _GetPlayer(BattlegroundPlayerMap::const_iterator itr, const char* context) const { return _GetPlayer(itr->first, itr->second.OfflineRemoveTime != 0, context); }
Player* _GetPlayerForTeam(uint32 teamId, BattlegroundPlayerMap::const_iterator itr, const char* context) const;
void _ProcessOfflineQueue();
- void _ProcessRessurect(uint32 diff);
+ void _ProcessResurrect(uint32 diff);
void _ProcessProgress(uint32 diff);
void _ProcessLeave(uint32 diff);
void _ProcessJoin(uint32 diff);
@@ -578,6 +509,8 @@ class Battleground
BGHonorMode m_HonorMode;
int32 m_TeamScores[BG_TEAMS_COUNT];
+ ArenaTeamScore _arenaTeamScores[BG_TEAMS_COUNT];
+
private:
// Battleground
BattlegroundTypeId m_TypeID;
@@ -595,12 +528,12 @@ class Battleground
bool m_InBGFreeSlotQueue; // used to make sure that BG is only once inserted into the BattlegroundMgr.BGFreeSlotQueue[bgTypeId] deque
bool m_SetDeleteThis; // used for safe deletion of the bg after end / all players leave
bool m_IsArena;
- uint8 m_Winner; // 0=alliance, 1=horde, 2=none
+ BattlegroundTeamId _winnerTeamId;
int32 m_StartDelayTime;
bool m_IsRated; // is this battle rated?
bool m_PrematureCountDown;
uint32 m_PrematureCountDownTimer;
- char const* m_Name;
+ std::string m_Name;
/* Pre- and post-update hooks */
@@ -651,7 +584,6 @@ class Battleground
// Arena team ids by team
uint32 m_ArenaTeamIds[BG_TEAMS_COUNT];
- int32 m_ArenaTeamRatingChanges[BG_TEAMS_COUNT];
uint32 m_ArenaTeamMMR[BG_TEAMS_COUNT];
// Limits
@@ -665,10 +597,7 @@ class Battleground
// Start location
uint32 m_MapId;
BattlegroundMap* m_Map;
- float m_TeamStartLocX[BG_TEAMS_COUNT];
- float m_TeamStartLocY[BG_TEAMS_COUNT];
- float m_TeamStartLocZ[BG_TEAMS_COUNT];
- float m_TeamStartLocO[BG_TEAMS_COUNT];
+ Position StartPosition[BG_TEAMS_COUNT];
float m_StartMaxDist;
uint32 ScriptId;
};
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
index ab69c950ff4..82ea0901875 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
@@ -216,176 +216,6 @@ void BattlegroundMgr::BuildBattlegroundStatusPacket(WorldPacket* data, Battlegro
}
}
-void BattlegroundMgr::BuildPvpLogDataPacket(WorldPacket* data, Battleground* bg)
-{
- uint8 type = (bg->isArena() ? 1 : 0);
-
- data->Initialize(MSG_PVP_LOG_DATA, (1+1+4+40*bg->GetPlayerScoresSize()));
- *data << uint8(type); // type (battleground=0/arena=1)
-
- if (type) // arena
- {
- // it seems this must be according to BG_WINNER_A/H and _NOT_ TEAM_A/H
- for (int8 i = 1; i >= 0; --i)
- {
- int32 rating_change = bg->GetArenaTeamRatingChangeByIndex(i);
-
- uint32 pointsLost = rating_change < 0 ? -rating_change : 0;
- uint32 pointsGained = rating_change > 0 ? rating_change : 0;
- uint32 MatchmakerRating = bg->GetArenaMatchmakerRatingByIndex(i);
-
- *data << uint32(pointsLost); // Rating Lost
- *data << uint32(pointsGained); // Rating gained
- *data << uint32(MatchmakerRating); // Matchmaking Value
- TC_LOG_DEBUG("bg.battleground", "rating change: %d", rating_change);
- }
- for (int8 i = 1; i >= 0; --i)
- {
- if (ArenaTeam* at = sArenaTeamMgr->GetArenaTeamById(bg->GetArenaTeamIdByIndex(i)))
- *data << at->GetName();
- else
- *data << uint8(0);
- }
- }
-
- if (bg->GetStatus() != STATUS_WAIT_LEAVE)
- *data << uint8(0); // bg not ended
- else
- {
- *data << uint8(1); // bg ended
- *data << uint8(bg->GetWinner()); // who win
- }
-
- size_t wpos = data->wpos();
- uint32 scoreCount = 0;
- *data << uint32(scoreCount); // placeholder
-
- Battleground::BattlegroundScoreMap::const_iterator itr2 = bg->GetPlayerScoresBegin();
- for (Battleground::BattlegroundScoreMap::const_iterator itr = itr2; itr != bg->GetPlayerScoresEnd();)
- {
- itr2 = itr++;
- BattlegroundScore* score = itr2->second;
- if (!bg->IsPlayerInBattleground(itr2->first))
- {
- TC_LOG_ERROR("bg.battleground", "Player " UI64FMTD " has scoreboard entry for battleground %u but is not in battleground!", itr->first, bg->GetTypeID(true));
- continue;
- }
-
- *data << uint64(itr2->first);
- *data << uint32(score->KillingBlows);
- if (type == 0)
- {
- *data << uint32(score->HonorableKills);
- *data << uint32(score->Deaths);
- *data << uint32(score->BonusHonor);
- }
- else
- {
- Player* player = ObjectAccessor::FindPlayer(itr2->first);
- uint32 team = bg->GetPlayerTeam(itr2->first);
- if (!team && player)
- team = player->GetBGTeam();
- *data << uint8(team == ALLIANCE ? 1 : 0); // green or yellow
- }
- *data << uint32(score->DamageDone); // damage done
- *data << uint32(score->HealingDone); // healing done
- switch (bg->GetTypeID(true)) // battleground specific things
- {
- case BATTLEGROUND_RB:
- switch (bg->GetMapId())
- {
- case 489:
- *data << uint32(0x00000002); // count of next fields
- *data << uint32(((BattlegroundWGScore*)score)->FlagCaptures); // flag captures
- *data << uint32(((BattlegroundWGScore*)score)->FlagReturns); // flag returns
- break;
- case 566:
- *data << uint32(0x00000001); // count of next fields
- *data << uint32(((BattlegroundEYScore*)score)->FlagCaptures); // flag captures
- break;
- case 529:
- *data << uint32(0x00000002); // count of next fields
- *data << uint32(((BattlegroundABScore*)score)->BasesAssaulted); // bases asssulted
- *data << uint32(((BattlegroundABScore*)score)->BasesDefended); // bases defended
- break;
- case 30:
- *data << uint32(0x00000005); // count of next fields
- *data << uint32(((BattlegroundAVScore*)score)->GraveyardsAssaulted); // GraveyardsAssaulted
- *data << uint32(((BattlegroundAVScore*)score)->GraveyardsDefended); // GraveyardsDefended
- *data << uint32(((BattlegroundAVScore*)score)->TowersAssaulted); // TowersAssaulted
- *data << uint32(((BattlegroundAVScore*)score)->TowersDefended); // TowersDefended
- *data << uint32(((BattlegroundAVScore*)score)->MinesCaptured); // MinesCaptured
- break;
- case 607:
- *data << uint32(0x00000002); // count of next fields
- *data << uint32(((BattlegroundSAScore*)score)->demolishers_destroyed);
- *data << uint32(((BattlegroundSAScore*)score)->gates_destroyed);
- break;
- case 628: // IC
- *data << uint32(0x00000002); // count of next fields
- *data << uint32(((BattlegroundICScore*)score)->BasesAssaulted); // bases asssulted
- *data << uint32(((BattlegroundICScore*)score)->BasesDefended); // bases defended
- default:
- *data << uint32(0);
- break;
- }
- break;
- case BATTLEGROUND_AV:
- *data << uint32(0x00000005); // count of next fields
- *data << uint32(((BattlegroundAVScore*)score)->GraveyardsAssaulted); // GraveyardsAssaulted
- *data << uint32(((BattlegroundAVScore*)score)->GraveyardsDefended); // GraveyardsDefended
- *data << uint32(((BattlegroundAVScore*)score)->TowersAssaulted); // TowersAssaulted
- *data << uint32(((BattlegroundAVScore*)score)->TowersDefended); // TowersDefended
- *data << uint32(((BattlegroundAVScore*)score)->MinesCaptured); // MinesCaptured
- break;
- case BATTLEGROUND_WS:
- *data << uint32(0x00000002); // count of next fields
- *data << uint32(((BattlegroundWGScore*)score)->FlagCaptures); // flag captures
- *data << uint32(((BattlegroundWGScore*)score)->FlagReturns); // flag returns
- break;
- case BATTLEGROUND_AB:
- *data << uint32(0x00000002); // count of next fields
- *data << uint32(((BattlegroundABScore*)score)->BasesAssaulted); // bases assaulted
- *data << uint32(((BattlegroundABScore*)score)->BasesDefended); // bases defended
- break;
- case BATTLEGROUND_EY:
- *data << uint32(0x00000001); // count of next fields
- *data << uint32(((BattlegroundEYScore*)score)->FlagCaptures); // flag captures
- break;
- case BATTLEGROUND_SA:
- *data << uint32(0x00000002); // count of next fields
- *data << uint32(((BattlegroundSAScore*)score)->demolishers_destroyed);
- *data << uint32(((BattlegroundSAScore*)score)->gates_destroyed);
- break;
- case BATTLEGROUND_IC:
- *data << uint32(0x00000002); // count of next fields
- *data << uint32(((BattlegroundICScore*)score)->BasesAssaulted); // bases assaulted
- *data << uint32(((BattlegroundICScore*)score)->BasesDefended); // bases defended
- break;
- case BATTLEGROUND_NA:
- case BATTLEGROUND_BE:
- case BATTLEGROUND_AA:
- case BATTLEGROUND_RL:
- case BATTLEGROUND_DS:
- case BATTLEGROUND_RV:
- *data << uint32(0);
- break;
- default:
- TC_LOG_DEBUG("network", "Unhandled MSG_PVP_LOG_DATA for BG id %u", bg->GetTypeID());
- *data << uint32(0);
- break;
- }
- // should never happen
- if (++scoreCount >= bg->GetMaxPlayers() && itr != bg->GetPlayerScoresEnd())
- {
- TC_LOG_ERROR("bg.battleground", "Battleground %u scoreboard has more entries (%u) than allowed players in this bg (%u)", bg->GetTypeID(true), bg->GetPlayerScoresSize(), bg->GetMaxPlayers());
- break;
- }
- }
-
- data->put(wpos, scoreCount);
-}
-
void BattlegroundMgr::BuildGroupJoinedBattlegroundPacket(WorldPacket* data, GroupJoinBattlegroundResult result)
{
data->Initialize(SMSG_GROUP_JOINED_BATTLEGROUND, 4);
@@ -513,20 +343,7 @@ uint32 BattlegroundMgr::CreateClientVisibleInstanceId(BattlegroundTypeId bgTypeI
// create a new battleground that will really be used to play
Battleground* BattlegroundMgr::CreateNewBattleground(BattlegroundTypeId originalBgTypeId, PvPDifficultyEntry const* bracketEntry, uint8 arenaType, bool isRated)
{
- BattlegroundTypeId bgTypeId = originalBgTypeId;
- bool isRandom = false;
-
- switch (originalBgTypeId)
- {
- case BATTLEGROUND_RB:
- isRandom = true;
- /// Intentional fallback, "All Arenas" is random too
- case BATTLEGROUND_AA:
- bgTypeId = GetRandomBG(originalBgTypeId);
- break;
- default:
- break;
- }
+ BattlegroundTypeId bgTypeId = GetRandomBG(originalBgTypeId);
// get the template BG
Battleground* bg_template = GetBattlegroundTemplate(bgTypeId);
@@ -576,15 +393,15 @@ Battleground* BattlegroundMgr::CreateNewBattleground(BattlegroundTypeId original
break;
case BATTLEGROUND_RB:
case BATTLEGROUND_AA:
- bg = new Battleground(*bg_template);
- break;
default:
return NULL;
}
+ bool isRandom = bgTypeId != originalBgTypeId && !bg->isArena();
+
bg->SetBracket(bracketEntry);
bg->SetInstanceID(sMapMgr->GenerateInstanceId());
- bg->SetClientInstanceID(CreateClientVisibleInstanceId(isRandom ? BATTLEGROUND_RB : bgTypeId, bracketEntry->GetBracketId()));
+ bg->SetClientInstanceID(CreateClientVisibleInstanceId(originalBgTypeId, bracketEntry->GetBracketId()));
bg->Reset(); // reset the new bg (set status to status_wait_queue from status_none)
bg->SetStatus(STATUS_WAIT_JOIN); // start the joining of the bg
bg->SetArenaType(arenaType);
@@ -618,82 +435,88 @@ Battleground* BattlegroundMgr::CreateNewBattleground(BattlegroundTypeId original
}
// used to create the BG templates
-bool BattlegroundMgr::CreateBattleground(CreateBattlegroundData& data)
+bool BattlegroundMgr::CreateBattleground(BattlegroundTemplate const* bgTemplate)
{
- // Create the BG
- Battleground* bg = NULL;
- switch (data.bgTypeId)
+ Battleground* bg = GetBattlegroundTemplate(bgTemplate->Id);
+ if (!bg)
{
- case BATTLEGROUND_AV:
- bg = new BattlegroundAV;
- break;
- case BATTLEGROUND_WS:
- bg = new BattlegroundWS;
- break;
- case BATTLEGROUND_AB:
- bg = new BattlegroundAB;
- break;
- case BATTLEGROUND_NA:
- bg = new BattlegroundNA;
- break;
- case BATTLEGROUND_BE:
- bg = new BattlegroundBE;
- break;
- case BATTLEGROUND_EY:
- bg = new BattlegroundEY;
- break;
- case BATTLEGROUND_RL:
- bg = new BattlegroundRL;
- break;
- case BATTLEGROUND_SA:
- bg = new BattlegroundSA;
- break;
- case BATTLEGROUND_DS:
- bg = new BattlegroundDS;
- break;
- case BATTLEGROUND_RV:
- bg = new BattlegroundRV;
- break;
- case BATTLEGROUND_IC:
- bg = new BattlegroundIC;
- break;
- case BATTLEGROUND_AA:
- bg = new Battleground;
- break;
- case BATTLEGROUND_RB:
- bg = new Battleground;
- bg->SetRandom(true);
- break;
- default:
- return false;
+ // Create the BG
+ switch (bgTemplate->Id)
+ {
+ case BATTLEGROUND_AV:
+ bg = new BattlegroundAV();
+ break;
+ case BATTLEGROUND_WS:
+ bg = new BattlegroundWS();
+ break;
+ case BATTLEGROUND_AB:
+ bg = new BattlegroundAB();
+ break;
+ case BATTLEGROUND_NA:
+ bg = new BattlegroundNA();
+ break;
+ case BATTLEGROUND_BE:
+ bg = new BattlegroundBE();
+ break;
+ case BATTLEGROUND_EY:
+ bg = new BattlegroundEY();
+ break;
+ case BATTLEGROUND_RL:
+ bg = new BattlegroundRL();
+ break;
+ case BATTLEGROUND_SA:
+ bg = new BattlegroundSA();
+ break;
+ case BATTLEGROUND_DS:
+ bg = new BattlegroundDS();
+ break;
+ case BATTLEGROUND_RV:
+ bg = new BattlegroundRV();
+ break;
+ case BATTLEGROUND_IC:
+ bg = new BattlegroundIC();
+ break;
+ case BATTLEGROUND_AA:
+ bg = new Battleground();
+ break;
+ case BATTLEGROUND_RB:
+ bg = new Battleground();
+ bg->SetRandom(true);
+ break;
+ default:
+ return false;
+ }
+
+ bg->SetTypeID(bgTemplate->Id);
+ bg->SetInstanceID(0);
+ AddBattleground(bg);
}
- bg->SetMapId(data.MapID);
- bg->SetTypeID(data.bgTypeId);
- bg->SetInstanceID(0);
- bg->SetArenaorBGType(data.IsArena);
- bg->SetMinPlayersPerTeam(data.MinPlayersPerTeam);
- bg->SetMaxPlayersPerTeam(data.MaxPlayersPerTeam);
- bg->SetMinPlayers(data.MinPlayersPerTeam * 2);
- bg->SetMaxPlayers(data.MaxPlayersPerTeam * 2);
- bg->SetName(data.BattlegroundName);
- bg->SetTeamStartLoc(ALLIANCE, data.Team1StartLocX, data.Team1StartLocY, data.Team1StartLocZ, data.Team1StartLocO);
- bg->SetTeamStartLoc(HORDE, data.Team2StartLocX, data.Team2StartLocY, data.Team2StartLocZ, data.Team2StartLocO);
- bg->SetStartMaxDist(data.StartMaxDist);
- bg->SetLevelRange(data.LevelMin, data.LevelMax);
- bg->SetScriptId(data.scriptId);
-
- AddBattleground(bg);
+ bg->SetMapId(bgTemplate->BattlemasterEntry->mapid[0]);
+ bg->SetName(bgTemplate->BattlemasterEntry->name[sWorld->GetDefaultDbcLocale()]);
+ bg->SetArenaorBGType(bgTemplate->IsArena());
+ bg->SetMinPlayersPerTeam(bgTemplate->MinPlayersPerTeam);
+ bg->SetMaxPlayersPerTeam(bgTemplate->MaxPlayersPerTeam);
+ bg->SetMinPlayers(bgTemplate->MinPlayersPerTeam * 2);
+ bg->SetMaxPlayers(bgTemplate->MaxPlayersPerTeam * 2);
+ bg->SetTeamStartPosition(TEAM_ALLIANCE, bgTemplate->StartLocation[TEAM_ALLIANCE]);
+ bg->SetTeamStartPosition(TEAM_HORDE, bgTemplate->StartLocation[TEAM_HORDE]);
+ bg->SetStartMaxDist(bgTemplate->MaxStartDistSq);
+ bg->SetLevelRange(bgTemplate->MinLevel, bgTemplate->MaxLevel);
+ bg->SetScriptId(bgTemplate->ScriptId);
return true;
}
-void BattlegroundMgr::CreateInitialBattlegrounds()
+void BattlegroundMgr::LoadBattlegroundTemplates()
{
uint32 oldMSTime = getMSTime();
+
+ _battlegroundMapTemplates.clear();
+ _battlegroundTemplates.clear();
+
// 0 1 2 3 4 5 6 7 8 9 10 11
QueryResult result = WorldDatabase.Query("SELECT id, MinPlayersPerTeam, MaxPlayersPerTeam, MinLvl, MaxLvl, AllianceStartLoc, AllianceStartO, HordeStartLoc, HordeStartO, StartMaxDist, Weight, ScriptName FROM battleground_template");
-
if (!result)
{
TC_LOG_ERROR("server.loading", ">> Loaded 0 battlegrounds. DB table `battleground_template` is empty.");
@@ -706,7 +529,8 @@ void BattlegroundMgr::CreateInitialBattlegrounds()
{
Field* fields = result->Fetch();
- uint32 bgTypeId = fields[0].GetUInt32();
+ BattlegroundTypeId bgTypeId = BattlegroundTypeId(fields[0].GetUInt32());
+
if (DisableMgr::IsDisabledFor(DISABLE_TYPE_BATTLEGROUND, bgTypeId, NULL))
continue;
@@ -718,86 +542,64 @@ void BattlegroundMgr::CreateInitialBattlegrounds()
continue;
}
- CreateBattlegroundData data;
- data.bgTypeId = BattlegroundTypeId(bgTypeId);
- data.IsArena = (bl->type == TYPE_ARENA);
- data.MinPlayersPerTeam = fields[1].GetUInt16();
- data.MaxPlayersPerTeam = fields[2].GetUInt16();
- data.LevelMin = fields[3].GetUInt8();
- data.LevelMax = fields[4].GetUInt8();
- float dist = fields[9].GetFloat();
- data.StartMaxDist = dist * dist;
-
- data.scriptId = sObjectMgr->GetScriptId(fields[11].GetCString());
- data.BattlegroundName = bl->name[sWorld->GetDefaultDbcLocale()];
- data.MapID = bl->mapid[0];
-
- if (data.MaxPlayersPerTeam == 0 || data.MinPlayersPerTeam > data.MaxPlayersPerTeam)
+ BattlegroundTemplate bgTemplate;
+ bgTemplate.Id = bgTypeId;
+ bgTemplate.MinPlayersPerTeam = fields[1].GetUInt16();
+ bgTemplate.MaxPlayersPerTeam = fields[2].GetUInt16();
+ bgTemplate.MinLevel = fields[3].GetUInt8();
+ bgTemplate.MaxLevel = fields[4].GetUInt8();
+ float dist = fields[9].GetFloat();
+ bgTemplate.MaxStartDistSq = dist * dist;
+ bgTemplate.Weight = fields[10].GetUInt8();
+ bgTemplate.ScriptId = sObjectMgr->GetScriptId(fields[11].GetCString());
+ bgTemplate.BattlemasterEntry = bl;
+
+ if (bgTemplate.MaxPlayersPerTeam == 0 || bgTemplate.MinPlayersPerTeam > bgTemplate.MaxPlayersPerTeam)
{
TC_LOG_ERROR("sql.sql", "Table `battleground_template` for id %u has bad values for MinPlayersPerTeam (%u) and MaxPlayersPerTeam(%u)",
- data.bgTypeId, data.MinPlayersPerTeam, data.MaxPlayersPerTeam);
+ bgTemplate.Id, bgTemplate.MinPlayersPerTeam, bgTemplate.MaxPlayersPerTeam);
continue;
}
- if (data.LevelMin == 0 || data.LevelMax == 0 || data.LevelMin > data.LevelMax)
+ if (bgTemplate.MinLevel == 0 || bgTemplate.MaxLevel == 0 || bgTemplate.MinLevel > bgTemplate.MaxLevel)
{
- TC_LOG_ERROR("sql.sql", "Table `battleground_template` for id %u has bad values for LevelMin (%u) and LevelMax(%u)",
- data.bgTypeId, data.LevelMin, data.LevelMax);
+ TC_LOG_ERROR("sql.sql", "Table `battleground_template` for id %u has bad values for MinLevel (%u) and MaxLevel (%u)",
+ bgTemplate.Id, bgTemplate.MinLevel, bgTemplate.MaxLevel);
continue;
}
- if (data.bgTypeId == BATTLEGROUND_AA || data.bgTypeId == BATTLEGROUND_RB)
- {
- data.Team1StartLocX = 0;
- data.Team1StartLocY = 0;
- data.Team1StartLocZ = 0;
- data.Team1StartLocO = fields[6].GetFloat();
- data.Team2StartLocX = 0;
- data.Team2StartLocY = 0;
- data.Team2StartLocZ = 0;
- data.Team2StartLocO = fields[8].GetFloat();
- }
- else
+ if (bgTemplate.Id != BATTLEGROUND_AA && bgTemplate.Id != BATTLEGROUND_RB)
{
uint32 startId = fields[5].GetUInt32();
if (WorldSafeLocsEntry const* start = sWorldSafeLocsStore.LookupEntry(startId))
{
- data.Team1StartLocX = start->x;
- data.Team1StartLocY = start->y;
- data.Team1StartLocZ = start->z;
- data.Team1StartLocO = fields[6].GetFloat();
+ bgTemplate.StartLocation[TEAM_ALLIANCE].Relocate(start->x, start->y, start->z, fields[6].GetFloat());
}
else
{
- TC_LOG_ERROR("sql.sql", "Table `battleground_template` for id %u have non-existed WorldSafeLocs.dbc id %u in field `AllianceStartLoc`. BG not created.", data.bgTypeId, startId);
+ TC_LOG_ERROR("sql.sql", "Table `battleground_template` for id %u has non-existed WorldSafeLocs.dbc id %u in field `AllianceStartLoc`. BG not created.", bgTemplate.Id, startId);
continue;
}
startId = fields[7].GetUInt32();
if (WorldSafeLocsEntry const* start = sWorldSafeLocsStore.LookupEntry(startId))
{
- data.Team2StartLocX = start->x;
- data.Team2StartLocY = start->y;
- data.Team2StartLocZ = start->z;
- data.Team2StartLocO = fields[8].GetFloat();
+ bgTemplate.StartLocation[TEAM_HORDE].Relocate(start->x, start->y, start->z, fields[8].GetFloat());
}
else
{
- TC_LOG_ERROR("sql.sql", "Table `battleground_template` for id %u have non-existed WorldSafeLocs.dbc id %u in field `HordeStartLoc`. BG not created.", data.bgTypeId, startId);
+ TC_LOG_ERROR("sql.sql", "Table `battleground_template` for id %u has non-existed WorldSafeLocs.dbc id %u in field `HordeStartLoc`. BG not created.", bgTemplate.Id, startId);
continue;
}
}
- if (!CreateBattleground(data))
+ if (!CreateBattleground(&bgTemplate))
continue;
- if (data.IsArena)
- {
- if (data.bgTypeId != BATTLEGROUND_AA)
- m_ArenaSelectionWeights[data.bgTypeId] = fields[10].GetUInt8();
- }
- else if (data.bgTypeId != BATTLEGROUND_RB)
- m_BGSelectionWeights[data.bgTypeId] = fields[10].GetUInt8();
+ _battlegroundTemplates[bgTypeId] = bgTemplate;
+
+ if (bgTemplate.BattlemasterEntry->mapid[1] == -1) // in this case we have only one mapId
+ _battlegroundMapTemplates[bgTemplate.BattlemasterEntry->mapid[0]] = &_battlegroundTemplates[bgTypeId];
++count;
}
@@ -892,15 +694,14 @@ void BattlegroundMgr::SendToBattleground(Player* player, uint32 instanceId, Batt
{
if (Battleground* bg = GetBattleground(instanceId, bgTypeId))
{
- float x, y, z, O;
uint32 mapid = bg->GetMapId();
uint32 team = player->GetBGTeam();
if (team == 0)
team = player->GetTeam();
- bg->GetTeamStartLoc(team, x, y, z, O);
- TC_LOG_DEBUG("bg.battleground", "BattlegroundMgr::SendToBattleground: Sending %s to map %u, X %f, Y %f, Z %f, O %f (bgType %u)", player->GetName().c_str(), mapid, x, y, z, O, bgTypeId);
- player->TeleportTo(mapid, x, y, z, O);
+ Position const* pos = bg->GetTeamStartPosition(Battleground::GetTeamIndexByTeamId(team));
+ TC_LOG_DEBUG("bg.battleground", "BattlegroundMgr::SendToBattleground: Sending %s to map %u, %s (bgType %u)", player->GetName().c_str(), mapid, pos->ToString().c_str(), bgTypeId);
+ player->TeleportTo(mapid, pos->GetPositionX(), pos->GetPositionY(), pos->GetPositionZ(), pos->GetOrientation());
}
else
TC_LOG_ERROR("bg.battleground", "BattlegroundMgr::SendToBattleground: Instance %u (bgType %u) not found while trying to teleport player %s", instanceId, bgTypeId, player->GetName().c_str());
@@ -1023,12 +824,8 @@ void BattlegroundMgr::ToggleArenaTesting()
void BattlegroundMgr::SetHolidayWeekends(uint32 mask)
{
for (uint32 bgtype = 1; bgtype < MAX_BATTLEGROUND_TYPE_ID; ++bgtype)
- {
if (Battleground* bg = GetBattlegroundTemplate(BattlegroundTypeId(bgtype)))
- {
- bg->SetHoliday(mask & (1 << bgtype));
- }
- }
+ bg->SetHoliday((mask & (1 << bgtype)) != 0);
}
void BattlegroundMgr::ScheduleQueueUpdate(uint32 arenaMatchmakerRating, uint8 arenaType, BattlegroundQueueTypeId bgQueueTypeId, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id)
@@ -1157,51 +954,43 @@ bool BattlegroundMgr::IsBGWeekend(BattlegroundTypeId bgTypeId)
BattlegroundTypeId BattlegroundMgr::GetRandomBG(BattlegroundTypeId bgTypeId)
{
- uint32 weight = 0;
- BattlegroundTypeId returnBgTypeId = BATTLEGROUND_TYPE_NONE;
- BattlegroundSelectionWeightMap selectionWeights;
-
- if (bgTypeId == BATTLEGROUND_AA)
+ if (BattlegroundTemplate const* bgTemplate = GetBattlegroundTemplateByTypeId(bgTypeId))
{
- for (BattlegroundSelectionWeightMap::const_iterator it = m_ArenaSelectionWeights.begin(); it != m_ArenaSelectionWeights.end(); ++it)
- {
- if (it->second)
- {
- weight += it->second;
- selectionWeights[it->first] = it->second;
- }
- }
- }
- else if (bgTypeId == BATTLEGROUND_RB)
- {
- for (BattlegroundSelectionWeightMap::const_iterator it = m_BGSelectionWeights.begin(); it != m_BGSelectionWeights.end(); ++it)
+ uint32 weight = 0;
+ BattlegroundSelectionWeightMap selectionWeights;
+
+ for (int32 mapId : bgTemplate->BattlemasterEntry->mapid)
{
- if (it->second)
+ if (mapId == -1)
+ break;
+
+ if (BattlegroundTemplate const* bg = GetBattlegroundTemplateByMapId(mapId))
{
- weight += it->second;
- selectionWeights[it->first] = it->second;
+ weight += bg->Weight;
+ selectionWeights[bg->Id] = bg->Weight;
}
}
- }
- if (weight)
- {
- // Select a random value
- uint32 selectedWeight = urand(0, weight - 1);
- // Select the correct bg (if we have in DB A(10), B(20), C(10), D(15) --> [0---A---9|10---B---29|30---C---39|40---D---54])
- weight = 0;
- for (BattlegroundSelectionWeightMap::const_iterator it = selectionWeights.begin(); it != selectionWeights.end(); ++it)
+ // there is only one bg to select
+ if (selectionWeights.size() == 1)
+ return selectionWeights.begin()->first;
+
+ if (weight)
{
- weight += it->second;
- if (selectedWeight < weight)
+ // Select a random value
+ uint32 selectedWeight = urand(0, weight - 1);
+ // Select the correct bg (if we have in DB A(10), B(20), C(10), D(15) --> [0---A---9|10---B---29|30---C---39|40---D---54])
+ weight = 0;
+ for (auto it : selectionWeights)
{
- returnBgTypeId = it->first;
- break;
+ weight += it.second;
+ if (selectedWeight < weight)
+ return it.first;
}
}
}
- return returnBgTypeId;
+ return BATTLEGROUND_TYPE_NONE;
}
BGFreeSlotQueueContainer& BattlegroundMgr::GetBGFreeSlotQueueStore(BattlegroundTypeId bgTypeId)
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.h b/src/server/game/Battlegrounds/BattlegroundMgr.h
index 42803620e27..c21c34d1a10 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.h
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.h
@@ -23,38 +23,15 @@
#include "DBCEnums.h"
#include "Battleground.h"
#include "BattlegroundQueue.h"
-#include <ace/Singleton.h>
typedef std::map<uint32, Battleground*> BattlegroundContainer;
typedef std::set<uint32> BattlegroundClientIdsContainer;
-typedef UNORDERED_MAP<uint32, BattlegroundTypeId> BattleMastersMap;
+typedef std::unordered_map<uint32, BattlegroundTypeId> BattleMastersMap;
#define BATTLEGROUND_ARENA_POINT_DISTRIBUTION_DAY 86400 // seconds in a day
#define WS_ARENA_DISTRIBUTION_TIME 20001 // Custom worldstate
-struct CreateBattlegroundData
-{
- BattlegroundTypeId bgTypeId;
- bool IsArena;
- uint32 MinPlayersPerTeam;
- uint32 MaxPlayersPerTeam;
- uint32 LevelMin;
- uint32 LevelMax;
- char* BattlegroundName;
- uint32 MapID;
- float Team1StartLocX;
- float Team1StartLocY;
- float Team1StartLocZ;
- float Team1StartLocO;
- float Team2StartLocX;
- float Team2StartLocY;
- float Team2StartLocZ;
- float Team2StartLocO;
- float StartMaxDist;
- uint32 scriptId;
-};
-
struct BattlegroundData
{
BattlegroundContainer m_Battlegrounds;
@@ -62,15 +39,35 @@ struct BattlegroundData
BGFreeSlotQueueContainer BGFreeSlotQueue;
};
-class BattlegroundMgr
+struct BattlegroundTemplate
{
- friend class ACE_Singleton<BattlegroundMgr, ACE_Null_Mutex>;
+ BattlegroundTypeId Id;
+ uint16 MinPlayersPerTeam;
+ uint16 MaxPlayersPerTeam;
+ uint8 MinLevel;
+ uint8 MaxLevel;
+ Position StartLocation[BG_TEAMS_COUNT];
+ float MaxStartDistSq;
+ uint8 Weight;
+ uint32 ScriptId;
+ BattlemasterListEntry const* BattlemasterEntry;
+
+ bool IsArena() const { return BattlemasterEntry->type == MAP_ARENA; }
+};
+class BattlegroundMgr
+{
private:
BattlegroundMgr();
~BattlegroundMgr();
public:
+ static BattlegroundMgr* instance()
+ {
+ static BattlegroundMgr instance;
+ return &instance;
+ }
+
void Update(uint32 diff);
/* Packet Building */
@@ -79,7 +76,6 @@ class BattlegroundMgr
void BuildBattlegroundListPacket(WorldPacket* data, uint64 guid, Player* player, BattlegroundTypeId bgTypeId, uint8 fromWhere);
void BuildGroupJoinedBattlegroundPacket(WorldPacket* data, GroupJoinBattlegroundResult result);
void BuildUpdateWorldStatePacket(WorldPacket* data, uint32 field, uint32 value);
- void BuildPvpLogDataPacket(WorldPacket* data, Battleground* bg);
void BuildBattlegroundStatusPacket(WorldPacket* data, Battleground* bg, uint8 queueSlot, uint8 statusId, uint32 time1, uint32 time2, uint8 arenaType, uint32 arenaFaction);
void BuildPlaySoundPacket(WorldPacket* data, uint32 soundId);
void SendAreaSpiritHealerQueryOpcode(Player* player, Battleground* bg, uint64 guid);
@@ -96,7 +92,7 @@ class BattlegroundMgr
void RemoveFromBGFreeSlotQueue(BattlegroundTypeId bgTypeId, uint32 instanceId);
BGFreeSlotQueueContainer& GetBGFreeSlotQueueStore(BattlegroundTypeId bgTypeId);
- void CreateInitialBattlegrounds();
+ void LoadBattlegroundTemplates();
void DeleteAllBattlegrounds();
void SendToBattleground(Player* player, uint32 InstanceID, BattlegroundTypeId bgTypeId);
@@ -136,7 +132,7 @@ class BattlegroundMgr
}
private:
- bool CreateBattleground(CreateBattlegroundData& data);
+ bool CreateBattleground(BattlegroundTemplate const* bgTemplate);
uint32 CreateClientVisibleInstanceId(BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id);
static bool IsArenaType(BattlegroundTypeId bgTypeId);
BattlegroundTypeId GetRandomBG(BattlegroundTypeId id);
@@ -146,9 +142,6 @@ class BattlegroundMgr
BattlegroundQueue m_BattlegroundQueues[MAX_BATTLEGROUND_QUEUE_TYPES];
- typedef std::map<BattlegroundTypeId, uint8> BattlegroundSelectionWeightMap; // TypeId and its selectionWeight
- BattlegroundSelectionWeightMap m_ArenaSelectionWeights;
- BattlegroundSelectionWeightMap m_BGSelectionWeights;
std::vector<uint64> m_QueueUpdateScheduler;
uint32 m_NextRatedArenaUpdate;
time_t m_NextAutoDistributionTime;
@@ -156,7 +149,31 @@ class BattlegroundMgr
bool m_ArenaTesting;
bool m_Testing;
BattleMastersMap mBattleMastersMap;
+
+ BattlegroundTemplate const* GetBattlegroundTemplateByTypeId(BattlegroundTypeId id)
+ {
+ BattlegroundTemplateMap::const_iterator itr = _battlegroundTemplates.find(id);
+ if (itr != _battlegroundTemplates.end())
+ return &itr->second;
+ return nullptr;
+ }
+
+ BattlegroundTemplate const* GetBattlegroundTemplateByMapId(uint32 mapId)
+ {
+ BattlegroundMapTemplateContainer::const_iterator itr = _battlegroundMapTemplates.find(mapId);
+ if (itr != _battlegroundMapTemplates.end())
+ return itr->second;
+ return nullptr;
+ }
+
+ typedef std::map<BattlegroundTypeId, uint8 /*weight*/> BattlegroundSelectionWeightMap;
+
+ typedef std::map<BattlegroundTypeId, BattlegroundTemplate> BattlegroundTemplateMap;
+ typedef std::map<uint32 /*mapId*/, BattlegroundTemplate*> BattlegroundMapTemplateContainer;
+ BattlegroundTemplateMap _battlegroundTemplates;
+ BattlegroundMapTemplateContainer _battlegroundMapTemplates;
};
-#define sBattlegroundMgr ACE_Singleton<BattlegroundMgr, ACE_Null_Mutex>::instance()
-#endif
+#define sBattlegroundMgr BattlegroundMgr::instance()
+
+#endif // __BATTLEGROUNDMGR_H
diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp
index 547d6e972c5..e52f75a1c41 100644
--- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp
@@ -191,7 +191,6 @@ GroupQueueInfo* BattlegroundQueue::AddGroup(Player* leader, Group* grp, Battlegr
//add GroupInfo to m_QueuedGroups
{
- //ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_Lock);
m_QueuedGroups[bracketId][index].push_back(ginfo);
//announce to world, this code needs mutex
@@ -199,7 +198,6 @@ GroupQueueInfo* BattlegroundQueue::AddGroup(Player* leader, Group* grp, Battlegr
{
if (Battleground* bg = sBattlegroundMgr->GetBattlegroundTemplate(ginfo->BgTypeId))
{
- char const* bgName = bg->GetName();
uint32 MinPlayers = bg->GetMinPlayersPerTeam();
uint32 qHorde = 0;
uint32 qAlliance = 0;
@@ -216,13 +214,13 @@ GroupQueueInfo* BattlegroundQueue::AddGroup(Player* leader, Group* grp, Battlegr
// Show queue status to player only (when joining queue)
if (sWorld->getBoolConfig(CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY))
{
- ChatHandler(leader->GetSession()).PSendSysMessage(LANG_BG_QUEUE_ANNOUNCE_SELF, bgName, q_min_level, q_max_level,
+ ChatHandler(leader->GetSession()).PSendSysMessage(LANG_BG_QUEUE_ANNOUNCE_SELF, bg->GetName().c_str(), q_min_level, q_max_level,
qAlliance, (MinPlayers > qAlliance) ? MinPlayers - qAlliance : (uint32)0, qHorde, (MinPlayers > qHorde) ? MinPlayers - qHorde : (uint32)0);
}
// System message
else
{
- sWorld->SendWorldText(LANG_BG_QUEUE_ANNOUNCE_WORLD, bgName, q_min_level, q_max_level,
+ sWorld->SendWorldText(LANG_BG_QUEUE_ANNOUNCE_WORLD, bg->GetName().c_str(), q_min_level, q_max_level,
qAlliance, (MinPlayers > qAlliance) ? MinPlayers - qAlliance : (uint32)0, qHorde, (MinPlayers > qHorde) ? MinPlayers - qHorde : (uint32)0);
}
}
diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.h b/src/server/game/Battlegrounds/BattlegroundQueue.h
index af283cb825f..f95e8bafd06 100644
--- a/src/server/game/Battlegrounds/BattlegroundQueue.h
+++ b/src/server/game/Battlegrounds/BattlegroundQueue.h
@@ -143,8 +143,8 @@ class BGQueueInviteEvent : public BasicEvent
{ }
virtual ~BGQueueInviteEvent() { }
- virtual bool Execute(uint64 e_time, uint32 p_time);
- virtual void Abort(uint64 e_time);
+ virtual bool Execute(uint64 e_time, uint32 p_time) override;
+ virtual void Abort(uint64 e_time) override;
private:
uint64 m_PlayerGuid;
uint32 m_BgInstanceGUID;
@@ -167,8 +167,8 @@ class BGQueueRemoveEvent : public BasicEvent
virtual ~BGQueueRemoveEvent() { }
- virtual bool Execute(uint64 e_time, uint32 p_time);
- virtual void Abort(uint64 e_time);
+ virtual bool Execute(uint64 e_time, uint32 p_time) override;
+ virtual void Abort(uint64 e_time) override;
private:
uint64 m_PlayerGuid;
uint32 m_BgInstanceGUID;
diff --git a/src/server/game/Battlegrounds/BattlegroundScore.h b/src/server/game/Battlegrounds/BattlegroundScore.h
new file mode 100644
index 00000000000..81aca355be8
--- /dev/null
+++ b/src/server/game/Battlegrounds/BattlegroundScore.h
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef TRINITY_BATTLEGROUND_SCORE_H
+#define TRINITY_BATTLEGROUND_SCORE_H
+
+#include "WorldPacket.h"
+
+enum ScoreType
+{
+ SCORE_KILLING_BLOWS = 1,
+ SCORE_DEATHS = 2,
+ SCORE_HONORABLE_KILLS = 3,
+ SCORE_BONUS_HONOR = 4,
+ SCORE_DAMAGE_DONE = 5,
+ SCORE_HEALING_DONE = 6,
+
+ // WS and EY
+ SCORE_FLAG_CAPTURES = 7,
+ SCORE_FLAG_RETURNS = 8,
+
+ // AB and IC
+ SCORE_BASES_ASSAULTED = 9,
+ SCORE_BASES_DEFENDED = 10,
+
+ // AV
+ SCORE_GRAVEYARDS_ASSAULTED = 11,
+ SCORE_GRAVEYARDS_DEFENDED = 12,
+ SCORE_TOWERS_ASSAULTED = 13,
+ SCORE_TOWERS_DEFENDED = 14,
+ SCORE_MINES_CAPTURED = 15,
+
+ // SOTA
+ SCORE_DESTROYED_DEMOLISHER = 16,
+ SCORE_DESTROYED_WALL = 17
+};
+
+struct BattlegroundScore
+{
+ friend class Arena;
+ friend class Battleground;
+
+ protected:
+ BattlegroundScore(uint64 playerGuid) : PlayerGuid(playerGuid), KillingBlows(0), Deaths(0),
+ HonorableKills(0), BonusHonor(0), DamageDone(0), HealingDone(0) { }
+
+ virtual ~BattlegroundScore() { }
+
+ virtual void UpdateScore(uint32 type, uint32 value)
+ {
+ switch (type)
+ {
+ case SCORE_KILLING_BLOWS: // Killing blows
+ KillingBlows += value;
+ break;
+ case SCORE_DEATHS: // Deaths
+ Deaths += value;
+ break;
+ case SCORE_HONORABLE_KILLS: // Honorable kills
+ HonorableKills += value;
+ break;
+ case SCORE_BONUS_HONOR: // Honor bonus
+ BonusHonor += value;
+ break;
+ case SCORE_DAMAGE_DONE: // Damage Done
+ DamageDone += value;
+ break;
+ case SCORE_HEALING_DONE: // Healing Done
+ HealingDone += value;
+ break;
+ default:
+ ASSERT(false && "Not implemented Battleground score type!");
+ break;
+ }
+ }
+
+ virtual void AppendToPacket(WorldPacket& data)
+ {
+ data << uint64(PlayerGuid);
+
+ data << uint32(KillingBlows);
+ data << uint32(HonorableKills);
+ data << uint32(Deaths);
+ data << uint32(BonusHonor);
+ data << uint32(DamageDone);
+ data << uint32(HealingDone);
+
+ BuildObjectivesBlock(data);
+ }
+
+ virtual void BuildObjectivesBlock(WorldPacket& /*data*/) = 0;
+
+ // For Logging purpose
+ virtual std::string ToString() const { return ""; }
+
+ uint64 PlayerGuid;
+
+ // Default score, present in every type
+ uint32 KillingBlows;
+ uint32 Deaths;
+ uint32 HonorableKills;
+ uint32 BonusHonor;
+ uint32 DamageDone;
+ uint32 HealingDone;
+};
+
+#endif // TRINITY_BATTLEGROUND_SCORE_H
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
index c05bd98b908..2622ab9501f 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
@@ -23,7 +23,6 @@
#include "BattlegroundMgr.h"
#include "Creature.h"
#include "Language.h"
-#include "Object.h"
#include "Player.h"
#include "Util.h"
#include "WorldSession.h"
@@ -225,15 +224,11 @@ void BattlegroundAB::StartingEventOpenDoors()
void BattlegroundAB::AddPlayer(Player* player)
{
Battleground::AddPlayer(player);
- //create score and add it to map, default values are set in the constructor
- BattlegroundABScore* sc = new BattlegroundABScore;
-
- PlayerScores[player->GetGUID()] = sc;
+ PlayerScores[player->GetGUIDLow()] = new BattlegroundABScore(player->GetGUID());
}
void BattlegroundAB::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/)
{
-
}
void BattlegroundAB::HandleAreaTrigger(Player* player, uint32 trigger)
@@ -381,7 +376,7 @@ void BattlegroundAB::_SendNodeUpdate(uint8 node)
void BattlegroundAB::_NodeOccupied(uint8 node, Team team)
{
- if (!AddSpiritGuide(node, BG_AB_SpiritGuidePos[node][0], BG_AB_SpiritGuidePos[node][1], BG_AB_SpiritGuidePos[node][2], BG_AB_SpiritGuidePos[node][3], team))
+ if (!AddSpiritGuide(node, BG_AB_SpiritGuidePos[node], GetTeamIndexByTeamId(team)))
TC_LOG_ERROR("bg.battleground", "Failed to spawn spirit guide! point: %u, team: %u, ", node, team);
if (node >= BG_AB_DYNAMIC_NODES_COUNT)//only dynamic nodes, no start points
@@ -397,9 +392,9 @@ void BattlegroundAB::_NodeOccupied(uint8 node, Team team)
if (capturedNodes >= 4)
CastSpellOnTeam(SPELL_AB_QUEST_REWARD_4_BASES, team);
- Creature* trigger = BgCreatures[node+7] ? GetBGCreature(node+7) : NULL;//0-6 spirit guides
+ Creature* trigger = BgCreatures[node+7] ? GetBGCreature(node+7) : NULL; // 0-6 spirit guides
if (!trigger)
- trigger = AddCreature(WORLD_TRIGGER, node+7, team, BG_AB_NodePositions[node][0], BG_AB_NodePositions[node][1], BG_AB_NodePositions[node][2], BG_AB_NodePositions[node][3]);
+ trigger = AddCreature(WORLD_TRIGGER, node+7, BG_AB_NodePositions[node], GetTeamIndexByTeamId(team));
//add bonus honor aura trigger creature when node is accupied
//cast bonus aura (+50% honor in 25yards)
@@ -578,34 +573,33 @@ bool BattlegroundAB::SetupBattleground()
{
for (int i = 0; i < BG_AB_DYNAMIC_NODES_COUNT; ++i)
{
- if (!AddObject(BG_AB_OBJECT_BANNER_NEUTRAL + 8*i, BG_AB_OBJECTID_NODE_BANNER_0 + i, BG_AB_NodePositions[i][0], BG_AB_NodePositions[i][1], BG_AB_NodePositions[i][2], BG_AB_NodePositions[i][3], 0, 0, std::sin(BG_AB_NodePositions[i][3]/2), std::cos(BG_AB_NodePositions[i][3]/2), RESPAWN_ONE_DAY)
- || !AddObject(BG_AB_OBJECT_BANNER_CONT_A + 8*i, BG_AB_OBJECTID_BANNER_CONT_A, BG_AB_NodePositions[i][0], BG_AB_NodePositions[i][1], BG_AB_NodePositions[i][2], BG_AB_NodePositions[i][3], 0, 0, std::sin(BG_AB_NodePositions[i][3]/2), std::cos(BG_AB_NodePositions[i][3]/2), RESPAWN_ONE_DAY)
- || !AddObject(BG_AB_OBJECT_BANNER_CONT_H + 8*i, BG_AB_OBJECTID_BANNER_CONT_H, BG_AB_NodePositions[i][0], BG_AB_NodePositions[i][1], BG_AB_NodePositions[i][2], BG_AB_NodePositions[i][3], 0, 0, std::sin(BG_AB_NodePositions[i][3]/2), std::cos(BG_AB_NodePositions[i][3]/2), RESPAWN_ONE_DAY)
- || !AddObject(BG_AB_OBJECT_BANNER_ALLY + 8*i, BG_AB_OBJECTID_BANNER_A, BG_AB_NodePositions[i][0], BG_AB_NodePositions[i][1], BG_AB_NodePositions[i][2], BG_AB_NodePositions[i][3], 0, 0, std::sin(BG_AB_NodePositions[i][3]/2), std::cos(BG_AB_NodePositions[i][3]/2), RESPAWN_ONE_DAY)
- || !AddObject(BG_AB_OBJECT_BANNER_HORDE + 8*i, BG_AB_OBJECTID_BANNER_H, BG_AB_NodePositions[i][0], BG_AB_NodePositions[i][1], BG_AB_NodePositions[i][2], BG_AB_NodePositions[i][3], 0, 0, std::sin(BG_AB_NodePositions[i][3]/2), std::cos(BG_AB_NodePositions[i][3]/2), RESPAWN_ONE_DAY)
- || !AddObject(BG_AB_OBJECT_AURA_ALLY + 8*i, BG_AB_OBJECTID_AURA_A, BG_AB_NodePositions[i][0], BG_AB_NodePositions[i][1], BG_AB_NodePositions[i][2], BG_AB_NodePositions[i][3], 0, 0, std::sin(BG_AB_NodePositions[i][3]/2), std::cos(BG_AB_NodePositions[i][3]/2), RESPAWN_ONE_DAY)
- || !AddObject(BG_AB_OBJECT_AURA_HORDE + 8*i, BG_AB_OBJECTID_AURA_H, BG_AB_NodePositions[i][0], BG_AB_NodePositions[i][1], BG_AB_NodePositions[i][2], BG_AB_NodePositions[i][3], 0, 0, std::sin(BG_AB_NodePositions[i][3]/2), std::cos(BG_AB_NodePositions[i][3]/2), RESPAWN_ONE_DAY)
- || !AddObject(BG_AB_OBJECT_AURA_CONTESTED + 8*i, BG_AB_OBJECTID_AURA_C, BG_AB_NodePositions[i][0], BG_AB_NodePositions[i][1], BG_AB_NodePositions[i][2], BG_AB_NodePositions[i][3], 0, 0, std::sin(BG_AB_NodePositions[i][3]/2), std::cos(BG_AB_NodePositions[i][3]/2), RESPAWN_ONE_DAY)
-)
+ if (!AddObject(BG_AB_OBJECT_BANNER_NEUTRAL + 8*i, BG_AB_OBJECTID_NODE_BANNER_0 + i, BG_AB_NodePositions[i], 0, 0, std::sin(BG_AB_NodePositions[i].GetOrientation()/2), std::cos(BG_AB_NodePositions[i].GetOrientation()/2), RESPAWN_ONE_DAY)
+ || !AddObject(BG_AB_OBJECT_BANNER_CONT_A + 8*i, BG_AB_OBJECTID_BANNER_CONT_A, BG_AB_NodePositions[i], 0, 0, std::sin(BG_AB_NodePositions[i].GetOrientation()/2), std::cos(BG_AB_NodePositions[i].GetOrientation()/2), RESPAWN_ONE_DAY)
+ || !AddObject(BG_AB_OBJECT_BANNER_CONT_H + 8*i, BG_AB_OBJECTID_BANNER_CONT_H, BG_AB_NodePositions[i], 0, 0, std::sin(BG_AB_NodePositions[i].GetOrientation()/2), std::cos(BG_AB_NodePositions[i].GetOrientation()/2), RESPAWN_ONE_DAY)
+ || !AddObject(BG_AB_OBJECT_BANNER_ALLY + 8*i, BG_AB_OBJECTID_BANNER_A, BG_AB_NodePositions[i], 0, 0, std::sin(BG_AB_NodePositions[i].GetOrientation()/2), std::cos(BG_AB_NodePositions[i].GetOrientation()/2), RESPAWN_ONE_DAY)
+ || !AddObject(BG_AB_OBJECT_BANNER_HORDE + 8*i, BG_AB_OBJECTID_BANNER_H, BG_AB_NodePositions[i], 0, 0, std::sin(BG_AB_NodePositions[i].GetOrientation()/2), std::cos(BG_AB_NodePositions[i].GetOrientation()/2), RESPAWN_ONE_DAY)
+ || !AddObject(BG_AB_OBJECT_AURA_ALLY + 8*i, BG_AB_OBJECTID_AURA_A, BG_AB_NodePositions[i], 0, 0, std::sin(BG_AB_NodePositions[i].GetOrientation()/2), std::cos(BG_AB_NodePositions[i].GetOrientation()/2), RESPAWN_ONE_DAY)
+ || !AddObject(BG_AB_OBJECT_AURA_HORDE + 8*i, BG_AB_OBJECTID_AURA_H, BG_AB_NodePositions[i], 0, 0, std::sin(BG_AB_NodePositions[i].GetOrientation()/2), std::cos(BG_AB_NodePositions[i].GetOrientation()/2), RESPAWN_ONE_DAY)
+ || !AddObject(BG_AB_OBJECT_AURA_CONTESTED + 8*i, BG_AB_OBJECTID_AURA_C, BG_AB_NodePositions[i], 0, 0, std::sin(BG_AB_NodePositions[i].GetOrientation()/2), std::cos(BG_AB_NodePositions[i].GetOrientation()/2), RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("sql.sql", "BatteGroundAB: Failed to spawn some object Battleground not created!");
return false;
}
}
+
if (!AddObject(BG_AB_OBJECT_GATE_A, BG_AB_OBJECTID_GATE_A, BG_AB_DoorPositions[0][0], BG_AB_DoorPositions[0][1], BG_AB_DoorPositions[0][2], BG_AB_DoorPositions[0][3], BG_AB_DoorPositions[0][4], BG_AB_DoorPositions[0][5], BG_AB_DoorPositions[0][6], BG_AB_DoorPositions[0][7], RESPAWN_IMMEDIATELY)
- || !AddObject(BG_AB_OBJECT_GATE_H, BG_AB_OBJECTID_GATE_H, BG_AB_DoorPositions[1][0], BG_AB_DoorPositions[1][1], BG_AB_DoorPositions[1][2], BG_AB_DoorPositions[1][3], BG_AB_DoorPositions[1][4], BG_AB_DoorPositions[1][5], BG_AB_DoorPositions[1][6], BG_AB_DoorPositions[1][7], RESPAWN_IMMEDIATELY)
-)
+ || !AddObject(BG_AB_OBJECT_GATE_H, BG_AB_OBJECTID_GATE_H, BG_AB_DoorPositions[1][0], BG_AB_DoorPositions[1][1], BG_AB_DoorPositions[1][2], BG_AB_DoorPositions[1][3], BG_AB_DoorPositions[1][4], BG_AB_DoorPositions[1][5], BG_AB_DoorPositions[1][6], BG_AB_DoorPositions[1][7], RESPAWN_IMMEDIATELY))
{
TC_LOG_ERROR("sql.sql", "BatteGroundAB: Failed to spawn door object Battleground not created!");
return false;
}
+
//buffs
for (int i = 0; i < BG_AB_DYNAMIC_NODES_COUNT; ++i)
{
if (!AddObject(BG_AB_OBJECT_SPEEDBUFF_STABLES + 3 * i, Buff_Entries[0], BG_AB_BuffPositions[i][0], BG_AB_BuffPositions[i][1], BG_AB_BuffPositions[i][2], BG_AB_BuffPositions[i][3], 0, 0, std::sin(BG_AB_BuffPositions[i][3]/2), std::cos(BG_AB_BuffPositions[i][3]/2), RESPAWN_ONE_DAY)
|| !AddObject(BG_AB_OBJECT_SPEEDBUFF_STABLES + 3 * i + 1, Buff_Entries[1], BG_AB_BuffPositions[i][0], BG_AB_BuffPositions[i][1], BG_AB_BuffPositions[i][2], BG_AB_BuffPositions[i][3], 0, 0, std::sin(BG_AB_BuffPositions[i][3]/2), std::cos(BG_AB_BuffPositions[i][3]/2), RESPAWN_ONE_DAY)
- || !AddObject(BG_AB_OBJECT_SPEEDBUFF_STABLES + 3 * i + 2, Buff_Entries[2], BG_AB_BuffPositions[i][0], BG_AB_BuffPositions[i][1], BG_AB_BuffPositions[i][2], BG_AB_BuffPositions[i][3], 0, 0, std::sin(BG_AB_BuffPositions[i][3]/2), std::cos(BG_AB_BuffPositions[i][3]/2), RESPAWN_ONE_DAY)
-)
+ || !AddObject(BG_AB_OBJECT_SPEEDBUFF_STABLES + 3 * i + 2, Buff_Entries[2], BG_AB_BuffPositions[i][0], BG_AB_BuffPositions[i][1], BG_AB_BuffPositions[i][2], BG_AB_BuffPositions[i][3], 0, 0, std::sin(BG_AB_BuffPositions[i][3]/2), std::cos(BG_AB_BuffPositions[i][3]/2), RESPAWN_ONE_DAY))
TC_LOG_ERROR("sql.sql", "BatteGroundAB: Failed to spawn buff object!");
}
@@ -698,26 +692,23 @@ WorldSafeLocsEntry const* BattlegroundAB::GetClosestGraveYard(Player* player)
return good_entry;
}
-void BattlegroundAB::UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor)
+bool BattlegroundAB::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor)
{
- BattlegroundScoreMap::iterator itr = PlayerScores.find(Source->GetGUID());
- if (itr == PlayerScores.end()) // player not found...
- return;
+ if (!Battleground::UpdatePlayerScore(player, type, value, doAddHonor))
+ return false;
switch (type)
{
case SCORE_BASES_ASSAULTED:
- ((BattlegroundABScore*)itr->second)->BasesAssaulted += value;
- Source->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AB_OBJECTIVE_ASSAULT_BASE);
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AB_OBJECTIVE_ASSAULT_BASE);
break;
case SCORE_BASES_DEFENDED:
- ((BattlegroundABScore*)itr->second)->BasesDefended += value;
- Source->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AB_OBJECTIVE_DEFEND_BASE);
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AB_OBJECTIVE_DEFEND_BASE);
break;
default:
- Battleground::UpdatePlayerScore(Source, type, value, doAddHonor);
break;
}
+ return true;
}
bool BattlegroundAB::IsAllNodesControlledByTeam(uint32 team) const
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h
index 9ed34691adf..7655880117f 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h
@@ -20,6 +20,8 @@
#define __BATTLEGROUNDAB_H
#include "Battleground.h"
+#include "BattlegroundScore.h"
+#include "Object.h"
enum BG_AB_WorldStates
{
@@ -184,8 +186,7 @@ enum BG_AB_Objectives
#define AB_EVENT_START_BATTLE 9158 // Achievement: Let's Get This Done
-// x, y, z, o
-const float BG_AB_NodePositions[BG_AB_DYNAMIC_NODES_COUNT][4] =
+Position const BG_AB_NodePositions[BG_AB_DYNAMIC_NODES_COUNT] =
{
{1166.785f, 1200.132f, -56.70859f, 0.9075713f}, // stables
{977.0156f, 1046.616f, -44.80923f, -2.600541f}, // blacksmith
@@ -218,8 +219,7 @@ const float BG_AB_BuffPositions[BG_AB_DYNAMIC_NODES_COUNT][4] =
{1146.62f, 816.94f, -98.49f, 6.14f} // gold mine
};
-// x, y, z, o
-const float BG_AB_SpiritGuidePos[BG_AB_ALL_NODES_COUNT][4] =
+Position const BG_AB_SpiritGuidePos[BG_AB_ALL_NODES_COUNT] =
{
{1200.03f, 1171.09f, -56.47f, 5.15f}, // stables
{1017.43f, 960.61f, -42.95f, 4.88f}, // blacksmith
@@ -237,12 +237,38 @@ struct BG_AB_BannerTimer
uint8 teamIndex;
};
-struct BattlegroundABScore : public BattlegroundScore
+struct BattlegroundABScore final : public BattlegroundScore
{
- BattlegroundABScore(): BasesAssaulted(0), BasesDefended(0) { }
- ~BattlegroundABScore() { }
- uint32 BasesAssaulted;
- uint32 BasesDefended;
+ friend class BattlegroundAB;
+
+ protected:
+ BattlegroundABScore(uint64 playerGuid) : BattlegroundScore(playerGuid), BasesAssaulted(0), BasesDefended(0) { }
+
+ void UpdateScore(uint32 type, uint32 value) override
+ {
+ switch (type)
+ {
+ case SCORE_BASES_ASSAULTED:
+ BasesAssaulted += value;
+ break;
+ case SCORE_BASES_DEFENDED:
+ BasesDefended += value;
+ break;
+ default:
+ BattlegroundScore::UpdateScore(type, value);
+ break;
+ }
+ }
+
+ void BuildObjectivesBlock(WorldPacket& data) final override
+ {
+ data << uint32(2);
+ data << uint32(BasesAssaulted);
+ data << uint32(BasesDefended);
+ }
+
+ uint32 BasesAssaulted;
+ uint32 BasesDefended;
};
class BattlegroundAB : public Battleground
@@ -251,31 +277,31 @@ class BattlegroundAB : public Battleground
BattlegroundAB();
~BattlegroundAB();
- void AddPlayer(Player* player);
- void StartingEventCloseDoors();
- void StartingEventOpenDoors();
- void RemovePlayer(Player* player, uint64 guid, uint32 team);
- void HandleAreaTrigger(Player* Source, uint32 Trigger);
- bool SetupBattleground();
- void Reset();
- void EndBattleground(uint32 winner);
- WorldSafeLocsEntry const* GetClosestGraveYard(Player* player);
+ void AddPlayer(Player* player) override;
+ void StartingEventCloseDoors() override;
+ void StartingEventOpenDoors() override;
+ void RemovePlayer(Player* player, uint64 guid, uint32 team) override;
+ void HandleAreaTrigger(Player* Source, uint32 Trigger) override;
+ bool SetupBattleground() override;
+ void Reset() override;
+ void EndBattleground(uint32 winner) override;
+ WorldSafeLocsEntry const* GetClosestGraveYard(Player* player) override;
/* Scorekeeping */
- void UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor = true);
+ bool UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true) override;
- void FillInitialWorldStates(WorldPacket& data);
+ void FillInitialWorldStates(WorldPacket& data) override;
/* Nodes occupying */
- void EventPlayerClickedOnFlag(Player* source, GameObject* target_obj);
+ void EventPlayerClickedOnFlag(Player* source, GameObject* target_obj) override;
/* achievement req. */
- bool IsAllNodesControlledByTeam(uint32 team) const;
- bool CheckAchievementCriteriaMeet(uint32 /*criteriaId*/, Player const* /*player*/, Unit const* /*target*/ = NULL, uint32 /*miscvalue1*/ = 0);
+ bool IsAllNodesControlledByTeam(uint32 team) const override;
+ bool CheckAchievementCriteriaMeet(uint32 /*criteriaId*/, Player const* /*player*/, Unit const* /*target*/ = nullptr, uint32 /*miscvalue1*/ = 0) override;
- uint32 GetPrematureWinner();
+ uint32 GetPrematureWinner() override;
private:
- void PostUpdateImpl(uint32 diff);
+ void PostUpdateImpl(uint32 diff) override;
/* Gameobject spawning/despawning */
void _CreateBanner(uint8 node, uint8 type, uint8 teamIndex, bool delay);
void _DelBanner(uint8 node, uint8 type, uint8 teamIndex);
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
index 610e0bcecc7..eafb02f031d 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
@@ -47,7 +47,6 @@ BattlegroundAV::BattlegroundAV()
}
m_Mine_Timer = 0;
- m_MaxLevel = 0;
for (BG_AV_Nodes i = BG_AV_NODES_FIRSTAID_STATION; i < BG_AV_NODES_MAX; ++i)
InitNode(i, 0, false);
@@ -60,11 +59,6 @@ BattlegroundAV::BattlegroundAV()
BattlegroundAV::~BattlegroundAV() { }
-uint16 BattlegroundAV::GetBonusHonor(uint8 kills) /// @todo move this function to Battleground.cpp (needs to find a way to get m_MaxLevel)
-{
- return Trinity::Honor::hk_honor_at_level(m_MaxLevel, kills);
-}
-
void BattlegroundAV::HandleKillPlayer(Player* player, Player* killer)
{
if (GetStatus() != STATUS_IN_PROGRESS)
@@ -95,7 +89,7 @@ void BattlegroundAV::HandleKillUnit(Creature* unit, Player* killer)
{
CastSpellOnTeam(23658, HORDE); //this is a spell which finishes a quest where a player has to kill the boss
RewardReputationToTeam(729, BG_AV_REP_BOSS, HORDE);
- RewardHonorToTeam(GetBonusHonor(BG_AV_KILL_BOSS), HORDE);
+ RewardHonorToTeam(GetBonusHonorFromKill(BG_AV_KILL_BOSS), HORDE);
EndBattleground(HORDE);
DelCreature(AV_CPLACE_TRIGGER17);
}
@@ -103,7 +97,7 @@ void BattlegroundAV::HandleKillUnit(Creature* unit, Player* killer)
{
CastSpellOnTeam(23658, ALLIANCE); //this is a spell which finishes a quest where a player has to kill the boss
RewardReputationToTeam(730, BG_AV_REP_BOSS, ALLIANCE);
- RewardHonorToTeam(GetBonusHonor(BG_AV_KILL_BOSS), ALLIANCE);
+ RewardHonorToTeam(GetBonusHonorFromKill(BG_AV_KILL_BOSS), ALLIANCE);
EndBattleground(ALLIANCE);
DelCreature(AV_CPLACE_TRIGGER19);
}
@@ -116,7 +110,7 @@ void BattlegroundAV::HandleKillUnit(Creature* unit, Player* killer)
}
m_CaptainAlive[0]=false;
RewardReputationToTeam(729, BG_AV_REP_CAPTAIN, HORDE);
- RewardHonorToTeam(GetBonusHonor(BG_AV_KILL_CAPTAIN), HORDE);
+ RewardHonorToTeam(GetBonusHonorFromKill(BG_AV_KILL_CAPTAIN), HORDE);
UpdateScore(ALLIANCE, (-1)*BG_AV_RES_CAPTAIN);
//spawn destroyed aura
for (uint8 i=0; i <= 9; i++)
@@ -135,7 +129,7 @@ void BattlegroundAV::HandleKillUnit(Creature* unit, Player* killer)
}
m_CaptainAlive[1]=false;
RewardReputationToTeam(730, BG_AV_REP_CAPTAIN, ALLIANCE);
- RewardHonorToTeam(GetBonusHonor(BG_AV_KILL_CAPTAIN), ALLIANCE);
+ RewardHonorToTeam(GetBonusHonorFromKill(BG_AV_KILL_CAPTAIN), ALLIANCE);
UpdateScore(HORDE, (-1)*BG_AV_RES_CAPTAIN);
//spawn destroyed aura
for (uint8 i=0; i <= 9; i++)
@@ -279,38 +273,24 @@ void BattlegroundAV::UpdateScore(uint16 team, int16 points)
Creature* BattlegroundAV::AddAVCreature(uint16 cinfoid, uint16 type)
{
- uint8 level;
bool isStatic = false;
Creature* creature = NULL;
ASSERT(type <= AV_CPLACE_MAX + AV_STATICCPLACE_MAX);
if (type >= AV_CPLACE_MAX) //static
{
type -= AV_CPLACE_MAX;
- cinfoid=uint16(BG_AV_StaticCreaturePos[type][4]);
- creature = AddCreature(BG_AV_StaticCreatureInfo[cinfoid][0],
- (type+AV_CPLACE_MAX),
- BG_AV_StaticCreatureInfo[cinfoid][1],
+ 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]);
- level = (BG_AV_StaticCreatureInfo[cinfoid][2] == BG_AV_StaticCreatureInfo[cinfoid][3])
- ? BG_AV_StaticCreatureInfo[cinfoid][2]
- : urand(BG_AV_StaticCreatureInfo[cinfoid][2], BG_AV_StaticCreatureInfo[cinfoid][3]);
isStatic = true;
}
else
{
- creature = AddCreature(BG_AV_CreatureInfo[cinfoid][0],
- type,
- BG_AV_CreatureInfo[cinfoid][1],
- BG_AV_CreaturePos[type][0],
- BG_AV_CreaturePos[type][1],
- BG_AV_CreaturePos[type][2],
- BG_AV_CreaturePos[type][3]);
- level = (BG_AV_CreatureInfo[cinfoid][2] == BG_AV_CreatureInfo[cinfoid][3])
- ? BG_AV_CreatureInfo[cinfoid][2]
- : urand(BG_AV_CreatureInfo[cinfoid][2], BG_AV_CreatureInfo[cinfoid][3]);
+ creature = AddCreature(BG_AV_CreatureInfo[cinfoid][0], type, BG_AV_CreaturePos[type]);
}
if (!creature)
return NULL;
@@ -335,10 +315,6 @@ Creature* BattlegroundAV::AddAVCreature(uint16 cinfoid, uint16 type)
//just copied this code from a gm-command
}
- if (level != 0)
- level += m_MaxLevel - 60; //maybe we can do this more generic for custom level-range.. actually it's blizzlike
- creature->SetLevel(level);
-
uint32 triggerSpawnID = 0;
uint32 newFaction = 0;
if (creature->GetEntry() == BG_AV_CreatureInfo[AV_NPC_A_CAPTAIN][0])
@@ -363,13 +339,7 @@ Creature* BattlegroundAV::AddAVCreature(uint16 cinfoid, uint16 type)
}
if (triggerSpawnID && newFaction)
{
- if (Creature* trigger = AddCreature(WORLD_TRIGGER,
- triggerSpawnID,
- BG_AV_CreatureInfo[creature->GetEntry()][1],
- BG_AV_CreaturePos[triggerSpawnID][0],
- BG_AV_CreaturePos[triggerSpawnID][1],
- BG_AV_CreaturePos[triggerSpawnID][2],
- BG_AV_CreaturePos[triggerSpawnID][3]))
+ if (Creature* trigger = AddCreature(WORLD_TRIGGER, triggerSpawnID, BG_AV_CreaturePos[triggerSpawnID]))
{
trigger->setFaction(newFaction);
trigger->CastSpell(trigger, SPELL_HONORABLE_DEFENDER_25Y, false);
@@ -468,11 +438,7 @@ void BattlegroundAV::StartingEventOpenDoors()
void BattlegroundAV::AddPlayer(Player* player)
{
Battleground::AddPlayer(player);
- //create score and add it to map, default values are set in constructor
- BattlegroundAVScore* sc = new BattlegroundAVScore;
- PlayerScores[player->GetGUID()] = sc;
- if (m_MaxLevel == 0)
- m_MaxLevel=(player->getLevel()%10 == 0)? player->getLevel() : (player->getLevel()-(player->getLevel()%10))+10; /// @todo just look at the code \^_^/ --but queue-info should provide this information..
+ PlayerScores[player->GetGUIDLow()] = new BattlegroundAVScore(player->GetGUID());
}
void BattlegroundAV::EndBattleground(uint32 winner)
@@ -508,7 +474,7 @@ void BattlegroundAV::EndBattleground(uint32 winner)
if (rep[i] != 0)
RewardReputationToTeam(i == 0 ? 730 : 729, rep[i], i == 0 ? ALLIANCE : HORDE);
if (kills[i] != 0)
- RewardHonorToTeam(GetBonusHonor(kills[i]), i == 0 ? ALLIANCE : HORDE);
+ RewardHonorToTeam(GetBonusHonorFromKill(kills[i]), i == 0 ? ALLIANCE : HORDE);
}
/// @todo add enterevademode for all attacking creatures
@@ -562,43 +528,29 @@ void BattlegroundAV::HandleAreaTrigger(Player* player, uint32 trigger)
}
}
-void BattlegroundAV::UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor)
+bool BattlegroundAV::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor)
{
- BattlegroundScoreMap::iterator itr = PlayerScores.find(Source->GetGUID());
- if (itr == PlayerScores.end()) // player not found...
- return;
+ if (!Battleground::UpdatePlayerScore(player, type, value, doAddHonor))
+ return false;
switch (type)
{
case SCORE_GRAVEYARDS_ASSAULTED:
- ((BattlegroundAVScore*)itr->second)->GraveyardsAssaulted += value;
- Source->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_ASSAULT_GRAVEYARD);
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_ASSAULT_GRAVEYARD);
break;
case SCORE_GRAVEYARDS_DEFENDED:
- ((BattlegroundAVScore*)itr->second)->GraveyardsDefended += value;
- Source->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_DEFEND_GRAVEYARD);
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_DEFEND_GRAVEYARD);
break;
case SCORE_TOWERS_ASSAULTED:
- ((BattlegroundAVScore*)itr->second)->TowersAssaulted += value;
- Source->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_ASSAULT_TOWER);
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_ASSAULT_TOWER);
break;
case SCORE_TOWERS_DEFENDED:
- ((BattlegroundAVScore*)itr->second)->TowersDefended += value;
- Source->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_DEFEND_TOWER);
- break;
- case SCORE_MINES_CAPTURED:
- ((BattlegroundAVScore*)itr->second)->MinesCaptured += value;
- break;
- case SCORE_LEADERS_KILLED:
- ((BattlegroundAVScore*)itr->second)->LeadersKilled += value;
- break;
- case SCORE_SECONDARY_OBJECTIVES:
- ((BattlegroundAVScore*)itr->second)->SecondaryObjectives += value;
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_DEFEND_TOWER);
break;
default:
- Battleground::UpdatePlayerScore(Source, type, value, doAddHonor);
break;
}
+ return true;
}
void BattlegroundAV::EventPlayerDestroyedPoint(BG_AV_Nodes node)
@@ -626,7 +578,7 @@ void BattlegroundAV::EventPlayerDestroyedPoint(BG_AV_Nodes node)
UpdateScore((owner == ALLIANCE) ? HORDE : ALLIANCE, -1 * BG_AV_RES_TOWER);
RewardReputationToTeam(owner == ALLIANCE ? 730 : 729, BG_AV_REP_TOWER, owner);
- RewardHonorToTeam(GetBonusHonor(BG_AV_KILL_TOWER), owner);
+ RewardHonorToTeam(GetBonusHonorFromKill(BG_AV_KILL_TOWER), owner);
SpawnBGObject(BG_AV_OBJECT_TAURA_A_DUNBALDAR_SOUTH+GetTeamIndexByTeamId(owner)+(2*tmp), RESPAWN_ONE_DAY);
SpawnBGObject(BG_AV_OBJECT_TFLAG_A_DUNBALDAR_SOUTH+GetTeamIndexByTeamId(owner)+(2*tmp), RESPAWN_ONE_DAY);
@@ -782,7 +734,7 @@ void BattlegroundAV::PopulateNode(BG_AV_Nodes node)
//spiritguide
if (BgCreatures[node])
DelCreature(node);
- if (!AddSpiritGuide(node, BG_AV_CreaturePos[node][0], BG_AV_CreaturePos[node][1], BG_AV_CreaturePos[node][2], BG_AV_CreaturePos[node][3], owner))
+ if (!AddSpiritGuide(node, BG_AV_CreaturePos[node], GetTeamIndexByTeamId(owner)))
TC_LOG_ERROR("bg.battleground", "AV: couldn't spawn spiritguide at node %i", node);
}
for (uint8 i=0; i<4; i++)
@@ -795,11 +747,8 @@ void BattlegroundAV::PopulateNode(BG_AV_Nodes node)
{
trigger = AddCreature(WORLD_TRIGGER,
node + 302,
- owner,
- BG_AV_CreaturePos[node + 302][0],
- BG_AV_CreaturePos[node + 302][1],
- BG_AV_CreaturePos[node + 302][2],
- BG_AV_CreaturePos[node + 302][3]);
+ BG_AV_CreaturePos[node + 302],
+ GetTeamIndexByTeamId(owner));
}
//add bonus honor aura trigger creature when node is accupied
@@ -1219,15 +1168,10 @@ WorldSafeLocsEntry const* BattlegroundAV::GetClosestGraveYard(Player* player)
bool BattlegroundAV::SetupBattleground()
{
// Create starting objects
- if (
- // alliance gates
- !AddObject(BG_AV_OBJECT_DOOR_A, BG_AV_OBJECTID_GATE_A,
- BG_AV_DoorPositons[0][0], BG_AV_DoorPositons[0][1], BG_AV_DoorPositons[0][2], BG_AV_DoorPositons[0][3],
- 0, 0, std::sin(BG_AV_DoorPositons[0][3]/2), std::cos(BG_AV_DoorPositons[0][3]/2), RESPAWN_IMMEDIATELY)
+ if (// alliance gates
+ !AddObject(BG_AV_OBJECT_DOOR_A, BG_AV_OBJECTID_GATE_A, BG_AV_DoorPositons[0], 0, 0, std::sin(BG_AV_DoorPositons[0].GetOrientation()/2), std::cos(BG_AV_DoorPositons[0].GetOrientation()/2), RESPAWN_IMMEDIATELY)
// horde gates
- || !AddObject(BG_AV_OBJECT_DOOR_H, BG_AV_OBJECTID_GATE_H,
- BG_AV_DoorPositons[1][0], BG_AV_DoorPositons[1][1], BG_AV_DoorPositons[1][2], BG_AV_DoorPositons[1][3],
- 0, 0, std::sin(BG_AV_DoorPositons[1][3]/2), std::cos(BG_AV_DoorPositons[1][3]/2), RESPAWN_IMMEDIATELY))
+ || !AddObject(BG_AV_OBJECT_DOOR_H, BG_AV_OBJECTID_GATE_H, BG_AV_DoorPositons[1], 0, 0, std::sin(BG_AV_DoorPositons[1].GetOrientation()/2), std::cos(BG_AV_DoorPositons[1].GetOrientation()/2), RESPAWN_IMMEDIATELY))
{
TC_LOG_ERROR("sql.sql", "BatteGroundAV: Failed to spawn some object Battleground not created!1");
return false;
@@ -1239,27 +1183,27 @@ bool BattlegroundAV::SetupBattleground()
if (i <= BG_AV_NODES_FROSTWOLF_HUT)
{
if (!AddObject(i, BG_AV_OBJECTID_BANNER_A_B,
- BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[i],
+ 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY)
|| !AddObject(i+11, BG_AV_OBJECTID_BANNER_CONT_A_B,
- BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[i],
+ 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY)
|| !AddObject(i+33, BG_AV_OBJECTID_BANNER_H_B,
- BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[i],
+ 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY)
|| !AddObject(i+22, BG_AV_OBJECTID_BANNER_CONT_H_B,
- BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[i],
+ 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY)
//aura
|| !AddObject(BG_AV_OBJECT_AURA_N_FIRSTAID_STATION+i*3, BG_AV_OBJECTID_AURA_N,
- BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[i],
+ 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY)
|| !AddObject(BG_AV_OBJECT_AURA_A_FIRSTAID_STATION+i*3, BG_AV_OBJECTID_AURA_A,
- BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[i],
+ 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY)
|| !AddObject(BG_AV_OBJECT_AURA_H_FIRSTAID_STATION+i*3, BG_AV_OBJECTID_AURA_H,
- BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY))
+ BG_AV_ObjectPos[i],
+ 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!2");
return false;
@@ -1270,23 +1214,23 @@ bool BattlegroundAV::SetupBattleground()
if (i <= BG_AV_NODES_STONEHEART_BUNKER) //alliance towers
{
if (!AddObject(i, BG_AV_OBJECTID_BANNER_A,
- BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[i],
+ 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY)
|| !AddObject(i+22, BG_AV_OBJECTID_BANNER_CONT_H,
- BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[i],
+ 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY)
|| !AddObject(BG_AV_OBJECT_TAURA_A_DUNBALDAR_SOUTH+(2*(i-BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_AURA_A,
- BG_AV_ObjectPos[i+8][0], BG_AV_ObjectPos[i+8][1], BG_AV_ObjectPos[i+8][2], BG_AV_ObjectPos[i+8][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i+8][3]/2), std::cos(BG_AV_ObjectPos[i+8][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[i+8],
+ 0, 0, std::sin(BG_AV_ObjectPos[i+8].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i+8].GetOrientation()/2), RESPAWN_ONE_DAY)
|| !AddObject(BG_AV_OBJECT_TAURA_H_DUNBALDAR_SOUTH+(2*(i-BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_AURA_N,
- BG_AV_ObjectPos[i+8][0], BG_AV_ObjectPos[i+8][1], BG_AV_ObjectPos[i+8][2], BG_AV_ObjectPos[i+8][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i+8][3]/2), std::cos(BG_AV_ObjectPos[i+8][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[i+8],
+ 0, 0, std::sin(BG_AV_ObjectPos[i+8].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i+8].GetOrientation()/2), RESPAWN_ONE_DAY)
|| !AddObject(BG_AV_OBJECT_TFLAG_A_DUNBALDAR_SOUTH+(2*(i-BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_TOWER_BANNER_A,
- BG_AV_ObjectPos[i+8][0], BG_AV_ObjectPos[i+8][1], BG_AV_ObjectPos[i+8][2], BG_AV_ObjectPos[i+8][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i+8][3]/2), std::cos(BG_AV_ObjectPos[i+8][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[i+8],
+ 0, 0, std::sin(BG_AV_ObjectPos[i+8].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i+8].GetOrientation()/2), RESPAWN_ONE_DAY)
|| !AddObject(BG_AV_OBJECT_TFLAG_H_DUNBALDAR_SOUTH+(2*(i-BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_TOWER_BANNER_PH,
- BG_AV_ObjectPos[i+8][0], BG_AV_ObjectPos[i+8][1], BG_AV_ObjectPos[i+8][2], BG_AV_ObjectPos[i+8][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i+8][3]/2), std::cos(BG_AV_ObjectPos[i+8][3]/2), RESPAWN_ONE_DAY))
+ BG_AV_ObjectPos[i+8],
+ 0, 0, std::sin(BG_AV_ObjectPos[i+8].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i+8].GetOrientation()/2), RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!3");
return false;
@@ -1295,23 +1239,23 @@ bool BattlegroundAV::SetupBattleground()
else //horde towers
{
if (!AddObject(i+7, BG_AV_OBJECTID_BANNER_CONT_A,
- BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[i],
+ 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY)
|| !AddObject(i+29, BG_AV_OBJECTID_BANNER_H,
- BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[i],
+ 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY)
|| !AddObject(BG_AV_OBJECT_TAURA_A_DUNBALDAR_SOUTH+(2*(i-BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_AURA_N,
- BG_AV_ObjectPos[i+8][0], BG_AV_ObjectPos[i+8][1], BG_AV_ObjectPos[i+8][2], BG_AV_ObjectPos[i+8][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i+8][3]/2), std::cos(BG_AV_ObjectPos[i+8][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[i+8],
+ 0, 0, std::sin(BG_AV_ObjectPos[i+8].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i+8].GetOrientation()/2), RESPAWN_ONE_DAY)
|| !AddObject(BG_AV_OBJECT_TAURA_H_DUNBALDAR_SOUTH+(2*(i-BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_AURA_H,
- BG_AV_ObjectPos[i+8][0], BG_AV_ObjectPos[i+8][1], BG_AV_ObjectPos[i+8][2], BG_AV_ObjectPos[i+8][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i+8][3]/2), std::cos(BG_AV_ObjectPos[i+8][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[i+8],
+ 0, 0, std::sin(BG_AV_ObjectPos[i+8].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i+8].GetOrientation()/2), RESPAWN_ONE_DAY)
|| !AddObject(BG_AV_OBJECT_TFLAG_A_DUNBALDAR_SOUTH+(2*(i-BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_TOWER_BANNER_PA,
- BG_AV_ObjectPos[i+8][0], BG_AV_ObjectPos[i+8][1], BG_AV_ObjectPos[i+8][2], BG_AV_ObjectPos[i+8][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i+8][3]/2), std::cos(BG_AV_ObjectPos[i+8][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[i+8],
+ 0, 0, std::sin(BG_AV_ObjectPos[i+8].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i+8].GetOrientation()/2), RESPAWN_ONE_DAY)
|| !AddObject(BG_AV_OBJECT_TFLAG_H_DUNBALDAR_SOUTH+(2*(i-BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_TOWER_BANNER_H,
- BG_AV_ObjectPos[i+8][0], BG_AV_ObjectPos[i+8][1], BG_AV_ObjectPos[i+8][2], BG_AV_ObjectPos[i+8][3],
- 0, 0, std::sin(BG_AV_ObjectPos[i+8][3]/2), std::cos(BG_AV_ObjectPos[i+8][3]/2), RESPAWN_ONE_DAY))
+ BG_AV_ObjectPos[i+8],
+ 0, 0, std::sin(BG_AV_ObjectPos[i+8].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i+8].GetOrientation()/2), RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!4");
return false;
@@ -1321,14 +1265,11 @@ bool BattlegroundAV::SetupBattleground()
{
if (!AddObject(BG_AV_OBJECT_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j,
BG_AV_OBJECTID_FIRE,
- BG_AV_ObjectPos[AV_OPLACE_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j][0],
- BG_AV_ObjectPos[AV_OPLACE_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j][1],
- BG_AV_ObjectPos[AV_OPLACE_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j][2],
- BG_AV_ObjectPos[AV_OPLACE_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j][3],
+ BG_AV_ObjectPos[AV_OPLACE_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j],
0,
0,
- std::sin(BG_AV_ObjectPos[AV_OPLACE_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j][3]/2),
- std::cos(BG_AV_ObjectPos[AV_OPLACE_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j][3]/2),
+ std::sin(BG_AV_ObjectPos[AV_OPLACE_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j].GetOrientation()/2),
+ std::cos(BG_AV_ObjectPos[AV_OPLACE_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j].GetOrientation()/2),
RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!5.%i", i);
@@ -1345,14 +1286,11 @@ bool BattlegroundAV::SetupBattleground()
{
if (!AddObject(BG_AV_OBJECT_BURN_BUILDING_ALLIANCE+(i*10)+j,
BG_AV_OBJECTID_SMOKE,
- BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][0],
- BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][1],
- BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][2],
- BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][3],
+ BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j],
0,
0,
- std::sin(BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][3]/2),
- std::cos(BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][3]/2),
+ std::sin(BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j].GetOrientation()/2),
+ std::cos(BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j].GetOrientation()/2),
RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!6.%i", i);
@@ -1363,14 +1301,11 @@ bool BattlegroundAV::SetupBattleground()
{
if (!AddObject(BG_AV_OBJECT_BURN_BUILDING_ALLIANCE+(i*10)+j,
BG_AV_OBJECTID_FIRE,
- BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][0],
- BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][1],
- BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][2],
- BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][3],
+ BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j],
0,
0,
- std::sin(BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][3]/2),
- std::cos(BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][3]/2),
+ std::sin(BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j].GetOrientation()/2),
+ std::cos(BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j].GetOrientation()/2),
RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!7.%i", i);
@@ -1383,14 +1318,11 @@ bool BattlegroundAV::SetupBattleground()
{
if (!AddObject(BG_AV_OBJECT_MINE_SUPPLY_N_MIN+i,
BG_AV_OBJECTID_MINE_N,
- BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_N_MIN+i][0],
- BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_N_MIN+i][1],
- BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_N_MIN+i][2],
- BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_N_MIN+i][3],
+ BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_N_MIN+i],
0,
0,
- std::sin(BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_N_MIN+i][3]/2),
- std::cos(BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_N_MIN+i][3]/2),
+ std::sin(BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_N_MIN+i].GetOrientation()/2),
+ std::cos(BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_N_MIN+i].GetOrientation()/2),
RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some mine supplies Battleground not created!7.5.%i", i);
@@ -1401,14 +1333,11 @@ bool BattlegroundAV::SetupBattleground()
{
if (!AddObject(BG_AV_OBJECT_MINE_SUPPLY_S_MIN+i,
BG_AV_OBJECTID_MINE_S,
- BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_S_MIN+i][0],
- BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_S_MIN+i][1],
- BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_S_MIN+i][2],
- BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_S_MIN+i][3],
+ BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_S_MIN+i],
0,
0,
- std::sin(BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_S_MIN+i][3]/2),
- std::cos(BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_S_MIN+i][3]/2),
+ std::sin(BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_S_MIN+i].GetOrientation()/2),
+ std::cos(BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_S_MIN+i].GetOrientation()/2),
RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some mine supplies Battleground not created!7.6.%i", i);
@@ -1418,14 +1347,11 @@ bool BattlegroundAV::SetupBattleground()
if (!AddObject(BG_AV_OBJECT_FLAG_N_SNOWFALL_GRAVE,
BG_AV_OBJECTID_BANNER_SNOWFALL_N,
- BG_AV_ObjectPos[BG_AV_NODES_SNOWFALL_GRAVE][0],
- BG_AV_ObjectPos[BG_AV_NODES_SNOWFALL_GRAVE][1],
- BG_AV_ObjectPos[BG_AV_NODES_SNOWFALL_GRAVE][2],
- BG_AV_ObjectPos[BG_AV_NODES_SNOWFALL_GRAVE][3],
+ BG_AV_ObjectPos[BG_AV_NODES_SNOWFALL_GRAVE],
0,
0,
- std::sin(BG_AV_ObjectPos[BG_AV_NODES_SNOWFALL_GRAVE][3]/2),
- std::cos(BG_AV_ObjectPos[BG_AV_NODES_SNOWFALL_GRAVE][3]/2),
+ std::sin(BG_AV_ObjectPos[BG_AV_NODES_SNOWFALL_GRAVE].GetOrientation()/2),
+ std::cos(BG_AV_ObjectPos[BG_AV_NODES_SNOWFALL_GRAVE].GetOrientation()/2),
RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!8");
@@ -1434,17 +1360,17 @@ bool BattlegroundAV::SetupBattleground()
for (uint8 i = 0; i < 4; i++)
{
if (!AddObject(BG_AV_OBJECT_SNOW_EYECANDY_A+i, BG_AV_OBJECTID_SNOWFALL_CANDY_A,
- BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][0], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][1], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][2], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3],
- 0, 0, std::sin(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3]/2), std::cos(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i],
+ 0, 0, std::sin(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i].GetOrientation()/2), RESPAWN_ONE_DAY)
|| !AddObject(BG_AV_OBJECT_SNOW_EYECANDY_PA+i, BG_AV_OBJECTID_SNOWFALL_CANDY_PA,
- BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][0], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][1], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][2], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3],
- 0, 0, std::sin(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3]/2), std::cos(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i],
+ 0, 0, std::sin(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i].GetOrientation()/2), RESPAWN_ONE_DAY)
|| !AddObject(BG_AV_OBJECT_SNOW_EYECANDY_H+i, BG_AV_OBJECTID_SNOWFALL_CANDY_H,
- BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][0], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][1], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][2], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3],
- 0, 0, std::sin(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3]/2), std::cos(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3]/2), RESPAWN_ONE_DAY)
+ BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i],
+ 0, 0, std::sin(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i].GetOrientation()/2), RESPAWN_ONE_DAY)
|| !AddObject(BG_AV_OBJECT_SNOW_EYECANDY_PH+i, BG_AV_OBJECTID_SNOWFALL_CANDY_PH,
- BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][0], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][1], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][2], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3],
- 0, 0, std::sin(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3]/2), std::cos(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3]/2), RESPAWN_ONE_DAY))
+ BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i],
+ 0, 0, std::sin(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i].GetOrientation()/2), RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!9.%i", i);
return false;
@@ -1504,8 +1430,8 @@ bool BattlegroundAV::SetupBattleground()
AddAVCreature(0, i + AV_CPLACE_MAX);
//mainspiritguides:
TC_LOG_DEBUG("bg.battleground", "BG_AV: start spawning spiritguides creatures");
- AddSpiritGuide(7, BG_AV_CreaturePos[7][0], BG_AV_CreaturePos[7][1], BG_AV_CreaturePos[7][2], BG_AV_CreaturePos[7][3], ALLIANCE);
- AddSpiritGuide(8, BG_AV_CreaturePos[8][0], BG_AV_CreaturePos[8][1], BG_AV_CreaturePos[8][2], BG_AV_CreaturePos[8][3], HORDE);
+ AddSpiritGuide(7, BG_AV_CreaturePos[7], TEAM_ALLIANCE);
+ AddSpiritGuide(8, BG_AV_CreaturePos[8], TEAM_HORDE);
//spawn the marshals (those who get deleted, if a tower gets destroyed)
TC_LOG_DEBUG("bg.battleground", "BG_AV: start spawning marshal creatures");
for (i = AV_NPC_A_MARSHAL_SOUTH; i <= AV_NPC_H_MARSHAL_WTOWER; i++)
@@ -1608,8 +1534,6 @@ void BattlegroundAV::DefendNode(BG_AV_Nodes node, uint16 team)
void BattlegroundAV::ResetBGSubclass()
{
- m_MaxLevel=0;
-
for (uint8 i=0; i<2; i++) //forloop for both teams (it just make 0 == alliance and 1 == horde also for both mines 0=north 1=south
{
for (uint8 j=0; j<9; j++)
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h
index 716e675a840..882d729c1e8 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h
@@ -20,6 +20,8 @@
#define __BATTLEGROUNDAV_H
#include "Battleground.h"
+#include "BattlegroundScore.h"
+#include "Object.h"
#define LANG_BG_AV_A_CAPTAIN_BUFF "Begone. Uncouth scum! The Alliance shall prevail in Alterac Valley!"
#define LANG_BG_AV_H_CAPTAIN_BUFF "Now is the time to attack! For the Horde!"
@@ -130,10 +132,10 @@ enum BG_AV_ObjectIds
BG_AV_OBJECTID_SNOWFALL_CANDY_PH = 179425,
//banners on top of towers:
- BG_AV_OBJECTID_TOWER_BANNER_A = 178927, //[PH] Alliance A1 Tower Banner BIG
- BG_AV_OBJECTID_TOWER_BANNER_H = 178955, //[PH] Horde H1 Tower Banner BIG
- BG_AV_OBJECTID_TOWER_BANNER_PA = 179446, //[PH] Alliance H1 Tower Pre-Banner BIG
- BG_AV_OBJECTID_TOWER_BANNER_PH = 179436, //[PH] Horde A1 Tower Pre-Banner BIG
+ BG_AV_OBJECTID_TOWER_BANNER_A = 178927, //[PH] Alliance A1 Tower Banner BIG
+ BG_AV_OBJECTID_TOWER_BANNER_H = 178955, //[PH] Horde H1 Tower Banner BIG
+ BG_AV_OBJECTID_TOWER_BANNER_PA = 179446, //[PH] Alliance H1 Tower Pre-Banner BIG
+ BG_AV_OBJECTID_TOWER_BANNER_PH = 179436, //[PH] Horde A1 Tower Pre-Banner BIG
//Auras
BG_AV_OBJECTID_AURA_A = 180421,
@@ -147,11 +149,11 @@ enum BG_AV_ObjectIds
BG_AV_OBJECTID_GATE_H = 180424,
//mine supplies
- BG_AV_OBJECTID_MINE_N = 178785,
- BG_AV_OBJECTID_MINE_S = 178784,
+ BG_AV_OBJECTID_MINE_N = 178785,
+ BG_AV_OBJECTID_MINE_S = 178784,
BG_AV_OBJECTID_FIRE = 179065,
- BG_AV_OBJECTID_SMOKE = 179066
+ BG_AV_OBJECTID_SMOKE = 179066
};
enum BG_AV_Nodes
@@ -305,58 +307,58 @@ enum BG_AV_ObjectTypes
BG_AV_OBJECT_MINE_SUPPLY_S_MIN = 225,
BG_AV_OBJECT_MINE_SUPPLY_S_MAX = 236,
- BG_AV_OBJECT_MAX = 237
+ BG_AV_OBJECT_MAX = 237
};
enum BG_AV_OBJECTS
{
- AV_OPLACE_FIRSTAID_STATION = 0,
- AV_OPLACE_STORMPIKE_GRAVE = 1,
- AV_OPLACE_STONEHEART_GRAVE = 2,
- AV_OPLACE_SNOWFALL_GRAVE = 3,
- AV_OPLACE_ICEBLOOD_GRAVE = 4,
- AV_OPLACE_FROSTWOLF_GRAVE = 5,
- AV_OPLACE_FROSTWOLF_HUT = 6,
- AV_OPLACE_DUNBALDAR_SOUTH = 7,
- AV_OPLACE_DUNBALDAR_NORTH = 8,
- AV_OPLACE_ICEWING_BUNKER = 9,
- AV_OPLACE_STONEHEART_BUNKER = 10,
- AV_OPLACE_ICEBLOOD_TOWER = 11,
- AV_OPLACE_TOWER_POINT = 12,
- AV_OPLACE_FROSTWOLF_ETOWER = 13,
- AV_OPLACE_FROSTWOLF_WTOWER = 14,
- AV_OPLACE_BIGBANNER_DUNBALDAR_SOUTH = 15,
- AV_OPLACE_BIGBANNER_DUNBALDAR_NORTH = 16,
- AV_OPLACE_BIGBANNER_ICEWING_BUNKER = 17,
- AV_OPLACE_BIGBANNER_STONEHEART_BUNKER = 18,
- AV_OPLACE_BIGBANNER_ICEBLOOD_TOWER = 19,
- AV_OPLACE_BIGBANNER_TOWER_POINT = 20,
- AV_OPLACE_BIGBANNER_FROSTWOLF_ETOWER = 21,
- AV_OPLACE_BIGBANNER_FROSTWOLF_WTOWER = 22,
-
- AV_OPLACE_BURN_DUNBALDAR_SOUTH = 23,
- AV_OPLACE_BURN_DUNBALDAR_NORTH = 33,
- AV_OPLACE_BURN_ICEWING_BUNKER = 43,
- AV_OPLACE_BURN_STONEHEART_BUNKER = 53,
- AV_OPLACE_BURN_ICEBLOOD_TOWER = 63,
- AV_OPLACE_BURN_TOWER_POINT = 73,
- AV_OPLACE_BURN_FROSTWOLF_ETOWER = 83,
- AV_OPLACE_BURN_FROSTWOLF_WTOWER = 93,
- AV_OPLACE_BURN_BUILDING_A = 103,
- AV_OPLACE_BURN_BUILDING_H = 113,
- AV_OPLACE_SNOW_1 = 123,
- AV_OPLACE_SNOW_2 = 124,
- AV_OPLACE_SNOW_3 = 125,
- AV_OPLACE_SNOW_4 = 126,
- AV_OPLACE_MINE_SUPPLY_N_MIN = 127,
- AV_OPLACE_MINE_SUPPLY_N_MAX = 136,
- AV_OPLACE_MINE_SUPPLY_S_MIN = 137,
- AV_OPLACE_MINE_SUPPLY_S_MAX = 148,
-
- AV_OPLACE_MAX = 149
+ AV_OPLACE_FIRSTAID_STATION = 0,
+ AV_OPLACE_STORMPIKE_GRAVE = 1,
+ AV_OPLACE_STONEHEART_GRAVE = 2,
+ AV_OPLACE_SNOWFALL_GRAVE = 3,
+ AV_OPLACE_ICEBLOOD_GRAVE = 4,
+ AV_OPLACE_FROSTWOLF_GRAVE = 5,
+ AV_OPLACE_FROSTWOLF_HUT = 6,
+ AV_OPLACE_DUNBALDAR_SOUTH = 7,
+ AV_OPLACE_DUNBALDAR_NORTH = 8,
+ AV_OPLACE_ICEWING_BUNKER = 9,
+ AV_OPLACE_STONEHEART_BUNKER = 10,
+ AV_OPLACE_ICEBLOOD_TOWER = 11,
+ AV_OPLACE_TOWER_POINT = 12,
+ AV_OPLACE_FROSTWOLF_ETOWER = 13,
+ AV_OPLACE_FROSTWOLF_WTOWER = 14,
+ AV_OPLACE_BIGBANNER_DUNBALDAR_SOUTH = 15,
+ AV_OPLACE_BIGBANNER_DUNBALDAR_NORTH = 16,
+ AV_OPLACE_BIGBANNER_ICEWING_BUNKER = 17,
+ AV_OPLACE_BIGBANNER_STONEHEART_BUNKER = 18,
+ AV_OPLACE_BIGBANNER_ICEBLOOD_TOWER = 19,
+ AV_OPLACE_BIGBANNER_TOWER_POINT = 20,
+ AV_OPLACE_BIGBANNER_FROSTWOLF_ETOWER = 21,
+ AV_OPLACE_BIGBANNER_FROSTWOLF_WTOWER = 22,
+
+ AV_OPLACE_BURN_DUNBALDAR_SOUTH = 23,
+ AV_OPLACE_BURN_DUNBALDAR_NORTH = 33,
+ AV_OPLACE_BURN_ICEWING_BUNKER = 43,
+ AV_OPLACE_BURN_STONEHEART_BUNKER = 53,
+ AV_OPLACE_BURN_ICEBLOOD_TOWER = 63,
+ AV_OPLACE_BURN_TOWER_POINT = 73,
+ AV_OPLACE_BURN_FROSTWOLF_ETOWER = 83,
+ AV_OPLACE_BURN_FROSTWOLF_WTOWER = 93,
+ AV_OPLACE_BURN_BUILDING_A = 103,
+ AV_OPLACE_BURN_BUILDING_H = 113,
+ AV_OPLACE_SNOW_1 = 123,
+ AV_OPLACE_SNOW_2 = 124,
+ AV_OPLACE_SNOW_3 = 125,
+ AV_OPLACE_SNOW_4 = 126,
+ AV_OPLACE_MINE_SUPPLY_N_MIN = 127,
+ AV_OPLACE_MINE_SUPPLY_N_MAX = 136,
+ AV_OPLACE_MINE_SUPPLY_S_MIN = 137,
+ AV_OPLACE_MINE_SUPPLY_S_MAX = 148,
+
+ AV_OPLACE_MAX = 149
};
-const float BG_AV_ObjectPos[AV_OPLACE_MAX][4] =
+Position const BG_AV_ObjectPos[AV_OPLACE_MAX] =
{
{638.592f, -32.422f, 46.0608f, -1.62316f }, //firstaid station
{669.007f, -294.078f, 30.2909f, 2.77507f }, //stormpike
@@ -528,7 +530,7 @@ const float BG_AV_ObjectPos[AV_OPLACE_MAX][4] =
{-951.394f, -193.695f, 67.634f, 0.802851f}
};
-const float BG_AV_DoorPositons[2][4] =
+Position const BG_AV_DoorPositons[2] =
{
{780.487f, -493.024f, 99.9553f, 3.0976f}, //alliance
{-1375.193f, -538.981f, 55.2824f, 0.72178f} //horde
@@ -624,8 +626,7 @@ enum BG_AV_CreaturePlace
AV_CPLACE_MAX = 321
};
-//x, y, z, o
-const float BG_AV_CreaturePos[AV_CPLACE_MAX][4] =
+Position const BG_AV_CreaturePos[AV_CPLACE_MAX] =
{
//spiritguides
{643.000000f, 44.000000f, 69.740196f, -0.001854f},
@@ -1228,59 +1229,59 @@ const float BG_AV_StaticCreaturePos[AV_STATICCPLACE_MAX][5] =
{-1370.9f, -219.793f, 98.4258f, 5.04381f, 47}, //drek thar
};
-const uint32 BG_AV_StaticCreatureInfo[51][4] =
+const uint32 BG_AV_StaticCreatureInfo[51] =
{
- { 2225, 1215, 55, 55 }, //Zora Guthrek
- { 3343, 1215, 55, 55 }, //Grelkor
- { 3625, 1215, 55, 55 }, //Rarck
- { 4255, 1217, 55, 55 }, //Brogus Thunderbrew
- { 4257, 1217, 55, 55 }, //Lana Thunderbrew
- { 5134, 1217, 55, 55 }, //Jonivera Farmountain
- { 5135, 1217, 55, 55 }, //Svalbrad Farmountain
- { 5139, 1217, 55, 55 }, //Kurdrum Barleybeard
- { 10364, 1215, 55, 55 }, //Yaelika Farclaw
- { 10367, 1215, 55, 55 }, //Shrye Ragefist
- { 10981, 38, 50, 51 }, //Frostwolf
- { 10986, 514, 52, 53 }, //Snowblind Harpy
- { 10990, 1274, 50, 51 }, //Alterac Ram
- { 11675, 514, 53, 53 }, //Snowblind Windcaller
- { 11678, 14, 52, 53 }, //Snowblind Ambusher
- { 11839, 39, 56, 56 }, //Wildpaw Brute
- { 11947, 1214, 61, 61 }, // Captain Galvangar /// @todo: Duplicate ? Check and confirm
- { 11948, 1216, 63, 63 }, //Vanndar Stormpike
- { 11949, 1216, 61, 61 }, //Captain Balinda Stonehearth
- { 11997, 1334, 60, 60 }, //Stormpike Herald
- { 12051, 1214, 57, 57 }, //Frostwolf Legionnaire
- { 12096, 1217, 55, 55 }, //Stormpike Quartermaster
- { 12097, 1215, 55, 55 }, //Frostwolf Quartermaster
- { 12127, 1216, 57, 57 }, //Stormpike Guardsman
- { 13176, 1215, 60, 60 }, //Smith Regzar
- { 13179, 1215, 59, 59 }, //Wing Commander Guse
- { 13216, 1217, 58, 58 }, //Gaelden Hammersmith
- { 13218, 1215, 58, 58 }, //Grunnda Wolfheart
- { 13236, 1214, 60, 60 }, //Primalist Thurloga
- { 13257, 1216, 60, 60 }, //Murgot Deepforge
- { 13284, 1214, 58, 58 }, //Frostwolf Shaman
- { 13438, 1217, 58, 58 }, //Wing Commander Slidore
- { 13442, 1216, 60, 60 }, //Arch Druid Renferal
- { 13443, 1216, 60, 60 }, //Druid of the Grove
- { 13447, 1216, 58, 58 }, //Corporal Noreg Stormpike
- { 13577, 1216, 60, 60 }, //Stormpike Ram Rider Commander
- { 13617, 1216, 60, 60 }, //Stormpike Stable Master
- { 13797, 32, 60, 61 }, //Mountaineer Boombellow
- { 13798, 1214, 60, 61 }, //Jotek
- { 13816, 1216, 61, 61 }, //Prospector Stonehewer
- { 14185, 877, 59, 59 }, //Najak Hexxen
- { 14186, 105, 60, 60 }, //Ravak Grimtotem
- { 14187, 1594, 60, 60 }, //Athramanis
- { 14188, 57, 59, 59 }, //Dirk Swindle
- { 14282, 1214, 53, 54 }, //Frostwolf Bloodhound
- { 14283, 1216, 53, 54 }, //Stormpike Owl
- { 14284, 1216, 61, 61 }, //Stormpike Battleguard
- { 11946, 1214, 63, 63 }, //Drek'Thar /// @todo: Correct the level (Level 80 for boss ?)
- { 11948, 1216, 63, 63 }, //Vanndar Stormpike
- { 11947, 1214, 61, 61 }, //Captain Galvangar
- { 11949, 1216, 61, 61 } //Captain Balinda Stonehearth
+ 2225, // Zora Guthrek
+ 3343, // Grelkor
+ 3625, // Rarck
+ 4255, // Brogus Thunderbrew
+ 4257, // Lana Thunderbrew
+ 5134, // Jonivera Farmountain
+ 5135, // Svalbrad Farmountain
+ 5139, // Kurdrum Barleybeard
+ 10364, // Yaelika Farclaw
+ 10367, // Shrye Ragefist
+ 10981, // Frostwolf
+ 10986, // Snowblind Harpy
+ 10990, // Alterac Ram
+ 11675, // Snowblind Windcaller
+ 11678, // Snowblind Ambusher
+ 11839, // Wildpaw Brute
+ 11947, // Captain Galvangar
+ 11948, // Vanndar Stormpike
+ 11949, // Captain Balinda Stonehearth
+ 11997, // Stormpike Herald
+ 12051, // Frostwolf Legionnaire
+ 12096, // Stormpike Quartermaster
+ 12097, // Frostwolf Quartermaster
+ 12127, // Stormpike Guardsman
+ 13176, // Smith Regzar
+ 13179, // Wing Commander Guse
+ 13216, // Gaelden Hammersmith
+ 13218, // Grunnda Wolfheart
+ 13236, // Primalist Thurloga
+ 13257, // Murgot Deepforge
+ 13284, // Frostwolf Shaman
+ 13438, // Wing Commander Slidore
+ 13442, // Arch Druid Renferal
+ 13443, // Druid of the Grove
+ 13447, // Corporal Noreg Stormpike
+ 13577, // Stormpike Ram Rider Commander
+ 13617, // Stormpike Stable Master
+ 13797, // Mountaineer Boombellow
+ 13798, // Jotek
+ 13816, // Prospector Stonehewer
+ 14185, // Najak Hexxen
+ 14186, // Ravak Grimtotem
+ 14187, // Athramanis
+ 14188, // Dirk Swindle
+ 14282, // Frostwolf Bloodhound
+ 14283, // Stormpike Owl
+ 14284, // Stormpike Battleguard
+ 11946, // Drek'Thar
+ 11948, // Vanndar Stormpike
+ 11947, // Captain Galvangar
+ 11949, // Captain Balinda Stonehearth
};
enum BG_AV_Graveyards
@@ -1525,18 +1526,53 @@ struct BG_AV_NodeInfo
inline BG_AV_Nodes &operator++(BG_AV_Nodes &i){ return i = BG_AV_Nodes(i + 1); }
-struct BattlegroundAVScore : public BattlegroundScore
+struct BattlegroundAVScore final : public BattlegroundScore
{
- BattlegroundAVScore() : GraveyardsAssaulted(0), GraveyardsDefended(0), TowersAssaulted(0),
- TowersDefended(0), MinesCaptured(0), LeadersKilled(0), SecondaryObjectives(0) { }
- ~BattlegroundAVScore() { }
- uint32 GraveyardsAssaulted;
- uint32 GraveyardsDefended;
- uint32 TowersAssaulted;
- uint32 TowersDefended;
- uint32 MinesCaptured;
- uint32 LeadersKilled;
- uint32 SecondaryObjectives;
+ friend class BattlegroundAV;
+
+ protected:
+ BattlegroundAVScore(uint64 playerGuid) : BattlegroundScore(playerGuid), GraveyardsAssaulted(0), GraveyardsDefended(0), TowersAssaulted(0), TowersDefended(0), MinesCaptured(0) { }
+
+ void UpdateScore(uint32 type, uint32 value) override
+ {
+ switch (type)
+ {
+ case SCORE_GRAVEYARDS_ASSAULTED:
+ GraveyardsAssaulted += value;
+ break;
+ case SCORE_GRAVEYARDS_DEFENDED:
+ GraveyardsDefended += value;
+ break;
+ case SCORE_TOWERS_ASSAULTED:
+ TowersAssaulted += value;
+ break;
+ case SCORE_TOWERS_DEFENDED:
+ TowersDefended += value;
+ break;
+ case SCORE_MINES_CAPTURED:
+ MinesCaptured += value;
+ break;
+ default:
+ BattlegroundScore::UpdateScore(type, value);
+ break;
+ }
+ }
+
+ void BuildObjectivesBlock(WorldPacket& data) final override
+ {
+ data << uint32(5); // Objectives Count
+ data << uint32(GraveyardsAssaulted);
+ data << uint32(GraveyardsDefended);
+ data << uint32(TowersAssaulted);
+ data << uint32(TowersDefended);
+ data << uint32(MinesCaptured);
+ }
+
+ uint32 GraveyardsAssaulted;
+ uint32 GraveyardsDefended;
+ uint32 TowersAssaulted;
+ uint32 TowersDefended;
+ uint32 MinesCaptured;
};
class BattlegroundAV : public Battleground
@@ -1546,37 +1582,37 @@ class BattlegroundAV : public Battleground
~BattlegroundAV();
/* inherited from BattlegroundClass */
- void AddPlayer(Player* player);
- void StartingEventCloseDoors();
- void StartingEventOpenDoors();
+ void AddPlayer(Player* player) override;
+ void StartingEventCloseDoors() override;
+ void StartingEventOpenDoors() override;
- void RemovePlayer(Player* player, uint64 guid, uint32 team);
- void HandleAreaTrigger(Player* player, uint32 trigger);
- bool SetupBattleground();
- void ResetBGSubclass();
+ void RemovePlayer(Player* player, uint64 guid, uint32 team) override;
+ void HandleAreaTrigger(Player* player, uint32 trigger) override;
+ bool SetupBattleground() override;
+ void ResetBGSubclass() override;
/*general stuff*/
void UpdateScore(uint16 team, int16 points);
- void UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true);
+ bool UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true) override;
/*handlestuff*/ //these are functions which get called from extern
- void EventPlayerClickedOnFlag(Player* source, GameObject* target_obj);
- void HandleKillPlayer(Player* player, Player* killer);
- void HandleKillUnit(Creature* unit, Player* killer);
- void HandleQuestComplete(uint32 questid, Player* player);
- bool CanActivateGO(int32 GOId, uint32 team) const;
+ void EventPlayerClickedOnFlag(Player* source, GameObject* target_obj) override;
+ void HandleKillPlayer(Player* player, Player* killer) override;
+ void HandleKillUnit(Creature* unit, Player* killer) override;
+ void HandleQuestComplete(uint32 questid, Player* player) override;
+ bool CanActivateGO(int32 GOId, uint32 team) const override;
- void EndBattleground(uint32 winner);
+ void EndBattleground(uint32 winner) override;
- WorldSafeLocsEntry const* GetClosestGraveYard(Player* player);
+ WorldSafeLocsEntry const* GetClosestGraveYard(Player* player) override;
// Achievement: Av perfection and Everything counts
- bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const* source, Unit const* target = NULL, uint32 miscvalue1 = 0);
+ bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const* source, Unit const* target = nullptr, uint32 miscvalue1 = 0) override;
- uint32 GetPrematureWinner();
+ uint32 GetPrematureWinner() override;
private:
- void PostUpdateImpl(uint32 diff);
+ void PostUpdateImpl(uint32 diff) override;
/* Nodes occupying */
void EventPlayerAssaultsPoint(Player* player, uint32 object);
@@ -1600,14 +1636,13 @@ class BattlegroundAV : public Battleground
void ChangeMineOwner(uint8 mine, uint32 team, bool initial=false);
/*worldstates*/
- void FillInitialWorldStates(WorldPacket& data);
+ void FillInitialWorldStates(WorldPacket& data) override;
uint8 GetWorldStateType(uint8 state, uint16 team);
void SendMineWorldStates(uint32 mine);
void UpdateNodeWorldState(BG_AV_Nodes node);
/*general */
Creature* AddAVCreature(uint16 cinfoid, uint16 type);
- uint16 GetBonusHonor(uint8 kills); /// @todo: Remove this when the core handles this properly
/*variables */
int32 m_Team_Scores[2];
@@ -1622,7 +1657,6 @@ class BattlegroundAV : public Battleground
uint32 m_CaptainBuffTimer[2];
bool m_CaptainAlive[2];
- uint8 m_MaxLevel; /// @todo: Remove this once battleground->getmaxlevel() returns something usefull/is reworked (?)
bool m_IsInformedNearVictory[2];
};
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp
index c89fc57b8aa..916531e3947 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp
@@ -17,30 +17,12 @@
*/
#include "BattlegroundBE.h"
-#include "Language.h"
-#include "Object.h"
-#include "ObjectMgr.h"
#include "Player.h"
#include "WorldPacket.h"
BattlegroundBE::BattlegroundBE()
{
BgObjects.resize(BG_BE_OBJECT_MAX);
-
- StartDelayTimes[BG_STARTING_EVENT_FIRST] = BG_START_DELAY_1M;
- StartDelayTimes[BG_STARTING_EVENT_SECOND] = BG_START_DELAY_30S;
- StartDelayTimes[BG_STARTING_EVENT_THIRD] = BG_START_DELAY_15S;
- StartDelayTimes[BG_STARTING_EVENT_FOURTH] = BG_START_DELAY_NONE;
- //we must set messageIds
- StartMessageIds[BG_STARTING_EVENT_FIRST] = LANG_ARENA_ONE_MINUTE;
- StartMessageIds[BG_STARTING_EVENT_SECOND] = LANG_ARENA_THIRTY_SECONDS;
- StartMessageIds[BG_STARTING_EVENT_THIRD] = LANG_ARENA_FIFTEEN_SECONDS;
- StartMessageIds[BG_STARTING_EVENT_FOURTH] = LANG_ARENA_HAS_BEGUN;
-}
-
-BattlegroundBE::~BattlegroundBE()
-{
-
}
void BattlegroundBE::StartingEventCloseDoors()
@@ -61,39 +43,6 @@ void BattlegroundBE::StartingEventOpenDoors()
SpawnBGObject(i, 60);
}
-void BattlegroundBE::AddPlayer(Player* player)
-{
- Battleground::AddPlayer(player);
- PlayerScores[player->GetGUID()] = new BattlegroundScore;
- UpdateArenaWorldState();
-}
-
-void BattlegroundBE::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/)
-{
- if (GetStatus() == STATUS_WAIT_LEAVE)
- return;
-
- UpdateArenaWorldState();
- CheckArenaWinConditions();
-}
-
-void BattlegroundBE::HandleKillPlayer(Player* player, Player* killer)
-{
- if (GetStatus() != STATUS_IN_PROGRESS)
- return;
-
- if (!killer)
- {
- TC_LOG_ERROR("bg.battleground", "Killer player not found");
- return;
- }
-
- Battleground::HandleKillPlayer(player, killer);
-
- UpdateArenaWorldState();
- CheckArenaWinConditions();
-}
-
void BattlegroundBE::HandleAreaTrigger(Player* player, uint32 trigger)
{
if (GetStatus() != STATUS_IN_PROGRESS)
@@ -110,16 +59,10 @@ void BattlegroundBE::HandleAreaTrigger(Player* player, uint32 trigger)
}
}
-void BattlegroundBE::FillInitialWorldStates(WorldPacket &data)
+void BattlegroundBE::FillInitialWorldStates(WorldPacket& data)
{
- data << uint32(0x9f3) << uint32(1); // 9
- UpdateArenaWorldState();
-}
-
-void BattlegroundBE::Reset()
-{
- //call parent's class reset
- Battleground::Reset();
+ data << uint32(0x9f3) << uint32(1); // 9 show
+ Arena::FillInitialWorldStates(data);
}
bool BattlegroundBE::SetupBattleground()
@@ -139,13 +82,3 @@ bool BattlegroundBE::SetupBattleground()
return true;
}
-
-void BattlegroundBE::UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor)
-{
- BattlegroundScoreMap::iterator itr = PlayerScores.find(Source->GetGUID());
- if (itr == PlayerScores.end()) // player not found...
- return;
-
- //there is nothing special in this score
- Battleground::UpdatePlayerScore(Source, type, value, doAddHonor);
-}
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundBE.h b/src/server/game/Battlegrounds/Zones/BattlegroundBE.h
index be801dfff2b..6aa3e56ca13 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundBE.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundBE.h
@@ -19,7 +19,7 @@
#ifndef __BATTLEGROUNDBE_H
#define __BATTLEGROUNDBE_H
-#include "Battleground.h"
+#include "Arena.h"
enum BattlegroundBEObjectTypes
{
@@ -32,7 +32,7 @@ enum BattlegroundBEObjectTypes
BG_BE_OBJECT_MAX = 6
};
-enum BattlegroundBEObjects
+enum BattlegroundBEGameObjects
{
BG_BE_OBJECT_TYPE_DOOR_1 = 183971,
BG_BE_OBJECT_TYPE_DOOR_2 = 183973,
@@ -42,25 +42,17 @@ enum BattlegroundBEObjects
BG_BE_OBJECT_TYPE_BUFF_2 = 184664
};
-class BattlegroundBE : public Battleground
+class BattlegroundBE : public Arena
{
public:
BattlegroundBE();
- ~BattlegroundBE();
/* inherited from BattlegroundClass */
- void AddPlayer(Player* player);
- void StartingEventCloseDoors();
- void StartingEventOpenDoors();
+ void StartingEventCloseDoors() override;
+ void StartingEventOpenDoors() override;
- void RemovePlayer(Player* player, uint64 guid, uint32 team);
- void HandleAreaTrigger(Player* Source, uint32 Trigger);
- bool SetupBattleground();
- void Reset();
- void FillInitialWorldStates(WorldPacket &d);
- void HandleKillPlayer(Player* player, Player* killer);
-
- /* Scorekeeping */
- void UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor = true);
+ void HandleAreaTrigger(Player* Source, uint32 Trigger) override;
+ bool SetupBattleground() override;
+ void FillInitialWorldStates(WorldPacket &d) override;
};
#endif
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp
index 3eb52945236..864faa30916 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp
@@ -19,8 +19,6 @@
#include "BattlegroundDS.h"
#include "Creature.h"
#include "GameObject.h"
-#include "Language.h"
-#include "ObjectAccessor.h"
#include "Player.h"
#include "WorldPacket.h"
@@ -29,25 +27,8 @@ BattlegroundDS::BattlegroundDS()
BgObjects.resize(BG_DS_OBJECT_MAX);
BgCreatures.resize(BG_DS_NPC_MAX);
- _waterfallTimer = 0;
- _waterfallStatus = 0;
- _waterfallKnockbackTimer = 0;
_pipeKnockBackTimer = 0;
_pipeKnockBackCount = 0;
-
- StartDelayTimes[BG_STARTING_EVENT_FIRST] = BG_START_DELAY_1M;
- StartDelayTimes[BG_STARTING_EVENT_SECOND] = BG_START_DELAY_30S;
- StartDelayTimes[BG_STARTING_EVENT_THIRD] = BG_START_DELAY_15S;
- StartDelayTimes[BG_STARTING_EVENT_FOURTH] = BG_START_DELAY_NONE;
- StartMessageIds[BG_STARTING_EVENT_FIRST] = LANG_ARENA_ONE_MINUTE;
- StartMessageIds[BG_STARTING_EVENT_SECOND] = LANG_ARENA_THIRTY_SECONDS;
- StartMessageIds[BG_STARTING_EVENT_THIRD] = LANG_ARENA_FIFTEEN_SECONDS;
- StartMessageIds[BG_STARTING_EVENT_FOURTH] = LANG_ARENA_HAS_BEGUN;
-}
-
-BattlegroundDS::~BattlegroundDS()
-{
-
}
void BattlegroundDS::PostUpdateImpl(uint32 diff)
@@ -55,64 +36,58 @@ void BattlegroundDS::PostUpdateImpl(uint32 diff)
if (GetStatus() != STATUS_IN_PROGRESS)
return;
- if (getPipeKnockBackCount() < BG_DS_PIPE_KNOCKBACK_TOTAL_COUNT)
- {
- if (getPipeKnockBackTimer() < diff)
- {
- for (uint32 i = BG_DS_NPC_PIPE_KNOCKBACK_1; i <= BG_DS_NPC_PIPE_KNOCKBACK_2; ++i)
- if (Creature* waterSpout = GetBgMap()->GetCreature(BgCreatures[i]))
- waterSpout->CastSpell(waterSpout, BG_DS_SPELL_FLUSH, true);
-
- setPipeKnockBackCount(getPipeKnockBackCount() + 1);
- setPipeKnockBackTimer(BG_DS_PIPE_KNOCKBACK_DELAY);
- }
- else
- setPipeKnockBackTimer(getPipeKnockBackTimer() - diff);
- }
+ _events.Update(diff);
- if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_ON) // Repeat knockback while the waterfall still active
+ while (uint32 eventId = _events.ExecuteEvent())
{
- if (getWaterFallKnockbackTimer() < diff)
+ switch (eventId)
{
- if (Creature* waterSpout = GetBgMap()->GetCreature(BgCreatures[BG_DS_NPC_WATERFALL_KNOCKBACK]))
- waterSpout->CastSpell(waterSpout, BG_DS_SPELL_WATER_SPOUT, true);
-
- setWaterFallKnockbackTimer(BG_DS_WATERFALL_KNOCKBACK_TIMER);
+ case BG_DS_EVENT_WATERFALL_WARNING:
+ // Add the water
+ DoorClose(BG_DS_OBJECT_WATER_2);
+ _events.ScheduleEvent(BG_DS_EVENT_WATERFALL_ON, BG_DS_WATERFALL_WARNING_DURATION);
+ break;
+ case BG_DS_EVENT_WATERFALL_ON:
+ // Active collision and start knockback timer
+ DoorClose(BG_DS_OBJECT_WATER_1);
+ _events.ScheduleEvent(BG_DS_EVENT_WATERFALL_OFF, BG_DS_WATERFALL_DURATION);
+ _events.ScheduleEvent(BG_DS_EVENT_WATERFALL_KNOCKBACK, BG_DS_WATERFALL_KNOCKBACK_TIMER);
+ break;
+ case BG_DS_EVENT_WATERFALL_OFF:
+ // Remove collision and water
+ DoorOpen(BG_DS_OBJECT_WATER_1);
+ DoorOpen(BG_DS_OBJECT_WATER_2);
+ _events.CancelEvent(BG_DS_EVENT_WATERFALL_KNOCKBACK);
+ _events.ScheduleEvent(BG_DS_EVENT_WATERFALL_WARNING, urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX));
+ break;
+ case BG_DS_EVENT_WATERFALL_KNOCKBACK:
+ // Repeat knockback while the waterfall still active
+ if (Creature* waterSpout = GetBGCreature(BG_DS_NPC_WATERFALL_KNOCKBACK))
+ waterSpout->CastSpell(waterSpout, BG_DS_SPELL_WATER_SPOUT, true);
+ _events.ScheduleEvent(eventId, BG_DS_WATERFALL_KNOCKBACK_TIMER);
+ break;
+ case BG_DS_EVENT_PIPE_KNOCKBACK:
+ for (uint32 i = BG_DS_NPC_PIPE_KNOCKBACK_1; i <= BG_DS_NPC_PIPE_KNOCKBACK_2; ++i)
+ if (Creature* waterSpout = GetBGCreature(i))
+ waterSpout->CastSpell(waterSpout, BG_DS_SPELL_FLUSH, true);
+ break;
}
- else
- setWaterFallKnockbackTimer(getWaterFallKnockbackTimer() - diff);
}
- if (getWaterFallTimer() < diff)
+ if (_pipeKnockBackCount < BG_DS_PIPE_KNOCKBACK_TOTAL_COUNT)
{
- if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_OFF) // Add the water
- {
- DoorClose(BG_DS_OBJECT_WATER_2);
- setWaterFallTimer(BG_DS_WATERFALL_WARNING_DURATION);
- setWaterFallStatus(BG_DS_WATERFALL_STATUS_WARNING);
- }
- else if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_WARNING) // Active collision and start knockback timer
- {
- if (GameObject* gob = GetBgMap()->GetGameObject(BgObjects[BG_DS_OBJECT_WATER_1]))
- gob->SetGoState(GO_STATE_READY);
-
- setWaterFallTimer(BG_DS_WATERFALL_DURATION);
- setWaterFallStatus(BG_DS_WATERFALL_STATUS_ON);
- setWaterFallKnockbackTimer(BG_DS_WATERFALL_KNOCKBACK_TIMER);
- }
- else //if (getWaterFallStatus() == BG_DS_WATERFALL_STATUS_ON) // Remove collision and water
+ if (_pipeKnockBackTimer < diff)
{
- // turn off collision
- if (GameObject* gob = GetBgMap()->GetGameObject(BgObjects[BG_DS_OBJECT_WATER_1]))
- gob->SetGoState(GO_STATE_ACTIVE);
+ for (uint32 i = BG_DS_NPC_PIPE_KNOCKBACK_1; i <= BG_DS_NPC_PIPE_KNOCKBACK_2; ++i)
+ if (Creature* waterSpout = GetBGCreature(i))
+ waterSpout->CastSpell(waterSpout, BG_DS_SPELL_FLUSH, true);
- DoorOpen(BG_DS_OBJECT_WATER_2);
- setWaterFallTimer(urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX));
- setWaterFallStatus(BG_DS_WATERFALL_STATUS_OFF);
+ ++_pipeKnockBackCount;
+ _pipeKnockBackTimer = BG_DS_PIPE_KNOCKBACK_DELAY;
}
+ else
+ _pipeKnockBackTimer -= diff;
}
- else
- setWaterFallTimer(getWaterFallTimer() - diff);
}
void BattlegroundDS::StartingEventCloseDoors()
@@ -129,57 +104,22 @@ void BattlegroundDS::StartingEventOpenDoors()
for (uint32 i = BG_DS_OBJECT_BUFF_1; i <= BG_DS_OBJECT_BUFF_2; ++i)
SpawnBGObject(i, 60);
- setWaterFallTimer(urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX));
- setWaterFallStatus(BG_DS_WATERFALL_STATUS_OFF);
+ _events.ScheduleEvent(BG_DS_EVENT_WATERFALL_WARNING, urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX));
+ //for (uint8 i = 0; i < BG_DS_PIPE_KNOCKBACK_TOTAL_COUNT; ++i)
+ // _events.ScheduleEvent(BG_DS_EVENT_PIPE_KNOCKBACK, BG_DS_PIPE_KNOCKBACK_FIRST_DELAY + i * BG_DS_PIPE_KNOCKBACK_DELAY);
- setPipeKnockBackTimer(BG_DS_PIPE_KNOCKBACK_FIRST_DELAY);
- setPipeKnockBackCount(0);
+ _pipeKnockBackCount = 0;
+ _pipeKnockBackTimer = BG_DS_PIPE_KNOCKBACK_FIRST_DELAY;
SpawnBGObject(BG_DS_OBJECT_WATER_2, RESPAWN_IMMEDIATELY);
- DoorOpen(BG_DS_OBJECT_WATER_2);
- // Turn off collision
- if (GameObject* gob = GetBgMap()->GetGameObject(BgObjects[BG_DS_OBJECT_WATER_1]))
- gob->SetGoState(GO_STATE_ACTIVE);
+ DoorOpen(BG_DS_OBJECT_WATER_1); // Turn off collision
+ DoorOpen(BG_DS_OBJECT_WATER_2);
// Remove effects of Demonic Circle Summon
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
- if (Player* player = ObjectAccessor::FindPlayer(itr->first))
- if (player->HasAura(48018))
- player->RemoveAurasDueToSpell(48018);
-}
-
-void BattlegroundDS::AddPlayer(Player* player)
-{
- Battleground::AddPlayer(player);
- PlayerScores[player->GetGUID()] = new BattlegroundScore;
- UpdateArenaWorldState();
-}
-
-void BattlegroundDS::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/)
-{
- if (GetStatus() == STATUS_WAIT_LEAVE)
- return;
-
- UpdateArenaWorldState();
- CheckArenaWinConditions();
-}
-
-void BattlegroundDS::HandleKillPlayer(Player* player, Player* killer)
-{
- if (GetStatus() != STATUS_IN_PROGRESS)
- return;
-
- if (!killer)
- {
- TC_LOG_ERROR("bg.battleground", "BattlegroundDS: Killer player not found");
- return;
- }
-
- Battleground::HandleKillPlayer(player, killer);
-
- UpdateArenaWorldState();
- CheckArenaWinConditions();
+ if (Player* player = _GetPlayer(itr, "BattlegroundDS::StartingEventOpenDoors"))
+ player->RemoveAurasDueToSpell(SPELL_WARL_DEMONIC_CIRCLE);
}
void BattlegroundDS::HandleAreaTrigger(Player* player, uint32 trigger)
@@ -192,13 +132,12 @@ void BattlegroundDS::HandleAreaTrigger(Player* player, uint32 trigger)
case 5347:
case 5348:
// Remove effects of Demonic Circle Summon
- if (player->HasAura(48018))
- player->RemoveAurasDueToSpell(48018);
+ player->RemoveAurasDueToSpell(SPELL_WARL_DEMONIC_CIRCLE);
// Someone has get back into the pipes and the knockback has already been performed,
// so we reset the knockback count for kicking the player again into the arena.
- if (getPipeKnockBackCount() >= BG_DS_PIPE_KNOCKBACK_TOTAL_COUNT)
- setPipeKnockBackCount(0);
+ if (_pipeKnockBackCount >= BG_DS_PIPE_KNOCKBACK_TOTAL_COUNT)
+ _pipeKnockBackCount = 0;
break;
default:
Battleground::HandleAreaTrigger(player, trigger);
@@ -206,16 +145,10 @@ void BattlegroundDS::HandleAreaTrigger(Player* player, uint32 trigger)
}
}
-void BattlegroundDS::FillInitialWorldStates(WorldPacket &data)
-{
- data << uint32(3610) << uint32(1); // 9 show
- UpdateArenaWorldState();
-}
-
-void BattlegroundDS::Reset()
+void BattlegroundDS::FillInitialWorldStates(WorldPacket& data)
{
- //call parent's class reset
- Battleground::Reset();
+ data << uint32(3610) << uint32(1); // 9 show
+ Arena::FillInitialWorldStates(data);
}
bool BattlegroundDS::SetupBattleground()
@@ -223,16 +156,16 @@ bool BattlegroundDS::SetupBattleground()
// gates
if (!AddObject(BG_DS_OBJECT_DOOR_1, BG_DS_OBJECT_TYPE_DOOR_1, 1350.95f, 817.2f, 20.8096f, 3.15f, 0, 0, 0.99627f, 0.0862864f, RESPAWN_IMMEDIATELY)
|| !AddObject(BG_DS_OBJECT_DOOR_2, BG_DS_OBJECT_TYPE_DOOR_2, 1232.65f, 764.913f, 20.0729f, 6.3f, 0, 0, 0.0310211f, -0.999519f, RESPAWN_IMMEDIATELY)
- // water
+ // water
|| !AddObject(BG_DS_OBJECT_WATER_1, BG_DS_OBJECT_TYPE_WATER_1, 1291.56f, 790.837f, 7.1f, 3.14238f, 0, 0, 0.694215f, -0.719768f, 120)
|| !AddObject(BG_DS_OBJECT_WATER_2, BG_DS_OBJECT_TYPE_WATER_2, 1291.56f, 790.837f, 7.1f, 3.14238f, 0, 0, 0.694215f, -0.719768f, 120)
- // buffs
+ // buffs
|| !AddObject(BG_DS_OBJECT_BUFF_1, BG_DS_OBJECT_TYPE_BUFF_1, 1291.7f, 813.424f, 7.11472f, 4.64562f, 0, 0, 0.730314f, -0.683111f, 120)
|| !AddObject(BG_DS_OBJECT_BUFF_2, BG_DS_OBJECT_TYPE_BUFF_2, 1291.7f, 768.911f, 7.11472f, 1.55194f, 0, 0, 0.700409f, 0.713742f, 120)
- // knockback creatures
- || !AddCreature(BG_DS_NPC_TYPE_WATER_SPOUT, BG_DS_NPC_WATERFALL_KNOCKBACK, 0, 1292.587f, 790.2205f, 7.19796f, 3.054326f, RESPAWN_IMMEDIATELY)
- || !AddCreature(BG_DS_NPC_TYPE_WATER_SPOUT, BG_DS_NPC_PIPE_KNOCKBACK_1, 0, 1369.977f, 817.2882f, 16.08718f, 3.106686f, RESPAWN_IMMEDIATELY)
- || !AddCreature(BG_DS_NPC_TYPE_WATER_SPOUT, BG_DS_NPC_PIPE_KNOCKBACK_2, 0, 1212.833f, 765.3871f, 16.09484f, 0.0f, RESPAWN_IMMEDIATELY))
+ // knockback creatures
+ || !AddCreature(BG_DS_NPC_TYPE_WATER_SPOUT, BG_DS_NPC_WATERFALL_KNOCKBACK, 1292.587f, 790.2205f, 7.19796f, 3.054326f, TEAM_NEUTRAL, RESPAWN_IMMEDIATELY)
+ || !AddCreature(BG_DS_NPC_TYPE_WATER_SPOUT, BG_DS_NPC_PIPE_KNOCKBACK_1, 1369.977f, 817.2882f, 16.08718f, 3.106686f, TEAM_NEUTRAL, RESPAWN_IMMEDIATELY)
+ || !AddCreature(BG_DS_NPC_TYPE_WATER_SPOUT, BG_DS_NPC_PIPE_KNOCKBACK_2, 1212.833f, 765.3871f, 16.09484f, 0.0f, TEAM_NEUTRAL, RESPAWN_IMMEDIATELY))
{
TC_LOG_ERROR("sql.sql", "BatteGroundDS: Failed to spawn some object!");
return false;
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundDS.h b/src/server/game/Battlegrounds/Zones/BattlegroundDS.h
index cb71300dc5d..7b91996ed0e 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundDS.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundDS.h
@@ -19,7 +19,7 @@
#ifndef __BATTLEGROUNDDS_H
#define __BATTLEGROUNDDS_H
-#include "Battleground.h"
+#include "Arena.h"
enum BattlegroundDSObjectTypes
{
@@ -32,7 +32,7 @@ enum BattlegroundDSObjectTypes
BG_DS_OBJECT_MAX = 6
};
-enum BattlegroundDSObjects
+enum BattlegroundDSGameObjects
{
BG_DS_OBJECT_TYPE_DOOR_1 = 192642,
BG_DS_OBJECT_TYPE_DOOR_2 = 192643,
@@ -59,61 +59,54 @@ enum BattlegroundDSSpells
{
BG_DS_SPELL_FLUSH = 57405, // Visual and target selector for the starting knockback from the pipe
BG_DS_SPELL_FLUSH_KNOCKBACK = 61698, // Knockback effect for previous spell (triggered, not needed to be cast)
- BG_DS_SPELL_WATER_SPOUT = 58873 // Knockback effect of the central waterfall
+ BG_DS_SPELL_WATER_SPOUT = 58873, // Knockback effect of the central waterfall
+
+ SPELL_WARL_DEMONIC_CIRCLE = 48018 // Demonic Circle Summon
};
enum BattlegroundDSData
-{ // These values are NOT blizzlike... need the correct data!
- BG_DS_WATERFALL_TIMER_MIN = 30000,
- BG_DS_WATERFALL_TIMER_MAX = 60000,
- BG_DS_WATERFALL_WARNING_DURATION = 5000,
- BG_DS_WATERFALL_DURATION = 30000,
- BG_DS_WATERFALL_KNOCKBACK_TIMER = 1500,
-
- BG_DS_PIPE_KNOCKBACK_FIRST_DELAY = 5000,
- BG_DS_PIPE_KNOCKBACK_DELAY = 3000,
- BG_DS_PIPE_KNOCKBACK_TOTAL_COUNT = 2,
-
- BG_DS_WATERFALL_STATUS_WARNING = 1, // Water starting to fall, but no LoS Blocking nor movement blocking
- BG_DS_WATERFALL_STATUS_ON = 2, // LoS and Movement blocking active
- BG_DS_WATERFALL_STATUS_OFF = 3
+{
+ // These values are NOT blizzlike... need the correct data!
+ BG_DS_WATERFALL_TIMER_MIN = 30000,
+ BG_DS_WATERFALL_TIMER_MAX = 60000,
+ BG_DS_WATERFALL_WARNING_DURATION = 5000,
+ BG_DS_WATERFALL_DURATION = 30000,
+ BG_DS_WATERFALL_KNOCKBACK_TIMER = 1500,
+
+ BG_DS_PIPE_KNOCKBACK_FIRST_DELAY = 5000,
+ BG_DS_PIPE_KNOCKBACK_DELAY = 3000,
+ BG_DS_PIPE_KNOCKBACK_TOTAL_COUNT = 2,
+};
+
+enum BattlegroundDSEvents
+{
+ BG_DS_EVENT_WATERFALL_WARNING = 1, // Water starting to fall, but no LoS Blocking nor movement blocking
+ BG_DS_EVENT_WATERFALL_ON = 2, // LoS and Movement blocking active
+ BG_DS_EVENT_WATERFALL_OFF = 3,
+ BG_DS_EVENT_WATERFALL_KNOCKBACK = 4,
+
+ BG_DS_EVENT_PIPE_KNOCKBACK = 5
};
-class BattlegroundDS : public Battleground
+class BattlegroundDS : public Arena
{
public:
BattlegroundDS();
- ~BattlegroundDS();
/* inherited from BattlegroundClass */
- void AddPlayer(Player* player);
- void StartingEventCloseDoors();
- void StartingEventOpenDoors();
-
- void RemovePlayer(Player* player, uint64 guid, uint32 team);
- void HandleAreaTrigger(Player* Source, uint32 Trigger);
- bool SetupBattleground();
- void Reset();
- void FillInitialWorldStates(WorldPacket &d);
- void HandleKillPlayer(Player* player, Player* killer);
+ void StartingEventCloseDoors() override;
+ void StartingEventOpenDoors() override;
+
+ void HandleAreaTrigger(Player* Source, uint32 Trigger) override;
+ bool SetupBattleground() override;
+ void FillInitialWorldStates(WorldPacket &d) override;
+
private:
- uint32 _waterfallTimer;
- uint8 _waterfallStatus;
- uint32 _waterfallKnockbackTimer;
+ void PostUpdateImpl(uint32 diff) override;
+
+ EventMap _events;
+
uint32 _pipeKnockBackTimer;
uint8 _pipeKnockBackCount;
-
- void PostUpdateImpl(uint32 diff);
- protected:
- uint32 getWaterFallStatus() { return _waterfallStatus; }
- void setWaterFallStatus(uint8 status) { _waterfallStatus = status; }
- uint32 getWaterFallTimer() { return _waterfallTimer; }
- void setWaterFallTimer(uint32 timer) { _waterfallTimer = timer; }
- uint32 getWaterFallKnockbackTimer() { return _waterfallKnockbackTimer; }
- void setWaterFallKnockbackTimer(uint32 timer) { _waterfallKnockbackTimer = timer; }
- uint8 getPipeKnockBackCount() { return _pipeKnockBackCount; }
- void setPipeKnockBackCount(uint8 count) { _pipeKnockBackCount = count; }
- uint32 getPipeKnockBackTimer() { return _pipeKnockBackTimer; }
- void setPipeKnockBackTimer(uint32 timer) { _pipeKnockBackTimer = timer; }
};
#endif
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
index bc684aed176..ca96140f5da 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
@@ -23,7 +23,6 @@
#include "BattlegroundMgr.h"
#include "Creature.h"
#include "Language.h"
-#include "Object.h"
#include "Player.h"
#include "Util.h"
@@ -364,12 +363,9 @@ void BattlegroundEY::UpdatePointsIcons(uint32 Team, uint32 Point)
void BattlegroundEY::AddPlayer(Player* player)
{
Battleground::AddPlayer(player);
- //create score and add it to map
- BattlegroundEYScore* sc = new BattlegroundEYScore;
+ PlayerScores[player->GetGUIDLow()] = new BattlegroundEYScore(player->GetGUID());
m_PlayersNearPoint[EY_POINTS_MAX].push_back(player->GetGUID());
-
- PlayerScores[player->GetGUID()] = sc;
}
void BattlegroundEY::RemovePlayer(Player* player, uint64 guid, uint32 /*team*/)
@@ -523,14 +519,14 @@ bool BattlegroundEY::SetupBattleground()
WorldSafeLocsEntry const* sg = NULL;
sg = sWorldSafeLocsStore.LookupEntry(EY_GRAVEYARD_MAIN_ALLIANCE);
- if (!sg || !AddSpiritGuide(EY_SPIRIT_MAIN_ALLIANCE, sg->x, sg->y, sg->z, 3.124139f, ALLIANCE))
+ if (!sg || !AddSpiritGuide(EY_SPIRIT_MAIN_ALLIANCE, sg->x, sg->y, sg->z, 3.124139f, TEAM_ALLIANCE))
{
TC_LOG_ERROR("sql.sql", "BatteGroundEY: Failed to spawn spirit guide! Battleground not created!");
return false;
}
sg = sWorldSafeLocsStore.LookupEntry(EY_GRAVEYARD_MAIN_HORDE);
- if (!sg || !AddSpiritGuide(EY_SPIRIT_MAIN_HORDE, sg->x, sg->y, sg->z, 3.193953f, HORDE))
+ if (!sg || !AddSpiritGuide(EY_SPIRIT_MAIN_HORDE, sg->x, sg->y, sg->z, 3.193953f, TEAM_HORDE))
{
TC_LOG_ERROR("sql.sql", "BatteGroundEY: Failed to spawn spirit guide! Battleground not created!");
return false;
@@ -768,7 +764,7 @@ void BattlegroundEY::EventTeamCapturedPoint(Player* player, uint32 Point)
WorldSafeLocsEntry const* sg = NULL;
sg = sWorldSafeLocsStore.LookupEntry(m_CapturingPointTypes[Point].GraveYardId);
- if (!sg || !AddSpiritGuide(Point, sg->x, sg->y, sg->z, 3.124139f, Team))
+ if (!sg || !AddSpiritGuide(Point, sg->x, sg->y, sg->z, 3.124139f, GetTeamIndexByTeamId(Team)))
TC_LOG_ERROR("bg.battleground", "BatteGroundEY: Failed to spawn spirit guide! point: %u, team: %u, graveyard_id: %u",
Point, Team, m_CapturingPointTypes[Point].GraveYardId);
@@ -782,7 +778,7 @@ void BattlegroundEY::EventTeamCapturedPoint(Player* player, uint32 Point)
Creature* trigger = GetBGCreature(Point + 6, false);//0-5 spirit guides
if (!trigger)
- trigger = AddCreature(WORLD_TRIGGER, Point+6, Team, BG_EY_TriggerPositions[Point][0], BG_EY_TriggerPositions[Point][1], BG_EY_TriggerPositions[Point][2], BG_EY_TriggerPositions[Point][3]);
+ trigger = AddCreature(WORLD_TRIGGER, Point+6, BG_EY_TriggerPositions[Point], GetTeamIndexByTeamId(Team));
//add bonus honor aura trigger creature when node is accupied
//cast bonus aura (+50% honor in 25yards)
@@ -833,22 +829,20 @@ void BattlegroundEY::EventPlayerCapturedFlag(Player* player, uint32 BgObjectType
UpdatePlayerScore(player, SCORE_FLAG_CAPTURES, 1);
}
-void BattlegroundEY::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor)
+bool BattlegroundEY::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor)
{
- BattlegroundScoreMap::iterator itr = PlayerScores.find(player->GetGUID());
- if (itr == PlayerScores.end()) // player not found
- return;
+ if (!Battleground::UpdatePlayerScore(player, type, value, doAddHonor))
+ return false;
switch (type)
{
- case SCORE_FLAG_CAPTURES: // flags captured
- ((BattlegroundEYScore*)itr->second)->FlagCaptures += value;
+ case SCORE_FLAG_CAPTURES:
player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, EY_OBJECTIVE_CAPTURE_FLAG);
break;
default:
- Battleground::UpdatePlayerScore(player, type, value, doAddHonor);
break;
}
+ return true;
}
void BattlegroundEY::FillInitialWorldStates(WorldPacket& data)
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h
index baa75129c1e..4a146a17917 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h
@@ -19,8 +19,10 @@
#ifndef __BATTLEGROUNDEY_H
#define __BATTLEGROUNDEY_H
-#include "Language.h"
#include "Battleground.h"
+#include "BattlegroundScore.h"
+#include "Language.h"
+#include "Object.h"
enum BG_EY_Misc
{
@@ -255,8 +257,7 @@ struct BattlegroundEYPointIconsStruct
uint32 WorldStateHordeControlledIndex;
};
-// x, y, z, o
-const float BG_EY_TriggerPositions[EY_POINTS_MAX][4] =
+Position const BG_EY_TriggerPositions[EY_POINTS_MAX] =
{
{2044.28f, 1729.68f, 1189.96f, 0.017453f}, // FEL_REAVER center
{2048.83f, 1393.65f, 1194.49f, 0.20944f}, // BLOOD_ELF center
@@ -322,11 +323,33 @@ const BattlegroundEYCapturingPointStruct m_CapturingPointTypes[EY_POINTS_MAX] =
BattlegroundEYCapturingPointStruct(BG_EY_OBJECT_N_BANNER_MAGE_TOWER_CENTER, BG_EY_OBJECT_A_BANNER_MAGE_TOWER_CENTER, LANG_BG_EY_HAS_TAKEN_A_M_TOWER, BG_EY_OBJECT_H_BANNER_MAGE_TOWER_CENTER, LANG_BG_EY_HAS_TAKEN_H_M_TOWER, EY_GRAVEYARD_MAGE_TOWER)
};
-struct BattlegroundEYScore : public BattlegroundScore
+struct BattlegroundEYScore final : public BattlegroundScore
{
- BattlegroundEYScore() : FlagCaptures(0) { }
- ~BattlegroundEYScore() { }
- uint32 FlagCaptures;
+ friend class BattlegroundEY;
+
+ protected:
+ BattlegroundEYScore(uint64 playerGuid) : BattlegroundScore(playerGuid), FlagCaptures(0) { }
+
+ void UpdateScore(uint32 type, uint32 value) override
+ {
+ switch (type)
+ {
+ case SCORE_FLAG_CAPTURES: // Flags captured
+ FlagCaptures += value;
+ break;
+ default:
+ BattlegroundScore::UpdateScore(type, value);
+ break;
+ }
+ }
+
+ void BuildObjectivesBlock(WorldPacket& data) final override
+ {
+ data << uint32(1); // Objectives Count
+ data << uint32(FlagCaptures);
+ }
+
+ uint32 FlagCaptures;
};
class BattlegroundEY : public Battleground
@@ -336,42 +359,42 @@ class BattlegroundEY : public Battleground
~BattlegroundEY();
/* inherited from BattlegroundClass */
- void AddPlayer(Player* player);
- void StartingEventCloseDoors();
- void StartingEventOpenDoors();
+ void AddPlayer(Player* player) override;
+ void StartingEventCloseDoors() override;
+ void StartingEventOpenDoors() override;
/* BG Flags */
- uint64 GetFlagPickerGUID(int32 /*team*/ = -1) const { return m_FlagKeeper; }
+ uint64 GetFlagPickerGUID(int32 /*team*/ = -1) const override { return m_FlagKeeper; }
void SetFlagPicker(uint64 guid) { m_FlagKeeper = guid; }
bool IsFlagPickedup() const { return m_FlagKeeper != 0; }
uint8 GetFlagState() const { return m_FlagState; }
void RespawnFlag(bool send_message);
void RespawnFlagAfterDrop();
- void RemovePlayer(Player* player, uint64 guid, uint32 team);
+ void RemovePlayer(Player* player, uint64 guid, uint32 team) override;
void HandleBuffUse(uint64 buff_guid);
- void HandleAreaTrigger(Player* Source, uint32 Trigger);
- void HandleKillPlayer(Player* player, Player* killer);
- WorldSafeLocsEntry const* GetClosestGraveYard(Player* player);
- bool SetupBattleground();
- void Reset();
+ void HandleAreaTrigger(Player* Source, uint32 Trigger) override;
+ void HandleKillPlayer(Player* player, Player* killer) override;
+ WorldSafeLocsEntry const* GetClosestGraveYard(Player* player) override;
+ bool SetupBattleground() override;
+ void Reset() override;
void UpdateTeamScore(uint32 Team);
- void EndBattleground(uint32 winner);
- void UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor = true);
- void FillInitialWorldStates(WorldPacket& data);
- void SetDroppedFlagGUID(uint64 guid, int32 /*TeamID*/ = -1) { m_DroppedFlagGUID = guid;}
+ void EndBattleground(uint32 winner) override;
+ bool UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true) override;
+ void FillInitialWorldStates(WorldPacket& data) override;
+ void SetDroppedFlagGUID(uint64 guid, int32 /*TeamID*/ = -1) override { m_DroppedFlagGUID = guid;}
uint64 GetDroppedFlagGUID() const { return m_DroppedFlagGUID;}
/* Battleground Events */
- void EventPlayerClickedOnFlag(Player* Source, GameObject* target_obj);
- void EventPlayerDroppedFlag(Player* Source);
+ void EventPlayerClickedOnFlag(Player* Source, GameObject* target_obj) override;
+ void EventPlayerDroppedFlag(Player* Source) override;
/* achievement req. */
- bool IsAllNodesControlledByTeam(uint32 team) const;
+ bool IsAllNodesControlledByTeam(uint32 team) const override;
- uint32 GetPrematureWinner();
+ uint32 GetPrematureWinner() override;
private:
- void PostUpdateImpl(uint32 diff);
+ void PostUpdateImpl(uint32 diff) override;
void EventPlayerCapturedFlag(Player* Source, uint32 BgObjectType);
void EventTeamCapturedPoint(Player* Source, uint32 Point);
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
index fc3f839ae76..41a37a8962f 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
@@ -80,12 +80,11 @@ void BattlegroundIC::DoAction(uint32 action, uint64 var)
if (!player)
return;
- player->SetTransport(player->GetTeamId() == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde);
+ (player->GetTeamId() == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->AddPassenger(player);
player->m_movementInfo.transport.pos.m_positionX = TransportMovementInfo.GetPositionX();
player->m_movementInfo.transport.pos.m_positionY = TransportMovementInfo.GetPositionY();
player->m_movementInfo.transport.pos.m_positionZ = TransportMovementInfo.GetPositionZ();
- player->m_movementInfo.transport.guid = (player->GetTeamId() == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->GetGUID();
if (player->TeleportTo(GetMapId(), TeleportToTransportPosition.GetPositionX(),
TeleportToTransportPosition.GetPositionY(),
@@ -111,8 +110,8 @@ void BattlegroundIC::PostUpdateImpl(uint32 diff)
GetBGObject(BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01)->RemoveFromWorld();
GetBGObject(BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01)->RemoveFromWorld();
- GetBGObject(BG_IC_GO_ALLIANCE_GATE_3)->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); // Alliance door
- GetBGObject(BG_IC_GO_HORDE_GATE_1)->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); // Horde door
+ GetBGObject(BG_IC_GO_ALLIANCE_GATE_3)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED); // Alliance door
+ GetBGObject(BG_IC_GO_HORDE_GATE_1)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED); // Horde door
doorsClosed = true;
} else closeFortressDoorsTimer -= diff;
@@ -242,10 +241,10 @@ void BattlegroundIC::PostUpdateImpl(uint32 diff)
void BattlegroundIC::StartingEventCloseDoors()
{
// Show Full Gate Displays
- GetBGObject(BG_IC_GO_ALLIANCE_GATE_1)->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); // Alliance door
- GetBGObject(BG_IC_GO_ALLIANCE_GATE_2)->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); // Alliance door
- GetBGObject(BG_IC_GO_HORDE_GATE_2)->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); // Horde door
- GetBGObject(BG_IC_GO_HORDE_GATE_3)->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); // Horde door
+ GetBGObject(BG_IC_GO_ALLIANCE_GATE_1)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
+ GetBGObject(BG_IC_GO_ALLIANCE_GATE_2)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
+ GetBGObject(BG_IC_GO_HORDE_GATE_2)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
+ GetBGObject(BG_IC_GO_HORDE_GATE_3)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
}
void BattlegroundIC::StartingEventOpenDoors()
@@ -274,7 +273,7 @@ void BattlegroundIC::StartingEventOpenDoors()
void BattlegroundIC::AddPlayer(Player* player)
{
Battleground::AddPlayer(player);
- PlayerScores[player->GetGUID()] = new BattlegroundICScore;
+ PlayerScores[player->GetGUIDLow()] = new BattlegroundICScore(player->GetGUID());
if (nodePoint[NODE_TYPE_QUARRY].nodeState == (player->GetTeamId() == TEAM_ALLIANCE ? NODE_STATE_CONTROLLED_A : NODE_STATE_CONTROLLED_H))
player->CastSpell(player, SPELL_QUARRY, true);
@@ -315,27 +314,6 @@ void BattlegroundIC::HandleAreaTrigger(Player* player, uint32 trigger)
}
}
-void BattlegroundIC::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor)
-{
- std::map<uint64, BattlegroundScore*>::iterator itr = PlayerScores.find(player->GetGUID());
-
- if (itr == PlayerScores.end()) // player not found...
- return;
-
- switch (type)
- {
- case SCORE_BASES_ASSAULTED:
- ((BattlegroundICScore*)itr->second)->BasesAssaulted += value;
- break;
- case SCORE_BASES_DEFENDED:
- ((BattlegroundICScore*)itr->second)->BasesDefended += value;
- break;
- default:
- Battleground::UpdatePlayerScore(player, type, value, doAddHonor);
- break;
- }
-}
-
void BattlegroundIC::FillInitialWorldStates(WorldPacket& data)
{
data << uint32(BG_IC_ALLIANCE_RENFORT_SET) << uint32(1);
@@ -369,20 +347,20 @@ bool BattlegroundIC::SetupBattleground()
for (uint8 i = 2; i < MAX_NORMAL_NPCS_SPAWNS; ++i)
{
- if (!AddCreature(BG_IC_NpcSpawnlocs[i].entry, BG_IC_NpcSpawnlocs[i].type, BG_IC_NpcSpawnlocs[i].team,
+ if (!AddCreature(BG_IC_NpcSpawnlocs[i].entry, BG_IC_NpcSpawnlocs[i].type,
BG_IC_NpcSpawnlocs[i].x, BG_IC_NpcSpawnlocs[i].y,
BG_IC_NpcSpawnlocs[i].z, BG_IC_NpcSpawnlocs[i].o,
- RESPAWN_ONE_DAY))
+ BG_IC_NpcSpawnlocs[i].team, RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning creature %u", BG_IC_NpcSpawnlocs[i].entry);
return false;
}
}
- if (!AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+5, BG_IC_SpiritGuidePos[5][0], BG_IC_SpiritGuidePos[5][1], BG_IC_SpiritGuidePos[5][2], BG_IC_SpiritGuidePos[5][3], ALLIANCE)
- || !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+6, BG_IC_SpiritGuidePos[6][0], BG_IC_SpiritGuidePos[6][1], BG_IC_SpiritGuidePos[6][2], BG_IC_SpiritGuidePos[6][3], HORDE)
- || !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+3, BG_IC_SpiritGuidePos[7][0], BG_IC_SpiritGuidePos[7][1], BG_IC_SpiritGuidePos[7][2], BG_IC_SpiritGuidePos[7][3], ALLIANCE)
- || !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+4, BG_IC_SpiritGuidePos[8][0], BG_IC_SpiritGuidePos[8][1], BG_IC_SpiritGuidePos[8][2], BG_IC_SpiritGuidePos[8][3], HORDE))
+ if (!AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+5, BG_IC_SpiritGuidePos[5], TEAM_ALLIANCE)
+ || !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+6, BG_IC_SpiritGuidePos[6], TEAM_HORDE)
+ || !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+3, BG_IC_SpiritGuidePos[7], TEAM_ALLIANCE)
+ || !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+4, BG_IC_SpiritGuidePos[8], TEAM_HORDE))
{
TC_LOG_ERROR("bg.battleground", "Isle of Conquest: Failed to spawn initial spirit guide!");
return false;
@@ -522,7 +500,7 @@ void BattlegroundIC::EventPlayerClickedOnFlag(Player* player, GameObject* target
if (!AddObject(nodePoint[i].gameobject_type, nodePoint[i].gameobject_entry, cords[0], cords[1], cords[2], cords[3], 0, 0, 0, 0, RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning a banner (type: %u, entry: %u). Isle of Conquest BG cancelled.", nodePoint[i].gameobject_type, nodePoint[i].gameobject_entry);
- Battleground::EndBattleground(WINNER_NONE);
+ EndBattleground(0);
}
GetBGObject(nodePoint[i].gameobject_type)->SetUInt32Value(GAMEOBJECT_FACTION, nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_Factions[1] : BG_IC_Factions[0]);
@@ -607,10 +585,7 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture)
{
if (nodePoint->nodeType != NODE_TYPE_REFINERY && nodePoint->nodeType != NODE_TYPE_QUARRY)
{
- if (!AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+nodePoint->nodeType-2,
- BG_IC_SpiritGuidePos[nodePoint->nodeType][0], BG_IC_SpiritGuidePos[nodePoint->nodeType][1],
- BG_IC_SpiritGuidePos[nodePoint->nodeType][2], BG_IC_SpiritGuidePos[nodePoint->nodeType][3],
- (nodePoint->faction == TEAM_ALLIANCE ? ALLIANCE : HORDE)))
+ if (!AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+nodePoint->nodeType-2, BG_IC_SpiritGuidePos[nodePoint->nodeType], nodePoint->faction))
TC_LOG_ERROR("bg.battleground", "Isle of Conquest: Failed to spawn spirit guide! point: %u, team: %u, ", nodePoint->nodeType, nodePoint->faction);
}
@@ -625,9 +600,7 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture)
{
uint8 type = BG_IC_GO_HANGAR_TELEPORTER_1+u;
if (!AddObject(type, (nodePoint->faction == TEAM_ALLIANCE ? GO_ALLIANCE_GUNSHIP_PORTAL : GO_HORDE_GUNSHIP_PORTAL),
- BG_IC_HangarTeleporters[u].GetPositionX(), BG_IC_HangarTeleporters[u].GetPositionY(),
- BG_IC_HangarTeleporters[u].GetPositionZ(), BG_IC_HangarTeleporters[u].GetOrientation(),
- 0, 0, 0, 0, RESPAWN_ONE_DAY))
+ BG_IC_HangarTeleporters[u], 0, 0, 0, 0, RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning a gunship portal. Type: %u", BG_IC_GO_HANGAR_TELEPORTER_1+u);
}
@@ -688,11 +661,9 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture)
if (GetBGCreature(type, false) && GetBGCreature(type)->IsAlive())
continue;
- if (AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_GLAIVE_THROWER_A : NPC_GLAIVE_THROWER_H, type, nodePoint->faction,
- BG_IC_DocksVehiclesGlaives[i].GetPositionX(), BG_IC_DocksVehiclesGlaives[i].GetPositionY(),
- BG_IC_DocksVehiclesGlaives[i].GetPositionZ(), BG_IC_DocksVehiclesGlaives[i].GetOrientation(),
- RESPAWN_ONE_DAY))
- GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
+ if (AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_GLAIVE_THROWER_A : NPC_GLAIVE_THROWER_H, type,
+ BG_IC_DocksVehiclesGlaives[i], nodePoint->faction, RESPAWN_ONE_DAY))
+ GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
}
// spawning catapults
@@ -703,11 +674,8 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture)
if (GetBGCreature(type, false) && GetBGCreature(type)->IsAlive())
continue;
- if (AddCreature(NPC_CATAPULT, type, nodePoint->faction,
- BG_IC_DocksVehiclesCatapults[i].GetPositionX(), BG_IC_DocksVehiclesCatapults[i].GetPositionY(),
- BG_IC_DocksVehiclesCatapults[i].GetPositionZ(), BG_IC_DocksVehiclesCatapults[i].GetOrientation(),
- RESPAWN_ONE_DAY))
- GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
+ if (AddCreature(NPC_CATAPULT, type, BG_IC_DocksVehiclesCatapults[i], nodePoint->faction, RESPAWN_ONE_DAY))
+ GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
}
break;
case BG_IC_GO_WORKSHOP_BANNER:
@@ -738,10 +706,7 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture)
if (GetBGCreature(type, false) && GetBGCreature(type)->IsAlive())
continue;
- if (AddCreature(NPC_DEMOLISHER, type, nodePoint->faction,
- BG_IC_WorkshopVehicles[i].GetPositionX(), BG_IC_WorkshopVehicles[i].GetPositionY(),
- BG_IC_WorkshopVehicles[i].GetPositionZ(), BG_IC_WorkshopVehicles[i].GetOrientation(),
- RESPAWN_ONE_DAY))
+ if (AddCreature(NPC_DEMOLISHER, type, BG_IC_WorkshopVehicles[i], nodePoint->faction, RESPAWN_ONE_DAY))
GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
}
@@ -761,10 +726,8 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture)
uint8 siegeType = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_SIEGE_ENGINE_A : BG_IC_NPC_SIEGE_ENGINE_H);
if (!GetBGCreature(siegeType, false) || !GetBGCreature(siegeType)->IsAlive())
{
- AddCreature((nodePoint->faction == TEAM_ALLIANCE ? NPC_SIEGE_ENGINE_A : NPC_SIEGE_ENGINE_H), siegeType, nodePoint->faction,
- BG_IC_WorkshopVehicles[4].GetPositionX(), BG_IC_WorkshopVehicles[4].GetPositionY(),
- BG_IC_WorkshopVehicles[4].GetPositionZ(), BG_IC_WorkshopVehicles[4].GetOrientation(),
- RESPAWN_ONE_DAY);
+ AddCreature((nodePoint->faction == TEAM_ALLIANCE ? NPC_SIEGE_ENGINE_A : NPC_SIEGE_ENGINE_H), siegeType,
+ BG_IC_WorkshopVehicles[4], nodePoint->faction, RESPAWN_ONE_DAY);
if (Creature* siegeEngine = GetBGCreature(siegeType))
{
@@ -784,7 +747,7 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture)
if (GameObject* seaforiumBombs = GetBGObject(BG_IC_GO_SEAFORIUM_BOMBS_1+i))
{
seaforiumBombs->SetRespawnTime(10);
- seaforiumBombs->SetUInt32Value(GAMEOBJECT_FACTION, BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
+ seaforiumBombs->SetFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
}
}
break;
@@ -830,20 +793,18 @@ void BattlegroundIC::DestroyGate(Player* player, GameObject* go)
if (go->GetEntry() == GO_HORDE_GATE_1 || go->GetEntry() == GO_HORDE_GATE_2 || go->GetEntry() == GO_HORDE_GATE_3)
{
- if (!GetBgMap()->GetCreature(BgCreatures[BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].type]) && !AddCreature(BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].entry, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].type, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].team, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].x, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].y, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].z, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].o, RESPAWN_ONE_DAY))
+ if (!GetBgMap()->GetCreature(BgCreatures[BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].type]) && !AddCreature(BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].entry, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].type, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].x, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].y, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].z, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].o, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].team, RESPAWN_ONE_DAY))
TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning creature %u", BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].entry);
}
else if (go->GetEntry() == GO_ALLIANCE_GATE_1 || go->GetEntry() == GO_ALLIANCE_GATE_2 || go->GetEntry() == GO_ALLIANCE_GATE_3)
{
- if (!GetBgMap()->GetCreature(BgCreatures[BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].type]) && !AddCreature(BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].entry, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].type, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].team, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].x, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].y, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].z, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].o, RESPAWN_ONE_DAY))
+ if (!GetBgMap()->GetCreature(BgCreatures[BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].type]) && !AddCreature(BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].entry, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].type, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].x, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].y, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].z, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].o, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].team, RESPAWN_ONE_DAY))
TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning creature %u", BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].entry);
}
SendMessage2ToAll(lang_entry, CHAT_MSG_BG_SYSTEM_NEUTRAL, NULL, (player->GetTeamId() == TEAM_ALLIANCE ? LANG_BG_IC_HORDE_KEEP : LANG_BG_IC_ALLIANCE_KEEP));
}
-void BattlegroundIC::EventPlayerDamagedGO(Player* /*player*/, GameObject* /*go*/, uint32 /*eventType*/) { }
-
WorldSafeLocsEntry const* BattlegroundIC::GetClosestGraveYard(Player* player)
{
TeamId teamIndex = GetTeamIndexByTeamId(player->GetTeam());
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h
index 5238342ffcb..5a9b47ec9b5 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h
@@ -20,6 +20,7 @@
#define __BATTLEGROUNDIC_H
#include "Battleground.h"
+#include "BattlegroundScore.h"
#include "Language.h"
#include "Object.h"
@@ -204,7 +205,7 @@ struct ICNpc
{
uint32 type;
uint32 entry;
- uint32 team;
+ TeamId team;
float x;
float y;
float z;
@@ -783,7 +784,7 @@ const uint32 BG_IC_GraveyardIds[MAX_NODE_TYPES+2] = {0, 0, 1480, 1481, 1482, 148
const Position TransportMovementInfo = {7.305609f, -0.095246f, 34.51022f, 0.0f};
const Position TeleportToTransportPosition = {661.0f, -1244.0f, 288.0f, 0.0f};
-const float BG_IC_SpiritGuidePos[MAX_NODE_TYPES+2][4] =
+Position const BG_IC_SpiritGuidePos[MAX_NODE_TYPES+2] =
{
{0.0f, 0.0f, 0.0f, 0.0f}, // no grave
{0.0f, 0.0f, 0.0f, 0.0f}, // no grave
@@ -819,7 +820,7 @@ struct ICNodePoint
{
uint32 gameobject_type; // with this we will get the GameObject of that point
uint32 gameobject_entry; // what gameobject entry is active here.
- uint8 faction; // who has this node
+ TeamId faction; // who has this node
ICNodePointType nodeType; // here we can specify if it is graveyards, hangar etc...
uint32 banners[4]; // the banners that have this point
bool needChange; // this is used for the 1 minute time period after the point is captured
@@ -847,12 +848,38 @@ enum HonorRewards
WINNER_HONOR_AMOUNT = 500
};
-struct BattlegroundICScore : public BattlegroundScore
+struct BattlegroundICScore final : public BattlegroundScore
{
- BattlegroundICScore() : BasesAssaulted(0), BasesDefended(0) { }
- ~BattlegroundICScore() { }
- uint32 BasesAssaulted;
- uint32 BasesDefended;
+ friend class BattlegroundIC;
+
+ protected:
+ BattlegroundICScore(uint64 playerGuid) : BattlegroundScore(playerGuid), BasesAssaulted(0), BasesDefended(0) { }
+
+ void UpdateScore(uint32 type, uint32 value) override
+ {
+ switch (type)
+ {
+ case SCORE_BASES_ASSAULTED:
+ BasesAssaulted += value;
+ break;
+ case SCORE_BASES_DEFENDED:
+ BasesDefended += value;
+ break;
+ default:
+ BattlegroundScore::UpdateScore(type, value);
+ break;
+ }
+ }
+
+ void BuildObjectivesBlock(WorldPacket& data) final override
+ {
+ data << uint32(2); // Objectives Count
+ data << uint32(BasesAssaulted);
+ data << uint32(BasesDefended);
+ }
+
+ uint32 BasesAssaulted;
+ uint32 BasesDefended;
};
class BattlegroundIC : public Battleground
@@ -862,39 +889,37 @@ class BattlegroundIC : public Battleground
~BattlegroundIC();
/* inherited from BattlegroundClass */
- void AddPlayer(Player* player);
- void StartingEventCloseDoors();
- void StartingEventOpenDoors();
- void PostUpdateImpl(uint32 diff);
-
- void RemovePlayer(Player* player, uint64 guid, uint32 team);
- void HandleAreaTrigger(Player* player, uint32 trigger);
- bool SetupBattleground();
+ void AddPlayer(Player* player) override;
+ void StartingEventCloseDoors() override;
+ void StartingEventOpenDoors() override;
+ void PostUpdateImpl(uint32 diff) override;
+
+ void RemovePlayer(Player* player, uint64 guid, uint32 team) override;
+ void HandleAreaTrigger(Player* player, uint32 trigger) override;
+ bool SetupBattleground() override;
void SpawnLeader(uint32 teamid);
- void HandleKillUnit(Creature* unit, Player* killer);
- void HandleKillPlayer(Player* player, Player* killer);
- void EndBattleground(uint32 winner);
- void EventPlayerClickedOnFlag(Player* source, GameObject* /*target_obj*/);
+ void HandleKillUnit(Creature* unit, Player* killer) override;
+ void HandleKillPlayer(Player* player, Player* killer) override;
+ void EndBattleground(uint32 winner) override;
+ void EventPlayerClickedOnFlag(Player* source, GameObject* /*target_obj*/) override;
- void EventPlayerDamagedGO(Player* /*player*/, GameObject* go, uint32 eventType);
- void DestroyGate(Player* player, GameObject* go);
+ void DestroyGate(Player* player, GameObject* go) override;
- WorldSafeLocsEntry const* GetClosestGraveYard(Player* player);
+ WorldSafeLocsEntry const* GetClosestGraveYard(Player* player) override;
/* Scorekeeping */
- void UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true);
-
- void FillInitialWorldStates(WorldPacket& data);
+ void FillInitialWorldStates(WorldPacket& data) override;
- void DoAction(uint32 action, uint64 var);
+ void DoAction(uint32 action, uint64 var) override;
- void HandlePlayerResurrect(Player* player);
+ void HandlePlayerResurrect(Player* player) override;
uint32 GetNodeState(uint8 nodeType) const { return (uint8)nodePoint[nodeType].nodeState; }
- bool IsAllNodesControlledByTeam(uint32 team) const;
+ bool IsAllNodesControlledByTeam(uint32 team) const override;
+
+ bool IsSpellAllowed(uint32 spellId, Player const* player) const override;
- bool IsSpellAllowed(uint32 spellId, Player const* player) const;
private:
uint32 closeFortressDoorsTimer;
bool doorsClosed;
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp
index 70a940ec853..46128c44d69 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp
@@ -17,30 +17,12 @@
*/
#include "BattlegroundNA.h"
-#include "Language.h"
-#include "Object.h"
-#include "ObjectMgr.h"
#include "Player.h"
#include "WorldPacket.h"
BattlegroundNA::BattlegroundNA()
{
BgObjects.resize(BG_NA_OBJECT_MAX);
-
- StartDelayTimes[BG_STARTING_EVENT_FIRST] = BG_START_DELAY_1M;
- StartDelayTimes[BG_STARTING_EVENT_SECOND] = BG_START_DELAY_30S;
- StartDelayTimes[BG_STARTING_EVENT_THIRD] = BG_START_DELAY_15S;
- StartDelayTimes[BG_STARTING_EVENT_FOURTH] = BG_START_DELAY_NONE;
- //we must set messageIds
- StartMessageIds[BG_STARTING_EVENT_FIRST] = LANG_ARENA_ONE_MINUTE;
- StartMessageIds[BG_STARTING_EVENT_SECOND] = LANG_ARENA_THIRTY_SECONDS;
- StartMessageIds[BG_STARTING_EVENT_THIRD] = LANG_ARENA_FIFTEEN_SECONDS;
- StartMessageIds[BG_STARTING_EVENT_FOURTH] = LANG_ARENA_HAS_BEGUN;
-}
-
-BattlegroundNA::~BattlegroundNA()
-{
-
}
void BattlegroundNA::StartingEventCloseDoors()
@@ -58,39 +40,6 @@ void BattlegroundNA::StartingEventOpenDoors()
SpawnBGObject(i, 60);
}
-void BattlegroundNA::AddPlayer(Player* player)
-{
- Battleground::AddPlayer(player);
- PlayerScores[player->GetGUID()] = new BattlegroundScore;
- UpdateArenaWorldState();
-}
-
-void BattlegroundNA::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/)
-{
- if (GetStatus() == STATUS_WAIT_LEAVE)
- return;
-
- UpdateArenaWorldState();
- CheckArenaWinConditions();
-}
-
-void BattlegroundNA::HandleKillPlayer(Player* player, Player* killer)
-{
- if (GetStatus() != STATUS_IN_PROGRESS)
- return;
-
- if (!killer)
- {
- TC_LOG_ERROR("bg.battleground", "BattlegroundNA: Killer player not found");
- return;
- }
-
- Battleground::HandleKillPlayer(player, killer);
-
- UpdateArenaWorldState();
- CheckArenaWinConditions();
-}
-
void BattlegroundNA::HandleAreaTrigger(Player* player, uint32 trigger)
{
if (GetStatus() != STATUS_IN_PROGRESS)
@@ -107,16 +56,10 @@ void BattlegroundNA::HandleAreaTrigger(Player* player, uint32 trigger)
}
}
-void BattlegroundNA::FillInitialWorldStates(WorldPacket &data)
-{
- data << uint32(0xa11) << uint32(1); // 9
- UpdateArenaWorldState();
-}
-
-void BattlegroundNA::Reset()
+void BattlegroundNA::FillInitialWorldStates(WorldPacket& data)
{
- //call parent's class reset
- Battleground::Reset();
+ data << uint32(0xa11) << uint32(1); // 9 show
+ Arena::FillInitialWorldStates(data);
}
bool BattlegroundNA::SetupBattleground()
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundNA.h b/src/server/game/Battlegrounds/Zones/BattlegroundNA.h
index dd21e44f593..17df258a0b8 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundNA.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundNA.h
@@ -18,7 +18,7 @@
#ifndef __BATTLEGROUNDNA_H
#define __BATTLEGROUNDNA_H
-#include "Battleground.h"
+#include "Arena.h"
enum BattlegroundNAObjectTypes
{
@@ -31,7 +31,7 @@ enum BattlegroundNAObjectTypes
BG_NA_OBJECT_MAX = 6
};
-enum BattlegroundNAObjects
+enum BattlegroundNAGameObjects
{
BG_NA_OBJECT_TYPE_DOOR_1 = 183978,
BG_NA_OBJECT_TYPE_DOOR_2 = 183980,
@@ -41,22 +41,17 @@ enum BattlegroundNAObjects
BG_NA_OBJECT_TYPE_BUFF_2 = 184664
};
-class BattlegroundNA : public Battleground
+class BattlegroundNA : public Arena
{
public:
BattlegroundNA();
- ~BattlegroundNA();
/* inherited from BattlegroundClass */
- void AddPlayer(Player* player);
- void StartingEventCloseDoors();
- void StartingEventOpenDoors();
+ void StartingEventCloseDoors() override;
+ void StartingEventOpenDoors() override;
- void RemovePlayer(Player* player, uint64 guid, uint32 team);
- void HandleAreaTrigger(Player* Source, uint32 Trigger);
- bool SetupBattleground();
- void Reset();
- void FillInitialWorldStates(WorldPacket &d);
- void HandleKillPlayer(Player* player, Player* killer);
+ void HandleAreaTrigger(Player* Source, uint32 Trigger) override;
+ bool SetupBattleground() override;
+ void FillInitialWorldStates(WorldPacket &d) override;
};
#endif
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp
index 5f77c57c064..f474946e069 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp
@@ -17,30 +17,12 @@
*/
#include "BattlegroundRL.h"
-#include "Language.h"
-#include "Object.h"
-#include "ObjectMgr.h"
#include "Player.h"
#include "WorldPacket.h"
BattlegroundRL::BattlegroundRL()
{
BgObjects.resize(BG_RL_OBJECT_MAX);
-
- StartDelayTimes[BG_STARTING_EVENT_FIRST] = BG_START_DELAY_1M;
- StartDelayTimes[BG_STARTING_EVENT_SECOND] = BG_START_DELAY_30S;
- StartDelayTimes[BG_STARTING_EVENT_THIRD] = BG_START_DELAY_15S;
- StartDelayTimes[BG_STARTING_EVENT_FOURTH] = BG_START_DELAY_NONE;
- //we must set messageIds
- StartMessageIds[BG_STARTING_EVENT_FIRST] = LANG_ARENA_ONE_MINUTE;
- StartMessageIds[BG_STARTING_EVENT_SECOND] = LANG_ARENA_THIRTY_SECONDS;
- StartMessageIds[BG_STARTING_EVENT_THIRD] = LANG_ARENA_FIFTEEN_SECONDS;
- StartMessageIds[BG_STARTING_EVENT_FOURTH] = LANG_ARENA_HAS_BEGUN;
-}
-
-BattlegroundRL::~BattlegroundRL()
-{
-
}
void BattlegroundRL::StartingEventCloseDoors()
@@ -58,39 +40,6 @@ void BattlegroundRL::StartingEventOpenDoors()
SpawnBGObject(i, 60);
}
-void BattlegroundRL::AddPlayer(Player* player)
-{
- Battleground::AddPlayer(player);
- PlayerScores[player->GetGUID()] = new BattlegroundScore;
- UpdateArenaWorldState();
-}
-
-void BattlegroundRL::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/)
-{
- if (GetStatus() == STATUS_WAIT_LEAVE)
- return;
-
- UpdateArenaWorldState();
- CheckArenaWinConditions();
-}
-
-void BattlegroundRL::HandleKillPlayer(Player* player, Player* killer)
-{
- if (GetStatus() != STATUS_IN_PROGRESS)
- return;
-
- if (!killer)
- {
- TC_LOG_ERROR("bg.battleground", "Killer player not found");
- return;
- }
-
- Battleground::HandleKillPlayer(player, killer);
-
- UpdateArenaWorldState();
- CheckArenaWinConditions();
-}
-
void BattlegroundRL::HandleAreaTrigger(Player* player, uint32 trigger)
{
if (GetStatus() != STATUS_IN_PROGRESS)
@@ -107,16 +56,10 @@ void BattlegroundRL::HandleAreaTrigger(Player* player, uint32 trigger)
}
}
-void BattlegroundRL::FillInitialWorldStates(WorldPacket &data)
-{
- data << uint32(0xbba) << uint32(1); // 9
- UpdateArenaWorldState();
-}
-
-void BattlegroundRL::Reset()
+void BattlegroundRL::FillInitialWorldStates(WorldPacket& data)
{
- //call parent's reset
- Battleground::Reset();
+ data << uint32(0xbba) << uint32(1); // 9 show
+ Arena::FillInitialWorldStates(data);
}
bool BattlegroundRL::SetupBattleground()
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRL.h b/src/server/game/Battlegrounds/Zones/BattlegroundRL.h
index 27974108168..e96129b05f0 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundRL.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundRL.h
@@ -18,7 +18,7 @@
#ifndef __BATTLEGROUNDRL_H
#define __BATTLEGROUNDRL_H
-#include "Battleground.h"
+#include "Arena.h"
enum BattlegroundRLObjectTypes
{
@@ -29,7 +29,7 @@ enum BattlegroundRLObjectTypes
BG_RL_OBJECT_MAX = 4
};
-enum BattlegroundRLObjects
+enum BattlegroundRLGameObjects
{
BG_RL_OBJECT_TYPE_DOOR_1 = 185918,
BG_RL_OBJECT_TYPE_DOOR_2 = 185917,
@@ -37,22 +37,17 @@ enum BattlegroundRLObjects
BG_RL_OBJECT_TYPE_BUFF_2 = 184664
};
-class BattlegroundRL : public Battleground
+class BattlegroundRL : public Arena
{
public:
BattlegroundRL();
- ~BattlegroundRL();
/* inherited from BattlegroundClass */
- void AddPlayer(Player* player);
- void Reset();
- void FillInitialWorldStates(WorldPacket &d);
- void StartingEventCloseDoors();
- void StartingEventOpenDoors();
+ void FillInitialWorldStates(WorldPacket &d) override;
+ void StartingEventCloseDoors() override;
+ void StartingEventOpenDoors() override;
- void RemovePlayer(Player* player, uint64 guid, uint32 team);
- void HandleAreaTrigger(Player* Source, uint32 Trigger);
- bool SetupBattleground();
- void HandleKillPlayer(Player* player, Player* killer);
+ void HandleAreaTrigger(Player* Source, uint32 Trigger) override;
+ bool SetupBattleground() override;
};
#endif
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp
index dd61b8b9e6f..284b05a8960 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp
@@ -16,69 +16,54 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "Battleground.h"
#include "BattlegroundRV.h"
+#include "GameObject.h"
#include "ObjectAccessor.h"
-#include "Language.h"
#include "Player.h"
#include "WorldPacket.h"
-#include "GameObject.h"
BattlegroundRV::BattlegroundRV()
{
BgObjects.resize(BG_RV_OBJECT_MAX);
- Timer = 0;
- State = 0;
- PillarCollision = false;
-
- StartDelayTimes[BG_STARTING_EVENT_FIRST] = BG_START_DELAY_1M;
- StartDelayTimes[BG_STARTING_EVENT_SECOND] = BG_START_DELAY_30S;
- StartDelayTimes[BG_STARTING_EVENT_THIRD] = BG_START_DELAY_15S;
- StartDelayTimes[BG_STARTING_EVENT_FOURTH] = BG_START_DELAY_NONE;
- StartMessageIds[BG_STARTING_EVENT_FIRST] = LANG_ARENA_ONE_MINUTE;
- StartMessageIds[BG_STARTING_EVENT_SECOND] = LANG_ARENA_THIRTY_SECONDS;
- StartMessageIds[BG_STARTING_EVENT_THIRD] = LANG_ARENA_FIFTEEN_SECONDS;
- StartMessageIds[BG_STARTING_EVENT_FOURTH] = LANG_ARENA_HAS_BEGUN;
+ _timer = 0;
+ _state = 0;
+ _pillarCollision = false;
}
-BattlegroundRV::~BattlegroundRV() { }
-
void BattlegroundRV::PostUpdateImpl(uint32 diff)
{
if (GetStatus() != STATUS_IN_PROGRESS)
return;
- if (getTimer() < diff)
+ if (_timer < diff)
{
- switch (getState())
+ switch (_state)
{
case BG_RV_STATE_OPEN_FENCES:
// Open fire (only at game start)
for (uint8 i = BG_RV_OBJECT_FIRE_1; i <= BG_RV_OBJECT_FIREDOOR_2; ++i)
DoorOpen(i);
- setTimer(BG_RV_CLOSE_FIRE_TIMER);
- setState(BG_RV_STATE_CLOSE_FIRE);
+ _timer = BG_RV_CLOSE_FIRE_TIMER;
+ _state = BG_RV_STATE_CLOSE_FIRE;
break;
case BG_RV_STATE_CLOSE_FIRE:
for (uint8 i = BG_RV_OBJECT_FIRE_1; i <= BG_RV_OBJECT_FIREDOOR_2; ++i)
DoorClose(i);
// Fire got closed after five seconds, leaves twenty seconds before toggling pillars
- setTimer(BG_RV_FIRE_TO_PILLAR_TIMER);
- setState(BG_RV_STATE_SWITCH_PILLARS);
+ _timer = BG_RV_FIRE_TO_PILLAR_TIMER;
+ _state = BG_RV_STATE_SWITCH_PILLARS;
break;
case BG_RV_STATE_SWITCH_PILLARS:
TogglePillarCollision();
- setTimer(BG_RV_PILLAR_SWITCH_TIMER);
+ _timer = BG_RV_PILLAR_SWITCH_TIMER;
break;
}
}
else
- setTimer(getTimer() - diff);
+ _timer -= diff;
}
-void BattlegroundRV::StartingEventCloseDoors() { }
-
void BattlegroundRV::StartingEventOpenDoors()
{
// Buff respawn
@@ -88,53 +73,14 @@ void BattlegroundRV::StartingEventOpenDoors()
DoorOpen(BG_RV_OBJECT_ELEVATOR_1);
DoorOpen(BG_RV_OBJECT_ELEVATOR_2);
- setState(BG_RV_STATE_OPEN_FENCES);
- setTimer(BG_RV_FIRST_TIMER);
+ _state = BG_RV_STATE_OPEN_FENCES;
+ _timer = BG_RV_FIRST_TIMER;
// Should be false at first, TogglePillarCollision will do it.
- SetPillarCollision(true);
+ _pillarCollision = true;
TogglePillarCollision();
}
-void BattlegroundRV::AddPlayer(Player* player)
-{
- Battleground::AddPlayer(player);
- PlayerScores[player->GetGUID()] = new BattlegroundScore;
-
- UpdateWorldState(BG_RV_WORLD_STATE_A, GetAlivePlayersCountByTeam(ALLIANCE));
- UpdateWorldState(BG_RV_WORLD_STATE_H, GetAlivePlayersCountByTeam(HORDE));
-}
-
-void BattlegroundRV::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/)
-{
- if (GetStatus() == STATUS_WAIT_LEAVE)
- return;
-
- UpdateWorldState(BG_RV_WORLD_STATE_A, GetAlivePlayersCountByTeam(ALLIANCE));
- UpdateWorldState(BG_RV_WORLD_STATE_H, GetAlivePlayersCountByTeam(HORDE));
-
- CheckArenaWinConditions();
-}
-
-void BattlegroundRV::HandleKillPlayer(Player* player, Player* killer)
-{
- if (GetStatus() != STATUS_IN_PROGRESS)
- return;
-
- if (!killer)
- {
- TC_LOG_ERROR("bg.battleground", "BattlegroundRV: Killer player not found");
- return;
- }
-
- Battleground::HandleKillPlayer(player, killer);
-
- UpdateWorldState(BG_RV_WORLD_STATE_A, GetAlivePlayersCountByTeam(ALLIANCE));
- UpdateWorldState(BG_RV_WORLD_STATE_H, GetAlivePlayersCountByTeam(HORDE));
-
- CheckArenaWinConditions();
-}
-
void BattlegroundRV::HandleAreaTrigger(Player* player, uint32 trigger)
{
if (GetStatus() != STATUS_IN_PROGRESS)
@@ -154,17 +100,10 @@ void BattlegroundRV::HandleAreaTrigger(Player* player, uint32 trigger)
}
}
-void BattlegroundRV::FillInitialWorldStates(WorldPacket &data)
+void BattlegroundRV::FillInitialWorldStates(WorldPacket& data)
{
- data << uint32(BG_RV_WORLD_STATE_A) << uint32(GetAlivePlayersCountByTeam(ALLIANCE));
- data << uint32(BG_RV_WORLD_STATE_H) << uint32(GetAlivePlayersCountByTeam(HORDE));
data << uint32(BG_RV_WORLD_STATE) << uint32(1);
-}
-
-void BattlegroundRV::Reset()
-{
- //call parent's class reset
- Battleground::Reset();
+ Arena::FillInitialWorldStates(data);
}
bool BattlegroundRV::SetupBattleground()
@@ -196,9 +135,7 @@ bool BattlegroundRV::SetupBattleground()
|| !AddObject(BG_RV_OBJECT_PILAR_COLLISION_1, BG_RV_OBJECT_TYPE_PILAR_COLLISION_1, 763.632385f, -306.162384f, 30.639660f, 3.141593f, 0, 0, 0, RESPAWN_IMMEDIATELY)
|| !AddObject(BG_RV_OBJECT_PILAR_COLLISION_2, BG_RV_OBJECT_TYPE_PILAR_COLLISION_2, 723.644287f, -284.493256f, 32.382710f, 0.000000f, 0, 0, 0, RESPAWN_IMMEDIATELY)
|| !AddObject(BG_RV_OBJECT_PILAR_COLLISION_3, BG_RV_OBJECT_TYPE_PILAR_COLLISION_3, 763.611145f, -261.856750f, 30.639660f, 0.000000f, 0, 0, 0, RESPAWN_IMMEDIATELY)
- || !AddObject(BG_RV_OBJECT_PILAR_COLLISION_4, BG_RV_OBJECT_TYPE_PILAR_COLLISION_4, 802.211609f, -284.493256f, 32.382710f, 3.141593f, 0, 0, 0, RESPAWN_IMMEDIATELY)
-
-)
+ || !AddObject(BG_RV_OBJECT_PILAR_COLLISION_4, BG_RV_OBJECT_TYPE_PILAR_COLLISION_4, 802.211609f, -284.493256f, 32.382710f, 3.141593f, 0, 0, 0, RESPAWN_IMMEDIATELY))
{
TC_LOG_ERROR("sql.sql", "BatteGroundRV: Failed to spawn some object!");
return false;
@@ -206,38 +143,30 @@ bool BattlegroundRV::SetupBattleground()
return true;
}
-
void BattlegroundRV::TogglePillarCollision()
{
- bool apply = GetPillarCollision();
-
// Toggle visual pillars, pulley, gear, and collision based on previous state
for (uint8 i = BG_RV_OBJECT_PILAR_1; i <= BG_RV_OBJECT_GEAR_2; ++i)
- apply ? DoorOpen(i) : DoorClose(i);
+ _pillarCollision ? DoorOpen(i) : DoorClose(i);
for (uint8 i = BG_RV_OBJECT_PILAR_2; i <= BG_RV_OBJECT_PULLEY_2; ++i)
- apply ? DoorClose(i) : DoorOpen(i);
+ _pillarCollision ? DoorClose(i) : DoorOpen(i);
for (uint8 i = BG_RV_OBJECT_PILAR_1; i <= BG_RV_OBJECT_PILAR_COLLISION_4; ++i)
{
- if (GameObject* gob = GetBgMap()->GetGameObject(BgObjects[i]))
+ if (GameObject* go = GetBGObject(i))
{
if (i >= BG_RV_OBJECT_PILAR_COLLISION_1)
{
- uint32 _state = GO_STATE_READY;
- if (gob->GetGOInfo()->door.startOpen)
- _state = GO_STATE_ACTIVE;
- gob->SetGoState(apply ? (GOState)_state : (GOState)(!_state));
-
- if (gob->GetGOInfo()->door.startOpen)
- gob->EnableCollision(!apply); // Forced collision toggle
+ GOState state = ((go->GetGOInfo()->door.startOpen != 0) == _pillarCollision) ? GO_STATE_ACTIVE : GO_STATE_READY;
+ go->SetGoState(state);
}
- for (BattlegroundPlayerMap::iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
- if (Player* player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)))
- gob->SendUpdateToPlayer(player);
+ for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
+ if (Player* player = ObjectAccessor::FindPlayer(itr->first))
+ go->SendUpdateToPlayer(player);
}
}
- SetPillarCollision(!apply);
+ _pillarCollision = !_pillarCollision;
}
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRV.h b/src/server/game/Battlegrounds/Zones/BattlegroundRV.h
index 454ea723f8b..eda4bf7fa00 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundRV.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundRV.h
@@ -18,7 +18,7 @@
#ifndef __BATTLEGROUNDRV_H
#define __BATTLEGROUNDRV_H
-#include "Battleground.h"
+#include "Arena.h"
enum BattlegroundRVObjectTypes
{
@@ -49,7 +49,7 @@ enum BattlegroundRVObjectTypes
BG_RV_OBJECT_MAX
};
-enum BattlegroundRVObjects
+enum BattlegroundRVGameObjects
{
BG_RV_OBJECT_TYPE_BUFF_1 = 184663,
BG_RV_OBJECT_TYPE_BUFF_2 = 184664,
@@ -86,44 +86,29 @@ enum BattlegroundRVData
BG_RV_FIRE_TO_PILLAR_TIMER = 20000,
BG_RV_CLOSE_FIRE_TIMER = 5000,
BG_RV_FIRST_TIMER = 20133,
- BG_RV_WORLD_STATE_A = 0xe10,
- BG_RV_WORLD_STATE_H = 0xe11,
+
BG_RV_WORLD_STATE = 0xe1a
};
-class BattlegroundRV : public Battleground
+class BattlegroundRV : public Arena
{
public:
BattlegroundRV();
- ~BattlegroundRV();
/* inherited from BattlegroundClass */
- void AddPlayer(Player* player);
- void StartingEventCloseDoors();
- void StartingEventOpenDoors();
- void Reset();
- void FillInitialWorldStates(WorldPacket &d);
+ void StartingEventOpenDoors() override;
+ void FillInitialWorldStates(WorldPacket &d) override;
- void RemovePlayer(Player* player, uint64 guid, uint32 team);
- void HandleAreaTrigger(Player* Source, uint32 Trigger);
- bool SetupBattleground();
- void HandleKillPlayer(Player* player, Player* killer);
+ void HandleAreaTrigger(Player* Source, uint32 Trigger) override;
+ bool SetupBattleground() override;
private:
- uint32 Timer;
- uint32 State;
- bool PillarCollision;
-
- void PostUpdateImpl(uint32 diff);
+ void PostUpdateImpl(uint32 diff) override;
- protected:
- uint32 getTimer() { return Timer; }
- void setTimer(uint32 timer) { Timer = timer; }
-
- uint32 getState() { return State; }
- void setState(uint32 state) { State = state; }
void TogglePillarCollision();
- bool GetPillarCollision() { return PillarCollision; }
- void SetPillarCollision(bool apply) { PillarCollision = apply; }
+
+ uint32 _timer;
+ uint32 _state;
+ bool _pillarCollision;
};
#endif
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
index 126077f7988..95a4642acd7 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
@@ -17,10 +17,11 @@
*/
#include "BattlegroundSA.h"
-#include "Language.h"
-#include "Player.h"
#include "GameObject.h"
+#include "Language.h"
#include "ObjectMgr.h"
+#include "Player.h"
+#include "ScriptedCreature.h"
#include "WorldPacket.h"
#include "WorldSession.h"
@@ -29,7 +30,8 @@ BattlegroundSA::BattlegroundSA()
StartMessageIds[BG_STARTING_EVENT_FIRST] = LANG_BG_SA_START_TWO_MINUTES;
StartMessageIds[BG_STARTING_EVENT_SECOND] = LANG_BG_SA_START_ONE_MINUTE;
StartMessageIds[BG_STARTING_EVENT_THIRD] = LANG_BG_SA_START_HALF_MINUTE;
- StartMessageIds[BG_STARTING_EVENT_FOURTH] = LANG_BG_SA_HAS_BEGUN;
+ StartMessageIds[BG_STARTING_EVENT_FOURTH] = 0;
+
BgObjects.resize(BG_SA_MAXOBJ);
BgCreatures.resize(BG_SA_MAXNPC + BG_SA_MAX_GY);
TimerEnabled = false;
@@ -37,14 +39,14 @@ BattlegroundSA::BattlegroundSA()
SignaledRoundTwo = false;
SignaledRoundTwoHalfMin = false;
InitSecondRound = false;
- gateDestroyed = false;
+ _gateDestroyed = false;
Attackers = TEAM_ALLIANCE;
TotalTime = 0;
EndRoundTimer = 0;
ShipsStarted = false;
- Status = BG_SA_NOTSTARTED;
+ Status = BG_SA_NOT_STARTED;
- for (uint8 i = 0; i < 6; i++)
+ for (uint8 i = 0; i < MAX_GATES; ++i)
GateStatus[i] = BG_SA_GATE_OK;
for (uint8 i = 0; i < 2; i++)
@@ -69,7 +71,7 @@ void BattlegroundSA::Reset()
for (uint8 i = 0; i <= 5; i++)
GateStatus[i] = BG_SA_GATE_OK;
ShipsStarted = false;
- gateDestroyed = false;
+ _gateDestroyed = false;
_allVehiclesAlive[TEAM_ALLIANCE] = true;
_allVehiclesAlive[TEAM_HORDE] = true;
Status = BG_SA_WARMUP;
@@ -101,10 +103,19 @@ bool BattlegroundSA::ResetObjs()
for (uint8 i = 0; i < 6; i++)
GateStatus[i] = BG_SA_GATE_OK;
+ if (!AddCreature(BG_SA_NpcEntries[BG_SA_NPC_KANRETHAD], BG_SA_NPC_KANRETHAD, BG_SA_NpcSpawnlocs[BG_SA_NPC_KANRETHAD]))
+ {
+ TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn Kanrethad, aborted. Entry: %u", BG_SA_NpcEntries[BG_SA_NPC_KANRETHAD]);
+ return false;
+ }
+
for (uint8 i = 0; i <= BG_SA_PORTAL_DEFFENDER_RED; i++)
{
- if (!AddObject(i, BG_SA_ObjEntries[i], BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1], BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3], 0, 0, 0, 0, RESPAWN_ONE_DAY))
- return false;
+ if (!AddObject(i, BG_SA_ObjEntries[i], BG_SA_ObjSpawnlocs[i], 0, 0, 0, 0, RESPAWN_ONE_DAY))
+ {
+ TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn BG_SA_PORTAL_DEFFENDER_RED, Entry: %u", BG_SA_ObjEntries[i]);
+ continue;
+ }
}
for (uint8 i = BG_SA_BOAT_ONE; i <= BG_SA_BOAT_TWO; i++)
@@ -121,20 +132,23 @@ bool BattlegroundSA::ResetObjs()
default:
break;
}
- if (!AddObject(i, boatid, BG_SA_ObjSpawnlocs[i][0],
- BG_SA_ObjSpawnlocs[i][1],
- BG_SA_ObjSpawnlocs[i][2]+(Attackers ? -3.750f: 0),
- BG_SA_ObjSpawnlocs[i][3], 0, 0, 0, 0, RESPAWN_ONE_DAY))
- return false;
+ if (!AddObject(i, boatid, BG_SA_ObjSpawnlocs[i].GetPositionX(),
+ BG_SA_ObjSpawnlocs[i].GetPositionY(),
+ BG_SA_ObjSpawnlocs[i].GetPositionZ() + (Attackers ? -3.750f: 0),
+ BG_SA_ObjSpawnlocs[i].GetOrientation(), 0, 0, 0, 0, RESPAWN_ONE_DAY))
+ {
+ TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn one of the BG_SA_BOAT, Entry: %u", boatid);
+ continue;
+ }
}
for (uint8 i = BG_SA_SIGIL_1; i <= BG_SA_LEFT_FLAGPOLE; i++)
{
- if (!AddObject(i, BG_SA_ObjEntries[i],
- BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1],
- BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3],
- 0, 0, 0, 0, RESPAWN_ONE_DAY))
- return false;
+ if (!AddObject(i, BG_SA_ObjEntries[i], BG_SA_ObjSpawnlocs[i], 0, 0, 0, 0, RESPAWN_ONE_DAY))
+ {
+ TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn Sigil, Entry: %u", BG_SA_ObjEntries[i]);
+ continue;
+ }
}
// MAD props for Kiper for discovering those values - 4 hours of his work.
@@ -147,10 +161,11 @@ bool BattlegroundSA::ResetObjs()
//By capturing GYs.
for (uint8 i = 0; i < BG_SA_DEMOLISHER_5; i++)
{
- if (!AddCreature(BG_SA_NpcEntries[i], i, (Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE),
- BG_SA_NpcSpawnlocs[i][0], BG_SA_NpcSpawnlocs[i][1],
- BG_SA_NpcSpawnlocs[i][2], BG_SA_NpcSpawnlocs[i][3], 600))
- return false;
+ if (!AddCreature(BG_SA_NpcEntries[i], i, BG_SA_NpcSpawnlocs[i], Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE, 600))
+ {
+ TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn Cannon or demolisher, Entry: %u, Attackers: %s", BG_SA_NpcEntries[i], Attackers == TEAM_ALLIANCE ? "Horde(1)" : "Alliance(0)");
+ continue;
+ }
}
OverrideGunFaction();
@@ -159,10 +174,10 @@ bool BattlegroundSA::ResetObjs()
for (uint8 i = 0; i <= BG_SA_PORTAL_DEFFENDER_RED; i++)
{
SpawnBGObject(i, RESPAWN_IMMEDIATELY);
- GetBGObject(i)->SetUInt32Value(GAMEOBJECT_FACTION, defF);
+ GetBGObject(i)->SetFaction(defF);
}
- GetBGObject(BG_SA_TITAN_RELIC)->SetUInt32Value(GAMEOBJECT_FACTION, atF);
+ GetBGObject(BG_SA_TITAN_RELIC)->SetFaction(atF);
GetBGObject(BG_SA_TITAN_RELIC)->Refresh();
for (uint8 i = 0; i <= 5; i++)
@@ -186,12 +201,12 @@ bool BattlegroundSA::ResetObjs()
if (i == BG_SA_BEACH_GY)
{
GraveyardStatus[i] = Attackers;
- AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], ((Attackers == TEAM_HORDE)? HORDE : ALLIANCE));
+ AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], Attackers);
}
else
{
GraveyardStatus[i] = ((Attackers == TEAM_HORDE)? TEAM_ALLIANCE : TEAM_HORDE);
- if (!AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], ((Attackers == TEAM_HORDE)? ALLIANCE : HORDE)))
+ if (!AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], Attackers == TEAM_HORDE ? TEAM_ALLIANCE : TEAM_HORDE))
TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn GY: %u", i);
}
}
@@ -199,20 +214,22 @@ bool BattlegroundSA::ResetObjs()
//GY capture points
for (uint8 i = BG_SA_CENTRAL_FLAG; i <= BG_SA_LEFT_FLAG; i++)
{
- AddObject(i, (BG_SA_ObjEntries[i] - (Attackers == TEAM_ALLIANCE ? 1 : 0)),
- BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1],
- BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3],
- 0, 0, 0, 0, RESPAWN_ONE_DAY);
- GetBGObject(i)->SetUInt32Value(GAMEOBJECT_FACTION, atF);
+ if (!AddObject(i, (BG_SA_ObjEntries[i] - (Attackers == TEAM_ALLIANCE ? 1 : 0)), BG_SA_ObjSpawnlocs[i], 0, 0, 0, 0, RESPAWN_ONE_DAY))
+ {
+ TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn Central Flag Entry: %u", BG_SA_ObjEntries[i] - (Attackers == TEAM_ALLIANCE ? 1 : 0));
+ continue;
+ }
+ GetBGObject(i)->SetFaction(atF);
}
for (uint8 i = BG_SA_BOMB; i < BG_SA_MAXOBJ; i++)
{
- AddObject(i, BG_SA_ObjEntries[BG_SA_BOMB],
- BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1],
- BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3],
- 0, 0, 0, 0, RESPAWN_ONE_DAY);
- GetBGObject(i)->SetUInt32Value(GAMEOBJECT_FACTION, atF);
+ if (!AddObject(i, BG_SA_ObjEntries[BG_SA_BOMB], BG_SA_ObjSpawnlocs[i], 0, 0, 0, 0, RESPAWN_ONE_DAY))
+ {
+ TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn SA Bomb Entry: %u", BG_SA_ObjEntries[BG_SA_BOMB] + i);
+ continue;
+ }
+ GetBGObject(i)->SetFaction(atF);
}
//Player may enter BEFORE we set up BG - lets update his worldstates anyway...
@@ -316,11 +333,14 @@ void BattlegroundSA::PostUpdateImpl(uint32 diff)
}
TotalTime += diff;
- if (Status == BG_SA_WARMUP )
+ if (Status == BG_SA_WARMUP)
{
EndRoundTimer = BG_SA_ROUNDLENGTH;
if (TotalTime >= BG_SA_WARMUPLENGTH)
{
+ if (Creature* c = GetBGCreature(BG_SA_NPC_KANRETHAD))
+ SendChatMessage(c, TEXT_ROUND_STARTED);
+
TotalTime = 0;
ToggleTimer();
DemolisherStartState(false);
@@ -340,7 +360,9 @@ void BattlegroundSA::PostUpdateImpl(uint32 diff)
if (TotalTime >= 60000)
{
- SendWarningToAll(LANG_BG_SA_HAS_BEGUN);
+ if (Creature* c = GetBGCreature(BG_SA_NPC_KANRETHAD))
+ SendChatMessage(c, TEXT_ROUND_STARTED);
+
TotalTime = 0;
ToggleTimer();
DemolisherStartState(false);
@@ -380,6 +402,9 @@ void BattlegroundSA::PostUpdateImpl(uint32 diff)
InitSecondRound = true;
ToggleTimer();
ResetObjs();
+ GetBgMap()->UpdateAreaDependentAuras();
+ CastSpellOnTeam(SPELL_END_OF_ROUND, ALLIANCE);
+ CastSpellOnTeam(SPELL_END_OF_ROUND, HORDE);
return;
}
}
@@ -412,55 +437,56 @@ void BattlegroundSA::StartingEventOpenDoors() { }
void BattlegroundSA::FillInitialWorldStates(WorldPacket& data)
{
- uint32 ally_attacks = uint32(Attackers == TEAM_ALLIANCE ? 1 : 0);
- uint32 horde_attacks = uint32(Attackers == TEAM_HORDE ? 1 : 0);
-
- data << uint32(BG_SA_ANCIENT_GATEWS) << uint32(GateStatus[BG_SA_ANCIENT_GATE]);
- data << uint32(BG_SA_YELLOW_GATEWS) << uint32(GateStatus[BG_SA_YELLOW_GATE]);
- data << uint32(BG_SA_GREEN_GATEWS) << uint32(GateStatus[BG_SA_GREEN_GATE]);
- data << uint32(BG_SA_BLUE_GATEWS) << uint32(GateStatus[BG_SA_BLUE_GATE]);
- data << uint32(BG_SA_RED_GATEWS) << uint32(GateStatus[BG_SA_RED_GATE]);
- data << uint32(BG_SA_PURPLE_GATEWS) << uint32(GateStatus[BG_SA_PURPLE_GATE]);
-
- data << uint32(BG_SA_BONUS_TIMER) << uint32(0);
-
- data << uint32(BG_SA_HORDE_ATTACKS) << horde_attacks;
- data << uint32(BG_SA_ALLY_ATTACKS) << ally_attacks;
-
- //Time will be sent on first update...
- data << uint32(BG_SA_ENABLE_TIMER) << ((TimerEnabled) ? uint32(1) : uint32(0));
- data << uint32(BG_SA_TIMER_MINS) << uint32(0);
- data << uint32(BG_SA_TIMER_SEC_TENS) << uint32(0);
- data << uint32(BG_SA_TIMER_SEC_DECS) << uint32(0);
-
- data << uint32(BG_SA_RIGHT_GY_HORDE) << uint32(GraveyardStatus[BG_SA_RIGHT_CAPTURABLE_GY] == TEAM_HORDE ? 1 : 0);
- data << uint32(BG_SA_LEFT_GY_HORDE) << uint32(GraveyardStatus[BG_SA_LEFT_CAPTURABLE_GY] == TEAM_HORDE ? 1 : 0);
- data << uint32(BG_SA_CENTER_GY_HORDE) << uint32(GraveyardStatus[BG_SA_CENTRAL_CAPTURABLE_GY] == TEAM_HORDE ? 1 : 0);
-
- data << uint32(BG_SA_RIGHT_GY_ALLIANCE) << uint32(GraveyardStatus[BG_SA_RIGHT_CAPTURABLE_GY] == TEAM_ALLIANCE ? 1 : 0);
- data << uint32(BG_SA_LEFT_GY_ALLIANCE) << uint32(GraveyardStatus[BG_SA_LEFT_CAPTURABLE_GY] == TEAM_ALLIANCE ? 1 : 0);
- data << uint32(BG_SA_CENTER_GY_ALLIANCE) << uint32(GraveyardStatus[BG_SA_CENTRAL_CAPTURABLE_GY] == TEAM_ALLIANCE ? 1 : 0);
-
- data << uint32(BG_SA_HORDE_DEFENCE_TOKEN) << ally_attacks;
- data << uint32(BG_SA_ALLIANCE_DEFENCE_TOKEN) << horde_attacks;
-
- data << uint32(BG_SA_LEFT_ATT_TOKEN_HRD) << horde_attacks;
- data << uint32(BG_SA_RIGHT_ATT_TOKEN_HRD) << horde_attacks;
- data << uint32(BG_SA_RIGHT_ATT_TOKEN_ALL) << ally_attacks;
- data << uint32(BG_SA_LEFT_ATT_TOKEN_ALL) << ally_attacks;
+ bool allyAttacks = Attackers == TEAM_ALLIANCE;
+ bool hordeAttacks = Attackers == TEAM_HORDE;
+
+ data << uint32(BG_SA_ANCIENT_GATEWS) << uint32(GateStatus[BG_SA_ANCIENT_GATE]);
+ data << uint32(BG_SA_YELLOW_GATEWS) << uint32(GateStatus[BG_SA_YELLOW_GATE]);
+ data << uint32(BG_SA_GREEN_GATEWS) << uint32(GateStatus[BG_SA_GREEN_GATE]);
+ data << uint32(BG_SA_BLUE_GATEWS) << uint32(GateStatus[BG_SA_BLUE_GATE]);
+ data << uint32(BG_SA_RED_GATEWS) << uint32(GateStatus[BG_SA_RED_GATE]);
+ data << uint32(BG_SA_PURPLE_GATEWS) << uint32(GateStatus[BG_SA_PURPLE_GATE]);
+
+ data << uint32(BG_SA_BONUS_TIMER) << uint32(0);
+
+ data << uint32(BG_SA_HORDE_ATTACKS) << uint32(hordeAttacks);
+ data << uint32(BG_SA_ALLY_ATTACKS) << uint32(allyAttacks);
+
+ // Time will be sent on first update...
+ data << uint32(BG_SA_ENABLE_TIMER) << uint32(TimerEnabled);
+ data << uint32(BG_SA_TIMER_MINS) << uint32(0);
+ data << uint32(BG_SA_TIMER_SEC_TENS) << uint32(0);
+ data << uint32(BG_SA_TIMER_SEC_DECS) << uint32(0);
+
+ data << uint32(BG_SA_RIGHT_GY_HORDE) << uint32(GraveyardStatus[BG_SA_RIGHT_CAPTURABLE_GY] == TEAM_HORDE);
+ data << uint32(BG_SA_LEFT_GY_HORDE) << uint32(GraveyardStatus[BG_SA_LEFT_CAPTURABLE_GY] == TEAM_HORDE);
+ data << uint32(BG_SA_CENTER_GY_HORDE) << uint32(GraveyardStatus[BG_SA_CENTRAL_CAPTURABLE_GY] == TEAM_HORDE);
+
+ data << uint32(BG_SA_RIGHT_GY_ALLIANCE) << uint32(GraveyardStatus[BG_SA_RIGHT_CAPTURABLE_GY] == TEAM_ALLIANCE);
+ data << uint32(BG_SA_LEFT_GY_ALLIANCE) << uint32(GraveyardStatus[BG_SA_LEFT_CAPTURABLE_GY] == TEAM_ALLIANCE);
+ data << uint32(BG_SA_CENTER_GY_ALLIANCE) << uint32(GraveyardStatus[BG_SA_CENTRAL_CAPTURABLE_GY] == TEAM_ALLIANCE);
+
+ data << uint32(BG_SA_HORDE_DEFENCE_TOKEN) << uint32(allyAttacks);
+ data << uint32(BG_SA_ALLIANCE_DEFENCE_TOKEN) << uint32(hordeAttacks);
+
+ data << uint32(BG_SA_LEFT_ATT_TOKEN_HRD) << uint32(hordeAttacks);
+ data << uint32(BG_SA_RIGHT_ATT_TOKEN_HRD) << uint32(hordeAttacks);
+ data << uint32(BG_SA_RIGHT_ATT_TOKEN_ALL) << uint32(allyAttacks);
+ data << uint32(BG_SA_LEFT_ATT_TOKEN_ALL) << uint32(allyAttacks);
}
void BattlegroundSA::AddPlayer(Player* player)
{
Battleground::AddPlayer(player);
- //create score and add it to map, default values are set in constructor
- BattlegroundSAScore* sc = new BattlegroundSAScore;
+ PlayerScores[player->GetGUIDLow()] = new BattlegroundSAScore(player->GetGUID());
+
+ SendTransportInit(player);
if (!ShipsStarted)
{
if (player->GetTeamId() == Attackers)
{
- player->CastSpell(player, 12438, true);//Without this player falls before boat loads...
+ player->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
if (urand(0, 1))
player->TeleportTo(607, 2682.936f, -830.368f, 15.0f, 2.895f, 0);
@@ -478,8 +504,6 @@ void BattlegroundSA::AddPlayer(Player* player)
else
player->TeleportTo(607, 1209.7f, -65.16f, 70.1f, 0.0f, 0);
}
- SendTransportInit(player);
- PlayerScores[player->GetGUID()] = sc;
}
void BattlegroundSA::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/) { }
@@ -491,20 +515,6 @@ void BattlegroundSA::HandleAreaTrigger(Player* /*Source*/, uint32 /*Trigger*/)
return;
}
-void BattlegroundSA::UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor)
-{
- BattlegroundScoreMap::iterator itr = PlayerScores.find(Source->GetGUID());
- if (itr == PlayerScores.end()) // player not found...
- return;
-
- if (type == SCORE_DESTROYED_DEMOLISHER)
- ((BattlegroundSAScore*)itr->second)->demolishers_destroyed += value;
- else if (type == SCORE_DESTROYED_WALL)
- ((BattlegroundSAScore*)itr->second)->gates_destroyed += value;
- else
- Battleground::UpdatePlayerScore(Source, type, value, doAddHonor);
-}
-
void BattlegroundSA::TeleportPlayers()
{
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
@@ -530,7 +540,7 @@ void BattlegroundSA::TeleportPlayers()
if (player->GetTeamId() == Attackers)
{
- player->CastSpell(player, 12438, true); //Without this player falls before boat loads...
+ player->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
if (urand(0, 1))
player->TeleportTo(607, 2682.936f, -830.368f, 15.0f, 2.895f, 0);
@@ -543,30 +553,94 @@ void BattlegroundSA::TeleportPlayers()
}
}
-void BattlegroundSA::EventPlayerDamagedGO(Player* /*player*/, GameObject* go, uint32 eventType)
+void BattlegroundSA::ProcessEvent(WorldObject* obj, uint32 eventId, WorldObject* invoker /*= NULL*/)
{
- if (!go || !go->GetGOInfo())
- return;
-
- if (eventType == go->GetGOInfo()->building.damagedEvent)
+ if (GameObject* go = obj->ToGameObject())
{
- uint32 i = getGateIdFromDamagedOrDestroyEventId(eventType);
- GateStatus[i] = BG_SA_GATE_DAMAGED;
- uint32 uws = getWorldStateFromGateId(i);
- if (uws)
- UpdateWorldState(uws, GateStatus[i]);
- }
+ switch (go->GetGoType())
+ {
+ case GAMEOBJECT_TYPE_GOOBER:
+ if (invoker)
+ if (eventId == BG_SA_EVENT_TITAN_RELIC_ACTIVATED)
+ TitanRelicActivated(invoker->ToPlayer());
+ break;
+ case GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING:
+ {
+ if (GateInfo const* gate = GetGate(obj->GetEntry()))
+ {
+ uint8 gateId = gate->GateId;
- if (eventType == go->GetGOInfo()->building.destroyedEvent)
- {
- if (go->GetGOInfo()->building.destroyedEvent == BG_SA_EVENT_ANCIENT_GATE_DESTROYED)
- SendWarningToAll(LANG_BG_SA_CHAMBER_BREACHED);
- else
- SendWarningToAll(LANG_BG_SA_WAS_DESTROYED, go->GetGOInfo()->name.c_str());
- }
+ // damaged
+ if (eventId == go->GetGOInfo()->building.damagedEvent)
+ {
+ GateStatus[gateId] = BG_SA_GATE_DAMAGED;
- if (eventType == go->GetGOInfo()->building.damageEvent)
- SendWarningToAll(LANG_BG_SA_IS_UNDER_ATTACK, go->GetGOInfo()->name.c_str());
+ if (Creature* c = obj->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f))
+ SendChatMessage(c, gate->DamagedText, invoker);
+
+ PlaySoundToAll(Attackers == TEAM_ALLIANCE ? SOUND_WALL_ATTACKED_ALLIANCE : SOUND_WALL_ATTACKED_HORDE);
+ }
+ // destroyed
+ else if (eventId == go->GetGOInfo()->building.destroyedEvent)
+ {
+ GateStatus[gate->GateId] = BG_SA_GATE_DESTROYED;
+ _gateDestroyed = true;
+
+ if (gateId < 5)
+ DelObject(gateId + 14);
+
+ if (Creature* c = obj->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f))
+ SendChatMessage(c, gate->DestroyedText, invoker);
+
+ PlaySoundToAll(Attackers == TEAM_ALLIANCE ? SOUND_WALL_DESTROYED_ALLIANCE : SOUND_WALL_DESTROYED_HORDE);
+
+ bool rewardHonor = true;
+ switch (gateId)
+ {
+ case BG_SA_GREEN_GATE:
+ if (GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED)
+ rewardHonor = false;
+ break;
+ case BG_SA_BLUE_GATE:
+ if (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED)
+ rewardHonor = false;
+ break;
+ case BG_SA_RED_GATE:
+ if (GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED)
+ rewardHonor = false;
+ break;
+ case BG_SA_PURPLE_GATE:
+ if (GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED)
+ rewardHonor = false;
+ break;
+ default:
+ break;
+ }
+
+ if (invoker)
+ {
+ if (Unit* unit = invoker->ToUnit())
+ {
+ if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
+ {
+ UpdatePlayerScore(player, SCORE_DESTROYED_WALL, 1);
+ if (rewardHonor)
+ UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(1));
+ }
+ }
+ }
+ }
+ else
+ break;
+
+ UpdateWorldState(gate->WorldState, GateStatus[gateId]);
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
}
void BattlegroundSA::HandleKillUnit(Creature* creature, Player* killer)
@@ -618,51 +692,8 @@ void BattlegroundSA::DemolisherStartState(bool start)
}
}
-void BattlegroundSA::DestroyGate(Player* player, GameObject* go)
+void BattlegroundSA::DestroyGate(Player* /*player*/, GameObject* /*go*/)
{
- uint32 i = getGateIdFromDamagedOrDestroyEventId(go->GetGOInfo()->building.destroyedEvent);
- if (!GateStatus[i])
- return;
-
- if (GameObject* g = GetBGObject(i))
- {
- if (g->GetGOValue()->Building.Health == 0)
- {
- GateStatus[i] = BG_SA_GATE_DESTROYED;
- uint32 uws = getWorldStateFromGateId(i);
- if (uws)
- UpdateWorldState(uws, GateStatus[i]);
- bool rewardHonor = true;
- gateDestroyed = true;
- switch (i)
- {
- case BG_SA_GREEN_GATE:
- if (GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED)
- rewardHonor = false;
- break;
- case BG_SA_BLUE_GATE:
- if (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED)
- rewardHonor = false;
- break;
- case BG_SA_RED_GATE:
- if (GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED)
- rewardHonor = false;
- break;
- case BG_SA_PURPLE_GATE:
- if (GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED)
- rewardHonor = false;
- break;
- default:
- break;
- }
-
- if (i < 5)
- DelObject(i + 14);
- UpdatePlayerScore(player, SCORE_DESTROYED_WALL, 1);
- if (rewardHonor)
- UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(1));
- }
- }
}
WorldSafeLocsEntry const* BattlegroundSA::GetClosestGraveYard(Player* player)
@@ -681,7 +712,7 @@ WorldSafeLocsEntry const* BattlegroundSA::GetClosestGraveYard(Player* player)
safeloc = BG_SA_GYEntries[BG_SA_DEFENDER_LAST_GY];
closest = sWorldSafeLocsStore.LookupEntry(safeloc);
- nearest = sqrt((closest->x - x)*(closest->x - x) + (closest->y - y)*(closest->y - y) + (closest->z - z)*(closest->z - z));
+ nearest = std::sqrt((closest->x - x)*(closest->x - x) + (closest->y - y)*(closest->y - y) + (closest->z - z)*(closest->z - z));
for (uint8 i = BG_SA_RIGHT_CAPTURABLE_GY; i < BG_SA_MAX_GY; i++)
{
@@ -689,7 +720,7 @@ WorldSafeLocsEntry const* BattlegroundSA::GetClosestGraveYard(Player* player)
continue;
ret = sWorldSafeLocsStore.LookupEntry(BG_SA_GYEntries[i]);
- dist = sqrt((ret->x - x)*(ret->x - x) + (ret->y - y)*(ret->y - y) + (ret->z - z)*(ret->z - z));
+ dist = std::sqrt((ret->x - x)*(ret->x - x) + (ret->y - y)*(ret->y - y) + (ret->z - z)*(ret->z - z));
if (dist < nearest)
{
closest = ret;
@@ -708,24 +739,24 @@ void BattlegroundSA::SendTime()
UpdateWorldState(BG_SA_TIMER_SEC_DECS, ((end_of_round%60000)%10000)/1000);
}
-void BattlegroundSA::EventPlayerClickedOnFlag(Player* Source, GameObject* target_obj)
+void BattlegroundSA::EventPlayerClickedOnFlag(Player* source, GameObject* go)
{
- switch (target_obj->GetEntry())
+ switch (go->GetEntry())
{
case 191307:
case 191308:
if (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED)
- CaptureGraveyard(BG_SA_LEFT_CAPTURABLE_GY, Source);
+ CaptureGraveyard(BG_SA_LEFT_CAPTURABLE_GY, source);
break;
case 191305:
case 191306:
if (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED)
- CaptureGraveyard(BG_SA_RIGHT_CAPTURABLE_GY, Source);
+ CaptureGraveyard(BG_SA_RIGHT_CAPTURABLE_GY, source);
break;
case 191310:
case 191309:
if ((GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED) && (GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED))
- CaptureGraveyard(BG_SA_CENTRAL_CAPTURABLE_GY, Source);
+ CaptureGraveyard(BG_SA_CENTRAL_CAPTURABLE_GY, source);
break;
default:
return;
@@ -746,7 +777,7 @@ void BattlegroundSA::CaptureGraveyard(BG_SA_Graveyards i, Player* Source)
return;
}
- AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], (GraveyardStatus[i] == TEAM_ALLIANCE? ALLIANCE : HORDE));
+ AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], GraveyardStatus[i]);
uint32 npc = 0;
uint32 flag = 0;
@@ -756,73 +787,64 @@ void BattlegroundSA::CaptureGraveyard(BG_SA_Graveyards i, Player* Source)
flag = BG_SA_LEFT_FLAG;
DelObject(flag);
AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0 : 1)),
- BG_SA_ObjSpawnlocs[flag][0], BG_SA_ObjSpawnlocs[flag][1],
- BG_SA_ObjSpawnlocs[flag][2], BG_SA_ObjSpawnlocs[flag][3], 0, 0, 0, 0, RESPAWN_ONE_DAY);
+ BG_SA_ObjSpawnlocs[flag], 0, 0, 0, 0, RESPAWN_ONE_DAY);
npc = BG_SA_NPC_RIGSPARK;
- AddCreature(BG_SA_NpcEntries[npc], npc, Attackers,
- BG_SA_NpcSpawnlocs[npc][0], BG_SA_NpcSpawnlocs[npc][1],
- BG_SA_NpcSpawnlocs[npc][2], BG_SA_NpcSpawnlocs[npc][3]);
+ if (Creature* rigspark = AddCreature(BG_SA_NpcEntries[npc], npc, BG_SA_NpcSpawnlocs[npc], Attackers))
+ rigspark->AI()->Talk(TEXT_SPARKLIGHT_RIGSPARK_SPAWN);
for (uint8 j = BG_SA_DEMOLISHER_7; j <= BG_SA_DEMOLISHER_8; j++)
{
- AddCreature(BG_SA_NpcEntries[j], j, (Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE),
- BG_SA_NpcSpawnlocs[j][0], BG_SA_NpcSpawnlocs[j][1],
- BG_SA_NpcSpawnlocs[j][2], BG_SA_NpcSpawnlocs[j][3], 600);
+ AddCreature(BG_SA_NpcEntries[j], j, BG_SA_NpcSpawnlocs[j], (Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE), 600);
if (Creature* dem = GetBGCreature(j))
dem->setFaction(BG_SA_Factions[Attackers]);
}
- UpdateWorldState(BG_SA_LEFT_GY_ALLIANCE, (GraveyardStatus[i] == TEAM_ALLIANCE ? 1 : 0));
- UpdateWorldState(BG_SA_LEFT_GY_HORDE, (GraveyardStatus[i] == TEAM_ALLIANCE ? 0 : 1));
- if (Source->GetTeamId() == TEAM_ALLIANCE)
- SendWarningToAll(LANG_BG_SA_A_GY_WEST);
- else
- SendWarningToAll(LANG_BG_SA_H_GY_WEST);
+ UpdateWorldState(BG_SA_LEFT_GY_ALLIANCE, GraveyardStatus[i] == TEAM_ALLIANCE);
+ UpdateWorldState(BG_SA_LEFT_GY_HORDE, GraveyardStatus[i] == TEAM_HORDE);
+
+ if (Creature* c = Source->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f))
+ SendChatMessage(c, Source->GetTeamId() == TEAM_ALLIANCE ? TEXT_WEST_GRAVEYARD_CAPTURED_A : TEXT_WEST_GRAVEYARD_CAPTURED_H, Source);
+
break;
case BG_SA_RIGHT_CAPTURABLE_GY:
flag = BG_SA_RIGHT_FLAG;
DelObject(flag);
AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0 : 1)),
- BG_SA_ObjSpawnlocs[flag][0], BG_SA_ObjSpawnlocs[flag][1],
- BG_SA_ObjSpawnlocs[flag][2], BG_SA_ObjSpawnlocs[flag][3], 0, 0, 0, 0, RESPAWN_ONE_DAY);
+ BG_SA_ObjSpawnlocs[flag], 0, 0, 0, 0, RESPAWN_ONE_DAY);
npc = BG_SA_NPC_SPARKLIGHT;
- AddCreature(BG_SA_NpcEntries[npc], npc, Attackers,
- BG_SA_NpcSpawnlocs[npc][0], BG_SA_NpcSpawnlocs[npc][1],
- BG_SA_NpcSpawnlocs[npc][2], BG_SA_NpcSpawnlocs[npc][3]);
+ if (Creature* sparklight = AddCreature(BG_SA_NpcEntries[npc], npc, BG_SA_NpcSpawnlocs[npc], Attackers))
+ sparklight->AI()->Talk(TEXT_SPARKLIGHT_RIGSPARK_SPAWN);
for (uint8 j = BG_SA_DEMOLISHER_5; j <= BG_SA_DEMOLISHER_6; j++)
{
- AddCreature(BG_SA_NpcEntries[j], j, (Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE),
- BG_SA_NpcSpawnlocs[j][0], BG_SA_NpcSpawnlocs[j][1],
- BG_SA_NpcSpawnlocs[j][2], BG_SA_NpcSpawnlocs[j][3], 600);
+ AddCreature(BG_SA_NpcEntries[j], j, BG_SA_NpcSpawnlocs[j], Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE, 600);
if (Creature* dem = GetBGCreature(j))
dem->setFaction(BG_SA_Factions[Attackers]);
}
- UpdateWorldState(BG_SA_RIGHT_GY_ALLIANCE, (GraveyardStatus[i] == TEAM_ALLIANCE ? 1 : 0));
- UpdateWorldState(BG_SA_RIGHT_GY_HORDE, (GraveyardStatus[i] == TEAM_ALLIANCE ? 0 : 1));
- if (Source->GetTeamId() == TEAM_ALLIANCE)
- SendWarningToAll(LANG_BG_SA_A_GY_EAST);
- else
- SendWarningToAll(LANG_BG_SA_H_GY_EAST);
+ UpdateWorldState(BG_SA_RIGHT_GY_ALLIANCE, GraveyardStatus[i] == TEAM_ALLIANCE);
+ UpdateWorldState(BG_SA_RIGHT_GY_HORDE, GraveyardStatus[i] == TEAM_HORDE);
+
+ if (Creature* c = Source->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f))
+ SendChatMessage(c, Source->GetTeamId() == TEAM_ALLIANCE ? TEXT_EAST_GRAVEYARD_CAPTURED_A : TEXT_EAST_GRAVEYARD_CAPTURED_H, Source);
+
break;
case BG_SA_CENTRAL_CAPTURABLE_GY:
flag = BG_SA_CENTRAL_FLAG;
DelObject(flag);
AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0 : 1)),
- BG_SA_ObjSpawnlocs[flag][0], BG_SA_ObjSpawnlocs[flag][1],
- BG_SA_ObjSpawnlocs[flag][2], BG_SA_ObjSpawnlocs[flag][3], 0, 0, 0, 0, RESPAWN_ONE_DAY);
+ BG_SA_ObjSpawnlocs[flag], 0, 0, 0, 0, RESPAWN_ONE_DAY);
+
+ UpdateWorldState(BG_SA_CENTER_GY_ALLIANCE, GraveyardStatus[i] == TEAM_ALLIANCE);
+ UpdateWorldState(BG_SA_CENTER_GY_HORDE, GraveyardStatus[i] == TEAM_HORDE);
+
+ if (Creature* c = Source->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f))
+ SendChatMessage(c, Source->GetTeamId() == TEAM_ALLIANCE ? TEXT_SOUTH_GRAVEYARD_CAPTURED_A : TEXT_SOUTH_GRAVEYARD_CAPTURED_H, Source);
- UpdateWorldState(BG_SA_CENTER_GY_ALLIANCE, (GraveyardStatus[i] == TEAM_ALLIANCE ? 1 : 0));
- UpdateWorldState(BG_SA_CENTER_GY_HORDE, (GraveyardStatus[i] == TEAM_ALLIANCE ? 0 : 1));
- if (Source->GetTeamId() == TEAM_ALLIANCE)
- SendWarningToAll(LANG_BG_SA_A_GY_SOUTH);
- else
- SendWarningToAll(LANG_BG_SA_H_GY_SOUTH);
break;
default:
ASSERT(false);
@@ -830,25 +852,28 @@ void BattlegroundSA::CaptureGraveyard(BG_SA_Graveyards i, Player* Source)
};
}
-void BattlegroundSA::EventPlayerUsedGO(Player* Source, GameObject* object)
+void BattlegroundSA::TitanRelicActivated(Player* clicker)
{
- if (object->GetEntry() == BG_SA_ObjEntries[BG_SA_TITAN_RELIC] &&
- GateStatus[BG_SA_ANCIENT_GATE] == BG_SA_GATE_DESTROYED &&
+ if (!clicker)
+ return;
+
+ if (GateStatus[BG_SA_ANCIENT_GATE] == BG_SA_GATE_DESTROYED &&
GateStatus[BG_SA_YELLOW_GATE] == BG_SA_GATE_DESTROYED &&
(GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED) &&
(GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED))
{
- if (Source->GetTeamId() == Attackers)
+ if (clicker->GetTeamId() == Attackers)
{
- if (Source->GetTeamId() == TEAM_ALLIANCE)
+ if (clicker->GetTeamId() == TEAM_ALLIANCE)
SendMessageToAll(LANG_BG_SA_ALLIANCE_CAPTURED_RELIC, CHAT_MSG_BG_SYSTEM_NEUTRAL);
- else SendMessageToAll(LANG_BG_SA_HORDE_CAPTURED_RELIC, CHAT_MSG_BG_SYSTEM_NEUTRAL);
+ else
+ SendMessageToAll(LANG_BG_SA_HORDE_CAPTURED_RELIC, CHAT_MSG_BG_SYSTEM_NEUTRAL);
if (Status == BG_SA_ROUND_ONE)
{
RoundScores[0].winner = Attackers;
RoundScores[0].time = TotalTime;
- //Achievement Storm the Beach (1310)
+ // Achievement Storm the Beach (1310)
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
{
if (Player* player = ObjectAccessor::FindPlayer(itr->first))
@@ -860,19 +885,25 @@ void BattlegroundSA::EventPlayerUsedGO(Player* Source, GameObject* object)
Status = BG_SA_SECOND_WARMUP;
TotalTime = 0;
ToggleTimer();
- SendWarningToAll(LANG_BG_SA_ROUND_ONE_END);
+
+ if (Creature* c = GetBGCreature(BG_SA_NPC_KANRETHAD))
+ SendChatMessage(c, TEXT_ROUND_1_FINISHED);
+
UpdateWaitTimer = 5000;
SignaledRoundTwo = false;
SignaledRoundTwoHalfMin = false;
InitSecondRound = true;
ResetObjs();
+ GetBgMap()->UpdateAreaDependentAuras();
+ CastSpellOnTeam(SPELL_END_OF_ROUND, ALLIANCE);
+ CastSpellOnTeam(SPELL_END_OF_ROUND, HORDE);
}
else if (Status == BG_SA_ROUND_TWO)
{
RoundScores[1].winner = Attackers;
RoundScores[1].time = TotalTime;
ToggleTimer();
- //Achievement Storm the Beach (1310)
+ // Achievement Storm the Beach (1310)
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
{
if (Player* player = ObjectAccessor::FindPlayer(itr->first))
@@ -894,18 +925,18 @@ void BattlegroundSA::EventPlayerUsedGO(Player* Source, GameObject* object)
void BattlegroundSA::ToggleTimer()
{
TimerEnabled = !TimerEnabled;
- UpdateWorldState(BG_SA_ENABLE_TIMER, (TimerEnabled) ? 1 : 0);
+ UpdateWorldState(BG_SA_ENABLE_TIMER, TimerEnabled);
}
void BattlegroundSA::EndBattleground(uint32 winner)
{
- //honor reward for winning
+ // honor reward for winning
if (winner == ALLIANCE)
RewardHonorToTeam(GetBonusHonorFromKill(1), ALLIANCE);
else if (winner == HORDE)
RewardHonorToTeam(GetBonusHonorFromKill(1), HORDE);
- //complete map_end rewards (even if no team wins)
+ // complete map_end rewards (even if no team wins)
RewardHonorToTeam(GetBonusHonorFromKill(2), ALLIANCE);
RewardHonorToTeam(GetBonusHonorFromKill(2), HORDE);
@@ -931,9 +962,7 @@ void BattlegroundSA::UpdateDemolisherSpawns()
{
if (DemoliserRespawnList[i] < getMSTime())
{
- Demolisher->Relocate(BG_SA_NpcSpawnlocs[i][0], BG_SA_NpcSpawnlocs[i][1],
- BG_SA_NpcSpawnlocs[i][2], BG_SA_NpcSpawnlocs[i][3]);
-
+ Demolisher->Relocate(BG_SA_NpcSpawnlocs[i]);
Demolisher->Respawn();
DemoliserRespawnList.erase(i);
}
@@ -981,8 +1010,25 @@ bool BattlegroundSA::CheckAchievementCriteriaMeet(uint32 criteriaId, Player cons
case BG_CRITERIA_CHECK_NOT_EVEN_A_SCRATCH:
return _allVehiclesAlive[GetTeamIndexByTeamId(source->GetTeam())];
case BG_CRITERIA_CHECK_DEFENSE_OF_THE_ANCIENTS:
- return source->GetTeamId() != Attackers && !gateDestroyed;
+ return source->GetTeamId() != Attackers && !_gateDestroyed;
}
return Battleground::CheckAchievementCriteriaMeet(criteriaId, source, target, miscValue);
}
+
+bool BattlegroundSA::IsSpellAllowed(uint32 spellId, Player const* /*player*/) const
+{
+ switch (spellId)
+ {
+ case SPELL_ALLIANCE_CONTROL_PHASE_SHIFT:
+ return Attackers == TEAM_HORDE;
+ case SPELL_HORDE_CONTROL_PHASE_SHIFT:
+ return Attackers == TEAM_ALLIANCE;
+ case SPELL_PREPARATION:
+ return Status == BG_SA_WARMUP || Status == BG_SA_SECOND_WARMUP;
+ default:
+ break;
+ }
+
+ return true;
+}
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h
index eb5e54231b5..627c23850d2 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h
@@ -20,21 +20,15 @@
#define __BATTLEGROUNDSA_H
#include "Battleground.h"
-
-struct BattlegroundSAScore : public BattlegroundScore
-{
- BattlegroundSAScore(): demolishers_destroyed(0), gates_destroyed(0) { }
- ~BattlegroundSAScore() { }
- uint8 demolishers_destroyed;
- uint8 gates_destroyed;
-};
+#include "BattlegroundScore.h"
+#include "Object.h"
#define BG_SA_FLAG_AMOUNT 3
#define BG_SA_DEMOLISHER_AMOUNT 4
enum BG_SA_Status
{
- BG_SA_NOTSTARTED = 0,
+ BG_SA_NOT_STARTED = 0,
BG_SA_WARMUP,
BG_SA_ROUND_ONE,
BG_SA_SECOND_WARMUP,
@@ -49,7 +43,7 @@ enum BG_SA_GateState
BG_SA_GATE_DESTROYED = 3
};
-enum BG_SA_EventIdGate
+enum BG_SA_EventIds
{
BG_SA_EVENT_BLUE_GATE_DAMAGED = 19040,
BG_SA_EVENT_BLUE_GATE_DESTROYED = 19045,
@@ -67,7 +61,42 @@ enum BG_SA_EventIdGate
BG_SA_EVENT_YELLOW_GATE_DESTROYED = 19049,
BG_SA_EVENT_ANCIENT_GATE_DAMAGED = 19836,
- BG_SA_EVENT_ANCIENT_GATE_DESTROYED = 19837
+ BG_SA_EVENT_ANCIENT_GATE_DESTROYED = 19837,
+
+ BG_SA_EVENT_TITAN_RELIC_ACTIVATED = 22097
+};
+
+enum SASpellIds
+{
+ SPELL_TELEPORT_DEFENDER = 52364,
+ SPELL_TELEPORT_ATTACKERS = 60178,
+ SPELL_END_OF_ROUND = 52459,
+ SPELL_REMOVE_SEAFORIUM = 59077,
+ SPELL_ALLIANCE_CONTROL_PHASE_SHIFT = 60027,
+ SPELL_HORDE_CONTROL_PHASE_SHIFT = 60028
+};
+
+enum SACreatureIds
+{
+ NPC_KANRETHAD = 29,
+ NPC_INVISIBLE_STALKER = 15214,
+ NPC_WORLD_TRIGGER = 22515,
+ NPC_WORLD_TRIGGER_LARGE_AOI_NOT_IMMUNE_PC_NPC = 23472,
+
+ NPC_ANTI_PERSONNAL_CANNON = 27894,
+ NPC_DEMOLISHER_SA = 28781,
+ NPC_RIGGER_SPARKLIGHT = 29260,
+ NPC_GORGRIL_RIGSPARK = 29262
+};
+
+enum SAGameObjectIds
+{
+ GO_GATE_OF_THE_GREEN_EMERALD = 190722,
+ GO_GATE_OF_THE_PURPLE_AMETHYST = 190723,
+ GO_GATE_OF_THE_BLUE_SAPPHIRE = 190724,
+ GO_GATE_OF_THE_RED_SUN = 190726,
+ GO_GATE_OF_THE_YELLOW_MOON = 190727,
+ GO_CHAMBER_OF_ANCIENT_RELICS = 192549,
};
enum BG_SA_Timers
@@ -77,7 +106,51 @@ enum BG_SA_Timers
BG_SA_ROUNDLENGTH = 600 * IN_MILLISECONDS
};
-enum BG_SA_WorldStates
+enum SASounds
+{
+ SOUND_GRAVEYARD_TAKEN_HORDE = 8174,
+ SOUND_GRAVEYARD_TAKEN_ALLIANCE = 8212,
+ SOUND_DEFEAT_HORDE = 15905,
+ SOUND_VICTORY_HORDE = 15906,
+ SOUND_VICTORY_ALLIANCE = 15907,
+ SOUND_DEFEAT_ALLIANCE = 15908,
+ SOUND_WALL_DESTROYED_ALLIANCE = 15909,
+ SOUND_WALL_DESTROYED_HORDE = 15910,
+ SOUND_WALL_ATTACKED_HORDE = 15911,
+ SOUND_WALL_ATTACKED_ALLIANCE = 15912
+};
+
+enum SATexts
+{
+ // Kanrethad
+ TEXT_ROUND_STARTED = 1,
+ TEXT_ROUND_1_FINISHED = 2,
+
+ // Rigger Sparklight / Gorgril Rigspark
+ TEXT_SPARKLIGHT_RIGSPARK_SPAWN = 1,
+
+ // World Trigger
+ TEXT_BLUE_GATE_UNDER_ATTACK = 1,
+ TEXT_GREEN_GATE_UNDER_ATTACK = 2,
+ TEXT_RED_GATE_UNDER_ATTACK = 3,
+ TEXT_PURPLE_GATE_UNDER_ATTACK = 4,
+ TEXT_YELLOW_GATE_UNDER_ATTACK = 5,
+ TEXT_YELLOW_GATE_DESTROYED = 6,
+ TEXT_PURPLE_GATE_DESTROYED = 7,
+ TEXT_RED_GATE_DESTROYED = 8,
+ TEXT_GREEN_GATE_DESTROYED = 9,
+ TEXT_BLUE_GATE_DESTROYED = 10,
+ TEXT_EAST_GRAVEYARD_CAPTURED_A = 11,
+ TEXT_WEST_GRAVEYARD_CAPTURED_A = 12,
+ TEXT_SOUTH_GRAVEYARD_CAPTURED_A = 13,
+ TEXT_EAST_GRAVEYARD_CAPTURED_H = 14,
+ TEXT_WEST_GRAVEYARD_CAPTURED_H = 15,
+ TEXT_SOUTH_GRAVEYARD_CAPTURED_H = 16,
+ TEXT_ANCIENT_GATE_UNDER_ATTACK = 17,
+ TEXT_ANCIENT_GATE_DESTROYED = 18
+};
+
+enum SAWorldStates
{
BG_SA_TIMER_MINS = 3559,
BG_SA_TIMER_SEC_TENS = 3560,
@@ -102,20 +175,12 @@ enum BG_SA_WorldStates
BG_SA_RIGHT_GY_HORDE = 3632,
BG_SA_LEFT_GY_HORDE = 3633,
BG_SA_CENTER_GY_HORDE = 3634,
- BG_SA_BONUS_TIMER = 0xdf3,
+ BG_SA_BONUS_TIMER = 3571,
BG_SA_ENABLE_TIMER = 3564
};
-enum npc
-{
- NPC_ANTI_PERSONNAL_CANNON = 27894,
- NPC_DEMOLISHER_SA = 28781,
- NPC_RIGGER_SPARKLIGHT = 29260,
- NPC_GORGRIL_RIGSPARK = 29262
-};
-
enum BG_SA_NPCs
- {
+{
BG_SA_GUN_1 = 0,
BG_SA_GUN_2,
BG_SA_GUN_3,
@@ -126,11 +191,6 @@ enum BG_SA_NPCs
BG_SA_GUN_8,
BG_SA_GUN_9,
BG_SA_GUN_10,
- BG_SA_NPC_TRIGGER_1,
- BG_SA_NPC_TRIGGER_2,
- BG_SA_NPC_TRIGGER_3,
- BG_SA_NPC_TRIGGER_4,
- BG_SA_NPC_TRIGGER_5,
BG_SA_DEMOLISHER_1,
BG_SA_DEMOLISHER_2,
BG_SA_DEMOLISHER_3,
@@ -141,8 +201,9 @@ enum BG_SA_NPCs
BG_SA_DEMOLISHER_8,
BG_SA_NPC_SPARKLIGHT,
BG_SA_NPC_RIGSPARK,
+ BG_SA_NPC_KANRETHAD,
BG_SA_MAXNPC
- };
+};
enum BG_SA_Boat
{
@@ -164,12 +225,6 @@ uint32 const BG_SA_NpcEntries[BG_SA_MAXNPC] =
NPC_ANTI_PERSONNAL_CANNON,
NPC_ANTI_PERSONNAL_CANNON,
NPC_ANTI_PERSONNAL_CANNON,
- // Triggers
- 23472,
- 23472,
- 23472,
- 23472,
- 23472,
// 4 beach demolishers
NPC_DEMOLISHER_SA,
NPC_DEMOLISHER_SA,
@@ -182,10 +237,12 @@ uint32 const BG_SA_NpcEntries[BG_SA_MAXNPC] =
NPC_DEMOLISHER_SA,
// Used Demolisher Salesman
NPC_RIGGER_SPARKLIGHT,
- NPC_GORGRIL_RIGSPARK
+ NPC_GORGRIL_RIGSPARK,
+ // Kanrethad
+ NPC_KANRETHAD
};
-float const BG_SA_NpcSpawnlocs[BG_SA_MAXNPC + BG_SA_DEMOLISHER_AMOUNT][4] =
+Position const BG_SA_NpcSpawnlocs[BG_SA_MAXNPC] =
{
// Cannons
{ 1436.429f, 110.05f, 41.407f, 5.4f },
@@ -198,12 +255,6 @@ float const BG_SA_NpcSpawnlocs[BG_SA_MAXNPC + BG_SA_DEMOLISHER_AMOUNT][4] =
{ 1249.634f, -224.189f, 66.72f, 0.635f },
{ 1236.213f, 92.287f, 64.965f, 5.751f },
{ 1215.11f, 57.772f, 64.739f, 5.78f },
- // Triggers
- { 1453.49f, -250.453f, 30.896f, 4.2883f},
- { 1377.05f, 97.036f, 30.8605f, 2.46539f},
- { 1186.05f, 58.8048f, 56.5491f, 2.75992f},
- { 1042.83f, -72.839f, 84.8145f, 3.58615f},
- { 1233.62f, -250.49f, 55.4036f, 3.7016f},
// Demolishers
{ 1611.597656f, -117.270073f, 8.719355f, 2.513274f},
{ 1575.562500f, -158.421875f, 5.024450f, 2.129302f},
@@ -216,7 +267,8 @@ float const BG_SA_NpcSpawnlocs[BG_SA_MAXNPC + BG_SA_DEMOLISHER_AMOUNT][4] =
{ 1404.809570f, 197.027237f, 32.046032f, 3.605401f},
// Npcs
{ 1348.644165f, -298.786469f, 31.080130f, 1.710423f},
- { 1358.191040f, 195.527786f, 31.018187f, 4.171337f}
+ { 1358.191040f, 195.527786f, 31.018187f, 4.171337f},
+ { 841.921f, -134.194f, 196.838f, 6.23082f }
};
enum BG_SA_Objects
@@ -250,7 +302,7 @@ enum BG_SA_Objects
BG_SA_MAXOBJ = BG_SA_BOMB+68
};
-float const BG_SA_ObjSpawnlocs[BG_SA_MAXOBJ][4] =
+Position const BG_SA_ObjSpawnlocs[BG_SA_MAXOBJ] =
{
{ 1411.57f, 108.163f, 28.692f, 5.441f },
{ 1055.452f, -108.1f, 82.134f, 0.034f },
@@ -430,12 +482,66 @@ float const BG_SA_GYOrientation[BG_SA_MAX_GY] =
6.148f, // defender last GY
};
+struct GateInfo
+{
+ uint8 GateId;
+ uint32 GameObjectId;
+ uint32 WorldState;
+ uint8 DamagedText;
+ uint8 DestroyedText;
+};
+
+#define MAX_GATES 6
+GateInfo const Gates[MAX_GATES] =
+{
+ { BG_SA_GREEN_GATE, GO_GATE_OF_THE_GREEN_EMERALD, BG_SA_GREEN_GATEWS, TEXT_GREEN_GATE_UNDER_ATTACK, TEXT_GREEN_GATE_DESTROYED },
+ { BG_SA_YELLOW_GATE, GO_GATE_OF_THE_YELLOW_MOON, BG_SA_YELLOW_GATEWS, TEXT_YELLOW_GATE_UNDER_ATTACK, TEXT_YELLOW_GATE_DESTROYED },
+ { BG_SA_BLUE_GATE, GO_GATE_OF_THE_BLUE_SAPPHIRE, BG_SA_BLUE_GATEWS, TEXT_BLUE_GATE_UNDER_ATTACK, TEXT_BLUE_GATE_DESTROYED },
+ { BG_SA_RED_GATE, GO_GATE_OF_THE_RED_SUN, BG_SA_RED_GATEWS, TEXT_RED_GATE_UNDER_ATTACK, TEXT_RED_GATE_DESTROYED },
+ { BG_SA_PURPLE_GATE, GO_GATE_OF_THE_PURPLE_AMETHYST, BG_SA_PURPLE_GATEWS, TEXT_PURPLE_GATE_UNDER_ATTACK, TEXT_PURPLE_GATE_DESTROYED },
+ { BG_SA_ANCIENT_GATE, GO_CHAMBER_OF_ANCIENT_RELICS, BG_SA_ANCIENT_GATEWS, TEXT_ANCIENT_GATE_UNDER_ATTACK, TEXT_ANCIENT_GATE_DESTROYED }
+};
+
struct BG_SA_RoundScore
{
TeamId winner;
uint32 time;
};
+struct BattlegroundSAScore final : public BattlegroundScore
+{
+ friend class BattlegroundSA;
+
+ protected:
+ BattlegroundSAScore(uint64 playerGuid) : BattlegroundScore(playerGuid), DemolishersDestroyed(0), GatesDestroyed(0) { }
+
+ void UpdateScore(uint32 type, uint32 value) override
+ {
+ switch (type)
+ {
+ case SCORE_DESTROYED_DEMOLISHER:
+ DemolishersDestroyed += value;
+ break;
+ case SCORE_DESTROYED_WALL:
+ GatesDestroyed += value;
+ break;
+ default:
+ BattlegroundScore::UpdateScore(type, value);
+ break;
+ }
+ }
+
+ void BuildObjectivesBlock(WorldPacket& data) final override
+ {
+ data << uint32(2); // Objectives Count
+ data << uint32(DemolishersDestroyed);
+ data << uint32(GatesDestroyed);
+ }
+
+ uint32 DemolishersDestroyed;
+ uint32 GatesDestroyed;
+};
+
/// Class for manage Strand of Ancient battleground
class BattlegroundSA : public Battleground
{
@@ -448,105 +554,53 @@ class BattlegroundSA : public Battleground
* -Update timer
* -Round switch
*/
- void PostUpdateImpl(uint32 diff);
+ void PostUpdateImpl(uint32 diff) override;
/* inherited from BattlegroundClass */
/// Called when a player join battle
- void AddPlayer(Player* player);
+ void AddPlayer(Player* player) override;
/// Called when battle start
- void StartingEventCloseDoors();
- void StartingEventOpenDoors();
+ void StartingEventCloseDoors() override;
+ void StartingEventOpenDoors() override;
/// Called for ini battleground, after that the first player be entered
- bool SetupBattleground();
- void Reset();
+ bool SetupBattleground() override;
+ void Reset() override;
/// Called for generate packet contain worldstate data
- void FillInitialWorldStates(WorldPacket& data);
- /// Called when a player deal damage to building (door)
- void EventPlayerDamagedGO(Player* player, GameObject* go, uint32 eventType);
+ void FillInitialWorldStates(WorldPacket& data) override;
/// Called when a player kill a unit in bg
- void HandleKillUnit(Creature* creature, Player* killer);
+ void HandleKillUnit(Creature* creature, Player* killer) override;
/// Return the nearest graveyard where player can respawn
- WorldSafeLocsEntry const* GetClosestGraveYard(Player* player);
+ WorldSafeLocsEntry const* GetClosestGraveYard(Player* player) override;
+ /// Called when someone activates an event
+ void ProcessEvent(WorldObject* /*obj*/, uint32 /*eventId*/, WorldObject* /*invoker*/ = NULL) override;
/// Called when a player click on flag (graveyard flag)
- void EventPlayerClickedOnFlag(Player* Source, GameObject* target_obj);
- /// Called when a player use a gamobject (relic)
- void EventPlayerUsedGO(Player* Source, GameObject* object);
- /// Return gate id, relative to bg data, according to gameobject id
- uint32 getGateIdFromDamagedOrDestroyEventId(uint32 id)
- {
- switch (id)
- {
- // Green gate
- case BG_SA_EVENT_GREEN_GATE_DAMAGED:
- case BG_SA_EVENT_GREEN_GATE_DESTROYED:
- return BG_SA_GREEN_GATE;
- // Blue gate
- case BG_SA_EVENT_BLUE_GATE_DAMAGED:
- case BG_SA_EVENT_BLUE_GATE_DESTROYED:
- return BG_SA_BLUE_GATE;
- // Red gate
- case BG_SA_EVENT_RED_GATE_DAMAGED:
- case BG_SA_EVENT_RED_GATE_DESTROYED:
- return BG_SA_RED_GATE;
- // Purple gate
- case BG_SA_EVENT_PURPLE_GATE_DAMAGED:
- case BG_SA_EVENT_PURPLE_GATE_DESTROYED:
- return BG_SA_PURPLE_GATE;
- // Yellow gate
- case BG_SA_EVENT_YELLOW_GATE_DAMAGED:
- case BG_SA_EVENT_YELLOW_GATE_DESTROYED:
- return BG_SA_YELLOW_GATE;
- // Ancient gate
- case BG_SA_EVENT_ANCIENT_GATE_DAMAGED:
- case BG_SA_EVENT_ANCIENT_GATE_DESTROYED:
- return BG_SA_ANCIENT_GATE;
- default:
- break;
- }
- return 0;
- }
- /// Return worldstate id, according to door id
- uint32 getWorldStateFromGateId(uint32 id)
+ void EventPlayerClickedOnFlag(Player* source, GameObject* go) override;
+ /// Called when a player clicked on relic
+ void TitanRelicActivated(Player* clicker);
+
+ /// Return GateInfo, relative to bg data, according to gameobject entry
+ GateInfo const* GetGate(uint32 entry)
{
- switch (id)
- {
- case BG_SA_GREEN_GATE:
- return BG_SA_GREEN_GATEWS;
- case BG_SA_YELLOW_GATE:
- return BG_SA_YELLOW_GATEWS;
- case BG_SA_BLUE_GATE:
- return BG_SA_BLUE_GATEWS;
- case BG_SA_RED_GATE:
- return BG_SA_RED_GATEWS;
- case BG_SA_PURPLE_GATE:
- return BG_SA_PURPLE_GATEWS;
- case BG_SA_ANCIENT_GATE:
- return BG_SA_ANCIENT_GATEWS;
- default:
- break;
- }
- return 0;
+ for (uint8 i = 0; i < MAX_GATES; ++i)
+ if (Gates[i].GameObjectId == entry)
+ return &Gates[i];
+ return NULL;
}
/// Called on battleground ending
- void EndBattleground(uint32 winner);
+ void EndBattleground(uint32 winner) override;
- /// CAlled when a player leave battleground
- void RemovePlayer(Player* player, uint64 guid, uint32 team);
- void HandleAreaTrigger(Player* Source, uint32 Trigger);
+ /// Called when a player leave battleground
+ void RemovePlayer(Player* player, uint64 guid, uint32 team) override;
+ void HandleAreaTrigger(Player* Source, uint32 Trigger) override;
/* Scorekeeping */
- /// Update score board
- void UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor = true);
-
- // Achievement: Defense of the Ancients
- bool gateDestroyed;
// Achievement: Not Even a Scratch
- bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const* source, Unit const* target = NULL, uint32 miscvalue1 = 0);
+ bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const* source, Unit const* target = NULL, uint32 miscValue = 0) override;
- /// Id of attacker team
- TeamId Attackers;
+ // Control Phase Shift
+ bool IsSpellAllowed(uint32 spellId, Player const* player) const override;
private:
@@ -576,7 +630,7 @@ class BattlegroundSA : public Battleground
* -Update worldstate
* -Delete gameobject in front of door (lighting object, with different colours for each door)
*/
- void DestroyGate(Player* player, GameObject* go);
+ void DestroyGate(Player* player, GameObject* go) override;
/// Update timer worldstate
void SendTime();
/**
@@ -600,6 +654,9 @@ class BattlegroundSA : public Battleground
/// Send packet to player for destroy boats (client part)
void SendTransportsRemove(Player* player);
+ /// Id of attacker team
+ TeamId Attackers;
+
/// Totale elapsed time of current round
uint32 TotalTime;
/// Max time of round
@@ -607,7 +664,7 @@ class BattlegroundSA : public Battleground
/// For know if boats has start moving or not yet
bool ShipsStarted;
/// Status of each gate (Destroy/Damage/Intact)
- BG_SA_GateState GateStatus[6];
+ BG_SA_GateState GateStatus[MAX_GATES];
/// Statu of battle (Start or not, and what round)
BG_SA_Status Status;
/// Team witch conntrol each graveyard
@@ -626,6 +683,9 @@ class BattlegroundSA : public Battleground
bool InitSecondRound;
std::map<uint32/*id*/, uint32/*timer*/> DemoliserRespawnList;
+ // Achievement: Defense of the Ancients
+ bool _gateDestroyed;
+
// Achievement: Not Even a Scratch
bool _allVehiclesAlive[BG_TEAMS_COUNT];
};
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp
index 92d56bbf5f0..c50669b137e 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp
@@ -82,7 +82,7 @@ void BattlegroundWS::PostUpdateImpl(uint32 diff)
if (GetTeamScore(TEAM_ALLIANCE) == 0)
{
if (GetTeamScore(TEAM_HORDE) == 0) // No one scored - result is tie
- EndBattleground(WINNER_NONE);
+ EndBattleground(0);
else // Horde has more points and thus wins
EndBattleground(HORDE);
}
@@ -229,10 +229,7 @@ void BattlegroundWS::StartingEventOpenDoors()
void BattlegroundWS::AddPlayer(Player* player)
{
Battleground::AddPlayer(player);
- //create score and add it to map, default values are set in constructor
- BattlegroundWGScore* sc = new BattlegroundWGScore;
-
- PlayerScores[player->GetGUID()] = sc;
+ PlayerScores[player->GetGUIDLow()] = new BattlegroundWGScore(player->GetGUID());
}
void BattlegroundWS::RespawnFlag(uint32 Team, bool captured)
@@ -711,14 +708,14 @@ bool BattlegroundWS::SetupBattleground()
}
WorldSafeLocsEntry const* sg = sWorldSafeLocsStore.LookupEntry(WS_GRAVEYARD_MAIN_ALLIANCE);
- if (!sg || !AddSpiritGuide(WS_SPIRIT_MAIN_ALLIANCE, sg->x, sg->y, sg->z, 3.124139f, ALLIANCE))
+ if (!sg || !AddSpiritGuide(WS_SPIRIT_MAIN_ALLIANCE, sg->x, sg->y, sg->z, 3.124139f, TEAM_ALLIANCE))
{
TC_LOG_ERROR("sql.sql", "BatteGroundWS: Failed to spawn Alliance spirit guide! Battleground not created!");
return false;
}
sg = sWorldSafeLocsStore.LookupEntry(WS_GRAVEYARD_MAIN_HORDE);
- if (!sg || !AddSpiritGuide(WS_SPIRIT_MAIN_HORDE, sg->x, sg->y, sg->z, 3.193953f, HORDE))
+ if (!sg || !AddSpiritGuide(WS_SPIRIT_MAIN_HORDE, sg->x, sg->y, sg->z, 3.193953f, TEAM_HORDE))
{
TC_LOG_ERROR("sql.sql", "BatteGroundWS: Failed to spawn Horde spirit guide! Battleground not created!");
return false;
@@ -790,26 +787,23 @@ void BattlegroundWS::HandleKillPlayer(Player* player, Player* killer)
Battleground::HandleKillPlayer(player, killer);
}
-void BattlegroundWS::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor)
+bool BattlegroundWS::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor)
{
- BattlegroundScoreMap::iterator itr = PlayerScores.find(player->GetGUID());
- if (itr == PlayerScores.end()) // player not found
- return;
+ if (!Battleground::UpdatePlayerScore(player, type, value, doAddHonor))
+ return false;
switch (type)
{
case SCORE_FLAG_CAPTURES: // flags captured
- ((BattlegroundWGScore*)itr->second)->FlagCaptures += value;
player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, WS_OBJECTIVE_CAPTURE_FLAG);
break;
case SCORE_FLAG_RETURNS: // flags returned
- ((BattlegroundWGScore*)itr->second)->FlagReturns += value;
player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, WS_OBJECTIVE_RETURN_FLAG);
break;
default:
- Battleground::UpdatePlayerScore(player, type, value, doAddHonor);
break;
}
+ return true;
}
WorldSafeLocsEntry const* BattlegroundWS::GetClosestGraveYard(Player* player)
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h
index c6c25ec52de..d29715c982b 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h
@@ -20,6 +20,7 @@
#define __BATTLEGROUNDWS_H
#include "Battleground.h"
+#include "BattlegroundScore.h"
enum BG_WS_TimerOrScore
{
@@ -146,12 +147,38 @@ enum BG_WS_Objectives
#define WS_EVENT_START_BATTLE 8563
-struct BattlegroundWGScore : public BattlegroundScore
+struct BattlegroundWGScore final : public BattlegroundScore
{
- BattlegroundWGScore() : FlagCaptures(0), FlagReturns(0) { }
- ~BattlegroundWGScore() { }
- uint32 FlagCaptures;
- uint32 FlagReturns;
+ friend class BattlegroundWS;
+
+ protected:
+ BattlegroundWGScore(uint64 playerGuid) : BattlegroundScore(playerGuid), FlagCaptures(0), FlagReturns(0) { }
+
+ void UpdateScore(uint32 type, uint32 value) override
+ {
+ switch (type)
+ {
+ case SCORE_FLAG_CAPTURES: // Flags captured
+ FlagCaptures += value;
+ break;
+ case SCORE_FLAG_RETURNS: // Flags returned
+ FlagReturns += value;
+ break;
+ default:
+ BattlegroundScore::UpdateScore(type, value);
+ break;
+ }
+ }
+
+ void BuildObjectivesBlock(WorldPacket& data) final override
+ {
+ data << uint32(2); // Objectives Count
+ data << uint32(FlagCaptures);
+ data << uint32(FlagReturns);
+ }
+
+ uint32 FlagCaptures;
+ uint32 FlagReturns;
};
class BattlegroundWS : public Battleground
@@ -162,12 +189,12 @@ class BattlegroundWS : public Battleground
~BattlegroundWS();
/* inherited from BattlegroundClass */
- void AddPlayer(Player* player);
- void StartingEventCloseDoors();
- void StartingEventOpenDoors();
+ void AddPlayer(Player* player) override;
+ void StartingEventCloseDoors() override;
+ void StartingEventOpenDoors() override;
/* BG Flags */
- uint64 GetFlagPickerGUID(int32 team) const
+ uint64 GetFlagPickerGUID(int32 team) const override
{
if (team == TEAM_ALLIANCE || team == TEAM_HORDE)
return m_FlagKeepers[team];
@@ -182,40 +209,40 @@ class BattlegroundWS : public Battleground
uint8 GetFlagState(uint32 team) { return _flagState[GetTeamIndexByTeamId(team)]; }
/* Battleground Events */
- void EventPlayerDroppedFlag(Player* player);
- void EventPlayerClickedOnFlag(Player* player, GameObject* target_obj);
+ void EventPlayerDroppedFlag(Player* player) override;
+ void EventPlayerClickedOnFlag(Player* player, GameObject* target_obj) override;
void EventPlayerCapturedFlag(Player* player);
- void RemovePlayer(Player* player, uint64 guid, uint32 team);
- void HandleAreaTrigger(Player* player, uint32 trigger);
- void HandleKillPlayer(Player* player, Player* killer);
- bool SetupBattleground();
- void Reset();
- void EndBattleground(uint32 winner);
- WorldSafeLocsEntry const* GetClosestGraveYard(Player* player);
+ void RemovePlayer(Player* player, uint64 guid, uint32 team) override;
+ void HandleAreaTrigger(Player* player, uint32 trigger) override;
+ void HandleKillPlayer(Player* player, Player* killer) override;
+ bool SetupBattleground() override;
+ void Reset() override;
+ void EndBattleground(uint32 winner) override;
+ WorldSafeLocsEntry const* GetClosestGraveYard(Player* player) override;
void UpdateFlagState(uint32 team, uint32 value);
void SetLastFlagCapture(uint32 team) { _lastFlagCaptureTeam = team; }
void UpdateTeamScore(uint32 team);
- void UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true);
- void SetDroppedFlagGUID(uint64 guid, int32 team = -1)
+ bool UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true) override;
+ void SetDroppedFlagGUID(uint64 guid, int32 team = -1) override
{
if (team == TEAM_ALLIANCE || team == TEAM_HORDE)
m_DroppedFlagGUID[team] = guid;
}
uint64 GetDroppedFlagGUID(uint32 TeamID) { return m_DroppedFlagGUID[GetTeamIndexByTeamId(TeamID)];}
- void FillInitialWorldStates(WorldPacket& data);
+ void FillInitialWorldStates(WorldPacket& data) override;
/* Scorekeeping */
void AddPoint(uint32 TeamID, uint32 Points = 1) { m_TeamScores[GetTeamIndexByTeamId(TeamID)] += Points; }
void SetTeamPoint(uint32 TeamID, uint32 Points = 0) { m_TeamScores[GetTeamIndexByTeamId(TeamID)] = Points; }
void RemovePoint(uint32 TeamID, uint32 Points = 1) { m_TeamScores[GetTeamIndexByTeamId(TeamID)] -= Points; }
- uint32 GetPrematureWinner();
+ uint32 GetPrematureWinner() override;
/* Achievements*/
- bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const* source, Unit const* target = NULL, uint32 miscvalue1 = 0);
+ bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const* source, Unit const* target = nullptr, uint32 miscvalue1 = 0) override;
private:
uint64 m_FlagKeepers[2]; // 0 - alliance, 1 - horde
@@ -233,6 +260,6 @@ class BattlegroundWS : public Battleground
uint8 _flagDebuffState; // 0 - no debuffs, 1 - focused assault, 2 - brutal assault
uint8 _minutesElapsed;
- void PostUpdateImpl(uint32 diff);
+ void PostUpdateImpl(uint32 diff) override;
};
#endif
diff --git a/src/server/game/CMakeLists.txt b/src/server/game/CMakeLists.txt
index bf46c1fd7c6..532900c0438 100644
--- a/src/server/game/CMakeLists.txt
+++ b/src/server/game/CMakeLists.txt
@@ -103,7 +103,9 @@ set(game_STAT_SRCS
include_directories(
${CMAKE_BINARY_DIR}
${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour
+ ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour/Include
${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast
+ ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast/Include
${CMAKE_SOURCE_DIR}/dep/g3dlite/include
${CMAKE_SOURCE_DIR}/dep/SFMT
${CMAKE_SOURCE_DIR}/dep/zlib
@@ -121,6 +123,7 @@ include_directories(
${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic/LinkedReference
${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic
${CMAKE_SOURCE_DIR}/src/server/shared/Logging
+ ${CMAKE_SOURCE_DIR}/src/server/shared/Networking
${CMAKE_SOURCE_DIR}/src/server/shared/Packets
${CMAKE_SOURCE_DIR}/src/server/shared/Threading
${CMAKE_SOURCE_DIR}/src/server/shared/Utilities
@@ -195,7 +198,6 @@ include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/Weather
${CMAKE_CURRENT_SOURCE_DIR}/World
${CMAKE_SOURCE_DIR}/src/server/scripts/PrecompiledHeaders
- ${ACE_INCLUDE_DIR}
${MYSQL_INCLUDE_DIR}
${OPENSSL_INCLUDE_DIR}
)
diff --git a/src/server/game/Calendar/CalendarMgr.cpp b/src/server/game/Calendar/CalendarMgr.cpp
index 52ed50f3948..92f19c0adeb 100644
--- a/src/server/game/Calendar/CalendarMgr.cpp
+++ b/src/server/game/Calendar/CalendarMgr.cpp
@@ -17,7 +17,6 @@
#include "CalendarMgr.h"
#include "QueryResult.h"
-#include "DatabaseEnv.h"
#include "Log.h"
#include "Player.h"
#include "GuildMgr.h"
@@ -128,6 +127,12 @@ void CalendarMgr::AddEvent(CalendarEvent* calendarEvent, CalendarSendEventType s
void CalendarMgr::AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite)
{
+ SQLTransaction dummy;
+ AddInvite(calendarEvent, invite, dummy);
+}
+
+void CalendarMgr::AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite, SQLTransaction& trans)
+{
if (!calendarEvent->IsGuildAnnouncement())
SendCalendarEventInvite(*invite);
@@ -137,7 +142,7 @@ void CalendarMgr::AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite
if (!calendarEvent->IsGuildAnnouncement())
{
_invites[invite->GetEventId()].push_back(invite);
- UpdateInvite(invite);
+ UpdateInvite(invite, trans);
}
}
@@ -221,7 +226,6 @@ void CalendarMgr::RemoveInvite(uint64 inviteId, uint64 eventId, uint64 /*remover
void CalendarMgr::UpdateEvent(CalendarEvent* calendarEvent)
{
- SQLTransaction trans = CharacterDatabase.BeginTransaction();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_CALENDAR_EVENT);
stmt->setUInt64(0, calendarEvent->GetEventId());
stmt->setUInt32(1, GUID_LOPART(calendarEvent->GetCreatorGUID()));
@@ -232,13 +236,17 @@ void CalendarMgr::UpdateEvent(CalendarEvent* calendarEvent)
stmt->setUInt32(6, uint32(calendarEvent->GetEventTime()));
stmt->setUInt32(7, calendarEvent->GetFlags());
stmt->setUInt32(8, calendarEvent->GetTimeZoneTime()); // correct?
- trans->Append(stmt);
- CharacterDatabase.CommitTransaction(trans);
+ CharacterDatabase.Execute(stmt);
}
void CalendarMgr::UpdateInvite(CalendarInvite* invite)
{
- SQLTransaction trans = CharacterDatabase.BeginTransaction();
+ SQLTransaction dummy;
+ UpdateInvite(invite, dummy);
+}
+
+void CalendarMgr::UpdateInvite(CalendarInvite* invite, SQLTransaction& trans)
+{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_CALENDAR_INVITE);
stmt->setUInt64(0, invite->GetInviteId());
stmt->setUInt64(1, invite->GetEventId());
@@ -248,8 +256,7 @@ void CalendarMgr::UpdateInvite(CalendarInvite* invite)
stmt->setUInt32(5, uint32(invite->GetStatusTime()));
stmt->setUInt8(6, invite->GetRank());
stmt->setString(7, invite->GetText());
- trans->Append(stmt);
- CharacterDatabase.CommitTransaction(trans);
+ CharacterDatabase.ExecuteOrAppend(trans, stmt);
}
void CalendarMgr::RemoveAllPlayerEventsAndInvites(uint64 guid)
@@ -434,8 +441,8 @@ void CalendarMgr::SendCalendarEventInvite(CalendarInvite const& invite)
if (!calendarEvent) // Pre-invite
{
- if (Player* player = ObjectAccessor::FindPlayer(invite.GetSenderGUID()))
- player->SendDirectMessage(&data);
+ if (Player* playerSender = ObjectAccessor::FindPlayer(invite.GetSenderGUID()))
+ playerSender->SendDirectMessage(&data);
}
else
{
@@ -629,7 +636,7 @@ void CalendarMgr::SendCalendarCommandResult(uint64 guid, CalendarError err, char
}
}
-void CalendarMgr::SendPacketToAllEventRelatives(WorldPacket packet, CalendarEvent const& calendarEvent)
+void CalendarMgr::SendPacketToAllEventRelatives(WorldPacket& packet, CalendarEvent const& calendarEvent)
{
// Send packet to all guild members
if (calendarEvent.IsGuildEvent() || calendarEvent.IsGuildAnnouncement())
diff --git a/src/server/game/Calendar/CalendarMgr.h b/src/server/game/Calendar/CalendarMgr.h
index da185d519d5..9bdb7c0a187 100644
--- a/src/server/game/Calendar/CalendarMgr.h
+++ b/src/server/game/Calendar/CalendarMgr.h
@@ -18,8 +18,8 @@
#ifndef TRINITY_CALENDARMGR_H
#define TRINITY_CALENDARMGR_H
-#include <ace/Singleton.h>
#include "Common.h"
+#include "DatabaseEnv.h"
#include "WorldPacket.h"
enum CalendarMailAnswers
@@ -243,8 +243,8 @@ struct CalendarEvent
void SetTimeZoneTime(time_t timezoneTime) { _timezoneTime = timezoneTime; }
time_t GetTimeZoneTime() const { return _timezoneTime; }
- bool IsGuildEvent() const { return _flags & CALENDAR_FLAG_GUILD_EVENT; }
- bool IsGuildAnnouncement() const { return _flags & CALENDAR_FLAG_WITHOUT_INVITES; }
+ bool IsGuildEvent() const { return (_flags & CALENDAR_FLAG_GUILD_EVENT) != 0; }
+ bool IsGuildAnnouncement() const { return (_flags & CALENDAR_FLAG_WITHOUT_INVITES) != 0; }
std::string BuildCalendarMailSubject(uint64 remover) const;
std::string BuildCalendarMailBody() const;
@@ -267,8 +267,6 @@ typedef std::map<uint64 /* eventId */, CalendarInviteStore > CalendarEventInvite
class CalendarMgr
{
- friend class ACE_Singleton<CalendarMgr, ACE_Null_Mutex>;
-
private:
CalendarMgr();
~CalendarMgr();
@@ -282,6 +280,12 @@ class CalendarMgr
uint64 _maxInviteId;
public:
+ static CalendarMgr* instance()
+ {
+ static CalendarMgr instance;
+ return &instance;
+ }
+
void LoadFromDB();
CalendarEvent* GetEvent(uint64 eventId) const;
@@ -305,8 +309,10 @@ class CalendarMgr
void UpdateEvent(CalendarEvent* calendarEvent);
void AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite);
+ void AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite, SQLTransaction& trans);
void RemoveInvite(uint64 inviteId, uint64 eventId, uint64 remover);
void UpdateInvite(CalendarInvite* invite);
+ void UpdateInvite(CalendarInvite* invite, SQLTransaction& trans);
void RemoveAllPlayerEventsAndInvites(uint64 guid);
void RemovePlayerGuildEventsAndSignups(uint64 guid, uint32 guildId);
@@ -323,9 +329,9 @@ class CalendarMgr
void SendCalendarClearPendingAction(uint64 guid);
void SendCalendarCommandResult(uint64 guid, CalendarError err, char const* param = NULL);
- void SendPacketToAllEventRelatives(WorldPacket packet, CalendarEvent const& calendarEvent);
+ void SendPacketToAllEventRelatives(WorldPacket& packet, CalendarEvent const& calendarEvent);
};
-#define sCalendarMgr ACE_Singleton<CalendarMgr, ACE_Null_Mutex>::instance()
+#define sCalendarMgr CalendarMgr::instance()
#endif
diff --git a/src/server/game/Chat/Channels/Channel.h b/src/server/game/Chat/Channels/Channel.h
index 9ad6877d929..877c1e826c9 100644
--- a/src/server/game/Chat/Channels/Channel.h
+++ b/src/server/game/Chat/Channels/Channel.h
@@ -25,7 +25,7 @@
#include "Common.h"
-#include "Opcodes.h"
+#include "WorldSession.h"
#include "WorldPacket.h"
class Player;
@@ -125,21 +125,21 @@ class Channel
uint64 player;
uint8 flags;
- bool HasFlag(uint8 flag) const { return flags & flag; }
- void SetFlag(uint8 flag) { if (!HasFlag(flag)) flags |= flag; }
- bool IsOwner() const { return flags & MEMBER_FLAG_OWNER; }
+ bool HasFlag(uint8 flag) const { return (flags & flag) != 0; }
+ void SetFlag(uint8 flag) { flags |= flag; }
+ bool IsOwner() const { return (flags & MEMBER_FLAG_OWNER) != 0; }
void SetOwner(bool state)
{
if (state) flags |= MEMBER_FLAG_OWNER;
else flags &= ~MEMBER_FLAG_OWNER;
}
- bool IsModerator() const { return flags & MEMBER_FLAG_MODERATOR; }
+ bool IsModerator() const { return (flags & MEMBER_FLAG_MODERATOR) != 0; }
void SetModerator(bool state)
{
if (state) flags |= MEMBER_FLAG_MODERATOR;
else flags &= ~MEMBER_FLAG_MODERATOR;
}
- bool IsMuted() const { return flags & MEMBER_FLAG_MUTED; }
+ bool IsMuted() const { return (flags & MEMBER_FLAG_MUTED) != 0; }
void SetMuted(bool state)
{
if (state) flags |= MEMBER_FLAG_MUTED;
@@ -153,13 +153,13 @@ class Channel
uint32 GetChannelId() const { return _channelId; }
bool IsConstant() const { return _channelId != 0; }
bool IsAnnounce() const { return _announce; }
- bool IsLFG() const { return GetFlags() & CHANNEL_FLAG_LFG; }
+ bool IsLFG() const { return (GetFlags() & CHANNEL_FLAG_LFG) != 0; }
std::string const& GetPassword() const { return _password; }
void SetPassword(std::string const& npassword) { _password = npassword; }
void SetAnnounce(bool nannounce) { _announce = nannounce; }
uint32 GetNumPlayers() const { return playersStore.size(); }
uint8 GetFlags() const { return _flags; }
- bool HasFlag(uint8 flag) const { return _flags & flag; }
+ bool HasFlag(uint8 flag) const { return (_flags & flag) != 0; }
void JoinChannel(Player* player, std::string const& pass);
void LeaveChannel(Player* player, bool send = true);
diff --git a/src/server/game/Chat/Channels/ChannelMgr.cpp b/src/server/game/Chat/Channels/ChannelMgr.cpp
index 0975a690889..95ed8834010 100644
--- a/src/server/game/Chat/Channels/ChannelMgr.cpp
+++ b/src/server/game/Chat/Channels/ChannelMgr.cpp
@@ -28,14 +28,16 @@ ChannelMgr::~ChannelMgr()
ChannelMgr* ChannelMgr::forTeam(uint32 team)
{
+ static ChannelMgr allianceChannelMgr;
+ static ChannelMgr hordeChannelMgr;
if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL))
- return ACE_Singleton<AllianceChannelMgr, ACE_Null_Mutex>::instance(); // cross-faction
+ return &allianceChannelMgr; // cross-faction
if (team == ALLIANCE)
- return ACE_Singleton<AllianceChannelMgr, ACE_Null_Mutex>::instance();
+ return &allianceChannelMgr;
if (team == HORDE)
- return ACE_Singleton<HordeChannelMgr, ACE_Null_Mutex>::instance();
+ return &hordeChannelMgr;
return NULL;
}
diff --git a/src/server/game/Chat/Channels/ChannelMgr.h b/src/server/game/Chat/Channels/ChannelMgr.h
index 603eb52f589..fb93af2c310 100644
--- a/src/server/game/Chat/Channels/ChannelMgr.h
+++ b/src/server/game/Chat/Channels/ChannelMgr.h
@@ -20,7 +20,6 @@
#include "Common.h"
#include "Channel.h"
-#include <ace/Singleton.h>
#include <map>
#include <string>
@@ -31,13 +30,12 @@ class ChannelMgr
{
typedef std::map<std::wstring, Channel*> ChannelMap;
- public:
- ChannelMgr() : team(0)
- { }
-
+ protected:
+ ChannelMgr() : team(0) { }
~ChannelMgr();
- static ChannelMgr * forTeam(uint32 team);
+ public:
+ static ChannelMgr* forTeam(uint32 team);
void setTeam(uint32 newTeam) { team = newTeam; }
Channel* GetJoinChannel(std::string const& name, uint32 channel_id);
@@ -51,7 +49,4 @@ class ChannelMgr
void MakeNotOnPacket(WorldPacket* data, std::string const& name);
};
-class AllianceChannelMgr : public ChannelMgr { };
-class HordeChannelMgr : public ChannelMgr { };
-
#endif
diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp
index d77ee5b7f61..50f67d4f920 100644
--- a/src/server/game/Chat/Chat.cpp
+++ b/src/server/game/Chat/Chat.cpp
@@ -966,7 +966,7 @@ static char const* const spellKeys[] =
"Henchant", // enchanting recipe spell
"Htrade", // profession/skill spell
"Hglyph", // glyph
- 0
+ nullptr
};
uint32 ChatHandler::extractSpellIdFromLink(char* text)
@@ -1050,7 +1050,7 @@ static char const* const guidKeys[] =
"Hplayer",
"Hcreature",
"Hgameobject",
- 0
+ nullptr
};
uint64 ChatHandler::extractGuidFromLink(char* text)
diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h
index a56b79077d7..32820de0fc2 100644
--- a/src/server/game/Chat/Chat.h
+++ b/src/server/game/Chat/Chat.h
@@ -147,14 +147,14 @@ class CliHandler : public ChatHandler
explicit CliHandler(void* callbackArg, Print* zprint) : m_callbackArg(callbackArg), m_print(zprint) { }
// overwrite functions
- const char *GetTrinityString(int32 entry) const;
- bool isAvailable(ChatCommand const& cmd) const;
- bool HasPermission(uint32 /*permission*/) const { return true; }
- void SendSysMessage(const char *str);
- std::string GetNameLink() const;
- bool needReportToTarget(Player* chr) const;
- LocaleConstant GetSessionDbcLocale() const;
- int GetSessionDbLocaleIndex() const;
+ const char *GetTrinityString(int32 entry) const override;
+ bool isAvailable(ChatCommand const& cmd) const override;
+ bool HasPermission(uint32 /*permission*/) const override { return true; }
+ void SendSysMessage(const char *str) override;
+ std::string GetNameLink() const override;
+ bool needReportToTarget(Player* chr) const override;
+ LocaleConstant GetSessionDbcLocale() const override;
+ int GetSessionDbLocaleIndex() const override;
private:
void* m_callbackArg;
diff --git a/src/server/game/Chat/ChatLink.h b/src/server/game/Chat/ChatLink.h
index cc86cb538ea..33fb3431a84 100644
--- a/src/server/game/Chat/ChatLink.h
+++ b/src/server/game/Chat/ChatLink.h
@@ -21,6 +21,7 @@
#include "SharedDefines.h"
#include <sstream>
#include <list>
+#include <cstring>
struct ItemLocale;
struct ItemTemplate;
@@ -60,8 +61,8 @@ public:
{
memset(_data, 0, sizeof(_data));
}
- virtual bool Initialize(std::istringstream& iss);
- virtual bool ValidateName(char* buffer, const char* context);
+ virtual bool Initialize(std::istringstream& iss) override;
+ virtual bool ValidateName(char* buffer, const char* context) override;
protected:
std::string FormatName(uint8 index, ItemLocale const* locale, char* const* suffixStrings) const;
@@ -76,9 +77,9 @@ protected:
class QuestChatLink : public ChatLink
{
public:
- QuestChatLink() : ChatLink(), _quest(NULL), _questLevel(0) { }
- virtual bool Initialize(std::istringstream& iss);
- virtual bool ValidateName(char* buffer, const char* context);
+ QuestChatLink() : ChatLink(), _quest(nullptr), _questLevel(0) { }
+ virtual bool Initialize(std::istringstream& iss) override;
+ virtual bool ValidateName(char* buffer, const char* context) override;
protected:
Quest const* _quest;
@@ -89,9 +90,9 @@ protected:
class SpellChatLink : public ChatLink
{
public:
- SpellChatLink() : ChatLink(), _spell(NULL) { }
- virtual bool Initialize(std::istringstream& iss);
- virtual bool ValidateName(char* buffer, const char* context);
+ SpellChatLink() : ChatLink(), _spell(nullptr) { }
+ virtual bool Initialize(std::istringstream& iss) override;
+ virtual bool ValidateName(char* buffer, const char* context) override;
protected:
SpellInfo const* _spell;
@@ -105,8 +106,8 @@ public:
{
memset(_data, 0, sizeof(_data));
}
- virtual bool Initialize(std::istringstream& iss);
- virtual bool ValidateName(char* buffer, const char* context);
+ virtual bool Initialize(std::istringstream& iss) override;
+ virtual bool ValidateName(char* buffer, const char* context) override;
protected:
uint32 _guid;
@@ -119,7 +120,7 @@ class TradeChatLink : public SpellChatLink
{
public:
TradeChatLink() : SpellChatLink(), _minSkillLevel(0), _maxSkillLevel(0), _guid(0) { }
- virtual bool Initialize(std::istringstream& iss);
+ virtual bool Initialize(std::istringstream& iss) override;
private:
int32 _minSkillLevel;
int32 _maxSkillLevel;
@@ -132,7 +133,7 @@ class TalentChatLink : public SpellChatLink
{
public:
TalentChatLink() : SpellChatLink(), _talentId(0), _rankId(0) { }
- virtual bool Initialize(std::istringstream& iss);
+ virtual bool Initialize(std::istringstream& iss) override;
private:
uint32 _talentId;
@@ -144,7 +145,7 @@ class EnchantmentChatLink : public SpellChatLink
{
public:
EnchantmentChatLink() : SpellChatLink() { }
- virtual bool Initialize(std::istringstream& iss);
+ virtual bool Initialize(std::istringstream& iss) override;
};
// GlyphChatLink - link to glyph
@@ -152,7 +153,7 @@ class GlyphChatLink : public SpellChatLink
{
public:
GlyphChatLink() : SpellChatLink(), _slotId(0), _glyph(NULL) { }
- virtual bool Initialize(std::istringstream& iss);
+ virtual bool Initialize(std::istringstream& iss) override;
private:
uint32 _slotId;
GlyphPropertiesEntry const* _glyph;
diff --git a/src/server/game/Combat/ThreatManager.h b/src/server/game/Combat/ThreatManager.h
index dd5904ae2ec..f0741f81067 100644
--- a/src/server/game/Combat/ThreatManager.h
+++ b/src/server/game/Combat/ThreatManager.h
@@ -117,13 +117,13 @@ class HostileReference : public Reference<Unit, ThreatManager>
//=================================================
// Tell our refTo (target) object that we have a link
- void targetObjectBuildLink();
+ void targetObjectBuildLink() override;
// Tell our refTo (taget) object, that the link is cut
- void targetObjectDestroyLink();
+ void targetObjectDestroyLink() override;
// Tell our refFrom (source) object, that the link is cut (Target destroyed)
- void sourceObjectDestroyLink();
+ void sourceObjectDestroyLink() override;
private:
// Inform the source, that the status of that reference was changed
void fireStatusChanged(ThreatRefStatusChangeEvent& threatRefStatusChangeEvent);
diff --git a/src/server/game/Combat/UnitEvents.h b/src/server/game/Combat/UnitEvents.h
index 50d4c3ad322..3377097a12e 100644
--- a/src/server/game/Combat/UnitEvents.h
+++ b/src/server/game/Combat/UnitEvents.h
@@ -74,7 +74,7 @@ class UnitBaseEvent
public:
UnitBaseEvent(uint32 pType) { iType = pType; }
uint32 getType() const { return iType; }
- bool matchesTypeMask(uint32 pMask) const { return iType & pMask; }
+ bool matchesTypeMask(uint32 pMask) const { return (iType & pMask) != 0; }
void setType(uint32 pType) { iType = pType; }
};
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index bb1a722ec42..948dc9b7cb3 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -78,7 +78,7 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
if (Player* player = object->ToPlayer())
{
if (FactionEntry const* faction = sFactionStore.LookupEntry(ConditionValue1))
- condMeets = (ConditionValue2 & (1 << player->GetReputationMgr().GetRank(faction)));
+ condMeets = (ConditionValue2 & (1 << player->GetReputationMgr().GetRank(faction))) != 0;
}
break;
}
@@ -97,13 +97,13 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
case CONDITION_CLASS:
{
if (Unit* unit = object->ToUnit())
- condMeets = unit->getClassMask() & ConditionValue1;
+ condMeets = (unit->getClassMask() & ConditionValue1) != 0;
break;
}
case CONDITION_RACE:
{
if (Unit* unit = object->ToUnit())
- condMeets = unit->getRaceMask() & ConditionValue1;
+ condMeets = (unit->getRaceMask() & ConditionValue1) != 0;
break;
}
case CONDITION_GENDER:
@@ -211,10 +211,25 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
condMeets = GetClosestGameObjectWithEntry(object, ConditionValue1, (float)ConditionValue2) ? true : false;
break;
}
- case CONDITION_OBJECT_ENTRY:
+ case CONDITION_OBJECT_ENTRY_GUID:
{
if (uint32(object->GetTypeId()) == ConditionValue1)
- condMeets = (!ConditionValue2) || (object->GetEntry() == ConditionValue2);
+ {
+ condMeets = !ConditionValue2 || (object->GetEntry() == ConditionValue2);
+
+ if (ConditionValue3)
+ {
+ switch (object->GetTypeId())
+ {
+ case TYPEID_UNIT:
+ condMeets &= object->ToCreature()->GetDBTableGUIDLow() == ConditionValue3;
+ break;
+ case TYPEID_GAMEOBJECT:
+ condMeets &= object->ToGameObject()->GetDBTableGUIDLow() == ConditionValue3;
+ break;
+ }
+ }
+ }
break;
}
case CONDITION_TYPE_MASK:
@@ -262,7 +277,7 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
Unit* toUnit = toObject->ToUnit();
Unit* unit = object->ToUnit();
if (toUnit && unit)
- condMeets = (1 << unit->GetReactionTo(toUnit)) & ConditionValue2;
+ condMeets = ((1 << unit->GetReactionTo(toUnit)) & ConditionValue2) != 0;
}
break;
}
@@ -297,7 +312,7 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
}
case CONDITION_PHASEMASK:
{
- condMeets = object->GetPhaseMask() & ConditionValue1;
+ condMeets = (object->GetPhaseMask() & ConditionValue1) != 0;
break;
}
case CONDITION_TITLE:
@@ -308,7 +323,7 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
}
case CONDITION_SPAWNMASK:
{
- condMeets = ((1 << object->GetMap()->GetSpawnMode()) & ConditionValue1);
+ condMeets = ((1 << object->GetMap()->GetSpawnMode()) & ConditionValue1) != 0;
break;
}
case CONDITION_UNIT_STATE:
@@ -419,7 +434,7 @@ uint32 Condition::GetSearcherTypeMaskForCondition()
case CONDITION_NEAR_GAMEOBJECT:
mask |= GRID_MAP_TYPE_MASK_ALL;
break;
- case CONDITION_OBJECT_ENTRY:
+ case CONDITION_OBJECT_ENTRY_GUID:
switch (ConditionValue1)
{
case TYPEID_UNIT:
@@ -806,7 +821,7 @@ void ConditionMgr::LoadConditions(bool isReload)
cond->ConditionValue1 = fields[7].GetUInt32();
cond->ConditionValue2 = fields[8].GetUInt32();
cond->ConditionValue3 = fields[9].GetUInt32();
- cond->NegativeCondition = fields[10].GetUInt8();
+ cond->NegativeCondition = fields[10].GetBool();
cond->ErrorType = fields[11].GetUInt32();
cond->ErrorTextId = fields[12].GetUInt32();
cond->ScriptId = sObjectMgr->GetScriptId(fields[13].GetCString());
@@ -1756,9 +1771,9 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
}
if (cond->ConditionValue2)
- TC_LOG_ERROR("sql.sql", "Spell condition has useless data in value2 (%u)!", cond->ConditionValue2);
+ TC_LOG_ERROR("sql.sql", "Spell condition has useless data (spell Id: %d) in value2 (%u)!", cond->ConditionValue1, cond->ConditionValue2);
if (cond->ConditionValue3)
- TC_LOG_ERROR("sql.sql", "Spell condition has useless data in value3 (%u)!", cond->ConditionValue3);
+ TC_LOG_ERROR("sql.sql", "Spell condition has useless data (spell Id: %d) in value3 (%u)!", cond->ConditionValue1, cond->ConditionValue3);
break;
}
case CONDITION_LEVEL:
@@ -1810,35 +1825,67 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
TC_LOG_ERROR("sql.sql", "NearGameObject condition has useless data in value3 (%u)!", cond->ConditionValue3);
break;
}
- case CONDITION_OBJECT_ENTRY:
+ case CONDITION_OBJECT_ENTRY_GUID:
{
switch (cond->ConditionValue1)
{
case TYPEID_UNIT:
if (cond->ConditionValue2 && !sObjectMgr->GetCreatureTemplate(cond->ConditionValue2))
{
- TC_LOG_ERROR("sql.sql", "ObjectEntry condition has non existing creature template entry (%u), skipped", cond->ConditionValue2);
+ TC_LOG_ERROR("sql.sql", "ObjectEntryGuid condition has non existing creature template entry (%u), skipped", cond->ConditionValue2);
return false;
}
+ if (cond->ConditionValue3)
+ {
+ if (CreatureData const* creatureData = sObjectMgr->GetCreatureData(cond->ConditionValue3))
+ {
+ if (cond->ConditionValue2 && creatureData->id != cond->ConditionValue2)
+ {
+ TC_LOG_ERROR("sql.sql", "ObjectEntryGuid condition has guid %u set but does not match creature entry (%u), skipped", cond->ConditionValue3, cond->ConditionValue2);
+ return false;
+ }
+ }
+ else
+ {
+ TC_LOG_ERROR("sql.sql", "ObjectEntryGuid condition has non existing creature guid (%u), skipped", cond->ConditionValue3);
+ return false;
+ }
+ }
break;
case TYPEID_GAMEOBJECT:
if (cond->ConditionValue2 && !sObjectMgr->GetGameObjectTemplate(cond->ConditionValue2))
{
- TC_LOG_ERROR("sql.sql", "ObjectEntry condition has non existing game object template entry (%u), skipped", cond->ConditionValue2);
+ TC_LOG_ERROR("sql.sql", "ObjectEntryGuid condition has non existing gameobject template entry (%u), skipped", cond->ConditionValue2);
return false;
}
+ if (cond->ConditionValue3)
+ {
+ if (GameObjectData const* goData = sObjectMgr->GetGOData(cond->ConditionValue3))
+ {
+ if (cond->ConditionValue2 && goData->id != cond->ConditionValue2)
+ {
+ TC_LOG_ERROR("sql.sql", "ObjectEntryGuid condition has guid %u set but does not match gameobject entry (%u), skipped", cond->ConditionValue3, cond->ConditionValue2);
+ return false;
+ }
+ }
+ else
+ {
+ TC_LOG_ERROR("sql.sql", "ObjectEntryGuid condition has non existing gameobject guid (%u), skipped", cond->ConditionValue3);
+ return false;
+ }
+ }
break;
case TYPEID_PLAYER:
case TYPEID_CORPSE:
if (cond->ConditionValue2)
- TC_LOG_ERROR("sql.sql", "ObjectEntry condition has useless data in value2 (%u)!", cond->ConditionValue2);
+ TC_LOG_ERROR("sql.sql", "ObjectEntryGuid condition has useless data in value2 (%u)!", cond->ConditionValue2);
+ if (cond->ConditionValue3)
+ TC_LOG_ERROR("sql.sql", "ObjectEntryGuid condition has useless data in value3 (%u)!", cond->ConditionValue3);
break;
default:
- TC_LOG_ERROR("sql.sql", "ObjectEntry condition has wrong typeid set (%u), skipped", cond->ConditionValue1);
+ TC_LOG_ERROR("sql.sql", "ObjectEntryGuid condition has wrong typeid set (%u), skipped", cond->ConditionValue1);
return false;
}
- if (cond->ConditionValue3)
- TC_LOG_ERROR("sql.sql", "ObjectEntry condition has useless data in value3 (%u)!", cond->ConditionValue3);
break;
}
case CONDITION_TYPE_MASK:
diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h
index 876b922d243..ff508210fb1 100644
--- a/src/server/game/Conditions/ConditionMgr.h
+++ b/src/server/game/Conditions/ConditionMgr.h
@@ -21,7 +21,6 @@
#include "Define.h"
#include "Errors.h"
-#include <ace/Singleton.h>
#include <list>
#include <map>
@@ -64,7 +63,7 @@ enum ConditionTypes
CONDITION_QUEST_COMPLETE = 28, // quest_id 0 0 true if player has quest_id with all objectives complete, but not yet rewarded
CONDITION_NEAR_CREATURE = 29, // creature entry distance 0 true if there is a creature of entry in range
CONDITION_NEAR_GAMEOBJECT = 30, // gameobject entry distance 0 true if there is a gameobject of entry in range
- CONDITION_OBJECT_ENTRY = 31, // TypeID entry 0 true if object is type TypeID and the entry is 0 or matches entry of the object
+ CONDITION_OBJECT_ENTRY_GUID = 31, // TypeID entry guid true if object is type TypeID and the entry is 0 or matches entry of the object or matches guid of the object
CONDITION_TYPE_MASK = 32, // TypeMask 0 0 true if object is type object's TypeMask matches provided TypeMask
CONDITION_RELATION_TO = 33, // ConditionTarget RelationType 0 true if object is in given relation with object specified by ConditionTarget
CONDITION_REACTION_TO = 34, // ConditionTarget rankMask 0 true if object's reaction matches rankMask object specified by ConditionTarget
@@ -223,13 +222,18 @@ typedef std::map<uint32, ConditionList> ConditionReferenceContainer;//only used
class ConditionMgr
{
- friend class ACE_Singleton<ConditionMgr, ACE_Null_Mutex>;
-
private:
ConditionMgr();
~ConditionMgr();
public:
+
+ static ConditionMgr* instance()
+ {
+ static ConditionMgr instance;
+ return &instance;
+ }
+
void LoadConditions(bool isReload = false);
bool isConditionTypeValid(Condition* cond);
ConditionList GetConditionReferences(uint32 refId);
@@ -265,6 +269,6 @@ class ConditionMgr
SmartEventConditionContainer SmartEventConditionStore;
};
-#define sConditionMgr ACE_Singleton<ConditionMgr, ACE_Null_Mutex>::instance()
+#define sConditionMgr ConditionMgr::instance()
#endif
diff --git a/src/server/game/Conditions/DisableMgr.cpp b/src/server/game/Conditions/DisableMgr.cpp
index b29959cac50..3f325be1e83 100644
--- a/src/server/game/Conditions/DisableMgr.cpp
+++ b/src/server/game/Conditions/DisableMgr.cpp
@@ -339,7 +339,7 @@ bool IsDisabledFor(DisableType type, uint32 entry, Unit const* unit, uint8 flags
else if (spellFlags & SPELL_DISABLE_DEPRECATED_SPELL) // call not from spellcast
return true;
else if (flags & SPELL_DISABLE_LOS)
- return spellFlags & SPELL_DISABLE_LOS;
+ return (spellFlags & SPELL_DISABLE_LOS) != 0;
break;
}
@@ -355,13 +355,13 @@ bool IsDisabledFor(DisableType type, uint32 entry, Unit const* unit, uint8 flags
switch (targetDifficulty)
{
case DUNGEON_DIFFICULTY_NORMAL:
- return disabledModes & DUNGEON_STATUSFLAG_NORMAL;
+ return (disabledModes & DUNGEON_STATUSFLAG_NORMAL) != 0;
case DUNGEON_DIFFICULTY_HEROIC:
- return disabledModes & DUNGEON_STATUSFLAG_HEROIC;
+ return (disabledModes & DUNGEON_STATUSFLAG_HEROIC) != 0;
case RAID_DIFFICULTY_10MAN_HEROIC:
- return disabledModes & RAID_STATUSFLAG_10MAN_HEROIC;
+ return (disabledModes & RAID_STATUSFLAG_10MAN_HEROIC) != 0;
case RAID_DIFFICULTY_25MAN_HEROIC:
- return disabledModes & RAID_STATUSFLAG_25MAN_HEROIC;
+ return (disabledModes & RAID_STATUSFLAG_25MAN_HEROIC) != 0;
}
}
else if (mapEntry->map_type == MAP_COMMON)
@@ -381,7 +381,7 @@ bool IsDisabledFor(DisableType type, uint32 entry, Unit const* unit, uint8 flags
case DISABLE_TYPE_MMAP:
return true;
case DISABLE_TYPE_VMAP:
- return flags & itr->second.flags;
+ return (flags & itr->second.flags) != 0;
}
return false;
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h
index ec048e167ac..03180b35cb5 100644
--- a/src/server/game/DataStores/DBCEnums.h
+++ b/src/server/game/DataStores/DBCEnums.h
@@ -326,8 +326,8 @@ enum MapFlags
enum AbilytyLearnType
{
- ABILITY_LEARNED_ON_GET_PROFESSION_SKILL = 1,
- ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL = 2
+ SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE = 1, // Spell state will update depending on skill value
+ SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN = 2 // Spell will be learned/removed together with entire skill
};
enum ItemEnchantmentType
@@ -349,21 +349,20 @@ enum ItemLimitCategoryMode
ITEM_LIMIT_CATEGORY_MODE_EQUIP = 1 // limit applied to amount equipped items (including used gems)
};
-enum SpellCategoryFlags
+enum SkillRaceClassInfoFlags
{
- SPELL_CATEGORY_FLAG_COOLDOWN_SCALES_WITH_WEAPON_SPEED = 0x01, // unused
- SPELL_CATEGORY_FLAG_COOLDOWN_STARTS_ON_EVENT = 0x04
+ SKILL_FLAG_NO_SKILLUP_MESSAGE = 0x2,
+ SKILL_FLAG_ALWAYS_MAX_VALUE = 0x10,
+ SKILL_FLAG_UNLEARNABLE = 0x20, // Skill can be unlearned
+ SKILL_FLAG_INCLUDE_IN_SORT = 0x80, // Spells belonging to a skill with this flag will additionally compare skill ids when sorting spellbook in client
+ SKILL_FLAG_NOT_TRAINABLE = 0x100,
+ SKILL_FLAG_MONO_VALUE = 0x400 // Skill always has value 1 - clientside display flag, real value can be different
};
-enum TotemCategoryType
+enum SpellCategoryFlags
{
- TOTEM_CATEGORY_TYPE_KNIFE = 1,
- TOTEM_CATEGORY_TYPE_TOTEM = 2,
- TOTEM_CATEGORY_TYPE_ROD = 3,
- TOTEM_CATEGORY_TYPE_PICK = 21,
- TOTEM_CATEGORY_TYPE_STONE = 22,
- TOTEM_CATEGORY_TYPE_HAMMER = 23,
- TOTEM_CATEGORY_TYPE_SPANNER = 24
+ SPELL_CATEGORY_FLAG_COOLDOWN_SCALES_WITH_WEAPON_SPEED = 0x01, // unused
+ SPELL_CATEGORY_FLAG_COOLDOWN_STARTS_ON_EVENT = 0x04
};
// SummonProperties.dbc, col 1
@@ -398,6 +397,17 @@ enum SummonPropFlags
SUMMON_PROP_FLAG_UNK16 = 0x00008000 // Light/Dark Bullet, Soul/Fiery Consumption, Twisted Visage, Twilight Whelp. Phase related?
};
+enum TotemCategoryType
+{
+ TOTEM_CATEGORY_TYPE_KNIFE = 1,
+ TOTEM_CATEGORY_TYPE_TOTEM = 2,
+ TOTEM_CATEGORY_TYPE_ROD = 3,
+ TOTEM_CATEGORY_TYPE_PICK = 21,
+ TOTEM_CATEGORY_TYPE_STONE = 22,
+ TOTEM_CATEGORY_TYPE_HAMMER = 23,
+ TOTEM_CATEGORY_TYPE_SPANNER = 24
+};
+
enum VehicleSeatFlags
{
VEHICLE_SEAT_FLAG_HAS_LOWER_ANIM_FOR_ENTER = 0x00000001,
@@ -442,6 +452,7 @@ enum VehicleSeatFlagsB
VEHICLE_SEAT_FLAG_B_EJECTABLE = 0x00000020, // ejectable
VEHICLE_SEAT_FLAG_B_USABLE_FORCED_2 = 0x00000040,
VEHICLE_SEAT_FLAG_B_USABLE_FORCED_3 = 0x00000100,
+ VEHICLE_SEAT_FLAG_B_KEEP_PET = 0x00020000,
VEHICLE_SEAT_FLAG_B_USABLE_FORCED_4 = 0x02000000,
VEHICLE_SEAT_FLAG_B_CAN_SWITCH = 0x04000000,
VEHICLE_SEAT_FLAG_B_VEHICLE_PLAYERFRAME_UI = 0x80000000 // Lua_UnitHasVehiclePlayerFrameUI - actually checked for flagsb &~ 0x80000000
diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp
index 9b0465a4536..e960422cbbc 100644
--- a/src/server/game/DataStores/DBCStores.cpp
+++ b/src/server/game/DataStores/DBCStores.cpp
@@ -139,6 +139,7 @@ DBCStorage <MovieEntry> sMovieStore(MovieEntryfmt);
DBCStorage <OverrideSpellDataEntry> sOverrideSpellDataStore(OverrideSpellDatafmt);
+DBCStorage <PowerDisplayEntry> sPowerDisplayStore(PowerDisplayfmt);
DBCStorage <PvPDifficultyEntry> sPvPDifficultyStore(PvPDifficultyfmt);
DBCStorage <QuestSortEntry> sQuestSortStore(QuestSortEntryfmt);
@@ -150,6 +151,9 @@ DBCStorage <ScalingStatValuesEntry> sScalingStatValuesStore(ScalingStatValuesfmt
DBCStorage <SkillLineEntry> sSkillLineStore(SkillLinefmt);
DBCStorage <SkillLineAbilityEntry> sSkillLineAbilityStore(SkillLineAbilityfmt);
+DBCStorage <SkillRaceClassInfoEntry> sSkillRaceClassInfoStore(SkillRaceClassInfofmt);
+SkillRaceClassInfoMap SkillRaceClassInfoBySkill;
+DBCStorage <SkillTiersEntry> sSkillTiersStore(SkillTiersfmt);
DBCStorage <SoundEntriesEntry> sSoundEntriesStore(SoundEntriesfmt);
@@ -391,6 +395,7 @@ void LoadDBCStores(const std::string& dataPath)
LoadDBC(availableDbcLocales, bad_dbc_files, sOverrideSpellDataStore, dbcPath, "OverrideSpellData.dbc");
+ LoadDBC(availableDbcLocales, bad_dbc_files, sPowerDisplayStore, dbcPath, "PowerDisplay.dbc");
LoadDBC(availableDbcLocales, bad_dbc_files, sPvPDifficultyStore, dbcPath, "PvpDifficulty.dbc");
for (uint32 i = 0; i < sPvPDifficultyStore.GetNumRows(); ++i)
if (PvPDifficultyEntry const* entry = sPvPDifficultyStore.LookupEntry(i))
@@ -407,6 +412,13 @@ void LoadDBCStores(const std::string& dataPath)
LoadDBC(availableDbcLocales, bad_dbc_files, sScalingStatValuesStore, dbcPath, "ScalingStatValues.dbc");
LoadDBC(availableDbcLocales, bad_dbc_files, sSkillLineStore, dbcPath, "SkillLine.dbc");
LoadDBC(availableDbcLocales, bad_dbc_files, sSkillLineAbilityStore, dbcPath, "SkillLineAbility.dbc");
+ LoadDBC(availableDbcLocales, bad_dbc_files, sSkillRaceClassInfoStore, dbcPath, "SkillRaceClassInfo.dbc");
+ for (uint32 i = 0; i < sSkillRaceClassInfoStore.GetNumRows(); ++i)
+ if (SkillRaceClassInfoEntry const* entry = sSkillRaceClassInfoStore.LookupEntry(i))
+ if (sSkillLineStore.LookupEntry(entry->SkillId))
+ SkillRaceClassInfoBySkill.emplace(entry->SkillId, entry);
+
+ LoadDBC(availableDbcLocales, bad_dbc_files, sSkillTiersStore, dbcPath, "SkillTiers.dbc");
LoadDBC(availableDbcLocales, bad_dbc_files, sSoundEntriesStore, dbcPath, "SoundEntries.dbc");
LoadDBC(availableDbcLocales, bad_dbc_files, sSpellStore, dbcPath, "Spell.dbc", &CustomSpellEntryfmt, &CustomSpellEntryIndex);
for (uint32 i = 1; i < sSpellStore.GetNumRows(); ++i)
@@ -438,7 +450,7 @@ void LoadDBCStores(const std::string& dataPath)
if (spellInfo->spellLevel)
continue;
- if (skillLine->learnOnGetSkill != ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL)
+ if (skillLine->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN)
continue;
sPetFamilySpellsStore[i].insert(spellInfo->Id);
@@ -963,3 +975,19 @@ uint32 GetDefaultMapLight(uint32 mapId)
return 0;
}
+
+SkillRaceClassInfoEntry const* GetSkillRaceClassInfo(uint32 skill, uint8 race, uint8 class_)
+{
+ SkillRaceClassInfoBounds bounds = SkillRaceClassInfoBySkill.equal_range(skill);
+ for (SkillRaceClassInfoMap::iterator itr = bounds.first; itr != bounds.second; ++itr)
+ {
+ if (itr->second->RaceMask && !(itr->second->RaceMask & (1 << (race - 1))))
+ continue;
+ if (itr->second->ClassMask && !(itr->second->ClassMask & (1 << (class_ - 1))))
+ continue;
+
+ return itr->second;
+ }
+
+ return NULL;
+}
diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h
index b77db950541..8b89a86fafe 100644
--- a/src/server/game/DataStores/DBCStores.h
+++ b/src/server/game/DataStores/DBCStores.h
@@ -74,6 +74,10 @@ LFGDungeonEntry const* GetLFGDungeon(uint32 mapId, Difficulty difficulty);
uint32 GetDefaultMapLight(uint32 mapId);
+typedef std::unordered_multimap<uint32, SkillRaceClassInfoEntry const*> SkillRaceClassInfoMap;
+typedef std::pair<SkillRaceClassInfoMap::iterator, SkillRaceClassInfoMap::iterator> SkillRaceClassInfoBounds;
+SkillRaceClassInfoEntry const* GetSkillRaceClassInfo(uint32 skill, uint8 race, uint8 class_);
+
extern DBCStorage <AchievementEntry> sAchievementStore;
extern DBCStorage <AchievementCriteriaEntry> sAchievementCriteriaStore;
extern DBCStorage <AreaTableEntry> sAreaStore;// recommend access using functions
@@ -141,6 +145,7 @@ extern DBCStorage <MapEntry> sMapStore;
extern MapDifficultyMap sMapDifficultyMap;
extern DBCStorage <MovieEntry> sMovieStore;
extern DBCStorage <OverrideSpellDataEntry> sOverrideSpellDataStore;
+extern DBCStorage <PowerDisplayEntry> sPowerDisplayStore;
extern DBCStorage <QuestSortEntry> sQuestSortStore;
extern DBCStorage <QuestXPEntry> sQuestXPStore;
extern DBCStorage <QuestFactionRewEntry> sQuestFactionRewardStore;
@@ -149,6 +154,7 @@ extern DBCStorage <ScalingStatDistributionEntry> sScalingStatDistributionStore;
extern DBCStorage <ScalingStatValuesEntry> sScalingStatValuesStore;
extern DBCStorage <SkillLineEntry> sSkillLineStore;
extern DBCStorage <SkillLineAbilityEntry> sSkillLineAbilityStore;
+extern DBCStorage <SkillTiersEntry> sSkillTiersStore;
extern DBCStorage <SoundEntriesEntry> sSoundEntriesStore;
extern DBCStorage <SpellCastTimesEntry> sSpellCastTimesStore;
extern DBCStorage <SpellCategoryEntry> sSpellCategoryStore;
diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h
index abe7bde4bf5..1e1cd6dd9d6 100644
--- a/src/server/game/DataStores/DBCStructure.h
+++ b/src/server/game/DataStores/DBCStructure.h
@@ -535,7 +535,7 @@ struct AreaTableEntry
{
if (mapid == 609)
return true;
- return (flags & AREA_FLAG_SANCTUARY);
+ return (flags & AREA_FLAG_SANCTUARY) != 0;
}
};
@@ -623,7 +623,7 @@ struct BattlemasterListEntry
{
uint32 id; // 0
int32 mapid[8]; // 1-8 mapid
- uint32 type; // 9 (3 - BG, 4 - arena)
+ uint32 type; // 9 map type (3 - BG, 4 - arena)
//uint32 canJoinAsGroup; // 10 (0 or 1)
char* name[16]; // 11-26
//uint32 nameFlags // 27 string flag, unused
@@ -1367,7 +1367,7 @@ struct MapEntry
return MapID == 0 || MapID == 1 || MapID == 530 || MapID == 571;
}
- bool IsDynamicDifficultyMap() const { return Flags & MAP_FLAG_DYNAMIC_DIFFICULTY; }
+ bool IsDynamicDifficultyMap() const { return (Flags & MAP_FLAG_DYNAMIC_DIFFICULTY) != 0; }
};
struct MapDifficultyEntry
@@ -1398,6 +1398,16 @@ struct OverrideSpellDataEntry
//uint32 unk0; // 11
};
+struct PowerDisplayEntry
+{
+ uint32 Id; // 0
+ uint32 PowerType; // 1
+ //char* Name; // 2
+ //uint32 R; // 3
+ //uint32 G; // 4
+ //uint32 B; // 5
+};
+
struct PvPDifficultyEntry
{
//uint32 id; // 0 m_ID
@@ -1525,23 +1535,6 @@ struct ScalingStatValuesEntry
// uint32 displayOrder; // 19 m_sortIndex
//};
-//struct SkillRaceClassInfoEntry{
-// uint32 id; // 0 m_ID
-// uint32 skillId; // 1 m_skillID
-// uint32 raceMask; // 2 m_raceMask
-// uint32 classMask; // 3 m_classMask
-// uint32 flags; // 4 m_flags
-// uint32 reqLevel; // 5 m_minLevel
-// uint32 skillTierId; // 6 m_skillTierID
-// uint32 skillCostID; // 7 m_skillCostIndex
-//};
-
-//struct SkillTiersEntry{
-// uint32 id; // 0 m_ID
-// uint32 skillValue[16]; // 1-17 m_cost
-// uint32 maxSkillValue[16]; // 18-32 m_valueMax
-//};
-
struct SkillLineEntry
{
uint32 id; // 0 m_ID
@@ -1568,12 +1561,33 @@ struct SkillLineAbilityEntry
//uint32 classmaskNot; // 6 m_excludeClass
uint32 req_skill_value; // 7 m_minSkillLineRank
uint32 forward_spellid; // 8 m_supercededBySpell
- uint32 learnOnGetSkill; // 9 m_acquireMethod
+ uint32 AutolearnType; // 9 m_acquireMethod
uint32 max_value; // 10 m_trivialSkillLineRankHigh
uint32 min_value; // 11 m_trivialSkillLineRankLow
//uint32 characterPoints[2]; // 12-13 m_characterPoints[2]
};
+struct SkillRaceClassInfoEntry
+{
+ //uint32 Id; // 0
+ uint32 SkillId; // 1
+ uint32 RaceMask; // 2
+ uint32 ClassMask; // 3
+ uint32 Flags; // 4
+ //uint32 MinLevel; // 5
+ uint32 SkillTier; // 6
+ //uint32 SkillCostType; // 7
+};
+
+#define MAX_SKILL_STEP 16
+
+struct SkillTiersEntry
+{
+ uint32 Id; // 0
+ //uint32 StepCost[MAX_SKILL_STEP]; // 1-16
+ uint32 MaxSkill[MAX_SKILL_STEP]; // 17-32
+};
+
struct SoundEntriesEntry
{
uint32 Id; // 0 m_ID
@@ -1982,7 +1996,7 @@ struct VehicleEntry
uint32 m_uiLocomotionType; // 34
float m_msslTrgtImpactTexRadius; // 35
uint32 m_uiSeatIndicatorType; // 36
- uint32 m_powerType; // 37, new in 3.1
+ uint32 m_powerDisplayId; // 37, new in 3.1
// 38, new in 3.1
// 39, new in 3.1
};
@@ -2037,12 +2051,12 @@ struct VehicleSeatEntry
uint32 m_flagsB; // 45
// 46-57 added in 3.1, floats mostly
- bool CanEnterOrExit() const { return m_flags & VEHICLE_SEAT_FLAG_CAN_ENTER_OR_EXIT; }
- bool CanSwitchFromSeat() const { return m_flags & VEHICLE_SEAT_FLAG_CAN_SWITCH; }
+ bool CanEnterOrExit() const { return (m_flags & VEHICLE_SEAT_FLAG_CAN_ENTER_OR_EXIT) != 0; }
+ bool CanSwitchFromSeat() const { return (m_flags & VEHICLE_SEAT_FLAG_CAN_SWITCH) != 0; }
bool IsUsableByOverride() const { return (m_flags & (VEHICLE_SEAT_FLAG_UNCONTROLLED | VEHICLE_SEAT_FLAG_UNK18)
|| (m_flagsB & (VEHICLE_SEAT_FLAG_B_USABLE_FORCED | VEHICLE_SEAT_FLAG_B_USABLE_FORCED_2 |
VEHICLE_SEAT_FLAG_B_USABLE_FORCED_3 | VEHICLE_SEAT_FLAG_B_USABLE_FORCED_4))); }
- bool IsEjectable() const { return m_flagsB & VEHICLE_SEAT_FLAG_B_EJECTABLE; }
+ bool IsEjectable() const { return (m_flagsB & VEHICLE_SEAT_FLAG_B_EJECTABLE) != 0; }
};
struct WMOAreaTableEntry
diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h
index 35a8eecb708..a90cc48c5af 100644
--- a/src/server/game/DataStores/DBCfmt.h
+++ b/src/server/game/DataStores/DBCfmt.h
@@ -91,12 +91,15 @@ char const OverrideSpellDatafmt[] = "niiiiiiiiiix";
char const QuestFactionRewardfmt[] = "niiiiiiiiii";
char const QuestSortEntryfmt[] = "nxxxxxxxxxxxxxxxxx";
char const QuestXPfmt[] = "niiiiiiiiii";
+char const PowerDisplayfmt[] = "nixxxx";
char const PvPDifficultyfmt[] = "diiiii";
char const RandomPropertiesPointsfmt[] = "niiiiiiiiiiiiiii";
char const ScalingStatDistributionfmt[] = "niiiiiiiiiiiiiiiiiiiii";
char const ScalingStatValuesfmt[] = "iniiiiiiiiiiiiiiiiiiiiii";
char const SkillLinefmt[] = "nixssssssssssssssssxxxxxxxxxxxxxxxxxxixxxxxxxxxxxxxxxxxi";
char const SkillLineAbilityfmt[] = "niiiixxiiiiixx";
+char const SkillRaceClassInfofmt[] = "diiiixix";
+char const SkillTiersfmt[] = "nxxxxxxxxxxxxxxxxiiiiiiiiiiiiiiii";
char const SoundEntriesfmt[] = "nxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
char const SpellCastTimefmt[] = "nixx";
char const SpellCategoryfmt[] = "ni";
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index 98ca9222e67..076ac7982ec 100644
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -257,10 +257,6 @@ void LFGMgr::LoadLFGDungeons(bool reload /* = false */)
if (reload)
{
CachedDungeonMapStore.clear();
- // Recalculate locked dungeons
- for (LfgPlayerDataContainer::const_iterator it = PlayersStore.begin(); it != PlayersStore.end(); ++it)
- if (Player* player = ObjectAccessor::FindPlayer(it->first))
- InitializeLockedDungeons(player);
}
}
@@ -359,7 +355,6 @@ void LFGMgr::Update(uint32 diff)
if (m_QueueTimer > LFG_QUEUEUPDATE_INTERVAL)
{
m_QueueTimer = 0;
- time_t currTime = time(NULL);
for (LfgQueueContainer::iterator it = QueuesStore.begin(); it != QueuesStore.end(); ++it)
it->second.UpdateQueueTimers(currTime);
}
@@ -368,74 +363,6 @@ void LFGMgr::Update(uint32 diff)
}
/**
- Generate the dungeon lock map for a given player
-
- @param[in] player Player we need to initialize the lock status map
-*/
-void LFGMgr::InitializeLockedDungeons(Player* player, uint8 level /* = 0 */)
-{
- uint64 guid = player->GetGUID();
- if (!level)
- level = player->getLevel();
- uint8 expansion = player->GetSession()->Expansion();
- LfgDungeonSet const& dungeons = GetDungeonsByRandom(0);
- LfgLockMap lock;
- bool denyJoin = !player->GetSession()->HasPermission(rbac::RBAC_PERM_JOIN_DUNGEON_FINDER);
-
- for (LfgDungeonSet::const_iterator it = dungeons.begin(); it != dungeons.end(); ++it)
- {
- LFGDungeonData const* dungeon = GetLFGDungeon(*it);
- if (!dungeon) // should never happen - We provide a list from sLFGDungeonStore
- continue;
-
- uint32 lockData = 0;
- if (denyJoin)
- lockData = LFG_LOCKSTATUS_RAID_LOCKED;
- else if (dungeon->expansion > expansion)
- lockData = LFG_LOCKSTATUS_INSUFFICIENT_EXPANSION;
- else if (DisableMgr::IsDisabledFor(DISABLE_TYPE_MAP, dungeon->map, player))
- lockData = LFG_LOCKSTATUS_RAID_LOCKED;
- else if (dungeon->difficulty > DUNGEON_DIFFICULTY_NORMAL && player->GetBoundInstance(dungeon->map, Difficulty(dungeon->difficulty)))
- lockData = LFG_LOCKSTATUS_RAID_LOCKED;
- else if (dungeon->minlevel > level)
- lockData = LFG_LOCKSTATUS_TOO_LOW_LEVEL;
- else if (dungeon->maxlevel < level)
- lockData = LFG_LOCKSTATUS_TOO_HIGH_LEVEL;
- else if (dungeon->seasonal && !IsSeasonActive(dungeon->id))
- lockData = LFG_LOCKSTATUS_NOT_IN_SEASON;
- else if (AccessRequirement const* ar = sObjectMgr->GetAccessRequirement(dungeon->map, Difficulty(dungeon->difficulty)))
- {
- if (ar->item_level && player->GetAverageItemLevel() < ar->item_level)
- lockData = LFG_LOCKSTATUS_TOO_LOW_GEAR_SCORE;
- else if (ar->achievement && !player->HasAchieved(ar->achievement))
- lockData = LFG_LOCKSTATUS_MISSING_ACHIEVEMENT;
- else if (player->GetTeam() == ALLIANCE && ar->quest_A && !player->GetQuestRewardStatus(ar->quest_A))
- lockData = LFG_LOCKSTATUS_QUEST_NOT_COMPLETED;
- else if (player->GetTeam() == HORDE && ar->quest_H && !player->GetQuestRewardStatus(ar->quest_H))
- lockData = LFG_LOCKSTATUS_QUEST_NOT_COMPLETED;
- else
- if (ar->item)
- {
- if (!player->HasItemCount(ar->item) && (!ar->item2 || !player->HasItemCount(ar->item2)))
- lockData = LFG_LOCKSTATUS_MISSING_ITEM;
- }
- else if (ar->item2 && !player->HasItemCount(ar->item2))
- lockData = LFG_LOCKSTATUS_MISSING_ITEM;
- }
-
- /* @todo VoA closed if WG is not under team control (LFG_LOCKSTATUS_RAID_LOCKED)
- lockData = LFG_LOCKSTATUS_TOO_HIGH_GEAR_SCORE;
- lockData = LFG_LOCKSTATUS_ATTUNEMENT_TOO_LOW_LEVEL;
- lockData = LFG_LOCKSTATUS_ATTUNEMENT_TOO_HIGH_LEVEL;
- */
-
- if (lockData)
- lock[dungeon->Entry()] = lockData;
- }
- SetLockedDungeons(guid, lock);
-}
-
-/**
Adds the player/group to lfg queue. If player is in a group then it is the leader
of the group tying to join the group. Join conditions are checked before adding
to the new queue.
@@ -1610,10 +1537,74 @@ LfgDungeonSet const& LFGMgr::GetSelectedDungeons(uint64 guid)
return PlayersStore[guid].GetSelectedDungeons();
}
-LfgLockMap const& LFGMgr::GetLockedDungeons(uint64 guid)
+LfgLockMap const LFGMgr::GetLockedDungeons(uint64 guid)
{
TC_LOG_TRACE("lfg.data.player.dungeons.locked.get", "Player: %u, LockedDungeons.", GUID_LOPART(guid));
- return PlayersStore[guid].GetLockedDungeons();
+ LfgLockMap lock;
+ Player* player = ObjectAccessor::FindPlayer(guid);
+ if (!player)
+ {
+ TC_LOG_WARN("lfg.data.player.dungeons.locked.get", "Player: %u not ingame while retrieving his LockedDungeons.", GUID_LOPART(guid));
+ return lock;
+ }
+
+ uint8 level = player->getLevel();
+ uint8 expansion = player->GetSession()->Expansion();
+ LfgDungeonSet const& dungeons = GetDungeonsByRandom(0);
+ bool denyJoin = !player->GetSession()->HasPermission(rbac::RBAC_PERM_JOIN_DUNGEON_FINDER);
+
+ for (LfgDungeonSet::const_iterator it = dungeons.begin(); it != dungeons.end(); ++it)
+ {
+ LFGDungeonData const* dungeon = GetLFGDungeon(*it);
+ if (!dungeon) // should never happen - We provide a list from sLFGDungeonStore
+ continue;
+
+ uint32 lockData = 0;
+ if (denyJoin)
+ lockData = LFG_LOCKSTATUS_RAID_LOCKED;
+ else if (dungeon->expansion > expansion)
+ lockData = LFG_LOCKSTATUS_INSUFFICIENT_EXPANSION;
+ else if (DisableMgr::IsDisabledFor(DISABLE_TYPE_MAP, dungeon->map, player))
+ lockData = LFG_LOCKSTATUS_RAID_LOCKED;
+ else if (dungeon->difficulty > DUNGEON_DIFFICULTY_NORMAL && player->GetBoundInstance(dungeon->map, Difficulty(dungeon->difficulty)))
+ lockData = LFG_LOCKSTATUS_RAID_LOCKED;
+ else if (dungeon->minlevel > level)
+ lockData = LFG_LOCKSTATUS_TOO_LOW_LEVEL;
+ else if (dungeon->maxlevel < level)
+ lockData = LFG_LOCKSTATUS_TOO_HIGH_LEVEL;
+ else if (dungeon->seasonal && !IsSeasonActive(dungeon->id))
+ lockData = LFG_LOCKSTATUS_NOT_IN_SEASON;
+ else if (AccessRequirement const* ar = sObjectMgr->GetAccessRequirement(dungeon->map, Difficulty(dungeon->difficulty)))
+ {
+ if (ar->item_level && player->GetAverageItemLevel() < ar->item_level)
+ lockData = LFG_LOCKSTATUS_TOO_LOW_GEAR_SCORE;
+ else if (ar->achievement && !player->HasAchieved(ar->achievement))
+ lockData = LFG_LOCKSTATUS_MISSING_ACHIEVEMENT;
+ else if (player->GetTeam() == ALLIANCE && ar->quest_A && !player->GetQuestRewardStatus(ar->quest_A))
+ lockData = LFG_LOCKSTATUS_QUEST_NOT_COMPLETED;
+ else if (player->GetTeam() == HORDE && ar->quest_H && !player->GetQuestRewardStatus(ar->quest_H))
+ lockData = LFG_LOCKSTATUS_QUEST_NOT_COMPLETED;
+ else
+ if (ar->item)
+ {
+ if (!player->HasItemCount(ar->item) && (!ar->item2 || !player->HasItemCount(ar->item2)))
+ lockData = LFG_LOCKSTATUS_MISSING_ITEM;
+ }
+ else if (ar->item2 && !player->HasItemCount(ar->item2))
+ lockData = LFG_LOCKSTATUS_MISSING_ITEM;
+ }
+
+ /* @todo VoA closed if WG is not under team control (LFG_LOCKSTATUS_RAID_LOCKED)
+ lockData = LFG_LOCKSTATUS_TOO_HIGH_GEAR_SCORE;
+ lockData = LFG_LOCKSTATUS_ATTUNEMENT_TOO_LOW_LEVEL;
+ lockData = LFG_LOCKSTATUS_ATTUNEMENT_TOO_HIGH_LEVEL;
+ */
+
+ if (lockData)
+ lock[dungeon->Entry()] = lockData;
+ }
+
+ return lock;
}
uint8 LFGMgr::GetKicksLeft(uint64 guid)
@@ -1691,12 +1682,6 @@ void LFGMgr::SetSelectedDungeons(uint64 guid, LfgDungeonSet const& dungeons)
PlayersStore[guid].SetSelectedDungeons(dungeons);
}
-void LFGMgr::SetLockedDungeons(uint64 guid, LfgLockMap const& lock)
-{
- TC_LOG_TRACE("lfg.data.player.dungeon.locked.set", "Player: %u, LockedDungeons", GUID_LOPART(guid));
- PlayersStore[guid].SetLockedDungeons(lock);
-}
-
void LFGMgr::DecreaseKicksLeft(uint64 guid)
{
GroupsStore[guid].DecreaseKicksLeft();
@@ -1721,14 +1706,13 @@ void LFGMgr::RemoveGroupData(uint64 guid)
LfgState state = GetState(guid);
// If group is being formed after proposal success do nothing more
LfgGuidSet const& players = it->second.GetPlayers();
- for (LfgGuidSet::const_iterator it = players.begin(); it != players.end(); ++it)
+ for (uint64 playerGUID : players)
{
- uint64 guid = (*it);
- SetGroup(*it, 0);
+ SetGroup(playerGUID, 0);
if (state != LFG_STATE_PROPOSAL)
{
- SetState(*it, LFG_STATE_NONE);
- SendLfgUpdateParty(guid, LfgUpdateData(LFG_UPDATETYPE_REMOVED_FROM_QUEUE));
+ SetState(playerGUID, LFG_STATE_NONE);
+ SendLfgUpdateParty(playerGUID, LfgUpdateData(LFG_UPDATETYPE_REMOVED_FROM_QUEUE));
}
}
GroupsStore.erase(it);
@@ -1885,7 +1869,7 @@ void LFGMgr::Clean()
bool LFGMgr::isOptionEnabled(uint32 option)
{
- return m_options & option;
+ return (m_options & option) != 0;
}
uint32 LFGMgr::GetOptions()
diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h
index 8e33ba0a2f6..547d026dee0 100644
--- a/src/server/game/DungeonFinding/LFGMgr.h
+++ b/src/server/game/DungeonFinding/LFGMgr.h
@@ -18,7 +18,6 @@
#ifndef _LFGMGR_H
#define _LFGMGR_H
-#include <ace/Singleton.h>
#include "DBCStructure.h"
#include "Field.h"
#include "LFG.h"
@@ -145,7 +144,7 @@ typedef std::map<uint64, LfgProposalPlayer> LfgProposalPlayerContainer;
typedef std::map<uint64, LfgPlayerBoot> LfgPlayerBootContainer;
typedef std::map<uint64, LfgGroupData> LfgGroupDataContainer;
typedef std::map<uint64, LfgPlayerData> LfgPlayerDataContainer;
-typedef UNORDERED_MAP<uint32, LFGDungeonData> LFGDungeonContainer;
+typedef std::unordered_map<uint32, LFGDungeonData> LFGDungeonContainer;
// Data needed by SMSG_LFG_JOIN_RESULT
struct LfgJoinResultData
@@ -271,7 +270,7 @@ struct LFGDungeonData
LFGDungeonData(LFGDungeonEntry const* dbc): id(dbc->ID), name(dbc->name[0]), map(dbc->map),
type(dbc->type), expansion(dbc->expansion), group(dbc->grouptype),
minlevel(dbc->minlevel), maxlevel(dbc->maxlevel), difficulty(Difficulty(dbc->difficulty)),
- seasonal(dbc->flags & LFG_FLAG_SEASONAL), x(0.0f), y(0.0f), z(0.0f), o(0.0f)
+ seasonal((dbc->flags & LFG_FLAG_SEASONAL) != 0), x(0.0f), y(0.0f), z(0.0f), o(0.0f)
{ }
uint32 id;
@@ -292,13 +291,17 @@ struct LFGDungeonData
class LFGMgr
{
- friend class ACE_Singleton<LFGMgr, ACE_Null_Mutex>;
-
private:
LFGMgr();
~LFGMgr();
public:
+ static LFGMgr* instance()
+ {
+ static LFGMgr instance;
+ return &instance;
+ }
+
// Functions used outside lfg namespace
void Update(uint32 diff);
@@ -351,8 +354,6 @@ class LFGMgr
// LFGScripts
/// Get leader of the group (using internal data)
uint64 GetLeader(uint64 guid);
- /// Initializes locked dungeons for given player (called at login or level change)
- void InitializeLockedDungeons(Player* player, uint8 level = 0);
/// Sets player team
void SetTeam(uint64 guid, uint8 team);
/// Sets player group
@@ -370,7 +371,7 @@ class LFGMgr
// LFGHandler
/// Get locked dungeons
- LfgLockMap const& GetLockedDungeons(uint64 guid);
+ LfgLockMap const GetLockedDungeons(uint64 guid);
/// Returns current lfg status
LfgUpdateData GetLfgStatus(uint64 guid);
/// Checks if Seasonal dungeon is active
@@ -422,7 +423,6 @@ class LFGMgr
void ClearState(uint64 guid, char const* debugMsg);
void SetDungeon(uint64 guid, uint32 dungeon);
void SetSelectedDungeons(uint64 guid, LfgDungeonSet const& dungeons);
- void SetLockedDungeons(uint64 guid, LfgLockMap const& lock);
void DecreaseKicksLeft(uint64 guid);
void SetState(uint64 guid, LfgState state);
void RemovePlayerData(uint64 guid);
@@ -469,5 +469,5 @@ class LFGMgr
} // namespace lfg
-#define sLFGMgr ACE_Singleton<lfg::LFGMgr, ACE_Null_Mutex>::instance()
+#define sLFGMgr lfg::LFGMgr::instance()
#endif
diff --git a/src/server/game/DungeonFinding/LFGPlayerData.cpp b/src/server/game/DungeonFinding/LFGPlayerData.cpp
index 0553d4ac4fe..84b93543d7f 100644
--- a/src/server/game/DungeonFinding/LFGPlayerData.cpp
+++ b/src/server/game/DungeonFinding/LFGPlayerData.cpp
@@ -54,11 +54,6 @@ void LfgPlayerData::RestoreState()
m_State = m_OldState;
}
-void LfgPlayerData::SetLockedDungeons(LfgLockMap const& lockStatus)
-{
- m_LockedDungeons = lockStatus;
-}
-
void LfgPlayerData::SetTeam(uint8 team)
{
m_Team = team;
@@ -94,11 +89,6 @@ LfgState LfgPlayerData::GetOldState() const
return m_OldState;
}
-const LfgLockMap& LfgPlayerData::GetLockedDungeons() const
-{
- return m_LockedDungeons;
-}
-
uint8 LfgPlayerData::GetTeam() const
{
return m_Team;
diff --git a/src/server/game/DungeonFinding/LFGPlayerData.h b/src/server/game/DungeonFinding/LFGPlayerData.h
index e20e914a9c9..996764e7620 100644
--- a/src/server/game/DungeonFinding/LFGPlayerData.h
+++ b/src/server/game/DungeonFinding/LFGPlayerData.h
@@ -35,7 +35,6 @@ class LfgPlayerData
// General
void SetState(LfgState state);
void RestoreState();
- void SetLockedDungeons(LfgLockMap const& lock);
void SetTeam(uint8 team);
void SetGroup(uint64 group);
@@ -47,7 +46,6 @@ class LfgPlayerData
// General
LfgState GetState() const;
LfgState GetOldState() const;
- LfgLockMap const& GetLockedDungeons() const;
uint8 GetTeam() const;
uint64 GetGroup() const;
@@ -61,7 +59,6 @@ class LfgPlayerData
LfgState m_State; ///< State if group in LFG
LfgState m_OldState; ///< Old State - Used to restore state after failed Rolecheck/Proposal
// Player
- LfgLockMap m_LockedDungeons; ///< Dungeons player can't do and reason
uint8 m_Team; ///< Player team - determines the queue to join
uint64 m_Group; ///< Original group of player when joined LFG
diff --git a/src/server/game/DungeonFinding/LFGScripts.cpp b/src/server/game/DungeonFinding/LFGScripts.cpp
index 1f182ce0761..181e04e04fc 100644
--- a/src/server/game/DungeonFinding/LFGScripts.cpp
+++ b/src/server/game/DungeonFinding/LFGScripts.cpp
@@ -34,14 +34,6 @@ namespace lfg
LFGPlayerScript::LFGPlayerScript() : PlayerScript("LFGPlayerScript") { }
-void LFGPlayerScript::OnLevelChanged(Player* player, uint8 /*oldLevel*/)
-{
- if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER))
- return;
-
- sLFGMgr->InitializeLockedDungeons(player);
-}
-
void LFGPlayerScript::OnLogout(Player* player)
{
if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER))
@@ -54,7 +46,7 @@ void LFGPlayerScript::OnLogout(Player* player)
}
}
-void LFGPlayerScript::OnLogin(Player* player)
+void LFGPlayerScript::OnLogin(Player* player, bool /*loginFirst*/)
{
if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER))
return;
@@ -74,18 +66,10 @@ void LFGPlayerScript::OnLogin(Player* player)
}
}
- sLFGMgr->InitializeLockedDungeons(player);
sLFGMgr->SetTeam(player->GetGUID(), player->GetTeam());
/// @todo - Restore LfgPlayerData and send proper status to player if it was in a group
}
-void LFGPlayerScript::OnBindToInstance(Player* player, Difficulty difficulty, uint32 mapId, bool /*permanent*/)
-{
- MapEntry const* mapEntry = sMapStore.LookupEntry(mapId);
- if (mapEntry->IsDungeon() && difficulty > DUNGEON_DIFFICULTY_NORMAL)
- sLFGMgr->InitializeLockedDungeons(player);
-}
-
void LFGPlayerScript::OnMapChanged(Player* player)
{
Map const* map = player->GetMap();
diff --git a/src/server/game/DungeonFinding/LFGScripts.h b/src/server/game/DungeonFinding/LFGScripts.h
index c4e1cf0a203..3f1dcbb218b 100644
--- a/src/server/game/DungeonFinding/LFGScripts.h
+++ b/src/server/game/DungeonFinding/LFGScripts.h
@@ -35,11 +35,9 @@ class LFGPlayerScript : public PlayerScript
LFGPlayerScript();
// Player Hooks
- void OnLevelChanged(Player* player, uint8 oldLevel);
- void OnLogout(Player* player);
- void OnLogin(Player* player);
- void OnBindToInstance(Player* player, Difficulty difficulty, uint32 mapId, bool permanent);
- void OnMapChanged(Player* player);
+ void OnLogout(Player* player) override;
+ void OnLogin(Player* player, bool loginFirst) override;
+ void OnMapChanged(Player* player) override;
};
class LFGGroupScript : public GroupScript
@@ -48,11 +46,11 @@ class LFGGroupScript : public GroupScript
LFGGroupScript();
// Group Hooks
- void OnAddMember(Group* group, uint64 guid);
- void OnRemoveMember(Group* group, uint64 guid, RemoveMethod method, uint64 kicker, char const* reason);
- void OnDisband(Group* group);
- void OnChangeLeader(Group* group, uint64 newLeaderGuid, uint64 oldLeaderGuid);
- void OnInviteMember(Group* group, uint64 guid);
+ void OnAddMember(Group* group, uint64 guid) override;
+ void OnRemoveMember(Group* group, uint64 guid, RemoveMethod method, uint64 kicker, char const* reason) override;
+ void OnDisband(Group* group) override;
+ void OnChangeLeader(Group* group, uint64 newLeaderGuid, uint64 oldLeaderGuid) override;
+ void OnInviteMember(Group* group, uint64 guid) override;
};
} // namespace lfg
diff --git a/src/server/game/Entities/Corpse/Corpse.h b/src/server/game/Entities/Corpse/Corpse.h
index def84dd93a9..5039c85bcb9 100644
--- a/src/server/game/Entities/Corpse/Corpse.h
+++ b/src/server/game/Entities/Corpse/Corpse.h
@@ -52,8 +52,8 @@ class Corpse : public WorldObject, public GridObject<Corpse>
explicit Corpse(CorpseType type = CORPSE_BONES);
~Corpse();
- void AddToWorld();
- void RemoveFromWorld();
+ void AddToWorld() override;
+ void RemoveFromWorld() override;
bool Create(uint32 guidlow, Map* map);
bool Create(uint32 guidlow, Player* owner);
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index e4bdc2d58fe..ba94a99c8dd 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -111,11 +111,11 @@ uint32 CreatureTemplate::GetFirstValidModelId() const
bool AssistDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
{
- if (Unit* victim = Unit::GetUnit(m_owner, m_victim))
+ if (Unit* victim = ObjectAccessor::GetUnit(m_owner, m_victim))
{
while (!m_assistants.empty())
{
- Creature* assistant = Unit::GetCreature(m_owner, *m_assistants.begin());
+ Creature* assistant = ObjectAccessor::GetCreature(m_owner, *m_assistants.begin());
m_assistants.pop_front();
if (assistant && assistant->CanAssistTo(&m_owner, victim))
@@ -142,8 +142,8 @@ bool ForcedDespawnDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
}
Creature::Creature(bool isWorldObject): Unit(isWorldObject), MapObject(),
-lootForPickPocketed(false), lootForBody(false), m_groupLootTimer(0), lootingGroupLowGUID(0),
-m_PlayerDamageReq(0), m_lootRecipient(0), m_lootRecipientGroup(0), m_corpseRemoveTime(0), m_respawnTime(0),
+m_groupLootTimer(0), lootingGroupLowGUID(0), m_PlayerDamageReq(0),
+m_lootRecipient(0), m_lootRecipientGroup(0), _skinner(0), _pickpocketLootRestore(0), m_corpseRemoveTime(0), m_respawnTime(0),
m_respawnDelay(300), m_corpseDelay(60), m_respawnradius(0.0f), m_reactState(REACT_AGGRESSIVE),
m_defaultMovementType(IDLE_MOTION_TYPE), m_DBTableGuid(0), m_equipmentId(0), m_originalEquipmentId(0), m_AlreadyCallAssistance(false),
m_AlreadySearchedAssistance(false), m_regenHealth(true), m_AI_locked(false), m_meleeDamageSchoolMask(SPELL_SCHOOL_MASK_NORMAL),
@@ -257,7 +257,7 @@ void Creature::RemoveCorpse(bool setSpawnTime)
/**
* change the entry of creature until respawn
*/
-bool Creature::InitEntry(uint32 entry, uint32 /*team*/, const CreatureData* data)
+bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/)
{
CreatureTemplate const* normalInfo = sObjectMgr->GetCreatureTemplate(entry);
if (!normalInfo)
@@ -333,10 +333,10 @@ bool Creature::InitEntry(uint32 entry, uint32 /*team*/, const CreatureData* data
SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f);
- SetSpeed(MOVE_WALK, cinfo->speed_walk);
- SetSpeed(MOVE_RUN, cinfo->speed_run);
- SetSpeed(MOVE_SWIM, 1.0f); // using 1.0 rate
- SetSpeed(MOVE_FLIGHT, 1.0f); // using 1.0 rate
+ SetSpeed(MOVE_WALK, cinfo->speed_walk);
+ SetSpeed(MOVE_RUN, cinfo->speed_run);
+ SetSpeed(MOVE_SWIM, 1.0f); // using 1.0 rate
+ SetSpeed(MOVE_FLIGHT, 1.0f); // using 1.0 rate
// Will set UNIT_FIELD_BOUNDINGRADIUS and UNIT_FIELD_COMBATREACH
SetObjectScale(cinfo->scale);
@@ -354,9 +354,9 @@ bool Creature::InitEntry(uint32 entry, uint32 /*team*/, const CreatureData* data
return true;
}
-bool Creature::UpdateEntry(uint32 Entry, uint32 team, const CreatureData* data)
+bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/)
{
- if (!InitEntry(Entry, team, data))
+ if (!InitEntry(entry, data))
return false;
CreatureTemplate const* cInfo = GetCreatureTemplate();
@@ -367,10 +367,7 @@ bool Creature::UpdateEntry(uint32 Entry, uint32 team, const CreatureData* data)
if (!GetCreatureAddon())
SetSheath(SHEATH_STATE_MELEE);
- if (team == HORDE)
- setFaction(cInfo->faction_H);
- else
- setFaction(cInfo->faction_A);
+ setFaction(cInfo->faction);
uint32 npcflag, unit_flags, dynamicflags;
ObjectMgr::ChooseCreatureFlags(cInfo, npcflag, unit_flags, dynamicflags, data);
@@ -387,9 +384,9 @@ bool Creature::UpdateEntry(uint32 Entry, uint32 team, const CreatureData* data)
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
- SetAttackTime(BASE_ATTACK, cInfo->baseattacktime);
- SetAttackTime(OFF_ATTACK, cInfo->baseattacktime);
- SetAttackTime(RANGED_ATTACK, cInfo->rangeattacktime);
+ SetAttackTime(BASE_ATTACK, cInfo->BaseAttackTime);
+ SetAttackTime(OFF_ATTACK, cInfo->BaseAttackTime);
+ SetAttackTime(RANGED_ATTACK, cInfo->RangeAttackTime);
SelectLevel();
@@ -408,7 +405,7 @@ bool Creature::UpdateEntry(uint32 Entry, uint32 team, const CreatureData* data)
UpdateAllStats();
// checked and error show at loading templates
- if (FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(cInfo->faction_A))
+ if (FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(cInfo->faction))
{
if (factionTemplate->factionFlags & FACTION_TEMPLATE_FLAG_PVP)
SetPvP(true);
@@ -562,21 +559,21 @@ void Creature::Update(uint32 diff)
break;
bool bInCombat = IsInCombat() && (!GetVictim() || // if IsInCombat() is true and this has no victim
- !GetVictim()->GetCharmerOrOwnerPlayerOrPlayerItself() || // or the victim/owner/charmer is not a player
- !GetVictim()->GetCharmerOrOwnerPlayerOrPlayerItself()->IsGameMaster()); // or the victim/owner/charmer is not a GameMaster
+ !EnsureVictim()->GetCharmerOrOwnerPlayerOrPlayerItself() || // or the victim/owner/charmer is not a player
+ !EnsureVictim()->GetCharmerOrOwnerPlayerOrPlayerItself()->IsGameMaster()); // or the victim/owner/charmer is not a GameMaster
/*if (m_regenTimer <= diff)
{*/
if (!IsInEvadeMode() && (!bInCombat || IsPolymorphed())) // regenerate health if not in combat or if polymorphed
RegenerateHealth();
- if (getPowerType() == POWER_ENERGY)
+ if (HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER))
{
- if (!IsVehicle() || GetVehicleKit()->GetVehicleInfo()->m_powerType != POWER_PYRITE)
+ if (getPowerType() == POWER_ENERGY)
Regenerate(POWER_ENERGY);
+ else
+ RegenerateMana();
}
- else
- RegenerateMana();
/*if (!bIsPolymorphed) // only increase the timer if not polymorphed
m_regenTimer += CREATURE_REGEN_INTERVAL - diff;
@@ -693,7 +690,7 @@ void Creature::DoFleeToGetAssistance()
UpdateSpeed(MOVE_RUN, false);
if (!creature)
- //SetFeared(true, GetVictim()->GetGUID(), 0, sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_FLEE_DELAY));
+ //SetFeared(true, EnsureVictim()->GetGUID(), 0, sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_FLEE_DELAY));
/// @todo use 31365
SetControlled(true, UNIT_STATE_FLEEING);
else
@@ -739,16 +736,16 @@ void Creature::Motion_Initialize()
GetMotionMaster()->Initialize();
}
-bool Creature::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry, uint32 vehId, uint32 team, float x, float y, float z, float ang, const CreatureData* data)
+bool Creature::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 entry, float x, float y, float z, float ang, CreatureData const* data /*= nullptr*/, uint32 vehId /*= 0*/)
{
ASSERT(map);
SetMap(map);
SetPhaseMask(phaseMask, false);
- CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(Entry);
+ CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(entry);
if (!cinfo)
{
- TC_LOG_ERROR("sql.sql", "Creature::Create(): creature template (guidlow: %u, entry: %u) does not exist.", guidlow, Entry);
+ TC_LOG_ERROR("sql.sql", "Creature::Create(): creature template (guidlow: %u, entry: %u) does not exist.", guidlow, entry);
return false;
}
@@ -756,13 +753,12 @@ bool Creature::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry,
//! returning correct zone id for selecting OutdoorPvP/Battlefield script
Relocate(x, y, z, ang);
- //oX = x; oY = y; dX = x; dY = y; m_moveTime = 0; m_startMove = 0;
- if (!CreateFromProto(guidlow, Entry, vehId, team, data))
+ if (!CreateFromProto(guidlow, entry, data, vehId))
return false;
if (!IsPositionValid())
{
- TC_LOG_ERROR("entities.unit", "Creature::Create(): given coordinates for creature (guidlow %d, entry %d) are not valid (X: %f, Y: %f, Z: %f, O: %f)", guidlow, Entry, x, y, z, ang);
+ TC_LOG_ERROR("entities.unit", "Creature::Create(): given coordinates for creature (guidlow %d, entry %d) are not valid (X: %f, Y: %f, Z: %f, O: %f)", guidlow, entry, x, y, z, ang);
return false;
}
@@ -814,20 +810,19 @@ bool Creature::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry,
m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST);
}
- if (Entry == VISUAL_WAYPOINT)
- SetVisible(false);
-
return true;
}
void Creature::InitializeReactState()
{
- if (IsTotem() || IsTrigger() || GetCreatureType() == CREATURE_TYPE_CRITTER || IsSpiritService())
+ if (IsTotem() || IsTrigger() || IsCritter() || IsSpiritService())
SetReactState(REACT_PASSIVE);
+ /*
+ else if (IsCivilian())
+ SetReactState(REACT_DEFENSIVE);
+ */
else
SetReactState(REACT_AGGRESSIVE);
- /*else if (IsCivilian())
- SetReactState(REACT_DEFENSIVE);*/;
}
bool Creature::isCanInteractWithBattleMaster(Player* player, bool msg) const
@@ -1081,7 +1076,7 @@ void Creature::SelectLevel()
float basedamage = stats->GenerateBaseDamage(cInfo);
float weaponBaseMinDamage = basedamage;
- float weaponBaseMaxDamage = basedamage * 1.5;
+ float weaponBaseMaxDamage = basedamage * 1.5f;
SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, weaponBaseMinDamage);
SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, weaponBaseMaxDamage);
@@ -1159,35 +1154,43 @@ float Creature::GetSpellDamageMod(int32 Rank) const
}
}
-bool Creature::CreateFromProto(uint32 guidlow, uint32 Entry, uint32 vehId, uint32 team, const CreatureData* data)
+bool Creature::CreateFromProto(uint32 guidlow, uint32 entry, CreatureData const* data /*= nullptr*/, uint32 vehId /*= 0*/)
{
SetZoneScript();
if (GetZoneScript() && data)
{
- Entry = GetZoneScript()->GetCreatureEntry(guidlow, data);
- if (!Entry)
+ entry = GetZoneScript()->GetCreatureEntry(guidlow, data);
+ if (!entry)
return false;
}
- CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(Entry);
+ CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(entry);
if (!cinfo)
{
- TC_LOG_ERROR("sql.sql", "Creature::CreateFromProto(): creature template (guidlow: %u, entry: %u) does not exist.", guidlow, Entry);
+ TC_LOG_ERROR("sql.sql", "Creature::CreateFromProto(): creature template (guidlow: %u, entry: %u) does not exist.", guidlow, entry);
return false;
}
- SetOriginalEntry(Entry);
+ SetOriginalEntry(entry);
- if (!vehId)
- vehId = cinfo->VehicleId;
-
- Object::_Create(guidlow, Entry, vehId ? HIGHGUID_VEHICLE : HIGHGUID_UNIT);
+ Object::_Create(guidlow, entry, (vehId || cinfo->VehicleId) ? HIGHGUID_VEHICLE : HIGHGUID_UNIT);
- if (!UpdateEntry(Entry, team, data))
+ if (!UpdateEntry(entry, data))
return false;
+ if (!vehId)
+ {
+ if (GetCreatureTemplate()->VehicleId)
+ {
+ vehId = GetCreatureTemplate()->VehicleId;
+ entry = GetCreatureTemplate()->Entry;
+ }
+ else
+ vehId = cinfo->VehicleId;
+ }
+
if (vehId)
- CreateVehicleKit(vehId, Entry);
+ CreateVehicleKit(vehId, entry);
return true;
}
@@ -1211,8 +1214,7 @@ bool Creature::LoadCreatureFromDB(uint32 guid, Map* map, bool addToMap)
else
guid = sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT);
- uint16 team = 0;
- if (!Create(guid, map, data->phaseMask, data->id, 0, team, data->posX, data->posY, data->posZ, data->orientation, data))
+ if (!Create(guid, map, data->phaseMask, data->id, data->posX, data->posY, data->posZ, data->orientation, data))
return false;
//We should set first home position, because then AI calls home movement
@@ -1461,11 +1463,6 @@ void Creature::setDeathState(DeathState s)
setActive(false);
- if (!IsPet() && GetCreatureTemplate()->SkinLootId)
- if (LootTemplates_Skinning.HaveLootFor(GetCreatureTemplate()->SkinLootId))
- if (hasLootRecipient())
- SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE);
-
if (HasSearchedAssistance())
{
SetNoSearchAssistance(false);
@@ -1525,9 +1522,8 @@ void Creature::Respawn(bool force)
TC_LOG_DEBUG("entities.unit", "Respawning creature %s (GuidLow: %u, Full GUID: " UI64FMTD " Entry: %u)",
GetName().c_str(), GetGUIDLow(), GetGUID(), GetEntry());
m_respawnTime = 0;
- lootForPickPocketed = false;
- lootForBody = false;
-
+ ResetPickPocketRefillTimer();
+ loot.clear();
if (m_originalEntry != GetEntry())
UpdateEntry(m_originalEntry);
@@ -1642,7 +1638,7 @@ bool Creature::isWorldBoss() const
if (IsPet())
return false;
- return GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_BOSS;
+ return (GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_BOSS) != 0;
}
SpellInfo const* Creature::reachWithSpellAttack(Unit* victim)
@@ -1845,7 +1841,7 @@ void Creature::CallAssistance()
if (!assistList.empty())
{
- AssistDelayEvent* e = new AssistDelayEvent(GetVictim()->GetGUID(), *this);
+ AssistDelayEvent* e = new AssistDelayEvent(EnsureVictim()->GetGUID(), *this);
while (!assistList.empty())
{
// Pushing guids because in delay can happen some creature gets despawned => invalid pointer
@@ -2266,26 +2262,24 @@ void Creature::GetRespawnPosition(float &x, float &y, float &z, float* ori, floa
void Creature::AllLootRemovedFromCorpse()
{
- if (!HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE))
- {
- time_t now = time(NULL);
- if (m_corpseRemoveTime <= now)
- return;
+ if (loot.loot_type != LOOT_SKINNING && !IsPet() && GetCreatureTemplate()->SkinLootId && hasLootRecipient())
+ if (LootTemplates_Skinning.HaveLootFor(GetCreatureTemplate()->SkinLootId))
+ SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE);
- float decayRate;
- CreatureTemplate const* cinfo = GetCreatureTemplate();
+ time_t now = time(NULL);
+ // Do not reset corpse remove time if corpse is already removed
+ if (m_corpseRemoveTime <= now)
+ return;
- decayRate = sWorld->getRate(RATE_CORPSE_DECAY_LOOTED);
- uint32 diff = uint32((m_corpseRemoveTime - now) * decayRate);
+ float decayRate = sWorld->getRate(RATE_CORPSE_DECAY_LOOTED);
- m_respawnTime -= diff;
+ // corpse skinnable, but without skinning flag, and then skinned, corpse will despawn next update
+ if (loot.loot_type == LOOT_SKINNING)
+ m_corpseRemoveTime = now;
+ else
+ m_corpseRemoveTime = now + uint32(m_corpseDelay * decayRate);
- // corpse skinnable, but without skinning flag, and then skinned, corpse will despawn next update
- if (cinfo && cinfo->SkinLootId)
- m_corpseRemoveTime = time(NULL);
- else
- m_corpseRemoveTime -= diff;
- }
+ m_respawnTime = m_corpseRemoveTime + m_respawnDelay;
}
uint8 Creature::getLevelForTarget(WorldObject const* target) const
@@ -2710,3 +2704,8 @@ void Creature::ReleaseFocus(Spell const* focusSpell)
ClearUnitState(UNIT_STATE_ROTATING);
}
+void Creature::StartPickPocketRefillTimer()
+{
+ _pickpocketLootRestore = time(NULL) + sWorld->getIntConfig(CONFIG_CREATURE_PICKPOCKET_REFILL);
+}
+
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index 69c3d169170..9b332bb5de4 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -64,12 +64,12 @@ enum CreatureFlagsExtra
CREATURE_FLAG_EXTRA_NO_SKILLGAIN | CREATURE_FLAG_EXTRA_TAUNT_DIMINISH | CREATURE_FLAG_EXTRA_ALL_DIMINISH | \
CREATURE_FLAG_EXTRA_GUARD)
-#define MAX_KILL_CREDIT 2
#define CREATURE_REGEN_INTERVAL 2 * IN_MILLISECONDS
+#define MAX_KILL_CREDIT 2
+#define MAX_CREATURE_MODELS 4
#define MAX_CREATURE_QUEST_ITEMS 6
-
-#define MAX_EQUIPMENT_ITEMS 3
+#define CREATURE_MAX_SPELLS 8
// from `creature_template` table
struct CreatureTemplate
@@ -88,20 +88,17 @@ struct CreatureTemplate
uint8 minlevel;
uint8 maxlevel;
uint32 expansion;
- uint32 faction_A;
- uint32 faction_H;
+ uint32 faction;
uint32 npcflag;
float speed_walk;
float speed_run;
float scale;
uint32 rank;
- float mindmg;
- float maxdmg;
uint32 dmgschool;
- uint32 attackpower;
- float dmg_multiplier;
- uint32 baseattacktime;
- uint32 rangeattacktime;
+ uint32 BaseAttackTime;
+ uint32 RangeAttackTime;
+ float BaseVariance;
+ float RangeVariance;
uint32 unit_class; // enum Classes. Note only 4 classes are known for creatures.
uint32 unit_flags; // enum UnitFlags mask values
uint32 unit_flags2; // enum UnitFlags2 mask values
@@ -111,9 +108,6 @@ struct CreatureTemplate
uint32 trainer_spell;
uint32 trainer_class;
uint32 trainer_race;
- float minrangedmg;
- float maxrangedmg;
- uint32 rangedattackpower;
uint32 type; // enum CreatureType values
uint32 type_flags; // enum CreatureTypeFlags mask values
uint32 lootid;
@@ -132,6 +126,8 @@ struct CreatureTemplate
float ModHealth;
float ModMana;
float ModArmor;
+ float ModDamage;
+ float ModExperience;
bool RacialLeader;
uint32 questItems[MAX_CREATURE_QUEST_ITEMS];
uint32 movementId;
@@ -171,7 +167,7 @@ struct CreatureTemplate
};
// Benchmarked: Faster than std::map (insert/find)
-typedef UNORDERED_MAP<uint32, CreatureTemplate> CreatureTemplateContainer;
+typedef std::unordered_map<uint32, CreatureTemplate> CreatureTemplateContainer;
// GCC have alternative #pragma pack(N) syntax and old gcc version not support pack(push, N), also any gcc version not support it at some platform
#if defined(__GNUC__)
@@ -219,7 +215,7 @@ struct CreatureBaseStats
static CreatureBaseStats const* GetBaseStats(uint8 level, uint8 unitClass);
};
-typedef UNORDERED_MAP<uint16, CreatureBaseStats> CreatureBaseStatsContainer;
+typedef std::unordered_map<uint16, CreatureBaseStats> CreatureBaseStatsContainer;
struct CreatureLocale
{
@@ -238,14 +234,16 @@ struct PointOfInterestLocale
StringVector IconName;
};
+#define MAX_EQUIPMENT_ITEMS 3
+
struct EquipmentInfo
{
uint32 ItemEntry[MAX_EQUIPMENT_ITEMS];
};
// Benchmarked: Faster than std::map (insert/find)
-typedef UNORDERED_MAP<uint8, EquipmentInfo> EquipmentInfoContainerInternal;
-typedef UNORDERED_MAP<uint32, EquipmentInfoContainerInternal> EquipmentInfoContainer;
+typedef std::unordered_map<uint8, EquipmentInfo> EquipmentInfoContainerInternal;
+typedef std::unordered_map<uint32, EquipmentInfoContainerInternal> EquipmentInfoContainer;
// from `creature` table
struct CreatureData
@@ -285,7 +283,7 @@ struct CreatureModelInfo
};
// Benchmarked: Faster than std::map (insert/find)
-typedef UNORDERED_MAP<uint16, CreatureModelInfo> CreatureModelContainer;
+typedef std::unordered_map<uint16, CreatureModelInfo> CreatureModelContainer;
enum InhabitTypeValues
{
@@ -326,7 +324,7 @@ struct CreatureAddon
std::vector<uint32> auras;
};
-typedef UNORDERED_MAP<uint32, CreatureAddon> CreatureAddonContainer;
+typedef std::unordered_map<uint32, CreatureAddon> CreatureAddonContainer;
// Vendors
struct VendorItem
@@ -402,7 +400,7 @@ struct TrainerSpell
bool IsCastable() const { return learnedSpell[0] != spell; }
};
-typedef UNORDERED_MAP<uint32 /*spellid*/, TrainerSpell> TrainerSpellMap;
+typedef std::unordered_map<uint32 /*spellid*/, TrainerSpell> TrainerSpellMap;
struct TrainerSpellData
{
@@ -429,33 +427,33 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
explicit Creature(bool isWorldObject = false);
virtual ~Creature();
- void AddToWorld();
- void RemoveFromWorld();
+ void AddToWorld() override;
+ void RemoveFromWorld() override;
- void SetObjectScale(float scale);
- void SetDisplayId(uint32 modelId);
+ void SetObjectScale(float scale) override;
+ void SetDisplayId(uint32 modelId) override;
void DisappearAndDie();
- bool Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry, uint32 vehId, uint32 team, float x, float y, float z, float ang, const CreatureData* data = NULL);
+ bool Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 entry, float x, float y, float z, float ang, CreatureData const* data = nullptr, uint32 vehId = 0);
bool LoadCreaturesAddon(bool reload = false);
void SelectLevel();
void LoadEquipment(int8 id = 1, bool force = false);
uint32 GetDBTableGUIDLow() const { return m_DBTableGuid; }
- void Update(uint32 time); // overwrited Unit::Update
- void GetRespawnPosition(float &x, float &y, float &z, float* ori = NULL, float* dist =NULL) const;
+ void Update(uint32 time) override; // overwrited Unit::Update
+ void GetRespawnPosition(float &x, float &y, float &z, float* ori = nullptr, float* dist =nullptr) const;
void SetCorpseDelay(uint32 delay) { m_corpseDelay = delay; }
uint32 GetCorpseDelay() const { return m_corpseDelay; }
bool IsRacialLeader() const { return GetCreatureTemplate()->RacialLeader; }
- bool IsCivilian() const { return GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_CIVILIAN; }
- bool IsTrigger() const { return GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER; }
- bool IsGuard() const { return GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_GUARD; }
- bool CanWalk() const { return GetCreatureTemplate()->InhabitType & INHABIT_GROUND; }
- bool CanSwim() const { return GetCreatureTemplate()->InhabitType & INHABIT_WATER || IsPet(); }
- bool CanFly() const { return GetCreatureTemplate()->InhabitType & INHABIT_AIR; }
+ bool IsCivilian() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_CIVILIAN) != 0; }
+ bool IsTrigger() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER) != 0; }
+ bool IsGuard() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_GUARD) != 0; }
+ bool CanWalk() const { return (GetCreatureTemplate()->InhabitType & INHABIT_GROUND) != 0; }
+ bool CanSwim() const { return (GetCreatureTemplate()->InhabitType & INHABIT_WATER) != 0 || IsPet(); }
+ bool CanFly() const override { return (GetCreatureTemplate()->InhabitType & INHABIT_AIR) != 0; }
void SetReactState(ReactStates st) { m_reactState = st; }
ReactStates GetReactState() { return m_reactState; }
@@ -466,14 +464,14 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
bool isCanInteractWithBattleMaster(Player* player, bool msg) const;
bool isCanTrainingAndResetTalentsOf(Player* player) const;
bool CanCreatureAttack(Unit const* victim, bool force = true) const;
- bool IsImmunedToSpell(SpellInfo const* spellInfo) const; // override Unit::IsImmunedToSpell
- bool IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) const; // override Unit::IsImmunedToSpellEffect
+ bool IsImmunedToSpell(SpellInfo const* spellInfo) const override; // override Unit::IsImmunedToSpell
+ bool IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) const override; // override Unit::IsImmunedToSpellEffect
bool isElite() const;
bool isWorldBoss() const;
bool IsDungeonBoss() const;
- uint8 getLevelForTarget(WorldObject const* target) const; // overwrite Unit::getLevelForTarget for boss level support
+ uint8 getLevelForTarget(WorldObject const* target) const override; // overwrite Unit::getLevelForTarget for boss level support
bool IsInEvadeMode() const { return HasUnitState(UNIT_STATE_EVADE); }
@@ -482,17 +480,17 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
CreatureAI* AI() const { return (CreatureAI*)i_AI; }
- bool SetWalk(bool enable);
- bool SetDisableGravity(bool disable, bool packetOnly = false);
- bool SetSwim(bool enable);
- bool SetCanFly(bool enable);
- bool SetWaterWalking(bool enable, bool packetOnly = false);
- bool SetFeatherFall(bool enable, bool packetOnly = false);
- bool SetHover(bool enable, bool packetOnly = false);
+ bool SetWalk(bool enable) override;
+ bool SetDisableGravity(bool disable, bool packetOnly = false) override;
+ bool SetSwim(bool enable) override;
+ bool SetCanFly(bool enable) override;
+ bool SetWaterWalking(bool enable, bool packetOnly = false) override;
+ bool SetFeatherFall(bool enable, bool packetOnly = false) override;
+ bool SetHover(bool enable, bool packetOnly = false) override;
- uint32 GetShieldBlockValue() const;
+ uint32 GetShieldBlockValue() const override;
- SpellSchoolMask GetMeleeDamageSchoolMask() const { return m_meleeDamageSchoolMask; }
+ SpellSchoolMask GetMeleeDamageSchoolMask() const override { return m_meleeDamageSchoolMask; }
void SetMeleeDamageSchool(SpellSchools school) { m_meleeDamageSchoolMask = SpellSchoolMask(1 << school); }
void _AddCreatureSpellCooldown(uint32 spell_id, time_t end_time);
@@ -501,24 +499,24 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
bool HasSpellCooldown(uint32 spell_id) const;
bool HasCategoryCooldown(uint32 spell_id) const;
uint32 GetCreatureSpellCooldownDelay(uint32 spellId) const;
- virtual void ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs);
+ virtual void ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs) override;
- bool HasSpell(uint32 spellID) const;
+ bool HasSpell(uint32 spellID) const override;
- bool UpdateEntry(uint32 entry, uint32 team=ALLIANCE, const CreatureData* data=NULL);
+ bool UpdateEntry(uint32 entry, CreatureData const* data = nullptr);
void UpdateMovementFlags();
- bool UpdateStats(Stats stat);
- bool UpdateAllStats();
- void UpdateResistances(uint32 school);
- void UpdateArmor();
- void UpdateMaxHealth();
- void UpdateMaxPower(Powers power);
- void UpdateAttackPowerAndDamage(bool ranged = false);
- void CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float& minDamage, float& maxDamage) OVERRIDE;
+ bool UpdateStats(Stats stat) override;
+ bool UpdateAllStats() override;
+ void UpdateResistances(uint32 school) override;
+ void UpdateArmor() override;
+ void UpdateMaxHealth() override;
+ void UpdateMaxPower(Powers power) override;
+ void UpdateAttackPowerAndDamage(bool ranged = false) override;
+ void CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float& minDamage, float& maxDamage) override;
- void SetCanDualWield(bool value) OVERRIDE;
+ void SetCanDualWield(bool value) override;
int8 GetOriginalEquipmentId() const { return m_originalEquipmentId; }
uint8 GetCurrentEquipmentId() { return m_equipmentId; }
void SetCurrentEquipmentId(uint8 id) { m_equipmentId = id; }
@@ -540,9 +538,9 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
uint32 GetScriptId() const;
// override WorldObject function for proper name localization
- std::string const& GetNameForLocaleIdx(LocaleConstant locale_idx) const;
+ std::string const& GetNameForLocaleIdx(LocaleConstant locale_idx) const override;
- void setDeathState(DeathState s); // override virtual Unit::setDeathState
+ void setDeathState(DeathState s) override; // override virtual Unit::setDeathState
bool LoadFromDB(uint32 guid, Map* map) { return LoadCreatureFromDB(guid, map, false); }
bool LoadCreatureFromDB(uint32 guid, Map* map, bool addToMap = true);
@@ -552,8 +550,11 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
virtual void DeleteFromDB(); // overriden in Pet
Loot loot;
- bool lootForPickPocketed;
- bool lootForBody;
+ void StartPickPocketRefillTimer();
+ void ResetPickPocketRefillTimer() { _pickpocketLootRestore = 0; }
+ bool CanGeneratePickPocketLoot() const { return _pickpocketLootRestore <= time(NULL); }
+ void SetSkinner(uint64 guid) { _skinner = guid; }
+ uint64 GetSkinner() const { return _skinner; } // Returns the player who skinned this creature
Player* GetLootRecipient() const;
Group* GetLootRecipientGroup() const;
bool hasLootRecipient() const { return m_lootRecipient || m_lootRecipientGroup; }
@@ -563,7 +564,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
void AllLootRemovedFromCorpse();
uint16 GetLootMode() { return m_LootMode; }
- bool HasLootMode(uint16 lootMode) { return m_LootMode & lootMode; }
+ bool HasLootMode(uint16 lootMode) { return (m_LootMode & lootMode) != 0; }
void SetLootMode(uint16 lootMode) { m_LootMode = lootMode; }
void AddLootMode(uint16 lootMode) { m_LootMode |= lootMode; }
void RemoveLootMode(uint16 lootMode) { m_LootMode &= ~lootMode; }
@@ -607,7 +608,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
time_t GetRespawnTimeEx() const;
void SetRespawnTime(uint32 respawn) { m_respawnTime = respawn ? time(NULL) + respawn : 0; }
void Respawn(bool force = false);
- void SaveRespawnTime();
+ void SaveRespawnTime() override;
uint32 GetRespawnDelay() const { return m_respawnDelay; }
void SetRespawnDelay(uint32 delay) { m_respawnDelay = delay; }
@@ -622,8 +623,8 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
void SetInCombatWithZone();
- bool hasQuest(uint32 quest_id) const;
- bool hasInvolvedQuest(uint32 quest_id) const;
+ bool hasQuest(uint32 quest_id) const override;
+ bool hasInvolvedQuest(uint32 quest_id) const override;
bool isRegeneratingHealth() { return m_regenHealth; }
void setRegeneratingHealth(bool regenHealth) { m_regenHealth = regenHealth; }
@@ -674,13 +675,13 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
bool m_isTempWorldObject; //true when possessed
// Handling caster facing during spellcast
- void SetTarget(uint64 guid);
+ void SetTarget(uint64 guid) override;
void FocusTarget(Spell const* focusSpell, WorldObject const* target);
void ReleaseFocus(Spell const* focusSpell);
protected:
- bool CreateFromProto(uint32 guidlow, uint32 Entry, uint32 vehId, uint32 team, const CreatureData* data = NULL);
- bool InitEntry(uint32 entry, uint32 team=ALLIANCE, const CreatureData* data=NULL);
+ bool CreateFromProto(uint32 guidlow, uint32 entry, CreatureData const* data = nullptr, uint32 vehId = 0);
+ bool InitEntry(uint32 entry, CreatureData const* data = nullptr);
// vendor items
VendorItemCounts m_vendorItemCounts;
@@ -689,8 +690,10 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
uint64 m_lootRecipient;
uint32 m_lootRecipientGroup;
+ uint64 _skinner;
/// Timers
+ time_t _pickpocketLootRestore;
time_t m_corpseRemoveTime; // (msecs)timer for death or corpse disappearance
time_t m_respawnTime; // (secs) time of next respawn
uint32 m_respawnDelay; // (secs) delay between corpse disappearance and respawning
@@ -724,8 +727,8 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
uint16 m_LootMode; // Bitmask (default: LOOT_MODE_DEFAULT) that determines what loot will be lootable
- bool IsInvisibleDueToDespawn() const;
- bool CanAlwaysSee(WorldObject const* obj) const;
+ bool IsInvisibleDueToDespawn() const override;
+ bool CanAlwaysSee(WorldObject const* obj) const override;
private:
void ForcedDespawn(uint32 timeMSToDespawn = 0);
@@ -746,7 +749,7 @@ class AssistDelayEvent : public BasicEvent
public:
AssistDelayEvent(uint64 victim, Unit& owner) : BasicEvent(), m_victim(victim), m_owner(owner) { }
- bool Execute(uint64 e_time, uint32 p_time);
+ bool Execute(uint64 e_time, uint32 p_time) override;
void AddAssistant(uint64 guid) { m_assistants.push_back(guid); }
private:
AssistDelayEvent();
@@ -760,7 +763,7 @@ class ForcedDespawnDelayEvent : public BasicEvent
{
public:
ForcedDespawnDelayEvent(Creature& owner) : BasicEvent(), m_owner(owner) { }
- bool Execute(uint64 e_time, uint32 p_time);
+ bool Execute(uint64 e_time, uint32 p_time) override;
private:
Creature& m_owner;
diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp
index 14a76ae07ce..f02543a60af 100644
--- a/src/server/game/Entities/Creature/CreatureGroups.cpp
+++ b/src/server/game/Entities/Creature/CreatureGroups.cpp
@@ -107,7 +107,7 @@ void FormationMgr::LoadCreatureFormations()
if (group_member->leaderGUID != memberGUID)
{
group_member->follow_dist = fields[2].GetFloat();
- group_member->follow_angle = fields[3].GetFloat() * M_PI / 180;
+ group_member->follow_angle = fields[3].GetFloat() * float(M_PI) / 180;
}
else
{
@@ -218,7 +218,7 @@ void CreatureGroup::LeaderMoveTo(float x, float y, float z)
if (!m_leader)
return;
- float pathangle = atan2(m_leader->GetPositionY() - y, m_leader->GetPositionX() - x);
+ float pathangle = std::atan2(m_leader->GetPositionY() - y, m_leader->GetPositionX() - x);
for (CreatureGroupMemberType::iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
{
@@ -229,9 +229,9 @@ void CreatureGroup::LeaderMoveTo(float x, float y, float z)
if (itr->second->point_1)
{
if (m_leader->GetCurrentWaypointID() == itr->second->point_1)
- itr->second->follow_angle = (2 * M_PI) - itr->second->follow_angle;
+ itr->second->follow_angle = (2 * float(M_PI)) - itr->second->follow_angle;
if (m_leader->GetCurrentWaypointID() == itr->second->point_2)
- itr->second->follow_angle = (2 * M_PI) + itr->second->follow_angle;
+ itr->second->follow_angle = (2 * float(M_PI)) + itr->second->follow_angle;
}
float angle = itr->second->follow_angle;
diff --git a/src/server/game/Entities/Creature/CreatureGroups.h b/src/server/game/Entities/Creature/CreatureGroups.h
index 846b05abc17..f53de0d48f1 100644
--- a/src/server/game/Entities/Creature/CreatureGroups.h
+++ b/src/server/game/Entities/Creature/CreatureGroups.h
@@ -20,7 +20,7 @@
#define _FORMATIONS_H
#include "Define.h"
-#include "UnorderedMap.h"
+#include <unordered_map>
#include <map>
class Creature;
@@ -36,14 +36,21 @@ struct FormationInfo
uint16 point_2;
};
-typedef UNORDERED_MAP<uint32/*memberDBGUID*/, FormationInfo*> CreatureGroupInfoType;
+typedef std::unordered_map<uint32/*memberDBGUID*/, FormationInfo*> CreatureGroupInfoType;
class FormationMgr
{
- friend class ACE_Singleton<FormationMgr, ACE_Null_Mutex>;
- public:
+ private:
FormationMgr() { }
~FormationMgr();
+
+ public:
+ static FormationMgr* instance()
+ {
+ static FormationMgr instance;
+ return &instance;
+ }
+
void AddCreatureToGroup(uint32 group_id, Creature* creature);
void RemoveCreatureFromGroup(CreatureGroup* group, Creature* creature);
void LoadCreatureFormations();
@@ -78,6 +85,6 @@ class CreatureGroup
void MemberAttackStart(Creature* member, Unit* target);
};
-#define sFormationMgr ACE_Singleton<FormationMgr, ACE_Null_Mutex>::instance()
+#define sFormationMgr FormationMgr::instance()
#endif
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp
index 8671caf864d..492d82c5a03 100644
--- a/src/server/game/Entities/Creature/GossipDef.cpp
+++ b/src/server/game/Entities/Creature/GossipDef.cpp
@@ -91,19 +91,40 @@ void GossipMenu::AddMenuItem(uint32 menuId, uint32 menuItemId, uint32 sender, ui
continue;
/// Store texts for localization.
- std::string strOptionText = itr->second.OptionText;
- std::string strBoxText = itr->second.BoxText;
+ std::string strOptionText, strBoxText;
+ BroadcastText const* optionBroadcastText = sObjectMgr->GetBroadcastText(itr->second.OptionBroadcastTextId);
+ BroadcastText const* boxBroadcastText = sObjectMgr->GetBroadcastText(itr->second.BoxBroadcastTextId);
+
+ /// OptionText
+ if (optionBroadcastText)
+ strOptionText = optionBroadcastText->GetText(GetLocale());
+ else
+ strOptionText = itr->second.OptionText;
+
+ /// BoxText
+ if (boxBroadcastText)
+ strBoxText = boxBroadcastText->GetText(GetLocale());
+ else
+ strBoxText = itr->second.BoxText;
/// Check need of localization.
- if (GetLocale() > LOCALE_enUS)
- /// Find localizations from database.
- if (GossipMenuItemsLocale const* no = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuItemId)))
+ if (GetLocale() != DEFAULT_LOCALE)
+ {
+ if (!optionBroadcastText)
{
- /// Translate texts if there are any.
- ObjectMgr::GetLocaleString(no->OptionText, GetLocale(), strOptionText);
- ObjectMgr::GetLocaleString(no->BoxText, GetLocale(), strBoxText);
+ /// Find localizations from database.
+ if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuItemId)))
+ ObjectMgr::GetLocaleString(gossipMenuLocale->OptionText, GetLocale(), strOptionText);
}
+ if (!boxBroadcastText)
+ {
+ /// Find localizations from database.
+ if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuItemId)))
+ ObjectMgr::GetLocaleString(gossipMenuLocale->BoxText, GetLocale(), strBoxText);
+ }
+ }
+
/// Add menu item with existing method. Menu item id -1 is also used in ADD_GOSSIP_ITEM macro.
AddMenuItem(-1, itr->second.OptionIcon, strOptionText, sender, action, strBoxText, itr->second.BoxMoney, itr->second.BoxCoded);
}
diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h
index e93f66ed726..58cc6eb7d0b 100644
--- a/src/server/game/Entities/Creature/TemporarySummon.h
+++ b/src/server/game/Entities/Creature/TemporarySummon.h
@@ -42,13 +42,13 @@ class TempSummon : public Creature
public:
explicit TempSummon(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject);
virtual ~TempSummon() { }
- void Update(uint32 time);
+ void Update(uint32 time) override;
virtual void InitStats(uint32 lifetime);
virtual void InitSummon();
virtual void UnSummon(uint32 msTime = 0);
- void RemoveFromWorld();
+ void RemoveFromWorld() override;
void SetTempSummonType(TempSummonType type);
- void SaveToDB(uint32 /*mapid*/, uint8 /*spawnMask*/, uint32 /*phaseMask*/) { }
+ void SaveToDB(uint32 /*mapid*/, uint8 /*spawnMask*/, uint32 /*phaseMask*/) override { }
Unit* GetSummoner() const;
Creature* GetSummonerCreatureBase() const;
uint64 GetSummonerGUID() const { return m_summonerGUID; }
@@ -67,10 +67,10 @@ class Minion : public TempSummon
{
public:
Minion(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject);
- void InitStats(uint32 duration);
- void RemoveFromWorld();
+ void InitStats(uint32 duration) override;
+ void RemoveFromWorld() override;
Unit* GetOwner() const { return m_owner; }
- float GetFollowAngle() const { return m_followAngle; }
+ float GetFollowAngle() const override { return m_followAngle; }
void SetFollowAngle(float angle) { m_followAngle = angle; }
bool IsPetGhoul() const {return GetEntry() == 26125;} // Ghoul may be guardian or pet
bool IsSpiritWolf() const {return GetEntry() == 29264;} // Spirit wolf from feral spirits
@@ -84,18 +84,18 @@ class Guardian : public Minion
{
public:
Guardian(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject);
- void InitStats(uint32 duration);
+ void InitStats(uint32 duration) override;
bool InitStatsForLevel(uint8 level);
- void InitSummon();
+ void InitSummon() override;
- bool UpdateStats(Stats stat);
- bool UpdateAllStats();
- void UpdateResistances(uint32 school);
- void UpdateArmor();
- void UpdateMaxHealth();
- void UpdateMaxPower(Powers power);
- void UpdateAttackPowerAndDamage(bool ranged = false);
- void UpdateDamagePhysical(WeaponAttackType attType) OVERRIDE;
+ bool UpdateStats(Stats stat) override;
+ bool UpdateAllStats() override;
+ void UpdateResistances(uint32 school) override;
+ void UpdateArmor() override;
+ void UpdateMaxHealth() override;
+ void UpdateMaxPower(Powers power) override;
+ void UpdateAttackPowerAndDamage(bool ranged = false) override;
+ void UpdateDamagePhysical(WeaponAttackType attType) override;
int32 GetBonusDamage() const { return m_bonusSpellDamage; }
void SetBonusDamage(int32 damage);
@@ -108,17 +108,17 @@ class Puppet : public Minion
{
public:
Puppet(SummonPropertiesEntry const* properties, Unit* owner);
- void InitStats(uint32 duration);
- void InitSummon();
- void Update(uint32 time);
- void RemoveFromWorld();
+ void InitStats(uint32 duration) override;
+ void InitSummon() override;
+ void Update(uint32 time) override;
+ void RemoveFromWorld() override;
};
class ForcedUnsummonDelayEvent : public BasicEvent
{
public:
ForcedUnsummonDelayEvent(TempSummon& owner) : BasicEvent(), m_owner(owner) { }
- bool Execute(uint64 e_time, uint32 p_time);
+ bool Execute(uint64 e_time, uint32 p_time) override;
private:
TempSummon& m_owner;
diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp
index 7cc94d992a1..e008146bb85 100644
--- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp
+++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp
@@ -48,18 +48,6 @@ DynamicObject::~DynamicObject()
delete _removedAura;
}
-void DynamicObject::CleanupsBeforeDelete(bool finalCleanup /* = true */)
-{
- WorldObject::CleanupsBeforeDelete(finalCleanup);
-
- if (Transport* transport = GetTransport())
- {
- transport->RemovePassenger(this);
- SetTransport(NULL);
- m_movementInfo.transport.Reset();
- }
-}
-
void DynamicObject::AddToWorld()
{
///- Register the dynamicObject for guid lookup and for caster
@@ -124,14 +112,11 @@ bool DynamicObject::CreateDynamicObject(uint32 guidlow, Unit* caster, uint32 spe
Transport* transport = caster->GetTransport();
if (transport)
{
- m_movementInfo.transport.guid = GetGUID();
-
float x, y, z, o;
pos.GetPosition(x, y, z, o);
transport->CalculatePassengerOffset(x, y, z, &o);
m_movementInfo.transport.pos.Relocate(x, y, z, o);
- SetTransport(transport);
// This object must be added to transport before adding to map for the client to properly display it
transport->AddPassenger(this);
}
diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.h b/src/server/game/Entities/DynamicObject/DynamicObject.h
index cdba5982b3f..7816600b7a4 100644
--- a/src/server/game/Entities/DynamicObject/DynamicObject.h
+++ b/src/server/game/Entities/DynamicObject/DynamicObject.h
@@ -38,13 +38,11 @@ class DynamicObject : public WorldObject, public GridObject<DynamicObject>, publ
DynamicObject(bool isWorldObject);
~DynamicObject();
- void AddToWorld();
- void RemoveFromWorld();
-
- void CleanupsBeforeDelete(bool finalCleanup = true) OVERRIDE;
+ void AddToWorld() override;
+ void RemoveFromWorld() override;
bool CreateDynamicObject(uint32 guidlow, Unit* caster, uint32 spellId, Position const& pos, float radius, DynamicObjectType type);
- void Update(uint32 p_time);
+ void Update(uint32 p_time) override;
void Remove();
void SetDuration(int32 newDuration);
int32 GetDuration() const;
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index cdd9e1441e7..3c33159cf1e 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -16,7 +16,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <G3D/Quat.h>
#include "GameObjectAI.h"
#include "Battleground.h"
#include "CellImpl.h"
@@ -34,6 +33,7 @@
#include "UpdateFieldFlags.h"
#include "World.h"
#include "Transport.h"
+#include <G3D/Quat.h>
GameObject::GameObject() : WorldObject(false), MapObject(),
m_model(NULL), m_goValue(), m_AI(NULL)
@@ -47,6 +47,7 @@ GameObject::GameObject() : WorldObject(false), MapObject(),
m_respawnTime = 0;
m_respawnDelayTime = 300;
m_lootState = GO_NOT_READY;
+ m_lootStateUnitGUID = 0;
m_spawnedByDefault = true;
m_usetimes = 0;
m_spellId = 0;
@@ -97,20 +98,12 @@ std::string GameObject::GetAIName() const
return "";
}
-void GameObject::CleanupsBeforeDelete(bool /*finalCleanup*/)
+void GameObject::CleanupsBeforeDelete(bool finalCleanup)
{
- if (IsInWorld())
- RemoveFromWorld();
+ WorldObject::CleanupsBeforeDelete(finalCleanup);
if (m_uint32Values) // field array can be not exist if GameOBject not loaded
RemoveFromOwner();
-
- if (GetTransport() && !ToTransport())
- {
- GetTransport()->RemovePassenger(this);
- SetTransport(NULL);
- m_movementInfo.transport.Reset();
- }
}
void GameObject::RemoveFromOwner()
@@ -150,7 +143,12 @@ void GameObject::AddToWorld()
// The state can be changed after GameObject::Create but before GameObject::AddToWorld
bool toggledState = GetGoType() == GAMEOBJECT_TYPE_CHEST ? getLootState() == GO_READY : (GetGoState() == GO_STATE_READY || IsTransport());
if (m_model)
- GetMap()->InsertGameObjectModel(*m_model);
+ {
+ if (Transport* trans = ToTransport())
+ trans->SetDelayedAddModelToMap();
+ else
+ GetMap()->InsertGameObjectModel(*m_model);
+ }
EnableCollision(toggledState);
WorldObject::AddToWorld();
@@ -308,13 +306,13 @@ void GameObject::Update(uint32 diff)
GameObjectTemplate const* goInfo = GetGOInfo();
// Bombs
if (goInfo->trap.type == 2)
- m_cooldownTime = time(NULL) + 10; // Hardcoded tooltip value
+ // Hardcoded tooltip value
+ m_cooldownTime = time(NULL) + 10;
else if (Unit* owner = GetOwner())
- {
if (owner->IsInCombat())
m_cooldownTime = time(NULL) + goInfo->trap.startDelay;
- }
- m_lootState = GO_READY;
+
+ SetLootState(GO_READY);
break;
}
case GAMEOBJECT_TYPE_TRANSPORT:
@@ -395,7 +393,7 @@ void GameObject::Update(uint32 diff)
if (targetGuid == dbtableHighGuid) // if linking self, never respawn (check delayed to next day)
SetRespawnTime(DAY);
else
- m_respawnTime = (now > linkedRespawntime ? now : linkedRespawntime)+urand(5, MINUTE); // else copy time from master and add a little
+ m_respawnTime = (now > linkedRespawntime ? now : linkedRespawntime) + urand(5, MINUTE); // else copy time from master and add a little
SaveRespawnTime(); // also save to DB immediately
return;
}
@@ -422,7 +420,7 @@ void GameObject::Update(uint32 diff)
}
case GAMEOBJECT_TYPE_DOOR:
case GAMEOBJECT_TYPE_BUTTON:
- //we need to open doors if they are closed (add there another condition if this code breaks some usage, but it need to be here for battlegrounds)
+ // We need to open doors if they are closed (add there another condition if this code breaks some usage, but it need to be here for battlegrounds)
if (GetGoState() != GO_STATE_READY)
ResetDoorOrButton();
break;
@@ -434,13 +432,15 @@ void GameObject::Update(uint32 diff)
break;
}
- if (!m_spawnedByDefault) // despawn timer
+ // Despawn timer
+ if (!m_spawnedByDefault)
{
- // can be despawned or destroyed
+ // Can be despawned or destroyed
SetLootState(GO_JUST_DEACTIVATED);
return;
}
- // respawn timer
+
+ // Respawn timer
uint32 poolid = GetDBTableGUIDLow() ? sPoolMgr->IsPartOfAPool<GameObject>(GetDBTableGUIDLow()) : 0;
if (poolid)
sPoolMgr->UpdatePool<GameObject>(poolid, GetDBTableGUIDLow());
@@ -451,85 +451,59 @@ void GameObject::Update(uint32 diff)
if (isSpawned())
{
- // traps can have time and can not have
GameObjectTemplate const* goInfo = GetGOInfo();
if (goInfo->type == GAMEOBJECT_TYPE_TRAP)
{
if (m_cooldownTime >= time(NULL))
- return;
+ break;
- // Type 2 - Bomb (will go away after casting it's spell)
+ // Type 2 (bomb) does not need to be triggered by a unit and despawns after casting its spell.
if (goInfo->trap.type == 2)
{
- if (goInfo->trap.spellId)
- CastSpell(NULL, goInfo->trap.spellId); // FIXME: null target won't work for target type 1
- SetLootState(GO_JUST_DEACTIVATED);
+ SetLootState(GO_ACTIVATED);
break;
}
- // Type 0 and 1 - trap (type 0 will not get removed after casting a spell)
- Unit* owner = GetOwner();
- Unit* ok = NULL; // pointer to appropriate target if found any
-
- bool IsBattlegroundTrap = false;
- //FIXME: this is activation radius (in different casting radius that must be selected from spell data)
- /// @todo move activated state code (cast itself) to GO_ACTIVATED, in this place only check activating and set state
- float radius = (float)(goInfo->trap.radius)/3*2; /// @todo rename radius to diameter (goInfo->trap.radius) should be (goInfo->trap.diameter)
- if (!radius)
- {
- if (goInfo->trap.cooldown != 3) // cast in other case (at some triggering/linked go/etc explicit call)
- return;
- else
- {
- if (m_respawnTime > 0)
- break;
- radius = (float)goInfo->trap.cooldown; // battlegrounds gameobjects has data2 == 0 && data5 == 3
- IsBattlegroundTrap = true;
+ // Type 0 despawns after being triggered, type 1 does not.
+ /// @todo This is activation radius. Casting radius must be selected from spell data.
+ float radius;
+ if (!goInfo->trap.diameter)
+ {
+ // Battleground traps: data2 == 0 && data5 == 3
+ if (goInfo->trap.cooldown != 3)
+ break;
- if (!radius)
- return;
- }
+ radius = 3.f;
}
+ else
+ radius = goInfo->trap.diameter / 2.f;
+
+ // Pointer to appropriate target if found any
+ Unit* target = NULL;
- // Note: this hack with search required until GO casting not implemented
- // search unfriendly creature
- if (owner) // hunter trap
+ /// @todo this hack with search required until GO casting not implemented
+ if (Unit* owner = GetOwner())
{
+ // Hunter trap: Search units which are unfriendly to the trap's owner
Trinity::AnyUnfriendlyNoTotemUnitInObjectRangeCheck checker(this, owner, radius);
- Trinity::UnitSearcher<Trinity::AnyUnfriendlyNoTotemUnitInObjectRangeCheck> searcher(this, ok, checker);
+ Trinity::UnitSearcher<Trinity::AnyUnfriendlyNoTotemUnitInObjectRangeCheck> searcher(this, target, checker);
VisitNearbyGridObject(radius, searcher);
- if (!ok) VisitNearbyWorldObject(radius, searcher);
+ if (!target)
+ VisitNearbyWorldObject(radius, searcher);
}
- else // environmental trap
+ else
{
- // environmental damage spells already have around enemies targeting but this not help in case not existed GO casting support
- // affect only players
+ // Environmental trap: Any player
Player* player = NULL;
Trinity::AnyPlayerInObjectRangeCheck checker(this, radius);
Trinity::PlayerSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(this, player, checker);
VisitNearbyWorldObject(radius, searcher);
- ok = player;
+ target = player;
}
- if (ok)
- {
- // some traps do not have spell but should be triggered
- if (goInfo->trap.spellId)
- CastSpell(ok, goInfo->trap.spellId);
-
- m_cooldownTime = time(NULL) + (goInfo->trap.cooldown ? goInfo->trap.cooldown : uint32(4)); // template or 4 seconds
-
- if (goInfo->trap.type == 1)
- SetLootState(GO_JUST_DEACTIVATED);
+ if (target)
+ SetLootState(GO_ACTIVATED, target);
- if (IsBattlegroundTrap && ok->GetTypeId() == TYPEID_PLAYER)
- {
- //Battleground gameobjects case
- if (ok->ToPlayer()->InBattleground())
- if (Battleground* bg = ok->ToPlayer()->GetBattleground())
- bg->HandleTriggerBuff(GetGUID());
- }
- }
}
else if (uint32 max_charges = goInfo->GetCharges())
{
@@ -549,7 +523,7 @@ void GameObject::Update(uint32 diff)
{
case GAMEOBJECT_TYPE_DOOR:
case GAMEOBJECT_TYPE_BUTTON:
- if (GetGOInfo()->GetAutoCloseTime() && (m_cooldownTime < time(NULL)))
+ if (m_cooldownTime && (m_cooldownTime < time(NULL)))
ResetDoorOrButton();
break;
case GAMEOBJECT_TYPE_GOOBER:
@@ -574,6 +548,38 @@ void GameObject::Update(uint32 diff)
}
else m_groupLootTimer -= diff;
}
+ break;
+ case GAMEOBJECT_TYPE_TRAP:
+ {
+ GameObjectTemplate const* goInfo = GetGOInfo();
+ if (goInfo->trap.type == 2 && goInfo->trap.spellId)
+ {
+ /// @todo NULL target won't work for target type 1
+ CastSpell(NULL, goInfo->trap.spellId);
+ SetLootState(GO_JUST_DEACTIVATED);
+ }
+ else if (Unit* target = ObjectAccessor::GetUnit(*this, m_lootStateUnitGUID))
+ {
+ // Some traps do not have a spell but should be triggered
+ if (goInfo->trap.spellId)
+ CastSpell(target, goInfo->trap.spellId);
+
+ // Template value or 4 seconds
+ m_cooldownTime = time(NULL) + (goInfo->trap.cooldown ? goInfo->trap.cooldown : uint32(4));
+
+ if (goInfo->trap.type == 1)
+ SetLootState(GO_JUST_DEACTIVATED);
+ else if (!goInfo->trap.type)
+ SetLootState(GO_READY);
+
+ // Battleground gameobjects have data2 == 0 && data5 == 3
+ if (!goInfo->trap.diameter && goInfo->trap.cooldown == 3)
+ if (Player* player = target->ToPlayer())
+ if (Battleground* bg = player->GetBattleground())
+ bg->HandleTriggerBuff(GetGUID());
+ }
+ break;
+ }
default:
break;
}
@@ -687,12 +693,39 @@ void GameObject::getFishLoot(Loot* fishloot, Player* loot_owner)
fishloot->clear();
uint32 zone, subzone;
+ uint32 defaultzone = 1;
GetZoneAndAreaId(zone, subzone);
// if subzone loot exist use it
- if (!fishloot->FillLoot(subzone, LootTemplates_Fishing, loot_owner, true, true))
- // else use zone loot (must exist in like case)
- fishloot->FillLoot(zone, LootTemplates_Fishing, loot_owner, true);
+ fishloot->FillLoot(subzone, LootTemplates_Fishing, loot_owner, true, true);
+ if (fishloot->empty()) //use this becase if zone or subzone has set LOOT_MODE_JUNK_FISH,Even if no normal drop, fishloot->FillLoot return true. it wrong.
+ {
+ //subzone no result,use zone loot
+ fishloot->FillLoot(zone, LootTemplates_Fishing, loot_owner, true, true);
+ //use zone 1 as default, somewhere fishing got nothing,becase subzone and zone not set, like Off the coast of Storm Peaks.
+ if (fishloot->empty())
+ fishloot->FillLoot(defaultzone, LootTemplates_Fishing, loot_owner, true, true);
+ }
+}
+
+void GameObject::getFishLootJunk(Loot* fishloot, Player* loot_owner)
+{
+ fishloot->clear();
+
+ uint32 zone, subzone;
+ uint32 defaultzone = 1;
+ GetZoneAndAreaId(zone, subzone);
+
+ // if subzone loot exist use it
+ fishloot->FillLoot(subzone, LootTemplates_Fishing, loot_owner, true, true, LOOT_MODE_JUNK_FISH);
+ if (fishloot->empty()) //use this becase if zone or subzone has normal mask drop, then fishloot->FillLoot return true.
+ {
+ //use zone loot
+ fishloot->FillLoot(zone, LootTemplates_Fishing, loot_owner, true, true, LOOT_MODE_JUNK_FISH);
+ if (fishloot->empty())
+ //use zone 1 as default
+ fishloot->FillLoot(defaultzone, LootTemplates_Fishing, loot_owner, true, true, LOOT_MODE_JUNK_FISH);
+ }
}
void GameObject::SaveToDB()
@@ -930,6 +963,17 @@ void GameObject::SaveRespawnTime()
GetMap()->SaveGORespawnTime(m_DBTableGuid, m_respawnTime);
}
+bool GameObject::IsNeverVisible() const
+{
+ if (WorldObject::IsNeverVisible())
+ return true;
+
+ if (GetGoType() == GAMEOBJECT_TYPE_SPELL_FOCUS && GetGOInfo()->spellFocus.serverOnly == 1)
+ return true;
+
+ return false;
+}
+
bool GameObject::IsAlwaysVisibleFor(WorldObject const* seer) const
{
if (WorldObject::IsAlwaysVisibleFor(seer))
@@ -1091,7 +1135,7 @@ void GameObject::UseDoorOrButton(uint32 time_to_restore, bool alternative /* = f
SwitchDoorOrButton(true, alternative);
SetLootState(GO_ACTIVATED, user);
- m_cooldownTime = time(NULL) + time_to_restore;
+ m_cooldownTime = time_to_restore ? (time(NULL) + time_to_restore) : 0;
}
void GameObject::SetGoArtKit(uint8 kit)
@@ -1217,7 +1261,7 @@ void GameObject::Use(Unit* user)
// the object orientation + 1/2 pi
// every slot will be on that straight line
- float orthogonalOrientation = GetOrientation()+M_PI*0.5f;
+ float orthogonalOrientation = GetOrientation() + float(M_PI) * 0.5f;
// find nearest slot
bool found_free_slot = false;
for (ChairSlotAndUser::iterator itr = ChairListSlots.begin(); itr != ChairListSlots.end(); ++itr)
@@ -1274,10 +1318,8 @@ void GameObject::Use(Unit* user)
{
GameObjectTemplate const* info = GetGOInfo();
- if (user->GetTypeId() == TYPEID_PLAYER)
+ if (Player* player = user->ToPlayer())
{
- Player* player = user->ToPlayer();
-
if (info->goober.pageId) // show page...
{
WorldPacket data(SMSG_GAMEOBJECT_PAGETEXT, 8);
@@ -1294,7 +1336,7 @@ void GameObject::Use(Unit* user)
{
TC_LOG_DEBUG("maps.script", "Goober ScriptStart id %u for GO entry %u (GUID %u).", info->goober.eventId, GetEntry(), GetDBTableGUIDLow());
GetMap()->ScriptsStart(sEventScripts, info->goober.eventId, player, this);
- EventInform(info->goober.eventId);
+ EventInform(info->goober.eventId, user);
}
// possible quest objective for active quests
@@ -1305,9 +1347,6 @@ void GameObject::Use(Unit* user)
break;
}
- if (Battleground* bg = player->GetBattleground())
- bg->EventPlayerUsedGO(player, this);
-
player->KillCreditGO(info->entry, GetGUID());
}
@@ -1400,6 +1439,7 @@ void GameObject::Use(Unit* user)
// prevent removing GO at spell cancel
RemoveFromOwner();
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);
@@ -1411,10 +1451,8 @@ void GameObject::Use(Unit* user)
else
player->SendLoot(GetGUID(), LOOT_FISHING);
}
- /// @todo else: junk
- else
- m_respawnTime = time(NULL);
-
+ else // else: junk
+ player->SendLoot(GetGUID(), LOOT_FISHING_JUNK);
break;
}
case GO_JUST_DEACTIVATED: // nothing to do, will be deleted at next update
@@ -1725,7 +1763,7 @@ void GameObject::Use(Unit* user)
CastSpell(user, spellId);
}
-void GameObject::CastSpell(Unit* target, uint32 spellId)
+void GameObject::CastSpell(Unit* target, uint32 spellId, bool triggered /*= true*/)
{
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!spellInfo)
@@ -1744,7 +1782,7 @@ void GameObject::CastSpell(Unit* target, uint32 spellId)
if (self)
{
if (target)
- target->CastSpell(target, spellInfo, true);
+ target->CastSpell(target, spellInfo, triggered);
return;
}
@@ -1758,14 +1796,14 @@ void GameObject::CastSpell(Unit* target, uint32 spellId)
trigger->setFaction(owner->getFaction());
// needed for GO casts for proper target validation checks
trigger->SetOwnerGUID(owner->GetGUID());
- trigger->CastSpell(target ? target : trigger, spellInfo, true, 0, 0, owner->GetGUID());
+ trigger->CastSpell(target ? target : trigger, spellInfo, triggered, nullptr, nullptr, owner->GetGUID());
}
else
{
trigger->setFaction(14);
// Set owner guid for target if no owner available - needed by trigger auras
// - trigger gets despawned and there's no caster avalible (see AuraEffect::TriggerSpell())
- trigger->CastSpell(target ? target : trigger, spellInfo, true, 0, 0, target ? target->GetGUID() : 0);
+ trigger->CastSpell(target ? target : trigger, spellInfo, triggered, nullptr, nullptr, target ? target->GetGUID() : 0);
}
}
@@ -1788,7 +1826,7 @@ bool GameObject::IsInRange(float x, float y, float z, float radius) const
float dx = x - GetPositionX();
float dy = y - GetPositionY();
float dz = z - GetPositionZ();
- float dist = sqrt(dx*dx + dy*dy);
+ float dist = std::sqrt(dx*dx + dy*dy);
//! Check if the distance between the 2 objects is 0, can happen if both objects are on the same position.
//! The code below this check wont crash if dist is 0 because 0/0 in float operations is valid, and returns infinite
if (G3D::fuzzyEq(dist, 0.0f))
@@ -1803,7 +1841,7 @@ bool GameObject::IsInRange(float x, float y, float z, float radius) const
&& dz < info->maxZ + radius && dz > info->minZ - radius;
}
-void GameObject::EventInform(uint32 eventId)
+void GameObject::EventInform(uint32 eventId, WorldObject* invoker /*= NULL*/)
{
if (!eventId)
return;
@@ -1811,8 +1849,12 @@ void GameObject::EventInform(uint32 eventId)
if (AI())
AI()->EventInform(eventId);
- if (m_zoneScript)
- m_zoneScript->ProcessEvent(this, eventId);
+ if (GetZoneScript())
+ GetZoneScript()->ProcessEvent(this, eventId);
+
+ if (BattlegroundMap* bgMap = GetMap()->ToBattlegroundMap())
+ if (bgMap->GetBG())
+ bgMap->GetBG()->ProcessEvent(this, eventId, invoker);
}
// overwrite WorldObject function for proper name localization
@@ -1878,7 +1920,7 @@ void GameObject::ModifyHealth(int32 change, Unit* attackerOrHealer /*= NULL*/, u
// Set the health bar, value = 255 * healthPct;
SetGoAnimProgress(m_goValue.Building.Health * 255 / m_goValue.Building.MaxHealth);
- Player* player = attackerOrHealer->GetCharmerOrOwnerPlayerOrPlayerItself();
+ Player* player = attackerOrHealer ? attackerOrHealer->GetCharmerOrOwnerPlayerOrPlayerItself() : NULL;
// dealing damage, send packet
if (player)
@@ -1905,6 +1947,7 @@ void GameObject::ModifyHealth(int32 change, Unit* attackerOrHealer /*= NULL*/, u
if (newState == GetDestructibleState())
return;
+ /// @todo: pass attackerOrHealer instead of player
SetDestructibleState(newState, player, false);
}
@@ -1927,11 +1970,8 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player*
break;
case GO_DESTRUCTIBLE_DAMAGED:
{
- EventInform(m_goInfo->building.damagedEvent);
+ EventInform(m_goInfo->building.damagedEvent, eventInvoker);
sScriptMgr->OnGameObjectDamaged(this, eventInvoker);
- if (eventInvoker)
- if (Battleground* bg = eventInvoker->GetBattleground())
- bg->EventPlayerDamagedGO(eventInvoker, this, m_goInfo->building.damagedEvent);
RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED);
SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED);
@@ -1956,15 +1996,10 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player*
case GO_DESTRUCTIBLE_DESTROYED:
{
sScriptMgr->OnGameObjectDestroyed(this, eventInvoker);
- EventInform(m_goInfo->building.destroyedEvent);
+ EventInform(m_goInfo->building.destroyedEvent, eventInvoker);
if (eventInvoker)
- {
if (Battleground* bg = eventInvoker->GetBattleground())
- {
- bg->EventPlayerDamagedGO(eventInvoker, this, m_goInfo->building.destroyedEvent);
bg->DestroyGate(eventInvoker, this);
- }
- }
RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED);
SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED);
@@ -1985,7 +2020,7 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player*
}
case GO_DESTRUCTIBLE_REBUILDING:
{
- EventInform(m_goInfo->building.rebuildingEvent);
+ EventInform(m_goInfo->building.rebuildingEvent, eventInvoker);
RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED | GO_FLAG_DESTROYED);
uint32 modelId = m_goInfo->displayId;
@@ -2009,8 +2044,13 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player*
void GameObject::SetLootState(LootState state, Unit* unit)
{
m_lootState = state;
+ m_lootStateUnitGUID = unit ? unit->GetGUID() : 0;
AI()->OnStateChanged(state, unit);
sScriptMgr->OnGameObjectLootStateChanged(this, state, unit);
+
+ if (GetGoType() == GAMEOBJECT_TYPE_DOOR) // only set collision for doors on SetGoState
+ return;
+
if (m_model)
{
bool collision = false;
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index 581208f1abd..f551ab2046c 100644
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -123,7 +123,7 @@ struct GameObjectTemplate
{
uint32 lockId; //0 -> Lock.dbc
uint32 level; //1
- uint32 radius; //2 radius for trap activation
+ uint32 diameter; //2 diameter for trap activation
uint32 spellId; //3
uint32 type; //4 0 trap with no despawn after cast. 1 trap despawns after cast. 2 bomb casts on spawn.
uint32 cooldown; //5 time in secs
@@ -406,8 +406,8 @@ struct GameObjectTemplate
{
switch (type)
{
- case GAMEOBJECT_TYPE_CHEST: return chest.consumable;
- case GAMEOBJECT_TYPE_GOOBER: return goober.consumable;
+ case GAMEOBJECT_TYPE_CHEST: return chest.consumable != 0;
+ case GAMEOBJECT_TYPE_GOOBER: return goober.consumable != 0;
default: return false;
}
}
@@ -416,10 +416,10 @@ struct GameObjectTemplate
{
switch (type)
{
- case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.allowMounted;
- case GAMEOBJECT_TYPE_TEXT: return text.allowMounted;
- case GAMEOBJECT_TYPE_GOOBER: return goober.allowMounted;
- case GAMEOBJECT_TYPE_SPELLCASTER: return spellcaster.allowMounted;
+ case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.allowMounted != 0;
+ case GAMEOBJECT_TYPE_TEXT: return text.allowMounted != 0;
+ case GAMEOBJECT_TYPE_GOOBER: return goober.allowMounted != 0;
+ case GAMEOBJECT_TYPE_SPELLCASTER: return spellcaster.allowMounted != 0;
default: return false;
}
}
@@ -447,12 +447,12 @@ struct GameObjectTemplate
{
switch (type)
{
- case GAMEOBJECT_TYPE_DOOR: return door.noDamageImmune;
- case GAMEOBJECT_TYPE_BUTTON: return button.noDamageImmune;
- case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.noDamageImmune;
- case GAMEOBJECT_TYPE_GOOBER: return goober.noDamageImmune;
- case GAMEOBJECT_TYPE_FLAGSTAND: return flagstand.noDamageImmune;
- case GAMEOBJECT_TYPE_FLAGDROP: return flagdrop.noDamageImmune;
+ case GAMEOBJECT_TYPE_DOOR: return door.noDamageImmune != 0;
+ case GAMEOBJECT_TYPE_BUTTON: return button.noDamageImmune != 0;
+ case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.noDamageImmune != 0;
+ case GAMEOBJECT_TYPE_GOOBER: return goober.noDamageImmune != 0;
+ case GAMEOBJECT_TYPE_FLAGSTAND: return flagstand.noDamageImmune != 0;
+ case GAMEOBJECT_TYPE_FLAGDROP: return flagdrop.noDamageImmune != 0;
default: return true;
}
}
@@ -538,7 +538,7 @@ struct GameObjectTemplate
};
// Benchmarked: Faster than std::map (insert/find)
-typedef UNORDERED_MAP<uint32, GameObjectTemplate> GameObjectTemplateContainer;
+typedef std::unordered_map<uint32, GameObjectTemplate> GameObjectTemplateContainer;
class OPvPCapturePoint;
struct TransportAnimation;
@@ -635,14 +635,14 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
explicit GameObject();
~GameObject();
- void BuildValuesUpdate(uint8 updatetype, ByteBuffer* data, Player* target) const;
+ void BuildValuesUpdate(uint8 updatetype, ByteBuffer* data, Player* target) const override;
- void AddToWorld();
- void RemoveFromWorld();
- void CleanupsBeforeDelete(bool finalCleanup = true);
+ void AddToWorld() override;
+ void RemoveFromWorld() override;
+ void CleanupsBeforeDelete(bool finalCleanup = true) override;
bool Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMask, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 animprogress, GOState go_state, uint32 artKit = 0);
- void Update(uint32 p_time);
+ void Update(uint32 p_time) override;
static GameObject* GetGameObject(WorldObject& object, uint64 guid);
GameObjectTemplate const* GetGOInfo() const { return m_goInfo; }
GameObjectData const* GetGOData() const { return m_goData; }
@@ -657,7 +657,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
void UpdateRotationFields(float rotation2 = 0.0f, float rotation3 = 0.0f);
// overwrite WorldObject function for proper name localization
- std::string const& GetNameForLocaleIdx(LocaleConstant locale_idx) const;
+ std::string const& GetNameForLocaleIdx(LocaleConstant locale_idx) const override;
void SaveToDB();
void SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask);
@@ -713,6 +713,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
void Refresh();
void Delete();
void getFishLoot(Loot* loot, Player* loot_owner);
+ void getFishLootJunk(Loot* loot, Player* loot_owner);
GameobjectTypes GetGoType() const { return GameobjectTypes(GetByteValue(GAMEOBJECT_BYTES_1, 1)); }
void SetGoType(GameobjectTypes type) { SetByteValue(GAMEOBJECT_BYTES_1, 1, type); }
GOState GetGoState() const { return GOState(GetByteValue(GAMEOBJECT_BYTES_1, 0)); }
@@ -733,7 +734,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
void SetLootState(LootState s, Unit* unit = NULL);
uint16 GetLootMode() { return m_LootMode; }
- bool HasLootMode(uint16 lootMode) { return m_LootMode & lootMode; }
+ bool HasLootMode(uint16 lootMode) { return (m_LootMode & lootMode) != 0; }
void SetLootMode(uint16 lootMode) { m_LootMode = lootMode; }
void AddLootMode(uint16 lootMode) { m_LootMode |= lootMode; }
void RemoveLootMode(uint16 lootMode) { m_LootMode &= ~lootMode; }
@@ -756,7 +757,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
uint32 GetUseCount() const { return m_usetimes; }
uint32 GetUniqueUseCount() const { return m_unique_users.size(); }
- void SaveRespawnTime();
+ void SaveRespawnTime() override;
Loot loot;
@@ -768,8 +769,8 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
uint32 m_groupLootTimer; // (msecs)timer used for group loot
uint32 lootingGroupLowGUID; // used to find group which is looting
- bool hasQuest(uint32 quest_id) const;
- bool hasInvolvedQuest(uint32 quest_id) const;
+ bool hasQuest(uint32 quest_id) const override;
+ bool hasInvolvedQuest(uint32 quest_id) const override;
bool ActivateToQuest(Player* target) const;
void UseDoorOrButton(uint32 time_to_restore = 0, bool alternative = false, Unit* user = NULL);
// 0 = use `gameobject`.`spawntimesecs`
@@ -777,10 +778,12 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
void TriggeringLinkedGameObject(uint32 trapEntry, Unit* target);
- bool IsAlwaysVisibleFor(WorldObject const* seer) const;
- bool IsInvisibleDueToDespawn() const;
+ bool IsNeverVisible() const override;
- uint8 getLevelForTarget(WorldObject const* target) const
+ bool IsAlwaysVisibleFor(WorldObject const* seer) const override;
+ bool IsInvisibleDueToDespawn() const override;
+
+ uint8 getLevelForTarget(WorldObject const* target) const override
{
if (Unit* owner = GetOwner())
return owner->getLevelForTarget(target);
@@ -790,7 +793,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
GameObject* LookupFishingHoleAround(float range);
- void CastSpell(Unit* target, uint32 spell);
+ void CastSpell(Unit* target, uint32 spell, bool triggered = true);
void SendCustomAnim(uint32 anim);
bool IsInRange(float x, float y, float z, float radius) const;
@@ -806,7 +809,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
return GO_DESTRUCTIBLE_INTACT;
}
- void EventInform(uint32 eventId);
+ void EventInform(uint32 eventId, WorldObject* invoker = NULL);
uint64 GetRotation() const { return m_rotation; }
virtual uint32 GetScriptId() const { return GetGOInfo()->ScriptId; }
@@ -825,10 +828,10 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
Transport* ToTransport() { if (GetGOInfo()->type == GAMEOBJECT_TYPE_MO_TRANSPORT) return reinterpret_cast<Transport*>(this); else return NULL; }
Transport const* ToTransport() const { if (GetGOInfo()->type == GAMEOBJECT_TYPE_MO_TRANSPORT) return reinterpret_cast<Transport const*>(this); else return NULL; }
- float GetStationaryX() const { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionX(); return GetPositionX(); }
- float GetStationaryY() const { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionY(); return GetPositionY(); }
- float GetStationaryZ() const { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionZ(); return GetPositionZ(); }
- float GetStationaryO() const { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetOrientation(); return GetOrientation(); }
+ float GetStationaryX() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionX(); return GetPositionX(); }
+ float GetStationaryY() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionY(); return GetPositionY(); }
+ float GetStationaryZ() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionZ(); return GetPositionZ(); }
+ float GetStationaryO() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetOrientation(); return GetOrientation(); }
float GetInteractionDistance();
@@ -841,6 +844,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
time_t m_respawnTime; // (secs) time of next respawn (or despawn if GO have owner()),
uint32 m_respawnDelayTime; // (secs) if 0 then current GO state no dependent from timer
LootState m_lootState;
+ uint64 m_lootStateUnitGUID; // GUID of the unit passed with SetLootState(LootState, Unit*)
bool m_spawnedByDefault;
time_t m_cooldownTime; // used as internal reaction delay time store (not state change reaction).
// For traps this: spell casting cooldown, for doors/buttons: reset time.
@@ -869,7 +873,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
void SwitchDoorOrButton(bool activate, bool alternative = false);
//! Object distance/size - overridden from Object::_IsWithinDist. Needs to take in account proper GO size.
- bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool /*is3D*/) const
+ bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool /*is3D*/) const override
{
//! Following check does check 3d distance
return IsInRange(obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), dist2compare);
diff --git a/src/server/game/Entities/Item/Container/Bag.h b/src/server/game/Entities/Item/Container/Bag.h
index 1e39e5a41ad..db0c8edf556 100644
--- a/src/server/game/Entities/Item/Container/Bag.h
+++ b/src/server/game/Entities/Item/Container/Bag.h
@@ -32,10 +32,10 @@ class Bag : public Item
Bag();
~Bag();
- void AddToWorld();
- void RemoveFromWorld();
+ void AddToWorld() override;
+ void RemoveFromWorld() override;
- bool Create(uint32 guidlow, uint32 itemid, Player const* owner);
+ bool Create(uint32 guidlow, uint32 itemid, Player const* owner) override;
void Clear();
void StoreItem(uint8 slot, Item* pItem, bool update);
@@ -52,13 +52,13 @@ class Bag : public Item
// DB operations
// overwrite virtual Item::SaveToDB
- void SaveToDB(SQLTransaction& trans);
+ void SaveToDB(SQLTransaction& trans) override;
// overwrite virtual Item::LoadFromDB
- bool LoadFromDB(uint32 guid, uint64 owner_guid, Field* fields, uint32 entry);
+ bool LoadFromDB(uint32 guid, uint64 owner_guid, Field* fields, uint32 entry) override;
// overwrite virtual Item::DeleteFromDB
- void DeleteFromDB(SQLTransaction& trans);
+ void DeleteFromDB(SQLTransaction& trans) override;
- void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const;
+ void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const override;
protected:
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index ee389ed7311..6894dd86493 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -27,7 +27,7 @@
#include "ScriptMgr.h"
#include "ConditionMgr.h"
#include "Player.h"
-#include "Opcodes.h"
+#include "WorldSession.h"
void AddItemsSetItem(Player* player, Item* item)
{
@@ -310,7 +310,7 @@ void Item::UpdateDuration(Player* owner, uint32 diff)
void Item::SaveToDB(SQLTransaction& trans)
{
- bool isInTransaction = !(trans.null());
+ bool isInTransaction = bool(trans);
if (!isInTransaction)
trans = CharacterDatabase.BeginTransaction();
@@ -1129,7 +1129,7 @@ void Item::SaveRefundDataToDB()
void Item::DeleteRefundDataFromDB(SQLTransaction* trans)
{
- if (trans && !trans->null())
+ if (trans)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_REFUND_INSTANCE);
stmt->setUInt32(0, GetGUIDLow());
@@ -1265,6 +1265,14 @@ void Item::ItemContainerSaveLootToDB()
// but we don't want to resave it.
if (!_li->canSave)
continue;
+ // Conditions are not checked when loot is generated, it is checked when loot is sent to a player.
+ // For items that are lootable, loot is saved to the DB immediately, that means that loot can be
+ // saved to the DB that the player never should have gotten. This check prevents that, so that only
+ // items that the player should get in loot are in the DB.
+ // IE: Horde items are not saved to the DB for Ally players.
+ Player* const guid = GetOwner();
+ if (!_li->AllowedForPlayer(guid))
+ continue;
stmt_items = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEMCONTAINER_ITEMS);
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h
index a65579cc134..32fbe9e35fd 100644
--- a/src/server/game/Entities/Item/Item.h
+++ b/src/server/game/Entities/Item/Item.h
@@ -324,8 +324,8 @@ class Item : public Object
uState = state;
}
- bool hasQuest(uint32 quest_id) const { return GetTemplate()->StartQuest == quest_id; }
- bool hasInvolvedQuest(uint32 /*quest_id*/) const { return false; }
+ bool hasQuest(uint32 quest_id) const override { return GetTemplate()->StartQuest == quest_id; }
+ bool hasInvolvedQuest(uint32 /*quest_id*/) const override { return false; }
bool IsPotion() const { return GetTemplate()->IsPotion(); }
bool IsWeaponVellum() const { return GetTemplate()->IsWeaponVellum(); }
bool IsArmorVellum() const { return GetTemplate()->IsArmorVellum(); }
@@ -350,7 +350,7 @@ class Item : public Object
void ClearSoulboundTradeable(Player* currentOwner);
bool CheckSoulboundTradeExpire();
- void BuildUpdate(UpdateDataMapType&);
+ void BuildUpdate(UpdateDataMapType&) override;
uint32 GetScriptId() const { return GetTemplate()->ScriptId; }
private:
diff --git a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp
index 3e31347a496..f5813ae0781 100644
--- a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp
+++ b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp
@@ -40,7 +40,7 @@ struct EnchStoreItem
};
typedef std::vector<EnchStoreItem> EnchStoreList;
-typedef UNORDERED_MAP<uint32, EnchStoreList> EnchantmentStore;
+typedef std::unordered_map<uint32, EnchStoreList> EnchantmentStore;
static EnchantmentStore RandomItemEnch;
diff --git a/src/server/game/Entities/Item/ItemPrototype.h b/src/server/game/Entities/Item/ItemPrototype.h
index d411af218b1..7e17fd6ae4d 100644
--- a/src/server/game/Entities/Item/ItemPrototype.h
+++ b/src/server/game/Entities/Item/ItemPrototype.h
@@ -684,7 +684,7 @@ struct ItemTemplate
return false;
}
- bool IsCurrencyToken() const { return BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS; }
+ bool IsCurrencyToken() const { return (BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS) != 0; }
uint32 GetMaxStackSize() const
{
@@ -734,7 +734,7 @@ struct ItemTemplate
default:
break;
}
- return itemLevel;
+ return std::max<float>(0.f, itemLevel);
}
bool IsPotion() const { return Class == ITEM_CLASS_CONSUMABLE && SubClass == ITEM_SUBCLASS_POTION; }
@@ -744,7 +744,7 @@ struct ItemTemplate
};
// Benchmarked: Faster than std::map (insert/find)
-typedef UNORDERED_MAP<uint32, ItemTemplate> ItemTemplateContainer;
+typedef std::unordered_map<uint32, ItemTemplate> ItemTemplateContainer;
struct ItemLocale
{
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index c0a54060298..77f318066a2 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -48,8 +48,8 @@
#include "MovementPacketBuilder.h"
#include "DynamicTree.h"
#include "Group.h"
-#include "Battlefield.h"
#include "BattlefieldMgr.h"
+#include "Battleground.h"
#include "Chat.h"
uint32 GuidHigh2TypeId(uint32 guid_hi)
@@ -119,7 +119,7 @@ Object::~Object()
}
delete [] m_uint32Values;
- m_uint32Values = 0;
+ m_uint32Values = nullptr;
}
void Object::_InitValues()
@@ -343,7 +343,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint16 flags) const
if (isType(TYPEMASK_UNIT))
unit = ToUnit();
else
- object = ((WorldObject*)this);
+ object = (WorldObject const*)this;
*data << uint16(flags); // update flags
@@ -548,7 +548,7 @@ void Object::BuildFieldsUpdate(Player* player, UpdateDataMapType& data_map) cons
if (iter == data_map.end())
{
- std::pair<UpdateDataMapType::iterator, bool> p = data_map.insert(UpdateDataMapType::value_type(player, UpdateData()));
+ std::pair<UpdateDataMapType::iterator, bool> p = data_map.emplace(player, UpdateData());
ASSERT(p.second);
iter = p.first;
}
@@ -568,7 +568,7 @@ uint32 Object::GetUpdateFieldData(Player const* target, uint32*& flags) const
case TYPEID_ITEM:
case TYPEID_CONTAINER:
flags = ItemUpdateFieldFlags;
- if (((Item*)this)->GetOwnerGUID() == target->GetGUID())
+ if (((Item const*)this)->GetOwnerGUID() == target->GetGUID())
visibleFlag |= UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER;
break;
case TYPEID_UNIT:
@@ -594,7 +594,7 @@ uint32 Object::GetUpdateFieldData(Player const* target, uint32*& flags) const
break;
case TYPEID_DYNAMICOBJECT:
flags = DynamicObjectUpdateFieldFlags;
- if (((DynamicObject*)this)->GetCasterGUID() == target->GetGUID())
+ if (ToDynObject()->GetCasterGUID() == target->GetGUID())
visibleFlag |= UF_FLAG_OWNER;
break;
case TYPEID_CORPSE:
@@ -1023,11 +1023,11 @@ bool Position::operator==(Position const &a)
bool Position::HasInLine(WorldObject const* target, float width) const
{
- if (!HasInArc(M_PI, target))
+ if (!HasInArc(float(M_PI), target))
return false;
width += target->GetObjectSize();
float angle = GetRelativeAngle(target);
- return fabs(sin(angle)) * GetExactDist2d(target->GetPositionX(), target->GetPositionY()) < width;
+ return std::fabs(std::sin(angle)) * GetExactDist2d(target->GetPositionX(), target->GetPositionY()) < width;
}
std::string Position::ToString() const
@@ -1163,6 +1163,9 @@ void WorldObject::CleanupsBeforeDelete(bool /*finalCleanup*/)
{
if (IsInWorld())
RemoveFromWorld();
+
+ if (Transport* transport = GetTransport())
+ transport->RemovePassenger(this);
}
void WorldObject::_Create(uint32 guidlow, HighGuid guidhigh, uint32 phaseMask)
@@ -1204,7 +1207,7 @@ InstanceScript* WorldObject::GetInstanceScript()
float WorldObject::GetDistanceZ(const WorldObject* obj) const
{
- float dz = fabs(GetPositionZ() - obj->GetPositionZ());
+ float dz = std::fabs(GetPositionZ() - obj->GetPositionZ());
float sizefactor = GetObjectSize() + obj->GetObjectSize();
float dist = dz - sizefactor;
return (dist > 0 ? dist : 0);
@@ -1215,7 +1218,7 @@ bool WorldObject::_IsWithinDist(WorldObject const* obj, float dist2compare, bool
float sizefactor = GetObjectSize() + obj->GetObjectSize();
float maxdist = dist2compare + sizefactor;
- if (m_transport && obj->GetTransport() && obj->GetTransport()->GetGUIDLow() == m_transport->GetGUIDLow())
+ if (GetTransport() && obj->GetTransport() && obj->GetTransport()->GetGUIDLow() == GetTransport()->GetGUIDLow())
{
float dtx = m_movementInfo.transport.pos.m_positionX - obj->m_movementInfo.transport.pos.m_positionX;
float dty = m_movementInfo.transport.pos.m_positionY - obj->m_movementInfo.transport.pos.m_positionY;
@@ -1427,7 +1430,7 @@ bool WorldObject::IsInRange3d(float x, float y, float z, float minRange, float m
void Position::RelocateOffset(const Position & offset)
{
- m_positionX = GetPositionX() + (offset.GetPositionX() * std::cos(GetOrientation()) + offset.GetPositionY() * std::sin(GetOrientation() + M_PI));
+ m_positionX = GetPositionX() + (offset.GetPositionX() * std::cos(GetOrientation()) + offset.GetPositionY() * std::sin(GetOrientation() + float(M_PI)));
m_positionY = GetPositionY() + (offset.GetPositionY() * std::cos(GetOrientation()) + offset.GetPositionX() * std::sin(GetOrientation()));
m_positionZ = GetPositionZ() + offset.GetPositionZ();
SetOrientation(GetOrientation() + offset.GetOrientation());
@@ -1458,8 +1461,8 @@ float Position::GetAngle(const float x, const float y) const
float dx = x - GetPositionX();
float dy = y - GetPositionY();
- float ang = atan2(dy, dx);
- ang = (ang >= 0) ? ang : 2 * M_PI + ang;
+ float ang = std::atan2(dy, dx);
+ ang = (ang >= 0) ? ang : 2 * float(M_PI) + ang;
return ang;
}
@@ -1468,7 +1471,7 @@ void Position::GetSinCos(const float x, const float y, float &vsin, float &vcos)
float dx = GetPositionX() - x;
float dy = GetPositionY() - y;
- if (fabs(dx) < 0.001f && fabs(dy) < 0.001f)
+ if (std::fabs(dx) < 0.001f && std::fabs(dy) < 0.001f)
{
float angle = (float)rand_norm()*static_cast<float>(2*M_PI);
vcos = std::cos(angle);
@@ -1476,7 +1479,7 @@ void Position::GetSinCos(const float x, const float y, float &vsin, float &vcos)
}
else
{
- float dist = sqrt((dx*dx) + (dy*dy));
+ float dist = std::sqrt((dx*dx) + (dy*dy));
vcos = dx / dist;
vsin = dy / dist;
}
@@ -1496,8 +1499,8 @@ bool Position::HasInArc(float arc, const Position* obj, float border) const
// move angle to range -pi ... +pi
angle = NormalizeOrientation(angle);
- if (angle > M_PI)
- angle -= 2.0f*M_PI;
+ if (angle > float(M_PI))
+ angle -= 2.0f * float(M_PI);
float lborder = -1 * (arc/border); // in range -pi..0
float rborder = (arc/border); // in range 0..pi
@@ -1531,7 +1534,7 @@ bool WorldObject::isInFront(WorldObject const* target, float arc) const
bool WorldObject::isInBack(WorldObject const* target, float arc) const
{
- return !HasInArc(2 * M_PI - arc, target);
+ return !HasInArc(2 * float(M_PI) - arc, target);
}
void WorldObject::GetRandomPoint(const Position &pos, float distance, float &rand_x, float &rand_y, float &rand_z) const
@@ -1555,11 +1558,11 @@ void WorldObject::GetRandomPoint(const Position &pos, float distance, float &ran
UpdateGroundPositionZ(rand_x, rand_y, rand_z); // update to LOS height if available
}
-void WorldObject::GetRandomPoint(const Position &srcPos, float distance, Position &pos) const
+Position WorldObject::GetRandomPoint(const Position &srcPos, float distance) const
{
float x, y, z;
GetRandomPoint(srcPos, distance, x, y, z);
- pos.Relocate(x, y, z, GetOrientation());
+ return Position(x, y, z, GetOrientation());
}
void WorldObject::UpdateGroundPositionZ(float x, float y, float &z) const
@@ -1834,7 +1837,7 @@ bool WorldObject::CanDetectStealthOf(WorldObject const* obj) const
if (distance < combatReach)
return true;
- if (!HasInArc(M_PI, obj))
+ if (!HasInArc(float(M_PI), obj))
return false;
GameObject const* go = ToGameObject();
@@ -2171,13 +2174,8 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert
}
uint32 phase = PHASEMASK_NORMAL;
- uint32 team = 0;
if (summoner)
- {
phase = summoner->GetPhaseMask();
- if (summoner->GetTypeId() == TYPEID_PLAYER)
- team = summoner->ToPlayer()->GetTeam();
- }
TempSummon* summon = NULL;
switch (mask)
@@ -2199,7 +2197,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert
break;
}
- if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), this, phase, entry, vehId, team, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation()))
+ if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), this, phase, entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), nullptr, vehId))
{
delete summon;
return NULL;
@@ -2506,7 +2504,7 @@ void WorldObject::GetNearPoint(WorldObject const* /*searcher*/, float &x, float
float first_z = z;
// loop in a circle to look for a point in LoS using small steps
- for (float angle = M_PI / 8; angle < M_PI * 2; angle += M_PI / 8)
+ for (float angle = float(M_PI) / 8; angle < float(M_PI) * 2; angle += float(M_PI) / 8)
{
GetNearPoint2D(x, y, distance2d + searcher_size, absAngle + angle);
z = GetPositionZ();
@@ -2527,22 +2525,25 @@ void WorldObject::GetClosePoint(float &x, float &y, float &z, float size, float
GetNearPoint(NULL, x, y, z, size, distance2d, GetOrientation() + angle);
}
-void WorldObject::GetNearPosition(Position &pos, float dist, float angle)
+Position WorldObject::GetNearPosition(float dist, float angle)
{
- GetPosition(&pos);
+ Position pos = GetPosition();
MovePosition(pos, dist, angle);
+ return pos;
}
-void WorldObject::GetFirstCollisionPosition(Position &pos, float dist, float angle)
+Position WorldObject::GetFirstCollisionPosition(float dist, float angle)
{
- GetPosition(&pos);
+ Position pos = GetPosition();
MovePositionToFirstCollision(pos, dist, angle);
+ return pos;
}
-void WorldObject::GetRandomNearPosition(Position &pos, float radius)
+Position WorldObject::GetRandomNearPosition(float radius)
{
- GetPosition(&pos);
+ Position pos = GetPosition();
MovePosition(pos, radius * (float)rand_norm(), (float)rand_norm() * static_cast<float>(2 * M_PI));
+ return pos;
}
void WorldObject::GetContactPoint(const WorldObject* obj, float &x, float &y, float &z, float distance2d /*= CONTACT_DISTANCE*/) const
@@ -2573,20 +2574,20 @@ void WorldObject::MovePosition(Position &pos, float dist, float angle)
ground = GetMap()->GetHeight(GetPhaseMask(), destx, desty, MAX_HEIGHT, true);
floor = GetMap()->GetHeight(GetPhaseMask(), destx, desty, pos.m_positionZ, true);
- destz = fabs(ground - pos.m_positionZ) <= fabs(floor - pos.m_positionZ) ? ground : floor;
+ destz = std::fabs(ground - pos.m_positionZ) <= std::fabs(floor - pos.m_positionZ) ? ground : floor;
float step = dist/10.0f;
for (uint8 j = 0; j < 10; ++j)
{
// do not allow too big z changes
- if (fabs(pos.m_positionZ - destz) > 6)
+ if (std::fabs(pos.m_positionZ - destz) > 6)
{
destx -= step * std::cos(angle);
desty -= step * std::sin(angle);
ground = GetMap()->GetHeight(GetPhaseMask(), destx, desty, MAX_HEIGHT, true);
floor = GetMap()->GetHeight(GetPhaseMask(), destx, desty, pos.m_positionZ, true);
- destz = fabs(ground - pos.m_positionZ) <= fabs(floor - pos.m_positionZ) ? ground : floor;
+ destz = std::fabs(ground - pos.m_positionZ) <= std::fabs(floor - pos.m_positionZ) ? ground : floor;
}
// we have correct destz now
else
@@ -2602,11 +2603,36 @@ void WorldObject::MovePosition(Position &pos, float dist, float angle)
pos.SetOrientation(GetOrientation());
}
+// @todo: replace with WorldObject::UpdateAllowedPositionZ
+float NormalizeZforCollision(WorldObject* obj, float x, float y, float z)
+{
+ float ground = obj->GetMap()->GetHeight(obj->GetPhaseMask(), x, y, MAX_HEIGHT, true);
+ float floor = obj->GetMap()->GetHeight(obj->GetPhaseMask(), x, y, z + 2.0f, true);
+ float helper = std::fabs(ground - z) <= std::fabs(floor - z) ? ground : floor;
+ if (z > helper) // must be above ground
+ {
+ if (Unit* unit = obj->ToUnit())
+ {
+ if (unit->CanFly())
+ return z;
+ }
+ LiquidData liquid_status;
+ ZLiquidStatus res = obj->GetMap()->getLiquidStatus(x, y, z, MAP_ALL_LIQUIDS, &liquid_status);
+ if (res && liquid_status.level > helper) // water must be above ground
+ {
+ if (liquid_status.level > z) // z is underwater
+ return z;
+ else
+ return std::fabs(liquid_status.level - z) <= std::fabs(helper - z) ? liquid_status.level : helper;
+ }
+ }
+ return helper;
+}
+
void WorldObject::MovePositionToFirstCollision(Position &pos, float dist, float angle)
{
angle += GetOrientation();
- float destx, desty, destz, ground, floor;
- pos.m_positionZ += 2.0f;
+ float destx, desty, destz;
destx = pos.m_positionX + dist * std::cos(angle);
desty = pos.m_positionY + dist * std::sin(angle);
@@ -2617,11 +2643,8 @@ void WorldObject::MovePositionToFirstCollision(Position &pos, float dist, float
return;
}
- ground = GetMap()->GetHeight(GetPhaseMask(), destx, desty, MAX_HEIGHT, true);
- floor = GetMap()->GetHeight(GetPhaseMask(), destx, desty, pos.m_positionZ, true);
- destz = fabs(ground - pos.m_positionZ) <= fabs(floor - pos.m_positionZ) ? ground : floor;
-
- bool col = VMAP::VMapFactory::createOrGetVMapManager()->getObjectHitPos(GetMapId(), pos.m_positionX, pos.m_positionY, pos.m_positionZ+0.5f, destx, desty, destz+0.5f, destx, desty, destz, -0.5f);
+ destz = NormalizeZforCollision(this, destx, desty, pos.GetPositionZ());
+ bool col = VMAP::VMapFactory::createOrGetVMapManager()->getObjectHitPos(GetMapId(), pos.m_positionX, pos.m_positionY, pos.m_positionZ + 0.5f, destx, desty, destz + 0.5f, destx, desty, destz, -0.5f);
// collision occured
if (col)
@@ -2629,32 +2652,30 @@ void WorldObject::MovePositionToFirstCollision(Position &pos, float dist, float
// move back a bit
destx -= CONTACT_DISTANCE * std::cos(angle);
desty -= CONTACT_DISTANCE * std::sin(angle);
- dist = sqrt((pos.m_positionX - destx)*(pos.m_positionX - destx) + (pos.m_positionY - desty)*(pos.m_positionY - desty));
+ dist = std::sqrt((pos.m_positionX - destx)*(pos.m_positionX - destx) + (pos.m_positionY - desty)*(pos.m_positionY - desty));
}
// check dynamic collision
- col = GetMap()->getObjectHitPos(GetPhaseMask(), pos.m_positionX, pos.m_positionY, pos.m_positionZ+0.5f, destx, desty, destz+0.5f, destx, desty, destz, -0.5f);
+ col = GetMap()->getObjectHitPos(GetPhaseMask(), pos.m_positionX, pos.m_positionY, pos.m_positionZ + 0.5f, destx, desty, destz + 0.5f, destx, desty, destz, -0.5f);
// Collided with a gameobject
if (col)
{
destx -= CONTACT_DISTANCE * std::cos(angle);
desty -= CONTACT_DISTANCE * std::sin(angle);
- dist = sqrt((pos.m_positionX - destx)*(pos.m_positionX - destx) + (pos.m_positionY - desty)*(pos.m_positionY - desty));
+ dist = std::sqrt((pos.m_positionX - destx)*(pos.m_positionX - destx) + (pos.m_positionY - desty)*(pos.m_positionY - desty));
}
- float step = dist/10.0f;
+ float step = dist / 10.0f;
for (uint8 j = 0; j < 10; ++j)
{
// do not allow too big z changes
- if (fabs(pos.m_positionZ - destz) > 6)
+ if (std::fabs(pos.m_positionZ - destz) > 6.0f)
{
destx -= step * std::cos(angle);
desty -= step * std::sin(angle);
- ground = GetMap()->GetHeight(GetPhaseMask(), destx, desty, MAX_HEIGHT, true);
- floor = GetMap()->GetHeight(GetPhaseMask(), destx, desty, pos.m_positionZ, true);
- destz = fabs(ground - pos.m_positionZ) <= fabs(floor - pos.m_positionZ) ? ground : floor;
+ destz = NormalizeZforCollision(this, destx, desty, pos.GetPositionZ());
}
// we have correct destz now
else
@@ -2666,7 +2687,7 @@ void WorldObject::MovePositionToFirstCollision(Position &pos, float dist, float
Trinity::NormalizeMapCoord(pos.m_positionX);
Trinity::NormalizeMapCoord(pos.m_positionY);
- UpdateAllowedPositionZ(pos.m_positionX, pos.m_positionY, pos.m_positionZ);
+ pos.m_positionZ = NormalizeZforCollision(this, destx, desty, pos.GetPositionZ());
pos.SetOrientation(GetOrientation());
}
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index d55e357de1d..cdc61f8b2ff 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -32,6 +32,8 @@
#define CONTACT_DISTANCE 0.5f
#define INTERACTION_DISTANCE 5.0f
#define ATTACK_DISTANCE 5.0f
+#define INSPECT_DISTANCE 28.0f
+#define TRADE_DISTANCE 11.11f
#define MAX_VISIBILITY_DISTANCE SIZE_OF_GRIDS // max distance for visible objects
#define SIGHT_RANGE_UNIT 50.0f
#define DEFAULT_VISIBILITY_DISTANCE 90.0f // default visible distance, 90 yards on continents
@@ -114,7 +116,7 @@ class WorldObject;
class WorldPacket;
class ZoneScript;
-typedef UNORDERED_MAP<Player*, UpdateData> UpdateDataMapType;
+typedef std::unordered_map<Player*, UpdateData> UpdateDataMapType;
class Object
{
@@ -138,7 +140,7 @@ class Object
virtual void SetObjectScale(float scale) { SetFloatValue(OBJECT_FIELD_SCALE_X, scale); }
TypeID GetTypeId() const { return m_objectTypeId; }
- bool isType(uint16 mask) const { return (mask & m_objectType); }
+ bool isType(uint16 mask) const { return (mask & m_objectType) != 0; }
virtual void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const;
void SendUpdateToPlayer(Player* player);
@@ -204,7 +206,7 @@ class Object
void BuildFieldsUpdate(Player*, UpdateDataMapType &) const;
void SetFieldNotifyFlag(uint16 flag) { _fieldNotifyFlags |= flag; }
- void RemoveFieldNotifyFlag(uint16 flag) { _fieldNotifyFlags &= ~flag; }
+ void RemoveFieldNotifyFlag(uint16 flag) { _fieldNotifyFlags &= uint16(~flag); }
// FG: some hacky helpers
void ForceValuesUpdateAtIndex(uint32);
@@ -267,8 +269,8 @@ class Object
// for output helpfull error messages from asserts
bool PrintIndexError(uint32 index, bool set) const;
- Object(const Object&); // prevent generation copy constructor
- Object& operator=(Object const&); // prevent generation assigment operator
+ Object(Object const& right) = delete;
+ Object& operator=(Object const& right) = delete;
};
struct Position
@@ -330,10 +332,10 @@ struct Position
{ x = m_positionX; y = m_positionY; z = m_positionZ; }
void GetPosition(float &x, float &y, float &z, float &o) const
{ x = m_positionX; y = m_positionY; z = m_positionZ; o = m_orientation; }
- void GetPosition(Position* pos) const
+
+ Position GetPosition() const
{
- if (pos)
- pos->Relocate(m_positionX, m_positionY, m_positionZ, m_orientation);
+ return *this;
}
Position::PositionXYZStreamer PositionXYZStream()
@@ -350,19 +352,19 @@ struct Position
float GetExactDist2dSq(float x, float y) const
{ float dx = m_positionX - x; float dy = m_positionY - y; return dx*dx + dy*dy; }
float GetExactDist2d(const float x, const float y) const
- { return sqrt(GetExactDist2dSq(x, y)); }
+ { return std::sqrt(GetExactDist2dSq(x, y)); }
float GetExactDist2dSq(Position const* pos) const
{ float dx = m_positionX - pos->m_positionX; float dy = m_positionY - pos->m_positionY; return dx*dx + dy*dy; }
float GetExactDist2d(Position const* pos) const
- { return sqrt(GetExactDist2dSq(pos)); }
+ { return std::sqrt(GetExactDist2dSq(pos)); }
float GetExactDistSq(float x, float y, float z) const
{ float dz = m_positionZ - z; return GetExactDist2dSq(x, y) + dz*dz; }
float GetExactDist(float x, float y, float z) const
- { return sqrt(GetExactDistSq(x, y, z)); }
+ { return std::sqrt(GetExactDistSq(x, y, z)); }
float GetExactDistSq(Position const* pos) const
{ float dx = m_positionX - pos->m_positionX; float dy = m_positionY - pos->m_positionY; float dz = m_positionZ - pos->m_positionZ; return dx*dx + dy*dy + dz*dz; }
float GetExactDist(Position const* pos) const
- { return sqrt(GetExactDistSq(pos)); }
+ { return std::sqrt(GetExactDistSq(pos)); }
void GetPositionOffsetTo(Position const & endPos, Position & retOffset) const;
@@ -393,11 +395,11 @@ struct Position
if (o < 0)
{
float mod = o *-1;
- mod = fmod(mod, 2.0f * static_cast<float>(M_PI));
+ mod = std::fmod(mod, 2.0f * static_cast<float>(M_PI));
mod = -mod + 2.0f * static_cast<float>(M_PI);
return mod;
}
- return fmod(o, 2.0f * static_cast<float>(M_PI));
+ return std::fmod(o, 2.0f * static_cast<float>(M_PI));
}
};
ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYZOStreamer const& streamer);
@@ -466,11 +468,11 @@ struct MovementInfo
void SetMovementFlags(uint32 flag) { flags = flag; }
void AddMovementFlag(uint32 flag) { flags |= flag; }
void RemoveMovementFlag(uint32 flag) { flags &= ~flag; }
- bool HasMovementFlag(uint32 flag) const { return flags & flag; }
+ bool HasMovementFlag(uint32 flag) const { return (flags & flag) != 0; }
uint16 GetExtraMovementFlags() const { return flags2; }
void AddExtraMovementFlag(uint16 flag) { flags2 |= flag; }
- bool HasExtraMovementFlag(uint16 flag) const { return flags2 & flag; }
+ bool HasExtraMovementFlag(uint16 flag) const { return (flags2 & flag) != 0; }
void SetFallTime(uint32 time) { fallTime = time; }
@@ -488,6 +490,12 @@ class WorldLocation : public Position
void WorldRelocate(const WorldLocation &loc)
{ m_mapId = loc.GetMapId(); Relocate(loc); }
+
+ WorldLocation GetWorldLocation() const
+ {
+ return *this;
+ }
+
uint32 GetMapId() const { return m_mapId; }
uint32 m_mapId;
@@ -497,6 +505,8 @@ template<class T>
class GridObject
{
public:
+ virtual ~GridObject() { }
+
bool IsInGrid() const { return _gridRef.isValid(); }
void AddToGrid(GridRefManager<T>& m) { ASSERT(!IsInGrid()); _gridRef.link(&m, (T*)this); }
void RemoveFromGrid() { ASSERT(IsInGrid()); _gridRef.unlink(); }
@@ -570,16 +580,16 @@ class WorldObject : public Object, public WorldLocation
virtual void Update (uint32 /*time_diff*/) { }
void _Create(uint32 guidlow, HighGuid guidhigh, uint32 phaseMask);
- virtual void RemoveFromWorld();
+ virtual void RemoveFromWorld() override;
void GetNearPoint2D(float &x, float &y, float distance, float absAngle) const;
void GetNearPoint(WorldObject const* searcher, float &x, float &y, float &z, float searcher_size, float distance2d, float absAngle) const;
void GetClosePoint(float &x, float &y, float &z, float size, float distance2d = 0, float angle = 0) const;
void MovePosition(Position &pos, float dist, float angle);
- void GetNearPosition(Position &pos, float dist, float angle);
+ Position GetNearPosition(float dist, float angle);
void MovePositionToFirstCollision(Position &pos, float dist, float angle);
- void GetFirstCollisionPosition(Position &pos, float dist, float angle);
- void GetRandomNearPosition(Position &pos, float radius);
+ Position GetFirstCollisionPosition(float dist, float angle);
+ Position GetRandomNearPosition(float radius);
void GetContactPoint(WorldObject const* obj, float &x, float &y, float &z, float distance2d = CONTACT_DISTANCE) const;
float GetObjectSize() const;
@@ -587,14 +597,14 @@ class WorldObject : public Object, public WorldLocation
void UpdateAllowedPositionZ(float x, float y, float &z) const;
void GetRandomPoint(Position const &srcPos, float distance, float &rand_x, float &rand_y, float &rand_z) const;
- void GetRandomPoint(Position const &srcPos, float distance, Position &pos) const;
+ Position GetRandomPoint(Position const &srcPos, float distance) const;
uint32 GetInstanceId() const { return m_InstanceId; }
virtual void SetPhaseMask(uint32 newPhaseMask, bool update);
uint32 GetPhaseMask() const { return m_phaseMask; }
bool InSamePhase(WorldObject const* obj) const;
- bool InSamePhase(uint32 phasemask) const { return (GetPhaseMask() & phasemask); }
+ bool InSamePhase(uint32 phasemask) const { return (GetPhaseMask() & phasemask) != 0; }
uint32 GetZoneId() const;
uint32 GetAreaId() const;
@@ -629,8 +639,8 @@ class WorldObject : public Object, public WorldLocation
bool IsInRange(WorldObject const* obj, float minRange, float maxRange, bool is3D = true) const;
bool IsInRange2d(float x, float y, float minRange, float maxRange) const;
bool IsInRange3d(float x, float y, float z, float minRange, float maxRange) const;
- bool isInFront(WorldObject const* target, float arc = M_PI) const;
- bool isInBack(WorldObject const* target, float arc = M_PI) const;
+ bool isInFront(WorldObject const* target, float arc = float(M_PI)) const;
+ bool isInBack(WorldObject const* target, float arc = float(M_PI)) const;
bool IsInBetween(WorldObject const* obj1, WorldObject const* obj2, float size = 0) const;
@@ -703,13 +713,13 @@ class WorldObject : public Object, public WorldLocation
void DestroyForNearbyPlayers();
virtual void UpdateObjectVisibility(bool forced = true);
- void BuildUpdate(UpdateDataMapType&);
+ void BuildUpdate(UpdateDataMapType&) override;
//relocation and visibility system functions
void AddToNotify(uint16 f) { m_notifyflags |= f;}
- bool isNeedNotify(uint16 f) const { return m_notifyflags & f;}
+ bool isNeedNotify(uint16 f) const { return (m_notifyflags & f) != 0; }
uint16 GetNotifyFlags() const { return m_notifyflags; }
- bool NotifyExecuted(uint16 f) const { return m_executed_notifies & f;}
+ bool NotifyExecuted(uint16 f) const { return (m_executed_notifies & f) != 0; }
void SetNotified(uint16 f) { m_executed_notifies |= f;}
void ResetAllNotifies() { m_notifyflags = 0; m_executed_notifies = 0; }
@@ -795,14 +805,16 @@ namespace Trinity
class ObjectDistanceOrderPred
{
public:
- ObjectDistanceOrderPred(WorldObject const* pRefObj, bool ascending = true) : m_refObj(pRefObj), m_ascending(ascending) { }
- bool operator()(WorldObject const* pLeft, WorldObject const* pRight) const
+ ObjectDistanceOrderPred(WorldObject const* refObj, bool ascending = true) : _refObj(refObj), _ascending(ascending) { }
+
+ bool operator()(WorldObject const* left, WorldObject const* right) const
{
- return m_ascending ? m_refObj->GetDistanceOrder(pLeft, pRight) : !m_refObj->GetDistanceOrder(pLeft, pRight);
+ return _refObj->GetDistanceOrder(left, right) == _ascending;
}
+
private:
- WorldObject const* m_refObj;
- const bool m_ascending;
+ WorldObject const* _refObj;
+ bool _ascending;
};
}
diff --git a/src/server/game/Entities/Object/ObjectPosSelector.cpp b/src/server/game/Entities/Object/ObjectPosSelector.cpp
index fa7c5dffafa..da2049ac62f 100644
--- a/src/server/game/Entities/Object/ObjectPosSelector.cpp
+++ b/src/server/game/Entities/Object/ObjectPosSelector.cpp
@@ -21,7 +21,7 @@
ObjectPosSelector::ObjectPosSelector(float x, float y, float size, float dist)
: m_center_x(x), m_center_y(y), m_size(size), m_dist(dist)
{
- m_anglestep = acos(m_dist/(m_dist+2*m_size));
+ m_anglestep = std::acos(m_dist/(m_dist+2*m_size));
m_nextUsedPos[USED_POS_PLUS] = m_UsedPosLists[USED_POS_PLUS].end();
m_nextUsedPos[USED_POS_MINUS] = m_UsedPosLists[USED_POS_MINUS].end();
diff --git a/src/server/game/Entities/Object/ObjectPosSelector.h b/src/server/game/Entities/Object/ObjectPosSelector.h
index 5bac179880f..44b85dae3dd 100644
--- a/src/server/game/Entities/Object/ObjectPosSelector.h
+++ b/src/server/game/Entities/Object/ObjectPosSelector.h
@@ -60,10 +60,10 @@ struct ObjectPosSelector
float angle_step2 = GetAngle(nextUsedPos.second);
float next_angle = nextUsedPos.first;
- if (nextUsedPos.second.sign * sign < 0) // last node from diff. list (-pi+alpha)
- next_angle = 2*M_PI-next_angle; // move to positive
+ if (nextUsedPos.second.sign * sign < 0) // last node from diff. list (-pi+alpha)
+ next_angle = 2 * float(M_PI) - next_angle; // move to positive
- return fabs(angle)+angle_step2 <= next_angle;
+ return std::fabs(angle) + angle_step2 <= next_angle;
}
bool CheckOriginal() const
@@ -105,7 +105,7 @@ struct ObjectPosSelector
// next possible angle
angle = m_smallStepAngle[uptype] + m_anglestep * sign;
- if (fabs(angle) > M_PI)
+ if (std::fabs(angle) > float(M_PI))
{
m_smallStepOk[uptype] = false;
return false;
@@ -113,7 +113,7 @@ struct ObjectPosSelector
if (m_smallStepNextUsedPos[uptype])
{
- if (fabs(angle) >= m_smallStepNextUsedPos[uptype]->first)
+ if (std::fabs(angle) >= m_smallStepNextUsedPos[uptype]->first)
{
m_smallStepOk[uptype] = false;
return false;
@@ -136,7 +136,7 @@ struct ObjectPosSelector
UsedPosList::value_type const* nextUsedPos(UsedPosType uptype);
// angle from used pos to next possible free pos
- float GetAngle(UsedPos const& usedPos) const { return acos(m_dist/(usedPos.dist+usedPos.size+m_size)); }
+ float GetAngle(UsedPos const& usedPos) const { return std::acos(m_dist/(usedPos.dist+usedPos.size+m_size)); }
float m_center_x;
float m_center_y;
diff --git a/src/server/game/Entities/Object/Updates/UpdateData.cpp b/src/server/game/Entities/Object/Updates/UpdateData.cpp
index e996db52c38..f6ac0bc67cc 100644
--- a/src/server/game/Entities/Object/Updates/UpdateData.cpp
+++ b/src/server/game/Entities/Object/Updates/UpdateData.cpp
@@ -47,9 +47,9 @@ void UpdateData::Compress(void* dst, uint32 *dst_size, void* src, int src_size)
{
z_stream c_stream;
- c_stream.zalloc = (alloc_func)0;
- c_stream.zfree = (free_func)0;
- c_stream.opaque = (voidpf)0;
+ c_stream.zalloc = (alloc_func)nullptr;
+ c_stream.zfree = (free_func)nullptr;
+ c_stream.opaque = (voidpf)nullptr;
// default Z_BEST_SPEED (1)
int z_res = deflateInit(&c_stream, sWorld->getIntConfig(CONFIG_COMPRESSION));
diff --git a/src/server/game/Entities/Object/Updates/UpdateData.h b/src/server/game/Entities/Object/Updates/UpdateData.h
index 16bdec46aba..1ec86192fab 100644
--- a/src/server/game/Entities/Object/Updates/UpdateData.h
+++ b/src/server/game/Entities/Object/Updates/UpdateData.h
@@ -53,6 +53,11 @@ class UpdateData
{
public:
UpdateData();
+ UpdateData(UpdateData&& right) : m_blockCount(right.m_blockCount),
+ m_outOfRangeGUIDs(std::move(right.m_outOfRangeGUIDs)),
+ m_data(std::move(right.m_data))
+ {
+ }
void AddOutOfRangeGUID(std::set<uint64>& guids);
void AddOutOfRangeGUID(uint64 guid);
@@ -69,6 +74,9 @@ class UpdateData
ByteBuffer m_data;
void Compress(void* dst, uint32 *dst_size, void* src, int src_size);
+
+ UpdateData(UpdateData const& right) = delete;
+ UpdateData& operator=(UpdateData const& right) = delete;
};
#endif
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index 19ac8dd57b5..37087663328 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -30,7 +30,7 @@
#include "Unit.h"
#include "Util.h"
#include "Group.h"
-#include "Opcodes.h"
+#include "WorldSession.h"
#define PET_XP_FACTOR 0.05f
@@ -39,7 +39,7 @@ Pet::Pet(Player* owner, PetType type) :
m_happinessTimer(7500), m_petType(type), m_duration(0), m_auraRaidUpdateMask(0), m_loading(false),
m_declinedname(NULL)
{
- ASSERT(GetOwner()->GetTypeId() == TYPEID_PLAYER);
+ ASSERT(GetOwner());
m_unitTypeMask |= UNIT_MASK_PET;
if (type == HUNTER_PET)
@@ -182,8 +182,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
setFaction(owner->getFaction());
SetUInt32Value(UNIT_CREATED_BY_SPELL, summonSpellId);
- CreatureTemplate const* cinfo = GetCreatureTemplate();
- if (cinfo->type == CREATURE_TYPE_CRITTER)
+ if (IsCritter())
{
float px, py, pz;
owner->GetClosePoint(px, py, pz, GetObjectSize(), PET_FOLLOW_DIST, GetFollowAngle());
@@ -384,8 +383,6 @@ void Pet::SavePetToDB(PetSaveMode mode)
return;
Player* owner = GetOwner();
- if (!owner)
- return;
// not save pet as current if another pet temporary unsummoned
if (mode == PET_SAVE_AS_CURRENT && owner->GetTemporaryUnsummonedPetNumber() &&
@@ -525,9 +522,8 @@ void Pet::setDeathState(DeathState s) // overwrite virtual
SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_NONE);
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE);
- //lose happiness when died and not in BG/Arena
- MapEntry const* mapEntry = sMapStore.LookupEntry(GetMapId());
- if (!mapEntry || (mapEntry->map_type != MAP_ARENA && mapEntry->map_type != MAP_BATTLEGROUND))
+ // lose happiness when died and not in BG/Arena
+ if (!GetMap()->IsBattlegroundOrArena())
ModifyPower(POWER_HAPPINESS, -HAPPINESS_LEVEL_SIZE);
//SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
@@ -563,7 +559,7 @@ void Pet::Update(uint32 diff)
{
// unsummon pet that lost owner
Player* owner = GetOwner();
- if (!owner || (!IsWithinDistInMap(owner, GetMap()->GetVisibilityRange()) && !isPossessed()) || (isControlled() && !owner->GetPetGUID()))
+ if ((!IsWithinDistInMap(owner, GetMap()->GetVisibilityRange()) && !isPossessed()) || (isControlled() && !owner->GetPetGUID()))
//if (!owner || (!IsWithinDistInMap(owner, GetMap()->GetVisibilityDistance()) && (owner->GetCharmGUID() && (owner->GetCharmGUID() != GetGUID()))) || (isControlled() && !owner->GetPetGUID()))
{
Remove(PET_SAVE_NOT_IN_SLOT, true);
@@ -846,8 +842,8 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
if (IsPet() && GetOwner()->GetTypeId() == TYPEID_PLAYER)
{
if (GetOwner()->getClass() == CLASS_WARLOCK
- || GetOwner()->getClass() == CLASS_SHAMAN // Fire Elemental
- || GetOwner()->getClass() == CLASS_DEATH_KNIGHT) // Risen Ghoul
+ || GetOwner()->getClass() == CLASS_SHAMAN // Fire Elemental
+ || GetOwner()->getClass() == CLASS_DEATH_KNIGHT) // Risen Ghoul
{
petType = SUMMON_PET;
}
@@ -1022,7 +1018,7 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
SetCreateHealth(30*petlevel);
// wolf attack speed is 1.5s
- SetAttackTime(BASE_ATTACK, cinfo->baseattacktime);
+ SetAttackTime(BASE_ATTACK, cinfo->BaseAttackTime);
SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float((petlevel * 4 - petlevel)));
SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float((petlevel * 4 + petlevel)));
@@ -1090,7 +1086,7 @@ bool Pet::HaveInDiet(ItemTemplate const* item) const
uint32 diet = cFamily->petFoodMask;
uint32 FoodMask = 1 << (item->FoodType-1);
- return diet & FoodMask;
+ return (diet & FoodMask) != 0;
}
uint32 Pet::GetCurrentFoodBenefitLevel(uint32 itemlevel) const
@@ -1150,7 +1146,7 @@ void Pet::_LoadSpellCooldowns()
}
while (result->NextRow());
- if (!cooldowns.empty() && GetOwner())
+ if (!cooldowns.empty())
{
BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, cooldowns);
GetOwner()->GetSession()->SendPacket(&data);
@@ -1629,12 +1625,7 @@ bool Pet::removeSpell(uint32 spell_id, bool learn_prev, bool clear_ab)
if (clear_ab && !learn_prev && m_charmInfo->RemoveSpellFromActionBar(spell_id))
{
if (!m_loading)
- {
- // need update action bar for last removed rank
- if (Unit* owner = GetOwner())
- if (owner->GetTypeId() == TYPEID_PLAYER)
- owner->ToPlayer()->PetSpellInitialize();
- }
+ GetOwner()->PetSpellInitialize(); // need update action bar for last removed rank
}
return true;
@@ -1669,13 +1660,11 @@ void Pet::InitPetCreateSpells()
bool Pet::resetTalents()
{
- Unit* owner = GetOwner();
- if (!owner || owner->GetTypeId() != TYPEID_PLAYER)
- return false;
+ Player* player = GetOwner();
// not need after this call
- if (owner->ToPlayer()->HasAtLoginFlag(AT_LOGIN_RESET_PET_TALENTS))
- owner->ToPlayer()->RemoveAtLoginFlag(AT_LOGIN_RESET_PET_TALENTS, true);
+ if (player->HasAtLoginFlag(AT_LOGIN_RESET_PET_TALENTS))
+ player->RemoveAtLoginFlag(AT_LOGIN_RESET_PET_TALENTS, true);
CreatureTemplate const* ci = GetCreatureTemplate();
if (!ci)
@@ -1685,8 +1674,6 @@ bool Pet::resetTalents()
if (!pet_family || pet_family->petTalentType < 0)
return false;
- Player* player = owner->ToPlayer();
-
uint8 level = getLevel();
uint32 talentPointsForLevel = GetMaxTalentPointsForLevel(level);
@@ -1831,20 +1818,15 @@ void Pet::InitTalentForLevel()
SetFreeTalentPoints(talentPointsForLevel - m_usedTalentCount);
- Unit* owner = GetOwner();
- if (!owner || owner->GetTypeId() != TYPEID_PLAYER)
- return;
-
if (!m_loading)
- owner->ToPlayer()->SendTalentsInfoData(true);
+ GetOwner()->SendTalentsInfoData(true);
}
uint8 Pet::GetMaxTalentPointsForLevel(uint8 level)
{
uint8 points = (level >= 20) ? ((level - 16) / 4) : 0;
// Mod points from owner SPELL_AURA_MOD_PET_TALENT_POINTS
- if (Unit* owner = GetOwner())
- points+=owner->GetTotalAuraModifier(SPELL_AURA_MOD_PET_TALENT_POINTS);
+ points += GetOwner()->GetTotalAuraModifier(SPELL_AURA_MOD_PET_TALENT_POINTS);
return points;
}
@@ -1932,6 +1914,8 @@ bool Pet::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry, uint3
if (!InitEntry(Entry))
return false;
+ // Force regen flag for player pets, just like we do for players themselves
+ SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER);
SetSheath(SHEATH_STATE_MELEE);
return true;
@@ -1967,11 +1951,9 @@ void Pet::LearnPetPassives()
void Pet::CastPetAuras(bool current)
{
- Unit* owner = GetOwner();
- if (!owner || owner->GetTypeId() != TYPEID_PLAYER)
- return;
+ Player* owner = GetOwner();
- if (!IsPermanentPetFor(owner->ToPlayer()))
+ if (!IsPermanentPetFor(owner))
return;
for (PetAuraSet::const_iterator itr = owner->m_petAuras.begin(); itr != owner->m_petAuras.end();)
@@ -2003,10 +1985,7 @@ void Pet::CastPetAura(PetAura const* aura)
bool Pet::IsPetAura(Aura const* aura)
{
- Unit* owner = GetOwner();
-
- if (!owner || owner->GetTypeId() != TYPEID_PLAYER)
- return false;
+ Player* owner = GetOwner();
// if the owner has that pet aura, return true
for (PetAuraSet::const_iterator itr = owner->m_petAuras.begin(); itr != owner->m_petAuras.end(); ++itr)
@@ -2027,9 +2006,7 @@ void Pet::learnSpellHighRank(uint32 spellid)
void Pet::SynchronizeLevelWithOwner()
{
- Unit* owner = GetOwner();
- if (!owner || owner->GetTypeId() != TYPEID_PLAYER)
- return;
+ Player* owner = GetOwner();
switch (getPetType())
{
@@ -2079,9 +2056,7 @@ void Pet::ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs)
if (!cooldowns.empty())
{
BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, cooldowns);
-
- if (Player* owner = GetOwner())
- owner->GetSession()->SendPacket(&data);
+ GetOwner()->GetSession()->SendPacket(&data);
}
}
@@ -2097,8 +2072,6 @@ void Pet::SetDisplayId(uint32 modelId)
if (!isControlled())
return;
- if (Unit* owner = GetOwner())
- if (Player* player = owner->ToPlayer())
- if (player->GetGroup())
- player->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_MODEL_ID);
+ if (GetOwner()->GetGroup())
+ GetOwner()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_MODEL_ID);
}
diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h
index ef5e792e939..7d4523be9af 100644
--- a/src/server/game/Entities/Pet/Pet.h
+++ b/src/server/game/Entities/Pet/Pet.h
@@ -32,7 +32,7 @@ struct PetSpell
PetSpellType type;
};
-typedef UNORDERED_MAP<uint32, PetSpell> PetSpellMap;
+typedef std::unordered_map<uint32, PetSpell> PetSpellMap;
typedef std::vector<uint32> AutoSpellList;
class Player;
@@ -43,10 +43,10 @@ class Pet : public Guardian
explicit Pet(Player* owner, PetType type = MAX_PET_TYPE);
virtual ~Pet();
- void AddToWorld();
- void RemoveFromWorld();
+ void AddToWorld() override;
+ void RemoveFromWorld() override;
- void SetDisplayId(uint32 modelId);
+ void SetDisplayId(uint32 modelId) override;
PetType getPetType() const { return m_petType; }
void setPetType(PetType type) { m_petType = type; }
@@ -60,16 +60,16 @@ class Pet : public Guardian
bool CreateBaseAtCreatureInfo(CreatureTemplate const* cinfo, Unit* owner);
bool CreateBaseAtTamed(CreatureTemplate const* cinfo, Map* map, uint32 phaseMask);
bool LoadPetFromDB(Player* owner, uint32 petentry = 0, uint32 petnumber = 0, bool current = false);
- bool isBeingLoaded() const { return m_loading;}
+ bool isBeingLoaded() const override { return m_loading;}
void SavePetToDB(PetSaveMode mode);
void Remove(PetSaveMode mode, bool returnreagent = false);
static void DeleteFromDB(uint32 guidlow);
- void setDeathState(DeathState s); // overwrite virtual Creature::setDeathState and Unit::setDeathState
- void Update(uint32 diff); // overwrite virtual Creature::Update and Unit::Update
+ void setDeathState(DeathState s) override; // overwrite virtual Creature::setDeathState and Unit::setDeathState
+ void Update(uint32 diff) override; // overwrite virtual Creature::Update and Unit::Update
- uint8 GetPetAutoSpellSize() const { return m_autospells.size(); }
- uint32 GetPetAutoSpellOnPos(uint8 pos) const
+ uint8 GetPetAutoSpellSize() const override { return m_autospells.size(); }
+ uint32 GetPetAutoSpellOnPos(uint8 pos) const override
{
if (pos >= m_autospells.size())
return 0;
@@ -95,12 +95,12 @@ class Pet : public Guardian
void UpdateMaxHealth();
void UpdateMaxPower(Powers power);
void UpdateAttackPowerAndDamage(bool ranged = false);
- void UpdateDamagePhysical(WeaponAttackType attType) OVERRIDE;
+ void UpdateDamagePhysical(WeaponAttackType attType) override;
*/
void ToggleAutocast(SpellInfo const* spellInfo, bool apply);
- bool HasSpell(uint32 spell) const;
+ bool HasSpell(uint32 spell) const override;
void LearnPetPassives();
void CastPetAuras(bool current);
@@ -121,7 +121,7 @@ class Pet : public Guardian
bool unlearnSpell(uint32 spell_id, bool learn_prev, bool clear_ab = true);
bool removeSpell(uint32 spell_id, bool learn_prev, bool clear_ab = true);
void CleanupActionBar();
- virtual void ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs);
+ virtual void ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs) override;
PetSpellMap m_spells;
AutoSpellList m_autospells;
@@ -129,7 +129,7 @@ class Pet : public Guardian
void InitPetCreateSpells();
bool resetTalents();
- static void resetTalentsForAllPetsOf(Player* owner, Pet* online_pet = NULL);
+ static void resetTalentsForAllPetsOf(Player* owner, Pet* online_pet = nullptr);
void InitTalentForLevel();
uint8 GetMaxTalentPointsForLevel(uint8 level);
@@ -159,11 +159,11 @@ class Pet : public Guardian
DeclinedName *m_declinedname;
private:
- void SaveToDB(uint32, uint8, uint32) // override of Creature::SaveToDB - must not be called
+ void SaveToDB(uint32, uint8, uint32) override // override of Creature::SaveToDB - must not be called
{
ASSERT(false);
}
- void DeleteFromDB() // override of Creature::DeleteFromDB - must not be called
+ void DeleteFromDB() override // override of Creature::DeleteFromDB - must not be called
{
ASSERT(false);
}
diff --git a/src/server/game/Entities/Pet/PetDefines.h b/src/server/game/Entities/Pet/PetDefines.h
index f590bef233e..67435c30577 100644
--- a/src/server/game/Entities/Pet/PetDefines.h
+++ b/src/server/game/Entities/Pet/PetDefines.h
@@ -75,6 +75,6 @@ enum PetTalk
};
#define PET_FOLLOW_DIST 1.0f
-#define PET_FOLLOW_ANGLE (M_PI/2)
+#define PET_FOLLOW_ANGLE float(M_PI/2)
#endif
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 13635424cf0..1fc1cd9f7b8 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -26,6 +26,7 @@
#include "BattlefieldWG.h"
#include "Battleground.h"
#include "BattlegroundMgr.h"
+#include "BattlegroundScore.h"
#include "CellImpl.h"
#include "Channel.h"
#include "ChannelMgr.h"
@@ -144,6 +145,8 @@ enum CharacterCustomizeFlags
static uint32 copseReclaimDelay[MAX_DEATH_COUNT] = { 30, 60, 120 };
+uint32 const MAX_MONEY_AMOUNT = static_cast<uint32>(std::numeric_limits<int32>::max());
+
// == PlayerTaxi ================================================
PlayerTaxi::PlayerTaxi()
@@ -364,6 +367,15 @@ void TradeData::SetMoney(uint32 money)
if (m_money == money)
return;
+ if (!m_player->HasEnoughMoney(money))
+ {
+ TradeStatusInfo info;
+ info.Status = TRADE_STATUS_CLOSE_WINDOW;
+ info.Result = EQUIP_ERR_NOT_ENOUGH_MONEY;
+ m_player->GetSession()->SendTradeStatus(info);
+ return;
+ }
+
m_money = money;
SetAccepted(false);
@@ -386,10 +398,12 @@ void TradeData::SetAccepted(bool state, bool crosssend /*= false*/)
if (!state)
{
+ TradeStatusInfo info;
+ info.Status = TRADE_STATUS_BACK_TO_TRADE;
if (crosssend)
- m_trader->GetSession()->SendTradeStatus(TRADE_STATUS_BACK_TO_TRADE);
+ m_trader->GetSession()->SendTradeStatus(info);
else
- m_player->GetSession()->SendTradeStatus(TRADE_STATUS_BACK_TO_TRADE);
+ m_player->GetSession()->SendTradeStatus(info);
}
}
@@ -640,19 +654,8 @@ void KillRewarder::Reward()
instance->UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, _victim->GetEntry(), _victim);
}
-// == Player ====================================================
-
-// we can disable this warning for this since it only
-// causes undefined behavior when passed to the base class constructor
-#ifdef _MSC_VER
-#pragma warning(disable:4355)
-#endif
Player::Player(WorldSession* session): Unit(true)
{
-#ifdef _MSC_VER
-#pragma warning(default:4355)
-#endif
-
m_speakTime = 0;
m_speakCount = 0;
@@ -693,6 +696,8 @@ Player::Player(WorldSession* session): Unit(true)
m_areaUpdateId = 0;
m_team = 0;
+ m_needsZoneUpdate = false;
+
m_nextSave = sWorld->getIntConfig(CONFIG_INTERVAL_SAVE);
clearResurrectRequestData();
@@ -1134,7 +1139,8 @@ bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo)
}
// original spells
- learnDefaultSpells();
+ LearnDefaultSkills();
+ LearnCustomSpells();
// original action bar
for (PlayerCreateInfoActions::const_iterator action_itr = info->action.begin(); action_itr != info->action.end(); ++action_itr)
@@ -1629,7 +1635,7 @@ void Player::Update(uint32 p_time)
else
{
q_status.Timer -= p_time;
- m_QuestStatusSave[*iter] = true;
+ m_QuestStatusSave[*iter] = QUEST_DEFAULT_SAVE_TYPE;
++iter;
}
}
@@ -1656,7 +1662,7 @@ void Player::Update(uint32 p_time)
}
}
//120 degrees of radiant range
- else if (!HasInArc(2*M_PI/3, victim))
+ else if (!HasInArc(2 * float(M_PI) / 3, victim))
{
setAttackTimer(BASE_ATTACK, 100);
if (m_swingErrorMsg != 2) // send single time (client auto repeat)
@@ -1684,7 +1690,7 @@ void Player::Update(uint32 p_time)
{
if (!IsWithinMeleeRange(victim))
setAttackTimer(OFF_ATTACK, 100);
- else if (!HasInArc(2*M_PI/3, victim))
+ else if (!HasInArc(2 * float(M_PI) / 3, victim))
setAttackTimer(OFF_ATTACK, 100);
else
{
@@ -2132,11 +2138,9 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
{
TC_LOG_DEBUG("maps", "Player %s using client without required expansion tried teleport to non accessible map %u", GetName().c_str(), mapid);
- if (GetTransport())
+ if (Transport* transport = GetTransport())
{
- m_transport->RemovePassenger(this);
- m_transport = NULL;
- m_movementInfo.transport.Reset();
+ transport->RemovePassenger(this);
RepopAtGraveyard(); // teleport to near graveyard if on transport, looks blizz like :)
}
@@ -2154,16 +2158,12 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
SetUnitMovementFlags(GetUnitMovementFlags() & MOVEMENTFLAG_MASK_HAS_PLAYER_STATUS_OPCODE);
DisableSpline();
- if (m_transport)
+ if (Transport* transport = GetTransport())
{
if (options & TELE_TO_NOT_LEAVE_TRANSPORT)
AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
else
- {
- m_transport->RemovePassenger(this);
- m_transport = NULL;
- m_movementInfo.transport.Reset();
- }
+ transport->RemovePassenger(this);
}
// The player was ported to another map and loses the duel immediately.
@@ -2209,8 +2209,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
// near teleport, triggering send MSG_MOVE_TELEPORT_ACK from client at landing
if (!GetSession()->PlayerLogout())
{
- Position oldPos;
- GetPosition(&oldPos);
+ Position oldPos = GetPosition();
if (HasUnitMovementFlag(MOVEMENTFLAG_HOVER))
z += GetFloatValue(UNIT_FIELD_HOVERHEIGHT);
Relocate(x, y, z, orientation);
@@ -2299,8 +2298,8 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
// send transfer packets
WorldPacket data(SMSG_TRANSFER_PENDING, 4 + 4 + 4);
data << uint32(mapid);
- if (m_transport)
- data << m_transport->GetEntry() << GetMapId();
+ if (Transport* transport = GetTransport())
+ data << transport->GetEntry() << GetMapId();
GetSession()->SendPacket(&data);
}
@@ -2318,7 +2317,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
{
WorldPacket data(SMSG_NEW_WORLD, 4 + 4 + 4 + 4 + 4);
data << uint32(mapid);
- if (m_transport)
+ if (GetTransport())
data << m_movementInfo.transport.pos.PositionXYZOStream();
else
data << m_teleport_dest.PositionXYZOStream();
@@ -2587,7 +2586,7 @@ void Player::Regenerate(Powers power)
return;
addvalue += m_powerFraction[power];
- uint32 integerValue = uint32(fabs(addvalue));
+ uint32 integerValue = uint32(std::fabs(addvalue));
if (addvalue < 0.0f)
{
@@ -2928,11 +2927,10 @@ void Player::UninviteFromGroup()
void Player::RemoveFromGroup(Group* group, uint64 guid, RemoveMethod method /* = GROUP_REMOVEMETHOD_DEFAULT*/, uint64 kicker /* = 0 */, const char* reason /* = NULL */)
{
- if (group)
- {
- group->RemoveMember(guid, method, kicker, reason);
- group = NULL;
- }
+ if (!group)
+ return;
+
+ group->RemoveMember(guid, method, kicker, reason);
}
void Player::SendLogXPGain(uint32 GivenXP, Unit* victim, uint32 BonusXP, bool recruitAFriend, float /*group_rate*/)
@@ -2972,14 +2970,6 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate)
sScriptMgr->OnGivePlayerXP(this, xp, victim);
- // Favored experience increase START
- uint32 zone = GetZoneId();
- float favored_exp_mult = 0;
- if ((HasAura(32096) || HasAura(32098)) && (zone == 3483 || zone == 3562 || zone == 3836 || zone == 3713 || zone == 3714))
- favored_exp_mult = 0.05f; // Thrallmar's Favor and Honor Hold's Favor
- xp = uint32(xp * (1 + favored_exp_mult));
- // Favored experience increase END
-
// XP to money conversion processed in Player::RewardQuest
if (level >= sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
return;
@@ -3123,7 +3113,7 @@ void Player::InitTalentForLevel()
// Remove all talent points
if (m_usedTalentCount > 0) // Free any used talents
{
- resetTalents(true); /// @todo: Has to (collectively) be renamed to ResetTalents
+ ResetTalents(true); /// @todo: Has to (collectively) be renamed to ResetTalents
SetFreeTalentPoints(0);
}
}
@@ -3141,7 +3131,7 @@ void Player::InitTalentForLevel()
if (m_usedTalentCount > talentPointsForLevel)
{
if (!GetSession()->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_MORE_TALENTS_THAN_ALLOWED))
- resetTalents(true);
+ ResetTalents(true);
else
SetFreeTalentPoints(0);
}
@@ -3532,7 +3522,7 @@ bool Player::AddTalent(uint32 spellId, uint8 spec, bool learning)
return false;
}
-bool Player::addSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading /*= false*/)
+bool Player::AddSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading /*= false*/, bool fromSkill /*= false*/)
{
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!spellInfo)
@@ -3630,13 +3620,7 @@ bool Player::addSpell(uint32 spellId, bool active, bool learning, bool dependent
else if (IsInWorld())
{
if (next_active_spell_id)
- {
- // update spell ranks in spellbook and action bar
- WorldPacket data(SMSG_SUPERCEDED_SPELL, 4 + 4);
- data << uint32(spellId);
- data << uint32(next_active_spell_id);
- GetSession()->SendPacket(&data);
- }
+ SendSupercededSpell(spellId, next_active_spell_id);
else
{
WorldPacket data(SMSG_REMOVED_SPELL, 4);
@@ -3695,7 +3679,7 @@ bool Player::addSpell(uint32 spellId, bool active, bool learning, bool dependent
if (!rankSpellId || rankSpellId == spellId)
continue;
- removeSpell(rankSpellId, false, false);
+ RemoveSpell(rankSpellId, false, false);
}
}
}
@@ -3703,9 +3687,9 @@ bool Player::addSpell(uint32 spellId, bool active, bool learning, bool dependent
else if (uint32 prev_spell = sSpellMgr->GetPrevSpellInChain(spellId))
{
if (!IsInWorld() || disabled) // at spells loading, no output, but allow save
- addSpell(prev_spell, active, true, true, disabled);
+ AddSpell(prev_spell, active, true, true, disabled, false, fromSkill);
else // at normal learning
- learnSpell(prev_spell, true);
+ LearnSpell(prev_spell, true, fromSkill);
}
PlayerSpell* newspell = new PlayerSpell;
@@ -3733,12 +3717,7 @@ bool Player::addSpell(uint32 spellId, bool active, bool learning, bool dependent
if (spellInfo->IsHighRankOf(i_spellInfo))
{
if (IsInWorld()) // not send spell (re-/over-)learn packets at loading
- {
- WorldPacket data(SMSG_SUPERCEDED_SPELL, 4 + 4);
- data << uint32(itr2->first);
- data << uint32(spellId);
- GetSession()->SendPacket(&data);
- }
+ SendSupercededSpell(itr2->first, spellId);
// mark old spell as disable (SMSG_SUPERCEDED_SPELL replace it in client by new)
itr2->second->active = false;
@@ -3749,12 +3728,7 @@ bool Player::addSpell(uint32 spellId, bool active, bool learning, bool dependent
else
{
if (IsInWorld()) // not send spell (re-/over-)learn packets at loading
- {
- WorldPacket data(SMSG_SUPERCEDED_SPELL, 4 + 4);
- data << uint32(spellId);
- data << uint32(itr2->first);
- GetSession()->SendPacket(&data);
- }
+ SendSupercededSpell(spellId, itr2->first);
// mark new spell as disable (not learned yet for client and will not learned)
newspell->active = false;
@@ -3804,64 +3778,43 @@ bool Player::addSpell(uint32 spellId, bool active, bool learning, bool dependent
SetFreePrimaryProfessions(freeProfs-1);
}
- // add dependent skills
- uint16 maxskill = GetMaxSkillValueForLevel();
-
- SpellLearnSkillNode const* spellLearnSkill = sSpellMgr->GetSpellLearnSkill(spellId);
-
SkillLineAbilityMapBounds skill_bounds = sSpellMgr->GetSkillLineAbilityMapBounds(spellId);
- if (spellLearnSkill)
+ // add dependent skills if this spell is not learned from adding skill already
+ if (!fromSkill)
{
- uint32 skill_value = GetPureSkillValue(spellLearnSkill->skill);
- uint32 skill_max_value = GetPureMaxSkillValue(spellLearnSkill->skill);
+ if (SpellLearnSkillNode const* spellLearnSkill = sSpellMgr->GetSpellLearnSkill(spellId))
+ {
+ uint32 skill_value = GetPureSkillValue(spellLearnSkill->skill);
+ uint32 skill_max_value = GetPureMaxSkillValue(spellLearnSkill->skill);
- if (skill_value < spellLearnSkill->value)
- skill_value = spellLearnSkill->value;
+ if (skill_value < spellLearnSkill->value)
+ skill_value = spellLearnSkill->value;
- uint32 new_skill_max_value = spellLearnSkill->maxvalue == 0 ? maxskill : spellLearnSkill->maxvalue;
+ uint32 new_skill_max_value = spellLearnSkill->maxvalue == 0 ? GetMaxSkillValueForLevel() : spellLearnSkill->maxvalue;
- if (skill_max_value < new_skill_max_value)
- skill_max_value = new_skill_max_value;
+ if (skill_max_value < new_skill_max_value)
+ skill_max_value = new_skill_max_value;
- SetSkill(spellLearnSkill->skill, spellLearnSkill->step, skill_value, skill_max_value);
- }
- else
- {
- // not ranked skills
- for (SkillLineAbilityMap::const_iterator _spell_idx = skill_bounds.first; _spell_idx != skill_bounds.second; ++_spell_idx)
+ SetSkill(spellLearnSkill->skill, spellLearnSkill->step, skill_value, skill_max_value);
+ }
+ else
{
- SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(_spell_idx->second->skillId);
- if (!pSkill)
- continue;
-
- if (!Has310Flyer(false) && pSkill->id == SKILL_MOUNTS)
- for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
- if (spellInfo->Effects[i].ApplyAuraName == SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED &&
- spellInfo->Effects[i].CalcValue() == 310)
- SetHas310Flyer(true);
+ // not ranked skills
+ for (SkillLineAbilityMap::const_iterator _spell_idx = skill_bounds.first; _spell_idx != skill_bounds.second; ++_spell_idx)
+ {
+ SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(_spell_idx->second->skillId);
+ if (!pSkill)
+ continue;
- if (HasSkill(pSkill->id))
- continue;
+ if (_spell_idx->second->AutolearnType == SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN && !HasSkill(pSkill->id))
+ LearnDefaultSkill(pSkill->id, 0);
- if (_spell_idx->second->learnOnGetSkill == ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL ||
- // lockpicking/runeforging special case, not have ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL
- ((pSkill->id == SKILL_LOCKPICKING || pSkill->id == SKILL_RUNEFORGING) && _spell_idx->second->max_value == 0))
- {
- switch (GetSkillRangeType(pSkill, _spell_idx->second->racemask != 0))
- {
- case SKILL_RANGE_LANGUAGE:
- SetSkill(pSkill->id, GetSkillStep(pSkill->id), 300, 300);
- break;
- case SKILL_RANGE_LEVEL:
- SetSkill(pSkill->id, GetSkillStep(pSkill->id), 1, GetMaxSkillValueForLevel());
- break;
- case SKILL_RANGE_MONO:
- SetSkill(pSkill->id, GetSkillStep(pSkill->id), 1, 1);
- break;
- default:
- break;
- }
+ if (pSkill->id == SKILL_MOUNTS && !Has310Flyer(false))
+ for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ if (spellInfo->Effects[i].ApplyAuraName == SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED &&
+ spellInfo->Effects[i].CalcValue() == 310)
+ SetHas310Flyer(true);
}
}
}
@@ -3874,9 +3827,9 @@ bool Player::addSpell(uint32 spellId, bool active, bool learning, bool dependent
if (!itr2->second.autoLearned)
{
if (!IsInWorld() || !itr2->second.active) // at spells loading, no output, but allow save
- addSpell(itr2->second.spell, itr2->second.active, true, true, false);
+ AddSpell(itr2->second.spell, itr2->second.active, true, true, false);
else // at normal learning
- learnSpell(itr2->second.spell, true);
+ LearnSpell(itr2->second.spell, true);
}
}
@@ -3935,14 +3888,14 @@ bool Player::IsNeedCastPassiveSpellAtLearn(SpellInfo const* spellInfo) const
return need_cast && (!spellInfo->CasterAuraState || HasAuraState(AuraStateType(spellInfo->CasterAuraState)));
}
-void Player::learnSpell(uint32 spell_id, bool dependent)
+void Player::LearnSpell(uint32 spell_id, bool dependent, bool fromSkill /*= false*/)
{
PlayerSpellMap::iterator itr = m_spells.find(spell_id);
bool disabled = (itr != m_spells.end()) ? itr->second->disabled : false;
bool active = disabled ? itr->second->active : true;
- bool learning = addSpell(spell_id, active, true, dependent, false);
+ bool learning = AddSpell(spell_id, active, true, dependent, false, false, fromSkill);
// prevent duplicated entires in spell book, also not send if not in world (loading)
if (learning && IsInWorld())
@@ -3960,7 +3913,7 @@ void Player::learnSpell(uint32 spell_id, bool dependent)
{
PlayerSpellMap::iterator iter = m_spells.find(nextSpell);
if (iter != m_spells.end() && iter->second->disabled)
- learnSpell(nextSpell, false);
+ LearnSpell(nextSpell, false, fromSkill);
}
SpellsRequiringSpellMapBounds spellsRequiringSpell = sSpellMgr->GetSpellsRequiringSpellBounds(spell_id);
@@ -3968,12 +3921,12 @@ void Player::learnSpell(uint32 spell_id, bool dependent)
{
PlayerSpellMap::iterator iter2 = m_spells.find(itr2->second);
if (iter2 != m_spells.end() && iter2->second->disabled)
- learnSpell(itr2->second, false);
+ LearnSpell(itr2->second, false, fromSkill);
}
}
}
-void Player::removeSpell(uint32 spell_id, bool disabled, bool learn_low_rank)
+void Player::RemoveSpell(uint32 spell_id, bool disabled, bool learn_low_rank)
{
PlayerSpellMap::iterator itr = m_spells.find(spell_id);
if (itr == m_spells.end())
@@ -3986,12 +3939,12 @@ void Player::removeSpell(uint32 spell_id, bool disabled, bool learn_low_rank)
if (uint32 nextSpell = sSpellMgr->GetNextSpellInChain(spell_id))
{
if (HasSpell(nextSpell) && !GetTalentSpellPos(nextSpell))
- removeSpell(nextSpell, disabled, false);
+ RemoveSpell(nextSpell, disabled, false);
}
//unlearn spells dependent from recently removed spells
SpellsRequiringSpellMapBounds spellsRequiringSpell = sSpellMgr->GetSpellsRequiringSpellBounds(spell_id);
for (SpellsRequiringSpellMap::const_iterator itr2 = spellsRequiringSpell.first; itr2 != spellsRequiringSpell.second; ++itr2)
- removeSpell(itr2->second, disabled);
+ RemoveSpell(itr2->second, disabled);
// re-search, it can be corrupted in prev loop
itr = m_spells.find(spell_id);
@@ -4087,33 +4040,27 @@ void Player::removeSpell(uint32 spell_id, bool disabled, bool learn_low_rank)
// not ranked skills
SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(spell_id);
- for (SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx)
+ // most likely will never be used, haven't heard of cases where players unlearn a mount
+ if (Has310Flyer(false) && spellInfo)
{
- SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(_spell_idx->second->skillId);
- if (!pSkill)
- continue;
-
- if ((_spell_idx->second->learnOnGetSkill == ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL &&
- pSkill->categoryId != SKILL_CATEGORY_CLASS) ||// not unlearn class skills (spellbook/talent pages)
- // lockpicking/runeforging special case, not have ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL
- ((pSkill->id == SKILL_LOCKPICKING || pSkill->id == SKILL_RUNEFORGING) && _spell_idx->second->max_value == 0))
+ for (SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx)
{
- // not reset skills for professions and racial abilities
- if ((pSkill->categoryId == SKILL_CATEGORY_SECONDARY || pSkill->categoryId == SKILL_CATEGORY_PROFESSION) &&
- (IsProfessionSkill(pSkill->id) || _spell_idx->second->racemask != 0))
+ SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(_spell_idx->second->skillId);
+ if (!pSkill)
continue;
- SetSkill(pSkill->id, GetSkillStep(pSkill->id), 0, 0);
- }
-
- // most likely will never be used, haven't heard of cases where players unlearn a mount
- if (Has310Flyer(false) && _spell_idx->second->skillId == SKILL_MOUNTS)
- {
- if (spellInfo)
+ if (_spell_idx->second->skillId == SKILL_MOUNTS)
+ {
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ {
if (spellInfo->Effects[i].ApplyAuraName == SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED &&
spellInfo->Effects[i].CalcValue() == 310)
+ {
Has310Flyer(true, spell_id); // with true as first argument its also used to set/remove the flag
+ break;
+ }
+ }
+ }
}
}
}
@@ -4122,7 +4069,7 @@ void Player::removeSpell(uint32 spell_id, bool disabled, bool learn_low_rank)
SpellLearnSpellMapBounds spell_bounds = sSpellMgr->GetSpellLearnSpellMapBounds(spell_id);
for (SpellLearnSpellMap::const_iterator itr2 = spell_bounds.first; itr2 != spell_bounds.second; ++itr2)
- removeSpell(itr2->second.spell, disabled);
+ RemoveSpell(itr2->second.spell, disabled);
// activate lesser rank in spellbook/action bar, and cast it if need
bool prev_activate = false;
@@ -4154,13 +4101,10 @@ void Player::removeSpell(uint32 spell_id, bool disabled, bool learn_low_rank)
// now re-learn if need re-activate
if (cur_active && !prev_itr->second->active && learn_low_rank)
{
- if (addSpell(prev_id, true, false, prev_itr->second->dependent, prev_itr->second->disabled))
+ if (AddSpell(prev_id, true, false, prev_itr->second->dependent, prev_itr->second->disabled))
{
// downgrade spell ranks in spellbook and action bar
- WorldPacket data(SMSG_SUPERCEDED_SPELL, 4 + 4);
- data << uint32(spell_id);
- data << uint32(prev_id);
- GetSession()->SendPacket(&data);
+ SendSupercededSpell(spell_id, prev_id);
prev_activate = true;
}
}
@@ -4188,7 +4132,7 @@ void Player::removeSpell(uint32 spell_id, bool disabled, bool learn_low_rank)
bool Player::Has310Flyer(bool checkAllSpells, uint32 excludeSpellId)
{
if (!checkAllSpells)
- return m_ExtraFlags & PLAYER_EXTRA_HAS_310_FLYER;
+ return (m_ExtraFlags & PLAYER_EXTRA_HAS_310_FLYER) != 0;
else
{
SetHas310Flyer(false);
@@ -4369,7 +4313,7 @@ void Player::_SaveSpellCooldowns(SQLTransaction& trans)
trans->Append(ss.str().c_str());
}
-uint32 Player::resetTalentsCost() const
+uint32 Player::ResetTalentsCost() const
{
// The first time reset costs 1 gold
if (m_resetTalentsCost < 1*GOLD)
@@ -4402,7 +4346,7 @@ uint32 Player::resetTalentsCost() const
}
}
-bool Player::resetTalents(bool no_cost)
+bool Player::ResetTalents(bool no_cost)
{
sScriptMgr->OnPlayerTalentsReset(this, no_cost);
@@ -4422,7 +4366,7 @@ bool Player::resetTalents(bool no_cost)
if (!no_cost && !sWorld->getBoolConfig(CONFIG_NO_RESET_TALENT_COST))
{
- cost = resetTalentsCost();
+ cost = ResetTalentsCost();
if (!HasEnoughMoney(cost))
{
@@ -4459,11 +4403,11 @@ bool Player::resetTalents(bool no_cost)
const SpellInfo* _spellEntry = sSpellMgr->GetSpellInfo(talentInfo->RankID[rank]);
if (!_spellEntry)
continue;
- removeSpell(talentInfo->RankID[rank], true);
+ RemoveSpell(talentInfo->RankID[rank], true);
// search for spells that the talent teaches and unlearn them
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
if (_spellEntry->Effects[i].TriggerSpell > 0 && _spellEntry->Effects[i].Effect == SPELL_EFFECT_LEARN_SPELL)
- removeSpell(_spellEntry->Effects[i].TriggerSpell, true);
+ RemoveSpell(_spellEntry->Effects[i].TriggerSpell, true);
// if this talent rank can be found in the PlayerTalentMap, mark the talent as removed so it gets deleted
PlayerTalentMap::iterator plrTalent = m_talents[m_activeSpec]->find(talentInfo->RankID[rank]);
if (plrTalent != m_talents[m_activeSpec]->end())
@@ -5149,8 +5093,9 @@ void Player::ResurrectPlayer(float restore_percent, bool applySickness)
// remove death flag + set aura
SetByteValue(UNIT_FIELD_BYTES_1, 3, 0x00);
- if (getRace() == RACE_NIGHTELF)
- RemoveAurasDueToSpell(20584); // speed bonuses
+
+ // This must be called always even on Players with race != RACE_NIGHTELF in case of faction change
+ RemoveAurasDueToSpell(20584); // RACE_NIGHTELF speed bonuses
RemoveAurasDueToSpell(8326); // SPELL_AURA_GHOST
if (GetSession()->IsARecruiter() || (GetSession()->GetRecruiterId() != 0))
@@ -5941,32 +5886,33 @@ float Player::OCTRegenMPPerSpirit()
void Player::ApplyRatingMod(CombatRating cr, int32 value, bool apply)
{
+ float oldRating = m_baseRatingValue[cr];
m_baseRatingValue[cr]+=(apply ? value : -value);
-
// explicit affected values
- switch (cr)
- {
- case CR_HASTE_MELEE:
- {
- float RatingChange = value * GetRatingMultiplier(cr);
- ApplyAttackTimePercentMod(BASE_ATTACK, RatingChange, apply);
- ApplyAttackTimePercentMod(OFF_ATTACK, RatingChange, apply);
- break;
- }
- case CR_HASTE_RANGED:
- {
- float RatingChange = value * GetRatingMultiplier(cr);
- ApplyAttackTimePercentMod(RANGED_ATTACK, RatingChange, apply);
- break;
- }
- case CR_HASTE_SPELL:
- {
- float RatingChange = value * GetRatingMultiplier(cr);
- ApplyCastTimePercentMod(RatingChange, apply);
- break;
+ if (cr == CR_HASTE_MELEE || cr == CR_HASTE_RANGED || cr == CR_HASTE_SPELL)
+ {
+ float const mult = GetRatingMultiplier(cr);
+ float const oldVal = oldRating * mult;
+ float const newVal = m_baseRatingValue[cr] * mult;
+ switch (cr)
+ {
+ case CR_HASTE_MELEE:
+ ApplyAttackTimePercentMod(BASE_ATTACK, oldVal, false);
+ ApplyAttackTimePercentMod(OFF_ATTACK, oldVal, false);
+ ApplyAttackTimePercentMod(BASE_ATTACK, newVal, true);
+ ApplyAttackTimePercentMod(OFF_ATTACK, newVal, true);
+ break;
+ case CR_HASTE_RANGED:
+ ApplyAttackTimePercentMod(RANGED_ATTACK, oldVal, false);
+ ApplyAttackTimePercentMod(RANGED_ATTACK, newVal, true);
+ break;
+ case CR_HASTE_SPELL:
+ ApplyCastTimePercentMod(oldVal, false);
+ ApplyCastTimePercentMod(newVal, true);
+ break;
+ default: // shut up compiler warnings
+ break;
}
- default:
- break;
}
UpdateRating(cr);
@@ -6086,9 +6032,6 @@ bool Player::UpdateSkill(uint32 skill_id, uint32 step)
if (!skill_id)
return false;
- if (skill_id == SKILL_FIST_WEAPONS)
- skill_id = SKILL_UNARMED;
-
SkillStatusMap::iterator itr = mSkillStatus.find(skill_id);
if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED)
return false;
@@ -6103,13 +6046,14 @@ bool Player::UpdateSkill(uint32 skill_id, uint32 step)
if (value < max)
{
- uint32 new_value = value+step;
+ uint32 new_value = value + step;
if (new_value > max)
new_value = max;
SetUInt32Value(valueIndex, MAKE_SKILL_VALUE(new_value, max));
if (itr->second.uState != SKILL_NEW)
itr->second.uState = SKILL_CHANGED;
+
UpdateSkillEnchantments(skill_id, value, new_value);
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL, skill_id);
return true;
@@ -6146,7 +6090,7 @@ bool Player::UpdateCraftSkill(uint32 spellid)
if (spellEntry && spellEntry->Mechanic == MECHANIC_DISCOVERY)
{
if (uint32 discoveredSpell = GetSkillDiscoverySpell(_spell_idx->second->skillId, spellid, this))
- learnSpell(discoveredSpell, false);
+ LearnSpell(discoveredSpell, false);
}
uint32 craft_skill_gain = sWorld->getIntConfig(CONFIG_SKILL_GAIN_CRAFTING);
@@ -6249,7 +6193,7 @@ bool Player::UpdateSkillPro(uint16 SkillId, int32 Chance, uint32 step)
uint32 bsl = bonusSkillLevels[i];
if (SkillValue < bsl && new_value >= bsl)
{
- learnSkillRewardedSpells(SkillId, new_value);
+ LearnSkillRewardedSpells(SkillId, new_value);
break;
}
}
@@ -6283,9 +6227,25 @@ void Player::UpdateWeaponSkill(WeaponAttackType attType)
Item* tmpitem = GetWeaponForAttack(attType, true);
if (!tmpitem && attType == BASE_ATTACK)
+ {
+ // Keep unarmed & fist weapon skills in sync
UpdateSkill(SKILL_UNARMED, weapon_skill_gain);
+ UpdateSkill(SKILL_FIST_WEAPONS, weapon_skill_gain);
+ }
else if (tmpitem && tmpitem->GetTemplate()->SubClass != ITEM_SUBCLASS_WEAPON_FISHING_POLE)
- UpdateSkill(tmpitem->GetSkill(), weapon_skill_gain);
+ {
+ switch (tmpitem->GetTemplate()->SubClass)
+ {
+ case ITEM_SUBCLASS_WEAPON_FISHING_POLE:
+ break;
+ case ITEM_SUBCLASS_WEAPON_FIST:
+ UpdateSkill(SKILL_UNARMED, weapon_skill_gain);
+ // no break intended
+ default:
+ UpdateSkill(tmpitem->GetSkill(), weapon_skill_gain);
+ break;
+ }
+ }
UpdateAllCritPercentages();
}
@@ -6358,11 +6318,11 @@ void Player::UpdateSkillsForLevel()
continue;
uint32 pskill = itr->first;
- SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(pskill);
- if (!pSkill)
+ SkillRaceClassInfoEntry const* rcEntry = GetSkillRaceClassInfo(pskill, getRace(), getClass());
+ if (!rcEntry)
continue;
- if (GetSkillRangeType(pSkill, false) != SKILL_RANGE_LEVEL)
+ if (GetSkillRangeType(rcEntry) != SKILL_RANGE_LEVEL)
continue;
uint32 valueIndex = PLAYER_SKILL_VALUE_INDEX(itr->second.pos);
@@ -6435,12 +6395,12 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal)
if (newVal < currVal)
UpdateSkillEnchantments(id, currVal, newVal);
// update step
- SetUInt32Value(PLAYER_SKILL_VALUE_INDEX(itr->second.pos), MAKE_PAIR32(id, step));
+ SetUInt32Value(PLAYER_SKILL_INDEX(itr->second.pos), MAKE_PAIR32(id, step));
// update value
SetUInt32Value(PLAYER_SKILL_VALUE_INDEX(itr->second.pos), MAKE_SKILL_VALUE(newVal, maxVal));
if (itr->second.uState != SKILL_NEW)
itr->second.uState = SKILL_CHANGED;
- learnSkillRewardedSpells(id, newVal);
+ LearnSkillRewardedSpells(id, newVal);
// if skill value is going up, update enchantments after setting the new value
if (newVal > currVal)
UpdateSkillEnchantments(id, currVal, newVal);
@@ -6466,55 +6426,57 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal)
for (uint32 j = 0; j < sSkillLineAbilityStore.GetNumRows(); ++j)
if (SkillLineAbilityEntry const* pAbility = sSkillLineAbilityStore.LookupEntry(j))
if (pAbility->skillId == id)
- removeSpell(sSpellMgr->GetFirstSpellInChain(pAbility->spellId));
+ RemoveSpell(sSpellMgr->GetFirstSpellInChain(pAbility->spellId));
}
}
else if (newVal) //add
{
currVal = 0;
for (int i=0; i < PLAYER_MAX_SKILLS; ++i)
- if (!GetUInt32Value(PLAYER_SKILL_INDEX(i)))
{
- SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(id);
- if (!pSkill)
+ if (!GetUInt32Value(PLAYER_SKILL_INDEX(i)))
{
- TC_LOG_ERROR("entities.player.skills", "Skill not found in SkillLineStore: skill #%u", id);
- return;
- }
+ SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(id);
+ if (!pSkill)
+ {
+ TC_LOG_ERROR("entities.player.skills", "Skill not found in SkillLineStore: skill #%u", id);
+ return;
+ }
- SetUInt32Value(PLAYER_SKILL_INDEX(i), MAKE_PAIR32(id, step));
- SetUInt32Value(PLAYER_SKILL_VALUE_INDEX(i), MAKE_SKILL_VALUE(newVal, maxVal));
- UpdateSkillEnchantments(id, currVal, newVal);
- UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL, id);
- UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LEVEL, id);
+ SetUInt32Value(PLAYER_SKILL_INDEX(i), MAKE_PAIR32(id, step));
+ SetUInt32Value(PLAYER_SKILL_VALUE_INDEX(i), MAKE_SKILL_VALUE(newVal, maxVal));
+ UpdateSkillEnchantments(id, currVal, newVal);
+ UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL, id);
+ UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LEVEL, id);
- // insert new entry or update if not deleted old entry yet
- if (itr != mSkillStatus.end())
- {
- itr->second.pos = i;
- itr->second.uState = SKILL_CHANGED;
- }
- else
- mSkillStatus.insert(SkillStatusMap::value_type(id, SkillStatusData(i, SKILL_NEW)));
+ // insert new entry or update if not deleted old entry yet
+ if (itr != mSkillStatus.end())
+ {
+ itr->second.pos = i;
+ itr->second.uState = SKILL_CHANGED;
+ }
+ else
+ mSkillStatus.insert(SkillStatusMap::value_type(id, SkillStatusData(i, SKILL_NEW)));
- // apply skill bonuses
- SetUInt32Value(PLAYER_SKILL_BONUS_INDEX(i), 0);
+ // apply skill bonuses
+ SetUInt32Value(PLAYER_SKILL_BONUS_INDEX(i), 0);
- // temporary bonuses
- AuraEffectList const& mModSkill = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL);
- for (AuraEffectList::const_iterator j = mModSkill.begin(); j != mModSkill.end(); ++j)
- if ((*j)->GetMiscValue() == int32(id))
+ // temporary bonuses
+ AuraEffectList const& mModSkill = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL);
+ for (AuraEffectList::const_iterator j = mModSkill.begin(); j != mModSkill.end(); ++j)
+ if ((*j)->GetMiscValue() == int32(id))
(*j)->HandleEffect(this, AURA_EFFECT_HANDLE_SKILL, true);
- // permanent bonuses
- AuraEffectList const& mModSkillTalent = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL_TALENT);
- for (AuraEffectList::const_iterator j = mModSkillTalent.begin(); j != mModSkillTalent.end(); ++j)
- if ((*j)->GetMiscValue() == int32(id))
+ // permanent bonuses
+ AuraEffectList const& mModSkillTalent = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL_TALENT);
+ for (AuraEffectList::const_iterator j = mModSkillTalent.begin(); j != mModSkillTalent.end(); ++j)
+ if ((*j)->GetMiscValue() == int32(id))
(*j)->HandleEffect(this, AURA_EFFECT_HANDLE_SKILL, true);
- // Learn all spells for skill
- learnSkillRewardedSpells(id, newVal);
- return;
+ // Learn all spells for skill
+ LearnSkillRewardedSpells(id, newVal);
+ return;
+ }
}
}
}
@@ -6760,13 +6722,19 @@ bool Player::UpdatePosition(float x, float y, float z, float orientation, bool t
// mover->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TURNING);
//AURA_INTERRUPT_FLAG_JUMP not sure
+ // Update player zone if needed
+ if (m_needsZoneUpdate)
+ {
+ uint32 newZone, newArea;
+ GetZoneAndAreaId(newZone, newArea);
+ UpdateZone(newZone, newArea);
+ m_needsZoneUpdate = false;
+ }
+
// group update
if (GetGroup())
SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POSITION);
- if (GetTrader() && !IsWithinDistInMap(GetTrader(), INTERACTION_DISTANCE))
- GetSession()->SendCancelTrade();
-
CheckAreaExploreAndOutdoor();
return true;
@@ -7217,7 +7185,7 @@ bool Player::RewardHonor(Unit* victim, uint32 groupsize, int32 honor, bool pvpto
else
victim_guid = 0; // Don't show HK: <rank> message, only log.
- honor_f = ceil(Trinity::Honor::hk_honor_at_level_f(k_level) * (v_level - k_grey) / (k_level - k_grey));
+ honor_f = std::ceil(Trinity::Honor::hk_honor_at_level_f(k_level) * (v_level - k_grey) / (k_level - k_grey));
// count the number of playerkills in one day
ApplyModUInt32Value(PLAYER_FIELD_KILLS, 1, true);
@@ -7319,35 +7287,35 @@ void Player::SetArenaPoints(uint32 value)
AddKnownCurrency(ITEM_ARENA_POINTS_ID);
}
-void Player::ModifyHonorPoints(int32 value, SQLTransaction* trans /*=NULL*/)
+void Player::ModifyHonorPoints(int32 value, SQLTransaction trans)
{
int32 newValue = int32(GetHonorPoints()) + value;
if (newValue < 0)
newValue = 0;
SetHonorPoints(uint32(newValue));
- if (trans && !trans->null())
+ if (trans)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_HONOR_POINTS);
stmt->setUInt32(0, newValue);
stmt->setUInt32(1, GetGUIDLow());
- (*trans)->Append(stmt);
+ trans->Append(stmt);
}
}
-void Player::ModifyArenaPoints(int32 value, SQLTransaction* trans /*=NULL*/)
+void Player::ModifyArenaPoints(int32 value, SQLTransaction trans)
{
int32 newValue = int32(GetArenaPoints()) + value;
if (newValue < 0)
newValue = 0;
SetArenaPoints(uint32(newValue));
- if (trans && !trans->null())
+ if (trans)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_ARENA_POINTS);
stmt->setUInt32(0, newValue);
stmt->setUInt32(1, GetGUIDLow());
- (*trans)->Append(stmt);
+ trans->Append(stmt);
}
}
@@ -7482,10 +7450,24 @@ void Player::UpdateArea(uint32 newArea)
{
SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_SANCTUARY);
pvpInfo.IsInNoPvPArea = true;
- CombatStopWithPets();
+ if (!duel)
+ CombatStopWithPets();
}
else
RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_SANCTUARY);
+
+ uint32 const areaRestFlag = (GetTeam() == ALLIANCE) ? AREA_FLAG_REST_ZONE_ALLIANCE : AREA_FLAG_REST_ZONE_HORDE;
+ if (area && area->flags & areaRestFlag)
+ {
+ SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING);
+ SetRestType(REST_TYPE_IN_FACTION_AREA);
+ InnEnter(time(0), GetMapId(), 0, 0, 0);
+ }
+ else if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) && GetRestType() == REST_TYPE_IN_FACTION_AREA)
+ {
+ RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING);
+ SetRestType(REST_TYPE_NO);
+ }
}
void Player::UpdateZone(uint32 newZone, uint32 newArea)
@@ -7571,8 +7553,9 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea)
SetRestType(REST_TYPE_NO);
}
}
- else // Recently left a capital city
+ else if (GetRestType() != REST_TYPE_IN_FACTION_AREA) // handled in UpdateArea
{
+ // Recently left a capital city
RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING);
SetRestType(REST_TYPE_NO);
}
@@ -8207,7 +8190,12 @@ void Player::_ApplyWeaponDependentAuraDamageMod(Item* item, WeaponAttackType att
{
HandleStatModifier(unitMod, unitModType, float(aura->GetAmount()), apply);
if (unitModType == TOTAL_VALUE)
- ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS, aura->GetAmount(), apply);
+ {
+ if (aura->GetAmount() > 0)
+ ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS, aura->GetAmount(), apply);
+ else
+ ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG, aura->GetAmount(), apply);
+ }
}
}
@@ -8764,7 +8752,7 @@ void Player::SendLoot(uint64 guid, LootType loot_type)
// not check distance for GO in case owned GO (fishing bobber case, for example)
// And permit out of range GO with no owner in case fishing hole
- if (!go || (loot_type != LOOT_FISHINGHOLE && (loot_type != LOOT_FISHING || go->GetOwnerGUID() != GetGUID()) && !go->IsWithinDistInMap(this, INTERACTION_DISTANCE)) || (loot_type == LOOT_CORPSE && go->GetRespawnTime() && go->isSpawnedByDefault()))
+ if (!go || (loot_type != LOOT_FISHINGHOLE && ((loot_type != LOOT_FISHING && loot_type != LOOT_FISHING_JUNK) || go->GetOwnerGUID() != GetGUID()) && !go->IsWithinDistInMap(this, INTERACTION_DISTANCE)) || (loot_type == LOOT_CORPSE && go->GetRespawnTime() && go->isSpawnedByDefault()))
{
SendLootRelease(guid);
return;
@@ -8802,6 +8790,8 @@ void Player::SendLoot(uint64 guid, LootType loot_type)
if (loot_type == LOOT_FISHING)
go->getFishLoot(loot, this);
+ else if (loot_type == LOOT_FISHING_JUNK)
+ go->getFishLootJunk(loot, this);
if (go->GetGOInfo()->type == GAMEOBJECT_TYPE_CHEST && go->GetGOInfo()->chest.groupLootRules)
{
@@ -8919,7 +8909,7 @@ void Player::SendLoot(uint64 guid, LootType loot_type)
loot->FillLoot(1, LootTemplates_Creature, this, true);
// It may need a better formula
// Now it works like this: lvl10: ~6copper, lvl70: ~9silver
- bones->loot.gold = uint32(urand(50, 150) * 0.016f * pow(float(pLevel)/5.76f, 2.5f) * sWorld->getRate(RATE_DROP_MONEY));
+ bones->loot.gold = uint32(urand(50, 150) * 0.016f * std::pow(float(pLevel) / 5.76f, 2.5f) * sWorld->getRate(RATE_DROP_MONEY));
}
if (bones->lootRecipient != this)
@@ -8948,20 +8938,29 @@ void Player::SendLoot(uint64 guid, LootType loot_type)
if (loot_type == LOOT_PICKPOCKETING)
{
- if (!creature->lootForPickPocketed)
+ if (loot->loot_type != LOOT_PICKPOCKETING)
{
- creature->lootForPickPocketed = true;
- loot->clear();
+ if (creature->CanGeneratePickPocketLoot())
+ {
+ creature->StartPickPocketRefillTimer();
+ loot->clear();
- if (uint32 lootid = creature->GetCreatureTemplate()->pickpocketLootId)
- loot->FillLoot(lootid, LootTemplates_Pickpocketing, this, true);
+ if (uint32 lootid = creature->GetCreatureTemplate()->pickpocketLootId)
+ loot->FillLoot(lootid, LootTemplates_Pickpocketing, this, true);
- // Generate extra money for pick pocket loot
- const uint32 a = urand(0, creature->getLevel()/2);
- const uint32 b = urand(0, getLevel()/2);
- loot->gold = uint32(10 * (a + b) * sWorld->getRate(RATE_DROP_MONEY));
- permission = OWNER_PERMISSION;
- }
+ // Generate extra money for pick pocket loot
+ const uint32 a = urand(0, creature->getLevel() / 2);
+ const uint32 b = urand(0, getLevel() / 2);
+ loot->gold = uint32(10 * (a + b) * sWorld->getRate(RATE_DROP_MONEY));
+ permission = OWNER_PERMISSION;
+ }
+ else
+ {
+ permission = NONE_PERMISSION;
+ SendLootError(guid, LOOT_ERROR_ALREADY_PICKPOCKETED);
+ return;
+ }
+ } // else - still has pickpocket loot generated & not fully taken
}
else
{
@@ -8970,12 +8969,9 @@ void Player::SendLoot(uint64 guid, LootType loot_type)
if (!recipient)
return;
- if (!creature->lootForBody)
+ if (loot->loot_type == LOOT_NONE)
{
- creature->lootForBody = true;
-
// for creature, loot is filled when creature is killed.
-
if (Group* group = recipient->GetGroup())
{
switch (group->GetLootMethod())
@@ -8996,11 +8992,17 @@ void Player::SendLoot(uint64 guid, LootType loot_type)
}
}
- // possible only if creature->lootForBody && loot->empty() at spell cast check
- if (loot_type == LOOT_SKINNING)
+ // if loot is already skinning loot then don't do anything else
+ if (loot->loot_type == LOOT_SKINNING)
+ {
+ loot_type = LOOT_SKINNING;
+ permission = creature->GetSkinner() == GetGUID() ? OWNER_PERMISSION : NONE_PERMISSION;
+ }
+ else if (loot_type == LOOT_SKINNING)
{
loot->clear();
loot->FillLoot(creature->GetCreatureTemplate()->SkinLootId, LootTemplates_Skinning, this, true);
+ creature->SetSkinner(GetGUID());
permission = OWNER_PERMISSION;
}
// set group rights only for loot_type != LOOT_SKINNING
@@ -9037,34 +9039,47 @@ void Player::SendLoot(uint64 guid, LootType loot_type)
}
}
- SetLootGUID(guid);
-
// LOOT_INSIGNIA and LOOT_FISHINGHOLE unsupported by client
switch (loot_type)
{
case LOOT_INSIGNIA: loot_type = LOOT_SKINNING; break;
case LOOT_FISHINGHOLE: loot_type = LOOT_FISHING; break;
+ case LOOT_FISHING_JUNK: loot_type = LOOT_FISHING; break;
default: break;
}
// need know merged fishing/corpse loot type for achievements
loot->loot_type = loot_type;
- WorldPacket data(SMSG_LOOT_RESPONSE, (9+50)); // we guess size
- data << uint64(guid);
- data << uint8(loot_type);
- data << LootView(*loot, this, permission);
+ if (permission != NONE_PERMISSION)
+ {
+ SetLootGUID(guid);
- SendDirectMessage(&data);
+ WorldPacket data(SMSG_LOOT_RESPONSE, (9 + 50)); // we guess size
+ data << uint64(guid);
+ data << uint8(loot_type);
+ data << LootView(*loot, this, permission);
+ SendDirectMessage(&data);
- // add 'this' player as one of the players that are looting 'loot'
- if (permission != NONE_PERMISSION)
+ // add 'this' player as one of the players that are looting 'loot'
loot->AddLooter(GetGUID());
+ }
+ else
+ SendLootError(GetLootGUID(), LOOT_ERROR_DIDNT_KILL);
if (loot_type == LOOT_CORPSE && !IS_ITEM_GUID(guid))
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_LOOTING);
}
+void Player::SendLootError(uint64 guid, LootError error)
+{
+ WorldPacket data(SMSG_LOOT_RESPONSE, 10);
+ data << uint64(guid);
+ data << uint8(LOOT_NONE);
+ data << uint8(error);
+ SendDirectMessage(&data);
+}
+
void Player::SendNotifyLootMoneyRemoved()
{
WorldPacket data(SMSG_LOOT_CLEAR_MONEY, 0);
@@ -9759,7 +9774,7 @@ void Player::SendTalentWipeConfirm(uint64 guid)
{
WorldPacket data(MSG_TALENT_WIPE_CONFIRM, (8+4));
data << uint64(guid);
- uint32 cost = sWorld->getBoolConfig(CONFIG_NO_RESET_TALENT_COST) ? 0 : resetTalentsCost();
+ uint32 cost = sWorld->getBoolConfig(CONFIG_NO_RESET_TALENT_COST) ? 0 : ResetTalentsCost();
data << cost;
GetSession()->SendPacket(&data);
}
@@ -10514,7 +10529,7 @@ bool Player::HasItemOrGemWithLimitCategoryEquipped(uint32 limitCategory, uint32
return false;
}
-InventoryResult Player::CanTakeMoreSimilarItems(uint32 entry, uint32 count, Item* pItem, uint32* no_space_count) const
+InventoryResult Player::CanTakeMoreSimilarItems(uint32 entry, uint32 count, Item* pItem, uint32* no_space_count /*= NULL*/, uint32* itemLimitCategory /*= NULL*/) const
{
ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(entry);
if (!pProto)
@@ -10560,6 +10575,8 @@ InventoryResult Player::CanTakeMoreSimilarItems(uint32 entry, uint32 count, Item
{
if (no_space_count)
*no_space_count = count + curcount - limitEntry->maxCount;
+ if (itemLimitCategory)
+ *itemLimitCategory = pProto->ItemLimitCategory;
return EQUIP_ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED;
}
}
@@ -11239,79 +11256,79 @@ InventoryResult Player::CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &des
}
//////////////////////////////////////////////////////////////////////////
-InventoryResult Player::CanStoreItems(Item** pItems, int count) const
+InventoryResult Player::CanStoreItems(Item** items, int count, uint32* itemLimitCategory) const
{
- Item* pItem2;
+ Item* item2;
// fill space table
- int inv_slot_items[INVENTORY_SLOT_ITEM_END - INVENTORY_SLOT_ITEM_START];
- int inv_bags[INVENTORY_SLOT_BAG_END - INVENTORY_SLOT_BAG_START][MAX_BAG_SIZE];
- int inv_keys[KEYRING_SLOT_END - KEYRING_SLOT_START];
- int inv_tokens[CURRENCYTOKEN_SLOT_END - CURRENCYTOKEN_SLOT_START];
+ uint32 inventoryCounts[INVENTORY_SLOT_ITEM_END - INVENTORY_SLOT_ITEM_START];
+ uint32 bagCounts[INVENTORY_SLOT_BAG_END - INVENTORY_SLOT_BAG_START][MAX_BAG_SIZE];
+ uint32 keyringCounts[KEYRING_SLOT_END - KEYRING_SLOT_START];
+ uint32 currencyCounts[CURRENCYTOKEN_SLOT_END - CURRENCYTOKEN_SLOT_START];
- memset(inv_slot_items, 0, sizeof(int) * (INVENTORY_SLOT_ITEM_END - INVENTORY_SLOT_ITEM_START));
- memset(inv_bags, 0, sizeof(int) * (INVENTORY_SLOT_BAG_END - INVENTORY_SLOT_BAG_START) * MAX_BAG_SIZE);
- memset(inv_keys, 0, sizeof(int) * (KEYRING_SLOT_END - KEYRING_SLOT_START));
- memset(inv_tokens, 0, sizeof(int) * (CURRENCYTOKEN_SLOT_END - CURRENCYTOKEN_SLOT_START));
+ memset(inventoryCounts, 0, sizeof(uint32) * (INVENTORY_SLOT_ITEM_END - INVENTORY_SLOT_ITEM_START));
+ memset(bagCounts, 0, sizeof(uint32) * (INVENTORY_SLOT_BAG_END - INVENTORY_SLOT_BAG_START) * MAX_BAG_SIZE);
+ memset(keyringCounts, 0, sizeof(uint32) * (KEYRING_SLOT_END - KEYRING_SLOT_START));
+ memset(currencyCounts, 0, sizeof(uint32) * (CURRENCYTOKEN_SLOT_END - CURRENCYTOKEN_SLOT_START));
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < INVENTORY_SLOT_ITEM_END; i++)
{
- pItem2 = GetItemByPos(INVENTORY_SLOT_BAG_0, i);
- if (pItem2 && !pItem2->IsInTrade())
- inv_slot_items[i - INVENTORY_SLOT_ITEM_START] = pItem2->GetCount();
+ item2 = GetItemByPos(INVENTORY_SLOT_BAG_0, i);
+ if (item2 && !item2->IsInTrade())
+ inventoryCounts[i - INVENTORY_SLOT_ITEM_START] = item2->GetCount();
}
for (uint8 i = KEYRING_SLOT_START; i < KEYRING_SLOT_END; i++)
{
- pItem2 = GetItemByPos(INVENTORY_SLOT_BAG_0, i);
- if (pItem2 && !pItem2->IsInTrade())
- inv_keys[i - KEYRING_SLOT_START] = pItem2->GetCount();
+ item2 = GetItemByPos(INVENTORY_SLOT_BAG_0, i);
+ if (item2 && !item2->IsInTrade())
+ keyringCounts[i - KEYRING_SLOT_START] = item2->GetCount();
}
for (uint8 i = CURRENCYTOKEN_SLOT_START; i < CURRENCYTOKEN_SLOT_END; i++)
{
- pItem2 = GetItemByPos(INVENTORY_SLOT_BAG_0, i);
- if (pItem2 && !pItem2->IsInTrade())
- inv_tokens[i - CURRENCYTOKEN_SLOT_START] = pItem2->GetCount();
+ item2 = GetItemByPos(INVENTORY_SLOT_BAG_0, i);
+ if (item2 && !item2->IsInTrade())
+ currencyCounts[i - CURRENCYTOKEN_SLOT_START] = item2->GetCount();
}
for (uint8 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++)
if (Bag* pBag = GetBagByPos(i))
for (uint32 j = 0; j < pBag->GetBagSize(); j++)
{
- pItem2 = GetItemByPos(i, j);
- if (pItem2 && !pItem2->IsInTrade())
- inv_bags[i - INVENTORY_SLOT_BAG_START][j] = pItem2->GetCount();
+ item2 = GetItemByPos(i, j);
+ if (item2 && !item2->IsInTrade())
+ bagCounts[i - INVENTORY_SLOT_BAG_START][j] = item2->GetCount();
}
// check free space for all items
for (int k = 0; k < count; ++k)
{
- Item* pItem = pItems[k];
+ Item* item = items[k];
// no item
- if (!pItem)
+ if (!item)
continue;
- TC_LOG_DEBUG("entities.player.items", "STORAGE: CanStoreItems %i. item = %u, count = %u", k + 1, pItem->GetEntry(), pItem->GetCount());
- ItemTemplate const* pProto = pItem->GetTemplate();
+ TC_LOG_DEBUG("entities.player.items", "STORAGE: CanStoreItems %i. item = %u, count = %u", k + 1, item->GetEntry(), item->GetCount());
+ ItemTemplate const* pProto = item->GetTemplate();
// strange item
if (!pProto)
return EQUIP_ERR_ITEM_NOT_FOUND;
// item used
- if (pItem->m_lootGenerated)
+ if (item->m_lootGenerated)
return EQUIP_ERR_ALREADY_LOOTED;
// item it 'bind'
- if (pItem->IsBindedNotWith(this))
+ if (item->IsBindedNotWith(this))
return EQUIP_ERR_DONT_OWN_THAT_ITEM;
ItemTemplate const* pBagProto;
// item is 'one item only'
- InventoryResult res = CanTakeMoreSimilarItems(pItem);
+ InventoryResult res = CanTakeMoreSimilarItems(item, itemLimitCategory);
if (res != EQUIP_ERR_OK)
return res;
@@ -11322,10 +11339,10 @@ InventoryResult Player::CanStoreItems(Item** pItems, int count) const
for (uint8 t = KEYRING_SLOT_START; t < KEYRING_SLOT_END; ++t)
{
- pItem2 = GetItemByPos(INVENTORY_SLOT_BAG_0, t);
- if (pItem2 && pItem2->CanBeMergedPartlyWith(pProto) == EQUIP_ERR_OK && inv_keys[t-KEYRING_SLOT_START] + pItem->GetCount() <= pProto->GetMaxStackSize())
+ item2 = GetItemByPos(INVENTORY_SLOT_BAG_0, t);
+ if (item2 && item2->CanBeMergedPartlyWith(pProto) == EQUIP_ERR_OK && keyringCounts[t-KEYRING_SLOT_START] + item->GetCount() <= pProto->GetMaxStackSize())
{
- inv_keys[t-KEYRING_SLOT_START] += pItem->GetCount();
+ keyringCounts[t-KEYRING_SLOT_START] += item->GetCount();
b_found = true;
break;
}
@@ -11335,10 +11352,10 @@ InventoryResult Player::CanStoreItems(Item** pItems, int count) const
for (int t = CURRENCYTOKEN_SLOT_START; t < CURRENCYTOKEN_SLOT_END; ++t)
{
- pItem2 = GetItemByPos(INVENTORY_SLOT_BAG_0, t);
- if (pItem2 && pItem2->CanBeMergedPartlyWith(pProto) == EQUIP_ERR_OK && inv_tokens[t-CURRENCYTOKEN_SLOT_START] + pItem->GetCount() <= pProto->GetMaxStackSize())
+ item2 = GetItemByPos(INVENTORY_SLOT_BAG_0, t);
+ if (item2 && item2->CanBeMergedPartlyWith(pProto) == EQUIP_ERR_OK && currencyCounts[t-CURRENCYTOKEN_SLOT_START] + item->GetCount() <= pProto->GetMaxStackSize())
{
- inv_tokens[t-CURRENCYTOKEN_SLOT_START] += pItem->GetCount();
+ currencyCounts[t-CURRENCYTOKEN_SLOT_START] += item->GetCount();
b_found = true;
break;
}
@@ -11348,10 +11365,10 @@ InventoryResult Player::CanStoreItems(Item** pItems, int count) const
for (int t = INVENTORY_SLOT_ITEM_START; t < INVENTORY_SLOT_ITEM_END; ++t)
{
- pItem2 = GetItemByPos(INVENTORY_SLOT_BAG_0, t);
- if (pItem2 && pItem2->CanBeMergedPartlyWith(pProto) == EQUIP_ERR_OK && inv_slot_items[t-INVENTORY_SLOT_ITEM_START] + pItem->GetCount() <= pProto->GetMaxStackSize())
+ item2 = GetItemByPos(INVENTORY_SLOT_BAG_0, t);
+ if (item2 && item2->CanBeMergedPartlyWith(pProto) == EQUIP_ERR_OK && inventoryCounts[t-INVENTORY_SLOT_ITEM_START] + item->GetCount() <= pProto->GetMaxStackSize())
{
- inv_slot_items[t-INVENTORY_SLOT_ITEM_START] += pItem->GetCount();
+ inventoryCounts[t-INVENTORY_SLOT_ITEM_START] += item->GetCount();
b_found = true;
break;
}
@@ -11363,14 +11380,14 @@ InventoryResult Player::CanStoreItems(Item** pItems, int count) const
{
if (Bag* bag = GetBagByPos(t))
{
- if (ItemCanGoIntoBag(pItem->GetTemplate(), bag->GetTemplate()))
+ if (ItemCanGoIntoBag(item->GetTemplate(), bag->GetTemplate()))
{
for (uint32 j = 0; j < bag->GetBagSize(); j++)
{
- pItem2 = GetItemByPos(t, j);
- if (pItem2 && pItem2->CanBeMergedPartlyWith(pProto) == EQUIP_ERR_OK && inv_bags[t-INVENTORY_SLOT_BAG_START][j] + pItem->GetCount() <= pProto->GetMaxStackSize())
+ item2 = GetItemByPos(t, j);
+ if (item2 && item2->CanBeMergedPartlyWith(pProto) == EQUIP_ERR_OK && bagCounts[t-INVENTORY_SLOT_BAG_START][j] + item->GetCount() <= pProto->GetMaxStackSize())
{
- inv_bags[t-INVENTORY_SLOT_BAG_START][j] += pItem->GetCount();
+ bagCounts[t-INVENTORY_SLOT_BAG_START][j] += item->GetCount();
b_found = true;
break;
}
@@ -11391,9 +11408,9 @@ InventoryResult Player::CanStoreItems(Item** pItems, int count) const
uint32 keyringSize = GetMaxKeyringSize();
for (uint32 t = KEYRING_SLOT_START; t < KEYRING_SLOT_START+keyringSize; ++t)
{
- if (inv_keys[t-KEYRING_SLOT_START] == 0)
+ if (keyringCounts[t-KEYRING_SLOT_START] == 0)
{
- inv_keys[t-KEYRING_SLOT_START] = 1;
+ keyringCounts[t-KEYRING_SLOT_START] = 1;
b_found = true;
break;
}
@@ -11407,9 +11424,9 @@ InventoryResult Player::CanStoreItems(Item** pItems, int count) const
{
for (uint32 t = CURRENCYTOKEN_SLOT_START; t < CURRENCYTOKEN_SLOT_END; ++t)
{
- if (inv_tokens[t-CURRENCYTOKEN_SLOT_START] == 0)
+ if (currencyCounts[t-CURRENCYTOKEN_SLOT_START] == 0)
{
- inv_tokens[t-CURRENCYTOKEN_SLOT_START] = 1;
+ currencyCounts[t-CURRENCYTOKEN_SLOT_START] = 1;
b_found = true;
break;
}
@@ -11431,9 +11448,9 @@ InventoryResult Player::CanStoreItems(Item** pItems, int count) const
{
for (uint32 j = 0; j < bag->GetBagSize(); j++)
{
- if (inv_bags[t-INVENTORY_SLOT_BAG_START][j] == 0)
+ if (bagCounts[t-INVENTORY_SLOT_BAG_START][j] == 0)
{
- inv_bags[t-INVENTORY_SLOT_BAG_START][j] = 1;
+ bagCounts[t-INVENTORY_SLOT_BAG_START][j] = 1;
b_found = true;
break;
}
@@ -11449,9 +11466,9 @@ InventoryResult Player::CanStoreItems(Item** pItems, int count) const
bool b_found = false;
for (int t = INVENTORY_SLOT_ITEM_START; t < INVENTORY_SLOT_ITEM_END; ++t)
{
- if (inv_slot_items[t-INVENTORY_SLOT_ITEM_START] == 0)
+ if (inventoryCounts[t-INVENTORY_SLOT_ITEM_START] == 0)
{
- inv_slot_items[t-INVENTORY_SLOT_ITEM_START] = 1;
+ inventoryCounts[t-INVENTORY_SLOT_ITEM_START] = 1;
b_found = true;
break;
}
@@ -11472,9 +11489,9 @@ InventoryResult Player::CanStoreItems(Item** pItems, int count) const
for (uint32 j = 0; j < bag->GetBagSize(); j++)
{
- if (inv_bags[t-INVENTORY_SLOT_BAG_START][j] == 0)
+ if (bagCounts[t-INVENTORY_SLOT_BAG_START][j] == 0)
{
- inv_bags[t-INVENTORY_SLOT_BAG_START][j] = 1;
+ bagCounts[t-INVENTORY_SLOT_BAG_START][j] = 1;
b_found = true;
break;
}
@@ -11484,7 +11501,7 @@ InventoryResult Player::CanStoreItems(Item** pItems, int count) const
// no free slot found?
if (!b_found)
- return EQUIP_ERR_INVENTORY_FULL;
+ return EQUIP_ERR_BAG_FULL;
}
return EQUIP_ERR_OK;
@@ -11959,39 +11976,42 @@ InventoryResult Player::CanUseItem(ItemTemplate const* proto) const
{
// Used by group, function NeedBeforeGreed, to know if a prototype can be used by a player
- if (proto)
- {
- if ((proto->Flags2 & ITEM_FLAGS_EXTRA_HORDE_ONLY) && GetTeam() != HORDE)
- return EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM;
+ if (!proto)
+ return EQUIP_ERR_ITEM_NOT_FOUND;
- if ((proto->Flags2 & ITEM_FLAGS_EXTRA_ALLIANCE_ONLY) && GetTeam() != ALLIANCE)
- return EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM;
+ if ((proto->Flags2 & ITEM_FLAGS_EXTRA_HORDE_ONLY) && GetTeam() != HORDE)
+ return EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM;
- if ((proto->AllowableClass & getClassMask()) == 0 || (proto->AllowableRace & getRaceMask()) == 0)
- return EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM;
+ if ((proto->Flags2 & ITEM_FLAGS_EXTRA_ALLIANCE_ONLY) && GetTeam() != ALLIANCE)
+ return EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM;
- if (proto->RequiredSkill != 0)
- {
- if (GetSkillValue(proto->RequiredSkill) == 0)
- return EQUIP_ERR_NO_REQUIRED_PROFICIENCY;
- else if (GetSkillValue(proto->RequiredSkill) < proto->RequiredSkillRank)
- return EQUIP_ERR_CANT_EQUIP_SKILL;
- }
+ if ((proto->AllowableClass & getClassMask()) == 0 || (proto->AllowableRace & getRaceMask()) == 0)
+ return EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM;
- if (proto->RequiredSpell != 0 && !HasSpell(proto->RequiredSpell))
+ if (proto->RequiredSkill != 0)
+ {
+ if (GetSkillValue(proto->RequiredSkill) == 0)
return EQUIP_ERR_NO_REQUIRED_PROFICIENCY;
+ else if (GetSkillValue(proto->RequiredSkill) < proto->RequiredSkillRank)
+ return EQUIP_ERR_CANT_EQUIP_SKILL;
+ }
+
+ if (proto->RequiredSpell != 0 && !HasSpell(proto->RequiredSpell))
+ return EQUIP_ERR_NO_REQUIRED_PROFICIENCY;
- if (getLevel() < proto->RequiredLevel)
- return EQUIP_ERR_CANT_EQUIP_LEVEL_I;
+ if (getLevel() < proto->RequiredLevel)
+ return EQUIP_ERR_CANT_EQUIP_LEVEL_I;
- // If World Event is not active, prevent using event dependant items
- if (proto->HolidayId && !IsHolidayActive((HolidayIds)proto->HolidayId))
- return EQUIP_ERR_CANT_DO_RIGHT_NOW;
+ // If World Event is not active, prevent using event dependant items
+ if (proto->HolidayId && !IsHolidayActive((HolidayIds)proto->HolidayId))
+ return EQUIP_ERR_CANT_DO_RIGHT_NOW;
- return EQUIP_ERR_OK;
- }
+ // learning (recipes, mounts, pets, etc.)
+ if (proto->Spells[0].SpellId == 483 || proto->Spells[0].SpellId == 55884)
+ if (HasSpell(proto->Spells[1].SpellId))
+ return EQUIP_ERR_NONE;
- return EQUIP_ERR_ITEM_NOT_FOUND;
+ return EQUIP_ERR_OK;
}
InventoryResult Player::CanRollForItemInLFG(ItemTemplate const* proto, WorldObject const* lootedObject) const
@@ -13159,13 +13179,6 @@ void Player::SwapItem(uint16 src, uint16 dst)
// SRC checks
- if (pSrcItem->m_lootGenerated) // prevent swap looting item
- {
- //best error message found for attempting to swap while looting
- SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW, pSrcItem, NULL);
- return;
- }
-
// check unequip potability for equipped items and bank bags
if (IsEquipmentPos(src) || IsBagPos(src))
{
@@ -13196,13 +13209,6 @@ void Player::SwapItem(uint16 src, uint16 dst)
if (pDstItem)
{
- if (pDstItem->m_lootGenerated) // prevent swap looting item
- {
- //best error message found for attempting to swap while looting
- SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW, pDstItem, NULL);
- return;
- }
-
// check unequip potability for equipped items and bank bags
if (IsEquipmentPos(dst) || IsBagPos(dst))
{
@@ -13507,7 +13513,7 @@ void Player::AddItemToBuyBackSlot(Item* pItem)
// found empty
if (!m_items[i])
{
- slot = i;
+ oldest_slot = i;
break;
}
@@ -14441,17 +14447,35 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool
if (canTalk)
{
- std::string strOptionText = itr->second.OptionText;
- std::string strBoxText = itr->second.BoxText;
+ std::string strOptionText, strBoxText;
+ BroadcastText const* optionBroadcastText = sObjectMgr->GetBroadcastText(itr->second.OptionBroadcastTextId);
+ BroadcastText const* boxBroadcastText = sObjectMgr->GetBroadcastText(itr->second.BoxBroadcastTextId);
+ LocaleConstant locale = GetSession()->GetSessionDbLocaleIndex();
+
+ if (optionBroadcastText)
+ strOptionText = optionBroadcastText->GetText(locale, getGender());
+ else
+ strOptionText = itr->second.OptionText;
- int32 locale = GetSession()->GetSessionDbLocaleIndex();
- if (locale >= 0)
+ if (boxBroadcastText)
+ strBoxText = boxBroadcastText->GetText(locale, getGender());
+ else
+ strBoxText = itr->second.BoxText;
+
+ if (locale != DEFAULT_LOCALE)
{
- uint32 idxEntry = MAKE_PAIR32(menuId, itr->second.OptionIndex);
- if (GossipMenuItemsLocale const* no = sObjectMgr->GetGossipMenuItemsLocale(idxEntry))
+ if (!optionBroadcastText)
{
- ObjectMgr::GetLocaleString(no->OptionText, locale, strOptionText);
- ObjectMgr::GetLocaleString(no->BoxText, locale, strBoxText);
+ /// Find localizations from database.
+ if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuId)))
+ ObjectMgr::GetLocaleString(gossipMenuLocale->OptionText, locale, strOptionText);
+ }
+
+ if (!boxBroadcastText)
+ {
+ /// Find localizations from database.
+ if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuId)))
+ ObjectMgr::GetLocaleString(gossipMenuLocale->BoxText, locale, strBoxText);
}
}
@@ -15185,7 +15209,7 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)
SetQuestSlot(log_slot, quest_id, qtime);
- m_QuestStatusSave[quest_id] = true;
+ m_QuestStatusSave[quest_id] = QUEST_DEFAULT_SAVE_TYPE;
StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_QUEST, quest_id);
@@ -15357,7 +15381,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
RemoveActiveQuest(quest_id, false);
m_RewardedQuests.insert(quest_id);
- m_RewardedQuestsSave[quest_id] = true;
+ m_RewardedQuestsSave[quest_id] = QUEST_DEFAULT_SAVE_TYPE;
// StoreNewItem, mail reward, etc. save data directly to the database
// to prevent exploitable data desynchronisation we save the quest status to the database too
@@ -16005,11 +16029,13 @@ void Player::SetQuestStatus(uint32 questId, QuestStatus status, bool update /*=
if (sObjectMgr->GetQuestTemplate(questId))
{
m_QuestStatus[questId].Status = status;
- m_QuestStatusSave[questId] = true;
+ m_QuestStatusSave[questId] = QUEST_DEFAULT_SAVE_TYPE;
}
if (update)
SendQuestUpdate(questId);
+
+ sScriptMgr->OnQuestStatusChange(this, questId, status);
}
void Player::RemoveActiveQuest(uint32 questId, bool update /*= true*/)
@@ -16018,7 +16044,7 @@ void Player::RemoveActiveQuest(uint32 questId, bool update /*= true*/)
if (itr != m_QuestStatus.end())
{
m_QuestStatus.erase(itr);
- m_QuestStatusSave[questId] = false;
+ m_QuestStatusSave[questId] = QUEST_DELETE_SAVE_TYPE;
}
if (update)
@@ -16031,7 +16057,7 @@ void Player::RemoveRewardedQuest(uint32 questId, bool update /*= true*/)
if (rewItr != m_RewardedQuests.end())
{
m_RewardedQuests.erase(rewItr);
- m_RewardedQuestsSave[questId] = false;
+ m_RewardedQuestsSave[questId] = QUEST_FORCE_DELETE_SAVE_TYPE;
}
if (update)
@@ -16197,7 +16223,7 @@ void Player::AdjustQuestReqItemCount(Quest const* quest, QuestStatusData& questS
uint32 curitemcount = GetItemCount(quest->RequiredItemId[i], true);
questStatusData.ItemCount[i] = std::min(curitemcount, reqitemcount);
- m_QuestStatusSave[quest->GetQuestId()] = true;
+ m_QuestStatusSave[quest->GetQuestId()] = QUEST_DEFAULT_SAVE_TYPE;
}
}
}
@@ -16288,7 +16314,7 @@ void Player::AreaExploredOrEventHappens(uint32 questId)
if (!q_status.Explored)
{
q_status.Explored = true;
- m_QuestStatusSave[questId] = true;
+ m_QuestStatusSave[questId] = QUEST_DEFAULT_SAVE_TYPE;
}
}
if (CanCompleteQuest(questId))
@@ -16340,12 +16366,8 @@ void Player::ItemAddedQuestCheck(uint32 entry, uint32 count)
uint16 curitemcount = q_status.ItemCount[j];
if (curitemcount < reqitemcount)
{
- uint16 additemcount = curitemcount + count <= reqitemcount ? count : reqitemcount - curitemcount;
- q_status.ItemCount[j] += additemcount;
-
- m_QuestStatusSave[questid] = true;
-
- SendQuestUpdateAddItem(qInfo, j, additemcount);
+ q_status.ItemCount[j] = std::min<uint16>(q_status.ItemCount[j] + count, reqitemcount);
+ m_QuestStatusSave[questid] = QUEST_DEFAULT_SAVE_TYPE;
}
if (CanCompleteQuest(questid))
CompleteQuest(questid);
@@ -16363,9 +16385,11 @@ void Player::ItemRemovedQuestCheck(uint32 entry, uint32 count)
uint32 questid = GetQuestSlotQuestId(i);
if (!questid)
continue;
+
Quest const* qInfo = sObjectMgr->GetQuestTemplate(questid);
if (!qInfo)
continue;
+
if (!qInfo->HasSpecialFlag(QUEST_SPECIAL_FLAGS_DELIVER))
continue;
@@ -16377,18 +16401,17 @@ void Player::ItemRemovedQuestCheck(uint32 entry, uint32 count)
QuestStatusData& q_status = m_QuestStatus[questid];
uint32 reqitemcount = qInfo->RequiredItemCount[j];
- uint16 curitemcount;
- if (q_status.Status != QUEST_STATUS_COMPLETE)
- curitemcount = q_status.ItemCount[j];
- else
- curitemcount = GetItemCount(entry, true);
- if (curitemcount < reqitemcount + count)
- {
- uint16 remitemcount = curitemcount <= reqitemcount ? count : count + reqitemcount - curitemcount;
- q_status.ItemCount[j] = (curitemcount <= remitemcount) ? 0 : curitemcount - remitemcount;
+ uint16 curitemcount = q_status.ItemCount[j];
- m_QuestStatusSave[questid] = true;
+ if (q_status.ItemCount[j] >= reqitemcount) // we may have more than what the status shows
+ curitemcount = GetItemCount(entry, false);
+ uint16 newItemCount = (count > curitemcount) ? 0 : curitemcount - count;
+ newItemCount = std::min<uint16>(newItemCount, reqitemcount);
+ if (newItemCount != q_status.ItemCount[j])
+ {
+ q_status.ItemCount[j] = newItemCount;
+ m_QuestStatusSave[questid] = QUEST_DEFAULT_SAVE_TYPE;
IncompleteQuest(questid);
}
return;
@@ -16456,7 +16479,7 @@ void Player::KilledMonsterCredit(uint32 entry, uint64 guid /*= 0*/)
{
q_status.CreatureOrGOCount[j] = curkillcount + addkillcount;
- m_QuestStatusSave[questid] = true;
+ m_QuestStatusSave[questid] = QUEST_DEFAULT_SAVE_TYPE;
SendQuestUpdateAddCreatureOrGo(qInfo, guid, j, curkillcount, addkillcount);
}
@@ -16498,7 +16521,7 @@ void Player::KilledPlayerCredit()
{
q_status.PlayerCount = curkill + addkillcount;
- m_QuestStatusSave[questid] = true;
+ m_QuestStatusSave[questid] = QUEST_DEFAULT_SAVE_TYPE;
SendQuestUpdateAddPlayer(qInfo, curkill, addkillcount);
}
@@ -16550,7 +16573,7 @@ void Player::KillCreditGO(uint32 entry, uint64 guid)
{
q_status.CreatureOrGOCount[j] = curCastCount + addCastCount;
- m_QuestStatusSave[questid] = true;
+ m_QuestStatusSave[questid] = QUEST_DEFAULT_SAVE_TYPE;
SendQuestUpdateAddCreatureOrGo(qInfo, guid, j, curCastCount, addCastCount);
}
@@ -16607,7 +16630,7 @@ void Player::TalkedToCreature(uint32 entry, uint64 guid)
{
q_status.CreatureOrGOCount[j] = curTalkCount + addTalkCount;
- m_QuestStatusSave[questid] = true;
+ m_QuestStatusSave[questid] = QUEST_DEFAULT_SAVE_TYPE;
SendQuestUpdateAddCreatureOrGo(qInfo, guid, j, curTalkCount, addTalkCount);
}
@@ -17182,6 +17205,14 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
bytes0 |= gender << 16; // gender
SetUInt32Value(UNIT_FIELD_BYTES_0, bytes0);
+ // check if race/class combination is valid
+ PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass());
+ if (!info)
+ {
+ TC_LOG_ERROR("entities.player", "Player (GUID: %u) has wrong race/class (%u/%u), can't be loaded.", guid, getRace(), getClass());
+ return false;
+ }
+
SetUInt32Value(UNIT_FIELD_LEVEL, fields[6].GetUInt8());
SetUInt32Value(PLAYER_XP, fields[7].GetUInt32());
@@ -17349,15 +17380,15 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
{
uint64 transGUID = MAKE_NEW_GUID(transLowGUID, 0, HIGHGUID_MO_TRANSPORT);
+ Transport* transport = NULL;
if (GameObject* go = HashMapHolder<GameObject>::Find(transGUID))
- m_transport = go->ToTransport();
+ transport = go->ToTransport();
- if (m_transport)
+ if (transport)
{
- m_movementInfo.transport.guid = transGUID;
float x = fields[26].GetFloat(), y = fields[27].GetFloat(), z = fields[28].GetFloat(), o = fields[29].GetFloat();
m_movementInfo.transport.pos.Relocate(x, y, z, o);
- m_transport->CalculatePassengerPosition(x, y, z, &o);
+ transport->CalculatePassengerPosition(x, y, z, &o);
if (!Trinity::IsValidMapCoord(x, y, z, o) ||
// transport size limited
@@ -17368,7 +17399,6 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
TC_LOG_ERROR("entities.player", "Player (guidlow %d) have invalid transport coordinates (X: %f Y: %f Z: %f O: %f). Teleport to bind location.",
guid, x, y, z, o);
- m_transport = NULL;
m_movementInfo.transport.Reset();
RelocateToHomebind();
@@ -17376,10 +17406,9 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
else
{
Relocate(x, y, z, o);
- mapId = m_transport->GetMapId();
+ mapId = transport->GetMapId();
- m_transport->AddPassenger(this);
- AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
+ transport->AddPassenger(this);
}
}
else
@@ -17500,7 +17529,6 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
if (!map)
{
- PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass());
mapId = info->mapId;
Relocate(info->positionX, info->positionY, info->positionZ, 0.0f);
map = sMapMgr->CreateMap(mapId, this);
@@ -17657,7 +17685,8 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
// after spell and quest load
InitTalentForLevel();
- learnDefaultSpells();
+ LearnDefaultSkills();
+ LearnCustomSpells();
// must be before inventory (some items required reputation check)
m_reputationMgr->LoadFromDB(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_REPUTATION));
@@ -17787,6 +17816,9 @@ bool Player::isAllowedToLoot(const Creature* creature)
if (loot->isLooted()) // nothing to loot or everything looted.
return false;
+ if (loot->loot_type == LOOT_SKINNING)
+ return creature->GetSkinner() == GetGUID();
+
Group* thisGroup = GetGroup();
if (!thisGroup)
return this == creature->GetLootRecipient();
@@ -18462,7 +18494,7 @@ void Player::_LoadQuestStatusRewarded(PreparedQueryResult result)
if (quest)
{
// learn rewarded spell if unknown
- learnQuestRewardedSpells(quest);
+ LearnQuestRewardedSpells(quest);
// set rewarded title if any
if (quest->GetCharTitleId())
@@ -18610,7 +18642,7 @@ void Player::_LoadSpells(PreparedQueryResult result)
if (result)
{
do
- addSpell((*result)[0].GetUInt32(), (*result)[1].GetBool(), false, false, (*result)[2].GetBool(), true);
+ AddSpell((*result)[0].GetUInt32(), (*result)[1].GetBool(), false, false, (*result)[2].GetBool(), true);
while (result->NextRow());
}
}
@@ -19725,7 +19757,7 @@ void Player::_SaveMail(SQLTransaction& trans)
void Player::_SaveQuestStatus(SQLTransaction& trans)
{
- bool isTransaction = !trans.null();
+ bool isTransaction = bool(trans);
if (!isTransaction)
trans = CharacterDatabase.BeginTransaction();
@@ -19737,7 +19769,7 @@ void Player::_SaveQuestStatus(SQLTransaction& trans)
for (saveItr = m_QuestStatusSave.begin(); saveItr != m_QuestStatusSave.end(); ++saveItr)
{
- if (saveItr->second)
+ if (saveItr->second == QUEST_DEFAULT_SAVE_TYPE)
{
statusItr = m_QuestStatus.find(saveItr->first);
if (statusItr != m_QuestStatus.end() && (keepAbandoned || statusItr->second.Status != QUEST_STATUS_NONE))
@@ -19774,7 +19806,7 @@ void Player::_SaveQuestStatus(SQLTransaction& trans)
for (saveItr = m_RewardedQuestsSave.begin(); saveItr != m_RewardedQuestsSave.end(); ++saveItr)
{
- if (saveItr->second)
+ if (saveItr->second == QUEST_DEFAULT_SAVE_TYPE)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_QUESTSTATUS_REWARDED);
stmt->setUInt32(0, GetGUIDLow());
@@ -19782,7 +19814,7 @@ void Player::_SaveQuestStatus(SQLTransaction& trans)
trans->Append(stmt);
}
- else if (!keepAbandoned)
+ else if (saveItr->second == QUEST_FORCE_DELETE_SAVE_TYPE || !keepAbandoned)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_QUESTSTATUS_REWARDED_BY_QUEST);
stmt->setUInt32(0, GetGUIDLow());
@@ -21555,10 +21587,10 @@ inline bool Player::_StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 c
ItemExtendedCostEntry const* iece = sItemExtendedCostStore.LookupEntry(crItem->ExtendedCost);
ASSERT(iece);
if (iece->reqhonorpoints)
- ModifyHonorPoints(- int32(iece->reqhonorpoints * count));
+ ModifyHonorPoints(-int32(iece->reqhonorpoints * count));
if (iece->reqarenapoints)
- ModifyArenaPoints(- int32(iece->reqarenapoints * count));
+ ModifyArenaPoints(-int32(iece->reqarenapoints * count));
for (uint8 i = 0; i < MAX_ITEM_EXTENDED_COST_REQUIREMENTS; ++i)
{
@@ -22021,6 +22053,27 @@ void Player::AddSpellCooldown(uint32 spellid, uint32 itemid, time_t end_time)
m_spellCooldowns[spellid] = sc;
}
+void Player::ModifySpellCooldown(uint32 spellId, int32 cooldown)
+{
+ SpellCooldowns::iterator itr = m_spellCooldowns.find(spellId);
+ if (itr == m_spellCooldowns.end())
+ return;
+
+ time_t now = time(NULL);
+ if (itr->second.end + (cooldown / IN_MILLISECONDS) > now)
+ itr->second.end += (cooldown / IN_MILLISECONDS);
+ else
+ m_spellCooldowns.erase(itr);
+
+ WorldPacket data(SMSG_MODIFY_COOLDOWN, 4 + 8 + 4);
+ data << uint32(spellId); // Spell ID
+ data << uint64(GetGUID()); // Player GUID
+ data << int32(cooldown); // Cooldown mod in milliseconds
+ GetSession()->SendPacket(&data);
+
+ TC_LOG_DEBUG("misc", "ModifySpellCooldown:: Player: %s (GUID: %u) Spell: %u cooldown: %u", GetName().c_str(), GetGUIDLow(), spellId, GetSpellCooldownDelay(spellId));
+}
+
void Player::SendCooldownEvent(SpellInfo const* spellInfo, uint32 itemId /*= 0*/, Spell* spell /*= NULL*/, bool setCooldown /*= true*/)
{
// start cooldowns at server side, if any
@@ -22627,7 +22680,7 @@ bool Player::ModifyMoney(int32 amount, bool sendError /*= true*/)
SetMoney (GetMoney() > uint32(-amount) ? GetMoney() + amount : 0);
else
{
- if (GetMoney() < uint32(MAX_MONEY_AMOUNT - amount))
+ if (GetMoney() < MAX_MONEY_AMOUNT - static_cast<uint32>(amount))
SetMoney(GetMoney() + amount);
else
{
@@ -22977,7 +23030,7 @@ void Player::ApplyEquipCooldown(Item* pItem)
}
}
-void Player::resetSpells(bool myClassOnly)
+void Player::ResetSpells(bool myClassOnly)
{
// not need after this call
if (HasAtLoginFlag(AT_LOGIN_RESET_SPELLS))
@@ -23026,28 +23079,96 @@ void Player::resetSpells(bool myClassOnly)
}
else
for (PlayerSpellMap::const_iterator iter = smap.begin(); iter != smap.end(); ++iter)
- removeSpell(iter->first, false, false); // only iter->first can be accessed, object by iter->second can be deleted already
+ RemoveSpell(iter->first, false, false); // only iter->first can be accessed, object by iter->second can be deleted already
- learnDefaultSpells();
- learnQuestRewardedSpells();
+ LearnDefaultSkills();
+ LearnCustomSpells();
+ LearnQuestRewardedSpells();
}
-void Player::learnDefaultSpells()
+void Player::LearnCustomSpells()
{
+ if (!sWorld->getBoolConfig(CONFIG_START_ALL_SPELLS))
+ return;
+
// learn default race/class spells
PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass());
- for (PlayerCreateInfoSpells::const_iterator itr = info->spell.begin(); itr != info->spell.end(); ++itr)
+ for (PlayerCreateInfoSpells::const_iterator itr = info->customSpells.begin(); itr != info->customSpells.end(); ++itr)
{
uint32 tspell = *itr;
TC_LOG_DEBUG("entities.player.loading", "PLAYER (Class: %u Race: %u): Adding initial spell, id = %u", uint32(getClass()), uint32(getRace()), tspell);
if (!IsInWorld()) // will send in INITIAL_SPELLS in list anyway at map add
- addSpell(tspell, true, true, true, false);
+ AddSpell(tspell, true, true, true, false);
else // but send in normal spell in game learn case
- learnSpell(tspell, true);
+ LearnSpell(tspell, true);
+ }
+}
+
+void Player::LearnDefaultSkills()
+{
+ // learn default race/class skills
+ PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass());
+ for (PlayerCreateInfoSkills::const_iterator itr = info->skills.begin(); itr != info->skills.end(); ++itr)
+ {
+ uint32 skillId = itr->SkillId;
+ if (HasSkill(skillId))
+ continue;
+
+ LearnDefaultSkill(skillId, itr->Rank);
+ }
+}
+
+void Player::LearnDefaultSkill(uint32 skillId, uint16 rank)
+{
+ SkillRaceClassInfoEntry const* rcInfo = GetSkillRaceClassInfo(skillId, getRace(), getClass());
+ if (!rcInfo)
+ return;
+
+ TC_LOG_DEBUG("entities.player.loading", "PLAYER (Class: %u Race: %u): Adding initial skill, id = %u", uint32(getClass()), uint32(getRace()), skillId);
+ switch (GetSkillRangeType(rcInfo))
+ {
+ case SKILL_RANGE_LANGUAGE:
+ SetSkill(skillId, 0, 300, 300);
+ break;
+ case SKILL_RANGE_LEVEL:
+ {
+ uint16 skillValue = 1;
+ uint16 maxValue = GetMaxSkillValueForLevel();
+ if (rcInfo->Flags & SKILL_FLAG_ALWAYS_MAX_VALUE)
+ skillValue = maxValue;
+ else if (getClass() == CLASS_DEATH_KNIGHT)
+ skillValue = std::min(std::max<uint16>({ 1, uint16((getLevel() - 1) * 5) }), maxValue);
+ else if (skillId == SKILL_FIST_WEAPONS)
+ skillValue = std::max<uint16>(1, GetSkillValue(SKILL_UNARMED));
+
+ SetSkill(skillId, 0, skillValue, maxValue);
+ break;
+ }
+ case SKILL_RANGE_MONO:
+ SetSkill(skillId, 0, 1, 1);
+ break;
+ case SKILL_RANGE_RANK:
+ {
+ if (!rank)
+ break;
+
+ SkillTiersEntry const* tier = sSkillTiersStore.LookupEntry(rcInfo->SkillTier);
+ uint16 maxValue = tier->MaxSkill[std::max<int32>(rank - 1, 0)];
+ uint16 skillValue = 1;
+ if (rcInfo->Flags & SKILL_FLAG_ALWAYS_MAX_VALUE)
+ skillValue = maxValue;
+ else if (getClass() == CLASS_DEATH_KNIGHT)
+ skillValue = std::min(std::max<uint16>({ uint16(1), uint16((getLevel() - 1) * 5) }), maxValue);
+
+ SetSkill(skillId, rank, skillValue, maxValue);
+ break;
+ }
+ default:
+ break;
}
}
-void Player::learnQuestRewardedSpells(Quest const* quest)
+void Player::LearnQuestRewardedSpells(Quest const* quest)
{
int32 spell_id = quest->GetRewSpellCast();
uint32 src_spell_id = quest->GetSrcSpell();
@@ -23127,7 +23248,7 @@ void Player::learnQuestRewardedSpells(Quest const* quest)
CastSpell(this, spell_id, true);
}
-void Player::learnQuestRewardedSpells()
+void Player::LearnQuestRewardedSpells()
{
// learn spells received from quest completing
for (RewardedQuestSet::const_iterator itr = m_RewardedQuests.begin(); itr != m_RewardedQuests.end(); ++itr)
@@ -23136,37 +23257,42 @@ void Player::learnQuestRewardedSpells()
if (!quest)
continue;
- learnQuestRewardedSpells(quest);
+ LearnQuestRewardedSpells(quest);
}
}
-void Player::learnSkillRewardedSpells(uint32 skill_id, uint32 skill_value)
+void Player::LearnSkillRewardedSpells(uint32 skillId, uint32 skillValue)
{
uint32 raceMask = getRaceMask();
uint32 classMask = getClassMask();
- for (uint32 j=0; j<sSkillLineAbilityStore.GetNumRows(); ++j)
+ for (uint32 j = 0; j < sSkillLineAbilityStore.GetNumRows(); ++j)
{
- SkillLineAbilityEntry const* pAbility = sSkillLineAbilityStore.LookupEntry(j);
- if (!pAbility || pAbility->skillId != skill_id || pAbility->learnOnGetSkill != ABILITY_LEARNED_ON_GET_PROFESSION_SKILL)
+ SkillLineAbilityEntry const* ability = sSkillLineAbilityStore.LookupEntry(j);
+ if (!ability || ability->skillId != skillId)
+ continue;
+
+ if (!sSpellMgr->GetSpellInfo(ability->spellId))
+ continue;
+
+ if (ability->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE && ability->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN)
continue;
+
// Check race if set
- if (pAbility->racemask && !(pAbility->racemask & raceMask))
+ if (ability->racemask && !(ability->racemask & raceMask))
continue;
+
// Check class if set
- if (pAbility->classmask && !(pAbility->classmask & classMask))
+ if (ability->classmask && !(ability->classmask & classMask))
continue;
- if (sSpellMgr->GetSpellInfo(pAbility->spellId))
- {
- // need unlearn spell
- if (skill_value < pAbility->req_skill_value)
- removeSpell(pAbility->spellId);
- // need learn
- else if (!IsInWorld())
- addSpell(pAbility->spellId, true, true, true, false);
- else
- learnSpell(pAbility->spellId, true);
- }
+ // need unlearn spell
+ if (skillValue < ability->req_skill_value && ability->AutolearnType == SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE)
+ RemoveSpell(ability->spellId);
+ // need learn
+ else if (!IsInWorld())
+ AddSpell(ability->spellId, true, true, true, false, false, true);
+ else
+ LearnSpell(ability->spellId, true, true);
}
}
@@ -23894,7 +24020,7 @@ bool Player::IsAtRecruitAFriendDistance(WorldObject const* pOther) const
return pOther->GetDistance(player) <= sWorld->getFloatConfig(CONFIG_MAX_RECRUIT_A_FRIEND_DISTANCE);
}
-uint32 Player::GetBaseWeaponSkillValue (WeaponAttackType attType) const
+uint32 Player::GetBaseWeaponSkillValue(WeaponAttackType attType) const
{
Item* item = GetWeaponForAttack(attType, true);
@@ -23902,12 +24028,12 @@ uint32 Player::GetBaseWeaponSkillValue (WeaponAttackType attType) const
if (attType != BASE_ATTACK && !item)
return 0;
- // weapon skill or (unarmed for base attack and for fist weapons)
- uint32 skill = (item && item->GetSkill() != SKILL_FIST_WEAPONS) ? item->GetSkill() : uint32(SKILL_UNARMED);
+ // weapon skill or (unarmed for base attack)
+ uint32 skill = item ? item->GetSkill() : uint32(SKILL_UNARMED);
return GetBaseSkillValue(skill);
}
-void Player::ResurectUsingRequestData()
+void Player::ResurrectUsingRequestData()
{
/// Teleport before resurrecting by player, otherwise the player might get attacked from creatures near his corpse
TeleportTo(m_resurrectMap, m_resurrectX, m_resurrectY, m_resurrectZ, GetOrientation());
@@ -24019,7 +24145,7 @@ uint32 Player::GetCorpseReclaimDelay(bool pvp) const
void Player::UpdateCorpseReclaimDelay()
{
- bool pvp = m_ExtraFlags & PLAYER_EXTRA_PVP_DEATH;
+ bool pvp = (m_ExtraFlags & PLAYER_EXTRA_PVP_DEATH) != 0;
if ((pvp && !sWorld->getBoolConfig(CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVP)) ||
(!pvp && !sWorld->getBoolConfig(CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVE)))
@@ -24048,7 +24174,7 @@ int32 Player::CalculateCorpseReclaimDelay(bool load)
if (load && !corpse)
return -1;
- bool pvp = corpse ? corpse->GetType() == CORPSE_RESURRECTABLE_PVP : m_ExtraFlags & PLAYER_EXTRA_PVP_DEATH;
+ bool pvp = corpse ? corpse->GetType() == CORPSE_RESURRECTABLE_PVP : (m_ExtraFlags & PLAYER_EXTRA_PVP_DEATH) != 0;
uint32 delay;
@@ -24834,12 +24960,12 @@ bool Player::IsKnowHowFlyIn(uint32 mapid, uint32 zone) const
return v_map != 571 || HasSpell(54197); // Cold Weather Flying
}
-void Player::learnSpellHighRank(uint32 spellid)
+void Player::LearnSpellHighestRank(uint32 spellid)
{
- learnSpell(spellid, false);
+ LearnSpell(spellid, false);
if (uint32 next = sSpellMgr->GetNextSpellInChain(spellid))
- learnSpellHighRank(next);
+ LearnSpellHighestRank(next);
}
void Player::_LoadSkills(PreparedQueryResult result)
@@ -24857,15 +24983,18 @@ void Player::_LoadSkills(PreparedQueryResult result)
uint16 value = fields[1].GetUInt16();
uint16 max = fields[2].GetUInt16();
- SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(skill);
- if (!pSkill)
+ SkillRaceClassInfoEntry const* rcEntry = GetSkillRaceClassInfo(skill, getRace(), getClass());
+ if (!rcEntry)
{
- TC_LOG_ERROR("entities.player", "Character %u has skill %u that does not exist.", GetGUIDLow(), skill);
+ TC_LOG_ERROR("entities.player", "Character: %s (GUID: %u Race: %u Class: %u) has skill %u not allowed for his race/class combination",
+ GetName().c_str(), GetGUIDLow(), uint32(getRace()), uint32(getClass()), skill);
+
+ mSkillStatus.insert(SkillStatusMap::value_type(skill, SkillStatusData(0, SKILL_DELETED)));
continue;
}
// set fixed skill ranges
- switch (GetSkillRangeType(pSkill, false))
+ switch (GetSkillRangeType(rcEntry))
{
case SKILL_RANGE_LANGUAGE: // 300..300
value = max = 300;
@@ -24873,9 +25002,12 @@ void Player::_LoadSkills(PreparedQueryResult result)
case SKILL_RANGE_MONO: // 1..1, grey monolite bar
value = max = 1;
break;
+ case SKILL_RANGE_LEVEL:
+ max = GetMaxSkillValueForLevel();
default:
break;
}
+
if (value == 0)
{
TC_LOG_ERROR("entities.player", "Character %u has skill %u with value 0. Will be deleted.", GetGUIDLow(), skill);
@@ -24890,18 +25022,27 @@ void Player::_LoadSkills(PreparedQueryResult result)
continue;
}
- // enable unlearn button for primary professions only
- if (pSkill->categoryId == SKILL_CATEGORY_PROFESSION)
- SetUInt32Value(PLAYER_SKILL_INDEX(count), MAKE_PAIR32(skill, 1));
- else
- SetUInt32Value(PLAYER_SKILL_INDEX(count), MAKE_PAIR32(skill, 0));
+ uint16 skillStep = 0;
+ if (SkillTiersEntry const* skillTier = sSkillTiersStore.LookupEntry(rcEntry->SkillTier))
+ {
+ for (uint32 i = 0; i < MAX_SKILL_STEP; ++i)
+ {
+ if (skillTier->MaxSkill[skillStep] == max)
+ {
+ skillStep = i + 1;
+ break;
+ }
+ }
+ }
+
+ SetUInt32Value(PLAYER_SKILL_INDEX(count), MAKE_PAIR32(skill, skillStep));
SetUInt32Value(PLAYER_SKILL_VALUE_INDEX(count), MAKE_SKILL_VALUE(value, max));
SetUInt32Value(PLAYER_SKILL_BONUS_INDEX(count), 0);
mSkillStatus.insert(SkillStatusMap::value_type(skill, SkillStatusData(count, SKILL_UNCHANGED)));
- learnSkillRewardedSpells(skill, value);
+ LearnSkillRewardedSpells(skill, value);
++count;
@@ -24921,33 +25062,8 @@ void Player::_LoadSkills(PreparedQueryResult result)
SetUInt32Value(PLAYER_SKILL_BONUS_INDEX(count), 0);
}
- // special settings
- if (getClass() == CLASS_DEATH_KNIGHT)
- {
- uint8 base_level = std::min(getLevel(), uint8(sWorld->getIntConfig(CONFIG_START_HEROIC_PLAYER_LEVEL)));
- if (base_level < 1)
- base_level = 1;
- uint16 base_skill = (base_level-1)*5; // 270 at starting level 55
- if (base_skill < 1)
- base_skill = 1; // skill mast be known and then > 0 in any case
-
- if (GetPureSkillValue(SKILL_FIRST_AID) < base_skill)
- SetSkill(SKILL_FIRST_AID, 0, base_skill, base_skill);
- if (GetPureSkillValue(SKILL_AXES) < base_skill)
- SetSkill(SKILL_AXES, 0, base_skill, base_skill);
- if (GetPureSkillValue(SKILL_DEFENSE) < base_skill)
- SetSkill(SKILL_DEFENSE, 0, base_skill, base_skill);
- if (GetPureSkillValue(SKILL_POLEARMS) < base_skill)
- SetSkill(SKILL_POLEARMS, 0, base_skill, base_skill);
- if (GetPureSkillValue(SKILL_SWORDS) < base_skill)
- SetSkill(SKILL_SWORDS, 0, base_skill, base_skill);
- if (GetPureSkillValue(SKILL_2H_AXES) < base_skill)
- SetSkill(SKILL_2H_AXES, 0, base_skill, base_skill);
- if (GetPureSkillValue(SKILL_2H_SWORDS) < base_skill)
- SetSkill(SKILL_2H_SWORDS, 0, base_skill, base_skill);
- if (GetPureSkillValue(SKILL_UNARMED) < base_skill)
- SetSkill(SKILL_UNARMED, 0, base_skill, base_skill);
- }
+ if (HasSkill(SKILL_FIST_WEAPONS))
+ SetSkill(SKILL_FIST_WEAPONS, 0, GetSkillValue(SKILL_UNARMED), GetMaxSkillValueForLevel());
}
uint32 Player::GetPhaseMaskForSpawn() const
@@ -25237,7 +25353,7 @@ void Player::LearnTalent(uint32 talentId, uint32 talentRank)
return;
// learn! (other talent ranks will unlearned at learning)
- learnSpell(spellid, false);
+ LearnSpell(spellid, false);
AddTalent(spellid, m_activeSpec, true);
TC_LOG_INFO("entities.player", "TalentID: %u Rank: %u Spell: %u Spec: %u\n", talentId, talentRank, spellid, m_activeSpec);
@@ -26048,11 +26164,11 @@ void Player::ActivateSpec(uint8 spec)
// skip non-existant talent ranks
if (talentInfo->RankID[rank] == 0)
continue;
- removeSpell(talentInfo->RankID[rank], true); // removes the talent, and all dependant, learned, and chained spells..
+ RemoveSpell(talentInfo->RankID[rank], true); // removes the talent, and all dependant, learned, and chained spells..
if (const SpellInfo* _spellEntry = sSpellMgr->GetSpellInfo(talentInfo->RankID[rank]))
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) // search through the SpellInfo for valid trigger spells
if (_spellEntry->Effects[i].TriggerSpell > 0 && _spellEntry->Effects[i].Effect == SPELL_EFFECT_LEARN_SPELL)
- removeSpell(_spellEntry->Effects[i].TriggerSpell, true); // and remove any spells that the talent teaches
+ RemoveSpell(_spellEntry->Effects[i].TriggerSpell, true); // and remove any spells that the talent teaches
// if this talent rank can be found in the PlayerTalentMap, mark the talent as removed so it gets deleted
//PlayerTalentMap::iterator plrTalent = m_talents[m_activeSpec]->find(talentInfo->RankID[rank]);
//if (plrTalent != m_talents[m_activeSpec]->end())
@@ -26095,7 +26211,7 @@ void Player::ActivateSpec(uint8 spec)
// if the talent can be found in the newly activated PlayerTalentMap
if (HasTalent(talentInfo->RankID[rank], m_activeSpec))
{
- learnSpell(talentInfo->RankID[rank], false); // add the talent to the PlayerSpellMap
+ LearnSpell(talentInfo->RankID[rank], false); // add the talent to the PlayerSpellMap
spentTalents += (rank + 1); // increment the spentTalents count
}
}
@@ -26355,11 +26471,11 @@ void Player::RefundItem(Item* item)
// Grant back Honor points
if (uint32 honorRefund = iece->reqhonorpoints)
- ModifyHonorPoints(honorRefund, &trans);
+ ModifyHonorPoints(honorRefund, trans);
// Grant back Arena points
if (uint32 arenaRefund = iece->reqarenapoints)
- ModifyArenaPoints(arenaRefund, &trans);
+ ModifyArenaPoints(arenaRefund, trans);
SaveInventoryAndGoldToDB(trans);
@@ -26708,3 +26824,16 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy
return pet;
}
+
+bool Player::IsLoading() const
+{
+ return GetSession()->PlayerLoading();
+}
+
+void Player::SendSupercededSpell(uint32 oldSpell, uint32 newSpell)
+{
+ WorldPacket data(SMSG_SUPERCEDED_SPELL, 8);
+ data << uint32(oldSpell) << uint32(newSpell);
+ GetSession()->SendPacket(&data);
+}
+
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 2eb740f0a82..b1fd9d5a97f 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -29,6 +29,7 @@
#include "SpellMgr.h"
#include "Unit.h"
+#include <limits>
#include <string>
#include <vector>
@@ -121,8 +122,8 @@ struct SpellModifier
Aura* const ownerAura;
};
-typedef UNORDERED_MAP<uint32, PlayerTalent*> PlayerTalentMap;
-typedef UNORDERED_MAP<uint32, PlayerSpell*> PlayerSpellMap;
+typedef std::unordered_map<uint32, PlayerTalent*> PlayerTalentMap;
+typedef std::unordered_map<uint32, PlayerSpell*> PlayerSpellMap;
typedef std::list<SpellModifier*> SpellModList;
typedef std::list<uint64> WhisperListContainer;
@@ -134,7 +135,7 @@ struct SpellCooldown
};
typedef std::map<uint32, SpellCooldown> SpellCooldowns;
-typedef UNORDERED_MAP<uint32 /*instanceId*/, time_t/*releaseTime*/> InstanceTimeMap;
+typedef std::unordered_map<uint32 /*instanceId*/, time_t/*releaseTime*/> InstanceTimeMap;
enum TrainerSpellState
{
@@ -248,6 +249,14 @@ struct PlayerCreateInfoAction
typedef std::list<PlayerCreateInfoAction> PlayerCreateInfoActions;
+struct PlayerCreateInfoSkill
+{
+ uint16 SkillId;
+ uint16 Rank;
+};
+
+typedef std::list<PlayerCreateInfoSkill> PlayerCreateInfoSkills;
+
struct PlayerInfo
{
// existence checked by displayId != 0
@@ -262,8 +271,9 @@ struct PlayerInfo
uint16 displayId_m;
uint16 displayId_f;
PlayerCreateInfoItems item;
- PlayerCreateInfoSpells spell;
+ PlayerCreateInfoSpells customSpells;
PlayerCreateInfoActions action;
+ PlayerCreateInfoSkills skills;
PlayerLevelInfo* levelInfo; //[level-1] 0..MaxPlayerLevel-1
};
@@ -514,8 +524,16 @@ enum AtLoginFlags
typedef std::map<uint32, QuestStatusData> QuestStatusMap;
typedef std::set<uint32> RewardedQuestSet;
-// quest, keep
-typedef std::map<uint32, bool> QuestStatusSaveMap;
+enum QuestSaveType
+{
+ QUEST_DEFAULT_SAVE_TYPE = 0,
+ QUEST_DELETE_SAVE_TYPE,
+ QUEST_FORCE_DELETE_SAVE_TYPE
+};
+
+// quest
+typedef std::map<uint32, QuestSaveType> QuestStatusSaveMap;
+
enum QuestSlotOffsets
{
@@ -551,7 +569,7 @@ struct SkillStatusData
SkillUpdateState uState;
};
-typedef UNORDERED_MAP<uint32, SkillStatusData> SkillStatusMap;
+typedef std::unordered_map<uint32, SkillStatusData> SkillStatusMap;
class Quest;
class Spell;
@@ -728,9 +746,10 @@ class InstanceSave;
enum RestType
{
- REST_TYPE_NO = 0,
- REST_TYPE_IN_TAVERN = 1,
- REST_TYPE_IN_CITY = 2
+ REST_TYPE_NO = 0,
+ REST_TYPE_IN_TAVERN = 1,
+ REST_TYPE_IN_CITY = 2,
+ REST_TYPE_IN_FACTION_AREA = 3 // used with AREA_FLAG_REST_ZONE_*
};
enum TeleportToOptions
@@ -824,7 +843,8 @@ enum PlayerDelayedOperations
// Player summoning auto-decline time (in secs)
#define MAX_PLAYER_SUMMON_DELAY (2*MINUTE)
-#define MAX_MONEY_AMOUNT (0x7FFFFFFF-1)
+// Maximum money amount : 2^31 - 1
+extern uint32 const MAX_MONEY_AMOUNT;
struct InstancePlayerBind
{
@@ -915,7 +935,7 @@ class PlayerTaxi
bool SetTaximaskNode(uint32 nodeidx)
{
uint8 field = uint8((nodeidx - 1) / 32);
- uint32 submask = 1 << ((nodeidx-1) % 32);
+ uint32 submask = 1 << ((nodeidx - 1) % 32);
if ((m_taximask[field] & submask) != submask)
{
m_taximask[field] |= submask;
@@ -948,7 +968,7 @@ class PlayerTaxi
std::deque<uint32> m_TaxiDestinations;
};
-std::ostringstream& operator<< (std::ostringstream& ss, PlayerTaxi const& taxi);
+std::ostringstream& operator << (std::ostringstream& ss, PlayerTaxi const& taxi);
class Player;
@@ -977,6 +997,19 @@ struct BGData
bool HasTaxiPath() const { return taxiPath[0] && taxiPath[1]; }
};
+struct TradeStatusInfo
+{
+ TradeStatusInfo() : Status(TRADE_STATUS_BUSY), TraderGuid(0), Result(EQUIP_ERR_OK),
+ IsTargetResult(false), ItemLimitCategoryId(0), Slot(0) { }
+
+ TradeStatus Status;
+ uint64 TraderGuid;
+ InventoryResult Result;
+ bool IsTargetResult;
+ uint32 ItemLimitCategoryId;
+ uint8 Slot;
+};
+
class TradeData
{
public: // constructors
@@ -1068,12 +1101,12 @@ class Player : public Unit, public GridObject<Player>
explicit Player(WorldSession* session);
~Player();
- void CleanupsBeforeDelete(bool finalCleanup = true);
+ void CleanupsBeforeDelete(bool finalCleanup = true) override;
- void AddToWorld();
- void RemoveFromWorld();
+ void AddToWorld() override;
+ void RemoveFromWorld() override;
- void SetObjectScale(float scale)
+ void SetObjectScale(float scale) override
{
Unit::SetObjectScale(scale);
SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, scale * DEFAULT_WORLD_OBJECT_SIZE);
@@ -1089,18 +1122,19 @@ class Player : public Unit, public GridObject<Player>
bool Create(uint32 guidlow, CharacterCreateInfo* createInfo);
- void Update(uint32 time);
+ void Update(uint32 time) override;
static bool BuildEnumData(PreparedQueryResult result, WorldPacket* data);
void SetInWater(bool apply);
- bool IsInWater() const { return m_isInWater; }
- bool IsUnderWater() const;
+ bool IsInWater() const override { return m_isInWater; }
+ bool IsUnderWater() const override;
bool IsFalling() { return GetPositionZ() < m_lastFallZ; }
void SendInitialPacketsBeforeAddToMap();
void SendInitialPacketsAfterAddToMap();
+ void SendSupercededSpell(uint32 oldSpell, uint32 newSpell);
void SendTransferAborted(uint32 mapid, TransferAbortReason reason, uint8 arg = 0);
void SendInstanceResetWarning(uint32 mapid, Difficulty difficulty, uint32 time);
@@ -1126,13 +1160,13 @@ class Player : public Unit, public GridObject<Player>
void CleanupAfterTaxiFlight();
void ContinueTaxiFlight();
// mount_id can be used in scripting calls
- bool isAcceptWhispers() const { return m_ExtraFlags & PLAYER_EXTRA_ACCEPT_WHISPERS; }
+ bool isAcceptWhispers() const { return (m_ExtraFlags & PLAYER_EXTRA_ACCEPT_WHISPERS) != 0; }
void SetAcceptWhispers(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_ACCEPT_WHISPERS; else m_ExtraFlags &= ~PLAYER_EXTRA_ACCEPT_WHISPERS; }
- bool IsGameMaster() const { return m_ExtraFlags & PLAYER_EXTRA_GM_ON; }
+ bool IsGameMaster() const { return (m_ExtraFlags & PLAYER_EXTRA_GM_ON) != 0; }
void SetGameMaster(bool on);
- bool isGMChat() const { return m_ExtraFlags & PLAYER_EXTRA_GM_CHAT; }
+ bool isGMChat() const { return (m_ExtraFlags & PLAYER_EXTRA_GM_CHAT) != 0; }
void SetGMChat(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_GM_CHAT; else m_ExtraFlags &= ~PLAYER_EXTRA_GM_CHAT; }
- bool isTaxiCheater() const { return m_ExtraFlags & PLAYER_EXTRA_TAXICHEAT; }
+ bool isTaxiCheater() const { return (m_ExtraFlags & PLAYER_EXTRA_TAXICHEAT) != 0; }
void SetTaxiCheater(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_TAXICHEAT; else m_ExtraFlags &= ~PLAYER_EXTRA_TAXICHEAT; }
bool isGMVisible() const { return !(m_ExtraFlags & PLAYER_EXTRA_GM_INVISIBLE); }
void SetGMVisible(bool on);
@@ -1146,7 +1180,7 @@ class Player : public Unit, public GridObject<Player>
void InitStatsForLevel(bool reapplyMods = false);
// .cheat command related
- bool GetCommandStatus(uint32 command) const { return _activeCheats & command; }
+ bool GetCommandStatus(uint32 command) const { return (_activeCheats & command) != 0; }
void SetCommandStatusOn(uint32 command) { _activeCheats |= command; }
void SetCommandStatusOff(uint32 command) { _activeCheats &= ~command; }
@@ -1157,7 +1191,7 @@ class Player : public Unit, public GridObject<Player>
uint32 GetTotalPlayedTime() { return m_Played_time[PLAYED_TIME_TOTAL]; }
uint32 GetLevelPlayedTime() { return m_Played_time[PLAYED_TIME_LEVEL]; }
- void setDeathState(DeathState s); // overwrite Unit::setDeathState
+ void setDeathState(DeathState s) override; // overwrite Unit::setDeathState
void InnEnter(time_t time, uint32 mapid, float x, float y, float z);
@@ -1194,7 +1228,7 @@ class Player : public Unit, public GridObject<Player>
/*********************************************************/
void SetVirtualItemSlot(uint8 i, Item* item);
- void SetSheath(SheathState sheathed); // overwrite Unit version
+ void SetSheath(SheathState sheathed) override; // overwrite Unit version
uint8 FindEquipSlot(ItemTemplate const* proto, uint32 slot, bool swap) const;
uint32 GetItemCount(uint32 item, bool inBankAlso = false, Item* skipItem = NULL) const;
uint32 GetItemCountWithLimitCategory(uint32 limitCategory, Item* skipItem = NULL) const;
@@ -1224,11 +1258,11 @@ class Player : public Unit, public GridObject<Player>
bool CanNoReagentCast(SpellInfo const* spellInfo) const;
bool HasItemOrGemWithIdEquipped(uint32 item, uint32 count, uint8 except_slot = NULL_SLOT) const;
bool HasItemOrGemWithLimitCategoryEquipped(uint32 limitCategory, uint32 count, uint8 except_slot = NULL_SLOT) const;
- InventoryResult CanTakeMoreSimilarItems(Item* pItem) const { return CanTakeMoreSimilarItems(pItem->GetEntry(), pItem->GetCount(), pItem); }
- InventoryResult CanTakeMoreSimilarItems(uint32 entry, uint32 count) const { return CanTakeMoreSimilarItems(entry, count, NULL); }
+ InventoryResult CanTakeMoreSimilarItems(Item* pItem, uint32* itemLimitCategory = NULL) const { return CanTakeMoreSimilarItems(pItem->GetEntry(), pItem->GetCount(), pItem, NULL, itemLimitCategory); }
+ InventoryResult CanTakeMoreSimilarItems(uint32 entry, uint32 count, uint32* itemLimitCategory = NULL) const { return CanTakeMoreSimilarItems(entry, count, NULL, NULL, itemLimitCategory); }
InventoryResult CanStoreNewItem(uint8 bag, uint8 slot, ItemPosCountVec& dest, uint32 item, uint32 count, uint32* no_space_count = NULL) const;
InventoryResult CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec& dest, Item* pItem, bool swap = false) const;
- InventoryResult CanStoreItems(Item** pItem, int count) const;
+ InventoryResult CanStoreItems(Item** items, int count, uint32* itemLimitCategory) const;
InventoryResult CanEquipNewItem(uint8 slot, uint16& dest, uint32 item, bool swap) const;
InventoryResult CanEquipItem(uint8 slot, uint16& dest, Item* pItem, bool swap, bool not_loading = true) const;
@@ -1252,7 +1286,7 @@ class Player : public Unit, public GridObject<Player>
void AutoStoreLoot(uint32 loot_id, LootStore const& store, bool broadcast = false) { AutoStoreLoot(NULL_BAG, NULL_SLOT, loot_id, store, broadcast); }
void StoreLootItem(uint8 lootSlot, Loot* loot);
- InventoryResult CanTakeMoreSimilarItems(uint32 entry, uint32 count, Item* pItem, uint32* no_space_count = NULL) const;
+ InventoryResult CanTakeMoreSimilarItems(uint32 entry, uint32 count, Item* pItem, uint32* no_space_count = NULL, uint32* itemLimitCategory = NULL) const;
InventoryResult CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec& dest, uint32 entry, uint32 count, Item* pItem = NULL, bool swap = false, uint32* no_space_count = NULL) const;
void AddRefundReference(uint32 it);
@@ -1455,7 +1489,7 @@ class Player : public Unit, public GridObject<Player>
/*********************************************************/
bool LoadFromDB(uint32 guid, SQLQueryHolder *holder);
- bool isBeingLoaded() const;
+ bool isBeingLoaded() const override;
void Initialize(uint32 guid);
static uint32 GetUInt32ValueFromArray(Tokenizer const& data, uint16 index);
@@ -1511,7 +1545,7 @@ class Player : public Unit, public GridObject<Player>
Unit* GetSelectedUnit() const;
Player* GetSelectedPlayer() const;
- void SetTarget(uint64 /*guid*/) OVERRIDE { } /// Used for serverside target changes, does not apply to players
+ void SetTarget(uint64 /*guid*/) override { } /// Used for serverside target changes, does not apply to players
void SetSelection(uint64 guid) { SetUInt64Value(UNIT_FIELD_TARGET, guid); }
uint8 GetComboPoints() const { return m_comboPoints; }
@@ -1544,7 +1578,7 @@ class Player : public Unit, public GridObject<Player>
uint8 unReadMails;
time_t m_nextMailDelivereTime;
- typedef UNORDERED_MAP<uint32, Item*> ItemMap;
+ typedef std::unordered_map<uint32, Item*> ItemMap;
ItemMap mMitems; //template defined in objectmgr.cpp
@@ -1558,7 +1592,7 @@ class Player : public Unit, public GridObject<Player>
void PossessSpellInitialize();
void VehicleSpellInitialize();
void SendRemoveControlBar();
- bool HasSpell(uint32 spell) const;
+ bool HasSpell(uint32 spell) const override;
bool HasActiveSpell(uint32 spell) const; // show in spellbook
TrainerSpellState GetTrainerSpellState(TrainerSpell const* trainer_spell) const;
bool IsSpellFitByClassAndRace(uint32 spell_id) const;
@@ -1566,14 +1600,16 @@ class Player : public Unit, public GridObject<Player>
void SendProficiency(ItemClass itemClass, uint32 itemSubclassMask);
void SendInitialSpells();
- bool addSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading = false);
- void learnSpell(uint32 spell_id, bool dependent);
- void removeSpell(uint32 spell_id, bool disabled = false, bool learn_low_rank = true);
- void resetSpells(bool myClassOnly = false);
- void learnDefaultSpells();
- void learnQuestRewardedSpells();
- void learnQuestRewardedSpells(Quest const* quest);
- void learnSpellHighRank(uint32 spellid);
+ bool AddSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading = false, bool fromSkill = false);
+ void LearnSpell(uint32 spell_id, bool dependent, bool fromSkill = false);
+ void RemoveSpell(uint32 spell_id, bool disabled = false, bool learn_low_rank = true);
+ void ResetSpells(bool myClassOnly = false);
+ void LearnCustomSpells();
+ void LearnDefaultSkills();
+ void LearnDefaultSkill(uint32 skillId, uint16 rank);
+ void LearnQuestRewardedSpells();
+ void LearnQuestRewardedSpells(Quest const* quest);
+ void LearnSpellHighestRank(uint32 spellid);
void AddTemporarySpell(uint32 spellId);
void RemoveTemporarySpell(uint32 spellId);
void SetReputation(uint32 factionentry, uint32 value);
@@ -1581,8 +1617,8 @@ class Player : public Unit, public GridObject<Player>
std::string const& GetGuildName();
uint32 GetFreeTalentPoints() const { return GetUInt32Value(PLAYER_CHARACTER_POINTS1); }
void SetFreeTalentPoints(uint32 points);
- bool resetTalents(bool no_cost = false);
- uint32 resetTalentsCost() const;
+ bool ResetTalents(bool no_cost = false);
+ uint32 ResetTalentsCost() const;
void InitTalentForLevel();
void BuildPlayerTalentsInfoData(WorldPacket* data);
void BuildPetTalentsInfoData(WorldPacket* data);
@@ -1633,8 +1669,9 @@ class Player : public Unit, public GridObject<Player>
uint32 GetSpellCooldownDelay(uint32 spell_id) const;
void AddSpellAndCategoryCooldowns(SpellInfo const* spellInfo, uint32 itemId, Spell* spell = NULL, bool infinityCooldown = false);
void AddSpellCooldown(uint32 spell_id, uint32 itemid, time_t end_time);
+ void ModifySpellCooldown(uint32 spellId, int32 cooldown);
void SendCooldownEvent(SpellInfo const* spellInfo, uint32 itemId = 0, Spell* spell = NULL, bool setCooldown = true);
- void ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs);
+ void ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs) override;
void RemoveSpellCooldown(uint32 spell_id, bool update = false);
void RemoveSpellCategoryCooldown(uint32 cat, bool update = false);
void SendClearCooldown(uint32 spell_id, Unit* target);
@@ -1652,9 +1689,9 @@ class Player : public Unit, public GridObject<Player>
void setResurrectRequestData(uint64 guid, uint32 mapId, float X, float Y, float Z, uint32 health, uint32 mana);
void clearResurrectRequestData() { setResurrectRequestData(0, 0, 0.0f, 0.0f, 0.0f, 0, 0); }
- bool isRessurectRequestedBy(uint64 guid) const { return m_resurrectGUID == guid; }
- bool isRessurectRequested() const { return m_resurrectGUID != 0; }
- void ResurectUsingRequestData();
+ bool isResurrectRequestedBy(uint64 guid) const { return m_resurrectGUID == guid; }
+ bool isResurrectRequested() const { return m_resurrectGUID != 0; }
+ void ResurrectUsingRequestData();
uint8 getCinematic() { return m_cinematic; }
void setCinematic(uint8 cine) { m_cinematic = cine; }
@@ -1672,6 +1709,7 @@ class Player : public Unit, public GridObject<Player>
void UpdatePvP(bool state, bool override=false);
void UpdateZone(uint32 newZone, uint32 newArea);
void UpdateArea(uint32 newArea);
+ void SetNeedsZoneUpdate(bool needsUpdate) { m_needsZoneUpdate = needsUpdate; }
void UpdateZoneDependentAuras(uint32 zone_id); // zones
void UpdateAreaDependentAuras(uint32 area_id); // subzones
@@ -1741,15 +1779,15 @@ class Player : public Unit, public GridObject<Player>
float GetHealthBonusFromStamina();
float GetManaBonusFromIntellect();
- bool UpdateStats(Stats stat);
- bool UpdateAllStats();
+ bool UpdateStats(Stats stat) override;
+ bool UpdateAllStats() override;
void ApplySpellPenetrationBonus(int32 amount, bool apply);
- void UpdateResistances(uint32 school);
- void UpdateArmor();
- void UpdateMaxHealth();
- void UpdateMaxPower(Powers power);
+ void UpdateResistances(uint32 school) override;
+ void UpdateArmor() override;
+ void UpdateMaxHealth() override;
+ void UpdateMaxPower(Powers power) override;
void ApplyFeralAPBonus(int32 amount, bool apply);
- void UpdateAttackPowerAndDamage(bool ranged = false);
+ void UpdateAttackPowerAndDamage(bool ranged = false) override;
void UpdateShieldBlockValue();
void ApplySpellPowerBonus(int32 amount, bool apply);
void UpdateSpellDamageAndHealingBonus();
@@ -1757,7 +1795,7 @@ class Player : public Unit, public GridObject<Player>
void UpdateRating(CombatRating cr);
void UpdateAllRatings();
- void CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float& minDamage, float& maxDamage) OVERRIDE;
+ void CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float& minDamage, float& maxDamage) override;
void UpdateDefenseBonusesMod();
inline void RecalculateRating(CombatRating cr) { ApplyRatingMod(cr, 0, true);}
@@ -1798,8 +1836,8 @@ class Player : public Unit, public GridObject<Player>
WorldSession* GetSession() const { return m_session; }
- void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const;
- void DestroyForPlayer(Player* target, bool onDeath = false) const;
+ void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const override;
+ void DestroyForPlayer(Player* target, bool onDeath = false) const override;
void SendLogXPGain(uint32 GivenXP, Unit* victim, uint32 BonusXP, bool recruitAFriend = false, float group_rate=1.0f);
// notifiers
@@ -1818,14 +1856,14 @@ class Player : public Unit, public GridObject<Player>
void SendResetInstanceFailed(uint32 reason, uint32 MapId);
void SendResetFailedNotify(uint32 mapid);
- virtual bool UpdatePosition(float x, float y, float z, float orientation, bool teleport = false);
+ virtual bool UpdatePosition(float x, float y, float z, float orientation, bool teleport = false) override;
bool UpdatePosition(const Position &pos, bool teleport = false) { return UpdatePosition(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), teleport); }
- void UpdateUnderwaterState(Map* m, float x, float y, float z);
+ void UpdateUnderwaterState(Map* m, float x, float y, float z) override;
- void SendMessageToSet(WorldPacket* data, bool self) {SendMessageToSetInRange(data, GetVisibilityRange(), self); };// overwrite Object::SendMessageToSet
- void SendMessageToSetInRange(WorldPacket* data, float fist, bool self);// overwrite Object::SendMessageToSetInRange
+ void SendMessageToSet(WorldPacket* data, bool self) override {SendMessageToSetInRange(data, GetVisibilityRange(), self); };// overwrite Object::SendMessageToSet
+ void SendMessageToSetInRange(WorldPacket* data, float fist, bool self) override;// overwrite Object::SendMessageToSetInRange
void SendMessageToSetInRange(WorldPacket* data, float dist, bool self, bool own_team_only);
- void SendMessageToSet(WorldPacket* data, Player const* skipped_rcvr);
+ void SendMessageToSet(WorldPacket* data, Player const* skipped_rcvr) override;
void SendTeleportAckPacket();
@@ -1874,7 +1912,7 @@ class Player : public Unit, public GridObject<Player>
int16 GetSkillTempBonusValue(uint32 skill) const;
uint16 GetSkillStep(uint16 skill) const; // 0...6
bool HasSkill(uint32 skill) const;
- void learnSkillRewardedSpells(uint32 id, uint32 value);
+ void LearnSkillRewardedSpells(uint32 skillId, uint32 skillValue);
WorldLocation& GetTeleportDest() { return m_teleport_dest; }
bool IsBeingTeleported() const { return mSemaphoreTeleport_Near || mSemaphoreTeleport_Far; }
@@ -1922,8 +1960,8 @@ class Player : public Unit, public GridObject<Player>
bool RewardHonor(Unit* victim, uint32 groupsize, int32 honor = -1, bool pvptoken = false);
uint32 GetHonorPoints() const { return GetUInt32Value(PLAYER_FIELD_HONOR_CURRENCY); }
uint32 GetArenaPoints() const { return GetUInt32Value(PLAYER_FIELD_ARENA_CURRENCY); }
- void ModifyHonorPoints(int32 value, SQLTransaction* trans = NULL); //! If trans is specified, honor save query will be added to trans
- void ModifyArenaPoints(int32 value, SQLTransaction* trans = NULL); //! If trans is specified, arena point save query will be added to trans
+ void ModifyHonorPoints(int32 value, SQLTransaction trans = SQLTransaction(nullptr)); //! If trans is specified, honor save query will be added to trans
+ void ModifyArenaPoints(int32 value, SQLTransaction trans = SQLTransaction(nullptr)); //! If trans is specified, arena point save query will be added to trans
uint32 GetMaxPersonalArenaRatingRequirement(uint32 minarenaslot) const;
void SetHonorPoints(uint32 value);
void SetArenaPoints(uint32 value);
@@ -1942,7 +1980,7 @@ class Player : public Unit, public GridObject<Player>
int32 CalculateCorpseReclaimDelay(bool load = false);
void SendCorpseReclaimDelay(uint32 delay);
- uint32 GetShieldBlockValue() const; // overwrite Unit version (virtual)
+ uint32 GetShieldBlockValue() const override; // overwrite Unit version (virtual)
bool CanParry() const { return m_canParry; }
void SetCanParry(bool value);
bool CanBlock() const { return m_canBlock; }
@@ -2001,6 +2039,7 @@ class Player : public Unit, public GridObject<Player>
std::vector<ItemSetEffect*> ItemSetEff;
void SendLoot(uint64 guid, LootType loot_type);
+ void SendLootError(uint64 guid, LootError error);
void SendLootRelease(uint64 guid);
void SendNotifyLootItemRemoved(uint8 lootSlot);
void SendNotifyLootMoneyRemoved();
@@ -2130,12 +2169,12 @@ class Player : public Unit, public GridObject<Player>
bool HaveAtClient(WorldObject const* u) const;
- bool IsNeverVisible() const;
+ bool IsNeverVisible() const override;
bool IsVisibleGloballyFor(Player const* player) const;
void SendInitialVisiblePackets(Unit* target);
- void UpdateObjectVisibility(bool forced = true);
+ void UpdateObjectVisibility(bool forced = true) override;
void UpdateVisibilityForPlayer();
void UpdateVisibilityOf(WorldObject* target);
void UpdateTriggerVisibility();
@@ -2145,7 +2184,7 @@ class Player : public Unit, public GridObject<Player>
uint8 m_forced_speed_changes[MAX_MOVE_TYPE];
- bool HasAtLoginFlag(AtLoginFlags f) const { return m_atLoginFlags & f; }
+ bool HasAtLoginFlag(AtLoginFlags f) const { return (m_atLoginFlags & f) != 0; }
void SetAtLoginFlag(AtLoginFlags f) { m_atLoginFlags |= f; }
void RemoveAtLoginFlag(AtLoginFlags flags, bool persist = false);
@@ -2169,7 +2208,7 @@ class Player : public Unit, public GridObject<Player>
/*** INSTANCE SYSTEM ***/
/*********************************************************/
- typedef UNORDERED_MAP< uint32 /*mapId*/, InstancePlayerBind > BoundInstancesMap;
+ typedef std::unordered_map< uint32 /*mapId*/, InstancePlayerBind > BoundInstancesMap;
void UpdateHomebindTime(uint32 time);
@@ -2230,8 +2269,8 @@ class Player : public Unit, public GridObject<Player>
MapReference &GetMapRef() { return m_mapRef; }
// Set map to player and add reference
- void SetMap(Map* map);
- void ResetMap();
+ void SetMap(Map* map) override;
+ void ResetMap() override;
bool isAllowedToLoot(const Creature* creature);
@@ -2285,13 +2324,13 @@ class Player : public Unit, public GridObject<Player>
bool IsInWhisperWhiteList(uint64 guid);
void RemoveFromWhisperWhiteList(uint64 guid) { WhisperList.remove(guid); }
- bool SetDisableGravity(bool disable, bool packetOnly /* = false */);
- bool SetCanFly(bool apply);
- bool SetWaterWalking(bool apply, bool packetOnly = false);
- bool SetFeatherFall(bool apply, bool packetOnly = false);
- bool SetHover(bool enable, bool packetOnly = false);
+ bool SetDisableGravity(bool disable, bool packetOnly /* = false */) override;
+ bool SetCanFly(bool apply) override;
+ bool SetWaterWalking(bool apply, bool packetOnly = false) override;
+ bool SetFeatherFall(bool apply, bool packetOnly = false) override;
+ bool SetHover(bool enable, bool packetOnly = false) override;
- bool CanFly() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY); }
+ bool CanFly() const override { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY); }
//! Return collision height sent to client
float GetCollisionHeight(bool mounted) const;
@@ -2299,6 +2338,8 @@ class Player : public Unit, public GridObject<Player>
std::string GetMapAreaAndZoneString();
std::string GetCoordsMapAreaAndZoneString();
+ bool IsLoading() const;
+
protected:
// Gamemaster whisper whitelist
WhisperListContainer WhisperList;
@@ -2331,7 +2372,7 @@ class Player : public Unit, public GridObject<Player>
//We allow only one timed quest active at the same time. Below can then be simple value instead of set.
typedef std::set<uint32> QuestSet;
typedef std::set<uint32> SeasonalQuestSet;
- typedef UNORDERED_MAP<uint32, SeasonalQuestSet> SeasonalEventQuestMap;
+ typedef std::unordered_map<uint32, SeasonalQuestSet> SeasonalEventQuestMap;
QuestSet m_timedquests;
QuestSet m_weeklyquests;
QuestSet m_monthlyquests;
@@ -2553,12 +2594,14 @@ class Player : public Unit, public GridObject<Player>
Runes *m_runes;
EquipmentSets m_EquipmentSets;
- bool CanAlwaysSee(WorldObject const* obj) const;
+ bool CanAlwaysSee(WorldObject const* obj) const override;
- bool IsAlwaysDetectableFor(WorldObject const* seer) const;
+ bool IsAlwaysDetectableFor(WorldObject const* seer) const override;
uint8 m_grantableLevels;
+ bool m_needsZoneUpdate;
+
private:
// internal common parts for CanStore/StoreItem functions
InventoryResult CanStoreItem_InSpecificSlot(uint8 bag, uint8 slot, ItemPosCountVec& dest, ItemTemplate const* pProto, uint32& count, bool swap, Item* pSrcItem) const;
@@ -2627,8 +2670,8 @@ class Player : public Unit, public GridObject<Player>
uint32 _activeCheats;
};
-void AddItemsSetItem(Player*player, Item* item);
-void RemoveItemsSetItem(Player*player, ItemTemplate const* proto);
+void AddItemsSetItem(Player* player, Item* item);
+void RemoveItemsSetItem(Player* player, ItemTemplate const* proto);
// "the bodies of template functions must be made available in a header file"
template <class T> T Player::ApplySpellMod(uint32 spellId, SpellModOp op, T &basevalue, Spell* spell)
diff --git a/src/server/game/Entities/Player/SocialMgr.cpp b/src/server/game/Entities/Player/SocialMgr.cpp
index 8c8e470f80b..f2c2ada5666 100644
--- a/src/server/game/Entities/Player/SocialMgr.cpp
+++ b/src/server/game/Entities/Player/SocialMgr.cpp
@@ -19,7 +19,7 @@
#include "SocialMgr.h"
#include "DatabaseEnv.h"
-#include "Opcodes.h"
+#include "WorldSession.h"
#include "WorldPacket.h"
#include "Player.h"
#include "ObjectMgr.h"
@@ -187,7 +187,7 @@ bool PlayerSocial::HasIgnore(uint32 ignore_guid)
{
PlayerSocialMap::const_iterator itr = m_playerSocialMap.find(ignore_guid);
if (itr != m_playerSocialMap.end())
- return itr->second.Flags & SOCIAL_FLAG_IGNORED;
+ return (itr->second.Flags & SOCIAL_FLAG_IGNORED) != 0;
return false;
}
diff --git a/src/server/game/Entities/Player/SocialMgr.h b/src/server/game/Entities/Player/SocialMgr.h
index 910c9164738..3ed41a847ef 100644
--- a/src/server/game/Entities/Player/SocialMgr.h
+++ b/src/server/game/Entities/Player/SocialMgr.h
@@ -19,7 +19,6 @@
#ifndef __TRINITY_SOCIALMGR_H
#define __TRINITY_SOCIALMGR_H
-#include <ace/Singleton.h>
#include "DatabaseEnv.h"
#include "Common.h"
@@ -123,13 +122,17 @@ class PlayerSocial
class SocialMgr
{
- friend class ACE_Singleton<SocialMgr, ACE_Null_Mutex>;
-
private:
SocialMgr();
~SocialMgr();
public:
+ static SocialMgr* instance()
+ {
+ static SocialMgr instance;
+ return &instance;
+ }
+
// Misc
void RemovePlayerSocial(uint32 guid) { m_socialMap.erase(guid); }
@@ -144,5 +147,5 @@ class SocialMgr
SocialMap m_socialMap;
};
-#define sSocialMgr ACE_Singleton<SocialMgr, ACE_Null_Mutex>::instance()
+#define sSocialMgr SocialMgr::instance()
#endif
diff --git a/src/server/game/Entities/Totem/Totem.h b/src/server/game/Entities/Totem/Totem.h
index 6364157982e..534e818842e 100644
--- a/src/server/game/Entities/Totem/Totem.h
+++ b/src/server/game/Entities/Totem/Totem.h
@@ -37,25 +37,25 @@ class Totem : public Minion
public:
Totem(SummonPropertiesEntry const* properties, Unit* owner);
virtual ~Totem() { }
- void Update(uint32 time);
- void InitStats(uint32 duration);
- void InitSummon();
- void UnSummon(uint32 msTime = 0);
+ void Update(uint32 time) override;
+ void InitStats(uint32 duration) override;
+ void InitSummon() override;
+ void UnSummon(uint32 msTime = 0) override;
uint32 GetSpell(uint8 slot = 0) const { return m_spells[slot]; }
uint32 GetTotemDuration() const { return m_duration; }
void SetTotemDuration(uint32 duration) { m_duration = duration; }
TotemType GetTotemType() const { return m_type; }
- bool UpdateStats(Stats /*stat*/) { return true; }
- bool UpdateAllStats() { return true; }
- void UpdateResistances(uint32 /*school*/) { }
- void UpdateArmor() { }
- void UpdateMaxHealth() { }
- void UpdateMaxPower(Powers /*power*/) { }
- void UpdateAttackPowerAndDamage(bool /*ranged*/) { }
- void UpdateDamagePhysical(WeaponAttackType /*attType*/) OVERRIDE { }
+ bool UpdateStats(Stats /*stat*/) override { return true; }
+ bool UpdateAllStats() override { return true; }
+ void UpdateResistances(uint32 /*school*/) override { }
+ void UpdateArmor() override { }
+ void UpdateMaxHealth() override { }
+ void UpdateMaxPower(Powers /*power*/) override { }
+ void UpdateAttackPowerAndDamage(bool /*ranged*/) override { }
+ void UpdateDamagePhysical(WeaponAttackType /*attType*/) override { }
- bool IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) const;
+ bool IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) const override;
protected:
TotemType m_type;
diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp
index cf7cadadbfd..e7633d1f097 100644
--- a/src/server/game/Entities/Transport/Transport.cpp
+++ b/src/server/game/Entities/Transport/Transport.cpp
@@ -35,7 +35,8 @@
Transport::Transport() : GameObject(),
_transportInfo(NULL), _isMoving(true), _pendingStop(false),
- _triggeredArrivalEvent(false), _triggeredDepartureEvent(false)
+ _triggeredArrivalEvent(false), _triggeredDepartureEvent(false),
+ _passengerTeleportItr(_passengers.begin()), _delayedAddModel(false)
{
m_updateFlag = UPDATEFLAG_TRANSPORT | UPDATEFLAG_LOWGUID | UPDATEFLAG_STATIONARY_POSITION | UPDATEFLAG_ROTATION;
}
@@ -85,8 +86,8 @@ bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, floa
_triggeredDepartureEvent = false;
m_goValue.Transport.PathProgress = 0;
- SetFloatValue(OBJECT_FIELD_SCALE_X, goinfo->size);
- SetUInt32Value(GAMEOBJECT_FACTION, goinfo->faction);
+ SetObjectScale(goinfo->size);
+ SetFaction(goinfo->faction);
SetUInt32Value(GAMEOBJECT_FLAGS, goinfo->flags);
SetPeriod(tInfo->pathTime);
SetEntry(goinfo->entry);
@@ -107,9 +108,6 @@ void Transport::CleanupsBeforeDelete(bool finalCleanup /*= true*/)
while (!_passengers.empty())
{
WorldObject* obj = *_passengers.begin();
- obj->m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
- obj->m_movementInfo.transport.Reset();
- obj->SetTransport(NULL);
RemovePassenger(obj);
}
@@ -189,6 +187,14 @@ void Transport::Update(uint32 diff)
return; // Update more in new map thread
}
+ // Add model to map after we are fully done with moving maps
+ if (_delayedAddModel)
+ {
+ _delayedAddModel = false;
+ if (m_model)
+ GetMap()->InsertGameObjectModel(*m_model);
+ }
+
// Set position
_positionChangeTimer.Update(diff);
if (_positionChangeTimer.Passed())
@@ -200,7 +206,7 @@ void Transport::Update(uint32 diff)
G3D::Vector3 pos, dir;
_currentFrame->Spline->evaluate_percent(_currentFrame->Index, t, pos);
_currentFrame->Spline->evaluate_derivative(_currentFrame->Index, t, dir);
- UpdatePosition(pos.x, pos.y, pos.z, atan2(dir.y, dir.x) + M_PI);
+ UpdatePosition(pos.x, pos.y, pos.z, std::atan2(dir.y, dir.x) + float(M_PI));
}
else
{
@@ -210,8 +216,14 @@ void Transport::Update(uint32 diff)
3. transport moves from active to inactive grid
4. the grid that transport is currently in unloads
*/
- if (_staticPassengers.empty() && GetMap()->IsGridLoaded(GetPositionX(), GetPositionY())) // 2.
+ bool gridActive = GetMap()->IsGridLoaded(GetPositionX(), GetPositionY());
+
+ if (_staticPassengers.empty() && gridActive) // 2.
LoadStaticPassengers();
+ else if (!_staticPassengers.empty() && !gridActive)
+ // 4. - if transports stopped on grid edge, some passengers can remain in active grids
+ // unload all static passengers otherwise passengers won't load correctly when the grid that transport is currently in becomes active
+ UnloadStaticPassengers();
}
}
@@ -225,6 +237,9 @@ void Transport::AddPassenger(WorldObject* passenger)
if (_passengers.insert(passenger).second)
{
+ passenger->SetTransport(this);
+ passenger->m_movementInfo.AddMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
+ passenger->m_movementInfo.transport.guid = GetGUID();
TC_LOG_DEBUG("entities.transport", "Object %s boarded transport %s.", passenger->GetName().c_str(), GetName().c_str());
if (Player* plr = passenger->ToPlayer())
@@ -234,8 +249,27 @@ void Transport::AddPassenger(WorldObject* passenger)
void Transport::RemovePassenger(WorldObject* passenger)
{
- if (_passengers.erase(passenger) || _staticPassengers.erase(passenger)) // static passenger can remove itself in case of grid unload
+ bool erased = false;
+ if (_passengerTeleportItr != _passengers.end())
{
+ PassengerSet::iterator itr = _passengers.find(passenger);
+ if (itr != _passengers.end())
+ {
+ if (itr == _passengerTeleportItr)
+ ++_passengerTeleportItr;
+
+ _passengers.erase(itr);
+ erased = true;
+ }
+ }
+ else
+ erased = _passengers.erase(passenger) > 0;
+
+ if (erased || _staticPassengers.erase(passenger)) // static passenger can remove itself in case of grid unload
+ {
+ passenger->SetTransport(NULL);
+ passenger->m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
+ passenger->m_movementInfo.transport.Reset();
TC_LOG_DEBUG("entities.transport", "Object %s removed from transport %s.", passenger->GetName().c_str(), GetName().c_str());
if (Player* plr = passenger->ToPlayer())
@@ -384,13 +418,8 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu
}
uint32 phase = PHASEMASK_NORMAL;
- uint32 team = 0;
if (summoner)
- {
phase = summoner->GetPhaseMask();
- if (summoner->GetTypeId() == TYPEID_PLAYER)
- team = summoner->ToPlayer()->GetTeam();
- }
TempSummon* summon = NULL;
switch (mask)
@@ -416,7 +445,7 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu
pos.GetPosition(x, y, z, o);
CalculatePassengerPosition(x, y, z, &o);
- if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, phase, entry, vehId, team, x, y, z, o))
+ if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, phase, entry, x, y, z, o, nullptr, vehId))
{
delete summon;
return NULL;
@@ -455,6 +484,7 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu
void Transport::UpdatePosition(float x, float y, float z, float o)
{
bool newActive = GetMap()->IsGridLoaded(x, y);
+ Cell oldCell(GetPositionX(), GetPositionY());
Relocate(x, y, z, o);
UpdateModelPosition();
@@ -469,7 +499,7 @@ void Transport::UpdatePosition(float x, float y, float z, float o)
*/
if (_staticPassengers.empty() && newActive) // 1.
LoadStaticPassengers();
- else if (!_staticPassengers.empty() && !newActive && Cell(x, y).DiffGrid(Cell(GetPositionX(), GetPositionY()))) // 3.
+ else if (!_staticPassengers.empty() && !newActive && oldCell.DiffGrid(Cell(GetPositionX(), GetPositionY()))) // 3.
UnloadStaticPassengers();
else
UpdatePassengerPositions(_staticPassengers);
@@ -568,9 +598,9 @@ bool Transport::TeleportTransport(uint32 newMapid, float x, float y, float z, fl
GetMap()->RemoveFromMap<Transport>(this, false);
SetMap(newMap);
- for (std::set<WorldObject*>::iterator itr = _passengers.begin(); itr != _passengers.end();)
+ for (_passengerTeleportItr = _passengers.begin(); _passengerTeleportItr != _passengers.end();)
{
- WorldObject* obj = (*itr++);
+ WorldObject* obj = (*_passengerTeleportItr++);
float destX, destY, destZ, destO;
obj->m_movementInfo.transport.pos.GetPosition(destX, destY, destZ, destO);
@@ -593,7 +623,7 @@ bool Transport::TeleportTransport(uint32 newMapid, float x, float y, float z, fl
}
case TYPEID_PLAYER:
if (!obj->ToPlayer()->TeleportTo(newMapid, destX, destY, destZ, destO, TELE_TO_NOT_LEAVE_TRANSPORT))
- _passengers.erase(obj);
+ RemovePassenger(obj);
break;
case TYPEID_DYNAMICOBJECT:
obj->AddObjectToRemoveList();
@@ -604,14 +634,13 @@ bool Transport::TeleportTransport(uint32 newMapid, float x, float y, float z, fl
}
Relocate(x, y, z, o);
- UpdateModelPosition();
GetMap()->AddToMap<Transport>(this);
return true;
}
else
{
// Teleport players, they need to know it
- for (std::set<WorldObject*>::iterator itr = _passengers.begin(); itr != _passengers.end(); ++itr)
+ for (PassengerSet::iterator itr = _passengers.begin(); itr != _passengers.end(); ++itr)
{
if ((*itr)->GetTypeId() == TYPEID_PLAYER)
{
@@ -628,9 +657,9 @@ bool Transport::TeleportTransport(uint32 newMapid, float x, float y, float z, fl
}
}
-void Transport::UpdatePassengerPositions(std::set<WorldObject*>& passengers)
+void Transport::UpdatePassengerPositions(PassengerSet& passengers)
{
- for (std::set<WorldObject*>::iterator itr = passengers.begin(); itr != passengers.end(); ++itr)
+ for (PassengerSet::iterator itr = passengers.begin(); itr != passengers.end(); ++itr)
{
WorldObject* passenger = *itr;
// transport teleported but passenger not yet (can happen for players)
diff --git a/src/server/game/Entities/Transport/Transport.h b/src/server/game/Entities/Transport/Transport.h
index 398356c4980..2c924eb33ed 100644
--- a/src/server/game/Entities/Transport/Transport.h
+++ b/src/server/game/Entities/Transport/Transport.h
@@ -31,18 +31,20 @@ class Transport : public GameObject, public TransportBase
Transport();
public:
+ typedef std::set<WorldObject*> PassengerSet;
+
~Transport();
bool Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress);
- void CleanupsBeforeDelete(bool finalCleanup = true) OVERRIDE;
+ void CleanupsBeforeDelete(bool finalCleanup = true) override;
- void Update(uint32 diff) OVERRIDE;
+ void Update(uint32 diff) override;
- void BuildUpdate(UpdateDataMapType& data_map) OVERRIDE;
+ void BuildUpdate(UpdateDataMapType& data_map) override;
void AddPassenger(WorldObject* passenger);
void RemovePassenger(WorldObject* passenger);
- std::set<WorldObject*> const& GetPassengers() const { return _passengers; }
+ PassengerSet const& GetPassengers() const { return _passengers; }
Creature* CreateNPCPassenger(uint32 guid, CreatureData const* data);
GameObject* CreateGOPassenger(uint32 guid, GameObjectData const* data);
@@ -66,13 +68,13 @@ class Transport : public GameObject, public TransportBase
TempSummon* SummonPassenger(uint32 entry, Position const& pos, TempSummonType summonType, SummonPropertiesEntry const* properties = NULL, uint32 duration = 0, Unit* summoner = NULL, uint32 spellId = 0, uint32 vehId = 0);
/// This method transforms supplied transport offsets into global coordinates
- void CalculatePassengerPosition(float& x, float& y, float& z, float* o = NULL) const OVERRIDE
+ void CalculatePassengerPosition(float& x, float& y, float& z, float* o = NULL) const override
{
TransportBase::CalculatePassengerPosition(x, y, z, o, GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation());
}
/// This method transforms supplied global coordinates into local offsets
- void CalculatePassengerOffset(float& x, float& y, float& z, float* o = NULL) const OVERRIDE
+ void CalculatePassengerOffset(float& x, float& y, float& z, float* o = NULL) const override
{
TransportBase::CalculatePassengerOffset(x, y, z, o, GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation());
}
@@ -93,13 +95,15 @@ class Transport : public GameObject, public TransportBase
void EnableMovement(bool enabled);
+ void SetDelayedAddModelToMap() { _delayedAddModel = true; }
+
TransportTemplate const* GetTransportTemplate() const { return _transportInfo; }
private:
void MoveToNextWaypoint();
float CalculateSegmentPos(float perc);
bool TeleportTransport(uint32 newMapid, float x, float y, float z, float o);
- void UpdatePassengerPositions(std::set<WorldObject*>& passengers);
+ void UpdatePassengerPositions(PassengerSet& passengers);
void DoEventIfAny(KeyFrame const& node, bool departure);
//! Helpers to know if stop frame was reached
@@ -118,8 +122,11 @@ class Transport : public GameObject, public TransportBase
bool _triggeredArrivalEvent;
bool _triggeredDepartureEvent;
- std::set<WorldObject*> _passengers;
- std::set<WorldObject*> _staticPassengers;
+ PassengerSet _passengers;
+ PassengerSet::iterator _passengerTeleportItr;
+ PassengerSet _staticPassengers;
+
+ bool _delayedAddModel;
};
#endif
diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp
index 04136221d0d..94f0a90be2f 100644
--- a/src/server/game/Entities/Unit/StatSystem.cpp
+++ b/src/server/game/Entities/Unit/StatSystem.cpp
@@ -878,7 +878,7 @@ void Player::UpdateManaRegen()
{
float Intellect = GetStat(STAT_INTELLECT);
// Mana regen from spirit and intellect
- float power_regen = sqrt(Intellect) * OCTRegenMPPerSpirit();
+ float power_regen = std::sqrt(Intellect) * OCTRegenMPPerSpirit();
// Apply PCT bonus from SPELL_AURA_MOD_POWER_REGEN_PERCENT aura on spirit base regen
power_regen *= GetTotalAuraMultiplierByMiscValue(SPELL_AURA_MOD_POWER_REGEN_PERCENT, POWER_MANA);
@@ -1037,17 +1037,21 @@ void Creature::UpdateAttackPowerAndDamage(bool ranged)
void Creature::CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float& minDamage, float& maxDamage)
{
+ float variance = 1.0f;
UnitMods unitMod;
switch (attType)
{
case BASE_ATTACK:
default:
+ variance = GetCreatureTemplate()->BaseVariance;
unitMod = UNIT_MOD_DAMAGE_MAINHAND;
break;
case OFF_ATTACK:
+ variance = GetCreatureTemplate()->BaseVariance;
unitMod = UNIT_MOD_DAMAGE_OFFHAND;
break;
case RANGED_ATTACK:
+ variance = GetCreatureTemplate()->RangeVariance;
unitMod = UNIT_MOD_DAMAGE_RANGED;
break;
}
@@ -1070,11 +1074,11 @@ void Creature::CalculateMinMaxDamage(WeaponAttackType attType, bool normalized,
float attackPower = GetTotalAttackPowerValue(attType);
float attackSpeedMulti = GetAPMultiplier(attType, normalized);
- float baseValue = GetModifierValue(unitMod, BASE_VALUE) + (attackPower / 14.0f);
+ float baseValue = GetModifierValue(unitMod, BASE_VALUE) + (attackPower / 14.0f) * variance;
float basePct = GetModifierValue(unitMod, BASE_PCT) * attackSpeedMulti;
float totalValue = GetModifierValue(unitMod, TOTAL_VALUE);
float totalPct = addTotalPct ? GetModifierValue(unitMod, TOTAL_PCT) : 1.0f;
- float dmgMultiplier = GetCreatureTemplate()->dmg_multiplier; // = dmg_multiplier * _GetDamageMod(rank);
+ float dmgMultiplier = GetCreatureTemplate()->ModDamage; // = ModDamage * _GetDamageMod(rank);
minDamage = ((weaponMinDamage + baseValue) * dmgMultiplier * basePct + totalValue) * totalPct;
maxDamage = ((weaponMaxDamage + baseValue) * dmgMultiplier * basePct + totalValue) * totalPct;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 06628de4050..aed06441dd7 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -21,6 +21,7 @@
#include "Battlefield.h"
#include "BattlefieldMgr.h"
#include "Battleground.h"
+#include "BattlegroundScore.h"
#include "CellImpl.h"
#include "ConditionMgr.h"
#include "CreatureAI.h"
@@ -61,7 +62,7 @@
#include "WorldPacket.h"
#include "WorldSession.h"
-#include <math.h>
+#include <cmath>
float baseMoveSpeed[MAX_MOVE_TYPE] =
{
@@ -155,11 +156,6 @@ ProcEventInfo::ProcEventInfo(Unit* actor, Unit* actionTarget, Unit* procTarget,
_damageInfo(damageInfo), _healInfo(healInfo)
{ }
-// we can disable this warning for this since it only
-// causes undefined behavior when passed to the base class constructor
-#ifdef _MSC_VER
-#pragma warning(disable:4355)
-#endif
Unit::Unit(bool isWorldObject) :
WorldObject(isWorldObject), m_movedPlayer(NULL), m_lastSanctuaryTime(0),
IsAIEnabled(false), NeedChangeAI(false), LastCharmerGUID(0),
@@ -169,9 +165,6 @@ Unit::Unit(bool isWorldObject) :
m_vehicle(NULL), m_vehicleKit(NULL), m_unitTypeMask(UNIT_MASK_NONE),
m_HostileRefManager(this), _lastDamagedTime(0)
{
-#ifdef _MSC_VER
-#pragma warning(default:4355)
-#endif
m_objectType |= TYPEMASK_UNIT;
m_objectTypeId = TYPEID_UNIT;
@@ -371,7 +364,7 @@ void Unit::Update(uint32 p_time)
bool Unit::haveOffhandWeapon() const
{
if (Player const* player = ToPlayer())
- return player->GetWeaponForAttack(OFF_ATTACK, true);
+ return player->GetWeaponForAttack(OFF_ATTACK, true) != nullptr;
return CanDualWield();
}
@@ -782,7 +775,8 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam
if (damagetype != NODAMAGE && damage)
{
- if (victim != this && victim->GetTypeId() == TYPEID_PLAYER) // does not support creature push_back
+ if (victim != this && victim->GetTypeId() == TYPEID_PLAYER && // does not support creature push_back
+ (!spellProto || !(spellProto->AttributesEx7 & SPELL_ATTR7_NO_PUSHBACK_ON_DAMAGE)))
{
if (damagetype != DOT)
if (Spell* spell = victim->m_currentSpells[CURRENT_GENERIC_SPELL])
@@ -985,86 +979,90 @@ void Unit::CalculateSpellDamageTaken(SpellNonMeleeDamage* damageInfo, int32 dama
SpellSchoolMask damageSchoolMask = SpellSchoolMask(damageInfo->schoolMask);
uint32 crTypeMask = victim->GetCreatureTypeMask();
- if (IsDamageReducedByArmor(damageSchoolMask, spellInfo))
- damage = CalcArmorReducedDamage(victim, damage, spellInfo, attackType);
-
- bool blocked = false;
- // Per-school calc
- switch (spellInfo->DmgClass)
+ // Spells with SPELL_ATTR4_FIXED_DAMAGE ignore resilience because their damage is based off another spell's damage.
+ if (!(spellInfo->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE))
{
- // Melee and Ranged Spells
- case SPELL_DAMAGE_CLASS_RANGED:
- case SPELL_DAMAGE_CLASS_MELEE:
+ if (IsDamageReducedByArmor(damageSchoolMask, spellInfo))
+ damage = CalcArmorReducedDamage(victim, damage, spellInfo, attackType);
+
+ bool blocked = false;
+ // Per-school calc
+ switch (spellInfo->DmgClass)
{
- // Physical Damage
- if (damageSchoolMask & SPELL_SCHOOL_MASK_NORMAL)
+ // Melee and Ranged Spells
+ case SPELL_DAMAGE_CLASS_RANGED:
+ case SPELL_DAMAGE_CLASS_MELEE:
{
- // Get blocked status
- blocked = isSpellBlocked(victim, spellInfo, attackType);
- }
+ // Physical Damage
+ if (damageSchoolMask & SPELL_SCHOOL_MASK_NORMAL)
+ {
+ // Get blocked status
+ blocked = isSpellBlocked(victim, spellInfo, attackType);
+ }
- if (crit)
- {
- damageInfo->HitInfo |= SPELL_HIT_TYPE_CRIT;
-
- // Calculate crit bonus
- uint32 crit_bonus = damage;
- // Apply crit_damage bonus for melee spells
- if (Player* modOwner = GetSpellModOwner())
- modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_CRIT_DAMAGE_BONUS, crit_bonus);
- damage += crit_bonus;
-
- // Apply SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE or SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE
- float critPctDamageMod = 0.0f;
- if (attackType == RANGED_ATTACK)
- critPctDamageMod += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE);
- else
- critPctDamageMod += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE);
+ if (crit)
+ {
+ damageInfo->HitInfo |= SPELL_HIT_TYPE_CRIT;
+
+ // Calculate crit bonus
+ uint32 crit_bonus = damage;
+ // Apply crit_damage bonus for melee spells
+ if (Player* modOwner = GetSpellModOwner())
+ modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_CRIT_DAMAGE_BONUS, crit_bonus);
+ damage += crit_bonus;
+
+ // Apply SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE or SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE
+ float critPctDamageMod = 0.0f;
+ if (attackType == RANGED_ATTACK)
+ critPctDamageMod += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE);
+ else
+ critPctDamageMod += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE);
- // Increase crit damage from SPELL_AURA_MOD_CRIT_DAMAGE_BONUS
- critPctDamageMod += (GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CRIT_DAMAGE_BONUS, spellInfo->GetSchoolMask()) - 1.0f) * 100;
+ // Increase crit damage from SPELL_AURA_MOD_CRIT_DAMAGE_BONUS
+ critPctDamageMod += (GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CRIT_DAMAGE_BONUS, spellInfo->GetSchoolMask()) - 1.0f) * 100;
- // Increase crit damage from SPELL_AURA_MOD_CRIT_PERCENT_VERSUS
- critPctDamageMod += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_CRIT_PERCENT_VERSUS, crTypeMask);
+ // Increase crit damage from SPELL_AURA_MOD_CRIT_PERCENT_VERSUS
+ critPctDamageMod += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_CRIT_PERCENT_VERSUS, crTypeMask);
- if (critPctDamageMod != 0)
- AddPct(damage, critPctDamageMod);
- }
+ if (critPctDamageMod != 0)
+ AddPct(damage, critPctDamageMod);
+ }
- // Spell weapon based damage CAN BE crit & blocked at same time
- if (blocked)
- {
- damageInfo->blocked = victim->GetShieldBlockValue();
- // double blocked amount if block is critical
- if (victim->isBlockCritical())
- damageInfo->blocked += damageInfo->blocked;
- if (damage < int32(damageInfo->blocked))
- damageInfo->blocked = uint32(damage);
- damage -= damageInfo->blocked;
- }
+ // Spell weapon based damage CAN BE crit & blocked at same time
+ if (blocked)
+ {
+ damageInfo->blocked = victim->GetShieldBlockValue();
+ // double blocked amount if block is critical
+ if (victim->isBlockCritical())
+ damageInfo->blocked += damageInfo->blocked;
+ if (damage < int32(damageInfo->blocked))
+ damageInfo->blocked = uint32(damage);
+ damage -= damageInfo->blocked;
+ }
- if (attackType != RANGED_ATTACK)
- ApplyResilience(victim, NULL, &damage, crit, CR_CRIT_TAKEN_MELEE);
- else
- ApplyResilience(victim, NULL, &damage, crit, CR_CRIT_TAKEN_RANGED);
- break;
- }
- // Magical Attacks
- case SPELL_DAMAGE_CLASS_NONE:
- case SPELL_DAMAGE_CLASS_MAGIC:
- {
- // If crit add critical bonus
- if (crit)
- {
- damageInfo->HitInfo |= SPELL_HIT_TYPE_CRIT;
- damage = SpellCriticalDamageBonus(spellInfo, damage, victim);
+ if (attackType != RANGED_ATTACK)
+ ApplyResilience(victim, NULL, &damage, crit, CR_CRIT_TAKEN_MELEE);
+ else
+ ApplyResilience(victim, NULL, &damage, crit, CR_CRIT_TAKEN_RANGED);
+ break;
}
+ // Magical Attacks
+ case SPELL_DAMAGE_CLASS_NONE:
+ case SPELL_DAMAGE_CLASS_MAGIC:
+ {
+ // If crit add critical bonus
+ if (crit)
+ {
+ damageInfo->HitInfo |= SPELL_HIT_TYPE_CRIT;
+ damage = SpellCriticalDamageBonus(spellInfo, damage, victim);
+ }
- ApplyResilience(victim, NULL, &damage, crit, CR_CRIT_TAKEN_SPELL);
- break;
+ ApplyResilience(victim, NULL, &damage, crit, CR_CRIT_TAKEN_SPELL);
+ break;
+ }
+ default:
+ break;
}
- default:
- break;
}
// Script Hook For CalculateSpellDamageTaken -- Allow scripts to change the Damage post class mitigation calculations
@@ -1365,7 +1363,7 @@ void Unit::DealMeleeDamage(CalcDamageInfo* damageInfo, bool durabilityLoss)
// If this is a creature and it attacks from behind it has a probability to daze it's victim
if ((damageInfo->hitOutCome == MELEE_HIT_CRIT || damageInfo->hitOutCome == MELEE_HIT_CRUSHING || damageInfo->hitOutCome == MELEE_HIT_NORMAL || damageInfo->hitOutCome == MELEE_HIT_GLANCING) &&
- GetTypeId() != TYPEID_PLAYER && !ToCreature()->IsControlledByPlayer() && !victim->HasInArc(M_PI, this)
+ GetTypeId() != TYPEID_PLAYER && !ToCreature()->IsControlledByPlayer() && !victim->HasInArc(float(M_PI), this)
&& (victim->GetTypeId() == TYPEID_PLAYER || !victim->ToCreature()->isWorldBoss())&& !victim->IsVehicle())
{
// -probability is between 0% and 40%
@@ -1379,7 +1377,7 @@ void Unit::DealMeleeDamage(CalcDamageInfo* damageInfo, bool durabilityLoss)
uint32 VictimDefense=victim->GetDefenseSkillValue();
uint32 AttackerMeleeSkill=GetUnitMeleeSkill();
- Probability *= AttackerMeleeSkill/(float)VictimDefense*0.16;
+ Probability *= AttackerMeleeSkill/(float)VictimDefense*0.16f;
if (Probability < 0)
Probability = 0;
@@ -1491,14 +1489,14 @@ uint32 Unit::CalcArmorReducedDamage(Unit* victim, const uint32 damage, SpellInfo
{
if ((*j)->GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL
&& (*j)->IsAffectedOnSpell(spellInfo))
- armor = floor(AddPct(armor, -(*j)->GetAmount()));
+ armor = std::floor(AddPct(armor, -(*j)->GetAmount()));
}
AuraEffectList const& resIgnoreAuras = GetAuraEffectsByType(SPELL_AURA_MOD_IGNORE_TARGET_RESIST);
for (AuraEffectList::const_iterator j = resIgnoreAuras.begin(); j != resIgnoreAuras.end(); ++j)
{
if ((*j)->GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL)
- armor = floor(AddPct(armor, -(*j)->GetAmount()));
+ armor = std::floor(AddPct(armor, -(*j)->GetAmount()));
}
// Apply Player CR_ARMOR_PENETRATION rating and buffs from stances\specializations etc.
@@ -1609,7 +1607,7 @@ uint32 Unit::CalcSpellResistance(Unit* victim, SpellSchoolMask schoolMask, Spell
float discreteResistProbability[11];
for (uint32 i = 0; i < 11; ++i)
{
- discreteResistProbability[i] = 0.5f - 2.5f * fabs(0.1f * i - averageResist);
+ discreteResistProbability[i] = 0.5f - 2.5f * std::fabs(0.1f * i - averageResist);
if (discreteResistProbability[i] < 0.0f)
discreteResistProbability[i] = 0.0f;
}
@@ -1842,14 +1840,15 @@ void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffe
splitDamage = RoundToInterval(splitDamage, uint32(0), uint32(dmgInfo.GetDamage()));
dmgInfo.AbsorbDamage(splitDamage);
- uint32 splitted = splitDamage;
uint32 split_absorb = 0;
- DealDamageMods(caster, splitted, &split_absorb);
+ DealDamageMods(caster, splitDamage, &split_absorb);
- SendSpellNonMeleeDamageLog(caster, (*itr)->GetSpellInfo()->Id, splitted, schoolMask, split_absorb, 0, false, 0, false);
+ SendSpellNonMeleeDamageLog(caster, (*itr)->GetSpellInfo()->Id, splitDamage, schoolMask, split_absorb, 0, false, 0, false);
- CleanDamage cleanDamage = CleanDamage(splitted, 0, BASE_ATTACK, MELEE_HIT_NORMAL);
- DealDamage(caster, splitted, &cleanDamage, DIRECT_DAMAGE, schoolMask, (*itr)->GetSpellInfo(), false);
+ CleanDamage cleanDamage = CleanDamage(splitDamage, 0, BASE_ATTACK, MELEE_HIT_NORMAL);
+ DealDamage(caster, splitDamage, &cleanDamage, DIRECT_DAMAGE, schoolMask, (*itr)->GetSpellInfo(), false);
+ // break 'Fear' and similar auras
+ caster->ProcDamageAndSpellFor(true, this, PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG, PROC_EX_NORMAL_HIT, BASE_ATTACK, (*itr)->GetSpellInfo(), splitDamage);
}
}
@@ -2033,7 +2032,7 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit* victim, WeaponAttackT
// Dodge chance
// only players can't dodge if attacker is behind
- if (victim->GetTypeId() == TYPEID_PLAYER && !victim->HasInArc(M_PI, this) && !victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION))
+ if (victim->GetTypeId() == TYPEID_PLAYER && !victim->HasInArc(float(M_PI), this) && !victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION))
{
TC_LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: attack came from behind and victim was a player.");
}
@@ -2062,7 +2061,7 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit* victim, WeaponAttackT
// parry & block chances
// check if attack comes from behind, nobody can parry or block if attacker is behind
- if (!victim->HasInArc(M_PI, this) && !victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION))
+ if (!victim->HasInArc(float(M_PI), this) && !victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION))
TC_LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: attack came from behind.");
else
{
@@ -2224,7 +2223,11 @@ void Unit::SendMeleeAttackStop(Unit* victim)
{
WorldPacket data(SMSG_ATTACKSTOP, (8+8+4));
data.append(GetPackGUID());
- data.append(victim ? victim->GetPackGUID() : 0);
+ if (victim)
+ data.append(victim->GetPackGUID());
+ else
+ data << uint8(0);
+
data << uint32(0); //! Can also take the value 0x01, which seems related to updating rotation
SendMessageToSet(&data, true);
TC_LOG_DEBUG("entities.unit", "WORLD: Sent SMSG_ATTACKSTOP");
@@ -2241,7 +2244,7 @@ bool Unit::isSpellBlocked(Unit* victim, SpellInfo const* spellProto, WeaponAttac
if (spellProto && spellProto->Attributes & SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK)
return false;
- if (victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION) || victim->HasInArc(M_PI, this))
+ if (victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION) || victim->HasInArc(float(M_PI), this))
{
// Check creatures flags_extra for disable block
if (victim->GetTypeId() == TYPEID_UNIT &&
@@ -2353,7 +2356,7 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit* victim, SpellInfo const* spellInfo
bool canDodge = true;
bool canParry = true;
- bool canBlock = spellInfo->AttributesEx3 & SPELL_ATTR3_BLOCKABLE_SPELL;
+ bool canBlock = (spellInfo->AttributesEx3 & SPELL_ATTR3_BLOCKABLE_SPELL) != 0;
// Same spells cannot be parry/dodge
if (spellInfo->Attributes & SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK)
@@ -2372,7 +2375,7 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit* victim, SpellInfo const* spellInfo
canDodge = false;
// only if in front
- if (victim->HasInArc(M_PI, this) || victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION))
+ if (victim->HasInArc(float(M_PI), this) || victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION))
{
int32 deflect_chance = victim->GetTotalAuraModifier(SPELL_AURA_DEFLECT_SPELLS) * 100;
tmp += deflect_chance;
@@ -2383,7 +2386,7 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit* victim, SpellInfo const* spellInfo
}
// Check for attack from behind
- if (!victim->HasInArc(M_PI, this))
+ if (!victim->HasInArc(float(M_PI), this))
{
if (!victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION))
{
@@ -2564,7 +2567,7 @@ SpellMissInfo Unit::MagicSpellHitResult(Unit* victim, SpellInfo const* spellInfo
return SPELL_MISS_RESIST;
// cast by caster in front of victim
- if (victim->HasInArc(M_PI, this) || victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION))
+ if (victim->HasInArc(float(M_PI), this) || victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION))
{
int32 deflect_chance = victim->GetTotalAuraModifier(SPELL_AURA_DEFLECT_SPELLS) * 100;
tmp += deflect_chance;
@@ -2835,12 +2838,10 @@ uint32 Unit::GetWeaponSkillValue (WeaponAttackType attType, Unit const* target)
if (IsInFeralForm())
return GetMaxSkillValueForLevel(); // always maximized SKILL_FERAL_COMBAT in fact
- // weapon skill or (unarmed for base attack and fist weapons)
- uint32 skill;
- if (item && item->GetSkill() != SKILL_FIST_WEAPONS)
+ // weapon skill or (unarmed for base attack)
+ uint32 skill = SKILL_UNARMED;
+ if (item)
skill = item->GetSkill();
- else
- skill = SKILL_UNARMED;
// in PvP use full skill instead current skill value
value = (target && target->IsControlledByPlayer())
@@ -3080,27 +3081,26 @@ bool Unit::IsNonMeleeSpellCast(bool withDelayed, bool skipChanneled, bool skipAu
// We don't do loop here to explicitly show that melee spell is excluded.
// Maybe later some special spells will be excluded too.
- // if skipInstant then instant spells shouldn't count as being cast
- if (skipInstant && m_currentSpells[CURRENT_GENERIC_SPELL] && !m_currentSpells[CURRENT_GENERIC_SPELL]->GetCastTime())
- return false;
-
// generic spells are cast when they are not finished and not delayed
if (m_currentSpells[CURRENT_GENERIC_SPELL] &&
(m_currentSpells[CURRENT_GENERIC_SPELL]->getState() != SPELL_STATE_FINISHED) &&
(withDelayed || m_currentSpells[CURRENT_GENERIC_SPELL]->getState() != SPELL_STATE_DELAYED))
{
- if (!isAutoshoot || !(m_currentSpells[CURRENT_GENERIC_SPELL]->m_spellInfo->AttributesEx2 & SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS))
- return true;
+ if (!skipInstant || m_currentSpells[CURRENT_GENERIC_SPELL]->GetCastTime())
+ {
+ if (!isAutoshoot || !(m_currentSpells[CURRENT_GENERIC_SPELL]->m_spellInfo->AttributesEx2 & SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS))
+ return true;
+ }
}
// channeled spells may be delayed, but they are still considered cast
- else if (!skipChanneled && m_currentSpells[CURRENT_CHANNELED_SPELL] &&
+ if (!skipChanneled && m_currentSpells[CURRENT_CHANNELED_SPELL] &&
(m_currentSpells[CURRENT_CHANNELED_SPELL]->getState() != SPELL_STATE_FINISHED))
{
if (!isAutoshoot || !(m_currentSpells[CURRENT_CHANNELED_SPELL]->m_spellInfo->AttributesEx2 & SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS))
return true;
}
// autorepeat spells may be finished or delayed, but they are still considered cast
- else if (!skipAutorepeat && m_currentSpells[CURRENT_AUTOREPEAT_SPELL])
+ if (!skipAutorepeat && m_currentSpells[CURRENT_AUTOREPEAT_SPELL])
return true;
return false;
@@ -3143,7 +3143,7 @@ bool Unit::isInFrontInMap(Unit const* target, float distance, float arc) const
bool Unit::isInBackInMap(Unit const* target, float distance, float arc) const
{
- return IsWithinDistInMap(target, distance) && !HasInArc(2 * M_PI - arc, target);
+ return IsWithinDistInMap(target, distance) && !HasInArc(2 * float(M_PI) - arc, target);
}
bool Unit::isInAccessiblePlaceFor(Creature const* c) const
@@ -3354,7 +3354,7 @@ void Unit::_ApplyAuraEffect(Aura* aura, uint8 effIndex)
AuraApplication * aurApp = aura->GetApplicationOfTarget(GetGUID());
ASSERT(aurApp);
if (!aurApp->GetEffectMask())
- _ApplyAura(aurApp, 1<<effIndex);
+ _ApplyAura(aurApp, 1 << effIndex);
else
aurApp->_HandleEffect(effIndex, true);
}
@@ -3387,11 +3387,12 @@ void Unit::_ApplyAura(AuraApplication * aurApp, uint8 effMask)
return;
aura->HandleAuraSpecificMods(aurApp, caster, true, false);
+ aura->HandleAuraSpecificPeriodics(aurApp, caster);
// apply effects of the aura
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
{
- if (effMask & 1<<i && (!aurApp->GetRemoveMode()))
+ if (effMask & 1 << i && (!aurApp->GetRemoveMode()))
aurApp->_HandleEffect(i, true);
}
}
@@ -3504,6 +3505,19 @@ void Unit::_RemoveNoStackAurasDueToAura(Aura* aura)
if (spellProto->IsPassiveStackableWithRanks())
return;
+ if (!IsHighestExclusiveAura(aura))
+ {
+ if (!aura->GetSpellInfo()->IsAffectingArea())
+ {
+ Unit* caster = aura->GetCaster();
+ if (caster && caster->GetTypeId() == TYPEID_PLAYER)
+ Spell::SendCastResult(caster->ToPlayer(), aura->GetSpellInfo(), 1, SPELL_FAILED_AURA_BOUNCED);
+ }
+
+ aura->Remove();
+ return;
+ }
+
bool remove = false;
for (AuraApplicationMap::iterator i = m_appliedAuras.begin(); i != m_appliedAuras.end(); ++i)
{
@@ -3767,7 +3781,7 @@ void Unit::RemoveAurasDueToSpellBySteal(uint32 spellId, uint64 casterGUID, Unit*
}
}
- bool stealCharge = aura->GetSpellInfo()->AttributesEx7 & SPELL_ATTR7_DISPEL_CHARGES;
+ bool stealCharge = (aura->GetSpellInfo()->AttributesEx7 & SPELL_ATTR7_DISPEL_CHARGES) != 0;
// Cast duration to unsigned to prevent permanent aura's such as Righteous Fury being permanently added to caster
uint32 dur = std::min(2u * MINUTE * IN_MILLISECONDS, uint32(aura->GetDuration()));
@@ -3833,6 +3847,7 @@ void Unit::RemoveAurasByType(AuraType auraType, uint64 casterGUID, Aura* except,
{
Aura* aura = (*iter)->GetBase();
AuraApplication * aurApp = aura->GetApplicationOfTarget(GetGUID());
+ ASSERT(aurApp);
++iter;
if (aura != except && (!casterGUID || aura->GetCasterGUID() == casterGUID)
@@ -4286,7 +4301,7 @@ void Unit::GetDispellableAuraList(Unit* caster, uint32 dispelMask, DispelCharges
// The charges / stack amounts don't count towards the total number of auras that can be dispelled.
// Ie: A dispel on a target with 5 stacks of Winters Chill and a Polymorph has 1 / (1 + 1) -> 50% chance to dispell
// Polymorph instead of 1 / (5 + 1) -> 16%.
- bool dispel_charges = aura->GetSpellInfo()->AttributesEx7 & SPELL_ATTR7_DISPEL_CHARGES;
+ bool dispel_charges = (aura->GetSpellInfo()->AttributesEx7 & SPELL_ATTR7_DISPEL_CHARGES) != 0;
uint8 charges = dispel_charges ? aura->GetCharges() : aura->GetStackAmount();
if (charges > 0)
dispelList.push_back(std::make_pair(aura, charges));
@@ -6037,11 +6052,11 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
triggered_spell_id = 34299;
if (triggeredByAura->GetCasterGUID() != GetGUID())
break;
- int32 basepoints1 = triggerAmount * 2;
+ int32 basepoints1 = CalculatePct(GetMaxPower(Powers(POWER_MANA)), triggerAmount * 2);
// Improved Leader of the Pack
// Check cooldown of heal spell cooldown
if (GetTypeId() == TYPEID_PLAYER && !ToPlayer()->HasSpellCooldown(34299))
- CastCustomSpell(this, 60889, &basepoints1, 0, 0, true, 0, triggeredByAura);
+ CastCustomSpell(this, 68285, &basepoints1, 0, 0, true, 0, triggeredByAura);
break;
}
// Healing Touch (Dreamwalker Raiment set)
@@ -6877,31 +6892,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
}
break;
}
- // Item - Shaman T10 Elemental 2P Bonus
- case 70811:
- {
- // Lightning Bolt & Chain Lightning
- if (procSpell->SpellFamilyFlags[0] & 0x3)
- {
- if (ToPlayer()->HasSpellCooldown(16166))
- {
- uint32 newCooldownDelay = ToPlayer()->GetSpellCooldownDelay(16166);
- if (newCooldownDelay < 3)
- newCooldownDelay = 0;
- else
- newCooldownDelay -= 2;
- ToPlayer()->AddSpellCooldown(16166, 0, uint32(time(NULL) + newCooldownDelay));
-
- WorldPacket data(SMSG_MODIFY_COOLDOWN, 4+8+4);
- data << uint32(16166); // Spell ID
- data << uint64(GetGUID()); // Player GUID
- data << int32(-2000); // Cooldown mod in milliseconds
- ToPlayer()->GetSession()->SendPacket(&data);
- return true;
- }
- }
- return false;
- }
// Item - Shaman T10 Elemental 4P Bonus
case 70817:
{
@@ -7547,7 +7537,7 @@ bool Unit::HandleAuraProc(Unit* victim, uint32 damage, Aura* triggeredByAura, Sp
CastSpell(this, 28682, true);
- return (procEx & PROC_EX_CRITICAL_HIT);
+ return (procEx & PROC_EX_CRITICAL_HIT) != 0;
}
// Empowered Fire
case 31656:
@@ -7700,7 +7690,8 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
? ToPlayer()->GetItemByGuid(triggeredByAura->GetBase()->GetCastItemGUID()) : NULL;
// Try handle unknown trigger spells
- if (sSpellMgr->GetSpellInfo(trigger_spell_id) == NULL)
+ // triggered spells exists only in serverside spell_dbc
+ /// @todo: reverify and move these spells to spellscripts
{
switch (auraSpellInfo->SpellFamilyName)
{
@@ -8161,23 +8152,14 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
if (GetTypeId() != TYPEID_PLAYER)
return false;
+ float averageDmg = 0;
// now compute approximate weapon damage by formula from wowwiki.com
- Item* item = NULL;
if (procFlags & PROC_FLAG_DONE_OFFHAND_ATTACK)
- item = ToPlayer()->GetUseableItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND);
+ averageDmg = (GetFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE) + GetFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE)) / 2;
else
- item = ToPlayer()->GetUseableItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND);
-
- // dunno if it's really needed but will prevent any possible crashes
- if (!item)
- return false;
+ averageDmg = (GetFloatValue(UNIT_FIELD_MINDAMAGE) + GetFloatValue(UNIT_FIELD_MAXDAMAGE)) / 2;
- ItemTemplate const* weapon = item->GetTemplate();
-
- float weaponDPS = weapon->getDPS();
- float attackPower = GetTotalAttackPowerValue(BASE_ATTACK) / 14.0f;
- float weaponSpeed = float(weapon->Delay) / 1000.0f;
- basepoints0 = int32((weaponDPS + attackPower) * weaponSpeed);
+ basepoints0 = int32(averageDmg);
break;
}
// Persistent Shield (Scarab Brooch trinket)
@@ -8635,6 +8617,9 @@ bool Unit::HandleOverrideClassScriptAuraProc(Unit* victim, uint32 /*damage*/, Au
void Unit::setPowerType(Powers new_powertype)
{
+ if (getPowerType() == new_powertype)
+ return;
+
SetByteValue(UNIT_FIELD_BYTES_0, 3, new_powertype);
if (GetTypeId() == TYPEID_PLAYER)
@@ -8652,25 +8637,30 @@ void Unit::setPowerType(Powers new_powertype)
}
}
+ float powerMultiplier = 1.0f;
+ if (!IsPet())
+ if (Creature* creature = ToCreature())
+ powerMultiplier = creature->GetCreatureTemplate()->ModMana;
+
switch (new_powertype)
{
default:
case POWER_MANA:
break;
case POWER_RAGE:
- SetMaxPower(POWER_RAGE, GetCreatePowers(POWER_RAGE));
+ SetMaxPower(POWER_RAGE, uint32(std::ceil(GetCreatePowers(POWER_RAGE) * powerMultiplier)));
SetPower(POWER_RAGE, 0);
break;
case POWER_FOCUS:
- SetMaxPower(POWER_FOCUS, GetCreatePowers(POWER_FOCUS));
- SetPower(POWER_FOCUS, GetCreatePowers(POWER_FOCUS));
+ SetMaxPower(POWER_FOCUS, uint32(std::ceil(GetCreatePowers(POWER_FOCUS) * powerMultiplier)));
+ SetPower(POWER_FOCUS, uint32(std::ceil(GetCreatePowers(POWER_FOCUS) * powerMultiplier)));
break;
case POWER_ENERGY:
- SetMaxPower(POWER_ENERGY, GetCreatePowers(POWER_ENERGY));
+ SetMaxPower(POWER_ENERGY, uint32(std::ceil(GetCreatePowers(POWER_ENERGY) * powerMultiplier)));
break;
case POWER_HAPPINESS:
- SetMaxPower(POWER_HAPPINESS, GetCreatePowers(POWER_HAPPINESS));
- SetPower(POWER_HAPPINESS, GetCreatePowers(POWER_HAPPINESS));
+ SetMaxPower(POWER_HAPPINESS, uint32(std::ceil(GetCreatePowers(POWER_HAPPINESS) * powerMultiplier)));
+ SetPower(POWER_HAPPINESS, uint32(std::ceil(GetCreatePowers(POWER_HAPPINESS) * powerMultiplier)));
break;
}
}
@@ -9847,49 +9837,167 @@ uint32 Unit::SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uin
if (spellProto->AttributesEx3 & SPELL_ATTR3_NO_DONE_BONUS)
return pdamage;
- // small exception for Deep Wounds, can't find any general rule
- // should ignore ALL damage mods, they already calculated in trigger spell
- if (spellProto->Id == 12721) // Deep Wounds
- return pdamage;
-
// For totems get damage bonus from owner
if (GetTypeId() == TYPEID_UNIT && ToCreature()->IsTotem())
if (Unit* owner = GetOwner())
return owner->SpellDamageBonusDone(victim, spellProto, pdamage, damagetype);
- // Done total percent damage auras
- float DoneTotalMod = 1.0f;
float ApCoeffMod = 1.0f;
int32 DoneTotal = 0;
+ // done scripted mod (take it from owner)
+ Unit const* owner = GetOwner() ? GetOwner() : this;
+ AuraEffectList const& mOverrideClassScript = owner->GetAuraEffectsByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS);
+ for (AuraEffectList::const_iterator i = mOverrideClassScript.begin(); i != mOverrideClassScript.end(); ++i)
+ {
+ if (!(*i)->IsAffectedOnSpell(spellProto))
+ continue;
+
+ switch ((*i)->GetMiscValue())
+ {
+ case 4418: // Increased Shock Damage
+ case 4554: // Increased Lightning Damage
+ case 4555: // Improved Moonfire
+ case 5142: // Increased Lightning Damage
+ case 5147: // Improved Consecration / Libram of Resurgence
+ case 5148: // Idol of the Shooting Star
+ case 6008: // Increased Lightning Damage
+ case 8627: // Totem of Hex
+ {
+ DoneTotal += (*i)->GetAmount();
+ break;
+ }
+ }
+ }
+
+ // Custom scripted damage
+ switch (spellProto->SpellFamilyName)
+ {
+ case SPELLFAMILY_DEATHKNIGHT:
+ // Impurity (dummy effect)
+ if (GetTypeId() == TYPEID_PLAYER)
+ {
+ PlayerSpellMap playerSpells = ToPlayer()->GetSpellMap();
+ for (PlayerSpellMap::const_iterator itr = playerSpells.begin(); itr != playerSpells.end(); ++itr)
+ {
+ if (itr->second->state == PLAYERSPELL_REMOVED || itr->second->disabled)
+ continue;
+ switch (itr->first)
+ {
+ case 49220:
+ case 49633:
+ case 49635:
+ case 49636:
+ case 49638:
+ if (SpellInfo const* proto = sSpellMgr->GetSpellInfo(itr->first))
+ AddPct(ApCoeffMod, proto->Effects[0].CalcValue());
+ break;
+ }
+ }
+ }
+ break;
+ }
+
+ // Done fixed damage bonus auras
+ int32 DoneAdvertisedBenefit = SpellBaseDamageBonusDone(spellProto->GetSchoolMask());
+ // Pets just add their bonus damage to their spell damage
+ // note that their spell damage is just gain of their own auras
+ if (HasUnitTypeMask(UNIT_MASK_GUARDIAN))
+ DoneAdvertisedBenefit += ((Guardian*)this)->GetBonusDamage();
+
+ // Check for table values
+ float coeff = 0;
+ SpellBonusEntry const* bonus = sSpellMgr->GetSpellBonusData(spellProto->Id);
+ if (bonus)
+ {
+ if (damagetype == DOT)
+ {
+ coeff = bonus->dot_damage;
+ if (bonus->ap_dot_bonus > 0)
+ {
+ WeaponAttackType attType = (spellProto->IsRangedWeaponSpell() && spellProto->DmgClass != SPELL_DAMAGE_CLASS_MELEE) ? RANGED_ATTACK : BASE_ATTACK;
+ float APbonus = float(victim->GetTotalAuraModifier(attType == BASE_ATTACK ? SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS : SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS));
+ APbonus += GetTotalAttackPowerValue(attType);
+ DoneTotal += int32(bonus->ap_dot_bonus * stack * ApCoeffMod * APbonus);
+ }
+ }
+ else
+ {
+ coeff = bonus->direct_damage;
+ if (bonus->ap_bonus > 0)
+ {
+ WeaponAttackType attType = (spellProto->IsRangedWeaponSpell() && spellProto->DmgClass != SPELL_DAMAGE_CLASS_MELEE) ? RANGED_ATTACK : BASE_ATTACK;
+ float APbonus = float(victim->GetTotalAuraModifier(attType == BASE_ATTACK ? SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS : SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS));
+ APbonus += GetTotalAttackPowerValue(attType);
+ DoneTotal += int32(bonus->ap_bonus * stack * ApCoeffMod * APbonus);
+ }
+ }
+ }
+ // Default calculation
+ if (DoneAdvertisedBenefit)
+ {
+ if (!bonus || coeff < 0)
+ coeff = CalculateDefaultCoefficient(spellProto, damagetype) * int32(stack);
+
+ float factorMod = CalculateLevelPenalty(spellProto) * stack;
+
+ if (Player* modOwner = GetSpellModOwner())
+ {
+ coeff *= 100.0f;
+ modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_BONUS_MULTIPLIER, coeff);
+ coeff /= 100.0f;
+ }
+ DoneTotal += int32(DoneAdvertisedBenefit * coeff * factorMod);
+ }
+
+ // Done Percentage for DOT is already calculated, no need to do it again. The percentage mod is applied in Aura::HandleAuraSpecificMods.
+ float tmpDamage = (int32(pdamage) + DoneTotal) * (damagetype == DOT ? 1.0f : SpellDamagePctDone(victim, spellProto, damagetype));
+ // apply spellmod to Done damage (flat and pct)
+ if (Player* modOwner = GetSpellModOwner())
+ modOwner->ApplySpellMod(spellProto->Id, damagetype == DOT ? SPELLMOD_DOT : SPELLMOD_DAMAGE, tmpDamage);
+
+ return uint32(std::max(tmpDamage, 0.0f));
+}
+
+float Unit::SpellDamagePctDone(Unit* victim, SpellInfo const* spellProto, DamageEffectType damagetype) const
+{
+ if (!spellProto || !victim || damagetype == DIRECT_DAMAGE)
+ return 1.0f;
+
+ // Some spells don't benefit from pct done mods
+ if (spellProto->AttributesEx6 & SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS)
+ return 1.0f;
+
+ // For totems pct done mods are calculated when its calculation is run on the player in SpellDamageBonusDone.
+ if (GetTypeId() == TYPEID_UNIT && ToCreature()->IsTotem())
+ return 1.0f;
+
+ // Done total percent damage auras
+ float DoneTotalMod = 1.0f;
+
// Pet damage?
if (GetTypeId() == TYPEID_UNIT && !ToCreature()->IsPet())
DoneTotalMod *= ToCreature()->GetSpellDamageMod(ToCreature()->GetCreatureTemplate()->rank);
- // Some spells don't benefit from pct done mods
- if (!(spellProto->AttributesEx6 & SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS) && !spellProto->IsRankOf(sSpellMgr->GetSpellInfo(12162)))
+ AuraEffectList const& mModDamagePercentDone = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
+ for (AuraEffectList::const_iterator i = mModDamagePercentDone.begin(); i != mModDamagePercentDone.end(); ++i)
{
- AuraEffectList const& mModDamagePercentDone = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
- for (AuraEffectList::const_iterator i = mModDamagePercentDone.begin(); i != mModDamagePercentDone.end(); ++i)
- {
- if (spellProto->EquippedItemClass == -1 && (*i)->GetSpellInfo()->EquippedItemClass != -1) //prevent apply mods from weapon specific case to non weapon specific spells (Example: thunder clap and two-handed weapon specialization)
- continue;
+ if (spellProto->EquippedItemClass == -1 && (*i)->GetSpellInfo()->EquippedItemClass != -1) //prevent apply mods from weapon specific case to non weapon specific spells (Example: thunder clap and two-handed weapon specialization)
+ continue;
- if ((*i)->GetMiscValue() & spellProto->GetSchoolMask())
- {
- if ((*i)->GetSpellInfo()->EquippedItemClass == -1)
- AddPct(DoneTotalMod, (*i)->GetAmount());
- else if (!((*i)->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK) && ((*i)->GetSpellInfo()->EquippedItemSubClassMask == 0))
- AddPct(DoneTotalMod, (*i)->GetAmount());
- else if (ToPlayer() && ToPlayer()->HasItemFitToSpellRequirements((*i)->GetSpellInfo()))
- AddPct(DoneTotalMod, (*i)->GetAmount());
- }
+ if ((*i)->GetMiscValue() & spellProto->GetSchoolMask())
+ {
+ if ((*i)->GetSpellInfo()->EquippedItemClass == -1)
+ AddPct(DoneTotalMod, (*i)->GetAmount());
+ else if (!((*i)->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK) && ((*i)->GetSpellInfo()->EquippedItemSubClassMask == 0))
+ AddPct(DoneTotalMod, (*i)->GetAmount());
+ else if (ToPlayer() && ToPlayer()->HasItemFitToSpellRequirements((*i)->GetSpellInfo()))
+ AddPct(DoneTotalMod, (*i)->GetAmount());
}
}
uint32 creatureTypeMask = victim->GetCreatureTypeMask();
- // Add flat bonus from spell damage versus
- DoneTotal += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_FLAT_SPELL_DAMAGE_VERSUS, creatureTypeMask);
+
AuraEffectList const& mDamageDoneVersus = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_DONE_VERSUS);
for (AuraEffectList::const_iterator i = mDamageDoneVersus.begin(); i != mDamageDoneVersus.end(); ++i)
if (creatureTypeMask & uint32((*i)->GetMiscValue()))
@@ -9903,7 +10011,7 @@ uint32 Unit::SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uin
// done scripted mod (take it from owner)
Unit const* owner = GetOwner() ? GetOwner() : this;
- AuraEffectList const& mOverrideClassScript= owner->GetAuraEffectsByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS);
+ AuraEffectList const& mOverrideClassScript = owner->GetAuraEffectsByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS);
for (AuraEffectList::const_iterator i = mOverrideClassScript.begin(); i != mOverrideClassScript.end(); ++i)
{
if (!(*i)->IsAffectedOnSpell(spellProto))
@@ -9960,18 +10068,6 @@ uint32 Unit::SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uin
AddPct(DoneTotalMod, (*i)->GetAmount());
break;
}
- case 4418: // Increased Shock Damage
- case 4554: // Increased Lightning Damage
- case 4555: // Improved Moonfire
- case 5142: // Increased Lightning Damage
- case 5147: // Improved Consecration / Libram of Resurgence
- case 5148: // Idol of the Shooting Star
- case 6008: // Increased Lightning Damage
- case 8627: // Totem of Hex
- {
- DoneTotal += (*i)->GetAmount();
- break;
- }
// Tundra Stalker
// Merciless Combat
case 7277:
@@ -10137,14 +10233,14 @@ uint32 Unit::SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uin
break;
}
}
- // Drain Soul - increased damage for targets under 25 % HP
- if (spellProto->SpellFamilyFlags[0] & 0x00004000)
- if (HasAura(100001))
- DoneTotalMod *= 4;
// Shadow Bite (15% increase from each dot)
if (spellProto->SpellFamilyFlags[1] & 0x00400000 && IsPet())
if (uint8 count = victim->GetDoTsByCaster(GetOwnerGUID()))
AddPct(DoneTotalMod, 15 * count);
+
+ // Drain Soul - If the target is at or below 25% health, Drain Soul causes four times the normal damage
+ if (spellProto->SpellFamilyFlags[0] & 0x00004000 && !victim->HealthAbovePct(25))
+ DoneTotalMod *= 4;
break;
case SPELLFAMILY_HUNTER:
// Steady Shot
@@ -10159,101 +10255,15 @@ uint32 Unit::SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uin
if (AuraEffect* aurEff = GetDummyAuraEffect(SPELLFAMILY_DEATHKNIGHT, 2721, 0))
AddPct(DoneTotalMod, aurEff->GetAmount());
- // Sigil of the Vengeful Heart
- if (spellProto->SpellFamilyFlags[0] & 0x2000)
- if (AuraEffect* aurEff = GetAuraEffect(64962, EFFECT_1))
- AddPct(DoneTotal, aurEff->GetAmount());
-
// Glacier Rot
if (spellProto->SpellFamilyFlags[0] & 0x2 || spellProto->SpellFamilyFlags[1] & 0x6)
if (AuraEffect* aurEff = GetDummyAuraEffect(SPELLFAMILY_DEATHKNIGHT, 196, 0))
if (victim->GetDiseasesByCaster(owner->GetGUID()) > 0)
AddPct(DoneTotalMod, aurEff->GetAmount());
-
- // Impurity (dummy effect)
- if (GetTypeId() == TYPEID_PLAYER)
- {
- PlayerSpellMap playerSpells = ToPlayer()->GetSpellMap();
- for (PlayerSpellMap::const_iterator itr = playerSpells.begin(); itr != playerSpells.end(); ++itr)
- {
- if (itr->second->state == PLAYERSPELL_REMOVED || itr->second->disabled)
- continue;
- switch (itr->first)
- {
- case 49220:
- case 49633:
- case 49635:
- case 49636:
- case 49638:
- {
- if (SpellInfo const* proto = sSpellMgr->GetSpellInfo(itr->first))
- AddPct(ApCoeffMod, proto->Effects[0].CalcValue());
- }
- break;
- }
- }
- }
break;
}
- // Done fixed damage bonus auras
- int32 DoneAdvertisedBenefit = SpellBaseDamageBonusDone(spellProto->GetSchoolMask());
- // Pets just add their bonus damage to their spell damage
- // note that their spell damage is just gain of their own auras
- if (HasUnitTypeMask(UNIT_MASK_GUARDIAN))
- DoneAdvertisedBenefit += ((Guardian*)this)->GetBonusDamage();
-
- // Check for table values
- float coeff = 0;
- SpellBonusEntry const* bonus = sSpellMgr->GetSpellBonusData(spellProto->Id);
- if (bonus)
- {
- if (damagetype == DOT)
- {
- coeff = bonus->dot_damage;
- if (bonus->ap_dot_bonus > 0)
- {
- WeaponAttackType attType = (spellProto->IsRangedWeaponSpell() && spellProto->DmgClass != SPELL_DAMAGE_CLASS_MELEE) ? RANGED_ATTACK : BASE_ATTACK;
- float APbonus = float(victim->GetTotalAuraModifier(attType == BASE_ATTACK ? SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS : SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS));
- APbonus += GetTotalAttackPowerValue(attType);
- DoneTotal += int32(bonus->ap_dot_bonus * stack * ApCoeffMod * APbonus);
- }
- }
- else
- {
- coeff = bonus->direct_damage;
- if (bonus->ap_bonus > 0)
- {
- WeaponAttackType attType = (spellProto->IsRangedWeaponSpell() && spellProto->DmgClass != SPELL_DAMAGE_CLASS_MELEE) ? RANGED_ATTACK : BASE_ATTACK;
- float APbonus = float(victim->GetTotalAuraModifier(attType == BASE_ATTACK ? SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS : SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS));
- APbonus += GetTotalAttackPowerValue(attType);
- DoneTotal += int32(bonus->ap_bonus * stack * ApCoeffMod * APbonus);
- }
- }
- }
- // Default calculation
- if (DoneAdvertisedBenefit)
- {
- if (!bonus || coeff < 0)
- coeff = CalculateDefaultCoefficient(spellProto, damagetype) * int32(stack);
-
- float factorMod = CalculateLevelPenalty(spellProto) * stack;
-
- if (Player* modOwner = GetSpellModOwner())
- {
- coeff *= 100.0f;
- modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_BONUS_MULTIPLIER, coeff);
- coeff /= 100.0f;
- }
- DoneTotal += int32(DoneAdvertisedBenefit * coeff * factorMod);
- }
-
- float tmpDamage = (int32(pdamage) + DoneTotal) * DoneTotalMod;
- // apply spellmod to Done damage (flat and pct)
- if (Player* modOwner = GetSpellModOwner())
- modOwner->ApplySpellMod(spellProto->Id, damagetype == DOT ? SPELLMOD_DOT : SPELLMOD_DAMAGE, tmpDamage);
-
- return uint32(std::max(tmpDamage, 0.0f));
+ return DoneTotalMod;
}
uint32 Unit::SpellDamageBonusTaken(Unit* caster, SpellInfo const* spellProto, uint32 pdamage, DamageEffectType damagetype, uint32 stack) const
@@ -10265,18 +10275,15 @@ uint32 Unit::SpellDamageBonusTaken(Unit* caster, SpellInfo const* spellProto, ui
float TakenTotalMod = 1.0f;
float TakenTotalCasterMod = 0.0f;
- // get all auras from caster that allow the spell to ignore resistance (sanctified wrath)
- AuraEffectList const& IgnoreResistAuras = caster->GetAuraEffectsByType(SPELL_AURA_MOD_IGNORE_TARGET_RESIST);
- for (AuraEffectList::const_iterator i = IgnoreResistAuras.begin(); i != IgnoreResistAuras.end(); ++i)
+ // Mod damage from spell mechanic
+ if (uint32 mechanicMask = spellProto->GetAllEffectsMechanicMask())
{
- if ((*i)->GetMiscValue() & spellProto->GetSchoolMask())
- TakenTotalCasterMod += (float((*i)->GetAmount()));
+ AuraEffectList const& mDamageDoneMechanic = GetAuraEffectsByType(SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT);
+ for (AuraEffectList::const_iterator i = mDamageDoneMechanic.begin(); i != mDamageDoneMechanic.end(); ++i)
+ if (mechanicMask & uint32(1 << ((*i)->GetMiscValue())))
+ AddPct(TakenTotalMod, (*i)->GetAmount());
}
- // from positive and negative SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN
- // multiplicative bonus, for example Dispersion + Shadowform (0.10*0.85=0.085)
- TakenTotalMod *= GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, spellProto->GetSchoolMask());
-
//.. taken pct: dummy auras
AuraEffectList const& mDummyAuras = GetAuraEffectsByType(SPELL_AURA_DUMMY);
for (AuraEffectList::const_iterator i = mDummyAuras.begin(); i != mDummyAuras.end(); ++i)
@@ -10287,53 +10294,60 @@ uint32 Unit::SpellDamageBonusTaken(Unit* caster, SpellInfo const* spellProto, ui
case 2109:
if ((*i)->GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL)
{
- if (GetTypeId() != TYPEID_PLAYER)
- continue;
- float mod = ToPlayer()->GetRatingBonusValue(CR_CRIT_TAKEN_MELEE) * (-8.0f);
+ // Patch 2.4.3: The resilience required to reach the 90% damage reduction cap
+ // is 22.5% critical strike damage reduction, or 444 resilience.
+ // To calculate for 90%, we multiply the 100% by 4 (22.5% * 4 = 90%)
+ float mod = -1.0f * GetMeleeCritDamageReduction(400);
AddPct(TakenTotalMod, std::max(mod, float((*i)->GetAmount())));
}
break;
}
}
+ // Spells with SPELL_ATTR4_FIXED_DAMAGE should only benefit from mechanic damage mod auras.
+ if (!(spellProto->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE))
+ {
+ // get all auras from caster that allow the spell to ignore resistance (sanctified wrath)
+ AuraEffectList const& IgnoreResistAuras = caster->GetAuraEffectsByType(SPELL_AURA_MOD_IGNORE_TARGET_RESIST);
+ for (AuraEffectList::const_iterator i = IgnoreResistAuras.begin(); i != IgnoreResistAuras.end(); ++i)
+ {
+ if ((*i)->GetMiscValue() & spellProto->GetSchoolMask())
+ TakenTotalCasterMod += (float((*i)->GetAmount()));
+ }
- // From caster spells
- AuraEffectList const& mOwnerTaken = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_FROM_CASTER);
- for (AuraEffectList::const_iterator i = mOwnerTaken.begin(); i != mOwnerTaken.end(); ++i)
- if ((*i)->GetCasterGUID() == caster->GetGUID() && (*i)->IsAffectedOnSpell(spellProto))
- AddPct(TakenTotalMod, (*i)->GetAmount());
+ // from positive and negative SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN
+ // multiplicative bonus, for example Dispersion + Shadowform (0.10*0.85=0.085)
+ TakenTotalMod *= GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, spellProto->GetSchoolMask());
- // Mod damage from spell mechanic
- if (uint32 mechanicMask = spellProto->GetAllEffectsMechanicMask())
- {
- AuraEffectList const& mDamageDoneMechanic = GetAuraEffectsByType(SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT);
- for (AuraEffectList::const_iterator i = mDamageDoneMechanic.begin(); i != mDamageDoneMechanic.end(); ++i)
- if (mechanicMask & uint32(1<<((*i)->GetMiscValue())))
+ // From caster spells
+ AuraEffectList const& mOwnerTaken = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_FROM_CASTER);
+ for (AuraEffectList::const_iterator i = mOwnerTaken.begin(); i != mOwnerTaken.end(); ++i)
+ if ((*i)->GetCasterGUID() == caster->GetGUID() && (*i)->IsAffectedOnSpell(spellProto))
AddPct(TakenTotalMod, (*i)->GetAmount());
- }
- int32 TakenAdvertisedBenefit = SpellBaseDamageBonusTaken(spellProto->GetSchoolMask());
+ int32 TakenAdvertisedBenefit = SpellBaseDamageBonusTaken(spellProto->GetSchoolMask());
- // Check for table values
- float coeff = 0;
- SpellBonusEntry const* bonus = sSpellMgr->GetSpellBonusData(spellProto->Id);
- if (bonus)
- coeff = (damagetype == DOT) ? bonus->dot_damage : bonus->direct_damage;
-
- // Default calculation
- if (TakenAdvertisedBenefit)
- {
- if (!bonus || coeff < 0)
- coeff = CalculateDefaultCoefficient(spellProto, damagetype) * int32(stack);
+ // Check for table values
+ float coeff = 0;
+ SpellBonusEntry const* bonus = sSpellMgr->GetSpellBonusData(spellProto->Id);
+ if (bonus)
+ coeff = (damagetype == DOT) ? bonus->dot_damage : bonus->direct_damage;
- float factorMod = CalculateLevelPenalty(spellProto) * stack;
- // level penalty still applied on Taken bonus - is it blizzlike?
- if (Player* modOwner = GetSpellModOwner())
+ // Default calculation
+ if (TakenAdvertisedBenefit)
{
- coeff *= 100.0f;
- modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_BONUS_MULTIPLIER, coeff);
- coeff /= 100.0f;
+ if (!bonus || coeff < 0)
+ coeff = CalculateDefaultCoefficient(spellProto, damagetype) * int32(stack);
+
+ float factorMod = CalculateLevelPenalty(spellProto) * stack;
+ // level penalty still applied on Taken bonus - is it blizzlike?
+ if (Player* modOwner = GetSpellModOwner())
+ {
+ coeff *= 100.0f;
+ modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_BONUS_MULTIPLIER, coeff);
+ coeff /= 100.0f;
+ }
+ TakenTotal += int32(TakenAdvertisedBenefit * coeff * factorMod);
}
- TakenTotal+= int32(TakenAdvertisedBenefit * coeff * factorMod);
}
float tmpDamage = 0.0f;
@@ -10407,16 +10421,21 @@ int32 Unit::SpellBaseDamageBonusTaken(SpellSchoolMask schoolMask) const
return TakenAdvertisedBenefit;
}
-bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMask schoolMask, WeaponAttackType attackType) const
+bool Unit::IsSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMask schoolMask, WeaponAttackType attackType) const
+{
+ return roll_chance_f(GetUnitSpellCriticalChance(victim, spellProto, schoolMask, attackType));
+}
+
+float Unit::GetUnitSpellCriticalChance(Unit* victim, SpellInfo const* spellProto, SpellSchoolMask schoolMask, WeaponAttackType attackType) const
{
//! Mobs can't crit with spells. Player Totems can
//! Fire Elemental (from totem) can too - but this part is a hack and needs more research
- if (IS_CREATURE_GUID(GetGUID()) && !(IsTotem() && IS_PLAYER_GUID(GetOwnerGUID())) && GetEntry() != 15438)
- return false;
+ if (IS_CRE_OR_VEH_GUID(GetGUID()) && !(IsTotem() && IS_PLAYER_GUID(GetOwnerGUID())) && GetEntry() != 15438)
+ return 0.0f;
// not critting spell
if ((spellProto->AttributesEx2 & SPELL_ATTR2_CANT_CRIT))
- return false;
+ return 0.0f;
float crit_chance = 0.0f;
switch (spellProto->DmgClass)
@@ -10432,7 +10451,7 @@ bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMas
case 71646: // Item - Bauble of True Blood 25m
break;
default:
- return false;
+ return 0.0f;
}
// Do not add a break here, case fallthrough is intentional! Adding a break will make above spells unable to crit.
case SPELL_DAMAGE_CLASS_MAGIC:
@@ -10464,17 +10483,21 @@ bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMas
{
if (!((*i)->IsAffectedOnSpell(spellProto)))
continue;
- int32 modChance = 0;
+
switch ((*i)->GetMiscValue())
{
- // Shatter
- case 911: modChance+= 16;
- case 910: modChance+= 17;
- case 849: modChance+= 17;
- if (!victim->HasAuraState(AURA_STATE_FROZEN, spellProto, this))
- break;
- crit_chance+=modChance;
+ case 911: // Shatter (Rank 1)
+ if (victim->HasAuraState(AURA_STATE_FROZEN, spellProto, this))
+ crit_chance += 17;
break;
+ case 910: // Shatter (Rank 2)
+ if (victim->HasAuraState(AURA_STATE_FROZEN, spellProto, this))
+ crit_chance += 34;
+ break;
+ case 849: // Shatter (Rank 3)
+ if (victim->HasAuraState(AURA_STATE_FROZEN, spellProto, this))
+ crit_chance += 50;
+ break;
case 7917: // Glyph of Shadowburn
if (victim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, spellProto, this))
crit_chance+=(*i)->GetAmount();
@@ -10494,7 +10517,7 @@ bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMas
case SPELLFAMILY_MAGE:
// Glyph of Fire Blast
if (spellProto->SpellFamilyFlags[0] == 0x2 && spellProto->SpellIconID == 12)
- if (victim->HasAuraWithMechanic((1<<MECHANIC_STUN) | (1<<MECHANIC_KNOCKOUT)))
+ if (victim->HasAuraWithMechanic((1 << MECHANIC_STUN) | (1 << MECHANIC_KNOCKOUT)))
if (AuraEffect const* aurEff = GetAuraEffect(56369, EFFECT_0))
crit_chance += aurEff->GetAmount();
break;
@@ -10515,7 +10538,7 @@ bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMas
crit_chance += aurEff->GetAmount();
break;
}
- break;
+ break;
case SPELLFAMILY_ROGUE:
// Shiv-applied poisons can't crit
if (FindCurrentSpellBySpellId(5938))
@@ -10534,20 +10557,20 @@ bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMas
else if (spellProto->GetCategory() == 19)
{
if (victim->GetCreatureTypeMask() & CREATURE_TYPEMASK_DEMON_OR_UNDEAD)
- return true;
+ return 100.0f;
break;
}
- break;
+ break;
case SPELLFAMILY_SHAMAN:
// Lava Burst
if (spellProto->SpellFamilyFlags[1] & 0x00001000)
{
if (victim->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_SHAMAN, 0x10000000, 0, 0, GetGUID()))
if (victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE) > -100)
- return true;
+ return 100.0f;
break;
}
- break;
+ break;
}
}
break;
@@ -10568,17 +10591,17 @@ bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMas
crit_chance += rendAndTear->GetAmount();
break;
}
- break;
+ break;
case SPELLFAMILY_WARRIOR:
- // Victory Rush
- if (spellProto->SpellFamilyFlags[1] & 0x100)
- {
- // Glyph of Victory Rush
- if (AuraEffect const* aurEff = GetAuraEffect(58382, 0))
- crit_chance += aurEff->GetAmount();
- break;
- }
- break;
+ // Victory Rush
+ if (spellProto->SpellFamilyFlags[1] & 0x100)
+ {
+ // Glyph of Victory Rush
+ if (AuraEffect const* aurEff = GetAuraEffect(58382, 0))
+ crit_chance += aurEff->GetAmount();
+ break;
+ }
+ break;
}
}
/// Intentional fallback. Calculate critical strike chance for both Ranged and Melee spells
@@ -10592,17 +10615,14 @@ bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMas
break;
}
default:
- return false;
+ return 0.0f;
}
// percent done
// only players use intelligence for critical chance computations
if (Player* modOwner = GetSpellModOwner())
modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_CRITICAL_CHANCE, crit_chance);
- crit_chance = crit_chance > 0.0f ? crit_chance : 0.0f;
- if (roll_chance_f(crit_chance))
- return true;
- return false;
+ return crit_chance > 0.0f ? crit_chance : 0.0f;
}
uint32 Unit::SpellCriticalDamageBonus(SpellInfo const* spellProto, uint32 damage, Unit* victim)
@@ -10686,14 +10706,8 @@ uint32 Unit::SpellHealingBonusDone(Unit* victim, SpellInfo const* spellProto, ui
if (spellProto->SpellFamilyName == SPELLFAMILY_POTION)
return healamount;
- float DoneTotalMod = 1.0f;
int32 DoneTotal = 0;
- // Healing done percent
- AuraEffectList const& mHealingDonePct = GetAuraEffectsByType(SPELL_AURA_MOD_HEALING_DONE_PERCENT);
- for (AuraEffectList::const_iterator i = mHealingDonePct.begin(); i != mHealingDonePct.end(); ++i)
- AddPct(DoneTotalMod, (*i)->GetAmount());
-
// done scripted mod (take it from owner)
Unit const* owner = GetOwner() ? GetOwner() : this;
AuraEffectList const& mOverrideClassScript= owner->GetAuraEffectsByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS);
@@ -10708,43 +10722,6 @@ uint32 Unit::SpellHealingBonusDone(Unit* victim, SpellInfo const* spellProto, ui
case 3736: // Hateful Totem of the Third Wind / Increased Lesser Healing Wave / LK Arena (4/5/6) Totem of the Third Wind / Savage Totem of the Third Wind
DoneTotal += (*i)->GetAmount();
break;
- case 21: // Test of Faith
- case 6935:
- case 6918:
- if (victim->HealthBelowPct(50))
- AddPct(DoneTotalMod, (*i)->GetAmount());
- break;
- case 7798: // Glyph of Regrowth
- {
- if (victim->GetAuraEffect(SPELL_AURA_PERIODIC_HEAL, SPELLFAMILY_DRUID, 0x40, 0, 0))
- AddPct(DoneTotalMod, (*i)->GetAmount());
- break;
- }
- case 8477: // Nourish Heal Boost
- {
- int32 stepPercent = (*i)->GetAmount();
- int32 modPercent = 0;
- AuraApplicationMap const& victimAuras = victim->GetAppliedAuras();
- for (AuraApplicationMap::const_iterator itr = victimAuras.begin(); itr != victimAuras.end(); ++itr)
- {
- Aura const* aura = itr->second->GetBase();
- if (aura->GetCasterGUID() != GetGUID())
- continue;
- SpellInfo const* m_spell = aura->GetSpellInfo();
- if (m_spell->SpellFamilyName != SPELLFAMILY_DRUID ||
- !(m_spell->SpellFamilyFlags[1] & 0x00000010 || m_spell->SpellFamilyFlags[0] & 0x50))
- continue;
- modPercent += stepPercent * aura->GetStackAmount();
- }
- AddPct(DoneTotalMod, modPercent);
- break;
- }
- case 7871: // Glyph of Lesser Healing Wave
- {
- if (victim->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_SHAMAN, 0, 0x00000400, 0, GetGUID()))
- AddPct(DoneTotalMod, (*i)->GetAmount());
- break;
- }
default:
break;
}
@@ -10817,8 +10794,8 @@ uint32 Unit::SpellHealingBonusDone(Unit* victim, SpellInfo const* spellProto, ui
DoneTotal = 0;
}
- // use float as more appropriate for negative values and percent applying
- float heal = float(int32(healamount) + DoneTotal) * DoneTotalMod;
+ // Done Percentage for DOT is already calculated, no need to do it again. The percentage mod is applied in Aura::HandleAuraSpecificMods.
+ float heal = float(int32(healamount) + DoneTotal) * (damagetype == DOT ? 1.0f : SpellHealingPctDone(victim, spellProto));
// apply spellmod to Done amount
if (Player* modOwner = GetSpellModOwner())
modOwner->ApplySpellMod(spellProto->Id, damagetype == DOT ? SPELLMOD_DOT : SPELLMOD_DAMAGE, heal);
@@ -10826,6 +10803,77 @@ uint32 Unit::SpellHealingBonusDone(Unit* victim, SpellInfo const* spellProto, ui
return uint32(std::max(heal, 0.0f));
}
+float Unit::SpellHealingPctDone(Unit* victim, SpellInfo const* spellProto) const
+{
+ // For totems pct done mods are calculated when its calculation is run on the player in SpellHealingBonusDone.
+ if (GetTypeId() == TYPEID_UNIT && IsTotem())
+ return 1.0f;
+
+ // No bonus healing for potion spells
+ if (spellProto->SpellFamilyName == SPELLFAMILY_POTION)
+ return 1.0f;
+
+ float DoneTotalMod = 1.0f;
+
+ // Healing done percent
+ AuraEffectList const& mHealingDonePct = GetAuraEffectsByType(SPELL_AURA_MOD_HEALING_DONE_PERCENT);
+ for (AuraEffectList::const_iterator i = mHealingDonePct.begin(); i != mHealingDonePct.end(); ++i)
+ AddPct(DoneTotalMod, (*i)->GetAmount());
+
+ // done scripted mod (take it from owner)
+ Unit const* owner = GetOwner() ? GetOwner() : this;
+ AuraEffectList const& mOverrideClassScript= owner->GetAuraEffectsByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS);
+ for (AuraEffectList::const_iterator i = mOverrideClassScript.begin(); i != mOverrideClassScript.end(); ++i)
+ {
+ if (!(*i)->IsAffectedOnSpell(spellProto))
+ continue;
+ switch ((*i)->GetMiscValue())
+ {
+ case 21: // Test of Faith
+ case 6935:
+ case 6918:
+ if (victim->HealthBelowPct(50))
+ AddPct(DoneTotalMod, (*i)->GetAmount());
+ break;
+ case 7798: // Glyph of Regrowth
+ {
+ if (victim->GetAuraEffect(SPELL_AURA_PERIODIC_HEAL, SPELLFAMILY_DRUID, 0x40, 0, 0))
+ AddPct(DoneTotalMod, (*i)->GetAmount());
+ break;
+ }
+ case 8477: // Nourish Heal Boost
+ {
+ int32 stepPercent = (*i)->GetAmount();
+ int32 modPercent = 0;
+ AuraApplicationMap const& victimAuras = victim->GetAppliedAuras();
+ for (AuraApplicationMap::const_iterator itr = victimAuras.begin(); itr != victimAuras.end(); ++itr)
+ {
+ Aura const* aura = itr->second->GetBase();
+ if (aura->GetCasterGUID() != GetGUID())
+ continue;
+ SpellInfo const* m_spell = aura->GetSpellInfo();
+ if (m_spell->SpellFamilyName != SPELLFAMILY_DRUID ||
+ !(m_spell->SpellFamilyFlags[1] & 0x00000010 || m_spell->SpellFamilyFlags[0] & 0x50))
+ continue;
+ modPercent += stepPercent * aura->GetStackAmount();
+ }
+ AddPct(DoneTotalMod, modPercent);
+ break;
+ }
+ case 7871: // Glyph of Lesser Healing Wave
+ {
+ if (victim->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_SHAMAN, 0, 0x00000400, 0, GetGUID()))
+ AddPct(DoneTotalMod, (*i)->GetAmount());
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ return DoneTotalMod;
+}
+
uint32 Unit::SpellHealingBonusTaken(Unit* caster, SpellInfo const* spellProto, uint32 healamount, DamageEffectType damagetype, uint32 stack) const
{
float TakenTotalMod = 1.0f;
@@ -11086,6 +11134,9 @@ bool Unit::IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) cons
if (!spellInfo || !spellInfo->Effects[index].IsEffect())
return false;
+ if (spellInfo->Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)
+ return false;
+
// If m_immuneToEffect type contain this effect type, IMMUNE effect.
uint32 effect = spellInfo->Effects[index].Effect;
SpellImmuneList const& effectList = m_spellImmune[IMMUNITY_EFFECT];
@@ -11112,8 +11163,7 @@ bool Unit::IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) cons
// Check for immune to application of harmful magical effects
AuraEffectList const& immuneAuraApply = GetAuraEffectsByType(SPELL_AURA_MOD_IMMUNE_AURA_APPLY_SCHOOL);
for (AuraEffectList::const_iterator iter = immuneAuraApply.begin(); iter != immuneAuraApply.end(); ++iter)
- if (spellInfo->Dispel == DISPEL_MAGIC && // Magic debuff
- ((*iter)->GetMiscValue() & spellInfo->GetSchoolMask()) && // Check school
+ if (((*iter)->GetMiscValue() & spellInfo->GetSchoolMask()) && // Check school
!spellInfo->IsPositiveEffect(index)) // Harmful
return true;
}
@@ -11182,7 +11232,7 @@ uint32 Unit::MeleeDamageBonusDone(Unit* victim, uint32 pdamage, WeaponAttackType
// Some spells don't benefit from pct done mods
if (spellProto)
- if (!(spellProto->AttributesEx6 & SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS) && !spellProto->IsRankOf(sSpellMgr->GetSpellInfo(12162)))
+ if (!(spellProto->AttributesEx6 & SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS))
{
AuraEffectList const& mModDamagePercentDone = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
for (AuraEffectList::const_iterator i = mModDamagePercentDone.begin(); i != mModDamagePercentDone.end(); ++i)
@@ -11365,9 +11415,10 @@ uint32 Unit::MeleeDamageBonusTaken(Unit* attacker, uint32 pdamage, WeaponAttackT
case 2109:
if ((*i)->GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL)
{
- if (GetTypeId() != TYPEID_PLAYER)
- continue;
- float mod = ToPlayer()->GetRatingBonusValue(CR_CRIT_TAKEN_MELEE) * (-8.0f);
+ // Patch 2.4.3: The resilience required to reach the 90% damage reduction cap
+ // is 22.5% critical strike damage reduction, or 444 resilience.
+ // To calculate for 90%, we multiply the 100% by 4 (22.5% * 4 = 90%)
+ float mod = -1.0f * GetMeleeCritDamageReduction(400);
AddPct(TakenTotalMod, std::max(mod, float((*i)->GetAmount())));
}
break;
@@ -11494,7 +11545,7 @@ float Unit::GetPPMProcChance(uint32 WeaponSpeed, float PPM, const SpellInfo* spe
if (Player* modOwner = GetSpellModOwner())
modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_PROC_PER_MINUTE, PPM);
- return floor((WeaponSpeed * PPM) / 600.0f); // result is chance in percents (probability = Speed_in_sec * (PPM / 60))
+ return std::floor((WeaponSpeed * PPM) / 600.0f); // result is chance in percents (probability = Speed_in_sec * (PPM / 60))
}
void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
@@ -11927,8 +11978,8 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co
}
// can't assist non-friendly targets
- if (GetReactionTo(target) <= REP_NEUTRAL
- && target->GetReactionTo(this) <= REP_NEUTRAL
+ if (GetReactionTo(target) < REP_NEUTRAL
+ && target->GetReactionTo(this) < REP_NEUTRAL
&& (!ToCreature() || !(ToCreature()->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_PARTY_MEMBER)))
return false;
@@ -12740,6 +12791,10 @@ int32 Unit::ModSpellDuration(SpellInfo const* spellProto, Unit const* target, in
if (duration < 0)
return duration;
+ // some auras are not affected by duration modifiers
+ if (spellProto->AttributesEx7 & SPELL_ATTR7_IGNORE_DURATION_MODS)
+ return duration;
+
// cut duration only of negative effects
if (!positive)
{
@@ -12836,19 +12891,24 @@ int32 Unit::ModSpellDuration(SpellInfo const* spellProto, Unit const* target, in
return std::max(duration, 0);
}
-void Unit::ModSpellCastTime(SpellInfo const* spellProto, int32 & castTime, Spell* spell)
+void Unit::ModSpellCastTime(SpellInfo const* spellInfo, int32 & castTime, Spell* spell)
{
- if (!spellProto || castTime < 0)
+ if (!spellInfo || castTime < 0)
+ return;
+
+ if (spellInfo->IsChanneled() && !(spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION))
return;
+
// called from caster
if (Player* modOwner = GetSpellModOwner())
- modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_CASTING_TIME, castTime, spell);
+ modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_CASTING_TIME, castTime, spell);
- if (!(spellProto->Attributes & (SPELL_ATTR0_ABILITY|SPELL_ATTR0_TRADESPELL)) && ((GetTypeId() == TYPEID_PLAYER && spellProto->SpellFamilyName) || GetTypeId() == TYPEID_UNIT))
+ if (!((spellInfo->Attributes & (SPELL_ATTR0_ABILITY | SPELL_ATTR0_TRADESPELL)) || (spellInfo->AttributesEx3 & SPELL_ATTR3_NO_DONE_BONUS)) &&
+ ((GetTypeId() == TYPEID_PLAYER && spellInfo->SpellFamilyName) || GetTypeId() == TYPEID_UNIT))
castTime = int32(float(castTime) * GetFloatValue(UNIT_MOD_CAST_SPEED));
- else if (spellProto->Attributes & SPELL_ATTR0_REQ_AMMO && !(spellProto->AttributesEx2 & SPELL_ATTR2_AUTOREPEAT_FLAG))
+ else if (spellInfo->Attributes & SPELL_ATTR0_REQ_AMMO && !(spellInfo->AttributesEx2 & SPELL_ATTR2_AUTOREPEAT_FLAG))
castTime = int32(float(castTime) * m_modAttackSpeedPct[RANGED_ATTACK]);
- else if (spellProto->SpellVisual[0] == 3881 && HasAura(67556)) // cooking with Chef Hat.
+ else if (spellInfo->SpellVisual[0] == 3881 && HasAura(67556)) // cooking with Chef Hat.
castTime = 500;
}
@@ -12908,7 +12968,7 @@ float Unit::ApplyDiminishingToDuration(DiminishingGroup group, int32 &duration,
Unit const* source = casterOwner ? casterOwner : caster;
if ((target->GetTypeId() == TYPEID_PLAYER
- || ((Creature*)target)->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_ALL_DIMINISH)
+ || target->ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_ALL_DIMINISH)
&& source->GetTypeId() == TYPEID_PLAYER)
duration = limitduration;
}
@@ -12993,21 +13053,6 @@ float Unit::GetSpellMinRangeForTarget(Unit const* target, SpellInfo const* spell
return spellInfo->GetMinRange(!IsHostileTo(target));
}
-Unit* Unit::GetUnit(WorldObject& object, uint64 guid)
-{
- return ObjectAccessor::GetUnit(object, guid);
-}
-
-Player* Unit::GetPlayer(WorldObject& object, uint64 guid)
-{
- return ObjectAccessor::GetPlayer(object, guid);
-}
-
-Creature* Unit::GetCreature(WorldObject& object, uint64 guid)
-{
- return object.GetMap()->GetCreature(guid);
-}
-
uint32 Unit::GetCreatureType() const
{
if (GetTypeId() == TYPEID_PLAYER)
@@ -13518,12 +13563,7 @@ void Unit::CleanupsBeforeDelete(bool finalCleanup)
{
CleanupBeforeRemoveFromMap(finalCleanup);
- if (GetTransport())
- {
- GetTransport()->RemovePassenger(this);
- SetTransport(NULL);
- m_movementInfo.transport.Reset();
- }
+ WorldObject::CleanupsBeforeDelete(finalCleanup);
}
void Unit::UpdateCharmAI()
@@ -13572,7 +13612,7 @@ void Unit::DeleteCharmInfo()
}
CharmInfo::CharmInfo(Unit* unit)
-: _unit(unit), _CommandState(COMMAND_FOLLOW), _petnumber(0), _barInit(false), _oldReactState(REACT_PASSIVE),
+: _unit(unit), _CommandState(COMMAND_FOLLOW), _petnumber(0), _oldReactState(REACT_PASSIVE),
_isCommandAttack(false), _isCommandFollow(false), _isAtStay(false), _isFollowing(false), _isReturning(false),
_stayX(0.0f), _stayY(0.0f), _stayZ(0.0f)
{
@@ -13958,7 +13998,7 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u
// On melee based hit/miss/resist need update skill (for victim and attacker)
if (procExtra & (PROC_EX_NORMAL_HIT|PROC_EX_MISS|PROC_EX_RESIST))
{
- if (target->GetTypeId() != TYPEID_PLAYER && target->GetCreatureType() != CREATURE_TYPE_CRITTER)
+ if (target->GetTypeId() != TYPEID_PLAYER && !target->IsCritter())
ToPlayer()->UpdateCombatSkills(target, attType, isVictim);
}
// Update defence if player is victim and parry/dodge/block
@@ -14622,7 +14662,7 @@ Unit* Unit::SelectNearbyTarget(Unit* exclude, float dist) const
// remove not LoS targets
for (std::list<Unit*>::iterator tIter = targets.begin(); tIter != targets.end();)
{
- if (!IsWithinLOSInMap(*tIter) || (*tIter)->IsTotem() || (*tIter)->IsSpiritService() || (*tIter)->GetCreatureType() == CREATURE_TYPE_CRITTER)
+ if (!IsWithinLOSInMap(*tIter) || (*tIter)->IsTotem() || (*tIter)->IsSpiritService() || (*tIter)->IsCritter())
targets.erase(tIter++);
else
++tIter;
@@ -14977,7 +15017,7 @@ bool Unit::IsTriggeredAtSpellProcEvent(Unit* victim, Aura* aura, SpellInfo const
}
// Check spellProcEvent data requirements
- if (!sSpellMgr->IsSpellProcEventCanTriggeredBy(spellProcEvent, EventProcFlag, procSpell, procFlag, procExtra, active))
+ if (!sSpellMgr->IsSpellProcEventCanTriggeredBy(spellProto, spellProcEvent, EventProcFlag, procSpell, procFlag, procExtra, active))
return false;
// In most cases req get honor or XP from kill
if (EventProcFlag & PROC_FLAG_KILL && GetTypeId() == TYPEID_PLAYER)
@@ -15181,7 +15221,7 @@ void Unit::Kill(Unit* victim, bool durabilityLoss)
if (group)
{
- group->BroadcastPacket(&data, group->GetMemberGroup(player->GetGUID()));
+ group->BroadcastPacket(&data, group->GetMemberGroup(player->GetGUID()) != 0);
if (creature)
{
@@ -15215,8 +15255,6 @@ void Unit::Kill(Unit* victim, bool durabilityLoss)
if (creature)
{
Loot* loot = &creature->loot;
- if (creature->lootForPickPocketed)
- creature->lootForPickPocketed = false;
loot->clear();
if (uint32 lootid = creature->GetCreatureTemplate()->lootid)
@@ -15232,7 +15270,7 @@ void Unit::Kill(Unit* victim, bool durabilityLoss)
group->SendLooter(creature, NULL);
// Update round robin looter only if the creature had loot
- if (!creature->loot.empty())
+ if (!loot->empty())
group->UpdateLooterGuid(creature);
}
}
@@ -15245,7 +15283,7 @@ void Unit::Kill(Unit* victim, bool durabilityLoss)
if (Unit* owner = GetOwner())
owner->ProcDamageAndSpell(victim, PROC_FLAG_KILL, PROC_FLAG_NONE, PROC_EX_NONE, 0);
- if (victim->GetCreatureType() != CREATURE_TYPE_CRITTER)
+ if (!victim->IsCritter())
ProcDamageAndSpell(victim, PROC_FLAG_KILL, PROC_FLAG_KILLED, PROC_EX_NONE, 0);
// Proc auras on death - must be before aura/combat remove
@@ -15253,8 +15291,8 @@ void Unit::Kill(Unit* victim, bool durabilityLoss)
// update get killing blow achievements, must be done before setDeathState to be able to require auras on target
// and before Spirit of Redemption as it also removes auras
- if (player)
- player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS, 1, 0, victim);
+ if (Player* killerPlayer = GetCharmerOrOwnerPlayerOrPlayerItself())
+ killerPlayer->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS, 1, 0, victim);
// if talent known but not triggered (check priest class for speedup check)
bool spiritOfRedemption = false;
@@ -15335,9 +15373,12 @@ void Unit::Kill(Unit* victim, bool durabilityLoss)
if (!creature->IsPet())
{
creature->DeleteThreatList();
- CreatureTemplate const* cInfo = creature->GetCreatureTemplate();
- if (cInfo && (cInfo->lootid || cInfo->maxgold > 0))
+
+ // must be after setDeathState which resets dynamic flags
+ if (!creature->loot.isLooted())
creature->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+ else
+ creature->AllLootRemovedFromCorpse();
}
// Call KilledUnit for creatures, this needs to be called after the lootable flag is set
@@ -15559,7 +15600,7 @@ void Unit::SetStunned(bool apply)
else
{
if (IsAlive() && GetVictim())
- SetTarget(GetVictim()->GetGUID());
+ SetTarget(EnsureVictim()->GetGUID());
// don't remove UNIT_FLAG_STUNNED for pet when owner is mounted (disabled pet's interface)
Unit* owner = GetOwner();
@@ -15650,7 +15691,7 @@ void Unit::SetFeared(bool apply)
if (GetMotionMaster()->GetCurrentMovementGeneratorType() == FLEEING_MOTION_TYPE)
GetMotionMaster()->MovementExpired();
if (GetVictim())
- SetTarget(GetVictim()->GetGUID());
+ SetTarget(EnsureVictim()->GetGUID());
}
}
@@ -15672,7 +15713,7 @@ void Unit::SetConfused(bool apply)
if (GetMotionMaster()->GetCurrentMovementGeneratorType() == CONFUSED_MOTION_TYPE)
GetMotionMaster()->MovementExpired();
if (GetVictim())
- SetTarget(GetVictim()->GetGUID());
+ SetTarget(EnsureVictim()->GetGUID());
}
}
@@ -15949,10 +15990,7 @@ void Unit::RestoreFaction()
}
if (CreatureTemplate const* cinfo = ToCreature()->GetCreatureTemplate()) // normal creature
- {
- FactionTemplateEntry const* faction = GetFactionTemplateEntry();
- setFaction((faction && faction->friendlyMask & 0x004) ? cinfo->faction_H : cinfo->faction_A);
- }
+ setFaction(cinfo->faction);
}
}
@@ -16325,19 +16363,25 @@ void Unit::SetPhaseMask(uint32 newPhaseMask, bool update)
}
}
- WorldObject::SetPhaseMask(newPhaseMask, update);
+ // Phase player, dont update
+ WorldObject::SetPhaseMask(newPhaseMask, false);
- if (!IsInWorld())
- return;
+ // Phase pets and summons
+ if (IsInWorld())
+ {
+ for (ControlList::const_iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr)
+ if ((*itr)->GetTypeId() == TYPEID_UNIT)
+ (*itr)->SetPhaseMask(newPhaseMask, true);
- for (ControlList::const_iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr)
- if ((*itr)->GetTypeId() == TYPEID_UNIT)
- (*itr)->SetPhaseMask(newPhaseMask, true);
+ for (uint8 i = 0; i < MAX_SUMMON_SLOT; ++i)
+ if (m_SummonSlot[i])
+ if (Creature* summon = GetMap()->GetCreature(m_SummonSlot[i]))
+ summon->SetPhaseMask(newPhaseMask, true);
+ }
- for (uint8 i = 0; i < MAX_SUMMON_SLOT; ++i)
- if (m_SummonSlot[i])
- if (Creature* summon = GetMap()->GetCreature(m_SummonSlot[i]))
- summon->SetPhaseMask(newPhaseMask, true);
+ // Update visibility after phasing pets and summons so they wont despawn
+ if (update)
+ UpdateObjectVisibility();
}
void Unit::UpdateObjectVisibility(bool forced)
@@ -16690,7 +16734,7 @@ uint32 Unit::GetModelForTotem(PlayerTotemType totemType)
void Unit::JumpTo(float speedXY, float speedZ, bool forward)
{
- float angle = forward ? 0 : M_PI;
+ float angle = forward ? 0 : float(M_PI);
if (GetTypeId() == TYPEID_UNIT)
GetMotionMaster()->MoveJumpTo(angle, speedXY, speedZ);
else
@@ -16904,7 +16948,7 @@ void Unit::_ExitVehicle(Position const* exitPosition)
Position pos;
if (!exitPosition) // Exit position not specified
- vehicle->GetBase()->GetPosition(&pos); // This should use passenger's current position, leaving it as it is now
+ pos = vehicle->GetBase()->GetPosition(); // This should use passenger's current position, leaving it as it is now
// because we calculate positions incorrect (sometimes under map)
else
pos = *exitPosition;
@@ -17050,12 +17094,14 @@ bool Unit::UpdatePosition(float x, float y, float z, float orientation, bool tel
bool turn = (GetOrientation() != orientation);
bool relocated = (teleport || GetPositionX() != x || GetPositionY() != y || GetPositionZ() != z);
+ // TODO: Check if orientation transport offset changed instead of only global orientation
if (turn)
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TURNING);
if (relocated)
{
- RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_MOVE);
+ if (!GetVehicle())
+ RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_MOVE);
// move and update visible state if need
if (GetTypeId() == TYPEID_PLAYER)
@@ -17705,9 +17751,79 @@ void Unit::BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCooldowns c
data.Initialize(SMSG_SPELL_COOLDOWN, 8 + 1 + (4 + 4) * cooldowns.size());
data << uint64(GetGUID());
data << uint8(flags);
- for (UNORDERED_MAP<uint32, uint32>::const_iterator itr = cooldowns.begin(); itr != cooldowns.end(); ++itr)
+ for (std::unordered_map<uint32, uint32>::const_iterator itr = cooldowns.begin(); itr != cooldowns.end(); ++itr)
{
data << uint32(itr->first);
data << uint32(itr->second);
}
}
+
+int32 Unit::GetHighestExclusiveSameEffectSpellGroupValue(AuraEffect const* aurEff, AuraType auraType, bool checkMiscValue /*= false*/, int32 miscValue /*= 0*/) const
+{
+ int32 val = 0;
+ SpellSpellGroupMapBounds spellGroup = sSpellMgr->GetSpellSpellGroupMapBounds(aurEff->GetSpellInfo()->GetFirstRankSpell()->Id);
+ for (SpellSpellGroupMap::const_iterator itr = spellGroup.first; itr != spellGroup.second ; ++itr)
+ {
+ if (sSpellMgr->GetSpellGroupStackRule(itr->second) == SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT)
+ {
+ AuraEffectList const& auraEffList = GetAuraEffectsByType(auraType);
+ for (AuraEffectList::const_iterator auraItr = auraEffList.begin(); auraItr != auraEffList.end(); ++auraItr)
+ {
+ if (aurEff != (*auraItr) && (!checkMiscValue || (*auraItr)->GetMiscValue() == miscValue) &&
+ sSpellMgr->IsSpellMemberOfSpellGroup((*auraItr)->GetSpellInfo()->Id, itr->second))
+ {
+ // absolute value only
+ if (abs(val) < abs((*auraItr)->GetAmount()))
+ val = (*auraItr)->GetAmount();
+ }
+ }
+ }
+ }
+ return val;
+}
+
+bool Unit::IsHighestExclusiveAura(Aura const* aura, bool removeOtherAuraApplications /*= false*/)
+{
+ for (uint32 i = 0 ; i < MAX_SPELL_EFFECTS; ++i)
+ {
+ if (AuraEffect const* aurEff = aura->GetEffect(i))
+ {
+ AuraType const auraType = AuraType(aura->GetSpellInfo()->Effects[i].ApplyAuraName);
+ AuraEffectList const& auras = GetAuraEffectsByType(auraType);
+ for (Unit::AuraEffectList::const_iterator itr = auras.begin(); itr != auras.end();)
+ {
+ AuraEffect const* existingAurEff = (*itr);
+ ++itr;
+
+ if (sSpellMgr->CheckSpellGroupStackRules(aura->GetSpellInfo(), existingAurEff->GetSpellInfo())
+ == SPELL_GROUP_STACK_RULE_EXCLUSIVE_HIGHEST)
+ {
+ int32 diff = abs(aurEff->GetAmount()) - abs(existingAurEff->GetAmount());
+ if (!diff)
+ diff = int32(aura->GetEffectMask()) - int32(existingAurEff->GetBase()->GetEffectMask());
+
+ if (diff > 0)
+ {
+ Aura const* base = existingAurEff->GetBase();
+ // no removing of area auras from the original owner, as that completely cancels them
+ if (removeOtherAuraApplications && (!base->IsArea() || base->GetOwner() != this))
+ {
+ if (AuraApplication* aurApp = existingAurEff->GetBase()->GetApplicationOfTarget(GetGUID()))
+ {
+ bool hasMoreThanOneEffect = base->HasMoreThanOneEffectForType(auraType);
+ uint32 removedAuras = m_removedAurasCount;
+ RemoveAura(aurApp);
+ if (hasMoreThanOneEffect || m_removedAurasCount > removedAuras + 1)
+ itr = auras.begin();
+ }
+ }
+ }
+ else if (diff < 0)
+ return false;
+ }
+ }
+ }
+ }
+
+ return true;
+}
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 6b6d844472a..a18bc3b0848 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -265,7 +265,6 @@ enum UnitRename
UNIT_CAN_BE_ABANDONED = 0x02
};
-#define CREATURE_MAX_SPELLS 8
#define MAX_SPELL_CHARM 4
#define MAX_SPELL_VEHICLE 6
#define MAX_SPELL_POSSESS 8
@@ -1040,7 +1039,7 @@ struct GlobalCooldown
uint32 cast_time;
};
-typedef UNORDERED_MAP<uint32 /*category*/, GlobalCooldown> GlobalCooldownList;
+typedef std::unordered_map<uint32 /*category*/, GlobalCooldown> GlobalCooldownList;
class GlobalCooldownMgr // Shared by Player and CharmInfo
{
@@ -1194,7 +1193,6 @@ struct CharmInfo
CharmSpellInfo _charmspells[4];
CommandStates _CommandState;
uint32 _petnumber;
- bool _barInit;
//for restoration after charmed
ReactStates _oldReactState;
@@ -1247,7 +1245,7 @@ enum SpellCooldownFlags
SPELL_COOLDOWN_FLAG_INCLUDE_EVENT_COOLDOWNS = 0x2 ///< Starts GCD for spells that should start their cooldown on events, requires SPELL_COOLDOWN_FLAG_INCLUDE_GCD set
};
-typedef UNORDERED_MAP<uint32, uint32> PacketCooldowns;
+typedef std::unordered_map<uint32, uint32> PacketCooldowns;
// delay time next attack to prevent client attack animation problems
#define ATTACK_DISPLAY_DELAY 200
@@ -1285,11 +1283,11 @@ class Unit : public WorldObject
UnitAI* GetAI() { return i_AI; }
void SetAI(UnitAI* newAI) { i_AI = newAI; }
- void AddToWorld();
- void RemoveFromWorld();
+ void AddToWorld() override;
+ void RemoveFromWorld() override;
void CleanupBeforeRemoveFromMap(bool finalCleanup);
- void CleanupsBeforeDelete(bool finalCleanup = true); // used in ~Creature/~Player (or before mass creature delete to remove cross-references to already deleted units)
+ void CleanupsBeforeDelete(bool finalCleanup = true) override; // used in ~Creature/~Player (or before mass creature delete to remove cross-references to already deleted units)
DiminishingLevels GetDiminishing(DiminishingGroup group);
void IncrDiminishing(DiminishingGroup group);
@@ -1301,7 +1299,7 @@ class Unit : public WorldObject
float GetSpellMaxRangeForTarget(Unit const* target, SpellInfo const* spellInfo) const;
float GetSpellMinRangeForTarget(Unit const* target, SpellInfo const* spellInfo) const;
- virtual void Update(uint32 time);
+ virtual void Update(uint32 time) override;
void setAttackTimer(WeaponAttackType type, uint32 time) { m_attackTimer[type] = time; }
void resetAttackTimer(WeaponAttackType type = BASE_ATTACK);
@@ -1328,6 +1326,12 @@ class Unit : public WorldObject
AttackerSet const& getAttackers() const { return m_attackers; }
bool isAttackingPlayer() const;
Unit* GetVictim() const { return m_attacking; }
+ // Use this only when 100% sure there is a victim
+ Unit* EnsureVictim() const
+ {
+ ASSERT(m_attacking);
+ return m_attacking;
+ }
void CombatStop(bool includingCast = false);
void CombatStopWithPets(bool includingCast = false);
@@ -1337,21 +1341,21 @@ class Unit : public WorldObject
void SendMeleeAttackStart(Unit* victim);
void AddUnitState(uint32 f) { m_state |= f; }
- bool HasUnitState(const uint32 f) const { return (m_state & f); }
+ bool HasUnitState(const uint32 f) const { return (m_state & f) != 0; }
void ClearUnitState(uint32 f) { m_state &= ~f; }
bool CanFreeMove() const;
uint32 HasUnitTypeMask(uint32 mask) const { return mask & m_unitTypeMask; }
void AddUnitTypeMask(uint32 mask) { m_unitTypeMask |= mask; }
- bool IsSummon() const { return m_unitTypeMask & UNIT_MASK_SUMMON; }
- bool IsGuardian() const { return m_unitTypeMask & UNIT_MASK_GUARDIAN; }
- bool IsPet() const { return m_unitTypeMask & UNIT_MASK_PET; }
- bool IsHunterPet() const{ return m_unitTypeMask & UNIT_MASK_HUNTER_PET; }
- bool IsTotem() const { return m_unitTypeMask & UNIT_MASK_TOTEM; }
- bool IsVehicle() const { return m_unitTypeMask & UNIT_MASK_VEHICLE; }
+ bool IsSummon() const { return (m_unitTypeMask & UNIT_MASK_SUMMON) != 0; }
+ bool IsGuardian() const { return (m_unitTypeMask & UNIT_MASK_GUARDIAN) != 0; }
+ bool IsPet() const { return (m_unitTypeMask & UNIT_MASK_PET) != 0; }
+ bool IsHunterPet() const{ return (m_unitTypeMask & UNIT_MASK_HUNTER_PET) != 0; }
+ bool IsTotem() const { return (m_unitTypeMask & UNIT_MASK_TOTEM) != 0; }
+ bool IsVehicle() const { return (m_unitTypeMask & UNIT_MASK_VEHICLE) != 0; }
uint8 getLevel() const { return uint8(GetUInt32Value(UNIT_FIELD_LEVEL)); }
- uint8 getLevelForTarget(WorldObject const* /*target*/) const { return getLevel(); }
+ uint8 getLevelForTarget(WorldObject const* /*target*/) const override { return getLevel(); }
void SetLevel(uint8 lvl);
uint8 getRace() const { return GetByteValue(UNIT_FIELD_BYTES_0, 0); }
uint32 getRaceMask() const { return 1 << (getRace()-1); }
@@ -1523,6 +1527,7 @@ class Unit : public WorldObject
bool IsArmorer() const { return HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_REPAIR); }
bool IsServiceProvider() const;
bool IsSpiritService() const { return HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPIRITHEALER | UNIT_NPC_FLAG_SPIRITGUIDE); }
+ bool IsCritter() const { return GetCreatureType() == CREATURE_TYPE_CRITTER; }
bool IsInFlight() const { return HasUnitState(UNIT_STATE_IN_FLIGHT); }
@@ -1903,16 +1908,16 @@ class Unit : public WorldObject
uint32 CalculateDamage(WeaponAttackType attType, bool normalized, bool addTotalPct);
float GetAPMultiplier(WeaponAttackType attType, bool normalized);
- bool isInFrontInMap(Unit const* target, float distance, float arc = M_PI) const;
- bool isInBackInMap(Unit const* target, float distance, float arc = M_PI) const;
+ bool isInFrontInMap(Unit const* target, float distance, float arc = float(M_PI)) const;
+ bool isInBackInMap(Unit const* target, float distance, float arc = float(M_PI)) const;
// Visibility system
bool IsVisible() const;
void SetVisible(bool x);
// common function for visibility checks for player/creatures with detection code
- void SetPhaseMask(uint32 newPhaseMask, bool update);// overwrite WorldObject::SetPhaseMask
- void UpdateObjectVisibility(bool forced = true);
+ void SetPhaseMask(uint32 newPhaseMask, bool update) override;// overwrite WorldObject::SetPhaseMask
+ void UpdateObjectVisibility(bool forced = true) override;
SpellImmuneList m_spellImmune[MAX_SPELL_IMMUNITY];
uint32 m_lastSanctuaryTime;
@@ -1966,13 +1971,15 @@ class Unit : public WorldObject
Unit* GetMagicHitRedirectTarget(Unit* victim, SpellInfo const* spellInfo);
Unit* GetMeleeHitRedirectTarget(Unit* victim, SpellInfo const* spellInfo = NULL);
- int32 SpellBaseDamageBonusDone(SpellSchoolMask schoolMask) const;
- int32 SpellBaseDamageBonusTaken(SpellSchoolMask schoolMask) const;
+ int32 SpellBaseDamageBonusDone(SpellSchoolMask schoolMask) const;
+ int32 SpellBaseDamageBonusTaken(SpellSchoolMask schoolMask) const;
uint32 SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uint32 pdamage, DamageEffectType damagetype, uint32 stack = 1) const;
+ float SpellDamagePctDone(Unit* victim, SpellInfo const* spellProto, DamageEffectType damagetype) const;
uint32 SpellDamageBonusTaken(Unit* caster, SpellInfo const* spellProto, uint32 pdamage, DamageEffectType damagetype, uint32 stack = 1) const;
- int32 SpellBaseHealingBonusDone(SpellSchoolMask schoolMask) const;
- int32 SpellBaseHealingBonusTaken(SpellSchoolMask schoolMask) const;
+ int32 SpellBaseHealingBonusDone(SpellSchoolMask schoolMask) const;
+ int32 SpellBaseHealingBonusTaken(SpellSchoolMask schoolMask) const;
uint32 SpellHealingBonusDone(Unit* victim, SpellInfo const* spellProto, uint32 healamount, DamageEffectType damagetype, uint32 stack = 1) const;
+ float SpellHealingPctDone(Unit* victim, SpellInfo const* spellProto) const;
uint32 SpellHealingBonusTaken(Unit* caster, SpellInfo const* spellProto, uint32 healamount, DamageEffectType damagetype, uint32 stack = 1) const;
uint32 MeleeDamageBonusDone(Unit* pVictim, uint32 damage, WeaponAttackType attType, SpellInfo const* spellProto = NULL);
@@ -1980,7 +1987,8 @@ class Unit : public WorldObject
bool isSpellBlocked(Unit* victim, SpellInfo const* spellProto, WeaponAttackType attackType = BASE_ATTACK);
bool isBlockCritical();
- bool isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMask schoolMask, WeaponAttackType attackType = BASE_ATTACK) const;
+ bool IsSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMask schoolMask, WeaponAttackType attackType = BASE_ATTACK) const;
+ float GetUnitSpellCriticalChance(Unit* victim, SpellInfo const* spellProto, SpellSchoolMask schoolMask, WeaponAttackType attackType = BASE_ATTACK) const;
uint32 SpellCriticalDamageBonus(SpellInfo const* spellProto, uint32 damage, Unit* victim);
uint32 SpellCriticalHealingBonus(SpellInfo const* spellProto, uint32 damage, Unit* victim);
@@ -2022,9 +2030,6 @@ class Unit : public WorldObject
void addFollower(FollowerReference* pRef) { m_FollowingRefManager.insertFirst(pRef); }
void removeFollower(FollowerReference* /*pRef*/) { /* nothing to do yet */ }
- static Unit* GetUnit(WorldObject& object, uint64 guid);
- static Player* GetPlayer(WorldObject& object, uint64 guid);
- static Creature* GetCreature(WorldObject& object, uint64 guid);
MotionMaster* GetMotionMaster() { return i_motionMaster; }
const MotionMaster* GetMotionMaster() const { return i_motionMaster; }
@@ -2099,7 +2104,7 @@ class Unit : public WorldObject
bool IsOnVehicle(const Unit* vehicle) const;
Unit* GetVehicleBase() const;
Creature* GetVehicleCreatureBase() const;
- uint64 GetTransGUID() const;
+ uint64 GetTransGUID() const override;
/// Returns the transport this unit is on directly (if on vehicle and transport, return vehicle)
TransportBase* GetDirectTransport() const;
@@ -2149,10 +2154,13 @@ class Unit : public WorldObject
time_t GetLastDamagedTime() const { return _lastDamagedTime; }
void SetLastDamagedTime(time_t val) { _lastDamagedTime = val; }
+ int32 GetHighestExclusiveSameEffectSpellGroupValue(AuraEffect const* aurEff, AuraType auraType, bool checkMiscValue = false, int32 miscValue = 0) const;
+ bool IsHighestExclusiveAura(Aura const* aura, bool removeOtherAuraApplications = false);
+
protected:
explicit Unit (bool isWorldObject);
- void BuildValuesUpdate(uint8 updatetype, ByteBuffer* data, Player* target) const;
+ void BuildValuesUpdate(uint8 updatetype, ByteBuffer* data, Player* target) const override;
UnitAI* i_AI, *i_disabledAI;
@@ -2221,8 +2229,8 @@ class Unit : public WorldObject
uint32 m_unitTypeMask;
LiquidTypeEntry const* _lastLiquid;
- bool IsAlwaysVisibleFor(WorldObject const* seer) const;
- bool IsAlwaysDetectableFor(WorldObject const* seer) const;
+ bool IsAlwaysVisibleFor(WorldObject const* seer) const override;
+ bool IsAlwaysDetectableFor(WorldObject const* seer) const override;
void DisableSpline();
private:
diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp
index fae4f0c6b6a..915e6016e22 100755
--- a/src/server/game/Entities/Vehicle/Vehicle.cpp
+++ b/src/server/game/Entities/Vehicle/Vehicle.cpp
@@ -76,41 +76,12 @@ Vehicle::~Vehicle()
void Vehicle::Install()
{
- if (Creature* creature = _me->ToCreature())
+ if (_me->GetTypeId() == TYPEID_UNIT)
{
- switch (_vehicleInfo->m_powerType)
- {
- case POWER_STEAM:
- case POWER_HEAT:
- case POWER_BLOOD:
- case POWER_OOZE:
- case POWER_WRATH:
- _me->setPowerType(POWER_ENERGY);
- _me->SetMaxPower(POWER_ENERGY, 100);
- break;
- case POWER_PYRITE:
- _me->setPowerType(POWER_ENERGY);
- _me->SetMaxPower(POWER_ENERGY, 50);
- break;
- default:
- for (uint32 i = 0; i < MAX_SPELL_VEHICLE; ++i)
- {
- if (!creature->m_spells[i])
- continue;
-
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(creature->m_spells[i]);
- if (!spellInfo)
- continue;
-
- if (spellInfo->PowerType == POWER_ENERGY && spellInfo->CalcPowerCost(_me, spellInfo->GetSchoolMask()) > 0)
- {
- _me->setPowerType(POWER_ENERGY);
- _me->SetMaxPower(POWER_ENERGY, 100);
- break;
- }
- }
- break;
- }
+ if (PowerDisplayEntry const* powerDisplay = sPowerDisplayStore.LookupEntry(_vehicleInfo->m_powerDisplayId))
+ _me->setPowerType(Powers(powerDisplay->PowerType));
+ else if (_me->getClass() == CLASS_ROGUE)
+ _me->setPowerType(POWER_ENERGY);
}
_status = STATUS_INSTALLED;
@@ -808,6 +779,8 @@ bool VehicleJoinEvent::Execute(uint64, uint32)
Passenger->InterruptNonMeleeSpells(false);
Passenger->RemoveAurasByType(SPELL_AURA_MOUNTED);
+ VehicleSeatEntry const* veSeat = Seat->second.SeatInfo;
+
Player* player = Passenger->ToPlayer();
if (player)
{
@@ -818,14 +791,14 @@ bool VehicleJoinEvent::Execute(uint64, uint32)
player->StopCastingCharm();
player->StopCastingBindSight();
player->SendOnCancelExpectedVehicleRideAura();
- player->UnsummonPetTemporaryIfAny();
+ if (!(veSeat->m_flagsB & VEHICLE_SEAT_FLAG_B_KEEP_PET))
+ player->UnsummonPetTemporaryIfAny();
}
if (Seat->second.SeatInfo->m_flags & VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE)
Passenger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
Passenger->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
- VehicleSeatEntry const* veSeat = Seat->second.SeatInfo;
Passenger->m_movementInfo.transport.pos.Relocate(veSeat->m_attachmentOffsetX, veSeat->m_attachmentOffsetY, veSeat->m_attachmentOffsetZ);
Passenger->m_movementInfo.transport.time = 0;
Passenger->m_movementInfo.transport.seat = Seat->first;
diff --git a/src/server/game/Entities/Vehicle/Vehicle.h b/src/server/game/Entities/Vehicle/Vehicle.h
index 36119fa0027..be008330f0c 100644
--- a/src/server/game/Entities/Vehicle/Vehicle.h
+++ b/src/server/game/Entities/Vehicle/Vehicle.h
@@ -89,7 +89,7 @@ class Vehicle : public TransportBase
void InitMovementInfoForBase();
/// This method transforms supplied transport offsets into global coordinates
- void CalculatePassengerPosition(float& x, float& y, float& z, float* o /*= NULL*/) const
+ void CalculatePassengerPosition(float& x, float& y, float& z, float* o /*= NULL*/) const override
{
TransportBase::CalculatePassengerPosition(x, y, z, o,
GetBase()->GetPositionX(), GetBase()->GetPositionY(),
@@ -97,7 +97,7 @@ class Vehicle : public TransportBase
}
/// This method transforms supplied global coordinates into local offsets
- void CalculatePassengerOffset(float& x, float& y, float& z, float* o /*= NULL*/) const
+ void CalculatePassengerOffset(float& x, float& y, float& z, float* o /*= NULL*/) const override
{
TransportBase::CalculatePassengerOffset(x, y, z, o,
GetBase()->GetPositionX(), GetBase()->GetPositionY(),
@@ -126,8 +126,8 @@ class VehicleJoinEvent : public BasicEvent
protected:
VehicleJoinEvent(Vehicle* v, Unit* u) : Target(v), Passenger(u), Seat(Target->Seats.end()) { }
~VehicleJoinEvent();
- bool Execute(uint64, uint32);
- void Abort(uint64);
+ bool Execute(uint64, uint32) override;
+ void Abort(uint64) override;
Vehicle* Target;
Unit* Passenger;
diff --git a/src/server/game/Entities/Vehicle/VehicleDefines.h b/src/server/game/Entities/Vehicle/VehicleDefines.h
index 4acd1fe209a..fdc5c94282b 100644
--- a/src/server/game/Entities/Vehicle/VehicleDefines.h
+++ b/src/server/game/Entities/Vehicle/VehicleDefines.h
@@ -83,7 +83,7 @@ struct VehicleAccessory
VehicleAccessory(uint32 entry, int8 seatId, bool isMinion, uint8 summonType, uint32 summonTime) :
AccessoryEntry(entry), IsMinion(isMinion), SummonTime(summonTime), SeatId(seatId), SummonedType(summonType) { }
uint32 AccessoryEntry;
- uint32 IsMinion;
+ bool IsMinion;
uint32 SummonTime;
int8 SeatId;
uint8 SummonedType;
diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp
index 95d4c7e2503..9e1514f11bd 100644
--- a/src/server/game/Events/GameEventMgr.cpp
+++ b/src/server/game/Events/GameEventMgr.cpp
@@ -1163,7 +1163,7 @@ void GameEventMgr::GameEventSpawn(int16 event_id)
if (internal_event_id < 0 || internal_event_id >= int32(mGameEventCreatureGuids.size()))
{
- TC_LOG_ERROR("gameevent", "GameEventMgr::GameEventSpawn attempt access to out of range mGameEventCreatureGuids element %i (size: " SIZEFMTD ")",
+ TC_LOG_ERROR("gameevent", "GameEventMgr::GameEventSpawn attempt access to out of range mGameEventCreatureGuids element %i (size: %zu)",
internal_event_id, mGameEventCreatureGuids.size());
return;
}
@@ -1190,7 +1190,7 @@ void GameEventMgr::GameEventSpawn(int16 event_id)
if (internal_event_id < 0 || internal_event_id >= int32(mGameEventGameobjectGuids.size()))
{
- TC_LOG_ERROR("gameevent", "GameEventMgr::GameEventSpawn attempt access to out of range mGameEventGameobjectGuids element %i (size: " SIZEFMTD ")",
+ TC_LOG_ERROR("gameevent", "GameEventMgr::GameEventSpawn attempt access to out of range mGameEventGameobjectGuids element %i (size: %zu)",
internal_event_id, mGameEventGameobjectGuids.size());
return;
}
@@ -1223,7 +1223,7 @@ void GameEventMgr::GameEventSpawn(int16 event_id)
if (internal_event_id < 0 || internal_event_id >= int32(mGameEventPoolIds.size()))
{
- TC_LOG_ERROR("gameevent", "GameEventMgr::GameEventSpawn attempt access to out of range mGameEventPoolIds element %u (size: " SIZEFMTD ")",
+ TC_LOG_ERROR("gameevent", "GameEventMgr::GameEventSpawn attempt access to out of range mGameEventPoolIds element %u (size: %zu)",
internal_event_id, mGameEventPoolIds.size());
return;
}
@@ -1238,7 +1238,7 @@ void GameEventMgr::GameEventUnspawn(int16 event_id)
if (internal_event_id < 0 || internal_event_id >= int32(mGameEventCreatureGuids.size()))
{
- TC_LOG_ERROR("gameevent", "GameEventMgr::GameEventUnspawn attempt access to out of range mGameEventCreatureGuids element %i (size: " SIZEFMTD ")",
+ TC_LOG_ERROR("gameevent", "GameEventMgr::GameEventUnspawn attempt access to out of range mGameEventCreatureGuids element %i (size: %zu)",
internal_event_id, mGameEventCreatureGuids.size());
return;
}
@@ -1260,7 +1260,7 @@ void GameEventMgr::GameEventUnspawn(int16 event_id)
if (internal_event_id < 0 || internal_event_id >= int32(mGameEventGameobjectGuids.size()))
{
- TC_LOG_ERROR("gameevent", "GameEventMgr::GameEventUnspawn attempt access to out of range mGameEventGameobjectGuids element %i (size: " SIZEFMTD ")",
+ TC_LOG_ERROR("gameevent", "GameEventMgr::GameEventUnspawn attempt access to out of range mGameEventGameobjectGuids element %i (size: %zu)",
internal_event_id, mGameEventGameobjectGuids.size());
return;
}
@@ -1281,7 +1281,7 @@ void GameEventMgr::GameEventUnspawn(int16 event_id)
}
if (internal_event_id < 0 || internal_event_id >= int32(mGameEventPoolIds.size()))
{
- TC_LOG_ERROR("gameevent", "GameEventMgr::GameEventUnspawn attempt access to out of range mGameEventPoolIds element %u (size: " SIZEFMTD ")", internal_event_id, mGameEventPoolIds.size());
+ TC_LOG_ERROR("gameevent", "GameEventMgr::GameEventUnspawn attempt access to out of range mGameEventPoolIds element %u (size: %zu)", internal_event_id, mGameEventPoolIds.size());
return;
}
@@ -1600,14 +1600,14 @@ void GameEventMgr::RunSmartAIScripts(uint16 event_id, bool activate)
//! Iterate over every supported source type (creature and gameobject)
//! Not entirely sure how this will affect units in non-loaded grids.
{
- TRINITY_READ_GUARD(HashMapHolder<Creature>::LockType, *HashMapHolder<Creature>::GetLock());
+ boost::shared_lock<boost::shared_mutex> lock(*HashMapHolder<Creature>::GetLock());
HashMapHolder<Creature>::MapType const& m = ObjectAccessor::GetCreatures();
for (HashMapHolder<Creature>::MapType::const_iterator iter = m.begin(); iter != m.end(); ++iter)
if (iter->second->IsInWorld())
iter->second->AI()->sOnGameEvent(activate, event_id);
}
{
- TRINITY_READ_GUARD(HashMapHolder<GameObject>::LockType, *HashMapHolder<GameObject>::GetLock());
+ boost::shared_lock<boost::shared_mutex> lock(*HashMapHolder<GameObject>::GetLock());
HashMapHolder<GameObject>::MapType const& m = ObjectAccessor::GetGameObjects();
for (HashMapHolder<GameObject>::MapType::const_iterator iter = m.begin(); iter != m.end(); ++iter)
if (iter->second->IsInWorld())
@@ -1620,7 +1620,7 @@ uint16 GameEventMgr::GetEventIdForQuest(Quest const* quest) const
if (!quest)
return 0;
- UNORDERED_MAP<uint32, uint16>::const_iterator itr = _questToEventLinks.find(quest->GetQuestId());
+ std::unordered_map<uint32, uint16>::const_iterator itr = _questToEventLinks.find(quest->GetQuestId());
if (itr == _questToEventLinks.end())
return 0;
diff --git a/src/server/game/Events/GameEventMgr.h b/src/server/game/Events/GameEventMgr.h
index ea6f9359ea3..e5c00da5e91 100644
--- a/src/server/game/Events/GameEventMgr.h
+++ b/src/server/game/Events/GameEventMgr.h
@@ -22,7 +22,6 @@
#include "Common.h"
#include "SharedDefines.h"
#include "Define.h"
-#include <ace/Singleton.h>
#define max_ge_check_delay DAY // 1 day in seconds
@@ -95,13 +94,17 @@ class Quest;
class GameEventMgr
{
- friend class ACE_Singleton<GameEventMgr, ACE_Null_Mutex>;
-
private:
GameEventMgr();
~GameEventMgr() { };
public:
+ static GameEventMgr* instance()
+ {
+ static GameEventMgr instance;
+ return &instance;
+ }
+
typedef std::set<uint16> ActiveEvents;
typedef std::vector<GameEventData> GameEventDataMap;
ActiveEvents const& GetActiveEventList() const { return m_ActiveEvents; }
@@ -173,14 +176,14 @@ class GameEventMgr
QuestIdToEventConditionMap mQuestToEventConditions;
GameEventNPCFlagMap mGameEventNPCFlags;
ActiveEvents m_ActiveEvents;
- UNORDERED_MAP<uint32, uint16> _questToEventLinks;
+ std::unordered_map<uint32, uint16> _questToEventLinks;
bool isSystemInit;
public:
GameEventGuidMap mGameEventCreatureGuids;
GameEventGuidMap mGameEventGameobjectGuids;
};
-#define sGameEventMgr ACE_Singleton<GameEventMgr, ACE_Null_Mutex>::instance()
+#define sGameEventMgr GameEventMgr::instance()
bool IsHolidayActive(HolidayIds id);
bool IsEventActive(uint16 event_id);
diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp
index ca173865570..931ec0e607d 100644
--- a/src/server/game/Globals/ObjectAccessor.cpp
+++ b/src/server/game/Globals/ObjectAccessor.cpp
@@ -16,6 +16,9 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <boost/thread/shared_mutex.hpp>
+#include <boost/thread/locks.hpp>
+
#include "ObjectAccessor.h"
#include "CellImpl.h"
#include "Corpse.h"
@@ -205,7 +208,8 @@ Unit* ObjectAccessor::FindUnit(uint64 guid)
Player* ObjectAccessor::FindPlayerByName(std::string const& name)
{
- TRINITY_READ_GUARD(HashMapHolder<Player>::LockType, *HashMapHolder<Player>::GetLock());
+ boost::shared_lock<boost::shared_mutex> lock(*HashMapHolder<Player>::GetLock());
+
std::string nameStr = name;
std::transform(nameStr.begin(), nameStr.end(), nameStr.begin(), ::tolower);
HashMapHolder<Player>::MapType const& m = GetPlayers();
@@ -224,7 +228,8 @@ Player* ObjectAccessor::FindPlayerByName(std::string const& name)
void ObjectAccessor::SaveAllPlayers()
{
- TRINITY_READ_GUARD(HashMapHolder<Player>::LockType, *HashMapHolder<Player>::GetLock());
+ boost::shared_lock<boost::shared_mutex> lock(*HashMapHolder<Player>::GetLock());
+
HashMapHolder<Player>::MapType const& m = GetPlayers();
for (HashMapHolder<Player>::MapType::const_iterator itr = m.begin(); itr != m.end(); ++itr)
itr->second->SaveToDB();
@@ -232,7 +237,7 @@ void ObjectAccessor::SaveAllPlayers()
Corpse* ObjectAccessor::GetCorpseForPlayerGUID(uint64 guid)
{
- TRINITY_READ_GUARD(ACE_RW_Thread_Mutex, i_corpseLock);
+ boost::shared_lock<boost::shared_mutex> lock(_corpseLock);
Player2CorpsesMapType::iterator iter = i_player2corpse.find(guid);
if (iter == i_player2corpse.end())
@@ -247,6 +252,8 @@ void ObjectAccessor::RemoveCorpse(Corpse* corpse)
{
ASSERT(corpse && corpse->GetType() != CORPSE_BONES);
+ boost::upgrade_lock<boost::shared_mutex> lock(_corpseLock);
+
/// @todo more works need to be done for corpse and other world object
if (Map* map = corpse->FindMap())
{
@@ -265,7 +272,7 @@ void ObjectAccessor::RemoveCorpse(Corpse* corpse)
// Critical section
{
- TRINITY_WRITE_GUARD(ACE_RW_Thread_Mutex, i_corpseLock);
+ boost::upgrade_to_unique_lock<boost::shared_mutex> uniqueLock(lock);
Player2CorpsesMapType::iterator iter = i_player2corpse.find(corpse->GetOwnerGUID());
if (iter == i_player2corpse.end()) /// @todo Fix this
@@ -285,7 +292,7 @@ void ObjectAccessor::AddCorpse(Corpse* corpse)
// Critical section
{
- TRINITY_WRITE_GUARD(ACE_RW_Thread_Mutex, i_corpseLock);
+ boost::unique_lock<boost::shared_mutex> lock(_corpseLock);
ASSERT(i_player2corpse.find(corpse->GetOwnerGUID()) == i_player2corpse.end());
i_player2corpse[corpse->GetOwnerGUID()] = corpse;
@@ -298,7 +305,7 @@ void ObjectAccessor::AddCorpse(Corpse* corpse)
void ObjectAccessor::AddCorpsesToGrid(GridCoord const& gridpair, GridType& grid, Map* map)
{
- TRINITY_READ_GUARD(ACE_RW_Thread_Mutex, i_corpseLock);
+ boost::shared_lock<boost::shared_mutex> lock(_corpseLock);
for (Player2CorpsesMapType::iterator iter = i_player2corpse.begin(); iter != i_player2corpse.end(); ++iter)
{
@@ -431,8 +438,8 @@ void ObjectAccessor::UnloadAll()
/// Define the static members of HashMapHolder
-template <class T> UNORDERED_MAP< uint64, T* > HashMapHolder<T>::m_objectMap;
-template <class T> typename HashMapHolder<T>::LockType HashMapHolder<T>::i_lock;
+template <class T> std::unordered_map< uint64, T* > HashMapHolder<T>::_objectMap;
+template <class T> boost::shared_mutex HashMapHolder<T>::_lock;
/// Global definitions for the hashmap storage
diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h
index 4943c648b93..849ae25a335 100644
--- a/src/server/game/Globals/ObjectAccessor.h
+++ b/src/server/game/Globals/ObjectAccessor.h
@@ -19,17 +19,17 @@
#ifndef TRINITY_OBJECTACCESSOR_H
#define TRINITY_OBJECTACCESSOR_H
-#include "Define.h"
-#include <ace/Singleton.h>
-#include <ace/Thread_Mutex.h>
-#include "UnorderedMap.h"
-
-#include "UpdateData.h"
+#include <mutex>
+#include <set>
+#include <unordered_map>
+#include <boost/thread/locks.hpp>
+#include <boost/thread/shared_mutex.hpp>
+#include "Define.h"
#include "GridDefines.h"
+#include "UpdateData.h"
#include "Object.h"
-#include <set>
class Creature;
class Corpse;
@@ -47,43 +47,44 @@ class HashMapHolder
{
public:
- typedef UNORDERED_MAP<uint64, T*> MapType;
- typedef ACE_RW_Thread_Mutex LockType;
+ typedef std::unordered_map<uint64, T*> MapType;
static void Insert(T* o)
{
- TRINITY_WRITE_GUARD(LockType, i_lock);
- m_objectMap[o->GetGUID()] = o;
+ boost::unique_lock<boost::shared_mutex> lock(_lock);
+
+ _objectMap[o->GetGUID()] = o;
}
static void Remove(T* o)
{
- TRINITY_WRITE_GUARD(LockType, i_lock);
- m_objectMap.erase(o->GetGUID());
+ boost::unique_lock<boost::shared_mutex> lock(_lock);
+
+ _objectMap.erase(o->GetGUID());
}
static T* Find(uint64 guid)
{
- TRINITY_READ_GUARD(LockType, i_lock);
- typename MapType::iterator itr = m_objectMap.find(guid);
- return (itr != m_objectMap.end()) ? itr->second : NULL;
+ boost::shared_lock<boost::shared_mutex> lock(_lock);
+
+ typename MapType::iterator itr = _objectMap.find(guid);
+ return (itr != _objectMap.end()) ? itr->second : NULL;
}
- static MapType& GetContainer() { return m_objectMap; }
+ static MapType& GetContainer() { return _objectMap; }
- static LockType* GetLock() { return &i_lock; }
+ static boost::shared_mutex* GetLock() { return &_lock; }
private:
//Non instanceable only static
HashMapHolder() { }
- static LockType i_lock;
- static MapType m_objectMap;
+ static boost::shared_mutex _lock;
+ static MapType _objectMap;
};
class ObjectAccessor
{
- friend class ACE_Singleton<ObjectAccessor, ACE_Null_Mutex>;
private:
ObjectAccessor();
~ObjectAccessor();
@@ -93,6 +94,12 @@ class ObjectAccessor
public:
/// @todo: Override these template functions for each holder type and add assertions
+ static ObjectAccessor* instance()
+ {
+ static ObjectAccessor instance;
+ return &instance;
+ }
+
template<class T> static T* GetObjectInOrOutOfWorld(uint64 guid, T* /*typeSpecifier*/)
{
return HashMapHolder<T>::Find(guid);
@@ -195,13 +202,13 @@ class ObjectAccessor
//non-static functions
void AddUpdateObject(Object* obj)
{
- TRINITY_GUARD(ACE_Thread_Mutex, i_objectLock);
+ std::lock_guard<std::mutex> lock(_objectLock);
i_objects.insert(obj);
}
void RemoveUpdateObject(Object* obj)
{
- TRINITY_GUARD(ACE_Thread_Mutex, i_objectLock);
+ std::lock_guard<std::mutex> lock(_objectLock);
i_objects.erase(obj);
}
@@ -222,15 +229,15 @@ class ObjectAccessor
static void _buildPacket(Player*, Object*, UpdateDataMapType&);
void _update();
- typedef UNORDERED_MAP<uint64, Corpse*> Player2CorpsesMapType;
- typedef UNORDERED_MAP<Player*, UpdateData>::value_type UpdateDataValueType;
+ typedef std::unordered_map<uint64, Corpse*> Player2CorpsesMapType;
+ typedef std::unordered_map<Player*, UpdateData>::value_type UpdateDataValueType;
std::set<Object*> i_objects;
Player2CorpsesMapType i_player2corpse;
- ACE_Thread_Mutex i_objectLock;
- ACE_RW_Thread_Mutex i_corpseLock;
+ std::mutex _objectLock;
+ boost::shared_mutex _corpseLock;
};
-#define sObjectAccessor ACE_Singleton<ObjectAccessor, ACE_Null_Mutex>::instance()
+#define sObjectAccessor ObjectAccessor::instance()
#endif
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index e4dbe60535d..944ad4d4a19 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -315,7 +315,7 @@ void ObjectMgr::LoadCreatureLocales()
CreatureLocale& data = _creatureLocaleStore[entry];
- for (uint8 i = 1; i < TOTAL_LOCALES; ++i)
+ for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
{
LocaleConstant locale = (LocaleConstant) i;
AddLocaleString(fields[1 + 2 * (i - 1)].GetString(), locale, data.Name);
@@ -323,7 +323,7 @@ void ObjectMgr::LoadCreatureLocales()
}
} while (result->NextRow());
- TC_LOG_INFO("server.loading", ">> Loaded %lu creature locale strings in %u ms", (unsigned long)_creatureLocaleStore.size(), GetMSTimeDiffToNow(oldMSTime));
+ TC_LOG_INFO("server.loading", ">> Loaded %u creature locale strings in %u ms", uint32(_creatureLocaleStore.size()), GetMSTimeDiffToNow(oldMSTime));
}
void ObjectMgr::LoadGossipMenuItemsLocales()
@@ -351,15 +351,16 @@ void ObjectMgr::LoadGossipMenuItemsLocales()
GossipMenuItemsLocale& data = _gossipMenuItemsLocaleStore[MAKE_PAIR32(menuId, id)];
- for (uint8 i = 1; i < TOTAL_LOCALES; ++i)
+ for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
{
LocaleConstant locale = (LocaleConstant) i;
AddLocaleString(fields[2 + 2 * (i - 1)].GetString(), locale, data.OptionText);
AddLocaleString(fields[2 + 2 * (i - 1) + 1].GetString(), locale, data.BoxText);
}
- } while (result->NextRow());
+ }
+ while (result->NextRow());
- TC_LOG_INFO("server.loading", ">> Loaded %lu gossip_menu_option locale strings in %u ms", (unsigned long)_gossipMenuItemsLocaleStore.size(), GetMSTimeDiffToNow(oldMSTime));
+ TC_LOG_INFO("server.loading", ">> Loaded %u gossip_menu_option locale strings in %u ms", uint32(_gossipMenuItemsLocaleStore.size()), GetMSTimeDiffToNow(oldMSTime));
}
void ObjectMgr::LoadPointOfInterestLocales()
@@ -381,33 +382,33 @@ void ObjectMgr::LoadPointOfInterestLocales()
PointOfInterestLocale& data = _pointOfInterestLocaleStore[entry];
- for (uint8 i = 1; i < TOTAL_LOCALES; ++i)
+ for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
AddLocaleString(fields[i].GetString(), LocaleConstant(i), data.IconName);
} while (result->NextRow());
- TC_LOG_INFO("server.loading", ">> Loaded %lu points_of_interest locale strings in %u ms", (unsigned long)_pointOfInterestLocaleStore.size(), GetMSTimeDiffToNow(oldMSTime));
+ TC_LOG_INFO("server.loading", ">> Loaded %u points_of_interest locale strings in %u ms", uint32(_pointOfInterestLocaleStore.size()), GetMSTimeDiffToNow(oldMSTime));
}
void ObjectMgr::LoadCreatureTemplates()
{
uint32 oldMSTime = getMSTime();
- // 0 1 2 3 4 5 6 7 8
+ // 0 1 2 3 4 5 6 7 8
QueryResult result = WorldDatabase.Query("SELECT entry, difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, modelid1, modelid2, modelid3, "
- // 9 10 11 12 13 14 15 16 17 18 19 20 21
- "modelid4, name, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, faction_A, faction_H, npcflag, speed_walk, speed_run, "
- // 22 23 24 25 26 27 28 29 30 31 32 33
- "scale, rank, mindmg, maxdmg, dmgschool, attackpower, dmg_multiplier, baseattacktime, rangeattacktime, unit_class, unit_flags, unit_flags2, "
- // 34 35 36 37 38 39 40 41 42 43
- "dynamicflags, family, trainer_type, trainer_spell, trainer_class, trainer_race, minrangedmg, maxrangedmg, rangedattackpower, type, "
- // 44 45 46 47 48 49 50 51 52 53 54
+ // 9 10 11 12 13 14 15 16 17 18 19 20
+ "modelid4, name, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, faction, npcflag, speed_walk, speed_run, "
+ // 21 22 23 24 25 26 27 28 29 30
+ "scale, rank, dmgschool, BaseAttackTime, RangeAttackTime, BaseVariance, RangeVariance, unit_class, unit_flags, unit_flags2, "
+ // 31 32 33 34 35 36 37
+ "dynamicflags, family, trainer_type, trainer_spell, trainer_class, trainer_race, type, "
+ // 38 39 40 41 42 43 44 45 46 47 48
"type_flags, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, spell1, "
- // 55 56 57 58 59 60 61 62 63 64 65 66 67
+ // 49 50 51 52 53 54 55 56 57 58 59 60 61
"spell2, spell3, spell4, spell5, spell6, spell7, spell8, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, "
- // 68 69 70 71 72 73 74 75 76 77 78
- "InhabitType, HoverHeight, Health_mod, Mana_mod, Armor_mod, RacialLeader, questItem1, questItem2, questItem3, questItem4, questItem5, "
- // 79 80 81 82 83 84
- " questItem6, movementId, RegenHealth, mechanic_immune_mask, flags_extra, ScriptName "
+ // 62 63 64 65 66 67 68 69
+ "InhabitType, HoverHeight, HealthModifier, ManaModifier, ArmorModifier, DamageModifier, ExperienceModifier, RacialLeader, "
+ // 70 71 72 73 74 75 76 77 78 79 80
+ "questItem1, questItem2, questItem3, questItem4, questItem5, questItem6, movementId, RegenHealth, mechanic_immune_mask, flags_extra, ScriptName "
"FROM creature_template;");
if (!result)
@@ -421,91 +422,7 @@ void ObjectMgr::LoadCreatureTemplates()
do
{
Field* fields = result->Fetch();
-
- uint32 entry = fields[0].GetUInt32();
-
-
- CreatureTemplate& creatureTemplate = _creatureTemplateStore[entry];
-
- creatureTemplate.Entry = entry;
-
- for (uint8 i = 0; i < MAX_DIFFICULTY - 1; ++i)
- creatureTemplate.DifficultyEntry[i] = fields[1 + i].GetUInt32();
-
- for (uint8 i = 0; i < MAX_KILL_CREDIT; ++i)
- creatureTemplate.KillCredit[i] = fields[4 + i].GetUInt32();
-
- creatureTemplate.Modelid1 = fields[6].GetUInt32();
- creatureTemplate.Modelid2 = fields[7].GetUInt32();
- creatureTemplate.Modelid3 = fields[8].GetUInt32();
- creatureTemplate.Modelid4 = fields[9].GetUInt32();
- creatureTemplate.Name = fields[10].GetString();
- creatureTemplate.SubName = fields[11].GetString();
- creatureTemplate.IconName = fields[12].GetString();
- creatureTemplate.GossipMenuId = fields[13].GetUInt32();
- creatureTemplate.minlevel = fields[14].GetUInt8();
- creatureTemplate.maxlevel = fields[15].GetUInt8();
- creatureTemplate.expansion = uint32(fields[16].GetInt16());
- creatureTemplate.faction_A = uint32(fields[17].GetUInt16());
- creatureTemplate.faction_H = uint32(fields[18].GetUInt16());
- creatureTemplate.npcflag = fields[19].GetUInt32();
- creatureTemplate.speed_walk = fields[20].GetFloat();
- creatureTemplate.speed_run = fields[21].GetFloat();
- creatureTemplate.scale = fields[22].GetFloat();
- creatureTemplate.rank = uint32(fields[23].GetUInt8());
- creatureTemplate.mindmg = fields[24].GetFloat();
- creatureTemplate.maxdmg = fields[25].GetFloat();
- creatureTemplate.dmgschool = uint32(fields[26].GetInt8());
- creatureTemplate.attackpower = fields[27].GetUInt32();
- creatureTemplate.dmg_multiplier = fields[28].GetFloat();
- creatureTemplate.baseattacktime = fields[29].GetUInt32();
- creatureTemplate.rangeattacktime = fields[30].GetUInt32();
- creatureTemplate.unit_class = uint32(fields[31].GetUInt8());
- creatureTemplate.unit_flags = fields[32].GetUInt32();
- creatureTemplate.unit_flags2 = fields[33].GetUInt32();
- creatureTemplate.dynamicflags = fields[34].GetUInt32();
- creatureTemplate.family = uint32(fields[35].GetUInt8());
- creatureTemplate.trainer_type = uint32(fields[36].GetUInt8());
- creatureTemplate.trainer_spell = fields[37].GetUInt32();
- creatureTemplate.trainer_class = uint32(fields[38].GetUInt8());
- creatureTemplate.trainer_race = uint32(fields[39].GetUInt8());
- creatureTemplate.minrangedmg = fields[40].GetFloat();
- creatureTemplate.maxrangedmg = fields[41].GetFloat();
- creatureTemplate.rangedattackpower = uint32(fields[42].GetUInt16());
- creatureTemplate.type = uint32(fields[43].GetUInt8());
- creatureTemplate.type_flags = fields[44].GetUInt32();
- creatureTemplate.lootid = fields[45].GetUInt32();
- creatureTemplate.pickpocketLootId = fields[46].GetUInt32();
- creatureTemplate.SkinLootId = fields[47].GetUInt32();
-
- for (uint8 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i)
- creatureTemplate.resistance[i] = fields[48 + i -1].GetInt16();
-
- for (uint8 i = 0; i < CREATURE_MAX_SPELLS; ++i)
- creatureTemplate.spells[i] = fields[54 + i].GetUInt32();
-
- creatureTemplate.PetSpellDataId = fields[62].GetUInt32();
- creatureTemplate.VehicleId = fields[63].GetUInt32();
- creatureTemplate.mingold = fields[64].GetUInt32();
- creatureTemplate.maxgold = fields[65].GetUInt32();
- creatureTemplate.AIName = fields[66].GetString();
- creatureTemplate.MovementType = uint32(fields[67].GetUInt8());
- creatureTemplate.InhabitType = uint32(fields[68].GetUInt8());
- creatureTemplate.HoverHeight = fields[69].GetFloat();
- creatureTemplate.ModHealth = fields[70].GetFloat();
- creatureTemplate.ModMana = fields[71].GetFloat();
- creatureTemplate.ModArmor = fields[72].GetFloat();
- creatureTemplate.RacialLeader = fields[73].GetBool();
-
- for (uint8 i = 0; i < MAX_CREATURE_QUEST_ITEMS; ++i)
- creatureTemplate.questItems[i] = fields[74 + i].GetUInt32();
-
- creatureTemplate.movementId = fields[80].GetUInt32();
- creatureTemplate.RegenHealth = fields[81].GetBool();
- creatureTemplate.MechanicImmuneMask = fields[82].GetUInt32();
- creatureTemplate.flags_extra = fields[83].GetUInt32();
- creatureTemplate.ScriptID = GetScriptId(fields[84].GetCString());
-
+ LoadCreatureTemplate(fields);
++count;
}
while (result->NextRow());
@@ -517,6 +434,88 @@ void ObjectMgr::LoadCreatureTemplates()
TC_LOG_INFO("server.loading", ">> Loaded %u creature definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
}
+void ObjectMgr::LoadCreatureTemplate(Field* fields)
+{
+ uint32 entry = fields[0].GetUInt32();
+
+ CreatureTemplate& creatureTemplate = _creatureTemplateStore[entry];
+
+ creatureTemplate.Entry = entry;
+
+ for (uint8 i = 0; i < MAX_DIFFICULTY - 1; ++i)
+ creatureTemplate.DifficultyEntry[i] = fields[1 + i].GetUInt32();
+
+ for (uint8 i = 0; i < MAX_KILL_CREDIT; ++i)
+ creatureTemplate.KillCredit[i] = fields[4 + i].GetUInt32();
+
+ creatureTemplate.Modelid1 = fields[6].GetUInt32();
+ creatureTemplate.Modelid2 = fields[7].GetUInt32();
+ creatureTemplate.Modelid3 = fields[8].GetUInt32();
+ creatureTemplate.Modelid4 = fields[9].GetUInt32();
+ creatureTemplate.Name = fields[10].GetString();
+ creatureTemplate.SubName = fields[11].GetString();
+ creatureTemplate.IconName = fields[12].GetString();
+ creatureTemplate.GossipMenuId = fields[13].GetUInt32();
+ creatureTemplate.minlevel = fields[14].GetUInt8();
+ creatureTemplate.maxlevel = fields[15].GetUInt8();
+ creatureTemplate.expansion = uint32(fields[16].GetInt16());
+ creatureTemplate.faction = fields[17].GetUInt16();
+ creatureTemplate.npcflag = fields[18].GetUInt32();
+ creatureTemplate.speed_walk = fields[19].GetFloat();
+ creatureTemplate.speed_run = fields[20].GetFloat();
+ creatureTemplate.scale = fields[21].GetFloat();
+ creatureTemplate.rank = fields[22].GetUInt8();
+ creatureTemplate.dmgschool = uint32(fields[23].GetInt8());
+ creatureTemplate.BaseAttackTime = fields[24].GetUInt32();
+ creatureTemplate.RangeAttackTime = fields[25].GetUInt32();
+ creatureTemplate.BaseVariance = fields[26].GetFloat();
+ creatureTemplate.RangeVariance = fields[27].GetFloat();
+ creatureTemplate.unit_class = fields[28].GetUInt8();
+ creatureTemplate.unit_flags = fields[29].GetUInt32();
+ creatureTemplate.unit_flags2 = fields[30].GetUInt32();
+ creatureTemplate.dynamicflags = fields[31].GetUInt32();
+ creatureTemplate.family = fields[32].GetUInt8();
+ creatureTemplate.trainer_type = fields[33].GetUInt8();
+ creatureTemplate.trainer_spell = fields[34].GetUInt32();
+ creatureTemplate.trainer_class = fields[35].GetUInt8();
+ creatureTemplate.trainer_race = fields[36].GetUInt8();
+ creatureTemplate.type = fields[37].GetUInt8();
+ creatureTemplate.type_flags = fields[38].GetUInt32();
+ creatureTemplate.lootid = fields[39].GetUInt32();
+ creatureTemplate.pickpocketLootId = fields[40].GetUInt32();
+ creatureTemplate.SkinLootId = fields[41].GetUInt32();
+
+ for (uint8 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i)
+ creatureTemplate.resistance[i] = fields[42 + i - 1].GetInt16();
+
+ for (uint8 i = 0; i < CREATURE_MAX_SPELLS; ++i)
+ creatureTemplate.spells[i] = fields[48 + i].GetUInt32();
+
+ creatureTemplate.PetSpellDataId = fields[56].GetUInt32();
+ creatureTemplate.VehicleId = fields[57].GetUInt32();
+ creatureTemplate.mingold = fields[58].GetUInt32();
+ creatureTemplate.maxgold = fields[59].GetUInt32();
+ creatureTemplate.AIName = fields[60].GetString();
+ creatureTemplate.MovementType = fields[61].GetUInt8();
+ creatureTemplate.InhabitType = fields[62].GetUInt8();
+ creatureTemplate.HoverHeight = fields[63].GetFloat();
+ creatureTemplate.ModHealth = fields[64].GetFloat();
+ creatureTemplate.ModMana = fields[65].GetFloat();
+ creatureTemplate.ModArmor = fields[66].GetFloat();
+ creatureTemplate.ModDamage = fields[67].GetFloat();
+ creatureTemplate.ModExperience = fields[68].GetFloat();
+ creatureTemplate.RacialLeader = fields[69].GetBool();
+
+ for (uint8 i = 0; i < MAX_CREATURE_QUEST_ITEMS; ++i)
+ creatureTemplate.questItems[i] = fields[70 + i].GetUInt32();
+
+ creatureTemplate.movementId = fields[76].GetUInt32();
+ creatureTemplate.RegenHealth = fields[77].GetBool();
+ creatureTemplate.MechanicImmuneMask = fields[78].GetUInt32();
+ creatureTemplate.flags_extra = fields[79].GetUInt32();
+ creatureTemplate.ScriptID = GetScriptId(fields[80].GetCString());
+}
+
void ObjectMgr::LoadCreatureTemplateAddons()
{
uint32 oldMSTime = getMSTime();
@@ -636,37 +635,51 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo)
}
ok2 = true;
}
+
if (!ok2)
continue;
if (cInfo->expansion > difficultyInfo->expansion)
{
- TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, expansion %u) has different `expansion` in difficulty %u mode (Entry: %u, expansion %u).",
+ TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, exp %u) has different `exp` in difficulty %u mode (Entry: %u, exp %u).",
cInfo->Entry, cInfo->expansion, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->expansion);
}
- if (cInfo->faction_A != difficultyInfo->faction_A)
+ if (cInfo->minlevel > difficultyInfo->minlevel)
+ {
+ TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, minlevel %u) has different `minlevel` in difficulty %u mode (Entry: %u, minlevel %u).",
+ cInfo->Entry, cInfo->minlevel, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->minlevel);
+ }
+
+ if (cInfo->maxlevel > difficultyInfo->maxlevel)
{
- TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, faction_A %u) has different `faction_A` in difficulty %u mode (Entry: %u, faction_A %u).",
- cInfo->Entry, cInfo->faction_A, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->faction_A);
+ TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, maxlevel %u) has different `maxlevel` in difficulty %u mode (Entry: %u, maxlevel %u).",
+ cInfo->Entry, cInfo->maxlevel, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->maxlevel);
}
- if (cInfo->faction_H != difficultyInfo->faction_H)
+ if (cInfo->faction != difficultyInfo->faction)
{
- TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, faction_H %u) has different `faction_H` in difficulty %u mode (Entry: %u, faction_H %u).",
- cInfo->Entry, cInfo->faction_H, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->faction_H);
+ TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, faction %u) has different `faction` in difficulty %u mode (Entry: %u, faction %u).",
+ cInfo->Entry, cInfo->faction, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->faction);
+ TC_LOG_ERROR("sql.sql", "Possible FIX: UPDATE `creature_template` SET `faction`=%u WHERE `entry`=%u;",
+ cInfo->faction, cInfo->DifficultyEntry[diff]);
}
if (cInfo->unit_class != difficultyInfo->unit_class)
{
TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, class %u) has different `unit_class` in difficulty %u mode (Entry: %u, class %u).",
cInfo->Entry, cInfo->unit_class, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->unit_class);
+ TC_LOG_ERROR("sql.sql", "Possible FIX: UPDATE `creature_template` SET `unit_class`=%u WHERE `entry`=%u;",
+ cInfo->unit_class, cInfo->DifficultyEntry[diff]);
continue;
}
if (cInfo->npcflag != difficultyInfo->npcflag)
{
- TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has different `npcflag` in difficulty %u mode (Entry: %u).", cInfo->Entry, diff + 1, cInfo->DifficultyEntry[diff]);
+ TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, `npcflag`: %u) has different `npcflag` in difficulty %u mode (Entry: %u, `npcflag`: %u).",
+ cInfo->Entry, cInfo->npcflag, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->npcflag);
+ TC_LOG_ERROR("sql.sql", "Possible FIX: UPDATE `creature_template` SET `npcflag`=%u WHERE `entry`=%u;",
+ cInfo->npcflag, cInfo->DifficultyEntry[diff]);
continue;
}
@@ -674,23 +687,34 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo)
{
TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, family %u) has different `family` in difficulty %u mode (Entry: %u, family %u).",
cInfo->Entry, cInfo->family, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->family);
+ TC_LOG_ERROR("sql.sql", "Possible FIX: UPDATE `creature_template` SET `family`=%u WHERE `entry`=%u;",
+ cInfo->family, cInfo->DifficultyEntry[diff]);
}
if (cInfo->trainer_class != difficultyInfo->trainer_class)
{
- TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has different `trainer_class` in difficulty %u mode (Entry: %u).", cInfo->Entry, diff + 1, cInfo->DifficultyEntry[diff]);
+ TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, trainer_class: %u) has different `trainer_class` in difficulty %u mode (Entry: %u, trainer_class: %u).",
+ cInfo->Entry, cInfo->trainer_class, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->trainer_class);
+ TC_LOG_ERROR("sql.sql", "Possible FIX: UPDATE `creature_template` SET `trainer_class`=%u WHERE `entry`=%u;",
+ cInfo->trainer_class, cInfo->DifficultyEntry[diff]);
continue;
}
if (cInfo->trainer_race != difficultyInfo->trainer_race)
{
- TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has different `trainer_race` in difficulty %u mode (Entry: %u).", cInfo->Entry, diff + 1, cInfo->DifficultyEntry[diff]);
+ TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, trainer_race: %u) has different `trainer_race` in difficulty %u mode (Entry: %u, trainer_race: %u).",
+ cInfo->Entry, cInfo->trainer_race, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->trainer_race);
+ TC_LOG_ERROR("sql.sql", "Possible FIX: UPDATE `creature_template` SET `trainer_race`=%u WHERE `entry`=%u;",
+ cInfo->trainer_race, cInfo->DifficultyEntry[diff]);
continue;
}
if (cInfo->trainer_type != difficultyInfo->trainer_type)
{
- TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has different `trainer_type` in difficulty %u mode (Entry: %u).", cInfo->Entry, diff + 1, cInfo->DifficultyEntry[diff]);
+ TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, trainer_type: %u) has different `trainer_type` in difficulty %u mode (Entry: %u, trainer_type: %u).",
+ cInfo->Entry, cInfo->trainer_type, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->trainer_type);
+ TC_LOG_ERROR("sql.sql", "Possible FIX: UPDATE `creature_template` SET `trainer_type`=%u WHERE `entry`=%u;",
+ cInfo->trainer_type, cInfo->DifficultyEntry[diff]);
continue;
}
@@ -704,6 +728,8 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo)
{
TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, type %u) has different `type` in difficulty %u mode (Entry: %u, type %u).",
cInfo->Entry, cInfo->type, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->type);
+ TC_LOG_ERROR("sql.sql", "Possible FIX: UPDATE `creature_template` SET `type`=%u WHERE `entry`=%u;",
+ cInfo->type, cInfo->DifficultyEntry[diff]);
}
if (!cInfo->VehicleId && difficultyInfo->VehicleId)
@@ -731,13 +757,9 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo)
ok = true;
}
- FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(cInfo->faction_A);
- if (!factionTemplate)
- TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has non-existing faction_A template (%u).", cInfo->Entry, cInfo->faction_A);
-
- factionTemplate = sFactionTemplateStore.LookupEntry(cInfo->faction_H);
+ FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(cInfo->faction);
if (!factionTemplate)
- TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has non-existing faction_H template (%u).", cInfo->Entry, cInfo->faction_H);
+ TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has non-existing faction template (%u).", cInfo->Entry, cInfo->faction);
// used later for scale
CreatureDisplayInfoEntry const* displayScaleEntry = NULL;
@@ -833,11 +855,11 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo)
const_cast<CreatureTemplate*>(cInfo)->dmgschool = SPELL_SCHOOL_NORMAL;
}
- if (cInfo->baseattacktime == 0)
- const_cast<CreatureTemplate*>(cInfo)->baseattacktime = BASE_ATTACK_TIME;
+ if (cInfo->BaseAttackTime == 0)
+ const_cast<CreatureTemplate*>(cInfo)->BaseAttackTime = BASE_ATTACK_TIME;
- if (cInfo->rangeattacktime == 0)
- const_cast<CreatureTemplate*>(cInfo)->rangeattacktime = BASE_ATTACK_TIME;
+ if (cInfo->RangeAttackTime == 0)
+ const_cast<CreatureTemplate*>(cInfo)->RangeAttackTime = BASE_ATTACK_TIME;
if ((cInfo->npcflag & UNIT_NPC_FLAG_TRAINER) && cInfo->trainer_type >= MAX_TRAINER_TYPE)
TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has wrong trainer type %u.", cInfo->Entry, cInfo->trainer_type);
@@ -932,7 +954,7 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo)
const_cast<CreatureTemplate*>(cInfo)->flags_extra &= CREATURE_FLAG_EXTRA_DB_ALLOWED;
}
- const_cast<CreatureTemplate*>(cInfo)->dmg_multiplier *= Creature::_GetDamageMod(cInfo->rank);
+ const_cast<CreatureTemplate*>(cInfo)->ModDamage *= Creature::_GetDamageMod(cInfo->rank);
}
void ObjectMgr::LoadCreatureAddons()
@@ -1645,7 +1667,7 @@ void ObjectMgr::LoadCreatures()
}
// Skip spawnMask check for transport maps
- if (!_transportMaps.count(data.mapid) && data.spawnMask & ~spawnMasks[data.mapid])
+ if (!IsTransportMap(data.mapid) && data.spawnMask & ~spawnMasks[data.mapid])
TC_LOG_ERROR("sql.sql", "Table `creature` have creature (GUID: %u) that have wrong spawn mask %u including not supported difficulty modes for map (Id: %u).", guid, data.spawnMask, data.mapid);
bool ok = true;
@@ -1827,7 +1849,7 @@ bool ObjectMgr::MoveCreData(uint32 guid, uint32 mapId, const Position& pos)
return true;
}
-uint32 ObjectMgr::AddCreData(uint32 entry, uint32 /*team*/, uint32 mapId, float x, float y, float z, float o, uint32 spawntimedelay)
+uint32 ObjectMgr::AddCreData(uint32 entry, uint32 mapId, float x, float y, float z, float o, uint32 spawntimedelay /*= 0*/)
{
CreatureTemplate const* cInfo = GetCreatureTemplate(entry);
if (!cInfo)
@@ -1980,7 +2002,7 @@ void ObjectMgr::LoadGameobjects()
data.spawnMask = fields[14].GetUInt8();
- if (!_transportMaps.count(data.mapid) && data.spawnMask & ~spawnMasks[data.mapid])
+ if (!IsTransportMap(data.mapid) && data.spawnMask & ~spawnMasks[data.mapid])
TC_LOG_ERROR("sql.sql", "Table `gameobject` has gameobject (GUID: %u Entry: %u) that has wrong spawn mask %u including not supported difficulty modes for map (Id: %u), skip", guid, data.id, data.spawnMask, data.mapid);
data.phaseMask = fields[15].GetUInt32();
@@ -2176,7 +2198,7 @@ void ObjectMgr::LoadItemLocales()
ItemLocale& data = _itemLocaleStore[entry];
- for (uint8 i = 1; i < TOTAL_LOCALES; ++i)
+ for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
{
LocaleConstant locale = (LocaleConstant) i;
AddLocaleString(fields[1 + 2 * (i - 1)].GetString(), locale, data.Name);
@@ -2184,7 +2206,7 @@ void ObjectMgr::LoadItemLocales()
}
} while (result->NextRow());
- TC_LOG_INFO("server.loading", ">> Loaded %lu Item locale strings in %u ms", (unsigned long)_itemLocaleStore.size(), GetMSTimeDiffToNow(oldMSTime));
+ TC_LOG_INFO("server.loading", ">> Loaded %u Item locale strings in %u ms", uint32(_itemLocaleStore.size()), GetMSTimeDiffToNow(oldMSTime));
}
void ObjectMgr::LoadItemTemplates()
@@ -2818,7 +2840,7 @@ void ObjectMgr::LoadItemSetNameLocales()
ItemSetNameLocale& data = _itemSetNameLocaleStore[entry];
- for (uint8 i = 1; i < TOTAL_LOCALES; ++i)
+ for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
AddLocaleString(fields[i].GetString(), LocaleConstant(i), data.Name);
} while (result->NextRow());
@@ -2928,32 +2950,32 @@ void ObjectMgr::LoadVehicleTemplateAccessories()
{
Field* fields = result->Fetch();
- uint32 uiEntry = fields[0].GetUInt32();
- uint32 uiAccessory = fields[1].GetUInt32();
- int8 uiSeat = int8(fields[2].GetInt8());
- bool bMinion = fields[3].GetBool();
- uint8 uiSummonType = fields[4].GetUInt8();
- uint32 uiSummonTimer= fields[5].GetUInt32();
+ uint32 entry = fields[0].GetUInt32();
+ uint32 accessory = fields[1].GetUInt32();
+ int8 seatId = fields[2].GetInt8();
+ bool isMinion = fields[3].GetBool();
+ uint8 summonType = fields[4].GetUInt8();
+ uint32 summonTimer = fields[5].GetUInt32();
- if (!sObjectMgr->GetCreatureTemplate(uiEntry))
+ if (!sObjectMgr->GetCreatureTemplate(entry))
{
- TC_LOG_ERROR("sql.sql", "Table `vehicle_template_accessory`: creature template entry %u does not exist.", uiEntry);
+ TC_LOG_ERROR("sql.sql", "Table `vehicle_template_accessory`: creature template entry %u does not exist.", entry);
continue;
}
- if (!sObjectMgr->GetCreatureTemplate(uiAccessory))
+ if (!sObjectMgr->GetCreatureTemplate(accessory))
{
- TC_LOG_ERROR("sql.sql", "Table `vehicle_template_accessory`: Accessory %u does not exist.", uiAccessory);
+ TC_LOG_ERROR("sql.sql", "Table `vehicle_template_accessory`: Accessory %u does not exist.", accessory);
continue;
}
- if (_spellClickInfoStore.find(uiEntry) == _spellClickInfoStore.end())
+ if (_spellClickInfoStore.find(entry) == _spellClickInfoStore.end())
{
- TC_LOG_ERROR("sql.sql", "Table `vehicle_template_accessory`: creature template entry %u has no data in npc_spellclick_spells", uiEntry);
+ TC_LOG_ERROR("sql.sql", "Table `vehicle_template_accessory`: creature template entry %u has no data in npc_spellclick_spells", entry);
continue;
}
- _vehicleTemplateAccessoryStore[uiEntry].push_back(VehicleAccessory(uiAccessory, uiSeat, bMinion, uiSummonType, uiSummonTimer));
+ _vehicleTemplateAccessoryStore[entry].push_back(VehicleAccessory(accessory, seatId, isMinion, summonType, summonTimer));
++count;
}
@@ -3299,17 +3321,91 @@ void ObjectMgr::LoadPlayerInfo()
}
}
+
+ // Load playercreate skills
+ TC_LOG_INFO("server.loading", "Loading Player Create Skill Data...");
+ {
+ uint32 oldMSTime = getMSTime();
+
+ QueryResult result = WorldDatabase.PQuery("SELECT raceMask, classMask, skill, rank FROM playercreateinfo_skills");
+
+ if (!result)
+ {
+ TC_LOG_ERROR("server.loading", ">> Loaded 0 player create skills. DB table `playercreateinfo_skills` is empty.");
+ }
+ else
+ {
+ uint32 count = 0;
+
+ do
+ {
+ Field* fields = result->Fetch();
+ uint32 raceMask = fields[0].GetUInt32();
+ uint32 classMask = fields[1].GetUInt32();
+ PlayerCreateInfoSkill skill;
+ skill.SkillId = fields[2].GetUInt16();
+ skill.Rank = fields[3].GetUInt16();
+
+ if (skill.Rank >= MAX_SKILL_STEP)
+ {
+ TC_LOG_ERROR("sql.sql", "Skill rank value %hu set for skill %hu raceMask %u classMask %u is too high, max allowed value is %d", skill.Rank, skill.SkillId, raceMask, classMask, MAX_SKILL_STEP);
+ continue;
+ }
+
+ if (raceMask != 0 && !(raceMask & RACEMASK_ALL_PLAYABLE))
+ {
+ TC_LOG_ERROR("sql.sql", "Wrong race mask %u in `playercreateinfo_skills` table, ignoring.", raceMask);
+ continue;
+ }
+
+ if (classMask != 0 && !(classMask & CLASSMASK_ALL_PLAYABLE))
+ {
+ TC_LOG_ERROR("sql.sql", "Wrong class mask %u in `playercreateinfo_skills` table, ignoring.", classMask);
+ continue;
+ }
+
+ if (!sSkillLineStore.LookupEntry(skill.SkillId))
+ {
+ TC_LOG_ERROR("sql.sql", "Wrong skill id %u in `playercreateinfo_skills` table, ignoring.", skill.SkillId);
+ continue;
+ }
+
+ for (uint32 raceIndex = RACE_HUMAN; raceIndex < MAX_RACES; ++raceIndex)
+ {
+ if (raceMask == 0 || ((1 << (raceIndex - 1)) & raceMask))
+ {
+ for (uint32 classIndex = CLASS_WARRIOR; classIndex < MAX_CLASSES; ++classIndex)
+ {
+ if (classMask == 0 || ((1 << (classIndex - 1)) & classMask))
+ {
+ if (!GetSkillRaceClassInfo(skill.SkillId, raceIndex, classIndex))
+ continue;
+
+ if (PlayerInfo* info = _playerInfo[raceIndex][classIndex])
+ {
+ info->skills.push_back(skill);
+ ++count;
+ }
+ }
+ }
+ }
+ }
+ } while (result->NextRow());
+
+ TC_LOG_INFO("server.loading", ">> Loaded %u player create skills in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
+ }
+ }
+
// Load playercreate spells
TC_LOG_INFO("server.loading", "Loading Player Create Spell Data...");
{
uint32 oldMSTime = getMSTime();
- std::string tableName = sWorld->getBoolConfig(CONFIG_START_ALL_SPELLS) ? "playercreateinfo_spell_custom" : "playercreateinfo_spell";
- QueryResult result = WorldDatabase.PQuery("SELECT racemask, classmask, Spell FROM %s", tableName.c_str());
+ QueryResult result = WorldDatabase.PQuery("SELECT racemask, classmask, Spell FROM playercreateinfo_spell_custom");
if (!result)
{
- TC_LOG_ERROR("server.loading", ">> Loaded 0 player create spells. DB table `%s` is empty.", tableName.c_str());
+ TC_LOG_ERROR("server.loading", ">> Loaded 0 player create spells. DB table `playercreateinfo_spell_custom` is empty.");
}
else
{
@@ -3324,13 +3420,13 @@ void ObjectMgr::LoadPlayerInfo()
if (raceMask != 0 && !(raceMask & RACEMASK_ALL_PLAYABLE))
{
- TC_LOG_ERROR("sql.sql", "Wrong race mask %u in `%s` table, ignoring.", raceMask, tableName.c_str());
+ TC_LOG_ERROR("sql.sql", "Wrong race mask %u in `playercreateinfo_spell_custom` table, ignoring.", raceMask);
continue;
}
if (classMask != 0 && !(classMask & CLASSMASK_ALL_PLAYABLE))
{
- TC_LOG_ERROR("sql.sql", "Wrong class mask %u in `%s` table, ignoring.", classMask, tableName.c_str());
+ TC_LOG_ERROR("sql.sql", "Wrong class mask %u in `playercreateinfo_spell_custom` table, ignoring.", classMask);
continue;
}
@@ -3344,7 +3440,7 @@ void ObjectMgr::LoadPlayerInfo()
{
if (PlayerInfo* info = _playerInfo[raceIndex][classIndex])
{
- info->spell.push_back(spellId);
+ info->customSpells.push_back(spellId);
++count;
}
// We need something better here, the check is not accounting for spells used by multiple races/classes but not all of them.
@@ -3358,7 +3454,7 @@ void ObjectMgr::LoadPlayerInfo()
}
while (result->NextRow());
- TC_LOG_INFO("server.loading", ">> Loaded %u player create spells in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
+ TC_LOG_INFO("server.loading", ">> Loaded %u custom player create spells in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
}
}
@@ -3799,8 +3895,8 @@ void ObjectMgr::LoadQuests()
"RequiredItemId1, RequiredItemId2, RequiredItemId3, RequiredItemId4, RequiredItemId5, RequiredItemId6, RequiredItemCount1, RequiredItemCount2, RequiredItemCount3, RequiredItemCount4, RequiredItemCount5, RequiredItemCount6, "
// 117 118 119 120 121 122 123 124 125 126 127 128 129
"Unknown0, ObjectiveText1, ObjectiveText2, ObjectiveText3, ObjectiveText4, DetailsEmote1, DetailsEmote2, DetailsEmote3, DetailsEmote4, DetailsEmoteDelay1, DetailsEmoteDelay2, DetailsEmoteDelay3, DetailsEmoteDelay4, "
- // 130 131 132 133 134 135 136 137 138 139 140
- "EmoteOnIncomplete, EmoteOnComplete, OfferRewardEmote1, OfferRewardEmote2, OfferRewardEmote3, OfferRewardEmote4, OfferRewardEmoteDelay1, OfferRewardEmoteDelay2, OfferRewardEmoteDelay3, OfferRewardEmoteDelay4, WDBVerified"
+ // 130 131 132 133 134 135 136 137 138 139
+ "EmoteOnIncomplete, EmoteOnComplete, OfferRewardEmote1, OfferRewardEmote2, OfferRewardEmote3, OfferRewardEmote4, OfferRewardEmoteDelay1, OfferRewardEmoteDelay2, OfferRewardEmoteDelay3, OfferRewardEmoteDelay4"
" FROM quest_template");
if (!result)
{
@@ -4426,7 +4522,7 @@ void ObjectMgr::LoadQuestLocales()
QuestLocale& data = _questLocaleStore[entry];
- for (uint8 i = 1; i < TOTAL_LOCALES; ++i)
+ for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
{
LocaleConstant locale = (LocaleConstant) i;
@@ -4443,7 +4539,7 @@ void ObjectMgr::LoadQuestLocales()
}
} while (result->NextRow());
- TC_LOG_INFO("server.loading", ">> Loaded %lu Quest locale strings in %u ms", (unsigned long)_questLocaleStore.size(), GetMSTimeDiffToNow(oldMSTime));
+ TC_LOG_INFO("server.loading", ">> Loaded %u Quest locale strings in %u ms", uint32(_questLocaleStore.size()), GetMSTimeDiffToNow(oldMSTime));
}
void ObjectMgr::LoadScripts(ScriptsType type)
@@ -5055,11 +5151,11 @@ void ObjectMgr::LoadPageTextLocales()
PageTextLocale& data = _pageTextLocaleStore[entry];
- for (uint8 i = 1; i < TOTAL_LOCALES; ++i)
+ for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
AddLocaleString(fields[i].GetString(), LocaleConstant(i), data.Text);
} while (result->NextRow());
- TC_LOG_INFO("server.loading", ">> Loaded %lu PageText locale strings in %u ms", (unsigned long)_pageTextLocaleStore.size(), GetMSTimeDiffToNow(oldMSTime));
+ TC_LOG_INFO("server.loading", ">> Loaded %u PageText locale strings in %u ms", uint32(_pageTextLocaleStore.size()), GetMSTimeDiffToNow(oldMSTime));
}
void ObjectMgr::LoadInstanceTemplate()
@@ -5203,17 +5299,28 @@ void ObjectMgr::LoadGossipText()
{
uint32 oldMSTime = getMSTime();
- QueryResult result = WorldDatabase.Query("SELECT * FROM npc_text");
+ QueryResult result = WorldDatabase.Query("SELECT ID, "
+ "text0_0, text0_1, BroadcastTextID0, lang0, prob0, em0_0, em0_1, em0_2, em0_3, em0_4, em0_5, "
+ "text1_0, text1_1, BroadcastTextID1, lang1, prob1, em1_0, em1_1, em1_2, em1_3, em1_4, em1_5, "
+ "text2_0, text2_1, BroadcastTextID2, lang2, prob2, em2_0, em2_1, em2_2, em2_3, em2_4, em2_5, "
+ "text3_0, text3_1, BroadcastTextID3, lang3, prob3, em3_0, em3_1, em3_2, em3_3, em3_4, em3_5, "
+ "text4_0, text4_1, BroadcastTextID4, lang4, prob4, em4_0, em4_1, em4_2, em4_3, em4_4, em4_5, "
+ "text5_0, text5_1, BroadcastTextID5, lang5, prob5, em5_0, em5_1, em5_2, em5_3, em5_4, em5_5, "
+ "text6_0, text6_1, BroadcastTextID6, lang6, prob6, em6_0, em6_1, em6_2, em6_3, em6_4, em6_5, "
+ "text7_0, text7_1, BroadcastTextID7, lang7, prob7, em7_0, em7_1, em7_2, em7_3, em7_4, em7_5 "
+ "FROM npc_text");
+
- int count = 0;
if (!result)
{
- TC_LOG_INFO("server.loading", ">> Loaded %u npc texts", count);
+ TC_LOG_INFO("server.loading", ">> Loaded 0 npc texts, table is empty!");
return;
}
+
_gossipTextStore.rehash(result->GetRowCount());
- int cic;
+ uint32 count = 0;
+ uint8 cic;
do
{
@@ -5222,32 +5329,44 @@ void ObjectMgr::LoadGossipText()
Field* fields = result->Fetch();
- uint32 Text_ID = fields[cic++].GetUInt32();
- if (!Text_ID)
+ uint32 id = fields[cic++].GetUInt32();
+ if (!id)
{
- TC_LOG_ERROR("sql.sql", "Table `npc_text` has record wit reserved id 0, ignore.");
+ TC_LOG_ERROR("sql.sql", "Table `npc_text` has record with reserved id 0, ignore.");
continue;
}
- GossipText& gText = _gossipTextStore[Text_ID];
+ GossipText& gText = _gossipTextStore[id];
- for (int i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; i++)
+ for (uint8 i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i)
{
gText.Options[i].Text_0 = fields[cic++].GetString();
gText.Options[i].Text_1 = fields[cic++].GetString();
-
- gText.Options[i].BroadcastTextID = fields[cic++].GetUInt32(); // Need for correct loading order
-
+ gText.Options[i].BroadcastTextID = fields[cic++].GetUInt32();
gText.Options[i].Language = fields[cic++].GetUInt8();
gText.Options[i].Probability = fields[cic++].GetFloat();
- for (uint8 j=0; j < MAX_GOSSIP_TEXT_EMOTES; ++j)
+ for (uint8 j = 0; j < MAX_GOSSIP_TEXT_EMOTES; ++j)
{
- gText.Options[i].Emotes[j]._Delay = fields[cic++].GetUInt16();
- gText.Options[i].Emotes[j]._Emote = fields[cic++].GetUInt16();
+ gText.Options[i].Emotes[j]._Delay = fields[cic++].GetUInt16();
+ gText.Options[i].Emotes[j]._Emote = fields[cic++].GetUInt16();
}
}
- } while (result->NextRow());
+
+ for (uint8 i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; i++)
+ {
+ if (gText.Options[i].BroadcastTextID)
+ {
+ if (!sObjectMgr->GetBroadcastText(gText.Options[i].BroadcastTextID))
+ {
+ TC_LOG_ERROR("sql.sql", "GossipText (Id: %u) in table `npc_text` has non-existing or incompatible BroadcastTextID%u %u.", id, i, gText.Options[i].BroadcastTextID);
+ gText.Options[i].BroadcastTextID = 0;
+ }
+ }
+ }
+
+ }
+ while (result->NextRow());
TC_LOG_INFO("server.loading", ">> Loaded %u npc texts in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
}
@@ -5280,10 +5399,10 @@ void ObjectMgr::LoadNpcTextLocales()
NpcTextLocale& data = _npcTextLocaleStore[entry];
- for (uint8 i = 1; i < TOTAL_LOCALES; ++i)
+ for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
{
LocaleConstant locale = (LocaleConstant) i;
- for (uint8 j = 0; j < MAX_LOCALES; ++j)
+ for (uint8 j = 0; j < MAX_GOSSIP_TEXT_OPTIONS; ++j)
{
AddLocaleString(fields[1 + 8 * 2 * (i - 1) + 2 * j].GetString(), locale, data.Text_0[j]);
AddLocaleString(fields[1 + 8 * 2 * (i - 1) + 2 * j + 1].GetString(), locale, data.Text_1[j]);
@@ -5291,7 +5410,7 @@ void ObjectMgr::LoadNpcTextLocales()
}
} while (result->NextRow());
- TC_LOG_INFO("server.loading", ">> Loaded %lu NpcText locale strings in %u ms", (unsigned long)_npcTextLocaleStore.size(), GetMSTimeDiffToNow(oldMSTime));
+ TC_LOG_INFO("server.loading", ">> Loaded %u NpcText locale strings in %u ms", uint32(_npcTextLocaleStore.size()), GetMSTimeDiffToNow(oldMSTime));
}
//not very fast function but it is called only once a day, or on starting-up
@@ -5301,7 +5420,7 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
time_t curTime = time(NULL);
tm lt;
- ACE_OS::localtime_r(&curTime, &lt);
+ localtime_r(&curTime, &lt);
uint64 basetime(curTime);
TC_LOG_INFO("misc", "Returning mails current time: hour: %d, minute: %d, second: %d ", lt.tm_hour, lt.tm_min, lt.tm_sec);
@@ -6315,14 +6434,14 @@ void ObjectMgr::LoadGameObjectLocales()
GameObjectLocale& data = _gameObjectLocaleStore[entry];
- for (uint8 i = 1; i < TOTAL_LOCALES; ++i)
+ for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
+ {
AddLocaleString(fields[i].GetString(), LocaleConstant(i), data.Name);
-
- for (uint8 i = 1; i < TOTAL_LOCALES; ++i)
AddLocaleString(fields[i + (TOTAL_LOCALES - 1)].GetString(), LocaleConstant(i), data.CastBarCaption);
+ }
} while (result->NextRow());
- TC_LOG_INFO("server.loading", ">> Loaded %lu gameobject locale strings in %u ms", (unsigned long)_gameObjectLocaleStore.size(), GetMSTimeDiffToNow(oldMSTime));
+ TC_LOG_INFO("server.loading", ">> Loaded %u gameobject locale strings in %u ms", uint32(_gameObjectLocaleStore.size()), GetMSTimeDiffToNow(oldMSTime));
}
inline void CheckGOLockId(GameObjectTemplate const* goInfo, uint32 dataN, uint32 N)
@@ -6844,7 +6963,7 @@ void ObjectMgr::LoadReputationOnKill()
repOnKill.IsTeamAward2 = fields[6].GetBool();
repOnKill.ReputationMaxCap2 = fields[7].GetUInt8();
repOnKill.RepValue2 = fields[8].GetInt32();
- repOnKill.TeamDependent = fields[9].GetUInt8();
+ repOnKill.TeamDependent = fields[9].GetBool();
if (!GetCreatureTemplate(creature_id))
{
@@ -7638,7 +7757,7 @@ bool ObjectMgr::LoadTrinityStrings(const char* table, int32 min_value, int32 max
data.Content.resize(1);
++count;
- for (uint8 i = 0; i < TOTAL_LOCALES; ++i)
+ for (int8 i = TOTAL_LOCALES - 1; i >= 0; --i)
AddLocaleString(fields[i + 1].GetString(), LocaleConstant(i), data.Content);
} while (result->NextRow());
@@ -7762,36 +7881,27 @@ int32 ObjectMgr::GetBaseReputationOf(FactionEntry const* factionEntry, uint8 rac
return 0;
}
-SkillRangeType GetSkillRangeType(SkillLineEntry const* pSkill, bool racial)
+SkillRangeType GetSkillRangeType(SkillRaceClassInfoEntry const* rcEntry)
{
- switch (pSkill->categoryId)
+ SkillLineEntry const* skill = sSkillLineStore.LookupEntry(rcEntry->SkillId);
+ if (!skill)
+ return SKILL_RANGE_NONE;
+
+ if (sSkillTiersStore.LookupEntry(rcEntry->SkillTier))
+ return SKILL_RANGE_RANK;
+
+ if (rcEntry->SkillId == SKILL_RUNEFORGING)
+ return SKILL_RANGE_MONO;
+
+ switch (skill->categoryId)
{
- case SKILL_CATEGORY_LANGUAGES: return SKILL_RANGE_LANGUAGE;
- case SKILL_CATEGORY_WEAPON:
- if (pSkill->id != SKILL_FIST_WEAPONS)
- return SKILL_RANGE_LEVEL;
- else
- return SKILL_RANGE_MONO;
case SKILL_CATEGORY_ARMOR:
- case SKILL_CATEGORY_CLASS:
- if (pSkill->id != SKILL_LOCKPICKING)
- return SKILL_RANGE_MONO;
- else
- return SKILL_RANGE_LEVEL;
- case SKILL_CATEGORY_SECONDARY:
- case SKILL_CATEGORY_PROFESSION:
- // not set skills for professions and racial abilities
- if (IsProfessionSkill(pSkill->id))
- return SKILL_RANGE_RANK;
- else if (racial)
- return SKILL_RANGE_NONE;
- else
- return SKILL_RANGE_MONO;
- default:
- case SKILL_CATEGORY_ATTRIBUTES: //not found in dbc
- case SKILL_CATEGORY_GENERIC: //only GENERIC(DND)
- return SKILL_RANGE_NONE;
+ return SKILL_RANGE_MONO;
+ case SKILL_CATEGORY_LANGUAGES:
+ return SKILL_RANGE_LANGUAGE;
}
+
+ return SKILL_RANGE_LEVEL;
}
void ObjectMgr::LoadGameTele()
@@ -8266,8 +8376,8 @@ void ObjectMgr::LoadGossipMenuItems()
_gossipMenuItemsStore.clear();
QueryResult result = WorldDatabase.Query(
- // 0 1 2 3 4 5 6 7 8 9 10
- "SELECT menu_id, id, option_icon, option_text, option_id, npc_option_npcflag, action_menu_id, action_poi_id, box_coded, box_money, box_text "
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12
+ "SELECT menu_id, id, option_icon, option_text, OptionBroadcastTextID, option_id, npc_option_npcflag, action_menu_id, action_poi_id, box_coded, box_money, box_text, BoxBroadcastTextID "
"FROM gossip_menu_option ORDER BY menu_id, id");
if (!result)
@@ -8288,29 +8398,49 @@ void ObjectMgr::LoadGossipMenuItems()
gMenuItem.OptionIndex = fields[1].GetUInt16();
gMenuItem.OptionIcon = fields[2].GetUInt32();
gMenuItem.OptionText = fields[3].GetString();
- gMenuItem.OptionType = fields[4].GetUInt8();
- gMenuItem.OptionNpcflag = fields[5].GetUInt32();
- gMenuItem.ActionMenuId = fields[6].GetUInt32();
- gMenuItem.ActionPoiId = fields[7].GetUInt32();
- gMenuItem.BoxCoded = fields[8].GetBool();
- gMenuItem.BoxMoney = fields[9].GetUInt32();
- gMenuItem.BoxText = fields[10].GetString();
+ gMenuItem.OptionBroadcastTextId = fields[4].GetUInt32();
+ gMenuItem.OptionType = fields[5].GetUInt8();
+ gMenuItem.OptionNpcflag = fields[6].GetUInt32();
+ gMenuItem.ActionMenuId = fields[7].GetUInt32();
+ gMenuItem.ActionPoiId = fields[8].GetUInt32();
+ gMenuItem.BoxCoded = fields[9].GetBool();
+ gMenuItem.BoxMoney = fields[10].GetUInt32();
+ gMenuItem.BoxText = fields[11].GetString();
+ gMenuItem.BoxBroadcastTextId = fields[12].GetUInt32();
if (gMenuItem.OptionIcon >= GOSSIP_ICON_MAX)
{
- TC_LOG_ERROR("sql.sql", "Table gossip_menu_option for menu %u, id %u has unknown icon id %u. Replacing with GOSSIP_ICON_CHAT", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.OptionIcon);
+ TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u has unknown icon id %u. Replacing with GOSSIP_ICON_CHAT", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.OptionIcon);
gMenuItem.OptionIcon = GOSSIP_ICON_CHAT;
}
+ if (gMenuItem.OptionBroadcastTextId)
+ {
+ if (!GetBroadcastText(gMenuItem.OptionBroadcastTextId))
+ {
+ TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u has non-existing or incompatible OptionBroadcastTextId %u, ignoring.", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.OptionBroadcastTextId);
+ gMenuItem.OptionBroadcastTextId = 0;
+ }
+ }
+
if (gMenuItem.OptionType >= GOSSIP_OPTION_MAX)
- TC_LOG_ERROR("sql.sql", "Table gossip_menu_option for menu %u, id %u has unknown option id %u. Option will not be used", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.OptionType);
+ TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u has unknown option id %u. Option will not be used", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.OptionType);
if (gMenuItem.ActionPoiId && !GetPointOfInterest(gMenuItem.ActionPoiId))
{
- TC_LOG_ERROR("sql.sql", "Table gossip_menu_option for menu %u, id %u use non-existing action_poi_id %u, ignoring", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.ActionPoiId);
+ TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u use non-existing action_poi_id %u, ignoring", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.ActionPoiId);
gMenuItem.ActionPoiId = 0;
}
+ if (gMenuItem.BoxBroadcastTextId)
+ {
+ if (!GetBroadcastText(gMenuItem.BoxBroadcastTextId))
+ {
+ TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u has non-existing or incompatible BoxBroadcastTextId %u, ignoring.", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.BoxBroadcastTextId);
+ gMenuItem.BoxBroadcastTextId = 0;
+ }
+ }
+
_gossipMenuItemsStore.insert(GossipMenuItemsContainer::value_type(gMenuItem.MenuId, gMenuItem));
++count;
}
@@ -8528,6 +8658,141 @@ void ObjectMgr::CheckScripts(ScriptsType type, std::set<int32>& ids)
}
}
+void ObjectMgr::LoadBroadcastTexts()
+{
+ uint32 oldMSTime = getMSTime();
+
+ _broadcastTextStore.clear(); // for reload case
+
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12
+ QueryResult result = WorldDatabase.Query("SELECT ID, Language, MaleText, FemaleText, EmoteID0, EmoteID1, EmoteID2, EmoteDelay0, EmoteDelay1, EmoteDelay2, SoundId, Unk1, Unk2 FROM broadcast_text");
+ if (!result)
+ {
+ TC_LOG_INFO("server.loading", ">> Loaded 0 broadcast texts. DB table `broadcast_text` is empty.");
+ return;
+ }
+
+ _broadcastTextStore.rehash(result->GetRowCount());
+ uint32 count = 0;
+
+ do
+ {
+ Field* fields = result->Fetch();
+
+ BroadcastText bct;
+
+ bct.Id = fields[0].GetUInt32();
+ bct.Language = fields[1].GetUInt32();
+ bct.MaleText[DEFAULT_LOCALE] = fields[2].GetString();
+ bct.FemaleText[DEFAULT_LOCALE] = fields[3].GetString();
+ bct.EmoteId0 = fields[4].GetUInt32();
+ bct.EmoteId1 = fields[5].GetUInt32();
+ bct.EmoteId2 = fields[6].GetUInt32();
+ bct.EmoteDelay0 = fields[7].GetUInt32();
+ bct.EmoteDelay1 = fields[8].GetUInt32();
+ bct.EmoteDelay2 = fields[9].GetUInt32();
+ bct.SoundId = fields[10].GetUInt32();
+ bct.Unk1 = fields[11].GetUInt32();
+ bct.Unk2 = fields[12].GetUInt32();
+
+ if (bct.SoundId)
+ {
+ if (!sSoundEntriesStore.LookupEntry(bct.SoundId))
+ {
+ TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` has SoundId %u but sound does not exist. Skipped.", bct.Id, bct.SoundId);
+ // don't load bct of higher expansions
+ continue;
+ }
+ }
+
+ if (!GetLanguageDescByID(bct.Language))
+ {
+ TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` using Language %u but Language does not exist. Skipped.", bct.Id, bct.Language);
+ // don't load bct of higher expansions
+ continue;
+ }
+
+ if (bct.EmoteId0)
+ {
+ if (!sEmotesStore.LookupEntry(bct.EmoteId0))
+ {
+ TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` has EmoteId0 %u but emote does not exist. Skipped.", bct.Id, bct.EmoteId0);
+ // don't load bct of higher expansions
+ continue;
+ }
+ }
+
+ if (bct.EmoteId1)
+ {
+ if (!sEmotesStore.LookupEntry(bct.EmoteId1))
+ {
+ TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` has EmoteId1 %u but emote does not exist. Skipped.", bct.Id, bct.EmoteId1);
+ // don't load bct of higher expansions
+ continue;
+ }
+ }
+
+ if (bct.EmoteId2)
+ {
+ if (!sEmotesStore.LookupEntry(bct.EmoteId2))
+ {
+ TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` has EmoteId2 %u but emote does not exist. Skipped.", bct.Id, bct.EmoteId2);
+ // don't load bct of higher expansions
+ continue;
+ }
+ }
+
+ _broadcastTextStore[bct.Id] = bct;
+
+ ++count;
+ }
+ while (result->NextRow());
+
+ TC_LOG_INFO("server.loading", ">> Loaded %u broadcast texts in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
+}
+
+void ObjectMgr::LoadBroadcastTextLocales()
+{
+ uint32 oldMSTime = getMSTime();
+
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ QueryResult result = WorldDatabase.Query("SELECT Id, MaleText_loc1, MaleText_loc2, MaleText_loc3, MaleText_loc4, MaleText_loc5, MaleText_loc6, MaleText_loc7, MaleText_loc8, FemaleText_loc1, FemaleText_loc2, FemaleText_loc3, FemaleText_loc4, FemaleText_loc5, FemaleText_loc6, FemaleText_loc7, FemaleText_loc8 FROM locales_broadcast_text");
+
+ if (!result)
+ {
+ TC_LOG_INFO("server.loading", ">> Loaded 0 broadcast text locales. DB table `locales_broadcast_text` is empty.");
+ return;
+ }
+
+ uint32 count = 0;
+
+ do
+ {
+ Field* fields = result->Fetch();
+
+ uint32 id = fields[0].GetUInt32();
+ BroadcastTextContainer::iterator bct = _broadcastTextStore.find(id);
+ if (bct == _broadcastTextStore.end())
+ {
+ TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `locales_broadcast_text` does not exist or is incompatible. Skipped!", id);
+ // don't load bct of higher expansions
+ continue;
+ }
+
+ for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
+ {
+ LocaleConstant locale = LocaleConstant(i);
+ AddLocaleString(fields[1 + (i - 1)].GetString(), locale, bct->second.MaleText);
+ AddLocaleString(fields[9 + (i - 1)].GetString(), locale, bct->second.FemaleText);
+ }
+
+ ++count;
+ }
+ while (result->NextRow());
+
+ TC_LOG_INFO("server.loading", ">> Loaded %u broadcast text locales in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
+}
+
void ObjectMgr::LoadDbScriptStrings()
{
LoadTrinityStrings("db_script_string", MIN_DB_SCRIPT_STRING_ID, MAX_DB_SCRIPT_STRING_ID);
@@ -8545,19 +8810,6 @@ void ObjectMgr::LoadDbScriptStrings()
TC_LOG_ERROR("sql.sql", "Table `db_script_string` has unused string id %u", *itr);
}
-bool LoadTrinityStrings(const char* table, int32 start_value, int32 end_value)
-{
- // MAX_DB_SCRIPT_STRING_ID is max allowed negative value for scripts (scrpts can use only more deep negative values
- // start/end reversed for negative values
- if (start_value > MAX_DB_SCRIPT_STRING_ID || end_value >= start_value)
- {
- TC_LOG_ERROR("sql.sql", "Table '%s' load attempted with range (%d - %d) reserved by Trinity, strings not loaded.", table, start_value, end_value+1);
- return false;
- }
-
- return sObjectMgr->LoadTrinityStrings(table, start_value, end_value);
-}
-
CreatureBaseStats const* ObjectMgr::GetCreatureBaseStats(uint8 level, uint8 unitClass)
{
CreatureBaseStatsContainer::const_iterator it = _creatureBaseStatsStore.find(MAKE_PAIR16(level, unitClass));
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index b1f80af0567..56ae4a4c6d1 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -35,7 +35,6 @@
#include "Map.h"
#include "ObjectAccessor.h"
#include "ObjectDefines.h"
-#include <ace/Singleton.h>
#include "VehicleDefines.h"
#include <string>
#include <map>
@@ -125,11 +124,11 @@ enum ScriptCommands
SCRIPT_COMMAND_PLAYMOVIE = 34 // source = Player, datalong = movie id
};
-// Benchmarked: Faster than UNORDERED_MAP (insert/find)
+// Benchmarked: Faster than std::unordered_map (insert/find)
typedef std::map<uint32, PageText> PageTextContainer;
// Benchmarked: Faster than std::map (insert/find)
-typedef UNORDERED_MAP<uint16, InstanceTemplate> InstanceTemplateContainer;
+typedef std::unordered_map<uint16, InstanceTemplate> InstanceTemplateContainer;
struct GameTele
{
@@ -142,7 +141,7 @@ struct GameTele
std::wstring wnameLow;
};
-typedef UNORDERED_MAP<uint32, GameTele > GameTeleContainer;
+typedef std::unordered_map<uint32, GameTele > GameTeleContainer;
enum ScriptsType
{
@@ -410,6 +409,49 @@ struct AreaTrigger
float target_Orientation;
};
+struct BroadcastText
+{
+ BroadcastText() : Id(0), Language(0), EmoteId0(0), EmoteId1(0), EmoteId2(0),
+ EmoteDelay0(0), EmoteDelay1(0), EmoteDelay2(0), SoundId(0), Unk1(0), Unk2(0)
+ {
+ MaleText.resize(DEFAULT_LOCALE + 1);
+ FemaleText.resize(DEFAULT_LOCALE + 1);
+ }
+
+ uint32 Id;
+ uint32 Language;
+ StringVector MaleText;
+ StringVector FemaleText;
+ uint32 EmoteId0;
+ uint32 EmoteId1;
+ uint32 EmoteId2;
+ uint32 EmoteDelay0;
+ uint32 EmoteDelay1;
+ uint32 EmoteDelay2;
+ uint32 SoundId;
+ uint32 Unk1;
+ uint32 Unk2;
+ // uint32 VerifiedBuild;
+
+ std::string const& GetText(LocaleConstant locale = DEFAULT_LOCALE, uint8 gender = GENDER_MALE, bool forceGender = false) const
+ {
+ if (gender == GENDER_FEMALE && (forceGender || !FemaleText[DEFAULT_LOCALE].empty()))
+ {
+ if (FemaleText.size() > size_t(locale) && !FemaleText[locale].empty())
+ return FemaleText[locale];
+ return FemaleText[DEFAULT_LOCALE];
+ }
+ // else if (gender == GENDER_MALE)
+ {
+ if (MaleText.size() > size_t(locale) && !MaleText[locale].empty())
+ return MaleText[locale];
+ return MaleText[DEFAULT_LOCALE];
+ }
+ }
+};
+
+typedef std::unordered_map<uint32, BroadcastText> BroadcastTextContainer;
+
typedef std::set<uint32> CellGuidSet;
typedef std::map<uint32/*player guid*/, uint32/*instance*/> CellCorpseSet;
struct CellObjectGuids
@@ -418,16 +460,14 @@ struct CellObjectGuids
CellGuidSet gameobjects;
CellCorpseSet corpses;
};
-typedef UNORDERED_MAP<uint32/*cell_id*/, CellObjectGuids> CellObjectGuidsMap;
-typedef UNORDERED_MAP<uint32/*(mapid, spawnMode) pair*/, CellObjectGuidsMap> MapObjectGuids;
+typedef std::unordered_map<uint32/*cell_id*/, CellObjectGuids> CellObjectGuidsMap;
+typedef std::unordered_map<uint32/*(mapid, spawnMode) pair*/, CellObjectGuidsMap> MapObjectGuids;
// Trinity string ranges
#define MIN_TRINITY_STRING_ID 1 // 'trinity_string'
#define MAX_TRINITY_STRING_ID 2000000000
#define MIN_DB_SCRIPT_STRING_ID MAX_TRINITY_STRING_ID // 'db_script_string'
#define MAX_DB_SCRIPT_STRING_ID 2000010000
-#define MIN_CREATURE_AI_TEXT_STRING_ID (-1) // 'creature_ai_texts'
-#define MAX_CREATURE_AI_TEXT_STRING_ID (-1000000)
// Trinity Trainer Reference start range
#define TRINITY_TRAINER_START_REF 200000
@@ -438,19 +478,19 @@ struct TrinityStringLocale
};
typedef std::map<uint64, uint64> LinkedRespawnContainer;
-typedef UNORDERED_MAP<uint32, CreatureData> CreatureDataContainer;
-typedef UNORDERED_MAP<uint32, GameObjectData> GameObjectDataContainer;
+typedef std::unordered_map<uint32, CreatureData> CreatureDataContainer;
+typedef std::unordered_map<uint32, GameObjectData> GameObjectDataContainer;
typedef std::map<TempSummonGroupKey, std::vector<TempSummonData> > TempSummonDataContainer;
-typedef UNORDERED_MAP<uint32, CreatureLocale> CreatureLocaleContainer;
-typedef UNORDERED_MAP<uint32, GameObjectLocale> GameObjectLocaleContainer;
-typedef UNORDERED_MAP<uint32, ItemLocale> ItemLocaleContainer;
-typedef UNORDERED_MAP<uint32, ItemSetNameLocale> ItemSetNameLocaleContainer;
-typedef UNORDERED_MAP<uint32, QuestLocale> QuestLocaleContainer;
-typedef UNORDERED_MAP<uint32, NpcTextLocale> NpcTextLocaleContainer;
-typedef UNORDERED_MAP<uint32, PageTextLocale> PageTextLocaleContainer;
-typedef UNORDERED_MAP<int32, TrinityStringLocale> TrinityStringLocaleContainer;
-typedef UNORDERED_MAP<uint32, GossipMenuItemsLocale> GossipMenuItemsLocaleContainer;
-typedef UNORDERED_MAP<uint32, PointOfInterestLocale> PointOfInterestLocaleContainer;
+typedef std::unordered_map<uint32, CreatureLocale> CreatureLocaleContainer;
+typedef std::unordered_map<uint32, GameObjectLocale> GameObjectLocaleContainer;
+typedef std::unordered_map<uint32, ItemLocale> ItemLocaleContainer;
+typedef std::unordered_map<uint32, ItemSetNameLocale> ItemSetNameLocaleContainer;
+typedef std::unordered_map<uint32, QuestLocale> QuestLocaleContainer;
+typedef std::unordered_map<uint32, NpcTextLocale> NpcTextLocaleContainer;
+typedef std::unordered_map<uint32, PageTextLocale> PageTextLocaleContainer;
+typedef std::unordered_map<int32, TrinityStringLocale> TrinityStringLocaleContainer;
+typedef std::unordered_map<uint32, GossipMenuItemsLocale> GossipMenuItemsLocaleContainer;
+typedef std::unordered_map<uint32, PointOfInterestLocale> PointOfInterestLocaleContainer;
typedef std::multimap<uint32, uint32> QuestRelations;
typedef std::pair<QuestRelations::const_iterator, QuestRelations::const_iterator> QuestRelationBounds;
@@ -476,7 +516,7 @@ struct MailLevelReward
};
typedef std::list<MailLevelReward> MailLevelRewardList;
-typedef UNORDERED_MAP<uint8, MailLevelRewardList> MailLevelRewardContainer;
+typedef std::unordered_map<uint8, MailLevelRewardList> MailLevelRewardContainer;
// We assume the rate is in general the same for all three types below, but chose to keep three for scalability and customization
struct RepRewardRate
@@ -527,6 +567,7 @@ struct GossipMenuItems
uint32 OptionIndex;
uint8 OptionIcon;
std::string OptionText;
+ uint32 OptionBroadcastTextId;
uint32 OptionType;
uint32 OptionNpcflag;
uint32 ActionMenuId;
@@ -534,6 +575,7 @@ struct GossipMenuItems
bool BoxCoded;
uint32 BoxMoney;
std::string BoxText;
+ uint32 BoxBroadcastTextId;
ConditionList Conditions;
};
@@ -576,7 +618,7 @@ struct QuestPOI
};
typedef std::vector<QuestPOI> QuestPOIVector;
-typedef UNORDERED_MAP<uint32, QuestPOIVector> QuestPOIContainer;
+typedef std::unordered_map<uint32, QuestPOIVector> QuestPOIContainer;
struct GraveYardData
{
@@ -588,8 +630,8 @@ typedef std::multimap<uint32, GraveYardData> GraveYardContainer;
typedef std::pair<GraveYardContainer::const_iterator, GraveYardContainer::const_iterator> GraveYardMapBounds;
typedef std::pair<GraveYardContainer::iterator, GraveYardContainer::iterator> GraveYardMapBoundsNonConst;
-typedef UNORDERED_MAP<uint32, VendorItemData> CacheVendorItemContainer;
-typedef UNORDERED_MAP<uint32, TrainerSpellData> CacheTrainerSpellContainer;
+typedef std::unordered_map<uint32, VendorItemData> CacheVendorItemContainer;
+typedef std::unordered_map<uint32, TrainerSpellData> CacheTrainerSpellContainer;
enum SkillRangeType
{
@@ -600,7 +642,7 @@ enum SkillRangeType
SKILL_RANGE_NONE // 0..0 always
};
-SkillRangeType GetSkillRangeType(SkillLineEntry const* pSkill, bool racial);
+SkillRangeType GetSkillRangeType(SkillRaceClassInfoEntry const* rcEntry);
#define MAX_PLAYER_NAME 12 // max allowed by client name length
#define MAX_INTERNAL_PLAYER_NAME 15 // max server internal player name length (> MAX_PLAYER_NAME for support declined names)
@@ -637,35 +679,40 @@ struct DungeonEncounter
};
typedef std::list<DungeonEncounter const*> DungeonEncounterList;
-typedef UNORDERED_MAP<uint32, DungeonEncounterList> DungeonEncounterContainer;
+typedef std::unordered_map<uint32, DungeonEncounterList> DungeonEncounterContainer;
class PlayerDumpReader;
class ObjectMgr
{
friend class PlayerDumpReader;
- friend class ACE_Singleton<ObjectMgr, ACE_Null_Mutex>;
private:
ObjectMgr();
~ObjectMgr();
public:
- typedef UNORDERED_MAP<uint32, Item*> ItemMap;
+ static ObjectMgr* instance()
+ {
+ static ObjectMgr instance;
+ return &instance;
+ }
+
+ typedef std::unordered_map<uint32, Item*> ItemMap;
- typedef UNORDERED_MAP<uint32, Quest*> QuestMap;
+ typedef std::unordered_map<uint32, Quest*> QuestMap;
- typedef UNORDERED_MAP<uint32, AreaTrigger> AreaTriggerContainer;
+ typedef std::unordered_map<uint32, AreaTrigger> AreaTriggerContainer;
- typedef UNORDERED_MAP<uint32, uint32> AreaTriggerScriptContainer;
+ typedef std::unordered_map<uint32, uint32> AreaTriggerScriptContainer;
- typedef UNORDERED_MAP<uint32, AccessRequirement*> AccessRequirementContainer;
+ typedef std::unordered_map<uint32, AccessRequirement*> AccessRequirementContainer;
- typedef UNORDERED_MAP<uint32, RepRewardRate > RepRewardRateContainer;
- typedef UNORDERED_MAP<uint32, ReputationOnKillEntry> RepOnKillContainer;
- typedef UNORDERED_MAP<uint32, RepSpilloverTemplate> RepSpilloverTemplateContainer;
+ typedef std::unordered_map<uint32, RepRewardRate > RepRewardRateContainer;
+ typedef std::unordered_map<uint32, ReputationOnKillEntry> RepOnKillContainer;
+ typedef std::unordered_map<uint32, RepSpilloverTemplate> RepSpilloverTemplateContainer;
- typedef UNORDERED_MAP<uint32, PointOfInterest> PointOfInterestContainer;
+ typedef std::unordered_map<uint32, PointOfInterest> PointOfInterestContainer;
typedef std::vector<std::string> ScriptNameContainer;
@@ -845,7 +892,7 @@ class ObjectMgr
DungeonEncounterList const* GetDungeonEncounterList(uint32 mapId, Difficulty difficulty)
{
- UNORDERED_MAP<uint32, DungeonEncounterList>::const_iterator itr = _dungeonEncounterStore.find(MAKE_PAIR32(mapId, difficulty));
+ std::unordered_map<uint32, DungeonEncounterList>::const_iterator itr = _dungeonEncounterStore.find(MAKE_PAIR32(mapId, difficulty));
if (itr != _dungeonEncounterStore.end())
return &itr->second;
return NULL;
@@ -905,6 +952,8 @@ class ObjectMgr
void LoadSpellScriptNames();
void ValidateSpellScripts();
+ void LoadBroadcastTexts();
+ void LoadBroadcastTextLocales();
bool LoadTrinityStrings(char const* table, int32 min_value, int32 max_value);
bool LoadTrinityStrings() { return LoadTrinityStrings("trinity_string", MIN_TRINITY_STRING_ID, MAX_TRINITY_STRING_ID); }
void LoadDbScriptStrings();
@@ -912,6 +961,7 @@ class ObjectMgr
void LoadCreatureLocales();
void LoadCreatureTemplates();
void LoadCreatureTemplateAddons();
+ void LoadCreatureTemplate(Field* fields);
void CheckCreatureTemplate(CreatureTemplate const* cInfo);
void LoadTempSummons();
void LoadCreatures();
@@ -1042,6 +1092,14 @@ class ObjectMgr
return NULL;
}
+ BroadcastText const* GetBroadcastText(uint32 id) const
+ {
+ BroadcastTextContainer::const_iterator itr = _broadcastTextStore.find(id);
+ if (itr != _broadcastTextStore.end())
+ return &itr->second;
+ return NULL;
+ }
+
CreatureData const* GetCreatureData(uint32 guid) const
{
CreatureDataContainer::const_iterator itr = _creatureDataStore.find(guid);
@@ -1140,7 +1198,7 @@ class ObjectMgr
void AddGameobjectToGrid(uint32 guid, GameObjectData const* data);
void RemoveGameobjectFromGrid(uint32 guid, GameObjectData const* data);
uint32 AddGOData(uint32 entry, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0, float rotation0 = 0, float rotation1 = 0, float rotation2 = 0, float rotation3 = 0);
- uint32 AddCreData(uint32 entry, uint32 team, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0);
+ uint32 AddCreData(uint32 entry, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0);
bool MoveCreData(uint32 guid, uint32 map, const Position& pos);
// reserved names
@@ -1240,6 +1298,8 @@ class ObjectMgr
void LoadFactionChangeSpells();
void LoadFactionChangeTitles();
+ bool IsTransportMap(uint32 mapId) const { return _transportMaps.count(mapId) != 0; }
+
private:
// first free id for selected id type
uint32 _auctionId;
@@ -1261,8 +1321,8 @@ class ObjectMgr
QuestMap _questTemplates;
- typedef UNORDERED_MAP<uint32, GossipText> GossipTextContainer;
- typedef UNORDERED_MAP<uint32, uint32> QuestAreaTriggerContainer;
+ typedef std::unordered_map<uint32, GossipText> GossipTextContainer;
+ typedef std::unordered_map<uint32, uint32> QuestAreaTriggerContainer;
typedef std::set<uint32> TavernAreaTriggerContainer;
typedef std::set<uint32> GameObjectForQuestContainer;
@@ -1343,7 +1403,7 @@ class ObjectMgr
HalfNameContainer _petHalfName0;
HalfNameContainer _petHalfName1;
- typedef UNORDERED_MAP<uint32, ItemSetNameEntry> ItemSetNameContainer;
+ typedef std::unordered_map<uint32, ItemSetNameEntry> ItemSetNameContainer;
ItemSetNameContainer _itemSetNameStore;
MapObjectGuids _mapObjectGuidsStore;
@@ -1361,6 +1421,7 @@ class ObjectMgr
/// Stores temp summon data grouped by summoner's entry, summoner's type and group id
TempSummonDataContainer _tempSummonDataStore;
+ BroadcastTextContainer _broadcastTextStore;
ItemTemplateContainer _itemTemplateStore;
ItemLocaleContainer _itemLocaleStore;
ItemSetNameLocaleContainer _itemSetNameLocaleStore;
@@ -1388,9 +1449,6 @@ class ObjectMgr
std::set<uint32> _transportMaps; // Helper container storing map ids that are for transports only, loaded from gameobject_template
};
-#define sObjectMgr ACE_Singleton<ObjectMgr, ACE_Null_Mutex>::instance()
-
-// scripting access functions
-bool LoadTrinityStrings(char const* table, int32 start_value = MAX_CREATURE_AI_TEXT_STRING_ID, int32 end_value = std::numeric_limits<int32>::min());
+#define sObjectMgr ObjectMgr::instance()
#endif
diff --git a/src/server/game/Grids/GridDefines.h b/src/server/game/Grids/GridDefines.h
index 5279f437f89..7989828e858 100644
--- a/src/server/game/Grids/GridDefines.h
+++ b/src/server/game/Grids/GridDefines.h
@@ -198,8 +198,8 @@ namespace Trinity
int x_val = int(x_offset + CENTER_GRID_CELL_ID + 0.5f);
int y_val = int(y_offset + CENTER_GRID_CELL_ID + 0.5f);
- x_off = (float(x_offset) - x_val + CENTER_GRID_CELL_ID) * SIZE_OF_GRID_CELL;
- y_off = (float(y_offset) - y_val + CENTER_GRID_CELL_ID) * SIZE_OF_GRID_CELL;
+ x_off = (float(x_offset) - float(x_val) + CENTER_GRID_CELL_ID) * SIZE_OF_GRID_CELL;
+ y_off = (float(y_offset) - float(y_val) + CENTER_GRID_CELL_ID) * SIZE_OF_GRID_CELL;
return CellCoord(x_val, y_val);
}
@@ -213,7 +213,7 @@ namespace Trinity
inline bool IsValidMapCoord(float c)
{
- return finite(c) && (std::fabs(c) <= MAP_HALFSIZE - 0.5f);
+ return std::isfinite(c) && (std::fabs(c) <= MAP_HALFSIZE - 0.5f);
}
inline bool IsValidMapCoord(float x, float y)
@@ -223,12 +223,12 @@ namespace Trinity
inline bool IsValidMapCoord(float x, float y, float z)
{
- return IsValidMapCoord(x, y) && finite(z);
+ return IsValidMapCoord(x, y) && std::isfinite(z);
}
inline bool IsValidMapCoord(float x, float y, float z, float o)
{
- return IsValidMapCoord(x, y, z) && finite(o);
+ return IsValidMapCoord(x, y, z) && std::isfinite(o);
}
}
#endif
diff --git a/src/server/game/Grids/GridStates.cpp b/src/server/game/Grids/GridStates.cpp
index 8b57c382cd7..3e085f1f381 100644
--- a/src/server/game/Grids/GridStates.cpp
+++ b/src/server/game/Grids/GridStates.cpp
@@ -20,18 +20,6 @@
#include "GridNotifiers.h"
#include "Log.h"
-#ifdef TRINITY_DEBUG
-bool GridState::checkMagic()
-{
- if (i_Magic != MAGIC_TESTVAL)
- {
- TC_LOG_ERROR("misc", "!!! GridState: Magic value gone !!!");
- return false;
- }
- return true;
-}
-#endif
-
void InvalidState::Update(Map&, NGridType&, GridInfo&, uint32) const
{ }
diff --git a/src/server/game/Grids/GridStates.h b/src/server/game/Grids/GridStates.h
index 016df4dc3d4..330b74ec65e 100644
--- a/src/server/game/Grids/GridStates.h
+++ b/src/server/game/Grids/GridStates.h
@@ -27,13 +27,6 @@ class Map;
class GridState
{
public:
-#ifdef TRINITY_DEBUG
-#define MAGIC_TESTVAL 0xFBE823BA
- GridState() { i_Magic = MAGIC_TESTVAL; }
- bool checkMagic();
- void setMagic() { i_Magic = MAGIC_TESTVAL; }
- unsigned int i_Magic;
-#endif
virtual ~GridState() { };
virtual void Update(Map &, NGridType&, GridInfo &, uint32 t_diff) const = 0;
};
@@ -41,24 +34,24 @@ class GridState
class InvalidState : public GridState
{
public:
- void Update(Map &, NGridType &, GridInfo &, uint32 t_diff) const;
+ void Update(Map &, NGridType &, GridInfo &, uint32 t_diff) const override;
};
class ActiveState : public GridState
{
public:
- void Update(Map &, NGridType &, GridInfo &, uint32 t_diff) const;
+ void Update(Map &, NGridType &, GridInfo &, uint32 t_diff) const override;
};
class IdleState : public GridState
{
public:
- void Update(Map &, NGridType &, GridInfo &, uint32 t_diff) const;
+ void Update(Map &, NGridType &, GridInfo &, uint32 t_diff) const override;
};
class RemovalState : public GridState
{
public:
- void Update(Map &, NGridType &, GridInfo &, uint32 t_diff) const;
+ void Update(Map &, NGridType &, GridInfo &, uint32 t_diff) const override;
};
#endif
diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.cpp b/src/server/game/Grids/Notifiers/GridNotifiers.cpp
index 472497ea5f2..270d598d53a 100644
--- a/src/server/game/Grids/Notifiers/GridNotifiers.cpp
+++ b/src/server/game/Grids/Notifiers/GridNotifiers.cpp
@@ -35,7 +35,8 @@ void VisibleNotifier::SendToSelf()
// at this moment i_clientGUIDs have guids that not iterate at grid level checks
// but exist one case when this possible and object not out of range: transports
if (Transport* transport = i_player.GetTransport())
- for (std::set<WorldObject*>::const_iterator itr = transport->GetPassengers().begin(); itr != transport->GetPassengers().end();++itr)
+ {
+ for (Transport::PassengerSet::const_iterator itr = transport->GetPassengers().begin(); itr != transport->GetPassengers().end(); ++itr)
{
if (vis_guids.find((*itr)->GetGUID()) != vis_guids.end())
{
@@ -54,11 +55,15 @@ void VisibleNotifier::SendToSelf()
case TYPEID_UNIT:
i_player.UpdateVisibilityOf((*itr)->ToCreature(), i_data, i_visibleNow);
break;
+ case TYPEID_DYNAMICOBJECT:
+ i_player.UpdateVisibilityOf((*itr)->ToDynObject(), i_data, i_visibleNow);
+ break;
default:
break;
}
}
}
+ }
for (Player::ClientGUIDs::const_iterator it = vis_guids.begin();it != vis_guids.end(); ++it)
{
diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h
index 319b7b589b9..e9ba95f8fb6 100644
--- a/src/server/game/Grids/Notifiers/GridNotifiers.h
+++ b/src/server/game/Grids/Notifiers/GridNotifiers.h
@@ -620,7 +620,7 @@ namespace Trinity
if (go->GetGOInfo()->spellFocus.focusId != i_focusId)
return false;
- float dist = (float)((go->GetGOInfo()->spellFocus.dist)/2);
+ float dist = go->GetGOInfo()->spellFocus.dist / 2.f;
return go->IsWithinDistInMap(i_unit, dist);
}
@@ -944,13 +944,13 @@ namespace Trinity
if (owner)
check = owner;
i_targetForPlayer = (check->GetTypeId() == TYPEID_PLAYER);
- if (i_obj->GetTypeId() == TYPEID_DYNAMICOBJECT)
- _spellInfo = sSpellMgr->GetSpellInfo(((DynamicObject*)i_obj)->GetSpellId());
+ if (DynamicObject const* dynObj = i_obj->ToDynObject())
+ _spellInfo = sSpellMgr->GetSpellInfo(dynObj->GetSpellId());
}
bool operator()(Unit* u)
{
// Check contains checks for: live, non-selectable, non-attackable flags, flight check and GM check, ignore totems
- if (u->GetTypeId() == TYPEID_UNIT && ((Creature*)u)->IsTotem())
+ if (u->GetTypeId() == TYPEID_UNIT && u->ToCreature()->IsTotem())
return false;
if (i_funit->_IsValidAttackTarget(u, _spellInfo, i_obj->GetTypeId() == TYPEID_DYNAMICOBJECT ? i_obj : NULL) && i_obj->IsWithinDistInMap(u, i_range))
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp
index 113df993f81..8068e82f676 100644
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -80,8 +80,6 @@ Group::~Group()
delete(r);
}
- // it is undefined whether objectmgr (which stores the groups) or instancesavemgr
- // will be unloaded first so we must be prepared for both cases
// this may unload some instance saves
for (uint8 i = 0; i < MAX_DIFFICULTY; ++i)
for (BoundInstancesMap::iterator itr2 = m_boundInstances[i].begin(); itr2 != m_boundInstances[i].end(); ++itr2)
@@ -400,7 +398,6 @@ bool Group::AddMember(Player* player)
stmt->setUInt8(4, member.roles);
CharacterDatabase.Execute(stmt);
-
}
SendUpdate();
@@ -493,7 +490,7 @@ bool Group::RemoveMember(uint64 guid, const RemoveMethod& method /*= GROUP_REMOV
// LFG group vote kick handled in scripts
if (isLFGGroup() && method == GROUP_REMOVEMETHOD_KICK)
- return m_memberSlots.size();
+ return !m_memberSlots.empty();
// remove member and change leader (if need) only if strong more 2 members _before_ member remove (BG/BF allow 1 member group)
if (GetMembersCount() > ((isBGGroup() || isLFGGroup() || isBFGroup()) ? 1u : 2u))
@@ -1572,7 +1569,7 @@ void Group::UpdatePlayerOutOfRange(Player* player)
for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next())
{
member = itr->GetSource();
- if (member && !member->IsWithinDist(player, member->GetSightRange(), false))
+ if (member && member != player && (!member->IsInMap(player) || !member->IsWithinDist(player, member->GetSightRange(), false)))
member->GetSession()->SendPacket(&data);
}
}
@@ -2171,12 +2168,12 @@ bool Group::IsFull() const
bool Group::isLFGGroup() const
{
- return m_groupType & GROUPTYPE_LFG;
+ return (m_groupType & GROUPTYPE_LFG) != 0;
}
bool Group::isRaidGroup() const
{
- return m_groupType & GROUPTYPE_RAID;
+ return (m_groupType & GROUPTYPE_RAID) != 0;
}
bool Group::isBGGroup() const
diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h
index 64122b0cb4d..08f91ca816a 100644
--- a/src/server/game/Groups/Group.h
+++ b/src/server/game/Groups/Group.h
@@ -129,7 +129,7 @@ class Roll : public LootValidatorRef
~Roll();
void setLoot(Loot* pLoot);
Loot* getLoot();
- void targetObjectBuildLink();
+ void targetObjectBuildLink() override;
uint64 itemGUID;
uint32 itemid;
@@ -171,7 +171,7 @@ class Group
typedef std::list<MemberSlot> MemberSlotList;
typedef MemberSlotList::const_iterator member_citerator;
- typedef UNORDERED_MAP< uint32 /*mapId*/, InstanceGroupBind> BoundInstancesMap;
+ typedef std::unordered_map< uint32 /*mapId*/, InstanceGroupBind> BoundInstancesMap;
protected:
typedef MemberSlotList::iterator member_witerator;
typedef std::set<Player*> InvitesList;
diff --git a/src/server/game/Groups/GroupMgr.cpp b/src/server/game/Groups/GroupMgr.cpp
index 39735f5dce3..23b6998d688 100644
--- a/src/server/game/Groups/GroupMgr.cpp
+++ b/src/server/game/Groups/GroupMgr.cpp
@@ -226,7 +226,7 @@ void GroupMgr::LoadGroups()
diff = 0; // default for both difficaly types
}
- InstanceSave* save = sInstanceSaveMgr->AddInstanceSave(mapEntry->MapID, fields[2].GetUInt32(), Difficulty(diff), time_t(fields[5].GetUInt32()), (bool)fields[6].GetUInt64(), true);
+ InstanceSave* save = sInstanceSaveMgr->AddInstanceSave(mapEntry->MapID, fields[2].GetUInt32(), Difficulty(diff), time_t(fields[5].GetUInt32()), fields[6].GetUInt64() != 0, true);
group->BindToInstance(save, fields[3].GetBool(), true);
++count;
}
diff --git a/src/server/game/Groups/GroupMgr.h b/src/server/game/Groups/GroupMgr.h
index a805b7514da..556df1bc351 100644
--- a/src/server/game/Groups/GroupMgr.h
+++ b/src/server/game/Groups/GroupMgr.h
@@ -22,12 +22,17 @@
class GroupMgr
{
- friend class ACE_Singleton<GroupMgr, ACE_Null_Mutex>;
private:
GroupMgr();
~GroupMgr();
public:
+ static GroupMgr* instance()
+ {
+ static GroupMgr instance;
+ return &instance;
+ }
+
typedef std::map<uint32, Group*> GroupContainer;
typedef std::vector<Group*> GroupDbContainer;
@@ -53,6 +58,6 @@ protected:
GroupDbContainer GroupDbStore;
};
-#define sGroupMgr ACE_Singleton<GroupMgr, ACE_Null_Mutex>::instance()
+#define sGroupMgr GroupMgr::instance()
#endif
diff --git a/src/server/game/Groups/GroupReference.h b/src/server/game/Groups/GroupReference.h
index df5683b3edf..dc8480e9463 100644
--- a/src/server/game/Groups/GroupReference.h
+++ b/src/server/game/Groups/GroupReference.h
@@ -28,9 +28,9 @@ class GroupReference : public Reference<Group, Player>
{
protected:
uint8 iSubGroup;
- void targetObjectBuildLink();
- void targetObjectDestroyLink();
- void sourceObjectDestroyLink();
+ void targetObjectBuildLink() override;
+ void targetObjectDestroyLink() override;
+ void sourceObjectDestroyLink() override;
public:
GroupReference() : Reference<Group, Player>(), iSubGroup(0) { }
~GroupReference() { unlink(); }
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index f448fbb9f19..bace2ec1360 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -677,9 +677,10 @@ bool Guild::Member::LoadFromDB(Field* fields)
if (!m_zoneId)
{
- TC_LOG_ERROR("guild", "Player (GUID: %u) has broken zone-data", GUID_LOPART(m_guid));
+ TC_LOG_DEBUG("guild", "Player (GUID: %u) has broken zone-data", GUID_LOPART(m_guid));
m_zoneId = Player::GetZoneIdFromDB(m_guid);
}
+
ResetFlags();
return true;
}
@@ -754,7 +755,7 @@ int32 Guild::Member::GetBankWithdrawValue(uint8 tabId) const
{
// Guild master has unlimited amount.
if (IsRank(GR_GUILDMASTER))
- return tabId == GUILD_BANK_MAX_TABS ? GUILD_WITHDRAW_MONEY_UNLIMITED : GUILD_WITHDRAW_SLOT_UNLIMITED;
+ return static_cast<int32>(tabId == GUILD_BANK_MAX_TABS ? GUILD_WITHDRAW_MONEY_UNLIMITED : GUILD_WITHDRAW_SLOT_UNLIMITED);
return m_bankWithdraw[tabId];
}
@@ -1760,7 +1761,7 @@ void Guild::HandleMemberDepositMoney(WorldSession* session, uint32 amount)
bool Guild::HandleMemberWithdrawMoney(WorldSession* session, uint32 amount, bool repair)
{
//clamp amount to MAX_MONEY_AMOUNT, Players can't hold more than that anyway
- amount = std::min(amount, uint32(MAX_MONEY_AMOUNT));
+ amount = std::min(amount, MAX_MONEY_AMOUNT);
if (m_bankMoney < amount) // Not enough money in bank
return false;
@@ -2581,7 +2582,7 @@ inline int32 Guild::_GetMemberRemainingSlots(Member const* member, uint8 tabId)
{
uint8 rankId = member->GetRankId();
if (rankId == GR_GUILDMASTER)
- return GUILD_WITHDRAW_SLOT_UNLIMITED;
+ return static_cast<int32>(GUILD_WITHDRAW_SLOT_UNLIMITED);
if ((_GetRankBankTabRights(rankId, tabId) & GUILD_BANK_RIGHT_VIEW_TAB) != 0)
{
int32 remaining = _GetRankBankTabSlotsPerDay(rankId, tabId) - member->GetBankWithdrawValue(tabId);
@@ -2598,7 +2599,7 @@ inline int32 Guild::_GetMemberRemainingMoney(Member const* member) const
{
uint8 rankId = member->GetRankId();
if (rankId == GR_GUILDMASTER)
- return GUILD_WITHDRAW_MONEY_UNLIMITED;
+ return static_cast<int32>(GUILD_WITHDRAW_MONEY_UNLIMITED);
if ((_GetRankRights(rankId) & (GR_RIGHT_WITHDRAW_REPAIR | GR_RIGHT_WITHDRAW_GOLD)) != 0)
{
@@ -2744,7 +2745,7 @@ bool Guild::_DoItemsMove(MoveItemData* pSrc, MoveItemData* pDest, bool sendError
Item* pDestItem = pDest->GetItem();
bool swap = (pDestItem != NULL);
- Item* pSrcItem = pSrc->GetItem(splitedAmount);
+ Item* pSrcItem = pSrc->GetItem(splitedAmount != 0);
// 1. Can store source item in destination
if (!pDest->CanStore(pSrcItem, swap, sendError))
return false;
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index fca483e92c3..8c7b926a700 100644
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -394,8 +394,8 @@ private:
~EventLogEntry() { }
- void SaveToDB(SQLTransaction& trans) const;
- void WritePacket(WorldPacket& data) const;
+ void SaveToDB(SQLTransaction& trans) const override;
+ void WritePacket(WorldPacket& data) const override;
private:
GuildEventLogTypes m_eventType;
@@ -426,8 +426,8 @@ private:
~BankEventLogEntry() { }
- void SaveToDB(SQLTransaction& trans) const;
- void WritePacket(WorldPacket& data) const;
+ void SaveToDB(SQLTransaction& trans) const override;
+ void WritePacket(WorldPacket& data) const override;
private:
GuildBankEventLogTypes m_eventType;
@@ -604,13 +604,13 @@ private:
PlayerMoveItemData(Guild* guild, Player* player, uint8 container, uint8 slotId) :
MoveItemData(guild, player, container, slotId) { }
- bool IsBank() const { return false; }
- bool InitItem();
- void RemoveItem(SQLTransaction& trans, MoveItemData* pOther, uint32 splitedAmount = 0);
- Item* StoreItem(SQLTransaction& trans, Item* pItem);
- void LogBankEvent(SQLTransaction& trans, MoveItemData* pFrom, uint32 count) const;
+ bool IsBank() const override { return false; }
+ bool InitItem() override;
+ void RemoveItem(SQLTransaction& trans, MoveItemData* pOther, uint32 splitedAmount = 0) override;
+ Item* StoreItem(SQLTransaction& trans, Item* pItem) override;
+ void LogBankEvent(SQLTransaction& trans, MoveItemData* pFrom, uint32 count) const override;
protected:
- InventoryResult CanStore(Item* pItem, bool swap);
+ InventoryResult CanStore(Item* pItem, bool swap) override;
};
class BankMoveItemData : public MoveItemData
@@ -619,17 +619,17 @@ private:
BankMoveItemData(Guild* guild, Player* player, uint8 container, uint8 slotId) :
MoveItemData(guild, player, container, slotId) { }
- bool IsBank() const { return true; }
- bool InitItem();
- bool HasStoreRights(MoveItemData* pOther) const;
- bool HasWithdrawRights(MoveItemData* pOther) const;
- void RemoveItem(SQLTransaction& trans, MoveItemData* pOther, uint32 splitedAmount);
- Item* StoreItem(SQLTransaction& trans, Item* pItem);
- void LogBankEvent(SQLTransaction& trans, MoveItemData* pFrom, uint32 count) const;
- void LogAction(MoveItemData* pFrom) const;
+ bool IsBank() const override { return true; }
+ bool InitItem() override;
+ bool HasStoreRights(MoveItemData* pOther) const override;
+ bool HasWithdrawRights(MoveItemData* pOther) const override;
+ void RemoveItem(SQLTransaction& trans, MoveItemData* pOther, uint32 splitedAmount) override;
+ Item* StoreItem(SQLTransaction& trans, Item* pItem) override;
+ void LogBankEvent(SQLTransaction& trans, MoveItemData* pFrom, uint32 count) const override;
+ void LogAction(MoveItemData* pFrom) const override;
protected:
- InventoryResult CanStore(Item* pItem, bool swap);
+ InventoryResult CanStore(Item* pItem, bool swap) override;
private:
Item* _StoreItem(SQLTransaction& trans, BankTab* pTab, Item* pItem, ItemPosCount& pos, bool clone) const;
@@ -637,7 +637,7 @@ private:
void CanStoreItemInTab(Item* pItem, uint8 skipSlotId, bool merge, uint32& count);
};
- typedef UNORDERED_MAP<uint32, Member*> Members;
+ typedef std::unordered_map<uint32, Member*> Members;
typedef std::vector<RankInfo> Ranks;
typedef std::vector<BankTab*> BankTabs;
diff --git a/src/server/game/Guilds/GuildMgr.h b/src/server/game/Guilds/GuildMgr.h
index 3d07059000b..4aa418b7e73 100644
--- a/src/server/game/Guilds/GuildMgr.h
+++ b/src/server/game/Guilds/GuildMgr.h
@@ -22,13 +22,17 @@
class GuildMgr
{
- friend class ACE_Singleton<GuildMgr, ACE_Null_Mutex>;
-
private:
GuildMgr();
~GuildMgr();
public:
+ static GuildMgr* instance()
+ {
+ static GuildMgr instance;
+ return &instance;
+ }
+
Guild* GetGuildByLeader(uint64 guid) const;
Guild* GetGuildById(uint32 guildId) const;
Guild* GetGuildByName(std::string const& guildName) const;
@@ -43,11 +47,11 @@ public:
void ResetTimes();
protected:
- typedef UNORDERED_MAP<uint32, Guild*> GuildContainer;
+ typedef std::unordered_map<uint32, Guild*> GuildContainer;
uint32 NextGuildId;
GuildContainer GuildStore;
};
-#define sGuildMgr ACE_Singleton<GuildMgr, ACE_Null_Mutex>::instance()
+#define sGuildMgr GuildMgr::instance()
#endif
diff --git a/src/server/game/Handlers/AddonHandler.cpp b/src/server/game/Handlers/AddonHandler.cpp
index 806cbd1c7fc..8a00ddc22f4 100644
--- a/src/server/game/Handlers/AddonHandler.cpp
+++ b/src/server/game/Handlers/AddonHandler.cpp
@@ -22,10 +22,6 @@
#include "Opcodes.h"
#include "Log.h"
-AddonHandler::AddonHandler() { }
-
-AddonHandler::~AddonHandler() { }
-
bool AddonHandler::BuildAddonPacket(WorldPacket* source, WorldPacket* target)
{
ByteBuffer AddOnPacked;
diff --git a/src/server/game/Handlers/AddonHandler.h b/src/server/game/Handlers/AddonHandler.h
index 97a541753d0..c60f2942efd 100644
--- a/src/server/game/Handlers/AddonHandler.h
+++ b/src/server/game/Handlers/AddonHandler.h
@@ -21,20 +21,23 @@
#include "Common.h"
#include "Config.h"
-#include <ace/Singleton.h>
#include "WorldPacket.h"
class AddonHandler
{
- /* Construction */
- friend class ACE_Singleton<AddonHandler, ACE_Null_Mutex>;
- AddonHandler();
-
public:
- ~AddonHandler();
- //build addon packet
+ static AddonHandler* instance()
+ {
+ static AddonHandler instance;
+ return &instance;
+ }
+
bool BuildAddonPacket(WorldPacket* Source, WorldPacket* Target);
+
+ private:
+ AddonHandler() { }
+ ~AddonHandler() { }
};
-#define sAddOnHandler ACE_Singleton<AddonHandler, ACE_Null_Mutex>::instance()
+#define sAddOnHandler AddonHandler::instance()
#endif
diff --git a/src/server/game/Handlers/ArenaTeamHandler.cpp b/src/server/game/Handlers/ArenaTeamHandler.cpp
index f3aedeeeb48..87febd8f1e7 100644
--- a/src/server/game/Handlers/ArenaTeamHandler.cpp
+++ b/src/server/game/Handlers/ArenaTeamHandler.cpp
@@ -37,15 +37,23 @@ void WorldSession::HandleInspectArenaTeamsOpcode(WorldPacket& recvData)
recvData >> guid;
TC_LOG_DEBUG("network", "Inspect Arena stats (GUID: %u TypeId: %u)", GUID_LOPART(guid), GuidHigh2TypeId(GUID_HIPART(guid)));
- if (Player* player = ObjectAccessor::FindPlayer(guid))
+ Player* player = ObjectAccessor::FindPlayer(guid);
+
+ if (!player)
+ return;
+
+ if (!GetPlayer()->IsWithinDistInMap(player, INSPECT_DISTANCE, false))
+ return;
+
+ if (GetPlayer()->IsValidAttackTarget(player))
+ return;
+
+ for (uint8 i = 0; i < MAX_ARENA_SLOT; ++i)
{
- for (uint8 i = 0; i < MAX_ARENA_SLOT; ++i)
+ if (uint32 a_id = player->GetArenaTeamId(i))
{
- if (uint32 a_id = player->GetArenaTeamId(i))
- {
- if (ArenaTeam* arenaTeam = sArenaTeamMgr->GetArenaTeamById(a_id))
- arenaTeam->Inspect(this, player->GetGUID());
- }
+ if (ArenaTeam* arenaTeam = sArenaTeamMgr->GetArenaTeamById(a_id))
+ arenaTeam->Inspect(this, player->GetGUID());
}
}
}
@@ -113,6 +121,12 @@ void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket& recvData)
return;
}
+ if (GetPlayer()->GetArenaTeamId(arenaTeam->GetSlot()) != arenaTeamId)
+ {
+ SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", "", ERR_ARENA_TEAM_PERMISSIONS);
+ return;
+ }
+
// OK result but don't send invite
if (player->GetSocial()->HasIgnore(GetPlayer()->GetGUIDLow()))
return;
@@ -298,6 +312,10 @@ void WorldSession::HandleArenaTeamRemoveOpcode(WorldPacket& recvData)
return;
}
+ // Player cannot be removed during fights
+ if (arenaTeam->IsFighting())
+ return;
+
arenaTeam->DelMember(member->Guid, true);
// Broadcast event
diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp
index d9e4feb7f85..86fa0429cce 100644
--- a/src/server/game/Handlers/AuctionHouseHandler.cpp
+++ b/src/server/game/Handlers/AuctionHouseHandler.cpp
@@ -119,7 +119,9 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData)
recvData >> itemsCount;
uint64 itemGUIDs[MAX_AUCTION_ITEMS]; // 160 slot = 4x 36 slot bag + backpack 16 slot
+ memset(itemGUIDs, 0, sizeof(itemGUIDs));
uint32 count[MAX_AUCTION_ITEMS];
+ memset(count, 0, sizeof(count));
if (itemsCount > MAX_AUCTION_ITEMS)
{
@@ -187,6 +189,7 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData)
Item* items[MAX_AUCTION_ITEMS];
uint32 finalCount = 0;
+ uint32 itemEntry = 0;
for (uint32 i = 0; i < itemsCount; ++i)
{
@@ -198,9 +201,12 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData)
return;
}
+ if (itemEntry == 0)
+ itemEntry = item->GetTemplate()->ItemId;
+
if (sAuctionMgr->GetAItem(item->GetGUIDLow()) || !item->CanBeTraded() || item->IsNotEmptyBag() ||
item->GetTemplate()->Flags & ITEM_PROTO_FLAG_CONJURED || item->GetUInt32Value(ITEM_FIELD_DURATION) ||
- item->GetCount() < count[i])
+ item->GetCount() < count[i] || itemEntry != item->GetTemplate()->ItemId)
{
SendAuctionCommandResult(0, AUCTION_SELL_ITEM, ERR_AUCTION_DATABASE_ERROR);
return;
@@ -216,6 +222,19 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData)
return;
}
+ // check if there are 2 identical guids, in this case user is most likely cheating
+ for (uint32 i = 0; i < itemsCount - 1; ++i)
+ {
+ for (uint32 j = i + 1; j < itemsCount; ++j)
+ {
+ if (itemGUIDs[i] == itemGUIDs[j])
+ {
+ SendAuctionCommandResult(0, AUCTION_SELL_ITEM, ERR_AUCTION_DATABASE_ERROR);
+ return;
+ }
+ }
+ }
+
for (uint32 i = 0; i < itemsCount; ++i)
{
Item* item = items[i];
diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp
index 0dfe396b65a..95e4dd3b5e0 100644
--- a/src/server/game/Handlers/BattleGroundHandler.cpp
+++ b/src/server/game/Handlers/BattleGroundHandler.cpp
@@ -309,7 +309,7 @@ void WorldSession::HandlePVPLogDataOpcode(WorldPacket & /*recvData*/)
return;
WorldPacket data;
- sBattlegroundMgr->BuildPvpLogDataPacket(&data, bg);
+ bg->BuildPvPLogDataPacket(data);
SendPacket(&data);
TC_LOG_DEBUG("network", "WORLD: Sent MSG_PVP_LOG_DATA Message");
@@ -666,7 +666,7 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData)
return;
if (grp->GetLeaderGUID() != _player->GetGUID())
return;
- err = grp->CanJoinBattlegroundQueue(bg, bgQueueTypeId, arenatype, arenatype, (bool)isRated, arenaslot);
+ err = grp->CanJoinBattlegroundQueue(bg, bgQueueTypeId, arenatype, arenatype, isRated != 0, arenaslot);
}
uint32 ateamId = 0;
@@ -706,7 +706,7 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData)
else
bg->SetRated(false);
- GroupQueueInfo* ginfo = bgQueue.AddGroup(_player, grp, bgTypeId, bracketEntry, arenatype, isRated, false, arenaRating, matchmakerRating, ateamId);
+ GroupQueueInfo* ginfo = bgQueue.AddGroup(_player, grp, bgTypeId, bracketEntry, arenatype, isRated != 0, false, arenaRating, matchmakerRating, ateamId);
avgTime = bgQueue.GetAverageQueueWaitTime(ginfo, bracketEntry->GetBracketId());
}
@@ -738,7 +738,7 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData)
}
else
{
- GroupQueueInfo* ginfo = bgQueue.AddGroup(_player, NULL, bgTypeId, bracketEntry, arenatype, isRated, false, arenaRating, matchmakerRating, ateamId);
+ GroupQueueInfo* ginfo = bgQueue.AddGroup(_player, NULL, bgTypeId, bracketEntry, arenatype, isRated != 0, false, arenaRating, matchmakerRating, ateamId);
uint32 avgTime = bgQueue.GetAverageQueueWaitTime(ginfo, bracketEntry->GetBracketId());
uint32 queueSlot = _player->AddBattlegroundQueueId(bgQueueTypeId);
diff --git a/src/server/game/Handlers/CalendarHandler.cpp b/src/server/game/Handlers/CalendarHandler.cpp
index 45d4d221d06..dd654fb3ad0 100644
--- a/src/server/game/Handlers/CalendarHandler.cpp
+++ b/src/server/game/Handlers/CalendarHandler.cpp
@@ -235,41 +235,76 @@ void WorldSession::HandleCalendarAddEvent(WorldPacket& recvData)
recvData.ReadPackedTime(unkPackedTime);
recvData >> flags;
- CalendarEvent calendarEvent(sCalendarMgr->GetFreeEventId(), guid, 0, CalendarEventType(type), dungeonId,
+ // prevent events in the past
+ // To Do: properly handle timezones and remove the "- time_t(86400L)" hack
+ if (time_t(eventPackedTime) < (time(NULL) - time_t(86400L)))
+ {
+ recvData.rfinish();
+ return;
+ }
+
+ CalendarEvent* calendarEvent = new CalendarEvent(sCalendarMgr->GetFreeEventId(), guid, 0, CalendarEventType(type), dungeonId,
time_t(eventPackedTime), flags, time_t(unkPackedTime), title, description);
- if (calendarEvent.IsGuildEvent() || calendarEvent.IsGuildAnnouncement())
+ if (calendarEvent->IsGuildEvent() || calendarEvent->IsGuildAnnouncement())
if (Player* creator = ObjectAccessor::FindPlayer(guid))
- calendarEvent.SetGuildId(creator->GetGuildId());
+ calendarEvent->SetGuildId(creator->GetGuildId());
- if (calendarEvent.IsGuildAnnouncement())
+ if (calendarEvent->IsGuildAnnouncement())
{
// 946684800 is 01/01/2000 00:00:00 - default response time
- CalendarInvite invite(0, calendarEvent.GetEventId(), 0, guid, 946684800, CALENDAR_STATUS_NOT_SIGNED_UP, CALENDAR_RANK_PLAYER, "");
+ CalendarInvite invite(0, calendarEvent->GetEventId(), 0, guid, 946684800, CALENDAR_STATUS_NOT_SIGNED_UP, CALENDAR_RANK_PLAYER, "");
// WARNING: By passing pointer to a local variable, the underlying method(s) must NOT perform any kind
// of storage of the pointer as it will lead to memory corruption
- sCalendarMgr->AddInvite(&calendarEvent, &invite);
+ sCalendarMgr->AddInvite(calendarEvent, &invite);
}
else
{
+ // client limits the amount of players to be invited to 100
+ const uint32 MaxPlayerInvites = 100;
+
uint32 inviteCount;
- recvData >> inviteCount;
+ uint64 invitee[MaxPlayerInvites];
+ uint8 status[MaxPlayerInvites];
+ uint8 rank[MaxPlayerInvites];
+
+ memset(invitee, 0, sizeof(invitee));
+ memset(status, 0, sizeof(status));
+ memset(rank, 0, sizeof(rank));
- for (uint32 i = 0; i < inviteCount; ++i)
+ try
{
- uint64 invitee = 0;
- uint8 status = 0;
- uint8 rank = 0;
- recvData.readPackGUID(invitee);
- recvData >> status >> rank;
+ recvData >> inviteCount;
+
+ for (uint32 i = 0; i < inviteCount && i < MaxPlayerInvites; ++i)
+ {
+ recvData.readPackGUID(invitee[i]);
+ recvData >> status[i] >> rank[i];
+ }
+ }
+ catch (ByteBufferException const&)
+ {
+ delete calendarEvent;
+ calendarEvent = NULL;
+ throw;
+ }
+ SQLTransaction trans;
+ if (inviteCount > 1)
+ trans = CharacterDatabase.BeginTransaction();
+
+ for (uint32 i = 0; i < inviteCount && i < MaxPlayerInvites; ++i)
+ {
// 946684800 is 01/01/2000 00:00:00 - default response time
- CalendarInvite* invite = new CalendarInvite(sCalendarMgr->GetFreeInviteId(), calendarEvent.GetEventId(), invitee, guid, 946684800, CalendarInviteStatus(status), CalendarModerationRank(rank), "");
- sCalendarMgr->AddInvite(&calendarEvent, invite);
+ CalendarInvite* invite = new CalendarInvite(sCalendarMgr->GetFreeInviteId(), calendarEvent->GetEventId(), invitee[i], guid, 946684800, CalendarInviteStatus(status[i]), CalendarModerationRank(rank[i]), "");
+ sCalendarMgr->AddInvite(calendarEvent, invite, trans);
}
+
+ if (inviteCount > 1)
+ CharacterDatabase.CommitTransaction(trans);
}
- sCalendarMgr->AddEvent(new CalendarEvent(calendarEvent, calendarEvent.GetEventId()), CALENDAR_SENDTYPE_ADD);
+ sCalendarMgr->AddEvent(calendarEvent, CALENDAR_SENDTYPE_ADD);
}
void WorldSession::HandleCalendarUpdateEvent(WorldPacket& recvData)
@@ -294,6 +329,14 @@ void WorldSession::HandleCalendarUpdateEvent(WorldPacket& recvData)
recvData.ReadPackedTime(timeZoneTime);
recvData >> flags;
+ // prevent events in the past
+ // To Do: properly handle timezones and remove the "- time_t(86400L)" hack
+ if (time_t(eventPackedTime) < (time(NULL) - time_t(86400L)))
+ {
+ recvData.rfinish();
+ return;
+ }
+
TC_LOG_DEBUG("network", "CMSG_CALENDAR_UPDATE_EVENT [" UI64FMTD "] EventId [" UI64FMTD
"], InviteId [" UI64FMTD "] Title %s, Description %s, type %u "
"Repeatable %u, MaxInvites %u, Dungeon ID %d, Time %u "
@@ -336,24 +379,37 @@ void WorldSession::HandleCalendarCopyEvent(WorldPacket& recvData)
uint64 guid = _player->GetGUID();
uint64 eventId;
uint64 inviteId;
- uint32 time;
+ uint32 eventTime;
recvData >> eventId >> inviteId;
- recvData.ReadPackedTime(time);
+ recvData.ReadPackedTime(eventTime);
TC_LOG_DEBUG("network", "CMSG_CALENDAR_COPY_EVENT [" UI64FMTD "], EventId [" UI64FMTD
- "] inviteId [" UI64FMTD "] Time: %u", guid, eventId, inviteId, time);
+ "] inviteId [" UI64FMTD "] Time: %u", guid, eventId, inviteId, eventTime);
+
+ // prevent events in the past
+ // To Do: properly handle timezones and remove the "- time_t(86400L)" hack
+ if (time_t(eventTime) < (time(NULL) - time_t(86400L)))
+ {
+ recvData.rfinish();
+ return;
+ }
if (CalendarEvent* oldEvent = sCalendarMgr->GetEvent(eventId))
{
CalendarEvent* newEvent = new CalendarEvent(*oldEvent, sCalendarMgr->GetFreeEventId());
- newEvent->SetEventTime(time_t(time));
+ newEvent->SetEventTime(time_t(eventTime));
sCalendarMgr->AddEvent(newEvent, CALENDAR_SENDTYPE_COPY);
CalendarInviteStore invites = sCalendarMgr->GetEventInvites(eventId);
+ SQLTransaction trans;
+ if (invites.size() > 1)
+ trans = CharacterDatabase.BeginTransaction();
for (CalendarInviteStore::const_iterator itr = invites.begin(); itr != invites.end(); ++itr)
- sCalendarMgr->AddInvite(newEvent, new CalendarInvite(**itr, sCalendarMgr->GetFreeInviteId(), newEvent->GetEventId()));
+ sCalendarMgr->AddInvite(newEvent, new CalendarInvite(**itr, sCalendarMgr->GetFreeInviteId(), newEvent->GetEventId()), trans);
+ if (invites.size() > 1)
+ CharacterDatabase.CommitTransaction(trans);
// should we change owner when somebody makes a copy of event owned by another person?
}
else
diff --git a/src/server/game/Handlers/ChannelHandler.cpp b/src/server/game/Handlers/ChannelHandler.cpp
index c95eadc7d90..cda6e7a4efb 100644
--- a/src/server/game/Handlers/ChannelHandler.cpp
+++ b/src/server/game/Handlers/ChannelHandler.cpp
@@ -20,6 +20,8 @@
#include "ChannelMgr.h"
#include "Player.h"
+#include <cctype>
+
void WorldSession::HandleJoinChannel(WorldPacket& recvPacket)
{
uint32 channelId;
@@ -45,6 +47,9 @@ void WorldSession::HandleJoinChannel(WorldPacket& recvPacket)
if (channelName.empty())
return;
+ if (isdigit(channelName[0]))
+ return;
+
if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam()))
{
cMgr->setTeam(GetPlayer()->GetTeam());
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index f9a5ec2d53b..b2507877111 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -243,8 +243,6 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result)
void WorldSession::HandleCharEnumOpcode(WorldPacket & /*recvData*/)
{
- AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, false);
-
// remove expired bans
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_EXPIRED_BANS);
CharacterDatabase.Execute(stmt);
@@ -289,10 +287,10 @@ void WorldSession::HandleCharCreateOpcode(WorldPacket& recvData)
switch (team)
{
case ALLIANCE:
- disabled = mask & (1 << 0);
+ disabled = (mask & (1 << 0)) != 0;
break;
case HORDE:
- disabled = mask & (1 << 1);
+ disabled = (mask & (1 << 1)) != 0;
break;
}
@@ -681,7 +679,6 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
data << uint8(CHAR_CREATE_SUCCESS);
SendPacket(&data);
- AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, true);
std::string IP_str = GetRemoteAddress();
TC_LOG_INFO("entities.player.character", "Account: %d (IP: %s) Create Character:[%s] (GUID: %u)", GetAccountId(), IP_str.c_str(), createInfo->Name.c_str(), newChar.GetGUIDLow());
sScriptMgr->OnPlayerCreate(&newChar);
@@ -699,10 +696,15 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket& recvData)
{
uint64 guid;
recvData >> guid;
+ // Initiating
+ uint32 initAccountId = GetAccountId();
// can't delete loaded character
if (ObjectAccessor::FindPlayer(guid))
+ {
+ sScriptMgr->OnPlayerFailedDelete(guid, initAccountId);
return;
+ }
uint32 accountId = 0;
uint8 level = 0;
@@ -711,6 +713,7 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket& recvData)
// is guild leader
if (sGuildMgr->GetGuildByLeader(guid))
{
+ sScriptMgr->OnPlayerFailedDelete(guid, initAccountId);
WorldPacket data(SMSG_CHAR_DELETE, 1);
data << uint8(CHAR_DELETE_FAILED_GUILD_LEADER);
SendPacket(&data);
@@ -720,6 +723,7 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket& recvData)
// is arena team captain
if (sArenaTeamMgr->GetArenaTeamByCaptain(guid))
{
+ sScriptMgr->OnPlayerFailedDelete(guid, initAccountId);
WorldPacket data(SMSG_CHAR_DELETE, 1);
data << uint8(CHAR_DELETE_FAILED_ARENA_CAPTAIN);
SendPacket(&data);
@@ -738,12 +742,18 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket& recvData)
}
// prevent deleting other players' characters using cheating tools
- if (accountId != GetAccountId())
+ if (accountId != initAccountId)
+ {
+ sScriptMgr->OnPlayerFailedDelete(guid, initAccountId);
return;
+ }
std::string IP_str = GetRemoteAddress();
TC_LOG_INFO("entities.player.character", "Account: %d, IP: %s deleted character: %s, GUID: %u, Level: %u", accountId, IP_str.c_str(), name.c_str(), GUID_LOPART(guid), level);
- sScriptMgr->OnPlayerDelete(guid);
+
+ // To prevent hook failure, place hook before removing reference from DB
+ sScriptMgr->OnPlayerDelete(guid, initAccountId); // To prevent race conditioning, but as it also makes sense, we hand the accountId over for successful delete.
+ // Shouldn't interfere with character deletion though
if (sLog->ShouldLog("entities.player.dump", LOG_LEVEL_INFO)) // optimize GetPlayerDump call
{
@@ -758,15 +768,14 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket& recvData)
WorldPacket data(SMSG_CHAR_DELETE, 1);
data << uint8(CHAR_DELETE_SUCCESS);
SendPacket(&data);
-
- AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, true);
}
void WorldSession::HandlePlayerLoginOpcode(WorldPacket& recvData)
{
if (PlayerLoading() || GetPlayer() != NULL)
{
- TC_LOG_ERROR("network", "Player tryes to login again, AccountId = %d", GetAccountId());
+ TC_LOG_ERROR("network", "Player tries to login again, AccountId = %d", GetAccountId());
+ KickPlayer();
return;
}
@@ -969,8 +978,8 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
{
// not blizz like, we must correctly save and load player instead...
if (pCurrChar->getRace() == RACE_NIGHTELF)
- pCurrChar->CastSpell(pCurrChar, 20584, true, 0);// auras SPELL_AURA_INCREASE_SPEED(+speed in wisp form), SPELL_AURA_INCREASE_SWIM_SPEED(+swim speed in wisp form), SPELL_AURA_TRANSFORM (to wisp form)
- pCurrChar->CastSpell(pCurrChar, 8326, true, 0); // auras SPELL_AURA_GHOST, SPELL_AURA_INCREASE_SPEED(why?), SPELL_AURA_INCREASE_SWIM_SPEED(why?)
+ pCurrChar->CastSpell(pCurrChar, 20584, true, nullptr);// auras SPELL_AURA_INCREASE_SPEED(+speed in wisp form), SPELL_AURA_INCREASE_SWIM_SPEED(+swim speed in wisp form), SPELL_AURA_TRANSFORM (to wisp form)
+ pCurrChar->CastSpell(pCurrChar, 8326, true, nullptr); // auras SPELL_AURA_GHOST, SPELL_AURA_INCREASE_SPEED(why?), SPELL_AURA_INCREASE_SWIM_SPEED(why?)
pCurrChar->SetMovement(MOVE_WATER_WALK);
}
@@ -994,18 +1003,19 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
// Apply at_login requests
if (pCurrChar->HasAtLoginFlag(AT_LOGIN_RESET_SPELLS))
{
- pCurrChar->resetSpells();
+ pCurrChar->ResetSpells();
SendNotification(LANG_RESET_SPELLS);
}
if (pCurrChar->HasAtLoginFlag(AT_LOGIN_RESET_TALENTS))
{
- pCurrChar->resetTalents(true);
+ pCurrChar->ResetTalents(true);
pCurrChar->SendTalentsInfoData(false); // original talents send already in to SendInitialPacketsBeforeAddToMap, resend reset state
SendNotification(LANG_RESET_TALENTS);
}
- if (pCurrChar->HasAtLoginFlag(AT_LOGIN_FIRST))
+ bool firstLogin = pCurrChar->HasAtLoginFlag(AT_LOGIN_FIRST);
+ if (firstLogin)
pCurrChar->RemoveAtLoginFlag(AT_LOGIN_FIRST);
// show time before shutdown if shutdown planned.
@@ -1030,7 +1040,8 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
// Handle Login-Achievements (should be handled after loading)
_player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN, 1);
- sScriptMgr->OnPlayerLogin(pCurrChar);
+ sScriptMgr->OnPlayerLogin(pCurrChar, firstLogin);
+
delete holder;
}
@@ -1044,7 +1055,7 @@ void WorldSession::HandleSetFactionAtWar(WorldPacket& recvData)
recvData >> repListID;
recvData >> flag;
- GetPlayer()->GetReputationMgr().SetAtWar(repListID, flag);
+ GetPlayer()->GetReputationMgr().SetAtWar(repListID, flag != 0);
}
//I think this function is never used :/ I dunno, but i guess this opcode not exists
@@ -1097,7 +1108,7 @@ void WorldSession::HandleSetFactionInactiveOpcode(WorldPacket& recvData)
uint8 inactive;
recvData >> replistid >> inactive;
- _player->GetReputationMgr().SetInactive(replistid, inactive);
+ _player->GetReputationMgr().SetInactive(replistid, inactive != 0);
}
void WorldSession::HandleShowingHelmOpcode(WorldPacket& recvData)
@@ -1168,7 +1179,6 @@ void WorldSession::HandleCharRenameOpcode(WorldPacket& recvData)
void WorldSession::HandleChangePlayerNameOpcodeCallBack(PreparedQueryResult result, std::string const& newName)
{
- AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, true);
if (!result)
{
WorldPacket data(SMSG_CHAR_RENAME, 1);
@@ -1426,8 +1436,6 @@ void WorldSession::HandleCharCustomize(WorldPacket& recvData)
stmt->setUInt32(0, GUID_LOPART(guid));
// TODO: Make async with callback
- // TODO 2: Allow opcode at end of callback
- AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, true);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (!result)
@@ -1682,8 +1690,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData)
uint8 playerClass = nameData->m_class;
uint8 level = nameData->m_level;
- // TO Do: Make async and allow opcode on callback
- AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, true);
+ // TO Do: Make async
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_AT_LOGIN_TITLES);
stmt->setUInt32(0, lowGuid);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
@@ -1768,6 +1775,9 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData)
}
}
+ // resurrect the character in case he's dead
+ sObjectAccessor->ConvertCorpseForPlayer(guid);
+
CharacterDatabase.EscapeString(newname);
Player::Customize(guid, gender, skin, face, hairStyle, hairColor, facialHair);
SQLTransaction trans = CharacterDatabase.BeginTransaction();
diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp
index e0b29523a3a..eccf7a6fd38 100644
--- a/src/server/game/Handlers/ChatHandler.cpp
+++ b/src/server/game/Handlers/ChatHandler.cpp
@@ -269,7 +269,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
}
Player* receiver = sObjectAccessor->FindPlayerByName(to);
- if (!receiver || (!receiver->isAcceptWhispers() && receiver->GetSession()->HasPermission(rbac::RBAC_PERM_CAN_FILTER_WHISPERS) && !receiver->IsInWhisperWhiteList(sender->GetGUID())))
+ if (!receiver || (lang != LANG_ADDON && !receiver->isAcceptWhispers() && receiver->GetSession()->HasPermission(rbac::RBAC_PERM_CAN_FILTER_WHISPERS) && !receiver->IsInWhisperWhiteList(sender->GetGUID())))
{
SendPlayerNotFoundNotice(to);
return;
diff --git a/src/server/game/Handlers/CombatHandler.cpp b/src/server/game/Handlers/CombatHandler.cpp
index 47ffc2578bd..e4d749d9ab0 100644
--- a/src/server/game/Handlers/CombatHandler.cpp
+++ b/src/server/game/Handlers/CombatHandler.cpp
@@ -93,7 +93,11 @@ void WorldSession::SendAttackStop(Unit const* enemy)
{
WorldPacket data(SMSG_ATTACKSTOP, (8+8+4)); // we guess size
data.append(GetPlayer()->GetPackGUID());
- data.append(enemy ? enemy->GetPackGUID() : 0); // must be packed guid
+ if (enemy)
+ data.append(enemy->GetPackGUID());
+ else
+ data << uint8(0);
+
data << uint32(0); // unk, can be 1 also
SendPacket(&data);
}
diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp
index eae95d20610..5b35da297c9 100644
--- a/src/server/game/Handlers/GroupHandler.cpp
+++ b/src/server/game/Handlers/GroupHandler.cpp
@@ -638,8 +638,6 @@ void WorldSession::HandleGroupAssistantLeaderOpcode(WorldPacket& recvData)
recvData >> apply;
group->SetGroupMemberFlag(guid, apply, MEMBER_FLAG_ASSISTANT);
-
- group->SendUpdate();
}
void WorldSession::HandlePartyAssignmentOpcode(WorldPacket& recvData)
@@ -1070,5 +1068,5 @@ void WorldSession::HandleOptOutOfLootOpcode(WorldPacket& recvData)
return;
}
- GetPlayer()->SetPassOnGroupLoot(passOnLoot);
+ GetPlayer()->SetPassOnGroupLoot(passOnLoot != 0);
}
diff --git a/src/server/game/Handlers/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp
index 9df633a4c5e..b652192bfd7 100644
--- a/src/server/game/Handlers/GuildHandler.cpp
+++ b/src/server/game/Handlers/GuildHandler.cpp
@@ -463,7 +463,7 @@ void WorldSession::HandleGuildBankSwapItems(WorldPacket& recvData)
if (!Player::IsInventoryPos(playerBag, playerSlotId) && !(playerBag == NULL_BAG && playerSlotId == NULL_SLOT))
GetPlayer()->SendEquipError(EQUIP_ERR_NONE, NULL);
else
- guild->SwapItemsWithInventory(GetPlayer(), toChar, tabId, slotId, playerBag, playerSlotId, splitedAmount);
+ guild->SwapItemsWithInventory(GetPlayer(), toChar != 0, tabId, slotId, playerBag, playerSlotId, splitedAmount);
}
}
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp
index c4b4b35bf37..60966ace011 100644
--- a/src/server/game/Handlers/ItemHandler.cpp
+++ b/src/server/game/Handlers/ItemHandler.cpp
@@ -85,6 +85,18 @@ void WorldSession::HandleSwapInvItemOpcode(WorldPacket& recvData)
return;
}
+ if (_player->IsBankPos(INVENTORY_SLOT_BAG_0, srcslot) && !CanUseBank())
+ {
+ TC_LOG_DEBUG("network", "WORLD: HandleSwapInvItemOpcode - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(m_currentBankerGUID)));
+ return;
+ }
+
+ if (_player->IsBankPos(INVENTORY_SLOT_BAG_0, dstslot) && !CanUseBank())
+ {
+ TC_LOG_DEBUG("network", "WORLD: HandleSwapInvItemOpcode - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(m_currentBankerGUID)));
+ return;
+ }
+
uint16 src = ((INVENTORY_SLOT_BAG_0 << 8) | srcslot);
uint16 dst = ((INVENTORY_SLOT_BAG_0 << 8) | dstslot);
@@ -137,6 +149,18 @@ void WorldSession::HandleSwapItem(WorldPacket& recvData)
return;
}
+ if (_player->IsBankPos(srcbag, srcslot) && !CanUseBank())
+ {
+ TC_LOG_DEBUG("network", "WORLD: HandleSwapItem - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(m_currentBankerGUID)));
+ return;
+ }
+
+ if (_player->IsBankPos(dstbag, dstslot) && !CanUseBank())
+ {
+ TC_LOG_DEBUG("network", "WORLD: HandleSwapItem - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(m_currentBankerGUID)));
+ return;
+ }
+
_player->SwapItem(src, dst);
}
@@ -470,19 +494,6 @@ void WorldSession::HandleReadItem(WorldPacket& recvData)
_player->SendEquipError(EQUIP_ERR_ITEM_NOT_FOUND, NULL, NULL);
}
-void WorldSession::HandlePageQuerySkippedOpcode(WorldPacket& recvData)
-{
- TC_LOG_DEBUG("network", "WORLD: Received CMSG_PAGE_TEXT_QUERY");
-
- uint32 itemid;
- uint64 guid;
-
- recvData >> itemid >> guid;
-
- TC_LOG_INFO("network", "Packet Info: itemid: %u guidlow: %u guidentry: %u guidhigh: %u",
- itemid, GUID_LOPART(guid), GUID_ENPART(guid), GUID_HIPART(guid));
-}
-
void WorldSession::HandleSellItemOpcode(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "WORLD: Received CMSG_SELL_ITEM");
@@ -871,15 +882,11 @@ void WorldSession::HandleBuyBankSlotOpcode(WorldPacket& recvPacket)
uint64 guid;
recvPacket >> guid;
- // cheating protection
- /* not critical if "cheated", and check skip allow by slots in bank windows open by .bank command.
- Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_BANKER);
- if (!creature)
+ if (!CanUseBank(guid))
{
- TC_LOG_DEBUG("WORLD: HandleBuyBankSlotOpcode - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(guid)));
+ TC_LOG_DEBUG("network", "WORLD: HandleBuyBankSlotOpcode - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(guid)));
return;
}
- */
uint32 slot = _player->GetBankBagSlotCount();
@@ -925,6 +932,12 @@ void WorldSession::HandleAutoBankItemOpcode(WorldPacket& recvPacket)
recvPacket >> srcbag >> srcslot;
TC_LOG_DEBUG("network", "STORAGE: receive srcbag = %u, srcslot = %u", srcbag, srcslot);
+ if (!CanUseBank())
+ {
+ TC_LOG_DEBUG("network", "WORLD: HandleAutoBankItemOpcode - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(m_currentBankerGUID)));
+ return;
+ }
+
Item* pItem = _player->GetItemByPos(srcbag, srcslot);
if (!pItem)
return;
@@ -956,6 +969,12 @@ void WorldSession::HandleAutoStoreBankItemOpcode(WorldPacket& recvPacket)
recvPacket >> srcbag >> srcslot;
TC_LOG_DEBUG("network", "STORAGE: receive srcbag = %u, srcslot = %u", srcbag, srcslot);
+ if (!CanUseBank())
+ {
+ TC_LOG_DEBUG("network", "WORLD: HandleAutoStoreBankItemOpcode - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(m_currentBankerGUID)));
+ return;
+ }
+
Item* pItem = _player->GetItemByPos(srcbag, srcslot);
if (!pItem)
return;
@@ -1424,6 +1443,10 @@ void WorldSession::HandleItemRefund(WorldPacket &recvData)
return;
}
+ // Don't try to refund item currently being disenchanted
+ if (_player->GetLootGUID() == guid)
+ return;
+
GetPlayer()->RefundItem(item);
}
@@ -1454,3 +1477,21 @@ void WorldSession::HandleItemTextQuery(WorldPacket& recvData )
SendPacket(&data);
}
+
+bool WorldSession::CanUseBank(uint64 bankerGUID) const
+{
+ // bankerGUID parameter is optional, set to 0 by default.
+ if (!bankerGUID)
+ bankerGUID = m_currentBankerGUID;
+
+ bool isUsingBankCommand = (bankerGUID == GetPlayer()->GetGUID() && bankerGUID == m_currentBankerGUID);
+
+ if (!isUsingBankCommand)
+ {
+ Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(bankerGUID, UNIT_NPC_FLAG_BANKER);
+ if (!creature)
+ return false;
+ }
+
+ return true;
+} \ No newline at end of file
diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp
index f92c6e08e31..8bc9c5dc659 100644
--- a/src/server/game/Handlers/LootHandler.cpp
+++ b/src/server/game/Handlers/LootHandler.cpp
@@ -81,11 +81,10 @@ void WorldSession::HandleAutostoreLootItemOpcode(WorldPacket& recvData)
{
Creature* creature = GetPlayer()->GetMap()->GetCreature(lguid);
- bool lootAllowed = creature && creature->IsAlive() == (player->getClass() == CLASS_ROGUE && creature->lootForPickPocketed);
-
+ bool lootAllowed = creature && creature->IsAlive() == (player->getClass() == CLASS_ROGUE && creature->loot.loot_type == LOOT_PICKPOCKETING);
if (!lootAllowed || !creature->IsWithinDistInMap(_player, INTERACTION_DISTANCE))
{
- player->SendLootRelease(lguid);
+ player->SendLootError(lguid, lootAllowed ? LOOT_ERROR_TOO_FAR : LOOT_ERROR_DIDNT_KILL);
return;
}
@@ -148,13 +147,15 @@ void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/)
case HIGHGUID_VEHICLE:
{
Creature* creature = player->GetMap()->GetCreature(guid);
- bool lootAllowed = creature && creature->IsAlive() == (player->getClass() == CLASS_ROGUE && creature->lootForPickPocketed);
+ bool lootAllowed = creature && creature->IsAlive() == (player->getClass() == CLASS_ROGUE && creature->loot.loot_type == LOOT_PICKPOCKETING);
if (lootAllowed && creature->IsWithinDistInMap(player, INTERACTION_DISTANCE))
{
loot = &creature->loot;
if (creature->IsAlive())
shareMoney = false;
}
+ else
+ player->SendLootError(guid, lootAllowed ? LOOT_ERROR_TOO_FAR : LOOT_ERROR_DIDNT_KILL);
break;
}
default:
@@ -338,7 +339,8 @@ void WorldSession::DoLootRelease(uint64 lguid)
}
else
{
- if (pItem->loot.isLooted()) // Only delete item if no loot or money (unlooted loot is saved to db)
+ // Only delete item if no loot or money (unlooted loot is saved to db) or if it isn't an openable item
+ if (pItem->loot.isLooted() || !(proto->Flags & ITEM_PROTO_FLAG_OPENABLE))
player->DestroyItem(pItem->GetBagSlot(), pItem->GetSlot(), true);
}
return; // item can be looted only single player
@@ -347,18 +349,19 @@ void WorldSession::DoLootRelease(uint64 lguid)
{
Creature* creature = GetPlayer()->GetMap()->GetCreature(lguid);
- bool lootAllowed = creature && creature->IsAlive() == (player->getClass() == CLASS_ROGUE && creature->lootForPickPocketed);
+ bool lootAllowed = creature && creature->IsAlive() == (player->getClass() == CLASS_ROGUE && creature->loot.loot_type == LOOT_PICKPOCKETING);
if (!lootAllowed || !creature->IsWithinDistInMap(_player, INTERACTION_DISTANCE))
return;
loot = &creature->loot;
if (loot->isLooted())
{
+ creature->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
+
// skip pickpocketing loot for speed, skinning timer reduction is no-op in fact
if (!creature->IsAlive())
creature->AllLootRemovedFromCorpse();
- creature->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
loot->clear();
}
else
@@ -392,21 +395,28 @@ void WorldSession::HandleLootMasterGiveOpcode(WorldPacket& recvData)
if (!_player->GetGroup() || _player->GetGroup()->GetMasterLooterGuid() != _player->GetGUID() || _player->GetGroup()->GetLootMethod() != MASTER_LOOT)
{
- _player->SendLootRelease(GetPlayer()->GetLootGUID());
+ _player->SendLootError(lootguid, LOOT_ERROR_DIDNT_KILL);
return;
}
Player* target = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(target_playerguid, 0, HIGHGUID_PLAYER));
if (!target)
+ {
+ _player->SendLootError(lootguid, LOOT_ERROR_PLAYER_NOT_FOUND);
return;
+ }
TC_LOG_DEBUG("network", "WorldSession::HandleLootMasterGiveOpcode (CMSG_LOOT_MASTER_GIVE, 0x02A3) Target = [%s].", target->GetName().c_str());
if (_player->GetLootGUID() != lootguid)
+ {
+ _player->SendLootError(lootguid, LOOT_ERROR_DIDNT_KILL);
return;
+ }
if (!_player->IsInRaidWith(target) || !_player->IsInMap(target))
{
+ _player->SendLootError(lootguid, LOOT_ERROR_MASTER_OTHER);
TC_LOG_INFO("loot", "MasterLootItem: Player %s tried to give an item to ineligible player %s !", GetPlayer()->GetName().c_str(), target->GetName().c_str());
return;
}
@@ -448,16 +458,21 @@ void WorldSession::HandleLootMasterGiveOpcode(WorldPacket& recvData)
msg = EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM;
if (msg != EQUIP_ERR_OK)
{
+ if (msg == EQUIP_ERR_CANT_CARRY_MORE_OF_THIS)
+ _player->SendLootError(lootguid, LOOT_ERROR_MASTER_UNIQUE_ITEM);
+ else if (msg == EQUIP_ERR_INVENTORY_FULL)
+ _player->SendLootError(lootguid, LOOT_ERROR_MASTER_INV_FULL);
+ else
+ _player->SendLootError(lootguid, LOOT_ERROR_MASTER_OTHER);
+
target->SendEquipError(msg, NULL, NULL, item.itemid);
- // send duplicate of error massage to master looter
- _player->SendEquipError(msg, NULL, NULL, item.itemid);
return;
}
// list of players allowed to receive this item in trade
AllowedLooterSet looters = item.GetAllowedLooters();
- // not move item from loot to target inventory
+ // now move item from loot to target inventory
Item* newitem = target->StoreNewItem(dest, item.itemid, true, item.randomPropertyId, looters);
target->SendNewItem(newitem, uint32(item.count), false, false, true);
target->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM, item.itemid, item.count);
@@ -465,8 +480,8 @@ void WorldSession::HandleLootMasterGiveOpcode(WorldPacket& recvData)
target->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOOT_EPIC_ITEM, item.itemid, item.count);
// mark as looted
- item.count=0;
- item.is_looted=true;
+ item.count = 0;
+ item.is_looted = true;
loot->NotifyItemRemoved(slotid);
--loot->unlootedCount;
diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp
index 10ef7810d1d..1270f4e6419 100644
--- a/src/server/game/Handlers/MailHandler.cpp
+++ b/src/server/game/Handlers/MailHandler.cpp
@@ -131,6 +131,13 @@ void WorldSession::HandleSendMail(WorldPacket& recvData)
uint32 reqmoney = cost + money;
+ // Check for overflow
+ if (reqmoney < money)
+ {
+ player->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_ENOUGH_MONEY);
+ return;
+ }
+
if (!player->HasEnoughMoney(reqmoney) && !player->IsGameMaster())
{
player->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_ENOUGH_MONEY);
@@ -315,6 +322,10 @@ void WorldSession::HandleSendMail(WorldPacket& recvData)
// If theres is an item, there is a one hour delivery delay if sent to another account's character.
uint32 deliver_delay = needItemDelay ? sWorld->getIntConfig(CONFIG_MAIL_DELIVERY_DELAY) : 0;
+ // don't ask for COD if there are no items
+ if (items_count == 0)
+ COD = 0;
+
// will delete item or place to receiver mail list
draft
.AddMoney(money)
@@ -338,7 +349,7 @@ void WorldSession::HandleMailMarkAsRead(WorldPacket& recvData)
Player* player = _player;
Mail* m = player->GetMail(mailId);
- if (m)
+ if (m && m->state != MAIL_STATE_DELETED)
{
if (player->unReadMails)
--player->unReadMails;
@@ -462,6 +473,13 @@ void WorldSession::HandleMailTakeItem(WorldPacket& recvData)
return;
}
+ // verify that the mail has the item to avoid cheaters taking COD items without paying
+ if (std::find_if(m->items.begin(), m->items.end(), [itemId](MailItemInfo info){ return info.item_guid == itemId; }) == m->items.end())
+ {
+ player->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_ERR_INTERNAL_ERROR);
+ return;
+ }
+
// prevent cheating with skip client money check
if (!player->HasEnoughMoney(m->COD))
{
@@ -710,7 +728,7 @@ void WorldSession::HandleMailCreateTextItem(WorldPacket& recvData)
Player* player = _player;
Mail* m = player->GetMail(mailId);
- if (!m || (m->body.empty() && !m->mailTemplateId) || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL))
+ if (!m || (m->body.empty() && !m->mailTemplateId) || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL) || (m->checked & MAIL_CHECK_MASK_COPIED))
{
player->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_INTERNAL_ERROR);
return;
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index 4fd1d516d31..b6c508e9e4c 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -186,11 +186,6 @@ void WorldSession::HandleWhoOpcode(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_WHO Message");
- time_t now = time(NULL);
- if (now - timeLastWhoCommand < 5)
- return;
- else timeLastWhoCommand = now;
-
uint32 matchcount = 0;
uint32 level_min, level_max, racemask, classmask, zones_count, str_count;
@@ -260,7 +255,8 @@ void WorldSession::HandleWhoOpcode(WorldPacket& recvData)
data << uint32(matchcount); // placeholder, count of players matching criteria
data << uint32(displaycount); // placeholder, count of players displayed
- TRINITY_READ_GUARD(HashMapHolder<Player>::LockType, *HashMapHolder<Player>::GetLock());
+ boost::shared_lock<boost::shared_mutex> lock(*HashMapHolder<Player>::GetLock());
+
HashMapHolder<Player>::MapType const& m = sObjectAccessor->GetPlayers();
for (HashMapHolder<Player>::MapType::const_iterator itr = m.begin(); itr != m.end(); ++itr)
{
@@ -505,10 +501,9 @@ void WorldSession::HandleZoneUpdateOpcode(WorldPacket& recvData)
TC_LOG_DEBUG("network", "WORLD: Recvd ZONE_UPDATE: %u", newZone);
- // use server size data
- uint32 newzone, newarea;
- GetPlayer()->GetZoneAndAreaId(newzone, newarea);
- GetPlayer()->UpdateZone(newzone, newarea);
+ // use server side data, but only after update the player position. See Player::UpdatePosition().
+ GetPlayer()->SetNeedsZoneUpdate(true);
+
//GetPlayer()->SendInitWorldStates(true, newZone);
}
@@ -793,10 +788,10 @@ void WorldSession::HandleResurrectResponseOpcode(WorldPacket& recvData)
return;
}
- if (!GetPlayer()->isRessurectRequestedBy(guid))
+ if (!GetPlayer()->isResurrectRequestedBy(guid))
return;
- GetPlayer()->ResurectUsingRequestData();
+ GetPlayer()->ResurrectUsingRequestData();
}
void WorldSession::SendAreaTriggerMessage(const char* Text, ...)
@@ -882,9 +877,9 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recvData)
float dz = player->GetPositionZ() - atEntry->z;
float dx = rotPlayerX - atEntry->x;
float dy = rotPlayerY - atEntry->y;
- if ((fabs(dx) > atEntry->box_x / 2 + delta) ||
- (fabs(dy) > atEntry->box_y / 2 + delta) ||
- (fabs(dz) > atEntry->box_z / 2 + delta))
+ if ((std::fabs(dx) > atEntry->box_x / 2 + delta) ||
+ (std::fabs(dy) > atEntry->box_y / 2 + delta) ||
+ (std::fabs(dz) > atEntry->box_z / 2 + delta))
{
TC_LOG_DEBUG("network", "HandleAreaTriggerOpcode: Player '%s' (GUID: %u) too far (1/2 box X: %f 1/2 box Y: %f 1/2 box Z: %f rotatedPlayerX: %f rotatedPlayerY: %f dZ:%f), ignore Area Trigger ID: %u",
player->GetName().c_str(), player->GetGUIDLow(), atEntry->box_x/2, atEntry->box_y/2, atEntry->box_z/2, rotPlayerX, rotPlayerY, dz, triggerId);
@@ -1184,6 +1179,12 @@ void WorldSession::HandleInspectOpcode(WorldPacket& recvData)
return;
}
+ if (!GetPlayer()->IsWithinDistInMap(player, INSPECT_DISTANCE, false))
+ return;
+
+ if (GetPlayer()->IsValidAttackTarget(player))
+ return;
+
uint32 talent_points = 0x47;
uint32 guid_size = player->GetPackGUID().wpos();
WorldPacket data(SMSG_INSPECT_TALENT, guid_size+4+talent_points);
@@ -1215,6 +1216,12 @@ void WorldSession::HandleInspectHonorStatsOpcode(WorldPacket& recvData)
return;
}
+ if (!GetPlayer()->IsWithinDistInMap(player, INSPECT_DISTANCE, false))
+ return;
+
+ if (GetPlayer()->IsValidAttackTarget(player))
+ return;
+
WorldPacket data(MSG_INSPECT_HONOR_STATS, 8+1+4*4);
data << uint64(player->GetGUID());
data << uint8(player->GetHonorPoints());
@@ -1641,6 +1648,12 @@ void WorldSession::HandleQueryInspectAchievements(WorldPacket& recvData)
if (!player)
return;
+ if (!GetPlayer()->IsWithinDistInMap(player, INSPECT_DISTANCE, false))
+ return;
+
+ if (GetPlayer()->IsValidAttackTarget(player))
+ return;
+
player->SendRespondInspectAchievements(_player);
}
diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp
index 0c2eae849b8..64d0ae36e7a 100644
--- a/src/server/game/Handlers/MovementHandler.cpp
+++ b/src/server/game/Handlers/MovementHandler.cpp
@@ -30,6 +30,7 @@
#include "WaypointMovementGenerator.h"
#include "InstanceSaveMgr.h"
#include "ObjectMgr.h"
+#include "Vehicle.h"
#define MOVEMENT_PACKET_TIME_DELAY 0
@@ -284,7 +285,7 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData)
}
/* handle special cases */
- if (movementInfo.flags & MOVEMENTFLAG_ONTRANSPORT)
+ if (movementInfo.HasMovementFlag(MOVEMENTFLAG_ONTRANSPORT))
{
// transports size limited
// (also received at zeppelin leave by some reason with t_* as absolute in continent coordinates, can be safely skipped)
@@ -307,27 +308,15 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData)
if (!plrMover->GetTransport())
{
if (Transport* transport = plrMover->GetMap()->GetTransport(movementInfo.transport.guid))
- {
- plrMover->m_transport = transport;
transport->AddPassenger(plrMover);
- }
}
else if (plrMover->GetTransport()->GetGUID() != movementInfo.transport.guid)
{
- bool foundNewTransport = false;
- plrMover->m_transport->RemovePassenger(plrMover);
+ plrMover->GetTransport()->RemovePassenger(plrMover);
if (Transport* transport = plrMover->GetMap()->GetTransport(movementInfo.transport.guid))
- {
- foundNewTransport = true;
- plrMover->m_transport = transport;
transport->AddPassenger(plrMover);
- }
-
- if (!foundNewTransport)
- {
- plrMover->m_transport = NULL;
+ else
movementInfo.transport.Reset();
- }
}
}
@@ -335,13 +324,12 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData)
{
GameObject* go = mover->GetMap()->GetGameObject(movementInfo.transport.guid);
if (!go || go->GetGoType() != GAMEOBJECT_TYPE_TRANSPORT)
- movementInfo.flags &= ~MOVEMENTFLAG_ONTRANSPORT;
+ movementInfo.RemoveMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
}
}
else if (plrMover && plrMover->GetTransport()) // if we were on a transport, leave
{
- plrMover->m_transport->RemovePassenger(plrMover);
- plrMover->m_transport = NULL;
+ plrMover->GetTransport()->RemovePassenger(plrMover);
movementInfo.transport.Reset();
}
@@ -370,10 +358,20 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData)
mover->m_movementInfo = movementInfo;
- // this is almost never true (not sure why it is sometimes, but it is), normally use mover->IsVehicle()
- if (mover->GetVehicle())
+ // Some vehicles allow the passenger to turn by himself
+ if (Vehicle* vehicle = mover->GetVehicle())
{
- mover->SetOrientation(movementInfo.pos.GetOrientation());
+ if (VehicleSeatEntry const* seat = vehicle->GetSeatForPassenger(mover))
+ {
+ if (seat->m_flags & VEHICLE_SEAT_FLAG_ALLOW_TURNING)
+ {
+ if (movementInfo.pos.GetOrientation() != mover->GetOrientation())
+ {
+ mover->SetOrientation(movementInfo.pos.GetOrientation());
+ mover->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TURNING);
+ }
+ }
+ }
return;
}
@@ -469,7 +467,7 @@ void WorldSession::HandleForceSpeedChangeAck(WorldPacket &recvData)
return;
}
- if (!_player->GetTransport() && fabs(_player->GetSpeed(move_type) - newspeed) > 0.01f)
+ if (!_player->GetTransport() && std::fabs(_player->GetSpeed(move_type) - newspeed) > 0.01f)
{
if (_player->GetSpeed(move_type) > newspeed) // must be greater - just correct
{
@@ -496,7 +494,7 @@ void WorldSession::HandleSetActiveMoverOpcode(WorldPacket &recvData)
if (GetPlayer()->IsInWorld())
{
if (_player->m_mover->GetGUID() != guid)
- TC_LOG_ERROR("network", "HandleSetActiveMoverOpcode: incorrect mover guid: mover is " UI64FMTD " (%s - Entry: %u) and should be " UI64FMTD, guid, GetLogNameForGuid(guid), GUID_ENPART(guid), _player->m_mover->GetGUID());
+ TC_LOG_DEBUG("network", "HandleSetActiveMoverOpcode: incorrect mover guid: mover is " UI64FMTD " (%s - Entry: %u) and should be " UI64FMTD, guid, GetLogNameForGuid(guid), GUID_ENPART(guid), _player->m_mover->GetGUID());
}
}
diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp
index fc14797ea94..1311cda1ef9 100644
--- a/src/server/game/Handlers/NPCHandler.cpp
+++ b/src/server/game/Handlers/NPCHandler.cpp
@@ -100,6 +100,7 @@ void WorldSession::SendShowBank(uint64 guid)
{
WorldPacket data(SMSG_SHOW_BANK, 8);
data << guid;
+ m_currentBankerGUID = guid;
SendPacket(&data);
}
@@ -287,7 +288,7 @@ void WorldSession::HandleTrainerBuySpellOpcode(WorldPacket& recvData)
if (trainer_spell->IsCastable())
_player->CastSpell(_player, trainer_spell->spell, true);
else
- _player->learnSpell(spellId, false);
+ _player->LearnSpell(spellId, false);
WorldPacket data(SMSG_TRAINER_BUY_SUCCEEDED, 12);
data << uint64(guid);
@@ -887,12 +888,12 @@ void WorldSession::HandleRepairItemOpcode(WorldPacket& recvData)
Item* item = _player->GetItemByGuid(itemGUID);
if (item)
- _player->DurabilityRepair(item->GetPos(), true, discountMod, guildBank);
+ _player->DurabilityRepair(item->GetPos(), true, discountMod, guildBank != 0);
}
else
{
TC_LOG_DEBUG("network", "ITEM: Repair all items, npcGUID = %u", GUID_LOPART(npcGUID));
- _player->DurabilityRepairAll(true, discountMod, guildBank);
+ _player->DurabilityRepairAll(true, discountMod, guildBank != 0);
}
}
diff --git a/src/server/game/Handlers/NPCHandler.h b/src/server/game/Handlers/NPCHandler.h
index 7210d9a53b5..855536c7d9e 100644
--- a/src/server/game/Handlers/NPCHandler.h
+++ b/src/server/game/Handlers/NPCHandler.h
@@ -51,10 +51,10 @@ struct PageTextLocale
struct NpcTextLocale
{
- NpcTextLocale() { Text_0.resize(8); Text_1.resize(8); }
+ NpcTextLocale() { }
- std::vector<StringVector> Text_0;
- std::vector<StringVector> Text_1;
+ StringVector Text_0[MAX_GOSSIP_TEXT_OPTIONS];
+ StringVector Text_1[MAX_GOSSIP_TEXT_OPTIONS];
};
#endif
diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp
index 5258c890ac6..9346e982bd2 100644
--- a/src/server/game/Handlers/PetHandler.cpp
+++ b/src/server/game/Handlers/PetHandler.cpp
@@ -74,13 +74,13 @@ void WorldSession::HandlePetAction(WorldPacket& recvData)
if (!pet)
{
- TC_LOG_ERROR("network", "HandlePetAction: Pet (GUID: %u) doesn't exist for player %s (GUID: %u)", uint32(GUID_LOPART(guid1)), GetPlayer()->GetName().c_str(), GUID_LOPART(GetPlayer()->GetGUID()));
+ TC_LOG_DEBUG("network", "HandlePetAction: Pet (GUID: %u) doesn't exist for player %s (GUID: %u)", uint32(GUID_LOPART(guid1)), GetPlayer()->GetName().c_str(), GUID_LOPART(GetPlayer()->GetGUID()));
return;
}
if (pet != GetPlayer()->GetFirstControlled())
{
- TC_LOG_ERROR("network", "HandlePetAction: Pet (GUID: %u) does not belong to player %s (GUID: %u)", uint32(GUID_LOPART(guid1)), GetPlayer()->GetName().c_str(), GUID_LOPART(GetPlayer()->GetGUID()));
+ TC_LOG_DEBUG("network", "HandlePetAction: Pet (GUID: %u) does not belong to player %s (GUID: %u)", uint32(GUID_LOPART(guid1)), GetPlayer()->GetName().c_str(), GUID_LOPART(GetPlayer()->GetGUID()));
return;
}
@@ -144,7 +144,7 @@ void WorldSession::HandlePetActionHelper(Unit* pet, uint64 guid1, uint32 spellid
CharmInfo* charmInfo = pet->GetCharmInfo();
if (!charmInfo)
{
- TC_LOG_ERROR("network", "WorldSession::HandlePetAction(petGuid: " UI64FMTD ", tagGuid: " UI64FMTD ", spellId: %u, flag: %u): object (GUID: %u Entry: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!",
+ TC_LOG_DEBUG("network", "WorldSession::HandlePetAction(petGuid: " UI64FMTD ", tagGuid: " UI64FMTD ", spellId: %u, flag: %u): object (GUID: %u Entry: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!",
guid1, guid2, spellid, flag, pet->GetGUIDLow(), pet->GetEntry(), pet->GetTypeId());
return;
}
@@ -616,9 +616,8 @@ void WorldSession::HandlePetRename(WorldPacket& recvData)
pet->SetName(name);
- Player* owner = pet->GetOwner();
- if (owner && owner->GetGroup())
- owner->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_NAME);
+ if (pet->GetOwner()->GetGroup())
+ pet->GetOwner()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_NAME);
pet->RemoveByteFlag(UNIT_FIELD_BYTES_2, 2, UNIT_CAN_BE_RENAMED);
@@ -736,11 +735,11 @@ void WorldSession::HandlePetSpellAutocastOpcode(WorldPacket& recvPacket)
}
if (pet->IsPet())
- ((Pet*)pet)->ToggleAutocast(spellInfo, state);
+ ((Pet*)pet)->ToggleAutocast(spellInfo, state != 0);
else
- pet->GetCharmInfo()->ToggleCreatureAutocast(spellInfo, state);
+ pet->GetCharmInfo()->ToggleCreatureAutocast(spellInfo, state != 0);
- charmInfo->SetSpellAutocast(spellInfo, state);
+ charmInfo->SetSpellAutocast(spellInfo, state != 0);
}
void WorldSession::HandlePetCastSpellOpcode(WorldPacket& recvPacket)
@@ -869,7 +868,10 @@ void WorldSession::HandleLearnPreviewTalentsPet(WorldPacket& recvData)
uint32 talentId, talentRank;
- for (uint32 i = 0; i < talentsCount; ++i)
+ // Client has max 24 talents, rounded up : 30
+ uint32 const MaxTalentsCount = 30;
+
+ for (uint32 i = 0; i < talentsCount && i < MaxTalentsCount; ++i)
{
recvData >> talentId >> talentRank;
@@ -877,4 +879,6 @@ void WorldSession::HandleLearnPreviewTalentsPet(WorldPacket& recvData)
}
_player->SendTalentsInfoData(true);
+
+ recvData.rfinish();
}
diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp
index e30260d34e2..dbcfb1c4970 100644
--- a/src/server/game/Handlers/QueryHandler.cpp
+++ b/src/server/game/Handlers/QueryHandler.cpp
@@ -264,18 +264,18 @@ void WorldSession::HandleNpcTextQueryOpcode(WorldPacket& recvData)
uint64 guid;
recvData >> textID;
- TC_LOG_DEBUG("network", "WORLD: CMSG_NPC_TEXT_QUERY ID '%u'", textID);
+ TC_LOG_DEBUG("network", "WORLD: CMSG_NPC_TEXT_QUERY TextId: %u", textID);
recvData >> guid;
- GossipText const* pGossip = sObjectMgr->GetGossipText(textID);
+ GossipText const* gossip = sObjectMgr->GetGossipText(textID);
WorldPacket data(SMSG_NPC_TEXT_UPDATE, 100); // guess size
data << textID;
- if (!pGossip)
+ if (!gossip)
{
- for (uint32 i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i)
+ for (uint8 i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i)
{
data << float(0);
data << "Greetings $N";
@@ -291,46 +291,50 @@ void WorldSession::HandleNpcTextQueryOpcode(WorldPacket& recvData)
}
else
{
- std::string Text_0[MAX_LOCALES], Text_1[MAX_LOCALES];
- for (int i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i)
- {
- Text_0[i]=pGossip->Options[i].Text_0;
- Text_1[i]=pGossip->Options[i].Text_1;
- }
+ std::string text0[MAX_GOSSIP_TEXT_OPTIONS], text1[MAX_GOSSIP_TEXT_OPTIONS];
+ LocaleConstant locale = GetSessionDbLocaleIndex();
- int loc_idx = GetSessionDbLocaleIndex();
- if (loc_idx >= 0)
+ for (uint8 i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i)
{
- if (NpcTextLocale const* nl = sObjectMgr->GetNpcTextLocale(textID))
+ BroadcastText const* bct = sObjectMgr->GetBroadcastText(gossip->Options[i].BroadcastTextID);
+ if (bct)
{
- for (int i = 0; i < MAX_LOCALES; ++i)
+ text0[i] = bct->GetText(locale, GENDER_MALE, true);
+ text1[i] = bct->GetText(locale, GENDER_FEMALE, true);
+ }
+ else
+ {
+ text0[i] = gossip->Options[i].Text_0;
+ text1[i] = gossip->Options[i].Text_1;
+ }
+
+ if (locale != DEFAULT_LOCALE && !bct)
+ {
+ if (NpcTextLocale const* npcTextLocale = sObjectMgr->GetNpcTextLocale(textID))
{
- ObjectMgr::GetLocaleString(nl->Text_0[i], loc_idx, Text_0[i]);
- ObjectMgr::GetLocaleString(nl->Text_1[i], loc_idx, Text_1[i]);
+ ObjectMgr::GetLocaleString(npcTextLocale->Text_0[i], locale, text0[i]);
+ ObjectMgr::GetLocaleString(npcTextLocale->Text_1[i], locale, text1[i]);
}
}
- }
- for (int i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i)
- {
- data << pGossip->Options[i].Probability;
+ data << gossip->Options[i].Probability;
- if (Text_0[i].empty())
- data << Text_1[i];
+ if (text0[i].empty())
+ data << text1[i];
else
- data << Text_0[i];
+ data << text0[i];
- if (Text_1[i].empty())
- data << Text_0[i];
+ if (text1[i].empty())
+ data << text0[i];
else
- data << Text_1[i];
+ data << text1[i];
- data << pGossip->Options[i].Language;
+ data << gossip->Options[i].Language;
- for (int j = 0; j < MAX_GOSSIP_TEXT_EMOTES; ++j)
+ for (uint8 j = 0; j < MAX_GOSSIP_TEXT_EMOTES; ++j)
{
- data << pGossip->Options[i].Emotes[j]._Delay;
- data << pGossip->Options[i].Emotes[j]._Emote;
+ data << gossip->Options[i].Emotes[j]._Delay;
+ data << gossip->Options[i].Emotes[j]._Emote;
}
}
}
@@ -401,19 +405,23 @@ void WorldSession::HandleQuestPOIQuery(WorldPacket& recvData)
uint32 count;
recvData >> count; // quest count, max=25
- if (count >= MAX_QUEST_LOG_SIZE)
+ if (count > MAX_QUEST_LOG_SIZE)
{
recvData.rfinish();
return;
}
- WorldPacket data(SMSG_QUEST_POI_QUERY_RESPONSE, 4+(4+4)*count);
- data << uint32(count); // count
-
+ // Read quest ids and add the in a unordered_set so we don't send POIs for the same quest multiple times
+ std::unordered_set<uint32> questIds;
for (uint32 i = 0; i < count; ++i)
+ questIds.insert(recvData.read<uint32>()); // quest id
+
+ WorldPacket data(SMSG_QUEST_POI_QUERY_RESPONSE, 4 + (4 + 4)*questIds.size());
+ data << uint32(questIds.size()); // count
+
+ for (auto itr = questIds.begin(); itr != questIds.end(); ++itr)
{
- uint32 questId;
- recvData >> questId; // quest id
+ uint32 questId = *itr;
bool questOk = false;
diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp
index d4dc7a9ab0d..f7c3c8a2be6 100644
--- a/src/server/game/Handlers/QuestHandler.cpp
+++ b/src/server/game/Handlers/QuestHandler.cpp
@@ -491,9 +491,6 @@ void WorldSession::HandleQuestgiverCompleteQuest(WorldPacket& recvData)
else // no items required
_player->PlayerTalkClass->SendQuestGiverOfferReward(quest, guid, true);
}
-
- if (Creature* creature = object->ToCreature())
- sScriptMgr->OnQuestComplete(_player, creature, quest);
}
void WorldSession::HandleQuestgiverQuestAutoLaunch(WorldPacket& /*recvPacket*/)
diff --git a/src/server/game/Handlers/SkillHandler.cpp b/src/server/game/Handlers/SkillHandler.cpp
index fe893314b87..92c7c60bca0 100644
--- a/src/server/game/Handlers/SkillHandler.cpp
+++ b/src/server/game/Handlers/SkillHandler.cpp
@@ -45,7 +45,10 @@ void WorldSession::HandleLearnPreviewTalents(WorldPacket& recvPacket)
uint32 talentId, talentRank;
- for (uint32 i = 0; i < talentsCount; ++i)
+ // Client has max 44 talents for tree for 3 trees, rounded up : 150
+ uint32 const MaxTalentsCount = 150;
+
+ for (uint32 i = 0; i < talentsCount && i < MaxTalentsCount; ++i)
{
recvPacket >> talentId >> talentRank;
@@ -53,6 +56,8 @@ void WorldSession::HandleLearnPreviewTalents(WorldPacket& recvPacket)
}
_player->SendTalentsInfoData(false);
+
+ recvPacket.rfinish();
}
void WorldSession::HandleTalentWipeConfirmOpcode(WorldPacket& recvData)
@@ -75,7 +80,7 @@ void WorldSession::HandleTalentWipeConfirmOpcode(WorldPacket& recvData)
if (GetPlayer()->HasUnitState(UNIT_STATE_DIED))
GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
- if (!(_player->resetTalents()))
+ if (!(_player->ResetTalents()))
{
WorldPacket data(MSG_TALENT_WIPE_CONFIRM, 8+4); //you have not any talent
data << uint64(0);
@@ -93,7 +98,8 @@ void WorldSession::HandleUnlearnSkillOpcode(WorldPacket& recvData)
uint32 skillId;
recvData >> skillId;
- if (!IsPrimaryProfessionSkill(skillId))
+ SkillRaceClassInfoEntry const* rcEntry = GetSkillRaceClassInfo(skillId, GetPlayer()->getRace(), GetPlayer()->getClass());
+ if (!rcEntry || !(rcEntry->Flags & SKILL_FLAG_UNLEARNABLE))
return;
GetPlayer()->SetSkill(skillId, 0, 0, 0);
diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp
index ba30803e8c2..13f79fb88c5 100644
--- a/src/server/game/Handlers/SpellHandler.cpp
+++ b/src/server/game/Handlers/SpellHandler.cpp
@@ -533,7 +533,7 @@ void WorldSession::HandleSelfResOpcode(WorldPacket & /*recvData*/)
{
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(_player->GetUInt32Value(PLAYER_SELF_RES_SPELL));
if (spellInfo)
- _player->CastSpell(_player, spellInfo, false, 0);
+ _player->CastSpell(_player, spellInfo, false, nullptr);
_player->SetUInt32Value(PLAYER_SELF_RES_SPELL, 0);
}
diff --git a/src/server/game/Handlers/TicketHandler.cpp b/src/server/game/Handlers/TicketHandler.cpp
index 688d7e58b6c..a2aa426c096 100644
--- a/src/server/game/Handlers/TicketHandler.cpp
+++ b/src/server/game/Handlers/TicketHandler.cpp
@@ -187,6 +187,8 @@ void WorldSession::HandleGMSurveySubmit(WorldPacket& recvData)
uint32 mainSurvey; // GMSurveyCurrentSurvey.dbc, column 1 (all 9) ref to GMSurveySurveys.dbc
recvData >> mainSurvey;
+ std::unordered_set<uint32> surveyIds;
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
// sub_survey1, r1, comment1, sub_survey2, r2, comment2, sub_survey3, r3, comment3, sub_survey4, r4, comment4, sub_survey5, r5, comment5, sub_survey6, r6, comment6, sub_survey7, r7, comment7, sub_survey8, r8, comment8, sub_survey9, r9, comment9, sub_survey10, r10, comment10,
for (uint8 i = 0; i < 10; i++)
{
@@ -200,12 +202,16 @@ void WorldSession::HandleGMSurveySubmit(WorldPacket& recvData)
std::string comment; // comment ("Usage: GMSurveyAnswerSubmit(question, rank, comment)")
recvData >> comment;
+ // make sure the same sub survey is not added to DB twice
+ if (!surveyIds.insert(subSurveyId).second)
+ continue;
+
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GM_SUBSURVEY);
stmt->setUInt32(0, nextSurveyID);
stmt->setUInt32(1, subSurveyId);
stmt->setUInt32(2, rank);
stmt->setString(3, comment);
- CharacterDatabase.Execute(stmt);
+ trans->Append(stmt);
}
std::string comment; // just a guess
@@ -217,7 +223,9 @@ void WorldSession::HandleGMSurveySubmit(WorldPacket& recvData)
stmt->setUInt32(2, mainSurvey);
stmt->setString(3, comment);
- CharacterDatabase.Execute(stmt);
+ trans->Append(stmt);
+
+ CharacterDatabase.CommitTransaction(trans);
}
void WorldSession::HandleReportLag(WorldPacket& recvData)
diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp
index 28a511ad9d3..b4932496077 100644
--- a/src/server/game/Handlers/TradeHandler.cpp
+++ b/src/server/game/Handlers/TradeHandler.cpp
@@ -30,38 +30,29 @@
#include "Language.h"
#include "AccountMgr.h"
-void WorldSession::SendTradeStatus(TradeStatus status)
+void WorldSession::SendTradeStatus(TradeStatusInfo const& info)
{
- WorldPacket data;
+ WorldPacket data(SMSG_TRADE_STATUS, 13);
+ data << uint32(info.Status);
- switch (status)
+ switch (info.Status)
{
case TRADE_STATUS_BEGIN_TRADE:
- data.Initialize(SMSG_TRADE_STATUS, 4+8);
- data << uint32(status);
- data << uint64(0);
+ data << uint64(info.TraderGuid); // CGTradeInfo::m_tradingPlayer
break;
case TRADE_STATUS_OPEN_WINDOW:
- data.Initialize(SMSG_TRADE_STATUS, 4+4);
- data << uint32(status);
- data << uint32(0); // added in 2.4.0
+ data << uint32(0); // CGTradeInfo::m_tradeID
break;
case TRADE_STATUS_CLOSE_WINDOW:
- data.Initialize(SMSG_TRADE_STATUS, 4+4+1+4);
- data << uint32(status);
- data << uint32(0);
- data << uint8(0);
- data << uint32(0);
+ data << uint32(info.Result); // InventoryResult
+ data << uint8(info.IsTargetResult); // bool isTargetError; used for: EQUIP_ERR_BAG_FULL, EQUIP_ERR_CANT_CARRY_MORE_OF_THIS, EQUIP_ERR_MISSING_REAGENT, EQUIP_ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED
+ data << uint32(info.ItemLimitCategoryId); // ItemLimitCategory.dbc entry
break;
- case TRADE_STATUS_ONLY_CONJURED:
- case TRADE_STATUS_NOT_ELIGIBLE:
- data.Initialize(SMSG_TRADE_STATUS, 4+1);
- data << uint32(status);
- data << uint8(0);
+ case TRADE_STATUS_WRONG_REALM:
+ case TRADE_STATUS_NOT_ON_TAPLIST:
+ data << uint8(info.Slot); // Trade slot; -1 here clears CGTradeInfo::m_tradeMoney
break;
default:
- data.Initialize(SMSG_TRADE_STATUS, 4);
- data << uint32(status);
break;
}
@@ -86,7 +77,7 @@ void WorldSession::SendUpdateTrade(bool trader_data /*= true*/)
WorldPacket data(SMSG_TRADE_STATUS_EXTENDED, 1+4+4+4+4+4+7*(1+4+4+4+4+8+4+4+4+4+8+4+4+4+4+4+4));
data << uint8(trader_data); // 1 means traders data, 0 means own
- data << uint32(0); // added in 2.4.0, this value must be equal to value from TRADE_STATUS_OPEN_WINDOW status packet (different value for different players to block multiple trades?)
+ data << uint32(0); // CGTradeInfo::m_tradeID
data << uint32(TRADE_SLOT_COUNT); // trade slots count/number?, = next field in most cases
data << uint32(TRADE_SLOT_COUNT); // trade slots count/number?, = prev field in most cases
data << uint32(view_trade->GetMoney()); // trader gold
@@ -271,15 +262,25 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPacket& /*recvPacket*/)
Item* myItems[TRADE_SLOT_TRADED_COUNT] = { NULL, NULL, NULL, NULL, NULL, NULL };
Item* hisItems[TRADE_SLOT_TRADED_COUNT] = { NULL, NULL, NULL, NULL, NULL, NULL };
- bool myCanCompleteTrade = true, hisCanCompleteTrade = true;
// set before checks for propertly undo at problems (it already set in to client)
my_trade->SetAccepted(true);
+ TradeStatusInfo info;
+ if (!_player->IsWithinDistInMap(trader, TRADE_DISTANCE, false))
+ {
+ info.Status = TRADE_STATUS_TARGET_TO_FAR;
+ SendTradeStatus(info);
+ my_trade->SetAccepted(false);
+ return;
+ }
+
// not accept case incorrect money amount
if (!_player->HasEnoughMoney(my_trade->GetMoney()))
{
- SendNotification(LANG_NOT_ENOUGH_GOLD);
+ info.Status = TRADE_STATUS_CLOSE_WINDOW;
+ info.Result = EQUIP_ERR_NOT_ENOUGH_MONEY;
+ SendTradeStatus(info);
my_trade->SetAccepted(false, true);
return;
}
@@ -287,21 +288,27 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPacket& /*recvPacket*/)
// not accept case incorrect money amount
if (!trader->HasEnoughMoney(his_trade->GetMoney()))
{
- trader->GetSession()->SendNotification(LANG_NOT_ENOUGH_GOLD);
+ info.Status = TRADE_STATUS_CLOSE_WINDOW;
+ info.Result = EQUIP_ERR_NOT_ENOUGH_MONEY;
+ trader->GetSession()->SendTradeStatus(info);
his_trade->SetAccepted(false, true);
return;
}
- if (_player->GetMoney() >= uint32(MAX_MONEY_AMOUNT) - his_trade->GetMoney())
+ if (_player->GetMoney() >= MAX_MONEY_AMOUNT - his_trade->GetMoney())
{
- _player->SendEquipError(EQUIP_ERR_TOO_MUCH_GOLD, NULL, NULL);
+ info.Status = TRADE_STATUS_CLOSE_WINDOW;
+ info.Result = EQUIP_ERR_TOO_MUCH_GOLD;
+ SendTradeStatus(info);
my_trade->SetAccepted(false, true);
return;
}
- if (trader->GetMoney() >= uint32(MAX_MONEY_AMOUNT) - my_trade->GetMoney())
+ if (trader->GetMoney() >= MAX_MONEY_AMOUNT - my_trade->GetMoney())
{
- trader->SendEquipError(EQUIP_ERR_TOO_MUCH_GOLD, NULL, NULL);
+ info.Status = TRADE_STATUS_CLOSE_WINDOW;
+ info.Result = EQUIP_ERR_TOO_MUCH_GOLD;
+ trader->GetSession()->SendTradeStatus(info);
his_trade->SetAccepted(false, true);
return;
}
@@ -313,14 +320,16 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPacket& /*recvPacket*/)
{
if (!item->CanBeTraded(false, true))
{
- SendTradeStatus(TRADE_STATUS_TRADE_CANCELED);
+ info.Status = TRADE_STATUS_TRADE_CANCELED;
+ SendTradeStatus(info);
return;
}
if (item->IsBindedNotWith(trader))
{
- SendTradeStatus(TRADE_STATUS_NOT_ELIGIBLE);
- SendTradeStatus(TRADE_STATUS_CLOSE_WINDOW/*TRADE_STATUS_TRADE_CANCELED*/);
+ info.Status = TRADE_STATUS_CLOSE_WINDOW;
+ info.Result = EQUIP_ERR_CANNOT_TRADE_THAT;
+ SendTradeStatus(info);
return;
}
}
@@ -329,7 +338,8 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPacket& /*recvPacket*/)
{
if (!item->CanBeTraded(false, true))
{
- SendTradeStatus(TRADE_STATUS_TRADE_CANCELED);
+ info.Status = TRADE_STATUS_TRADE_CANCELED;
+ SendTradeStatus(info);
return;
}
//if (item->IsBindedNotWith(_player)) // dont mark as invalid when his item isnt good (not exploitable because if item is invalid trade will fail anyway later on the same check)
@@ -424,31 +434,37 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPacket& /*recvPacket*/)
}
// inform partner client
- trader->GetSession()->SendTradeStatus(TRADE_STATUS_TRADE_ACCEPT);
+ info.Status = TRADE_STATUS_TRADE_ACCEPT;
+ trader->GetSession()->SendTradeStatus(info);
// test if item will fit in each inventory
- hisCanCompleteTrade = (trader->CanStoreItems(myItems, TRADE_SLOT_TRADED_COUNT) == EQUIP_ERR_OK);
- myCanCompleteTrade = (_player->CanStoreItems(hisItems, TRADE_SLOT_TRADED_COUNT) == EQUIP_ERR_OK);
+ TradeStatusInfo myCanCompleteInfo, hisCanCompleteInfo;
+ hisCanCompleteInfo.Result = trader->CanStoreItems(myItems, TRADE_SLOT_TRADED_COUNT, &hisCanCompleteInfo.ItemLimitCategoryId);
+ myCanCompleteInfo.Result = _player->CanStoreItems(hisItems, TRADE_SLOT_TRADED_COUNT, &myCanCompleteInfo.ItemLimitCategoryId);
clearAcceptTradeMode(myItems, hisItems);
// in case of missing space report error
- if (!myCanCompleteTrade)
+ if (myCanCompleteInfo.Result != EQUIP_ERR_OK)
{
clearAcceptTradeMode(my_trade, his_trade);
- SendNotification(LANG_NOT_FREE_TRADE_SLOTS);
- trader->GetSession()->SendNotification(LANG_NOT_PARTNER_FREE_TRADE_SLOTS);
+ myCanCompleteInfo.Status = TRADE_STATUS_CLOSE_WINDOW;
+ trader->GetSession()->SendTradeStatus(myCanCompleteInfo);
+ myCanCompleteInfo.IsTargetResult = true;
+ SendTradeStatus(myCanCompleteInfo);
my_trade->SetAccepted(false);
his_trade->SetAccepted(false);
return;
}
- else if (!hisCanCompleteTrade)
+ else if (hisCanCompleteInfo.Result != EQUIP_ERR_OK)
{
clearAcceptTradeMode(my_trade, his_trade);
- SendNotification(LANG_NOT_PARTNER_FREE_TRADE_SLOTS);
- trader->GetSession()->SendNotification(LANG_NOT_FREE_TRADE_SLOTS);
+ hisCanCompleteInfo.Status = TRADE_STATUS_CLOSE_WINDOW;
+ SendTradeStatus(hisCanCompleteInfo);
+ hisCanCompleteInfo.IsTargetResult = true;
+ trader->GetSession()->SendTradeStatus(hisCanCompleteInfo);
my_trade->SetAccepted(false);
his_trade->SetAccepted(false);
return;
@@ -517,12 +533,14 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPacket& /*recvPacket*/)
trader->SaveInventoryAndGoldToDB(trans);
CharacterDatabase.CommitTransaction(trans);
- trader->GetSession()->SendTradeStatus(TRADE_STATUS_TRADE_COMPLETE);
- SendTradeStatus(TRADE_STATUS_TRADE_COMPLETE);
+ info.Status = TRADE_STATUS_TRADE_COMPLETE;
+ trader->GetSession()->SendTradeStatus(info);
+ SendTradeStatus(info);
}
else
{
- trader->GetSession()->SendTradeStatus(TRADE_STATUS_TRADE_ACCEPT);
+ info.Status = TRADE_STATUS_TRADE_ACCEPT;
+ trader->GetSession()->SendTradeStatus(info);
}
}
@@ -541,8 +559,10 @@ void WorldSession::HandleBeginTradeOpcode(WorldPacket& /*recvPacket*/)
if (!my_trade)
return;
- my_trade->GetTrader()->GetSession()->SendTradeStatus(TRADE_STATUS_OPEN_WINDOW);
- SendTradeStatus(TRADE_STATUS_OPEN_WINDOW);
+ TradeStatusInfo info;
+ info.Status = TRADE_STATUS_OPEN_WINDOW;
+ my_trade->GetTrader()->GetSession()->SendTradeStatus(info);
+ SendTradeStatus(info);
}
void WorldSession::SendCancelTrade()
@@ -550,7 +570,9 @@ void WorldSession::SendCancelTrade()
if (PlayerRecentlyLoggedOut() || PlayerLogout())
return;
- SendTradeStatus(TRADE_STATUS_TRADE_CANCELED);
+ TradeStatusInfo info;
+ info.Status = TRADE_STATUS_TRADE_CANCELED;
+ SendTradeStatus(info);
}
void WorldSession::HandleCancelTradeOpcode(WorldPacket& /*recvPacket*/)
@@ -568,27 +590,32 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket)
if (GetPlayer()->m_trade)
return;
+ TradeStatusInfo info;
if (!GetPlayer()->IsAlive())
{
- SendTradeStatus(TRADE_STATUS_YOU_DEAD);
+ info.Status = TRADE_STATUS_YOU_DEAD;
+ SendTradeStatus(info);
return;
}
if (GetPlayer()->HasUnitState(UNIT_STATE_STUNNED))
{
- SendTradeStatus(TRADE_STATUS_YOU_STUNNED);
+ info.Status = TRADE_STATUS_YOU_STUNNED;
+ SendTradeStatus(info);
return;
}
if (isLogingOut())
{
- SendTradeStatus(TRADE_STATUS_YOU_LOGOUT);
+ info.Status = TRADE_STATUS_YOU_LOGOUT;
+ SendTradeStatus(info);
return;
}
if (GetPlayer()->IsInFlight())
{
- SendTradeStatus(TRADE_STATUS_TARGET_TO_FAR);
+ info.Status = TRADE_STATUS_TARGET_TO_FAR;
+ SendTradeStatus(info);
return;
}
@@ -602,55 +629,64 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket)
if (!pOther)
{
- SendTradeStatus(TRADE_STATUS_NO_TARGET);
+ info.Status = TRADE_STATUS_NO_TARGET;
+ SendTradeStatus(info);
return;
}
if (pOther == GetPlayer() || pOther->m_trade)
{
- SendTradeStatus(TRADE_STATUS_BUSY);
+ info.Status = TRADE_STATUS_BUSY;
+ SendTradeStatus(info);
return;
}
if (!pOther->IsAlive())
{
- SendTradeStatus(TRADE_STATUS_TARGET_DEAD);
+ info.Status = TRADE_STATUS_TARGET_DEAD;
+ SendTradeStatus(info);
return;
}
if (pOther->IsInFlight())
{
- SendTradeStatus(TRADE_STATUS_TARGET_TO_FAR);
+ info.Status = TRADE_STATUS_TARGET_TO_FAR;
+ SendTradeStatus(info);
return;
}
if (pOther->HasUnitState(UNIT_STATE_STUNNED))
{
- SendTradeStatus(TRADE_STATUS_TARGET_STUNNED);
+ info.Status = TRADE_STATUS_TARGET_STUNNED;
+ SendTradeStatus(info);
return;
}
if (pOther->GetSession()->isLogingOut())
{
- SendTradeStatus(TRADE_STATUS_TARGET_LOGOUT);
+ info.Status = TRADE_STATUS_TARGET_LOGOUT;
+ SendTradeStatus(info);
return;
}
if (pOther->GetSocial()->HasIgnore(GetPlayer()->GetGUIDLow()))
{
- SendTradeStatus(TRADE_STATUS_IGNORE_YOU);
+ info.Status = TRADE_STATUS_IGNORE_YOU;
+ SendTradeStatus(info);
return;
}
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_TRADE) && pOther->GetTeam() !=_player->GetTeam())
{
- SendTradeStatus(TRADE_STATUS_WRONG_FACTION);
+ info.Status = TRADE_STATUS_WRONG_FACTION;
+ SendTradeStatus(info);
return;
}
- if (!pOther->IsWithinDistInMap(_player, 10.0f, false))
+ if (!pOther->IsWithinDistInMap(_player, TRADE_DISTANCE, false))
{
- SendTradeStatus(TRADE_STATUS_TARGET_TO_FAR);
+ info.Status = TRADE_STATUS_TARGET_TO_FAR;
+ SendTradeStatus(info);
return;
}
@@ -664,10 +700,9 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket)
_player->m_trade = new TradeData(_player, pOther);
pOther->m_trade = new TradeData(pOther, _player);
- WorldPacket data(SMSG_TRADE_STATUS, 12);
- data << uint32(TRADE_STATUS_BEGIN_TRADE);
- data << uint64(_player->GetGUID());
- pOther->GetSession()->SendPacket(&data);
+ info.Status = TRADE_STATUS_BEGIN_TRADE;
+ info.TraderGuid = _player->GetGUID();
+ pOther->GetSession()->SendTradeStatus(info);
}
void WorldSession::HandleSetTradeGoldOpcode(WorldPacket& recvPacket)
@@ -679,7 +714,6 @@ void WorldSession::HandleSetTradeGoldOpcode(WorldPacket& recvPacket)
if (!my_trade)
return;
- // gold can be incorrect, but this is checked at trade finished.
my_trade->SetMoney(gold);
}
@@ -698,10 +732,12 @@ void WorldSession::HandleSetTradeItemOpcode(WorldPacket& recvPacket)
if (!my_trade)
return;
+ TradeStatusInfo info;
// invalid slot number
if (tradeSlot >= TRADE_SLOT_COUNT)
{
- SendTradeStatus(TRADE_STATUS_TRADE_CANCELED);
+ info.Status = TRADE_STATUS_TRADE_CANCELED;
+ SendTradeStatus(info);
return;
}
@@ -709,7 +745,8 @@ void WorldSession::HandleSetTradeItemOpcode(WorldPacket& recvPacket)
Item* item = _player->GetItemByPos(bag, slot);
if (!item || (tradeSlot != TRADE_SLOT_NONTRADED && !item->CanBeTraded(false, true)))
{
- SendTradeStatus(TRADE_STATUS_TRADE_CANCELED);
+ info.Status = TRADE_STATUS_TRADE_CANCELED;
+ SendTradeStatus(info);
return;
}
@@ -719,7 +756,16 @@ void WorldSession::HandleSetTradeItemOpcode(WorldPacket& recvPacket)
if (my_trade->HasItem(iGUID))
{
// cheating attempt
- SendTradeStatus(TRADE_STATUS_TRADE_CANCELED);
+ info.Status = TRADE_STATUS_TRADE_CANCELED;
+ SendTradeStatus(info);
+ return;
+ }
+
+ if (slot != TRADE_SLOT_NONTRADED && item->IsBindedNotWith(my_trade->GetTrader()))
+ {
+ info.Status = TRADE_STATUS_NOT_ON_TAPLIST;
+ info.Slot = tradeSlot;
+ SendTradeStatus(info);
return;
}
diff --git a/src/server/game/Handlers/VehicleHandler.cpp b/src/server/game/Handlers/VehicleHandler.cpp
index 3973b23eab4..b3fa240e2d2 100644
--- a/src/server/game/Handlers/VehicleHandler.cpp
+++ b/src/server/game/Handlers/VehicleHandler.cpp
@@ -96,7 +96,7 @@ void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket &recvData)
if (!accessory)
GetPlayer()->ChangeSeat(-1, seatId > 0); // prev/next
- else if (Unit* vehUnit = Unit::GetUnit(*GetPlayer(), accessory))
+ else if (Unit* vehUnit = ObjectAccessor::GetUnit(*GetPlayer(), accessory))
{
if (Vehicle* vehicle = vehUnit->GetVehicleKit())
if (vehicle->HasEmptySeat(seatId))
@@ -114,7 +114,7 @@ void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket &recvData)
if (vehicle_base->GetGUID() == guid)
GetPlayer()->ChangeSeat(seatId);
- else if (Unit* vehUnit = Unit::GetUnit(*GetPlayer(), guid))
+ else if (Unit* vehUnit = ObjectAccessor::GetUnit(*GetPlayer(), guid))
if (Vehicle* vehicle = vehUnit->GetVehicleKit())
if (vehicle->HasEmptySeat(seatId))
vehUnit->HandleSpellClick(GetPlayer(), seatId);
diff --git a/src/server/game/Instances/InstanceSaveMgr.cpp b/src/server/game/Instances/InstanceSaveMgr.cpp
index c46d9002604..370d02631ba 100644
--- a/src/server/game/Instances/InstanceSaveMgr.cpp
+++ b/src/server/game/Instances/InstanceSaveMgr.cpp
@@ -39,8 +39,10 @@ uint16 InstanceSaveManager::ResetTimeDelay[] = {3600, 900, 300, 60};
InstanceSaveManager::~InstanceSaveManager()
{
- // it is undefined whether this or objectmgr will be unloaded first
- // so we must be prepared for both cases
+}
+
+void InstanceSaveManager::Unload()
+{
lock_instLists = true;
for (InstanceSaveHashMap::iterator itr = m_instanceSaveById.begin(); itr != m_instanceSaveById.end(); ++itr)
{
diff --git a/src/server/game/Instances/InstanceSaveMgr.h b/src/server/game/Instances/InstanceSaveMgr.h
index 1d753ebaa48..1bab66be1b8 100644
--- a/src/server/game/Instances/InstanceSaveMgr.h
+++ b/src/server/game/Instances/InstanceSaveMgr.h
@@ -19,12 +19,12 @@
#ifndef _INSTANCESAVEMGR_H
#define _INSTANCESAVEMGR_H
-#include "Define.h"
-#include <ace/Singleton.h>
-#include <ace/Thread_Mutex.h>
#include <list>
#include <map>
-#include "UnorderedMap.h"
+#include <mutex>
+#include <unordered_map>
+
+#include "Define.h"
#include "DatabaseEnv.h"
#include "DBCEnums.h"
#include "ObjectDefines.h"
@@ -80,13 +80,18 @@ class InstanceSave
/* online players bound to the instance (perm/solo)
does not include the members of the group unless they have permanent saves */
- void AddPlayer(Player* player) { TRINITY_GUARD(ACE_Thread_Mutex, _lock); m_playerList.push_back(player); }
+ void AddPlayer(Player* player)
+ {
+ std::lock_guard<std::mutex> lock(_playerListLock);
+ m_playerList.push_back(player);
+ }
+
bool RemovePlayer(Player* player)
{
- _lock.acquire();
+ _playerListLock.lock();
m_playerList.remove(player);
bool isStillValid = UnloadIfEmpty();
- _lock.release();
+ _playerListLock.unlock();
//delete here if needed, after releasing the lock
if (m_toDelete)
@@ -137,14 +142,13 @@ class InstanceSave
bool m_canReset;
bool m_toDelete;
- ACE_Thread_Mutex _lock;
+ std::mutex _playerListLock;
};
-typedef UNORDERED_MAP<uint32 /*PAIR32(map, difficulty)*/, time_t /*resetTime*/> ResetTimeByMapDifficultyMap;
+typedef std::unordered_map<uint32 /*PAIR32(map, difficulty)*/, time_t /*resetTime*/> ResetTimeByMapDifficultyMap;
class InstanceSaveManager
{
- friend class ACE_Singleton<InstanceSaveManager, ACE_Thread_Mutex>;
friend class InstanceSave;
private:
@@ -152,7 +156,15 @@ class InstanceSaveManager
~InstanceSaveManager();
public:
- typedef UNORDERED_MAP<uint32 /*InstanceId*/, InstanceSave*> InstanceSaveHashMap;
+ typedef std::unordered_map<uint32 /*InstanceId*/, InstanceSave*> InstanceSaveHashMap;
+
+ static InstanceSaveManager* instance()
+ {
+ static InstanceSaveManager instance;
+ return &instance;
+ }
+
+ void Unload();
/* resetTime is a global propery of each (raid/heroic) map
all instances of that map reset at the same time */
@@ -221,5 +233,5 @@ class InstanceSaveManager
ResetTimeQueue m_resetTimeQueue;
};
-#define sInstanceSaveMgr ACE_Singleton<InstanceSaveManager, ACE_Thread_Mutex>::instance()
+#define sInstanceSaveMgr InstanceSaveManager::instance()
#endif
diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp
index d21ebca9a91..adef21fe7a2 100644
--- a/src/server/game/Instances/InstanceScript.cpp
+++ b/src/server/game/Instances/InstanceScript.cpp
@@ -148,7 +148,7 @@ void InstanceScript::AddDoor(GameObject* door, bool add)
if (add)
{
- data.bossInfo->door[data.type].insert(door);
+ data.bossInfo->door[data.type].insert(door->GetGUID());
switch (data.boundary)
{
default:
@@ -173,7 +173,7 @@ void InstanceScript::AddDoor(GameObject* door, bool add)
}
}
else
- data.bossInfo->door[data.type].erase(door);
+ data.bossInfo->door[data.type].erase(door->GetGUID());
}
if (add)
@@ -187,9 +187,9 @@ void InstanceScript::AddMinion(Creature* minion, bool add)
return;
if (add)
- itr->second.bossInfo->minion.insert(minion);
+ itr->second.bossInfo->minion.insert(minion->GetGUID());
else
- itr->second.bossInfo->minion.erase(minion);
+ itr->second.bossInfo->minion.erase(minion->GetGUID());
}
bool InstanceScript::SetBossState(uint32 id, EncounterState state)
@@ -210,8 +210,9 @@ bool InstanceScript::SetBossState(uint32 id, EncounterState state)
if (state == DONE)
for (MinionSet::iterator i = bossInfo->minion.begin(); i != bossInfo->minion.end(); ++i)
- if ((*i)->isWorldBoss() && (*i)->IsAlive())
- return false;
+ if (Creature* minion = instance->GetCreature(*i))
+ if (minion->isWorldBoss() && minion->IsAlive())
+ return false;
bossInfo->state = state;
SaveToDB();
@@ -219,10 +220,12 @@ bool InstanceScript::SetBossState(uint32 id, EncounterState state)
for (uint32 type = 0; type < MAX_DOOR_TYPES; ++type)
for (DoorSet::iterator i = bossInfo->door[type].begin(); i != bossInfo->door[type].end(); ++i)
- UpdateDoorState(*i);
+ if (GameObject* door = instance->GetGameObject(*i))
+ UpdateDoorState(door);
for (MinionSet::iterator i = bossInfo->minion.begin(); i != bossInfo->minion.end(); ++i)
- UpdateMinionState(*i, state);
+ if (Creature* minion = instance->GetCreature(*i))
+ UpdateMinionState(minion, state);
return true;
}
diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h
index 3050443edc0..f379572961c 100644
--- a/src/server/game/Instances/InstanceScript.h
+++ b/src/server/game/Instances/InstanceScript.h
@@ -35,8 +35,8 @@ class Player;
class GameObject;
class Creature;
-typedef std::set<GameObject*> DoorSet;
-typedef std::set<Creature*> MinionSet;
+typedef std::set<uint64> DoorSet;
+typedef std::set<uint64> MinionSet;
enum EncounterFrameType
{
@@ -243,7 +243,7 @@ AI* GetInstanceAI(T* obj, char const* scriptName)
return new AI(obj);
return NULL;
-};
+}
template<class AI, class T>
AI* GetInstanceAI(T* obj)
@@ -253,6 +253,6 @@ AI* GetInstanceAI(T* obj)
return new AI(obj);
return NULL;
-};
+}
#endif // TRINITY_INSTANCE_DATA_H
diff --git a/src/server/game/Loot/LootMgr.h b/src/server/game/Loot/LootMgr.h
index fe21e4726ef..09905572aae 100644
--- a/src/server/game/Loot/LootMgr.h
+++ b/src/server/game/Loot/LootMgr.h
@@ -76,6 +76,8 @@ enum PermissionTypes
enum LootType
{
+ LOOT_NONE = 0,
+
LOOT_CORPSE = 1,
LOOT_PICKPOCKETING = 2,
LOOT_FISHING = 3,
@@ -86,7 +88,25 @@ enum LootType
LOOT_MILLING = 8,
LOOT_FISHINGHOLE = 20, // unsupported by client, sending LOOT_FISHING instead
- LOOT_INSIGNIA = 21 // unsupported by client, sending LOOT_CORPSE instead
+ LOOT_INSIGNIA = 21, // unsupported by client, sending LOOT_CORPSE instead
+ LOOT_FISHING_JUNK = 22 // unsupported by client, sending LOOT_FISHING instead
+};
+
+enum LootError
+{
+ LOOT_ERROR_DIDNT_KILL = 0, // You don't have permission to loot that corpse.
+ LOOT_ERROR_TOO_FAR = 4, // You are too far away to loot that corpse.
+ LOOT_ERROR_BAD_FACING = 5, // You must be facing the corpse to loot it.
+ LOOT_ERROR_LOCKED = 6, // Someone is already looting that corpse.
+ LOOT_ERROR_NOTSTANDING = 8, // You need to be standing up to loot something!
+ LOOT_ERROR_STUNNED = 9, // You can't loot anything while stunned!
+ LOOT_ERROR_PLAYER_NOT_FOUND = 10, // Player not found
+ LOOT_ERROR_PLAY_TIME_EXCEEDED = 11, // Maximum play time exceeded
+ LOOT_ERROR_MASTER_INV_FULL = 12, // That player's inventory is full
+ LOOT_ERROR_MASTER_UNIQUE_ITEM = 13, // Player has too many of that item already
+ LOOT_ERROR_MASTER_OTHER = 14, // Can't assign item to that player
+ LOOT_ERROR_ALREADY_PICKPOCKETED = 15, // Your target has already had its pockets picked
+ LOOT_ERROR_NOT_WHILE_SHAPESHIFTED = 16 // You can't do that while shapeshifted.
};
// type of Loot Item in Loot View
@@ -116,7 +136,7 @@ struct LootStoreItem
// Constructor, converting ChanceOrQuestChance -> (chance, needs_quest)
// displayid is filled in IsValid() which must be called after
LootStoreItem(uint32 _itemid, float _chanceOrQuestChance, uint16 _lootmode, uint8 _group, int32 _mincountOrRef, uint8 _maxcount)
- : itemid(_itemid), chance(fabs(_chanceOrQuestChance)), mincountOrRef(_mincountOrRef), lootmode(_lootmode),
+ : itemid(_itemid), chance(std::fabs(_chanceOrQuestChance)), mincountOrRef(_mincountOrRef), lootmode(_lootmode),
group(_group), needs_quest(_chanceOrQuestChance < 0), maxcount(_maxcount)
{ }
@@ -178,7 +198,7 @@ typedef std::vector<QuestItem> QuestItemList;
typedef std::vector<LootItem> LootItemList;
typedef std::map<uint32, QuestItemList*> QuestItemMap;
typedef std::list<LootStoreItem*> LootStoreItemList;
-typedef UNORDERED_MAP<uint32, LootTemplate*> LootTemplateMap;
+typedef std::unordered_map<uint32, LootTemplate*> LootTemplateMap;
typedef std::set<uint32> LootIdSet;
@@ -260,8 +280,8 @@ class LootValidatorRef : public Reference<Loot, LootValidatorRef>
{
public:
LootValidatorRef() { }
- void targetObjectDestroyLink() { }
- void sourceObjectDestroyLink() { }
+ void targetObjectDestroyLink() override { }
+ void sourceObjectDestroyLink() override { }
};
//=====================================================
@@ -340,6 +360,7 @@ struct Loot
gold = 0;
unlootedCount = 0;
roundRobinPlayer = 0;
+ loot_type = LOOT_NONE;
i_LootValidatorRefManager.clearReferences();
}
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index 68657640852..243a931d463 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -119,6 +119,9 @@ bool Map::ExistVMap(uint32 mapid, int gx, int gy)
void Map::LoadMMap(int gx, int gy)
{
+ if (!MMAP::MMapFactory::IsPathfindingEnabled(GetId()))
+ return;
+
bool mmapLoadResult = MMAP::MMapFactory::createOrGetMMapManager()->loadMap((sWorld->GetDataPath() + "mmaps").c_str(), GetId(), gx, gy);
if (mmapLoadResult)
@@ -129,6 +132,8 @@ void Map::LoadMMap(int gx, int gy)
void Map::LoadVMap(int gx, int gy)
{
+ if (!VMAP::VMapFactory::createOrGetVMapManager()->isMapLoadingEnabled())
+ return;
// x and y are swapped !!
int vmapLoadResult = VMAP::VMapFactory::createOrGetVMapManager()->loadMap((sWorld->GetDataPath()+ "vmaps").c_str(), GetId(), gx, gy);
switch (vmapLoadResult)
@@ -382,7 +387,7 @@ void Map::DeleteFromWorld(Player* player)
void Map::EnsureGridCreated(const GridCoord &p)
{
- TRINITY_GUARD(ACE_Thread_Mutex, GridLock);
+ std::lock_guard<std::mutex> lock(_gridLock);
EnsureGridCreated_i(p);
}
@@ -1544,11 +1549,8 @@ void Map::UnloadAll()
Transport* transport = *itr;
++itr;
- transport->RemoveFromWorld();
- delete transport;
+ RemoveFromMap<Transport>(transport, true);
}
-
- _transports.clear();
}
// *****************************
@@ -2169,7 +2171,7 @@ float Map::GetHeight(float x, float y, float z, bool checkVMap /*= true*/, float
// we are already under the surface or vmap height above map heigt
// or if the distance of the vmap height is less the land height distance
- if (z < mapHeight || vmapHeight > mapHeight || fabs(mapHeight-z) > fabs(vmapHeight-z))
+ if (z < mapHeight || vmapHeight > mapHeight || std::fabs(mapHeight - z) > std::fabs(vmapHeight - z))
return vmapHeight;
else
return mapHeight; // better use .map surface height
@@ -2193,13 +2195,13 @@ inline bool IsOutdoorWMO(uint32 mogpFlags, int32 /*adtId*/, int32 /*rootId*/, in
return false;
}
- outdoor = mogpFlags&0x8;
+ outdoor = (mogpFlags & 0x8) != 0;
if (wmoEntry)
{
if (wmoEntry->Flags & 4)
return true;
- if ((wmoEntry->Flags & 2)!=0)
+ if (wmoEntry->Flags & 2)
outdoor = false;
}
return outdoor;
@@ -2214,7 +2216,7 @@ bool Map::IsOutdoors(float x, float y, float z) const
if (!GetAreaInfo(x, y, z, mogpFlags, adtId, rootId, groupId))
return true;
- AreaTableEntry const* atEntry = 0;
+ AreaTableEntry const* atEntry = nullptr;
WMOAreaTableEntry const* wmoEntry= GetWMOAreaTableEntryByTripple(rootId, adtId, groupId);
if (wmoEntry)
{
@@ -2247,8 +2249,8 @@ uint16 Map::GetAreaFlag(float x, float y, float z, bool *isOutdoors) const
{
uint32 mogpFlags;
int32 adtId, rootId, groupId;
- WMOAreaTableEntry const* wmoEntry = 0;
- AreaTableEntry const* atEntry = 0;
+ WMOAreaTableEntry const* wmoEntry = nullptr;
+ AreaTableEntry const* atEntry = nullptr;
bool haveAreaInfo = false;
if (GetAreaInfo(x, y, z, mogpFlags, adtId, rootId, groupId))
@@ -2440,12 +2442,12 @@ bool Map::IsInWater(float x, float y, float pZ, LiquidData* data) const
{
LiquidData liquid_status;
LiquidData* liquid_ptr = data ? data : &liquid_status;
- return getLiquidStatus(x, y, pZ, MAP_ALL_LIQUIDS, liquid_ptr) & (LIQUID_MAP_IN_WATER | LIQUID_MAP_UNDER_WATER);
+ return (getLiquidStatus(x, y, pZ, MAP_ALL_LIQUIDS, liquid_ptr) & (LIQUID_MAP_IN_WATER | LIQUID_MAP_UNDER_WATER)) != 0;
}
bool Map::IsUnderWater(float x, float y, float z) const
{
- return getLiquidStatus(x, y, z, MAP_LIQUID_TYPE_WATER|MAP_LIQUID_TYPE_OCEAN) & LIQUID_MAP_UNDER_WATER;
+ return (getLiquidStatus(x, y, z, MAP_LIQUID_TYPE_WATER | MAP_LIQUID_TYPE_OCEAN) & LIQUID_MAP_UNDER_WATER) != 0;
}
bool Map::CheckGridIntegrity(Creature* c, bool moved) const
@@ -2509,15 +2511,9 @@ void Map::SendInitSelf(Player* player)
// build other passengers at transport also (they always visible and marked as visible and will not send at visibility update at add to map
if (Transport* transport = player->GetTransport())
- {
- for (std::set<WorldObject*>::const_iterator itr = transport->GetPassengers().begin(); itr != transport->GetPassengers().end(); ++itr)
- {
+ for (Transport::PassengerSet::const_iterator itr = transport->GetPassengers().begin(); itr != transport->GetPassengers().end(); ++itr)
if (player != (*itr) && player->HaveAtClient(*itr))
- {
(*itr)->BuildCreateUpdateBlockForPlayer(&data, player);
- }
- }
- }
WorldPacket packet;
data.BuildPacket(&packet);
@@ -2648,24 +2644,27 @@ void Map::RemoveAllObjectsInRemoveList()
RemoveFromMap(corpse, true);
break;
}
- case TYPEID_DYNAMICOBJECT:
- RemoveFromMap((DynamicObject*)obj, true);
- break;
- case TYPEID_GAMEOBJECT:
- if (Transport* transport = obj->ToGameObject()->ToTransport())
- RemoveFromMap(transport, true);
- else
- RemoveFromMap(obj->ToGameObject(), true);
- break;
- case TYPEID_UNIT:
- // in case triggered sequence some spell can continue casting after prev CleanupsBeforeDelete call
- // make sure that like sources auras/etc removed before destructor start
- obj->ToCreature()->CleanupsBeforeDelete();
- RemoveFromMap(obj->ToCreature(), true);
- break;
- default:
- TC_LOG_ERROR("maps", "Non-grid object (TypeId: %u) is in grid object remove list, ignored.", obj->GetTypeId());
- break;
+ case TYPEID_DYNAMICOBJECT:
+ RemoveFromMap(obj->ToDynObject(), true);
+ break;
+ case TYPEID_GAMEOBJECT:
+ {
+ GameObject* go = obj->ToGameObject();
+ if (Transport* transport = go->ToTransport())
+ RemoveFromMap(transport, true);
+ else
+ RemoveFromMap(go, true);
+ break;
+ }
+ case TYPEID_UNIT:
+ // in case triggered sequence some spell can continue casting after prev CleanupsBeforeDelete call
+ // make sure that like sources auras/etc removed before destructor start
+ obj->ToCreature()->CleanupsBeforeDelete();
+ RemoveFromMap(obj->ToCreature(), true);
+ break;
+ default:
+ TC_LOG_ERROR("maps", "Non-grid object (TypeId: %u) is in grid object remove list, ignored.", obj->GetTypeId());
+ break;
}
i_objectsToRemove.erase(itr);
@@ -2683,7 +2682,7 @@ uint32 Map::GetPlayersCountExceptGMs() const
return count;
}
-void Map::SendToPlayers(WorldPacket const* data) const
+void Map::SendToPlayers(WorldPacket* data) const
{
for (MapRefManager::const_iterator itr = m_mapRefManager.begin(); itr != m_mapRefManager.end(); ++itr)
itr->GetSource()->GetSession()->SendPacket(data);
@@ -2854,10 +2853,9 @@ bool InstanceMap::CanEnter(Player* player)
return false;
}
- // cannot enter while an encounter is in progress on raids
- /*Group* group = player->GetGroup();
- if (!player->IsGameMaster() && group && group->InCombatToInstance(GetInstanceId()) && player->GetMapId() != GetId())*/
- if (IsRaid() && GetInstanceScript() && GetInstanceScript()->IsEncounterInProgress())
+ // cannot enter while an encounter is in progress
+ // allow if just loading
+ if (!player->IsLoading() && IsRaid() && GetInstanceScript() && GetInstanceScript()->IsEncounterInProgress())
{
player->SendTransferAborted(GetId(), TRANSFER_ABORT_ZONE_IN_COMBAT);
return false;
@@ -2901,7 +2899,7 @@ bool InstanceMap::AddPlayerToMap(Player* player)
// Is it needed?
{
- TRINITY_GUARD(ACE_Thread_Mutex, Lock);
+ std::lock_guard<std::mutex> lock(_mapLock);
// Check moved to void WorldSession::HandleMoveWorldportAckOpcode()
//if (!CanEnter(player))
//return false;
@@ -3242,7 +3240,7 @@ bool BattlegroundMap::CanEnter(Player* player)
bool BattlegroundMap::AddPlayerToMap(Player* player)
{
{
- TRINITY_GUARD(ACE_Thread_Mutex, Lock);
+ std::lock_guard<std::mutex> lock(_mapLock);
//Check moved to void WorldSession::HandleMoveWorldportAckOpcode()
//if (!CanEnter(player))
//return false;
@@ -3532,3 +3530,15 @@ void Map::SetZoneOverrideLight(uint32 zoneId, uint32 lightId, uint32 fadeInTime)
player->SendDirectMessage(&data);
}
}
+
+void Map::UpdateAreaDependentAuras()
+{
+ Map::PlayerList const& players = GetPlayers();
+ for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
+ if (Player* player = itr->GetSource())
+ if (player->IsInWorld())
+ {
+ player->UpdateAreaDependentAuras(player->GetAreaId());
+ player->UpdateZoneDependentAuras(player->GetZoneId());
+ }
+}
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index 4daeebe43d1..fd9ec281709 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -20,8 +20,6 @@
#define TRINITY_MAP_H
#include "Define.h"
-#include <ace/RW_Thread_Mutex.h>
-#include <ace/Thread_Mutex.h>
#include "DBCStructure.h"
#include "GridDefines.h"
@@ -51,6 +49,7 @@ struct ScriptAction;
struct Position;
class Battleground;
class MapInstanced;
+class BattlegroundMap;
class InstanceMap;
class Transport;
namespace Trinity { struct ObjectUpdater; }
@@ -255,7 +254,7 @@ struct ZoneDynamicInfo
typedef std::map<uint32/*leaderDBGUID*/, CreatureGroup*> CreatureGroupHolderType;
-typedef UNORDERED_MAP<uint32 /*zoneId*/, ZoneDynamicInfo> ZoneDynamicInfoMap;
+typedef std::unordered_map<uint32 /*zoneId*/, ZoneDynamicInfo> ZoneDynamicInfoMap;
class Map : public GridRefManager<NGridType>
{
@@ -335,16 +334,16 @@ class Map : public GridRefManager<NGridType>
// can return INVALID_HEIGHT if under z+2 z coord not found height
float GetHeight(float x, float y, float z, bool checkVMap = true, float maxSearchDist = DEFAULT_HEIGHT_SEARCH) const;
- ZLiquidStatus getLiquidStatus(float x, float y, float z, uint8 ReqLiquidType, LiquidData* data = 0) const;
+ ZLiquidStatus getLiquidStatus(float x, float y, float z, uint8 ReqLiquidType, LiquidData* data = nullptr) const;
- uint16 GetAreaFlag(float x, float y, float z, bool *isOutdoors=0) const;
+ uint16 GetAreaFlag(float x, float y, float z, bool *isOutdoors=nullptr) const;
bool GetAreaInfo(float x, float y, float z, uint32 &mogpflags, int32 &adtId, int32 &rootId, int32 &groupId) const;
bool IsOutdoors(float x, float y, float z) const;
uint8 GetTerrainType(float x, float y) const;
float GetWaterLevel(float x, float y) const;
- bool IsInWater(float x, float y, float z, LiquidData* data = 0) const;
+ bool IsInWater(float x, float y, float z, LiquidData* data = nullptr) const;
bool IsUnderWater(float x, float y, float z) const;
static uint32 GetAreaIdByAreaFlag(uint16 areaflag, uint32 map_id);
@@ -424,7 +423,7 @@ class Map : public GridRefManager<NGridType>
void AddWorldObject(WorldObject* obj) { i_worldObjects.insert(obj); }
void RemoveWorldObject(WorldObject* obj) { i_worldObjects.erase(obj); }
- void SendToPlayers(WorldPacket const* data) const;
+ void SendToPlayers(WorldPacket* data) const;
typedef MapRefManager PlayerList;
PlayerList const& GetPlayers() const { return m_mapRefManager; }
@@ -457,11 +456,15 @@ class Map : public GridRefManager<NGridType>
Transport* GetTransport(uint64 guid);
DynamicObject* GetDynamicObject(uint64 guid);
- MapInstanced* ToMapInstanced(){ if (Instanceable()) return reinterpret_cast<MapInstanced*>(this); else return NULL; }
- const MapInstanced* ToMapInstanced() const { if (Instanceable()) return (const MapInstanced*)((MapInstanced*)this); else return NULL; }
+ MapInstanced* ToMapInstanced() { if (Instanceable()) return reinterpret_cast<MapInstanced*>(this); return NULL; }
+ MapInstanced const* ToMapInstanced() const { if (Instanceable()) return reinterpret_cast<MapInstanced const*>(this); return NULL; }
+
+ InstanceMap* ToInstanceMap() { if (IsDungeon()) return reinterpret_cast<InstanceMap*>(this); else return NULL; }
+ InstanceMap const* ToInstanceMap() const { if (IsDungeon()) return reinterpret_cast<InstanceMap const*>(this); return NULL; }
+
+ BattlegroundMap* ToBattlegroundMap() { if (IsBattlegroundOrArena()) return reinterpret_cast<BattlegroundMap*>(this); else return NULL; }
+ BattlegroundMap const* ToBattlegroundMap() const { if (IsBattlegroundOrArena()) return reinterpret_cast<BattlegroundMap const*>(this); return NULL; }
- InstanceMap* ToInstanceMap(){ if (IsDungeon()) return reinterpret_cast<InstanceMap*>(this); else return NULL; }
- const InstanceMap* ToInstanceMap() const { if (IsDungeon()) return (const InstanceMap*)((InstanceMap*)this); else return NULL; }
float GetWaterOrGroundLevel(float x, float y, float z, float* ground = NULL, bool swim = false) const;
float GetHeight(uint32 phasemask, float x, float y, float z, bool vmap = true, float maxSearchDist = DEFAULT_HEIGHT_SEARCH) const;
bool isInLineOfSight(float x1, float y1, float z1, float x2, float y2, float z2, uint32 phasemask) const;
@@ -477,7 +480,7 @@ class Map : public GridRefManager<NGridType>
time_t GetLinkedRespawnTime(uint64 guid) const;
time_t GetCreatureRespawnTime(uint32 dbGuid) const
{
- UNORDERED_MAP<uint32 /*dbGUID*/, time_t>::const_iterator itr = _creatureRespawnTimes.find(dbGuid);
+ std::unordered_map<uint32 /*dbGUID*/, time_t>::const_iterator itr = _creatureRespawnTimes.find(dbGuid);
if (itr != _creatureRespawnTimes.end())
return itr->second;
@@ -486,7 +489,7 @@ class Map : public GridRefManager<NGridType>
time_t GetGORespawnTime(uint32 dbGuid) const
{
- UNORDERED_MAP<uint32 /*dbGUID*/, time_t>::const_iterator itr = _goRespawnTimes.find(dbGuid);
+ std::unordered_map<uint32 /*dbGUID*/, time_t>::const_iterator itr = _goRespawnTimes.find(dbGuid);
if (itr != _goRespawnTimes.end())
return itr->second;
@@ -510,6 +513,8 @@ class Map : public GridRefManager<NGridType>
void SetZoneWeather(uint32 zoneId, uint32 weatherId, float weatherGrade);
void SetZoneOverrideLight(uint32 zoneId, uint32 lightId, uint32 fadeInTime);
+ void UpdateAreaDependentAuras();
+
private:
void LoadMapAndVMap(int gx, int gy);
void LoadVMap(int gx, int gy);
@@ -567,8 +572,8 @@ class Map : public GridRefManager<NGridType>
protected:
void SetUnloadReferenceLock(const GridCoord &p, bool on) { getNGrid(p.x_coord, p.y_coord)->setUnloadReferenceLock(on); }
- ACE_Thread_Mutex Lock;
- ACE_Thread_Mutex GridLock;
+ std::mutex _mapLock;
+ std::mutex _gridLock;
MapEntry const* i_mapEntry;
uint8 i_spawnMode;
@@ -651,8 +656,8 @@ class Map : public GridRefManager<NGridType>
m_activeNonPlayers.erase(obj);
}
- UNORDERED_MAP<uint32 /*dbGUID*/, time_t> _creatureRespawnTimes;
- UNORDERED_MAP<uint32 /*dbGUID*/, time_t> _goRespawnTimes;
+ std::unordered_map<uint32 /*dbGUID*/, time_t> _creatureRespawnTimes;
+ std::unordered_map<uint32 /*dbGUID*/, time_t> _goRespawnTimes;
ZoneDynamicInfoMap _zoneDynamicInfo;
uint32 _defaultLight;
@@ -673,23 +678,23 @@ class InstanceMap : public Map
public:
InstanceMap(uint32 id, time_t, uint32 InstanceId, uint8 SpawnMode, Map* _parent);
~InstanceMap();
- bool AddPlayerToMap(Player*);
- void RemovePlayerFromMap(Player*, bool);
- void Update(const uint32);
+ bool AddPlayerToMap(Player*) override;
+ void RemovePlayerFromMap(Player*, bool) override;
+ void Update(const uint32) override;
void CreateInstanceData(bool load);
bool Reset(uint8 method);
uint32 GetScriptId() { return i_script_id; }
InstanceScript* GetInstanceScript() { return i_data; }
void PermBindAllPlayers(Player* source);
- void UnloadAll();
- bool CanEnter(Player* player);
+ void UnloadAll() override;
+ bool CanEnter(Player* player) override;
void SendResetWarnings(uint32 timeLeft) const;
void SetResetSchedule(bool on);
uint32 GetMaxPlayers() const;
uint32 GetMaxResetDelay() const;
- virtual void InitVisibilityDistance();
+ virtual void InitVisibilityDistance() override;
private:
bool m_resetAfterUnload;
bool m_unloadWhenEmpty;
@@ -703,14 +708,14 @@ class BattlegroundMap : public Map
BattlegroundMap(uint32 id, time_t, uint32 InstanceId, Map* _parent, uint8 spawnMode);
~BattlegroundMap();
- bool AddPlayerToMap(Player*);
- void RemovePlayerFromMap(Player*, bool);
- bool CanEnter(Player* player);
+ bool AddPlayerToMap(Player*) override;
+ void RemovePlayerFromMap(Player*, bool) override;
+ bool CanEnter(Player* player) override;
void SetUnload();
//void UnloadAll(bool pForce);
- void RemoveAllPlayers();
+ void RemoveAllPlayers() override;
- virtual void InitVisibilityDistance();
+ virtual void InitVisibilityDistance() override;
Battleground* GetBG() { return m_bg; }
void SetBG(Battleground* bg) { m_bg = bg; }
private:
diff --git a/src/server/game/Maps/MapInstanced.cpp b/src/server/game/Maps/MapInstanced.cpp
index e914a5c3eee..498c669ba01 100644
--- a/src/server/game/Maps/MapInstanced.cpp
+++ b/src/server/game/Maps/MapInstanced.cpp
@@ -187,7 +187,7 @@ Map* MapInstanced::CreateInstanceForPlayer(const uint32 mapId, Player* player)
InstanceMap* MapInstanced::CreateInstance(uint32 InstanceId, InstanceSave* save, Difficulty difficulty)
{
// load/create a map
- TRINITY_GUARD(ACE_Thread_Mutex, Lock);
+ std::lock_guard<std::mutex> lock(_mapLock);
// make sure we have a valid map id
const MapEntry* entry = sMapStore.LookupEntry(GetId());
@@ -223,7 +223,7 @@ InstanceMap* MapInstanced::CreateInstance(uint32 InstanceId, InstanceSave* save,
BattlegroundMap* MapInstanced::CreateBattleground(uint32 InstanceId, Battleground* bg)
{
// load/create a map
- TRINITY_GUARD(ACE_Thread_Mutex, Lock);
+ std::lock_guard<std::mutex> lock(_mapLock);
TC_LOG_DEBUG("maps", "MapInstanced::CreateBattleground: map bg %d for %d created.", InstanceId, GetId());
diff --git a/src/server/game/Maps/MapInstanced.h b/src/server/game/Maps/MapInstanced.h
index aa2b5f95d3f..614764dbba3 100644
--- a/src/server/game/Maps/MapInstanced.h
+++ b/src/server/game/Maps/MapInstanced.h
@@ -27,17 +27,17 @@ class MapInstanced : public Map
{
friend class MapManager;
public:
- typedef UNORDERED_MAP< uint32, Map*> InstancedMaps;
+ typedef std::unordered_map< uint32, Map*> InstancedMaps;
MapInstanced(uint32 id, time_t expiry);
~MapInstanced() { }
// functions overwrite Map versions
- void Update(const uint32);
- void DelayedUpdate(const uint32 diff);
+ void Update(const uint32) override;
+ void DelayedUpdate(const uint32 diff) override;
//void RelocationNotify();
- void UnloadAll();
- bool CanEnter(Player* player);
+ void UnloadAll() override;
+ bool CanEnter(Player* player) override;
Map* CreateInstanceForPlayer(const uint32 mapId, Player* player);
Map* FindInstanceMap(uint32 instanceId) const
@@ -61,7 +61,7 @@ class MapInstanced : public Map
}
InstancedMaps &GetInstancedMaps() { return m_InstancedMaps; }
- virtual void InitVisibilityDistance();
+ virtual void InitVisibilityDistance() override;
private:
InstanceMap* CreateInstance(uint32 InstanceId, InstanceSave* save, Difficulty difficulty);
diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp
index d8c8889da67..9c023b86bc9 100644
--- a/src/server/game/Maps/MapManager.cpp
+++ b/src/server/game/Maps/MapManager.cpp
@@ -52,8 +52,8 @@ void MapManager::Initialize()
int num_threads(sWorld->getIntConfig(CONFIG_NUMTHREADS));
// Start mtmaps if needed.
- if (num_threads > 0 && m_updater.activate(num_threads) == -1)
- abort();
+ if (num_threads > 0)
+ m_updater.activate(num_threads);
}
void MapManager::InitializeVisibilityDistanceInfo()
@@ -68,7 +68,7 @@ Map* MapManager::CreateBaseMap(uint32 id)
if (map == NULL)
{
- TRINITY_GUARD(ACE_Thread_Mutex, Lock);
+ std::lock_guard<std::mutex> lock(_mapsLock);
MapEntry const* entry = sMapStore.LookupEntry(id);
ASSERT(entry);
@@ -131,21 +131,15 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck)
if (!instance)
return false;
- Difficulty targetDifficulty = player->GetDifficulty(entry->IsRaid());
- //The player has a heroic mode and tries to enter into instance which has no a heroic mode
- MapDifficulty const* mapDiff = GetMapDifficultyData(entry->MapID, targetDifficulty);
+ Difficulty targetDifficulty, requestedDifficulty;
+ targetDifficulty = requestedDifficulty = player->GetDifficulty(entry->IsRaid());
+ // Get the highest available difficulty if current setting is higher than the instance allows
+ MapDifficulty const* mapDiff = GetDownscaledMapDifficultyData(entry->MapID, targetDifficulty);
if (!mapDiff)
{
- // Send aborted message for dungeons
- if (entry->IsNonRaidDungeon())
- {
- player->SendTransferAborted(mapid, TRANSFER_ABORT_DIFFICULTY, player->GetDungeonDifficulty());
- return false;
- }
- else // attempt to downscale
- mapDiff = GetDownscaledMapDifficultyData(entry->MapID, targetDifficulty);
+ player->SendTransferAborted(mapid, TRANSFER_ABORT_DIFFICULTY, requestedDifficulty);
+ return false;
}
- // FIXME: mapDiff is never used
//Bypass checks for GMs
if (player->IsGameMaster())
@@ -302,7 +296,7 @@ void MapManager::UnloadAll()
uint32 MapManager::GetNumInstances()
{
- TRINITY_GUARD(ACE_Thread_Mutex, Lock);
+ std::lock_guard<std::mutex> lock(_mapsLock);
uint32 ret = 0;
for (MapMapType::iterator itr = i_maps.begin(); itr != i_maps.end(); ++itr)
@@ -319,7 +313,7 @@ uint32 MapManager::GetNumInstances()
uint32 MapManager::GetNumPlayersInInstances()
{
- TRINITY_GUARD(ACE_Thread_Mutex, Lock);
+ std::lock_guard<std::mutex> lock(_mapsLock);
uint32 ret = 0;
for (MapMapType::iterator itr = i_maps.begin(); itr != i_maps.end(); ++itr)
diff --git a/src/server/game/Maps/MapManager.h b/src/server/game/Maps/MapManager.h
index 98a5f8c7180..e028833d72d 100644
--- a/src/server/game/Maps/MapManager.h
+++ b/src/server/game/Maps/MapManager.h
@@ -24,18 +24,18 @@
#include "GridStates.h"
#include "MapUpdater.h"
-#include <ace/Singleton.h>
-#include <ace/Thread_Mutex.h>
-
-
class Transport;
struct TransportCreatureProto;
class MapManager
{
- friend class ACE_Singleton<MapManager, ACE_Thread_Mutex>;
-
public:
+ static MapManager* instance()
+ {
+ static MapManager instance;
+ return &instance;
+ }
+
Map* CreateBaseMap(uint32 mapId);
Map* FindBaseNonInstanceMap(uint32 mapId) const;
Map* CreateMap(uint32 mapId, Player* player);
@@ -126,7 +126,7 @@ class MapManager
MapUpdater * GetMapUpdater() { return &m_updater; }
private:
- typedef UNORDERED_MAP<uint32, Map*> MapMapType;
+ typedef std::unordered_map<uint32, Map*> MapMapType;
typedef std::vector<bool> InstanceIds;
MapManager();
@@ -141,7 +141,7 @@ class MapManager
MapManager(const MapManager &);
MapManager& operator=(const MapManager &);
- ACE_Thread_Mutex Lock;
+ std::mutex _mapsLock;
uint32 i_gridCleanUpDelay;
MapMapType i_maps;
IntervalTimer i_timer;
@@ -150,5 +150,5 @@ class MapManager
uint32 _nextInstanceId;
MapUpdater m_updater;
};
-#define sMapMgr ACE_Singleton<MapManager, ACE_Thread_Mutex>::instance()
+#define sMapMgr MapManager::instance()
#endif
diff --git a/src/server/game/Maps/MapReference.h b/src/server/game/Maps/MapReference.h
index fe5ceb714c5..2742902d558 100644
--- a/src/server/game/Maps/MapReference.h
+++ b/src/server/game/Maps/MapReference.h
@@ -25,18 +25,18 @@
class MapReference : public Reference<Map, Player>
{
protected:
- void targetObjectBuildLink()
+ void targetObjectBuildLink() override
{
// called from link()
getTarget()->m_mapRefManager.insertFirst(this);
getTarget()->m_mapRefManager.incSize();
}
- void targetObjectDestroyLink()
+ void targetObjectDestroyLink() override
{
// called from unlink()
if (isValid()) getTarget()->m_mapRefManager.decSize();
}
- void sourceObjectDestroyLink()
+ void sourceObjectDestroyLink() override
{
// called from invalidate()
getTarget()->m_mapRefManager.decSize();
diff --git a/src/server/game/Maps/MapUpdater.cpp b/src/server/game/Maps/MapUpdater.cpp
index f3a5a66bf66..69f0bdff885 100644
--- a/src/server/game/Maps/MapUpdater.cpp
+++ b/src/server/game/Maps/MapUpdater.cpp
@@ -1,125 +1,118 @@
+/*
+* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <mutex>
+#include <condition_variable>
+
#include "MapUpdater.h"
-#include "DelayExecutor.h"
#include "Map.h"
-#include "DatabaseEnv.h"
-
-#include <ace/Guard_T.h>
-#include <ace/Method_Request.h>
-
-class WDBThreadStartReq1 : public ACE_Method_Request
-{
- public:
-
- WDBThreadStartReq1()
- {
- }
-
- virtual int call()
- {
- return 0;
- }
-};
-
-class WDBThreadEndReq1 : public ACE_Method_Request
-{
- public:
- WDBThreadEndReq1()
- {
- }
- virtual int call()
- {
- return 0;
- }
-};
-
-class MapUpdateRequest : public ACE_Method_Request
+class MapUpdateRequest
{
private:
Map& m_map;
MapUpdater& m_updater;
- ACE_UINT32 m_diff;
+ uint32 m_diff;
public:
- MapUpdateRequest(Map& m, MapUpdater& u, ACE_UINT32 d)
+ MapUpdateRequest(Map& m, MapUpdater& u, uint32 d)
: m_map(m), m_updater(u), m_diff(d)
{
}
- virtual int call()
+ void call()
{
m_map.Update (m_diff);
m_updater.update_finished();
- return 0;
}
};
-MapUpdater::MapUpdater():
-m_executor(), m_mutex(), m_condition(m_mutex), pending_requests(0) { }
-
-MapUpdater::~MapUpdater()
+void MapUpdater::activate(size_t num_threads)
{
- deactivate();
+ for (size_t i = 0; i < num_threads; ++i)
+ {
+ _workerThreads.push_back(std::thread(&MapUpdater::WorkerThread, this));
+ }
}
-int MapUpdater::activate(size_t num_threads)
+void MapUpdater::deactivate()
{
- return m_executor.start((int)num_threads, new WDBThreadStartReq1, new WDBThreadEndReq1);
-}
+ _cancelationToken = true;
-int MapUpdater::deactivate()
-{
wait();
- return m_executor.deactivate();
+ _queue.Cancel();
+
+ for (auto& thread : _workerThreads)
+ {
+ thread.join();
+ }
}
-int MapUpdater::wait()
+void MapUpdater::wait()
{
- TRINITY_GUARD(ACE_Thread_Mutex, m_mutex);
+ std::unique_lock<std::mutex> lock(_lock);
while (pending_requests > 0)
- m_condition.wait();
+ _condition.wait(lock);
- return 0;
+ lock.unlock();
}
-int MapUpdater::schedule_update(Map& map, ACE_UINT32 diff)
+void MapUpdater::schedule_update(Map& map, uint32 diff)
{
- TRINITY_GUARD(ACE_Thread_Mutex, m_mutex);
+ std::lock_guard<std::mutex> lock(_lock);
++pending_requests;
- if (m_executor.execute(new MapUpdateRequest(map, *this, diff)) == -1)
- {
- ACE_DEBUG((LM_ERROR, ACE_TEXT("(%t) \n"), ACE_TEXT("Failed to schedule Map Update")));
-
- --pending_requests;
- return -1;
- }
-
- return 0;
+ _queue.Push(new MapUpdateRequest(map, *this, diff));
}
bool MapUpdater::activated()
{
- return m_executor.activated();
+ return _workerThreads.size() > 0;
}
void MapUpdater::update_finished()
{
- TRINITY_GUARD(ACE_Thread_Mutex, m_mutex);
+ std::lock_guard<std::mutex> lock(_lock);
- if (pending_requests == 0)
+ --pending_requests;
+
+ _condition.notify_all();
+}
+
+void MapUpdater::WorkerThread()
+{
+ while (1)
{
- ACE_ERROR((LM_ERROR, ACE_TEXT("(%t)\n"), ACE_TEXT("MapUpdater::update_finished BUG, report to devs")));
- return;
- }
+ MapUpdateRequest* request = nullptr;
- --pending_requests;
+ _queue.WaitAndPop(request);
+
+ if (_cancelationToken)
+ return;
- m_condition.broadcast();
+ request->call();
+
+ delete request;
+ }
}
diff --git a/src/server/game/Maps/MapUpdater.h b/src/server/game/Maps/MapUpdater.h
index 89798026339..0d4058a38a3 100644
--- a/src/server/game/Maps/MapUpdater.h
+++ b/src/server/game/Maps/MapUpdater.h
@@ -1,40 +1,66 @@
+/*
+* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
#ifndef _MAP_UPDATER_H_INCLUDED
#define _MAP_UPDATER_H_INCLUDED
-#include <ace/Thread_Mutex.h>
-#include <ace/Condition_Thread_Mutex.h>
-
-#include "DelayExecutor.h"
+#include "Define.h"
+#include <mutex>
+#include <thread>
+#include <condition_variable>
+#include "ProducerConsumerQueue.h"
+class MapUpdateRequest;
class Map;
class MapUpdater
{
public:
- MapUpdater();
- virtual ~MapUpdater();
+ MapUpdater() : _cancelationToken(false), pending_requests(0) {}
+ ~MapUpdater() { };
friend class MapUpdateRequest;
- int schedule_update(Map& map, ACE_UINT32 diff);
+ void schedule_update(Map& map, uint32 diff);
- int wait();
+ void wait();
- int activate(size_t num_threads);
+ void activate(size_t num_threads);
- int deactivate();
+ void deactivate();
bool activated();
private:
- DelayExecutor m_executor;
- ACE_Thread_Mutex m_mutex;
- ACE_Condition_Thread_Mutex m_condition;
+ ProducerConsumerQueue<MapUpdateRequest*> _queue;
+
+ std::vector<std::thread> _workerThreads;
+ std::atomic<bool> _cancelationToken;
+
+ std::mutex _lock;
+ std::condition_variable _condition;
size_t pending_requests;
void update_finished();
+
+ void WorkerThread();
};
#endif //_MAP_UPDATER_H_INCLUDED
diff --git a/src/server/game/Maps/TransportMgr.cpp b/src/server/game/Maps/TransportMgr.cpp
index 28869d264c4..a177965b99f 100644
--- a/src/server/game/Maps/TransportMgr.cpp
+++ b/src/server/game/Maps/TransportMgr.cpp
@@ -139,7 +139,7 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl
KeyFrame k(node_i);
G3D::Vector3 h;
orientationSpline.evaluate_derivative(i + 1, 0.0f, h);
- k.InitialOrientation = Position::NormalizeOrientation(atan2(h.y, h.x) + M_PI);
+ k.InitialOrientation = Position::NormalizeOrientation(std::atan2(h.y, h.x) + float(M_PI));
keyFrames.push_back(k);
splinePath.push_back(G3D::Vector3(node_i.x, node_i.y, node_i.z));
@@ -213,7 +213,7 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl
for (size_t j = start; j < i + extra; ++j)
{
keyFrames[j].Index = j - start + 1;
- keyFrames[j].DistFromPrev = spline->length(j - start, j + 1 - start);
+ keyFrames[j].DistFromPrev = float(spline->length(j - start, j + 1 - start));
if (j > 0)
keyFrames[j - 1].NextDistFromPrev = keyFrames[j].DistFromPrev;
keyFrames[j].Spline = spline;
@@ -276,22 +276,22 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl
if (keyFrames[i].DistSinceStop < keyFrames[i].DistUntilStop) // is still accelerating
{
// calculate accel+brake time for this short segment
- float segment_time = 2.0f * sqrt((keyFrames[i].DistUntilStop + keyFrames[i].DistSinceStop) / accel);
+ float segment_time = 2.0f * std::sqrt((keyFrames[i].DistUntilStop + keyFrames[i].DistSinceStop) / accel);
// substract acceleration time
- keyFrames[i].TimeTo = segment_time - sqrt(2 * keyFrames[i].DistSinceStop / accel);
+ keyFrames[i].TimeTo = segment_time - std::sqrt(2 * keyFrames[i].DistSinceStop / accel);
}
else // slowing down
- keyFrames[i].TimeTo = sqrt(2 * keyFrames[i].DistUntilStop / accel);
+ keyFrames[i].TimeTo = std::sqrt(2 * keyFrames[i].DistUntilStop / accel);
}
else if (keyFrames[i].DistSinceStop < accel_dist) // still accelerating (but will reach full speed)
{
// calculate accel + cruise + brake time for this long segment
float segment_time = (keyFrames[i].DistUntilStop + keyFrames[i].DistSinceStop) / speed + (speed / accel);
// substract acceleration time
- keyFrames[i].TimeTo = segment_time - sqrt(2 * keyFrames[i].DistSinceStop / accel);
+ keyFrames[i].TimeTo = segment_time - std::sqrt(2 * keyFrames[i].DistSinceStop / accel);
}
else if (keyFrames[i].DistUntilStop < accel_dist) // already slowing down (but reached full speed)
- keyFrames[i].TimeTo = sqrt(2 * keyFrames[i].DistUntilStop / accel);
+ keyFrames[i].TimeTo = std::sqrt(2 * keyFrames[i].DistUntilStop / accel);
else // at full speed
keyFrames[i].TimeTo = (keyFrames[i].DistUntilStop / speed) + (0.5f * speed / accel);
}
diff --git a/src/server/game/Maps/TransportMgr.h b/src/server/game/Maps/TransportMgr.h
index a207522c4df..04c372cc526 100644
--- a/src/server/game/Maps/TransportMgr.h
+++ b/src/server/game/Maps/TransportMgr.h
@@ -18,7 +18,6 @@
#ifndef TRANSPORTMGR_H
#define TRANSPORTMGR_H
-#include <ace/Singleton.h>
#include <G3D/Quat.h>
#include "Spline.h"
#include "DBCStores.h"
@@ -31,10 +30,10 @@ class Map;
typedef Movement::Spline<double> TransportSpline;
typedef std::vector<KeyFrame> KeyFrameVec;
-typedef UNORDERED_MAP<uint32, TransportTemplate> TransportTemplates;
+typedef std::unordered_map<uint32, TransportTemplate> TransportTemplates;
typedef std::set<Transport*> TransportSet;
-typedef UNORDERED_MAP<uint32, TransportSet> TransportMap;
-typedef UNORDERED_MAP<uint32, std::set<uint32> > TransportInstanceMap;
+typedef std::unordered_map<uint32, TransportSet> TransportMap;
+typedef std::unordered_map<uint32, std::set<uint32> > TransportInstanceMap;
struct KeyFrame
{
@@ -96,10 +95,15 @@ typedef std::map<uint32, TransportAnimation> TransportAnimationContainer;
class TransportMgr
{
- friend class ACE_Singleton<TransportMgr, ACE_Thread_Mutex>;
friend void LoadDBCStores(std::string const&);
public:
+ static TransportMgr* instance()
+ {
+ static TransportMgr instance;
+ return &instance;
+ }
+
void Unload();
void LoadTransportTemplates();
@@ -155,6 +159,6 @@ class TransportMgr
TransportAnimationContainer _transportAnimations;
};
-#define sTransportMgr ACE_Singleton<TransportMgr, ACE_Thread_Mutex>::instance()
+#define sTransportMgr TransportMgr::instance()
#endif // TRANSPORTMGR_H
diff --git a/src/server/game/Miscellaneous/Formulas.h b/src/server/game/Miscellaneous/Formulas.h
index 8d0e97dc765..e6ff1a0b40f 100644
--- a/src/server/game/Miscellaneous/Formulas.h
+++ b/src/server/game/Miscellaneous/Formulas.h
@@ -160,27 +160,32 @@ namespace Trinity
inline uint32 Gain(Player* player, Unit* u)
{
- uint32 gain;
+ Creature* creature = u->ToCreature();
+ uint32 gain = 0;
- if (u->GetTypeId() == TYPEID_UNIT &&
- (((Creature*)u)->IsTotem() || ((Creature*)u)->IsPet() ||
- (((Creature*)u)->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_XP_AT_KILL) ||
- ((Creature*)u)->GetCreatureTemplate()->type == CREATURE_TYPE_CRITTER))
- gain = 0;
- else
+ if (!creature || (!creature->IsTotem() && !creature->IsPet() && !creature->IsCritter() &&
+ !(creature->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_XP_AT_KILL)))
{
+ float xpMod = 1.0f;
+
gain = BaseGain(player->getLevel(), u->getLevel(), GetContentLevelsForMapAndZone(u->GetMapId(), u->GetZoneId()));
- if (gain != 0 && u->GetTypeId() == TYPEID_UNIT && ((Creature*)u)->isElite())
+ if (gain && creature)
{
- // Elites in instances have a 2.75x XP bonus instead of the regular 2x world bonus.
- if (u->GetMap() && u->GetMap()->IsDungeon())
- gain = uint32(gain * 2.75);
- else
- gain *= 2;
+ if (creature->isElite())
+ {
+ // Elites in instances have a 2.75x XP bonus instead of the regular 2x world bonus.
+ if (u->GetMap() && u->GetMap()->IsDungeon())
+ xpMod *= 2.75f;
+ else
+ xpMod *= 2.0f;
+ }
+
+ xpMod *= creature->GetCreatureTemplate()->ModExperience;
}
- gain = uint32(gain * sWorld->getRate(RATE_XP_KILL));
+ xpMod *= sWorld->getRate(RATE_XP_KILL);
+ gain = uint32(gain * xpMod);
}
sScriptMgr->OnGainCalculation(gain, player, u);
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index 3102e2c6854..f4d1bc03144 100644
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -19,6 +19,13 @@
#ifndef __TRINITY_LANGUAGE_H
#define __TRINITY_LANGUAGE_H
+enum BroadcastTextIds
+{
+ BROADCAST_TEXT_ACHIEVEMENT_EARNED = 29245,
+ BROADCAST_TEXT_CALL_FOR_HELP = 2541,
+ BROADCAST_TEXT_FLEE_FOR_ASSIST = 1150
+};
+
enum TrinityStrings
{
// for chat commands
@@ -753,7 +760,7 @@ enum TrinityStrings
LANG_NEED_CHARACTER_NAME = 807,
LANG_PLAYER_NOT_EXIST_OR_OFFLINE = 808,
LANG_ACCOUNT_FOR_PLAYER_NOT_FOUND = 809,
- LANG_ACHIEVEMENT_EARNED = 810,
+ // unused = 810,
LANG_GUILD_MASTER = 811,
LANG_GUILD_OFFICER = 812,
LANG_GUILD_VETERAN = 813,
@@ -1074,12 +1081,12 @@ enum TrinityStrings
LANG_GOINFO_NAME = 5027,
LANG_GOINFO_LOOTID = 5028,
LANG_COMMAND_LOOKUP_MAX_RESULTS = 5029,
- LANG_FLEE = 5030,
+ // unused = 5030,
LANG_NPCINFO_AIINFO = 5031,
LANG_COMMAND_NO_BATTLEGROUND_FOUND = 5032,
LANG_COMMAND_NO_ACHIEVEMENT_CRITERIA_FOUND = 5033,
LANG_COMMAND_NO_OUTDOOR_PVP_FORUND = 5034,
- LANG_CALL_FOR_HELP = 5035,
+ // unused = 5035,
LANG_NPCINFO_EQUIPMENT = 5036,
LANG_NPCINFO_MECHANIC_IMMUNE = 5037,
LANG_NPCINFO_UNIT_FIELD_FLAGS = 5038,
@@ -1129,59 +1136,6 @@ enum TrinityStrings
// Use for not-in-offcial-sources patches
// 10000-10999
- // opvp hp
- LANG_OPVP_HP_CAPTURE_OVERLOOK_H = 10001,
- LANG_OPVP_HP_CAPTURE_OVERLOOK_A = 10002,
- LANG_OPVP_HP_CAPTURE_STADIUM_H = 10003,
- LANG_OPVP_HP_CAPTURE_STADIUM_A = 10004,
- LANG_OPVP_HP_CAPTURE_BROKENHILL_H = 10005,
- LANG_OPVP_HP_CAPTURE_BROKENHILL_A = 10006,
- LANG_OPVP_HP_LOSE_OVERLOOK_H = 10007,
- LANG_OPVP_HP_LOSE_OVERLOOK_A = 10008,
- LANG_OPVP_HP_LOSE_STADIUM_H = 10009,
- LANG_OPVP_HP_LOSE_STADIUM_A = 10010,
- LANG_OPVP_HP_LOSE_BROKENHILL_H = 10011,
- LANG_OPVP_HP_LOSE_BROKENHILL_A = 10012,
- // opvp zm
- LANG_OPVP_ZM_CAPTURE_WEST_H = 10013,
- LANG_OPVP_ZM_CAPTURE_WEST_A = 10014,
- LANG_OPVP_ZM_CAPTURE_EAST_H = 10015,
- LANG_OPVP_ZM_CAPTURE_EAST_A = 10016,
- LANG_OPVP_ZM_CAPTURE_GY_H = 10017,
- LANG_OPVP_ZM_CAPTURE_GY_A = 10018,
- LANG_OPVP_ZM_LOSE_WEST_H = 10019,
- LANG_OPVP_ZM_LOSE_WEST_A = 10020,
- LANG_OPVP_ZM_LOSE_EAST_H = 10021,
- LANG_OPVP_ZM_LOSE_EAST_A = 10022,
- LANG_OPVP_ZM_LOSE_GY_H = 10023,
- LANG_OPVP_ZM_LOSE_GY_A = 10024,
- // opvp na
- LANG_OPVP_NA_CAPTURE_H = 10025,
- LANG_OPVP_NA_CAPTURE_A = 10026,
- LANG_OPVP_NA_LOSE_H = 10027,
- LANG_OPVP_NA_LOSE_A = 10028,
- // opvp tf
- LANG_OPVP_TF_CAPTURE_H = 10029,
- LANG_OPVP_TF_CAPTURE_A = 10030,
- LANG_OPVP_TF_LOSE_H = 10031,
- LANG_OPVP_TF_LOSE_A = 10032,
- // opvp ep
- LANG_OPVP_EP_CAPTURE_NPT_H = 10033,
- LANG_OPVP_EP_CAPTURE_NPT_A = 10034,
- LANG_OPVP_EP_CAPTURE_EWT_H = 10035,
- LANG_OPVP_EP_CAPTURE_EWT_A = 10036,
- LANG_OPVP_EP_CAPTURE_CGT_H = 10037,
- LANG_OPVP_EP_CAPTURE_CGT_A = 10038,
- LANG_OPVP_EP_CAPTURE_PWT_H = 10039,
- LANG_OPVP_EP_CAPTURE_PWT_A = 10040,
- LANG_OPVP_EP_LOSE_NPT_H = 10041,
- LANG_OPVP_EP_LOSE_NPT_A = 10042,
- LANG_OPVP_EP_LOSE_EWT_H = 10043,
- LANG_OPVP_EP_LOSE_EWT_A = 10044,
- LANG_OPVP_EP_LOSE_CGT_H = 10045,
- LANG_OPVP_EP_LOSE_CGT_A = 10046,
- LANG_OPVP_EP_LOSE_PWT_H = 10047,
- LANG_OPVP_EP_LOSE_PWT_A = 10048,
// opvp si
LANG_OPVP_SI_CAPTURE_H = 10049,
LANG_OPVP_SI_CAPTURE_A = 10050,
@@ -1195,21 +1149,11 @@ enum TrinityStrings
LANG_BG_SA_START_TWO_MINUTES = 10056,
LANG_BG_SA_START_ONE_MINUTE = 10057,
LANG_BG_SA_START_HALF_MINUTE = 10058,
- LANG_BG_SA_HAS_BEGUN = 10059,
- LANG_BG_SA_IS_UNDER_ATTACK = 10060, //The %s is under attack!
- LANG_BG_SA_WAS_DESTROYED = 10061, //The %s was destroyed!
- LANG_BG_SA_ROUND_ONE_END = 10062, //Round 1 - finished!
+ // unused 10059-10062
LANG_BG_SA_ALLIANCE_CAPTURED_RELIC = 10063, //The Alliance captured the titan portal!
LANG_BG_SA_HORDE_CAPTURED_RELIC = 10064, //The Horde captured the titan portal!
LANG_BG_SA_ROUND_TWO_ONE_MINUTE = 10065, //Round 2 of the Battle for the Strand of the Ancients begins in 1 minute.
LANG_BG_SA_ROUND_TWO_START_HALF_MINUTE = 10066, //Round 2 begins in 30 seconds. Prepare yourselves!
- LANG_BG_SA_CHAMBER_BREACHED = 10067, //The chamber has been breached! The titan relic is vulnerable!
- LANG_BG_SA_A_GY_SOUTH = 10068, //The Alliance captured the South Graveyard!
- LANG_BG_SA_A_GY_WEST = 10069, //The Alliance captured the West Graveyard!
- LANG_BG_SA_A_GY_EAST = 10070, //The Alliance captured the East Graveyard!
- LANG_BG_SA_H_GY_SOUTH = 10071, //The Horde captured the South Graveyard!
- LANG_BG_SA_H_GY_WEST = 10072, //The Horde captured the West Graveyard!
- LANG_BG_SA_H_GY_EAST = 10073, //The Horde captured the East Graveyard!
// Use for custom patches 11000-11999
LANG_AUTO_BROADCAST = 11000,
@@ -1227,6 +1171,9 @@ enum TrinityStrings
LANG_BAN_ACCOUNT_YOUBANNEDMESSAGE_WORLD = 11006,
LANG_BAN_ACCOUNT_YOUPERMBANNEDMESSAGE_WORLD = 11007,
+ LANG_NPCINFO_INHABIT_TYPE = 11008,
+ LANG_NPCINFO_FLAGS_EXTRA = 11009
+
// NOT RESERVED IDS 12000-1999999999
// `db_script_string` table index 2000000000-2000009999 (MIN_DB_SCRIPT_STRING_ID-MAX_DB_SCRIPT_STRING_ID)
// For other tables maybe 2000010000-2147483647 (max index)
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index b52e640afc7..5309229b0fc 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -19,8 +19,8 @@
#ifndef TRINITY_SHAREDDEFINES_H
#define TRINITY_SHAREDDEFINES_H
-#include "DetourNavMesh.h"
#include "Define.h"
+#include "DetourNavMesh.h"
#include <cassert>
enum SpellEffIndex
@@ -41,7 +41,8 @@ enum LootModes
LOOT_MODE_HARD_MODE_1 = 0x2,
LOOT_MODE_HARD_MODE_2 = 0x4,
LOOT_MODE_HARD_MODE_3 = 0x8,
- LOOT_MODE_HARD_MODE_4 = 0x10
+ LOOT_MODE_HARD_MODE_4 = 0x10,
+ LOOT_MODE_JUNK_FISH = 0x8000
};
enum Expansions
@@ -396,7 +397,7 @@ enum SpellAttr3
SPELL_ATTR3_MAIN_HAND = 0x00000400, // 10 Main hand weapon required
SPELL_ATTR3_BATTLEGROUND = 0x00000800, // 11 Can only be cast in battleground
SPELL_ATTR3_ONLY_TARGET_GHOSTS = 0x00001000, // 12
- SPELL_ATTR3_UNK13 = 0x00002000, // 13
+ SPELL_ATTR3_DONT_DISPLAY_CHANNEL_BAR = 0x00002000, // 13 Clientside attribute - will not display channeling bar
SPELL_ATTR3_IS_HONORLESS_TARGET = 0x00004000, // 14 "Honorless Target" only this spells have this flag
SPELL_ATTR3_UNK15 = 0x00008000, // 15 Auto Shoot, Shoot, Throw, - this is autoshot flag
SPELL_ATTR3_CANT_TRIGGER_PROC = 0x00010000, // 16 confirmed with many patchnotes
@@ -427,7 +428,7 @@ enum SpellAttr4
SPELL_ATTR4_UNK5 = 0x00000020, // 5
SPELL_ATTR4_NOT_STEALABLE = 0x00000040, // 6 although such auras might be dispellable, they cannot be stolen
SPELL_ATTR4_TRIGGERED = 0x00000080, // 7 spells forced to be triggered
- SPELL_ATTR4_FIXED_DAMAGE = 0x00000100, // 8 ignores taken percent damage mods?
+ SPELL_ATTR4_FIXED_DAMAGE = 0x00000100, // 8 Ignores resilience and any (except mechanic related) damage or % damage taken auras on target.
SPELL_ATTR4_TRIGGER_ACTIVATE = 0x00000200, // 9 initially disabled / trigger activate from event (Execute, Riposte, Deep Freeze end other)
SPELL_ATTR4_SPELL_VS_EXTEND_COST = 0x00000400, // 10 Rogue Shiv have this flag
SPELL_ATTR4_UNK11 = 0x00000800, // 11
@@ -528,12 +529,12 @@ enum SpellAttr6
enum SpellAttr7
{
SPELL_ATTR7_UNK0 = 0x00000001, // 0 Shaman's new spells (Call of the ...), Feign Death.
- SPELL_ATTR7_UNK1 = 0x00000002, // 1 Not set in 3.2.2a.
+ SPELL_ATTR7_IGNORE_DURATION_MODS = 0x00000002, // 1 Duration is not affected by duration modifiers
SPELL_ATTR7_REACTIVATE_AT_RESURRECT = 0x00000004, // 2 Paladin's auras and 65607 only.
SPELL_ATTR7_IS_CHEAT_SPELL = 0x00000008, // 3 Cannot cast if caster doesn't have UnitFlag2 & UNIT_FLAG2_ALLOW_CHEAT_SPELLS
SPELL_ATTR7_UNK4 = 0x00000010, // 4 Only 47883 (Soulstone Resurrection) and test spell.
SPELL_ATTR7_SUMMON_PLAYER_TOTEM = 0x00000020, // 5 Only Shaman player totems.
- SPELL_ATTR7_UNK6 = 0x00000040, // 6 Dark Surge, Surge of Light, Burning Breath triggers (boss spells).
+ SPELL_ATTR7_NO_PUSHBACK_ON_DAMAGE = 0x00000040, // 6 Does not cause spell pushback on damage
SPELL_ATTR7_UNK7 = 0x00000080, // 7 66218 (Launch) spell.
SPELL_ATTR7_HORDE_ONLY = 0x00000100, // 8 Teleports, mounts and other spells.
SPELL_ATTR7_ALLIANCE_ONLY = 0x00000200, // 9 Teleports, mounts and other spells.
@@ -543,7 +544,7 @@ enum SpellAttr7
SPELL_ATTR7_UNK13 = 0x00002000, // 13 Not set in 3.2.2a.
SPELL_ATTR7_UNK14 = 0x00004000, // 14 Only 52150 (Raise Dead - Pet) spell.
SPELL_ATTR7_UNK15 = 0x00008000, // 15 Exorcism. Usable on players? 100% crit chance on undead and demons?
- SPELL_ATTR7_UNK16 = 0x00010000, // 16 Druid spells (29166, 54833, 64372, 68285).
+ SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER = 0x00010000, // 16 These spells can replenish a powertype, which is not the current powertype.
SPELL_ATTR7_UNK17 = 0x00020000, // 17 Only 27965 (Suicide) spell.
SPELL_ATTR7_HAS_CHARGE_EFFECT = 0x00040000, // 18 Only spells that have Charge among effects.
SPELL_ATTR7_ZONE_TELEPORT = 0x00080000, // 19 Teleports to specific zones.
@@ -1129,7 +1130,7 @@ enum SpellCustomErrors
SPELL_CUSTOM_ERROR_95 = 95, // ""
SPELL_CUSTOM_ERROR_MAX_NUMBER_OF_RECRUITS = 96, // You already have the max number of recruits.
SPELL_CUSTOM_ERROR_MAX_NUMBER_OF_VOLUNTEERS = 97, // You already have the max number of volunteers.
- SPELL_CUSTOM_ERROR_FROSTMOURNE_RENDERED_RESSURECT = 98, // Frostmourne has rendered you unable to ressurect.
+ SPELL_CUSTOM_ERROR_FROSTMOURNE_RENDERED_RESURRECT = 98, // Frostmourne has rendered you unable to resurrect.
SPELL_CUSTOM_ERROR_CANT_MOUNT_WITH_SHAPESHIFT = 99 // You can't mount while affected by that shapeshift.
};
@@ -2594,7 +2595,7 @@ enum CreatureTypeFlags
CREATURE_TYPEFLAGS_EXOTIC = 0x00010000, // Can be tamed by hunter as exotic pet
CREATURE_TYPEFLAGS_UNK17 = 0x00020000, // ? Related to vehicles/pvp?
CREATURE_TYPEFLAGS_UNK18 = 0x00040000, // ? Related to vehicle/siege weapons?
- CREATURE_TYPEFLAGS_UNK19 = 0x00080000,
+ CREATURE_TYPEFLAGS_PROJECTILE_COLLISION = 0x00080000, // Projectiles can collide with this creature - interacts with TARGET_DEST_TRAJ
CREATURE_TYPEFLAGS_UNK20 = 0x00100000,
CREATURE_TYPEFLAGS_UNK21 = 0x00200000,
CREATURE_TYPEFLAGS_UNK22 = 0x00400000,
@@ -3308,6 +3309,15 @@ enum BanReturn
BAN_NOTFOUND
};
+enum BattlegroundTeamId
+{
+ BG_TEAM_HORDE = 0, // Battleground: Horde, Arena: Green
+ BG_TEAM_ALLIANCE = 1, // Battleground: Alliance, Arena: Gold
+ BG_TEAM_NEUTRAL = 2 // Battleground: Neutral, Arena: None
+};
+
+#define BG_TEAMS_COUNT 2
+
// indexes of BattlemasterList.dbc
enum BattlegroundTypeId
{
@@ -3390,7 +3400,7 @@ enum TradeStatus
TRADE_STATUS_NO_TARGET = 6,
TRADE_STATUS_BACK_TO_TRADE = 7,
TRADE_STATUS_TRADE_COMPLETE = 8,
- // 9?
+ TRADE_STATUS_TRADE_REJECTED = 9,
TRADE_STATUS_TARGET_TO_FAR = 10,
TRADE_STATUS_WRONG_FACTION = 11,
TRADE_STATUS_CLOSE_WINDOW = 12,
@@ -3403,8 +3413,8 @@ enum TradeStatus
TRADE_STATUS_YOU_LOGOUT = 19,
TRADE_STATUS_TARGET_LOGOUT = 20,
TRADE_STATUS_TRIAL_ACCOUNT = 21, // Trial accounts can not perform that action
- TRADE_STATUS_ONLY_CONJURED = 22, // You can only trade conjured items... (cross realm BG related).
- TRADE_STATUS_NOT_ELIGIBLE = 23 // Related to trading soulbound loot items
+ TRADE_STATUS_WRONG_REALM = 22, // You can only trade conjured items... (cross realm BG related).
+ TRADE_STATUS_NOT_ON_TAPLIST = 23 // Related to trading soulbound loot items
};
enum XPColorChar
@@ -3447,6 +3457,7 @@ enum DuelCompleteType
DUEL_WON = 1,
DUEL_FLED = 2
};
+
// handle the queue types and bg types separately to enable joining queue for different sized arenas at the same time
enum BattlegroundQueueTypeId
{
diff --git a/src/server/game/Movement/FollowerReference.h b/src/server/game/Movement/FollowerReference.h
index a97104ce72c..ee6901dc2d7 100644
--- a/src/server/game/Movement/FollowerReference.h
+++ b/src/server/game/Movement/FollowerReference.h
@@ -27,8 +27,8 @@ class Unit;
class FollowerReference : public Reference<Unit, TargetedMovementGeneratorBase>
{
protected:
- void targetObjectBuildLink();
- void targetObjectDestroyLink();
- void sourceObjectDestroyLink();
+ void targetObjectBuildLink() override;
+ void targetObjectDestroyLink() override;
+ void sourceObjectDestroyLink() override;
};
#endif
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp
index 55f745d993b..4ba742e9397 100644
--- a/src/server/game/Movement/MotionMaster.cpp
+++ b/src/server/game/Movement/MotionMaster.cpp
@@ -345,7 +345,7 @@ void MotionMaster::MoveKnockbackFrom(float srcX, float srcY, float speedXY, floa
float dist = 2 * moveTimeHalf * speedXY;
float max_height = -Movement::computeFallElevation(moveTimeHalf, false, -speedZ);
- _owner->GetNearPoint(_owner, x, y, z, _owner->GetObjectSize(), dist, _owner->GetAngle(srcX, srcY) + M_PI);
+ _owner->GetNearPoint(_owner, x, y, z, _owner->GetObjectSize(), dist, _owner->GetAngle(srcX, srcY) + float(M_PI));
Movement::MoveSplineInit init(_owner);
init.MoveTo(x, y, z);
@@ -399,7 +399,7 @@ void MotionMaster::MoveFall(uint32 id /*=0*/)
}
// Abort too if the ground is very near
- if (fabs(_owner->GetPositionZ() - tz) < 0.1f)
+ if (std::fabs(_owner->GetPositionZ() - tz) < 0.1f)
return;
if (_owner->GetTypeId() == TYPEID_PLAYER)
diff --git a/src/server/game/Movement/MovementGenerator.h b/src/server/game/Movement/MovementGenerator.h
index f545f9fd314..d87344ba089 100755
--- a/src/server/game/Movement/MovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerator.h
@@ -20,7 +20,6 @@
#define TRINITY_MOVEMENTGENERATOR_H
#include "Define.h"
-#include <ace/Singleton.h>
#include "ObjectRegistry.h"
#include "FactoryHolder.h"
#include "Common.h"
@@ -52,25 +51,25 @@ template<class T, class D>
class MovementGeneratorMedium : public MovementGenerator
{
public:
- void Initialize(Unit* u)
+ void Initialize(Unit* u) override
{
//u->AssertIsType<T>();
(static_cast<D*>(this))->DoInitialize(static_cast<T*>(u));
}
- void Finalize(Unit* u)
+ void Finalize(Unit* u) override
{
//u->AssertIsType<T>();
(static_cast<D*>(this))->DoFinalize(static_cast<T*>(u));
}
- void Reset(Unit* u)
+ void Reset(Unit* u) override
{
//u->AssertIsType<T>();
(static_cast<D*>(this))->DoReset(static_cast<T*>(u));
}
- bool Update(Unit* u, uint32 time_diff)
+ bool Update(Unit* u, uint32 time_diff) override
{
//u->AssertIsType<T>();
return (static_cast<D*>(this))->DoUpdate(static_cast<T*>(u), time_diff);
@@ -87,10 +86,9 @@ struct MovementGeneratorFactory : public SelectableMovement
{
MovementGeneratorFactory(MovementGeneratorType mgt) : SelectableMovement(mgt) { }
- MovementGenerator* Create(void *) const;
+ MovementGenerator* Create(void *) const override;
};
typedef FactoryHolder<MovementGenerator, MovementGeneratorType> MovementGeneratorCreator;
typedef FactoryHolder<MovementGenerator, MovementGeneratorType>::FactoryHolderRegistry MovementGeneratorRegistry;
-typedef FactoryHolder<MovementGenerator, MovementGeneratorType>::FactoryHolderRepository MovementGeneratorRepository;
#endif
diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
index 61f3a04bc5d..2ab408965c1 100755
--- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
@@ -118,7 +118,7 @@ void ConfusedMovementGenerator<Creature>::DoFinalize(Creature* unit)
unit->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED);
unit->ClearUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE);
if (unit->GetVictim())
- unit->SetTarget(unit->GetVictim()->GetGUID());
+ unit->SetTarget(unit->EnsureVictim()->GetGUID());
}
template void ConfusedMovementGenerator<Player>::DoInitialize(Player*);
diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
index 572d65b07c7..95320865d0b 100644
--- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
@@ -45,8 +45,7 @@ void FleeingMovementGenerator<T>::_setTargetLocation(T* owner)
_getPoint(owner, x, y, z);
// Add LOS check for target point
- Position mypos;
- owner->GetPosition(&mypos);
+ Position mypos = owner->GetPosition();
bool isInLOS = VMAP::VMapFactory::createOrGetVMapManager()->isInLineOfSight(owner->GetMapId(),
mypos.m_positionX,
mypos.m_positionY,
@@ -109,8 +108,7 @@ void FleeingMovementGenerator<T>::_getPoint(T* owner, float &x, float &y, float
angle = frand(0, 2*static_cast<float>(M_PI));
}
- Position pos;
- owner->GetFirstCollisionPosition(pos, dist, angle);
+ Position pos = owner->GetFirstCollisionPosition(dist, angle);
x = pos.m_positionX;
y = pos.m_positionY;
z = pos.m_positionZ;
@@ -141,7 +139,7 @@ void FleeingMovementGenerator<Creature>::DoFinalize(Creature* owner)
owner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING);
owner->ClearUnitState(UNIT_STATE_FLEEING|UNIT_STATE_FLEEING_MOVE);
if (owner->GetVictim())
- owner->SetTarget(owner->GetVictim()->GetGUID());
+ owner->SetTarget(owner->EnsureVictim()->GetGUID());
}
template<class T>
diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h
index ba8e228873f..c3bcfffb2a7 100755
--- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h
@@ -49,9 +49,9 @@ class TimedFleeingMovementGenerator : public FleeingMovementGenerator<Creature>
FleeingMovementGenerator<Creature>(fright),
i_totalFleeTime(time) { }
- MovementGeneratorType GetMovementGeneratorType() { return TIMED_FLEEING_MOTION_TYPE; }
- bool Update(Unit*, uint32);
- void Finalize(Unit*);
+ MovementGeneratorType GetMovementGeneratorType() override { return TIMED_FLEEING_MOTION_TYPE; }
+ bool Update(Unit*, uint32) override;
+ void Finalize(Unit*) override;
private:
TimeTracker i_totalFleeTime;
diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h
index abe97e21536..8e0b0e335c4 100644
--- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h
@@ -38,7 +38,7 @@ class HomeMovementGenerator<Creature> : public MovementGeneratorMedium< Creature
void DoFinalize(Creature*);
void DoReset(Creature*);
bool DoUpdate(Creature*, const uint32);
- MovementGeneratorType GetMovementGeneratorType() { return HOME_MOTION_TYPE; }
+ MovementGeneratorType GetMovementGeneratorType() override { return HOME_MOTION_TYPE; }
private:
void _setTargetLocation(Creature*);
diff --git a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h
index bdf9d52b93a..0cd9b2777b4 100755
--- a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h
@@ -25,11 +25,11 @@ class IdleMovementGenerator : public MovementGenerator
{
public:
- void Initialize(Unit*);
- void Finalize(Unit*) { }
- void Reset(Unit*);
- bool Update(Unit*, uint32) { return true; }
- MovementGeneratorType GetMovementGeneratorType() { return IDLE_MOTION_TYPE; }
+ void Initialize(Unit*) override;
+ void Finalize(Unit*) override { }
+ void Reset(Unit*) override;
+ bool Update(Unit*, uint32) override { return true; }
+ MovementGeneratorType GetMovementGeneratorType() override { return IDLE_MOTION_TYPE; }
};
extern IdleMovementGenerator si_idleMovement;
@@ -39,11 +39,11 @@ class RotateMovementGenerator : public MovementGenerator
public:
explicit RotateMovementGenerator(uint32 time, RotateDirection direction) : m_duration(time), m_maxDuration(time), m_direction(direction) { }
- void Initialize(Unit*);
- void Finalize(Unit*);
- void Reset(Unit* owner) { Initialize(owner); }
- bool Update(Unit*, uint32);
- MovementGeneratorType GetMovementGeneratorType() { return ROTATE_MOTION_TYPE; }
+ void Initialize(Unit*) override;
+ void Finalize(Unit*) override;
+ void Reset(Unit* owner) override { Initialize(owner); }
+ bool Update(Unit*, uint32) override;
+ MovementGeneratorType GetMovementGeneratorType() override { return ROTATE_MOTION_TYPE; }
private:
uint32 m_duration, m_maxDuration;
@@ -55,11 +55,11 @@ class DistractMovementGenerator : public MovementGenerator
public:
explicit DistractMovementGenerator(uint32 timer) : m_timer(timer) { }
- void Initialize(Unit*);
- void Finalize(Unit*);
- void Reset(Unit* owner) { Initialize(owner); }
- bool Update(Unit*, uint32);
- MovementGeneratorType GetMovementGeneratorType() { return DISTRACT_MOTION_TYPE; }
+ void Initialize(Unit*) override;
+ void Finalize(Unit*) override;
+ void Reset(Unit* owner) override { Initialize(owner); }
+ bool Update(Unit*, uint32) override;
+ MovementGeneratorType GetMovementGeneratorType() override { return DISTRACT_MOTION_TYPE; }
private:
uint32 m_timer;
@@ -71,8 +71,8 @@ class AssistanceDistractMovementGenerator : public DistractMovementGenerator
AssistanceDistractMovementGenerator(uint32 timer) :
DistractMovementGenerator(timer) { }
- MovementGeneratorType GetMovementGeneratorType() { return ASSISTANCE_DISTRACT_MOTION_TYPE; }
- void Finalize(Unit*);
+ MovementGeneratorType GetMovementGeneratorType() override { return ASSISTANCE_DISTRACT_MOTION_TYPE; }
+ void Finalize(Unit*) override;
};
#endif
diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h
index c596b406cf3..3c5b33f3736 100644
--- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h
@@ -55,8 +55,8 @@ class AssistanceMovementGenerator : public PointMovementGenerator<Creature>
AssistanceMovementGenerator(float _x, float _y, float _z) :
PointMovementGenerator<Creature>(0, _x, _y, _z, true) { }
- MovementGeneratorType GetMovementGeneratorType() { return ASSISTANCE_MOTION_TYPE; }
- void Finalize(Unit*);
+ MovementGeneratorType GetMovementGeneratorType() override { return ASSISTANCE_MOTION_TYPE; }
+ void Finalize(Unit*) override;
};
// Does almost nothing - just doesn't allows previous movegen interrupt current effect.
@@ -64,11 +64,11 @@ class EffectMovementGenerator : public MovementGenerator
{
public:
explicit EffectMovementGenerator(uint32 Id) : m_Id(Id) { }
- void Initialize(Unit*) { }
- void Finalize(Unit*);
- void Reset(Unit*) { }
- bool Update(Unit*, uint32);
- MovementGeneratorType GetMovementGeneratorType() { return EFFECT_MOTION_TYPE; }
+ 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;
};
diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
index 95c342b70b3..dbe8c8b0329 100644
--- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
@@ -61,7 +61,7 @@ void RandomMovementGenerator<Creature>::_setRandomLocation(Creature* creature)
if (is_air_ok) // 3D system above ground and above water (flying mode)
{
// Limit height change
- const float distanceZ = float(rand_norm()) * sqrtf(travelDistZ)/2.0f;
+ const float distanceZ = float(rand_norm()) * std::sqrt(travelDistZ)/2.0f;
destZ = respZ + distanceZ;
float levelZ = map->GetWaterOrGroundLevel(destX, destY, destZ-2.0f);
@@ -73,24 +73,24 @@ void RandomMovementGenerator<Creature>::_setRandomLocation(Creature* creature)
else // 2D only
{
// 10.0 is the max that vmap high can check (MAX_CAN_FALL_DISTANCE)
- travelDistZ = travelDistZ >= 100.0f ? 10.0f : sqrtf(travelDistZ);
+ travelDistZ = travelDistZ >= 100.0f ? 10.0f : std::sqrt(travelDistZ);
// The fastest way to get an accurate result 90% of the time.
// Better result can be obtained like 99% accuracy with a ray light, but the cost is too high and the code is too long.
destZ = map->GetHeight(creature->GetPhaseMask(), destX, destY, respZ+travelDistZ-2.0f, false);
- if (fabs(destZ - respZ) > travelDistZ) // Map check
+ if (std::fabs(destZ - respZ) > travelDistZ) // Map check
{
// Vmap Horizontal or above
destZ = map->GetHeight(creature->GetPhaseMask(), destX, destY, respZ - 2.0f, true);
- if (fabs(destZ - respZ) > travelDistZ)
+ if (std::fabs(destZ - respZ) > travelDistZ)
{
// Vmap Higher
destZ = map->GetHeight(creature->GetPhaseMask(), destX, destY, respZ+travelDistZ-2.0f, true);
// let's forget this bad coords where a z cannot be find and retry at next tick
- if (fabs(destZ - respZ) > travelDistZ)
+ if (std::fabs(destZ - respZ) > travelDistZ)
return;
}
}
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
index c181750a414..4061998d47a 100755
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
@@ -161,12 +161,30 @@ bool WaypointMovementGenerator<Creature>::StartMove(Creature* creature)
if (node->orientation && node->delay)
init.SetFacing(node->orientation);
- init.SetWalk(!node->run);
+ switch (node->move_type)
+ {
+ case WAYPOINT_MOVE_TYPE_LAND:
+ init.SetAnimation(Movement::ToGround);
+ break;
+ case WAYPOINT_MOVE_TYPE_TAKEOFF:
+ init.SetAnimation(Movement::ToFly);
+ break;
+ case WAYPOINT_MOVE_TYPE_RUN:
+ init.SetWalk(false);
+ break;
+ case WAYPOINT_MOVE_TYPE_WALK:
+ init.SetWalk(true);
+ break;
+ }
+
init.Launch();
//Call for creature group update
if (creature->GetFormation() && creature->GetFormation()->getLeader() == creature)
+ {
+ creature->SetWalk(node->move_type != WAYPOINT_MOVE_TYPE_RUN);
creature->GetFormation()->LeaderMoveTo(formationDest.x, formationDest.y, formationDest.z);
+ }
return true;
}
@@ -191,6 +209,10 @@ bool WaypointMovementGenerator<Creature>::DoUpdate(Creature* creature, uint32 di
}
else
{
+ // Set home position at place on waypoint movement.
+ if (!creature->HasUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT) || !creature->GetTransGUID())
+ creature->SetHomePosition(creature->GetPosition());
+
if (creature->IsStopped())
Stop(STOP_TIME_FOR_PLAYER);
else if (creature->movespline->Finalized())
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
index 9b5fe14b9d6..85c39fe0830 100755
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
@@ -72,7 +72,7 @@ class WaypointMovementGenerator<Creature> : public MovementGeneratorMedium< Crea
void MovementInform(Creature*);
- MovementGeneratorType GetMovementGeneratorType() { return WAYPOINT_MOTION_TYPE; }
+ MovementGeneratorType GetMovementGeneratorType() override { return WAYPOINT_MOTION_TYPE; }
// now path movement implmementation
void LoadPath(Creature*);
@@ -126,7 +126,7 @@ class FlightPathMovementGenerator : public MovementGeneratorMedium< Player, Flig
void DoReset(Player*);
void DoFinalize(Player*);
bool DoUpdate(Player*, uint32);
- MovementGeneratorType GetMovementGeneratorType() { return FLIGHT_MOTION_TYPE; }
+ MovementGeneratorType GetMovementGeneratorType() override { return FLIGHT_MOTION_TYPE; }
TaxiPathNodeList const& GetPath() { return *i_path; }
uint32 GetPathAtMapEnd() const;
diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp
index d6912bac7c8..cbf88b68028 100644
--- a/src/server/game/Movement/PathGenerator.cpp
+++ b/src/server/game/Movement/PathGenerator.cpp
@@ -477,11 +477,29 @@ void PathGenerator::BuildPointPath(const float *startPoint, const float *endPoin
dtStatus dtResult = DT_FAILURE;
if (_straightLine)
{
- // if the path is a straight line then start and end position are enough
dtResult = DT_SUCCESS;
- pointCount = 2;
- memcpy(&pathPoints[0], startPoint, sizeof(float)* 3);
- memcpy(&pathPoints[3], endPoint, sizeof(float)* 3);
+ pointCount = 1;
+ memcpy(&pathPoints[VERTEX_SIZE * 0], startPoint, sizeof(float)* 3); // first point
+
+ // path has to be split into polygons with dist SMOOTH_PATH_STEP_SIZE between them
+ G3D::Vector3 startVec = G3D::Vector3(startPoint[0], startPoint[1], startPoint[2]);
+ G3D::Vector3 endVec = G3D::Vector3(endPoint[0], endPoint[1], endPoint[2]);
+ G3D::Vector3 diffVec = (endVec - startVec);
+ G3D::Vector3 prevVec = startVec;
+ float len = diffVec.length();
+ diffVec *= SMOOTH_PATH_STEP_SIZE / len;
+ while (len > SMOOTH_PATH_STEP_SIZE)
+ {
+ len -= SMOOTH_PATH_STEP_SIZE;
+ prevVec += diffVec;
+ pathPoints[VERTEX_SIZE * pointCount + 0] = prevVec.x;
+ pathPoints[VERTEX_SIZE * pointCount + 1] = prevVec.y;
+ pathPoints[VERTEX_SIZE * pointCount + 2] = prevVec.z;
+ ++pointCount;
+ }
+
+ memcpy(&pathPoints[VERTEX_SIZE * pointCount], endPoint, sizeof(float)* 3); // last point
+ ++pointCount;
}
else if (_useStraightPath)
{
@@ -775,8 +793,8 @@ dtStatus PathGenerator::FindSmoothPath(float const* startPos, float const* endPo
if (!GetSteerTarget(iterPos, targetPos, SMOOTH_PATH_SLOP, polys, npolys, steerPos, steerPosFlag, steerPosRef))
break;
- bool endOfPath = (steerPosFlag & DT_STRAIGHTPATH_END);
- bool offMeshConnection = (steerPosFlag & DT_STRAIGHTPATH_OFFMESH_CONNECTION);
+ bool endOfPath = (steerPosFlag & DT_STRAIGHTPATH_END) != 0;
+ bool offMeshConnection = (steerPosFlag & DT_STRAIGHTPATH_OFFMESH_CONNECTION) != 0;
// Find movement delta.
float delta[VERTEX_SIZE];
@@ -882,3 +900,41 @@ float PathGenerator::Dist3DSqr(G3D::Vector3 const& p1, G3D::Vector3 const& p2) c
{
return (p1 - p2).squaredLength();
}
+
+void PathGenerator::ReducePathLenghtByDist(float dist)
+{
+ if (GetPathType() == PATHFIND_BLANK)
+ {
+ TC_LOG_ERROR("maps", "PathGenerator::ReducePathLenghtByDist called before path was built");
+ return;
+ }
+
+ if (_pathPoints.size() < 2) // path building failure
+ return;
+
+ uint32 i = _pathPoints.size();
+ G3D::Vector3 nextVec = _pathPoints[--i];
+ while (i > 0)
+ {
+ G3D::Vector3 currVec = _pathPoints[--i];
+ G3D::Vector3 diffVec = (nextVec - currVec);
+ float len = diffVec.length();
+ if (len > dist)
+ {
+ float step = dist / len;
+ // same as nextVec
+ _pathPoints[i + 1] -= diffVec * step;
+ _pathPoints.resize(i + 2);
+ break;
+ }
+ else if (i == 0) // at second point
+ {
+ _pathPoints[1] = _pathPoints[0];
+ _pathPoints.resize(2);
+ break;
+ }
+
+ dist -= len;
+ nextVec = currVec; // we're going backwards
+ }
+}
diff --git a/src/server/game/Movement/PathGenerator.h b/src/server/game/Movement/PathGenerator.h
index 6e0d72ec8da..a9a13c37251 100644
--- a/src/server/game/Movement/PathGenerator.h
+++ b/src/server/game/Movement/PathGenerator.h
@@ -72,6 +72,8 @@ class PathGenerator
PathType GetPathType() const { return _type; }
+ void ReducePathLenghtByDist(float dist); // path must be already built
+
private:
dtPolyRef _pathPolyRefs[MAX_PATH_LENGTH]; // array of detour polygon references
diff --git a/src/server/game/Movement/Spline/MoveSpline.cpp b/src/server/game/Movement/Spline/MoveSpline.cpp
index 7291c6849c5..d3fa03c1238 100644
--- a/src/server/game/Movement/Spline/MoveSpline.cpp
+++ b/src/server/game/Movement/Spline/MoveSpline.cpp
@@ -47,7 +47,7 @@ Location MoveSpline::ComputePosition() const
if (splineflags.final_angle)
c.orientation = facing.angle;
else if (splineflags.final_point)
- c.orientation = atan2(facing.f.y - c.y, facing.f.x - c.x);
+ c.orientation = std::atan2(facing.f.y - c.y, facing.f.x - c.x);
//nothing to do for MoveSplineFlag::Final_Target flag
}
else
@@ -56,7 +56,7 @@ Location MoveSpline::ComputePosition() const
{
Vector3 hermite;
spline.evaluate_derivative(point_Idx, u, hermite);
- c.orientation = atan2(hermite.y, hermite.x);
+ c.orientation = std::atan2(hermite.y, hermite.x);
}
if (splineflags.orientationInversed)
@@ -226,7 +226,7 @@ bool MoveSplineInitArgs::_checkPathBounds() const
for (uint32 i = 1; i < path.size()-1; ++i)
{
offset = path[i] - middle;
- if (fabs(offset.x) >= MAX_OFFSET || fabs(offset.y) >= MAX_OFFSET || fabs(offset.z) >= MAX_OFFSET)
+ if (std::fabs(offset.x) >= MAX_OFFSET || std::fabs(offset.y) >= MAX_OFFSET || std::fabs(offset.z) >= MAX_OFFSET)
{
TC_LOG_ERROR("misc", "MoveSplineInitArgs::_checkPathBounds check failed");
return false;
diff --git a/src/server/game/Movement/Spline/MoveSplineFlag.h b/src/server/game/Movement/Spline/MoveSplineFlag.h
index 2cac9034c84..62fe808b6f5 100644
--- a/src/server/game/Movement/Spline/MoveSplineFlag.h
+++ b/src/server/game/Movement/Spline/MoveSplineFlag.h
@@ -83,9 +83,9 @@ namespace Movement
// Constant interface
- bool isSmooth() const { return raw() & Mask_CatmullRom; }
+ bool isSmooth() const { return (raw() & Mask_CatmullRom) != 0; }
bool isLinear() const { return !isSmooth(); }
- bool isFacing() const { return raw() & Mask_Final_Facing; }
+ bool isFacing() const { return (raw() & Mask_Final_Facing) != 0; }
uint8 getAnimationId() const { return animId; }
bool hasAllFlags(uint32 f) const { return (raw() & f) == f; }
diff --git a/src/server/game/Movement/Spline/MovementTypedefs.h b/src/server/game/Movement/Spline/MovementTypedefs.h
index 22850036b61..031ec729949 100644
--- a/src/server/game/Movement/Spline/MovementTypedefs.h
+++ b/src/server/game/Movement/Spline/MovementTypedefs.h
@@ -23,14 +23,12 @@
namespace G3D
{
- class Vector2;
class Vector3;
class Vector4;
}
namespace Movement
{
- using G3D::Vector2;
using G3D::Vector3;
using G3D::Vector4;
@@ -71,7 +69,7 @@ namespace Movement
typedef counter<uint32, 0xFFFFFFFF> UInt32Counter;
- extern double gravity;
+ extern float gravity;
extern UInt32Counter splineIdGen;
}
diff --git a/src/server/game/Movement/Spline/MovementUtil.cpp b/src/server/game/Movement/Spline/MovementUtil.cpp
index 375859263ab..7e63f029fd4 100644
--- a/src/server/game/Movement/Spline/MovementUtil.cpp
+++ b/src/server/game/Movement/Spline/MovementUtil.cpp
@@ -17,12 +17,12 @@
*/
#include "MoveSplineFlag.h"
-#include <math.h>
+#include <cmath>
#include <string>
namespace Movement
{
- double gravity = 19.29110527038574;
+ float gravity = static_cast<float>(19.29110527038574);
UInt32Counter splineIdGen;
/// Velocity bounds that makes fall speed limited
@@ -45,14 +45,14 @@ namespace Movement
if (path_length >= terminal_safeFall_length)
time = (path_length - terminal_safeFall_length) / terminalSafefallVelocity + terminal_safeFall_fallTime;
else
- time = sqrtf(2.0f * path_length / gravity);
+ time = std::sqrt(2.0f * path_length / gravity);
}
else
{
if (path_length >= terminal_length)
time = (path_length - terminal_length) / terminalVelocity + terminal_fallTime;
else
- time = sqrtf(2.0f * path_length / gravity);
+ time = std::sqrt(2.0f * path_length / gravity);
}
return time;
diff --git a/src/server/game/Movement/Spline/Spline.cpp b/src/server/game/Movement/Spline/Spline.cpp
index 6424afc5d6e..b8a028b6fc0 100644
--- a/src/server/game/Movement/Spline/Spline.cpp
+++ b/src/server/game/Movement/Spline/Spline.cpp
@@ -165,7 +165,7 @@ float SplineBase::SegLengthCatmullRom(index_type index) const
curPos = nextPos = p[1];
index_type i = 1;
- double length = 0;
+ float length = 0;
while (i <= STEPS_PER_SEGMENT)
{
C_Evaluate(p, float(i) / float(STEPS_PER_SEGMENT), s_catmullRomCoeffs, nextPos);
@@ -188,7 +188,7 @@ float SplineBase::SegLengthBezier3(index_type index) const
curPos = nextPos;
index_type i = 1;
- double length = 0;
+ float length = 0;
while (i <= STEPS_PER_SEGMENT)
{
C_Evaluate(p, float(i) / float(STEPS_PER_SEGMENT), s_Bezier3Coeffs, nextPos);
diff --git a/src/server/game/Movement/Waypoints/Path.h b/src/server/game/Movement/Waypoints/Path.h
index 4c275cbc15d..c7e701c49ad 100644
--- a/src/server/game/Movement/Waypoints/Path.h
+++ b/src/server/game/Movement/Waypoints/Path.h
@@ -63,7 +63,7 @@ class Path
float xd = node.x - prev.x;
float yd = node.y - prev.y;
float zd = node.z - prev.z;
- len += sqrtf(xd*xd + yd*yd + zd*zd);
+ len += std::sqrt(xd*xd + yd*yd + zd*zd);
}
return len;
}
@@ -80,7 +80,7 @@ class Path
float xd = x - node.x;
float yd = y - node.y;
float zd = z - node.z;
- len += sqrtf(xd*xd + yd*yd + zd*zd);
+ len += std::sqrt(xd*xd + yd*yd + zd*zd);
}
return len;
diff --git a/src/server/game/Movement/Waypoints/WaypointManager.cpp b/src/server/game/Movement/Waypoints/WaypointManager.cpp
index f7cb147a148..21af63868db 100644
--- a/src/server/game/Movement/Waypoints/WaypointManager.cpp
+++ b/src/server/game/Movement/Waypoints/WaypointManager.cpp
@@ -42,7 +42,7 @@ void WaypointMgr::Load()
uint32 oldMSTime = getMSTime();
// 0 1 2 3 4 5 6 7 8 9
- QueryResult result = WorldDatabase.Query("SELECT id, point, position_x, position_y, position_z, orientation, move_flag, delay, action, action_chance FROM waypoint_data ORDER BY id, point");
+ QueryResult result = WorldDatabase.Query("SELECT id, point, position_x, position_y, position_z, orientation, move_type, delay, action, action_chance FROM waypoint_data ORDER BY id, point");
if (!result)
{
@@ -73,7 +73,15 @@ void WaypointMgr::Load()
wp->y = y;
wp->z = z;
wp->orientation = o;
- wp->run = fields[6].GetBool();
+ wp->move_type = fields[6].GetUInt32();
+
+ if (wp->move_type >= WAYPOINT_MOVE_TYPE_MAX)
+ {
+ TC_LOG_ERROR("sql.sql", "Waypoint %u in waypoint_data has invalid move_type, ignoring", wp->id);
+ delete wp;
+ continue;
+ }
+
wp->delay = fields[7].GetUInt32();
wp->event_id = fields[8].GetUInt32();
wp->event_chance = fields[9].GetInt16();
@@ -126,7 +134,15 @@ void WaypointMgr::ReloadPath(uint32 id)
wp->y = y;
wp->z = z;
wp->orientation = o;
- wp->run = fields[5].GetBool();
+ wp->move_type = fields[5].GetUInt32();
+
+ if (wp->move_type >= WAYPOINT_MOVE_TYPE_MAX)
+ {
+ TC_LOG_ERROR("sql.sql", "Waypoint %u in waypoint_data has invalid move_type, ignoring", wp->id);
+ delete wp;
+ continue;
+ }
+
wp->delay = fields[6].GetUInt32();
wp->event_id = fields[7].GetUInt32();
wp->event_chance = fields[8].GetUInt8();
diff --git a/src/server/game/Movement/Waypoints/WaypointManager.h b/src/server/game/Movement/Waypoints/WaypointManager.h
index fe7ca5ec931..8e5dd1f64c7 100644
--- a/src/server/game/Movement/Waypoints/WaypointManager.h
+++ b/src/server/game/Movement/Waypoints/WaypointManager.h
@@ -19,28 +19,40 @@
#ifndef TRINITY_WAYPOINTMANAGER_H
#define TRINITY_WAYPOINTMANAGER_H
-#include <ace/Singleton.h>
-#include <ace/Null_Mutex.h>
#include <vector>
+enum WaypointMoveType
+{
+ WAYPOINT_MOVE_TYPE_WALK,
+ WAYPOINT_MOVE_TYPE_RUN,
+ WAYPOINT_MOVE_TYPE_LAND,
+ WAYPOINT_MOVE_TYPE_TAKEOFF,
+
+ WAYPOINT_MOVE_TYPE_MAX
+};
+
struct WaypointData
{
uint32 id;
float x, y, z, orientation;
uint32 delay;
uint32 event_id;
- bool run;
+ uint32 move_type;
uint8 event_chance;
};
typedef std::vector<WaypointData*> WaypointPath;
-typedef UNORDERED_MAP<uint32, WaypointPath> WaypointPathContainer;
+typedef std::unordered_map<uint32, WaypointPath> WaypointPathContainer;
class WaypointMgr
{
- friend class ACE_Singleton<WaypointMgr, ACE_Null_Mutex>;
-
public:
+ static WaypointMgr* instance()
+ {
+ static WaypointMgr instance;
+ return &instance;
+ }
+
// Attempts to reload a single path from database
void ReloadPath(uint32 id);
@@ -58,13 +70,12 @@ class WaypointMgr
}
private:
- // Only allow instantiation from ACE_Singleton
WaypointMgr();
~WaypointMgr();
WaypointPathContainer _waypointStore;
};
-#define sWaypointMgr ACE_Singleton<WaypointMgr, ACE_Null_Mutex>::instance()
+#define sWaypointMgr WaypointMgr::instance()
#endif
diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp
index 01ee5238789..92a83f9d6f0 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp
+++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp
@@ -25,10 +25,29 @@
#include "WorldPacket.h"
#include "GridNotifiers.h"
#include "GridNotifiersImpl.h"
-#include "GridNotifiers.h"
-#include "GridNotifiersImpl.h"
#include "CellImpl.h"
+class DefenseMessageBuilder
+{
+ public:
+ DefenseMessageBuilder(uint32 zoneId, uint32 id)
+ : _zoneId(zoneId), _id(id) { }
+
+ void operator()(WorldPacket& data, LocaleConstant locale) const
+ {
+ std::string text = sOutdoorPvPMgr->GetDefenseMessage(_zoneId, _id, locale);
+
+ data.Initialize(SMSG_DEFENSE_MESSAGE, 4 + 4 + text.length());
+ data.append<uint32>(_zoneId);
+ data.append<uint32>(text.length());
+ data << text;
+ }
+
+ private:
+ uint32 _zoneId; ///< ZoneId
+ uint32 _id; ///< BroadcastTextId
+};
+
OPvPCapturePoint::OPvPCapturePoint(OutdoorPvP* pvp):
m_capturePointGUID(0), m_capturePoint(NULL), m_maxValue(0.0f), m_minValue(0.0f), m_maxSpeed(0),
m_value(0), m_team(TEAM_NEUTRAL), m_OldState(OBJECTIVESTATE_NEUTRAL),
@@ -103,9 +122,9 @@ bool OPvPCapturePoint::AddObject(uint32 type, uint32 entry, uint32 map, float x,
return false;
}
-bool OPvPCapturePoint::AddCreature(uint32 type, uint32 entry, uint32 team, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay)
+bool OPvPCapturePoint::AddCreature(uint32 type, uint32 entry, uint32 map, float x, float y, float z, float o, TeamId /*teamId = TEAM_NEUTRAL*/, uint32 spawntimedelay /*= 0*/)
{
- if (uint32 guid = sObjectMgr->AddCreData(entry, team, map, x, y, z, o, spawntimedelay))
+ if (uint32 guid = sObjectMgr->AddCreData(entry, map, x, y, z, o, spawntimedelay))
{
AddCre(type, guid, entry);
return true;
@@ -616,3 +635,20 @@ void OutdoorPvP::OnGameObjectRemove(GameObject* go)
if (OPvPCapturePoint *cp = GetCapturePoint(go->GetDBTableGUIDLow()))
cp->m_capturePoint = NULL;
}
+
+void OutdoorPvP::SendDefenseMessage(uint32 zoneId, uint32 id)
+{
+ DefenseMessageBuilder builder(zoneId, id);
+ Trinity::LocalizedPacketDo<DefenseMessageBuilder> localizer(builder);
+ BroadcastWorker(localizer, zoneId);
+}
+
+template<class Worker>
+void OutdoorPvP::BroadcastWorker(Worker& _worker, uint32 zoneId)
+{
+ for (uint32 i = 0; i < BG_TEAMS_COUNT; ++i)
+ for (PlayerSet::iterator itr = m_players[i].begin(); itr != m_players[i].end(); ++itr)
+ if (Player* player = ObjectAccessor::FindPlayer(*itr))
+ if (player->GetZoneId() == zoneId)
+ _worker(player);
+}
diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.h b/src/server/game/OutdoorPvP/OutdoorPvP.h
index 9ea81ded055..4d7d818936e 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvP.h
+++ b/src/server/game/OutdoorPvP/OutdoorPvP.h
@@ -68,7 +68,6 @@ struct go_type
struct creature_type
{
uint32 entry;
- uint32 teamval;
uint32 map;
float x;
float y;
@@ -145,7 +144,7 @@ class OPvPCapturePoint
bool AddObject(uint32 type, uint32 entry, uint32 map, float x, float y, float z, float o,
float rotation0, float rotation1, float rotation2, float rotation3);
- bool AddCreature(uint32 type, uint32 entry, uint32 teamval, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0);
+ virtual bool AddCreature(uint32 type, uint32 entry, uint32 map, float x, float y, float z, float o, TeamId teamId = TEAM_NEUTRAL, uint32 spawntimedelay = 0);
bool DelCreature(uint32 type);
bool DelObject(uint32 type);
@@ -219,9 +218,9 @@ class OutdoorPvP : public ZoneScript
// setup stuff
virtual bool SetupOutdoorPvP() {return true;}
- void OnGameObjectCreate(GameObject* go);
- void OnGameObjectRemove(GameObject* go);
- void OnCreatureCreate(Creature*) { }
+ void OnGameObjectCreate(GameObject* go) override;
+ void OnGameObjectRemove(GameObject* go) override;
+ void OnCreatureCreate(Creature*) override { }
// send world state update to all players present
void SendUpdateWorldState(uint32 field, uint32 value);
@@ -249,6 +248,21 @@ class OutdoorPvP : public ZoneScript
void TeamApplyBuff(TeamId team, uint32 spellId, uint32 spellId2 = 0);
+ static TeamId GetTeamIdByTeam(uint32 team)
+ {
+ switch (team)
+ {
+ case ALLIANCE:
+ return TEAM_ALLIANCE;
+ case HORDE:
+ return TEAM_HORDE;
+ default:
+ return TEAM_NEUTRAL;
+ }
+ }
+
+ void SendDefenseMessage(uint32 zoneId, uint32 id);
+
protected:
// the map of the objectives belonging to this outdoorpvp
@@ -288,6 +302,9 @@ class OutdoorPvP : public ZoneScript
bool HasPlayer(Player const* player) const;
void TeamCastSpell(TeamId team, int32 spellId);
+
+ template<class Worker>
+ void BroadcastWorker(Worker& _worker, uint32 zoneId);
};
#endif /*OUTDOOR_PVP_H_*/
diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp
index 2b05f7255f6..5306a3ca3c1 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp
+++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp
@@ -228,3 +228,12 @@ void OutdoorPvPMgr::HandlePlayerResurrects(Player* player, uint32 zoneid)
if (itr->second->HasPlayer(player))
itr->second->HandlePlayerResurrects(player, zoneid);
}
+
+std::string OutdoorPvPMgr::GetDefenseMessage(uint32 zoneId, uint32 id, LocaleConstant locale) const
+{
+ if (BroadcastText const* bct = sObjectMgr->GetBroadcastText(id))
+ return bct->GetText(locale);
+
+ TC_LOG_ERROR("outdoorpvp", "Can not find DefenseMessage (Zone: %u, Id: %u). BroadcastText (Id: %u) does not exist.", zoneId, id, id);
+ return "";
+}
diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.h b/src/server/game/OutdoorPvP/OutdoorPvPMgr.h
index 54ea2f3ba1d..bf2f14a291f 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.h
+++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.h
@@ -21,7 +21,6 @@
#define OUTDOORPVP_OBJECTIVE_UPDATE_INTERVAL 1000
#include "OutdoorPvP.h"
-#include <ace/Singleton.h>
class Player;
class GameObject;
@@ -38,13 +37,17 @@ struct OutdoorPvPData
// class to handle player enter / leave / areatrigger / GO use events
class OutdoorPvPMgr
{
- friend class ACE_Singleton<OutdoorPvPMgr, ACE_Null_Mutex>;
-
private:
OutdoorPvPMgr();
~OutdoorPvPMgr() { };
public:
+ static OutdoorPvPMgr* instance()
+ {
+ static OutdoorPvPMgr instance;
+ return &instance;
+ }
+
// create outdoor pvp events
void InitOutdoorPvP();
@@ -81,6 +84,8 @@ class OutdoorPvPMgr
void HandleDropFlag(Player* player, uint32 spellId);
+ std::string GetDefenseMessage(uint32 zoneId, uint32 id, LocaleConstant locale) const;
+
private:
typedef std::vector<OutdoorPvP*> OutdoorPvPSet;
typedef std::map<uint32 /* zoneid */, OutdoorPvP*> OutdoorPvPMap;
@@ -101,6 +106,6 @@ class OutdoorPvPMgr
uint32 m_UpdateTimer;
};
-#define sOutdoorPvPMgr ACE_Singleton<OutdoorPvPMgr, ACE_Null_Mutex>::instance()
+#define sOutdoorPvPMgr OutdoorPvPMgr::instance()
#endif /*OUTDOOR_PVP_MGR_H_*/
diff --git a/src/server/game/Pools/PoolMgr.h b/src/server/game/Pools/PoolMgr.h
index 2bc404b3a36..dd24cceae07 100644
--- a/src/server/game/Pools/PoolMgr.h
+++ b/src/server/game/Pools/PoolMgr.h
@@ -20,7 +20,6 @@
#define TRINITY_POOLHANDLER_H
#include "Define.h"
-#include <ace/Singleton.h>
#include "Creature.h"
#include "GameObject.h"
#include "QuestDef.h"
@@ -34,7 +33,7 @@ struct PoolObject
{
uint32 guid;
float chance;
- PoolObject(uint32 _guid, float _chance): guid(_guid), chance(fabs(_chance)) { }
+ PoolObject(uint32 _guid, float _chance) : guid(_guid), chance(std::fabs(_chance)) { }
};
class Pool // for Pool of Pool case
@@ -104,13 +103,17 @@ typedef std::pair<PooledQuestRelation::iterator, PooledQuestRelation::iterator>
class PoolMgr
{
- friend class ACE_Singleton<PoolMgr, ACE_Null_Mutex>;
-
private:
PoolMgr();
~PoolMgr() { };
public:
+ static PoolMgr* instance()
+ {
+ static PoolMgr instance;
+ return &instance;
+ }
+
void LoadFromDB();
void LoadQuestPools();
void SaveQuestsToDB();
@@ -164,7 +167,7 @@ class PoolMgr
ActivePoolData mSpawnedData;
};
-#define sPoolMgr ACE_Singleton<PoolMgr, ACE_Null_Mutex>::instance()
+#define sPoolMgr PoolMgr::instance()
// Method that tell if the creature is part of a pool and return the pool id if yes
template<>
diff --git a/src/server/game/PrecompiledHeaders/gamePCH.h b/src/server/game/PrecompiledHeaders/gamePCH.h
index 68f628430c4..c7c6ca5d2d6 100644
--- a/src/server/game/PrecompiledHeaders/gamePCH.h
+++ b/src/server/game/PrecompiledHeaders/gamePCH.h
@@ -1,9 +1,6 @@
//add here most rarely modified headers to speed up debug build compilation
-#include "WorldSocket.h" // must be first to make ACE happy with ACE includes in it
-
#include "Common.h"
-
#include "MapManager.h"
#include "Log.h"
#include "ObjectAccessor.h"
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index 9b3732d232b..eb9b1ad45b9 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -137,7 +137,7 @@ Quest::Quest(Field* questRecord)
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
OfferRewardEmoteDelay[i] = questRecord[136+i].GetInt32();
- //int32 WDBVerified = questRecord[140].GetInt32();
+ //int32 VerifiedBuild = questRecord[140].GetInt32();
if (SpecialFlags & QUEST_SPECIAL_FLAGS_AUTO_ACCEPT)
Flags |= QUEST_FLAGS_AUTO_ACCEPT;
@@ -197,28 +197,32 @@ uint32 Quest::XPValue(Player* player) const
int32 Quest::GetRewOrReqMoney() const
{
+ // RequiredMoney: the amount is the negative copper sum.
if (RewardOrRequiredMoney <= 0)
return RewardOrRequiredMoney;
- return int32(RewardOrRequiredMoney * sWorld->getRate(RATE_DROP_MONEY));
+ // RewardMoney: the positive amount
+ return int32(RewardOrRequiredMoney * sWorld->getRate(RATE_MONEY_QUEST));
}
uint32 Quest::GetRewMoneyMaxLevel() const
{
+ // If Quest has flag to not give money on max level, it's 0
if (HasFlag(QUEST_FLAGS_NO_MONEY_FROM_XP))
return 0;
- return RewardMoneyMaxLevel;
+ // Else, return the rewarded copper sum modified by the rate
+ return uint32(RewardMoneyMaxLevel * sWorld->getRate(RATE_MONEY_MAX_LEVEL_QUEST));
}
bool Quest::IsAutoAccept() const
{
- return sWorld->getBoolConfig(CONFIG_QUEST_IGNORE_AUTO_ACCEPT) ? false : (Flags & QUEST_FLAGS_AUTO_ACCEPT);
+ return !sWorld->getBoolConfig(CONFIG_QUEST_IGNORE_AUTO_ACCEPT) && HasFlag(QUEST_FLAGS_AUTO_ACCEPT);
}
bool Quest::IsAutoComplete() const
{
- return sWorld->getBoolConfig(CONFIG_QUEST_IGNORE_AUTO_COMPLETE) ? false : (Method == 0 || HasFlag(QUEST_FLAGS_AUTOCOMPLETE));
+ return !sWorld->getBoolConfig(CONFIG_QUEST_IGNORE_AUTO_COMPLETE) && (Method == 0 || HasFlag(QUEST_FLAGS_AUTOCOMPLETE));
}
bool Quest::IsRaidQuest(Difficulty difficulty) const
diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h
index 995396c37f5..350ef104ed4 100644
--- a/src/server/game/Quests/QuestDef.h
+++ b/src/server/game/Quests/QuestDef.h
@@ -262,14 +262,14 @@ class Quest
bool IsAutoAccept() const;
bool IsAutoComplete() const;
uint32 GetFlags() const { return Flags; }
- bool IsDaily() const { return Flags & QUEST_FLAGS_DAILY; }
- bool IsWeekly() const { return Flags & QUEST_FLAGS_WEEKLY; }
- bool IsMonthly() const { return SpecialFlags & QUEST_SPECIAL_FLAGS_MONTHLY; }
+ bool IsDaily() const { return (Flags & QUEST_FLAGS_DAILY) != 0; }
+ bool IsWeekly() const { return (Flags & QUEST_FLAGS_WEEKLY) != 0; }
+ bool IsMonthly() const { return (SpecialFlags & QUEST_SPECIAL_FLAGS_MONTHLY) != 0; }
bool IsSeasonal() const { return (ZoneOrSort == -QUEST_SORT_SEASONAL || ZoneOrSort == -QUEST_SORT_SPECIAL || ZoneOrSort == -QUEST_SORT_LUNAR_FESTIVAL || ZoneOrSort == -QUEST_SORT_MIDSUMMER || ZoneOrSort == -QUEST_SORT_BREWFEST || ZoneOrSort == -QUEST_SORT_LOVE_IS_IN_THE_AIR || ZoneOrSort == -QUEST_SORT_NOBLEGARDEN) && !IsRepeatable(); }
- bool IsDailyOrWeekly() const { return Flags & (QUEST_FLAGS_DAILY | QUEST_FLAGS_WEEKLY); }
+ bool IsDailyOrWeekly() const { return (Flags & (QUEST_FLAGS_DAILY | QUEST_FLAGS_WEEKLY)) != 0; }
bool IsRaidQuest(Difficulty difficulty) const;
bool IsAllowedInRaid(Difficulty difficulty) const;
- bool IsDFQuest() const { return SpecialFlags & QUEST_SPECIAL_FLAGS_DF_QUEST; }
+ bool IsDFQuest() const { return (SpecialFlags & QUEST_SPECIAL_FLAGS_DF_QUEST) != 0; }
uint32 CalculateHonorGain(uint8 level) const;
// multiple values
diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp
index 69e677bd89d..f19d6d754cf 100644
--- a/src/server/game/Reputation/ReputationMgr.cpp
+++ b/src/server/game/Reputation/ReputationMgr.cpp
@@ -24,7 +24,7 @@
#include "World.h"
#include "ObjectMgr.h"
#include "ScriptMgr.h"
-#include "Opcodes.h"
+#include "WorldSession.h"
const int32 ReputationMgr::PointsInRank[MAX_REPUTATION_RANK] = {36000, 3000, 3000, 3000, 6000, 12000, 21000, 1000};
@@ -59,7 +59,7 @@ bool ReputationMgr::IsAtWar(FactionEntry const* factionEntry) const
return false;
if (FactionState const* factionState = GetState(factionEntry))
- return (factionState->Flags & FACTION_FLAG_AT_WAR);
+ return (factionState->Flags & FACTION_FLAG_AT_WAR) != 0;
return false;
}
diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp
index 58ad725d570..3ccc876e1a2 100644
--- a/src/server/game/Scripting/MapScripts.cpp
+++ b/src/server/game/Scripting/MapScripts.cpp
@@ -806,7 +806,7 @@ void Map::ScriptsProcess()
if (!sWaypointMgr->GetPath(step.script->LoadPath.PathID))
TC_LOG_ERROR("scripts", "%s source object has an invalid path (%u), skipping.", step.script->GetDebugInfo().c_str(), step.script->LoadPath.PathID);
else
- unit->GetMotionMaster()->MovePath(step.script->LoadPath.PathID, step.script->LoadPath.IsRepeatable);
+ unit->GetMotionMaster()->MovePath(step.script->LoadPath.PathID, step.script->LoadPath.IsRepeatable != 0);
}
break;
@@ -824,10 +824,9 @@ void Map::ScriptsProcess()
}
Creature* cTarget = NULL;
- if (source) //using grid searcher
+ WorldObject* wSource = dynamic_cast <WorldObject*> (source);
+ if (wSource) //using grid searcher
{
- WorldObject* wSource = dynamic_cast <WorldObject*> (source);
-
CellCoord p(Trinity::ComputeCellCoord(wSource->GetPositionX(), wSource->GetPositionY()));
Cell cell(p);
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index 7365d592a62..d036d438926 100644
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -16,6 +16,7 @@
*/
#include "ScriptLoader.h"
+#include "World.h"
//examples
void AddSC_example_creature();
@@ -41,7 +42,7 @@ void AddSC_item_spell_scripts();
void AddSC_example_spell_scripts();
void AddSC_holiday_spell_scripts();
-void AddSC_SmartSCripts();
+void AddSC_SmartScripts();
//Commands
void AddSC_account_commandscript();
@@ -97,6 +98,7 @@ void AddSC_npc_innkeeper();
void AddSC_npcs_special();
void AddSC_npc_taxi();
void AddSC_achievement_scripts();
+void AddSC_action_ip_logger();
//eastern kingdoms
void AddSC_alterac_valley(); //Alterac Valley
@@ -261,14 +263,11 @@ void AddSC_instance_zulgurub();
//void AddSC_alterac_mountains();
void AddSC_arathi_highlands();
void AddSC_blasted_lands();
-void AddSC_boss_kruul();
void AddSC_burning_steppes();
void AddSC_duskwood();
void AddSC_eastern_plaguelands();
-void AddSC_eversong_woods();
void AddSC_ghostlands();
void AddSC_hinterlands();
-void AddSC_ironforge();
void AddSC_isle_of_queldanas();
void AddSC_loch_modan();
void AddSC_redridge_mountains();
@@ -279,7 +278,6 @@ void AddSC_swamp_of_sorrows();
void AddSC_tirisfal_glades();
void AddSC_undercity();
void AddSC_western_plaguelands();
-void AddSC_westfall();
void AddSC_wetlands();
//kalimdor
@@ -469,7 +467,6 @@ void AddSC_boss_xt002();
void AddSC_boss_kologarn();
void AddSC_boss_assembly_of_iron();
void AddSC_boss_general_vezax();
-void AddSC_ulduar_teleporter();
void AddSC_boss_mimiron();
void AddSC_boss_hodir();
void AddSC_boss_freya();
@@ -696,6 +693,7 @@ void AddSC_outdoorpvp_zm();
// player
void AddSC_chat_log();
+void AddSC_action_ip_logger();
#endif
@@ -703,7 +701,7 @@ void AddScripts()
{
AddExampleScripts();
AddSpellScripts();
- AddSC_SmartSCripts();
+ AddSC_SmartScripts();
AddCommandScripts();
#ifdef SCRIPTS
AddWorldScripts();
@@ -804,7 +802,10 @@ void AddWorldScripts()
AddSC_npcs_special();
AddSC_npc_taxi();
AddSC_achievement_scripts();
- AddSC_chat_log();
+ AddSC_chat_log(); // location: scripts\World\chat_log.cpp
+ // To avoid duplicate code, we check once /*ONLY*/ if logging is permitted or not.
+ if (sWorld->getBoolConfig(CONFIG_IP_BASED_ACTION_LOGGING))
+ AddSC_action_ip_logger(); // location: scripts\World\action_ip_logger.cpp
#endif
}
@@ -973,14 +974,11 @@ void AddEasternKingdomsScripts()
//AddSC_alterac_mountains();
AddSC_arathi_highlands();
AddSC_blasted_lands();
- AddSC_boss_kruul();
AddSC_burning_steppes();
AddSC_duskwood();
AddSC_eastern_plaguelands();
- AddSC_eversong_woods();
AddSC_ghostlands();
AddSC_hinterlands();
- AddSC_ironforge();
AddSC_isle_of_queldanas();
AddSC_loch_modan();
AddSC_redridge_mountains();
@@ -991,7 +989,6 @@ void AddEasternKingdomsScripts()
AddSC_tirisfal_glades();
AddSC_undercity();
AddSC_western_plaguelands();
- AddSC_westfall();
AddSC_wetlands();
#endif
}
@@ -1309,7 +1306,6 @@ void AddNorthrendScripts()
AddSC_boss_general_vezax();
AddSC_boss_assembly_of_iron();
AddSC_boss_kologarn();
- AddSC_ulduar_teleporter();
AddSC_boss_mimiron();
AddSC_boss_hodir();
AddSC_boss_freya();
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp
index 94cf1047dfb..daa4c36a442 100644
--- a/src/server/game/Scripting/ScriptMgr.cpp
+++ b/src/server/game/Scripting/ScriptMgr.cpp
@@ -32,6 +32,7 @@
#include "CreatureAIImpl.h"
#include "Player.h"
#include "WorldPacket.h"
+#include "WorldSession.h"
namespace
{
@@ -175,8 +176,10 @@ struct TSpellSummary
uint8 Effects; // set of enum SelectEffect
} *SpellSummary;
-ScriptMgr::ScriptMgr()
- : _scriptCount(0), _scheduledScripts(0) { }
+ScriptMgr::ScriptMgr() : _scriptCount(0)
+{
+ _scheduledScripts = 0;
+}
ScriptMgr::~ScriptMgr() { }
@@ -224,6 +227,7 @@ void ScriptMgr::Unload()
SCR_CLEAR(TransportScript);
SCR_CLEAR(AchievementCriteriaScript);
SCR_CLEAR(PlayerScript);
+ SCR_CLEAR(AccountScript);
SCR_CLEAR(GuildScript);
SCR_CLEAR(GroupScript);
SCR_CLEAR(UnitScript);
@@ -397,39 +401,49 @@ void ScriptMgr::OnNetworkStop()
FOREACH_SCRIPT(ServerScript)->OnNetworkStop();
}
-void ScriptMgr::OnSocketOpen(WorldSocket* socket)
+void ScriptMgr::OnSocketOpen(std::shared_ptr<WorldSocket> socket)
{
ASSERT(socket);
FOREACH_SCRIPT(ServerScript)->OnSocketOpen(socket);
}
-void ScriptMgr::OnSocketClose(WorldSocket* socket, bool wasNew)
+void ScriptMgr::OnSocketClose(std::shared_ptr<WorldSocket> socket)
{
ASSERT(socket);
- FOREACH_SCRIPT(ServerScript)->OnSocketClose(socket, wasNew);
+ FOREACH_SCRIPT(ServerScript)->OnSocketClose(socket);
}
-void ScriptMgr::OnPacketReceive(WorldSocket* socket, WorldPacket packet)
+void ScriptMgr::OnPacketReceive(WorldSession* session, WorldPacket const& packet)
{
- ASSERT(socket);
+ if (SCR_REG_LST(ServerScript).empty())
+ return;
- FOREACH_SCRIPT(ServerScript)->OnPacketReceive(socket, packet);
+ WorldPacket copy(packet);
+ FOREACH_SCRIPT(ServerScript)->OnPacketReceive(session, copy);
}
-void ScriptMgr::OnPacketSend(WorldSocket* socket, WorldPacket packet)
+void ScriptMgr::OnPacketSend(WorldSession* session, WorldPacket const& packet)
{
- ASSERT(socket);
+ ASSERT(session);
+
+ if (SCR_REG_LST(ServerScript).empty())
+ return;
- FOREACH_SCRIPT(ServerScript)->OnPacketSend(socket, packet);
+ WorldPacket copy(packet);
+ FOREACH_SCRIPT(ServerScript)->OnPacketSend(session, copy);
}
-void ScriptMgr::OnUnknownPacketReceive(WorldSocket* socket, WorldPacket packet)
+void ScriptMgr::OnUnknownPacketReceive(WorldSession* session, WorldPacket const& packet)
{
- ASSERT(socket);
+ ASSERT(session);
+
+ if (SCR_REG_LST(ServerScript).empty())
+ return;
- FOREACH_SCRIPT(ServerScript)->OnUnknownPacketReceive(socket, packet);
+ WorldPacket copy(packet);
+ FOREACH_SCRIPT(ServerScript)->OnUnknownPacketReceive(session, copy);
}
void ScriptMgr::OnOpenStateChange(bool open)
@@ -760,17 +774,6 @@ bool ScriptMgr::OnQuestSelect(Player* player, Creature* creature, Quest const* q
return tmpscript->OnQuestSelect(player, creature, quest);
}
-bool ScriptMgr::OnQuestComplete(Player* player, Creature* creature, Quest const* quest)
-{
- ASSERT(player);
- ASSERT(creature);
- ASSERT(quest);
-
- GET_SCRIPT_RET(CreatureScript, creature->GetScriptId(), tmpscript, false);
- player->PlayerTalkClass->ClearMenus();
- return tmpscript->OnQuestComplete(player, creature, quest);
-}
-
bool ScriptMgr::OnQuestReward(Player* player, Creature* creature, Quest const* quest, uint32 opt)
{
ASSERT(player);
@@ -1242,9 +1245,9 @@ void ScriptMgr::OnPlayerSpellCast(Player* player, Spell* spell, bool skipCheck)
FOREACH_SCRIPT(PlayerScript)->OnSpellCast(player, spell, skipCheck);
}
-void ScriptMgr::OnPlayerLogin(Player* player)
+void ScriptMgr::OnPlayerLogin(Player* player, bool firstLogin)
{
- FOREACH_SCRIPT(PlayerScript)->OnLogin(player);
+ FOREACH_SCRIPT(PlayerScript)->OnLogin(player, firstLogin);
}
void ScriptMgr::OnPlayerLogout(Player* player)
@@ -1257,9 +1260,14 @@ void ScriptMgr::OnPlayerCreate(Player* player)
FOREACH_SCRIPT(PlayerScript)->OnCreate(player);
}
-void ScriptMgr::OnPlayerDelete(uint64 guid)
+void ScriptMgr::OnPlayerDelete(uint64 guid, uint32 accountId)
+{
+ FOREACH_SCRIPT(PlayerScript)->OnDelete(guid, accountId);
+}
+
+void ScriptMgr::OnPlayerFailedDelete(uint64 guid, uint32 accountId)
{
- FOREACH_SCRIPT(PlayerScript)->OnDelete(guid);
+ FOREACH_SCRIPT(PlayerScript)->OnFailedDelete(guid, accountId);
}
void ScriptMgr::OnPlayerSave(Player* player)
@@ -1277,6 +1285,42 @@ void ScriptMgr::OnPlayerUpdateZone(Player* player, uint32 newZone, uint32 newAre
FOREACH_SCRIPT(PlayerScript)->OnUpdateZone(player, newZone, newArea);
}
+void ScriptMgr::OnQuestStatusChange(Player* player, uint32 questId, QuestStatus status)
+{
+ FOREACH_SCRIPT(PlayerScript)->OnQuestStatusChange(player, questId, status);
+}
+
+// Account
+void ScriptMgr::OnAccountLogin(uint32 accountId)
+{
+ FOREACH_SCRIPT(AccountScript)->OnAccountLogin(accountId);
+}
+
+void ScriptMgr::OnFailedAccountLogin(uint32 accountId)
+{
+ FOREACH_SCRIPT(AccountScript)->OnFailedAccountLogin(accountId);
+}
+
+void ScriptMgr::OnEmailChange(uint32 accountId)
+{
+ FOREACH_SCRIPT(AccountScript)->OnEmailChange(accountId);
+}
+
+void ScriptMgr::OnFailedEmailChange(uint32 accountId)
+{
+ FOREACH_SCRIPT(AccountScript)->OnFailedEmailChange(accountId);
+}
+
+void ScriptMgr::OnPasswordChange(uint32 accountId)
+{
+ FOREACH_SCRIPT(AccountScript)->OnPasswordChange(accountId);
+}
+
+void ScriptMgr::OnFailedPasswordChange(uint32 accountId)
+{
+ FOREACH_SCRIPT(AccountScript)->OnFailedPasswordChange(accountId);
+}
+
// Guild
void ScriptMgr::OnGuildAddMember(Guild* guild, Player* player, uint8& plRank)
{
@@ -1539,6 +1583,12 @@ PlayerScript::PlayerScript(const char* name)
ScriptRegistry<PlayerScript>::AddScript(this);
}
+AccountScript::AccountScript(const char* name)
+ : ScriptObject(name)
+{
+ ScriptRegistry<AccountScript>::AddScript(this);
+}
+
GuildScript::GuildScript(const char* name)
: ScriptObject(name)
{
@@ -1581,6 +1631,7 @@ template class ScriptRegistry<PlayerScript>;
template class ScriptRegistry<GuildScript>;
template class ScriptRegistry<GroupScript>;
template class ScriptRegistry<UnitScript>;
+template class ScriptRegistry<AccountScript>;
// Undefine utility macros.
#undef GET_SCRIPT_RET
diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h
index 8ed8a2b3c49..ea25d51dab2 100644
--- a/src/server/game/Scripting/ScriptMgr.h
+++ b/src/server/game/Scripting/ScriptMgr.h
@@ -19,16 +19,15 @@
#ifndef SC_SCRIPTMGR_H
#define SC_SCRIPTMGR_H
+#include <atomic>
#include "Common.h"
-#include <ace/Singleton.h>
-#include <ace/Atomic_Op.h>
-
#include "DBCStores.h"
#include "QuestDef.h"
#include "SharedDefines.h"
#include "World.h"
#include "Weather.h"
+class AccountMgr;
class AuctionHouseObject;
class AuraScript;
class Battleground;
@@ -60,6 +59,7 @@ class Vehicle;
class WorldPacket;
class WorldSocket;
class WorldObject;
+class WorldSession;
struct AchievementCriteriaData;
struct AuctionEntry;
@@ -183,6 +183,8 @@ template<class TObject> class UpdatableScript
{
}
+ virtual ~UpdatableScript() { }
+
public:
virtual void OnUpdate(TObject* /*obj*/, uint32 /*diff*/) { }
@@ -196,7 +198,7 @@ class SpellScriptLoader : public ScriptObject
public:
- bool IsDatabaseBound() const FINAL { return true; }
+ bool IsDatabaseBound() const final override { return true; }
// Should return a fully valid SpellScript pointer.
virtual SpellScript* GetSpellScript() const { return NULL; }
@@ -213,30 +215,30 @@ class ServerScript : public ScriptObject
public:
- // Called when reactive socket I/O is started (WorldSocketMgr).
+ // Called when reactive socket I/O is started (WorldTcpSessionMgr).
virtual void OnNetworkStart() { }
// Called when reactive I/O is stopped.
virtual void OnNetworkStop() { }
// Called when a remote socket establishes a connection to the server. Do not store the socket object.
- virtual void OnSocketOpen(WorldSocket* /*socket*/) { }
+ virtual void OnSocketOpen(std::shared_ptr<WorldSocket> /*socket*/) { }
// Called when a socket is closed. Do not store the socket object, and do not rely on the connection
// being open; it is not.
- virtual void OnSocketClose(WorldSocket* /*socket*/, bool /*wasNew*/) { }
+ virtual void OnSocketClose(std::shared_ptr<WorldSocket> /*socket*/) { }
// Called when a packet is sent to a client. The packet object is a copy of the original packet, so reading
// and modifying it is safe.
- virtual void OnPacketSend(WorldSocket* /*socket*/, WorldPacket& /*packet*/) { }
+ virtual void OnPacketSend(WorldSession* /*session*/, WorldPacket& /*packet*/) { }
// Called when a (valid) packet is received by a client. The packet object is a copy of the original packet, so
- // reading and modifying it is safe.
- virtual void OnPacketReceive(WorldSocket* /*socket*/, WorldPacket& /*packet*/) { }
+ // reading and modifying it is safe. Make sure to check WorldSession pointer before usage, it might be null in case of auth packets
+ virtual void OnPacketReceive(WorldSession* /*session*/, WorldPacket& /*packet*/) { }
// Called when an invalid (unknown opcode) packet is received by a client. The packet is a reference to the orignal
// packet; not a copy. This allows you to actually handle unknown packets (for whatever purpose).
- virtual void OnUnknownPacketReceive(WorldSocket* /*socket*/, WorldPacket& /*packet*/) { }
+ virtual void OnUnknownPacketReceive(WorldSession* /*session*/, WorldPacket& /*packet*/) { }
};
class WorldScript : public ScriptObject
@@ -354,7 +356,7 @@ class InstanceMapScript : public ScriptObject, public MapScript<InstanceMap>
public:
- bool IsDatabaseBound() const FINAL { return true; }
+ bool IsDatabaseBound() const final override { return true; }
// Gets an InstanceScript object for this instance.
virtual InstanceScript* GetInstanceScript(InstanceMap* /*map*/) const { return NULL; }
@@ -375,7 +377,7 @@ class ItemScript : public ScriptObject
public:
- bool IsDatabaseBound() const FINAL { return true; }
+ bool IsDatabaseBound() const final override { return true; }
// Called when a dummy spell effect is triggered on the item.
virtual bool OnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/, Item* /*target*/) { return false; }
@@ -424,7 +426,7 @@ class CreatureScript : public UnitScript, public UpdatableScript<Creature>
public:
- bool IsDatabaseBound() const FINAL { return true; }
+ bool IsDatabaseBound() const final override { return true; }
// Called when a dummy spell effect is triggered on the creature.
virtual bool OnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/, Creature* /*target*/) { return false; }
@@ -444,10 +446,7 @@ class CreatureScript : public UnitScript, public UpdatableScript<Creature>
// Called when a player selects a quest in the creature's quest menu.
virtual bool OnQuestSelect(Player* /*player*/, Creature* /*creature*/, Quest const* /*quest*/) { return false; }
- // Called when a player completes a quest with the creature.
- virtual bool OnQuestComplete(Player* /*player*/, Creature* /*creature*/, Quest const* /*quest*/) { return false; }
-
- // Called when a player selects a quest reward.
+ // Called when a player completes a quest and is rewarded, opt is the selected item's index or 0
virtual bool OnQuestReward(Player* /*player*/, Creature* /*creature*/, Quest const* /*quest*/, uint32 /*opt*/) { return false; }
// Called when the dialog status between a player and the creature is requested.
@@ -465,7 +464,7 @@ class GameObjectScript : public ScriptObject, public UpdatableScript<GameObject>
public:
- bool IsDatabaseBound() const FINAL { return true; }
+ bool IsDatabaseBound() const final override { return true; }
// Called when a dummy spell effect is triggered on the gameobject.
virtual bool OnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/, GameObject* /*target*/) { return false; }
@@ -482,7 +481,7 @@ class GameObjectScript : public ScriptObject, public UpdatableScript<GameObject>
// Called when a player accepts a quest from the gameobject.
virtual bool OnQuestAccept(Player* /*player*/, GameObject* /*go*/, Quest const* /*quest*/) { return false; }
- // Called when a player selects a quest reward.
+ // Called when a player completes a quest and is rewarded, opt is the selected item's index or 0
virtual bool OnQuestReward(Player* /*player*/, GameObject* /*go*/, Quest const* /*quest*/, uint32 /*opt*/) { return false; }
// Called when the dialog status between a player and the gameobject is requested.
@@ -512,7 +511,7 @@ class AreaTriggerScript : public ScriptObject
public:
- bool IsDatabaseBound() const FINAL { return true; }
+ bool IsDatabaseBound() const final override { return true; }
// Called when the area trigger is activated by a player.
virtual bool OnTrigger(Player* /*player*/, AreaTriggerEntry const* /*trigger*/) { return false; }
@@ -526,7 +525,7 @@ class BattlegroundScript : public ScriptObject
public:
- bool IsDatabaseBound() const FINAL { return true; }
+ bool IsDatabaseBound() const final override { return true; }
// Should return a fully valid Battleground object for the type ID.
virtual Battleground* GetBattleground() const = 0;
@@ -540,7 +539,7 @@ class OutdoorPvPScript : public ScriptObject
public:
- bool IsDatabaseBound() const FINAL { return true; }
+ bool IsDatabaseBound() const final override { return true; }
// Should return a fully valid OutdoorPvP object for the type ID.
virtual OutdoorPvP* GetOutdoorPvP() const = 0;
@@ -566,7 +565,7 @@ class WeatherScript : public ScriptObject, public UpdatableScript<Weather>
public:
- bool IsDatabaseBound() const FINAL { return true; }
+ bool IsDatabaseBound() const final override { return true; }
// Called when the weather changes in the zone this script is associated with.
virtual void OnChange(Weather* /*weather*/, WeatherState /*state*/, float /*grade*/) { }
@@ -601,7 +600,7 @@ class ConditionScript : public ScriptObject
public:
- bool IsDatabaseBound() const FINAL { return true; }
+ bool IsDatabaseBound() const final override { return true; }
// Called when a single condition is checked for a player.
virtual bool OnConditionCheck(Condition* /*condition*/, ConditionSourceInfo& /*sourceInfo*/) { return true; }
@@ -649,7 +648,7 @@ class TransportScript : public ScriptObject, public UpdatableScript<Transport>
public:
- bool IsDatabaseBound() const FINAL { return true; }
+ bool IsDatabaseBound() const final override { return true; }
// Called when a player boards the transport.
virtual void OnAddPassenger(Transport* /*transport*/, Player* /*player*/) { }
@@ -672,7 +671,7 @@ class AchievementCriteriaScript : public ScriptObject
public:
- bool IsDatabaseBound() const FINAL { return true; }
+ bool IsDatabaseBound() const final override { return true; }
// Called when an additional criteria is checked.
virtual bool OnCheck(Player* source, Unit* target) = 0;
@@ -742,7 +741,7 @@ class PlayerScript : public UnitScript
virtual void OnSpellCast(Player* /*player*/, Spell* /*spell*/, bool /*skipCheck*/) { }
// Called when a player logs in.
- virtual void OnLogin(Player* /*player*/) { }
+ virtual void OnLogin(Player* /*player*/, bool /*firstLogin*/) { }
// Called when a player logs out.
virtual void OnLogout(Player* /*player*/) { }
@@ -751,7 +750,10 @@ class PlayerScript : public UnitScript
virtual void OnCreate(Player* /*player*/) { }
// Called when a player is deleted.
- virtual void OnDelete(uint64 /*guid*/) { }
+ virtual void OnDelete(uint64 /*guid*/, uint32 /*accountId*/) { }
+
+ // Called when a player delete failed
+ virtual void OnFailedDelete(uint64 /*guid*/, uint32 /*accountId*/) { }
// Called when a player is about to be saved.
virtual void OnSave(Player* /*player*/) { }
@@ -764,6 +766,36 @@ class PlayerScript : public UnitScript
// Called when a player changes to a new map (after moving to new map)
virtual void OnMapChanged(Player* /*player*/) { }
+
+ // Called after a player's quest status has been changed
+ virtual void OnQuestStatusChange(Player* /*player*/, uint32 /*questId*/, QuestStatus /*status*/) { }
+};
+
+class AccountScript : public ScriptObject
+{
+ protected:
+
+ AccountScript(const char* name);
+
+ public:
+
+ // Called when an account logged in succesfully
+ virtual void OnAccountLogin(uint32 /*accountId*/) {}
+
+ // Called when an account login failed
+ virtual void OnFailedAccountLogin(uint32 /*accountId*/) {}
+
+ // Called when Email is successfully changed for Account
+ virtual void OnEmailChange(uint32 /*accountId*/) {}
+
+ // Called when Email failed to change for Account
+ virtual void OnFailedEmailChange(uint32 /*accountId*/) {}
+
+ // Called when Password is successfully changed for Account
+ virtual void OnPasswordChange(uint32 /*accountId*/) {}
+
+ // Called when Password failed to change for Account
+ virtual void OnFailedPasswordChange(uint32 /*accountId*/) {}
};
class GuildScript : public ScriptObject
@@ -774,7 +806,7 @@ class GuildScript : public ScriptObject
public:
- bool IsDatabaseBound() const FINAL { return false; }
+ bool IsDatabaseBound() const final override { return false; }
// Called when a member is added to the guild.
virtual void OnAddMember(Guild* /*guild*/, Player* /*player*/, uint8& /*plRank*/) { }
@@ -817,7 +849,7 @@ class GroupScript : public ScriptObject
public:
- bool IsDatabaseBound() const FINAL { return false; }
+ bool IsDatabaseBound() const final override { return false; }
// Called when a member is added to a group.
virtual void OnAddMember(Group* /*group*/, uint64 /*guid*/) { }
@@ -836,20 +868,23 @@ class GroupScript : public ScriptObject
};
// Placed here due to ScriptRegistry::AddScript dependency.
-#define sScriptMgr ACE_Singleton<ScriptMgr, ACE_Null_Mutex>::instance()
+#define sScriptMgr ScriptMgr::instance()
// Manages registration, loading, and execution of scripts.
class ScriptMgr
{
- friend class ACE_Singleton<ScriptMgr, ACE_Null_Mutex>;
friend class ScriptObject;
private:
-
ScriptMgr();
virtual ~ScriptMgr();
public: /* Initialization */
+ static ScriptMgr* instance()
+ {
+ static ScriptMgr instance;
+ return &instance;
+ }
void Initialize();
void LoadDatabase();
@@ -874,11 +909,11 @@ class ScriptMgr
void OnNetworkStart();
void OnNetworkStop();
- void OnSocketOpen(WorldSocket* socket);
- void OnSocketClose(WorldSocket* socket, bool wasNew);
- void OnPacketReceive(WorldSocket* socket, WorldPacket packet);
- void OnPacketSend(WorldSocket* socket, WorldPacket packet);
- void OnUnknownPacketReceive(WorldSocket* socket, WorldPacket packet);
+ void OnSocketOpen(std::shared_ptr<WorldSocket> socket);
+ void OnSocketClose(std::shared_ptr<WorldSocket> socket);
+ void OnPacketReceive(WorldSession* session, WorldPacket const& packet);
+ void OnPacketSend(WorldSession* session, WorldPacket const& packet);
+ void OnUnknownPacketReceive(WorldSession* session, WorldPacket const& packet);
public: /* WorldScript */
@@ -931,7 +966,6 @@ class ScriptMgr
bool OnGossipSelectCode(Player* player, Creature* creature, uint32 sender, uint32 action, const char* code);
bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest);
bool OnQuestSelect(Player* player, Creature* creature, Quest const* quest);
- bool OnQuestComplete(Player* player, Creature* creature, Quest const* quest);
bool OnQuestReward(Player* player, Creature* creature, Quest const* quest, uint32 opt);
uint32 GetDialogStatus(Player* player, Creature* creature);
CreatureAI* GetCreatureAI(Creature* creature);
@@ -1032,13 +1066,24 @@ class ScriptMgr
void OnPlayerEmote(Player* player, uint32 emote);
void OnPlayerTextEmote(Player* player, uint32 textEmote, uint32 emoteNum, uint64 guid);
void OnPlayerSpellCast(Player* player, Spell* spell, bool skipCheck);
- void OnPlayerLogin(Player* player);
+ void OnPlayerLogin(Player* player, bool firstLogin);
void OnPlayerLogout(Player* player);
void OnPlayerCreate(Player* player);
- void OnPlayerDelete(uint64 guid);
+ void OnPlayerDelete(uint64 guid, uint32 accountId);
+ void OnPlayerFailedDelete(uint64 guid, uint32 accountId);
void OnPlayerSave(Player* player);
void OnPlayerBindToInstance(Player* player, Difficulty difficulty, uint32 mapid, bool permanent);
void OnPlayerUpdateZone(Player* player, uint32 newZone, uint32 newArea);
+ void OnQuestStatusChange(Player* player, uint32 questId, QuestStatus status);
+
+ public: /* AccountScript */
+
+ void OnAccountLogin(uint32 accountId);
+ void OnFailedAccountLogin(uint32 accountId);
+ void OnEmailChange(uint32 accountId);
+ void OnFailedEmailChange(uint32 accountId);
+ void OnPasswordChange(uint32 accountId);
+ void OnFailedPasswordChange(uint32 accountId);
public: /* GuildScript */
@@ -1083,7 +1128,7 @@ class ScriptMgr
uint32 _scriptCount;
//atomic op counter for active scripts amount
- ACE_Atomic_Op<ACE_Thread_Mutex, long> _scheduledScripts;
+ std::atomic_long _scheduledScripts;
};
#endif
diff --git a/src/server/game/Scripting/ScriptSystem.h b/src/server/game/Scripting/ScriptSystem.h
index af2e50bae36..74c51e5b136 100644
--- a/src/server/game/Scripting/ScriptSystem.h
+++ b/src/server/game/Scripting/ScriptSystem.h
@@ -6,7 +6,6 @@
#define SC_SYSTEM_H
#include "ScriptMgr.h"
-#include <ace/Singleton.h>
#define TEXT_SOURCE_RANGE -1000000 //the amount of entries each text source has available
@@ -48,12 +47,18 @@ typedef std::vector<ScriptPointMove> ScriptPointVector;
class SystemMgr
{
- friend class ACE_Singleton<SystemMgr, ACE_Null_Mutex>;
+ private:
SystemMgr() { }
~SystemMgr() { }
public:
- typedef UNORDERED_MAP<uint32, ScriptPointVector> PointMoveMap;
+ static SystemMgr* instance()
+ {
+ static SystemMgr instance;
+ return &instance;
+ }
+
+ typedef std::unordered_map<uint32, ScriptPointVector> PointMoveMap;
//Database
void LoadScriptWaypoints();
@@ -75,6 +80,6 @@ class SystemMgr
static ScriptPointVector const _empty;
};
-#define sScriptSystemMgr ACE_Singleton<SystemMgr, ACE_Null_Mutex>::instance()
+#define sScriptSystemMgr SystemMgr::instance()
#endif
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index e581d7d1544..7b07abdf962 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -25,12 +25,6 @@
#include "Common.h"
-// Note: this include need for be sure have full definition of class WorldSession
-// if this class definition not complete then VS for x64 release use different size for
-// struct OpcodeHandler in this header and Opcode.cpp and get totally wrong data from
-// table opcodeTable in source when Opcode.h included but WorldSession.h not included
-#include "WorldSession.h"
-
/// List of Opcodes
enum Opcodes
{
@@ -1366,8 +1360,15 @@ enum PacketProcessing
PROCESS_THREADSAFE //packet is thread-safe - process it in Map::Update()
};
+class WorldSession;
class WorldPacket;
+#if defined(__GNUC__)
+#pragma pack(1)
+#else
+#pragma pack(push, 1)
+#endif
+
struct OpcodeHandler
{
char const* name;
@@ -1378,6 +1379,12 @@ struct OpcodeHandler
extern OpcodeHandler opcodeTable[NUM_MSG_TYPES];
+#if defined(__GNUC__)
+#pragma pack()
+#else
+#pragma pack(pop)
+#endif
+
/// Lookup opcode name for human understandable logging
inline const char* LookupOpcodeName(uint16 id)
{
diff --git a/src/server/game/Server/Protocol/PacketLog.cpp b/src/server/game/Server/Protocol/PacketLog.cpp
index ed5a3b52871..0d5168cc5a9 100644
--- a/src/server/game/Server/Protocol/PacketLog.cpp
+++ b/src/server/game/Server/Protocol/PacketLog.cpp
@@ -17,12 +17,48 @@
#include "PacketLog.h"
#include "Config.h"
-#include "ByteBuffer.h"
#include "WorldPacket.h"
+#include "Timer.h"
+
+#pragma pack(push, 1)
+
+// Packet logging structures in PKT 3.1 format
+struct LogHeader
+{
+ char Signature[3];
+ uint16 FormatVersion;
+ uint8 SnifferId;
+ uint32 Build;
+ char Locale[4];
+ uint8 SessionKey[40];
+ uint32 SniffStartUnixtime;
+ uint32 SniffStartTicks;
+ uint32 OptionalDataSize;
+};
+
+struct PacketHeader
+{
+ // used to uniquely identify a connection
+ struct OptionalData
+ {
+ uint8 SocketIPBytes[16];
+ uint32 SocketPort;
+ };
+
+ char Direction[4];
+ uint32 ConnectionId;
+ uint32 ArrivalTicks;
+ uint32 OptionalDataSize;
+ uint32 Length;
+ OptionalData OptionalData;
+ uint32 Opcode;
+};
+
+#pragma pack(pop)
PacketLog::PacketLog() : _file(NULL)
{
- Initialize();
+ std::call_once(_initializeFlag, &PacketLog::Initialize, this);
}
PacketLog::~PacketLog()
@@ -38,25 +74,58 @@ void PacketLog::Initialize()
std::string logsDir = sConfigMgr->GetStringDefault("LogsDir", "");
if (!logsDir.empty())
- if ((logsDir.at(logsDir.length()-1) != '/') && (logsDir.at(logsDir.length()-1) != '\\'))
+ if ((logsDir.at(logsDir.length() - 1) != '/') && (logsDir.at(logsDir.length() - 1) != '\\'))
logsDir.push_back('/');
std::string logname = sConfigMgr->GetStringDefault("PacketLogFile", "");
if (!logname.empty())
+ {
_file = fopen((logsDir + logname).c_str(), "wb");
+
+ LogHeader header;
+ header.Signature[0] = 'P'; header.Signature[1] = 'K'; header.Signature[2] = 'T';
+ header.FormatVersion = 0x0301;
+ header.SnifferId = 'T';
+ header.Build = 12340;
+ header.Locale[0] = 'e'; header.Locale[1] = 'n'; header.Locale[2] = 'U'; header.Locale[3] = 'S';
+ std::memset(header.SessionKey, 0, sizeof(header.SessionKey));
+ header.SniffStartUnixtime = time(NULL);
+ header.SniffStartTicks = getMSTime();
+ header.OptionalDataSize = 0;
+
+ fwrite(&header, sizeof(header), 1, _file);
+ }
}
-void PacketLog::LogPacket(WorldPacket const& packet, Direction direction)
+void PacketLog::LogPacket(WorldPacket const& packet, Direction direction, boost::asio::ip::address addr, uint16 port)
{
- ByteBuffer data(4+4+4+1+packet.size());
- data << int32(packet.GetOpcode());
- data << int32(packet.size());
- data << uint32(time(NULL));
- data << uint8(direction);
+ std::lock_guard<std::mutex> lock(_logPacketLock);
+
+ PacketHeader header;
+ *reinterpret_cast<uint32*>(header.Direction) = direction == CLIENT_TO_SERVER ? 0x47534d43 : 0x47534d53;
+ header.ConnectionId = 0;
+ header.ArrivalTicks = getMSTime();
+
+ header.OptionalDataSize = sizeof(header.OptionalData);
+ memset(header.OptionalData.SocketIPBytes, 0, sizeof(header.OptionalData.SocketIPBytes));
+ if (addr.is_v4())
+ {
+ auto bytes = addr.to_v4().to_bytes();
+ memcpy(header.OptionalData.SocketIPBytes, bytes.data(), bytes.size());
+ }
+ else if (addr.is_v6())
+ {
+ auto bytes = addr.to_v6().to_bytes();
+ memcpy(header.OptionalData.SocketIPBytes, bytes.data(), bytes.size());
+ }
+
+ header.OptionalData.SocketPort = port;
+ header.Length = packet.size() + sizeof(header.Opcode);
+ header.Opcode = packet.GetOpcode();
- for (uint32 i = 0; i < packet.size(); i++)
- data << packet[i];
+ fwrite(&header, sizeof(header), 1, _file);
+ if (!packet.empty())
+ fwrite(packet.contents(), 1, packet.size(), _file);
- fwrite(data.contents(), 1, data.size(), _file);
fflush(_file);
}
diff --git a/src/server/game/Server/Protocol/PacketLog.h b/src/server/game/Server/Protocol/PacketLog.h
index 9c60655e627..36e8c675f63 100644
--- a/src/server/game/Server/Protocol/PacketLog.h
+++ b/src/server/game/Server/Protocol/PacketLog.h
@@ -19,7 +19,9 @@
#define TRINITY_PACKETLOG_H
#include "Common.h"
-#include <ace/Singleton.h>
+
+#include <boost/asio/ip/address.hpp>
+#include <mutex>
enum Direction
{
@@ -31,20 +33,26 @@ class WorldPacket;
class PacketLog
{
- friend class ACE_Singleton<PacketLog, ACE_Thread_Mutex>;
-
private:
PacketLog();
~PacketLog();
+ std::mutex _logPacketLock;
+ std::once_flag _initializeFlag;
public:
+ static PacketLog* instance()
+ {
+ static PacketLog instance;
+ return &instance;
+ }
+
void Initialize();
bool CanLogPacket() const { return (_file != NULL); }
- void LogPacket(WorldPacket const& packet, Direction direction);
+ void LogPacket(WorldPacket const& packet, Direction direction, boost::asio::ip::address addr, uint16 port);
private:
FILE* _file;
};
-#define sPacketLog ACE_Singleton<PacketLog, ACE_Thread_Mutex>::instance()
+#define sPacketLog PacketLog::instance()
#endif
diff --git a/src/server/game/Server/Protocol/ServerPktHeader.h b/src/server/game/Server/Protocol/ServerPktHeader.h
new file mode 100644
index 00000000000..fcb24cfa80d
--- /dev/null
+++ b/src/server/game/Server/Protocol/ServerPktHeader.h
@@ -0,0 +1,63 @@
+/*
+* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __SERVERPKTHDR_H__
+#define __SERVERPKTHDR_H__
+
+#include "Log.h"
+
+#pragma pack(push, 1)
+
+struct ServerPktHeader
+{
+ /**
+ * size is the length of the payload _plus_ the length of the opcode
+ */
+ ServerPktHeader(uint32 size, uint16 cmd) : size(size)
+ {
+ uint8 headerIndex=0;
+ if (isLargePacket())
+ {
+ TC_LOG_DEBUG("network", "initializing large server to client packet. Size: %u, cmd: %u", size, cmd);
+ header[headerIndex++] = 0x80 | (0xFF & (size >> 16));
+ }
+ header[headerIndex++] = 0xFF &(size >> 8);
+ header[headerIndex++] = 0xFF & size;
+
+ header[headerIndex++] = 0xFF & cmd;
+ header[headerIndex++] = 0xFF & (cmd >> 8);
+ }
+
+ uint8 getHeaderLength()
+ {
+ // cmd = 2 bytes, size= 2||3bytes
+ return 2 + (isLargePacket() ? 3 : 2);
+ }
+
+ bool isLargePacket() const
+ {
+ return size > 0x7FFF;
+ }
+
+ const uint32 size;
+ uint8 header[5];
+};
+
+#pragma pack(pop)
+
+#endif
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 58e7ba02f47..445e42a7f08 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -20,7 +20,7 @@
\ingroup u2w
*/
-#include "WorldSocket.h" // must be first to make ACE happy with ACE includes in it
+#include "WorldSocket.h"
#include "Config.h"
#include "Common.h"
#include "DatabaseEnv.h"
@@ -46,6 +46,7 @@
#include "Transport.h"
#include "WardenWin.h"
#include "WardenMac.h"
+#include "MoveSpline.h"
namespace {
@@ -96,7 +97,7 @@ bool WorldSessionFilter::Process(WorldPacket* packet)
}
/// WorldSession constructor
-WorldSession::WorldSession(uint32 id, WorldSocket* sock, AccountTypes sec, uint8 expansion, time_t mute_time, LocaleConstant locale, uint32 recruiter, bool isARecruiter):
+WorldSession::WorldSession(uint32 id, std::shared_ptr<WorldSocket> sock, AccountTypes sec, uint8 expansion, time_t mute_time, LocaleConstant locale, uint32 recruiter, bool isARecruiter):
m_muteTime(mute_time),
m_timeOutTime(0),
AntiDOS(this),
@@ -120,15 +121,16 @@ WorldSession::WorldSession(uint32 id, WorldSocket* sock, AccountTypes sec, uint8
m_TutorialsChanged(false),
recruiterId(recruiter),
isRecruiter(isARecruiter),
- timeLastWhoCommand(0),
- _RBACData(NULL)
+ _RBACData(NULL),
+ expireTime(60000), // 1 min after socket loss, session is deleted
+ forceExit(false),
+ m_currentBankerGUID(0)
{
memset(m_Tutorials, 0, sizeof(m_Tutorials));
if (sock)
{
- m_Address = sock->GetRemoteAddress();
- sock->AddReference();
+ m_Address = sock->GetRemoteIpAddress().to_string();
ResetTimeOutTime();
LoginDatabase.PExecute("UPDATE account SET online = 1 WHERE id = %u;", GetAccountId()); // One-time query
}
@@ -147,8 +149,7 @@ WorldSession::~WorldSession()
if (m_Socket)
{
m_Socket->CloseSocket();
- m_Socket->RemoveReference();
- m_Socket = NULL;
+ m_Socket = nullptr;
}
delete _warden;
@@ -185,7 +186,7 @@ uint32 WorldSession::GetGuidLow() const
}
/// Send a packet to the client
-void WorldSession::SendPacket(WorldPacket const* packet)
+void WorldSession::SendPacket(WorldPacket* packet)
{
if (!m_Socket)
return;
@@ -224,8 +225,9 @@ void WorldSession::SendPacket(WorldPacket const* packet)
}
#endif // !TRINITY_DEBUG
- if (m_Socket->SendPacket(*packet) == -1)
- m_Socket->CloseSocket();
+ sScriptMgr->OnPacketSend(this, *packet);
+
+ m_Socket->AsyncWrite(*packet);
}
/// Add an incoming packet to the queue
@@ -276,12 +278,11 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
//! loop caused by re-enqueueing the same packets over and over again, we stop updating this session
//! and continue updating others. The re-enqueued packets will be handled in the next Update call for this session.
uint32 processedPackets = 0;
+ time_t currentTime = time(NULL);
- while (m_Socket && !m_Socket->IsClosed() &&
- !_recvQueue.empty() && _recvQueue.peek(true) != firstDelayedPacket &&
- _recvQueue.next(packet, updater))
+ while (m_Socket && !_recvQueue.empty() && _recvQueue.peek(true) != firstDelayedPacket && _recvQueue.next(packet, updater))
{
- if (!AntiDOS.EvaluateOpcode(*packet))
+ if (!AntiDOS.EvaluateOpcode(*packet, currentTime))
{
KickPlayer();
}
@@ -289,11 +290,11 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
{
TC_LOG_ERROR("network.opcode", "Received non-existed opcode %s from %s", GetOpcodeNameForLogging(packet->GetOpcode()).c_str()
, GetPlayerInfo().c_str());
- sScriptMgr->OnUnknownPacketReceive(m_Socket, WorldPacket(*packet));
+ sScriptMgr->OnUnknownPacketReceive(this, *packet);
}
else
{
- OpcodeHandler &opHandle = opcodeTable[packet->GetOpcode()];
+ OpcodeHandler& opHandle = opcodeTable[packet->GetOpcode()];
try
{
switch (opHandle.status)
@@ -319,7 +320,7 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
}
else if (_player->IsInWorld())
{
- sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));
+ sScriptMgr->OnPacketReceive(this, *packet);
(this->*opHandle.handler)(*packet);
LogUnprocessedTail(packet);
}
@@ -332,7 +333,7 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
else
{
// not expected _player or must checked in packet handler
- sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));
+ sScriptMgr->OnPacketReceive(this, *packet);
(this->*opHandle.handler)(*packet);
LogUnprocessedTail(packet);
}
@@ -344,7 +345,7 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player is still in world");
else
{
- sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));
+ sScriptMgr->OnPacketReceive(this, *packet);
(this->*opHandle.handler)(*packet);
LogUnprocessedTail(packet);
}
@@ -362,7 +363,7 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
if (packet->GetOpcode() == CMSG_CHAR_ENUM)
m_playerRecentlyLogout = false;
- sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));
+ sScriptMgr->OnPacketReceive(this, *packet);
(this->*opHandle.handler)(*packet);
LogUnprocessedTail(packet);
break;
@@ -398,7 +399,7 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
break;
}
- if (m_Socket && !m_Socket->IsClosed() && _warden)
+ if (m_Socket && m_Socket->IsOpen() && _warden)
_warden->Update();
ProcessQueryCallbacks();
@@ -416,10 +417,13 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
_warden->Update();
///- Cleanup socket pointer if need
- if (m_Socket && m_Socket->IsClosed())
+ if (m_Socket && !m_Socket->IsOpen())
{
- m_Socket->RemoveReference();
- m_Socket = NULL;
+ expireTime -= expireTime > diff ? diff : expireTime;
+ if (expireTime < diff || forceExit || !GetPlayer())
+ {
+ m_Socket = nullptr;
+ }
}
if (!m_Socket)
@@ -445,7 +449,6 @@ void WorldSession::LogoutPlayer(bool save)
DoLootRelease(lguid);
///- If the player just died before logging out, make him appear as a ghost
- //FIXME: logout must be delayed in case lost connection with client in time of combat
if (_player->GetDeathTimer())
{
_player->getHostileRefManager().deleteReferences();
@@ -568,7 +571,6 @@ void WorldSession::LogoutPlayer(bool save)
m_playerLogout = false;
m_playerSave = false;
m_playerRecentlyLogout = true;
- AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, true);
LogoutRequest(0);
}
@@ -576,7 +578,10 @@ void WorldSession::LogoutPlayer(bool save)
void WorldSession::KickPlayer()
{
if (m_Socket)
+ {
m_Socket->CloseSocket();
+ forceExit = true;
+ }
}
void WorldSession::SendNotification(const char *format, ...)
@@ -771,7 +776,7 @@ void WorldSession::SaveTutorialsData(SQLTransaction &trans)
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_HAS_TUTORIALS);
stmt->setUInt32(0, GetAccountId());
- bool hasTutorials = !CharacterDatabase.Query(stmt).null();
+ bool hasTutorials = bool(CharacterDatabase.Query(stmt));
// Modify data in DB
stmt = CharacterDatabase.GetPreparedStatement(hasTutorials ? CHAR_UPD_TUTORIALS : CHAR_INS_TUTORIALS);
for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i)
@@ -891,6 +896,9 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo* mi)
REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_DISABLE_GRAVITY) && mi->HasMovementFlag(MOVEMENTFLAG_FALLING),
MOVEMENTFLAG_FALLING);
+ REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_SPLINE_ENABLED) &&
+ (!GetPlayer()->movespline->Initialized() || GetPlayer()->movespline->Finalized()), MOVEMENTFLAG_SPLINE_ENABLED);
+
#undef REMOVE_VIOLATING_FLAGS
}
@@ -1093,27 +1101,23 @@ void WorldSession::ProcessQueryCallbacks()
PreparedQueryResult result;
//! HandleCharEnumOpcode
- if (_charEnumCallback.ready())
+ if (_charEnumCallback.valid() && _charEnumCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
{
- _charEnumCallback.get(result);
+ result = _charEnumCallback.get();
HandleCharEnum(result);
- _charEnumCallback.cancel();
}
if (_charCreateCallback.IsReady())
{
_charCreateCallback.GetResult(result);
HandleCharCreateCallback(result, _charCreateCallback.GetParam());
- // Don't call FreeResult() here, the callback handler will do that depending on the events in the callback chain
}
//! HandlePlayerLoginOpcode
- if (_charLoginCallback.ready())
+ if (_charLoginCallback.valid() && _charLoginCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
{
- SQLQueryHolder* param;
- _charLoginCallback.get(param);
+ SQLQueryHolder* param = _charLoginCallback.get();
HandlePlayerLogin((LoginQueryHolder*)param);
- _charLoginCallback.cancel();
}
//! HandleAddFriendOpcode
@@ -1135,11 +1139,10 @@ void WorldSession::ProcessQueryCallbacks()
}
//- HandleCharAddIgnoreOpcode
- if (_addIgnoreCallback.ready())
+ if (_addIgnoreCallback.valid() && _addIgnoreCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
{
- _addIgnoreCallback.get(result);
+ result = _addIgnoreCallback.get();
HandleAddIgnoreOpcodeCallBack(result);
- _addIgnoreCallback.cancel();
}
//- SendStabledPet
@@ -1152,11 +1155,10 @@ void WorldSession::ProcessQueryCallbacks()
}
//- HandleStablePet
- if (_stablePetCallback.ready())
+ if (_stablePetCallback.valid() && _stablePetCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
{
- _stablePetCallback.get(result);
+ result = _stablePetCallback.get();
HandleStablePetCallback(result);
- _stablePetCallback.cancel();
}
//- HandleUnstablePet
@@ -1232,14 +1234,28 @@ void WorldSession::InvalidateRBACData()
_RBACData = NULL;
}
-bool WorldSession::DosProtection::EvaluateOpcode(WorldPacket& p) const
+bool WorldSession::DosProtection::EvaluateOpcode(WorldPacket& p, time_t time) const
{
- if (IsOpcodeAllowed(p.GetOpcode()))
+ uint32 maxPacketCounterAllowed = GetMaxPacketCounterAllowed(p.GetOpcode());
+
+ // Return true if there no limit for the opcode
+ if (!maxPacketCounterAllowed)
return true;
- // Opcode not allowed, let the punishment begin
- TC_LOG_INFO("network", "AntiDOS: Account %u, IP: %s, sent unacceptable packet (opc: %u, size: %u)",
- Session->GetAccountId(), Session->GetRemoteAddress().c_str(), p.GetOpcode(), (uint32)p.size());
+ PacketCounter& packetCounter = _PacketThrottlingMap[p.GetOpcode()];
+ if (packetCounter.lastReceiveTime != time)
+ {
+ packetCounter.lastReceiveTime = time;
+ packetCounter.amountCounter = 0;
+ }
+
+ // Check if player is flooding some packets
+ if (++packetCounter.amountCounter <= maxPacketCounterAllowed)
+ return true;
+
+ TC_LOG_WARN("network", "AntiDOS: Account %u, IP: %s, Ping: %u, Character: %s, flooding packet (opc: %s (0x%X), count: %u)",
+ Session->GetAccountId(), Session->GetRemoteAddress().c_str(), Session->GetLatency(), Session->GetPlayerName().c_str(),
+ opcodeTable[p.GetOpcode()].name, p.GetOpcode(), packetCounter.amountCounter);
switch (_policy)
{
@@ -1268,3 +1284,241 @@ bool WorldSession::DosProtection::EvaluateOpcode(WorldPacket& p) const
return true;
}
}
+
+
+uint32 WorldSession::DosProtection::GetMaxPacketCounterAllowed(uint16 opcode) const
+{
+ uint32 maxPacketCounterAllowed;
+ switch (opcode)
+ {
+ // CPU usage sending 2000 packets/second on a 3.70 GHz 4 cores on Win x64
+ // [% CPU mysqld] [%CPU worldserver RelWithDebInfo]
+ case CMSG_PLAYER_LOGIN: // 0 0.5
+ case CMSG_NAME_QUERY: // 0 1
+ case CMSG_PET_NAME_QUERY: // 0 1
+ case CMSG_NPC_TEXT_QUERY: // 0 1
+ case CMSG_ATTACKSTOP: // 0 1
+ case CMSG_QUERY_QUESTS_COMPLETED: // 0 1
+ case CMSG_QUERY_TIME: // 0 1
+ case CMSG_CORPSE_MAP_POSITION_QUERY: // 0 1
+ case CMSG_MOVE_TIME_SKIPPED: // 0 1
+ case MSG_QUERY_NEXT_MAIL_TIME: // 0 1
+ case CMSG_SETSHEATHED: // 0 1
+ case MSG_RAID_TARGET_UPDATE: // 0 1
+ case CMSG_PLAYER_LOGOUT: // 0 1
+ case CMSG_LOGOUT_REQUEST: // 0 1
+ case CMSG_PET_RENAME: // 0 1
+ case CMSG_QUESTGIVER_CANCEL: // 0 1
+ case CMSG_QUESTGIVER_REQUEST_REWARD: // 0 1
+ case CMSG_COMPLETE_CINEMATIC: // 0 1
+ case CMSG_BANKER_ACTIVATE: // 0 1
+ case CMSG_BUY_BANK_SLOT: // 0 1
+ case CMSG_OPT_OUT_OF_LOOT: // 0 1
+ case CMSG_DUEL_ACCEPTED: // 0 1
+ case CMSG_DUEL_CANCELLED: // 0 1
+ case CMSG_CALENDAR_COMPLAIN: // 0 1
+ case CMSG_QUEST_QUERY: // 0 1.5
+ case CMSG_ITEM_QUERY_SINGLE: // 0 1.5
+ case CMSG_ITEM_NAME_QUERY: // 0 1.5
+ case CMSG_GAMEOBJECT_QUERY: // 0 1.5
+ case CMSG_CREATURE_QUERY: // 0 1.5
+ case CMSG_QUESTGIVER_STATUS_QUERY: // 0 1.5
+ case CMSG_GUILD_QUERY: // 0 1.5
+ case CMSG_ARENA_TEAM_QUERY: // 0 1.5
+ case CMSG_TAXINODE_STATUS_QUERY: // 0 1.5
+ case CMSG_TAXIQUERYAVAILABLENODES: // 0 1.5
+ case CMSG_QUESTGIVER_QUERY_QUEST: // 0 1.5
+ case CMSG_PAGE_TEXT_QUERY: // 0 1.5
+ case MSG_QUERY_GUILD_BANK_TEXT: // 0 1.5
+ case MSG_CORPSE_QUERY: // 0 1.5
+ case MSG_MOVE_SET_FACING: // 0 1.5
+ case CMSG_REQUEST_PARTY_MEMBER_STATS: // 0 1.5
+ case CMSG_QUESTGIVER_COMPLETE_QUEST: // 0 1.5
+ case CMSG_SET_ACTION_BUTTON: // 0 1.5
+ case CMSG_RESET_INSTANCES: // 0 1.5
+ case CMSG_HEARTH_AND_RESURRECT: // 0 1.5
+ case CMSG_TOGGLE_PVP: // 0 1.5
+ case CMSG_PET_ABANDON: // 0 1.5
+ case CMSG_ACTIVATETAXIEXPRESS: // 0 1.5
+ case CMSG_ACTIVATETAXI: // 0 1.5
+ case CMSG_SELF_RES: // 0 1.5
+ case CMSG_UNLEARN_SKILL: // 0 1.5
+ case CMSG_EQUIPMENT_SET_SAVE: // 0 1.5
+ case CMSG_DELETEEQUIPMENT_SET: // 0 1.5
+ case CMSG_DISMISS_CRITTER: // 0 1.5
+ case CMSG_REPOP_REQUEST: // 0 1.5
+ case CMSG_GROUP_INVITE: // 0 1.5
+ case CMSG_GROUP_DECLINE: // 0 1.5
+ case CMSG_GROUP_ACCEPT: // 0 1.5
+ case CMSG_GROUP_UNINVITE_GUID: // 0 1.5
+ case CMSG_GROUP_UNINVITE: // 0 1.5
+ case CMSG_GROUP_DISBAND: // 0 1.5
+ case CMSG_BATTLEMASTER_JOIN_ARENA: // 0 1.5
+ case CMSG_LEAVE_BATTLEFIELD: // 0 1.5
+ case MSG_GUILD_BANK_LOG_QUERY: // 0 2
+ case CMSG_LOGOUT_CANCEL: // 0 2
+ case CMSG_REALM_SPLIT: // 0 2
+ case CMSG_ALTER_APPEARANCE: // 0 2
+ case CMSG_QUEST_CONFIRM_ACCEPT: // 0 2
+ case MSG_GUILD_EVENT_LOG_QUERY: // 0 2.5
+ case CMSG_READY_FOR_ACCOUNT_DATA_TIMES: // 0 2.5
+ case CMSG_QUESTGIVER_STATUS_MULTIPLE_QUERY: // 0 2.5
+ case CMSG_BEGIN_TRADE: // 0 2.5
+ case CMSG_INITIATE_TRADE: // 0 3
+ case CMSG_MESSAGECHAT: // 0 3.5
+ case CMSG_INSPECT: // 0 3.5
+ case CMSG_AREA_SPIRIT_HEALER_QUERY: // not profiled
+ case CMSG_STANDSTATECHANGE: // not profiled
+ case MSG_RANDOM_ROLL: // not profiled
+ case CMSG_TIME_SYNC_RESP: // not profiled
+ case CMSG_TRAINER_BUY_SPELL: // not profiled
+ {
+ // "0" is a magic number meaning there's no limit for the opcode.
+ // All the opcodes above must cause little CPU usage and no sync/async database queries at all
+ maxPacketCounterAllowed = 0;
+ break;
+ }
+
+ case CMSG_QUESTGIVER_ACCEPT_QUEST: // 0 4
+ case CMSG_QUESTLOG_REMOVE_QUEST: // 0 4
+ case CMSG_QUESTGIVER_CHOOSE_REWARD: // 0 4
+ case CMSG_CONTACT_LIST: // 0 5
+ case CMSG_LEARN_PREVIEW_TALENTS: // 0 6
+ case CMSG_AUTOBANK_ITEM: // 0 6
+ case CMSG_AUTOSTORE_BANK_ITEM: // 0 6
+ case CMSG_WHO: // 0 7
+ case CMSG_PLAYER_VEHICLE_ENTER: // 0 8
+ case CMSG_LEARN_PREVIEW_TALENTS_PET: // not profiled
+ case MSG_MOVE_HEARTBEAT:
+ {
+ maxPacketCounterAllowed = 200;
+ break;
+ }
+
+ case CMSG_GUILD_SET_PUBLIC_NOTE: // 1 2 1 async db query
+ case CMSG_GUILD_SET_OFFICER_NOTE: // 1 2 1 async db query
+ case CMSG_SET_CONTACT_NOTES: // 1 2.5 1 async db query
+ case CMSG_CALENDAR_GET_CALENDAR: // 0 1.5 medium upload bandwidth usage
+ case CMSG_GUILD_BANK_QUERY_TAB: // 0 3.5 medium upload bandwidth usage
+ case CMSG_QUERY_INSPECT_ACHIEVEMENTS: // 0 13 high upload bandwidth usage
+ case CMSG_GAMEOBJ_REPORT_USE: // not profiled
+ case CMSG_GAMEOBJ_USE: // not profiled
+ case MSG_PETITION_DECLINE: // not profiled
+ {
+ maxPacketCounterAllowed = 50;
+ break;
+ }
+
+ case CMSG_QUEST_POI_QUERY: // 0 25 very high upload bandwidth usage
+ {
+ maxPacketCounterAllowed = MAX_QUEST_LOG_SIZE;
+ break;
+ }
+
+ case CMSG_GM_REPORT_LAG: // 1 3 1 async db query
+ case CMSG_SPELLCLICK: // not profiled
+ case CMSG_REMOVE_GLYPH: // not profiled
+ case CMSG_DISMISS_CONTROLLED_VEHICLE: // not profiled
+ {
+ maxPacketCounterAllowed = 20;
+ break;
+ }
+
+ case CMSG_PETITION_SIGN: // 9 4 2 sync 1 async db queries
+ case CMSG_TURN_IN_PETITION: // 8 5.5 2 sync db query
+ case CMSG_GROUP_CHANGE_SUB_GROUP: // 6 5 1 sync 1 async db queries
+ case CMSG_PETITION_QUERY: // 4 3.5 1 sync db query
+ case CMSG_CHAR_RACE_CHANGE: // 5 4 1 sync db query
+ case CMSG_CHAR_CUSTOMIZE: // 5 5 1 sync db query
+ case CMSG_CHAR_FACTION_CHANGE: // 5 5 1 sync db query
+ case CMSG_CHAR_DELETE: // 4 4 1 sync db query
+ case CMSG_DEL_FRIEND: // 7 5 1 async db query
+ case CMSG_ADD_FRIEND: // 6 4 1 async db query
+ case CMSG_CHAR_RENAME: // 5 3 1 async db query
+ case CMSG_GMSURVEY_SUBMIT: // 2 3 1 async db query
+ case CMSG_BUG: // 1 1 1 async db query
+ case CMSG_GROUP_SET_LEADER: // 1 2 1 async db query
+ case CMSG_GROUP_RAID_CONVERT: // 1 5 1 async db query
+ case CMSG_GROUP_ASSISTANT_LEADER: // 1 2 1 async db query
+ case CMSG_CALENDAR_ADD_EVENT: // 21 10 2 async db query
+ case CMSG_PETITION_BUY: // not profiled 1 sync 1 async db queries
+ case CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE: // not profiled
+ case CMSG_REQUEST_VEHICLE_PREV_SEAT: // not profiled
+ case CMSG_REQUEST_VEHICLE_NEXT_SEAT: // not profiled
+ case CMSG_REQUEST_VEHICLE_SWITCH_SEAT: // not profiled
+ case CMSG_REQUEST_VEHICLE_EXIT: // not profiled
+ case CMSG_CONTROLLER_EJECT_PASSENGER: // not profiled
+ case CMSG_ITEM_REFUND: // not profiled
+ case CMSG_SOCKET_GEMS: // not profiled
+ case CMSG_WRAP_ITEM: // not profiled
+ case CMSG_REPORT_PVP_AFK: // not profiled
+ {
+ maxPacketCounterAllowed = 10;
+ break;
+ }
+
+ case CMSG_CHAR_CREATE: // 7 5 3 async db queries
+ case CMSG_CHAR_ENUM: // 22 3 2 async db queries
+ case CMSG_GMTICKET_CREATE: // 1 25 1 async db query
+ case CMSG_GMTICKET_UPDATETEXT: // 0 15 1 async db query
+ case CMSG_GMTICKET_DELETETICKET: // 1 25 1 async db query
+ case CMSG_GMRESPONSE_RESOLVE: // 1 25 1 async db query
+ case CMSG_CALENDAR_UPDATE_EVENT: // not profiled
+ case CMSG_CALENDAR_REMOVE_EVENT: // not profiled
+ case CMSG_CALENDAR_COPY_EVENT: // not profiled
+ case CMSG_CALENDAR_EVENT_INVITE: // not profiled
+ case CMSG_CALENDAR_EVENT_SIGNUP: // not profiled
+ case CMSG_CALENDAR_EVENT_RSVP: // not profiled
+ case CMSG_CALENDAR_EVENT_REMOVE_INVITE: // not profiled
+ case CMSG_CALENDAR_EVENT_MODERATOR_STATUS: // not profiled
+ case CMSG_ARENA_TEAM_INVITE: // not profiled
+ case CMSG_ARENA_TEAM_ACCEPT: // not profiled
+ case CMSG_ARENA_TEAM_DECLINE: // not profiled
+ case CMSG_ARENA_TEAM_LEAVE: // not profiled
+ case CMSG_ARENA_TEAM_DISBAND: // not profiled
+ case CMSG_ARENA_TEAM_REMOVE: // not profiled
+ case CMSG_ARENA_TEAM_LEADER: // not profiled
+ case CMSG_LOOT_METHOD: // not profiled
+ case CMSG_GUILD_INVITE: // not profiled
+ case CMSG_GUILD_ACCEPT: // not profiled
+ case CMSG_GUILD_DECLINE: // not profiled
+ case CMSG_GUILD_LEAVE: // not profiled
+ case CMSG_GUILD_DISBAND: // not profiled
+ case CMSG_GUILD_LEADER: // not profiled
+ case CMSG_GUILD_MOTD: // not profiled
+ case CMSG_GUILD_RANK: // not profiled
+ case CMSG_GUILD_ADD_RANK: // not profiled
+ case CMSG_GUILD_DEL_RANK: // not profiled
+ case CMSG_GUILD_INFO_TEXT: // not profiled
+ case CMSG_GUILD_BANK_DEPOSIT_MONEY: // not profiled
+ case CMSG_GUILD_BANK_WITHDRAW_MONEY: // not profiled
+ case CMSG_GUILD_BANK_BUY_TAB: // not profiled
+ case CMSG_GUILD_BANK_UPDATE_TAB: // not profiled
+ case CMSG_SET_GUILD_BANK_TEXT: // not profiled
+ case MSG_SAVE_GUILD_EMBLEM: // not profiled
+ case MSG_PETITION_RENAME: // not profiled
+ case MSG_TALENT_WIPE_CONFIRM: // not profiled
+ case MSG_SET_DUNGEON_DIFFICULTY: // not profiled
+ case MSG_SET_RAID_DIFFICULTY: // not profiled
+ case MSG_PARTY_ASSIGNMENT: // not profiled
+ case MSG_RAID_READY_CHECK: // not profiled
+ {
+ maxPacketCounterAllowed = 3;
+ break;
+ }
+
+ case CMSG_ITEM_REFUND_INFO: // not profiled
+ {
+ maxPacketCounterAllowed = PLAYER_SLOTS_COUNT;
+ break;
+ }
+
+ default:
+ {
+ maxPacketCounterAllowed = 100;
+ break;
+ }
+ }
+
+ return maxPacketCounterAllowed;
+}
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 0af6069a0e5..2e6a699fc7c 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -28,9 +28,11 @@
#include "AddonMgr.h"
#include "DatabaseEnv.h"
#include "World.h"
+#include "Opcodes.h"
#include "WorldPacket.h"
#include "Cryptography/BigNumber.h"
#include "AccountMgr.h"
+#include <unordered_set>
class Creature;
class GameObject;
@@ -50,6 +52,7 @@ struct AuctionEntry;
struct DeclinedName;
struct ItemTemplate;
struct MovementInfo;
+struct TradeStatusInfo;
namespace lfg
{
@@ -138,6 +141,10 @@ public:
protected:
WorldSession* const m_pSession;
+
+private:
+ PacketFilter(PacketFilter const& right) = delete;
+ PacketFilter& operator=(PacketFilter const& right) = delete;
};
//process only thread-safe packets in Map::Update()
class MapSessionFilter : public PacketFilter
@@ -146,9 +153,9 @@ public:
explicit MapSessionFilter(WorldSession* pSession) : PacketFilter(pSession) { }
~MapSessionFilter() { }
- virtual bool Process(WorldPacket* packet);
+ virtual bool Process(WorldPacket* packet) override;
//in Map::Update() we do not process player logout!
- virtual bool ProcessLogout() const { return false; }
+ virtual bool ProcessLogout() const override { return false; }
};
//class used to filer only thread-unsafe packets from queue
@@ -159,7 +166,7 @@ public:
explicit WorldSessionFilter(WorldSession* pSession) : PacketFilter(pSession) { }
~WorldSessionFilter() { }
- virtual bool Process(WorldPacket* packet);
+ virtual bool Process(WorldPacket* packet) override;
};
// Proxy structure to contain data passed to callback function,
@@ -172,7 +179,7 @@ class CharacterCreateInfo
protected:
CharacterCreateInfo(std::string const& name, uint8 race, uint8 cclass, uint8 gender, uint8 skin, uint8 face, uint8 hairStyle, uint8 hairColor, uint8 facialHair, uint8 outfitId,
WorldPacket& data) : Name(name), Race(race), Class(cclass), Gender(gender), Skin(skin), Face(face), HairStyle(hairStyle), HairColor(hairColor), FacialHair(facialHair),
- OutfitId(outfitId), Data(data), CharCount(0)
+ OutfitId(outfitId), Data(std::move(data)), CharCount(0)
{ }
/// User specified variables
@@ -192,11 +199,17 @@ class CharacterCreateInfo
uint8 CharCount;
};
+struct PacketCounter
+{
+ time_t lastReceiveTime;
+ uint32 amountCounter;
+};
+
/// Player session in the World
class WorldSession
{
public:
- WorldSession(uint32 id, WorldSocket* sock, AccountTypes sec, uint8 expansion, time_t mute_time, LocaleConstant locale, uint32 recruiter, bool isARecruiter);
+ WorldSession(uint32 id, std::shared_ptr<WorldSocket> sock, AccountTypes sec, uint8 expansion, time_t mute_time, LocaleConstant locale, uint32 recruiter, bool isARecruiter);
~WorldSession();
bool PlayerLoading() const { return m_playerLoading; }
@@ -210,7 +223,7 @@ class WorldSession
void ReadMovementInfo(WorldPacket& data, MovementInfo* mi);
void WriteMovementInfo(WorldPacket* data, MovementInfo* mi);
- void SendPacket(WorldPacket const* packet);
+ void SendPacket(WorldPacket* packet);
void SendNotification(const char *format, ...) ATTR_PRINTF(2, 3);
void SendNotification(uint32 string_id, ...);
void SendPetNameInvalid(uint32 error, std::string const& name, DeclinedName *declinedName);
@@ -285,7 +298,7 @@ class WorldSession
void SendBattleGroundList(uint64 guid, BattlegroundTypeId bgTypeId = BATTLEGROUND_RB);
- void SendTradeStatus(TradeStatus status);
+ void SendTradeStatus(TradeStatusInfo const& status);
void SendUpdateTrade(bool trader_data = true);
void SendCancelTrade();
@@ -360,21 +373,21 @@ class WorldSession
void SetLatency(uint32 latency) { m_latency = latency; }
void ResetClientTimeDelay() { m_clientTimeDelay = 0; }
- ACE_Atomic_Op<ACE_Thread_Mutex, time_t> m_timeOutTime;
+ std::atomic<int32> m_timeOutTime;
+
void UpdateTimeOutTime(uint32 diff)
{
- if (time_t(diff) > m_timeOutTime.value())
- m_timeOutTime = 0;
- else
- m_timeOutTime -= diff;
+ m_timeOutTime -= int32(diff);
}
+
void ResetTimeOutTime()
{
- m_timeOutTime = sWorld->getIntConfig(CONFIG_SOCKET_TIMEOUTTIME);
+ m_timeOutTime = int32(sWorld->getIntConfig(CONFIG_SOCKET_TIMEOUTTIME));
}
+
bool IsConnectionIdle() const
{
- return (m_timeOutTime <= 0 && !m_inQueue);
+ return m_timeOutTime <= 0 && !m_inQueue;
}
// Recruit-A-Friend Handling
@@ -432,7 +445,6 @@ class WorldSession
void HandleForceSpeedChangeAck(WorldPacket& recvData);
void HandlePingOpcode(WorldPacket& recvPacket);
- void HandleAuthSessionOpcode(WorldPacket& recvPacket);
void HandleRepopRequestOpcode(WorldPacket& recvPacket);
void HandleAutostoreLootItemOpcode(WorldPacket& recvPacket);
void HandleLootMoneyOpcode(WorldPacket& recvPacket);
@@ -717,7 +729,6 @@ class WorldSession
void HandleCompleteCinematic(WorldPacket& recvPacket);
void HandleNextCinematicCamera(WorldPacket& recvPacket);
- void HandlePageQuerySkippedOpcode(WorldPacket& recvPacket);
void HandlePageTextQueryOpcode(WorldPacket& recvPacket);
void HandleTutorialFlag (WorldPacket& recvData);
@@ -925,8 +936,7 @@ class WorldSession
friend class World;
public:
DosProtection(WorldSession* s) : Session(s), _policy((Policy)sWorld->getIntConfig(CONFIG_PACKET_SPOOF_POLICY)) { }
- bool EvaluateOpcode(WorldPacket& p) const;
- void AllowOpcode(uint16 opcode, bool allow) { _isOpcodeAllowed[opcode] = allow; }
+ bool EvaluateOpcode(WorldPacket& p, time_t time) const;
protected:
enum Policy
{
@@ -935,27 +945,26 @@ class WorldSession
POLICY_BAN,
};
- bool IsOpcodeAllowed(uint16 opcode) const
- {
- OpcodeStatusMap::const_iterator itr = _isOpcodeAllowed.find(opcode);
- if (itr == _isOpcodeAllowed.end())
- return true; // No presence in the map indicates this is the first time the opcode was sent this session, so allow
-
- return itr->second;
- }
+ uint32 GetMaxPacketCounterAllowed(uint16 opcode) const;
WorldSession* Session;
private:
- typedef UNORDERED_MAP<uint16, bool> OpcodeStatusMap;
- OpcodeStatusMap _isOpcodeAllowed; // could be bool array, but wouldn't be practical for game versions with non-linear opcodes
Policy _policy;
+ typedef std::unordered_map<uint16, PacketCounter> PacketThrottlingMap;
+ // mark this member as "mutable" so it can be modified even in const functions
+ mutable PacketThrottlingMap _PacketThrottlingMap;
+
+ DosProtection(DosProtection const& right) = delete;
+ DosProtection& operator=(DosProtection const& right) = delete;
} AntiDOS;
private:
// private trade methods
void moveItems(Item* myItems[], Item* hisItems[]);
+ bool CanUseBank(uint64 bankerGUID = 0) const;
+
// logging helper
void LogUnexpectedOpcode(WorldPacket* packet, const char* status, const char *reason);
void LogUnprocessedTail(WorldPacket* packet);
@@ -970,10 +979,11 @@ class WorldSession
// characters who failed on Player::BuildEnumData shouldn't login
std::set<uint32> _legitCharacters;
- uint32 m_GUIDLow; // set loggined or recently logout player (while m_playerRecentlyLogout set)
+ uint32 m_GUIDLow; // set logined or recently logout player (while m_playerRecentlyLogout set)
Player* _player;
- WorldSocket* m_Socket;
- std::string m_Address;
+ std::shared_ptr<WorldSocket> m_Socket;
+ std::string m_Address; // Current Remote Address
+ // std::string m_LAddress; // Last Attempted Remote Adress - we can not set attempted ip for a non-existing session!
AccountTypes _security;
uint32 _accountId;
@@ -992,17 +1002,22 @@ class WorldSession
bool m_playerSave;
LocaleConstant m_sessionDbcLocale;
LocaleConstant m_sessionDbLocaleIndex;
- uint32 m_latency;
- uint32 m_clientTimeDelay;
+ std::atomic<uint32> m_latency;
+ std::atomic<uint32> m_clientTimeDelay;
AccountData m_accountData[NUM_ACCOUNT_DATA_TYPES];
uint32 m_Tutorials[MAX_ACCOUNT_TUTORIAL_VALUES];
bool m_TutorialsChanged;
AddonsList m_addonsList;
uint32 recruiterId;
bool isRecruiter;
- ACE_Based::LockedQueue<WorldPacket*, ACE_Thread_Mutex> _recvQueue;
- time_t timeLastWhoCommand;
+ LockedQueue<WorldPacket*> _recvQueue;
rbac::RBACData* _RBACData;
+ uint32 expireTime;
+ bool forceExit;
+ uint64 m_currentBankerGUID;
+
+ WorldSession(WorldSession const& right) = delete;
+ WorldSession& operator=(WorldSession const& right) = delete;
};
#endif
/// @}
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index 605b863bfa1..ca8e2cd5a34 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -1,750 +1,167 @@
/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <ace/Message_Block.h>
-#include <ace/OS_NS_string.h>
-#include <ace/OS_NS_unistd.h>
-#include <ace/os_include/arpa/os_inet.h>
-#include <ace/os_include/netinet/os_tcp.h>
-#include <ace/os_include/sys/os_types.h>
-#include <ace/os_include/sys/os_socket.h>
-#include <ace/OS_NS_string.h>
-#include <ace/Reactor.h>
-#include <ace/Auto_Ptr.h>
+* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
#include "WorldSocket.h"
-#include "Common.h"
-#include "Player.h"
-#include "Util.h"
-#include "World.h"
-#include "WorldPacket.h"
-#include "SharedDefines.h"
-#include "ByteBuffer.h"
-#include "Opcodes.h"
-#include "DatabaseEnv.h"
#include "BigNumber.h"
+#include "Opcodes.h"
+#include "Player.h"
+#include "ScriptMgr.h"
#include "SHA1.h"
-#include "WorldSession.h"
-#include "WorldSocketMgr.h"
-#include "Log.h"
#include "PacketLog.h"
-#include "ScriptMgr.h"
-#include "AccountMgr.h"
-
-#if defined(__GNUC__)
-#pragma pack(1)
-#else
-#pragma pack(push, 1)
-#endif
-
-struct ServerPktHeader
-{
- /**
- * size is the length of the payload _plus_ the length of the opcode
- */
- ServerPktHeader(uint32 size, uint16 cmd) : size(size)
- {
- uint8 headerIndex=0;
- if (isLargePacket())
- {
- TC_LOG_DEBUG("network", "initializing large server to client packet. Size: %u, cmd: %u", size, cmd);
- header[headerIndex++] = 0x80 | (0xFF & (size >> 16));
- }
- header[headerIndex++] = 0xFF &(size >> 8);
- header[headerIndex++] = 0xFF & size;
-
- header[headerIndex++] = 0xFF & cmd;
- header[headerIndex++] = 0xFF & (cmd >> 8);
- }
-
- uint8 getHeaderLength()
- {
- // cmd = 2 bytes, size= 2||3bytes
- return 2 + (isLargePacket() ? 3 : 2);
- }
-
- bool isLargePacket() const
- {
- return size > 0x7FFF;
- }
-
- const uint32 size;
- uint8 header[5];
-};
-
-struct ClientPktHeader
-{
- uint16 size;
- uint32 cmd;
-};
-
-#if defined(__GNUC__)
-#pragma pack()
-#else
-#pragma pack(pop)
-#endif
-
-WorldSocket::WorldSocket (void): WorldHandler(),
-m_LastPingTime(ACE_Time_Value::zero), m_OverSpeedPings(0), m_Session(0),
-m_RecvWPct(0), m_RecvPct(), m_Header(sizeof (ClientPktHeader)),
-m_OutBuffer(0), m_OutBufferSize(65536), m_OutActive(false),
-m_Seed(static_cast<uint32> (rand32()))
-{
- reference_counting_policy().value (ACE_Event_Handler::Reference_Counting_Policy::ENABLED);
+#include <memory>
- msg_queue()->high_water_mark(8 * 1024 * 1024);
- msg_queue()->low_water_mark(8 * 1024 * 1024);
-}
+using boost::asio::ip::tcp;
-WorldSocket::~WorldSocket (void)
+WorldSocket::WorldSocket(tcp::socket&& socket)
+ : Socket(std::move(socket), sizeof(ClientPktHeader)), _authSeed(rand32()), _OverSpeedPings(0), _worldSession(nullptr)
{
- delete m_RecvWPct;
-
- if (m_OutBuffer)
- m_OutBuffer->release();
-
- closing_ = true;
-
- peer().close();
}
-bool WorldSocket::IsClosed (void) const
+void WorldSocket::Start()
{
- return closing_;
+ sScriptMgr->OnSocketOpen(shared_from_this());
+ AsyncReadHeader();
+ HandleSendAuthSession();
}
-void WorldSocket::CloseSocket (void)
+void WorldSocket::HandleSendAuthSession()
{
- {
- ACE_GUARD (LockType, Guard, m_OutBufferLock);
-
- if (closing_)
- return;
-
- closing_ = true;
- peer().close_writer();
- }
+ WorldPacket packet(SMSG_AUTH_CHALLENGE, 37);
+ packet << uint32(1); // 1...31
+ packet << uint32(_authSeed);
- {
- ACE_GUARD (LockType, Guard, m_SessionLock);
+ BigNumber seed1;
+ seed1.SetRand(16 * 8);
+ packet.append(seed1.AsByteArray(16).get(), 16); // new encryption seeds
- m_Session = NULL;
- }
-}
+ BigNumber seed2;
+ seed2.SetRand(16 * 8);
+ packet.append(seed2.AsByteArray(16).get(), 16); // new encryption seeds
-const std::string& WorldSocket::GetRemoteAddress (void) const
-{
- return m_Address;
+ AsyncWrite(packet);
}
-int WorldSocket::SendPacket(WorldPacket const& pct)
+void WorldSocket::ReadHeaderHandler()
{
- ACE_GUARD_RETURN (LockType, Guard, m_OutBufferLock, -1);
+ _authCrypt.DecryptRecv(GetHeaderBuffer(), sizeof(ClientPktHeader));
- if (closing_)
- return -1;
+ ClientPktHeader* header = reinterpret_cast<ClientPktHeader*>(GetHeaderBuffer());
+ EndianConvertReverse(header->size);
+ EndianConvert(header->cmd);
- // Dump outgoing packet
- if (sPacketLog->CanLogPacket())
- sPacketLog->LogPacket(pct, SERVER_TO_CLIENT);
-
- WorldPacket const* pkt = &pct;
-
-
- if (m_Session)
- TC_LOG_TRACE("network.opcode", "S->C: %s %s", m_Session->GetPlayerInfo().c_str(), GetOpcodeNameForLogging(pkt->GetOpcode()).c_str());
-
- sScriptMgr->OnPacketSend(this, *pkt);
-
- ServerPktHeader header(pkt->size()+2, pkt->GetOpcode());
- m_Crypt.EncryptSend ((uint8*)header.header, header.getHeaderLength());
-
- if (m_OutBuffer->space() >= pkt->size() + header.getHeaderLength() && msg_queue()->is_empty())
+ if (!header->IsValid())
{
- // Put the packet on the buffer.
- if (m_OutBuffer->copy((char*) header.header, header.getHeaderLength()) == -1)
- ACE_ASSERT (false);
-
- if (!pkt->empty())
- if (m_OutBuffer->copy((char*) pkt->contents(), pkt->size()) == -1)
- ACE_ASSERT (false);
- }
- else
- {
- // Enqueue the packet.
- ACE_Message_Block* mb;
-
- ACE_NEW_RETURN(mb, ACE_Message_Block(pkt->size() + header.getHeaderLength()), -1);
-
- mb->copy((char*) header.header, header.getHeaderLength());
-
- if (!pkt->empty())
- mb->copy((const char*)pkt->contents(), pkt->size());
-
- if (msg_queue()->enqueue_tail(mb, (ACE_Time_Value*)&ACE_Time_Value::zero) == -1)
+ if (_worldSession)
{
- TC_LOG_ERROR("network", "WorldSocket::SendPacket enqueue_tail failed");
- mb->release();
- return -1;
+ Player* player = _worldSession->GetPlayer();
+ TC_LOG_ERROR("network", "WorldSocket::ReadHeaderHandler(): client (account: %u, char [GUID: %u, name: %s]) sent malformed packet (size: %hu, cmd: %u)",
+ _worldSession->GetAccountId(), player ? player->GetGUIDLow() : 0, player ? player->GetName().c_str() : "<none>", header->size, header->cmd);
}
- }
-
- return 0;
-}
-
-long WorldSocket::AddReference (void)
-{
- return static_cast<long> (add_reference());
-}
-
-long WorldSocket::RemoveReference (void)
-{
- return static_cast<long> (remove_reference());
-}
-
-int WorldSocket::open (void *a)
-{
- ACE_UNUSED_ARG (a);
-
- // Prevent double call to this func.
- if (m_OutBuffer)
- return -1;
-
- // This will also prevent the socket from being Updated
- // while we are initializing it.
- m_OutActive = true;
-
- // Hook for the manager.
- if (sWorldSocketMgr->OnSocketOpen(this) == -1)
- return -1;
-
- // Allocate the buffer.
- ACE_NEW_RETURN (m_OutBuffer, ACE_Message_Block (m_OutBufferSize), -1);
-
- // Store peer address.
- ACE_INET_Addr remote_addr;
-
- if (peer().get_remote_addr(remote_addr) == -1)
- {
- TC_LOG_ERROR("network", "WorldSocket::open: peer().get_remote_addr errno = %s", ACE_OS::strerror (errno));
- return -1;
- }
-
- m_Address = remote_addr.get_host_addr();
-
- if (HandleSendAuthSession() == -1)
- return -1;
+ else
+ TC_LOG_ERROR("network", "WorldSocket::ReadHeaderHandler(): client %s sent malformed packet (size: %hu, cmd: %u)",
+ GetRemoteIpAddress().to_string().c_str(), header->size, header->cmd);
- // Register with ACE Reactor
- if (reactor()->register_handler(this, ACE_Event_Handler::READ_MASK | ACE_Event_Handler::WRITE_MASK) == -1)
- {
- TC_LOG_ERROR("network", "WorldSocket::open: unable to register client handler errno = %s", ACE_OS::strerror (errno));
- return -1;
+ CloseSocket();
+ return;
}
- // reactor takes care of the socket from now on
- remove_reference();
-
- return 0;
+ AsyncReadData(header->size - sizeof(header->cmd));
}
-int WorldSocket::close (u_long)
+void WorldSocket::ReadDataHandler()
{
- shutdown();
+ ClientPktHeader* header = reinterpret_cast<ClientPktHeader*>(GetHeaderBuffer());
- closing_ = true;
+ uint16 opcode = uint16(header->cmd);
- remove_reference();
+ std::string opcodeName = GetOpcodeNameForLogging(opcode);
- return 0;
-}
+ WorldPacket packet(opcode, MoveData());
-int WorldSocket::handle_input (ACE_HANDLE)
-{
- if (closing_)
- return -1;
+ if (sPacketLog->CanLogPacket())
+ sPacketLog->LogPacket(packet, CLIENT_TO_SERVER, GetRemoteIpAddress(), GetRemotePort());
+
+ TC_LOG_TRACE("network.opcode", "C->S: %s %s", (_worldSession ? _worldSession->GetPlayerInfo() : GetRemoteIpAddress().to_string()).c_str(), opcodeName.c_str());
- switch (handle_input_missing_data())
+ switch (opcode)
{
- case -1 :
- {
- if ((errno == EWOULDBLOCK) ||
- (errno == EAGAIN))
+ case CMSG_PING:
+ HandlePing(packet);
+ break;
+ case CMSG_AUTH_SESSION:
+ if (_worldSession)
{
- return Update(); // interesting line, isn't it ?
+ TC_LOG_ERROR("network", "WorldSocket::ProcessIncoming: received duplicate CMSG_AUTH_SESSION from %s", _worldSession->GetPlayerInfo().c_str());
+ break;
}
- TC_LOG_DEBUG("network", "WorldSocket::handle_input: Peer error closing connection errno = %s", ACE_OS::strerror (errno));
-
- errno = ECONNRESET;
- return -1;
- }
- case 0:
- {
- TC_LOG_DEBUG("network", "WorldSocket::handle_input: Peer has closed connection");
-
- errno = ECONNRESET;
- return -1;
- }
- case 1:
- return 1;
+ HandleAuthSession(packet);
+ break;
+ case CMSG_KEEP_ALIVE:
+ TC_LOG_DEBUG("network", "%s", opcodeName.c_str());
+ sScriptMgr->OnPacketReceive(_worldSession, packet);
+ break;
default:
- return Update(); // another interesting line ;)
- }
-
- ACE_NOTREACHED(return -1);
-}
-
-int WorldSocket::handle_output (ACE_HANDLE)
-{
- ACE_GUARD_RETURN (LockType, Guard, m_OutBufferLock, -1);
-
- if (closing_)
- return -1;
-
- size_t send_len = m_OutBuffer->length();
-
- if (send_len == 0)
- return handle_output_queue(Guard);
-
-#ifdef MSG_NOSIGNAL
- ssize_t n = peer().send (m_OutBuffer->rd_ptr(), send_len, MSG_NOSIGNAL);
-#else
- ssize_t n = peer().send (m_OutBuffer->rd_ptr(), send_len);
-#endif // MSG_NOSIGNAL
-
- if (n == 0)
- return -1;
- else if (n == -1)
- {
- if (errno == EWOULDBLOCK || errno == EAGAIN)
- return schedule_wakeup_output (Guard);
-
- return -1;
- }
- else if (n < (ssize_t)send_len) //now n > 0
- {
- m_OutBuffer->rd_ptr (static_cast<size_t> (n));
-
- // move the data to the base of the buffer
- m_OutBuffer->crunch();
-
- return schedule_wakeup_output (Guard);
- }
- else //now n == send_len
- {
- m_OutBuffer->reset();
-
- return handle_output_queue (Guard);
- }
-
- ACE_NOTREACHED (return 0);
-}
-
-int WorldSocket::handle_output_queue (GuardType& g)
-{
- if (msg_queue()->is_empty())
- return cancel_wakeup_output(g);
-
- ACE_Message_Block* mblk;
-
- if (msg_queue()->dequeue_head(mblk, (ACE_Time_Value*)&ACE_Time_Value::zero) == -1)
- {
- TC_LOG_ERROR("network", "WorldSocket::handle_output_queue dequeue_head");
- return -1;
- }
-
- const size_t send_len = mblk->length();
-
-#ifdef MSG_NOSIGNAL
- ssize_t n = peer().send(mblk->rd_ptr(), send_len, MSG_NOSIGNAL);
-#else
- ssize_t n = peer().send(mblk->rd_ptr(), send_len);
-#endif // MSG_NOSIGNAL
-
- if (n == 0)
- {
- mblk->release();
-
- return -1;
- }
- else if (n == -1)
- {
- if (errno == EWOULDBLOCK || errno == EAGAIN)
- {
- msg_queue()->enqueue_head(mblk, (ACE_Time_Value*) &ACE_Time_Value::zero);
- return schedule_wakeup_output (g);
- }
-
- mblk->release();
- return -1;
- }
- else if (n < (ssize_t)send_len) //now n > 0
- {
- mblk->rd_ptr(static_cast<size_t> (n));
-
- if (msg_queue()->enqueue_head(mblk, (ACE_Time_Value*) &ACE_Time_Value::zero) == -1)
- {
- TC_LOG_ERROR("network", "WorldSocket::handle_output_queue enqueue_head");
- mblk->release();
- return -1;
- }
-
- return schedule_wakeup_output (g);
- }
- else //now n == send_len
- {
- mblk->release();
-
- return msg_queue()->is_empty() ? cancel_wakeup_output(g) : ACE_Event_Handler::WRITE_MASK;
- }
-
- ACE_NOTREACHED(return -1);
-}
-
-int WorldSocket::handle_close (ACE_HANDLE h, ACE_Reactor_Mask)
-{
- // Critical section
- {
- ACE_GUARD_RETURN (LockType, Guard, m_OutBufferLock, -1);
-
- closing_ = true;
-
- if (h == ACE_INVALID_HANDLE)
- peer().close_writer();
- }
-
- // Critical section
- {
- ACE_GUARD_RETURN (LockType, Guard, m_SessionLock, -1);
-
- m_Session = NULL;
- }
-
- reactor()->remove_handler(this, ACE_Event_Handler::DONT_CALL | ACE_Event_Handler::ALL_EVENTS_MASK);
- return 0;
-}
-
-int WorldSocket::Update (void)
-{
- if (closing_)
- return -1;
-
- if (m_OutActive)
- return 0;
-
- {
- ACE_GUARD_RETURN (LockType, Guard, m_OutBufferLock, 0);
- if (m_OutBuffer->length() == 0 && msg_queue()->is_empty())
- return 0;
- }
-
- int ret;
- do
- ret = handle_output(get_handle());
- while (ret > 0);
-
- return ret;
-}
-
-int WorldSocket::handle_input_header (void)
-{
- ACE_ASSERT(m_RecvWPct == NULL);
-
- ACE_ASSERT(m_Header.length() == sizeof(ClientPktHeader));
-
- m_Crypt.DecryptRecv ((uint8*)m_Header.rd_ptr(), sizeof(ClientPktHeader));
-
- ClientPktHeader& header = *((ClientPktHeader*)m_Header.rd_ptr());
-
- EndianConvertReverse(header.size);
- EndianConvert(header.cmd);
-
- if ((header.size < 4) || (header.size > 10240) || (header.cmd > 10240))
- {
- Player* _player = m_Session ? m_Session->GetPlayer() : NULL;
- TC_LOG_ERROR("network", "WorldSocket::handle_input_header(): client (account: %u, char [GUID: %u, name: %s]) sent malformed packet (size: %d, cmd: %d)",
- m_Session ? m_Session->GetAccountId() : 0,
- _player ? _player->GetGUIDLow() : 0,
- _player ? _player->GetName().c_str() : "<none>",
- header.size, header.cmd);
-
- errno = EINVAL;
- return -1;
- }
-
- header.size -= 4;
-
- ACE_NEW_RETURN(m_RecvWPct, WorldPacket ((uint16)header.cmd, header.size), -1);
-
- if (header.size > 0)
- {
- m_RecvWPct->resize(header.size);
- m_RecvPct.base ((char*) m_RecvWPct->contents(), m_RecvWPct->size());
- }
- else
- {
- ACE_ASSERT(m_RecvPct.space() == 0);
- }
-
- return 0;
-}
-
-int WorldSocket::handle_input_payload (void)
-{
- // set errno properly here on error !!!
- // now have a header and payload
-
- ACE_ASSERT (m_RecvPct.space() == 0);
- ACE_ASSERT (m_Header.space() == 0);
- ACE_ASSERT (m_RecvWPct != NULL);
-
- const int ret = ProcessIncoming (m_RecvWPct);
-
- m_RecvPct.base (NULL, 0);
- m_RecvPct.reset();
- m_RecvWPct = NULL;
-
- m_Header.reset();
-
- if (ret == -1)
- errno = EINVAL;
-
- return ret;
-}
-
-int WorldSocket::handle_input_missing_data (void)
-{
- char buf [4096];
-
- ACE_Data_Block db (sizeof (buf),
- ACE_Message_Block::MB_DATA,
- buf,
- 0,
- 0,
- ACE_Message_Block::DONT_DELETE,
- 0);
-
- ACE_Message_Block message_block(&db,
- ACE_Message_Block::DONT_DELETE,
- 0);
-
- const size_t recv_size = message_block.space();
-
- const ssize_t n = peer().recv (message_block.wr_ptr(),
- recv_size);
-
- if (n <= 0)
- return int(n);
-
- message_block.wr_ptr (n);
-
- while (message_block.length() > 0)
- {
- if (m_Header.space() > 0)
{
- //need to receive the header
- const size_t to_header = (message_block.length() > m_Header.space() ? m_Header.space() : message_block.length());
- m_Header.copy (message_block.rd_ptr(), to_header);
- message_block.rd_ptr (to_header);
-
- if (m_Header.space() > 0)
- {
- // Couldn't receive the whole header this time.
- ACE_ASSERT (message_block.length() == 0);
- errno = EWOULDBLOCK;
- return -1;
- }
-
- // We just received nice new header
- if (handle_input_header() == -1)
+ if (!_worldSession)
{
- ACE_ASSERT ((errno != EWOULDBLOCK) && (errno != EAGAIN));
- return -1;
+ TC_LOG_ERROR("network.opcode", "ProcessIncoming: Client not authed opcode = %u", uint32(opcode));
+ CloseSocket();
+ return;
}
- }
-
- // Its possible on some error situations that this happens
- // for example on closing when epoll receives more chunked data and stuff
- // hope this is not hack, as proper m_RecvWPct is asserted around
- if (!m_RecvWPct)
- {
- TC_LOG_ERROR("network", "Forcing close on input m_RecvWPct = NULL");
- errno = EINVAL;
- return -1;
- }
- // We have full read header, now check the data payload
- if (m_RecvPct.space() > 0)
- {
- //need more data in the payload
- const size_t to_data = (message_block.length() > m_RecvPct.space() ? m_RecvPct.space() : message_block.length());
- m_RecvPct.copy (message_block.rd_ptr(), to_data);
- message_block.rd_ptr (to_data);
+ // Our Idle timer will reset on any non PING opcodes.
+ // Catches people idling on the login screen and any lingering ingame connections.
+ _worldSession->ResetTimeOutTime();
- if (m_RecvPct.space() > 0)
- {
- // Couldn't receive the whole data this time.
- ACE_ASSERT (message_block.length() == 0);
- errno = EWOULDBLOCK;
- return -1;
- }
+ // Copy the packet to the heap before enqueuing
+ _worldSession->QueuePacket(new WorldPacket(std::move(packet)));
+ break;
}
-
- //just received fresh new payload
- if (handle_input_payload() == -1)
- {
- ACE_ASSERT ((errno != EWOULDBLOCK) && (errno != EAGAIN));
- return -1;
- }
- }
-
- return size_t(n) == recv_size ? 1 : 2;
-}
-
-int WorldSocket::cancel_wakeup_output (GuardType& g)
-{
- if (!m_OutActive)
- return 0;
-
- m_OutActive = false;
-
- g.release();
-
- if (reactor()->cancel_wakeup
- (this, ACE_Event_Handler::WRITE_MASK) == -1)
- {
- // would be good to store errno from reactor with errno guard
- TC_LOG_ERROR("network", "WorldSocket::cancel_wakeup_output");
- return -1;
}
- return 0;
+ AsyncReadHeader();
}
-int WorldSocket::schedule_wakeup_output (GuardType& g)
+void WorldSocket::AsyncWrite(WorldPacket& packet)
{
- if (m_OutActive)
- return 0;
+ if (!IsOpen())
+ return;
- m_OutActive = true;
-
- g.release();
-
- if (reactor()->schedule_wakeup
- (this, ACE_Event_Handler::WRITE_MASK) == -1)
- {
- TC_LOG_ERROR("network", "WorldSocket::schedule_wakeup_output");
- return -1;
- }
-
- return 0;
-}
-
-int WorldSocket::ProcessIncoming(WorldPacket* new_pct)
-{
- ACE_ASSERT (new_pct);
-
- // manage memory ;)
- ACE_Auto_Ptr<WorldPacket> aptr(new_pct);
-
- const ACE_UINT16 opcode = new_pct->GetOpcode();
-
- if (closing_)
- return -1;
-
- // Dump received packet.
if (sPacketLog->CanLogPacket())
- sPacketLog->LogPacket(*new_pct, CLIENT_TO_SERVER);
+ sPacketLog->LogPacket(packet, SERVER_TO_CLIENT, GetRemoteIpAddress(), GetRemotePort());
- std::string opcodeName = GetOpcodeNameForLogging(opcode);
- if (m_Session)
- TC_LOG_TRACE("network.opcode", "C->S: %s %s", m_Session->GetPlayerInfo().c_str(), opcodeName.c_str());
+ TC_LOG_TRACE("network.opcode", "S->C: %s %s", (_worldSession ? _worldSession->GetPlayerInfo() : GetRemoteIpAddress().to_string()).c_str(), GetOpcodeNameForLogging(packet.GetOpcode()).c_str());
- try
- {
- switch (opcode)
- {
- case CMSG_PING:
- return HandlePing(*new_pct);
- case CMSG_AUTH_SESSION:
- if (m_Session)
- {
- TC_LOG_ERROR("network", "WorldSocket::ProcessIncoming: received duplicate CMSG_AUTH_SESSION from %s", m_Session->GetPlayerInfo().c_str());
- return -1;
- }
+ ServerPktHeader header(packet.size() + 2, packet.GetOpcode());
- sScriptMgr->OnPacketReceive(this, WorldPacket(*new_pct));
- return HandleAuthSession(*new_pct);
- case CMSG_KEEP_ALIVE:
- TC_LOG_DEBUG("network", "%s", opcodeName.c_str());
- sScriptMgr->OnPacketReceive(this, WorldPacket(*new_pct));
- return 0;
- default:
- {
- ACE_GUARD_RETURN(LockType, Guard, m_SessionLock, -1);
- if (!m_Session)
- {
- TC_LOG_ERROR("network.opcode", "ProcessIncoming: Client not authed opcode = %u", uint32(opcode));
- return -1;
- }
+ std::lock_guard<std::mutex> guard(_writeLock);
- // Our Idle timer will reset on any non PING opcodes.
- // Catches people idling on the login screen and any lingering ingame connections.
- m_Session->ResetTimeOutTime();
+ bool needsWriteStart = _writeQueue.empty();
+ _authCrypt.EncryptSend(header.header, header.getHeaderLength());
- // OK, give the packet to WorldSession
- aptr.release();
- // WARNING here we call it with locks held.
- // Its possible to cause deadlock if QueuePacket calls back
- m_Session->QueuePacket(new_pct);
- return 0;
- }
- }
- }
- catch (ByteBufferException &)
- {
- TC_LOG_ERROR("network", "WorldSocket::ProcessIncoming ByteBufferException occured while parsing an instant handled packet %s from client %s, accountid=%i. Disconnected client.",
- opcodeName.c_str(), GetRemoteAddress().c_str(), m_Session ? int32(m_Session->GetAccountId()) : -1);
- new_pct->hexlike();
- return -1;
- }
-
- ACE_NOTREACHED (return 0);
-}
-
-int WorldSocket::HandleSendAuthSession()
-{
- WorldPacket packet(SMSG_AUTH_CHALLENGE, 37);
- packet << uint32(1); // 1...31
- packet << uint32(m_Seed);
-
- BigNumber seed1;
- seed1.SetRand(16 * 8);
- packet.append(seed1.AsByteArray(16).get(), 16); // new encryption seeds
+ _writeQueue.emplace(header, packet);
- BigNumber seed2;
- seed2.SetRand(16 * 8);
- packet.append(seed2.AsByteArray(16).get(), 16); // new encryption seeds
- return SendPacket(packet);
+ if (needsWriteStart)
+ AsyncWrite(_writeQueue.front());
}
-int WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
+void WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
{
uint8 digest[20];
uint32 clientSeed;
@@ -754,36 +171,32 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
std::string account;
SHA1Hash sha;
uint32 clientBuild;
- uint32 unk2, unk3, unk5, unk6, unk7;
+ uint32 serverId, loginServerType, region, battlegroup, realmIndex;
uint64 unk4;
WorldPacket packet, SendAddonPacked;
BigNumber k;
-
- if (sWorld->IsClosed())
- {
- SendAuthResponseError(AUTH_REJECT);
- TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: World closed, denying client (%s).", GetRemoteAddress().c_str());
- return -1;
- }
+ bool wardenActive = sWorld->getBoolConfig(CONFIG_WARDEN_ENABLED);
// Read the content of the packet
recvPacket >> clientBuild;
- recvPacket >> unk2;
+ recvPacket >> serverId; // Used for GRUNT only
recvPacket >> account;
- recvPacket >> unk3;
+ recvPacket >> loginServerType; // 0 GRUNT, 1 Battle.net
recvPacket >> clientSeed;
- recvPacket >> unk5 >> unk6 >> unk7;
+ recvPacket >> region >> battlegroup; // Used for Battle.net only
+ recvPacket >> realmIndex; // realmId from auth_database.realmlist table
recvPacket >> unk4;
recvPacket.read(digest, 20);
- TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: client %u, unk2 %u, account %s, unk3 %u, clientseed %u",
- clientBuild,
- unk2,
- account.c_str(),
- unk3,
- clientSeed);
+ TC_LOG_INFO("network", "WorldSocket::HandleAuthSession: client %u, serverId %u, account %s, loginServerType %u, clientseed %u, realmIndex %u",
+ clientBuild,
+ serverId,
+ account.c_str(),
+ loginServerType,
+ clientSeed,
+ realmIndex);
- // Get the account information from the realmd database
+ // Get the account information from the auth database
// 0 1 2 3 4 5 6 7 8
// SELECT id, sessionkey, last_ip, locked, expansion, mutetime, locale, recruiter, os FROM account WHERE username = ?
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_INFO_BY_NAME);
@@ -795,9 +208,11 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
// Stop if the account is not found
if (!result)
{
+ // We can not log here, as we do not know the account. Thus, no accountId.
SendAuthResponseError(AUTH_UNKNOWN_ACCOUNT);
TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Sent Auth Response (unknown account).");
- return -1;
+ DelayedCloseSocket();
+ return;
}
Field* fields = result->Fetch();
@@ -807,21 +222,86 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
if (expansion > world_expansion)
expansion = world_expansion;
- ///- Re-check ip locking (same check as in realmd).
+ // For hook purposes, we get Remoteaddress at this point.
+ std::string address = GetRemoteIpAddress().to_string();
+
+ // As we don't know if attempted login process by ip works, we update last_attempt_ip right away
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_LAST_ATTEMPT_IP);
+
+ stmt->setString(0, address);
+ stmt->setString(1, account);
+
+ LoginDatabase.Execute(stmt);
+ // This also allows to check for possible "hack" attempts on account
+
+ // id has to be fetched at this point, so that first actual account response that fails can be logged
+ id = fields[0].GetUInt32();
+
+ k.SetHexStr(fields[1].GetCString());
+
+ // even if auth credentials are bad, try using the session key we have - client cannot read auth response error without it
+ _authCrypt.Init(&k);
+
+ // First reject the connection if packet contains invalid data or realm state doesn't allow logging in
+ if (sWorld->IsClosed())
+ {
+ SendAuthResponseError(AUTH_REJECT);
+ TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: World closed, denying client (%s).", GetRemoteIpAddress().to_string().c_str());
+ DelayedCloseSocket();
+ return;
+ }
+
+ if (realmIndex != realmID)
+ {
+ SendAuthResponseError(REALM_LIST_REALM_NOT_FOUND);
+ TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Sent Auth Response (bad realm).");
+ DelayedCloseSocket();
+ return;
+ }
+
+ std::string os = fields[8].GetString();
+
+ // Must be done before WorldSession is created
+ if (wardenActive && os != "Win" && os != "OSX")
+ {
+ SendAuthResponseError(AUTH_REJECT);
+ TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Client %s attempted to log in using invalid client OS (%s).", address.c_str(), os.c_str());
+ DelayedCloseSocket();
+ return;
+ }
+
+ // Check that Key and account name are the same on client and server
+ uint32 t = 0;
+
+ sha.UpdateData(account);
+ sha.UpdateData((uint8*)&t, 4);
+ sha.UpdateData((uint8*)&clientSeed, 4);
+ sha.UpdateData((uint8*)&_authSeed, 4);
+ sha.UpdateBigNumbers(&k, NULL);
+ sha.Finalize();
+
+ if (memcmp(sha.GetDigest(), digest, 20))
+ {
+ SendAuthResponseError(AUTH_FAILED);
+ TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Authentication failed for account: %u ('%s') address: %s", id, account.c_str(), address.c_str());
+ DelayedCloseSocket();
+ return;
+ }
+
+ ///- Re-check ip locking (same check as in auth).
if (fields[3].GetUInt8() == 1) // if ip is locked
{
- if (strcmp (fields[2].GetCString(), GetRemoteAddress().c_str()))
+ if (strcmp(fields[2].GetCString(), address.c_str()))
{
SendAuthResponseError(AUTH_FAILED);
- TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: Sent Auth Response (Account IP differs).");
- return -1;
+ TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: Sent Auth Response (Account IP differs. Original IP: %s, new IP: %s).", fields[2].GetCString(), address.c_str());
+ // We could log on hook only instead of an additional db log, however action logger is config based. Better keep DB logging as well
+ sScriptMgr->OnFailedAccountLogin(id);
+ DelayedCloseSocket();
+ return;
}
}
- id = fields[0].GetUInt32();
-
- k.SetHexStr(fields[1].GetCString());
-
int64 mutetime = fields[5].GetInt64();
//! Negative mutetime indicates amount of seconds to be muted effective on next login - which is now.
if (mutetime < 0)
@@ -836,21 +316,11 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
LoginDatabase.Execute(stmt);
}
- locale = LocaleConstant (fields[6].GetUInt8());
+ locale = LocaleConstant(fields[6].GetUInt8());
if (locale >= TOTAL_LOCALES)
locale = LOCALE_enUS;
uint32 recruiter = fields[7].GetUInt32();
- std::string os = fields[8].GetString();
-
- // Must be done before WorldSession is created
- if (sWorld->getBoolConfig(CONFIG_WARDEN_ENABLED) && os != "Win" && os != "OSX")
- {
- SendAuthResponseError(AUTH_REJECT);
- TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Client %s attempted to log in using invalid client OS (%s).", GetRemoteAddress().c_str(), os.c_str());
- return -1;
- }
-
// Checks gmlevel per Realm
stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_GMLEVEL_BY_REALMID);
@@ -867,11 +337,11 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
security = fields[0].GetUInt8();
}
- // Re-check account ban (same check as in realmd)
+ // Re-check account ban (same check as in auth)
stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_BANS);
stmt->setUInt32(0, id);
- stmt->setString(1, GetRemoteAddress());
+ stmt->setString(1, address);
PreparedQueryResult banresult = LoginDatabase.Query(stmt);
@@ -879,7 +349,9 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
{
SendAuthResponseError(AUTH_BANNED);
TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Sent Auth Response (Account banned).");
- return -1;
+ sScriptMgr->OnFailedAccountLogin(id);
+ DelayedCloseSocket();
+ return;
}
// Check locked state for server
@@ -889,27 +361,9 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
{
SendAuthResponseError(AUTH_UNAVAILABLE);
TC_LOG_INFO("network", "WorldSocket::HandleAuthSession: User tries to login but his security level is not enough");
- return -1;
- }
-
- // Check that Key and account name are the same on client and server
- uint32 t = 0;
- uint32 seed = m_Seed;
-
- sha.UpdateData(account);
- sha.UpdateData((uint8*)&t, 4);
- sha.UpdateData((uint8*)&clientSeed, 4);
- sha.UpdateData((uint8*)&seed, 4);
- sha.UpdateBigNumbers(&k, NULL);
- sha.Finalize();
-
- std::string address = GetRemoteAddress();
-
- if (memcmp(sha.GetDigest(), digest, 20))
- {
- SendAuthResponseError(AUTH_FAILED);
- TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Authentication failed for account: %u ('%s') address: %s", id, account.c_str(), address.c_str());
- return -1;
+ sScriptMgr->OnFailedAccountLogin(id);
+ DelayedCloseSocket();
+ return;
}
TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: Client '%s' authenticated successfully from %s.",
@@ -927,8 +381,7 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
if (result)
isRecruiter = true;
- // Update the last_ip in the database
-
+ // Update the last_ip in the database as it was successful for login
stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_LAST_IP);
stmt->setString(0, address);
@@ -936,29 +389,31 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
LoginDatabase.Execute(stmt);
- // NOTE ATM the socket is single-threaded, have this in mind ...
- ACE_NEW_RETURN(m_Session, WorldSession(id, this, AccountTypes(security), expansion, mutetime, locale, recruiter, isRecruiter), -1);
-
- m_Crypt.Init(&k);
+ // At this point, we can safely hook a successful login
+ sScriptMgr->OnAccountLogin(id);
- m_Session->LoadGlobalAccountData();
- m_Session->LoadTutorialsData();
- m_Session->ReadAddonsInfo(recvPacket);
- m_Session->LoadPermissions();
+ _worldSession = new WorldSession(id, shared_from_this(), AccountTypes(security), expansion, mutetime, locale, recruiter, isRecruiter);
+ _worldSession->LoadGlobalAccountData();
+ _worldSession->LoadTutorialsData();
+ _worldSession->ReadAddonsInfo(recvPacket);
+ _worldSession->LoadPermissions();
// Initialize Warden system only if it is enabled by config
- if (sWorld->getBoolConfig(CONFIG_WARDEN_ENABLED))
- m_Session->InitWarden(&k, os);
+ if (wardenActive)
+ _worldSession->InitWarden(&k, os);
- // Sleep this Network thread for
- uint32 sleepTime = sWorld->getIntConfig(CONFIG_SESSION_ADD_DELAY);
- ACE_OS::sleep(ACE_Time_Value(0, sleepTime));
+ sWorld->AddSession(_worldSession);
+}
- sWorld->AddSession(m_Session);
- return 0;
+void WorldSocket::SendAuthResponseError(uint8 code)
+{
+ WorldPacket packet(SMSG_AUTH_RESPONSE, 1);
+ packet << uint8(code);
+
+ AsyncWrite(packet);
}
-int WorldSocket::HandlePing (WorldPacket& recvPacket)
+void WorldSocket::HandlePing(WorldPacket& recvPacket)
{
uint32 ping;
uint32 latency;
@@ -967,65 +422,61 @@ int WorldSocket::HandlePing (WorldPacket& recvPacket)
recvPacket >> ping;
recvPacket >> latency;
- if (m_LastPingTime == ACE_Time_Value::zero)
- m_LastPingTime = ACE_OS::gettimeofday(); // for 1st ping
+ if (_LastPingTime == steady_clock::time_point())
+ {
+ _LastPingTime = steady_clock::now();
+ }
else
{
- ACE_Time_Value cur_time = ACE_OS::gettimeofday();
- ACE_Time_Value diff_time (cur_time);
- diff_time -= m_LastPingTime;
- m_LastPingTime = cur_time;
+ steady_clock::time_point now = steady_clock::now();
+
+ steady_clock::duration diff = now - _LastPingTime;
+
+ _LastPingTime = now;
- if (diff_time < ACE_Time_Value (27))
+ if (diff < seconds(27))
{
- ++m_OverSpeedPings;
+ ++_OverSpeedPings;
- uint32 max_count = sWorld->getIntConfig (CONFIG_MAX_OVERSPEED_PINGS);
+ uint32 maxAllowed = sWorld->getIntConfig(CONFIG_MAX_OVERSPEED_PINGS);
- if (max_count && m_OverSpeedPings > max_count)
+ if (maxAllowed && _OverSpeedPings > maxAllowed)
{
- ACE_GUARD_RETURN (LockType, Guard, m_SessionLock, -1);
-
- if (m_Session && !m_Session->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_OVERSPEED_PING))
+ if (_worldSession && !_worldSession->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_OVERSPEED_PING))
{
TC_LOG_ERROR("network", "WorldSocket::HandlePing: %s kicked for over-speed pings (address: %s)",
- m_Session->GetPlayerInfo().c_str(), GetRemoteAddress().c_str());
+ _worldSession->GetPlayerInfo().c_str(), GetRemoteIpAddress().to_string().c_str());
- return -1;
+ CloseSocket();
+ return;
}
}
}
else
- m_OverSpeedPings = 0;
+ _OverSpeedPings = 0;
}
- // critical section
+ if (_worldSession)
+ {
+ _worldSession->SetLatency(latency);
+ _worldSession->ResetClientTimeDelay();
+ }
+ else
{
- ACE_GUARD_RETURN (LockType, Guard, m_SessionLock, -1);
+ TC_LOG_ERROR("network", "WorldSocket::HandlePing: peer sent CMSG_PING, but is not authenticated or got recently kicked, address = %s", GetRemoteIpAddress().to_string().c_str());
- if (m_Session)
- {
- m_Session->SetLatency (latency);
- m_Session->ResetClientTimeDelay();
- }
- else
- {
- TC_LOG_ERROR("network", "WorldSocket::HandlePing: peer sent CMSG_PING, "
- "but is not authenticated or got recently kicked, "
- " address = %s",
- GetRemoteAddress().c_str());
- return -1;
- }
+ CloseSocket();
+ return;
}
WorldPacket packet(SMSG_PONG, 4);
packet << ping;
- return SendPacket(packet);
+ return AsyncWrite(packet);
}
-void WorldSocket::SendAuthResponseError(uint8 code)
+void WorldSocket::CloseSocket()
{
- WorldPacket packet(SMSG_AUTH_RESPONSE, 1);
- packet << uint8(code);
- SendPacket(packet);
+ sScriptMgr->OnSocketClose(shared_from_this());
+
+ Socket::CloseSocket();
}
diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h
index 103d60346e8..0667c1b090a 100644
--- a/src/server/game/Server/WorldSocket.h
+++ b/src/server/game/Server/WorldSocket.h
@@ -1,216 +1,134 @@
/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/** \addtogroup u2w User to World Communication
- * @{
- * \file WorldSocket.h
- * \author Derex <derex101@gmail.com>
- */
-
-#ifndef _WORLDSOCKET_H
-#define _WORLDSOCKET_H
-
-#include <ace/Basic_Types.h>
-#include <ace/Synch_Traits.h>
-#include <ace/Svc_Handler.h>
-#include <ace/SOCK_Stream.h>
-#include <ace/Thread_Mutex.h>
-#include <ace/Guard_T.h>
-#include <ace/Unbounded_Queue.h>
-#include <ace/Message_Block.h>
-
-#if !defined (ACE_LACKS_PRAGMA_ONCE)
-#pragma once
-#endif /* ACE_LACKS_PRAGMA_ONCE */
+* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __WORLDSOCKET_H__
+#define __WORLDSOCKET_H__
+
+// Forward declare buffer function here - Socket.h must know about it
+struct WorldPacketBuffer;
+namespace boost
+{
+ namespace asio
+ {
+ WorldPacketBuffer const& buffer(WorldPacketBuffer const& buf);
+ }
+}
#include "Common.h"
#include "AuthCrypt.h"
+#include "ServerPktHeader.h"
+#include "Socket.h"
+#include "Util.h"
+#include "WorldPacket.h"
+#include "WorldSession.h"
+#include <chrono>
+#include <boost/asio/ip/tcp.hpp>
+#include <boost/asio/buffer.hpp>
-class ACE_Message_Block;
-class WorldPacket;
-class WorldSession;
-
-/// Handler that can communicate over stream sockets.
-typedef ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_NULL_SYNCH> WorldHandler;
-
-/**
- * WorldSocket.
- *
- * This class is responsible for the communication with
- * remote clients.
- * Most methods return -1 on failure.
- * The class uses reference counting.
- *
- * For output the class uses one buffer (64K usually) and
- * a queue where it stores packet if there is no place on
- * the queue. The reason this is done, is because the server
- * does really a lot of small-size writes to it, and it doesn't
- * scale well to allocate memory for every. When something is
- * written to the output buffer the socket is not immediately
- * activated for output (again for the same reason), there
- * is 10ms celling (thats why there is Update() method).
- * This concept is similar to TCP_CORK, but TCP_CORK
- * uses 200ms celling. As result overhead generated by
- * sending packets from "producer" threads is minimal,
- * and doing a lot of writes with small size is tolerated.
- *
- * The calls to Update() method are managed by WorldSocketMgr
- * and ReactorRunnable.
- *
- * For input, the class uses one 4096 bytes buffer on stack
- * to which it does recv() calls. And then received data is
- * distributed where its needed. 4096 matches pretty well the
- * traffic generated by client for now.
- *
- * The input/output do speculative reads/writes (AKA it tryes
- * to read all data available in the kernel buffer or tryes to
- * write everything available in userspace buffer),
- * which is ok for using with Level and Edge Triggered IO
- * notification.
- *
- */
-class WorldSocket : public WorldHandler
-{
- public:
- WorldSocket (void);
- virtual ~WorldSocket (void);
-
- friend class WorldSocketMgr;
-
- /// Mutex type used for various synchronizations.
- typedef ACE_Thread_Mutex LockType;
- typedef ACE_Guard<LockType> GuardType;
-
- /// Check if socket is closed.
- bool IsClosed(void) const;
-
- /// Close the socket.
- void CloseSocket(void);
-
- /// Get address of connected peer.
- const std::string& GetRemoteAddress(void) const;
-
- /// Send A packet on the socket, this function is reentrant.
- /// @param pct packet to send
- /// @return -1 of failure
- int SendPacket(const WorldPacket& pct);
-
- /// Add reference to this object.
- long AddReference(void);
-
- /// Remove reference to this object.
- long RemoveReference(void);
-
- /// things called by ACE framework.
-
- /// Called on open, the void* is the acceptor.
- virtual int open(void *);
-
- /// Called on failures inside of the acceptor, don't call from your code.
- virtual int close(u_long);
-
- /// Called when we can read from the socket.
- virtual int handle_input(ACE_HANDLE = ACE_INVALID_HANDLE);
-
- /// Called when the socket can write.
- virtual int handle_output(ACE_HANDLE = ACE_INVALID_HANDLE);
+using boost::asio::ip::tcp;
- /// Called when connection is closed or error happens.
- virtual int handle_close(ACE_HANDLE = ACE_INVALID_HANDLE,
- ACE_Reactor_Mask = ACE_Event_Handler::ALL_EVENTS_MASK);
+#pragma pack(push, 1)
- /// Called by WorldSocketMgr/ReactorRunnable.
- int Update(void);
-
- private:
- /// Helper functions for processing incoming data.
- int handle_input_header(void);
- int handle_input_payload(void);
- int handle_input_missing_data(void);
-
- /// Help functions to mark/unmark the socket for output.
- /// @param g the guard is for m_OutBufferLock, the function will release it
- int cancel_wakeup_output(GuardType& g);
- int schedule_wakeup_output(GuardType& g);
-
- /// Drain the queue if its not empty.
- int handle_output_queue(GuardType& g);
-
- /// process one incoming packet.
- /// @param new_pct received packet, note that you need to delete it.
- int ProcessIncoming(WorldPacket* new_pct);
-
- /// Called by ProcessIncoming() on CMSG_AUTH_SESSION.
- int HandleAuthSession(WorldPacket& recvPacket);
-
- /// Called by ProcessIncoming() on CMSG_PING.
- int HandlePing(WorldPacket& recvPacket);
-
- int HandleSendAuthSession();
+struct ClientPktHeader
+{
+ uint16 size;
+ uint32 cmd;
- private:
- void SendAuthResponseError(uint8);
- /// Time in which the last ping was received
- ACE_Time_Value m_LastPingTime;
+ bool IsValid() const { return size >= 4 && size < 10240 && cmd < NUM_MSG_TYPES; }
+};
- /// Keep track of over-speed pings, to prevent ping flood.
- uint32 m_OverSpeedPings;
+#pragma pack(pop)
- /// Address of the remote peer
- std::string m_Address;
+struct WorldPacketBuffer
+{
+ typedef boost::asio::const_buffer value_type;
+
+ typedef boost::asio::const_buffer const* const_iterator;
+
+ WorldPacketBuffer(ServerPktHeader header, WorldPacket const& packet) : _header(header), _packet(packet)
+ {
+ _buffers[0] = boost::asio::const_buffer(_header.header, _header.getHeaderLength());
+ if (!_packet.empty())
+ _buffers[1] = boost::asio::const_buffer(_packet.contents(), _packet.size());
+ }
+
+ const_iterator begin() const
+ {
+ return _buffers;
+ }
+
+ const_iterator end() const
+ {
+ return _buffers + (_packet.empty() ? 1 : 2);
+ }
+
+private:
+ boost::asio::const_buffer _buffers[2];
+ ServerPktHeader _header;
+ WorldPacket _packet;
+};
- /// Class used for managing encryption of the headers
- AuthCrypt m_Crypt;
+namespace boost
+{
+ namespace asio
+ {
+ inline WorldPacketBuffer const& buffer(WorldPacketBuffer const& buf)
+ {
+ return buf;
+ }
+ }
+}
+
+class WorldSocket : public Socket<WorldSocket, WorldPacketBuffer>
+{
+ typedef Socket<WorldSocket, WorldPacketBuffer> Base;
- /// Mutex lock to protect m_Session
- LockType m_SessionLock;
+public:
+ WorldSocket(tcp::socket&& socket);
- /// Session to which received packets are routed
- WorldSession* m_Session;
+ WorldSocket(WorldSocket const& right) = delete;
+ WorldSocket& operator=(WorldSocket const& right) = delete;
- /// here are stored the fragments of the received data
- WorldPacket* m_RecvWPct;
+ void Start() override;
- /// This block actually refers to m_RecvWPct contents,
- /// which allows easy and safe writing to it.
- /// It wont free memory when its deleted. m_RecvWPct takes care of freeing.
- ACE_Message_Block m_RecvPct;
+ void CloseSocket() override;
- /// Fragment of the received header.
- ACE_Message_Block m_Header;
+ using Base::AsyncWrite;
+ void AsyncWrite(WorldPacket& packet);
- /// Mutex for protecting output related data.
- LockType m_OutBufferLock;
+protected:
+ void ReadHeaderHandler() override;
+ void ReadDataHandler() override;
- /// Buffer used for writing output.
- ACE_Message_Block* m_OutBuffer;
+private:
+ void HandleSendAuthSession();
+ void HandleAuthSession(WorldPacket& recvPacket);
+ void SendAuthResponseError(uint8 code);
- /// Size of the m_OutBuffer.
- size_t m_OutBufferSize;
+ void HandlePing(WorldPacket& recvPacket);
- /// True if the socket is registered with the reactor for output
- bool m_OutActive;
+ uint32 _authSeed;
+ AuthCrypt _authCrypt;
- uint32 m_Seed;
+ std::chrono::steady_clock::time_point _LastPingTime;
+ uint32 _OverSpeedPings;
+ WorldSession* _worldSession;
};
-#endif /* _WORLDSOCKET_H */
-
-/// @}
-
+#endif
diff --git a/src/server/game/Server/WorldSocketAcceptor.h b/src/server/game/Server/WorldSocketAcceptor.h
deleted file mode 100644
index 0b07196a0cd..00000000000
--- a/src/server/game/Server/WorldSocketAcceptor.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/** \addtogroup u2w User to World Communication
- * @{
- * \file WorldSocketMgr.h
- */
-
-#ifndef __WORLDSOCKETACCEPTOR_H_
-#define __WORLDSOCKETACCEPTOR_H_
-
-#include "Common.h"
-
-#include <ace/Acceptor.h>
-#include <ace/SOCK_Acceptor.h>
-
-#include "WorldSocket.h"
-
-class WorldSocketAcceptor : public ACE_Acceptor<WorldSocket, ACE_SOCK_Acceptor>
-{
-public:
- WorldSocketAcceptor(void) { }
- virtual ~WorldSocketAcceptor(void)
- {
- if (reactor())
- reactor()->cancel_timer(this, 1);
- }
-
-protected:
-
- virtual int handle_timeout(const ACE_Time_Value& /*current_time*/, const void* /*act = 0*/)
- {
- TC_LOG_DEBUG("misc", "Resuming acceptor");
- reactor()->cancel_timer(this, 1);
- return reactor()->register_handler(this, ACE_Event_Handler::ACCEPT_MASK);
- }
-
- virtual int handle_accept_error(void)
- {
-#if defined(ENFILE) && defined(EMFILE)
- if (errno == ENFILE || errno == EMFILE)
- {
- TC_LOG_ERROR("misc", "Out of file descriptors, suspending incoming connections for 10 seconds");
- reactor()->remove_handler(this, ACE_Event_Handler::ACCEPT_MASK | ACE_Event_Handler::DONT_CALL);
- reactor()->schedule_timer(this, NULL, ACE_Time_Value(10));
- }
-#endif
- return 0;
- }
-};
-
-#endif /* __WORLDSOCKETACCEPTOR_H_ */
-/// @}
diff --git a/src/server/game/Server/WorldSocketMgr.cpp b/src/server/game/Server/WorldSocketMgr.cpp
deleted file mode 100644
index 7880552ffa1..00000000000
--- a/src/server/game/Server/WorldSocketMgr.cpp
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2008 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/** \file WorldSocketMgr.cpp
-* \ingroup u2w
-* \author Derex <derex101@gmail.com>
-*/
-
-#include "WorldSocketMgr.h"
-
-#include <ace/ACE.h>
-#include <ace/Log_Msg.h>
-#include <ace/Reactor.h>
-#include <ace/Reactor_Impl.h>
-#include <ace/TP_Reactor.h>
-#include <ace/Dev_Poll_Reactor.h>
-#include <ace/Guard_T.h>
-#include <ace/Atomic_Op.h>
-#include <ace/os_include/arpa/os_inet.h>
-#include <ace/os_include/netinet/os_tcp.h>
-#include <ace/os_include/sys/os_types.h>
-#include <ace/os_include/sys/os_socket.h>
-
-#include <set>
-
-#include "Log.h"
-#include "Common.h"
-#include "Config.h"
-#include "DatabaseEnv.h"
-#include "WorldSocket.h"
-#include "WorldSocketAcceptor.h"
-#include "ScriptMgr.h"
-
-/**
-* This is a helper class to WorldSocketMgr, that manages
-* network threads, and assigning connections from acceptor thread
-* to other network threads
-*/
-class ReactorRunnable : protected ACE_Task_Base
-{
- public:
-
- ReactorRunnable() :
- m_Reactor(0),
- m_Connections(0),
- m_ThreadId(-1)
- {
- ACE_Reactor_Impl* imp;
-
- #if defined (ACE_HAS_EVENT_POLL) || defined (ACE_HAS_DEV_POLL)
-
- imp = new ACE_Dev_Poll_Reactor();
-
- imp->max_notify_iterations (128);
- imp->restart (1);
-
- #else
-
- imp = new ACE_TP_Reactor();
- imp->max_notify_iterations (128);
-
- #endif
-
- m_Reactor = new ACE_Reactor (imp, 1);
- }
-
- virtual ~ReactorRunnable()
- {
- Stop();
- Wait();
-
- delete m_Reactor;
- }
-
- void Stop()
- {
- m_Reactor->end_reactor_event_loop();
- }
-
- int Start()
- {
- if (m_ThreadId != -1)
- return -1;
-
- return (m_ThreadId = activate());
- }
-
- void Wait() { ACE_Task_Base::wait(); }
-
- long Connections()
- {
- return static_cast<long> (m_Connections.value());
- }
-
- int AddSocket (WorldSocket* sock)
- {
- TRINITY_GUARD(ACE_Thread_Mutex, m_NewSockets_Lock);
-
- ++m_Connections;
- sock->AddReference();
- sock->reactor (m_Reactor);
- m_NewSockets.insert (sock);
-
- sScriptMgr->OnSocketOpen(sock);
-
- return 0;
- }
-
- ACE_Reactor* GetReactor()
- {
- return m_Reactor;
- }
-
- protected:
-
- void AddNewSockets()
- {
- TRINITY_GUARD(ACE_Thread_Mutex, m_NewSockets_Lock);
-
- if (m_NewSockets.empty())
- return;
-
- for (SocketSet::const_iterator i = m_NewSockets.begin(); i != m_NewSockets.end(); ++i)
- {
- WorldSocket* sock = (*i);
-
- if (sock->IsClosed())
- {
- sScriptMgr->OnSocketClose(sock, true);
-
- sock->RemoveReference();
- --m_Connections;
- }
- else
- m_Sockets.insert (sock);
- }
-
- m_NewSockets.clear();
- }
-
- virtual int svc()
- {
- TC_LOG_DEBUG("misc", "Network Thread Starting");
-
- ACE_ASSERT (m_Reactor);
-
- SocketSet::iterator i, t;
-
- while (!m_Reactor->reactor_event_loop_done())
- {
- // dont be too smart to move this outside the loop
- // the run_reactor_event_loop will modify interval
- ACE_Time_Value interval (0, 10000);
-
- if (m_Reactor->run_reactor_event_loop (interval) == -1)
- break;
-
- AddNewSockets();
-
- for (i = m_Sockets.begin(); i != m_Sockets.end();)
- {
- if ((*i)->Update() == -1)
- {
- t = i;
- ++i;
-
- (*t)->CloseSocket();
-
- sScriptMgr->OnSocketClose((*t), false);
-
- (*t)->RemoveReference();
- --m_Connections;
- m_Sockets.erase (t);
- }
- else
- ++i;
- }
- }
-
- TC_LOG_DEBUG("misc", "Network Thread exits");
-
- return 0;
- }
-
- private:
- typedef ACE_Atomic_Op<ACE_SYNCH_MUTEX, long> AtomicInt;
- typedef std::set<WorldSocket*> SocketSet;
-
- ACE_Reactor* m_Reactor;
- AtomicInt m_Connections;
- int m_ThreadId;
-
- SocketSet m_Sockets;
-
- SocketSet m_NewSockets;
- ACE_Thread_Mutex m_NewSockets_Lock;
-};
-
-WorldSocketMgr::WorldSocketMgr() :
- m_NetThreads(0),
- m_NetThreadsCount(0),
- m_SockOutKBuff(-1),
- m_SockOutUBuff(65536),
- m_UseNoDelay(true),
- m_Acceptor (0) { }
-
-WorldSocketMgr::~WorldSocketMgr()
-{
- delete [] m_NetThreads;
- delete m_Acceptor;
-}
-
-int
-WorldSocketMgr::StartReactiveIO (ACE_UINT16 port, const char* address)
-{
- m_UseNoDelay = sConfigMgr->GetBoolDefault ("Network.TcpNodelay", true);
-
- int num_threads = sConfigMgr->GetIntDefault ("Network.Threads", 1);
-
- if (num_threads <= 0)
- {
- TC_LOG_ERROR("misc", "Network.Threads is wrong in your config file");
- return -1;
- }
-
- m_NetThreadsCount = static_cast<size_t> (num_threads + 1);
-
- m_NetThreads = new ReactorRunnable[m_NetThreadsCount];
-
- TC_LOG_DEBUG("misc", "Max allowed socket connections %d", ACE::max_handles());
-
- // -1 means use default
- m_SockOutKBuff = sConfigMgr->GetIntDefault ("Network.OutKBuff", -1);
-
- m_SockOutUBuff = sConfigMgr->GetIntDefault ("Network.OutUBuff", 65536);
-
- if (m_SockOutUBuff <= 0)
- {
- TC_LOG_ERROR("misc", "Network.OutUBuff is wrong in your config file");
- return -1;
- }
-
- m_Acceptor = new WorldSocketAcceptor;
-
- ACE_INET_Addr listen_addr (port, address);
-
- if (m_Acceptor->open(listen_addr, m_NetThreads[0].GetReactor(), ACE_NONBLOCK) == -1)
- {
- TC_LOG_ERROR("misc", "Failed to open acceptor, check if the port is free");
- return -1;
- }
-
- for (size_t i = 0; i < m_NetThreadsCount; ++i)
- m_NetThreads[i].Start();
-
- return 0;
-}
-
-int
-WorldSocketMgr::StartNetwork (ACE_UINT16 port, const char* address)
-{
- if (!sLog->ShouldLog("misc", LOG_LEVEL_DEBUG))
- ACE_Log_Msg::instance()->priority_mask (LM_ERROR, ACE_Log_Msg::PROCESS);
-
- if (StartReactiveIO(port, address) == -1)
- return -1;
-
- sScriptMgr->OnNetworkStart();
-
- return 0;
-}
-
-void
-WorldSocketMgr::StopNetwork()
-{
- if (m_Acceptor)
- {
- m_Acceptor->close();
- }
-
- if (m_NetThreadsCount != 0)
- {
- for (size_t i = 0; i < m_NetThreadsCount; ++i)
- m_NetThreads[i].Stop();
- }
-
- Wait();
-
- sScriptMgr->OnNetworkStop();
-}
-
-void
-WorldSocketMgr::Wait()
-{
- if (m_NetThreadsCount != 0)
- {
- for (size_t i = 0; i < m_NetThreadsCount; ++i)
- m_NetThreads[i].Wait();
- }
-}
-
-int
-WorldSocketMgr::OnSocketOpen (WorldSocket* sock)
-{
- // set some options here
- if (m_SockOutKBuff >= 0)
- {
- if (sock->peer().set_option (SOL_SOCKET,
- SO_SNDBUF,
- (void*) & m_SockOutKBuff,
- sizeof (int)) == -1 && errno != ENOTSUP)
- {
- TC_LOG_ERROR("misc", "WorldSocketMgr::OnSocketOpen set_option SO_SNDBUF");
- return -1;
- }
- }
-
- static const int ndoption = 1;
-
- // Set TCP_NODELAY.
- if (m_UseNoDelay)
- {
- if (sock->peer().set_option (ACE_IPPROTO_TCP,
- TCP_NODELAY,
- (void*)&ndoption,
- sizeof (int)) == -1)
- {
- TC_LOG_ERROR("misc", "WorldSocketMgr::OnSocketOpen: peer().set_option TCP_NODELAY errno = %s", ACE_OS::strerror (errno));
- return -1;
- }
- }
-
- sock->m_OutBufferSize = static_cast<size_t> (m_SockOutUBuff);
-
- // we skip the Acceptor Thread
- size_t min = 1;
-
- ACE_ASSERT (m_NetThreadsCount >= 1);
-
- for (size_t i = 1; i < m_NetThreadsCount; ++i)
- if (m_NetThreads[i].Connections() < m_NetThreads[min].Connections())
- min = i;
-
- return m_NetThreads[min].AddSocket (sock);
-}
diff --git a/src/server/game/Server/WorldSocketMgr.h b/src/server/game/Server/WorldSocketMgr.h
deleted file mode 100644
index fb8ddb42b9e..00000000000
--- a/src/server/game/Server/WorldSocketMgr.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/** \addtogroup u2w User to World Communication
- * @{
- * \file WorldSocketMgr.h
- * \author Derex <derex101@gmail.com>
- */
-
-#ifndef __WORLDSOCKETMGR_H
-#define __WORLDSOCKETMGR_H
-
-#include <ace/Basic_Types.h>
-#include <ace/Singleton.h>
-#include <ace/Thread_Mutex.h>
-
-class WorldSocket;
-class ReactorRunnable;
-class ACE_Event_Handler;
-
-/// Manages all sockets connected to peers and network threads
-class WorldSocketMgr
-{
-public:
- friend class WorldSocket;
- friend class ACE_Singleton<WorldSocketMgr, ACE_Thread_Mutex>;
-
- /// Start network, listen at address:port .
- int StartNetwork(ACE_UINT16 port, const char* address);
-
- /// Stops all network threads, It will wait for all running threads .
- void StopNetwork();
-
- /// Wait untill all network threads have "joined" .
- void Wait();
-
-private:
- int OnSocketOpen(WorldSocket* sock);
-
- int StartReactiveIO(ACE_UINT16 port, const char* address);
-
-private:
- WorldSocketMgr();
- virtual ~WorldSocketMgr();
-
- ReactorRunnable* m_NetThreads;
- size_t m_NetThreadsCount;
-
- int m_SockOutKBuff;
- int m_SockOutUBuff;
- bool m_UseNoDelay;
-
- class WorldSocketAcceptor* m_Acceptor;
-};
-
-#define sWorldSocketMgr ACE_Singleton<WorldSocketMgr, ACE_Thread_Mutex>::instance()
-
-#endif
-/// @}
diff --git a/src/server/game/Skills/SkillDiscovery.cpp b/src/server/game/Skills/SkillDiscovery.cpp
index 5e272edb531..e8a89039031 100644
--- a/src/server/game/Skills/SkillDiscovery.cpp
+++ b/src/server/game/Skills/SkillDiscovery.cpp
@@ -40,7 +40,7 @@ struct SkillDiscoveryEntry
};
typedef std::list<SkillDiscoveryEntry> SkillDiscoveryList;
-typedef UNORDERED_MAP<int32, SkillDiscoveryList> SkillDiscoveryMap;
+typedef std::unordered_map<int32, SkillDiscoveryList> SkillDiscoveryMap;
static SkillDiscoveryMap SkillDiscoveryStore;
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 06bd12911ad..c78830af43a 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -379,6 +379,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]=
AuraEffect::AuraEffect(Aura* base, uint8 effIndex, int32 *baseAmount, Unit* caster):
m_base(base), m_spellInfo(base->GetSpellInfo()),
m_baseAmount(baseAmount ? *baseAmount : m_spellInfo->Effects[effIndex].BasePoints),
+m_damage(0), m_critChance(0.0f), m_donePct(1.0f),
m_spellmod(NULL), m_periodicTimer(0), m_tickNumber(0), m_effIndex(effIndex),
m_canBeRecalculated(true), m_isPeriodic(false)
{
@@ -890,19 +891,15 @@ void AuraEffect::UpdatePeriodic(Unit* caster)
GetBase()->CallScriptEffectUpdatePeriodicHandlers(this);
}
-bool AuraEffect::IsPeriodicTickCrit(Unit* target, Unit const* caster) const
+bool AuraEffect::CanPeriodicTickCrit(Unit const* caster) const
{
ASSERT(caster);
- Unit::AuraEffectList const& mPeriodicCritAuras= caster->GetAuraEffectsByType(SPELL_AURA_ABILITY_PERIODIC_CRIT);
- for (Unit::AuraEffectList::const_iterator itr = mPeriodicCritAuras.begin(); itr != mPeriodicCritAuras.end(); ++itr)
- {
- if ((*itr)->IsAffectedOnSpell(m_spellInfo) && caster->isSpellCrit(target, m_spellInfo, m_spellInfo->GetSchoolMask()))
- return true;
- }
+ if (caster->HasAuraTypeWithAffectMask(SPELL_AURA_ABILITY_PERIODIC_CRIT, m_spellInfo))
+ return true;
// Rupture - since 3.3.3 can crit
if (m_spellInfo->SpellIconID == 500 && m_spellInfo->SpellFamilyName == SPELLFAMILY_ROGUE)
- return caster->isSpellCrit(target, m_spellInfo, m_spellInfo->GetSchoolMask());
+ return true;
return false;
}
@@ -1672,9 +1669,6 @@ void AuraEffect::HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mo
if (aurApp->GetRemoveMode())
return;
- if (modelid > 0)
- target->SetDisplayId(modelid);
-
if (PowerType != POWER_MANA)
{
uint32 oldPower = target->GetPower(PowerType);
@@ -1725,6 +1719,12 @@ void AuraEffect::HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mo
return;
target->SetShapeshiftForm(form);
+ if (modelid > 0)
+ {
+ SpellInfo const* transformSpellInfo = sSpellMgr->GetSpellInfo(target->getTransForm());
+ if (!transformSpellInfo || !GetSpellInfo()->IsPositive())
+ target->SetDisplayId(modelid);
+ }
}
else
{
@@ -1847,9 +1847,11 @@ void AuraEffect::HandleAuraTransform(AuraApplication const* aurApp, uint8 mode,
if (apply)
{
- // update active transform spell only when transform or shapeshift not set or not overwriting negative by positive case
- if (!target->GetModelForForm(target->GetShapeshiftForm()) || !GetSpellInfo()->IsPositive())
+ // update active transform spell only when transform not set or not overwriting negative by positive case
+ SpellInfo const* transformSpellInfo = sSpellMgr->GetSpellInfo(target->getTransForm());
+ if (!transformSpellInfo || !GetSpellInfo()->IsPositive() || transformSpellInfo->IsPositive())
{
+ target->setTransForm(GetId());
// special case (spell specific functionality)
if (GetMiscValue() == 0)
{
@@ -2018,11 +2020,6 @@ void AuraEffect::HandleAuraTransform(AuraApplication const* aurApp, uint8 mode,
}
}
- // update active transform spell only when transform or shapeshift not set or not overwriting negative by positive case
- SpellInfo const* transformSpellInfo = sSpellMgr->GetSpellInfo(target->getTransForm());
- if (!transformSpellInfo || !GetSpellInfo()->IsPositive() || transformSpellInfo->IsPositive())
- target->setTransForm(GetId());
-
// polymorph case
if ((mode & AURA_EFFECT_HANDLE_REAL) && target->GetTypeId() == TYPEID_PLAYER && target->IsPolymorphed())
{
@@ -3497,11 +3494,23 @@ void AuraEffect::HandleModResistancePercent(AuraApplication const* aurApp, uint8
return;
Unit* target = aurApp->GetTarget();
+ int32 spellGroupVal = target->GetHighestExclusiveSameEffectSpellGroupValue(this, SPELL_AURA_MOD_RESISTANCE_PCT);
+ if (abs(spellGroupVal) >= abs(GetAmount()))
+ return;
for (int8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; i++)
{
if (GetMiscValue() & int32(1<<i))
{
+ if (spellGroupVal)
+ {
+ target->HandleStatModifier(UnitMods(UNIT_MOD_RESISTANCE_START + i), TOTAL_PCT, (float)spellGroupVal, !apply);
+ if (target->GetTypeId() == TYPEID_PLAYER || target->IsPet())
+ {
+ target->ApplyResistanceBuffModsPercentMod(SpellSchools(i), true, (float)spellGroupVal, !apply);
+ target->ApplyResistanceBuffModsPercentMod(SpellSchools(i), false, (float)spellGroupVal, !apply);
+ }
+ }
target->HandleStatModifier(UnitMods(UNIT_MOD_RESISTANCE_START + i), TOTAL_PCT, float(GetAmount()), apply);
if (target->GetTypeId() == TYPEID_PLAYER || target->ToCreature()->IsPet())
{
@@ -3561,19 +3570,29 @@ void AuraEffect::HandleAuraModStat(AuraApplication const* aurApp, uint8 mode, bo
if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT)))
return;
- Unit* target = aurApp->GetTarget();
-
if (GetMiscValue() < -2 || GetMiscValue() > 4)
{
TC_LOG_ERROR("spells", "WARNING: Spell %u effect %u has an unsupported misc value (%i) for SPELL_AURA_MOD_STAT ", GetId(), GetEffIndex(), GetMiscValue());
return;
}
+ Unit* target = aurApp->GetTarget();
+ int32 spellGroupVal = target->GetHighestExclusiveSameEffectSpellGroupValue(this, SPELL_AURA_MOD_STAT, true, GetMiscValue());
+ if (abs(spellGroupVal) >= abs(GetAmount()))
+ return;
+
for (int32 i = STAT_STRENGTH; i < MAX_STATS; i++)
{
// -1 or -2 is all stats (misc < -2 checked in function beginning)
if (GetMiscValue() < 0 || GetMiscValue() == i)
{
+ if (spellGroupVal)
+ {
+ target->HandleStatModifier(UnitMods(UNIT_MOD_STAT_START + i), TOTAL_VALUE, float(spellGroupVal), !apply);
+ if (target->GetTypeId() == TYPEID_PLAYER || target->ToCreature()->IsPet())
+ target->ApplyStatBuffMod(Stats(i), float(spellGroupVal), !apply);
+ }
+
//target->ApplyStatMod(Stats(i), m_amount, apply);
target->HandleStatModifier(UnitMods(UNIT_MOD_STAT_START + i), TOTAL_VALUE, float(GetAmount()), apply);
if (target->GetTypeId() == TYPEID_PLAYER || target->ToCreature()->IsPet())
@@ -3685,14 +3704,30 @@ void AuraEffect::HandleModTotalPercentStat(AuraApplication const* aurApp, uint8
if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT)))
return;
- Unit* target = aurApp->GetTarget();
-
if (GetMiscValue() < -1 || GetMiscValue() > 4)
{
TC_LOG_ERROR("spells", "WARNING: Misc Value for SPELL_AURA_MOD_PERCENT_STAT not valid");
return;
}
+ Unit* target = aurApp->GetTarget();
+ int32 spellGroupVal = target->GetHighestExclusiveSameEffectSpellGroupValue(this, SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, true, -1);
+ if (abs(spellGroupVal) >= abs(GetAmount()))
+ return;
+
+ if (spellGroupVal)
+ {
+ for (int32 i = STAT_STRENGTH; i < MAX_STATS; i++)
+ {
+ if (GetMiscValue() == i || GetMiscValue() == -1) // affect the same stats
+ {
+ target->HandleStatModifier(UnitMods(UNIT_MOD_STAT_START + i), TOTAL_PCT, float(spellGroupVal), !apply);
+ if (target->GetTypeId() == TYPEID_PLAYER || target->ToCreature()->IsPet())
+ target->ApplyStatPercentBuffMod(Stats(i), float(spellGroupVal), !apply);
+ }
+ }
+ }
+
// save current health state
float healthPct = target->GetHealthPct();
bool alive = target->IsAlive();
@@ -3701,6 +3736,17 @@ void AuraEffect::HandleModTotalPercentStat(AuraApplication const* aurApp, uint8
{
if (GetMiscValue() == i || GetMiscValue() == -1)
{
+ int32 spellGroupVal2 = target->GetHighestExclusiveSameEffectSpellGroupValue(this, SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, true, i);
+ if (abs(spellGroupVal2) >= abs(GetAmount()))
+ continue;
+
+ if (spellGroupVal2)
+ {
+ target->HandleStatModifier(UnitMods(UNIT_MOD_STAT_START + i), TOTAL_PCT, float(spellGroupVal2), !apply);
+ if (target->GetTypeId() == TYPEID_PLAYER || target->ToCreature()->IsPet())
+ target->ApplyStatPercentBuffMod(Stats(i), float(spellGroupVal2), !apply);
+ }
+
target->HandleStatModifier(UnitMods(UNIT_MOD_STAT_START + i), TOTAL_PCT, float(GetAmount()), apply);
if (target->GetTypeId() == TYPEID_PLAYER || target->ToCreature()->IsPet())
target->ApplyStatPercentBuffMod(Stats(i), float(GetAmount()), apply);
@@ -4099,7 +4145,17 @@ void AuraEffect::HandleModCombatSpeedPct(AuraApplication const* aurApp, uint8 mo
return;
Unit* target = aurApp->GetTarget();
+ int32 spellGroupVal = target->GetHighestExclusiveSameEffectSpellGroupValue(this, SPELL_AURA_MELEE_SLOW);
+ if (abs(spellGroupVal) >= abs(GetAmount()))
+ return;
+ if (spellGroupVal)
+ {
+ target->ApplyCastTimePercentMod(float(spellGroupVal), !apply);
+ target->ApplyAttackTimePercentMod(BASE_ATTACK, float(spellGroupVal), !apply);
+ target->ApplyAttackTimePercentMod(OFF_ATTACK, float(spellGroupVal), !apply);
+ target->ApplyAttackTimePercentMod(RANGED_ATTACK, float(spellGroupVal), !apply);
+ }
target->ApplyCastTimePercentMod(float(m_amount), apply);
target->ApplyAttackTimePercentMod(BASE_ATTACK, float(GetAmount()), apply);
target->ApplyAttackTimePercentMod(OFF_ATTACK, float(GetAmount()), apply);
@@ -4123,7 +4179,15 @@ void AuraEffect::HandleModMeleeSpeedPct(AuraApplication const* aurApp, uint8 mod
return;
Unit* target = aurApp->GetTarget();
+ int32 spellGroupVal = target->GetHighestExclusiveSameEffectSpellGroupValue(this, SPELL_AURA_MOD_MELEE_HASTE);
+ if (abs(spellGroupVal) >= abs(GetAmount()))
+ return;
+ if (spellGroupVal)
+ {
+ target->ApplyAttackTimePercentMod(BASE_ATTACK, float(spellGroupVal), !apply);
+ target->ApplyAttackTimePercentMod(OFF_ATTACK, float(spellGroupVal), !apply);
+ }
target->ApplyAttackTimePercentMod(BASE_ATTACK, float(GetAmount()), apply);
target->ApplyAttackTimePercentMod(OFF_ATTACK, float(GetAmount()), apply);
}
@@ -4360,7 +4424,8 @@ void AuraEffect::HandleModDamagePercentDone(AuraApplication const* aurApp, uint8
return;
Unit* target = aurApp->GetTarget();
- if (!target)
+ int32 spellGroupVal = target->GetHighestExclusiveSameEffectSpellGroupValue(this, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
+ if (abs(spellGroupVal) >= abs(GetAmount()))
return;
if (target->GetTypeId() == TYPEID_PLAYER)
@@ -4372,12 +4437,23 @@ void AuraEffect::HandleModDamagePercentDone(AuraApplication const* aurApp, uint8
if ((GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL) && (GetSpellInfo()->EquippedItemClass == -1 || target->GetTypeId() != TYPEID_PLAYER))
{
+ if (spellGroupVal)
+ {
+ target->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, float(spellGroupVal), !apply);
+ target->HandleStatModifier(UNIT_MOD_DAMAGE_OFFHAND, TOTAL_PCT, float(spellGroupVal), !apply);
+ target->HandleStatModifier(UNIT_MOD_DAMAGE_RANGED, TOTAL_PCT, float(spellGroupVal), !apply);
+ }
target->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, float(GetAmount()), apply);
target->HandleStatModifier(UNIT_MOD_DAMAGE_OFFHAND, TOTAL_PCT, float(GetAmount()), apply);
target->HandleStatModifier(UNIT_MOD_DAMAGE_RANGED, TOTAL_PCT, float(GetAmount()), apply);
- if (target->GetTypeId() == TYPEID_PLAYER)
- target->ToPlayer()->ApplyPercentModFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT, float (GetAmount()), apply);
+ if (Player* player = target->ToPlayer())
+ {
+ if (spellGroupVal)
+ player->ApplyPercentModFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT, float(spellGroupVal), !apply);
+
+ player->ApplyPercentModFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT, float(GetAmount()), apply);
+ }
}
else
{
@@ -4524,28 +4600,6 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
// AT APPLY
if (apply)
{
- // Overpower
- if (caster && m_spellInfo->SpellFamilyName == SPELLFAMILY_WARRIOR &&
- m_spellInfo->SpellFamilyFlags[0] & 0x4)
- {
- // In addition, if you strike a player..
- if (target->GetTypeId() != TYPEID_PLAYER)
- return;
- // ..while they are casting
- if (target->IsNonMeleeSpellCast(false, false, true, false, true))
- if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_AURA_ADD_FLAT_MODIFIER, SPELLFAMILY_WARRIOR, 2775, 0))
- switch (aurEff->GetId())
- {
- // Unrelenting Assault, rank 1
- case 46859:
- target->CastSpell(target, 64849, true, NULL, aurEff);
- break;
- // Unrelenting Assault, rank 2
- case 46860:
- target->CastSpell(target, 64850, true, NULL, aurEff);
- break;
- }
- }
switch (GetId())
{
case 1515: // Tame beast
@@ -4951,7 +5005,7 @@ void AuraEffect::HandleChannelDeathItem(AuraApplication const* aurApp, uint8 mod
// Glyph of Drain Soul - chance to create an additional Soul Shard
if (AuraEffect* aur = caster->GetAuraEffect(58070, 0))
if (roll_chance_i(aur->GetMiscValue()))
- caster->CastSpell(caster, 58068, true, 0, aur); // We _could_ simply do ++count here, but Blizz does it this way :)
+ caster->CastSpell(caster, 58068, true, nullptr, aur); // We _could_ simply do ++count here, but Blizz does it this way :)
}
}
@@ -5336,7 +5390,7 @@ void AuraEffect::HandlePeriodicDummyAuraTick(Unit* target, Unit* caster) const
int32 mod = (rage < 100) ? rage : 100;
int32 points = target->CalculateSpellDamage(target, GetSpellInfo(), 1);
int32 regen = target->GetMaxHealth() * (mod * points / 10) / 1000;
- target->CastCustomSpell(target, 22845, &regen, 0, 0, true, 0, this);
+ target->CastCustomSpell(target, 22845, &regen, nullptr, nullptr, true, nullptr, this);
target->SetPower(POWER_RAGE, rage-mod);
break;
}
@@ -5373,13 +5427,13 @@ void AuraEffect::HandlePeriodicDummyAuraTick(Unit* target, Unit* caster) const
{
// Feeding Frenzy Rank 1
case 53511:
- if (target->GetVictim() && target->GetVictim()->HealthBelowPct(35))
- target->CastSpell(target, 60096, true, 0, this);
+ if (target->GetVictim() && target->EnsureVictim()->HealthBelowPct(35))
+ target->CastSpell(target, 60096, true, nullptr, this);
return;
// Feeding Frenzy Rank 2
case 53512:
- if (target->GetVictim() && target->GetVictim()->HealthBelowPct(35))
- target->CastSpell(target, 60097, true, 0, this);
+ if (target->GetVictim() && target->EnsureVictim()->HealthBelowPct(35))
+ target->CastSpell(target, 60097, true, nullptr, this);
return;
default:
break;
@@ -5403,13 +5457,6 @@ void AuraEffect::HandlePeriodicDummyAuraTick(Unit* target, Unit* caster) const
target->DealDamage(target, damage, NULL, NODAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
break;
}
- // Death and Decay
- if (GetSpellInfo()->SpellFamilyFlags[0] & 0x20)
- {
- if (caster)
- caster->CastCustomSpell(target, 52212, &m_amount, NULL, NULL, true, 0, this);
- break;
- }
// Blood of the North
// Reaping
// Death Rune Mastery
@@ -5662,7 +5709,7 @@ void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster)
case 53563:
{
// area aura owner casts the spell
- GetBase()->GetUnitOwner()->CastSpell(target, triggeredSpellInfo, true, 0, this, GetBase()->GetUnitOwner()->GetGUID());
+ GetBase()->GetUnitOwner()->CastSpell(target, triggeredSpellInfo, true, nullptr, this, GetBase()->GetUnitOwner()->GetGUID());
return;
}
// Slime Spray - temporary here until preventing default effect works again
@@ -5726,7 +5773,7 @@ void AuraEffect::HandlePeriodicTriggerSpellWithValueAuraTick(Unit* target, Unit*
if (Unit* triggerCaster = triggeredSpellInfo->NeedsToBeTriggeredByCaster(m_spellInfo) ? caster : target)
{
int32 basepoints = GetAmount();
- triggerCaster->CastCustomSpell(target, triggerSpellId, &basepoints, &basepoints, &basepoints, true, 0, this);
+ triggerCaster->CastCustomSpell(target, triggerSpellId, &basepoints, &basepoints, &basepoints, true, nullptr, this);
TC_LOG_DEBUG("spells", "AuraEffect::HandlePeriodicTriggerSpellWithValueAuraTick: Spell %u Trigger %u", GetId(), triggeredSpellInfo->Id);
}
}
@@ -5780,15 +5827,19 @@ void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const
uint32 resist = 0;
CleanDamage cleanDamage = CleanDamage(0, 0, BASE_ATTACK, MELEE_HIT_NORMAL);
- // ignore non positive values (can be result apply spellmods to aura damage
- uint32 damage = std::max(GetAmount(), 0);
+ // AOE spells are not affected by the new periodic system.
+ bool isAreaAura = m_spellInfo->Effects[m_effIndex].IsAreaAuraEffect() || m_spellInfo->Effects[m_effIndex].IsEffect(SPELL_EFFECT_PERSISTENT_AREA_AURA);
+ // ignore negative values (can be result apply spellmods to aura damage
+ uint32 damage = isAreaAura ? std::max(GetAmount(), 0) : m_damage;
// Script Hook For HandlePeriodicDamageAurasTick -- Allow scripts to change the Damage pre class mitigation calculations
- sScriptMgr->ModifyPeriodicDamageAurasTick(target, caster, damage);
+ if (isAreaAura)
+ sScriptMgr->ModifyPeriodicDamageAurasTick(target, caster, damage);
if (GetAuraType() == SPELL_AURA_PERIODIC_DAMAGE)
{
- damage = caster->SpellDamageBonusDone(target, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount());
+ if (isAreaAura)
+ damage = caster->SpellDamageBonusDone(target, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount()) * caster->SpellDamagePctDone(target, m_spellInfo, DOT);
damage = target->SpellDamageBonusTaken(caster, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount());
// Calculate armor mitigation
@@ -5818,11 +5869,11 @@ void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const
{
if (roll_chance_i(20))
{
- caster->CastSpell(caster, 43836, true, 0, this);
+ caster->CastSpell(caster, 43836, true, nullptr, this);
// Glyph of Drain Soul - chance to create an additional Soul Shard
if (AuraEffect* aur = caster->GetAuraEffect(58070, 0))
if (roll_chance_i(aur->GetMiscValue()))
- caster->CastSpell(caster, 58068, true, 0, aur);
+ caster->CastSpell(caster, 58068, true, nullptr, aur);
}
}
}
@@ -5844,19 +5895,25 @@ void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const
else
damage = uint32(target->CountPctFromMaxHealth(damage));
- if (m_spellInfo->Effects[m_effIndex].IsTargetingArea() || m_spellInfo->Effects[m_effIndex].IsAreaAuraEffect() || m_spellInfo->Effects[m_effIndex].IsEffect(SPELL_EFFECT_PERSISTENT_AREA_AURA))
- {
- damage = int32(float(damage) * target->GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE, m_spellInfo->SchoolMask));
- if (caster->GetTypeId() != TYPEID_PLAYER)
- damage = int32(float(damage) * target->GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE, m_spellInfo->SchoolMask));
- }
+ if (!(m_spellInfo->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE))
+ if (m_spellInfo->Effects[m_effIndex].IsTargetingArea() || isAreaAura)
+ {
+ damage = int32(float(damage) * target->GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE, m_spellInfo->SchoolMask));
+ if (caster->GetTypeId() != TYPEID_PLAYER)
+ damage = int32(float(damage) * target->GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE, m_spellInfo->SchoolMask));
+ }
+
+ bool crit = false;
+
+ if (CanPeriodicTickCrit(caster))
+ crit = roll_chance_f(isAreaAura ? caster->GetUnitSpellCriticalChance(target, m_spellInfo, m_spellInfo->GetSchoolMask()) : m_critChance);
- bool crit = IsPeriodicTickCrit(target, caster);
if (crit)
damage = caster->SpellCriticalDamageBonus(m_spellInfo, damage, target);
int32 dmg = damage;
- caster->ApplyResilience(target, NULL, &dmg, crit, CR_CRIT_TAKEN_SPELL);
+ if (!(GetSpellInfo()->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE))
+ caster->ApplyResilience(target, NULL, &dmg, crit, CR_CRIT_TAKEN_SPELL);
damage = dmg;
caster->CalcAbsorbResist(target, GetSpellInfo()->GetSchoolMask(), DOT, damage, &absorb, &resist, GetSpellInfo());
@@ -5905,25 +5962,45 @@ void AuraEffect::HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) c
uint32 resist = 0;
CleanDamage cleanDamage = CleanDamage(0, 0, BASE_ATTACK, MELEE_HIT_NORMAL);
- uint32 damage = std::max(GetAmount(), 0);
+ bool isAreaAura = m_spellInfo->Effects[m_effIndex].IsAreaAuraEffect() || m_spellInfo->Effects[m_effIndex].IsEffect(SPELL_EFFECT_PERSISTENT_AREA_AURA);
+ // ignore negative values (can be result apply spellmods to aura damage
+ uint32 damage = isAreaAura ? std::max(GetAmount(), 0) : m_damage;
- damage = caster->SpellDamageBonusDone(target, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount());
+ if (isAreaAura)
+ {
+ // Script Hook For HandlePeriodicDamageAurasTick -- Allow scripts to change the Damage pre class mitigation calculations
+ sScriptMgr->ModifyPeriodicDamageAurasTick(target, caster, damage);
+ damage = caster->SpellDamageBonusDone(target, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount()) * caster->SpellDamagePctDone(target, m_spellInfo, DOT);
+ }
damage = target->SpellDamageBonusTaken(caster, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount());
- bool crit = IsPeriodicTickCrit(target, caster);
- if (crit)
- damage = caster->SpellCriticalDamageBonus(m_spellInfo, damage, target);
-
// Calculate armor mitigation
- if (Unit::IsDamageReducedByArmor(GetSpellInfo()->GetSchoolMask(), GetSpellInfo(), m_effIndex))
+ if (Unit::IsDamageReducedByArmor(GetSpellInfo()->GetSchoolMask(), GetSpellInfo(), GetEffIndex()))
{
uint32 damageReductedArmor = caster->CalcArmorReducedDamage(target, damage, GetSpellInfo());
cleanDamage.mitigated_damage += damage - damageReductedArmor;
damage = damageReductedArmor;
}
+ if (!(m_spellInfo->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE))
+ if (m_spellInfo->Effects[m_effIndex].IsTargetingArea() || isAreaAura)
+ {
+ damage = int32(float(damage) * target->GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE, m_spellInfo->SchoolMask));
+ if (caster->GetTypeId() != TYPEID_PLAYER)
+ damage = int32(float(damage) * target->GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE, m_spellInfo->SchoolMask));
+ }
+
+ bool crit = false;
+
+ if (CanPeriodicTickCrit(caster))
+ crit = roll_chance_f(isAreaAura ? caster->GetUnitSpellCriticalChance(target, m_spellInfo, m_spellInfo->GetSchoolMask()) : m_critChance);
+
+ if (crit)
+ damage = caster->SpellCriticalDamageBonus(m_spellInfo, damage, target);
+
int32 dmg = damage;
- caster->ApplyResilience(target, NULL, &dmg, crit, CR_CRIT_TAKEN_SPELL);
+ if (!(GetSpellInfo()->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE))
+ caster->ApplyResilience(target, NULL, &dmg, crit, CR_CRIT_TAKEN_SPELL);
damage = dmg;
caster->CalcAbsorbResist(target, GetSpellInfo()->GetSchoolMask(), DOT, damage, &absorb, &resist, m_spellInfo);
@@ -6005,8 +6082,9 @@ void AuraEffect::HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const
if (GetBase()->IsPermanent() && target->IsFullHealth())
return;
+ bool isAreaAura = m_spellInfo->Effects[m_effIndex].IsAreaAuraEffect() || m_spellInfo->Effects[m_effIndex].IsEffect(SPELL_EFFECT_PERSISTENT_AREA_AURA);
// ignore negative values (can be result apply spellmods to aura damage
- int32 damage = std::max(m_amount, 0);
+ int32 damage = isAreaAura ? std::max(GetAmount(), 0) : m_damage;
if (GetAuraType() == SPELL_AURA_OBS_MOD_HEALTH)
{
@@ -6054,12 +6132,16 @@ void AuraEffect::HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const
damage += addition;
}
-
- damage = caster->SpellHealingBonusDone(target, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount());
+ if (isAreaAura)
+ damage = caster->SpellHealingBonusDone(target, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount()) * caster->SpellHealingPctDone(target, m_spellInfo);
damage = target->SpellHealingBonusTaken(caster, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount());
}
- bool crit = IsPeriodicTickCrit(target, caster);
+ bool crit = false;
+
+ if (CanPeriodicTickCrit(caster))
+ crit = roll_chance_f(isAreaAura ? caster->GetUnitSpellCriticalChance(target, m_spellInfo, m_spellInfo->GetSchoolMask()) : m_critChance);
+
if (crit)
damage = caster->SpellCriticalHealingBonus(m_spellInfo, damage, target);
@@ -6211,6 +6293,9 @@ void AuraEffect::HandlePeriodicEnergizeAuraTick(Unit* target, Unit* caster) cons
{
Powers powerType = Powers(GetMiscValue());
+ if (target->GetTypeId() == TYPEID_PLAYER && target->getPowerType() != powerType && !(m_spellInfo->AttributesEx7 & SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER))
+ return;
+
if (!target->IsAlive() || !target->GetMaxPower(powerType))
return;
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h
index 0887ce123e2..5eec9021291 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.h
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.h
@@ -70,6 +70,13 @@ class AuraEffect
void HandleEffect(Unit* target, uint8 mode, bool apply);
void ApplySpellMod(Unit* target, bool apply);
+ void SetDamage(int32 val) { m_damage = val; }
+ int32 GetDamage() const { return m_damage; }
+ void SetCritChance(float val) { m_critChance = val; }
+ float GetCritChance() const { return m_critChance; }
+ void SetDonePct(float val) { m_donePct = val; }
+ float GetDonePct() const { return m_donePct; }
+
void Update(uint32 diff, Unit* caster);
void UpdatePeriodic(Unit* caster);
@@ -98,6 +105,9 @@ class AuraEffect
int32 const m_baseAmount;
int32 m_amount;
+ int32 m_damage;
+ float m_critChance;
+ float m_donePct;
SpellModifier* m_spellmod;
@@ -109,7 +119,7 @@ class AuraEffect
bool m_canBeRecalculated;
bool m_isPeriodic;
private:
- bool IsPeriodicTickCrit(Unit* target, Unit const* caster) const;
+ bool CanPeriodicTickCrit(Unit const* caster) const;
public:
// aura effect apply/remove handlers
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index 8e7edfc5355..348869075ee 100644
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -539,6 +539,9 @@ void Aura::UpdateTargetMap(Unit* caster, bool apply)
|| !CanBeAppliedOn(itr->first))
addUnit = false;
+ if (addUnit && !itr->first->IsHighestExclusiveAura(this, true))
+ addUnit = false;
+
if (addUnit)
{
// persistent area aura does not hit flying targets
@@ -691,21 +694,12 @@ void Aura::Update(uint32 diff, Unit* caster)
if (int32(caster->GetHealth()) > manaPerSecond)
caster->ModifyHealth(-manaPerSecond);
else
- {
Remove();
- return;
- }
}
+ else if (int32(caster->GetPower(powertype)) >= manaPerSecond)
+ caster->ModifyPower(powertype, -manaPerSecond);
else
- {
- if (int32(caster->GetPower(powertype)) >= manaPerSecond)
- caster->ModifyPower(powertype, -manaPerSecond);
- else
- {
- Remove();
- return;
- }
- }
+ Remove();
}
}
}
@@ -731,24 +725,35 @@ int32 Aura::CalcMaxDuration(Unit* caster) const
// IsPermanent() checks max duration (which we are supposed to calculate here)
if (maxDuration != -1 && modOwner)
modOwner->ApplySpellMod(GetId(), SPELLMOD_DURATION, maxDuration);
+
return maxDuration;
}
void Aura::SetDuration(int32 duration, bool withMods)
{
if (withMods)
- {
if (Unit* caster = GetCaster())
if (Player* modOwner = caster->GetSpellModOwner())
modOwner->ApplySpellMod(GetId(), SPELLMOD_DURATION, duration);
- }
+
m_duration = duration;
SetNeedClientUpdateForTargets();
}
-void Aura::RefreshDuration()
+void Aura::RefreshDuration(bool withMods)
{
- SetDuration(GetMaxDuration());
+ if (withMods)
+ {
+ int32 duration = m_spellInfo->GetMaxDuration();
+ // Calculate duration of periodics affected by haste.
+ if (GetCaster()->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, m_spellInfo) || m_spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION)
+ duration = int32(duration * GetCaster()->GetFloatValue(UNIT_MOD_CAST_SPEED));
+
+ SetMaxDuration(duration);
+ SetDuration(duration);
+ }
+ else
+ SetDuration(GetMaxDuration());
if (m_spellInfo->ManaPerSecond || m_spellInfo->ManaPerSecondPerLevel)
m_timeCla = 1 * IN_MILLISECONDS;
@@ -768,6 +773,7 @@ void Aura::SetCharges(uint8 charges)
{
if (m_procCharges == charges)
return;
+
m_procCharges = charges;
m_isUsingCharges = m_procCharges != 0;
SetNeedClientUpdateForTargets();
@@ -782,6 +788,7 @@ uint8 Aura::CalcMaxCharges(Unit* caster) const
if (caster)
if (Player* modOwner = caster->GetSpellModOwner())
modOwner->ApplySpellMod(GetId(), SPELLMOD_CHARGES, maxProcCharges);
+
return maxProcCharges;
}
@@ -804,6 +811,7 @@ bool Aura::ModCharges(int32 num, AuraRemoveMode removeMode)
SetCharges(charges);
}
+
return false;
}
@@ -825,7 +833,10 @@ void Aura::SetStackAmount(uint8 stackAmount)
for (std::list<AuraApplication*>::const_iterator apptItr = applications.begin(); apptItr != applications.end(); ++apptItr)
if (!(*apptItr)->GetRemoveMode())
+ {
HandleAuraSpecificMods(*apptItr, caster, true, true);
+ HandleAuraSpecificPeriodics(*apptItr, caster);
+ }
SetNeedClientUpdateForTargets();
}
@@ -869,6 +880,7 @@ bool Aura::ModStackAmount(int32 num, AuraRemoveMode removeMode)
if (SpellModifier* mod = aurEff->GetSpellModifier())
mod->charges = GetCharges();
}
+
SetNeedClientUpdateForTargets();
return false;
}
@@ -880,13 +892,22 @@ void Aura::RefreshSpellMods()
player->RestoreAllSpellMods(0, this);
}
+bool Aura::HasMoreThanOneEffectForType(AuraType auraType) const
+{
+ uint32 count = 0;
+ for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ if (HasEffect(i) && AuraType(GetSpellInfo()->Effects[i].ApplyAuraName) == auraType)
+ ++count;
+
+ return count > 1;
+}
+
bool Aura::IsArea() const
{
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
- {
if (HasEffect(i) && GetSpellInfo()->Effects[i].IsAreaAuraEffect())
return true;
- }
+
return false;
}
@@ -1015,7 +1036,7 @@ void Aura::SetLoadedState(int32 maxduration, int32 duration, int32 charges, uint
if (m_effects[i])
{
m_effects[i]->SetAmount(amount[i]);
- m_effects[i]->SetCanBeRecalculated(recalculateMask & (1<<i));
+ m_effects[i]->SetCanBeRecalculated((recalculateMask & (1 << i)) != 0);
m_effects[i]->CalculatePeriodic(caster, false, true);
m_effects[i]->CalculateSpellMod();
m_effects[i]->RecalculateAmount(caster);
@@ -1274,7 +1295,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
{
// instantly heal m_amount% of the absorb-value
int32 heal = glyph->GetAmount() * GetEffect(0)->GetAmount()/100;
- caster->CastCustomSpell(GetUnitOwner(), 56160, &heal, NULL, NULL, true, 0, GetEffect(0));
+ caster->CastCustomSpell(GetUnitOwner(), 56160, &heal, nullptr, nullptr, true, nullptr, GetEffect(0));
}
}
break;
@@ -1343,17 +1364,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
if (target->HasAura(61988) && !target->HasAura(25771))
target->RemoveAura(61988);
break;
- case 72368: // Shared Suffering
- case 72369:
- if (caster)
- {
- if (AuraEffect* aurEff = GetEffect(0))
- {
- int32 remainingDamage = aurEff->GetAmount() * (aurEff->GetTotalTicks() - aurEff->GetTickNumber());
- if (remainingDamage > 0)
- caster->CastCustomSpell(caster, 72373, NULL, &remainingDamage, NULL, true);
- }
- }
+ default:
break;
}
break;
@@ -1641,26 +1652,62 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
break;
}
break;
- case SPELLFAMILY_WARLOCK:
- // Drain Soul - If the target is at or below 25% health, Drain Soul causes four times the normal damage
- if (GetSpellInfo()->SpellFamilyFlags[0] & 0x00004000)
+ }
+}
+
+void Aura::HandleAuraSpecificPeriodics(AuraApplication const* aurApp, Unit* caster)
+{
+ Unit* target = aurApp->GetTarget();
+
+ if (!caster || aurApp->GetRemoveMode())
+ return;
+
+ for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ {
+ if (!HasEffect(i))
+ continue;
+
+ if (m_spellInfo->Effects[i].IsAreaAuraEffect() || m_spellInfo->Effects[i].IsEffect(SPELL_EFFECT_PERSISTENT_AREA_AURA))
+ continue;
+
+ switch (m_spellInfo->Effects[i].ApplyAuraName)
+ {
+ case SPELL_AURA_PERIODIC_DAMAGE:
+ case SPELL_AURA_PERIODIC_DAMAGE_PERCENT:
+ case SPELL_AURA_PERIODIC_LEECH:
{
- if (!caster)
- break;
- if (apply)
- {
- if (target != caster && !target->HealthAbovePct(25))
- caster->CastSpell(caster, 100001, true);
- }
- else
- {
- if (target != caster)
- caster->RemoveAurasDueToSpell(GetId());
- else
- caster->RemoveAurasDueToSpell(100001);
- }
+ AuraEffect* aurEff = GetEffect(i);
+
+ // ignore non positive values (can be result apply spellmods to aura damage
+ uint32 damage = std::max(aurEff->GetAmount(), 0);
+
+ // Script Hook For HandlePeriodicDamageAurasTick -- Allow scripts to change the Damage pre class mitigation calculations
+ sScriptMgr->ModifyPeriodicDamageAurasTick(target, caster, damage);
+
+ aurEff->SetDonePct(caster->SpellDamagePctDone(target, m_spellInfo, DOT)); // Calculate done percentage first!
+ aurEff->SetDamage(caster->SpellDamageBonusDone(target, m_spellInfo, damage, DOT, GetStackAmount()) * aurEff->GetDonePct());
+ aurEff->SetCritChance(caster->GetUnitSpellCriticalChance(target, m_spellInfo, m_spellInfo->GetSchoolMask()));
+ break;
}
- break;
+ case SPELL_AURA_PERIODIC_HEAL:
+ case SPELL_AURA_OBS_MOD_HEALTH:
+ {
+ AuraEffect* aurEff = GetEffect(i);
+
+ // ignore non positive values (can be result apply spellmods to aura damage
+ uint32 damage = std::max(aurEff->GetAmount(), 0);
+
+ // Script Hook For HandlePeriodicDamageAurasTick -- Allow scripts to change the Damage pre class mitigation calculations
+ sScriptMgr->ModifyPeriodicDamageAurasTick(target, caster, damage);
+
+ aurEff->SetDonePct(caster->SpellHealingPctDone(target, m_spellInfo)); // Calculate done percentage first!
+ aurEff->SetDamage(caster->SpellHealingBonusDone(target, m_spellInfo, damage, DOT, GetStackAmount()) * aurEff->GetDonePct());
+ aurEff->SetCritChance(caster->GetUnitSpellCriticalChance(target, m_spellInfo, m_spellInfo->GetSchoolMask()));
+ break;
+ }
+ default:
+ break;
+ }
}
}
@@ -1718,13 +1765,19 @@ bool Aura::CanStackWith(Aura const* existingAura) const
return false;
// check spell group stack rules
- SpellGroupStackRule stackRule = sSpellMgr->CheckSpellGroupStackRules(m_spellInfo, existingSpellInfo);
- if (stackRule)
+ switch (sSpellMgr->CheckSpellGroupStackRules(m_spellInfo, existingSpellInfo))
{
- if (stackRule == SPELL_GROUP_STACK_RULE_EXCLUSIVE)
- return false;
- if (sameCaster && stackRule == SPELL_GROUP_STACK_RULE_EXCLUSIVE_FROM_SAME_CASTER)
+ case SPELL_GROUP_STACK_RULE_EXCLUSIVE:
+ case SPELL_GROUP_STACK_RULE_EXCLUSIVE_HIGHEST: // if it reaches this point, existing aura is lower/equal
return false;
+ case SPELL_GROUP_STACK_RULE_EXCLUSIVE_FROM_SAME_CASTER:
+ if (sameCaster)
+ return false;
+ break;
+ case SPELL_GROUP_STACK_RULE_DEFAULT:
+ case SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT:
+ default:
+ break;
}
if (m_spellInfo->SpellFamilyName != existingSpellInfo->SpellFamilyName)
diff --git a/src/server/game/Spells/Auras/SpellAuras.h b/src/server/game/Spells/Auras/SpellAuras.h
index f62b1ff47b4..e578c0ffc3a 100644
--- a/src/server/game/Spells/Auras/SpellAuras.h
+++ b/src/server/game/Spells/Auras/SpellAuras.h
@@ -67,9 +67,9 @@ class AuraApplication
uint8 GetSlot() const { return _slot; }
uint8 GetFlags() const { return _flags; }
uint8 GetEffectMask() const { return _flags & (AFLAG_EFF_INDEX_0 | AFLAG_EFF_INDEX_1 | AFLAG_EFF_INDEX_2); }
- bool HasEffect(uint8 effect) const { ASSERT(effect < MAX_SPELL_EFFECTS); return _flags & (1<<effect); }
- bool IsPositive() const { return _flags & AFLAG_POSITIVE; }
- bool IsSelfcast() const { return _flags & AFLAG_CASTER; }
+ bool HasEffect(uint8 effect) const { ASSERT(effect < MAX_SPELL_EFFECTS); return (_flags & (1 << effect)) != 0; }
+ bool IsPositive() const { return (_flags & AFLAG_POSITIVE) != 0; }
+ bool IsSelfcast() const { return (_flags & AFLAG_CASTER) != 0; }
uint8 GetEffectsToApply() const { return _effectsToApply; }
void SetRemoveMode(AuraRemoveMode mode) { _removeMode = mode; }
@@ -129,7 +129,7 @@ class Aura
int32 CalcMaxDuration(Unit* caster) const;
int32 GetDuration() const { return m_duration; }
void SetDuration(int32 duration, bool withMods = false);
- void RefreshDuration();
+ void RefreshDuration(bool withMods = false);
void RefreshTimers();
bool IsExpired() const { return !GetDuration();}
bool IsPermanent() const { return GetMaxDuration() == -1; }
@@ -149,6 +149,7 @@ class Aura
uint8 GetCasterLevel() const { return m_casterLevel; }
+ bool HasMoreThanOneEffectForType(AuraType auraType) const;
bool IsArea() const;
bool IsPassive() const;
bool IsDeathPersistent() const;
@@ -190,6 +191,7 @@ class Aura
void SetNeedClientUpdateForTargets() const;
void HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, bool apply, bool onReapply);
+ void HandleAuraSpecificPeriodics(AuraApplication const* aurApp, Unit* caster);
bool CanBeAppliedOn(Unit* target);
bool CheckAreaTarget(Unit* target);
bool CanStackWith(Aura const* existingAura) const;
@@ -272,12 +274,12 @@ class UnitAura : public Aura
protected:
explicit UnitAura(SpellInfo const* spellproto, uint8 effMask, WorldObject* owner, Unit* caster, int32 *baseAmount, Item* castItem, uint64 casterGUID);
public:
- void _ApplyForTarget(Unit* target, Unit* caster, AuraApplication * aurApp);
- void _UnapplyForTarget(Unit* target, Unit* caster, AuraApplication * aurApp);
+ void _ApplyForTarget(Unit* target, Unit* caster, AuraApplication * aurApp) override;
+ void _UnapplyForTarget(Unit* target, Unit* caster, AuraApplication * aurApp) override;
- void Remove(AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT);
+ void Remove(AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT) override;
- void FillTargetMap(std::map<Unit*, uint8> & targets, Unit* caster);
+ void FillTargetMap(std::map<Unit*, uint8> & targets, Unit* caster) override;
// Allow Apply Aura Handler to modify and access m_AuraDRGroup
void SetDiminishGroup(DiminishingGroup group) { m_AuraDRGroup = group; }
@@ -293,8 +295,8 @@ class DynObjAura : public Aura
protected:
explicit DynObjAura(SpellInfo const* spellproto, uint8 effMask, WorldObject* owner, Unit* caster, int32 *baseAmount, Item* castItem, uint64 casterGUID);
public:
- void Remove(AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT);
+ void Remove(AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT) override;
- void FillTargetMap(std::map<Unit*, uint8> & targets, Unit* caster);
+ void FillTargetMap(std::map<Unit*, uint8> & targets, Unit* caster) override;
};
#endif
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 124c1c21332..0f79c4d0780 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -567,10 +567,11 @@ m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharme
m_spellState = SPELL_STATE_NULL;
_triggeredCastFlags = triggerFlags;
if (info->AttributesEx4 & SPELL_ATTR4_TRIGGERED)
- _triggeredCastFlags = TRIGGERED_FULL_MASK;
+ _triggeredCastFlags = TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_EQUIPPED_ITEM_REQUIREMENT);
m_CastItem = NULL;
m_castItemGUID = 0;
+ m_castItemEntry = 0;
unitTarget = NULL;
itemTarget = NULL;
@@ -599,7 +600,7 @@ m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharme
m_powerCost = 0; // setup to correct value in Spell::prepare, must not be used before.
m_casttime = 0; // setup to correct value in Spell::prepare, must not be used before.
m_timer = 0; // will set to castime in prepare
-
+ m_channeledDuration = 0; // will be setup in Spell::handle_immediate
m_immediateHandled = false;
m_channelTargetEffectMask = 0;
@@ -823,7 +824,7 @@ void Spell::SelectSpellTargets()
else if (m_spellInfo->Speed > 0.0f)
{
float dist = m_caster->GetDistance(*m_targets.GetDstPos());
- m_delayMoment = (uint64) floor(dist / m_spellInfo->Speed * 1000.0f);
+ m_delayMoment = (uint64) std::floor(dist / m_spellInfo->Speed * 1000.0f);
}
}
}
@@ -1098,7 +1099,7 @@ void Spell::SelectImplicitConeTargets(SpellEffIndex effIndex, SpellImplicitTarge
SpellTargetObjectTypes objectType = targetType.GetObjectType();
SpellTargetCheckTypes selectionType = targetType.GetCheckType();
ConditionList* condList = m_spellInfo->Effects[effIndex].ImplicitTargetConditions;
- float coneAngle = M_PI/2;
+ float coneAngle = float(M_PI) / 2;
float radius = m_spellInfo->Effects[effIndex].CalcRadius(m_caster) * m_spellValue->RadiusMod;
if (uint32 containerTypeMask = GetSearcherTypeMask(objectType, condList))
@@ -1206,7 +1207,7 @@ void Spell::SelectImplicitAreaTargets(SpellEffIndex effIndex, SpellImplicitTarge
for (std::list<WorldObject*>::iterator itr = targets.begin(); itr != targets.end(); ++itr)
{
if (Unit* unitTarget = (*itr)->ToUnit())
- AddUnitTarget(unitTarget, effMask, false);
+ AddUnitTarget(unitTarget, effMask, false, true, center);
else if (GameObject* gObjTarget = (*itr)->ToGameObject())
AddGOTarget(gObjTarget, effMask);
}
@@ -1250,8 +1251,12 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffIndex effIndex, SpellImplici
float angle = float(rand_norm()) * static_cast<float>(M_PI * 35.0f / 180.0f) - static_cast<float>(M_PI * 17.5f / 180.0f);
m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE, dist, angle);
- float ground = z;
- float liquidLevel = m_caster->GetMap()->GetWaterOrGroundLevel(x, y, z, &ground);
+ float ground = m_caster->GetMap()->GetHeight(m_caster->GetPhaseMask(), x, y, z, true, 50.0f);
+ float liquidLevel = VMAP_INVALID_HEIGHT_VALUE;
+ LiquidData liquidData;
+ if (m_caster->GetMap()->getLiquidStatus(x, y, z, MAP_ALL_LIQUIDS, &liquidData))
+ liquidLevel = liquidData.level;
+
if (liquidLevel <= ground) // When there is no liquid Map::GetWaterOrGroundLevel returns ground level
{
SendCastResult(SPELL_FAILED_NOT_HERE);
@@ -1287,10 +1292,7 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffIndex effIndex, SpellImplici
dist = objSize + (dist - objSize) * float(rand_norm());
Position pos = dest._position;
- if (targetType.GetTarget() == TARGET_DEST_CASTER_FRONT_LEAP)
- m_caster->MovePositionToFirstCollision(pos, dist, angle);
- else
- m_caster->MovePosition(pos, dist, angle);
+ m_caster->MovePositionToFirstCollision(pos, dist, angle);
dest.Relocate(pos);
break;
@@ -1303,6 +1305,7 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffIndex effIndex, SpellImplici
void Spell::SelectImplicitTargetDestTargets(SpellEffIndex effIndex, SpellImplicitTargetInfo const& targetType)
{
+ ASSERT(m_targets.GetObjectTarget() && "Spell::SelectImplicitTargetDestTargets - no explicit object target available!");
WorldObject* target = m_targets.GetObjectTarget();
SpellDestination dest(*target);
@@ -1323,7 +1326,7 @@ void Spell::SelectImplicitTargetDestTargets(SpellEffIndex effIndex, SpellImplici
dist = objSize + (dist - objSize) * float(rand_norm());
Position pos = dest._position;
- target->MovePosition(pos, dist, angle);
+ target->MovePositionToFirstCollision(pos, dist, angle);
dest.Relocate(pos);
break;
@@ -1362,7 +1365,7 @@ void Spell::SelectImplicitDestDestTargets(SpellEffIndex effIndex, SpellImplicitT
dist *= float(rand_norm());
Position pos = dest._position;
- m_caster->MovePosition(pos, dist, angle);
+ m_caster->MovePositionToFirstCollision(pos, dist, angle);
dest.Relocate(pos);
break;
@@ -1469,7 +1472,7 @@ void Spell::SelectImplicitChainTargets(SpellEffIndex effIndex, SpellImplicitTarg
float tangent(float x)
{
- x = tan(x);
+ x = std::tan(x);
//if (x < std::numeric_limits<float>::max() && x > -std::numeric_limits<float>::max()) return x;
//if (x >= std::numeric_limits<float>::max()) return std::numeric_limits<float>::max();
//if (x <= -std::numeric_limits<float>::max()) return -std::numeric_limits<float>::max();
@@ -1512,10 +1515,24 @@ void Spell::SelectImplicitTrajTargets(SpellEffIndex effIndex)
std::list<WorldObject*>::const_iterator itr = targets.begin();
for (; itr != targets.end(); ++itr)
{
+ if (!m_caster->HasInLine(*itr, 5.0f))
+ continue;
+
+ if (m_spellInfo->CheckTarget(m_caster, *itr, true) != SPELL_CAST_OK)
+ continue;
+
if (Unit* unitTarget = (*itr)->ToUnit())
- if (m_caster == *itr || m_caster->IsOnVehicle(unitTarget) || (unitTarget)->GetVehicle())//(*itr)->IsOnVehicle(m_caster))
+ {
+ if (m_caster == *itr || m_caster->IsOnVehicle(unitTarget) || unitTarget->GetVehicle())
continue;
+ if (Creature* creatureTarget = unitTarget->ToCreature())
+ {
+ if (!(creatureTarget->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_PROJECTILE_COLLISION))
+ continue;
+ }
+ }
+
const float size = std::max((*itr)->GetObjectSize() * 0.7f, 1.0f); // 1/sqrt(3)
/// @todo all calculation should be based on src instead of m_caster
const float objDist2d = m_targets.GetSrcPos()->GetExactDist2d(*itr) * std::cos(m_targets.GetSrcPos()->GetRelativeAngle(*itr));
@@ -1560,7 +1577,7 @@ void Spell::SelectImplicitTrajTargets(SpellEffIndex effIndex)
float sqrt1 = b * b + 4 * a * height;
if (sqrt1 > 0)
{
- sqrt1 = sqrt(sqrt1);
+ sqrt1 = std::sqrt(sqrt1);
dist = (sqrt1 - b) / (2 * a);
CHECK_DIST;
}
@@ -1569,7 +1586,7 @@ void Spell::SelectImplicitTrajTargets(SpellEffIndex effIndex)
float sqrt2 = b * b + 4 * a * height;
if (sqrt2 > 0)
{
- sqrt2 = sqrt(sqrt2);
+ sqrt2 = std::sqrt(sqrt2);
dist = (sqrt2 - b) / (2 * a);
CHECK_DIST;
@@ -1598,7 +1615,7 @@ void Spell::SelectImplicitTrajTargets(SpellEffIndex effIndex)
DEBUG_TRAJ(TC_LOG_ERROR("spells", "Initial %f %f %f %f %f", x, y, z, distSq, sizeSq);)
if (distSq > sizeSq)
{
- float factor = 1 - sqrt(sizeSq / distSq);
+ float factor = 1 - std::sqrt(sizeSq / distSq);
x += factor * ((*itr)->GetPositionX() - x);
y += factor * ((*itr)->GetPositionY() - y);
z += factor * ((*itr)->GetPositionZ() - z);
@@ -1742,8 +1759,8 @@ void Spell::SearchTargets(SEARCHER& searcher, uint32 containerMask, Unit* refere
return;
// search world and grid for possible targets
- bool searchInGrid = containerMask & (GRID_MAP_TYPE_MASK_CREATURE | GRID_MAP_TYPE_MASK_GAMEOBJECT);
- bool searchInWorld = containerMask & (GRID_MAP_TYPE_MASK_CREATURE | GRID_MAP_TYPE_MASK_PLAYER | GRID_MAP_TYPE_MASK_CORPSE);
+ bool searchInGrid = (containerMask & (GRID_MAP_TYPE_MASK_CREATURE | GRID_MAP_TYPE_MASK_GAMEOBJECT)) != 0;
+ bool searchInWorld = (containerMask & (GRID_MAP_TYPE_MASK_CREATURE | GRID_MAP_TYPE_MASK_PLAYER | GRID_MAP_TYPE_MASK_CORPSE)) != 0;
if (searchInGrid || searchInWorld)
{
float x, y;
@@ -1983,10 +2000,10 @@ void Spell::CleanupTargetList()
m_delayMoment = 0;
}
-void Spell::AddUnitTarget(Unit* target, uint32 effectMask, bool checkIfValid /*= true*/, bool implicit /*= true*/)
+void Spell::AddUnitTarget(Unit* target, uint32 effectMask, bool checkIfValid /*= true*/, bool implicit /*= true*/, Position const* losPosition /*= nullptr*/)
{
for (uint32 effIndex = 0; effIndex < MAX_SPELL_EFFECTS; ++effIndex)
- if (!m_spellInfo->Effects[effIndex].IsEffect() || !CheckEffectTarget(target, effIndex))
+ if (!m_spellInfo->Effects[effIndex].IsEffect() || !CheckEffectTarget(target, effIndex, losPosition))
effectMask &= ~(1 << effIndex);
// no effects left
@@ -2059,7 +2076,7 @@ void Spell::AddUnitTarget(Unit* target, uint32 effectMask, bool checkIfValid /*=
if (dist < 5.0f)
dist = 5.0f;
- targetInfo.timeDelay = (uint64) floor(dist / m_spellInfo->Speed * 1000.0f);
+ targetInfo.timeDelay = (uint64)std::floor(dist / m_spellInfo->Speed * 1000.0f);
// Calculate minimum incoming time
if (m_delayMoment == 0 || m_delayMoment > targetInfo.timeDelay)
@@ -2249,7 +2266,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
m_spellAura = NULL; // Set aura to null for every target-make sure that pointer is not used for unit without aura applied
//Spells with this flag cannot trigger if effect is cast on self
- bool canEffectTrigger = !(m_spellInfo->AttributesEx3 & SPELL_ATTR3_CANT_TRIGGER_PROC) && unitTarget->CanProc() && CanExecuteTriggersOnHit(mask);
+ bool canEffectTrigger = !(m_spellInfo->AttributesEx3 & SPELL_ATTR3_CANT_TRIGGER_PROC) && unitTarget->CanProc() && (CanExecuteTriggersOnHit(mask) || missInfo == SPELL_MISS_IMMUNE || missInfo == SPELL_MISS_IMMUNE2);
Unit* spellHitTarget = NULL;
if (missInfo == SPELL_MISS_NONE) // In case spell hit target, do all effect on that target
@@ -2295,15 +2312,8 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
if (m_damage > 0)
positive = false;
else if (!m_healing)
- {
- for (uint8 i = 0; i< MAX_SPELL_EFFECTS; ++i)
- // If at least one effect negative spell is negative hit
- if (mask & (1<<i) && !m_spellInfo->IsPositiveEffect(i))
- {
- positive = false;
- break;
- }
- }
+ positive = m_spellInfo->IsPositive();
+
switch (m_spellInfo->DmgClass)
{
case SPELL_DAMAGE_CLASS_MAGIC:
@@ -2338,7 +2348,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
// Do healing and triggers
if (m_healing > 0)
{
- bool crit = caster->isSpellCrit(unitTarget, m_spellInfo, m_spellSchoolMask);
+ bool crit = caster->IsSpellCrit(unitTarget, m_spellInfo, m_spellSchoolMask);
uint32 addhealth = m_healing;
if (crit)
{
@@ -2381,7 +2391,6 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
caster->ToPlayer()->CastItemCombatSpell(unitTarget, m_attackType, procVictim, procEx);
}
-
m_damage = damageInfo.damage;
caster->DealSpellDamage(&damageInfo, true);
@@ -2522,9 +2531,14 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA
}
}
+ uint8 aura_effmask = 0;
+ for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ if (effectMask & (1 << i) && m_spellInfo->Effects[i].IsUnitOwnedAuraEffect())
+ aura_effmask |= 1 << i;
+
// Get Data Needed for Diminishing Returns, some effects may have multiple auras, so this must be done on spell hit, not aura add
- m_diminishGroup = GetDiminishingReturnsGroupForSpell(m_spellInfo, m_triggeredByAuraSpell);
- if (m_diminishGroup)
+ m_diminishGroup = GetDiminishingReturnsGroupForSpell(m_spellInfo, m_triggeredByAuraSpell != nullptr);
+ if (m_diminishGroup && aura_effmask)
{
m_diminishLevel = unit->GetDiminishing(m_diminishGroup);
DiminishingReturnsType type = GetDiminishingReturnsGroupType(m_diminishGroup);
@@ -2535,11 +2549,6 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA
unit->IncrDiminishing(m_diminishGroup);
}
- uint8 aura_effmask = 0;
- for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
- if (effectMask & (1 << i) && m_spellInfo->Effects[i].IsUnitOwnedAuraEffect())
- aura_effmask |= 1 << i;
-
if (aura_effmask)
{
// Select rank for aura with level requirements only in specific cases
@@ -2605,10 +2614,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA
// Haste modifies duration of channeled spells
if (m_spellInfo->IsChanneled())
- {
- if (m_spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION)
- m_originalCaster->ModSpellCastTime(aurSpellInfo, duration, this);
- }
+ m_originalCaster->ModSpellCastTime(aurSpellInfo, duration, this);
// and duration of auras affected by SPELL_AURA_PERIODIC_HASTE
else if (m_originalCaster->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, aurSpellInfo) || m_spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION)
duration = int32(duration * m_originalCaster->GetFloatValue(UNIT_MOD_CAST_SPEED));
@@ -2698,7 +2704,7 @@ void Spell::DoTriggersOnSpellHit(Unit* unit, uint8 effMask)
if (*i < 0)
unit->RemoveAurasDueToSpell(-(*i));
else
- unit->CastSpell(unit, *i, true, 0, 0, m_caster->GetGUID());
+ unit->CastSpell(unit, *i, true, nullptr, nullptr, m_caster->GetGUID());
}
}
}
@@ -2806,9 +2812,15 @@ bool Spell::UpdateChanneledTargetList()
void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggeredByAura)
{
if (m_CastItem)
+ {
m_castItemGUID = m_CastItem->GetGUID();
+ m_castItemEntry = m_CastItem->GetEntry();
+ }
else
+ {
m_castItemGUID = 0;
+ m_castItemEntry = 0;
+ }
InitExplicitTargets(*targets);
@@ -3016,7 +3028,12 @@ void Spell::cancel()
void Spell::cast(bool skipCheck)
{
// update pointers base at GUIDs to prevent access to non-existed already object
- UpdatePointers();
+ if (!UpdatePointers())
+ {
+ // cancel the spell if UpdatePointers() returned false, something wrong happened there
+ cancel();
+ return;
+ }
// cancel at lost explicit target during cast
if (m_targets.GetObjectTargetGUID() && !m_targets.GetObjectTarget())
@@ -3221,12 +3238,13 @@ void Spell::handle_immediate()
// Apply duration mod
if (Player* modOwner = m_caster->GetSpellModOwner())
modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_DURATION, duration);
+
// Apply haste mods
- if (m_spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION)
- m_caster->ModSpellCastTime(m_spellInfo, duration, this);
+ m_caster->ModSpellCastTime(m_spellInfo, duration, this);
m_spellState = SPELL_STATE_CASTING;
m_caster->AddInterruptMask(m_spellInfo->ChannelInterruptFlags);
+ m_channeledDuration = duration;
SendChannelStart(duration);
}
else if (duration == -1)
@@ -3266,7 +3284,12 @@ void Spell::handle_immediate()
uint64 Spell::handle_delayed(uint64 t_offset)
{
- UpdatePointers();
+ if (!UpdatePointers())
+ {
+ // finish the spell if UpdatePointers() returned false, something wrong happened there
+ finish(false);
+ return 0;
+ }
if (m_caster->GetTypeId() == TYPEID_PLAYER)
m_caster->ToPlayer()->SetSpellModTakingSpell(this, true);
@@ -3398,7 +3421,14 @@ void Spell::SendSpellCooldown()
{
Player* _player = m_caster->ToPlayer();
if (!_player)
+ {
+ // Handle pet cooldowns here if needed instead of in PetAI to avoid hidden cooldown restarts
+ Creature* _creature = m_caster->ToCreature();
+ if (_creature && _creature->IsPet())
+ _creature->AddCreatureSpellCooldown(m_spellInfo->Id);
+
return;
+ }
// mana/health/etc potions, disabled by client (until combat out as declarate)
if (m_CastItem && (m_CastItem->IsPotion() || m_spellInfo->IsCooldownStartedOnEvent()))
@@ -3418,7 +3448,12 @@ void Spell::SendSpellCooldown()
void Spell::update(uint32 difftime)
{
// update pointers based at it's GUIDs
- UpdatePointers();
+ if (!UpdatePointers())
+ {
+ // cancel the spell if UpdatePointers() returned false, something wrong happened there
+ cancel();
+ return;
+ }
if (m_targets.GetUnitTargetGUID() && !m_targets.GetUnitTarget())
{
@@ -3742,7 +3777,7 @@ void Spell::SendSpellStart()
castFlags |= CAST_FLAG_POWER_LEFT_SELF;
if (m_spellInfo->RuneCostID && m_spellInfo->PowerType == POWER_RUNE)
- castFlags |= CAST_FLAG_UNKNOWN_19;
+ castFlags |= CAST_FLAG_NO_GCD; // not needed, but Blizzard sends it
WorldPacket data(SMSG_SPELL_START, (8+8+4+4+2));
if (m_CastItem)
@@ -3798,21 +3833,22 @@ void Spell::SendSpellGo()
if ((m_caster->GetTypeId() == TYPEID_PLAYER)
&& (m_caster->getClass() == CLASS_DEATH_KNIGHT)
&& m_spellInfo->RuneCostID
- && m_spellInfo->PowerType == POWER_RUNE)
+ && m_spellInfo->PowerType == POWER_RUNE
+ && !(_triggeredCastFlags & TRIGGERED_IGNORE_POWER_AND_REAGENT_COST))
{
- castFlags |= CAST_FLAG_UNKNOWN_19; // same as in SMSG_SPELL_START
+ castFlags |= CAST_FLAG_NO_GCD; // not needed, but Blizzard sends it
castFlags |= CAST_FLAG_RUNE_LIST; // rune cooldowns list
}
if (m_spellInfo->HasEffect(SPELL_EFFECT_ACTIVATE_RUNE))
- {
castFlags |= CAST_FLAG_RUNE_LIST; // rune cooldowns list
- castFlags |= CAST_FLAG_UNKNOWN_19; // same as in SMSG_SPELL_START
- }
if (m_targets.HasTraj())
castFlags |= CAST_FLAG_ADJUST_MISSILE;
+ if (!m_spellInfo->StartRecoveryTime)
+ castFlags |= CAST_FLAG_NO_GCD;
+
WorldPacket data(SMSG_SPELL_GO, 50); // guess size
if (m_CastItem)
@@ -3971,7 +4007,7 @@ void Spell::WriteSpellGoTargets(WorldPacket* data)
uint32 hit = 0;
size_t hitPos = data->wpos();
*data << (uint8)0; // placeholder
- for (std::list<TargetInfo>::const_iterator ihit = m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end() && hit <= 255; ++ihit)
+ for (std::list<TargetInfo>::const_iterator ihit = m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end() && hit < 255; ++ihit)
{
if ((*ihit).missCondition == SPELL_MISS_NONE) // Add only hits
{
@@ -3981,7 +4017,7 @@ void Spell::WriteSpellGoTargets(WorldPacket* data)
}
}
- for (std::list<GOTargetInfo>::const_iterator ighit = m_UniqueGOTargetInfo.begin(); ighit != m_UniqueGOTargetInfo.end() && hit <= 255; ++ighit)
+ for (std::list<GOTargetInfo>::const_iterator ighit = m_UniqueGOTargetInfo.begin(); ighit != m_UniqueGOTargetInfo.end() && hit < 255; ++ighit)
{
*data << uint64(ighit->targetGUID); // Always hits
++hit;
@@ -3990,7 +4026,7 @@ void Spell::WriteSpellGoTargets(WorldPacket* data)
uint32 miss = 0;
size_t missPos = data->wpos();
*data << (uint8)0; // placeholder
- for (std::list<TargetInfo>::const_iterator ihit = m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end() && miss <= 255; ++ihit)
+ for (std::list<TargetInfo>::const_iterator ihit = m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end() && miss < 255; ++ihit)
{
if (ihit->missCondition != SPELL_MISS_NONE) // Add only miss
{
@@ -4165,7 +4201,7 @@ void Spell::SendChannelStart(uint32 duration)
void Spell::SendResurrectRequest(Player* target)
{
- // get ressurector name for creature resurrections, otherwise packet will be not accepted
+ // get resurrector name for creature resurrections, otherwise packet will be not accepted
// for player resurrections the name is looked up by guid
std::string const sentName(m_caster->GetTypeId() == TYPEID_PLAYER
? ""
@@ -4248,6 +4284,8 @@ void Spell::TakeCastItem()
m_targets.SetItemTarget(NULL);
m_CastItem = NULL;
+ m_castItemGUID = 0;
+ m_castItemEntry = 0;
}
}
@@ -4492,6 +4530,8 @@ void Spell::TakeReagents()
}
m_CastItem = NULL;
+ m_castItemGUID = 0;
+ m_castItemEntry = 0;
}
// if GetItemTarget is also spell reagent
@@ -4761,8 +4801,15 @@ SpellCastResult Spell::CheckCast(bool strict)
return SPELL_FAILED_NOT_INFRONT;
if (m_caster->GetEntry() != WORLD_TRIGGER) // Ignore LOS for gameobjects casts (wrongly cast by a trigger)
- if (!(m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS) && !m_caster->IsWithinLOSInMap(target))
+ {
+ WorldObject* losTarget = m_caster;
+ if (IsTriggered() && m_triggeredByAuraSpell)
+ if (DynamicObject* dynObj = m_caster->GetDynObject(m_triggeredByAuraSpell->Id))
+ losTarget = dynObj;
+
+ if (!(m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS) && !target->IsWithinLOSInMap(losTarget))
return SPELL_FAILED_LINE_OF_SIGHT;
+ }
}
}
@@ -5012,16 +5059,24 @@ SpellCastResult Spell::CheckCast(bool strict)
if (!target)
return SPELL_FAILED_DONT_REPORT;
- Position pos;
- target->GetContactPoint(m_caster, pos.m_positionX, pos.m_positionY, pos.m_positionZ);
- target->GetFirstCollisionPosition(pos, CONTACT_DISTANCE, target->GetRelativeAngle(m_caster));
+ float objSize = target->GetObjectSize();
+ float range = m_spellInfo->GetMaxRange(true, m_caster, this) * 1.5f + objSize; // can't be overly strict
- m_preGeneratedPath.SetPathLengthLimit(m_spellInfo->GetMaxRange(true) * 1.5f);
- bool result = m_preGeneratedPath.CalculatePath(pos.m_positionX, pos.m_positionY, pos.m_positionZ + target->GetObjectSize(), false, true);
+ m_preGeneratedPath.SetPathLengthLimit(range);
+ // first try with raycast, if it fails fall back to normal path
+ bool result = m_preGeneratedPath.CalculatePath(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ() + target->GetObjectSize(), false, true);
if (m_preGeneratedPath.GetPathType() & PATHFIND_SHORT)
return SPELL_FAILED_OUT_OF_RANGE;
else if (!result || m_preGeneratedPath.GetPathType() & PATHFIND_NOPATH)
- return SPELL_FAILED_NOPATH;
+ {
+ result = m_preGeneratedPath.CalculatePath(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ() + target->GetObjectSize(), false, false);
+ if (m_preGeneratedPath.GetPathType() & PATHFIND_SHORT)
+ return SPELL_FAILED_OUT_OF_RANGE;
+ else if (!result || m_preGeneratedPath.GetPathType() & PATHFIND_NOPATH)
+ return SPELL_FAILED_NOPATH;
+ }
+
+ m_preGeneratedPath.ReducePathLenghtByDist(objSize); // move back
}
break;
}
@@ -5034,7 +5089,7 @@ SpellCastResult Spell::CheckCast(bool strict)
return SPELL_FAILED_TARGET_UNSKINNABLE;
Creature* creature = m_targets.GetUnitTarget()->ToCreature();
- if (creature->GetCreatureType() != CREATURE_TYPE_CRITTER && !creature->loot.isLooted())
+ if (!creature->IsCritter() && !creature->loot.isLooted())
return SPELL_FAILED_TARGET_NOT_LOOTED;
uint32 skill = creature->GetCreatureTemplate()->GetRequiredLootSkill();
@@ -5476,7 +5531,7 @@ SpellCastResult Spell::CheckCasterAuras() const
mechanic_immune = IMMUNE_TO_MOVEMENT_IMPAIRMENT_AND_LOSS_CONTROL_MASK;
}
- bool usableInStun = m_spellInfo->AttributesEx5 & SPELL_ATTR5_USABLE_WHILE_STUNNED;
+ bool usableInStun = (m_spellInfo->AttributesEx5 & SPELL_ATTR5_USABLE_WHILE_STUNNED) != 0;
// Glyph of Pain Suppression
// there is no other way to handle it
@@ -6271,7 +6326,10 @@ void Spell::DelayedChannel()
return;
//check pushback reduce
- int32 delaytime = CalculatePct(m_spellInfo->GetDuration(), 25); // channeling delay is normally 25% of its time per hit
+ // should be affected by modifiers, not take the dbc duration.
+ int32 duration = ((m_channeledDuration > 0) ? m_channeledDuration : m_spellInfo->GetDuration());
+
+ int32 delaytime = CalculatePct(duration, 25); // channeling delay is normally 25% of its time per hit
int32 delayReduce = 100; // must be initialized to 100 for percent modifiers
m_caster->ToPlayer()->ApplySpellMod(m_spellInfo->Id, SPELLMOD_NOT_LOSE_CASTING_TIME, delayReduce, this);
delayReduce += m_caster->GetTotalAuraModifier(SPELL_AURA_REDUCE_PUSHBACK) - 100;
@@ -6302,7 +6360,7 @@ void Spell::DelayedChannel()
SendChannelUpdate(m_timer);
}
-void Spell::UpdatePointers()
+bool Spell::UpdatePointers()
{
if (m_originalCasterGUID == m_caster->GetGUID())
m_originalCaster = m_caster;
@@ -6314,13 +6372,22 @@ void Spell::UpdatePointers()
}
if (m_castItemGUID && m_caster->GetTypeId() == TYPEID_PLAYER)
+ {
m_CastItem = m_caster->ToPlayer()->GetItemByGuid(m_castItemGUID);
+ // cast item not found, somehow the item is no longer where we expected
+ if (!m_CastItem)
+ return false;
+
+ // check if the item is really the same, in case it has been wrapped for example
+ if (m_castItemEntry != m_CastItem->GetEntry())
+ return false;
+ }
m_targets.Update(m_caster);
// further actions done only for dest targets
if (!m_targets.HasDst())
- return;
+ return true;
// cache last transport
WorldObject* transport = NULL;
@@ -6341,6 +6408,8 @@ void Spell::UpdatePointers()
dest._position.RelocateOffset(dest._transportOffset);
}
}
+
+ return true;
}
CurrentSpellTypes Spell::GetCurrentContainer() const
@@ -6355,7 +6424,7 @@ CurrentSpellTypes Spell::GetCurrentContainer() const
return(CURRENT_GENERIC_SPELL);
}
-bool Spell::CheckEffectTarget(Unit const* target, uint32 eff) const
+bool Spell::CheckEffectTarget(Unit const* target, uint32 eff, Position const* losPosition) const
{
switch (m_spellInfo->Effects[eff].ApplyAuraName)
{
@@ -6405,15 +6474,22 @@ bool Spell::CheckEffectTarget(Unit const* target, uint32 eff) const
// all ok by some way or another, skip normal check
break;
default: // normal case
- // Get GO cast coordinates if original caster -> GO
- WorldObject* caster = NULL;
- if (IS_GAMEOBJECT_GUID(m_originalCasterGUID))
- caster = m_caster->GetMap()->GetGameObject(m_originalCasterGUID);
- if (!caster)
- caster = m_caster;
- if (target != m_caster && !target->IsWithinLOSInMap(caster))
- return false;
+ {
+ if (losPosition)
+ return target->IsWithinLOS(losPosition->GetPositionX(), losPosition->GetPositionY(), losPosition->GetPositionZ());
+ else
+ {
+ // Get GO cast coordinates if original caster -> GO
+ WorldObject* caster = NULL;
+ if (IS_GAMEOBJECT_GUID(m_originalCasterGUID))
+ caster = m_caster->GetMap()->GetGameObject(m_originalCasterGUID);
+ if (!caster)
+ caster = m_caster;
+ if (target != m_caster && !target->IsWithinLOSInMap(caster))
+ return false;
+ }
break;
+ }
}
return true;
@@ -6421,7 +6497,7 @@ bool Spell::CheckEffectTarget(Unit const* target, uint32 eff) const
bool Spell::IsNextMeleeSwingSpell() const
{
- return m_spellInfo->Attributes & SPELL_ATTR0_ON_NEXT_SWING;
+ return (m_spellInfo->Attributes & SPELL_ATTR0_ON_NEXT_SWING) != 0;
}
bool Spell::IsAutoActionResetSpell() const
@@ -6600,7 +6676,7 @@ void Spell::HandleLaunchPhase()
if (m_applyMultiplierMask & (1 << i))
multiplier[i] = m_spellInfo->Effects[i].CalcDamageMultiplier(m_originalCaster, this);
- bool usesAmmo = m_spellInfo->AttributesCu & SPELL_ATTR0_CU_DIRECT_DAMAGE;
+ bool usesAmmo = (m_spellInfo->AttributesCu & SPELL_ATTR0_CU_DIRECT_DAMAGE) != 0;
Unit::AuraEffectList const& Auras = m_caster->GetAuraEffectsByType(SPELL_AURA_ABILITY_CONSUME_NO_AMMO);
for (Unit::AuraEffectList::const_iterator j = Auras.begin(); j != Auras.end(); ++j)
{
@@ -6692,7 +6768,7 @@ void Spell::DoAllEffectOnLaunchTarget(TargetInfo& targetInfo, float* multiplier)
}
}
- targetInfo.crit = m_caster->isSpellCrit(unit, m_spellInfo, m_spellSchoolMask, m_attackType);
+ targetInfo.crit = m_caster->IsSpellCrit(unit, m_spellInfo, m_spellSchoolMask, m_attackType);
}
SpellCastResult Spell::CanOpenLock(uint32 effIndex, uint32 lockId, SkillType& skillId, int32& reqSkillValue, int32& skillValue)
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index e87e2c2085a..e1e16100141 100644
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -57,7 +57,7 @@ enum SpellCastFlags
CAST_FLAG_UNKNOWN_16 = 0x00008000,
CAST_FLAG_UNKNOWN_17 = 0x00010000,
CAST_FLAG_ADJUST_MISSILE = 0x00020000,
- CAST_FLAG_UNKNOWN_19 = 0x00040000,
+ CAST_FLAG_NO_GCD = 0x00040000, // no GCD for spell casts from charm/summon (vehicle spells is an example)
CAST_FLAG_VISUAL_CHAIN = 0x00080000,
CAST_FLAG_UNKNOWN_21 = 0x00100000,
CAST_FLAG_RUNE_LIST = 0x00200000,
@@ -150,8 +150,8 @@ class SpellCastTargets
void ModDst(SpellDestination const& spellDest);
void RemoveDst();
- bool HasSrc() const { return GetTargetMask() & TARGET_FLAG_SOURCE_LOCATION; }
- bool HasDst() const { return GetTargetMask() & TARGET_FLAG_DEST_LOCATION; }
+ bool HasSrc() const { return (GetTargetMask() & TARGET_FLAG_SOURCE_LOCATION) != 0; }
+ bool HasDst() const { return (GetTargetMask() & TARGET_FLAG_DEST_LOCATION) != 0; }
bool HasTraj() const { return m_speed != 0; }
float GetElevation() const { return m_elevation; }
@@ -417,7 +417,7 @@ class Spell
void WriteSpellGoTargets(WorldPacket* data);
void WriteAmmoToPacket(WorldPacket* data);
- bool CheckEffectTarget(Unit const* target, uint32 eff) const;
+ bool CheckEffectTarget(Unit const* target, uint32 eff, Position const* losPosition) const;
bool CanAutoCast(Unit* target);
void CheckSrc() { if (!m_targets.HasSrc()) m_targets.SetSrc(*m_caster); }
void CheckDst() { if (!m_targets.HasDst()) m_targets.SetDst(*m_caster); }
@@ -451,6 +451,7 @@ class Spell
SpellInfo const* const m_spellInfo;
Item* m_CastItem;
uint64 m_castItemGUID;
+ uint32 m_castItemEntry;
uint8 m_cast_count;
uint32 m_glyphIndex;
uint32 m_preCastSpell;
@@ -465,7 +466,7 @@ class Spell
void SetAutoRepeat(bool rep) { m_autoRepeat = rep; }
void ReSetTimer() { m_timer = m_casttime > 0 ? m_casttime : 0; }
bool IsNextMeleeSwingSpell() const;
- bool IsTriggered() const { return _triggeredCastFlags & TRIGGERED_FULL_MASK; }
+ bool IsTriggered() const { return (_triggeredCastFlags & TRIGGERED_FULL_MASK) != 0; }
bool IsChannelActive() const { return m_caster->GetUInt32Value(UNIT_CHANNEL_SPELL) != 0; }
bool IsAutoActionResetSpell() const;
@@ -486,7 +487,7 @@ class Spell
SpellInfo const* GetSpellInfo() const { return m_spellInfo; }
int32 GetPowerCost() const { return m_powerCost; }
- void UpdatePointers(); // must be used at call Spell code after time delay (non triggered spell cast/update spell call/etc)
+ bool UpdatePointers(); // must be used at call Spell code after time delay (non triggered spell cast/update spell call/etc)
void CleanupTargetList();
@@ -513,6 +514,7 @@ class Spell
WeaponAttackType m_attackType; // For weapon based attack
int32 m_powerCost; // Calculated spell cost initialized only in Spell::prepare
int32 m_casttime; // Calculated spell cast time initialized only in Spell::prepare
+ int32 m_channeledDuration; // Calculated channeled spell duration in order to calculate correct pushback.
bool m_canReflect; // can reflect this spell?
bool m_autoRepeat;
uint8 m_runesState;
@@ -606,7 +608,7 @@ class Spell
SpellDestination m_destTargets[MAX_SPELL_EFFECTS];
- void AddUnitTarget(Unit* target, uint32 effectMask, bool checkIfValid = true, bool implicit = true);
+ void AddUnitTarget(Unit* target, uint32 effectMask, bool checkIfValid = true, bool implicit = true, Position const* losPosition = nullptr);
void AddGOTarget(GameObject* target, uint32 effectMask);
void AddItemTarget(Item* item, uint32 effectMask);
void AddDestTarget(SpellDestination const& dest, uint32 effIndex);
@@ -688,6 +690,9 @@ class Spell
double rand_norm() { return m_caster->GetMap()->mtRand.randExc(); }
double rand_chance() { return m_caster->GetMap()->mtRand.randExc(100.0); }
#endif
+
+ Spell(Spell const& right) = delete;
+ Spell& operator=(Spell const& right) = delete;
};
namespace Trinity
@@ -748,9 +753,9 @@ class SpellEvent : public BasicEvent
SpellEvent(Spell* spell);
virtual ~SpellEvent();
- virtual bool Execute(uint64 e_time, uint32 p_time);
- virtual void Abort(uint64 e_time);
- virtual bool IsDeletable() const;
+ virtual bool Execute(uint64 e_time, uint32 p_time) override;
+ virtual void Abort(uint64 e_time) override;
+ virtual bool IsDeletable() const override;
protected:
Spell* m_Spell;
};
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 28bc659050a..00b787345d4 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -259,7 +259,7 @@ void Spell::EffectResurrectNew(SpellEffIndex effIndex)
Player* target = unitTarget->ToPlayer();
- if (target->isRessurectRequested()) // already have one active request
+ if (target->isResurrectRequested()) // already have one active request
return;
uint32 health = damage;
@@ -478,7 +478,7 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
int chance = (*i)->GetSpellInfo()->Effects[EFFECT_1].CalcValue(m_caster);
if (roll_chance_i(chance))
// Mind Trauma
- m_caster->CastSpell(unitTarget, 48301, true, 0);
+ m_caster->CastSpell(unitTarget, 48301, true, nullptr);
break;
}
}
@@ -625,8 +625,13 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
// Hammer of the Righteous
if (m_spellInfo->SpellFamilyFlags[1]&0x00040000)
{
+ float min_damage = m_caster->GetFloatValue(UNIT_FIELD_MINDAMAGE);
+ float max_damage = m_caster->GetFloatValue(UNIT_FIELD_MAXDAMAGE);
+ if (Player* player = m_caster->ToPlayer()) // UNIT_FIELD_MINDAMAGE/MAXDAMAGE already include damage bonuses, so try to get them without damage bonuses
+ player->CalculateMinMaxDamage(BASE_ATTACK, false, false, min_damage, max_damage);
+
+ float average = (min_damage + max_damage) / 2;
// Add main hand dps * effect[2] amount
- float average = (m_caster->GetFloatValue(UNIT_FIELD_MINDAMAGE) + m_caster->GetFloatValue(UNIT_FIELD_MAXDAMAGE)) / 2;
int32 count = m_caster->CalculateSpellDamage(unitTarget, m_spellInfo, EFFECT_2);
damage += count * int32(average * IN_MILLISECONDS) / m_caster->GetAttackTime(BASE_ATTACK);
break;
@@ -654,14 +659,6 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
}
break;
}
- case SPELLFAMILY_MAGE:
- {
- // Deep Freeze should deal damage to permanently stun-immune targets.
- if (m_spellInfo->Id == 71757)
- if (unitTarget->GetTypeId() != TYPEID_UNIT || !(unitTarget->IsImmunedToSpellEffect(sSpellMgr->GetSpellInfo(44572), 0)))
- return;
- break;
- }
}
if (m_originalCaster && damage > 0 && apply_direct_bonus)
@@ -836,10 +833,10 @@ void Spell::EffectTriggerSpell(SpellEffIndex effIndex)
{
// remove all harmful spells on you...
SpellInfo const* spell = iter->second->GetBase()->GetSpellInfo();
- if ((spell->DmgClass == SPELL_DAMAGE_CLASS_MAGIC // only affect magic spells
- || ((spell->GetDispelMask()) & dispelMask))
+ if (((spell->DmgClass == SPELL_DAMAGE_CLASS_MAGIC && spell->GetSchoolMask() != SPELL_SCHOOL_MASK_NORMAL) // only affect magic spells
+ || (spell->GetDispelMask() & dispelMask)) &&
// ignore positive and passive auras
- && !iter->second->IsPositive() && !iter->second->GetBase()->IsPassive())
+ !iter->second->IsPositive() && !iter->second->GetBase()->IsPassive())
{
m_caster->RemoveAura(iter);
}
@@ -874,7 +871,10 @@ void Spell::EffectTriggerSpell(SpellEffIndex effIndex)
if (spellInfo->GetExplicitTargetMask() & TARGET_FLAG_DEST_LOCATION)
targets.SetDst(m_targets);
- targets.SetUnitTarget(m_caster);
+ if (Unit* target = m_targets.GetUnitTarget())
+ targets.SetUnitTarget(target);
+ else
+ targets.SetUnitTarget(m_caster);
}
CustomSpellValues values;
@@ -979,12 +979,16 @@ void Spell::EffectForceCast(SpellEffIndex effIndex)
case 52349: // Overtake
unitTarget->CastCustomSpell(unitTarget, spellInfo->Id, &damage, NULL, NULL, true, NULL, NULL, m_originalCasterGUID);
return;
- case 72299: // Malleable Goo Summon Trigger
- unitTarget->CastSpell(unitTarget, spellInfo->Id, true, NULL, NULL, m_originalCasterGUID);
- return;
}
}
+ switch (spellInfo->Id)
+ {
+ case 72298: // Malleable Goo Summon
+ unitTarget->CastSpell(unitTarget, spellInfo->Id, true, NULL, NULL, m_originalCasterGUID);
+ return;
+ }
+
CustomSpellValues values;
// set basepoints for trigger with value effect
if (m_spellInfo->Effects[effIndex].Effect == SPELL_EFFECT_FORCE_CAST_WITH_VALUE)
@@ -1096,7 +1100,7 @@ void Spell::EffectTeleportUnits(SpellEffIndex /*effIndex*/)
TC_LOG_DEBUG("spells", "Spell::EffectTeleportUnits - teleport unit to %u %f %f %f %f\n", mapid, x, y, z, orientation);
if (unitTarget->GetTypeId() == TYPEID_PLAYER)
- unitTarget->ToPlayer()->TeleportTo(mapid, x, y, z, orientation, unitTarget == m_caster ? TELE_TO_SPELL : 0);
+ unitTarget->ToPlayer()->TeleportTo(mapid, x, y, z, orientation, unitTarget == m_caster ? TELE_TO_SPELL | TELE_TO_NOT_LEAVE_COMBAT : 0);
else if (mapid == unitTarget->GetMapId())
unitTarget->NearTeleportTo(x, y, z, orientation, unitTarget == m_caster);
else
@@ -1235,7 +1239,7 @@ void Spell::EffectUnlearnSpecialization(SpellEffIndex effIndex)
Player* player = unitTarget->ToPlayer();
uint32 spellToUnlearn = m_spellInfo->Effects[effIndex].TriggerSpell;
- player->removeSpell(spellToUnlearn);
+ player->RemoveSpell(spellToUnlearn);
TC_LOG_DEBUG("spells", "Spell: Player %u has unlearned spell %u from NpcGUID: %u", player->GetGUIDLow(), spellToUnlearn, m_caster->GetGUIDLow());
}
@@ -1751,6 +1755,12 @@ void Spell::EffectEnergize(SpellEffIndex effIndex)
Powers power = Powers(m_spellInfo->Effects[effIndex].MiscValue);
+ if (unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->getPowerType() != power && !(m_spellInfo->AttributesEx7 & SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER))
+ return;
+
+ if (unitTarget->GetMaxPower(power) == 0)
+ return;
+
// Some level depends spells
int level_multiplier = 0;
int level_diff = 0;
@@ -1796,9 +1806,6 @@ void Spell::EffectEnergize(SpellEffIndex effIndex)
if (damage < 0)
return;
- if (unitTarget->GetMaxPower(power) == 0)
- return;
-
m_caster->EnergizeBySpell(unitTarget, m_spellInfo->Id, damage, power);
// Mad Alchemist's Potion
@@ -1863,6 +1870,9 @@ void Spell::EffectEnergizePct(SpellEffIndex effIndex)
Powers power = Powers(m_spellInfo->Effects[effIndex].MiscValue);
+ if (unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->getPowerType() != power && !(m_spellInfo->AttributesEx7 & SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER))
+ return;
+
uint32 maxPower = unitTarget->GetMaxPower(power);
if (maxPower == 0)
return;
@@ -2096,6 +2106,8 @@ void Spell::EffectSummonChangeItem(SpellEffIndex effIndex)
m_targets.SetItemTarget(NULL);
m_CastItem = NULL;
+ m_castItemGUID = 0;
+ m_castItemEntry = 0;
player->StoreItem(dest, pNewItem, true);
return;
@@ -2114,6 +2126,8 @@ void Spell::EffectSummonChangeItem(SpellEffIndex effIndex)
m_targets.SetItemTarget(NULL);
m_CastItem = NULL;
+ m_castItemGUID = 0;
+ m_castItemEntry = 0;
player->BankItem(dest, pNewItem, true);
return;
@@ -2136,6 +2150,8 @@ void Spell::EffectSummonChangeItem(SpellEffIndex effIndex)
m_targets.SetItemTarget(NULL);
m_CastItem = NULL;
+ m_castItemGUID = 0;
+ m_castItemEntry = 0;
player->EquipItem(dest, pNewItem, true);
player->AutoUnequipOffhandIfNeed();
@@ -2217,6 +2233,7 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
case 1562:
case 833:
case 1161:
+ case 713:
numSummons = (damage > 0) ? damage : 1;
break;
default:
@@ -2292,7 +2309,7 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
pos = *destTarget;
else
// randomize position for multiple summons
- m_caster->GetRandomPoint(*destTarget, radius, pos);
+ pos = m_caster->GetRandomPoint(*destTarget, radius);
summon = m_originalCaster->SummonCreature(entry, pos, summonType, duration);
if (!summon)
@@ -2366,7 +2383,7 @@ void Spell::EffectLearnSpell(SpellEffIndex effIndex)
Player* player = unitTarget->ToPlayer();
uint32 spellToLearn = (m_spellInfo->Id == 483 || m_spellInfo->Id == 55884) ? damage : m_spellInfo->Effects[effIndex].TriggerSpell;
- player->learnSpell(spellToLearn, false);
+ player->LearnSpell(spellToLearn, false);
TC_LOG_DEBUG("spells", "Spell: Player %u has learned spell %u from NpcGUID=%u", player->GetGUIDLow(), spellToLearn, m_caster->GetGUIDLow());
}
@@ -2596,8 +2613,16 @@ void Spell::EffectLearnSkill(SpellEffIndex effIndex)
return;
uint32 skillid = m_spellInfo->Effects[effIndex].MiscValue;
+ SkillRaceClassInfoEntry const* rcEntry = GetSkillRaceClassInfo(skillid, unitTarget->getRace(), unitTarget->getClass());
+ if (!rcEntry)
+ return;
+
+ SkillTiersEntry const* tier = sSkillTiersStore.LookupEntry(rcEntry->SkillTier);
+ if (!tier)
+ return;
+
uint16 skillval = unitTarget->ToPlayer()->GetPureSkillValue(skillid);
- unitTarget->ToPlayer()->SetSkill(skillid, m_spellInfo->Effects[effIndex].CalcValue(), skillval?skillval:1, damage*75);
+ unitTarget->ToPlayer()->SetSkill(skillid, m_spellInfo->Effects[effIndex].CalcValue(), std::max<uint16>(skillval, 1), tier->MaxSkill[damage - 1]);
}
void Spell::EffectAddHonor(SpellEffIndex /*effIndex*/)
@@ -3745,7 +3770,7 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
return;
uint32 spellId = 0;
- switch (rand() % 4)
+ switch (rand32() % 4)
{
case 0: spellId = 46740; break;
case 1: spellId = 46739; break;
@@ -4043,26 +4068,6 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
}
break;
}
- case SPELLFAMILY_DEATHKNIGHT:
- {
- // Pestilence
- if (m_spellInfo->SpellFamilyFlags[1]&0x10000)
- {
- // Get diseases on target of spell
- if (m_targets.GetUnitTarget() && // Glyph of Disease - cast on unit target too to refresh aura
- (m_targets.GetUnitTarget() != unitTarget || m_caster->GetAura(63334)))
- {
- // And spread them on target
- // Blood Plague
- if (m_targets.GetUnitTarget()->GetAura(55078))
- m_caster->CastSpell(unitTarget, 55078, true);
- // Frost Fever
- if (m_targets.GetUnitTarget()->GetAura(55095))
- m_caster->CastSpell(unitTarget, 55095, true);
- }
- }
- break;
- }
}
// normal DB scripted effect
@@ -4536,7 +4541,7 @@ void Spell::EffectResurrect(SpellEffIndex effIndex)
Player* target = unitTarget->ToPlayer();
- if (target->isRessurectRequested()) // already have one active request
+ if (target->isResurrectRequested()) // already have one active request
return;
uint32 health = target->CountPctFromMaxHealth(damage);
@@ -4593,9 +4598,8 @@ void Spell::EffectLeap(SpellEffIndex /*effIndex*/)
if (!m_targets.HasDst())
return;
- Position pos;
- destTarget->GetPosition(&pos);
- unitTarget->GetFirstCollisionPosition(pos, unitTarget->GetDistance(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ() + 2.0f), 0.0f);
+ Position pos = destTarget->GetPosition();
+ pos = unitTarget->GetFirstCollisionPosition(unitTarget->GetDistance(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ()), 0.0f);
unitTarget->NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), unitTarget == m_caster);
}
@@ -4713,6 +4717,7 @@ void Spell::EffectSkinning(SpellEffIndex /*effIndex*/)
m_caster->ToPlayer()->SendLoot(creature->GetGUID(), LOOT_SKINNING);
creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE);
+ creature->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
int32 reqValue = targetLevel < 10 ? 0 : targetLevel < 20 ? (targetLevel-10)*10 : targetLevel*5;
@@ -4732,9 +4737,8 @@ void Spell::EffectCharge(SpellEffIndex /*effIndex*/)
// Spell is not using explicit target - no generated path
if (m_preGeneratedPath.GetPathType() == PATHFIND_BLANK)
{
- Position pos;
- unitTarget->GetContactPoint(m_caster, pos.m_positionX, pos.m_positionY, pos.m_positionZ);
- unitTarget->GetFirstCollisionPosition(pos, unitTarget->GetObjectSize(), unitTarget->GetRelativeAngle(m_caster));
+ //unitTarget->GetContactPoint(m_caster, pos.m_positionX, pos.m_positionY, pos.m_positionZ);
+ Position pos = unitTarget->GetFirstCollisionPosition(unitTarget->GetObjectSize(), unitTarget->GetRelativeAngle(m_caster));
m_caster->GetMotionMaster()->MoveCharge(pos.m_positionX, pos.m_positionY, pos.m_positionZ);
}
else
@@ -4756,11 +4760,10 @@ void Spell::EffectChargeDest(SpellEffIndex /*effIndex*/)
if (m_targets.HasDst())
{
- Position pos;
- destTarget->GetPosition(&pos);
+ Position pos = destTarget->GetPosition();
float angle = m_caster->GetRelativeAngle(pos.GetPositionX(), pos.GetPositionY());
float dist = m_caster->GetDistance(pos);
- m_caster->GetFirstCollisionPosition(pos, dist, angle);
+ pos = m_caster->GetFirstCollisionPosition(dist, angle);
m_caster->GetMotionMaster()->MoveCharge(pos.m_positionX, pos.m_positionY, pos.m_positionZ);
}
@@ -5348,7 +5351,7 @@ void Spell::EffectStealBeneficialBuff(SpellEffIndex effIndex)
// The charges / stack amounts don't count towards the total number of auras that can be dispelled.
// Ie: A dispel on a target with 5 stacks of Winters Chill and a Polymorph has 1 / (1 + 1) -> 50% chance to dispell
// Polymorph instead of 1 / (5 + 1) -> 16%.
- bool dispel_charges = aura->GetSpellInfo()->AttributesEx7 & SPELL_ATTR7_DISPEL_CHARGES;
+ bool dispel_charges = (aura->GetSpellInfo()->AttributesEx7 & SPELL_ATTR7_DISPEL_CHARGES) != 0;
uint8 charges = dispel_charges ? aura->GetCharges() : aura->GetStackAmount();
if (charges > 0)
steal_list.push_back(std::make_pair(aura, charges));
@@ -5468,13 +5471,23 @@ void Spell::EffectQuestStart(SpellEffIndex effIndex)
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
return;
- if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
+ if (!unitTarget)
return;
Player* player = unitTarget->ToPlayer();
- if (Quest const* qInfo = sObjectMgr->GetQuestTemplate(m_spellInfo->Effects[effIndex].MiscValue))
- if (player->CanTakeQuest(qInfo, false) && player->CanAddQuest(qInfo, false))
- player->AddQuestAndCheckCompletion(qInfo, NULL);
+ if (!player)
+ return;
+
+ if (Quest const* quest = sObjectMgr->GetQuestTemplate(m_spellInfo->Effects[effIndex].MiscValue))
+ {
+ if (!player->CanTakeQuest(quest, false))
+ return;
+
+ if (quest->IsAutoAccept() && player->CanAddQuest(quest, false))
+ player->AddQuestAndCheckCompletion(quest, player);
+
+ player->PlayerTalkClass->SendQuestGiverQuestDetails(quest, player->GetGUID(), true);
+ }
}
void Spell::EffectActivateRune(SpellEffIndex effIndex)
@@ -5678,7 +5691,7 @@ void Spell::SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const*
pos = *destTarget;
else
// randomize position for multiple summons
- m_caster->GetRandomPoint(*destTarget, radius, pos);
+ pos = m_caster->GetRandomPoint(*destTarget, radius);
TempSummon* summon = map->SummonCreature(entry, pos, properties, duration, caster, m_spellInfo->Id);
if (!summon)
@@ -5899,10 +5912,7 @@ void Spell::EffectBind(SpellEffIndex effIndex)
if (m_targets.HasDst())
homeLoc.WorldRelocate(*destTarget);
else
- {
- player->GetPosition(&homeLoc);
- homeLoc.m_mapId = player->GetMapId();
- }
+ homeLoc = player->GetWorldLocation();
player->SetHomebind(homeLoc, areaId);
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index 21c36510a32..99c3d234ef8 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -24,6 +24,7 @@
#include "Player.h"
#include "Battleground.h"
#include "Vehicle.h"
+#include "Pet.h"
uint32 GetTargetFlagMask(SpellTargetObjectTypes objType)
{
@@ -966,7 +967,7 @@ bool SpellInfo::IsAbilityLearnedWithProfession() const
for (SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx)
{
SkillLineAbilityEntry const* pAbility = _spell_idx->second;
- if (!pAbility || pAbility->learnOnGetSkill != ABILITY_LEARNED_ON_GET_PROFESSION_SKILL)
+ if (!pAbility || pAbility->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE)
continue;
if (pAbility->req_skill_value > 0)
@@ -1006,7 +1007,7 @@ bool SpellInfo::IsTargetingArea() const
bool SpellInfo::NeedsExplicitUnitTarget() const
{
- return GetExplicitTargetMask() & TARGET_FLAG_UNIT_MASK;
+ return (GetExplicitTargetMask() & TARGET_FLAG_UNIT_MASK) != 0;
}
bool SpellInfo::NeedsToBeTriggeredByCaster(SpellInfo const* triggeringSpell) const
@@ -1047,7 +1048,7 @@ bool SpellInfo::NeedsToBeTriggeredByCaster(SpellInfo const* triggeringSpell) con
bool SpellInfo::IsPassive() const
{
- return Attributes & SPELL_ATTR0_PASSIVE;
+ return (Attributes & SPELL_ATTR0_PASSIVE) != 0;
}
bool SpellInfo::IsAutocastable() const
@@ -1115,12 +1116,12 @@ bool SpellInfo::IsCooldownStartedOnEvent() const
bool SpellInfo::IsDeathPersistent() const
{
- return AttributesEx3 & SPELL_ATTR3_DEATH_PERSISTENT;
+ return (AttributesEx3 & SPELL_ATTR3_DEATH_PERSISTENT) != 0;
}
bool SpellInfo::IsRequiringDeadTarget() const
{
- return AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_GHOSTS;
+ return (AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_GHOSTS) != 0;
}
bool SpellInfo::IsAllowingDeadTarget() const
@@ -1154,12 +1155,12 @@ bool SpellInfo::IsPositiveEffect(uint8 effIndex) const
bool SpellInfo::IsChanneled() const
{
- return (AttributesEx & (SPELL_ATTR1_CHANNELED_1 | SPELL_ATTR1_CHANNELED_2));
+ return (AttributesEx & (SPELL_ATTR1_CHANNELED_1 | SPELL_ATTR1_CHANNELED_2)) != 0;
}
bool SpellInfo::NeedsComboPoints() const
{
- return (AttributesEx & (SPELL_ATTR1_REQ_COMBO_POINTS1 | SPELL_ATTR1_REQ_COMBO_POINTS2));
+ return (AttributesEx & (SPELL_ATTR1_REQ_COMBO_POINTS1 | SPELL_ATTR1_REQ_COMBO_POINTS2)) != 0;
}
bool SpellInfo::IsBreakingStealth() const
@@ -1175,7 +1176,7 @@ bool SpellInfo::IsRangedWeaponSpell() const
bool SpellInfo::IsAutoRepeatRangedSpell() const
{
- return AttributesEx2 & SPELL_ATTR2_AUTOREPEAT_FLAG;
+ return (AttributesEx2 & SPELL_ATTR2_AUTOREPEAT_FLAG) != 0;
}
bool SpellInfo::IsAffectedBySpellMods() const
@@ -1206,10 +1207,8 @@ bool SpellInfo::CanPierceImmuneAura(SpellInfo const* aura) const
if (Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)
return true;
- // these spells (Cyclone for example) can pierce all...
- if ((AttributesEx & SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE)
- // ...but not these (Divine shield for example)
- && !(aura && (aura->Mechanic == MECHANIC_IMMUNE_SHIELD || aura->Mechanic == MECHANIC_INVULNERABILITY)))
+ // these spells (Cyclone for example) can pierce all... // ...but not these (Divine shield, Ice block, Cyclone and Banish for example)
+ if ((AttributesEx & SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE) && !(aura && (aura->Mechanic == MECHANIC_IMMUNE_SHIELD || aura->Mechanic == MECHANIC_INVULNERABILITY || aura->Mechanic == MECHANIC_BANISH)))
return true;
return false;
@@ -1505,8 +1504,16 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* ta
// creature/player specific target checks
if (unitTarget)
{
- if (AttributesEx & SPELL_ATTR1_CANT_TARGET_IN_COMBAT && unitTarget->IsInCombat())
- return SPELL_FAILED_TARGET_AFFECTING_COMBAT;
+ if (AttributesEx & SPELL_ATTR1_CANT_TARGET_IN_COMBAT)
+ {
+ if (unitTarget->IsInCombat())
+ return SPELL_FAILED_TARGET_AFFECTING_COMBAT;
+ // player with active pet counts as a player in combat
+ else if (Player const* player = unitTarget->ToPlayer())
+ if (Pet* pet = player->GetPet())
+ if (pet->GetVictim() && !pet->HasUnitState(UNIT_STATE_CONTROLLED))
+ return SPELL_FAILED_TARGET_AFFECTING_COMBAT;
+ }
// only spells with SPELL_ATTR3_ONLY_TARGET_GHOSTS can target ghosts
if (((AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_GHOSTS) != 0) != unitTarget->HasAuraType(SPELL_AURA_GHOST))
@@ -2366,6 +2373,8 @@ bool SpellInfo::_IsPositiveEffect(uint8 effIndex, bool deep) const
case 61716: // Rabbit Costume
case 61734: // Noblegarden Bunny
case 62344: // Fists of Stone
+ case 61819: // Manabonked! (item)
+ case 61834: // Manabonked! (minigob)
return true;
default:
break;
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 0342b22d735..bc97744fe32 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -765,6 +765,15 @@ SpellGroupStackRule SpellMgr::CheckSpellGroupStackRules(SpellInfo const* spellIn
return rule;
}
+SpellGroupStackRule SpellMgr::GetSpellGroupStackRule(SpellGroup group) const
+{
+ SpellGroupStackMap::const_iterator itr = mSpellGroupStack.find(group);
+ if (itr != mSpellGroupStack.end())
+ return itr->second;
+
+ return SPELL_GROUP_STACK_RULE_DEFAULT;
+}
+
SpellProcEventEntry const* SpellMgr::GetSpellProcEvent(uint32 spellId) const
{
SpellProcEventMap::const_iterator itr = mSpellProcEventMap.find(spellId);
@@ -773,7 +782,7 @@ SpellProcEventEntry const* SpellMgr::GetSpellProcEvent(uint32 spellId) const
return NULL;
}
-bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellInfo const* procSpell, uint32 procFlags, uint32 procExtra, bool active) const
+bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellInfo const* spellProto, SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellInfo const* procSpell, uint32 procFlags, uint32 procExtra, bool active) const
{
// No extra req need
uint32 procEvent_procEx = PROC_EX_NONE;
@@ -790,7 +799,9 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellPr
*Only damaging Dots can proc auras with PROC_FLAG_TAKEN_DAMAGE
- *Both Dots and hots can proc if ONLY has PROC_FLAG_DONE_PERIODIC or PROC_FLAG_TAKEN_PERIODIC. Such auras need support in Unit::HandleAuraProc.
+ *Only Dots can proc if ONLY has PROC_FLAG_DONE_PERIODIC or PROC_FLAG_TAKEN_PERIODIC.
+
+ *Hots can proc if ONLY has PROC_FLAG_DONE_PERIODIC and spellfamily != 0
*Only Dots can proc auras with PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG or PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG
@@ -804,7 +815,7 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellPr
* @param procFlags proc_flags of spellProc
* @param procExtra proc_EX of procSpell
* @param EventProcFlag proc_flags of aura to be procced
-
+ * @param spellProto SpellInfo of aura to be procced
*/
@@ -812,34 +823,41 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellPr
if (procFlags & PROC_FLAG_TAKEN_DAMAGE && EventProcFlag & PROC_FLAG_TAKEN_DAMAGE)
return true;
- /// Any aura that has only PROC_FLAG_DONE_PERIODIC or PROC_FLAG_TAKEN_PERIODIC should always proc, if procSpell is correct or not is checked in Unit::HandleAuraProc
- if (EventProcFlag == PROC_FLAG_DONE_PERIODIC || EventProcFlag == PROC_FLAG_TAKEN_PERIODIC)
- return true;
-
if (procFlags & PROC_FLAG_DONE_PERIODIC && EventProcFlag & PROC_FLAG_DONE_PERIODIC)
{
- /// Aura must have positive procflags for a HOT to proc
if (procExtra & PROC_EX_INTERNAL_HOT)
{
- if (!(EventProcFlag & (PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS)))
+ if (EventProcFlag == PROC_FLAG_DONE_PERIODIC)
+ {
+ /// no aura with only PROC_FLAG_DONE_PERIODIC and spellFamilyName == 0 can proc from a HOT.
+ if (!spellProto->SpellFamilyName)
+ return false;
+ }
+ /// Aura must have positive procflags for a HOT to proc
+ else if (!(EventProcFlag & (PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS)))
return false;
}
- /// Aura must have negative procflags for a DOT to proc
- else if (!(EventProcFlag & (PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG)))
- return false;
+ /// Aura must have negative or neutral(PROC_FLAG_DONE_PERIODIC only) procflags for a DOT to proc
+ else if (EventProcFlag != PROC_FLAG_DONE_PERIODIC)
+ if (!(EventProcFlag & (PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG)))
+ return false;
}
if (procFlags & PROC_FLAG_TAKEN_PERIODIC && EventProcFlag & PROC_FLAG_TAKEN_PERIODIC)
{
- /// Aura must have positive procflags for a HOT to proc
if (procExtra & PROC_EX_INTERNAL_HOT)
{
+ /// No aura that only has PROC_FLAG_TAKEN_PERIODIC can proc from a HOT.
+ if (EventProcFlag == PROC_FLAG_TAKEN_PERIODIC)
+ return false;
+ /// Aura must have positive procflags for a HOT to proc
if (!(EventProcFlag & (PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS)))
return false;
}
- /// Aura must have negative procflags for a DOT to proc
- else if (!(EventProcFlag & (PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG | PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG)))
- return false;
+ /// Aura must have negative or neutral(PROC_FLAG_TAKEN_PERIODIC only) procflags for a DOT to proc
+ else if (EventProcFlag != PROC_FLAG_TAKEN_PERIODIC)
+ if (!(EventProcFlag & (PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG | PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG)))
+ return false;
}
// Trap casts are active by default
if (procFlags & PROC_FLAG_DONE_TRAP_ACTIVATION)
@@ -2364,7 +2382,7 @@ void SpellMgr::LoadPetLevelupSpellMap()
if (skillLine->skillId != creatureFamily->skillLine[j])
continue;
- if (skillLine->learnOnGetSkill != ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL)
+ if (skillLine->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN)
continue;
SpellInfo const* spell = GetSpellInfo(skillLine->spellId);
@@ -3198,6 +3216,9 @@ void SpellMgr::LoadSpellInfoCorrections()
case 63675: // Improved Devouring Plague
spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS;
break;
+ case 12721: // Deep Wounds shouldnt ignore resillience or damage taken auras because its damage is not based off a spell.
+ spellInfo->AttributesEx4 = 0;
+ break;
case 8145: // Tremor Totem (instant pulse)
case 6474: // Earthbind Totem (instant pulse)
spellInfo->AttributesEx5 |= SPELL_ATTR5_START_PERIODIC_AT_APPLY;
@@ -3288,6 +3309,9 @@ void SpellMgr::LoadSpellInfoCorrections()
/// @todo: remove this when basepoints of all Ride Vehicle auras are calculated correctly
spellInfo->Effects[EFFECT_0].BasePoints = 1;
break;
+ case 59630: // Black Magic
+ spellInfo->Attributes |= SPELL_ATTR0_PASSIVE;
+ break;
// ULDUAR SPELLS
//
case 62374: // Pursued (Flame Leviathan)
@@ -3366,6 +3390,21 @@ void SpellMgr::LoadSpellInfoCorrections()
break;
// ENDOF TRIAL OF THE CRUSADER SPELLS
//
+ // HALLS OF REFLECTION SPELLS
+ //
+ case 72435: // Defiling Horror
+ case 72452: // Defiling Horror
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_60_YARDS); // 60yd
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_60_YARDS); // 60yd
+ break;
+ case 72830: // Achievement Check
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
+ break;
+ case 72900: // Start Halls of Reflection Quest AE
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
+ break;
+ // ENDOF HALLS OF REFLECTION SPELLS
+ //
// ICECROWN CITADEL SPELLS
//
// THESE SPELLS ARE WORKING CORRECTLY EVEN WITHOUT THIS HACK
diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h
index 5f11870b3e9..448ddb9860b 100644
--- a/src/server/game/Spells/SpellMgr.h
+++ b/src/server/game/Spells/SpellMgr.h
@@ -21,16 +21,15 @@
// For static or at-server-startup loaded spell data
-#include <ace/Singleton.h>
-
+#include "Define.h"
#include "DBCStructure.h"
#include "SharedDefines.h"
-#include "UnorderedMap.h"
#include "Util.h"
#include <map>
#include <set>
#include <vector>
+#include <unordered_map>
class SpellInfo;
class Player;
@@ -287,7 +286,7 @@ struct SpellProcEventEntry
uint32 cooldown; // hidden cooldown used for some spell proc events, applied to _triggered_spell_
};
-typedef UNORDERED_MAP<uint32, SpellProcEventEntry> SpellProcEventMap;
+typedef std::unordered_map<uint32, SpellProcEventEntry> SpellProcEventMap;
struct SpellProcEntry
{
@@ -305,7 +304,7 @@ struct SpellProcEntry
uint32 charges; // if nonzero - owerwrite procCharges field for given Spell.dbc entry, defines how many times proc can occur before aura remove, 0 - infinite
};
-typedef UNORDERED_MAP<uint32, SpellProcEntry> SpellProcMap;
+typedef std::unordered_map<uint32, SpellProcEntry> SpellProcMap;
struct SpellEnchantProcEntry
{
@@ -314,7 +313,7 @@ struct SpellEnchantProcEntry
uint32 procEx;
};
-typedef UNORDERED_MAP<uint32, SpellEnchantProcEntry> SpellEnchantProcEventMap;
+typedef std::unordered_map<uint32, SpellEnchantProcEntry> SpellEnchantProcEventMap;
struct SpellBonusEntry
{
@@ -324,7 +323,7 @@ struct SpellBonusEntry
float ap_dot_bonus;
};
-typedef UNORDERED_MAP<uint32, SpellBonusEntry> SpellBonusMap;
+typedef std::unordered_map<uint32, SpellBonusEntry> SpellBonusMap;
enum SpellGroup
{
@@ -348,14 +347,14 @@ typedef std::pair<SpellGroupSpellMap::const_iterator, SpellGroupSpellMap::const_
enum SpellGroupStackRule
{
- SPELL_GROUP_STACK_RULE_DEFAULT = 0,
- SPELL_GROUP_STACK_RULE_EXCLUSIVE = 1,
- SPELL_GROUP_STACK_RULE_EXCLUSIVE_FROM_SAME_CASTER = 2,
- SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT = 3
+ SPELL_GROUP_STACK_RULE_DEFAULT,
+ SPELL_GROUP_STACK_RULE_EXCLUSIVE,
+ SPELL_GROUP_STACK_RULE_EXCLUSIVE_FROM_SAME_CASTER,
+ SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT,
+ SPELL_GROUP_STACK_RULE_EXCLUSIVE_HIGHEST,
+ SPELL_GROUP_STACK_RULE_MAX
};
-#define SPELL_GROUP_STACK_RULE_MAX 4
-
typedef std::map<SpellGroup, SpellGroupStackRule> SpellGroupStackMap;
struct SpellThreatEntry
@@ -445,7 +444,7 @@ enum EffectRadiusIndex
class PetAura
{
private:
- typedef UNORDERED_MAP<uint32, uint32> PetAuraMap;
+ typedef std::unordered_map<uint32, uint32> PetAuraMap;
public:
PetAura() : removeOnChangePet(false), damage(0) { }
@@ -525,7 +524,7 @@ struct SpellChainNode
uint8 rank;
};
-typedef UNORDERED_MAP<uint32, SpellChainNode> SpellChainMap;
+typedef std::unordered_map<uint32, SpellChainNode> SpellChainMap;
// spell_id req_spell
typedef std::multimap<uint32, uint32> SpellRequiredMap;
@@ -602,7 +601,6 @@ bool IsDiminishingReturnsGroupDurationLimited(DiminishingGroup group);
class SpellMgr
{
- friend class ACE_Singleton<SpellMgr, ACE_Null_Mutex>;
// Constructors
private:
SpellMgr();
@@ -610,6 +608,12 @@ class SpellMgr
// Accessors (const or static functions)
public:
+ static SpellMgr* instance()
+ {
+ static SpellMgr instance;
+ return &instance;
+ }
+
// Spell correctness for client using
static bool IsSpellValid(SpellInfo const* spellInfo, Player* player = NULL, bool msg = true);
@@ -654,10 +658,11 @@ class SpellMgr
// Spell Group Stack Rules table
bool AddSameEffectStackRuleSpellGroups(SpellInfo const* spellInfo, int32 amount, std::map<SpellGroup, int32>& groups) const;
SpellGroupStackRule CheckSpellGroupStackRules(SpellInfo const* spellInfo1, SpellInfo const* spellInfo2) const;
+ SpellGroupStackRule GetSpellGroupStackRule(SpellGroup groupid) const;
// Spell proc event table
SpellProcEventEntry const* GetSpellProcEvent(uint32 spellId) const;
- bool IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellInfo const* procSpell, uint32 procFlags, uint32 procExtra, bool active) const;
+ bool IsSpellProcEventCanTriggeredBy(SpellInfo const* spellProto, SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellInfo const* procSpell, uint32 procFlags, uint32 procExtra, bool active) const;
// Spell proc table
SpellProcEntry const* GetSpellProcEntry(uint32 spellId) const;
@@ -764,6 +769,6 @@ class SpellMgr
SpellInfoMap mSpellInfoMap;
};
-#define sSpellMgr ACE_Singleton<SpellMgr, ACE_Null_Mutex>::instance()
+#define sSpellMgr SpellMgr::instance()
#endif
diff --git a/src/server/game/Spells/SpellScript.cpp b/src/server/game/Spells/SpellScript.cpp
index c0bcd477e5b..7132e0583e8 100644
--- a/src/server/game/Spells/SpellScript.cpp
+++ b/src/server/game/Spells/SpellScript.cpp
@@ -87,7 +87,7 @@ uint8 _SpellScript::EffectHook::GetAffectedEffectsMask(SpellInfo const* spellEnt
bool _SpellScript::EffectHook::IsEffectAffected(SpellInfo const* spellEntry, uint8 effIndex)
{
- return GetAffectedEffectsMask(spellEntry) & 1<<effIndex;
+ return (GetAffectedEffectsMask(spellEntry) & 1 << effIndex) != 0;
}
std::string _SpellScript::EffectHook::EffIndexToString()
diff --git a/src/server/game/Spells/SpellScript.h b/src/server/game/Spells/SpellScript.h
index 75a191a9801..756644dbd1b 100644
--- a/src/server/game/Spells/SpellScript.h
+++ b/src/server/game/Spells/SpellScript.h
@@ -187,7 +187,7 @@ class SpellScript : public _SpellScript
public:
EffectHandler(SpellEffectFnType _pEffectHandlerScript, uint8 _effIndex, uint16 _effName);
std::string ToString();
- bool CheckEffect(SpellInfo const* spellInfo, uint8 effIndex);
+ bool CheckEffect(SpellInfo const* spellInfo, uint8 effIndex) override;
void Call(SpellScript* spellScript, SpellEffIndex effIndex);
private:
SpellEffectFnType pEffectHandlerScript;
@@ -206,7 +206,7 @@ class SpellScript : public _SpellScript
{
public:
TargetHook(uint8 _effectIndex, uint16 _targetType, bool _area, bool _dest);
- bool CheckEffect(SpellInfo const* spellInfo, uint8 effIndex);
+ bool CheckEffect(SpellInfo const* spellInfo, uint8 effIndex) override;
std::string ToString();
uint16 GetTarget() const { return targetType; }
protected:
@@ -249,15 +249,15 @@ class SpellScript : public _SpellScript
class HitHandlerFunction : public SpellScript::HitHandler { public: HitHandlerFunction(SpellHitFnType _pHitHandlerScript) : SpellScript::HitHandler((SpellScript::SpellHitFnType)_pHitHandlerScript) { } }; \
class ObjectAreaTargetSelectHandlerFunction : public SpellScript::ObjectAreaTargetSelectHandler { public: ObjectAreaTargetSelectHandlerFunction(SpellObjectAreaTargetSelectFnType _pObjectAreaTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::ObjectAreaTargetSelectHandler((SpellScript::SpellObjectAreaTargetSelectFnType)_pObjectAreaTargetSelectHandlerScript, _effIndex, _targetType) { } }; \
class ObjectTargetSelectHandlerFunction : public SpellScript::ObjectTargetSelectHandler { public: ObjectTargetSelectHandlerFunction(SpellObjectTargetSelectFnType _pObjectTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::ObjectTargetSelectHandler((SpellScript::SpellObjectTargetSelectFnType)_pObjectTargetSelectHandlerScript, _effIndex, _targetType) { } }; \
- class DestinationTargetSelectHandlerFunction : public SpellScript::DestinationTargetSelectHandler { public: DestinationTargetSelectHandlerFunction(SpellDestinationTargetSelectFnType _DestinationTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::DestinationTargetSelectHandler((SpellScript::SpellDestinationTargetSelectFnType)_DestinationTargetSelectHandlerScript, _effIndex, _targetType) { } };
+ class DestinationTargetSelectHandlerFunction : public SpellScript::DestinationTargetSelectHandler { public: DestinationTargetSelectHandlerFunction(SpellDestinationTargetSelectFnType _DestinationTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::DestinationTargetSelectHandler((SpellScript::SpellDestinationTargetSelectFnType)_DestinationTargetSelectHandlerScript, _effIndex, _targetType) { } }
#define PrepareSpellScript(CLASSNAME) SPELLSCRIPT_FUNCTION_TYPE_DEFINES(CLASSNAME) SPELLSCRIPT_FUNCTION_CAST_DEFINES(CLASSNAME)
public:
- bool _Validate(SpellInfo const* entry);
+ bool _Validate(SpellInfo const* entry) override;
bool _Load(Spell* spell);
void _InitHit();
- bool _IsEffectPrevented(SpellEffIndex effIndex) { return m_hitPreventEffectMask & (1<<effIndex); }
- bool _IsDefaultEffectPrevented(SpellEffIndex effIndex) { return m_hitPreventDefaultEffectMask & (1<<effIndex); }
+ bool _IsEffectPrevented(SpellEffIndex effIndex) { return (m_hitPreventEffectMask & (1 << effIndex)) != 0; }
+ bool _IsDefaultEffectPrevented(SpellEffIndex effIndex) { return (m_hitPreventDefaultEffectMask & (1 << effIndex)) != 0; }
void _PrepareScriptCall(SpellScriptHookType hookType);
void _FinishScriptCall();
bool IsInCheckCastHook() const;
@@ -509,7 +509,7 @@ class AuraScript : public _SpellScript
public:
EffectBase(uint8 _effIndex, uint16 _effName);
std::string ToString();
- bool CheckEffect(SpellInfo const* spellInfo, uint8 effIndex);
+ bool CheckEffect(SpellInfo const* spellInfo, uint8 effIndex) override;
};
class EffectPeriodicHandler : public EffectBase
{
@@ -623,14 +623,14 @@ class AuraScript : public _SpellScript
class EffectSplitFunction : public AuraScript::EffectSplitHandler { public: EffectSplitFunction(AuraEffectSplitFnType _pEffectHandlerScript, uint8 _effIndex) : AuraScript::EffectSplitHandler((AuraScript::AuraEffectSplitFnType)_pEffectHandlerScript, _effIndex) { } }; \
class CheckProcHandlerFunction : public AuraScript::CheckProcHandler { public: CheckProcHandlerFunction(AuraCheckProcFnType handlerScript) : AuraScript::CheckProcHandler((AuraScript::AuraCheckProcFnType)handlerScript) { } }; \
class AuraProcHandlerFunction : public AuraScript::AuraProcHandler { public: AuraProcHandlerFunction(AuraProcFnType handlerScript) : AuraScript::AuraProcHandler((AuraScript::AuraProcFnType)handlerScript) { } }; \
- class EffectProcHandlerFunction : public AuraScript::EffectProcHandler { public: EffectProcHandlerFunction(AuraEffectProcFnType effectHandlerScript, uint8 effIndex, uint16 effName) : AuraScript::EffectProcHandler((AuraScript::AuraEffectProcFnType)effectHandlerScript, effIndex, effName) { } }; \
+ class EffectProcHandlerFunction : public AuraScript::EffectProcHandler { public: EffectProcHandlerFunction(AuraEffectProcFnType effectHandlerScript, uint8 effIndex, uint16 effName) : AuraScript::EffectProcHandler((AuraScript::AuraEffectProcFnType)effectHandlerScript, effIndex, effName) { } }
#define PrepareAuraScript(CLASSNAME) AURASCRIPT_FUNCTION_TYPE_DEFINES(CLASSNAME) AURASCRIPT_FUNCTION_CAST_DEFINES(CLASSNAME)
public:
AuraScript() : _SpellScript(), m_aura(NULL), m_auraApplication(NULL), m_defaultActionPrevented(false)
{ }
- bool _Validate(SpellInfo const* entry);
+ bool _Validate(SpellInfo const* entry) override;
bool _Load(Aura* aura);
void _PrepareScriptCall(AuraScriptHookType hookType, AuraApplication const* aurApp = NULL);
void _FinishScriptCall();
diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp
index b89c64165c3..0412128754c 100644
--- a/src/server/game/Texts/CreatureTextMgr.cpp
+++ b/src/server/game/Texts/CreatureTextMgr.cpp
@@ -24,23 +24,24 @@
#include "GridNotifiers.h"
#include "GridNotifiersImpl.h"
#include "CreatureTextMgr.h"
+#include "Group.h"
class CreatureTextBuilder
{
public:
- CreatureTextBuilder(WorldObject* obj, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, WorldObject const* target)
- : _source(obj), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target)
- {
- }
+ CreatureTextBuilder(WorldObject const* obj, uint8 gender, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, WorldObject const* target)
+ : _source(obj), _gender(gender), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target) { }
size_t operator()(WorldPacket* data, LocaleConstant locale) const
{
- std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _textGroup, _textId, locale);
+ std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _gender, _textGroup, _textId, locale);
return ChatHandler::BuildChatPacket(*data, _msgType, Language(_language), _source, _target, text, 0, "", locale);
}
- WorldObject* _source;
+ private:
+ WorldObject const* _source;
+ uint8 _gender;
ChatMsg _msgType;
uint8 _textGroup;
uint32 _textId;
@@ -51,20 +52,20 @@ class CreatureTextBuilder
class PlayerTextBuilder
{
public:
- PlayerTextBuilder(WorldObject* obj, WorldObject* speaker, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, WorldObject const* target)
- : _source(obj), _talker(speaker), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target)
- {
- }
+ PlayerTextBuilder(WorldObject const* obj, WorldObject const* speaker, uint8 gender, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, WorldObject const* target)
+ : _source(obj), _talker(speaker), _gender(gender), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target) { }
size_t operator()(WorldPacket* data, LocaleConstant locale) const
{
- std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _textGroup, _textId, locale);
+ std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _gender, _textGroup, _textId, locale);
return ChatHandler::BuildChatPacket(*data, _msgType, Language(_language), _talker, _target, text, 0, "", locale);
}
- WorldObject* _source;
- WorldObject* _talker;
+ private:
+ WorldObject const* _source;
+ WorldObject const* _talker;
+ uint8 _gender;
ChatMsg _msgType;
uint8 _textGroup;
uint32 _textId;
@@ -84,7 +85,7 @@ void CreatureTextMgr::LoadCreatureTexts()
if (!result)
{
- TC_LOG_INFO("server.loading", ">> Loaded 0 ceature texts. DB table `creature_texts` is empty.");
+ TC_LOG_INFO("server.loading", ">> Loaded 0 ceature texts. DB table `creature_text` is empty.");
return;
}
@@ -97,54 +98,69 @@ void CreatureTextMgr::LoadCreatureTexts()
Field* fields = result->Fetch();
CreatureTextEntry temp;
- temp.entry = fields[0].GetUInt32();
- temp.group = fields[1].GetUInt8();
- temp.id = fields[2].GetUInt8();
- temp.text = fields[3].GetString();
- temp.type = ChatMsg(fields[4].GetUInt8());
- temp.lang = Language(fields[5].GetUInt8());
- temp.probability = fields[6].GetFloat();
- temp.emote = Emote(fields[7].GetUInt32());
- temp.duration = fields[8].GetUInt32();
- temp.sound = fields[9].GetUInt32();
+ temp.entry = fields[0].GetUInt32();
+ temp.group = fields[1].GetUInt8();
+ temp.id = fields[2].GetUInt8();
+ temp.text = fields[3].GetString();
+ temp.type = ChatMsg(fields[4].GetUInt8());
+ temp.lang = Language(fields[5].GetUInt8());
+ temp.probability = fields[6].GetFloat();
+ temp.emote = Emote(fields[7].GetUInt32());
+ temp.duration = fields[8].GetUInt32();
+ temp.sound = fields[9].GetUInt32();
+ temp.BroadcastTextId = fields[10].GetUInt32();
if (temp.sound)
{
- if (!sSoundEntriesStore.LookupEntry(temp.sound)){
- TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Entry %u, Group %u in table `creature_texts` has Sound %u but sound does not exist.", temp.entry, temp.group, temp.sound);
+ if (!sSoundEntriesStore.LookupEntry(temp.sound))
+ {
+ TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Entry %u, Group %u in table `creature_text` has Sound %u but sound does not exist.", temp.entry, temp.group, temp.sound);
temp.sound = 0;
}
}
+
if (!GetLanguageDescByID(temp.lang))
{
- TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Entry %u, Group %u in table `creature_texts` using Language %u but Language does not exist.", temp.entry, temp.group, uint32(temp.lang));
+ TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Entry %u, Group %u in table `creature_text` using Language %u but Language does not exist.", temp.entry, temp.group, uint32(temp.lang));
temp.lang = LANG_UNIVERSAL;
}
+
if (temp.type >= MAX_CHAT_MSG_TYPE)
{
- TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Entry %u, Group %u in table `creature_texts` has Type %u but this Chat Type does not exist.", temp.entry, temp.group, uint32(temp.type));
+ TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Entry %u, Group %u in table `creature_text` has Type %u but this Chat Type does not exist.", temp.entry, temp.group, uint32(temp.type));
temp.type = CHAT_MSG_SAY;
}
+
if (temp.emote)
{
if (!sEmotesStore.LookupEntry(temp.emote))
{
- TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Entry %u, Group %u in table `creature_texts` has Emote %u but emote does not exist.", temp.entry, temp.group, uint32(temp.emote));
+ TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Entry %u, Group %u in table `creature_text` has Emote %u but emote does not exist.", temp.entry, temp.group, uint32(temp.emote));
temp.emote = EMOTE_ONESHOT_NONE;
}
}
- //entry not yet added, add empty TextHolder (list of groups)
+
+ if (temp.BroadcastTextId)
+ {
+ if (!sObjectMgr->GetBroadcastText(temp.BroadcastTextId))
+ {
+ TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Entry %u, Group %u, Id %u in table `creature_text` has non-existing or incompatible BroadcastTextId %u.", temp.entry, temp.group, temp.id, temp.BroadcastTextId);
+ temp.BroadcastTextId = 0;
+ }
+ }
+
+ // entry not yet added, add empty TextHolder (list of groups)
if (mTextMap.find(temp.entry) == mTextMap.end())
++creatureCount;
- //add the text into our entry's group
+ // add the text into our entry's group
mTextMap[temp.entry][temp.group].push_back(temp);
++textCount;
- } while (result->NextRow());
+ }
+ while (result->NextRow());
TC_LOG_INFO("server.loading", ">> Loaded %u creature texts for %u creatures in %u ms", textCount, creatureCount, GetMSTimeDiffToNow(oldMSTime));
-
}
void CreatureTextMgr::LoadCreatureTextLocales()
@@ -164,7 +180,7 @@ void CreatureTextMgr::LoadCreatureTextLocales()
{
Field* fields = result->Fetch();
CreatureTextLocale& loc = mLocaleTextMap[CreatureTextId(fields[0].GetUInt32(), uint32(fields[1].GetUInt8()), uint32(fields[2].GetUInt8()))];
- for (uint8 i = 1; i < TOTAL_LOCALES; ++i)
+ for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
{
LocaleConstant locale = LocaleConstant(i);
ObjectMgr::AddLocaleString(fields[3 + i - 1].GetString(), locale, loc.Text);
@@ -270,14 +286,15 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject
if (srcPlr)
{
- PlayerTextBuilder builder(source, finalSource, finalType, iter->group, iter->id, finalLang, whisperTarget);
+ PlayerTextBuilder builder(source, finalSource, finalSource->getGender(), finalType, iter->group, iter->id, finalLang, whisperTarget);
SendChatPacket(finalSource, builder, finalType, whisperTarget, range, team, gmOnly);
}
else
{
- CreatureTextBuilder builder(finalSource, finalType, iter->group, iter->id, finalLang, whisperTarget);
+ CreatureTextBuilder builder(finalSource, finalSource->getGender(), finalType, iter->group, iter->id, finalLang, whisperTarget);
SendChatPacket(finalSource, builder, finalType, whisperTarget, range, team, gmOnly);
}
+
if (isEqualChanced || (!isEqualChanced && totalChance == 100.0f))
SetRepeatId(source, textGroup, iter->id);
@@ -315,14 +332,12 @@ void CreatureTextMgr::SendSound(Creature* source, uint32 sound, ChatMsg msgType,
void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket* data, ChatMsg msgType, WorldObject const* whisperTarget, CreatureTextRange range, Team team, bool gmOnly) const
{
- float dist = GetRangeForChatType(msgType);
-
switch (msgType)
{
case CHAT_MSG_MONSTER_WHISPER:
case CHAT_MSG_RAID_BOSS_WHISPER:
{
- if (range == TEXT_RANGE_NORMAL)//ignores team and gmOnly
+ if (range == TEXT_RANGE_NORMAL) // ignores team and gmOnly
{
if (!whisperTarget || whisperTarget->GetTypeId() != TYPEID_PLAYER)
return;
@@ -332,6 +347,18 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket* data,
}
break;
}
+ case CHAT_MSG_MONSTER_PARTY:
+ if (!whisperTarget)
+ return;
+
+ if (Player const* player = whisperTarget->ToPlayer())
+ {
+ if (Group* group = const_cast<Group*>(player->GetGroup()))
+ for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())
+ if (Player* member = itr->GetSource())
+ member->GetSession()->SendPacket(data);
+ }
+ return;
default:
break;
}
@@ -378,6 +405,7 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket* data,
break;
}
+ float dist = GetRangeForChatType(msgType);
source->SendMessageToSetInRange(data, dist, true);
}
@@ -439,7 +467,7 @@ bool CreatureTextMgr::TextExist(uint32 sourceEntry, uint8 textGroup)
return true;
}
-std::string CreatureTextMgr::GetLocalizedChatString(uint32 entry, uint8 textGroup, uint32 id, LocaleConstant locale) const
+std::string CreatureTextMgr::GetLocalizedChatString(uint32 entry, uint8 gender, uint8 textGroup, uint32 id, LocaleConstant locale) const
{
CreatureTextMap::const_iterator mapitr = mTextMap.find(entry);
if (mapitr == mTextMap.end())
@@ -457,18 +485,23 @@ std::string CreatureTextMgr::GetLocalizedChatString(uint32 entry, uint8 textGrou
if (groupItr == holderItr->second.end())
return "";
- std::string baseText = groupItr->text;
- if (locale == DEFAULT_LOCALE)
- return baseText;
-
if (locale > MAX_LOCALES)
- return baseText;
+ locale = DEFAULT_LOCALE;
- LocaleCreatureTextMap::const_iterator locItr = mLocaleTextMap.find(CreatureTextId(entry, uint32(textGroup), id));
- if (locItr == mLocaleTextMap.end())
- return baseText;
+ std::string baseText = "";
+ BroadcastText const* bct = sObjectMgr->GetBroadcastText(groupItr->BroadcastTextId);
- ObjectMgr::GetLocaleString(locItr->second.Text, locale, baseText);
+ if (bct)
+ baseText = bct->GetText(locale, gender);
+ else
+ baseText = groupItr->text;
+
+ if (locale != DEFAULT_LOCALE && !bct)
+ {
+ LocaleCreatureTextMap::const_iterator locItr = mLocaleTextMap.find(CreatureTextId(entry, uint32(textGroup), id));
+ if (locItr != mLocaleTextMap.end())
+ ObjectMgr::GetLocaleString(locItr->second.Text, locale, baseText);
+ }
return baseText;
}
diff --git a/src/server/game/Texts/CreatureTextMgr.h b/src/server/game/Texts/CreatureTextMgr.h
index 12236844828..18dc7683b8d 100644
--- a/src/server/game/Texts/CreatureTextMgr.h
+++ b/src/server/game/Texts/CreatureTextMgr.h
@@ -36,6 +36,7 @@ struct CreatureTextEntry
Emote emote;
uint32 duration;
uint32 sound;
+ uint32 BroadcastTextId;
};
enum CreatureTextRange
@@ -69,23 +70,29 @@ struct CreatureTextId
};
typedef std::vector<CreatureTextEntry> CreatureTextGroup; //texts in a group
-typedef UNORDERED_MAP<uint8, CreatureTextGroup> CreatureTextHolder; //groups for a creature by groupid
-typedef UNORDERED_MAP<uint32, CreatureTextHolder> CreatureTextMap; //all creatures by entry
+typedef std::unordered_map<uint8, CreatureTextGroup> CreatureTextHolder; //groups for a creature by groupid
+typedef std::unordered_map<uint32, CreatureTextHolder> CreatureTextMap; //all creatures by entry
typedef std::map<CreatureTextId, CreatureTextLocale> LocaleCreatureTextMap;
//used for handling non-repeatable random texts
typedef std::vector<uint8> CreatureTextRepeatIds;
-typedef UNORDERED_MAP<uint8, CreatureTextRepeatIds> CreatureTextRepeatGroup;
-typedef UNORDERED_MAP<uint64, CreatureTextRepeatGroup> CreatureTextRepeatMap;//guid based
+typedef std::unordered_map<uint8, CreatureTextRepeatIds> CreatureTextRepeatGroup;
+typedef std::unordered_map<uint64, CreatureTextRepeatGroup> CreatureTextRepeatMap;//guid based
class CreatureTextMgr
{
- friend class ACE_Singleton<CreatureTextMgr, ACE_Null_Mutex>;
- CreatureTextMgr() { };
+ private:
+ CreatureTextMgr() { };
+ ~CreatureTextMgr() { };
public:
- ~CreatureTextMgr() { };
+ static CreatureTextMgr* instance()
+ {
+ static CreatureTextMgr instance;
+ return &instance;
+ }
+
void LoadCreatureTexts();
void LoadCreatureTextLocales();
CreatureTextMap const& GetTextMap() const { return mTextMap; }
@@ -96,7 +103,7 @@ class CreatureTextMgr
//if sent, returns the 'duration' of the text else 0 if error
uint32 SendChat(Creature* source, uint8 textGroup, WorldObject const* whisperTarget = NULL, ChatMsg msgType = CHAT_MSG_ADDON, Language language = LANG_ADDON, CreatureTextRange range = TEXT_RANGE_NORMAL, uint32 sound = 0, Team team = TEAM_OTHER, bool gmOnly = false, Player* srcPlr = NULL);
bool TextExist(uint32 sourceEntry, uint8 textGroup);
- std::string GetLocalizedChatString(uint32 entry, uint8 textGroup, uint32 id, LocaleConstant locale) const;
+ std::string GetLocalizedChatString(uint32 entry, uint8 gender, uint8 textGroup, uint32 id, LocaleConstant locale) const;
template<class Builder> void SendChatPacket(WorldObject* source, Builder const& builder, ChatMsg msgType, WorldObject const* whisperTarget = NULL, CreatureTextRange range = TEXT_RANGE_NORMAL, Team team = TEAM_OTHER, bool gmOnly = false) const;
@@ -112,7 +119,7 @@ class CreatureTextMgr
LocaleCreatureTextMap mLocaleTextMap;
};
-#define sCreatureTextMgr ACE_Singleton<CreatureTextMgr, ACE_Null_Mutex>::instance()
+#define sCreatureTextMgr CreatureTextMgr::instance()
template<class Builder>
class CreatureTextLocalizer
@@ -186,7 +193,7 @@ void CreatureTextMgr::SendChatPacket(WorldObject* source, Builder const& builder
case CHAT_MSG_MONSTER_WHISPER:
case CHAT_MSG_RAID_BOSS_WHISPER:
{
- if (range == TEXT_RANGE_NORMAL) //ignores team and gmOnly
+ if (range == TEXT_RANGE_NORMAL) // ignores team and gmOnly
{
if (!whisperTarget || whisperTarget->GetTypeId() != TYPEID_PLAYER)
return;
diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp
index b9ecfffb8c3..71d51153b4c 100644
--- a/src/server/game/Tickets/TicketMgr.cpp
+++ b/src/server/game/Tickets/TicketMgr.cpp
@@ -233,7 +233,7 @@ void GmTicket::SetChatLog(std::list<uint32> time, std::string const& log)
std::stringstream ss(log);
std::stringstream newss;
std::string line;
- while (std::getline(ss, line))
+ while (std::getline(ss, line) && !time.empty())
{
newss << secsToTimeString(time.front()) << ": " << line << "\n";
time.pop_front();
diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h
index 5bfe78abbba..5ad44365e7f 100644
--- a/src/server/game/Tickets/TicketMgr.h
+++ b/src/server/game/Tickets/TicketMgr.h
@@ -19,7 +19,6 @@
#define _TICKETMGR_H
#include <string>
-#include <ace/Singleton.h>
#include "ObjectMgr.h"
@@ -85,7 +84,7 @@ public:
GmTicket(Player* player);
~GmTicket();
- bool IsClosed() const { return _closedBy; }
+ bool IsClosed() const { return _closedBy != 0; }
bool IsCompleted() const { return _completed; }
bool IsFromPlayer(uint64 guid) const { return guid == _playerGuid; }
bool IsAssigned() const { return _assignedTo != 0; }
@@ -174,13 +173,17 @@ typedef std::map<uint32, GmTicket*> GmTicketList;
class TicketMgr
{
- friend class ACE_Singleton<TicketMgr, ACE_Null_Mutex>;
-
private:
TicketMgr();
~TicketMgr();
public:
+ static TicketMgr* instance()
+ {
+ static TicketMgr instance;
+ return &instance;
+ }
+
void LoadTickets();
void LoadSurveys();
@@ -246,6 +249,6 @@ protected:
uint64 _lastChange;
};
-#define sTicketMgr ACE_Singleton<TicketMgr, ACE_Null_Mutex>::instance()
+#define sTicketMgr TicketMgr::instance()
#endif // _TICKETMGR_H
diff --git a/src/server/game/Tools/CharacterDatabaseCleaner.cpp b/src/server/game/Tools/CharacterDatabaseCleaner.cpp
index 758c78b685d..11ed54bfa81 100644
--- a/src/server/game/Tools/CharacterDatabaseCleaner.cpp
+++ b/src/server/game/Tools/CharacterDatabaseCleaner.cpp
@@ -108,7 +108,7 @@ void CharacterDatabaseCleaner::CheckUnique(const char* column, const char* table
bool CharacterDatabaseCleaner::AchievementProgressCheck(uint32 criteria)
{
- return sAchievementMgr->GetAchievementCriteria(criteria);
+ return sAchievementMgr->GetAchievementCriteria(criteria) != nullptr;
}
void CharacterDatabaseCleaner::CleanCharacterAchievementProgress()
@@ -118,7 +118,7 @@ void CharacterDatabaseCleaner::CleanCharacterAchievementProgress()
bool CharacterDatabaseCleaner::SkillCheck(uint32 skill)
{
- return sSkillLineStore.LookupEntry(skill);
+ return sSkillLineStore.LookupEntry(skill) != nullptr;
}
void CharacterDatabaseCleaner::CleanCharacterSkills()
@@ -142,7 +142,7 @@ bool CharacterDatabaseCleaner::TalentCheck(uint32 talent_id)
if (!talentInfo)
return false;
- return sTalentTabStore.LookupEntry(talentInfo->TalentTab);
+ return sTalentTabStore.LookupEntry(talentInfo->TalentTab) != nullptr;
}
void CharacterDatabaseCleaner::CleanCharacterTalent()
diff --git a/src/server/game/Warden/Warden.cpp b/src/server/game/Warden/Warden.cpp
index 42872bba22e..0810295c0cc 100644
--- a/src/server/game/Warden/Warden.cpp
+++ b/src/server/game/Warden/Warden.cpp
@@ -223,7 +223,7 @@ std::string Warden::Penalty(WardenCheck* check /*= NULL*/)
void WorldSession::HandleWardenDataOpcode(WorldPacket& recvData)
{
- if (!_warden)
+ if (!_warden || recvData.empty())
return;
_warden->DecryptData(recvData.contents(), recvData.size());
diff --git a/src/server/game/Warden/WardenCheckMgr.cpp b/src/server/game/Warden/WardenCheckMgr.cpp
index 44bab1d31b3..98ed381a2b1 100644
--- a/src/server/game/Warden/WardenCheckMgr.cpp
+++ b/src/server/game/Warden/WardenCheckMgr.cpp
@@ -164,7 +164,7 @@ void WardenCheckMgr::LoadWardenOverrides()
uint32 count = 0;
- ACE_WRITE_GUARD(ACE_RW_Mutex, g, _checkStoreLock);
+ boost::unique_lock<boost::shared_mutex> lock(sWardenCheckMgr->_checkStoreLock);
do
{
diff --git a/src/server/game/Warden/WardenCheckMgr.h b/src/server/game/Warden/WardenCheckMgr.h
index 8f2fa37400d..4a56c1fc849 100644
--- a/src/server/game/Warden/WardenCheckMgr.h
+++ b/src/server/game/Warden/WardenCheckMgr.h
@@ -20,6 +20,8 @@
#define _WARDENCHECKMGR_H
#include <map>
+#include <boost/thread/locks.hpp>
+#include <boost/thread/shared_mutex.hpp>
#include "Cryptography/BigNumber.h"
enum WardenActions
@@ -48,11 +50,17 @@ struct WardenCheckResult
class WardenCheckMgr
{
- friend class ACE_Singleton<WardenCheckMgr, ACE_Null_Mutex>;
- WardenCheckMgr();
- ~WardenCheckMgr();
+ private:
+ WardenCheckMgr();
+ ~WardenCheckMgr();
public:
+ static WardenCheckMgr* instance()
+ {
+ static WardenCheckMgr instance;
+ return &instance;
+ }
+
// We have a linear key without any gaps, so we use vector for fast access
typedef std::vector<WardenCheck*> CheckContainer;
typedef std::map<uint32, WardenCheckResult*> CheckResultContainer;
@@ -66,13 +74,13 @@ class WardenCheckMgr
void LoadWardenChecks();
void LoadWardenOverrides();
- ACE_RW_Mutex _checkStoreLock;
+ boost::shared_mutex _checkStoreLock;
private:
CheckContainer CheckStore;
CheckResultContainer CheckResultStore;
};
-#define sWardenCheckMgr ACE_Singleton<WardenCheckMgr, ACE_Null_Mutex>::instance()
+#define sWardenCheckMgr WardenCheckMgr::instance()
#endif
diff --git a/src/server/game/Warden/WardenMac.h b/src/server/game/Warden/WardenMac.h
index 3ea509c75ef..e9ccfe55438 100644
--- a/src/server/game/Warden/WardenMac.h
+++ b/src/server/game/Warden/WardenMac.h
@@ -34,13 +34,13 @@ class WardenMac : public Warden
WardenMac();
~WardenMac();
- void Init(WorldSession* session, BigNumber* k);
- ClientWardenModule* GetModuleForClient();
- void InitializeModule();
- void RequestHash();
- void HandleHashResult(ByteBuffer& buff);
- void RequestData();
- void HandleData(ByteBuffer& buff);
+ void Init(WorldSession* session, BigNumber* k) override;
+ ClientWardenModule* GetModuleForClient() override;
+ void InitializeModule() override;
+ void RequestHash() override;
+ void HandleHashResult(ByteBuffer& buff) override;
+ void RequestData() override;
+ void HandleData(ByteBuffer& buff) override;
};
#endif
diff --git a/src/server/game/Warden/WardenWin.cpp b/src/server/game/Warden/WardenWin.cpp
index 18bf2897358..da6a7dc1929 100644
--- a/src/server/game/Warden/WardenWin.cpp
+++ b/src/server/game/Warden/WardenWin.cpp
@@ -206,7 +206,7 @@ void WardenWin::RequestData()
ByteBuffer buff;
buff << uint8(WARDEN_SMSG_CHEAT_CHECKS_REQUEST);
- ACE_READ_GUARD(ACE_RW_Mutex, g, sWardenCheckMgr->_checkStoreLock);
+ boost::shared_lock<boost::shared_mutex> lock(sWardenCheckMgr->_checkStoreLock);
for (uint32 i = 0; i < sWorld->getIntConfig(CONFIG_WARDEN_NUM_OTHER_CHECKS); ++i)
{
@@ -281,7 +281,7 @@ void WardenWin::RequestData()
}
case MODULE_CHECK:
{
- uint32 seed = static_cast<uint32>(rand32());
+ uint32 seed = rand32();
buff << uint32(seed);
HmacHash hmac(4, (uint8*)&seed);
hmac.UpdateData(wd->Str);
@@ -369,7 +369,7 @@ void WardenWin::HandleData(ByteBuffer &buff)
uint8 type;
uint16 checkFailed = 0;
- ACE_READ_GUARD(ACE_RW_Mutex, g, sWardenCheckMgr->_checkStoreLock);
+ boost::shared_lock<boost::shared_mutex> lock(sWardenCheckMgr->_checkStoreLock);
for (std::list<uint16>::iterator itr = _currentChecks.begin(); itr != _currentChecks.end(); ++itr)
{
diff --git a/src/server/game/Warden/WardenWin.h b/src/server/game/Warden/WardenWin.h
index 47487ba65a2..d760d9ee981 100644
--- a/src/server/game/Warden/WardenWin.h
+++ b/src/server/game/Warden/WardenWin.h
@@ -76,13 +76,13 @@ class WardenWin : public Warden
WardenWin();
~WardenWin();
- void Init(WorldSession* session, BigNumber* K);
- ClientWardenModule* GetModuleForClient();
- void InitializeModule();
- void RequestHash();
- void HandleHashResult(ByteBuffer &buff);
- void RequestData();
- void HandleData(ByteBuffer &buff);
+ void Init(WorldSession* session, BigNumber* K) override;
+ ClientWardenModule* GetModuleForClient() override;
+ void InitializeModule() override;
+ void RequestHash() override;
+ void HandleHashResult(ByteBuffer &buff) override;
+ void RequestData() override;
+ void HandleData(ByteBuffer &buff) override;
private:
uint32 _serverTicks;
diff --git a/src/server/game/Weather/Weather.cpp b/src/server/game/Weather/Weather.cpp
index cb332df9a41..dea7dfa6819 100644
--- a/src/server/game/Weather/Weather.cpp
+++ b/src/server/game/Weather/Weather.cpp
@@ -28,7 +28,7 @@
#include "ObjectMgr.h"
#include "Util.h"
#include "ScriptMgr.h"
-#include "Opcodes.h"
+#include "WorldSession.h"
/// Create the Weather object
Weather::Weather(uint32 zone, WeatherData const* weatherChances)
@@ -94,7 +94,7 @@ bool Weather::ReGenerate()
// season source http://aa.usno.navy.mil/data/docs/EarthSeasons.html
time_t gtime = sWorld->GetGameTime();
struct tm ltime;
- ACE_OS::localtime_r(&gtime, &ltime);
+ localtime_r(&gtime, &ltime);
uint32 season = ((ltime.tm_yday - 78 + 365)/91)%4;
static char const* seasonName[WEATHER_SEASONS] = { "spring", "summer", "fall", "winter" };
diff --git a/src/server/game/Weather/WeatherMgr.cpp b/src/server/game/Weather/WeatherMgr.cpp
index 886a910becc..6f011ed2954 100644
--- a/src/server/game/Weather/WeatherMgr.cpp
+++ b/src/server/game/Weather/WeatherMgr.cpp
@@ -24,18 +24,17 @@
#include "Weather.h"
#include "Log.h"
#include "ObjectMgr.h"
-#include "AutoPtr.h"
#include "Player.h"
#include "WorldPacket.h"
-#include "Opcodes.h"
+#include "WorldSession.h"
namespace WeatherMgr
{
namespace
{
- typedef UNORDERED_MAP<uint32, Trinity::AutoPtr<Weather, ACE_Null_Mutex> > WeatherMap;
- typedef UNORDERED_MAP<uint32, WeatherData> WeatherZoneMap;
+ typedef std::unordered_map<uint32, std::shared_ptr<Weather> > WeatherMap;
+ typedef std::unordered_map<uint32, WeatherData> WeatherZoneMap;
WeatherMap m_weathers;
WeatherZoneMap mWeatherZoneMap;
@@ -51,7 +50,7 @@ namespace
Weather* FindWeather(uint32 id)
{
WeatherMap::const_iterator itr = m_weathers.find(id);
- return (itr != m_weathers.end()) ? itr->second.get() : 0;
+ return (itr != m_weathers.end()) ? itr->second.get() : nullptr;
}
/// Remove a Weather object for the given zoneid
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 8f2941865fa..4de9cb34df6 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -20,70 +20,54 @@
\ingroup world
*/
-#include "Common.h"
-#include "Memory.h"
-#include "DatabaseEnv.h"
-#include "Config.h"
-#include "SystemConfig.h"
-#include "Log.h"
-#include "Opcodes.h"
-#include "WorldSession.h"
-#include "WorldPacket.h"
-#include "Player.h"
-#include "Vehicle.h"
-#include "SkillExtraItems.h"
-#include "SkillDiscovery.h"
#include "World.h"
-#include "AccountMgr.h"
#include "AchievementMgr.h"
-#include "AuctionHouseMgr.h"
-#include "ObjectMgr.h"
#include "ArenaTeamMgr.h"
-#include "GuildMgr.h"
-#include "TicketMgr.h"
-#include "SpellMgr.h"
-#include "GroupMgr.h"
+#include "AuctionHouseMgr.h"
+#include "BattlefieldMgr.h"
+#include "BattlegroundMgr.h"
+#include "CalendarMgr.h"
+#include "Channel.h"
+#include "CharacterDatabaseCleaner.h"
#include "Chat.h"
-#include "DBCStores.h"
-#include "LootMgr.h"
-#include "ItemEnchantmentMgr.h"
-#include "MapManager.h"
+#include "Config.h"
#include "CreatureAIRegistry.h"
-#include "BattlegroundMgr.h"
-#include "OutdoorPvPMgr.h"
-#include "TemporarySummon.h"
-#include "WaypointMovementGenerator.h"
-#include "VMapFactory.h"
-#include "MMapFactory.h"
+#include "CreatureGroups.h"
+#include "CreatureTextMgr.h"
+#include "DatabaseEnv.h"
+#include "DisableMgr.h"
#include "GameEventMgr.h"
-#include "PoolMgr.h"
#include "GridNotifiersImpl.h"
-#include "CellImpl.h"
+#include "GroupMgr.h"
+#include "GuildMgr.h"
#include "InstanceSaveMgr.h"
-#include "Util.h"
#include "Language.h"
-#include "CreatureGroups.h"
-#include "Transport.h"
-#include "ScriptMgr.h"
-#include "AddonMgr.h"
#include "LFGMgr.h"
-#include "ConditionMgr.h"
-#include "DisableMgr.h"
-#include "CharacterDatabaseCleaner.h"
+#include "MapManager.h"
+#include "Memory.h"
+#include "MMapFactory.h"
+#include "ObjectMgr.h"
+#include "OutdoorPvPMgr.h"
+#include "Player.h"
+#include "PoolMgr.h"
#include "ScriptMgr.h"
-#include "WeatherMgr.h"
-#include "CreatureTextMgr.h"
+#include "SkillDiscovery.h"
+#include "SkillExtraItems.h"
#include "SmartAI.h"
-#include "Channel.h"
-#include "WardenCheckMgr.h"
-#include "Warden.h"
-#include "CalendarMgr.h"
-#include "BattlefieldMgr.h"
+#include "SystemConfig.h"
+#include "TicketMgr.h"
#include "TransportMgr.h"
+#include "Unit.h"
+#include "VMapFactory.h"
+#include "WardenCheckMgr.h"
+#include "WaypointMovementGenerator.h"
+#include "WeatherMgr.h"
+#include "WorldSession.h"
-ACE_Atomic_Op<ACE_Thread_Mutex, bool> World::m_stopEvent = false;
+
+std::atomic<bool> World::m_stopEvent(false);
uint8 World::m_ExitCode = SHUTDOWN_EXIT_CODE;
-ACE_Atomic_Op<ACE_Thread_Mutex, uint32> World::m_worldLoopCounter = 0;
+std::atomic<uint32> World::m_worldLoopCounter(0);
float World::m_MaxVisibleDistanceOnContinents = DEFAULT_VISIBILITY_DISTANCE;
float World::m_MaxVisibleDistanceInInstances = DEFAULT_VISIBILITY_INSTANCE;
@@ -406,9 +390,10 @@ void World::LoadConfigSettings(bool reload)
{
if (reload)
{
- if (!sConfigMgr->Reload())
+ std::string configError;
+ if (!sConfigMgr->Reload(configError))
{
- TC_LOG_ERROR("misc", "World settings reload fail: can't read settings from %s.", sConfigMgr->GetFilename().c_str());
+ TC_LOG_ERROR("misc", "World settings reload fail: %s.", configError.c_str());
return;
}
sLog->LoadFromConfig();
@@ -572,6 +557,18 @@ void World::LoadConfigSettings(bool reload)
TC_LOG_ERROR("server.loading", "DurabilityLossChance.Block (%f) must be >=0. Using 0.0 instead.", rate_values[RATE_DURABILITY_LOSS_BLOCK]);
rate_values[RATE_DURABILITY_LOSS_BLOCK] = 0.0f;
}
+ rate_values[RATE_MONEY_QUEST] = sConfigMgr->GetFloatDefault("Rate.Quest.Money.Reward", 1.0f);
+ if (rate_values[RATE_MONEY_QUEST] < 0.0f)
+ {
+ TC_LOG_ERROR("server.loading", "Rate.Quest.Money.Reward (%f) must be >=0. Using 0 instead.", rate_values[RATE_MONEY_QUEST]);
+ rate_values[RATE_MONEY_QUEST] = 0.0f;
+ }
+ rate_values[RATE_MONEY_MAX_LEVEL_QUEST] = sConfigMgr->GetFloatDefault("Rate.Quest.Money.Max.Level.Reward", 1.0f);
+ if (rate_values[RATE_MONEY_MAX_LEVEL_QUEST] < 0.0f)
+ {
+ TC_LOG_ERROR("server.loading", "Rate.Quest.Money.Max.Level.Reward (%f) must be >=0. Using 0 instead.", rate_values[RATE_MONEY_MAX_LEVEL_QUEST]);
+ rate_values[RATE_MONEY_MAX_LEVEL_QUEST] = 0.0f;
+ }
///- Read other configuration items from the config file
m_bool_configs[CONFIG_DURABILITY_LOSS_IN_PVP] = sConfigMgr->GetBoolDefault("DurabilityLoss.InPvP", false);
@@ -668,7 +665,7 @@ void World::LoadConfigSettings(bool reload)
m_bool_configs[CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP] = sConfigMgr->GetBoolDefault("AllowTwoSide.Interaction.Group", false);
m_bool_configs[CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD] = sConfigMgr->GetBoolDefault("AllowTwoSide.Interaction.Guild", false);
m_bool_configs[CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION] = sConfigMgr->GetBoolDefault("AllowTwoSide.Interaction.Auction", false);
- m_bool_configs[CONFIG_ALLOW_TWO_SIDE_TRADE] = sConfigMgr->GetBoolDefault("AllowTwoSide.trade", false);
+ m_bool_configs[CONFIG_ALLOW_TWO_SIDE_TRADE] = sConfigMgr->GetBoolDefault("AllowTwoSide.Trade", false);
m_int_configs[CONFIG_STRICT_PLAYER_NAMES] = sConfigMgr->GetIntDefault ("StrictPlayerNames", 0);
m_int_configs[CONFIG_STRICT_CHARTER_NAMES] = sConfigMgr->GetIntDefault ("StrictCharterNames", 0);
m_int_configs[CONFIG_STRICT_PET_NAMES] = sConfigMgr->GetIntDefault ("StrictPetNames", 0);
@@ -955,7 +952,7 @@ void World::LoadConfigSettings(bool reload)
m_int_configs[CONFIG_CHATFLOOD_MESSAGE_DELAY] = sConfigMgr->GetIntDefault("ChatFlood.MessageDelay", 1);
m_int_configs[CONFIG_CHATFLOOD_MUTE_TIME] = sConfigMgr->GetIntDefault("ChatFlood.MuteTime", 10);
- m_bool_configs[CONFIG_EVENT_ANNOUNCE] = sConfigMgr->GetIntDefault("Event.Announce", false);
+ m_bool_configs[CONFIG_EVENT_ANNOUNCE] = sConfigMgr->GetBoolDefault("Event.Announce", false);
m_float_configs[CONFIG_CREATURE_FAMILY_FLEE_ASSISTANCE_RADIUS] = sConfigMgr->GetFloatDefault("CreatureFamilyFleeAssistanceRadius", 30.0f);
m_float_configs[CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS] = sConfigMgr->GetFloatDefault("CreatureFamilyAssistanceRadius", 10.0f);
@@ -1044,6 +1041,8 @@ void World::LoadConfigSettings(bool reload)
m_bool_configs[CONFIG_OFFHAND_CHECK_AT_SPELL_UNLEARN] = sConfigMgr->GetBoolDefault("OffhandCheckAtSpellUnlearn", true);
+ m_int_configs[CONFIG_CREATURE_PICKPOCKET_REFILL] = sConfigMgr->GetIntDefault("Creature.PickPocketRefillDelay", 10 * MINUTE);
+
if (int32 clientCacheId = sConfigMgr->GetIntDefault("ClientCacheVersion", 0))
{
// overwrite DB/old value
@@ -1253,6 +1252,8 @@ void World::LoadConfigSettings(bool reload)
m_int_configs[CONFIG_BIRTHDAY_TIME] = sConfigMgr->GetIntDefault("BirthdayTime", 1222964635);
+ m_bool_configs[CONFIG_IP_BASED_ACTION_LOGGING] = sConfigMgr->GetBoolDefault("Allow.IP.Based.Action.Logging", false);
+
// call ScriptMgr if we're reloading the configuration
if (reload)
sScriptMgr->OnConfigLoad(reload);
@@ -1352,6 +1353,10 @@ void World::SetInitialWorldSettings()
TC_LOG_INFO("server.loading", "Loading instances...");
sInstanceSaveMgr->LoadInstances();
+ TC_LOG_INFO("server.loading", "Loading Broadcast texts...");
+ sObjectMgr->LoadBroadcastTexts();
+ sObjectMgr->LoadBroadcastTextLocales();
+
TC_LOG_INFO("server.loading", "Loading Localization strings...");
uint32 oldMSTime = getMSTime();
sObjectMgr->LoadCreatureLocales();
@@ -1741,7 +1746,7 @@ void World::SetInitialWorldSettings()
//one second is 1000 -(tested on win system)
/// @todo Get rid of magic numbers
tm localTm;
- ACE_OS::localtime_r(&m_gameTime, &localTm);
+ localtime_r(&m_gameTime, &localTm);
mail_timer = ((((localTm.tm_hour + 20) % 24)* HOUR * IN_MILLISECONDS) / m_timers[WUPDATE_AUCTIONS].GetInterval());
//1440
mail_timer_expires = ((DAY * IN_MILLISECONDS) / (m_timers[WUPDATE_AUCTIONS].GetInterval()));
@@ -1771,7 +1776,7 @@ void World::SetInitialWorldSettings()
///- Initialize Battlegrounds
TC_LOG_INFO("server.loading", "Starting Battleground System");
- sBattlegroundMgr->CreateInitialBattlegrounds();
+ sBattlegroundMgr->LoadBattlegroundTemplates();
sBattlegroundMgr->InitAutomaticArenaPointDistribution();
///- Initialize outdoor pvp
@@ -2584,7 +2589,7 @@ void World::ShutdownMsg(bool show, Player* player)
void World::ShutdownCancel()
{
// nothing cancel or too later
- if (!m_ShutdownTimer || m_stopEvent.value())
+ if (!m_ShutdownTimer || m_stopEvent)
return;
ServerMessageType msgid = (m_ShutdownMask & SHUTDOWN_MASK_RESTART) ? SERVER_MSG_RESTART_CANCELLED : SERVER_MSG_SHUTDOWN_CANCELLED;
@@ -2722,8 +2727,7 @@ void World::UpdateRealmCharCount(uint32 accountId)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_COUNT);
stmt->setUInt32(0, accountId);
- PreparedQueryResultFuture result = CharacterDatabase.AsyncQuery(stmt);
- m_realmCharCallbacks.insert(result);
+ m_realmCharCallbacks.push_back(CharacterDatabase.AsyncQuery(stmt));
}
void World::_UpdateRealmCharCount(PreparedQueryResult resultCharCount)
@@ -2771,7 +2775,7 @@ void World::InitDailyQuestResetTime()
// FIX ME: client not show day start time
time_t curTime = time(NULL);
tm localTm;
- ACE_OS::localtime_r(&curTime, &localTm);
+ localtime_r(&curTime, &localTm);
localTm.tm_hour = 6;
localTm.tm_min = 0;
localTm.tm_sec = 0;
@@ -2805,7 +2809,7 @@ void World::InitRandomBGResetTime()
// generate time by config
time_t curTime = time(NULL);
tm localTm;
- ACE_OS::localtime_r(&curTime, &localTm);
+ localtime_r(&curTime, &localTm);
localTm.tm_hour = getIntConfig(CONFIG_RANDOM_BG_RESET_HOUR);
localTm.tm_min = 0;
localTm.tm_sec = 0;
@@ -2833,7 +2837,7 @@ void World::InitGuildResetTime()
// generate time by config
time_t curTime = time(NULL);
tm localTm;
- ACE_OS::localtime_r(&curTime, &localTm);
+ localtime_r(&curTime, &localTm);
localTm.tm_hour = getIntConfig(CONFIG_GUILD_RESET_HOUR);
localTm.tm_min = 0;
localTm.tm_sec = 0;
@@ -2918,7 +2922,7 @@ void World::ResetMonthlyQuests()
// generate time
time_t curTime = time(NULL);
tm localTm;
- ACE_OS::localtime_r(&curTime, &localTm);
+ localtime_r(&curTime, &localTm);
int month = localTm.tm_mon;
int year = localTm.tm_year;
@@ -3080,19 +3084,17 @@ void World::ProcessQueryCallbacks()
{
PreparedQueryResult result;
- while (!m_realmCharCallbacks.is_empty())
+ for (std::deque<std::future<PreparedQueryResult>>::iterator itr = m_realmCharCallbacks.begin(); itr != m_realmCharCallbacks.end(); )
{
- ACE_Future<PreparedQueryResult> lResult;
- ACE_Time_Value timeout = ACE_Time_Value::zero;
- if (m_realmCharCallbacks.next_readable(lResult, &timeout) != 1)
- break;
-
- if (lResult.ready())
+ if ((*itr).wait_for(std::chrono::seconds(0)) != std::future_status::ready)
{
- lResult.get(result);
- _UpdateRealmCharCount(result);
- lResult.cancel();
+ ++itr;
+ continue;
}
+
+ result = (*itr).get();
+ _UpdateRealmCharCount(result);
+ itr = m_realmCharCallbacks.erase(itr);
}
}
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index a58dcc82acc..cb87e1739c2 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -25,12 +25,11 @@
#include "Common.h"
#include "Timer.h"
-#include <ace/Singleton.h>
-#include <ace/Atomic_Op.h>
#include "SharedDefines.h"
#include "QueryResult.h"
#include "Callback.h"
+#include <atomic>
#include <map>
#include <set>
#include <list>
@@ -154,6 +153,7 @@ enum WorldBoolConfigs
CONFIG_EVENT_ANNOUNCE,
CONFIG_STATS_LIMITS_ENABLE,
CONFIG_INSTANCES_RESET_ANNOUNCE,
+ CONFIG_IP_BASED_ACTION_LOGGING,
BOOL_CONFIG_VALUE_COUNT
};
@@ -331,6 +331,7 @@ enum WorldIntConfigs
CONFIG_BG_REWARD_LOSER_HONOR_FIRST,
CONFIG_BG_REWARD_LOSER_HONOR_LAST,
CONFIG_BIRTHDAY_TIME,
+ CONFIG_CREATURE_PICKPOCKET_REFILL,
INT_CONFIG_VALUE_COUNT
};
@@ -398,6 +399,8 @@ enum Rates
RATE_DURABILITY_LOSS_ABSORB,
RATE_DURABILITY_LOSS_BLOCK,
RATE_MOVESPEED,
+ RATE_MONEY_QUEST,
+ RATE_MONEY_MAX_LEVEL_QUEST,
MAX_RATES
};
@@ -491,17 +494,18 @@ struct CliCommandHolder
CommandFinished* m_commandFinished;
CliCommandHolder(void* callbackArg, const char *command, Print* zprint, CommandFinished* commandFinished)
- : m_callbackArg(callbackArg), m_print(zprint), m_commandFinished(commandFinished)
+ : m_callbackArg(callbackArg), m_command(strdup(command)), m_print(zprint), m_commandFinished(commandFinished)
{
- size_t len = strlen(command)+1;
- m_command = new char[len];
- memcpy(m_command, command, len);
}
- ~CliCommandHolder() { delete[] m_command; }
+ ~CliCommandHolder() { free(m_command); }
+
+private:
+ CliCommandHolder(CliCommandHolder const& right) = delete;
+ CliCommandHolder& operator=(CliCommandHolder const& right) = delete;
};
-typedef UNORDERED_MAP<uint32, WorldSession*> SessionMap;
+typedef std::unordered_map<uint32, WorldSession*> SessionMap;
struct CharacterNameData
{
@@ -516,10 +520,13 @@ struct CharacterNameData
class World
{
public:
- static ACE_Atomic_Op<ACE_Thread_Mutex, uint32> m_worldLoopCounter;
+ static World* instance()
+ {
+ static World instance;
+ return &instance;
+ }
- World();
- ~World();
+ static std::atomic<uint32> m_worldLoopCounter;
WorldSession* FindSession(uint32 id) const;
void AddSession(WorldSession* s);
@@ -618,11 +625,11 @@ class World
void SendWorldText(int32 string_id, ...);
void SendGlobalText(const char* text, WorldSession* self);
void SendGMText(int32 string_id, ...);
- void SendGlobalMessage(WorldPacket* packet, WorldSession* self = 0, uint32 team = 0);
- void SendGlobalGMMessage(WorldPacket* packet, WorldSession* self = 0, uint32 team = 0);
- bool SendZoneMessage(uint32 zone, WorldPacket* packet, WorldSession* self = 0, uint32 team = 0);
- void SendZoneText(uint32 zone, const char *text, WorldSession* self = 0, uint32 team = 0);
void SendServerMessage(ServerMessageType type, const char *text = "", Player* player = NULL);
+ void SendGlobalMessage(WorldPacket* packet, WorldSession* self = nullptr, uint32 team = 0);
+ void SendGlobalGMMessage(WorldPacket* packet, WorldSession* self = nullptr, uint32 team = 0);
+ bool SendZoneMessage(uint32 zone, WorldPacket* packet, WorldSession* self = nullptr, uint32 team = 0);
+ void SendZoneText(uint32 zone, const char *text, WorldSession* self = nullptr, uint32 team = 0);
/// Are we in the middle of a shutdown?
bool IsShuttingDown() const { return m_ShutdownTimer > 0; }
@@ -632,7 +639,7 @@ class World
void ShutdownMsg(bool show = false, Player* player = NULL);
static uint8 GetExitCode() { return m_ExitCode; }
static void StopNow(uint8 exitcode) { m_stopEvent = true; m_ExitCode = exitcode; }
- static bool IsStopped() { return m_stopEvent.value(); }
+ static bool IsStopped() { return m_stopEvent; }
void Update(uint32 diff);
@@ -754,7 +761,10 @@ class World
void ResetRandomBG();
void ResetGuildCap();
private:
- static ACE_Atomic_Op<ACE_Thread_Mutex, bool> m_stopEvent;
+ World();
+ ~World();
+
+ static std::atomic<bool> m_stopEvent;
static uint8 m_ExitCode;
uint32 m_ShutdownTimer;
uint32 m_ShutdownMask;
@@ -773,7 +783,7 @@ class World
uint32 m_currentTime;
SessionMap m_sessions;
- typedef UNORDERED_MAP<uint32, time_t> DisconnectMap;
+ typedef std::unordered_map<uint32, time_t> DisconnectMap;
DisconnectMap m_disconnects;
uint32 m_maxActiveSessionCount;
uint32 m_maxQueuedSessionCount;
@@ -807,7 +817,7 @@ class World
static int32 m_visibility_notify_periodInBGArenas;
// CLI command holder to be thread safe
- ACE_Based::LockedQueue<CliCommandHolder*, ACE_Thread_Mutex> cliCmdQueue;
+ LockedQueue<CliCommandHolder*> cliCmdQueue;
// next daily quests and random bg reset time
time_t m_NextDailyQuestReset;
@@ -821,7 +831,7 @@ class World
// sessions that are added async
void AddSession_(WorldSession* s);
- ACE_Based::LockedQueue<WorldSession*, ACE_Thread_Mutex> addSessQueue;
+ LockedQueue<WorldSession*> addSessQueue;
// used versions
std::string m_DBVersion;
@@ -836,11 +846,11 @@ class World
void LoadCharacterNameData();
void ProcessQueryCallbacks();
- ACE_Future_Set<PreparedQueryResult> m_realmCharCallbacks;
+ std::deque<std::future<PreparedQueryResult>> m_realmCharCallbacks;
};
extern uint32 realmID;
-#define sWorld ACE_Singleton<World, ACE_Null_Mutex>::instance()
+#define sWorld World::instance()
#endif
/// @}
diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt
index c1a9435de52..ba2709f0a23 100644
--- a/src/server/scripts/CMakeLists.txt
+++ b/src/server/scripts/CMakeLists.txt
@@ -47,7 +47,9 @@ message("")
include_directories(
${CMAKE_BINARY_DIR}
${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour
+ ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour/Include
${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast
+ ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast/Include
${CMAKE_SOURCE_DIR}/dep/g3dlite/include
${CMAKE_SOURCE_DIR}/dep/SFMT
${CMAKE_SOURCE_DIR}/dep/zlib
@@ -139,7 +141,6 @@ include_directories(
${CMAKE_SOURCE_DIR}/src/server/game/Weather
${CMAKE_SOURCE_DIR}/src/server/game/World
${CMAKE_CURRENT_SOURCE_DIR}/PrecompiledHeaders
- ${ACE_INCLUDE_DIR}
${MYSQL_INCLUDE_DIR}
)
diff --git a/src/server/scripts/Commands/cs_account.cpp b/src/server/scripts/Commands/cs_account.cpp
index ec3d34332b0..4b7aa8ecad3 100644
--- a/src/server/scripts/Commands/cs_account.cpp
+++ b/src/server/scripts/Commands/cs_account.cpp
@@ -33,7 +33,7 @@ class account_commandscript : public CommandScript
public:
account_commandscript() : CommandScript("account_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand accountSetSecTable[] =
{
@@ -51,8 +51,8 @@ public:
};
static ChatCommand accountLockCommandTable[] =
{
- { "country", rbac::RBAC_PERM_COMMAND_ACCOUNT_LOCK_COUNTRY, true, &HandleAccountLockCountryCommand, "", NULL },
- { "ip", rbac::RBAC_PERM_COMMAND_ACCOUNT_LOCK_IP, true, &HandleAccountLockIpCommand, "", NULL },
+ { "country", rbac::RBAC_PERM_COMMAND_ACCOUNT_LOCK_COUNTRY, false, &HandleAccountLockCountryCommand, "", NULL },
+ { "ip", rbac::RBAC_PERM_COMMAND_ACCOUNT_LOCK_IP, false, &HandleAccountLockIpCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand accountCommandTable[] =
@@ -377,6 +377,7 @@ public:
if (!AccountMgr::CheckEmail(handler->GetSession()->GetAccountId(), std::string(oldEmail)))
{
handler->SendSysMessage(LANG_COMMAND_WRONGEMAIL);
+ sScriptMgr->OnFailedEmailChange(handler->GetSession()->GetAccountId());
handler->SetSentErrorMessage(true);
TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change email, but the provided email [%s] is not equal to registration email [%s].",
handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
@@ -388,6 +389,7 @@ public:
if (!AccountMgr::CheckPassword(handler->GetSession()->GetAccountId(), std::string(password)))
{
handler->SendSysMessage(LANG_COMMAND_WRONGOLDPASSWORD);
+ sScriptMgr->OnFailedEmailChange(handler->GetSession()->GetAccountId());
handler->SetSentErrorMessage(true);
TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change email, but the provided password is wrong.",
handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
@@ -398,6 +400,7 @@ public:
if (strcmp(email, oldEmail) == 0)
{
handler->SendSysMessage(LANG_OLD_EMAIL_IS_NEW_EMAIL);
+ sScriptMgr->OnFailedEmailChange(handler->GetSession()->GetAccountId());
handler->SetSentErrorMessage(true);
return false;
}
@@ -405,6 +408,7 @@ public:
if (strcmp(email, emailConfirmation) != 0)
{
handler->SendSysMessage(LANG_NEW_EMAILS_NOT_MATCH);
+ sScriptMgr->OnFailedEmailChange(handler->GetSession()->GetAccountId());
handler->SetSentErrorMessage(true);
TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change email, but the provided password is wrong.",
handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
@@ -418,6 +422,7 @@ public:
{
case AOR_OK:
handler->SendSysMessage(LANG_COMMAND_EMAIL);
+ sScriptMgr->OnEmailChange(handler->GetSession()->GetAccountId());
TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Changed Email from [%s] to [%s].",
handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(),
@@ -425,6 +430,7 @@ public:
break;
case AOR_EMAIL_TOO_LONG:
handler->SendSysMessage(LANG_EMAIL_TOO_LONG);
+ sScriptMgr->OnFailedEmailChange(handler->GetSession()->GetAccountId());
handler->SetSentErrorMessage(true);
return false;
default:
@@ -469,6 +475,7 @@ public:
if (!AccountMgr::CheckPassword(handler->GetSession()->GetAccountId(), std::string(oldPassword)))
{
handler->SendSysMessage(LANG_COMMAND_WRONGOLDPASSWORD);
+ sScriptMgr->OnFailedPasswordChange(handler->GetSession()->GetAccountId());
handler->SetSentErrorMessage(true);
TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change password, but the provided old password is wrong.",
handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
@@ -481,6 +488,7 @@ public:
&& !AccountMgr::CheckEmail(handler->GetSession()->GetAccountId(), std::string(emailConfirmation))) // ... and returns false if the comparison fails.
{
handler->SendSysMessage(LANG_COMMAND_WRONGEMAIL);
+ sScriptMgr->OnFailedPasswordChange(handler->GetSession()->GetAccountId());
handler->SetSentErrorMessage(true);
TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change password, but the entered email [%s] is wrong.",
handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
@@ -493,6 +501,7 @@ public:
if (strcmp(newPassword, passwordConfirmation) != 0)
{
handler->SendSysMessage(LANG_NEW_PASSWORDS_NOT_MATCH);
+ sScriptMgr->OnFailedPasswordChange(handler->GetSession()->GetAccountId());
handler->SetSentErrorMessage(true);
return false;
}
@@ -503,12 +512,14 @@ public:
{
case AOR_OK:
handler->SendSysMessage(LANG_COMMAND_PASSWORD);
+ sScriptMgr->OnPasswordChange(handler->GetSession()->GetAccountId());
TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Changed Password.",
handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow());
break;
case AOR_PASS_TOO_LONG:
handler->SendSysMessage(LANG_PASSWORD_TOO_LONG);
+ sScriptMgr->OnFailedPasswordChange(handler->GetSession()->GetAccountId());
handler->SetSentErrorMessage(true);
return false;
default:
diff --git a/src/server/scripts/Commands/cs_achievement.cpp b/src/server/scripts/Commands/cs_achievement.cpp
index 041b6c86881..edcdb553be0 100644
--- a/src/server/scripts/Commands/cs_achievement.cpp
+++ b/src/server/scripts/Commands/cs_achievement.cpp
@@ -33,7 +33,7 @@ class achievement_commandscript : public CommandScript
public:
achievement_commandscript() : CommandScript("achievement_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand achievementCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_arena.cpp b/src/server/scripts/Commands/cs_arena.cpp
index e3e726eb348..5658701bd54 100644
--- a/src/server/scripts/Commands/cs_arena.cpp
+++ b/src/server/scripts/Commands/cs_arena.cpp
@@ -34,7 +34,7 @@ class arena_commandscript : public CommandScript
public:
arena_commandscript() : CommandScript("arena_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand arenaCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_ban.cpp b/src/server/scripts/Commands/cs_ban.cpp
index aa90c21c995..a90bbd69e24 100644
--- a/src/server/scripts/Commands/cs_ban.cpp
+++ b/src/server/scripts/Commands/cs_ban.cpp
@@ -35,7 +35,7 @@ class ban_commandscript : public CommandScript
public:
ban_commandscript() : CommandScript("ban_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand unbanCommandTable[] =
{
@@ -109,21 +109,23 @@ public:
return false;
}
- switch (sWorld->BanCharacter(name, durationStr, reasonStr, handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : ""))
+ std::string author = handler->GetSession() ? handler->GetSession()->GetPlayerName() : "Server";
+
+ switch (sWorld->BanCharacter(name, durationStr, reasonStr, author))
{
case BAN_SUCCESS:
{
if (atoi(durationStr) > 0)
{
if (sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
- sWorld->SendWorldText(LANG_BAN_CHARACTER_YOUBANNEDMESSAGE_WORLD, (handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : "Server"), name.c_str(), secsToTimeString(TimeStringToSecs(durationStr), true).c_str(), reasonStr);
+ sWorld->SendWorldText(LANG_BAN_CHARACTER_YOUBANNEDMESSAGE_WORLD, author.c_str(), name.c_str(), secsToTimeString(TimeStringToSecs(durationStr), true).c_str(), reasonStr);
else
handler->PSendSysMessage(LANG_BAN_YOUBANNED, name.c_str(), secsToTimeString(TimeStringToSecs(durationStr), true).c_str(), reasonStr);
}
else
{
if (sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
- sWorld->SendWorldText(LANG_BAN_CHARACTER_YOUPERMBANNEDMESSAGE_WORLD, (handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : "Server"), name.c_str(), reasonStr);
+ sWorld->SendWorldText(LANG_BAN_CHARACTER_YOUPERMBANNEDMESSAGE_WORLD, author.c_str(), name.c_str(), reasonStr);
else
handler->PSendSysMessage(LANG_BAN_YOUPERMBANNED, name.c_str(), reasonStr);
}
@@ -195,20 +197,22 @@ public:
break;
}
- switch (sWorld->BanAccount(mode, nameOrIP, durationStr, reasonStr, handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : ""))
+ std::string author = handler->GetSession() ? handler->GetSession()->GetPlayerName() : "Server";
+
+ switch (sWorld->BanAccount(mode, nameOrIP, durationStr, reasonStr, author))
{
case BAN_SUCCESS:
if (atoi(durationStr) > 0)
{
if (sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
- sWorld->SendWorldText(LANG_BAN_ACCOUNT_YOUBANNEDMESSAGE_WORLD, (handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : "Server"), nameOrIP.c_str(), secsToTimeString(TimeStringToSecs(durationStr), true).c_str(), reasonStr);
+ sWorld->SendWorldText(LANG_BAN_ACCOUNT_YOUBANNEDMESSAGE_WORLD, author.c_str(), nameOrIP.c_str(), secsToTimeString(TimeStringToSecs(durationStr), true).c_str(), reasonStr);
else
handler->PSendSysMessage(LANG_BAN_YOUBANNED, nameOrIP.c_str(), secsToTimeString(TimeStringToSecs(durationStr), true).c_str(), reasonStr);
}
else
{
if (sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
- sWorld->SendWorldText(LANG_BAN_ACCOUNT_YOUPERMBANNEDMESSAGE_WORLD, (handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : "Server"), nameOrIP.c_str(), reasonStr);
+ sWorld->SendWorldText(LANG_BAN_ACCOUNT_YOUPERMBANNEDMESSAGE_WORLD, author.c_str(), nameOrIP.c_str(), reasonStr);
else
handler->PSendSysMessage(LANG_BAN_YOUPERMBANNED, nameOrIP.c_str(), reasonStr);
}
@@ -377,7 +381,9 @@ public:
static bool HandleBanListAccountCommand(ChatHandler* handler, char const* args)
{
- PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_EXPIRED_IP_BANS);
+ PreparedStatement* stmt = NULL;
+
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_EXPIRED_IP_BANS);
LoginDatabase.Execute(stmt);
char* filterStr = strtok((char*)args, " ");
@@ -387,12 +393,12 @@ public:
if (filter.empty())
{
- PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_BANNED_ALL);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_BANNED_ALL);
result = LoginDatabase.Query(stmt);
}
else
{
- PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_BANNED_BY_USERNAME);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_BANNED_BY_USERNAME);
stmt->setString(0, filter);
result = LoginDatabase.Query(stmt);
}
@@ -457,7 +463,7 @@ public:
{
time_t timeBan = time_t(fields2[0].GetUInt32());
tm tmBan;
- ACE_OS::localtime_r(&timeBan, &tmBan);
+ localtime_r(&timeBan, &tmBan);
if (fields2[0].GetUInt32() == fields2[1].GetUInt32())
{
@@ -469,7 +475,7 @@ public:
{
time_t timeUnban = time_t(fields2[1].GetUInt32());
tm tmUnban;
- ACE_OS::localtime_r(&timeUnban, &tmUnban);
+ localtime_r(&timeUnban, &tmUnban);
handler->PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d|%02d-%02d-%02d %02d:%02d|%-15.15s|%-15.15s|",
accountName.c_str(), tmBan.tm_year%100, tmBan.tm_mon+1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
tmUnban.tm_year%100, tmUnban.tm_mon+1, tmUnban.tm_mday, tmUnban.tm_hour, tmUnban.tm_min,
@@ -546,7 +552,7 @@ public:
{
time_t timeBan = time_t(banFields[0].GetUInt32());
tm tmBan;
- ACE_OS::localtime_r(&timeBan, &tmBan);
+ localtime_r(&timeBan, &tmBan);
if (banFields[0].GetUInt32() == banFields[1].GetUInt32())
{
@@ -558,7 +564,7 @@ public:
{
time_t timeUnban = time_t(banFields[1].GetUInt32());
tm tmUnban;
- ACE_OS::localtime_r(&timeUnban, &tmUnban);
+ localtime_r(&timeUnban, &tmUnban);
handler->PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d|%02d-%02d-%02d %02d:%02d|%-15.15s|%-15.15s|",
char_name.c_str(), tmBan.tm_year%100, tmBan.tm_mon+1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
tmUnban.tm_year%100, tmUnban.tm_mon+1, tmUnban.tm_mday, tmUnban.tm_hour, tmUnban.tm_min,
@@ -577,7 +583,8 @@ public:
static bool HandleBanListIPCommand(ChatHandler* handler, char const* args)
{
- PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_EXPIRED_IP_BANS);
+ PreparedStatement* stmt = NULL;
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_EXPIRED_IP_BANS);
LoginDatabase.Execute(stmt);
char* filterStr = strtok((char*)args, " ");
@@ -588,12 +595,12 @@ public:
if (filter.empty())
{
- PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_IP_BANNED_ALL);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_IP_BANNED_ALL);
result = LoginDatabase.Query(stmt);
}
else
{
- PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_IP_BANNED_BY_IP);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_IP_BANNED_BY_IP);
stmt->setString(0, filter);
result = LoginDatabase.Query(stmt);
}
@@ -627,7 +634,7 @@ public:
Field* fields = result->Fetch();
time_t timeBan = time_t(fields[1].GetUInt32());
tm tmBan;
- ACE_OS::localtime_r(&timeBan, &tmBan);
+ localtime_r(&timeBan, &tmBan);
if (fields[1].GetUInt32() == fields[2].GetUInt32())
{
handler->PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d| permanent |%-15.15s|%-15.15s|",
@@ -638,7 +645,7 @@ public:
{
time_t timeUnban = time_t(fields[2].GetUInt32());
tm tmUnban;
- ACE_OS::localtime_r(&timeUnban, &tmUnban);
+ localtime_r(&timeUnban, &tmUnban);
handler->PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d|%02d-%02d-%02d %02d:%02d|%-15.15s|%-15.15s|",
fields[0].GetCString(), tmBan.tm_year%100, tmBan.tm_mon+1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
tmUnban.tm_year%100, tmUnban.tm_mon+1, tmUnban.tm_mday, tmUnban.tm_hour, tmUnban.tm_min,
diff --git a/src/server/scripts/Commands/cs_bf.cpp b/src/server/scripts/Commands/cs_bf.cpp
index 2bc962f0768..b74bb733822 100644
--- a/src/server/scripts/Commands/cs_bf.cpp
+++ b/src/server/scripts/Commands/cs_bf.cpp
@@ -31,7 +31,7 @@ class bf_commandscript : public CommandScript
public:
bf_commandscript() : CommandScript("bf_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand battlefieldcommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_cast.cpp b/src/server/scripts/Commands/cs_cast.cpp
index 545ae405c20..9bc79c3f8f9 100644
--- a/src/server/scripts/Commands/cs_cast.cpp
+++ b/src/server/scripts/Commands/cs_cast.cpp
@@ -33,7 +33,7 @@ class cast_commandscript : public CommandScript
public:
cast_commandscript() : CommandScript("cast_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand castCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp
index 2278a00a9f0..7722c330e5f 100644
--- a/src/server/scripts/Commands/cs_character.cpp
+++ b/src/server/scripts/Commands/cs_character.cpp
@@ -35,7 +35,7 @@ class character_commandscript : public CommandScript
public:
character_commandscript() : CommandScript("character_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand pdumpCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_cheat.cpp b/src/server/scripts/Commands/cs_cheat.cpp
index bf51141ba4f..b61cf2c54fe 100644
--- a/src/server/scripts/Commands/cs_cheat.cpp
+++ b/src/server/scripts/Commands/cs_cheat.cpp
@@ -33,7 +33,7 @@ class cheat_commandscript : public CommandScript
public:
cheat_commandscript() : CommandScript("cheat_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand cheatCommandTable[] =
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index 597823abc13..1dc0cdef330 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -41,7 +41,7 @@ class debug_commandscript : public CommandScript
public:
debug_commandscript() : CommandScript("debug_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand debugPlayCommandTable[] =
{
@@ -745,14 +745,14 @@ public:
if (item->GetOwnerGUID() != player->GetGUID())
{
- handler->PSendSysMessage("queue(" SIZEFMTD "): For the item with guid %d, the owner's guid (%d) and the player's guid (%d) don't match!", i, item->GetGUIDLow(), GUID_LOPART(item->GetOwnerGUID()), player->GetGUIDLow());
+ handler->PSendSysMessage("queue(%zu): For the item with guid %d, the owner's guid (%d) and the player's guid (%d) don't match!", i, item->GetGUIDLow(), GUID_LOPART(item->GetOwnerGUID()), player->GetGUIDLow());
error = true;
continue;
}
if (item->GetQueuePos() != i)
{
- handler->PSendSysMessage("queue(" SIZEFMTD "): For the item with guid %d, the queuepos doesn't match it's position in the queue!", i, item->GetGUIDLow());
+ handler->PSendSysMessage("queue(%zu): For the item with guid %d, the queuepos doesn't match it's position in the queue!", i, item->GetGUIDLow());
error = true;
continue;
}
@@ -764,14 +764,14 @@ public:
if (test == NULL)
{
- handler->PSendSysMessage("queue(" SIZEFMTD "): The bag(%d) and slot(%d) values for the item with guid %d are incorrect, the player doesn't have any item at that position!", i, item->GetBagSlot(), item->GetSlot(), item->GetGUIDLow());
+ handler->PSendSysMessage("queue(%zu): The bag(%d) and slot(%d) values for the item with guid %d are incorrect, the player doesn't have any item at that position!", i, item->GetBagSlot(), item->GetSlot(), item->GetGUIDLow());
error = true;
continue;
}
if (test != item)
{
- handler->PSendSysMessage("queue(" SIZEFMTD "): The bag(%d) and slot(%d) values for the item with guid %d are incorrect, an item which guid is %d is there instead!", i, item->GetBagSlot(), item->GetSlot(), item->GetGUIDLow(), test->GetGUIDLow());
+ handler->PSendSysMessage("queue(%zu): The bag(%d) and slot(%d) values for the item with guid %d are incorrect, an item which guid is %d is there instead!", i, item->GetBagSlot(), item->GetSlot(), item->GetGUIDLow(), test->GetGUIDLow());
error = true;
continue;
}
@@ -909,7 +909,7 @@ public:
handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, handler->GetSession()->GetPlayer()->GetObjectSize());
if (!i)
- return handler->GetSession()->GetPlayer()->SummonCreature(entry, x, y, z, o);
+ return handler->GetSession()->GetPlayer()->SummonCreature(entry, x, y, z, o) != nullptr;
uint32 id = (uint32)atoi(i);
@@ -927,7 +927,7 @@ public:
Map* map = handler->GetSession()->GetPlayer()->GetMap();
- if (!v->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_VEHICLE), map, handler->GetSession()->GetPlayer()->GetPhaseMask(), entry, id, handler->GetSession()->GetPlayer()->GetTeam(), x, y, z, o))
+ if (!v->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_VEHICLE), map, handler->GetSession()->GetPlayer()->GetPhaseMask(), entry, x, y, z, o, nullptr, id))
{
delete v;
return false;
@@ -1108,28 +1108,28 @@ public:
uint64 guid = target->GetGUID();
- uint32 opcode = (uint32)atoi(x);
- if (opcode >= target->GetValuesCount())
+ uint32 field = (uint32)atoi(x);
+ if (field >= target->GetValuesCount())
{
- handler->PSendSysMessage(LANG_TOO_BIG_INDEX, opcode, GUID_LOPART(guid), target->GetValuesCount());
+ handler->PSendSysMessage(LANG_TOO_BIG_INDEX, field, GUID_LOPART(guid), target->GetValuesCount());
return false;
}
bool isInt32 = true;
if (z)
- isInt32 = (bool)atoi(z);
+ isInt32 = atoi(z) != 0;
if (isInt32)
{
uint32 value = (uint32)atoi(y);
- target->SetUInt32Value(opcode, value);
- handler->PSendSysMessage(LANG_SET_UINT_FIELD, GUID_LOPART(guid), opcode, value);
+ target->SetUInt32Value(field, value);
+ handler->PSendSysMessage(LANG_SET_UINT_FIELD, GUID_LOPART(guid), field, value);
}
else
{
float value = (float)atof(y);
- target->SetFloatValue(opcode, value);
- handler->PSendSysMessage(LANG_SET_FLOAT_FIELD, GUID_LOPART(guid), opcode, value);
+ target->SetFloatValue(field, value);
+ handler->PSendSysMessage(LANG_SET_FLOAT_FIELD, GUID_LOPART(guid), field, value);
}
return true;
@@ -1165,7 +1165,7 @@ public:
bool isInt32 = true;
if (z)
- isInt32 = (bool)atoi(z);
+ isInt32 = atoi(z) != 0;
if (isInt32)
{
@@ -1316,15 +1316,15 @@ public:
MOVEMENTFLAG_WALKING | MOVEMENTFLAG_SWIMMING |
MOVEMENTFLAG_SPLINE_ENABLED;
- bool unhandledFlag = (moveFlags ^ target->GetUnitMovementFlags()) & ~FlagsWithHandlers;
+ bool unhandledFlag = ((moveFlags ^ target->GetUnitMovementFlags()) & ~FlagsWithHandlers) != 0;
- target->SetWalk(moveFlags & MOVEMENTFLAG_WALKING);
- target->SetDisableGravity(moveFlags & MOVEMENTFLAG_DISABLE_GRAVITY);
- target->SetSwim(moveFlags & MOVEMENTFLAG_SWIMMING);
- target->SetCanFly(moveFlags & MOVEMENTFLAG_CAN_FLY);
- target->SetWaterWalking(moveFlags & MOVEMENTFLAG_WATERWALKING);
- target->SetFeatherFall(moveFlags & MOVEMENTFLAG_FALLING_SLOW);
- target->SetHover(moveFlags & MOVEMENTFLAG_HOVER);
+ target->SetWalk((moveFlags & MOVEMENTFLAG_WALKING) != 0);
+ target->SetDisableGravity((moveFlags & MOVEMENTFLAG_DISABLE_GRAVITY) != 0);
+ target->SetSwim((moveFlags & MOVEMENTFLAG_SWIMMING) != 0);
+ target->SetCanFly((moveFlags & MOVEMENTFLAG_CAN_FLY) != 0);
+ target->SetWaterWalking((moveFlags & MOVEMENTFLAG_WATERWALKING) != 0);
+ target->SetFeatherFall((moveFlags & MOVEMENTFLAG_FALLING_SLOW) != 0);
+ target->SetHover((moveFlags & MOVEMENTFLAG_HOVER) != 0);
if (moveFlags & (MOVEMENTFLAG_DISABLE_GRAVITY | MOVEMENTFLAG_CAN_FLY))
moveFlags &= ~MOVEMENTFLAG_FALLING;
@@ -1382,8 +1382,7 @@ public:
}
else
{
- Position pos;
- transport->GetPosition(&pos);
+ Position pos = transport->GetPosition();
handler->PSendSysMessage("Transport %s is %s", transport->GetName().c_str(), transport->GetGoState() == GO_STATE_READY ? "stopped" : "moving");
handler->PSendSysMessage("Transport position: %s", pos.ToString().c_str());
return true;
diff --git a/src/server/scripts/Commands/cs_deserter.cpp b/src/server/scripts/Commands/cs_deserter.cpp
index 5a9c799a4a8..9dcecba05ef 100644
--- a/src/server/scripts/Commands/cs_deserter.cpp
+++ b/src/server/scripts/Commands/cs_deserter.cpp
@@ -43,7 +43,7 @@ public:
* @brief Returns the command structure for the system.
*/
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand deserterInstanceCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_disable.cpp b/src/server/scripts/Commands/cs_disable.cpp
index 5d7296ca495..8cf60e4bb28 100644
--- a/src/server/scripts/Commands/cs_disable.cpp
+++ b/src/server/scripts/Commands/cs_disable.cpp
@@ -37,7 +37,7 @@ class disable_commandscript : public CommandScript
public:
disable_commandscript() : CommandScript("disable_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand removeDisableCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_event.cpp b/src/server/scripts/Commands/cs_event.cpp
index 849a8b5634e..b89c5686511 100644
--- a/src/server/scripts/Commands/cs_event.cpp
+++ b/src/server/scripts/Commands/cs_event.cpp
@@ -33,7 +33,7 @@ class event_commandscript : public CommandScript
public:
event_commandscript() : CommandScript("event_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand eventCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_gm.cpp b/src/server/scripts/Commands/cs_gm.cpp
index 498ee68ba11..90fd0bdd71c 100644
--- a/src/server/scripts/Commands/cs_gm.cpp
+++ b/src/server/scripts/Commands/cs_gm.cpp
@@ -36,7 +36,7 @@ class gm_commandscript : public CommandScript
public:
gm_commandscript() : CommandScript("gm_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand gmCommandTable[] =
{
@@ -123,7 +123,7 @@ public:
bool first = true;
bool footer = false;
- TRINITY_READ_GUARD(HashMapHolder<Player>::LockType, *HashMapHolder<Player>::GetLock());
+ boost::shared_lock<boost::shared_mutex> lock(*HashMapHolder<Player>::GetLock());
HashMapHolder<Player>::MapType const& m = sObjectAccessor->GetPlayers();
for (HashMapHolder<Player>::MapType::const_iterator itr = m.begin(); itr != m.end(); ++itr)
{
diff --git a/src/server/scripts/Commands/cs_go.cpp b/src/server/scripts/Commands/cs_go.cpp
index 8e3dea36e48..44ebb1ea4e0 100644
--- a/src/server/scripts/Commands/cs_go.cpp
+++ b/src/server/scripts/Commands/cs_go.cpp
@@ -29,13 +29,14 @@ EndScriptData */
#include "Chat.h"
#include "Language.h"
#include "Player.h"
+#include "Transport.h"
class go_commandscript : public CommandScript
{
public:
go_commandscript() : CommandScript("go_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand goCommandTable[] =
{
@@ -132,21 +133,24 @@ public:
float x = fields[0].GetFloat();
float y = fields[1].GetFloat();
float z = fields[2].GetFloat();
- float ort = fields[3].GetFloat();
- int mapId = fields[4].GetUInt16();
+ float o = fields[3].GetFloat();
+ uint32 mapId = fields[4].GetUInt16();
uint32 guid = fields[5].GetUInt32();
uint32 id = fields[6].GetUInt32();
- // if creature is in same map with caster go at its current location
- if (Creature* creature = sObjectAccessor->GetCreature(*player, MAKE_NEW_GUID(guid, id, HIGHGUID_UNIT)))
+ Transport* transport = NULL;
+
+ if (Creature* creature = ObjectAccessor::GetObjectInWorld(MAKE_NEW_GUID(guid, id, HIGHGUID_UNIT), (Creature*)NULL))
{
x = creature->GetPositionX();
y = creature->GetPositionY();
z = creature->GetPositionZ();
- ort = creature->GetOrientation();
+ o = creature->GetOrientation();
+ mapId = creature->GetMapId();
+ transport = creature->GetTransport();
}
- if (!MapManager::IsValidMapCoord(mapId, x, y, z, ort))
+ if (!MapManager::IsValidMapCoord(mapId, x, y, z, o) || sObjectMgr->IsTransportMap(mapId))
{
handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, x, y, mapId);
handler->SetSentErrorMessage(true);
@@ -163,7 +167,11 @@ public:
else
player->SaveRecallPosition();
- player->TeleportTo(mapId, x, y, z, ort);
+ if (player->TeleportTo(mapId, x, y, z, o))
+ {
+ if (transport)
+ transport->AddPassenger(player);
+ }
return true;
}
@@ -274,8 +282,8 @@ public:
if (!guid)
return false;
- float x, y, z, ort;
- int mapId;
+ float x, y, z, o;
+ uint32 mapId;
// by DB guid
if (GameObjectData const* goData = sObjectMgr->GetGOData(guid))
@@ -283,7 +291,7 @@ public:
x = goData->posX;
y = goData->posY;
z = goData->posZ;
- ort = goData->orientation;
+ o = goData->orientation;
mapId = goData->mapid;
}
else
@@ -293,7 +301,7 @@ public:
return false;
}
- if (!MapManager::IsValidMapCoord(mapId, x, y, z, ort))
+ if (!MapManager::IsValidMapCoord(mapId, x, y, z, o) || sObjectMgr->IsTransportMap(mapId))
{
handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, x, y, mapId);
handler->SetSentErrorMessage(true);
@@ -310,7 +318,7 @@ public:
else
player->SaveRecallPosition();
- player->TeleportTo(mapId, x, y, z, ort);
+ player->TeleportTo(mapId, x, y, z, o);
return true;
}
diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp
index ce0bee0d8c5..ed5b39e476d 100644
--- a/src/server/scripts/Commands/cs_gobject.cpp
+++ b/src/server/scripts/Commands/cs_gobject.cpp
@@ -37,7 +37,7 @@ class gobject_commandscript : public CommandScript
public:
gobject_commandscript() : CommandScript("gobject_commandscript") { }
- ChatCommand* GetCommands() const
+ ChatCommand* GetCommands() const override
{
static ChatCommand gobjectAddCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp
index c236af40e45..477eb3649b7 100644
--- a/src/server/scripts/Commands/cs_group.cpp
+++ b/src/server/scripts/Commands/cs_group.cpp
@@ -28,7 +28,7 @@ class group_commandscript : public CommandScript
public:
group_commandscript() : CommandScript("group_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand groupCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp
index 4627f6b022e..86213291367 100644
--- a/src/server/scripts/Commands/cs_guild.cpp
+++ b/src/server/scripts/Commands/cs_guild.cpp
@@ -34,7 +34,7 @@ class guild_commandscript : public CommandScript
public:
guild_commandscript() : CommandScript("guild_commandscript") { }
- ChatCommand* GetCommands() const
+ ChatCommand* GetCommands() const override
{
static ChatCommand guildCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_honor.cpp b/src/server/scripts/Commands/cs_honor.cpp
index 40663ca5a10..6b76f753403 100644
--- a/src/server/scripts/Commands/cs_honor.cpp
+++ b/src/server/scripts/Commands/cs_honor.cpp
@@ -33,7 +33,7 @@ class honor_commandscript : public CommandScript
public:
honor_commandscript() : CommandScript("honor_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand honorAddCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_instance.cpp b/src/server/scripts/Commands/cs_instance.cpp
index 93cabaeeca7..b8d69c250bb 100644
--- a/src/server/scripts/Commands/cs_instance.cpp
+++ b/src/server/scripts/Commands/cs_instance.cpp
@@ -35,7 +35,7 @@ class instance_commandscript : public CommandScript
public:
instance_commandscript() : CommandScript("instance_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand instanceCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_learn.cpp b/src/server/scripts/Commands/cs_learn.cpp
index 113f6da2e31..88acd491427 100644
--- a/src/server/scripts/Commands/cs_learn.cpp
+++ b/src/server/scripts/Commands/cs_learn.cpp
@@ -36,7 +36,7 @@ class learn_commandscript : public CommandScript
public:
learn_commandscript() : CommandScript("learn_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand learnAllMyCommandTable[] =
{
@@ -112,9 +112,9 @@ public:
}
if (allRanks)
- targetPlayer->learnSpellHighRank(spell);
+ targetPlayer->LearnSpellHighestRank(spell);
else
- targetPlayer->learnSpell(spell, false);
+ targetPlayer->LearnSpell(spell, false);
if (GetTalentSpellCost(spellInfo->GetFirstRankSpell()->Id))
targetPlayer->SendTalentsInfoData(false);
@@ -133,7 +133,7 @@ public:
if (!spellInfo->IsAbilityOfSkillType(SKILL_INTERNAL))
continue;
- handler->GetSession()->GetPlayer()->learnSpell(i, false);
+ handler->GetSession()->GetPlayer()->LearnSpell(i, false);
}
handler->SendSysMessage(LANG_LEARNING_GM_SKILLS);
@@ -184,7 +184,7 @@ public:
if (!SpellMgr::IsSpellValid(spellInfo, handler->GetSession()->GetPlayer(), false))
continue;
- handler->GetSession()->GetPlayer()->learnSpell(spellInfo->Id, false);
+ handler->GetSession()->GetPlayer()->LearnSpell(spellInfo->Id, false);
}
handler->SendSysMessage(LANG_COMMAND_LEARN_CLASS_SPELLS);
@@ -228,7 +228,7 @@ public:
continue;
// learn highest rank of talent and learn all non-talent spell ranks (recursive by tree)
- player->learnSpellHighRank(spellId);
+ player->LearnSpellHighestRank(spellId);
player->AddTalent(spellId, player->GetActiveSpec(), true);
}
@@ -320,7 +320,7 @@ public:
{
// skipping UNIVERSAL language (0)
for (uint8 i = 1; i < LANGUAGES_COUNT; ++i)
- handler->GetSession()->GetPlayer()->learnSpell(lang_description[i].spell_id, false);
+ handler->GetSession()->GetPlayer()->LearnSpell(lang_description[i].spell_id, false);
handler->SendSysMessage(LANG_COMMAND_LEARN_ALL_LANG);
return true;
@@ -332,8 +332,9 @@ public:
if (!handler->extractPlayerTarget((char*)args, &target))
return false;
- target->learnDefaultSpells();
- target->learnQuestRewardedSpells();
+ target->LearnDefaultSkills();
+ target->LearnCustomSpells();
+ target->LearnQuestRewardedSpells();
handler->PSendSysMessage(LANG_COMMAND_LEARN_ALL_DEFAULT_AND_QUEST, handler->GetNameLink(target).c_str());
return true;
@@ -469,7 +470,7 @@ public:
if (!spellInfo || !SpellMgr::IsSpellValid(spellInfo, player, false))
continue;
- player->learnSpell(skillLine->spellId, false);
+ player->LearnSpell(skillLine->spellId, false);
}
}
@@ -498,7 +499,7 @@ public:
spellId = sSpellMgr->GetFirstSpellInChain(spellId);
if (target->HasSpell(spellId))
- target->removeSpell(spellId, false, !allRanks);
+ target->RemoveSpell(spellId, false, !allRanks);
else
handler->SendSysMessage(LANG_FORGET_SPELL);
diff --git a/src/server/scripts/Commands/cs_lfg.cpp b/src/server/scripts/Commands/cs_lfg.cpp
index 2c6534be8a2..2f6afd29e9f 100644
--- a/src/server/scripts/Commands/cs_lfg.cpp
+++ b/src/server/scripts/Commands/cs_lfg.cpp
@@ -41,7 +41,7 @@ class lfg_commandscript : public CommandScript
public:
lfg_commandscript() : CommandScript("lfg_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand lfgCommandTable[] =
{
@@ -118,7 +118,7 @@ public:
static bool HandleLfgQueueInfoCommand(ChatHandler* handler, char const* args)
{
- handler->SendSysMessage(sLFGMgr->DumpQueueInfo(*args).c_str());
+ handler->SendSysMessage(sLFGMgr->DumpQueueInfo(atoi(args) != 0).c_str());
return true;
}
diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp
index 1ee92625735..6a0755b82e8 100644
--- a/src/server/scripts/Commands/cs_list.cpp
+++ b/src/server/scripts/Commands/cs_list.cpp
@@ -36,7 +36,7 @@ class list_commandscript : public CommandScript
public:
list_commandscript() : CommandScript("list_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand listCommandTable[] =
{
@@ -471,6 +471,7 @@ public:
Player* target;
uint64 targetGuid;
std::string targetName;
+ PreparedStatement* stmt = NULL;
if (!*args)
return false;
@@ -485,35 +486,38 @@ public:
else if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid, &targetName))
return false;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAIL_LIST_COUNT);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAIL_LIST_COUNT);
stmt->setUInt32(0, targetGuid);
- PreparedQueryResult result = CharacterDatabase.Query(stmt);
- if (result)
+ PreparedQueryResult queryResult = CharacterDatabase.Query(stmt);
+ if (queryResult)
{
- Field* fields = result->Fetch();
- uint32 countMail = fields[0].GetUInt64();
+ Field* fields = queryResult->Fetch();
+ uint32 countMail = fields[0].GetUInt64();
+
std::string nameLink = handler->playerLink(targetName);
handler->PSendSysMessage(LANG_LIST_MAIL_HEADER, countMail, nameLink.c_str(), targetGuid);
handler->PSendSysMessage(LANG_ACCOUNT_LIST_BAR);
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAIL_LIST_INFO);
+
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAIL_LIST_INFO);
stmt->setUInt32(0, targetGuid);
- PreparedQueryResult result = CharacterDatabase.Query(stmt);
- if (result)
+ PreparedQueryResult queryResult = CharacterDatabase.Query(stmt);
+
+ if (queryResult)
{
do
{
- Field* fields = result->Fetch();
- uint32 messageId = fields[0].GetUInt32();
- uint32 senderId = fields[1].GetUInt32();
- std::string sender = fields[2].GetString();
- uint32 receiverId = fields[3].GetUInt32();
- std::string receiver = fields[4].GetString();
- std::string subject = fields[5].GetString();
- uint64 deliverTime = fields[6].GetUInt32();
- uint64 expireTime = fields[7].GetUInt32();
- uint32 money = fields[8].GetUInt32();
- int hasItem = fields[9].GetUInt8();
- uint32 gold = money /GOLD;
+ Field* queryFields = queryResult->Fetch();
+ uint32 messageId = queryFields[0].GetUInt32();
+ uint32 senderId = queryFields[1].GetUInt32();
+ std::string sender = queryFields[2].GetString();
+ uint32 receiverId = queryFields[3].GetUInt32();
+ std::string receiver = queryFields[4].GetString();
+ std::string subject = queryFields[5].GetString();
+ uint64 deliverTime = queryFields[6].GetUInt32();
+ uint64 expireTime = queryFields[7].GetUInt32();
+ uint32 money = queryFields[8].GetUInt32();
+ uint8 hasItem = queryFields[9].GetUInt8();
+ uint32 gold = money / GOLD;
uint32 silv = (money % GOLD) / SILVER;
uint32 copp = (money % GOLD) % SILVER;
std::string receiverStr = handler->playerLink(receiver);
@@ -521,6 +525,7 @@ public:
handler->PSendSysMessage(LANG_LIST_MAIL_INFO_1, messageId, subject.c_str(), gold, silv, copp);
handler->PSendSysMessage(LANG_LIST_MAIL_INFO_2, senderStr.c_str(), senderId, receiverStr.c_str(), receiverId);
handler->PSendSysMessage(LANG_LIST_MAIL_INFO_3, TimeToTimestampStr(deliverTime).c_str(), TimeToTimestampStr(expireTime).c_str());
+
if (hasItem == 1)
{
QueryResult result2;
@@ -529,17 +534,17 @@ public:
{
do
{
- uint32 item_guid = (*result2)[0].GetUInt32();
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAIL_LIST_ITEMS);
+ uint32 item_guid = (*result2)[0].GetUInt32();
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAIL_LIST_ITEMS);
stmt->setUInt32(0, item_guid);
PreparedQueryResult result3 = CharacterDatabase.Query(stmt);
if (result3)
{
do
{
- Field* fields = result3->Fetch();
- uint32 item_entry = fields[0].GetUInt32();
- uint32 item_count = fields[1].GetUInt32();
+ Field* fields3 = result3->Fetch();
+ uint32 item_entry = fields3[0].GetUInt32();
+ uint32 item_count = fields3[1].GetUInt32();
QueryResult result4;
result4 = WorldDatabase.PQuery("SELECT name, quality FROM item_template WHERE entry = '%u'", item_entry);
Field* fields1 = result4->Fetch();
@@ -563,7 +568,7 @@ public:
}
handler->PSendSysMessage(LANG_ACCOUNT_LIST_BAR);
}
- while (result->NextRow());
+ while (queryResult->NextRow());
}
else
handler->PSendSysMessage(LANG_LIST_MAIL_NOT_FOUND);
diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp
index 57cf2cba260..ee307a1d065 100644
--- a/src/server/scripts/Commands/cs_lookup.cpp
+++ b/src/server/scripts/Commands/cs_lookup.cpp
@@ -37,7 +37,7 @@ class lookup_commandscript : public CommandScript
public:
lookup_commandscript() : CommandScript("lookup_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand lookupPlayerCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_message.cpp b/src/server/scripts/Commands/cs_message.cpp
index dd1366ac09c..f2067e6c70b 100644
--- a/src/server/scripts/Commands/cs_message.cpp
+++ b/src/server/scripts/Commands/cs_message.cpp
@@ -34,7 +34,7 @@ class message_commandscript : public CommandScript
public:
message_commandscript() : CommandScript("message_commandscript") { }
- ChatCommand* GetCommands() const
+ ChatCommand* GetCommands() const override
{
static ChatCommand channelSetCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index cae2f5e511d..a3848c00877 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -30,7 +30,6 @@
#include "SpellAuras.h"
#include "TargetedMovementGenerator.h"
#include "WeatherMgr.h"
-#include "ace/INET_Addr.h"
#include "Player.h"
#include "Pet.h"
#include "LFG.h"
@@ -42,7 +41,7 @@ class misc_commandscript : public CommandScript
public:
misc_commandscript() : CommandScript("misc_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand commandTable[] =
{
@@ -1342,7 +1341,7 @@ public:
return false;
}
- bool targetHasSkill = target->GetSkillValue(skill);
+ bool targetHasSkill = target->GetSkillValue(skill) != 0;
// If our target does not yet have the skill they are trying to add to them, the chosen level also becomes
// the max level of the new profession.
@@ -1383,6 +1382,7 @@ public:
Player* target;
uint64 targetGuid;
std::string targetName;
+ PreparedStatement* stmt = NULL;
// To make sure we get a target, we convert our guid to an omniversal...
uint32 parseGUID = MAKE_NEW_GUID(atol((char*)args), 0, HIGHGUID_PLAYER);
@@ -1459,7 +1459,6 @@ public:
std::string raceStr, classStr = "None";
uint8 gender = 0;
int8 locale = handler->GetSessionDbcLocale();
- std::string genderStr = handler->GetTrinityString(LANG_ERROR);
uint32 totalPlayerTime = 0;
uint8 level = 0;
std::string alive = handler->GetTrinityString(LANG_ERROR);
@@ -1512,7 +1511,7 @@ public:
return false;
// Query informations from the DB
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_PINFO);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_PINFO);
stmt->setUInt32(0, lowguid);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
@@ -1539,7 +1538,7 @@ public:
}
// Query the prepared statement for login data
- PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_PINFO);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_PINFO);
stmt->setInt32(0, int32(realmID));
stmt->setUInt32(1, accId);
PreparedQueryResult result = LoginDatabase.Query(stmt);
@@ -1563,7 +1562,7 @@ public:
EndianConvertReverse(ip);
// If ip2nation table is populated, it displays the country
- PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_IP2NATION_COUNTRY);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_IP2NATION_COUNTRY);
stmt->setUInt32(0, ip);
if (PreparedQueryResult result2 = LoginDatabase.Query(stmt))
{
@@ -1610,16 +1609,7 @@ public:
banReason = fields[3].GetString();
}
- // Can be used to query data from World database
- stmt2 = WorldDatabase.GetPreparedStatement(WORLD_SEL_REQ_XP);
- stmt2->setUInt8(0, level);
- PreparedQueryResult result3 = WorldDatabase.Query(stmt2);
- if (result3)
- {
- Field* fields = result3->Fetch();
- xptotal = fields[0].GetUInt32();
- }
// Can be used to query data from Characters database
stmt2 = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PINFO_XP);
@@ -1631,6 +1621,7 @@ public:
Field* fields = result4->Fetch();
xp = fields[0].GetUInt32(); // Used for "current xp" output and "%u XP Left" calculation
uint32 gguid = fields[1].GetUInt32(); // We check if have a guild for the person, so we might not require to query it at all
+ xptotal = sObjectMgr->GetXPForLevel(level);
if (gguid != 0)
{
@@ -1640,13 +1631,13 @@ public:
PreparedQueryResult result5 = CharacterDatabase.Query(stmt3);
if (result5)
{
- Field* fields = result5->Fetch();
- guildId = fields[0].GetUInt32();
- guildName = fields[1].GetString();
- guildRank = fields[2].GetString();
- guildRankId = fields[3].GetUInt8();
- note = fields[4].GetString();
- officeNote = fields[5].GetString();
+ Field* fields5 = result5->Fetch();
+ guildId = fields5[0].GetUInt32();
+ guildName = fields5[1].GetString();
+ guildRank = fields5[2].GetString();
+ guildRankId = fields5[3].GetUInt8();
+ note = fields5[4].GetString();
+ officeNote = fields5[5].GetString();
}
}
}
@@ -1767,10 +1758,10 @@ public:
Player* player = handler->GetSession()->GetPlayer();
// accept only explicitly selected target (not implicitly self targeting case)
- Unit* target = handler->getSelectedUnit();
- if (player->GetTarget() && target)
+ Creature* target = player->GetTarget() ? handler->getSelectedCreature() : nullptr;
+ if (target)
{
- if (target->GetTypeId() != TYPEID_UNIT || target->IsPet())
+ if (target->IsPet())
{
handler->SendSysMessage(LANG_SELECT_CREATURE);
handler->SetSentErrorMessage(true);
@@ -1778,19 +1769,13 @@ public:
}
if (target->isDead())
- target->ToCreature()->Respawn();
+ target->Respawn();
return true;
}
- CellCoord p(Trinity::ComputeCellCoord(player->GetPositionX(), player->GetPositionY()));
- Cell cell(p);
- cell.SetNoCreate();
-
Trinity::RespawnDo u_do;
Trinity::WorldObjectWorker<Trinity::RespawnDo> worker(player, u_do);
-
- TypeContainerVisitor<Trinity::WorldObjectWorker<Trinity::RespawnDo>, GridTypeMapContainer > obj_worker(worker);
- cell.Visit(p, obj_worker, *player->GetMap(), *player, player->GetGridActivationRange());
+ player->VisitNearbyGridObject(player->GetGridActivationRange(), worker);
return true;
}
@@ -1844,14 +1829,9 @@ public:
std::string nameLink = handler->playerLink(targetName);
if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD))
- {
- sWorld->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, (handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : "Server"), nameLink.c_str(), notSpeakTime, muteReasonStr.c_str());
- ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, notSpeakTime, muteBy.c_str(), muteReasonStr.c_str());
- }
- else
- {
- ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, notSpeakTime, muteBy.c_str(), muteReasonStr.c_str());
- }
+ sWorld->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy.c_str(), nameLink.c_str(), notSpeakTime, muteReasonStr.c_str());
+
+ ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, notSpeakTime, muteBy.c_str(), muteReasonStr.c_str());
}
else
{
@@ -1866,10 +1846,11 @@ public:
LoginDatabase.Execute(stmt);
std::string nameLink = handler->playerLink(targetName);
- if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD) && !target)
- sWorld->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, handler->GetSession()->GetPlayerName().c_str(), nameLink.c_str(), notSpeakTime, muteReasonStr.c_str());
- else
- handler->PSendSysMessage(target ? LANG_YOU_DISABLE_CHAT : LANG_COMMAND_DISABLE_CHAT_DELAYED, nameLink.c_str(), notSpeakTime, muteReasonStr.c_str());
+ if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD) && !target)
+ sWorld->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy.c_str(), nameLink.c_str(), notSpeakTime, muteReasonStr.c_str());
+ else
+ handler->PSendSysMessage(target ? LANG_YOU_DISABLE_CHAT : LANG_COMMAND_DISABLE_CHAT_DELAYED, nameLink.c_str(), notSpeakTime, muteReasonStr.c_str());
+
return true;
}
diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp
index 47cb5636672..0be5994e8ed 100644
--- a/src/server/scripts/Commands/cs_mmaps.cpp
+++ b/src/server/scripts/Commands/cs_mmaps.cpp
@@ -41,7 +41,7 @@ class mmaps_commandscript : public CommandScript
public:
mmaps_commandscript() : CommandScript("mmaps_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand mmapCommandTable[] =
{
@@ -98,7 +98,7 @@ public:
Movement::PointsArray const& pointPath = path.GetPath();
handler->PSendSysMessage("%s's path to %s:", target->GetName().c_str(), player->GetName().c_str());
handler->PSendSysMessage("Building: %s", useStraightPath ? "StraightPath" : "SmoothPath");
- handler->PSendSysMessage("Result: %s - Length: " SIZEFMTD " - Type: %u", (result ? "true" : "false"), pointPath.size(), path.GetPathType());
+ handler->PSendSysMessage("Result: %s - Length: %zu - Type: %u", (result ? "true" : "false"), pointPath.size(), path.GetPathType());
G3D::Vector3 const &start = path.GetStartPosition();
G3D::Vector3 const &end = path.GetEndPosition();
@@ -273,7 +273,7 @@ public:
if (!creatureList.empty())
{
- handler->PSendSysMessage("Found " SIZEFMTD " Creatures.", creatureList.size());
+ handler->PSendSysMessage("Found %zu Creatures.", creatureList.size());
uint32 paths = 0;
uint32 uStartTime = getMSTime();
diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp
index 4cd7228a24a..5dbe95b3e54 100644
--- a/src/server/scripts/Commands/cs_modify.cpp
+++ b/src/server/scripts/Commands/cs_modify.cpp
@@ -36,7 +36,7 @@ class modify_commandscript : public CommandScript
public:
modify_commandscript() : CommandScript("modify_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand modifyspeedCommandTable[] =
{
@@ -1020,7 +1020,7 @@ public:
}
else
{
- if (newmoney > MAX_MONEY_AMOUNT)
+ if (newmoney > static_cast<int32>(MAX_MONEY_AMOUNT))
newmoney = MAX_MONEY_AMOUNT;
handler->PSendSysMessage(LANG_YOU_TAKE_MONEY, abs(moneyToAdd), handler->GetNameLink(target).c_str());
@@ -1035,10 +1035,7 @@ public:
if (handler->needReportToTarget(target))
ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOURS_MONEY_GIVEN, handler->GetNameLink().c_str(), moneyToAdd);
- if (moneyToAdd >= MAX_MONEY_AMOUNT)
- moneyToAdd = MAX_MONEY_AMOUNT;
-
- if (targetMoney >= uint32(MAX_MONEY_AMOUNT) - moneyToAdd)
+ if (targetMoney >= MAX_MONEY_AMOUNT - moneyToAdd)
moneyToAdd -= targetMoney;
target->ModifyMoney(moneyToAdd);
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index a5b13301403..66988b499d2 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -43,6 +43,7 @@ struct EnumName
#define CREATE_NAMED_ENUM(VALUE) { VALUE, STRINGIZE(VALUE) }
#define NPCFLAG_COUNT 24
+#define FLAGS_EXTRA_COUNT 16
EnumName<NPCFlags, int32> const npcFlagTexts[NPCFLAG_COUNT] =
{
@@ -144,12 +145,32 @@ EnumName<UnitFlags> const unitFlags[MAX_UNIT_FLAGS] =
CREATE_NAMED_ENUM(UNIT_FLAG_UNK_31)
};
+EnumName<CreatureFlagsExtra> const flagsExtra[FLAGS_EXTRA_COUNT] =
+{
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_INSTANCE_BIND),
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_CIVILIAN),
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_PARRY),
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_PARRY_HASTEN),
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_BLOCK),
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_CRUSH),
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_XP_AT_KILL),
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_TRIGGER),
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_TAUNT),
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_WORLDEVENT),
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_GUARD),
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_CRIT),
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_SKILLGAIN),
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_TAUNT_DIMINISH),
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_ALL_DIMINISH),
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_DUNGEON_BOSS)
+};
+
class npc_commandscript : public CommandScript
{
public:
npc_commandscript() : CommandScript("npc_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand npcAddCommandTable[] =
{
@@ -226,14 +247,6 @@ public:
if (!charID)
return false;
- char* team = strtok(NULL, " ");
- int32 teamval = 0;
- if (team)
- teamval = atoi(team);
-
- if (teamval < 0)
- teamval = 0;
-
uint32 id = atoi(charID);
if (!sObjectMgr->GetCreatureTemplate(id))
return false;
@@ -265,7 +278,7 @@ public:
}
Creature* creature = new Creature();
- if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, 0, (uint32)teamval, x, y, z, o))
+ if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o))
{
delete creature;
return false;
@@ -596,17 +609,13 @@ public:
// Update in memory..
if (CreatureTemplate const* cinfo = creature->GetCreatureTemplate())
- {
- const_cast<CreatureTemplate*>(cinfo)->faction_A = factionId;
- const_cast<CreatureTemplate*>(cinfo)->faction_H = factionId;
- }
+ const_cast<CreatureTemplate*>(cinfo)->faction = factionId;
// ..and DB
PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_FACTION);
stmt->setUInt16(0, uint16(factionId));
- stmt->setUInt16(1, uint16(factionId));
- stmt->setUInt32(2, creature->GetEntry());
+ stmt->setUInt32(1, creature->GetEntry());
WorldDatabase.Execute(stmt);
@@ -727,6 +736,7 @@ public:
handler->PSendSysMessage(LANG_NPCINFO_LEVEL, target->getLevel());
handler->PSendSysMessage(LANG_NPCINFO_EQUIPMENT, target->GetCurrentEquipmentId(), target->GetOriginalEquipmentId());
handler->PSendSysMessage(LANG_NPCINFO_HEALTH, target->GetCreateHealth(), target->GetMaxHealth(), target->GetHealth());
+ handler->PSendSysMessage(LANG_NPCINFO_INHABIT_TYPE, cInfo->InhabitType);
handler->PSendSysMessage(LANG_NPCINFO_UNIT_FIELD_FLAGS, target->GetUInt32Value(UNIT_FIELD_FLAGS));
for (uint8 i = 0; i < MAX_UNIT_FLAGS; ++i)
@@ -741,6 +751,10 @@ public:
handler->PSendSysMessage(LANG_NPCINFO_ARMOR, target->GetArmor());
handler->PSendSysMessage(LANG_NPCINFO_POSITION, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ());
handler->PSendSysMessage(LANG_NPCINFO_AIINFO, target->GetAIName().c_str(), target->GetScriptName().c_str());
+ handler->PSendSysMessage(LANG_NPCINFO_FLAGS_EXTRA, cInfo->flags_extra);
+ for (uint8 i = 0; i < FLAGS_EXTRA_COUNT; ++i)
+ if (cInfo->flags_extra & flagsExtra[i].Value)
+ handler->PSendSysMessage("%s (0x%X)", flagsExtra[i].Name, flagsExtra[i].Value);
for (uint8 i = 0; i < NPCFLAG_COUNT; i++)
if (npcflags & npcFlagTexts[i].Value)
@@ -1389,7 +1403,7 @@ public:
// place pet before player
float x, y, z;
player->GetClosePoint (x, y, z, creatureTarget->GetObjectSize(), CONTACT_DISTANCE);
- pet->Relocate(x, y, z, M_PI-player->GetOrientation());
+ pet->Relocate(x, y, z, float(M_PI) - player->GetOrientation());
// set pet to defensive mode by default (some classes can't control controlled pets in fact).
pet->SetReactState(REACT_DEFENSIVE);
@@ -1444,8 +1458,8 @@ public:
FormationInfo* group_member;
group_member = new FormationInfo;
- group_member->follow_angle = (creature->GetAngle(chr) - chr->GetOrientation()) * 180 / M_PI;
- group_member->follow_dist = sqrtf(pow(chr->GetPositionX() - creature->GetPositionX(), int(2))+pow(chr->GetPositionY() - creature->GetPositionY(), int(2)));
+ group_member->follow_angle = (creature->GetAngle(chr) - chr->GetOrientation()) * 180 / float(M_PI);
+ group_member->follow_dist = std::sqrt(std::pow(chr->GetPositionX() - creature->GetPositionX(), 2.f) + std::pow(chr->GetPositionY() - creature->GetPositionY(), 2.f));
group_member->leaderGUID = leaderGUID;
group_member->groupAI = 0;
diff --git a/src/server/scripts/Commands/cs_pet.cpp b/src/server/scripts/Commands/cs_pet.cpp
index 1a5df88f144..82f99501a58 100644
--- a/src/server/scripts/Commands/cs_pet.cpp
+++ b/src/server/scripts/Commands/cs_pet.cpp
@@ -27,7 +27,7 @@ class pet_commandscript : public CommandScript
public:
pet_commandscript() : CommandScript("pet_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand petCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp
index 369a8e87289..6004cd0bc89 100644
--- a/src/server/scripts/Commands/cs_quest.cpp
+++ b/src/server/scripts/Commands/cs_quest.cpp
@@ -33,7 +33,7 @@ class quest_commandscript : public CommandScript
public:
quest_commandscript() : CommandScript("quest_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand questCommandTable[] =
{
@@ -91,13 +91,8 @@ public:
// ok, normal (creature/GO starting) quest
if (player->CanAddQuest(quest, true))
- {
player->AddQuestAndCheckCompletion(quest, NULL);
- if (player->CanCompleteQuest(entry))
- player->CompleteQuest(entry);
- }
-
return true;
}
diff --git a/src/server/scripts/Commands/cs_rbac.cpp b/src/server/scripts/Commands/cs_rbac.cpp
index df4ce993433..1c11ef0cd2a 100644
--- a/src/server/scripts/Commands/cs_rbac.cpp
+++ b/src/server/scripts/Commands/cs_rbac.cpp
@@ -320,7 +320,7 @@ public:
handler->PSendSysMessage(LANG_RBAC_LIST_ELEMENT, permission->GetId(), permission->GetName().c_str());
}
}
- handler->PSendSysMessage(LANG_RBAC_LIST_HEADER_DENIED, command->rbac->GetId(), command->rbac->GetName().c_str());
+ handler->PSendSysMessage(LANG_RBAC_LIST_HEADER_BY_SEC_LEVEL, command->rbac->GetId(), command->rbac->GetName().c_str(), command->rbac->GetSecurityLevel());
rbac::RBACPermissionContainer const& defaultPermissions = sAccountMgr->GetRBACDefaultPermissions(command->rbac->GetSecurityLevel());
if (defaultPermissions.empty())
handler->PSendSysMessage("%s", handler->GetTrinityString(LANG_RBAC_LIST_EMPTY));
@@ -369,8 +369,8 @@ public:
handler->PSendSysMessage("%s", handler->GetTrinityString(LANG_RBAC_LIST_PERMS_LINKED_HEADER));
rbac::RBACPermissionContainer const& permissions = permission->GetLinkedPermissions();
for (rbac::RBACPermissionContainer::const_iterator it = permissions.begin(); it != permissions.end(); ++it)
- if (rbac::RBACPermission const* permission = sAccountMgr->GetRBACPermission(*it))
- handler->PSendSysMessage(LANG_RBAC_LIST_ELEMENT, permission->GetId(), permission->GetName().c_str());
+ if (rbac::RBACPermission const* rbacPermission = sAccountMgr->GetRBACPermission(*it))
+ handler->PSendSysMessage(LANG_RBAC_LIST_ELEMENT, rbacPermission->GetId(), rbacPermission->GetName().c_str());
}
return true;
diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp
index 7e759a788f5..70aacbfc227 100644
--- a/src/server/scripts/Commands/cs_reload.cpp
+++ b/src/server/scripts/Commands/cs_reload.cpp
@@ -25,6 +25,7 @@ EndScriptData */
#include "AccountMgr.h"
#include "AchievementMgr.h"
#include "AuctionHouseMgr.h"
+#include "BattlegroundMgr.h"
#include "Chat.h"
#include "CreatureTextMgr.h"
#include "DisableMgr.h"
@@ -46,121 +47,123 @@ class reload_commandscript : public CommandScript
public:
reload_commandscript() : CommandScript("reload_commandscript") { }
- ChatCommand* GetCommands() const
+ ChatCommand* GetCommands() const override
{
static ChatCommand reloadAllCommandTable[] =
{
- { "achievement", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_ACHIEVEMENT, true, &HandleReloadAllAchievementCommand, "", NULL },
- { "area", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_AREA, true, &HandleReloadAllAreaCommand, "", NULL },
- { "gossips", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_GOSSIP, true, &HandleReloadAllGossipsCommand, "", NULL },
- { "item", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_ITEM, true, &HandleReloadAllItemCommand, "", NULL },
- { "locales", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_LOCALES, true, &HandleReloadAllLocalesCommand, "", NULL },
- { "loot", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_LOOT, true, &HandleReloadAllLootCommand, "", NULL },
- { "npc", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_NPC, true, &HandleReloadAllNpcCommand, "", NULL },
- { "quest", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_QUEST, true, &HandleReloadAllQuestCommand, "", NULL },
- { "scripts", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_SCRIPTS, true, &HandleReloadAllScriptsCommand, "", NULL },
- { "spell", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_SPELL, true, &HandleReloadAllSpellCommand, "", NULL },
- { "", rbac::RBAC_PERM_COMMAND_RELOAD_ALL, true, &HandleReloadAllCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "achievement", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_ACHIEVEMENT, true, &HandleReloadAllAchievementCommand, "", NULL },
+ { "area", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_AREA, true, &HandleReloadAllAreaCommand, "", NULL },
+ { "gossips", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_GOSSIP, true, &HandleReloadAllGossipsCommand, "", NULL },
+ { "item", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_ITEM, true, &HandleReloadAllItemCommand, "", NULL },
+ { "locales", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_LOCALES, true, &HandleReloadAllLocalesCommand, "", NULL },
+ { "loot", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_LOOT, true, &HandleReloadAllLootCommand, "", NULL },
+ { "npc", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_NPC, true, &HandleReloadAllNpcCommand, "", NULL },
+ { "quest", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_QUEST, true, &HandleReloadAllQuestCommand, "", NULL },
+ { "scripts", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_SCRIPTS, true, &HandleReloadAllScriptsCommand, "", NULL },
+ { "spell", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_SPELL, true, &HandleReloadAllSpellCommand, "", NULL },
+ { "", rbac::RBAC_PERM_COMMAND_RELOAD_ALL, true, &HandleReloadAllCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand reloadCommandTable[] =
{
- { "auctions", rbac::RBAC_PERM_COMMAND_RELOAD_AUCTIONS, true, &HandleReloadAuctionsCommand, "", NULL },
- { "access_requirement", rbac::RBAC_PERM_COMMAND_RELOAD_ACCESS_REQUIREMENT, true, &HandleReloadAccessRequirementCommand, "", NULL },
- { "achievement_criteria_data", rbac::RBAC_PERM_COMMAND_RELOAD_ACHIEVEMENT_CRITERIA_DATA, true, &HandleReloadAchievementCriteriaDataCommand, "", NULL },
- { "achievement_reward", rbac::RBAC_PERM_COMMAND_RELOAD_ACHIEVEMENT_REWARD, true, &HandleReloadAchievementRewardCommand, "", NULL },
- { "all", rbac::RBAC_PERM_COMMAND_RELOAD_ALL, true, NULL, "", reloadAllCommandTable },
- { "areatrigger_involvedrelation", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_INVOLVEDRELATION, true, &HandleReloadQuestAreaTriggersCommand, "", NULL },
- { "areatrigger_tavern", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_TAVERN, true, &HandleReloadAreaTriggerTavernCommand, "", NULL },
- { "areatrigger_teleport", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_TELEPORT, true, &HandleReloadAreaTriggerTeleportCommand, "", NULL },
- { "autobroadcast", rbac::RBAC_PERM_COMMAND_RELOAD_AUTOBROADCAST, true, &HandleReloadAutobroadcastCommand, "", NULL },
- { "command", rbac::RBAC_PERM_COMMAND_RELOAD_COMMAND, true, &HandleReloadCommandCommand, "", NULL },
- { "conditions", rbac::RBAC_PERM_COMMAND_RELOAD_CONDITIONS, true, &HandleReloadConditions, "", NULL },
- { "config", rbac::RBAC_PERM_COMMAND_RELOAD_CONFIG, true, &HandleReloadConfigCommand, "", NULL },
- { "creature_text", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_TEXT, true, &HandleReloadCreatureText, "", NULL },
- { "creature_questender", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_QUESTENDER, true, &HandleReloadCreatureQuestEnderCommand, "", NULL },
- { "creature_linked_respawn", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_LINKED_RESPAWN, true, &HandleReloadLinkedRespawnCommand, "", NULL },
- { "creature_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesCreatureCommand, "", NULL },
- { "creature_onkill_reputation", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_ONKILL_REPUTATION, true, &HandleReloadOnKillReputationCommand, "", NULL },
- { "creature_queststarter", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_QUESTSTARTER, true, &HandleReloadCreatureQuestStarterCommand, "", NULL },
- { "creature_summon_groups", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_SUMMON_GROUPS, true, &HandleReloadCreatureSummonGroupsCommand, "", NULL },
- { "creature_template", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_TEMPLATE, true, &HandleReloadCreatureTemplateCommand, "", NULL },
- //{ "db_script_string", rbac::RBAC_PERM_COMMAND_RELOAD_, true, &HandleReloadDbScriptStringCommand, "", NULL },
- { "disables", rbac::RBAC_PERM_COMMAND_RELOAD_DISABLES, true, &HandleReloadDisablesCommand, "", NULL },
- { "disenchant_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_DISENCHANT_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesDisenchantCommand, "", NULL },
- { "event_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_EVENT_SCRIPTS, true, &HandleReloadEventScriptsCommand, "", NULL },
- { "fishing_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_FISHING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesFishingCommand, "", NULL },
- { "game_graveyard_zone", rbac::RBAC_PERM_COMMAND_RELOAD_GAME_GRAVEYARD_ZONE, true, &HandleReloadGameGraveyardZoneCommand, "", NULL },
- { "game_tele", rbac::RBAC_PERM_COMMAND_RELOAD_GAME_TELE, true, &HandleReloadGameTeleCommand, "", NULL },
- { "gameobject_questender", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTENDER, true, &HandleReloadGOQuestEnderCommand, "", NULL },
- { "gameobject_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUEST_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesGameobjectCommand, "", NULL },
- { "gameobject_queststarter", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTSTARTER, true, &HandleReloadGOQuestStarterCommand, "", NULL },
- { "gm_tickets", rbac::RBAC_PERM_COMMAND_RELOAD_GM_TICKETS, true, &HandleReloadGMTicketsCommand, "", NULL },
- { "gossip_menu", rbac::RBAC_PERM_COMMAND_RELOAD_GOSSIP_MENU, true, &HandleReloadGossipMenuCommand, "", NULL },
- { "gossip_menu_option", rbac::RBAC_PERM_COMMAND_RELOAD_GOSSIP_MENU_OPTION, true, &HandleReloadGossipMenuOptionCommand, "", NULL },
- { "item_enchantment_template", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_ENCHANTMENT_TEMPLATE, true, &HandleReloadItemEnchantementsCommand, "", NULL },
- { "item_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesItemCommand, "", NULL },
- { "item_set_names", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_SET_NAMES, true, &HandleReloadItemSetNamesCommand, "", NULL },
- { "lfg_dungeon_rewards", rbac::RBAC_PERM_COMMAND_RELOAD_LFG_DUNGEON_REWARDS, true, &HandleReloadLfgRewardsCommand, "", NULL },
- { "locales_achievement_reward", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ACHIEVEMENT_REWARD, true, &HandleReloadLocalesAchievementRewardCommand, "", NULL },
- { "locales_creature", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_CRETURE, true, &HandleReloadLocalesCreatureCommand, "", NULL },
- { "locales_creature_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_CRETURE_TEXT, true, &HandleReloadLocalesCreatureTextCommand, "", NULL },
- { "locales_gameobject", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_GAMEOBJECT, true, &HandleReloadLocalesGameobjectCommand, "", NULL },
- { "locales_gossip_menu_option", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_GOSSIP_MENU_OPTION, true, &HandleReloadLocalesGossipMenuOptionCommand, "", NULL },
- { "locales_item", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ITEM, true, &HandleReloadLocalesItemCommand, "", NULL },
- { "locales_item_set_name", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ITEM_SET_NAME, true, &HandleReloadLocalesItemSetNameCommand, "", NULL },
- { "locales_npc_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_NPC_TEXT, true, &HandleReloadLocalesNpcTextCommand, "", NULL },
- { "locales_page_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_PAGE_TEXT, true, &HandleReloadLocalesPageTextCommand, "", NULL },
- { "locales_points_of_interest", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_POINTS_OF_INTEREST, true, &HandleReloadLocalesPointsOfInterestCommand, "", NULL },
- { "locales_quest", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_QUEST, true, &HandleReloadLocalesQuestCommand, "", NULL },
- { "mail_level_reward", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LEVEL_REWARD, true, &HandleReloadMailLevelRewardCommand, "", NULL },
- { "mail_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMailCommand, "", NULL },
- { "milling_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MILLING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMillingCommand, "", NULL },
- { "npc_spellclick_spells", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_SPELLCLICK_SPELLS, true, &HandleReloadSpellClickSpellsCommand, "", NULL},
- { "npc_trainer", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_TRAINER, true, &HandleReloadNpcTrainerCommand, "", NULL },
- { "npc_vendor", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_VENDOR, true, &HandleReloadNpcVendorCommand, "", NULL },
- { "page_text", rbac::RBAC_PERM_COMMAND_RELOAD_PAGE_TEXT, true, &HandleReloadPageTextsCommand, "", NULL },
- { "pickpocketing_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PICKPOCKETING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesPickpocketingCommand, "", NULL},
- { "points_of_interest", rbac::RBAC_PERM_COMMAND_RELOAD_POINTS_OF_INTEREST, true, &HandleReloadPointsOfInterestCommand, "", NULL },
- { "prospecting_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PROSPECTING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesProspectingCommand, "", NULL },
- { "quest_poi", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_POI, true, &HandleReloadQuestPOICommand, "", NULL },
- { "quest_template", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_TEMPLATE, true, &HandleReloadQuestTemplateCommand, "", NULL },
- { "rbac", rbac::RBAC_PERM_COMMAND_RELOAD_RBAC, true, &HandleReloadRBACCommand, "", NULL },
- { "reference_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_REFERENCE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesReferenceCommand, "", NULL },
- { "reserved_name", rbac::RBAC_PERM_COMMAND_RELOAD_RESERVED_NAME, true, &HandleReloadReservedNameCommand, "", NULL },
- { "reputation_reward_rate", rbac::RBAC_PERM_COMMAND_RELOAD_REPUTATION_REWARD_RATE, true, &HandleReloadReputationRewardRateCommand, "", NULL },
- { "reputation_spillover_template", rbac::RBAC_PERM_COMMAND_RELOAD_SPILLOVER_TEMPLATE, true, &HandleReloadReputationRewardRateCommand, "", NULL },
- { "skill_discovery_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_DISCOVERY_TEMPLATE, true, &HandleReloadSkillDiscoveryTemplateCommand, "", NULL },
- { "skill_extra_item_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_EXTRA_ITEM_TEMPLATE, true, &HandleReloadSkillExtraItemTemplateCommand, "", NULL },
- { "skill_fishing_base_level", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_FISHING_BASE_LEVEL, true, &HandleReloadSkillFishingBaseLevelCommand, "", NULL },
- { "skinning_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKINNING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSkinningCommand, "", NULL },
- { "smart_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_SMART_SCRIPTS, true, &HandleReloadSmartScripts, "", NULL },
- { "spell_required", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_REQUIRED, true, &HandleReloadSpellRequiredCommand, "", NULL },
- { "spell_area", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_AREA, true, &HandleReloadSpellAreaCommand, "", NULL },
- { "spell_bonus_data", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_BONUS_DATA, true, &HandleReloadSpellBonusesCommand, "", NULL },
- { "spell_group", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP, true, &HandleReloadSpellGroupsCommand, "", NULL },
- { "spell_learn_spell", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LEARN_SPELL, true, &HandleReloadSpellLearnSpellCommand, "", NULL },
- { "spell_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSpellCommand, "", NULL },
- { "spell_linked_spell", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LINKED_SPELL, true, &HandleReloadSpellLinkedSpellCommand, "", NULL },
- { "spell_pet_auras", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PET_AURAS, true, &HandleReloadSpellPetAurasCommand, "", NULL },
- { "spell_proc_event", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PROC_EVENT, true, &HandleReloadSpellProcEventCommand, "", NULL },
- { "spell_proc", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PROC, true, &HandleReloadSpellProcsCommand, "", NULL },
- { "spell_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_SCRIPTS, true, &HandleReloadSpellScriptsCommand, "", NULL },
- { "spell_target_position", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_TARGET_POSITION, true, &HandleReloadSpellTargetPositionCommand, "", NULL },
- { "spell_threats", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_THREATS, true, &HandleReloadSpellThreatsCommand, "", NULL },
- { "spell_group_stack_rules", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP_STACK_RULES, true, &HandleReloadSpellGroupStackRulesCommand, "", NULL },
- { "trinity_string", rbac::RBAC_PERM_COMMAND_RELOAD_TRINITY_STRING, true, &HandleReloadTrinityStringCommand, "", NULL },
- { "warden_action", rbac::RBAC_PERM_COMMAND_RELOAD_WARDEN_ACTION, true, &HandleReloadWardenactionCommand, "", NULL },
- { "waypoint_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_SCRIPTS, true, &HandleReloadWpScriptsCommand, "", NULL },
- { "waypoint_data", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_DATA, true, &HandleReloadWpCommand, "", NULL },
- { "vehicle_accessory", rbac::RBAC_PERM_COMMAND_RELOAD_VEHICLE_ACCESORY, true, &HandleReloadVehicleAccessoryCommand, "", NULL },
- { "vehicle_template_accessory", rbac::RBAC_PERM_COMMAND_RELOAD_VEHICLE_TEMPLATE_ACCESSORY, true, &HandleReloadVehicleTemplateAccessoryCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "auctions", rbac::RBAC_PERM_COMMAND_RELOAD_AUCTIONS, true, &HandleReloadAuctionsCommand, "", NULL },
+ { "access_requirement", rbac::RBAC_PERM_COMMAND_RELOAD_ACCESS_REQUIREMENT, true, &HandleReloadAccessRequirementCommand, "", NULL },
+ { "achievement_criteria_data", rbac::RBAC_PERM_COMMAND_RELOAD_ACHIEVEMENT_CRITERIA_DATA, true, &HandleReloadAchievementCriteriaDataCommand, "", NULL },
+ { "achievement_reward", rbac::RBAC_PERM_COMMAND_RELOAD_ACHIEVEMENT_REWARD, true, &HandleReloadAchievementRewardCommand, "", NULL },
+ { "all", rbac::RBAC_PERM_COMMAND_RELOAD_ALL, true, NULL, "", reloadAllCommandTable },
+ { "areatrigger_involvedrelation", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_INVOLVEDRELATION, true, &HandleReloadQuestAreaTriggersCommand, "", NULL },
+ { "areatrigger_tavern", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_TAVERN, true, &HandleReloadAreaTriggerTavernCommand, "", NULL },
+ { "areatrigger_teleport", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_TELEPORT, true, &HandleReloadAreaTriggerTeleportCommand, "", NULL },
+ { "autobroadcast", rbac::RBAC_PERM_COMMAND_RELOAD_AUTOBROADCAST, true, &HandleReloadAutobroadcastCommand, "", NULL },
+ { "battleground_template", rbac::RBAC_PERM_COMMAND_RELOAD_BATTLEGROUND_TEMPLATE, true, &HandleReloadBattlegroundTemplate, "", NULL },
+ { "broadcast_text", rbac::RBAC_PERM_COMMAND_RELOAD_BROADCAST_TEXT, true, &HandleReloadBroadcastTextCommand, "", NULL },
+ { "command", rbac::RBAC_PERM_COMMAND_RELOAD_COMMAND, true, &HandleReloadCommandCommand, "", NULL },
+ { "conditions", rbac::RBAC_PERM_COMMAND_RELOAD_CONDITIONS, true, &HandleReloadConditions, "", NULL },
+ { "config", rbac::RBAC_PERM_COMMAND_RELOAD_CONFIG, true, &HandleReloadConfigCommand, "", NULL },
+ { "creature_text", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_TEXT, true, &HandleReloadCreatureText, "", NULL },
+ { "creature_questender", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_QUESTENDER, true, &HandleReloadCreatureQuestEnderCommand, "", NULL },
+ { "creature_linked_respawn", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_LINKED_RESPAWN, true, &HandleReloadLinkedRespawnCommand, "", NULL },
+ { "creature_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesCreatureCommand, "", NULL },
+ { "creature_onkill_reputation", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_ONKILL_REPUTATION, true, &HandleReloadOnKillReputationCommand, "", NULL },
+ { "creature_queststarter", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_QUESTSTARTER, true, &HandleReloadCreatureQuestStarterCommand, "", NULL },
+ { "creature_summon_groups", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_SUMMON_GROUPS, true, &HandleReloadCreatureSummonGroupsCommand, "", NULL },
+ { "creature_template", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_TEMPLATE, true, &HandleReloadCreatureTemplateCommand, "", NULL },
+ //{ "db_script_string", rbac::RBAC_PERM_COMMAND_RELOAD_, true, &HandleReloadDbScriptStringCommand, "", NULL },
+ { "disables", rbac::RBAC_PERM_COMMAND_RELOAD_DISABLES, true, &HandleReloadDisablesCommand, "", NULL },
+ { "disenchant_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_DISENCHANT_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesDisenchantCommand, "", NULL },
+ { "event_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_EVENT_SCRIPTS, true, &HandleReloadEventScriptsCommand, "", NULL },
+ { "fishing_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_FISHING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesFishingCommand, "", NULL },
+ { "game_graveyard_zone", rbac::RBAC_PERM_COMMAND_RELOAD_GAME_GRAVEYARD_ZONE, true, &HandleReloadGameGraveyardZoneCommand, "", NULL },
+ { "game_tele", rbac::RBAC_PERM_COMMAND_RELOAD_GAME_TELE, true, &HandleReloadGameTeleCommand, "", NULL },
+ { "gameobject_questender", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTENDER, true, &HandleReloadGOQuestEnderCommand, "", NULL },
+ { "gameobject_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUEST_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesGameobjectCommand, "", NULL },
+ { "gameobject_queststarter", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTSTARTER, true, &HandleReloadGOQuestStarterCommand, "", NULL },
+ { "gm_tickets", rbac::RBAC_PERM_COMMAND_RELOAD_GM_TICKETS, true, &HandleReloadGMTicketsCommand, "", NULL },
+ { "gossip_menu", rbac::RBAC_PERM_COMMAND_RELOAD_GOSSIP_MENU, true, &HandleReloadGossipMenuCommand, "", NULL },
+ { "gossip_menu_option", rbac::RBAC_PERM_COMMAND_RELOAD_GOSSIP_MENU_OPTION, true, &HandleReloadGossipMenuOptionCommand, "", NULL },
+ { "item_enchantment_template", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_ENCHANTMENT_TEMPLATE, true, &HandleReloadItemEnchantementsCommand, "", NULL },
+ { "item_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesItemCommand, "", NULL },
+ { "item_set_names", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_SET_NAMES, true, &HandleReloadItemSetNamesCommand, "", NULL },
+ { "lfg_dungeon_rewards", rbac::RBAC_PERM_COMMAND_RELOAD_LFG_DUNGEON_REWARDS, true, &HandleReloadLfgRewardsCommand, "", NULL },
+ { "locales_achievement_reward", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ACHIEVEMENT_REWARD, true, &HandleReloadLocalesAchievementRewardCommand, "", NULL },
+ { "locales_creature", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_CRETURE, true, &HandleReloadLocalesCreatureCommand, "", NULL },
+ { "locales_creature_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_CRETURE_TEXT, true, &HandleReloadLocalesCreatureTextCommand, "", NULL },
+ { "locales_gameobject", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_GAMEOBJECT, true, &HandleReloadLocalesGameobjectCommand, "", NULL },
+ { "locales_gossip_menu_option", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_GOSSIP_MENU_OPTION, true, &HandleReloadLocalesGossipMenuOptionCommand, "", NULL },
+ { "locales_item", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ITEM, true, &HandleReloadLocalesItemCommand, "", NULL },
+ { "locales_item_set_name", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ITEM_SET_NAME, true, &HandleReloadLocalesItemSetNameCommand, "", NULL },
+ { "locales_npc_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_NPC_TEXT, true, &HandleReloadLocalesNpcTextCommand, "", NULL },
+ { "locales_page_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_PAGE_TEXT, true, &HandleReloadLocalesPageTextCommand, "", NULL },
+ { "locales_points_of_interest", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_POINTS_OF_INTEREST, true, &HandleReloadLocalesPointsOfInterestCommand, "", NULL },
+ { "locales_quest", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_QUEST, true, &HandleReloadLocalesQuestCommand, "", NULL },
+ { "mail_level_reward", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LEVEL_REWARD, true, &HandleReloadMailLevelRewardCommand, "", NULL },
+ { "mail_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMailCommand, "", NULL },
+ { "milling_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MILLING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMillingCommand, "", NULL },
+ { "npc_spellclick_spells", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_SPELLCLICK_SPELLS, true, &HandleReloadSpellClickSpellsCommand, "", NULL },
+ { "npc_trainer", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_TRAINER, true, &HandleReloadNpcTrainerCommand, "", NULL },
+ { "npc_vendor", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_VENDOR, true, &HandleReloadNpcVendorCommand, "", NULL },
+ { "page_text", rbac::RBAC_PERM_COMMAND_RELOAD_PAGE_TEXT, true, &HandleReloadPageTextsCommand, "", NULL },
+ { "pickpocketing_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PICKPOCKETING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesPickpocketingCommand, "", NULL },
+ { "points_of_interest", rbac::RBAC_PERM_COMMAND_RELOAD_POINTS_OF_INTEREST, true, &HandleReloadPointsOfInterestCommand, "", NULL },
+ { "prospecting_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PROSPECTING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesProspectingCommand, "", NULL },
+ { "quest_poi", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_POI, true, &HandleReloadQuestPOICommand, "", NULL },
+ { "quest_template", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_TEMPLATE, true, &HandleReloadQuestTemplateCommand, "", NULL },
+ { "rbac", rbac::RBAC_PERM_COMMAND_RELOAD_RBAC, true, &HandleReloadRBACCommand, "", NULL },
+ { "reference_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_REFERENCE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesReferenceCommand, "", NULL },
+ { "reserved_name", rbac::RBAC_PERM_COMMAND_RELOAD_RESERVED_NAME, true, &HandleReloadReservedNameCommand, "", NULL },
+ { "reputation_reward_rate", rbac::RBAC_PERM_COMMAND_RELOAD_REPUTATION_REWARD_RATE, true, &HandleReloadReputationRewardRateCommand, "", NULL },
+ { "reputation_spillover_template", rbac::RBAC_PERM_COMMAND_RELOAD_SPILLOVER_TEMPLATE, true, &HandleReloadReputationRewardRateCommand, "", NULL },
+ { "skill_discovery_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_DISCOVERY_TEMPLATE, true, &HandleReloadSkillDiscoveryTemplateCommand, "", NULL },
+ { "skill_extra_item_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_EXTRA_ITEM_TEMPLATE, true, &HandleReloadSkillExtraItemTemplateCommand, "", NULL },
+ { "skill_fishing_base_level", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_FISHING_BASE_LEVEL, true, &HandleReloadSkillFishingBaseLevelCommand, "", NULL },
+ { "skinning_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKINNING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSkinningCommand, "", NULL },
+ { "smart_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_SMART_SCRIPTS, true, &HandleReloadSmartScripts, "", NULL },
+ { "spell_required", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_REQUIRED, true, &HandleReloadSpellRequiredCommand, "", NULL },
+ { "spell_area", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_AREA, true, &HandleReloadSpellAreaCommand, "", NULL },
+ { "spell_bonus_data", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_BONUS_DATA, true, &HandleReloadSpellBonusesCommand, "", NULL },
+ { "spell_group", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP, true, &HandleReloadSpellGroupsCommand, "", NULL },
+ { "spell_learn_spell", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LEARN_SPELL, true, &HandleReloadSpellLearnSpellCommand, "", NULL },
+ { "spell_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSpellCommand, "", NULL },
+ { "spell_linked_spell", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LINKED_SPELL, true, &HandleReloadSpellLinkedSpellCommand, "", NULL },
+ { "spell_pet_auras", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PET_AURAS, true, &HandleReloadSpellPetAurasCommand, "", NULL },
+ { "spell_proc_event", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PROC_EVENT, true, &HandleReloadSpellProcEventCommand, "", NULL },
+ { "spell_proc", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PROC, true, &HandleReloadSpellProcsCommand, "", NULL },
+ { "spell_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_SCRIPTS, true, &HandleReloadSpellScriptsCommand, "", NULL },
+ { "spell_target_position", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_TARGET_POSITION, true, &HandleReloadSpellTargetPositionCommand, "", NULL },
+ { "spell_threats", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_THREATS, true, &HandleReloadSpellThreatsCommand, "", NULL },
+ { "spell_group_stack_rules", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP_STACK_RULES, true, &HandleReloadSpellGroupStackRulesCommand, "", NULL },
+ { "trinity_string", rbac::RBAC_PERM_COMMAND_RELOAD_TRINITY_STRING, true, &HandleReloadTrinityStringCommand, "", NULL },
+ { "warden_action", rbac::RBAC_PERM_COMMAND_RELOAD_WARDEN_ACTION, true, &HandleReloadWardenactionCommand, "", NULL },
+ { "waypoint_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_SCRIPTS, true, &HandleReloadWpScriptsCommand, "", NULL },
+ { "waypoint_data", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_DATA, true, &HandleReloadWpCommand, "", NULL },
+ { "vehicle_accessory", rbac::RBAC_PERM_COMMAND_RELOAD_VEHICLE_ACCESORY, true, &HandleReloadVehicleAccessoryCommand, "", NULL },
+ { "vehicle_template_accessory", rbac::RBAC_PERM_COMMAND_RELOAD_VEHICLE_TEMPLATE_ACCESSORY, true, &HandleReloadVehicleTemplateAccessoryCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "reload", rbac::RBAC_PERM_COMMAND_RELOAD, true, NULL, "", reloadCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "reload", rbac::RBAC_PERM_COMMAND_RELOAD, true, NULL, "", reloadCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -199,6 +202,7 @@ public:
HandleReloadVehicleTemplateAccessoryCommand(handler, "");
HandleReloadAutobroadcastCommand(handler, "");
+ HandleReloadBattlegroundTemplate(handler, "");
return true;
}
@@ -375,6 +379,23 @@ public:
return true;
}
+ static bool HandleReloadBattlegroundTemplate(ChatHandler* handler, char const* /*args*/)
+ {
+ TC_LOG_INFO("misc", "Re-Loading Battleground Templates...");
+ sBattlegroundMgr->LoadBattlegroundTemplates();
+ handler->SendGlobalGMSysMessage("DB table `battleground_template` reloaded.");
+ return true;
+ }
+
+ static bool HandleReloadBroadcastTextCommand(ChatHandler* handler, const char* /*args*/)
+ {
+ TC_LOG_INFO("misc", "Re-Loading Broadcast texts...");
+ sObjectMgr->LoadBroadcastTexts();
+ sObjectMgr->LoadBroadcastTextLocales();
+ handler->SendGlobalGMSysMessage("DB table `broadcast_text` reloaded.");
+ return true;
+ }
+
static bool HandleReloadCommandCommand(ChatHandler* handler, const char* /*args*/)
{
handler->SetLoadCommandTable(true);
@@ -419,7 +440,7 @@ public:
continue;
}
- CreatureTemplate* cInfo = const_cast<CreatureTemplate*>(sObjectMgr->GetCreatureTemplate(entry));
+ CreatureTemplate const* cInfo = sObjectMgr->GetCreatureTemplate(entry);
if (!cInfo)
{
handler->PSendSysMessage(LANG_COMMAND_CREATURESTORAGE_NOTFOUND, entry);
@@ -429,90 +450,7 @@ public:
TC_LOG_INFO("misc", "Reloading creature template entry %u", entry);
Field* fields = result->Fetch();
-
- cInfo->DifficultyEntry[0] = fields[0].GetUInt32();
- cInfo->DifficultyEntry[1] = fields[1].GetUInt32();
- cInfo->DifficultyEntry[2] = fields[2].GetUInt32();
- cInfo->KillCredit[0] = fields[3].GetUInt32();
- cInfo->KillCredit[1] = fields[4].GetUInt32();
- cInfo->Modelid1 = fields[5].GetUInt32();
- cInfo->Modelid2 = fields[6].GetUInt32();
- cInfo->Modelid3 = fields[7].GetUInt32();
- cInfo->Modelid4 = fields[8].GetUInt32();
- cInfo->Name = fields[9].GetString();
- cInfo->SubName = fields[10].GetString();
- cInfo->IconName = fields[11].GetString();
- cInfo->GossipMenuId = fields[12].GetUInt32();
- cInfo->minlevel = fields[13].GetUInt8();
- cInfo->maxlevel = fields[14].GetUInt8();
- cInfo->expansion = fields[15].GetUInt16();
- cInfo->faction_A = fields[16].GetUInt16();
- cInfo->faction_H = fields[17].GetUInt16();
- cInfo->npcflag = fields[18].GetUInt32();
- cInfo->speed_walk = fields[19].GetFloat();
- cInfo->speed_run = fields[20].GetFloat();
- cInfo->scale = fields[21].GetFloat();
- cInfo->rank = fields[22].GetUInt8();
- cInfo->mindmg = fields[23].GetFloat();
- cInfo->maxdmg = fields[24].GetFloat();
- cInfo->dmgschool = fields[25].GetUInt8();
- cInfo->attackpower = fields[26].GetUInt32();
- cInfo->dmg_multiplier = fields[27].GetFloat();
- cInfo->baseattacktime = fields[28].GetUInt32();
- cInfo->rangeattacktime = fields[29].GetUInt32();
- cInfo->unit_class = fields[30].GetUInt8();
- cInfo->unit_flags = fields[31].GetUInt32();
- cInfo->unit_flags2 = fields[32].GetUInt32();
- cInfo->dynamicflags = fields[33].GetUInt32();
- cInfo->family = fields[34].GetUInt8();
- cInfo->trainer_type = fields[35].GetUInt8();
- cInfo->trainer_spell = fields[36].GetUInt32();
- cInfo->trainer_class = fields[37].GetUInt8();
- cInfo->trainer_race = fields[38].GetUInt8();
- cInfo->minrangedmg = fields[39].GetFloat();
- cInfo->maxrangedmg = fields[40].GetFloat();
- cInfo->rangedattackpower = fields[41].GetUInt16();
- cInfo->type = fields[42].GetUInt8();
- cInfo->type_flags = fields[43].GetUInt32();
- cInfo->lootid = fields[44].GetUInt32();
- cInfo->pickpocketLootId = fields[45].GetUInt32();
- cInfo->SkinLootId = fields[46].GetUInt32();
-
- for (uint8 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i)
- cInfo->resistance[i] = fields[47 + i -1].GetUInt16();
-
- cInfo->spells[0] = fields[53].GetUInt32();
- cInfo->spells[1] = fields[54].GetUInt32();
- cInfo->spells[2] = fields[55].GetUInt32();
- cInfo->spells[3] = fields[56].GetUInt32();
- cInfo->spells[4] = fields[57].GetUInt32();
- cInfo->spells[5] = fields[58].GetUInt32();
- cInfo->spells[6] = fields[59].GetUInt32();
- cInfo->spells[7] = fields[60].GetUInt32();
- cInfo->PetSpellDataId = fields[61].GetUInt32();
- cInfo->VehicleId = fields[62].GetUInt32();
- cInfo->mingold = fields[63].GetUInt32();
- cInfo->maxgold = fields[64].GetUInt32();
- cInfo->AIName = fields[65].GetString();
- cInfo->MovementType = fields[66].GetUInt8();
- cInfo->InhabitType = fields[67].GetUInt8();
- cInfo->HoverHeight = fields[68].GetFloat();
- cInfo->ModHealth = fields[69].GetFloat();
- cInfo->ModMana = fields[70].GetFloat();
- cInfo->ModArmor = fields[71].GetFloat();
- cInfo->RacialLeader = fields[72].GetBool();
- cInfo->questItems[0] = fields[73].GetUInt32();
- cInfo->questItems[1] = fields[74].GetUInt32();
- cInfo->questItems[2] = fields[75].GetUInt32();
- cInfo->questItems[3] = fields[76].GetUInt32();
- cInfo->questItems[4] = fields[77].GetUInt32();
- cInfo->questItems[5] = fields[78].GetUInt32();
- cInfo->movementId = fields[79].GetUInt32();
- cInfo->RegenHealth = fields[80].GetBool();
- cInfo->MechanicImmuneMask = fields[81].GetUInt32();
- cInfo->flags_extra = fields[82].GetUInt32();
- cInfo->ScriptID = sObjectMgr->GetScriptId(fields[83].GetCString());
-
+ sObjectMgr->LoadCreatureTemplate(fields);
sObjectMgr->CheckCreatureTemplate(cInfo);
}
diff --git a/src/server/scripts/Commands/cs_reset.cpp b/src/server/scripts/Commands/cs_reset.cpp
index 4299e690989..00a669609f9 100644
--- a/src/server/scripts/Commands/cs_reset.cpp
+++ b/src/server/scripts/Commands/cs_reset.cpp
@@ -35,7 +35,7 @@ class reset_commandscript : public CommandScript
public:
reset_commandscript() : CommandScript("reset_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand resetCommandTable[] =
{
@@ -165,7 +165,7 @@ public:
if (target)
{
- target->resetSpells(/* bool myClassOnly */);
+ target->ResetSpells(/* bool myClassOnly */);
ChatHandler(target->GetSession()).SendSysMessage(LANG_RESET_SPELLS);
if (!handler->GetSession() || handler->GetSession()->GetPlayer() != target)
@@ -233,7 +233,7 @@ public:
if (target)
{
- target->resetTalents(true);
+ target->ResetTalents(true);
target->SendTalentsInfoData(false);
ChatHandler(target->GetSession()).SendSysMessage(LANG_RESET_TALENTS);
if (!handler->GetSession() || handler->GetSession()->GetPlayer() != target)
@@ -297,7 +297,7 @@ public:
stmt->setUInt16(0, uint16(atLogin));
CharacterDatabase.Execute(stmt);
- TRINITY_READ_GUARD(HashMapHolder<Player>::LockType, *HashMapHolder<Player>::GetLock());
+ boost::shared_lock<boost::shared_mutex> lock(*HashMapHolder<Player>::GetLock());
HashMapHolder<Player>::MapType const& plist = sObjectAccessor->GetPlayers();
for (HashMapHolder<Player>::MapType::const_iterator itr = plist.begin(); itr != plist.end(); ++itr)
itr->second->SetAtLoginFlag(atLogin);
diff --git a/src/server/scripts/Commands/cs_send.cpp b/src/server/scripts/Commands/cs_send.cpp
index 58970a91e20..486645df290 100644
--- a/src/server/scripts/Commands/cs_send.cpp
+++ b/src/server/scripts/Commands/cs_send.cpp
@@ -27,7 +27,7 @@ class send_commandscript : public CommandScript
public:
send_commandscript() : CommandScript("send_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand sendCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_server.cpp b/src/server/scripts/Commands/cs_server.cpp
index 4cd5e1f6274..04cc9ae4ad5 100644
--- a/src/server/scripts/Commands/cs_server.cpp
+++ b/src/server/scripts/Commands/cs_server.cpp
@@ -35,7 +35,7 @@ class server_commandscript : public CommandScript
public:
server_commandscript() : CommandScript("server_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand serverIdleRestartCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_tele.cpp b/src/server/scripts/Commands/cs_tele.cpp
index f6618227ae6..ad77464b6e1 100644
--- a/src/server/scripts/Commands/cs_tele.cpp
+++ b/src/server/scripts/Commands/cs_tele.cpp
@@ -35,7 +35,7 @@ class tele_commandscript : public CommandScript
public:
tele_commandscript() : CommandScript("tele_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand teleCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp
index 2f0b53bff68..a2f1c75106b 100644
--- a/src/server/scripts/Commands/cs_ticket.cpp
+++ b/src/server/scripts/Commands/cs_ticket.cpp
@@ -36,7 +36,7 @@ class ticket_commandscript : public CommandScript
public:
ticket_commandscript() : CommandScript("ticket_commandscript") { }
- ChatCommand* GetCommands() const
+ ChatCommand* GetCommands() const override
{
static ChatCommand ticketResponseCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_titles.cpp b/src/server/scripts/Commands/cs_titles.cpp
index 3d429deb3ef..dee9c33ae99 100644
--- a/src/server/scripts/Commands/cs_titles.cpp
+++ b/src/server/scripts/Commands/cs_titles.cpp
@@ -33,7 +33,7 @@ class titles_commandscript : public CommandScript
public:
titles_commandscript() : CommandScript("titles_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand titlesSetCommandTable[] =
{
diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp
index 9b20383e94a..647d8b49c1b 100644
--- a/src/server/scripts/Commands/cs_wp.cpp
+++ b/src/server/scripts/Commands/cs_wp.cpp
@@ -34,7 +34,7 @@ class wp_commandscript : public CommandScript
public:
wp_commandscript() : CommandScript("wp_commandscript") { }
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand wpCommandTable[] =
{
@@ -238,6 +238,7 @@ public:
{
Creature* target = handler->getSelectedCreature();
+ PreparedStatement* stmt = NULL;
if (!target)
{
@@ -251,19 +252,15 @@ public:
{
if (target->GetCreatureAddon()->path_id != 0)
{
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE_ADDON);
-
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE_ADDON);
stmt->setUInt32(0, guildLow);
-
WorldDatabase.Execute(stmt);
target->UpdateWaypointID(0);
stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_MOVEMENT_TYPE);
-
stmt->setUInt8(0, uint8(IDLE_MOTION_TYPE));
stmt->setUInt32(1, guildLow);
-
WorldDatabase.Execute(stmt);
target->LoadPath(0);
@@ -271,6 +268,7 @@ public:
target->GetMotionMaster()->MoveTargetedHome();
target->GetMotionMaster()->Initialize();
target->MonsterSay("Path unloaded.", LANG_UNIVERSAL, NULL);
+
return true;
}
handler->PSendSysMessage("%s%s|r", "|cffff33ff", "Target have no loaded path.");
@@ -285,6 +283,7 @@ public:
char* show_str = strtok((char*)args, " ");
std::string show = show_str;
+ PreparedStatement* stmt = NULL;
// Check
if ((show != "add") && (show != "mod") && (show != "del") && (show != "listid"))
@@ -300,16 +299,14 @@ public:
if (id)
{
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID);
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID);
stmt->setUInt32(0, id);
PreparedQueryResult result = WorldDatabase.Query(stmt);
if (!result)
{
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_WAYPOINT_SCRIPT);
-
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_WAYPOINT_SCRIPT);
stmt->setUInt32(0, id);
-
WorldDatabase.Execute(stmt);
handler->PSendSysMessage("%s%s%u|r", "|cff00ff00", "Wp Event: New waypoint event added: ", id);
@@ -319,16 +316,11 @@ public:
}
else
{
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPTS_MAX_ID);
-
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPTS_MAX_ID);
PreparedQueryResult result = WorldDatabase.Query(stmt);
-
id = result->Fetch()->GetUInt32();
-
stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_WAYPOINT_SCRIPT);
-
stmt->setUInt32(0, id + 1);
-
WorldDatabase.Execute(stmt);
handler->PSendSysMessage("%s%s%u|r", "|cff00ff00", "Wp Event: New waypoint event added: |r|cff00ffff", id+1);
@@ -351,7 +343,7 @@ public:
float a8, a9, a10, a11;
char const* a7;
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPT_BY_ID);
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPT_BY_ID);
stmt->setUInt32(0, id);
PreparedQueryResult result = WorldDatabase.Query(stmt);
@@ -386,18 +378,14 @@ public:
{
id = atoi(arg_id);
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID);
-
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID);
stmt->setUInt32(0, id);
-
PreparedQueryResult result = WorldDatabase.Query(stmt);
if (result)
{
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_WAYPOINT_SCRIPT);
-
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_WAYPOINT_SCRIPT);
stmt->setUInt32(0, id);
-
WorldDatabase.Execute(stmt);
handler->PSendSysMessage("%s%s%u|r", "|cff00ff00", "Wp Event: Waypoint script removed: ", id);
@@ -457,18 +445,16 @@ public:
uint32 newid = atoi(arg_3);
handler->PSendSysMessage("%s%s|r|cff00ffff%u|r|cff00ff00%s|r|cff00ffff%u|r", "|cff00ff00", "Wp Event: Wypoint scipt guid: ", newid, " id changed: ", id);
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_ID);
-
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_ID);
stmt->setUInt32(0, newid);
stmt->setUInt32(1, id);
-
WorldDatabase.Execute(stmt);
return true;
}
else
{
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID);
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID);
stmt->setUInt32(0, id);
PreparedQueryResult result = WorldDatabase.Query(stmt);
@@ -480,8 +466,7 @@ public:
if (arg_str_2 == "posx")
{
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_X);
-
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_X);
stmt->setFloat(0, float(atof(arg_3)));
stmt->setUInt32(1, id);
@@ -492,8 +477,7 @@ public:
}
else if (arg_str_2 == "posy")
{
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_Y);
-
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_Y);
stmt->setFloat(0, float(atof(arg_3)));
stmt->setUInt32(1, id);
@@ -504,8 +488,7 @@ public:
}
else if (arg_str_2 == "posz")
{
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_Z);
-
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_Z);
stmt->setFloat(0, float(atof(arg_3)));
stmt->setUInt32(1, id);
@@ -516,8 +499,7 @@ public:
}
else if (arg_str_2 == "orientation")
{
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_O);
-
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_O);
stmt->setFloat(0, float(atof(arg_3)));
stmt->setUInt32(1, id);
@@ -561,7 +543,7 @@ public:
// Check
// Remember: "show" must also be the name of a column!
if ((show != "delay") && (show != "action") && (show != "action_chance")
- && (show != "move_flag") && (show != "del") && (show != "move") && (show != "wpadd")
+ && (show != "move_type") && (show != "del") && (show != "move")
)
{
return false;
@@ -577,6 +559,7 @@ public:
uint32 point = 0;
uint32 wpGuid = 0;
Creature* target = handler->getSelectedCreature();
+ PreparedStatement* stmt = NULL;
if (!target || target->GetEntry() != VISUAL_WAYPOINT)
{
@@ -590,7 +573,7 @@ public:
// User did select a visual waypoint?
// Check the creature
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_DATA_BY_WPGUID);
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_DATA_BY_WPGUID);
stmt->setUInt32(0, wpGuid);
PreparedQueryResult result = WorldDatabase.Query(stmt);
@@ -605,16 +588,16 @@ public:
// See also: http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html
std::string maxDiff = "0.01";
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_DATA_BY_POS);
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_DATA_BY_POS);
stmt->setFloat(0, target->GetPositionX());
stmt->setString(1, maxDiff);
stmt->setFloat(2, target->GetPositionY());
stmt->setString(3, maxDiff);
stmt->setFloat(4, target->GetPositionZ());
stmt->setString(5, maxDiff);
- PreparedQueryResult result = WorldDatabase.Query(stmt);
+ PreparedQueryResult queryResult = WorldDatabase.Query(stmt);
- if (!result)
+ if (!queryResult)
{
handler->PSendSysMessage(LANG_WAYPOINT_NOTFOUNDDBPROBLEM, wpGuid);
return true;
@@ -652,18 +635,14 @@ public:
wpCreature->AddObjectToRemoveList();
}
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_WAYPOINT_DATA);
-
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_WAYPOINT_DATA);
stmt->setUInt32(0, pathid);
stmt->setUInt32(1, point);
-
WorldDatabase.Execute(stmt);
stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_POINT);
-
stmt->setUInt32(0, pathid);
stmt->setUInt32(1, point);
-
WorldDatabase.Execute(stmt);
handler->PSendSysMessage(LANG_WAYPOINT_REMOVED);
@@ -690,7 +669,7 @@ public:
}
// re-create
Creature* wpCreature2 = new Creature();
- if (!wpCreature2->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), VISUAL_WAYPOINT, 0, 0, chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), chr->GetOrientation()))
+ if (!wpCreature2->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), VISUAL_WAYPOINT, chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), chr->GetOrientation()))
{
handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, VISUAL_WAYPOINT);
delete wpCreature2;
@@ -711,14 +690,12 @@ public:
//sMapMgr->GetMap(npcCreature->GetMapId())->Add(wpCreature2);
}
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_POSITION);
-
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_POSITION);
stmt->setFloat(0, chr->GetPositionX());
stmt->setFloat(1, chr->GetPositionY());
stmt->setFloat(2, chr->GetPositionZ());
stmt->setUInt32(3, pathid);
stmt->setUInt32(4, point);
-
WorldDatabase.Execute(stmt);
handler->PSendSysMessage(LANG_WAYPOINT_CHANGED);
@@ -760,6 +737,7 @@ public:
uint32 pathid = 0;
Creature* target = handler->getSelectedCreature();
+ PreparedStatement* stmt = NULL;
// Did player provide a PathID?
@@ -803,10 +781,8 @@ public:
return false;
}
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_DATA_ALL_BY_WPGUID);
-
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_DATA_ALL_BY_WPGUID);
stmt->setUInt32(0, target->GetGUIDLow());
-
PreparedQueryResult result = WorldDatabase.Query(stmt);
if (!result)
@@ -839,10 +815,8 @@ public:
if (show == "on")
{
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_DATA_POS_BY_ID);
-
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_DATA_POS_BY_ID);
stmt->setUInt32(0, pathid);
-
PreparedQueryResult result = WorldDatabase.Query(stmt);
if (!result)
@@ -875,10 +849,8 @@ public:
handler->PSendSysMessage(LANG_WAYPOINT_NOTREMOVED, wpguid);
hasError = true;
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE);
-
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE);
stmt->setUInt32(0, wpguid);
-
WorldDatabase.Execute(stmt);
}
else
@@ -914,7 +886,7 @@ public:
float o = chr->GetOrientation();
Creature* wpCreature = new Creature();
- if (!wpCreature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, 0, 0, x, y, z, o))
+ if (!wpCreature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o))
{
handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id);
delete wpCreature;
@@ -922,12 +894,10 @@ public:
}
// Set "wpguid" column to the visual waypoint
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_WPGUID);
-
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_WPGUID);
stmt->setInt32(0, int32(wpCreature->GetGUIDLow()));
stmt->setUInt32(1, pathid);
stmt->setUInt32(2, point);
-
WorldDatabase.Execute(stmt);
wpCreature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
@@ -956,7 +926,7 @@ public:
{
handler->PSendSysMessage("|cff00ff00DEBUG: wp first, GUID: %u|r", pathid);
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_DATA_POS_FIRST_BY_ID);
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_DATA_POS_FIRST_BY_ID);
stmt->setUInt32(0, pathid);
PreparedQueryResult result = WorldDatabase.Query(stmt);
@@ -978,7 +948,7 @@ public:
Map* map = chr->GetMap();
Creature* creature = new Creature();
- if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, 0, 0, x, y, z, o))
+ if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o))
{
handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id);
delete creature;
@@ -1006,7 +976,7 @@ public:
{
handler->PSendSysMessage("|cff00ff00DEBUG: wp last, PathID: |r|cff00ffff%u|r", pathid);
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_DATA_POS_LAST_BY_ID);
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_DATA_POS_LAST_BY_ID);
stmt->setUInt32(0, pathid);
PreparedQueryResult result = WorldDatabase.Query(stmt);
@@ -1027,7 +997,7 @@ public:
Map* map = chr->GetMap();
Creature* creature = new Creature();
- if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, 0, 0, x, y, z, o))
+ if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o))
{
handler->PSendSysMessage(LANG_WAYPOINT_NOTCREATED, id);
delete creature;
@@ -1053,7 +1023,7 @@ public:
if (show == "off")
{
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_CREATURE_BY_ID);
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_CREATURE_BY_ID);
stmt->setUInt32(0, 1);
PreparedQueryResult result = WorldDatabase.Query(stmt);
@@ -1074,10 +1044,8 @@ public:
handler->PSendSysMessage(LANG_WAYPOINT_NOTREMOVED, guid);
hasError = true;
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE);
-
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE);
stmt->setUInt32(0, guid);
-
WorldDatabase.Execute(stmt);
}
else
diff --git a/src/server/scripts/Custom/CMakeLists.txt b/src/server/scripts/Custom/CMakeLists.txt
index 78db719ae6e..80ebe36b555 100644
--- a/src/server/scripts/Custom/CMakeLists.txt
+++ b/src/server/scripts/Custom/CMakeLists.txt
@@ -8,8 +8,11 @@
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# file(GLOB_RECURSE sources_Custom Custom/*.cpp Custom/*.h)
+
set(scripts_STAT_SRCS
${scripts_STAT_SRCS}
+# ${sources_Custom}
)
message(" -> Prepared: Custom")
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
index 3859555a90c..6f8b93bbdba 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
@@ -86,7 +86,7 @@ class npc_av_marshal_or_warmaster : public CreatureScript
{
npc_av_marshal_or_warmasterAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
events.ScheduleEvent(EVENT_CHARGE_TARGET, urand(2 * IN_MILLISECONDS, 12 * IN_MILLISECONDS));
@@ -99,12 +99,12 @@ class npc_av_marshal_or_warmaster : public CreatureScript
_hasAura = false;
}
- void JustRespawned() OVERRIDE
+ void JustRespawned() override
{
Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// I have a feeling this isn't blizzlike, but owell, I'm only passing by and cleaning up.
if (!_hasAura)
@@ -170,7 +170,7 @@ class npc_av_marshal_or_warmaster : public CreatureScript
bool _hasAura;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_av_marshal_or_warmasterAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp
index 0b031f54ea0..60a8e943bc7 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp
@@ -61,14 +61,14 @@ public:
uint64 balindaGUID;
uint32 resetTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
waterBoltTimer = 3 * IN_MILLISECONDS;
resetTimer = 5 * IN_MILLISECONDS;
balindaGUID = 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -82,7 +82,7 @@ public:
// check if creature is not outside of building
if (resetTimer < diff)
{
- if (Creature* pBalinda = Unit::GetCreature(*me, balindaGUID))
+ if (Creature* pBalinda = ObjectAccessor::GetCreature(*me, balindaGUID))
if (me->GetDistance2d(pBalinda->GetHomePosition().GetPositionX(), pBalinda->GetHomePosition().GetPositionY()) > 50)
EnterEvadeMode();
resetTimer = 5 * IN_MILLISECONDS;
@@ -92,7 +92,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_water_elementalAI(creature);
}
@@ -116,7 +116,7 @@ public:
SummonList summons;
- void Reset() OVERRIDE
+ void Reset() override
{
arcaneExplosionTimer = urand(5 * IN_MILLISECONDS, 15 * IN_MILLISECONDS);
coneOfColdTimer = 8 * IN_MILLISECONDS;
@@ -128,30 +128,30 @@ public:
summons.DespawnAll();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(YELL_AGGRO);
}
- void JustRespawned() OVERRIDE
+ void JustRespawned() override
{
Reset();
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
- CAST_AI(npc_water_elemental::npc_water_elementalAI, summoned->AI())->balindaGUID = me->GetGUID();
+ ENSURE_AI(npc_water_elemental::npc_water_elementalAI, summoned->AI())->balindaGUID = me->GetGUID();
summoned->AI()->AttackStart(SelectTarget(SELECT_TARGET_RANDOM, 0, 50, true));
summoned->setFaction(me->getFaction());
summons.Summon(summoned);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
summons.DespawnAll();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -202,7 +202,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_balindaAI(creature);
}
@@ -212,4 +212,4 @@ void AddSC_boss_balinda()
{
new boss_balinda;
new npc_water_elemental;
-};
+}
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp
index 2f48ca4a3b6..4ecb57177a6 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp
@@ -54,7 +54,7 @@ public:
uint32 YellTimer;
uint32 ResetTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
WhirlwindTimer = urand(1 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
Whirlwind2Timer = urand(1 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
@@ -64,18 +64,18 @@ public:
YellTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS); //20 to 30 seconds
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(YELL_AGGRO);
}
- void JustRespawned() OVERRIDE
+ void JustRespawned() override
{
Reset();
Talk(YELL_RESPAWN);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -125,7 +125,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_drektharAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp
index aa852ffd30c..c00b7db2ce7 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp
@@ -49,7 +49,7 @@ public:
uint32 MortalStrikeTimer;
uint32 ResetTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
CleaveTimer = urand(1 * IN_MILLISECONDS, 9 * IN_MILLISECONDS);
FrighteningShoutTimer = urand(2 * IN_MILLISECONDS, 19 * IN_MILLISECONDS);
@@ -59,17 +59,17 @@ public:
ResetTimer = 5 * IN_MILLISECONDS;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(YELL_AGGRO);
}
- void JustRespawned() OVERRIDE
+ void JustRespawned() override
{
Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -119,7 +119,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_galvangarAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp
index 4e7c2abcdcc..076607a5672 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp
@@ -50,7 +50,7 @@ public:
uint32 ResetTimer;
uint32 YellTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
AvatarTimer = 3 * IN_MILLISECONDS;
ThunderclapTimer = 4 * IN_MILLISECONDS;
@@ -59,12 +59,12 @@ public:
YellTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(YELL_AGGRO);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -108,7 +108,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_vanndarAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
index 55a89d062e8..907aaed3a0d 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
@@ -29,7 +29,7 @@ class go_shadowforge_brazier : public GameObjectScript
public:
go_shadowforge_brazier() : GameObjectScript("go_shadowforge_brazier") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
if (InstanceScript* instance = go->GetInstanceScript())
{
@@ -82,7 +82,7 @@ class at_ring_of_law : public AreaTriggerScript
public:
at_ring_of_law() : AreaTriggerScript("at_ring_of_law") { }
- bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE
+ bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override
{
if (InstanceScript* instance = player->GetInstanceScript())
{
@@ -115,7 +115,7 @@ class npc_grimstone : public CreatureScript
public:
npc_grimstone() : CreatureScript("npc_grimstone") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_grimstoneAI>(creature);
}
@@ -125,7 +125,7 @@ public:
npc_grimstoneAI(Creature* creature) : npc_escortAI(creature)
{
instance = creature->GetInstanceScript();
- MobSpawnId = rand()%6;
+ MobSpawnId = rand32() % 6;
}
InstanceScript* instance;
@@ -142,7 +142,7 @@ public:
bool CanWalk;
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -175,13 +175,13 @@ public:
/// @todo move them to center
void SummonRingBoss()
{
- if (Creature* tmp = me->SummonCreature(RingBoss[rand()%6], 644.300f, -175.989f, -53.739f, 3.418f, TEMPSUMMON_DEAD_DESPAWN, 0))
+ if (Creature* tmp = me->SummonCreature(RingBoss[rand32() % 6], 644.300f, -175.989f, -53.739f, 3.418f, TEMPSUMMON_DEAD_DESPAWN, 0))
RingBossGUID = tmp->GetGUID();
MobDeath_Timer = 2500;
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -219,7 +219,7 @@ public:
instance->HandleGameObject(instance->GetData64(id), open);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (MobDeath_Timer)
{
@@ -229,7 +229,7 @@ public:
if (RingBossGUID)
{
- Creature* boss = Unit::GetCreature(*me, RingBossGUID);
+ Creature* boss = ObjectAccessor::GetCreature(*me, RingBossGUID);
if (boss && !boss->IsAlive() && boss->isDead())
{
RingBossGUID = 0;
@@ -242,7 +242,7 @@ public:
for (uint8 i = 0; i < MAX_NPC_AMOUNT; ++i)
{
- Creature* mob = Unit::GetCreature(*me, RingMobGUID[i]);
+ Creature* mob = ObjectAccessor::GetCreature(*me, RingMobGUID[i]);
if (mob && !mob->IsAlive() && mob->isDead())
{
RingMobGUID[i] = 0;
@@ -346,7 +346,7 @@ class npc_phalanx : public CreatureScript
public:
npc_phalanx() : CreatureScript("npc_phalanx") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_phalanxAI(creature);
}
@@ -359,14 +359,14 @@ public:
uint32 FireballVolley_Timer;
uint32 MightyBlow_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
ThunderClap_Timer = 12000;
FireballVolley_Timer = 0;
MightyBlow_Timer = 15000;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -424,7 +424,7 @@ class npc_kharan_mighthammer : public CreatureScript
public:
npc_kharan_mighthammer() : CreatureScript("npc_kharan_mighthammer") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -473,7 +473,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -518,7 +518,7 @@ class npc_lokhtos_darkbargainer : public CreatureScript
public:
npc_lokhtos_darkbargainer() : CreatureScript("npc_lokhtos_darkbargainer") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF + 1)
@@ -532,7 +532,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -571,7 +571,7 @@ class npc_dughal_stormwing : public CreatureScript
public:
npc_dughal_stormwing() : CreatureScript("npc_dughal_stormwing") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
npc_dughal_stormwingAI* dughal_stormwingAI = new npc_dughal_stormwingAI(creature);
@@ -582,7 +582,7 @@ public:
return dughal_stormwingAI;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF + 1)
@@ -595,7 +595,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(QUEST_JAIL_BREAK) == QUEST_STATUS_INCOMPLETE && instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_IN_PROGRESS)
{
@@ -609,7 +609,7 @@ public:
{
npc_dughal_stormwingAI(Creature* creature) : npc_escortAI(creature) { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -628,10 +628,10 @@ public:
}
}
- void EnterCombat(Unit* who) OVERRIDE { }
- void Reset() OVERRIDE { }
+ void EnterCombat(Unit* who) override { }
+ void Reset() override { }
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
if (IsBeingEscorted && killer == me)
{
@@ -642,7 +642,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_NOT_STARTED) return;
if ((instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_IN_PROGRESS || instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_FAILED || instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_ENDED)&& instance->GetData(DATA_DUGHAL) == ENCOUNTER_STATE_ENDED)
@@ -687,7 +687,7 @@ class npc_marshal_windsor : public CreatureScript
public:
npc_marshal_windsor() : CreatureScript("npc_marshal_windsor") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
npc_marshal_windsorAI* marshal_windsorAI = new npc_marshal_windsorAI(creature);
@@ -715,7 +715,7 @@ public:
return marshal_windsorAI;
}
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == 4322)
{
@@ -737,7 +737,7 @@ public:
instance = creature->GetInstanceScript();
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -782,7 +782,7 @@ public:
}
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
switch (urand(0, 2))
{
@@ -798,14 +798,14 @@ public:
}
}
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void JustDied(Unit* slayer) OVERRIDE
+ void JustDied(Unit* slayer) override
{
instance->SetData(DATA_QUEST_JAIL_BREAK, ENCOUNTER_STATE_FAILED);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_NOT_STARTED)
return;
@@ -871,7 +871,7 @@ class npc_marshal_reginald_windsor : public CreatureScript
public:
npc_marshal_reginald_windsor() : CreatureScript("npc_marshal_reginald_windsor") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
npc_marshal_reginald_windsorAI* marshal_reginald_windsorAI = new npc_marshal_reginald_windsorAI(creature);
@@ -920,7 +920,7 @@ public:
{
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
wp = waypointId;
switch (waypointId)
@@ -978,7 +978,7 @@ public:
}
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (HasEscortState(STATE_ESCORT_ESCORTING))
@@ -998,7 +998,7 @@ public:
}
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
switch (urand(0, 2))
{
@@ -1013,14 +1013,14 @@ public:
break;
}
}
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void JustDied(Unit* slayer) OVERRIDE
+ void JustDied(Unit* slayer) override
{
instance->SetData(DATA_QUEST_JAIL_BREAK, ENCOUNTER_STATE_FAILED);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_NOT_STARTED)
return;
@@ -1081,7 +1081,7 @@ class npc_tobias_seecher : public CreatureScript
public:
npc_tobias_seecher() : CreatureScript("npc_tobias_seecher") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
npc_tobias_seecherAI* tobias_seecherAI = new npc_tobias_seecherAI(creature);
@@ -1094,7 +1094,7 @@ public:
return tobias_seecherAI;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF + 1)
@@ -1107,7 +1107,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(QUEST_JAIL_BREAK) == QUEST_STATUS_INCOMPLETE && instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_IN_PROGRESS)
{
@@ -1121,10 +1121,10 @@ public:
{
npc_tobias_seecherAI(Creature* creature) : npc_escortAI(creature) { }
- void EnterCombat(Unit* who) OVERRIDE { }
- void Reset() OVERRIDE { }
+ void EnterCombat(Unit* who) override { }
+ void Reset() override { }
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
if (IsBeingEscorted && killer == me)
{
@@ -1135,7 +1135,7 @@ public:
}
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -1154,7 +1154,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_NOT_STARTED)
return;
@@ -1199,7 +1199,7 @@ class npc_rocknot : public CreatureScript
public:
npc_rocknot() : CreatureScript("npc_rocknot") { }
- bool OnQuestReward(Player* /*player*/, Creature* creature, Quest const* quest, uint32 /*item*/) OVERRIDE
+ bool OnQuestReward(Player* /*player*/, Creature* creature, Quest const* quest, uint32 /*item*/) override
{
InstanceScript* instance = creature->GetInstanceScript();
if (!instance)
@@ -1229,7 +1229,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_rocknotAI>(creature);
}
@@ -1246,7 +1246,7 @@ public:
uint32 BreakKeg_Timer;
uint32 BreakDoor_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
if (HasEscortState(STATE_ESCORT_ESCORTING))
return;
@@ -1261,7 +1261,7 @@ public:
go->SetGoState((GOState)state);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -1284,7 +1284,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (BreakKeg_Timer)
{
@@ -1304,7 +1304,7 @@ public:
DoGo(DATA_GO_BAR_KEG_TRAP, 0); //doesn't work very well, leaving code here for future
//spell by trap has effect61, this indicate the bar go hostile
- if (Unit* tmp = Unit::GetUnit(*me, instance->GetData64(DATA_PHALANX)))
+ if (Unit* tmp = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_PHALANX)))
tmp->setFaction(14);
//for later, this event(s) has alot more to it.
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp
index 5201e06aa17..3e4097daf20 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -24,64 +23,74 @@ enum Spells
SPELL_FIREBLAST = 15573
};
-class boss_ambassador_flamelash : public CreatureScript
+enum Events
{
-public:
- boss_ambassador_flamelash() : CreatureScript("boss_ambassador_flamelash") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_ambassador_flamelashAI(creature);
- }
-
- struct boss_ambassador_flamelashAI : public ScriptedAI
- {
- boss_ambassador_flamelashAI(Creature* creature) : ScriptedAI(creature) { }
+ EVENT_FIREBLAST = 1,
+ EVENT_SUMMON_SPIRITS = 2
+};
- uint32 FireBlast_Timer;
- uint32 Spirit_Timer;
+class boss_ambassador_flamelash : public CreatureScript
+{
+ public:
+ boss_ambassador_flamelash() : CreatureScript("boss_ambassador_flamelash") { }
- void Reset() OVERRIDE
+ struct boss_ambassador_flamelashAI : public ScriptedAI
{
- FireBlast_Timer = 2000;
- Spirit_Timer = 24000;
- }
+ boss_ambassador_flamelashAI(Creature* creature) : ScriptedAI(creature) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
-
- void SummonSpirits(Unit* victim)
- {
- if (Creature* Spirit = DoSpawnCreature(9178, float(irand(-9, 9)), float(irand(-9, 9)), 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000))
- Spirit->AI()->AttackStart(victim);
- }
+ void Reset() override
+ {
+ _events.Reset();
+ }
- void UpdateAI(uint32 diff) OVERRIDE
- {
- //Return since we have no target
- if (!UpdateVictim())
- return;
+ void EnterCombat(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_FIREBLAST, 2000);
+ _events.ScheduleEvent(EVENT_SUMMON_SPIRITS, 24000);
+ }
- //FireBlast_Timer
- if (FireBlast_Timer <= diff)
+ void SummonSpirit(Unit* victim)
{
- DoCastVictim(SPELL_FIREBLAST);
- FireBlast_Timer = 7000;
- } else FireBlast_Timer -= diff;
+ if (Creature* spirit = DoSpawnCreature(9178, frand(-9, 9), frand(-9, 9), 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000))
+ spirit->AI()->AttackStart(victim);
+ }
- //Spirit_Timer
- if (Spirit_Timer <= diff)
+ void UpdateAI(uint32 diff) override
{
- SummonSpirits(me->GetVictim());
- SummonSpirits(me->GetVictim());
- SummonSpirits(me->GetVictim());
- SummonSpirits(me->GetVictim());
+ if (!UpdateVictim())
+ return;
- Spirit_Timer = 30000;
- } else Spirit_Timer -= diff;
+ _events.Update(diff);
- DoMeleeAttackIfReady();
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_FIREBLAST:
+ DoCastVictim(SPELL_FIREBLAST);
+ _events.ScheduleEvent(EVENT_FIREBLAST, 7000);
+ break;
+ case EVENT_SUMMON_SPIRITS:
+ for (uint32 i = 0; i < 4; ++i)
+ SummonSpirit(me->GetVictim());
+ _events.ScheduleEvent(EVENT_SUMMON_SPIRITS, 30000);
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
+ }
+
+ private:
+ EventMap _events;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new boss_ambassador_flamelashAI(creature);
}
- };
};
void AddSC_boss_ambassador_flamelash()
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp
index 33e0484c0d5..894b528c03c 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -21,90 +20,94 @@
enum Spells
{
- SPELL_SHADOWBOLT = 17228,
- SPELL_CURSEOFTONGUES = 15470,
- SPELL_CURSEOFWEAKNESS = 17227,
- SPELL_DEMONARMOR = 11735,
- SPELL_ENVELOPINGWEB = 15471
+ SPELL_SHADOWBOLT = 17228,
+ SPELL_CURSEOFTONGUES = 15470,
+ SPELL_CURSEOFWEAKNESS = 17227,
+ SPELL_DEMONARMOR = 11735,
+ SPELL_ENVELOPINGWEB = 15471
};
-class boss_anubshiah : public CreatureScript
+enum Events
{
-public:
- boss_anubshiah() : CreatureScript("boss_anubshiah") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_anubshiahAI(creature);
- }
-
- struct boss_anubshiahAI : public ScriptedAI
- {
- boss_anubshiahAI(Creature* creature) : ScriptedAI(creature) { }
-
- uint32 ShadowBolt_Timer;
- uint32 CurseOfTongues_Timer;
- uint32 CurseOfWeakness_Timer;
- uint32 DemonArmor_Timer;
- uint32 EnvelopingWeb_Timer;
-
- void Reset() OVERRIDE
- {
- ShadowBolt_Timer = 7000;
- CurseOfTongues_Timer = 24000;
- CurseOfWeakness_Timer = 12000;
- DemonArmor_Timer = 3000;
- EnvelopingWeb_Timer = 16000;
- }
+ EVENT_SHADOWBOLT = 1,
+ EVENT_CURSE_OF_TONGUES = 2,
+ EVENT_CURSE_OF_WEAKNESS = 3,
+ EVENT_DEMON_ARMOR = 4,
+ EVENT_ENVELOPING_WEB = 5
+};
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+class boss_anubshiah : public CreatureScript
+{
+ public:
+ boss_anubshiah() : CreatureScript("boss_anubshiah") { }
- void UpdateAI(uint32 diff) OVERRIDE
+ struct boss_anubshiahAI : public ScriptedAI
{
- //Return since we have no target
- if (!UpdateVictim())
- return;
-
- //ShadowBolt_Timer
- if (ShadowBolt_Timer <= diff)
- {
- DoCastVictim(SPELL_SHADOWBOLT);
- ShadowBolt_Timer = 7000;
- } else ShadowBolt_Timer -= diff;
-
- //CurseOfTongues_Timer
- if (CurseOfTongues_Timer <= diff)
- {
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- DoCast(target, SPELL_CURSEOFTONGUES);
- CurseOfTongues_Timer = 18000;
- } else CurseOfTongues_Timer -= diff;
+ boss_anubshiahAI(Creature* creature) : ScriptedAI(creature) { }
- //CurseOfWeakness_Timer
- if (CurseOfWeakness_Timer <= diff)
+ void Reset() override
{
- DoCastVictim(SPELL_CURSEOFWEAKNESS);
- CurseOfWeakness_Timer = 45000;
- } else CurseOfWeakness_Timer -= diff;
+ _events.Reset();
+ }
- //DemonArmor_Timer
- if (DemonArmor_Timer <= diff)
+ void EnterCombat(Unit* /*who*/) override
{
- DoCast(me, SPELL_DEMONARMOR);
- DemonArmor_Timer = 300000;
- } else DemonArmor_Timer -= diff;
-
- //EnvelopingWeb_Timer
- if (EnvelopingWeb_Timer <= diff)
+ _events.ScheduleEvent(EVENT_SHADOWBOLT, 7000);
+ _events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, 24000);
+ _events.ScheduleEvent(EVENT_CURSE_OF_WEAKNESS, 12000);
+ _events.ScheduleEvent(EVENT_DEMON_ARMOR, 3000);
+ _events.ScheduleEvent(EVENT_ENVELOPING_WEB, 16000);
+ }
+
+ void UpdateAI(uint32 diff) override
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- DoCast(target, SPELL_ENVELOPINGWEB);
- EnvelopingWeb_Timer = 12000;
- } else EnvelopingWeb_Timer -= diff;
-
- DoMeleeAttackIfReady();
+ if (!UpdateVictim())
+ return;
+
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_SHADOWBOLT:
+ DoCast(me, SPELL_SHADOWBOLT);
+ _events.ScheduleEvent(EVENT_SHADOWBOLT, 7000);
+ break;
+ case EVENT_CURSE_OF_TONGUES:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
+ DoCast(target, SPELL_CURSEOFTONGUES);
+ _events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, 18000);
+ break;
+ case EVENT_CURSE_OF_WEAKNESS:
+ DoCastVictim(SPELL_CURSEOFWEAKNESS);
+ _events.ScheduleEvent(EVENT_CURSE_OF_WEAKNESS, 45000);
+ break;
+ case EVENT_DEMON_ARMOR:
+ DoCast(me, SPELL_DEMONARMOR);
+ _events.ScheduleEvent(EVENT_DEMON_ARMOR, 300000);
+ break;
+ case EVENT_ENVELOPING_WEB:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
+ DoCast(target, SPELL_ENVELOPINGWEB);
+ _events.ScheduleEvent(EVENT_ENVELOPING_WEB, 12000);
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
+ }
+
+ private:
+ EventMap _events;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new boss_anubshiahAI(creature);
}
- };
};
void AddSC_boss_anubshiah()
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp
index 1edb1100289..cec29bcd4d1 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -32,89 +31,89 @@ enum Spells
SPELL_AVATAROFFLAME = 15636
};
-class boss_emperor_dagran_thaurissan : public CreatureScript
+enum Events
{
-public:
- boss_emperor_dagran_thaurissan() : CreatureScript("boss_emperor_dagran_thaurissan") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetInstanceAI<boss_draganthaurissanAI>(creature);
- }
-
- struct boss_draganthaurissanAI : public ScriptedAI
- {
- boss_draganthaurissanAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = me->GetInstanceScript();
- }
-
- InstanceScript* instance;
- uint32 HandOfThaurissan_Timer;
- uint32 AvatarOfFlame_Timer;
- //uint32 Counter;
+ EVENT_HANDOFTHAURISSAN = 1,
+ EVENT_AVATAROFFLAME = 2
+};
- void Reset() OVERRIDE
- {
- HandOfThaurissan_Timer = 4000;
- AvatarOfFlame_Timer = 25000;
- //Counter= 0;
- }
+class boss_emperor_dagran_thaurissan : public CreatureScript
+{
+ public:
+ boss_emperor_dagran_thaurissan() : CreatureScript("boss_emperor_dagran_thaurissan") { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ struct boss_draganthaurissanAI : public ScriptedAI
{
- Talk(SAY_AGGRO);
- me->CallForHelp(VISIBLE_RANGE);
- }
+ boss_draganthaurissanAI(Creature* creature) : ScriptedAI(creature)
+ {
+ _instance = me->GetInstanceScript();
+ }
- void KilledUnit(Unit* /*victim*/) OVERRIDE
- {
- Talk(SAY_SLAY);
- }
+ void Reset() override
+ {
+ _events.Reset();
+ }
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- if (Creature* Moira = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MOIRA)))
+ void EnterCombat(Unit* /*who*/) override
{
- Moira->AI()->EnterEvadeMode();
- Moira->setFaction(35);
+ Talk(SAY_AGGRO);
+ me->CallForHelp(VISIBLE_RANGE);
+ _events.ScheduleEvent(EVENT_HANDOFTHAURISSAN, 4000);
+ _events.ScheduleEvent(EVENT_AVATAROFFLAME, 25000);
}
- }
- void UpdateAI(uint32 diff) OVERRIDE
- {
- //Return since we have no target
- if (!UpdateVictim())
- return;
+ void KilledUnit(Unit* who) override
+ {
+ if (who->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_SLAY);
+ }
- if (HandOfThaurissan_Timer <= diff)
+ void JustDied(Unit* /*killer*/) override
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_HANDOFTHAURISSAN);
-
- //3 Hands of Thaurissan will be cast
- //if (Counter < 3)
- //{
- // HandOfThaurissan_Timer = 1000;
- // ++Counter;
- //}
- //else
- //{
- HandOfThaurissan_Timer = 5000;
- //Counter = 0;
- //}
- } else HandOfThaurissan_Timer -= diff;
-
- //AvatarOfFlame_Timer
- if (AvatarOfFlame_Timer <= diff)
+ if (Creature* moira = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MOIRA)))
+ {
+ moira->AI()->EnterEvadeMode();
+ moira->setFaction(35);
+ }
+ }
+
+ void UpdateAI(uint32 diff) override
{
- DoCastVictim(SPELL_AVATAROFFLAME);
- AvatarOfFlame_Timer = 18000;
- } else AvatarOfFlame_Timer -= diff;
+ if (!UpdateVictim())
+ return;
+
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_HANDOFTHAURISSAN:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_HANDOFTHAURISSAN);
+ _events.ScheduleEvent(EVENT_HANDOFTHAURISSAN, 5000);
+ break;
+ case EVENT_AVATAROFFLAME:
+ DoCastVictim(SPELL_AVATAROFFLAME);
+ _events.ScheduleEvent(EVENT_AVATAROFFLAME, 18000);
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
+ }
+
+ private:
+ InstanceScript* _instance;
+ EventMap _events;
+ };
- DoMeleeAttackIfReady();
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_draganthaurissanAI>(creature);
}
- };
};
void AddSC_boss_draganthaurissan()
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp
index 258dfd5db07..d5b8d1deadd 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -26,101 +25,113 @@ enum Spells
SPELL_CLEAVE = 20691
};
-class boss_general_angerforge : public CreatureScript
+enum Events
{
-public:
- boss_general_angerforge() : CreatureScript("boss_general_angerforge") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_general_angerforgeAI(creature);
- }
-
- struct boss_general_angerforgeAI : public ScriptedAI
- {
- boss_general_angerforgeAI(Creature* creature) : ScriptedAI(creature) { }
-
- uint32 MightyBlow_Timer;
- uint32 HamString_Timer;
- uint32 Cleave_Timer;
- uint32 Adds_Timer;
- bool Medics;
-
- void Reset() OVERRIDE
- {
- MightyBlow_Timer = 8000;
- HamString_Timer = 12000;
- Cleave_Timer = 16000;
- Adds_Timer = 0;
- Medics = false;
- }
-
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ EVENT_MIGHTYBLOW = 1,
+ EVENT_HAMSTRING = 2,
+ EVENT_CLEAVE = 3,
+ EVENT_MEDIC = 4,
+ EVENT_ADDS = 5
+};
- void SummonAdds(Unit* victim)
- {
- if (Creature* SummonedAdd = DoSpawnCreature(8901, float(irand(-14, 14)), float(irand(-14, 14)), 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 120000))
- SummonedAdd->AI()->AttackStart(victim);
- }
+enum Phases
+{
+ PHASE_ONE = 1,
+ PHASE_TWO = 2
+};
- void SummonMedics(Unit* victim)
- {
- if (Creature* SummonedMedic = DoSpawnCreature(8894, float(irand(-9, 9)), float(irand(-9, 9)), 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 120000))
- SummonedMedic->AI()->AttackStart(victim);
- }
+class boss_general_angerforge : public CreatureScript
+{
+ public:
+ boss_general_angerforge() : CreatureScript("boss_general_angerforge") { }
- void UpdateAI(uint32 diff) OVERRIDE
+ struct boss_general_angerforgeAI : public ScriptedAI
{
- //Return since we have no target
- if (!UpdateVictim())
- return;
+ boss_general_angerforgeAI(Creature* creature) : ScriptedAI(creature) { }
- //MightyBlow_Timer
- if (MightyBlow_Timer <= diff)
+ void Reset() override
{
- DoCastVictim(SPELL_MIGHTYBLOW);
- MightyBlow_Timer = 18000;
- } else MightyBlow_Timer -= diff;
+ _events.Reset();
+ }
- //HamString_Timer
- if (HamString_Timer <= diff)
+ void EnterCombat(Unit* /*who*/) override
{
- DoCastVictim(SPELL_HAMSTRING);
- HamString_Timer = 15000;
- } else HamString_Timer -= diff;
+ _events.SetPhase(PHASE_ONE);
+ _events.ScheduleEvent(EVENT_MIGHTYBLOW, 8000);
+ _events.ScheduleEvent(EVENT_HAMSTRING, 12000);
+ _events.ScheduleEvent(EVENT_CLEAVE, 16000);
+ }
- //Cleave_Timer
- if (Cleave_Timer <= diff)
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
- DoCastVictim(SPELL_CLEAVE);
- Cleave_Timer = 9000;
- } else Cleave_Timer -= diff;
+ if (me->HealthBelowPctDamaged(20, damage) && _events.IsInPhase(PHASE_ONE))
+ {
+ _events.SetPhase(PHASE_TWO);
+ _events.ScheduleEvent(EVENT_MEDIC, 0, 0, PHASE_TWO);
+ _events.ScheduleEvent(EVENT_ADDS, 0, 0, PHASE_TWO);
+ }
+ }
- //Adds_Timer
- if (HealthBelowPct(21))
+ void SummonAdd(Unit* victim)
{
- if (Adds_Timer <= diff)
- {
- // summon 3 Adds every 25s
- SummonAdds(me->GetVictim());
- SummonAdds(me->GetVictim());
- SummonAdds(me->GetVictim());
+ if (Creature* SummonedAdd = DoSpawnCreature(8901, float(irand(-14, 14)), float(irand(-14, 14)), 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 120000))
+ SummonedAdd->AI()->AttackStart(victim);
+ }
- Adds_Timer = 25000;
- } else Adds_Timer -= diff;
+ void SummonMedic(Unit* victim)
+ {
+ if (Creature* SummonedMedic = DoSpawnCreature(8894, float(irand(-9, 9)), float(irand(-9, 9)), 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 120000))
+ SummonedMedic->AI()->AttackStart(victim);
}
- //Summon Medics
- if (!Medics && HealthBelowPct(21))
+ void UpdateAI(uint32 diff) override
{
- SummonMedics(me->GetVictim());
- SummonMedics(me->GetVictim());
- Medics = true;
+ if (!UpdateVictim())
+ return;
+
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_MIGHTYBLOW:
+ DoCastVictim(SPELL_MIGHTYBLOW);
+ _events.ScheduleEvent(EVENT_MIGHTYBLOW, 18000);
+ break;
+ case EVENT_HAMSTRING:
+ DoCastVictim(SPELL_HAMSTRING);
+ _events.ScheduleEvent(EVENT_HAMSTRING, 15000);
+ break;
+ case EVENT_CLEAVE:
+ DoCastVictim(SPELL_CLEAVE);
+ _events.ScheduleEvent(EVENT_CLEAVE, 9000);
+ break;
+ case EVENT_MEDIC:
+ for (uint8 i = 0; i < 2; ++i)
+ SummonMedic(me->GetVictim());
+ break;
+ case EVENT_ADDS:
+ for (uint8 i = 0; i < 3; ++i)
+ SummonAdd(me->GetVictim());
+ _events.ScheduleEvent(EVENT_ADDS, 25000, 0, PHASE_TWO);
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
}
- DoMeleeAttackIfReady();
+ private:
+ EventMap _events;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new boss_general_angerforgeAI(creature);
}
- };
};
void AddSC_boss_general_angerforge()
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 acc739425ee..e9034e17d83 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
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -25,56 +24,67 @@ enum Spells
SPELL_MORTALSTRIKE = 24573
};
+enum Events
+{
+ EVENT_WHIRLWIND = 1,
+ EVENT_MORTALSTRIKE = 2
+};
+
class boss_gorosh_the_dervish : public CreatureScript
{
-public:
- boss_gorosh_the_dervish() : CreatureScript("boss_gorosh_the_dervish") { }
+ public:
+ boss_gorosh_the_dervish() : CreatureScript("boss_gorosh_the_dervish") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_gorosh_the_dervishAI(creature);
- }
+ struct boss_gorosh_the_dervishAI : public ScriptedAI
+ {
+ boss_gorosh_the_dervishAI(Creature* creature) : ScriptedAI(creature) { }
- struct boss_gorosh_the_dervishAI : public ScriptedAI
- {
- boss_gorosh_the_dervishAI(Creature* creature) : ScriptedAI(creature) { }
+ void Reset() override
+ {
+ _events.Reset();
+ }
- uint32 WhirlWind_Timer;
- uint32 MortalStrike_Timer;
+ void EnterCombat(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_WHIRLWIND, 12000);
+ _events.ScheduleEvent(EVENT_MORTALSTRIKE, 22000);
+ }
- void Reset() OVERRIDE
- {
- WhirlWind_Timer = 12000;
- MortalStrike_Timer = 22000;
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- void EnterCombat(Unit* /*who*/) OVERRIDE
- {
- }
+ _events.Update(diff);
- void UpdateAI(uint32 diff) OVERRIDE
- {
- //Return since we have no target
- if (!UpdateVictim())
- return;
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_WHIRLWIND:
+ DoCast(me, SPELL_WHIRLWIND);
+ _events.ScheduleEvent(EVENT_WHIRLWIND, 15000);
+ break;
+ case EVENT_MORTALSTRIKE:
+ DoCastVictim(SPELL_MORTALSTRIKE);
+ _events.ScheduleEvent(EVENT_MORTALSTRIKE, 15000);
+ break;
+ default:
+ break;
+ }
+ }
- //WhirlWind_Timer
- if (WhirlWind_Timer <= diff)
- {
- DoCast(me, SPELL_WHIRLWIND);
- WhirlWind_Timer = 15000;
- } else WhirlWind_Timer -= diff;
+ DoMeleeAttackIfReady();
+ }
- //MortalStrike_Timer
- if (MortalStrike_Timer <= diff)
- {
- DoCastVictim(SPELL_MORTALSTRIKE);
- MortalStrike_Timer = 15000;
- } else MortalStrike_Timer -= diff;
+ private:
+ EventMap _events;
+ };
- DoMeleeAttackIfReady();
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new boss_gorosh_the_dervishAI(creature);
}
- };
};
void AddSC_boss_gorosh_the_dervish()
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp
index 9bd36203dd2..f53fd0f65b3 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -26,59 +25,83 @@ enum Grizzle
EMOTE_FRENZY_KILL = 0
};
-class boss_grizzle : public CreatureScript
+enum Events
{
-public:
- boss_grizzle() : CreatureScript("boss_grizzle") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_grizzleAI(creature);
- }
+ EVENT_GROUNDTREMOR = 1,
+ EVENT_FRENZY = 2
+};
- struct boss_grizzleAI : public ScriptedAI
- {
- boss_grizzleAI(Creature* creature) : ScriptedAI(creature) { }
+enum Phases
+{
+ PHASE_ONE = 1,
+ PHASE_TWO = 2
+};
- uint32 GroundTremor_Timer;
- uint32 Frenzy_Timer;
+class boss_grizzle : public CreatureScript
+{
+ public:
+ boss_grizzle() : CreatureScript("boss_grizzle") { }
- void Reset() OVERRIDE
+ struct boss_grizzleAI : public ScriptedAI
{
- GroundTremor_Timer = 12000;
- Frenzy_Timer =0;
- }
+ boss_grizzleAI(Creature* creature) : ScriptedAI(creature) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void Reset() override
+ {
+ _events.Reset();
+ }
- void UpdateAI(uint32 diff) OVERRIDE
- {
- //Return since we have no target
- if (!UpdateVictim())
- return;
+ void EnterCombat(Unit* /*who*/) override
+ {
+ _events.SetPhase(PHASE_ONE);
+ _events.ScheduleEvent(EVENT_GROUNDTREMOR, 12000);
+ }
- //GroundTremor_Timer
- if (GroundTremor_Timer <= diff)
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
- DoCastVictim(SPELL_GROUNDTREMOR);
- GroundTremor_Timer = 8000;
- } else GroundTremor_Timer -= diff;
+ if (me->HealthBelowPctDamaged(50, damage) && _events.IsInPhase(PHASE_ONE))
+ {
+ _events.SetPhase(PHASE_TWO);
+ _events.ScheduleEvent(EVENT_FRENZY, 0, 0, PHASE_TWO);
+ }
+ }
- //Frenzy_Timer
- if (HealthBelowPct(51))
+ void UpdateAI(uint32 diff) override
{
- if (Frenzy_Timer <= diff)
+ if (!UpdateVictim())
+ return;
+
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
{
- DoCast(me, SPELL_FRENZY);
- Talk(EMOTE_FRENZY_KILL);
+ switch (eventId)
+ {
+ case EVENT_GROUNDTREMOR:
+ DoCastVictim(SPELL_GROUNDTREMOR);
+ _events.ScheduleEvent(EVENT_GROUNDTREMOR, 8000);
+ break;
+ case EVENT_FRENZY:
+ DoCast(me, SPELL_FRENZY);
+ Talk(EMOTE_FRENZY_KILL);
+ _events.ScheduleEvent(EVENT_FRENZY, 15000, 0, PHASE_TWO);
+ break;
+ default:
+ break;
+ }
+ }
- Frenzy_Timer = 15000;
- } else Frenzy_Timer -= diff;
+ DoMeleeAttackIfReady();
}
- DoMeleeAttackIfReady();
+ private:
+ EventMap _events;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new boss_grizzleAI(creature);
}
- };
};
void AddSC_boss_grizzle()
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp
index 65a3fd35d48..c41ddf9d98b 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -27,74 +26,81 @@ enum Spells
SPELL_SHADOWSHIELD = 22417
};
-class boss_high_interrogator_gerstahn : public CreatureScript
+enum Events
{
-public:
- boss_high_interrogator_gerstahn() : CreatureScript("boss_high_interrogator_gerstahn") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_high_interrogator_gerstahnAI(creature);
- }
-
- struct boss_high_interrogator_gerstahnAI : public ScriptedAI
- {
- boss_high_interrogator_gerstahnAI(Creature* creature) : ScriptedAI(creature) { }
-
- uint32 ShadowWordPain_Timer;
- uint32 ManaBurn_Timer;
- uint32 PsychicScream_Timer;
- uint32 ShadowShield_Timer;
-
- void Reset() OVERRIDE
- {
- ShadowWordPain_Timer = 4000;
- ManaBurn_Timer = 14000;
- PsychicScream_Timer = 32000;
- ShadowShield_Timer = 8000;
- }
+ EVENT_SHADOW_WORD_PAIN = 1,
+ EVENT_MANABURN = 2,
+ EVENT_PSYCHIC_SCREAM = 3,
+ EVENT_SHADOWSHIELD = 4
+};
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+class boss_high_interrogator_gerstahn : public CreatureScript
+{
+ public:
+ boss_high_interrogator_gerstahn() : CreatureScript("boss_high_interrogator_gerstahn") { }
- void UpdateAI(uint32 diff) OVERRIDE
+ struct boss_high_interrogator_gerstahnAI : public ScriptedAI
{
- //Return since we have no target
- if (!UpdateVictim())
- return;
+ boss_high_interrogator_gerstahnAI(Creature* creature) : ScriptedAI(creature) { }
- //ShadowWordPain_Timer
- if (ShadowWordPain_Timer <= diff)
+ void Reset() override
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- DoCast(target, SPELL_SHADOWWORDPAIN);
- ShadowWordPain_Timer = 7000;
- } else ShadowWordPain_Timer -= diff;
+ _events.Reset();
+ }
- //ManaBurn_Timer
- if (ManaBurn_Timer <= diff)
+ void EnterCombat(Unit* /*who*/) override
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- DoCast(target, SPELL_MANABURN);
- ManaBurn_Timer = 10000;
- } else ManaBurn_Timer -= diff;
+ _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 4000);
+ _events.ScheduleEvent(EVENT_MANABURN, 14000);
+ _events.ScheduleEvent(EVENT_PSYCHIC_SCREAM, 32000);
+ _events.ScheduleEvent(EVENT_SHADOWSHIELD, 8000);
+ }
- //PsychicScream_Timer
- if (PsychicScream_Timer <= diff)
+ void UpdateAI(uint32 diff) override
{
- DoCastVictim(SPELL_PSYCHICSCREAM);
- PsychicScream_Timer = 30000;
- } else PsychicScream_Timer -= diff;
+ if (!UpdateVictim())
+ return;
- //ShadowShield_Timer
- if (ShadowShield_Timer <= diff)
- {
- DoCast(me, SPELL_SHADOWSHIELD);
- ShadowShield_Timer = 25000;
- } else ShadowShield_Timer -= diff;
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_SHADOW_WORD_PAIN:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
+ DoCast(target, SPELL_SHADOWWORDPAIN);
+ _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 7000);
+ break;
+ case EVENT_PSYCHIC_SCREAM:
+ DoCastVictim(SPELL_PSYCHICSCREAM);
+ _events.ScheduleEvent(EVENT_PSYCHIC_SCREAM, 30000);
+ break;
+ case EVENT_MANABURN:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
+ DoCast(target, SPELL_MANABURN);
+ _events.ScheduleEvent(EVENT_MANABURN, 10000);
+ break;
+ case EVENT_SHADOWSHIELD:
+ DoCast(me, SPELL_SHADOWSHIELD);
+ _events.ScheduleEvent(EVENT_SHADOWSHIELD, 25000);
+ break;
+ default:
+ break;
+ }
+ }
- DoMeleeAttackIfReady();
+ DoMeleeAttackIfReady();
+ }
+
+ private:
+ EventMap _events;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new boss_high_interrogator_gerstahnAI(creature);
}
- };
};
void AddSC_boss_high_interrogator_gerstahn()
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_magmus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_magmus.cpp
index ce3a11d817b..e6bbbaa73a9 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_magmus.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_magmus.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -18,75 +17,96 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "blackrock_depths.h"
enum Spells
{
- SPELL_FIERYBURST = 13900,
- SPELL_WARSTOMP = 24375
+ SPELL_FIERYBURST = 13900,
+ SPELL_WARSTOMP = 24375
};
-enum Misc
+enum Events
{
- DATA_THRONE_DOOR = 24 // not id or guid of doors but number of enum in blackrock_depths.h
+ EVENT_FIERY_BURST = 1,
+ EVENT_WARSTOMP = 2
};
-class boss_magmus : public CreatureScript
+enum Phases
{
-public:
- boss_magmus() : CreatureScript("boss_magmus") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_magmusAI(creature);
- }
-
- struct boss_magmusAI : public ScriptedAI
- {
- boss_magmusAI(Creature* creature) : ScriptedAI(creature) { }
+ PHASE_ONE = 1,
+ PHASE_TWO = 2
+};
- uint32 FieryBurst_Timer;
- uint32 WarStomp_Timer;
+class boss_magmus : public CreatureScript
+{
+ public:
+ boss_magmus() : CreatureScript("boss_magmus") { }
- void Reset() OVERRIDE
+ struct boss_magmusAI : public ScriptedAI
{
- FieryBurst_Timer = 5000;
- WarStomp_Timer =0;
- }
+ boss_magmusAI(Creature* creature) : ScriptedAI(creature) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void Reset() override
+ {
+ _events.Reset();
+ }
- void UpdateAI(uint32 diff) OVERRIDE
- {
- //Return since we have no target
- if (!UpdateVictim())
- return;
+ void EnterCombat(Unit* /*who*/) override
+ {
+ _events.SetPhase(PHASE_ONE);
+ _events.ScheduleEvent(EVENT_FIERY_BURST, 5000);
+ }
- //FieryBurst_Timer
- if (FieryBurst_Timer <= diff)
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
- DoCastVictim(SPELL_FIERYBURST);
- FieryBurst_Timer = 6000;
- } else FieryBurst_Timer -= diff;
+ if (me->HealthBelowPctDamaged(50, damage) && _events.IsInPhase(PHASE_ONE))
+ {
+ _events.SetPhase(PHASE_TWO);
+ _events.ScheduleEvent(EVENT_WARSTOMP, 0, 0, PHASE_TWO);
+ }
+ }
- //WarStomp_Timer
- if (HealthBelowPct(51))
+ void UpdateAI(uint32 diff) override
{
- if (WarStomp_Timer <= diff)
+ if (!UpdateVictim())
+ return;
+
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
{
- DoCastVictim(SPELL_WARSTOMP);
- WarStomp_Timer = 8000;
- } else WarStomp_Timer -= diff;
+ switch (eventId)
+ {
+ case EVENT_FIERY_BURST:
+ DoCastVictim(SPELL_FIERYBURST);
+ _events.ScheduleEvent(EVENT_FIERY_BURST, 6000);
+ break;
+ case EVENT_WARSTOMP:
+ DoCastVictim(SPELL_WARSTOMP);
+ _events.ScheduleEvent(EVENT_WARSTOMP, 8000, 0, PHASE_TWO);
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
}
- DoMeleeAttackIfReady();
- }
- // When he die open door to last chamber
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
+ {
+ if (InstanceScript* instance = me->GetInstanceScript())
+ instance->HandleGameObject(instance->GetData64(DATA_THRONE_DOOR), true);
+ }
+
+ private:
+ EventMap _events;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
{
- if (InstanceScript* instance = killer->GetInstanceScript())
- instance->HandleGameObject(instance->GetData64(DATA_THRONE_DOOR), true);
+ return new boss_magmusAI(creature);
}
- };
};
void AddSC_boss_magmus()
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 21c887ac7d6..8342bef682b 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -29,63 +28,73 @@ enum Spells
SPELL_SMITE = 10934
};
-class boss_moira_bronzebeard : public CreatureScript
+enum Events
{
-public:
- boss_moira_bronzebeard() : CreatureScript("boss_moira_bronzebeard") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_moira_bronzebeardAI(creature);
- }
-
- struct boss_moira_bronzebeardAI : public ScriptedAI
- {
- boss_moira_bronzebeardAI(Creature* creature) : ScriptedAI(creature) { }
-
- uint32 Heal_Timer;
- uint32 MindBlast_Timer;
- uint32 ShadowWordPain_Timer;
- uint32 Smite_Timer;
-
- void Reset() OVERRIDE
- {
- Heal_Timer = 12000; //These times are probably wrong
- MindBlast_Timer = 16000;
- ShadowWordPain_Timer = 2000;
- Smite_Timer = 8000;
- }
+ EVENT_MINDBLAST = 1,
+ EVENT_SHADOW_WORD_PAIN = 2,
+ EVENT_SMITE = 3,
+ EVENT_HEAL = 4 // not used atm
+};
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+class boss_moira_bronzebeard : public CreatureScript
+{
+ public:
+ boss_moira_bronzebeard() : CreatureScript("boss_moira_bronzebeard") { }
- void UpdateAI(uint32 diff) OVERRIDE
+ struct boss_moira_bronzebeardAI : public ScriptedAI
{
- //Return since we have no target
- if (!UpdateVictim())
- return;
+ boss_moira_bronzebeardAI(Creature* creature) : ScriptedAI(creature) { }
- //MindBlast_Timer
- if (MindBlast_Timer <= diff)
+ void Reset() override
{
- DoCastVictim(SPELL_MINDBLAST);
- MindBlast_Timer = 14000;
- } else MindBlast_Timer -= diff;
+ _events.Reset();
+ }
- //ShadowWordPain_Timer
- if (ShadowWordPain_Timer <= diff)
+ void EnterCombat(Unit* /*who*/) override
{
- DoCastVictim(SPELL_SHADOWWORDPAIN);
- ShadowWordPain_Timer = 18000;
- } else ShadowWordPain_Timer -= diff;
+ //_events.ScheduleEvent(EVENT_HEAL, 12000); // not used atm // These times are probably wrong
+ _events.ScheduleEvent(EVENT_MINDBLAST, 16000);
+ _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 2000);
+ _events.ScheduleEvent(EVENT_SMITE, 8000);
+ }
- //Smite_Timer
- if (Smite_Timer <= diff)
+ void UpdateAI(uint32 diff) override
{
- DoCastVictim(SPELL_SMITE);
- Smite_Timer = 10000;
- } else Smite_Timer -= diff;
+ if (!UpdateVictim())
+ return;
+
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_MINDBLAST:
+ DoCastVictim(SPELL_MINDBLAST);
+ _events.ScheduleEvent(EVENT_MINDBLAST, 14000);
+ break;
+ case EVENT_SHADOW_WORD_PAIN:
+ DoCastVictim(SPELL_SHADOWWORDPAIN);
+ _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 18000);
+ break;
+ case EVENT_SMITE:
+ DoCastVictim(SPELL_SMITE);
+ _events.ScheduleEvent(EVENT_SMITE, 10000);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ private:
+ EventMap _events;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new boss_moira_bronzebeardAI(creature);
}
- };
};
void AddSC_boss_moira_bronzebeard()
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp
index f432d71ff68..83464c12230 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp
@@ -24,18 +24,24 @@
enum Spells
{
- SPELL_SMELT_DARK_IRON = 14891,
- SPELL_LEARN_SMELT = 14894,
+ SPELL_SMELT_DARK_IRON = 14891,
+ SPELL_LEARN_SMELT = 14894,
};
enum Quests
{
- QUEST_SPECTRAL_CHALICE = 4083
+ QUEST_SPECTRAL_CHALICE = 4083
};
enum Misc
{
- DATA_SKILLPOINT_MIN = 230
+ DATA_SKILLPOINT_MIN = 230
+};
+
+enum Phases
+{
+ PHASE_ONE = 1,
+ PHASE_TWO = 2
};
#define GOSSIP_ITEM_TEACH_1 "Teach me the art of smelting dark iron"
@@ -48,7 +54,7 @@ class boss_gloomrel : public CreatureScript
public:
boss_gloomrel() : CreatureScript("boss_gloomrel") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -77,7 +83,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestRewardStatus(QUEST_SPECTRAL_CHALICE) == 1 && player->GetSkillValue(SKILL_MINING) >= DATA_SKILLPOINT_MIN && !player->HasSpell(SPELL_SMELT_DARK_IRON))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_TEACH_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
@@ -99,149 +105,151 @@ enum DoomrelSpells
SPELL_SUMMON_VOIDWALKERS = 15092
};
+enum DoomrelEvents
+{
+ EVENT_SHADOW_BOLT_VOLLEY = 1,
+ EVENT_IMMOLATE = 2,
+ EVENT_CURSE_OF_WEAKNESS = 3,
+ EVENT_DEMONARMOR = 4,
+ EVENT_SUMMON_VOIDWALKERS = 5
+};
+
#define GOSSIP_ITEM_CHALLENGE "Your bondage is at an end, Doom'rel. I challenge you!"
#define GOSSIP_SELECT_DOOMREL "[PH] Continue..."
class boss_doomrel : public CreatureScript
{
-public:
- boss_doomrel() : CreatureScript("boss_doomrel") { }
+ public:
+ boss_doomrel() : CreatureScript("boss_doomrel") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
- {
- player->PlayerTalkClass->ClearMenus();
- switch (action)
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
- case GOSSIP_ACTION_INFO_DEF+1:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT_DOOMREL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
- player->SEND_GOSSIP_MENU(2605, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+2:
- player->CLOSE_GOSSIP_MENU();
- //start event here
- creature->setFaction(FACTION_HOSTILE);
- creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- creature->AI()->AttackStart(player);
- InstanceScript* instance = creature->GetInstanceScript();
- if (instance)
- instance->SetData64(DATA_EVENSTARTER, player->GetGUID());
- break;
+ player->PlayerTalkClass->ClearMenus();
+ switch (action)
+ {
+ case GOSSIP_ACTION_INFO_DEF+1:
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT_DOOMREL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ player->SEND_GOSSIP_MENU(2605, creature->GetGUID());
+ break;
+ case GOSSIP_ACTION_INFO_DEF+2:
+ player->CLOSE_GOSSIP_MENU();
+ //start event here
+ creature->setFaction(FACTION_HOSTILE);
+ creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ creature->AI()->AttackStart(player);
+ InstanceScript* instance = creature->GetInstanceScript();
+ if (instance)
+ instance->SetData64(DATA_EVENSTARTER, player->GetGUID());
+ break;
+ }
+ return true;
}
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
- {
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_CHALLENGE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- player->SEND_GOSSIP_MENU(2601, creature->GetGUID());
-
- return true;
- }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetInstanceAI<boss_doomrelAI>(creature);
- }
-
- struct boss_doomrelAI : public ScriptedAI
- {
- boss_doomrelAI(Creature* creature) : ScriptedAI(creature)
+ bool OnGossipHello(Player* player, Creature* creature) override
{
- instance = creature->GetInstanceScript();
- }
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_CHALLENGE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ player->SEND_GOSSIP_MENU(2601, creature->GetGUID());
- InstanceScript* instance;
- uint32 ShadowVolley_Timer;
- uint32 Immolate_Timer;
- uint32 CurseOfWeakness_Timer;
- uint32 DemonArmor_Timer;
- bool Voidwalkers;
+ return true;
+ }
- void Reset() OVERRIDE
+ struct boss_doomrelAI : public ScriptedAI
{
- ShadowVolley_Timer = 10000;
- Immolate_Timer = 18000;
- CurseOfWeakness_Timer = 5000;
- DemonArmor_Timer = 16000;
- Voidwalkers = false;
-
- me->setFaction(FACTION_FRIEND);
+ boss_doomrelAI(Creature* creature) : ScriptedAI(creature)
+ {
+ _instance = creature->GetInstanceScript();
+ }
- // was set before event start, so set again
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ void Reset() override
+ {
+ _voidwalkers = false;
- if (instance->GetData(DATA_GHOSTKILL) >= 7)
- me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
- else
- me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- }
+ me->setFaction(FACTION_FRIEND);
- void EnterCombat(Unit* /*who*/) OVERRIDE
- {
- }
+ // was set before event start, so set again
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- void EnterEvadeMode() OVERRIDE
- {
- me->RemoveAllAuras();
- me->DeleteThreatList();
- me->CombatStop(true);
- me->LoadCreaturesAddon();
- if (me->IsAlive())
- me->GetMotionMaster()->MoveTargetedHome();
- me->SetLootRecipient(NULL);
- instance->SetData64(DATA_EVENSTARTER, 0);
- }
-
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- instance->SetData(DATA_GHOSTKILL, 1);
- }
+ if (_instance->GetData(DATA_GHOSTKILL) >= 7)
+ me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
+ else
+ me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ }
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (!UpdateVictim())
- return;
+ void EnterCombat(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_SHADOW_BOLT_VOLLEY, 10000);
+ _events.ScheduleEvent(EVENT_IMMOLATE, 18000);
+ _events.ScheduleEvent(EVENT_CURSE_OF_WEAKNESS, 5000);
+ _events.ScheduleEvent(EVENT_DEMONARMOR, 16000);
+ }
- //ShadowVolley_Timer
- if (ShadowVolley_Timer <= diff)
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
- DoCastVictim(SPELL_SHADOWBOLTVOLLEY);
- ShadowVolley_Timer = 12000;
- } else ShadowVolley_Timer -= diff;
+ if (!_voidwalkers && !HealthAbovePct(50))
+ {
+ DoCastVictim(SPELL_SUMMON_VOIDWALKERS, true);
+ _voidwalkers = true;
+ }
+ }
- //Immolate_Timer
- if (Immolate_Timer <= diff)
+ void EnterEvadeMode() override
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- DoCast(target, SPELL_IMMOLATE);
+ ScriptedAI::EnterEvadeMode();
- Immolate_Timer = 25000;
- } else Immolate_Timer -= diff;
+ _instance->SetData64(DATA_EVENSTARTER, 0);
+ }
- //CurseOfWeakness_Timer
- if (CurseOfWeakness_Timer <= diff)
+ void JustDied(Unit* /*killer*/) override
{
- DoCastVictim(SPELL_CURSEOFWEAKNESS);
- CurseOfWeakness_Timer = 45000;
- } else CurseOfWeakness_Timer -= diff;
+ _instance->SetData(DATA_GHOSTKILL, 1);
+ }
- //DemonArmor_Timer
- if (DemonArmor_Timer <= diff)
+ void UpdateAI(uint32 diff) override
{
- DoCast(me, SPELL_DEMONARMOR);
- DemonArmor_Timer = 300000;
- } else DemonArmor_Timer -= diff;
+ if (!UpdateVictim())
+ return;
- //Summon Voidwalkers
- if (!Voidwalkers && HealthBelowPct(51))
- {
- DoCastVictim(SPELL_SUMMON_VOIDWALKERS, true);
- Voidwalkers = true;
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_SHADOW_BOLT_VOLLEY:
+ DoCastVictim(SPELL_SHADOWBOLTVOLLEY);
+ _events.ScheduleEvent(EVENT_SHADOW_BOLT_VOLLEY, 12000);
+ break;
+ case EVENT_IMMOLATE:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
+ DoCast(target, SPELL_IMMOLATE);
+ _events.ScheduleEvent(EVENT_IMMOLATE, 25000);
+ break;
+ case EVENT_CURSE_OF_WEAKNESS:
+ DoCastVictim(SPELL_CURSEOFWEAKNESS);
+ _events.ScheduleEvent(EVENT_CURSE_OF_WEAKNESS, 45000);
+ break;
+ case EVENT_DEMONARMOR:
+ DoCast(me, SPELL_DEMONARMOR);
+ _events.ScheduleEvent(EVENT_DEMONARMOR, 300000);
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
}
- DoMeleeAttackIfReady();
+ private:
+ InstanceScript* _instance;
+ EventMap _events;
+ bool _voidwalkers;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_doomrelAI>(creature);
}
- };
};
void AddSC_boss_tomb_of_seven()
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 42c7c046d48..f51a2a95c81 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp
@@ -69,7 +69,7 @@ class instance_blackrock_depths : public InstanceMapScript
public:
instance_blackrock_depths() : InstanceMapScript("instance_blackrock_depths", 230) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_blackrock_depths_InstanceMapScript(map);
}
@@ -115,7 +115,7 @@ public:
uint32 TombTimer;
uint32 TombEventCounter;
- void Initialize() OVERRIDE
+ void Initialize() override
{
memset(&encounter, 0, sizeof(encounter));
@@ -156,7 +156,7 @@ public:
TombBossGUIDs[i] = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -178,7 +178,7 @@ public:
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -212,7 +212,7 @@ public:
}
}
- void SetData64(uint32 type, uint64 data) OVERRIDE
+ void SetData64(uint32 type, uint64 data) override
{
TC_LOG_DEBUG("scripts", "Instance Blackrock Depths: SetData64 update (Type: %u Data " UI64FMTD ")", type, data);
@@ -228,7 +228,7 @@ public:
}
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
TC_LOG_DEBUG("scripts", "Instance Blackrock Depths: SetData update (Type: %u Data %u)", type, data);
@@ -275,7 +275,7 @@ public:
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -300,7 +300,7 @@ public:
return 0;
}
- uint64 GetData64(uint32 data) const OVERRIDE
+ uint64 GetData64(uint32 data) const override
{
switch (data)
{
@@ -342,12 +342,12 @@ public:
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
return str_data;
}
- void Load(const char* in) OVERRIDE
+ void Load(const char* in) override
{
if (!in)
{
@@ -429,7 +429,7 @@ public:
TombEventStarterGUID = 0;
SetData(TYPE_TOMB_OF_SEVEN, DONE);
}
- void Update(uint32 diff) OVERRIDE
+ void Update(uint32 diff) override
{
if (TombEventStarterGUID && GhostKillCount < 7)
{
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp
index 32b87a94ae4..6a56ce363f4 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp
@@ -45,12 +45,12 @@ public:
{
boss_drakkisathAI(Creature* creature) : BossAI(creature, DATA_GENERAL_DRAKKISATH) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_FIRE_NOVA, 6000);
@@ -59,12 +59,12 @@ public:
events.ScheduleEvent(EVENT_THUNDERCLAP, 17000);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -100,7 +100,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_drakkisathAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp
index 1c6c0a5aa62..e92409555da 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp
@@ -48,29 +48,29 @@ public:
{
boss_gizrul_the_slavenerAI(Creature* creature) : BossAI(creature, DATA_GIZRUL_THE_SLAVENER) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
me->GetMotionMaster()->MovePath(GIZRUL_PATH, false);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_FATAL_BITE, urand(17000,20000));
events.ScheduleEvent(EVENT_INFECTED_BITE, urand(10000,12000));
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -100,7 +100,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_gizrul_the_slavenerAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp
index 96582fdf6fe..ed62e26075c 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp
@@ -57,7 +57,7 @@ public:
bool SummonedRend;
- void Reset() OVERRIDE
+ void Reset() override
{
SummonedRend = false;
if (instance->GetBossState(DATA_GYTH) == IN_PROGRESS)
@@ -67,7 +67,7 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
@@ -77,12 +77,12 @@ public:
events.ScheduleEvent(EVENT_KNOCK_AWAY, urand(12000, 18000));
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetBossState(DATA_GYTH, DONE);
}
- void SetData(uint32 /*type*/, uint32 data) OVERRIDE
+ void SetData(uint32 /*type*/, uint32 data) override
{
switch (data)
{
@@ -94,7 +94,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!SummonedRend && HealthBelowPct(5))
@@ -160,7 +160,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_gythAI>(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp
index 482cc9cf81a..d5f7a4ce34b 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp
@@ -47,20 +47,20 @@ public:
{
boss_halyconAI(Creature* creature) : BossAI(creature, DATA_HALYCON) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
Summoned = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_REND, urand(17000,20000));
events.ScheduleEvent(EVENT_THRASH, urand(10000,12000));
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->SummonCreature(NPC_GIZRUL_THE_SLAVENER, SummonLocation, TEMPSUMMON_TIMED_DESPAWN, 300000);
Talk(EMOTE_DEATH);
@@ -68,7 +68,7 @@ public:
Summoned = true;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -99,7 +99,7 @@ public:
bool Summoned;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_halyconAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp
index 590c025388b..25e8014639f 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp
@@ -37,7 +37,7 @@ class boss_highlord_omokk : public CreatureScript
public:
boss_highlord_omokk() : CreatureScript("boss_highlord_omokk") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_highlordomokkAI(creature);
}
@@ -46,24 +46,24 @@ public:
{
boss_highlordomokkAI(Creature* creature) : BossAI(creature, DATA_HIGHLORD_OMOKK) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_FRENZY, 20000);
events.ScheduleEvent(EVENT_KNOCK_AWAY, 18000);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
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 41e0fb61018..23593442e86 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp
@@ -48,26 +48,26 @@ public:
{
boss_lord_valthalakAI(Creature* creature) : BossAI(creature, DATA_LORD_VALTHALAK) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
frenzy40 = false;
frenzy15 = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_SUMMON_SPECTRAL_ASSASSIN, urand(6000,8000));
events.ScheduleEvent(EVENT_SHADOW_WRATH, urand(9000,18000));
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_LORD_VALTHALAK, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -125,7 +125,7 @@ public:
bool frenzy15;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_lord_valthalakAI>(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp
index ed1916b90d6..87ecd00609d 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp
@@ -38,7 +38,7 @@ class boss_mother_smolderweb : public CreatureScript
public:
boss_mother_smolderweb() : CreatureScript("boss_mother_smolderweb") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_mothersmolderwebAI(creature);
}
@@ -47,30 +47,30 @@ public:
{
boss_mothersmolderwebAI(Creature* creature) : BossAI(creature, DATA_MOTHER_SMOLDERWEB) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_CRYSTALIZE, 20 * IN_MILLISECONDS);
events.ScheduleEvent(EVENT_MOTHERS_MILK, 10 * IN_MILLISECONDS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
if (me->GetHealth() <= damage)
DoCast(me, SPELL_SUMMON_SPIRE_SPIDERLING, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp
index 8db2065b3ea..cc6911b5da7 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp
@@ -50,7 +50,7 @@ class boss_overlord_wyrmthalak : public CreatureScript
public:
boss_overlord_wyrmthalak() : CreatureScript("boss_overlord_wyrmthalak") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_overlordwyrmthalakAI(creature);
}
@@ -61,13 +61,13 @@ public:
bool Summoned;
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
Summoned = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_BLAST_WAVE, 20 * IN_MILLISECONDS);
@@ -76,12 +76,12 @@ public:
events.ScheduleEvent(EVENT_KNOCK_AWAY, 12 * IN_MILLISECONDS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp
index 7f5cd93a5b1..2bd43e7283c 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp
@@ -77,7 +77,7 @@ public:
{
boss_pyroguard_emberseerAI(Creature* creature) : BossAI(creature, DATA_PYROGAURD_EMBERSEER) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
events.Reset();
@@ -95,7 +95,7 @@ public:
OpenDoors(false); // Opens 2 entrance doors
}
- void SetData(uint32 /*type*/, uint32 data) OVERRIDE
+ void SetData(uint32 /*type*/, uint32 data) override
{
switch (data)
{
@@ -119,7 +119,7 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
// ### TODO Check combat timing ###
events.ScheduleEvent(EVENT_FIRENOVA, 6000);
@@ -127,7 +127,7 @@ public:
events.ScheduleEvent(EVENT_PYROBLAST, 14000);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
// Activate all the runes
UpdateRunes(GO_STATE_READY);
@@ -137,7 +137,7 @@ public:
instance->SetBossState(DATA_PYROGAURD_EMBERSEER, DONE);
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_ENCAGE_EMBERSEER)
{
@@ -196,7 +196,7 @@ public:
rune7->SetGoState(state);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
{
@@ -212,13 +212,12 @@ public:
std::list<Creature*> creatureList;
GetCreatureListWithEntryInGrid(creatureList, me, NPC_BLACKHAND_INCARCERATOR, 35.0f);
for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
- if (Creature* creatureList = *itr)
+ if (Creature* creature = *itr)
{
- if (!creatureList->IsAlive())
- {
- creatureList->Respawn();
- }
- creatureList->AI()->SetData(1, 1);
+ if (!creature->IsAlive())
+ creature->Respawn();
+
+ creature->AI()->SetData(1, 1);
}
me->AddAura(SPELL_ENCAGED_EMBERSEER, me);
instance->SetBossState(DATA_PYROGAURD_EMBERSEER, NOT_STARTED);
@@ -231,8 +230,8 @@ public:
GetCreatureListWithEntryInGrid(creatureList, me, NPC_BLACKHAND_INCARCERATOR, 35.0f);
for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
{
- if (Creature* creatureList = *itr)
- creatureList->AI()->SetData(1, 1);
+ if (Creature* creature = *itr)
+ creature->AI()->SetData(1, 1);
}
events.ScheduleEvent(EVENT_PRE_FIGHT_2, 32000);
break;
@@ -305,7 +304,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_pyroguard_emberseerAI>(creature);
}
@@ -333,19 +332,19 @@ public:
{
npc_blackhand_incarceratorAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
if (Creature* Emberseer = me->FindNearestCreature(NPC_PYROGAURD_EMBERSEER, 30.0f, true))
Emberseer->AI()->SetData(1, 3);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->DespawnOrUnsummon(10000);
}
- void SetData(uint32 data, uint32 value) OVERRIDE
+ void SetData(uint32 data, uint32 value) override
{
if (data == 1 && value == 1)
{
@@ -355,12 +354,10 @@ public:
}
if (data == 1 && value == 2)
- {
_events.ScheduleEvent(EVENT_ENCAGED_EMBERSEER, 1000);
- }
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
// Used to close doors
if (Creature* Emberseer = me->FindNearestCreature(NPC_PYROGAURD_EMBERSEER, 30.0f, true))
@@ -371,15 +368,15 @@ public:
GetCreatureListWithEntryInGrid(creatureList, me, NPC_BLACKHAND_INCARCERATOR, 60.0f);
for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
{
- if (Creature* creatureList = *itr)
- creatureList->SetInCombatWithZone(); // AI()->AttackStart(me->GetVictim());
+ if (Creature* creature = *itr)
+ creature->SetInCombatWithZone(); // AI()->AttackStart(me->GetVictim());
}
_events.ScheduleEvent(EVENT_STRIKE, urand(8000, 16000));
_events.ScheduleEvent(EVENT_ENCAGE, urand(10000, 20000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
@@ -431,7 +428,7 @@ public:
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_blackhand_incarceratorAI(creature);
}
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 27229b6ba71..e431bebcf02 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp
@@ -42,24 +42,24 @@ public:
{
boss_quatermasterzigrisAI(Creature* creature) : BossAI(creature, DATA_QUARTERMASTER_ZIGRIS) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_SHOOT, 1000);
events.ScheduleEvent(EVENT_STUN_BOMB, 16000);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -87,7 +87,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_quatermasterzigrisAI(creature);
}
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 0cb96a519e7..94bf3e991f4 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
@@ -171,7 +171,7 @@ public:
portcullisGUID = 0;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
gythEvent = false;
@@ -179,7 +179,7 @@ public:
portcullisGUID = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_WHIRLWIND, urand(13000, 15000));
@@ -187,14 +187,14 @@ public:
events.ScheduleEvent(EVENT_MORTAL_STRIKE, urand(17000, 19000));
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
if (Creature* victor = me->FindNearestCreature(NPC_LORD_VICTOR_NEFARIUS, 75.0f, true))
victor->AI()->SetData(1, 2);
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
if (type == AREATRIGGER && data == AREATRIGGER_BLACKROCK_STADIUM)
{
@@ -214,7 +214,7 @@ public:
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == WAYPOINT_MOTION_TYPE)
{
@@ -232,7 +232,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (gythEvent)
{
@@ -243,37 +243,37 @@ public:
switch (eventId)
{
case EVENT_START_1:
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_0);
events.ScheduleEvent(EVENT_START_2, 4000);
break;
case EVENT_START_2:
events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->HandleEmoteCommand(EMOTE_ONESHOT_POINT);
events.ScheduleEvent(EVENT_START_3, 4000);
break;
case EVENT_START_3:
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_1);
events.ScheduleEvent(EVENT_WAVE_1, 2000);
events.ScheduleEvent(EVENT_TURN_TO_REND, 4000);
events.ScheduleEvent(EVENT_WAVES_TEXT_1, 20000);
break;
case EVENT_TURN_TO_REND:
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
{
victor->SetFacingToObject(me);
victor->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
}
break;
case EVENT_TURN_TO_PLAYER:
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
if (Unit* player = victor->SelectNearestPlayer(60.0f))
victor->SetFacingToObject(player);
break;
case EVENT_TURN_TO_FACING_1:
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->SetFacingTo(1.518436f);
break;
case EVENT_TURN_TO_FACING_2:
@@ -283,7 +283,7 @@ public:
me->SetFacingTo(1.500983f);
break;
case EVENT_WAVES_EMOTE_1:
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->HandleEmoteCommand(EMOTE_ONESHOT_QUESTION);
break;
case EVENT_WAVES_EMOTE_2:
@@ -291,7 +291,7 @@ public:
break;
case EVENT_WAVES_TEXT_1:
events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_2);
me->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000);
@@ -301,7 +301,7 @@ public:
break;
case EVENT_WAVES_TEXT_2:
events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_3);
events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000);
events.ScheduleEvent(EVENT_WAVE_3, 2000);
@@ -309,7 +309,7 @@ public:
break;
case EVENT_WAVES_TEXT_3:
events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_4);
events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000);
events.ScheduleEvent(EVENT_WAVE_4, 2000);
@@ -324,7 +324,7 @@ public:
break;
case EVENT_WAVES_TEXT_5:
events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_5);
events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000);
events.ScheduleEvent(EVENT_WAVE_6, 2000);
@@ -332,26 +332,26 @@ public:
break;
case EVENT_WAVES_COMPLETE_TEXT_1:
events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0);
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_6);
events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000);
events.ScheduleEvent(EVENT_WAVES_COMPLETE_TEXT_2, 13000);
break;
case EVENT_WAVES_COMPLETE_TEXT_2:
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_7);
Talk(SAY_BLACKHAND_2);
events.ScheduleEvent(EVENT_PATH_REND, 1000);
events.ScheduleEvent(EVENT_WAVES_COMPLETE_TEXT_3, 4000);
break;
case EVENT_WAVES_COMPLETE_TEXT_3:
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->AI()->Talk(SAY_NEFARIUS_8);
events.ScheduleEvent(EVENT_PATH_NEFARIUS, 1000);
events.ScheduleEvent(EVENT_PATH_REND, 1000);
break;
case EVENT_PATH_NEFARIUS:
- if (Creature* victor = me->GetCreature(*me, victorGUID))
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
victor->GetMotionMaster()->MovePath(NEFARIUS_PATH_1, true);
break;
case EVENT_PATH_REND:
@@ -441,7 +441,7 @@ public:
uint64 portcullisGUID;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_rend_blackhandAI>(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp
index dac7e8f50ba..f70864c0ebe 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp
@@ -39,7 +39,7 @@ class boss_shadow_hunter_voshgajin : public CreatureScript
public:
boss_shadow_hunter_voshgajin() : CreatureScript("boss_shadow_hunter_voshgajin") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_shadowvoshAI(creature);
}
@@ -48,13 +48,13 @@ public:
{
boss_shadowvoshAI(Creature* creature) : BossAI(creature, DATA_SHADOW_HUNTER_VOSHGAJIN) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
//DoCast(me, SPELL_ICEARMOR, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, 2 * IN_MILLISECONDS);
@@ -62,12 +62,12 @@ public:
events.ScheduleEvent(EVENT_CLEAVE, 14 * IN_MILLISECONDS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
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 0c9c66b83f3..51e84359707 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp
@@ -39,7 +39,7 @@ class boss_the_beast : public CreatureScript
public:
boss_the_beast() : CreatureScript("boss_the_beast") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_thebeastAI(creature);
}
@@ -48,12 +48,12 @@ public:
{
boss_thebeastAI(Creature* creature) : BossAI(creature, DATA_THE_BEAST) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_FLAME_BREAK, 12 * IN_MILLISECONDS);
@@ -61,12 +61,12 @@ public:
events.ScheduleEvent(EVENT_TERRIFYING_ROAR, 23 * IN_MILLISECONDS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp
index a525e0395d1..412844b8709 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp
@@ -48,12 +48,12 @@ public:
{
boss_urok_doomhowlAI(Creature* creature) : BossAI(creature, DATA_UROK_DOOMHOWL) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(SPELL_REND, urand(17000,20000));
@@ -61,12 +61,12 @@ public:
Talk(SAY_AGGRO);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -96,7 +96,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_urok_doomhowlAI(creature);
}
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 dc84aba0ee3..756f8d22511 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp
@@ -49,12 +49,12 @@ public:
{
boss_warmastervooneAI(Creature* creature) : BossAI(creature, DATA_WARMASTER_VOONE) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_SNAP_KICK, 8 * IN_MILLISECONDS);
@@ -65,12 +65,12 @@ public:
events.ScheduleEvent(EVENT_THROW_AXE, 1 * IN_MILLISECONDS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -114,7 +114,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_warmastervooneAI(creature);
}
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 d335ebccb6c..555eac21c43 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp
@@ -26,7 +26,7 @@
#include "ScriptedCreature.h"
#include "blackrock_spire.h"
-uint32 const DragonspireRunes[7] = { GO_HALL_RUNE_1, GO_HALL_RUNE_2, GO_HALL_RUNE_3, GO_HALL_RUNE_4, GO_HALL_RUNE_5, GO_HALL_RUNE_6, GO_HALL_RUNE_7 };
+//uint32 const DragonspireRunes[7] = { GO_HALL_RUNE_1, GO_HALL_RUNE_2, GO_HALL_RUNE_3, GO_HALL_RUNE_4, GO_HALL_RUNE_5, GO_HALL_RUNE_6, GO_HALL_RUNE_7 };
uint32 const DragonspireMobs[3] = { NPC_BLACKHAND_DREADWEAVER, NPC_BLACKHAND_SUMMONER, NPC_BLACKHAND_VETERAN };
@@ -77,7 +77,7 @@ public:
memset(go_emberseerrunes, 0, sizeof(go_emberseerrunes));
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -135,7 +135,7 @@ public:
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -242,7 +242,7 @@ public:
}
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -272,7 +272,7 @@ public:
return true;
}
- void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) OVERRIDE
+ void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) override
{
switch (eventId)
{
@@ -294,7 +294,7 @@ public:
}
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -309,7 +309,7 @@ public:
}
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -385,7 +385,7 @@ public:
return 0;
}
- void Update(uint32 diff) OVERRIDE
+ void Update(uint32 diff) override
{
Events.Update(diff);
@@ -410,24 +410,24 @@ public:
void Dragonspireroomstore()
{
- uint8 creaturecount;
+ uint8 creatureCount;
for (uint8 i = 0; i < 7; ++i)
{
- creaturecount = 0;
+ creatureCount = 0;
if (GameObject* rune = instance->GetGameObject(go_roomrunes[i]))
{
- for (uint8 ii = 0; ii < 3; ++ii)
+ for (uint8 j = 0; j < 3; ++j)
{
std::list<Creature*> creatureList;
- GetCreatureListWithEntryInGrid(creatureList, rune, DragonspireMobs[ii], 15.0f);
+ GetCreatureListWithEntryInGrid(creatureList, rune, DragonspireMobs[j], 15.0f);
for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
{
- if (Creature* creatureList = *itr)
+ if (Creature* creature = *itr)
{
- runecreaturelist[i] [creaturecount] = creatureList->GetGUID();
- ++creaturecount;
+ runecreaturelist[i][creatureCount] = creature->GetGUID();
+ ++creatureCount;
}
}
}
@@ -502,7 +502,7 @@ public:
}
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -513,7 +513,7 @@ public:
return saveStream.str();
}
- void Load(const char* strIn) OVERRIDE
+ void Load(const char* strIn) override
{
if (!strIn)
{
@@ -574,7 +574,7 @@ public:
uint64 go_portcullis_tobossrooms;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_blackrock_spireMapScript(map);
}
@@ -589,7 +589,7 @@ class at_dragonspire_hall : public AreaTriggerScript
public:
at_dragonspire_hall() : AreaTriggerScript("at_dragonspire_hall") { }
- bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE
+ bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override
{
if (player && player->IsAlive())
{
@@ -613,7 +613,7 @@ class at_blackrock_stadium : public AreaTriggerScript
public:
at_blackrock_stadium() : AreaTriggerScript("at_blackrock_stadium") { }
- bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE
+ bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override
{
if (player && player->IsAlive())
{
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp
index 307f5e24619..491d8cbd512 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp
@@ -52,7 +52,7 @@ public:
{
boss_broodlordAI(Creature* creature) : BossAI(creature, BOSS_BROODLORD) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (instance->GetBossState(BOSS_VAELASTRAZ) != DONE)
{
@@ -70,7 +70,7 @@ public:
events.ScheduleEvent(EVENT_CHECK, 1000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -114,7 +114,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_broodlordAI>(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp
index 3930656f0e1..efe0a0e2a78 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp
@@ -173,7 +173,7 @@ public:
EnterEvadeMode();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
@@ -181,7 +181,7 @@ public:
Enraged = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (instance->GetBossState(BOSS_FLAMEGOR) != DONE)
{
@@ -197,7 +197,7 @@ public:
events.ScheduleEvent(EVENT_FRENZY, 15000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -280,7 +280,7 @@ public:
bool Enraged;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_chromaggusAI>(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp
index 8d25fe117fe..158ffce8cea 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp
@@ -43,7 +43,7 @@ public:
{
boss_ebonrocAI(Creature* creature) : BossAI(creature, BOSS_EBONROC) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (instance->GetBossState(BOSS_BROODLORD) != DONE)
{
@@ -57,7 +57,7 @@ public:
events.ScheduleEvent(EVENT_SHADOWOFEBONROC, urand(8000, 10000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -90,7 +90,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_ebonrocAI>(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_firemaw.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_firemaw.cpp
index cbd625e852a..4814a1a98d1 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_firemaw.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_firemaw.cpp
@@ -43,7 +43,7 @@ public:
{
boss_firemawAI(Creature* creature) : BossAI(creature, BOSS_FIREMAW) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (instance->GetBossState(BOSS_BROODLORD) != DONE)
{
@@ -57,7 +57,7 @@ public:
events.ScheduleEvent(EVENT_FLAMEBUFFET, 5000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -92,7 +92,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_firemawAI>(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_flamegor.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_flamegor.cpp
index 390bcaa3c9d..98bf146c9c9 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_flamegor.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_flamegor.cpp
@@ -48,7 +48,7 @@ public:
{
boss_flamegorAI(Creature* creature) : BossAI(creature, BOSS_FLAMEGOR) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (instance->GetBossState(BOSS_BROODLORD) != DONE)
{
@@ -62,7 +62,7 @@ public:
events.ScheduleEvent(EVENT_FRENZY, 10000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -98,7 +98,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_flamegorAI>(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp
index fd56bf98274..262befdd3ec 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp
@@ -168,7 +168,7 @@ public:
{
boss_victor_nefariusAI(Creature* creature) : BossAI(creature, BOSS_NEFARIAN) { }
- void Reset() OVERRIDE
+ void Reset() override
{
SpawnedAdds = 0;
@@ -186,7 +186,7 @@ public:
}
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
Reset();
}
@@ -208,7 +208,7 @@ public:
events.ScheduleEvent(EVENT_SPAWN_ADD, 10000);
}
- void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) OVERRIDE
+ void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override
{
if (summon->GetEntry() != NPC_NEFARIAN)
{
@@ -219,9 +219,9 @@ public:
}
}
- void JustSummoned(Creature* /*summon*/) OVERRIDE { }
+ void JustSummoned(Creature* /*summon*/) override { }
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
if ( type == 1 && data == 1)
{
@@ -233,7 +233,7 @@ public:
events.ScheduleEvent(EVENT_SUCCESS_1, 5000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
{
@@ -359,7 +359,7 @@ public:
}
}
- void sGossipSelect(Player* player, uint32 sender, uint32 action) OVERRIDE
+ void sGossipSelect(Player* player, uint32 sender, uint32 action) override
{
if (sender == GOSSIP_ID && action == GOSSIP_OPTION_ID)
{
@@ -373,7 +373,7 @@ public:
uint32 SpawnedAdds;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_victor_nefariusAI>(creature);
}
@@ -388,19 +388,19 @@ public:
{
boss_nefarianAI(Creature* creature) : BossAI(creature, BOSS_NEFARIAN) { }
- void Reset() OVERRIDE
+ void Reset() override
{
Phase3 = false;
canDespawn = false;
DespawnTimer = 30000;
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
canDespawn = true;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_SHADOWFLAME, 12000);
events.ScheduleEvent(EVENT_FEAR, urand(25000, 35000));
@@ -411,21 +411,21 @@ public:
Talk(SAY_RANDOM);
}
- void JustDied(Unit* /*Killer*/) OVERRIDE
+ void JustDied(Unit* /*Killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
- if (rand()%5)
+ if (rand32() % 5)
return;
Talk(SAY_SLAY, victim);
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -438,7 +438,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (canDespawn && DespawnTimer <= diff)
{
@@ -568,7 +568,7 @@ public:
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_nefarianAI>(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp
index b1bc34b0437..8d4a84197b1 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp
@@ -70,7 +70,7 @@ public:
{
boss_razorgoreAI(Creature* creature) : BossAI(creature, BOSS_RAZORGORE) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
@@ -78,7 +78,7 @@ public:
instance->SetData(DATA_EGG_EVENT, NOT_STARTED);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
@@ -98,19 +98,19 @@ public:
me->SetHealth(me->GetMaxHealth());
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_PHASE_TWO)
DoChangePhase();
}
- void DamageTaken(Unit* /*who*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*who*/, uint32& damage) override
{
if (!secondPhase)
damage = 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -138,7 +138,7 @@ public:
break;
case EVENT_CONFLAGRATION:
DoCastVictim(SPELL_CONFLAGRATION);
- if (me->GetVictim() && me->GetVictim()->HasAura(SPELL_CONFLAGRATION))
+ if (me->GetVictim() && me->EnsureVictim()->HasAura(SPELL_CONFLAGRATION))
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true))
me->TauntApply(target);
events.ScheduleEvent(EVENT_CONFLAGRATION, 30000);
@@ -152,7 +152,7 @@ public:
bool secondPhase;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_razorgoreAI>(creature);
}
@@ -163,11 +163,11 @@ class go_orb_of_domination : public GameObjectScript
public:
go_orb_of_domination() : GameObjectScript("go_orb_of_domination") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (InstanceScript* instance = go->GetInstanceScript())
if (instance->GetData(DATA_EGG_EVENT) != DONE)
- if (Creature* razor = Unit::GetCreature(*go, instance->GetData64(DATA_RAZORGORE_THE_UNTAMED)))
+ if (Creature* razor = ObjectAccessor::GetCreature(*go, instance->GetData64(DATA_RAZORGORE_THE_UNTAMED)))
{
razor->Attack(player, true);
player->CastSpell(razor, SPELL_MINDCONTROL);
@@ -191,13 +191,13 @@ class spell_egg_event : public SpellScriptLoader
instance->SetData(DATA_EGG_EVENT, SPECIAL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnHit += SpellHitFn(spell_egg_eventSpellScript::HandleOnHit);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_egg_eventSpellScript();
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp
index f8e00e4ed74..e3085854f4a 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp
@@ -75,7 +75,7 @@ public:
creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
@@ -85,7 +85,7 @@ public:
HasYelled = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
@@ -109,15 +109,15 @@ public:
events.ScheduleEvent(EVENT_SPEECH_1, 1000);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
- if (rand()%5)
+ if (rand32() % 5)
return;
Talk(SAY_KILLTARGET, victim);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -146,8 +146,8 @@ public:
break;
case EVENT_SPEECH_4:
me->setFaction(103);
- if (PlayerGUID && Unit::GetUnit(*me, PlayerGUID))
- AttackStart(Unit::GetUnit(*me, PlayerGUID));;
+ if (PlayerGUID && ObjectAccessor::GetUnit(*me, PlayerGUID))
+ AttackStart(ObjectAccessor::GetUnit(*me, PlayerGUID));;
break;
}
}
@@ -200,7 +200,7 @@ public:
break;
case EVENT_BURNINGADRENALINE_TANK:
// have the victim cast the spell on himself otherwise the third effect aura will be applied to Vael instead of the player
- me->GetVictim()->CastSpell(me->GetVictim(), SPELL_BURNINGADRENALINE, true);
+ me->EnsureVictim()->CastSpell(me->GetVictim(), SPELL_BURNINGADRENALINE, true);
events.ScheduleEvent(EVENT_BURNINGADRENALINE_TANK, 45000);
break;
}
@@ -216,7 +216,7 @@ public:
DoMeleeAttackIfReady();
}
- void sGossipSelect(Player* player, uint32 sender, uint32 action) OVERRIDE
+ void sGossipSelect(Player* player, uint32 sender, uint32 action) override
{
if (sender == GOSSIP_ID && action == 0)
{
@@ -230,7 +230,7 @@ public:
bool HasYelled;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_vaelAI(creature);
}
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 560f2e2e995..be8bc34acf1 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp
@@ -81,7 +81,7 @@ public:
SetBossNumber(EncounterCount);
}
- void Initialize() OVERRIDE
+ void Initialize() override
{
// Razorgore
EggCount = 0;
@@ -108,7 +108,7 @@ public:
NefarianGUID = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -149,7 +149,7 @@ public:
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -182,13 +182,13 @@ public:
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
if (go->GetEntry() == 177807) // Egg
EggList.remove(go->GetGUID());
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -238,7 +238,7 @@ public:
return true;
}
- uint64 GetData64(uint32 id) const OVERRIDE
+ uint64 GetData64(uint32 id) const override
{
switch (id)
{
@@ -256,7 +256,7 @@ public:
return 0;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
if (type == DATA_EGG_EVENT)
{
@@ -291,14 +291,14 @@ public:
}
}
- void OnUnitDeath(Unit* unit) OVERRIDE
+ void OnUnitDeath(Unit* unit) override
{
//! HACK, needed because of buggy CreatureAI after charm
if (unit->GetEntry() == NPC_RAZORGORE && GetBossState(BOSS_RAZORGORE) != DONE)
SetBossState(BOSS_RAZORGORE, DONE);
}
- void Update(uint32 diff) OVERRIDE
+ void Update(uint32 diff) override
{
if (_events.Empty())
return;
@@ -366,7 +366,7 @@ public:
uint64 NefarianGUID;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_blackwing_lair_InstanceMapScript(map);
}
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 334f055b748..81731fabeb0 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp
@@ -59,7 +59,7 @@ class boss_baron_geddon : public CreatureScript
{
}
- void EnterCombat(Unit* victim) OVERRIDE
+ void EnterCombat(Unit* victim) override
{
BossAI::EnterCombat(victim);
events.ScheduleEvent(EVENT_INFERNO, 45000);
@@ -67,7 +67,7 @@ class boss_baron_geddon : public CreatureScript
events.ScheduleEvent(EVENT_LIVING_BOMB, 35000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -113,7 +113,7 @@ class boss_baron_geddon : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_baron_geddonAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp
index da72f9f5b5c..2a1309dc097 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp
@@ -57,14 +57,14 @@ class boss_garr : public CreatureScript
{
}
- void EnterCombat(Unit* victim) OVERRIDE
+ void EnterCombat(Unit* victim) override
{
BossAI::EnterCombat(victim);
events.ScheduleEvent(EVENT_ANTIMAGIC_PULSE, 25000);
events.ScheduleEvent(EVENT_MAGMA_SHACKLES, 15000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -95,7 +95,7 @@ class boss_garr : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_garrAI(creature);
}
@@ -112,12 +112,12 @@ class npc_firesworn : public CreatureScript
uint32 immolateTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
immolateTimer = 4000; //These times are probably wrong
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
uint32 const health10pct = me->CountPctFromMaxHealth(10);
uint32 health = me->GetHealth();
@@ -129,7 +129,7 @@ class npc_firesworn : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -147,7 +147,7 @@ class npc_firesworn : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_fireswornAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp
index b1ee30b1cf2..39dc0f11248 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp
@@ -53,7 +53,7 @@ class boss_gehennas : public CreatureScript
{
}
- void EnterCombat(Unit* victim) OVERRIDE
+ void EnterCombat(Unit* victim) override
{
BossAI::EnterCombat(victim);
events.ScheduleEvent(EVENT_GEHENNAS_CURSE, 12000);
@@ -61,7 +61,7 @@ class boss_gehennas : public CreatureScript
events.ScheduleEvent(EVENT_SHADOW_BOLT, 6000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -98,7 +98,7 @@ class boss_gehennas : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_gehennasAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp
index 57922d7f7d9..f9757997731 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp
@@ -63,19 +63,19 @@ class boss_golemagg : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
BossAI::Reset();
DoCast(me, SPELL_MAGMASPLASH, true);
}
- void EnterCombat(Unit* victim) OVERRIDE
+ void EnterCombat(Unit* victim) override
{
BossAI::EnterCombat(victim);
events.ScheduleEvent(EVENT_PYROBLAST, 7000);
}
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
if (!HealthBelowPct(10) || me->HasAura(SPELL_ENRAGE))
return;
@@ -84,7 +84,7 @@ class boss_golemagg : public CreatureScript
events.ScheduleEvent(EVENT_EARTHQUAKE, 3000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -116,7 +116,7 @@ class boss_golemagg : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_golemaggAI(creature);
}
@@ -134,17 +134,17 @@ class npc_core_rager : public CreatureScript
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
mangleTimer = 7*IN_MILLISECONDS; // These times are probably wrong
}
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
if (HealthAbovePct(50) || !instance)
return;
- if (Creature* pGolemagg = instance->instance->GetCreature(instance->GetData64(BOSS_GOLEMAGG_THE_INCINERATOR)))
+ if (Creature* pGolemagg = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_GOLEMAGG_THE_INCINERATOR)))
{
if (pGolemagg->IsAlive())
{
@@ -155,7 +155,7 @@ class npc_core_rager : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -177,7 +177,7 @@ class npc_core_rager : public CreatureScript
uint32 mangleTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_core_ragerAI>(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp
index fa6f5bab928..e61b6f2cbf9 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp
@@ -53,7 +53,7 @@ class boss_lucifron : public CreatureScript
{
}
- void EnterCombat(Unit* victim) OVERRIDE
+ void EnterCombat(Unit* victim) override
{
BossAI::EnterCombat(victim);
events.ScheduleEvent(EVENT_IMPENDING_DOOM, 10000);
@@ -61,7 +61,7 @@ class boss_lucifron : public CreatureScript
events.ScheduleEvent(EVENT_SHADOW_SHOCK, 6000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -96,7 +96,7 @@ class boss_lucifron : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_lucifronAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp
index d674ab876f0..4a3b6cc16e4 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp
@@ -59,13 +59,13 @@ class boss_magmadar : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
BossAI::Reset();
DoCast(me, SPELL_MAGMA_SPIT, true);
}
- void EnterCombat(Unit* victim) OVERRIDE
+ void EnterCombat(Unit* victim) override
{
BossAI::EnterCombat(victim);
events.ScheduleEvent(EVENT_FRENZY, 30000);
@@ -73,7 +73,7 @@ class boss_magmadar : public CreatureScript
events.ScheduleEvent(EVENT_LAVA_BOMB, 12000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -110,7 +110,7 @@ class boss_magmadar : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_magmadarAI(creature);
}
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 653992cacdf..80f907d4803 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp
@@ -78,13 +78,13 @@ class boss_majordomo : public CreatureScript
{
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
if (urand(0, 99) < 25)
Talk(SAY_SLAY);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
BossAI::EnterCombat(who);
Talk(SAY_AGGRO);
@@ -94,7 +94,7 @@ class boss_majordomo : public CreatureScript
events.ScheduleEvent(EVENT_TELEPORT, 20000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (instance->GetBossState(BOSS_MAJORDOMO_EXECUTUS) != DONE)
{
@@ -173,7 +173,7 @@ class boss_majordomo : public CreatureScript
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_START_RAGNAROS)
{
@@ -190,21 +190,21 @@ class boss_majordomo : public CreatureScript
}
};
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
player->SEND_GOSSIP_MENU(GOSSIP_HELLO, creature->GetGUID());
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 /*action*/) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 /*action*/) override
{
player->CLOSE_GOSSIP_MENU();
creature->AI()->DoAction(ACTION_START_RAGNAROS);
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_majordomoAI>(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp
index 4d22ba6abb3..6eafb41a8fa 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp
@@ -87,7 +87,7 @@ class boss_ragnaros : public CreatureScript
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
}
- void Reset() OVERRIDE
+ void Reset() override
{
BossAI::Reset();
_emergeTimer = 90000;
@@ -97,7 +97,7 @@ class boss_ragnaros : public CreatureScript
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
}
- void EnterCombat(Unit* victim) OVERRIDE
+ void EnterCombat(Unit* victim) override
{
BossAI::EnterCombat(victim);
events.ScheduleEvent(EVENT_ERUPTION, 15000);
@@ -109,13 +109,13 @@ class boss_ragnaros : public CreatureScript
events.ScheduleEvent(EVENT_SUBMERGE, 180000);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
if (urand(0, 99) < 25)
Talk(SAY_KILL);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_introState != 2)
{
@@ -147,7 +147,7 @@ class boss_ragnaros : public CreatureScript
break;
case EVENT_INTRO_4:
Talk(SAY_ARRIVAL5_RAG);
- if (Creature* executus = Unit::GetCreature(*me, instance->GetData64(BOSS_MAJORDOMO_EXECUTUS)))
+ if (Creature* executus = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MAJORDOMO_EXECUTUS)))
me->Kill(executus);
break;
case EVENT_INTRO_5:
@@ -300,7 +300,7 @@ class boss_ragnaros : public CreatureScript
bool _isBanished;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_ragnarosAI>(creature);
}
@@ -318,12 +318,12 @@ class npc_son_of_flame : public CreatureScript
instance = me->GetInstanceScript();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_RAGNAROS_ADDS, 1);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
return;
@@ -335,7 +335,7 @@ class npc_son_of_flame : public CreatureScript
InstanceScript* instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_son_of_flameAI>(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp
index 4ca66a1c856..fcabf3d1b18 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp
@@ -56,7 +56,7 @@ class boss_shazzrah : public CreatureScript
{
}
- void EnterCombat(Unit* target) OVERRIDE
+ void EnterCombat(Unit* target) override
{
BossAI::EnterCombat(target);
events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, 6000);
@@ -66,7 +66,7 @@ class boss_shazzrah : public CreatureScript
events.ScheduleEvent(EVENT_BLINK, 30000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -117,7 +117,7 @@ class boss_shazzrah : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_shazzrahAI(creature);
}
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 ddb079b7b3d..dfe7a1527cd 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp
@@ -67,7 +67,7 @@ class boss_sulfuron : public CreatureScript
{
}
- void EnterCombat(Unit* victim) OVERRIDE
+ void EnterCombat(Unit* victim) override
{
BossAI::EnterCombat(victim);
events.ScheduleEvent(EVENT_DARK_STRIKE, 10000);
@@ -77,7 +77,7 @@ class boss_sulfuron : public CreatureScript
events.ScheduleEvent(EVENT_FLAMESPEAR, 2000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -127,7 +127,7 @@ class boss_sulfuron : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_sulfuronAI(creature);
}
@@ -144,17 +144,17 @@ class npc_flamewaker_priest : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
events.Reset();
}
- void EnterCombat(Unit* victim) OVERRIDE
+ void EnterCombat(Unit* victim) override
{
ScriptedAI::EnterCombat(victim);
events.ScheduleEvent(EVENT_HEAL, urand(15000, 30000));
@@ -162,7 +162,7 @@ class npc_flamewaker_priest : public CreatureScript
events.ScheduleEvent(EVENT_IMMOLATE, 8000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -203,7 +203,7 @@ class npc_flamewaker_priest : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_flamewaker_priestAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp
index 587ea51fc76..7dee91bfb6f 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp
@@ -79,7 +79,7 @@ class instance_molten_core : public InstanceMapScript
}
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -94,7 +94,7 @@ class instance_molten_core : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -106,7 +106,7 @@ class instance_molten_core : public InstanceMapScript
}
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
if (type == DATA_RAGNAROS_ADDS)
{
@@ -117,7 +117,7 @@ class instance_molten_core : public InstanceMapScript
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -128,7 +128,7 @@ class instance_molten_core : public InstanceMapScript
return 0;
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -183,7 +183,7 @@ class instance_molten_core : public InstanceMapScript
summon->AI()->DoAction(ACTION_START_RAGNAROS_ALT);
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -252,7 +252,7 @@ class instance_molten_core : public InstanceMapScript
bool _summonedExecutus;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_molten_core_InstanceMapScript(map);
}
diff --git a/src/server/scripts/EasternKingdoms/CMakeLists.txt b/src/server/scripts/EasternKingdoms/CMakeLists.txt
index 4adb087921b..d9ab6fa18ce 100644
--- a/src/server/scripts/EasternKingdoms/CMakeLists.txt
+++ b/src/server/scripts/EasternKingdoms/CMakeLists.txt
@@ -11,7 +11,6 @@
set(scripts_STAT_SRCS
${scripts_STAT_SRCS}
EasternKingdoms/zone_ghostlands.cpp
- EasternKingdoms/zone_eversong_woods.cpp
EasternKingdoms/AlteracValley/boss_galvangar.cpp
EasternKingdoms/AlteracValley/boss_balinda.cpp
EasternKingdoms/AlteracValley/boss_drekthar.cpp
@@ -85,7 +84,6 @@ set(scripts_STAT_SRCS
EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
EasternKingdoms/zone_isle_of_queldanas.cpp
- EasternKingdoms/boss_kruul.cpp
EasternKingdoms/ZulGurub/boss_hakkar.cpp
EasternKingdoms/ZulGurub/boss_mandokir.cpp
EasternKingdoms/ZulGurub/boss_marli.cpp
@@ -107,7 +105,6 @@ set(scripts_STAT_SRCS
EasternKingdoms/Gnomeregan/gnomeregan.cpp
EasternKingdoms/Gnomeregan/gnomeregan.h
EasternKingdoms/zone_redridge_mountains.cpp
- EasternKingdoms/zone_ironforge.cpp
EasternKingdoms/ScarletEnclave/chapter2.cpp
EasternKingdoms/ScarletEnclave/chapter5.cpp
EasternKingdoms/ScarletEnclave/chapter1.cpp
@@ -190,8 +187,6 @@ set(scripts_STAT_SRCS
EasternKingdoms/ZulAman/zulaman.h
EasternKingdoms/zone_hinterlands.cpp
EasternKingdoms/zone_western_plaguelands.cpp
- EasternKingdoms/zone_alterac_mountains.cpp
- EasternKingdoms/zone_westfall.cpp
EasternKingdoms/zone_silverpine_forest.cpp
EasternKingdoms/Karazhan/instance_karazhan.cpp
EasternKingdoms/Karazhan/boss_nightbane.cpp
diff --git a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp
index af8d1253dd8..ffb3c02d101 100644
--- a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp
+++ b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp
@@ -43,7 +43,7 @@ class boss_mr_smite : public CreatureScript
public:
boss_mr_smite() : CreatureScript("boss_mr_smite") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_mr_smiteAI>(creature);
}
@@ -66,7 +66,7 @@ public:
uint32 uiPhase;
uint32 uiTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiTrashTimer = urand(5000, 9000);
uiSlamTimer = 9000;
@@ -80,7 +80,7 @@ public:
SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
}
@@ -94,7 +94,7 @@ public:
return true;
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!UpdateVictim())
return;
@@ -165,7 +165,7 @@ public:
DoMeleeAttackIfReady();
}
- void MovementInform(uint32 uiType, uint32 /*uiId*/) OVERRIDE
+ void MovementInform(uint32 uiType, uint32 /*uiId*/) override
{
if (uiType != POINT_MOTION_TYPE)
return;
diff --git a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp
index f48314ea220..15d3f6225e1 100644
--- a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp
+++ b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp
@@ -39,7 +39,7 @@ class item_defias_gunpowder : public ItemScript
public:
item_defias_gunpowder() : ItemScript("item_defias_gunpowder") { }
- bool OnUse(Player* player, Item* item, SpellCastTargets const& targets) OVERRIDE
+ bool OnUse(Player* player, Item* item, SpellCastTargets const& targets) override
{
InstanceScript* instance = player->GetInstanceScript();
diff --git a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
index a2369f290f1..050ef1eb642 100644
--- a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
+++ b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
@@ -72,7 +72,7 @@ class instance_deadmines : public InstanceMapScript
uint32 PiratesDelay_Timer;
uint64 uiSmiteChestGUID;
- void Initialize() OVERRIDE
+ void Initialize() override
{
FactoryDoorGUID = 0;
IronCladDoorGUID = 0;
@@ -86,7 +86,7 @@ class instance_deadmines : public InstanceMapScript
uiSmiteChestGUID = 0;
}
- virtual void Update(uint32 diff) OVERRIDE
+ virtual void Update(uint32 diff) override
{
if (!IronCladDoorGUID || !DefiasCannonGUID || !DoorLeverGUID)
return;
@@ -188,7 +188,7 @@ class instance_deadmines : public InstanceMapScript
pDoorLever->SetUInt32Value(GAMEOBJECT_FLAGS, 4);
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -200,7 +200,7 @@ class instance_deadmines : public InstanceMapScript
}
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -216,7 +216,7 @@ class instance_deadmines : public InstanceMapScript
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -227,7 +227,7 @@ class instance_deadmines : public InstanceMapScript
return 0;
}
- uint64 GetData64(uint32 data) const OVERRIDE
+ uint64 GetData64(uint32 data) const override
{
switch (data)
{
@@ -246,7 +246,7 @@ class instance_deadmines : public InstanceMapScript
}
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_deadmines_InstanceMapScript(map);
}
diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
index 2b50c525f78..b171bf014c7 100644
--- a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
+++ b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
@@ -24,17 +24,13 @@ Script Data End */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
-#include "ScriptedGossip.h"
-#include "gnomeregan.h"
#include "ScriptedEscortAI.h"
+#include "ScriptedGossip.h"
#include "Player.h"
-
-#define GOSSIP_START_EVENT "I am ready to being"
+#include "gnomeregan.h"
enum BlastmasterEmi
{
- GOSSIP_TEXT_EMI = 1693,
-
SAY_BLASTMASTER_0 = 0,
SAY_BLASTMASTER_1 = 1,
SAY_BLASTMASTER_2 = 2,
@@ -88,39 +84,11 @@ class npc_blastmaster_emi_shortfuse : public CreatureScript
public:
npc_blastmaster_emi_shortfuse() : CreatureScript("npc_blastmaster_emi_shortfuse") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_blastmaster_emi_shortfuseAI>(creature);
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
- {
- player->PlayerTalkClass->ClearMenus();
- if (action == GOSSIP_ACTION_INFO_DEF+1)
- {
- if (npc_escortAI* pEscortAI = CAST_AI(npc_blastmaster_emi_shortfuse::npc_blastmaster_emi_shortfuseAI, creature->AI()))
- pEscortAI->Start(true, false, player->GetGUID());
-
- creature->setFaction(player->getFaction());
- creature->AI()->SetData(1, 0);
-
- player->CLOSE_GOSSIP_MENU();
- }
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
- {
- InstanceScript* instance = creature->GetInstanceScript();
-
- if (instance && instance->GetData(TYPE_EVENT) == NOT_STARTED)
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_START_EVENT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
-
- player->SEND_GOSSIP_MENU(GOSSIP_TEXT_EMI, creature->GetGUID());
-
- return true;
- }
-
struct npc_blastmaster_emi_shortfuseAI : public npc_escortAI
{
npc_blastmaster_emi_shortfuseAI(Creature* creature) : npc_escortAI(creature)
@@ -138,7 +106,7 @@ public:
std::list<uint64> SummonList;
std::list<uint64> GoSummonList;
- void Reset() OVERRIDE
+ void Reset() override
{
if (!HasEscortState(STATE_ESCORT_ESCORTING))
{
@@ -152,6 +120,19 @@ public:
}
}
+ void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ if (gossipListId == 0)
+ {
+ Start(true, false, player->GetGUID());
+
+ me->setFaction(player->getFaction());
+ SetData(1, 0);
+
+ player->PlayerTalkClass->SendCloseGossip();
+ }
+ }
+
void NextStep(uint32 uiTimerStep, bool bNextStep = true, uint8 uiPhaseStep = 0)
{
uiTimer = uiTimerStep;
@@ -217,7 +198,7 @@ public:
if (!SummonList.empty())
for (std::list<uint64>::const_iterator itr = SummonList.begin(); itr != SummonList.end(); ++itr)
{
- if (Creature* summon = Unit::GetCreature(*me, *itr))
+ if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr))
{
if (summon->IsAlive())
summon->DisappearAndDie();
@@ -251,7 +232,7 @@ public:
}
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
//just in case
if (GetPlayerForEscort())
@@ -295,7 +276,7 @@ public:
}
}
- void SetData(uint32 uiI, uint32 uiValue) OVERRIDE
+ void SetData(uint32 uiI, uint32 uiValue) override
{
switch (uiI)
{
@@ -392,7 +373,7 @@ public:
}
}
- void UpdateEscortAI(const uint32 uiDiff) OVERRIDE
+ void UpdateEscortAI(const uint32 uiDiff) override
{
if (uiPhase)
{
@@ -519,7 +500,7 @@ public:
DoMeleeAttackIfReady();
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
SummonList.push_back(summon->GetGUID());
AggroAllPlayers(summon);
@@ -533,7 +514,7 @@ class boss_grubbis : public CreatureScript
public:
boss_grubbis() : CreatureScript("boss_grubbis") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_grubbisAI(creature);
}
@@ -555,7 +536,7 @@ public:
creature->AI()->SetData(2, 1);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
return;
@@ -563,7 +544,7 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (!me->IsSummon())
return;
diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp
index 9dde2d91d1a..b35601fcc6c 100644
--- a/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp
+++ b/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp
@@ -27,7 +27,7 @@ class instance_gnomeregan : public InstanceMapScript
public:
instance_gnomeregan() : InstanceMapScript("instance_gnomeregan", 90) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_gnomeregan_InstanceMapScript(map);
}
@@ -45,7 +45,7 @@ public:
uint64 uiBastmasterEmiShortfuseGUID;
- void Initialize() OVERRIDE
+ void Initialize() override
{
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
@@ -55,7 +55,7 @@ public:
uiBastmasterEmiShortfuseGUID = 0;
}
- void Load(const char* in) OVERRIDE
+ void Load(const char* in) override
{
if (!in)
{
@@ -77,7 +77,7 @@ public:
OUT_LOAD_INST_DATA_COMPLETE;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -85,7 +85,7 @@ public:
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -102,7 +102,7 @@ public:
}
}
- void SetData(uint32 uiType, uint32 uiData) OVERRIDE
+ void SetData(uint32 uiType, uint32 uiData) override
{
switch (uiType)
{
@@ -114,7 +114,7 @@ public:
}
}
- uint32 GetData(uint32 uiType) const OVERRIDE
+ uint32 GetData(uint32 uiType) const override
{
switch (uiType)
{
@@ -123,7 +123,7 @@ public:
return 0;
}
- uint64 GetData64(uint32 uiType) const OVERRIDE
+ uint64 GetData64(uint32 uiType) const override
{
switch (uiType)
{
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp
index a16cec93da7..9fe21313f71 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp
@@ -53,7 +53,7 @@ class boss_curator : public CreatureScript
public:
boss_curator() : CreatureScript("boss_curator") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_curatorAI(creature);
}
@@ -69,7 +69,7 @@ public:
bool Enraged;
bool Evocating;
- void Reset() OVERRIDE
+ void Reset() override
{
AddTimer = 10000;
HatefulBoltTimer = 15000; //This time may be wrong
@@ -80,22 +80,22 @@ public:
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_ARCANE, true);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -136,7 +136,7 @@ public:
if (AddTimer <= diff)
{
//Summon Astral Flare
- Creature* AstralFlare = DoSpawnCreature(17096, float(rand()%37), float(rand()%37), 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
+ Creature* AstralFlare = DoSpawnCreature(17096, float(rand32() % 37), float(rand32() % 37), 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
Unit* target = NULL;
target = SelectTarget(SELECT_TARGET_RANDOM, 0);
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp
index 5ac7cedd6af..0f4840c0d1f 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -16,28 +15,34 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Maiden_of_Virtue
-SD%Complete: 100
-SDComment:
-SDCategory: Karazhan
-EndScriptData */
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "karazhan.h"
+
+enum Spells
+{
+ SPELL_REPENTANCE = 29511,
+ SPELL_HOLYFIRE = 29522,
+ SPELL_HOLYWRATH = 32445,
+ SPELL_HOLYGROUND = 29512,
+ SPELL_BERSERK = 26662
+};
-enum MaidenOfVirtue
+enum Yells
{
- SAY_AGGRO = 0,
- SAY_SLAY = 1,
- SAY_REPENTANCE = 2,
- SAY_DEATH = 3,
-
- SPELL_REPENTANCE = 29511,
- SPELL_HOLYFIRE = 29522,
- SPELL_HOLYWRATH = 32445,
- SPELL_HOLYGROUND = 29512,
- SPELL_BERSERK = 26662,
+ SAY_AGGRO = 0,
+ SAY_SLAY = 1,
+ SAY_REPENTANCE = 2,
+ SAY_DEATH = 3
+};
+
+enum Events
+{
+ EVENT_REPENTANCE = 1,
+ EVENT_HOLYFIRE = 2,
+ EVENT_HOLYWRATH = 3,
+ EVENT_HOLYGROUND = 4,
+ EVENT_ENRAGE = 5
};
class boss_maiden_of_virtue : public CreatureScript
@@ -45,90 +50,84 @@ class boss_maiden_of_virtue : public CreatureScript
public:
boss_maiden_of_virtue() : CreatureScript("boss_maiden_of_virtue") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_maiden_of_virtueAI(creature);
}
- struct boss_maiden_of_virtueAI : public ScriptedAI
+ struct boss_maiden_of_virtueAI : public BossAI
{
- boss_maiden_of_virtueAI(Creature* creature) : ScriptedAI(creature) { }
-
- uint32 Repentance_Timer;
- uint32 Holyfire_Timer;
- uint32 Holywrath_Timer;
- uint32 Holyground_Timer;
- uint32 Enrage_Timer;
-
- bool Enraged;
+ boss_maiden_of_virtueAI(Creature* creature) : BossAI(creature, TYPE_MAIDEN) { }
- void Reset() OVERRIDE
+ void Reset() override
{
- Repentance_Timer = 25000+(rand()%15000);
- Holyfire_Timer = 8000+(rand()%17000);
- Holywrath_Timer = 15000+(rand()%10000);
- Holyground_Timer = 3000;
- Enrage_Timer = 600000;
-
- Enraged = false;
+ _Reset();
}
- void KilledUnit(Unit* /*Victim*/) OVERRIDE
+ void KilledUnit(Unit* /*Victim*/) override
{
if (urand(0, 1) == 0)
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
+ _JustDied();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
+ _EnterCombat();
Talk(SAY_AGGRO);
+
+ events.ScheduleEvent(EVENT_REPENTANCE, urand(33, 45) * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_HOLYFIRE, 12 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_HOLYWRATH, urand(15, 25) * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_HOLYGROUND, 3 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_ENRAGE, 600 * IN_MILLISECONDS);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
- if (Enrage_Timer < diff && !Enraged)
- {
- DoCast(me, SPELL_BERSERK, true);
- Enraged = true;
- } else Enrage_Timer -= diff;
-
- if (Holyground_Timer <= diff)
- {
- DoCast(me, SPELL_HOLYGROUND, true); //Triggered so it doesn't interrupt her at all
- Holyground_Timer = 3000;
- } else Holyground_Timer -= diff;
-
- if (Repentance_Timer <= diff)
- {
- DoCastVictim(SPELL_REPENTANCE);
- Talk(SAY_REPENTANCE);
+ events.Update(diff);
- Repentance_Timer = urand(25000, 35000); //A little randomness on that spell
- } else Repentance_Timer -= diff;
-
- if (Holyfire_Timer <= diff)
- {
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- DoCast(target, SPELL_HOLYFIRE);
-
- Holyfire_Timer = urand(8000, 23000); //Anywhere from 8 to 23 seconds, good luck having several of those in a row!
- } else Holyfire_Timer -= diff;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- if (Holywrath_Timer <= diff)
+ while (uint32 eventId = events.ExecuteEvent())
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- DoCast(target, SPELL_HOLYWRATH);
-
- Holywrath_Timer = urand(20000, 25000); //20-30 secs sounds nice
- } else Holywrath_Timer -= diff;
+ switch (eventId)
+ {
+ case EVENT_REPENTANCE:
+ DoCastVictim(SPELL_REPENTANCE);
+ Talk(SAY_REPENTANCE);
+ events.ScheduleEvent(EVENT_REPENTANCE, urand(33, 45) * IN_MILLISECONDS);
+ break;
+ case EVENT_HOLYFIRE:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50, true))
+ DoCast(target, SPELL_HOLYFIRE);
+ events.ScheduleEvent(EVENT_HOLYFIRE, 12 * IN_MILLISECONDS);
+ break;
+ case EVENT_HOLYWRATH:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 80, true))
+ DoCast(target, SPELL_HOLYWRATH);
+ events.ScheduleEvent(EVENT_HOLYWRATH, urand(15, 25) * IN_MILLISECONDS);
+ break;
+ case EVENT_HOLYGROUND:
+ DoCast(me, SPELL_HOLYGROUND, true);
+ events.ScheduleEvent(EVENT_HOLYGROUND, 3 * IN_MILLISECONDS);
+ break;
+ case EVENT_ENRAGE:
+ DoCast(me, SPELL_BERSERK, true);
+ break;
+ default:
+ break;
+ }
+ }
DoMeleeAttackIfReady();
}
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
index 14cc3083d59..5d1e5451ab1 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
@@ -53,7 +53,7 @@ class boss_attumen : public CreatureScript
public:
boss_attumen() : CreatureScript("boss_attumen") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_attumenAI(creature);
}
@@ -79,35 +79,35 @@ public:
uint32 ChargeTimer; //only when mounted
uint32 ResetTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
ResetTimer = 0;
Midnight = 0;
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
ScriptedAI::EnterEvadeMode();
ResetTimer = 2000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
- if (Unit* midnight = Unit::GetUnit(*me, Midnight))
+ if (Unit* midnight = ObjectAccessor::GetUnit(*me, Midnight))
midnight->Kill(midnight);
}
- void UpdateAI(uint32 diff) OVERRIDE;
+ void UpdateAI(uint32 diff) override;
- void SpellHit(Unit* /*source*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*source*/, const SpellInfo* spell) override
{
if (spell->Mechanic == MECHANIC_DISARM)
Talk(SAY_DISARMED);
@@ -120,7 +120,7 @@ class boss_midnight : public CreatureScript
public:
boss_midnight() : CreatureScript("boss_midnight") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_midnightAI(creature);
}
@@ -133,7 +133,7 @@ public:
uint8 Phase;
uint32 Mount_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Phase = 1;
Attumen = 0;
@@ -143,18 +143,18 @@ public:
me->SetVisible(true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
if (Phase == 2)
{
- if (Unit* unit = Unit::GetUnit(*me, Attumen))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, Attumen))
Talk(SAY_MIDNIGHT_KILL, unit);
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -172,7 +172,7 @@ public:
}
else if (Phase == 2 && HealthBelowPct(25))
{
- if (Unit* pAttumen = Unit::GetUnit(*me, Attumen))
+ if (Unit* pAttumen = ObjectAccessor::GetUnit(*me, Attumen))
Mount(pAttumen);
}
else if (Phase == 3)
@@ -184,14 +184,14 @@ public:
Mount_Timer = 0;
me->SetVisible(false);
me->GetMotionMaster()->MoveIdle();
- if (Unit* pAttumen = Unit::GetUnit(*me, Attumen))
+ if (Unit* pAttumen = ObjectAccessor::GetUnit(*me, Attumen))
{
pAttumen->SetDisplayId(MOUNTED_DISPLAYID);
pAttumen->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
if (pAttumen->GetVictim())
{
pAttumen->GetMotionMaster()->MoveChase(pAttumen->GetVictim());
- pAttumen->SetTarget(pAttumen->GetVictim()->GetGUID());
+ pAttumen->SetTarget(pAttumen->EnsureVictim()->GetGUID());
}
pAttumen->SetObjectScale(1);
}
@@ -230,7 +230,7 @@ public:
void SetMidnight(Creature* pAttumen, uint64 value)
{
- CAST_AI(boss_attumen::boss_attumenAI, pAttumen->AI())->Midnight = value;
+ ENSURE_AI(boss_attumen::boss_attumenAI, pAttumen->AI())->Midnight = value;
}
};
};
@@ -242,7 +242,7 @@ void boss_attumen::boss_attumenAI::UpdateAI(uint32 diff)
if (ResetTimer <= diff)
{
ResetTimer = 0;
- Unit* pMidnight = Unit::GetUnit(*me, Midnight);
+ Unit* pMidnight = ObjectAccessor::GetUnit(*me, Midnight);
if (pMidnight)
{
pMidnight->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -288,13 +288,13 @@ void boss_attumen::boss_attumenAI::UpdateAI(uint32 diff)
std::vector<Unit*> target_list;
for (ThreatContainer::StorageType::const_iterator itr = t_list.begin(); itr != t_list.end(); ++itr)
{
- target = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (target && !target->IsWithinDist(me, ATTACK_DISTANCE, false))
target_list.push_back(target);
target = NULL;
}
if (!target_list.empty())
- target = *(target_list.begin()+rand()%target_list.size());
+ target = *(target_list.begin() + rand32() % target_list.size());
DoCast(target, SPELL_BERSERKER_CHARGE);
ChargeTimer = 20000;
@@ -304,10 +304,10 @@ void boss_attumen::boss_attumenAI::UpdateAI(uint32 diff)
{
if (HealthBelowPct(25))
{
- Creature* pMidnight = Unit::GetCreature(*me, Midnight);
+ Creature* pMidnight = ObjectAccessor::GetCreature(*me, Midnight);
if (pMidnight && pMidnight->GetTypeId() == TYPEID_UNIT)
{
- CAST_AI(boss_midnight::boss_midnightAI, (pMidnight->AI()))->Mount(me);
+ ENSURE_AI(boss_midnight::boss_midnightAI, (pMidnight->AI()))->Mount(me);
me->SetHealth(pMidnight->GetHealth());
DoResetThreat();
}
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp
index 2dff776c35a..6ff1faf35b6 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp
@@ -96,7 +96,7 @@ class boss_moroes : public CreatureScript
public:
boss_moroes() : CreatureScript("boss_moroes") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_moroesAI>(creature);
}
@@ -125,7 +125,7 @@ public:
bool InVanish;
bool Enrage;
- void Reset() OVERRIDE
+ void Reset() override
{
Vanish_Timer = 30000;
Blind_Timer = 35000;
@@ -148,7 +148,7 @@ public:
DoZoneInCombat();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
StartEvent();
@@ -157,12 +157,12 @@ public:
DoZoneInCombat();
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -236,7 +236,7 @@ public:
{
if (AddGUID[i])
{
- Creature* temp = Creature::GetCreature((*me), AddGUID[i]);
+ Creature* temp = ObjectAccessor::GetCreature((*me), AddGUID[i]);
if (temp && temp->IsAlive())
{
temp->AI()->AttackStart(me->GetVictim());
@@ -247,7 +247,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -270,7 +270,7 @@ public:
{
if (AddGUID[i])
{
- Creature* temp = Unit::GetCreature((*me), AddGUID[i]);
+ Creature* temp = ObjectAccessor::GetCreature((*me), AddGUID[i]);
if (temp && temp->IsAlive())
if (!temp->GetVictim())
temp->AI()->AttackStart(me->GetVictim());
@@ -343,25 +343,25 @@ struct boss_moroes_guestAI : public ScriptedAI
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
instance->SetData(TYPE_MOROES, NOT_STARTED);
}
void AcquireGUID()
{
- if (Creature* Moroes = Unit::GetCreature(*me, instance->GetData64(DATA_MOROES)))
+ if (Creature* Moroes = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MOROES)))
for (uint8 i = 0; i < 4; ++i)
- if (uint64 GUID = CAST_AI(boss_moroes::boss_moroesAI, Moroes->AI())->AddGUID[i])
+ if (uint64 GUID = ENSURE_AI(boss_moroes::boss_moroesAI, Moroes->AI())->AddGUID[i])
GuestGUID[i] = GUID;
}
Unit* SelectGuestTarget()
{
- uint64 TempGUID = GuestGUID[rand()%4];
+ uint64 TempGUID = GuestGUID[rand32() % 4];
if (TempGUID)
{
- Unit* unit = Unit::GetUnit(*me, TempGUID);
+ Unit* unit = ObjectAccessor::GetUnit(*me, TempGUID);
if (unit && unit->IsAlive())
return unit;
}
@@ -369,7 +369,7 @@ struct boss_moroes_guestAI : public ScriptedAI
return me;
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!instance->GetData(TYPE_MOROES))
EnterEvadeMode();
@@ -383,7 +383,7 @@ class boss_baroness_dorothea_millstipe : public CreatureScript
public:
boss_baroness_dorothea_millstipe() : CreatureScript("boss_baroness_dorothea_millstipe") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_baroness_dorothea_millstipeAI>(creature);
}
@@ -397,7 +397,7 @@ public:
uint32 MindFlay_Timer;
uint32 ShadowWordPain_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
ManaBurn_Timer = 7000;
MindFlay_Timer = 1000;
@@ -408,7 +408,7 @@ public:
boss_moroes_guestAI::Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -446,7 +446,7 @@ class boss_baron_rafe_dreuger : public CreatureScript
public:
boss_baron_rafe_dreuger() : CreatureScript("boss_baron_rafe_dreuger") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_baron_rafe_dreugerAI>(creature);
}
@@ -460,7 +460,7 @@ public:
uint32 SealOfCommand_Timer;
uint32 JudgementOfCommand_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
HammerOfJustice_Timer = 1000;
SealOfCommand_Timer = 7000;
@@ -469,7 +469,7 @@ public:
boss_moroes_guestAI::Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -503,7 +503,7 @@ class boss_lady_catriona_von_indi : public CreatureScript
public:
boss_lady_catriona_von_indi() : CreatureScript("boss_lady_catriona_von_indi") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_lady_catriona_von_indiAI>(creature);
}
@@ -518,7 +518,7 @@ public:
uint32 HolyFire_Timer;
uint32 PowerWordShield_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
DispelMagic_Timer = 11000;
GreaterHeal_Timer = 1500;
@@ -530,7 +530,7 @@ public:
boss_moroes_guestAI::Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -573,7 +573,7 @@ class boss_lady_keira_berrybuck : public CreatureScript
public:
boss_lady_keira_berrybuck() : CreatureScript("boss_lady_keira_berrybuck") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_lady_keira_berrybuckAI>(creature);
}
@@ -588,7 +588,7 @@ public:
uint32 HolyLight_Timer;
uint32 DivineShield_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Cleanse_Timer = 13000;
GreaterBless_Timer = 1000;
@@ -600,7 +600,7 @@ public:
boss_moroes_guestAI::Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -647,7 +647,7 @@ class boss_lord_robin_daris : public CreatureScript
public:
boss_lord_robin_daris() : CreatureScript("boss_lord_robin_daris") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_lord_robin_darisAI>(creature);
}
@@ -661,7 +661,7 @@ public:
uint32 MortalStrike_Timer;
uint32 WhirlWind_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Hamstring_Timer = 7000;
MortalStrike_Timer = 10000;
@@ -670,7 +670,7 @@ public:
boss_moroes_guestAI::Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -703,7 +703,7 @@ class boss_lord_crispin_ference : public CreatureScript
public:
boss_lord_crispin_ference() : CreatureScript("boss_lord_crispin_ference") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_lord_crispin_ferenceAI>(creature);
}
@@ -718,7 +718,7 @@ public:
uint32 ShieldBash_Timer;
uint32 ShieldWall_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Disarm_Timer = 6000;
HeroicStrike_Timer = 10000;
@@ -728,7 +728,7 @@ public:
boss_moroes_guestAI::Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp
index ebd8762e9be..ac24f868670 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp
@@ -69,7 +69,7 @@ class boss_netherspite : public CreatureScript
public:
boss_netherspite() : CreatureScript("boss_netherspite") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_netherspiteAI>(creature);
}
@@ -124,10 +124,10 @@ public:
float dist(float xa, float ya, float xb, float yb) // auxiliary method for distance
{
- return sqrt((xa-xb)*(xa-xb) + (ya-yb)*(ya-yb));
+ return std::sqrt((xa-xb)*(xa-xb) + (ya-yb)*(ya-yb));
}
- void Reset() OVERRIDE
+ void Reset() override
{
Berserk = false;
NetherInfusionTimer = 540000;
@@ -140,7 +140,7 @@ public:
void SummonPortals()
{
- uint8 r = rand()%4;
+ uint8 r = rand32() % 4;
uint8 pos[3];
pos[RED_PORTAL] = ((r % 2) ? (r > 1 ? 2 : 1) : 0);
pos[GREEN_PORTAL] = ((r % 2) ? 0 : (r > 1 ? 2 : 1));
@@ -158,9 +158,9 @@ public:
{
for (int i=0; i<3; ++i)
{
- if (Creature* portal = Unit::GetCreature(*me, PortalGUID[i]))
+ if (Creature* portal = ObjectAccessor::GetCreature(*me, PortalGUID[i]))
portal->DisappearAndDie();
- if (Creature* portal = Unit::GetCreature(*me, BeamerGUID[i]))
+ if (Creature* portal = ObjectAccessor::GetCreature(*me, BeamerGUID[i]))
portal->DisappearAndDie();
PortalGUID[i] = 0;
BeamTarget[i] = 0;
@@ -170,10 +170,10 @@ public:
void UpdatePortals() // Here we handle the beams' behavior
{
for (int j=0; j<3; ++j) // j = color
- if (Creature* portal = Unit::GetCreature(*me, PortalGUID[j]))
+ if (Creature* portal = ObjectAccessor::GetCreature(*me, PortalGUID[j]))
{
// the one who's been cast upon before
- Unit* current = Unit::GetUnit(*portal, BeamTarget[j]);
+ Unit* current = ObjectAccessor::GetUnit(*portal, BeamTarget[j]);
// temporary store for the best suitable beam reciever
Unit* target = me;
@@ -205,7 +205,7 @@ public:
{
BeamTarget[j] = target->GetGUID();
// remove currently beaming portal
- if (Creature* beamer = Unit::GetCreature(*portal, BeamerGUID[j]))
+ if (Creature* beamer = ObjectAccessor::GetCreature(*portal, BeamerGUID[j]))
{
beamer->CastSpell(target, PortalBeam[j], false);
beamer->DisappearAndDie();
@@ -257,19 +257,19 @@ public:
Door->SetGoState(open ? GO_STATE_ACTIVE : GO_STATE_READY);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
HandleDoors(false);
SwitchToPortalPhase();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
HandleDoors(true);
DestroyPortals();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
index fe0bd23c755..af9f8b72abf 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
@@ -69,7 +69,7 @@ class boss_nightbane : public CreatureScript
public:
boss_nightbane() : CreatureScript("boss_nightbane") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_nightbaneAI>(creature);
}
@@ -109,7 +109,7 @@ public:
uint32 WaitTimer;
uint32 MovePhase;
- void Reset() OVERRIDE
+ void Reset() override
{
BellowingRoarTimer = 30000;
CharredEarthTimer = 15000;
@@ -154,7 +154,7 @@ public:
instance->HandleGameObject(instance->GetData64(DATA_MASTERS_TERRACE_DOOR_2), open);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
instance->SetData(TYPE_NIGHTBANE, IN_PROGRESS);
@@ -162,27 +162,27 @@ public:
Talk(YELL_AGGRO);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!Intro && !Flying)
ScriptedAI::AttackStart(who);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(TYPE_NIGHTBANE, DONE);
HandleTerraceDoors(true);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!Intro && !Flying)
ScriptedAI::MoveInLineOfSight(who);
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -228,7 +228,7 @@ public:
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->AI()->AttackStart(me->GetVictim());
}
@@ -253,7 +253,7 @@ public:
Skeletons = false;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
/* The timer for this was never setup apparently, not sure if the code works properly:
if (WaitTimer <= diff)
@@ -328,7 +328,7 @@ public:
if (TailSweepTimer <= diff)
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- if (!me->HasInArc(M_PI, target))
+ if (!me->HasInArc(float(M_PI), target))
DoCast(target, SPELL_TAIL_SWEEP);
TailSweepTimer = 15000;
} else TailSweepTimer -= diff;
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
index bde326a5c37..518c4eacbd9 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
@@ -102,7 +102,7 @@ class netherspite_infernal : public CreatureScript
public:
netherspite_infernal() : CreatureScript("netherspite_infernal") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new netherspite_infernalAI(creature);
}
@@ -117,12 +117,12 @@ public:
uint64 malchezaar;
InfernalPoint *point;
- void Reset() OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void Reset() override { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (HellfireTimer)
{
@@ -144,14 +144,14 @@ public:
}
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
- if (Unit* unit = Unit::GetUnit(*me, malchezaar))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, malchezaar))
if (Creature* creature = unit->ToCreature())
creature->AI()->KilledUnit(who);
}
- void SpellHit(Unit* /*who*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*who*/, const SpellInfo* spell) override
{
if (spell->Id == SPELL_INFERNAL_RELAY)
{
@@ -162,7 +162,7 @@ public:
}
}
- void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* done_by, uint32 &damage) override
{
if (done_by->GetGUID() != malchezaar)
damage = 0;
@@ -177,7 +177,7 @@ class boss_malchezaar : public CreatureScript
public:
boss_malchezaar() : CreatureScript("boss_malchezaar") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_malchezaarAI>(creature);
}
@@ -211,7 +211,7 @@ public:
uint32 phase;
- void Reset() OVERRIDE
+ void Reset() override
{
AxesCleanup();
ClearWeapons();
@@ -242,12 +242,12 @@ public:
instance->HandleGameObject(instance->GetData64(DATA_GO_NETHER_DOOR), true);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -262,7 +262,7 @@ public:
instance->HandleGameObject(instance->GetData64(DATA_GO_NETHER_DOOR), true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
@@ -273,7 +273,7 @@ public:
{
//Infernal Cleanup
for (std::vector<uint64>::const_iterator itr = infernals.begin(); itr != infernals.end(); ++itr)
- if (Unit* pInfernal = Unit::GetUnit(*me, *itr))
+ if (Unit* pInfernal = ObjectAccessor::GetUnit(*me, *itr))
if (pInfernal->IsAlive())
{
pInfernal->SetVisible(false);
@@ -287,7 +287,7 @@ public:
{
for (uint8 i = 0; i < 2; ++i)
{
- Unit* axe = Unit::GetUnit(*me, axes[i]);
+ Unit* axe = ObjectAccessor::GetUnit(*me, axes[i]);
if (axe && axe->IsAlive())
axe->Kill(axe);
axes[i] = 0;
@@ -316,13 +316,13 @@ public:
ThreatContainer::StorageType::const_iterator itr = t_list.begin();
std::advance(itr, 1);
for (; itr != t_list.end(); ++itr) //store the threat list in a different container
- if (Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid()))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()))
if (target->IsAlive() && target->GetTypeId() == TYPEID_PLAYER)
targets.push_back(target);
//cut down to size if we have more than 5 targets
while (targets.size() > 5)
- targets.erase(targets.begin()+rand()%targets.size());
+ targets.erase(targets.begin() + rand32() % targets.size());
uint32 i = 0;
for (std::vector<Unit*>::const_iterator iter = targets.begin(); iter != targets.end(); ++iter, ++i)
@@ -340,7 +340,7 @@ public:
{
for (uint8 i = 0; i < 5; ++i)
{
- Unit* target = Unit::GetUnit(*me, enfeeble_targets[i]);
+ Unit* target = ObjectAccessor::GetUnit(*me, enfeeble_targets[i]);
if (target && target->IsAlive())
target->SetHealth(enfeeble_health[i]);
enfeeble_targets[i] = 0;
@@ -353,7 +353,7 @@ public:
InfernalPoint *point = NULL;
Position pos;
if ((me->GetMapId() != 532) || positions.empty())
- me->GetRandomNearPosition(pos, 60);
+ pos = me->GetRandomNearPosition(60);
else
{
point = Trinity::Containers::SelectRandomContainerElement(positions);
@@ -367,8 +367,8 @@ public:
infernal->SetDisplayId(INFERNAL_MODEL_INVISIBLE);
infernal->setFaction(me->getFaction());
if (point)
- CAST_AI(netherspite_infernal::netherspite_infernalAI, infernal->AI())->point=point;
- CAST_AI(netherspite_infernal::netherspite_infernalAI, infernal->AI())->malchezaar=me->GetGUID();
+ ENSURE_AI(netherspite_infernal::netherspite_infernalAI, infernal->AI())->point = point;
+ ENSURE_AI(netherspite_infernal::netherspite_infernalAI, infernal->AI())->malchezaar = me->GetGUID();
infernals.push_back(infernal->GetGUID());
DoCast(infernal, SPELL_INFERNAL_RELAY);
@@ -377,7 +377,7 @@ public:
Talk(SAY_SUMMON);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -391,8 +391,8 @@ public:
if (me->HasUnitState(UNIT_STATE_STUNNED)) // While shifting to phase 2 malchezaar stuns himself
return;
- if (me->GetUInt64Value(UNIT_FIELD_TARGET) != me->GetVictim()->GetGUID())
- me->SetTarget(me->GetVictim()->GetGUID());
+ if (me->GetVictim() && me->GetUInt64Value(UNIT_FIELD_TARGET) != me->EnsureVictim()->GetGUID())
+ me->SetTarget(me->EnsureVictim()->GetGUID());
if (phase == 1)
{
@@ -480,7 +480,7 @@ public:
{
for (uint8 i = 0; i < 2; ++i)
{
- if (Unit* axe = Unit::GetUnit(*me, axes[i]))
+ if (Unit* axe = ObjectAccessor::GetUnit(*me, axes[i]))
{
if (axe->GetVictim())
DoModifyThreatPercent(axe->GetVictim(), -100);
@@ -583,10 +583,10 @@ public:
void netherspite_infernal::netherspite_infernalAI::Cleanup()
{
- Creature* pMalchezaar = Unit::GetCreature(*me, malchezaar);
+ Creature* pMalchezaar = ObjectAccessor::GetCreature(*me, malchezaar);
if (pMalchezaar && pMalchezaar->IsAlive())
- CAST_AI(boss_malchezaar::boss_malchezaarAI, pMalchezaar->AI())->Cleanup(me, point);
+ ENSURE_AI(boss_malchezaar::boss_malchezaarAI, pMalchezaar->AI())->Cleanup(me, point);
}
void AddSC_boss_malchezaar()
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 69f852f158c..6a89adca967 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
@@ -84,7 +84,7 @@ class boss_shade_of_aran : public CreatureScript
public:
boss_shade_of_aran() : CreatureScript("boss_shade_of_aran") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_aranAI>(creature);
}
@@ -123,7 +123,7 @@ public:
bool Drinking;
bool DrinkInturrupted;
- void Reset() OVERRIDE
+ void Reset() override
{
SecondarySpellTimer = 5000;
NormalCastTimer = 0;
@@ -131,7 +131,7 @@ public:
BerserkTimer = 720000;
CloseDoorTimer = 15000;
- LastSuperSpell = rand()%3;
+ LastSuperSpell = rand32() % 3;
FlameWreathTimer = 0;
FlameWreathCheckTime = 0;
@@ -152,12 +152,12 @@ public:
instance->HandleGameObject(instance->GetData64(DATA_GO_LIBRARY_DOOR), true);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -165,7 +165,7 @@ public:
instance->HandleGameObject(instance->GetData64(DATA_GO_LIBRARY_DOOR), true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
@@ -184,7 +184,7 @@ public:
//store the threat list in a different container
for (ThreatContainer::StorageType::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)
{
- Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
//only on alive players
if (target && target->IsAlive() && target->GetTypeId() == TYPEID_PLAYER)
targets.push_back(target);
@@ -192,7 +192,7 @@ public:
//cut down to size if we have more than 3 targets
while (targets.size() > 3)
- targets.erase(targets.begin()+rand()%targets.size());
+ targets.erase(targets.begin() + rand32() % targets.size());
uint32 i = 0;
for (std::vector<Unit*>::const_iterator itr = targets.begin(); itr!= targets.end(); ++itr)
@@ -208,7 +208,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -322,7 +322,7 @@ public:
//If no available spells wait 1 second and try again
if (AvailableSpells)
{
- CurrentNormalSpell = Spells[rand() % AvailableSpells];
+ CurrentNormalSpell = Spells[rand32() % AvailableSpells];
DoCast(target, CurrentNormalSpell);
}
}
@@ -450,7 +450,7 @@ public:
if (!FlameWreathTarget[i])
continue;
- Unit* unit = Unit::GetUnit(*me, FlameWreathTarget[i]);
+ Unit* unit = ObjectAccessor::GetUnit(*me, FlameWreathTarget[i]);
if (unit && !unit->IsWithinDist2d(FWTargPosX[i], FWTargPosY[i], 3))
{
unit->CastSpell(unit, 20476, true, 0, 0, me->GetGUID());
@@ -466,13 +466,13 @@ public:
DoMeleeAttackIfReady();
}
- void DamageTaken(Unit* /*pAttacker*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*pAttacker*/, uint32 &damage) override
{
if (!DrinkInturrupted && Drinking && damage)
DrinkInturrupted = true;
}
- void SpellHit(Unit* /*pAttacker*/, const SpellInfo* Spell) OVERRIDE
+ void SpellHit(Unit* /*pAttacker*/, const SpellInfo* Spell) override
{
//We only care about interrupt effects and only if they are durring a spell currently being cast
if ((Spell->Effects[0].Effect != SPELL_EFFECT_INTERRUPT_CAST &&
@@ -501,7 +501,7 @@ class npc_aran_elemental : public CreatureScript
public:
npc_aran_elemental() : CreatureScript("npc_aran_elemental") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new water_elementalAI(creature);
}
@@ -512,14 +512,14 @@ public:
uint32 CastTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
- CastTimer = 2000 + (rand()%3000);
+ CastTimer = 2000 + (rand32() % 3000);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
index 22398314a41..9b66beb5986 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
@@ -70,7 +70,7 @@ class npc_kilrek : public CreatureScript
public:
npc_kilrek() : CreatureScript("npc_kilrek") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_kilrekAI>(creature);
}
@@ -84,32 +84,23 @@ public:
InstanceScript* instance;
- uint64 TerestianGUID;
-
uint32 AmplifyTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
- TerestianGUID = 0;
AmplifyTimer = 2000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
- {
- }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
- uint64 TerestianGUID = instance->GetData64(DATA_TERESTIAN);
- if (TerestianGUID)
- {
- Unit* Terestian = Unit::GetUnit(*me, TerestianGUID);
- if (Terestian && Terestian->IsAlive())
- DoCast(Terestian, SPELL_BROKEN_PACT, true);
- }
+ Creature* Terestian = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_TERESTIAN));
+ if (Terestian && Terestian->IsAlive())
+ DoCast(Terestian, SPELL_BROKEN_PACT, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -133,7 +124,7 @@ class npc_demon_chain : public CreatureScript
public:
npc_demon_chain() : CreatureScript("npc_demon_chain") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_demon_chainAI(creature);
}
@@ -144,21 +135,21 @@ public:
uint64 SacrificeGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
SacrificeGUID = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void AttackStart(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (SacrificeGUID)
{
- Unit* Sacrifice = Unit::GetUnit(*me, SacrificeGUID);
+ Unit* Sacrifice = ObjectAccessor::GetUnit(*me, SacrificeGUID);
if (Sacrifice)
Sacrifice->RemoveAurasDueToSpell(SPELL_SACRIFICE);
}
@@ -171,7 +162,7 @@ class npc_fiendish_portal : public CreatureScript
public:
npc_fiendish_portal() : CreatureScript("npc_fiendish_portal") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_fiendish_portalAI(creature);
}
@@ -182,12 +173,12 @@ public:
SummonList summons;
- void Reset() OVERRIDE
+ void Reset() override
{
DespawnAllImp();
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summons.Summon(summon);
DoZoneInCombat(summon);
@@ -205,7 +196,7 @@ class npc_fiendish_imp : public CreatureScript
public:
npc_fiendish_imp() : CreatureScript("npc_fiendish_imp") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_fiendish_impAI(creature);
}
@@ -216,16 +207,16 @@ public:
uint32 FireboltTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
FireboltTimer = 2000;
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -247,7 +238,7 @@ class boss_terestian_illhoof : public CreatureScript
public:
boss_terestian_illhoof() : CreatureScript("boss_terestian_illhoof") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_terestianAI>(creature);
}
@@ -274,15 +265,15 @@ public:
bool SummonedPortals;
bool Berserk;
- void Reset() OVERRIDE
+ void Reset() override
{
for (uint8 i = 0; i < 2; ++i)
{
if (PortalGUID[i])
{
- if (Creature* pPortal = Unit::GetCreature(*me, PortalGUID[i]))
+ if (Creature* pPortal = ObjectAccessor::GetCreature(*me, PortalGUID[i]))
{
- CAST_AI(npc_fiendish_portal::npc_fiendish_portalAI, pPortal->AI())->DespawnAllImp();
+ ENSURE_AI(npc_fiendish_portal::npc_fiendish_portalAI, pPortal->AI())->DespawnAllImp();
pPortal->DespawnOrUnsummon();
}
@@ -314,12 +305,12 @@ public:
else DoCast(me, SPELL_SUMMON_IMP, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned->GetEntry() == NPC_PORTAL)
{
@@ -334,18 +325,18 @@ public:
}
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
for (uint8 i = 0; i < 2; ++i)
{
if (PortalGUID[i])
{
- if (Creature* pPortal = Unit::GetCreature((*me), PortalGUID[i]))
+ if (Creature* pPortal = ObjectAccessor::GetCreature((*me), PortalGUID[i]))
pPortal->DespawnOrUnsummon();
PortalGUID[i] = 0;
@@ -357,7 +348,7 @@ public:
instance->SetData(TYPE_TERESTIAN, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -372,7 +363,7 @@ public:
if (Creature* Chains = me->FindNearestCreature(NPC_DEMONCHAINS, 5000))
{
- CAST_AI(npc_demon_chain::npc_demon_chainAI, Chains->AI())->SacrificeGUID = target->GetGUID();
+ ENSURE_AI(npc_demon_chain::npc_demon_chainAI, Chains->AI())->SacrificeGUID = target->GetGUID();
Chains->CastSpell(Chains, SPELL_DEMON_CHAINS, true);
Talk(SAY_SACRIFICE);
SacrificeTimer = 30000;
@@ -396,7 +387,7 @@ public:
if (PortalGUID[0] && PortalGUID[1])
{
- if (Creature* pPortal = Unit::GetCreature(*me, PortalGUID[urand(0, 1)]))
+ if (Creature* pPortal = ObjectAccessor::GetCreature(*me, PortalGUID[urand(0, 1)]))
pPortal->CastSpell(me->GetVictim(), SPELL_SUMMON_FIENDISIMP, false);
SummonTimer = 5000;
}
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
index 108aceebb90..19ec8da7fc9 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
@@ -109,14 +109,14 @@ void SummonCroneIfReady(InstanceScript* instance, Creature* creature)
pCrone->AI()->AttackStart(creature->GetVictim());
}
}
-};
+}
class boss_dorothee : public CreatureScript
{
public:
boss_dorothee() : CreatureScript("boss_dorothee") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_dorotheeAI>(creature);
}
@@ -139,7 +139,7 @@ public:
bool SummonedTito;
bool TitoDied;
- void Reset() OVERRIDE
+ void Reset() override
{
AggroTimer = 500;
@@ -151,26 +151,26 @@ public:
TitoDied = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_DOROTHEE_AGGRO);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
me->DespawnOrUnsummon();
}
void SummonTito();
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DOROTHEE_DEATH);
SummonCroneIfReady(instance, me);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -178,7 +178,7 @@ public:
ScriptedAI::AttackStart(who);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
@@ -187,7 +187,7 @@ public:
ScriptedAI::MoveInLineOfSight(who);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (AggroTimer)
{
@@ -230,7 +230,7 @@ class npc_tito : public CreatureScript
public:
npc_tito() : CreatureScript("npc_tito") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_titoAI(creature);
}
@@ -242,28 +242,28 @@ public:
uint64 DorotheeGUID;
uint32 YipTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
DorotheeGUID = 0;
YipTimer = 10000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (DorotheeGUID)
{
- Creature* Dorothee = (Unit::GetCreature((*me), DorotheeGUID));
+ Creature* Dorothee = (ObjectAccessor::GetCreature((*me), DorotheeGUID));
if (Dorothee && Dorothee->IsAlive())
{
- CAST_AI(boss_dorothee::boss_dorotheeAI, Dorothee->AI())->TitoDied = true;
+ ENSURE_AI(boss_dorothee::boss_dorotheeAI, Dorothee->AI())->TitoDied = true;
Talk(SAY_DOROTHEE_TITO_DEATH, Dorothee);
}
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -284,7 +284,7 @@ void boss_dorothee::boss_dorotheeAI::SummonTito()
if (Creature* pTito = me->SummonCreature(CREATURE_TITO, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000))
{
Talk(SAY_DOROTHEE_SUMMON);
- CAST_AI(npc_tito::npc_titoAI, pTito->AI())->DorotheeGUID = me->GetGUID();
+ ENSURE_AI(npc_tito::npc_titoAI, pTito->AI())->DorotheeGUID = me->GetGUID();
pTito->AI()->AttackStart(me->GetVictim());
SummonedTito = true;
TitoDied = false;
@@ -296,7 +296,7 @@ class boss_strawman : public CreatureScript
public:
boss_strawman() : CreatureScript("boss_strawman") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_strawmanAI>(creature);
}
@@ -314,14 +314,14 @@ public:
uint32 BrainBashTimer;
uint32 BrainWipeTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
AggroTimer = 13000;
BrainBashTimer = 5000;
BrainWipeTimer = 7000;
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -329,7 +329,7 @@ public:
ScriptedAI::AttackStart(who);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
@@ -338,19 +338,19 @@ public:
ScriptedAI::MoveInLineOfSight(who);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_STRAWMAN_AGGRO);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
me->DespawnOrUnsummon();
}
- void SpellHit(Unit* /*caster*/, const SpellInfo* Spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* Spell) override
{
- if ((Spell->SchoolMask == SPELL_SCHOOL_MASK_FIRE) && (!(rand()%10)))
+ if ((Spell->SchoolMask == SPELL_SCHOOL_MASK_FIRE) && (!(rand32() % 10)))
{
/*
if (not direct damage(aoe, dot))
@@ -361,19 +361,19 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_STRAWMAN_DEATH);
SummonCroneIfReady(instance, me);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_STRAWMAN_SLAY);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (AggroTimer)
{
@@ -410,7 +410,7 @@ class boss_tinhead : public CreatureScript
public:
boss_tinhead() : CreatureScript("boss_tinhead") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_tinheadAI>(creature);
}
@@ -430,7 +430,7 @@ public:
uint8 RustCount;
- void Reset() OVERRIDE
+ void Reset() override
{
AggroTimer = 15000;
CleaveTimer = 5000;
@@ -439,17 +439,17 @@ public:
RustCount = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_TINHEAD_AGGRO);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
me->DespawnOrUnsummon();
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -457,7 +457,7 @@ public:
ScriptedAI::AttackStart(who);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
@@ -466,19 +466,19 @@ public:
ScriptedAI::MoveInLineOfSight(who);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_TINHEAD_DEATH);
SummonCroneIfReady(instance, me);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_TINHEAD_SLAY);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (AggroTimer)
{
@@ -519,7 +519,7 @@ class boss_roar : public CreatureScript
public:
boss_roar() : CreatureScript("boss_roar") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_roarAI>(creature);
}
@@ -538,7 +538,7 @@ public:
uint32 ShredTimer;
uint32 ScreamTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
AggroTimer = 20000;
MangleTimer = 5000;
@@ -546,7 +546,7 @@ public:
ScreamTimer = 15000;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
@@ -555,7 +555,7 @@ public:
ScriptedAI::MoveInLineOfSight(who);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -563,29 +563,29 @@ public:
ScriptedAI::AttackStart(who);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_ROAR_AGGRO);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
me->DespawnOrUnsummon();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_ROAR_DEATH);
SummonCroneIfReady(instance, me);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_ROAR_SLAY);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (AggroTimer)
{
@@ -627,7 +627,7 @@ class boss_crone : public CreatureScript
public:
boss_crone() : CreatureScript("boss_crone") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_croneAI>(creature);
}
@@ -644,30 +644,30 @@ public:
uint32 CycloneTimer;
uint32 ChainLightningTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
CycloneTimer = 30000;
ChainLightningTimer = 10000;
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
me->DespawnOrUnsummon();
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_CRONE_SLAY);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_CRONE_AGGRO);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_CRONE_DEATH);
@@ -679,7 +679,7 @@ public:
pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -710,7 +710,7 @@ class npc_cyclone : public CreatureScript
public:
npc_cyclone() : CreatureScript("npc_cyclone") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_cycloneAI(creature);
}
@@ -721,27 +721,26 @@ public:
uint32 MoveTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
MoveTimer = 1000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE
+ void MoveInLineOfSight(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!me->HasAura(SPELL_KNOCKBACK))
DoCast(me, SPELL_KNOCKBACK, true);
if (MoveTimer <= diff)
{
- Position pos;
- me->GetRandomNearPosition(pos, 10);
+ Position pos = me->GetRandomNearPosition(10);
me->GetMotionMaster()->MovePoint(0, pos);
MoveTimer = urand(5000, 8000);
} else MoveTimer -= diff;
@@ -776,7 +775,7 @@ class npc_grandmother : public CreatureScript
public:
npc_grandmother() : CreatureScript("npc_grandmother") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF)
@@ -790,7 +789,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_GRANDMA, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
player->SEND_GOSSIP_MENU(8990, creature->GetGUID());
@@ -804,7 +803,7 @@ class boss_bigbadwolf : public CreatureScript
public:
boss_bigbadwolf() : CreatureScript("boss_bigbadwolf") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_bigbadwolfAI>(creature);
}
@@ -827,7 +826,7 @@ public:
bool IsChasing;
- void Reset() OVERRIDE
+ void Reset() override
{
ChaseTimer = 30000;
FearTimer = urand(25000, 35000);
@@ -839,22 +838,22 @@ public:
IsChasing = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_WOLF_AGGRO);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_WOLF_SLAY);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
me->DespawnOrUnsummon();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
DoPlaySoundToSet(me, SOUND_WOLF_DEATH);
@@ -866,7 +865,7 @@ public:
pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -894,7 +893,7 @@ public:
{
IsChasing = false;
- if (Unit* target = Unit::GetUnit(*me, HoodGUID))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, HoodGUID))
{
HoodGUID = 0;
if (DoGetThreat(target))
@@ -1003,7 +1002,7 @@ class boss_julianne : public CreatureScript
public:
boss_julianne() : CreatureScript("boss_julianne") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_julianneAI>(creature);
}
@@ -1040,7 +1039,7 @@ public:
bool SummonedRomulo;
bool RomuloDead;
- void Reset() OVERRIDE
+ void Reset() override
{
RomuloGUID = 0;
Phase = PHASE_JULIANNE;
@@ -1063,9 +1062,9 @@ public:
RomuloDead = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -1073,7 +1072,7 @@ public:
ScriptedAI::AttackStart(who);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
@@ -1082,12 +1081,12 @@ public:
ScriptedAI::MoveInLineOfSight(who);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
me->DespawnOrUnsummon();
}
- void SpellHit(Unit* /*caster*/, const SpellInfo* Spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* Spell) override
{
if (Spell->Id == SPELL_DRINK_POISON)
{
@@ -1096,9 +1095,9 @@ public:
}
}
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE;
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override;
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_JULIANNE_DEATH02);
@@ -1109,12 +1108,12 @@ public:
pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_JULIANNE_SLAY);
}
- void UpdateAI(uint32 diff) OVERRIDE;
+ void UpdateAI(uint32 diff) override;
};
};
@@ -1123,7 +1122,7 @@ class boss_romulo : public CreatureScript
public:
boss_romulo() : CreatureScript("boss_romulo") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_romuloAI>(creature);
}
@@ -1153,7 +1152,7 @@ public:
bool IsFakingDeath;
bool JulianneDead;
- void Reset() OVERRIDE
+ void Reset() override
{
JulianneGUID = 0;
Phase = PHASE_ROMULO;
@@ -1168,12 +1167,12 @@ public:
JulianneDead = false;
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
me->DespawnOrUnsummon();
}
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
if (damage < me->GetHealth())
return;
@@ -1187,10 +1186,10 @@ public:
IsFakingDeath = true;
Phase = PHASE_BOTH;
- if (Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID)))
+ if (Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID)))
{
- CAST_AI(boss_julianne::boss_julianneAI, Julianne->AI())->RomuloDead = true;
- CAST_AI(boss_julianne::boss_julianneAI, Julianne->AI())->ResurrectSelfTimer = 10000;
+ ENSURE_AI(boss_julianne::boss_julianneAI, Julianne->AI())->RomuloDead = true;
+ ENSURE_AI(boss_julianne::boss_julianneAI, Julianne->AI())->ResurrectSelfTimer = 10000;
}
damage = 0;
@@ -1201,7 +1200,7 @@ public:
{
if (JulianneDead)
{
- if (Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID)))
+ if (Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID)))
{
Julianne->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
Julianne->GetMotionMaster()->Clear();
@@ -1213,12 +1212,12 @@ public:
return;
}
- if (Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID)))
+ if (Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID)))
{
PretendToDie(me);
IsFakingDeath = true;
- CAST_AI(boss_julianne::boss_julianneAI, Julianne->AI())->ResurrectTimer = 10000;
- CAST_AI(boss_julianne::boss_julianneAI, Julianne->AI())->RomuloDead = true;
+ ENSURE_AI(boss_julianne::boss_julianneAI, Julianne->AI())->ResurrectTimer = 10000;
+ ENSURE_AI(boss_julianne::boss_julianneAI, Julianne->AI())->RomuloDead = true;
damage = 0;
return;
}
@@ -1227,12 +1226,12 @@ public:
TC_LOG_ERROR("scripts", "boss_romuloAI: DamageTaken reach end of code, that should not happen.");
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_ROMULO_AGGRO);
if (JulianneGUID)
{
- Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID));
+ Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID));
if (Julianne && Julianne->GetVictim())
{
me->AddThreat(Julianne->GetVictim(), 1.0f);
@@ -1241,7 +1240,7 @@ public:
}
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
@@ -1250,7 +1249,7 @@ public:
ScriptedAI::MoveInLineOfSight(who);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_ROMULO_DEATH);
@@ -1262,12 +1261,12 @@ public:
pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_ROMULO_SLAY);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || IsFakingDeath)
return;
@@ -1276,12 +1275,12 @@ public:
{
if (ResurrectTimer <= diff)
{
- Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID));
- if (Julianne && CAST_AI(boss_julianne::boss_julianneAI, Julianne->AI())->IsFakingDeath)
+ Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID));
+ if (Julianne && ENSURE_AI(boss_julianne::boss_julianneAI, Julianne->AI())->IsFakingDeath)
{
Talk(SAY_ROMULO_RESURRECT);
Resurrect(Julianne);
- CAST_AI(boss_julianne::boss_julianneAI, Julianne->AI())->IsFakingDeath = false;
+ ENSURE_AI(boss_julianne::boss_julianneAI, Julianne->AI())->IsFakingDeath = false;
JulianneDead = false;
ResurrectTimer = 10000;
}
@@ -1291,7 +1290,7 @@ public:
if (BackwardLungeTimer <= diff)
{
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true);
- if (target && !me->HasInArc(M_PI, target))
+ if (target && !me->HasInArc(float(M_PI), target))
{
DoCast(target, SPELL_BACKWARD_LUNGE);
BackwardLungeTimer = urand(15000, 30000);
@@ -1363,8 +1362,8 @@ void boss_julianne::boss_julianneAI::UpdateAI(uint32 diff)
if (Creature* pRomulo = me->SummonCreature(CREATURE_ROMULO, ROMULO_X, ROMULO_Y, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, HOUR*2*IN_MILLISECONDS))
{
RomuloGUID = pRomulo->GetGUID();
- CAST_AI(boss_romulo::boss_romuloAI, pRomulo->AI())->JulianneGUID = me->GetGUID();
- CAST_AI(boss_romulo::boss_romuloAI, pRomulo->AI())->Phase = PHASE_ROMULO;
+ ENSURE_AI(boss_romulo::boss_romuloAI, pRomulo->AI())->JulianneGUID = me->GetGUID();
+ ENSURE_AI(boss_romulo::boss_romuloAI, pRomulo->AI())->Phase = PHASE_ROMULO;
DoZoneInCombat(pRomulo);
pRomulo->setFaction(16);
@@ -1396,12 +1395,12 @@ void boss_julianne::boss_julianneAI::UpdateAI(uint32 diff)
{
if (ResurrectTimer <= diff)
{
- Creature* Romulo = (Unit::GetCreature((*me), RomuloGUID));
- if (Romulo && CAST_AI(boss_romulo::boss_romuloAI, Romulo->AI())->IsFakingDeath)
+ Creature* Romulo = (ObjectAccessor::GetCreature((*me), RomuloGUID));
+ if (Romulo && ENSURE_AI(boss_romulo::boss_romuloAI, Romulo->AI())->IsFakingDeath)
{
Talk(SAY_JULIANNE_RESURRECT);
Resurrect(Romulo);
- CAST_AI(boss_romulo::boss_romuloAI, Romulo->AI())->IsFakingDeath = false;
+ ENSURE_AI(boss_romulo::boss_romuloAI, Romulo->AI())->IsFakingDeath = false;
RomuloDead = false;
ResurrectTimer = 10000;
}
@@ -1431,7 +1430,7 @@ void boss_julianne::boss_julianneAI::UpdateAI(uint32 diff)
{
if (urand(0, 1) && SummonedRomulo)
{
- Creature* Romulo = (Unit::GetCreature((*me), RomuloGUID));
+ Creature* Romulo = (ObjectAccessor::GetCreature((*me), RomuloGUID));
if (Romulo && Romulo->IsAlive() && !RomuloDead)
DoCast(Romulo, SPELL_ETERNAL_AFFECTION);
} else DoCast(me, SPELL_ETERNAL_AFFECTION);
@@ -1461,7 +1460,7 @@ void boss_julianne::boss_julianneAI::DamageTaken(Unit* /*done_by*/, uint32 &dama
DoCast(me, SPELL_DRINK_POISON);
IsFakingDeath = true;
- //IS THIS USEFULL? Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID));
+ //IS THIS USEFULL? Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID));
return;
}
@@ -1477,7 +1476,7 @@ void boss_julianne::boss_julianneAI::DamageTaken(Unit* /*done_by*/, uint32 &dama
//if this is true then we have to kill romulo too
if (RomuloDead)
{
- if (Creature* Romulo = (Unit::GetCreature((*me), RomuloGUID)))
+ if (Creature* Romulo = (ObjectAccessor::GetCreature((*me), RomuloGUID)))
{
Romulo->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
Romulo->GetMotionMaster()->Clear();
@@ -1491,12 +1490,12 @@ void boss_julianne::boss_julianneAI::DamageTaken(Unit* /*done_by*/, uint32 &dama
}
//if not already returned, then romulo is alive and we can pretend die
- if (Creature* Romulo = (Unit::GetCreature((*me), RomuloGUID)))
+ if (Creature* Romulo = (ObjectAccessor::GetCreature((*me), RomuloGUID)))
{
PretendToDie(me);
IsFakingDeath = true;
- CAST_AI(boss_romulo::boss_romuloAI, Romulo->AI())->ResurrectTimer = 10000;
- CAST_AI(boss_romulo::boss_romuloAI, Romulo->AI())->JulianneDead = true;
+ ENSURE_AI(boss_romulo::boss_romuloAI, Romulo->AI())->ResurrectTimer = 10000;
+ ENSURE_AI(boss_romulo::boss_romuloAI, Romulo->AI())->JulianneDead = true;
damage = 0;
return;
}
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp
index 2e4f1eaca10..3300e92869b 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp
@@ -49,7 +49,7 @@ class instance_karazhan : public InstanceMapScript
public:
instance_karazhan() : InstanceMapScript("instance_karazhan", 532) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_karazhan_InstanceMapScript(map);
}
@@ -80,7 +80,7 @@ public:
uint64 ImageGUID;
uint64 DustCoveredChest;
- void Initialize() OVERRIDE
+ void Initialize() override
{
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
@@ -108,7 +108,7 @@ public:
DustCoveredChest = 0;
}
- bool IsEncounterInProgress() const OVERRIDE
+ bool IsEncounterInProgress() const override
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
@@ -117,7 +117,7 @@ public:
return false;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -127,7 +127,7 @@ public:
}
}
- void SetData(uint32 type, uint32 uiData) OVERRIDE
+ void SetData(uint32 type, uint32 uiData) override
{
switch (type)
{
@@ -182,7 +182,7 @@ public:
}
}
- void SetData64(uint32 identifier, uint64 data) OVERRIDE
+ void SetData64(uint32 identifier, uint64 data) override
{
switch (identifier)
{
@@ -190,7 +190,7 @@ public:
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -236,12 +236,12 @@ public:
}
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
return strSaveData;
}
- uint32 GetData(uint32 uiData) const OVERRIDE
+ uint32 GetData(uint32 uiData) const override
{
switch (uiData)
{
@@ -264,7 +264,7 @@ public:
return 0;
}
- uint64 GetData64(uint32 uiData) const OVERRIDE
+ uint64 GetData64(uint32 uiData) const override
{
switch (uiData)
{
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
index b5c3bdd86d4..c89950b7de3 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
@@ -148,7 +148,7 @@ public:
bool PerformanceReady;
bool RaidWiped;
- void Reset() OVERRIDE
+ void Reset() override
{
m_uiSpotlightGUID = 0;
@@ -172,9 +172,9 @@ public:
Start(false, false);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -276,7 +276,7 @@ public:
RaidWiped = false;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
@@ -286,7 +286,7 @@ public:
{
if (TalkCount > 3)
{
- if (Creature* pSpotlight = Unit::GetCreature(*me, m_uiSpotlightGUID))
+ if (Creature* pSpotlight = ObjectAccessor::GetCreature(*me, m_uiSpotlightGUID))
pSpotlight->DespawnOrUnsummon();
SetEscortPaused(false);
@@ -336,10 +336,10 @@ public:
}
};
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
- npc_barnesAI* pBarnesAI = CAST_AI(npc_barnes::npc_barnesAI, creature->AI());
+ npc_barnesAI* pBarnesAI = ENSURE_AI(npc_barnes::npc_barnesAI, creature->AI());
switch (action)
{
@@ -371,7 +371,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (InstanceScript* instance = creature->GetInstanceScript())
{
@@ -403,7 +403,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_barnesAI>(creature);
}
@@ -420,7 +420,7 @@ class npc_berthold : public CreatureScript
public:
npc_berthold() : CreatureScript("npc_berthold") { }
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF + 1)
@@ -430,7 +430,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (InstanceScript* instance = creature->GetInstanceScript())
{
@@ -467,7 +467,7 @@ class npc_image_of_medivh : public CreatureScript
public:
npc_image_of_medivh() : CreatureScript("npc_image_of_medivh") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_image_of_medivhAI>(creature);
}
@@ -490,7 +490,7 @@ public:
bool EventStarted;
- void Reset() OVERRIDE
+ void Reset() override
{
ArcanagosGUID = 0;
EventStarted = false;
@@ -508,9 +508,9 @@ public:
me->RemoveCorpse();
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -539,7 +539,7 @@ public:
uint32 NextStep(uint32 Step)
{
- Creature* arca = Unit::GetCreature(*me, ArcanagosGUID);
+ Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID);
Map* map = me->GetMap();
switch (Step)
{
@@ -620,7 +620,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (YellTimer <= diff)
{
@@ -630,7 +630,7 @@ public:
if (Step >= 7 && Step <= 12)
{
- Unit* arca = Unit::GetUnit(*me, ArcanagosGUID);
+ Unit* arca = ObjectAccessor::GetUnit(*me, ArcanagosGUID);
if (FireArcanagosTimer <= diff)
{
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
index 0601c69e96d..7944011c7a0 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
@@ -94,7 +94,7 @@ class boss_felblood_kaelthas : public CreatureScript
public:
boss_felblood_kaelthas() : CreatureScript("boss_felblood_kaelthas") { }
- CreatureAI* GetAI(Creature* c) const OVERRIDE
+ CreatureAI* GetAI(Creature* c) const override
{
return GetInstanceAI<boss_felblood_kaelthasAI>(c);
}
@@ -132,7 +132,7 @@ public:
// 1 = Fireball; Summon Phoenix; Flamestrike
// 2 = Gravity Lapses
- void Reset() OVERRIDE
+ void Reset() override
{
/// @todo Timers
FireballTimer = 0;
@@ -150,32 +150,32 @@ public:
Phase = 0;
- instance->SetData(DATA_KAELTHAS_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_KAELTHAS, NOT_STARTED);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
- instance->SetData(DATA_KAELTHAS_EVENT, DONE);
+ instance->SetBossState(DATA_KAELTHAS, DONE);
// Enable the Translocation Orb Exit
if (GameObject* escapeOrb = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_ESCAPE_ORB)))
escapeOrb->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
}
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
if (damage > me->GetHealth())
RemoveGravityLapse(); // Remove Gravity Lapse so that players fall to ground if they kill him when in air.
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
- instance->SetData(DATA_KAELTHAS_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_KAELTHAS, IN_PROGRESS);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!HasTaunted && me->IsWithinDistInMap(who, 40.0f))
@@ -196,7 +196,7 @@ public:
ThreatContainer::StorageType::const_iterator i = threatlist.begin();
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && unit->IsAlive())
{
float threat = me->getThreatManager().getThreat(unit);
@@ -214,7 +214,7 @@ public:
ThreatContainer::StorageType::const_iterator i = threatlist.begin();
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && (unit->GetTypeId() == TYPEID_PLAYER))
unit->CastSpell(unit, SPELL_TELEPORT_CENTER, true);
}
@@ -227,7 +227,7 @@ public:
ThreatContainer::StorageType::const_iterator i = threatlist.begin();
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && (unit->GetTypeId() == TYPEID_PLAYER))
// Knockback into the air
unit->CastSpell(unit, SPELL_GRAVITY_LAPSE_DOT, true, 0, 0, me->GetGUID());
@@ -240,7 +240,7 @@ public:
ThreatContainer::StorageType::const_iterator i = threatlist.begin();
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && (unit->GetTypeId() == TYPEID_PLAYER))
{
// Also needs an exception in spell system.
@@ -260,7 +260,7 @@ public:
ThreatContainer::StorageType::const_iterator i = threatlist.begin();
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && (unit->GetTypeId() == TYPEID_PLAYER))
{
unit->RemoveAurasDueToSpell(SPELL_GRAVITY_LAPSE_FLY);
@@ -274,7 +274,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -430,7 +430,7 @@ class npc_felkael_flamestrike : public CreatureScript
public:
npc_felkael_flamestrike() : CreatureScript("npc_felkael_flamestrike") { }
- CreatureAI* GetAI(Creature* c) const OVERRIDE
+ CreatureAI* GetAI(Creature* c) const override
{
return new npc_felkael_flamestrikeAI(c);
}
@@ -443,7 +443,7 @@ public:
uint32 FlameStrikeTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
FlameStrikeTimer = 5000;
@@ -453,10 +453,10 @@ public:
DoCast(me, SPELL_FLAMESTRIKE2, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (FlameStrikeTimer <= diff)
{
@@ -472,7 +472,7 @@ class npc_felkael_phoenix : public CreatureScript
public:
npc_felkael_phoenix() : CreatureScript("npc_felkael_phoenix") { }
- CreatureAI* GetAI(Creature* c) const OVERRIDE
+ CreatureAI* GetAI(Creature* c) const override
{
return GetInstanceAI<npc_felkael_phoenixAI>(c);
}
@@ -490,7 +490,7 @@ public:
bool Rebirth;
bool FakeDeath;
- void Reset() OVERRIDE
+ void Reset() override
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE);
me->SetDisableGravity(true);
@@ -501,9 +501,9 @@ public:
FakeDeath = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void DamageTaken(Unit* /*killer*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*killer*/, uint32 &damage) override
{
if (damage < me->GetHealth())
return;
@@ -515,7 +515,7 @@ public:
return;
}
//Don't really die in all phases of Kael'Thas
- if (instance->GetData(DATA_KAELTHAS_EVENT) == 0)
+ if (instance->GetBossState(DATA_KAELTHAS) == 0)
{
//prevent death
damage = 0;
@@ -537,12 +537,12 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->SummonCreature(CREATURE_PHOENIX_EGG, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 45000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//If we are fake death, we cast revbirth and after that we kill the phoenix to spawn the egg.
if (FakeDeath)
@@ -585,7 +585,7 @@ class npc_felkael_phoenix_egg : public CreatureScript
public:
npc_felkael_phoenix_egg() : CreatureScript("npc_felkael_phoenix_egg") { }
- CreatureAI* GetAI(Creature* c) const OVERRIDE
+ CreatureAI* GetAI(Creature* c) const override
{
return new npc_felkael_phoenix_eggAI(c);
}
@@ -596,16 +596,16 @@ public:
uint32 HatchTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
HatchTimer = 10000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (HatchTimer <= diff)
{
@@ -621,7 +621,7 @@ class npc_arcane_sphere : public CreatureScript
public:
npc_arcane_sphere() : CreatureScript("npc_arcane_sphere") { }
- CreatureAI* GetAI(Creature* c) const OVERRIDE
+ CreatureAI* GetAI(Creature* c) const override
{
return new npc_arcane_sphereAI(c);
}
@@ -633,7 +633,7 @@ public:
uint32 DespawnTimer;
uint32 ChangeTargetTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
DespawnTimer = 30000;
ChangeTargetTimer = urand(6000, 12000);
@@ -644,9 +644,9 @@ public:
DoCast(me, SPELL_ARCANE_SPHERE_PASSIVE, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (DespawnTimer <= diff)
me->Kill(me);
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
index 4bc0ee68cc3..40dedcf6d93 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
@@ -108,7 +108,7 @@ class boss_priestess_delrissa : public CreatureScript
public:
boss_priestess_delrissa() : CreatureScript("boss_priestess_delrissa") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_priestess_delrissaAI>(creature);
}
@@ -136,7 +136,7 @@ public:
uint32 DispelTimer;
uint32 ResetTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
PlayersKilled = 0;
@@ -151,18 +151,18 @@ public:
}
//this mean she at some point evaded
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
- instance->SetData(DATA_DELRISSA_EVENT, FAIL);
+ instance->SetBossState(DATA_DELRISSA, FAIL);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
Talk(SAY_AGGRO);
for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
{
- if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[i]))
+ if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUID[i]))
{
if (!pAdd->GetVictim())
{
@@ -172,7 +172,7 @@ public:
}
}
- instance->SetData(DATA_DELRISSA_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_DELRISSA, IN_PROGRESS);
}
void InitializeLackeys()
@@ -195,7 +195,7 @@ public:
//remove random entries
while (LackeyEntryList.size() > MAX_ACTIVE_LACKEY)
- LackeyEntryList.erase(LackeyEntryList.begin() + rand()%LackeyEntryList.size());
+ LackeyEntryList.erase(LackeyEntryList.begin() + rand32() % LackeyEntryList.size());
//summon all the remaining in vector
for (std::vector<uint32>::const_iterator itr = LackeyEntryList.begin(); itr != LackeyEntryList.end(); ++itr)
@@ -210,7 +210,7 @@ public:
{
for (std::vector<uint32>::const_iterator itr = LackeyEntryList.begin(); itr != LackeyEntryList.end(); ++itr)
{
- Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[j]);
+ Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUID[j]);
//object already removed, not exist
if (!pAdd)
@@ -224,7 +224,7 @@ public:
}
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -235,12 +235,12 @@ public:
++PlayersKilled;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
if (instance->GetData(DATA_DELRISSA_DEATH_COUNT) == MAX_ACTIVE_LACKEY)
- instance->SetData(DATA_DELRISSA_EVENT, DONE);
+ instance->SetBossState(DATA_DELRISSA, DONE);
else
{
if (me->HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE))
@@ -248,7 +248,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -271,7 +271,7 @@ public:
Unit* target = me;
for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
{
- if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[i]))
+ if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUID[i]))
{
if (pAdd->IsAlive() && pAdd->GetHealth() < health)
target = pAdd;
@@ -287,7 +287,7 @@ public:
Unit* target = me;
if (urand(0, 1))
- if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[rand()%MAX_ACTIVE_LACKEY]))
+ if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUID[rand32() % MAX_ACTIVE_LACKEY]))
if (pAdd->IsAlive())
target = pAdd;
@@ -300,7 +300,7 @@ public:
Unit* target = me;
if (urand(0, 1))
- if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[rand()%MAX_ACTIVE_LACKEY]))
+ if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUID[rand32() % MAX_ACTIVE_LACKEY]))
if (pAdd->IsAlive() && !pAdd->HasAura(SPELL_SHIELD))
target = pAdd;
@@ -319,7 +319,7 @@ public:
if (urand(0, 1))
target = me;
else
- if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[rand()%MAX_ACTIVE_LACKEY]))
+ if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUID[rand32() % MAX_ACTIVE_LACKEY]))
if (pAdd->IsAlive())
target = pAdd;
}
@@ -365,7 +365,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
bool UsedPotion;
- void Reset() OVERRIDE
+ void Reset() override
{
UsedPotion = false;
@@ -383,14 +383,14 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
}
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (!who)
return;
for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
{
- if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUIDs[i]))
+ if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUIDs[i]))
{
if (!pAdd->GetVictim() && pAdd != me)
{
@@ -400,7 +400,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
}
}
- if (Creature* pDelrissa = Unit::GetCreature(*me, instance->GetData64(DATA_DELRISSA)))
+ if (Creature* pDelrissa = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DELRISSA)))
{
if (pDelrissa->IsAlive() && !pDelrissa->GetVictim())
{
@@ -410,9 +410,9 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
- Creature* pDelrissa = Unit::GetCreature(*me, instance->GetData64(DATA_DELRISSA));
+ Creature* pDelrissa = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DELRISSA));
uint32 uiLackeyDeathCount = instance->GetData(DATA_DELRISSA_DEATH_COUNT);
if (!pDelrissa)
@@ -434,27 +434,27 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
if (!pDelrissa->HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE))
pDelrissa->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
- instance->SetData(DATA_DELRISSA_EVENT, DONE);
+ instance->SetBossState(DATA_DELRISSA, DONE);
}
}
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
- if (Creature* Delrissa = Unit::GetCreature(*me, instance->GetData64(DATA_DELRISSA)))
+ if (Creature* Delrissa = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DELRISSA)))
Delrissa->AI()->KilledUnit(victim);
}
void AcquireGUIDs()
{
- if (Creature* Delrissa = (Unit::GetCreature(*me, instance->GetData64(DATA_DELRISSA))))
+ if (Creature* Delrissa = (ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DELRISSA))))
{
for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
- m_auiLackeyGUIDs[i] = CAST_AI(boss_priestess_delrissa::boss_priestess_delrissaAI, Delrissa->AI())->m_auiLackeyGUID[i];
+ m_auiLackeyGUIDs[i] = ENSURE_AI(boss_priestess_delrissa::boss_priestess_delrissaAI, Delrissa->AI())->m_auiLackeyGUID[i];
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UsedPotion && HealthBelowPct(25))
{
@@ -485,7 +485,7 @@ class boss_kagani_nightstrike : public CreatureScript
public:
boss_kagani_nightstrike() : CreatureScript("boss_kagani_nightstrike") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_kagani_nightstrikeAI>(creature);
}
@@ -502,7 +502,7 @@ public:
uint32 Wait_Timer;
bool InVanish;
- void Reset() OVERRIDE
+ void Reset() override
{
Gouge_Timer = 5500;
Kick_Timer = 7000;
@@ -515,7 +515,7 @@ public:
boss_priestess_lackey_commonAI::Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -589,7 +589,7 @@ class boss_ellris_duskhallow : public CreatureScript
public:
boss_ellris_duskhallow() : CreatureScript("boss_ellris_duskhallow") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_ellris_duskhallowAI>(creature);
}
@@ -605,7 +605,7 @@ public:
uint32 Curse_of_Agony_Timer;
uint32 Fear_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Immolate_Timer = 6000;
Shadow_Bolt_Timer = 3000;
@@ -616,12 +616,12 @@ public:
boss_priestess_lackey_commonAI::Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoCast(me, SPELL_SUMMON_IMP);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -680,7 +680,7 @@ class boss_eramas_brightblaze : public CreatureScript
public:
boss_eramas_brightblaze() : CreatureScript("boss_eramas_brightblaze") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_eramas_brightblazeAI>(creature);
}
@@ -693,7 +693,7 @@ public:
uint32 Knockdown_Timer;
uint32 Snap_Kick_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Knockdown_Timer = 6000;
Snap_Kick_Timer = 4500;
@@ -701,7 +701,7 @@ public:
boss_priestess_lackey_commonAI::Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -741,7 +741,7 @@ class boss_yazzai : public CreatureScript
public:
boss_yazzai() : CreatureScript("boss_yazzai") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_yazzaiAI>(creature);
}
@@ -762,7 +762,7 @@ public:
uint32 Frostbolt_Timer;
uint32 Blink_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
HasIceBlocked = false;
@@ -778,7 +778,7 @@ public:
boss_priestess_lackey_commonAI::Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -832,7 +832,7 @@ public:
ThreatContainer::StorageType const &t_list = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)
{
- if (Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid()))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()))
{
//if in melee range
if (target->IsWithinDistInMap(me, 5))
@@ -871,7 +871,7 @@ class boss_warlord_salaris : public CreatureScript
public:
boss_warlord_salaris() : CreatureScript("boss_warlord_salaris") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_warlord_salarisAI>(creature);
}
@@ -888,7 +888,7 @@ public:
uint32 Hamstring_Timer;
uint32 Mortal_Strike_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Intercept_Stun_Timer = 500;
Disarm_Timer = 6000;
@@ -900,12 +900,12 @@ public:
boss_priestess_lackey_commonAI::Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoCast(me, SPELL_BATTLE_SHOUT);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -918,7 +918,7 @@ public:
ThreatContainer::StorageType const &t_list = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)
{
- if (Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid()))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()))
{
//if in melee range
if (target->IsWithinDistInMap(me, ATTACK_DISTANCE))
@@ -991,7 +991,7 @@ class boss_garaxxas : public CreatureScript
public:
boss_garaxxas() : CreatureScript("boss_garaxxas") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_garaxxasAI>(creature);
}
@@ -1013,7 +1013,7 @@ public:
uint32 Wing_Clip_Timer;
uint32 Freezing_Trap_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Aimed_Shot_Timer = 6000;
Shoot_Timer = 2500;
@@ -1022,19 +1022,19 @@ public:
Wing_Clip_Timer = 4000;
Freezing_Trap_Timer = 15000;
- Unit* pPet = Unit::GetUnit(*me, m_uiPetGUID);
+ Unit* pPet = ObjectAccessor::GetUnit(*me, m_uiPetGUID);
if (!pPet)
me->SummonCreature(NPC_SLIVER, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_CORPSE_DESPAWN, 0);
boss_priestess_lackey_commonAI::Reset();
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
m_uiPetGUID = summoned->GetGUID();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1102,7 +1102,7 @@ class boss_apoko : public CreatureScript
public:
boss_apoko() : CreatureScript("boss_apoko") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_apokoAI>(creature);
}
@@ -1119,7 +1119,7 @@ public:
uint32 Healing_Wave_Timer;
uint32 Frost_Shock_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Totem_Timer = 2000;
Totem_Amount = 1;
@@ -1131,7 +1131,7 @@ public:
boss_priestess_lackey_commonAI::Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1167,17 +1167,8 @@ public:
if (Healing_Wave_Timer <= diff)
{
- // std::vector<Add*>::const_iterator itr = Group.begin() + rand()%Group.size();
- // uint64 guid = (*itr)->guid;
- // if (guid)
- // {
- // Unit* pAdd = Unit::GetUnit(*me, (*itr)->guid);
- // if (pAdd && pAdd->IsAlive())
- // {
DoCast(me, SPELL_LESSER_HEALING_WAVE);
Healing_Wave_Timer = 5000;
- // }
- // }
} else Healing_Wave_Timer -= diff;
DoMeleeAttackIfReady();
@@ -1200,7 +1191,7 @@ class boss_zelfan : public CreatureScript
public:
boss_zelfan() : CreatureScript("boss_zelfan") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_zelfanAI>(creature);
}
@@ -1216,7 +1207,7 @@ public:
uint32 High_Explosive_Sheep_Timer;
uint32 Fel_Iron_Bomb_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Goblin_Dragon_Gun_Timer = 20000;
Rocket_Launch_Timer = 7000;
@@ -1227,7 +1218,7 @@ public:
boss_priestess_lackey_commonAI::Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1256,7 +1247,7 @@ public:
{
for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
{
- if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUIDs[i]))
+ if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUIDs[i]))
{
if (pAdd->IsPolymorphed())
{
@@ -1285,7 +1276,7 @@ class npc_high_explosive_sheep : public CreatureScript
public:
npc_high_explosive_sheep() : CreatureScript("npc_high_explosive_sheep") { }
- //CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ //CreatureAI* GetAI(Creature* creature) const override
//{
// return new npc_high_explosive_sheepAI(creature);
//};
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
index 758ecb996f4..d34123c58b2 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -16,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Selin_Fireheart
-SD%Complete: 90
-SDComment: Heroic and Normal Support. Needs further testing.
-SDCategory: Magister's Terrace
-EndScriptData */
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "magisters_terrace.h"
@@ -39,321 +31,264 @@ enum Says
enum Spells
{
- //Crystal effect spells
- SPELL_FEL_CRYSTAL_COSMETIC = 44374,
+ // Crystal effect spells
SPELL_FEL_CRYSTAL_DUMMY = 44329,
- SPELL_FEL_CRYSTAL_VISUAL = 44355,
SPELL_MANA_RAGE = 44320, // This spell triggers 44321, which changes scale and regens mana Requires an entry in spell_script_target
- //Selin's spells
+ // Selin's spells
SPELL_DRAIN_LIFE = 44294,
SPELL_FEL_EXPLOSION = 44314,
SPELL_DRAIN_MANA = 46153 // Heroic only
};
+enum Phases
+{
+ PHASE_NORMAL = 1,
+ PHASE_DRAIN = 2
+};
+
+enum Events
+{
+ EVENT_FEL_EXPLOSION = 1,
+ EVENT_DRAIN_CRYSTAL,
+ EVENT_DRAIN_MANA,
+ EVENT_DRAIN_LIFE,
+ EVENT_EMPOWER
+};
+
enum Misc
{
- CRYSTALS_NUMBER = 5,
- DATA_CRYSTALS = 6,
- CREATURE_FEL_CRYSTAL = 24722
+ ACTION_SWITCH_PHASE = 1
};
class boss_selin_fireheart : public CreatureScript
{
-public:
- boss_selin_fireheart() : CreatureScript("boss_selin_fireheart") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetInstanceAI<boss_selin_fireheartAI>(creature);
- };
+ public:
+ boss_selin_fireheart() : CreatureScript("boss_selin_fireheart") { }
- struct boss_selin_fireheartAI : public ScriptedAI
- {
- boss_selin_fireheartAI(Creature* creature) : ScriptedAI(creature)
+ struct boss_selin_fireheartAI : public BossAI
{
- instance = creature->GetInstanceScript();
-
- Crystals.clear();
- //GUIDs per instance is static, so we only need to load them once.
- uint32 size = instance->GetData(DATA_FEL_CRYSTAL_SIZE);
- for (uint8 i = 0; i < size; ++i)
+ boss_selin_fireheartAI(Creature* creature) : BossAI(creature, DATA_SELIN)
{
- instance->SetData64(DATA_FEL_CRYSTAL, i);
- uint64 guid = instance->GetData64(DATA_FEL_CRYSTAL);
- TC_LOG_DEBUG("scripts", "Selin: Adding Fel Crystal " UI64FMTD " to list", guid);
- Crystals.push_back(guid);
+ CrystalGUID = 0;
+ _scheduledEvents = false;
}
- }
-
- InstanceScript* instance;
-
- std::list<uint64> Crystals;
- uint32 DrainLifeTimer;
- uint32 DrainManaTimer;
- uint32 FelExplosionTimer;
- uint32 DrainCrystalTimer;
- uint32 EmpowerTimer;
-
- bool IsDraining;
- bool DrainingCrystal;
-
- uint64 CrystalGUID; // This will help us create a pointer to the crystal we are draining. We store GUIDs, never units in case unit is deleted/offline (offline if player of course).
-
- void Reset() OVERRIDE
- {
- //for (uint8 i = 0; i < CRYSTALS_NUMBER; ++i)
- for (std::list<uint64>::const_iterator itr = Crystals.begin(); itr != Crystals.end(); ++itr)
+ void Reset() override
{
- //Unit* unit = Unit::GetUnit(*me, FelCrystals[i]);
- if (Creature* creature = Unit::GetCreature(*me, *itr))
+ Crystals.clear();
+ me->GetCreatureListWithEntryInGrid(Crystals, NPC_FEL_CRYSTAL, 250.0f);
+
+ for (Creature* creature : Crystals)
{
if (!creature->IsAlive())
- creature->Respawn(); // Let the core handle setting death state, etc.
+ creature->Respawn();
- // Only need to set unselectable flag. You can't attack unselectable units so non_attackable flag is not necessary here.
creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
- }
- // Set Inst data for encounter
- instance->SetData(DATA_SELIN_EVENT, NOT_STARTED);
-
- DrainLifeTimer = urand(3000, 7000);
- DrainManaTimer = DrainLifeTimer + 5000;
- FelExplosionTimer = 2100;
- if (IsHeroic())
- DrainCrystalTimer = urand(10000, 15000);
- else
- DrainCrystalTimer = urand(20000, 25000);
- EmpowerTimer = 10000;
-
- IsDraining = false;
- DrainingCrystal = false;
- CrystalGUID = 0;
- }
+ _Reset();
+ CrystalGUID = 0;
+ _scheduledEvents = false;
+ }
- void SelectNearestCrystal()
- {
- if (Crystals.empty())
- return;
-
- //float ShortestDistance = 0;
- CrystalGUID = 0;
- Unit* pCrystal = NULL;
- Unit* CrystalChosen = NULL;
- //for (uint8 i = 0; i < CRYSTALS_NUMBER; ++i)
- for (std::list<uint64>::const_iterator itr = Crystals.begin(); itr != Crystals.end(); ++itr)
+ void DoAction(int32 action) override
{
- pCrystal = NULL;
- //pCrystal = Unit::GetUnit(*me, FelCrystals[i]);
- pCrystal = Unit::GetUnit(*me, *itr);
- if (pCrystal && pCrystal->IsAlive())
+ switch (action)
{
- // select nearest
- if (!CrystalChosen || me->GetDistanceOrder(pCrystal, CrystalChosen, false))
- {
- CrystalGUID = pCrystal->GetGUID();
- CrystalChosen = pCrystal; // Store a copy of pCrystal so we don't need to recreate a pointer to closest crystal for the movement and yell.
- }
+ case ACTION_SWITCH_PHASE:
+ events.SetPhase(PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_FEL_EXPLOSION, 2000, 0, PHASE_NORMAL);
+ AttackStart(me->GetVictim());
+ me->GetMotionMaster()->MoveChase(me->GetVictim());
+ break;
+ default:
+ break;
}
}
- if (CrystalChosen)
+
+ void SelectNearestCrystal()
{
- Talk(SAY_ENERGY);
- Talk(EMOTE_CRYSTAL);
+ if (Crystals.empty())
+ return;
- CrystalChosen->CastSpell(CrystalChosen, SPELL_FEL_CRYSTAL_COSMETIC, true);
+ Crystals.sort(Trinity::ObjectDistanceOrderPred(me));
+ if (Creature* CrystalChosen = Crystals.front())
+ {
+ Talk(SAY_ENERGY);
+ Talk(EMOTE_CRYSTAL);
- float x, y, z; // coords that we move to, close to the crystal.
- CrystalChosen->GetClosePoint(x, y, z, me->GetObjectSize(), CONTACT_DISTANCE);
+ DoCast(CrystalChosen, SPELL_FEL_CRYSTAL_DUMMY);
+ CrystalGUID = CrystalChosen->GetGUID();
+ Crystals.remove(CrystalChosen);
- me->SetWalk(false);
- me->GetMotionMaster()->MovePoint(1, x, y, z);
- DrainingCrystal = true;
- }
- }
+ float x, y, z;
+ CrystalChosen->GetClosePoint(x, y, z, me->GetObjectSize(), CONTACT_DISTANCE);
- void ShatterRemainingCrystals()
- {
- if (Crystals.empty())
- return;
+ events.SetPhase(PHASE_DRAIN);
+ me->SetWalk(false);
+ me->GetMotionMaster()->MovePoint(1, x, y, z);
+ }
+ }
- //for (uint8 i = 0; i < CRYSTALS_NUMBER; ++i)
- for (std::list<uint64>::const_iterator itr = Crystals.begin(); itr != Crystals.end(); ++itr)
+ void ShatterRemainingCrystals()
{
- //Creature* pCrystal = (Unit::GetCreature(*me, FelCrystals[i]));
- Creature* pCrystal = Unit::GetCreature(*me, *itr);
- if (pCrystal && pCrystal->IsAlive())
- pCrystal->Kill(pCrystal);
+ if (Crystals.empty())
+ return;
+
+ for (Creature* crystal : Crystals)
+ {
+ if (crystal && crystal->IsAlive())
+ crystal->Kill(crystal);
+ }
}
- }
- void EnterCombat(Unit* /*who*/) OVERRIDE
- {
- Talk(SAY_AGGRO);
- instance->SetData(DATA_SELIN_EVENT, IN_PROGRESS);
- }
+ void EnterCombat(Unit* /*who*/) override
+ {
+ Talk(SAY_AGGRO);
+ _EnterCombat();
- void KilledUnit(Unit* /*victim*/) OVERRIDE
- {
- Talk(SAY_KILL);
- }
+ events.SetPhase(PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_FEL_EXPLOSION, 2100, 0, PHASE_NORMAL);
+ }
- void MovementInform(uint32 type, uint32 id) OVERRIDE
- {
- if (type == POINT_MOTION_TYPE && id == 1)
+ void KilledUnit(Unit* victim) override
{
- Unit* CrystalChosen = Unit::GetUnit(*me, CrystalGUID);
- if (CrystalChosen && CrystalChosen->IsAlive())
- {
- // Make the crystal attackable
- // We also remove NON_ATTACKABLE in case the database has it set.
- CrystalChosen->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
- CrystalChosen->CastSpell(me, SPELL_MANA_RAGE, true);
- IsDraining = true;
- }
- else
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_KILL);
+ }
+
+ void MovementInform(uint32 type, uint32 id) override
+ {
+ if (type == POINT_MOTION_TYPE && id == 1)
{
- // Make an error message in case something weird happened here
- TC_LOG_ERROR("scripts", "Selin Fireheart unable to drain crystal as the crystal is either dead or despawned");
- DrainingCrystal = false;
+ Unit* CrystalChosen = ObjectAccessor::GetUnit(*me, CrystalGUID);
+ if (CrystalChosen && CrystalChosen->IsAlive())
+ {
+ CrystalChosen->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ CrystalChosen->CastSpell(me, SPELL_MANA_RAGE, true);
+ events.ScheduleEvent(EVENT_EMPOWER, 10000, PHASE_DRAIN);
+ }
}
}
- }
-
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- Talk(SAY_DEATH);
- instance->SetData(DATA_SELIN_EVENT, DONE); // Encounter complete!
- ShatterRemainingCrystals();
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ Talk(SAY_DEATH);
+ _JustDied();
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (!UpdateVictim())
- return;
+ ShatterRemainingCrystals();
+ }
- if (!DrainingCrystal)
+ void UpdateAI(uint32 diff) override
{
- uint32 maxPowerMana = me->GetMaxPower(POWER_MANA);
- if (maxPowerMana && ((me->GetPower(POWER_MANA)*100 / maxPowerMana) < 10))
- {
- if (DrainLifeTimer <= diff)
- {
- DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0), SPELL_DRAIN_LIFE);
- DrainLifeTimer = 10000;
- } else DrainLifeTimer -= diff;
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
- // Heroic only
- if (IsHeroic())
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- if (DrainManaTimer <= diff)
+ case EVENT_FEL_EXPLOSION:
+ DoCastAOE(SPELL_FEL_EXPLOSION);
+ events.ScheduleEvent(EVENT_FEL_EXPLOSION, 2000, 0, PHASE_NORMAL);
+ break;
+ case EVENT_DRAIN_CRYSTAL:
+ SelectNearestCrystal();
+ _scheduledEvents = false;
+ break;
+ case EVENT_DRAIN_MANA:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
+ DoCast(target, SPELL_DRAIN_MANA);
+ events.ScheduleEvent(EVENT_DRAIN_MANA, 10000, 0, PHASE_NORMAL);
+ break;
+ case EVENT_DRAIN_LIFE:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 20.0f, true))
+ DoCast(target, SPELL_DRAIN_LIFE);
+ events.ScheduleEvent(EVENT_DRAIN_LIFE, 10000, 0, PHASE_NORMAL);
+ break;
+ case EVENT_EMPOWER:
{
- DoCast(SelectTarget(SELECT_TARGET_RANDOM, 1), SPELL_DRAIN_MANA);
- DrainManaTimer = 10000;
- } else DrainManaTimer -= diff;
+ Talk(SAY_EMPOWERED);
+
+ Creature* CrystalChosen = ObjectAccessor::GetCreature(*me, CrystalGUID);
+ if (CrystalChosen && CrystalChosen->IsAlive())
+ CrystalChosen->Kill(CrystalChosen);
+
+ CrystalGUID = 0;
+
+ me->GetMotionMaster()->Clear();
+ me->GetMotionMaster()->MoveChase(me->GetVictim());
+ break;
+ }
+ default:
+ break;
}
}
- if (FelExplosionTimer <= diff)
+ if (me->GetPower(POWER_MANA) * 100 / me->GetMaxPower(POWER_MANA) < 10)
{
- if (!me->IsNonMeleeSpellCast(false))
+ if (events.IsInPhase(PHASE_NORMAL) && !_scheduledEvents)
{
- DoCast(me, SPELL_FEL_EXPLOSION);
- FelExplosionTimer = 2000;
- }
- } else FelExplosionTimer -= diff;
+ _scheduledEvents = true;
+ uint32 timer = urand(3000, 7000);
+ events.ScheduleEvent(EVENT_DRAIN_LIFE, timer, 0, PHASE_NORMAL);
- // If below 10% mana, start recharging
- maxPowerMana = me->GetMaxPower(POWER_MANA);
- if (maxPowerMana && ((me->GetPower(POWER_MANA)*100 / maxPowerMana) < 10))
- {
- if (DrainCrystalTimer <= diff)
- {
- SelectNearestCrystal();
if (IsHeroic())
- DrainCrystalTimer = urand(10000, 15000);
+ {
+ events.ScheduleEvent(EVENT_DRAIN_CRYSTAL, urand(10000, 15000), 0, PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_DRAIN_MANA, timer + 5000, 0, PHASE_NORMAL);
+ }
else
- DrainCrystalTimer = urand(20000, 25000);
- } else DrainCrystalTimer -= diff;
+ events.ScheduleEvent(EVENT_DRAIN_CRYSTAL, urand(20000, 25000), 0, PHASE_NORMAL);
+ }
}
- }else
- {
- if (IsDraining)
- {
- if (EmpowerTimer <= diff)
- {
- IsDraining = false;
- DrainingCrystal = false;
-
- Talk(SAY_EMPOWERED);
- Unit* CrystalChosen = Unit::GetUnit(*me, CrystalGUID);
- if (CrystalChosen && CrystalChosen->IsAlive())
- // Use Deal Damage to kill it, not setDeathState.
- CrystalChosen->Kill(CrystalChosen);
-
- CrystalGUID = 0;
-
- me->GetMotionMaster()->Clear();
- me->GetMotionMaster()->MoveChase(me->GetVictim());
- } else EmpowerTimer -= diff;
- }
+ DoMeleeAttackIfReady();
}
- DoMeleeAttackIfReady(); // No need to check if we are draining crystal here, as the spell has a stun.
- }
- };
+ private:
+ std::list<Creature*> Crystals;
+ uint64 CrystalGUID;
+ bool _scheduledEvents;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_selin_fireheartAI>(creature);
+ };
};
class npc_fel_crystal : public CreatureScript
{
-public:
- npc_fel_crystal() : CreatureScript("npc_fel_crystal") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_fel_crystalAI(creature);
- };
-
- struct npc_fel_crystalAI : public ScriptedAI
- {
- npc_fel_crystalAI(Creature* creature) : ScriptedAI(creature) { }
+ public:
+ npc_fel_crystal() : CreatureScript("npc_fel_crystal") { }
- void Reset() OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
-
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
-
- void JustDied(Unit* /*killer*/) OVERRIDE
+ struct npc_fel_crystalAI : public ScriptedAI
{
- if (InstanceScript* instance = me->GetInstanceScript())
+ npc_fel_crystalAI(Creature* creature) : ScriptedAI(creature) { }
+
+ void JustDied(Unit* /*killer*/) override
{
- Creature* Selin = (Unit::GetCreature(*me, instance->GetData64(DATA_SELIN)));
- if (Selin && Selin->IsAlive())
+ if (InstanceScript* instance = me->GetInstanceScript())
{
- if (CAST_AI(boss_selin_fireheart::boss_selin_fireheartAI, Selin->AI())->CrystalGUID == me->GetGUID())
- {
- // Set this to false if we are the Creature that Selin is draining so his AI flows properly
- CAST_AI(boss_selin_fireheart::boss_selin_fireheartAI, Selin->AI())->DrainingCrystal = false;
- CAST_AI(boss_selin_fireheart::boss_selin_fireheartAI, Selin->AI())->IsDraining = false;
- CAST_AI(boss_selin_fireheart::boss_selin_fireheartAI, Selin->AI())->EmpowerTimer = 10000;
- if (Selin->GetVictim())
- {
- Selin->AI()->AttackStart(Selin->GetVictim());
- Selin->GetMotionMaster()->MoveChase(Selin->GetVictim());
- }
- }
+ Creature* Selin = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SELIN));
+ if (Selin && Selin->IsAlive())
+ Selin->AI()->DoAction(ACTION_SWITCH_PHASE);
}
- } else TC_LOG_ERROR("scripts", ERROR_INST_DATA);
- }
- };
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_fel_crystalAI>(creature);
+ };
};
void AddSC_boss_selin_fireheart()
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp
index 95bfcb93878..b9930820303 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -16,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Vexallus
-SD%Complete: 90
-SDComment: Heroic and Normal support. Needs further testing.
-SDCategory: Magister's Terrace
-EndScriptData */
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "magisters_terrace.h"
@@ -41,26 +33,22 @@ enum Yells
enum Spells
{
- // Pure energy spell info
- SPELL_ENERGY_BOLT = 46156,
- SPELL_ENERGY_FEEDBACK = 44335,
-
- // Vexallus spell info
SPELL_CHAIN_LIGHTNING = 44318,
- SPELL_H_CHAIN_LIGHTNING = 46380, // heroic spell
SPELL_OVERLOAD = 44353,
SPELL_ARCANE_SHOCK = 44319,
- SPELL_H_ARCANE_SHOCK = 46381, // heroic spell
SPELL_SUMMON_PURE_ENERGY = 44322, // mod scale -10
H_SPELL_SUMMON_PURE_ENERGY1 = 46154, // mod scale -5
H_SPELL_SUMMON_PURE_ENERGY2 = 46159 // mod scale -5
-
};
-enum Creatures
+enum Events
{
- NPC_PURE_ENERGY = 24745,
+ EVENT_ENERGY_BOLT = 1,
+ EVENT_ENERGY_FEEDBACK,
+ EVENT_CHAIN_LIGHTNING,
+ EVENT_OVERLOAD,
+ EVENT_ARCANE_SHOCK
};
enum Misc
@@ -71,170 +59,160 @@ enum Misc
class boss_vexallus : public CreatureScript
{
-public:
- boss_vexallus() : CreatureScript("boss_vexallus") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetInstanceAI<boss_vexallusAI>(creature);
- };
-
- struct boss_vexallusAI : public BossAI
- {
- boss_vexallusAI(Creature* creature) : BossAI(creature, DATA_VEXALLUS_EVENT)
- {
- instance = creature->GetInstanceScript();
- }
-
- InstanceScript* instance;
+ public:
+ boss_vexallus() : CreatureScript("boss_vexallus") { }
- uint32 ChainLightningTimer;
- uint32 ArcaneShockTimer;
- uint32 OverloadTimer;
- uint32 IntervalHealthAmount;
- bool Enraged;
-
- void Reset() OVERRIDE
+ struct boss_vexallusAI : public BossAI
{
- summons.DespawnAll();
- ChainLightningTimer = 8000;
- ArcaneShockTimer = 5000;
- OverloadTimer = 1200;
- IntervalHealthAmount = 1;
- Enraged = false;
-
- instance->SetData(DATA_VEXALLUS_EVENT, NOT_STARTED);
- }
+ boss_vexallusAI(Creature* creature) : BossAI(creature, DATA_VEXALLUS)
+ {
+ _intervalHealthAmount = 1;
+ _enraged = false;
+ }
- void KilledUnit(Unit* /*victim*/) OVERRIDE
- {
- Talk(SAY_KILL);
- }
+ void Reset() override
+ {
+ _Reset();
+ _intervalHealthAmount = 1;
+ _enraged = false;
+ }
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- summons.DespawnAll();
- instance->SetData(DATA_VEXALLUS_EVENT, DONE);
- }
+ void KilledUnit(Unit* /*victim*/) override
+ {
+ Talk(SAY_KILL);
+ }
- void EnterCombat(Unit* /*who*/) OVERRIDE
- {
- Talk(SAY_AGGRO);
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ }
- instance->SetData(DATA_VEXALLUS_EVENT, IN_PROGRESS);
- }
+ void EnterCombat(Unit* /*who*/) override
+ {
+ Talk(SAY_AGGRO);
+ _EnterCombat();
- void JustSummoned(Creature* summoned) OVERRIDE
- {
- if (Unit* temp = SelectTarget(SELECT_TARGET_RANDOM, 0))
- summoned->GetMotionMaster()->MoveFollow(temp, 0, 0);
+ events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 8000);
+ events.ScheduleEvent(EVENT_ARCANE_SHOCK, 5000);
+ }
- //spells are SUMMON_TYPE_GUARDIAN, so using setOwner should be ok
- summoned->CastSpell(summoned, SPELL_ENERGY_BOLT, false, 0, 0, me->GetGUID());
- }
+ void JustSummoned(Creature* summoned) override
+ {
+ if (Unit* temp = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ summoned->GetMotionMaster()->MoveFollow(temp, 0, 0);
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (!UpdateVictim())
- return;
+ summons.Summon(summoned);
+ }
- if (!Enraged)
+ void DamageTaken(Unit* /*who*/, uint32& /*damage*/) override
{
- //used for check, when Vexallus cast adds 85%, 70%, 55%, 40%, 25%
- if (!HealthAbovePct(100 - INTERVAL_MODIFIER * IntervalHealthAmount))
+ if (_enraged)
+ return;
+
+ // 85%, 70%, 55%, 40%, 25%
+ if (!HealthAbovePct(100 - INTERVAL_MODIFIER * _intervalHealthAmount))
{
- //increase amount, unless we're at 10%, then we switch and return
- if (IntervalHealthAmount == INTERVAL_SWITCH)
+ // increase amount, unless we're at 10%, then we switch and return
+ if (_intervalHealthAmount == INTERVAL_SWITCH)
{
- Enraged = true;
+ _enraged = true;
+ events.Reset();
+ events.ScheduleEvent(EVENT_OVERLOAD, 1200);
return;
}
else
- ++IntervalHealthAmount;
+ ++_intervalHealthAmount;
Talk(SAY_ENERGY);
Talk(EMOTE_DISCHARGE_ENERGY);
if (IsHeroic())
{
- DoCast(me, H_SPELL_SUMMON_PURE_ENERGY1, false);
- DoCast(me, H_SPELL_SUMMON_PURE_ENERGY2, false);
+ DoCast(me, H_SPELL_SUMMON_PURE_ENERGY1);
+ DoCast(me, H_SPELL_SUMMON_PURE_ENERGY2);
}
else
- DoCast(me, SPELL_SUMMON_PURE_ENERGY, false);
-
- //below are workaround summons, remove when summoning spells w/implicitTarget 73 implemented in the core
- me->SummonCreature(NPC_PURE_ENERGY, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_CORPSE_DESPAWN, 0);
-
- if (IsHeroic())
- me->SummonCreature(NPC_PURE_ENERGY, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_CORPSE_DESPAWN, 0);
+ DoCast(me, SPELL_SUMMON_PURE_ENERGY);
}
+ }
- if (ChainLightningTimer <= diff)
- {
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_CHAIN_LIGHTNING);
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- ChainLightningTimer = 8000;
- } else ChainLightningTimer -= diff;
+ events.Update(diff);
- if (ArcaneShockTimer <= diff)
- {
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- if (target)
- DoCast(target, SPELL_ARCANE_SHOCK);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- ArcaneShockTimer = 8000;
- } else ArcaneShockTimer -= diff;
- }
- else
- {
- if (OverloadTimer <= diff)
+ while (uint32 eventId = events.ExecuteEvent())
{
- DoCastVictim(SPELL_OVERLOAD);
+ switch (eventId)
+ {
+ case EVENT_CHAIN_LIGHTNING:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
+ DoCast(target, SPELL_CHAIN_LIGHTNING);
+ events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 8000);
+ break;
+ case EVENT_ARCANE_SHOCK:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 20.0f, true))
+ DoCast(target, SPELL_ARCANE_SHOCK);
+ events.ScheduleEvent(EVENT_ARCANE_SHOCK, 8000);
+ break;
+ case EVENT_OVERLOAD:
+ DoCastVictim(SPELL_OVERLOAD);
+ events.ScheduleEvent(EVENT_OVERLOAD, 2000);
+ break;
+ default:
+ break;
+ }
+ }
- OverloadTimer = 2000;
- } else OverloadTimer -= diff;
+ DoMeleeAttackIfReady();
}
- DoMeleeAttackIfReady();
- }
- };
+ private:
+ uint32 _intervalHealthAmount;
+ bool _enraged;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_vexallusAI>(creature);
+ };
};
-class npc_pure_energy : public CreatureScript
+enum NpcPureEnergy
{
-public:
- npc_pure_energy() : CreatureScript("npc_pure_energy") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_pure_energyAI(creature);
- };
-
- struct npc_pure_energyAI : public ScriptedAI
- {
- npc_pure_energyAI(Creature* creature) : ScriptedAI(creature)
- {
- me->SetDisplayId(me->GetCreatureTemplate()->Modelid2);
- }
+ SPELL_ENERGY_BOLT = 46156,
+ SPELL_ENERGY_FEEDBACK = 44335,
+ SPELL_PURE_ENERGY_PASSIVE = 44326
+};
- void Reset() OVERRIDE { }
+class npc_pure_energy : public CreatureScript
+{
+ public:
+ npc_pure_energy() : CreatureScript("npc_pure_energy") { }
- void JustDied(Unit* slayer) OVERRIDE
+ struct npc_pure_energyAI : public ScriptedAI
{
- if (Unit* temp = me->GetOwner())
+ npc_pure_energyAI(Creature* creature) : ScriptedAI(creature)
{
- if (temp && temp->IsAlive())
- slayer->CastSpell(slayer, SPELL_ENERGY_FEEDBACK, true, 0, 0, temp->GetGUID());
+ me->SetDisplayId(me->GetCreatureTemplate()->Modelid2);
}
- }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void JustDied(Unit* killer) override
+ {
+ killer->CastSpell(killer, SPELL_ENERGY_FEEDBACK, true);
+ me->RemoveAurasDueToSpell(SPELL_PURE_ENERGY_PASSIVE);
+ }
+ };
- void AttackStart(Unit* /*who*/) OVERRIDE { }
- };
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_pure_energyAI(creature);
+ };
};
void AddSC_boss_vexallus()
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp
index 5183efea521..65b3553fd87 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -16,19 +15,10 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Instance_Magisters_Terrace
-SD%Complete: 60
-SDComment: Designed only for Selin Fireheart
-SDCategory: Magister's Terrace
-EndScriptData */
-
#include "ScriptMgr.h"
#include "InstanceScript.h"
#include "magisters_terrace.h"
-#define MAX_ENCOUNTER 4
-
/*
0 - Selin Fireheart
1 - Vexallus
@@ -36,281 +26,215 @@ EndScriptData */
3 - Kael'thas Sunstrider
*/
-enum Creatures
-{
- NPC_SELIN = 24723,
- NPC_DELRISSA = 24560,
- NPC_FELCRYSTALS = 24722
-};
-
-enum GameObjects
+DoorData const doorData[] =
{
- GO_VEXALLUS_DOOR = 187896,
- GO_SELIN_DOOR = 187979,
- GO_SELIN_ENCOUNTER_DOOR = 188065,
- GO_DELRISSA_DOOR = 187770,
- GO_KAEL_DOOR = 188064,
- GO_KAEL_STATUE_1 = 188165,
- GO_KAEL_STATUE_2 = 188166,
- GO_ESCAPE_ORB = 188173
+ { GO_SELIN_DOOR, DATA_SELIN, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
+ { GO_SELIN_ENCOUNTER_DOOR, DATA_SELIN, DOOR_TYPE_ROOM, BOUNDARY_NONE },
+ { GO_VEXALLUS_DOOR, DATA_VEXALLUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
+ { GO_DELRISSA_DOOR, DATA_DELRISSA, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
+ { GO_KAEL_DOOR, DATA_KAELTHAS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
+ { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
};
class instance_magisters_terrace : public InstanceMapScript
{
-public:
- instance_magisters_terrace() : InstanceMapScript("instance_magisters_terrace", 585) { }
-
- struct instance_magisters_terrace_InstanceMapScript : public InstanceScript
- {
- instance_magisters_terrace_InstanceMapScript(Map* map) : InstanceScript(map) { }
+ public:
+ instance_magisters_terrace() : InstanceMapScript("instance_magisters_terrace", 585) { }
- uint32 Encounter[MAX_ENCOUNTER];
- uint32 DelrissaDeathCount;
-
- std::vector<uint64> FelCrystals;
-
- uint64 SelinGUID;
- uint64 DelrissaGUID;
- uint64 VexallusDoorGUID;
- uint64 SelinDoorGUID;
- uint64 SelinEncounterDoorGUID;
- uint64 DelrissaDoorGUID;
- uint64 KaelDoorGUID;
- uint64 KaelStatue[2];
- uint64 EscapeOrbGUID;
- uint32 StatuesState;
- uint8 felCristalIndex;
-
- void Initialize() OVERRIDE
+ struct instance_magisters_terrace_InstanceMapScript : public InstanceScript
{
- memset(&Encounter, 0, sizeof(Encounter));
-
- FelCrystals.clear();
+ instance_magisters_terrace_InstanceMapScript(Map* map) : InstanceScript(map)
+ {
+ SetBossNumber(EncounterCount);
+ LoadDoorData(doorData);
- DelrissaDeathCount = 0;
+ DelrissaDeathCount = 0;
- SelinGUID = 0;
- DelrissaGUID = 0;
- VexallusDoorGUID = 0;
- SelinDoorGUID = 0;
- SelinEncounterDoorGUID = 0;
- DelrissaDoorGUID = 0;
- KaelDoorGUID = 0;
- KaelStatue[0] = 0;
- KaelStatue[1] = 0;
- EscapeOrbGUID = 0;
- StatuesState = 0;
- felCristalIndex = 0;
- }
+ SelinGUID = 0;
+ DelrissaGUID = 0;
+ EscapeOrbGUID = 0;
- bool IsEncounterInProgress() const OVERRIDE
- {
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- if (Encounter[i] == IN_PROGRESS)
- return true;
- return false;
- }
+ memset(KaelStatue, 0, 2 * sizeof(uint64));
+ }
- uint32 GetData(uint32 identifier) const
- {
- switch (identifier)
+ uint32 GetData(uint32 type) const override
{
- case DATA_SELIN_EVENT:
- return Encounter[0];
- case DATA_VEXALLUS_EVENT:
- return Encounter[1];
- case DATA_DELRISSA_EVENT:
- return Encounter[2];
- case DATA_KAELTHAS_EVENT:
- return Encounter[3];
- case DATA_DELRISSA_DEATH_COUNT:
- return DelrissaDeathCount;
- case DATA_FEL_CRYSTAL_SIZE:
- return FelCrystals.size();
+ switch (type)
+ {
+ case DATA_DELRISSA_DEATH_COUNT:
+ return DelrissaDeathCount;
+ default:
+ break;
+ }
+ return 0;
}
- return 0;
- }
- void SetData(uint32 identifier, uint32 data)
- {
- switch (identifier)
+ void SetData(uint32 type, uint32 data) override
{
- case DATA_SELIN_EVENT:
- if (data == DONE)
- {
- HandleGameObject(SelinEncounterDoorGUID, true);
- HandleGameObject(SelinDoorGUID, true);
- }
- else if (data == IN_PROGRESS)
- HandleGameObject(SelinEncounterDoorGUID, false);
- else if (data == NOT_STARTED)
- HandleGameObject(SelinEncounterDoorGUID, true);
-
- Encounter[0] = data;
- break;
- case DATA_VEXALLUS_EVENT:
- if (data == DONE)
- HandleGameObject(VexallusDoorGUID, true);
- Encounter[1] = data;
- break;
- case DATA_DELRISSA_EVENT:
- if (data == DONE)
- HandleGameObject(DelrissaDoorGUID, true);
- if (data == IN_PROGRESS)
- DelrissaDeathCount = 0;
- Encounter[2] = data;
- break;
- case DATA_KAELTHAS_EVENT:
- if (data == NOT_STARTED || data == DONE)
- HandleGameObject(KaelDoorGUID, true);
- else if (data == IN_PROGRESS)
- HandleGameObject(KaelDoorGUID, false);
- Encounter[3] = data;
- break;
- case DATA_DELRISSA_DEATH_COUNT:
- if (data == SPECIAL)
- ++DelrissaDeathCount;
- else
- DelrissaDeathCount = 0;
- break;
- case DATA_KAELTHAS_STATUES:
- HandleGameObject(KaelStatue[0], data);
- HandleGameObject(KaelStatue[1], data);
- StatuesState = data;
- break;
+ switch (type)
+ {
+ case DATA_DELRISSA_DEATH_COUNT:
+ if (data == SPECIAL)
+ ++DelrissaDeathCount;
+ else
+ DelrissaDeathCount = 0;
+ break;
+ case DATA_KAELTHAS_STATUES:
+ HandleGameObject(KaelStatue[0], data != 0);
+ HandleGameObject(KaelStatue[1], data != 0);
+ break;
+ default:
+ break;
+ }
}
- SaveToDB();
- }
-
- void OnCreatureCreate(Creature* creature) OVERRIDE
- {
- switch (creature->GetEntry())
+ void OnCreatureCreate(Creature* creature) override
{
- case NPC_SELIN:
- SelinGUID = creature->GetGUID();
- break;
- case NPC_DELRISSA:
- DelrissaGUID = creature->GetGUID();
- break;
- case NPC_FELCRYSTALS:
- FelCrystals.push_back(creature->GetGUID());
- break;
+ switch (creature->GetEntry())
+ {
+ case NPC_SELIN:
+ SelinGUID = creature->GetGUID();
+ break;
+ case NPC_DELRISSA:
+ DelrissaGUID = creature->GetGUID();
+ break;
+ default:
+ break;
+ }
}
- }
- void OnGameObjectCreate(GameObject* go) OVERRIDE
- {
- switch (go->GetEntry())
+ void OnGameObjectCreate(GameObject* go) override
{
- case GO_VEXALLUS_DOOR:
- VexallusDoorGUID = go->GetGUID();
- break;
- case GO_SELIN_DOOR:
- SelinDoorGUID = go->GetGUID();
- break;
- case GO_SELIN_ENCOUNTER_DOOR:
- SelinEncounterDoorGUID = go->GetGUID();
- break;
- case GO_DELRISSA_DOOR:
- DelrissaDoorGUID = go->GetGUID();
- break;
- case GO_KAEL_DOOR:
- KaelDoorGUID = go->GetGUID();
- break;
- case GO_KAEL_STATUE_1:
- KaelStatue[0] = go->GetGUID();
- break;
- case GO_KAEL_STATUE_2:
- KaelStatue[1] = go->GetGUID();
- break;
- case GO_ESCAPE_ORB:
- EscapeOrbGUID = go->GetGUID();
- break;
+ switch (go->GetEntry())
+ {
+ case GO_VEXALLUS_DOOR:
+ case GO_SELIN_DOOR:
+ case GO_SELIN_ENCOUNTER_DOOR:
+ case GO_DELRISSA_DOOR:
+ case GO_KAEL_DOOR:
+ AddDoor(go, true);
+ break;
+ case GO_KAEL_STATUE_1:
+ KaelStatue[0] = go->GetGUID();
+ break;
+ case GO_KAEL_STATUE_2:
+ KaelStatue[1] = go->GetGUID();
+ break;
+ case GO_ESCAPE_ORB:
+ EscapeOrbGUID = go->GetGUID();
+ break;
+ default:
+ break;
+ }
}
- }
-
- std::string GetSaveData() OVERRIDE
- {
- OUT_SAVE_INST_DATA;
-
- std::ostringstream saveStream;
- saveStream << Encounter[0] << ' ' << Encounter[1] << ' ' << Encounter[2] << ' ' << Encounter[3] << ' ' << StatuesState;
- OUT_SAVE_INST_DATA_COMPLETE;
- return saveStream.str();
- }
+ void OnGameObjectRemove(GameObject* go) override
+ {
+ switch (go->GetEntry())
+ {
+ case GO_VEXALLUS_DOOR:
+ case GO_SELIN_DOOR:
+ case GO_SELIN_ENCOUNTER_DOOR:
+ case GO_DELRISSA_DOOR:
+ case GO_KAEL_DOOR:
+ AddDoor(go, false);
+ break;
+ default:
+ break;
+ }
+ }
- void Load(const char* str) OVERRIDE
- {
- if (!str)
+ bool SetBossState(uint32 type, EncounterState state) override
{
- OUT_LOAD_INST_DATA_FAIL;
- return;
+ if (!InstanceScript::SetBossState(type, state))
+ return false;
+
+ switch (type)
+ {
+ case DATA_DELRISSA:
+ if (state == IN_PROGRESS)
+ DelrissaDeathCount = 0;
+ break;
+ default:
+ break;
+ }
+ return true;
}
- OUT_LOAD_INST_DATA(str);
+ std::string GetSaveData() override
+ {
+ OUT_SAVE_INST_DATA;
- std::istringstream loadStream(str);
+ std::ostringstream saveStream;
+ saveStream << "M T " << GetBossSaveData();
- for (uint32 i = 0; i < MAX_ENCOUNTER; ++i)
- {
- uint32 tmpState;
- loadStream >> tmpState;
- if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
- tmpState = NOT_STARTED;
- SetData(i, tmpState);
+ OUT_SAVE_INST_DATA_COMPLETE;
+ return saveStream.str();
}
- loadStream >> StatuesState;
- SetData(DATA_KAELTHAS_STATUES, StatuesState);
+ void Load(const char* str) override
+ {
+ if (!str)
+ {
+ OUT_LOAD_INST_DATA_FAIL;
+ return;
+ }
- OUT_LOAD_INST_DATA_COMPLETE;
- }
+ OUT_LOAD_INST_DATA(str);
- uint64 GetData64(uint32 identifier) const
- {
- switch (identifier)
- {
- case DATA_SELIN:
- return SelinGUID;
- case DATA_DELRISSA:
- return DelrissaGUID;
- case DATA_VEXALLUS_DOOR:
- return VexallusDoorGUID;
- case DATA_DELRISSA_DOOR:
- return DelrissaDoorGUID;
- case DATA_KAEL_DOOR:
- return KaelDoorGUID;
- case DATA_KAEL_STATUE_LEFT:
- return KaelStatue[0];
- case DATA_KAEL_STATUE_RIGHT:
- return KaelStatue[1];
- case DATA_ESCAPE_ORB:
- return EscapeOrbGUID;
- case DATA_FEL_CRYSTAL:
- if (FelCrystals.size() < felCristalIndex)
+ char dataHead1, dataHead2;
+
+ std::istringstream loadStream(str);
+ loadStream >> dataHead1 >> dataHead2;
+ if (dataHead1 == 'M' && dataHead2 == 'T')
+ {
+ for (uint32 i = 0; i < EncounterCount; ++i)
{
- TC_LOG_ERROR("scripts", "Magisters Terrace: No Fel Crystals loaded in Inst Data");
- return 0;
+ uint32 tmpState;
+ loadStream >> tmpState;
+ if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
+ tmpState = NOT_STARTED;
+ SetBossState(i, EncounterState(tmpState));
}
+ }
+ else
+ OUT_LOAD_INST_DATA_FAIL;
- return FelCrystals.at(felCristalIndex);
+ OUT_LOAD_INST_DATA_COMPLETE;
}
- return 0;
- }
- void SetData64(uint32 identifier, uint64 value)
+ uint64 GetData64(uint32 type) const override
+ {
+ switch (type)
+ {
+ case DATA_SELIN:
+ return SelinGUID;
+ case DATA_DELRISSA:
+ return DelrissaGUID;
+ case DATA_KAEL_STATUE_LEFT:
+ return KaelStatue[0];
+ case DATA_KAEL_STATUE_RIGHT:
+ return KaelStatue[1];
+ case DATA_ESCAPE_ORB:
+ return EscapeOrbGUID;
+ default:
+ break;
+ }
+ return 0;
+ }
+
+ protected:
+ uint64 SelinGUID;
+ uint64 DelrissaGUID;
+ uint64 KaelStatue[2];
+ uint64 EscapeOrbGUID;
+ uint32 DelrissaDeathCount;
+ };
+
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
- if (identifier == DATA_FEL_CRYSTAL)
- felCristalIndex = value;
+ return new instance_magisters_terrace_InstanceMapScript(map);
}
- };
-
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
- {
- return new instance_magisters_terrace_InstanceMapScript(map);
- }
};
void AddSC_instance_magisters_terrace()
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp
index ed5d9d4ec6f..28f4800b6cf 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp
@@ -68,7 +68,7 @@ class npc_kalecgos : public CreatureScript
public:
npc_kalecgos() : CreatureScript("npc_kalecgos") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -97,7 +97,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -108,7 +108,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_kalecgosAI(creature);
}
@@ -119,7 +119,7 @@ public:
uint32 m_uiTransformTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
m_uiTransformTimer = 0;
@@ -128,7 +128,7 @@ public:
me->GetMotionMaster()->MovePoint(POINT_ID_LAND, afKaelLandPoint[0], afKaelLandPoint[1], afKaelLandPoint[2]);
}
- void MovementInform(uint32 uiType, uint32 uiPointId) OVERRIDE
+ void MovementInform(uint32 uiType, uint32 uiPointId) override
{
if (uiType != POINT_MOTION_TYPE)
return;
@@ -162,7 +162,7 @@ public:
}
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (m_uiTransformTimer)
{
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h
index ddfaa91bc98..8b8d7d5b875 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h
@@ -19,24 +19,15 @@
#ifndef DEF_MAGISTERS_TERRACE_H
#define DEF_MAGISTERS_TERRACE_H
-#define ERROR_INST_DATA "TSCR Error: Instance Data not set properly for Magister's Terrace instance (map 585). Encounters will be buggy."
+uint32 const EncounterCount = 4;
-enum Data
+enum DataTypes
{
- DATA_SELIN_EVENT,
- DATA_VEXALLUS_EVENT,
- DATA_DELRISSA_EVENT,
- DATA_KAELTHAS_EVENT,
-
DATA_SELIN,
- DATA_FEL_CRYSTAL,
- DATA_FEL_CRYSTAL_SIZE,
-
- DATA_VEXALLUS_DOOR,
+ DATA_VEXALLUS,
DATA_DELRISSA,
- DATA_DELRISSA_DOOR,
+ DATA_KAELTHAS,
- DATA_KAEL_DOOR,
DATA_KAEL_STATUE_LEFT,
DATA_KAEL_STATUE_RIGHT,
@@ -45,4 +36,23 @@ enum Data
DATA_ESCAPE_ORB
};
+enum CreatureIds
+{
+ NPC_SELIN = 24723,
+ NPC_DELRISSA = 24560,
+ NPC_FEL_CRYSTAL = 24722
+};
+
+enum GameObjectIds
+{
+ GO_VEXALLUS_DOOR = 187896,
+ GO_SELIN_DOOR = 187979,
+ GO_SELIN_ENCOUNTER_DOOR = 188065,
+ GO_DELRISSA_DOOR = 187770,
+ GO_KAEL_DOOR = 188064,
+ GO_KAEL_STATUE_1 = 188165,
+ GO_KAEL_STATUE_2 = 188166,
+ GO_ESCAPE_ORB = 188173
+};
+
#endif
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
index a3d4d6669a3..ae6aaef9999 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
@@ -92,7 +92,7 @@ class npc_unworthy_initiate : public CreatureScript
public:
npc_unworthy_initiate() : CreatureScript("npc_unworthy_initiate") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_unworthy_initiateAI(creature);
}
@@ -114,7 +114,7 @@ public:
EventMap events;
- void Reset() OVERRIDE
+ void Reset() override
{
anchorGUID = 0;
phase = PHASE_CHAINED;
@@ -125,7 +125,7 @@ public:
me->LoadEquipment(0, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_ICY_TOUCH, 1000, GCD_CAST);
events.ScheduleEvent(EVENT_PLAGUE_STRIKE, 3000, GCD_CAST);
@@ -133,7 +133,7 @@ public:
events.ScheduleEvent(EVENT_DEATH_COIL, 5000, GCD_CAST);
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -166,7 +166,7 @@ public:
Talk(SAY_EVENT_START);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
switch (phase)
{
@@ -281,7 +281,7 @@ class npc_unworthy_initiate_anchor : public CreatureScript
public:
npc_unworthy_initiate_anchor() : CreatureScript("npc_unworthy_initiate_anchor") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_unworthy_initiate_anchorAI(creature);
}
@@ -292,13 +292,13 @@ public:
uint64 prisonerGUID;
- void SetGUID(uint64 guid, int32 /*id*/) OVERRIDE
+ void SetGUID(uint64 guid, int32 /*id*/) override
{
if (!prisonerGUID)
prisonerGUID = guid;
}
- uint64 GetGUID(int32 /*id*/) const OVERRIDE
+ uint64 GetGUID(int32 /*id*/) const override
{
return prisonerGUID;
}
@@ -310,12 +310,12 @@ class go_acherus_soul_prison : public GameObjectScript
public:
go_acherus_soul_prison() : GameObjectScript("go_acherus_soul_prison") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (Creature* anchor = go->FindNearestCreature(29521, 15))
if (uint64 prisonerGUID = anchor->AI()->GetGUID())
- if (Creature* prisoner = Creature::GetCreature(*player, prisonerGUID))
- CAST_AI(npc_unworthy_initiate::npc_unworthy_initiateAI, prisoner->AI())->EventStart(anchor, player);
+ if (Creature* prisoner = ObjectAccessor::GetCreature(*player, prisonerGUID))
+ ENSURE_AI(npc_unworthy_initiate::npc_unworthy_initiateAI, prisoner->AI())->EventStart(anchor, player);
return false;
}
@@ -352,7 +352,7 @@ class npc_death_knight_initiate : public CreatureScript
public:
npc_death_knight_initiate() : CreatureScript("npc_death_knight_initiate") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF)
@@ -379,7 +379,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(QUEST_DEATH_CHALLENGE) == QUEST_STATUS_INCOMPLETE && creature->IsFullHealth())
{
@@ -395,7 +395,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_death_knight_initiateAI(creature);
}
@@ -412,7 +412,7 @@ public:
uint32 m_uiDuelTimer;
bool m_bIsDuelInProgress;
- void Reset() OVERRIDE
+ void Reset() override
{
lose = false;
me->RestoreFaction();
@@ -425,7 +425,7 @@ public:
m_bIsDuelInProgress = false;
}
- void SpellHit(Unit* pCaster, const SpellInfo* pSpell) OVERRIDE
+ void SpellHit(Unit* pCaster, const SpellInfo* pSpell) override
{
if (!m_bIsDuelInProgress && pSpell->Id == SPELL_DUEL)
{
@@ -434,7 +434,7 @@ public:
}
}
- void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) OVERRIDE
+ void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) override
{
if (m_bIsDuelInProgress && pDoneBy->IsControlledByPlayer())
{
@@ -457,7 +457,7 @@ public:
}
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!UpdateVictim())
{
@@ -467,7 +467,7 @@ public:
{
me->setFaction(FACTION_HOSTILE);
- if (Unit* unit = Unit::GetUnit(*me, m_uiDuelerGUID))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, m_uiDuelerGUID))
AttackStart(unit);
}
else
@@ -484,10 +484,10 @@ public:
EnterEvadeMode();
return;
}
- else if (me->GetVictim()->GetTypeId() == TYPEID_PLAYER && me->GetVictim()->HealthBelowPct(10))
+ else if (me->GetVictim() && me->EnsureVictim()->GetTypeId() == TYPEID_PLAYER && me->EnsureVictim()->HealthBelowPct(10))
{
- me->GetVictim()->CastSpell(me->GetVictim(), 7267, true); // beg
- me->GetVictim()->RemoveGameObject(SPELL_DUEL_FLAG, true);
+ me->EnsureVictim()->CastSpell(me->GetVictim(), 7267, true); // beg
+ me->EnsureVictim()->RemoveGameObject(SPELL_DUEL_FLAG, true);
EnterEvadeMode();
return;
}
@@ -520,7 +520,7 @@ class npc_dark_rider_of_acherus : public CreatureScript
{
npc_dark_rider_of_acherusAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
PhaseTimer = 4000;
Phase = 0;
@@ -528,7 +528,7 @@ class npc_dark_rider_of_acherus : public CreatureScript
TargetGUID = 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!Intro || !TargetGUID)
return;
@@ -584,7 +584,7 @@ class npc_dark_rider_of_acherus : public CreatureScript
uint64 TargetGUID;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_dark_rider_of_acherusAI(creature);
}
@@ -608,7 +608,7 @@ class npc_salanar_the_horseman : public CreatureScript
public:
npc_salanar_the_horseman() : CreatureScript("npc_salanar_the_horseman") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_salanar_the_horsemanAI(creature);
}
@@ -617,7 +617,7 @@ public:
{
npc_salanar_the_horsemanAI(Creature* creature) : ScriptedAI(creature) { }
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (spell->Id == SPELL_DELIVER_STOLEN_HORSE)
{
@@ -632,14 +632,14 @@ public:
caster->setFaction(35);
DoCast(caster, SPELL_CALL_DARK_RIDER, true);
if (Creature* Dark_Rider = me->FindNearestCreature(28654, 15))
- CAST_AI(npc_dark_rider_of_acherus::npc_dark_rider_of_acherusAI, Dark_Rider->AI())->InitDespawnHorse(caster);
+ ENSURE_AI(npc_dark_rider_of_acherus::npc_dark_rider_of_acherusAI, Dark_Rider->AI())->InitDespawnHorse(caster);
}
}
}
}
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
ScriptedAI::MoveInLineOfSight(who);
@@ -680,7 +680,7 @@ class npc_ros_dark_rider : public CreatureScript
public:
npc_ros_dark_rider() : CreatureScript("npc_ros_dark_rider") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ros_dark_riderAI(creature);
}
@@ -689,12 +689,12 @@ public:
{
npc_ros_dark_riderAI(Creature* creature) : ScriptedAI(creature) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
me->ExitVehicle();
}
- void Reset() OVERRIDE
+ void Reset() override
{
Creature* deathcharger = me->FindNearestCreature(28782, 30);
if (!deathcharger)
@@ -707,7 +707,7 @@ public:
me->EnterVehicle(deathcharger);
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
Creature* deathcharger = me->FindNearestCreature(28782, 30);
if (!deathcharger)
@@ -735,7 +735,7 @@ class npc_dkc1_gothik : public CreatureScript
public:
npc_dkc1_gothik() : CreatureScript("npc_dkc1_gothik") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_dkc1_gothikAI(creature);
}
@@ -744,7 +744,7 @@ public:
{
npc_dkc1_gothikAI(Creature* creature) : ScriptedAI(creature) { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
ScriptedAI::MoveInLineOfSight(who);
@@ -779,7 +779,7 @@ class npc_scarlet_ghoul : public CreatureScript
public:
npc_scarlet_ghoul() : CreatureScript("npc_scarlet_ghoul") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_scarlet_ghoulAI(creature);
}
@@ -815,7 +815,7 @@ public:
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!me->IsInCombat())
{
@@ -832,12 +832,12 @@ public:
}
}
- if (!UpdateVictim())
+ if (!UpdateVictim() || !me->GetVictim())
return;
//ScriptedAI::UpdateAI(diff);
//Check if we have a current target
- if (me->GetVictim()->GetEntry() == NPC_GHOSTS)
+ if (me->EnsureVictim()->GetEntry() == NPC_GHOSTS)
{
if (me->isAttackReady())
{
@@ -881,7 +881,7 @@ class npc_scarlet_miner_cart : public CreatureScript
me->SetDisplayId(me->GetCreatureTemplate()->Modelid1); // Modelid2 is a horse.
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() == NPC_MINER)
{
@@ -890,13 +890,13 @@ class npc_scarlet_miner_cart : public CreatureScript
}
}
- void SummonedCreatureDespawn(Creature* summon) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summon) override
{
if (summon->GetEntry() == NPC_MINER)
_minerGUID = 0;
}
- void DoAction(int32 /*param*/) OVERRIDE
+ void DoAction(int32 /*param*/) override
{
if (Creature* miner = ObjectAccessor::GetCreature(*me, _minerGUID))
{
@@ -910,7 +910,7 @@ class npc_scarlet_miner_cart : public CreatureScript
}
}
- void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) OVERRIDE
+ void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override
{
if (apply)
{
@@ -930,7 +930,7 @@ class npc_scarlet_miner_cart : public CreatureScript
uint64 _playerGUID;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_scarlet_miner_cartAI(creature);
}
@@ -962,14 +962,14 @@ class npc_scarlet_miner : public CreatureScript
uint32 IntroPhase;
uint64 carGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
carGUID = 0;
IntroTimer = 0;
IntroPhase = 0;
}
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
carGUID = summoner->GetGUID();
}
@@ -1007,14 +1007,14 @@ class npc_scarlet_miner : public CreatureScript
}
}
- void SetGUID(uint64 guid, int32 /*id = 0*/) OVERRIDE
+ void SetGUID(uint64 guid, int32 /*id = 0*/) override
{
InitWaypoint();
Start(false, false, guid);
SetDespawnAtFar(false);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -1039,7 +1039,7 @@ class npc_scarlet_miner : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (IntroPhase)
{
@@ -1047,14 +1047,14 @@ class npc_scarlet_miner : public CreatureScript
{
if (IntroPhase == 1)
{
- if (Creature* car = Unit::GetCreature(*me, carGUID))
+ if (Creature* car = ObjectAccessor::GetCreature(*me, carGUID))
DoCast(car, SPELL_CART_DRAG);
IntroTimer = 800;
IntroPhase = 2;
}
else
{
- if (Creature* car = Unit::GetCreature(*me, carGUID))
+ if (Creature* car = ObjectAccessor::GetCreature(*me, carGUID))
car->AI()->DoAction(0);
IntroPhase = 0;
}
@@ -1066,7 +1066,7 @@ class npc_scarlet_miner : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_scarlet_minerAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
index 153e995e590..8e3743ad5e2 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
@@ -44,7 +44,7 @@ class npc_crusade_persuaded : public CreatureScript
public:
npc_crusade_persuaded() : CreatureScript("npc_crusade_persuaded") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_crusade_persuadedAI(creature);
}
@@ -57,7 +57,7 @@ public:
uint32 speechCounter;
uint64 playerGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
speechTimer = 0;
speechCounter = 0;
@@ -66,7 +66,7 @@ public:
me->RestoreFaction();
}
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (spell->Id == SPELL_PERSUASIVE_STRIKE && caster->GetTypeId() == TYPEID_PLAYER && me->IsAlive() && !speechCounter)
{
@@ -90,7 +90,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (speechCounter)
{
@@ -191,7 +191,7 @@ class npc_koltira_deathweaver : public CreatureScript
public:
npc_koltira_deathweaver() : CreatureScript("npc_koltira_deathweaver") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
{
if (quest->GetQuestId() == QUEST_BREAKOUT)
{
@@ -210,7 +210,7 @@ public:
me->SetReactState(REACT_DEFENSIVE);
}
- void Reset() OVERRIDE
+ void Reset() override
{
if (!HasEscortState(STATE_ESCORT_ESCORTING))
{
@@ -224,7 +224,7 @@ public:
}
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -258,7 +258,7 @@ public:
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (Player* player = GetPlayerForEscort())
summoned->AI()->AttackStart(player);
@@ -275,7 +275,7 @@ public:
me->SummonCreature(NPC_CRIMSON_ACOLYTE, 1642.329f, -6045.818f, 127.583f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
npc_escortAI::UpdateAI(uiDiff);
@@ -307,7 +307,7 @@ public:
break;
case 4:
{
- Creature* temp = Unit::GetCreature(*me, valrothGUID);
+ Creature* temp = ObjectAccessor::GetCreature(*me, valrothGUID);
if (!temp || !temp->IsAlive())
{
@@ -347,7 +347,7 @@ public:
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_koltira_deathweaverAI(creature);
}
@@ -368,7 +368,7 @@ class npc_scarlet_courier : public CreatureScript
public:
npc_scarlet_courier() : CreatureScript("npc_scarlet_courier") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_scarlet_courierAI(creature);
}
@@ -380,21 +380,21 @@ public:
uint32 uiStage;
uint32 uiStage_timer;
- void Reset() OVERRIDE
+ void Reset() override
{
me->Mount(14338); // not sure about this id
uiStage = 1;
uiStage_timer = 3000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_TREE2);
me->Dismount();
uiStage = 0;
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -403,7 +403,7 @@ public:
uiStage = 2;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (uiStage && !me->IsInCombat())
{
@@ -460,7 +460,7 @@ class npc_high_inquisitor_valroth : public CreatureScript
public:
npc_high_inquisitor_valroth() : CreatureScript("npc_high_inquisitor_valroth") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_high_inquisitor_valrothAI(creature);
}
@@ -473,20 +473,20 @@ public:
uint32 uiInquisitor_Penance_timer;
uint32 uiValroth_Smite_timer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiRenew_timer = 1000;
uiInquisitor_Penance_timer = 2000;
uiValroth_Smite_timer = 1000;
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
Talk(SAY_VALROTH_AGGRO);
DoCast(who, SPELL_VALROTH_SMITE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (uiRenew_timer <= diff)
{
@@ -514,11 +514,11 @@ public:
void Shout()
{
- if (rand()%100 < 15)
+ if (rand32() % 100 < 15)
Talk(SAY_VALROTH_RAND);
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
Talk(SAY_VALROTH_DEATH);
killer->CastSpell(me, SPELL_SUMMON_VALROTH_REMAINS, true);
@@ -596,7 +596,7 @@ class npc_a_special_surprise : public CreatureScript
public:
npc_a_special_surprise() : CreatureScript("npc_a_special_surprise") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_a_special_surpriseAI(creature);
}
@@ -609,7 +609,7 @@ public:
uint32 ExecuteSpeech_Counter;
uint64 PlayerGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
ExecuteSpeech_Timer = 0;
ExecuteSpeech_Counter = 0;
@@ -667,7 +667,7 @@ public:
return false;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (PlayerGUID || who->GetTypeId() != TYPEID_PLAYER || !who->IsWithinDist(me, INTERACTION_DISTANCE))
@@ -677,7 +677,7 @@ public:
PlayerGUID = who->GetGUID();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (PlayerGUID && !me->GetVictim() && me->IsAlive())
{
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
index 75ed7b82406..72757387b1c 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
@@ -275,21 +275,21 @@ class npc_highlord_darion_mograine : public CreatureScript
public:
npc_highlord_darion_mograine() : CreatureScript("npc_highlord_darion_mograine") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
{
case GOSSIP_ACTION_INFO_DEF+1:
player->CLOSE_GOSSIP_MENU();
- CAST_AI(npc_highlord_darion_mograine::npc_highlord_darion_mograineAI, creature->AI())->uiStep = 1;
- CAST_AI(npc_highlord_darion_mograine::npc_highlord_darion_mograineAI, creature->AI())->Start(true, false, player->GetGUID());
+ ENSURE_AI(npc_highlord_darion_mograine::npc_highlord_darion_mograineAI, creature->AI())->uiStep = 1;
+ ENSURE_AI(npc_highlord_darion_mograine::npc_highlord_darion_mograineAI, creature->AI())->Start(true, false, player->GetGUID());
break;
}
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -302,7 +302,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_highlord_darion_mograineAI(creature);
}
@@ -370,7 +370,7 @@ public:
uint64 uiGhoulGUID[ENCOUNTER_GHOUL_NUMBER];
uint64 uiWarriorGUID[ENCOUNTER_WARRIOR_NUMBER];
- void Reset() OVERRIDE
+ void Reset() override
{
if (!HasEscortState(STATE_ESCORT_ESCORTING))
{
@@ -400,15 +400,15 @@ public:
//UpdateWorldState(me->GetMap(), WORLD_STATE_COUNTDOWN, 0);
UpdateWorldState(me->GetMap(), WORLD_STATE_EVENT_BEGIN, 0);
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->setDeathState(JUST_DIED);
- if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID))
temp->setDeathState(JUST_DIED);
- if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID))
temp->setDeathState(JUST_DIED);
- if (Creature* temp = Unit::GetCreature(*me, uiEligorGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID))
temp->setDeathState(JUST_DIED);
- if (Creature* temp = Unit::GetCreature(*me, uiRayneGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiRayneGUID))
temp->setDeathState(JUST_DIED);
uiTirionGUID = 0;
@@ -419,24 +419,24 @@ public:
for (uint8 i = 0; i < ENCOUNTER_DEFENDER_NUMBER; ++i)
{
- if (Creature* temp = Unit::GetCreature(*me, uiDefenderGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDefenderGUID[i]))
temp->setDeathState(JUST_DIED);
uiDefenderGUID[i] = 0;
}
for (uint8 i = 0; i < ENCOUNTER_EARTHSHATTER_NUMBER; ++i)
{
- if (Creature* temp = Unit::GetCreature(*me, uiEarthshatterGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEarthshatterGUID[i]))
temp->setDeathState(JUST_DIED);
uiEarthshatterGUID[i] = 0;
}
- if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID))
temp->Respawn();
- if (Creature* temp = Unit::GetCreature(*me, uiOrbazGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiOrbazGUID))
temp->Respawn();
- if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID))
temp->Respawn();
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->Respawn();
uiKoltiraGUID = 0;
@@ -445,32 +445,32 @@ public:
uiLichKingGUID = 0;
for (uint8 i = 0; i < ENCOUNTER_ABOMINATION_NUMBER; ++i)
{
- if (Creature* temp = Unit::GetCreature(*me, uiAbominationGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAbominationGUID[i]))
temp->setDeathState(JUST_DIED);
uiAbominationGUID[i] = 0;
}
for (uint8 i = 0; i < ENCOUNTER_BEHEMOTH_NUMBER; ++i)
{
- if (Creature* temp = Unit::GetCreature(*me, uiBehemothGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiBehemothGUID[i]))
temp->setDeathState(JUST_DIED);
uiBehemothGUID[i] = 0;
}
for (uint8 i = 0; i < ENCOUNTER_GHOUL_NUMBER; ++i)
{
- if (Creature* temp = Unit::GetCreature(*me, uiGhoulGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiGhoulGUID[i]))
temp->setDeathState(JUST_DIED);
uiGhoulGUID[i] = 0;
}
for (uint8 i = 0; i < ENCOUNTER_WARRIOR_NUMBER; ++i)
{
- if (Creature* temp = Unit::GetCreature(*me, uiWarriorGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiWarriorGUID[i]))
temp->setDeathState(JUST_DIED);
uiWarriorGUID[i] = 0;
}
}
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who)
return;
@@ -487,7 +487,7 @@ public:
}
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!who)
@@ -503,7 +503,7 @@ public:
SetEscortPaused(bOnHold);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -514,9 +514,9 @@ public:
case 1:
SetHoldState(true);
SpawnNPC();
- if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN07);
- if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN08);
for (uint8 i = 0; i < ENCOUNTER_GHOUL_NUMBER; ++i)
@@ -534,9 +534,9 @@ public:
me->Dismount();
me->CastSpell(me, SPELL_THE_MIGHT_OF_MOGRAINE, true); // need to fix, on player only
- if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID))
temp->Dismount();
- if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID))
temp->Dismount();
bIsBattle = true;
@@ -547,37 +547,37 @@ public:
break;
case 3:
{
- //Unit* pTirion = Unit::GetCreature(*me, uiTirionGUID);
+ //Unit* pTirion = ObjectAccessor::GetCreature(*me, uiTirionGUID);
Talk(EMOTE_LIGHT_OF_DAWN05);
if (me->HasAura(SPELL_THE_LIGHT_OF_DAWN, 0))
me->RemoveAurasDueToSpell(SPELL_THE_LIGHT_OF_DAWN);
- if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID))
{
if (temp->HasAura(SPELL_THE_LIGHT_OF_DAWN, 0))
temp->RemoveAurasDueToSpell(SPELL_THE_LIGHT_OF_DAWN);
temp->SetWalk(true);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[19].x, LightofDawnLoc[19].y, LightofDawnLoc[19].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID))
{
if (temp->HasAura(SPELL_THE_LIGHT_OF_DAWN, 0))
temp->RemoveAurasDueToSpell(SPELL_THE_LIGHT_OF_DAWN);
temp->SetWalk(true);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[21].x, LightofDawnLoc[21].y, LightofDawnLoc[21].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID))
{
temp->SetWalk(true);
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[10].x, LightofDawnLoc[10].y, LightofDawnLoc[10].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID))
{
temp->SetWalk(true);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[13].x, LightofDawnLoc[13].y, LightofDawnLoc[13].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiEligorGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID))
{
temp->SetWalk(true);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[16].x, LightofDawnLoc[16].y, LightofDawnLoc[16].z);
@@ -589,9 +589,9 @@ public:
Talk(SAY_LIGHT_OF_DAWN27);
me->SetStandState(UNIT_STAND_STATE_KNEEL);
- if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID))
temp->SetStandState(UNIT_STAND_STATE_KNEEL);
- if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID))
temp->SetStandState(UNIT_STAND_STATE_KNEEL);
SetHoldState(true);
break;
@@ -610,7 +610,7 @@ public:
break;
case 8:
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(EQUIP_UNEQUIP));
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
me->CastSpell(temp, SPELL_ASHBRINGER, true);
Talk(EMOTE_LIGHT_OF_DAWN14);
SetHoldState(true);
@@ -618,13 +618,13 @@ public:
}
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
if (!bIsBattle)//do not reset self if we are in battle
npc_escortAI::EnterEvadeMode();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
@@ -669,7 +669,7 @@ public:
uiPhase_timer = 500;
if (uiSummon_counter < ENCOUNTER_GHOUL_NUMBER)
{
- Unit* temp = me->SummonCreature(NPC_ACHERUS_GHOUL, (me->GetPositionX()-20)+rand()%40, (me->GetPositionY()-20)+rand()%40, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
+ Unit* temp = me->SummonCreature(NPC_ACHERUS_GHOUL, (me->GetPositionX() - 20) + rand32() % 40, (me->GetPositionY() - 20) + rand32() % 40, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
temp->SetWalk(false);
temp->setFaction(2084);
uiGhoulGUID[uiSummon_counter] = temp->GetGUID();
@@ -687,7 +687,7 @@ public:
uiPhase_timer = 500;
if (uiSummon_counter < ENCOUNTER_ABOMINATION_NUMBER)
{
- Unit* temp = me->SummonCreature(NPC_RAMPAGING_ABOMINATION, (me->GetPositionX()-20)+rand()%40, (me->GetPositionY()-20)+rand()%40, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
+ Unit* temp = me->SummonCreature(NPC_RAMPAGING_ABOMINATION, (me->GetPositionX() - 20) + rand32() % 40, (me->GetPositionY() - 20) + rand32() % 40, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
temp->SetWalk(false);
temp->setFaction(2084);
uiAbominationGUID[uiSummon_counter] = temp->GetGUID();
@@ -705,7 +705,7 @@ public:
uiPhase_timer = 500;
if (uiSummon_counter < ENCOUNTER_WARRIOR_NUMBER)
{
- Unit* temp = me->SummonCreature(NPC_WARRIOR_OF_THE_FROZEN_WASTES, (me->GetPositionX()-20)+rand()%40, (me->GetPositionY()-20)+rand()%40, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
+ Unit* temp = me->SummonCreature(NPC_WARRIOR_OF_THE_FROZEN_WASTES, (me->GetPositionX() - 20) + rand32() % 40, (me->GetPositionY() - 20) + rand32() % 40, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
temp->SetWalk(false);
temp->setFaction(2084);
uiWarriorGUID[uiSummon_counter] = temp->GetGUID();
@@ -723,7 +723,7 @@ public:
uiPhase_timer = 500;
if (uiSummon_counter < ENCOUNTER_BEHEMOTH_NUMBER)
{
- Unit* temp = me->SummonCreature(NPC_FLESH_BEHEMOTH, (me->GetPositionX()-20)+rand()%40, (me->GetPositionY()-20)+rand()%40, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
+ Unit* temp = me->SummonCreature(NPC_FLESH_BEHEMOTH, (me->GetPositionX() - 20) + rand32() % 40, (me->GetPositionY() - 20) + rand32() % 40, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
temp->SetWalk(false);
temp->setFaction(2084);
uiBehemothGUID[uiSummon_counter] = temp->GetGUID();
@@ -743,51 +743,51 @@ public:
case 9: // charge begins
SetHoldState(false);
- if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID))
{
temp->SetWalk(false);
- temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z);
+ temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x + rand32() % 30, LightofDawnLoc[0].y + rand32() % 30, LightofDawnLoc[0].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiOrbazGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiOrbazGUID))
{
temp->SetWalk(false);
- temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z);
+ temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x + rand32() % 30, LightofDawnLoc[0].y + rand32() % 30, LightofDawnLoc[0].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID))
{
temp->SetWalk(false);
- temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z);
+ temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x + rand32() % 30, LightofDawnLoc[0].y + rand32() % 30, LightofDawnLoc[0].z);
}
for (uint8 i = 0; i < ENCOUNTER_ABOMINATION_NUMBER; ++i)
- if (Creature* temp = Unit::GetCreature(*me, uiAbominationGUID[i]))
- temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z);
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAbominationGUID[i]))
+ temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x + rand32() % 30, LightofDawnLoc[0].y + rand32() % 30, LightofDawnLoc[0].z);
for (uint8 i = 0; i < ENCOUNTER_BEHEMOTH_NUMBER; ++i)
- if (Creature* temp = Unit::GetCreature(*me, uiBehemothGUID[i]))
- temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z);
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiBehemothGUID[i]))
+ temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x + rand32() % 30, LightofDawnLoc[0].y + rand32() % 30, LightofDawnLoc[0].z);
for (uint8 i = 0; i < ENCOUNTER_GHOUL_NUMBER; ++i)
- if (Creature* temp = Unit::GetCreature(*me, uiGhoulGUID[i]))
- temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z);
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiGhoulGUID[i]))
+ temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x + rand32() % 30, LightofDawnLoc[0].y + rand32() % 30, LightofDawnLoc[0].z);
for (uint8 i = 0; i < ENCOUNTER_WARRIOR_NUMBER; ++i)
- if (Creature* temp = Unit::GetCreature(*me, uiWarriorGUID[i]))
- temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z);
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiWarriorGUID[i]))
+ temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x + rand32() % 30, LightofDawnLoc[0].y + rand32() % 30, LightofDawnLoc[0].z);
JumpToNextStep(5000);
break;
// ******* After battle *****************************************************************
case 11: // Tirion starts to speak
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN28);
JumpToNextStep(21000);
break;
case 12:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN29);
JumpToNextStep(13000);
break;
case 13:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN30);
JumpToNextStep(13000);
break;
@@ -810,7 +810,7 @@ public:
break;
case 16: // Alexandros out
- if (Creature* temp = Unit::GetCreature(*me, uiAlexandrosGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID))
{
temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[23].x, LightofDawnLoc[23].y, LightofDawnLoc[23].z);
@@ -837,7 +837,7 @@ public:
break;
case 19: // runs to father
- if (Creature* temp = Unit::GetCreature(*me, uiDarionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDarionGUID))
{
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN07);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[25].x, LightofDawnLoc[25].y, LightofDawnLoc[25].z);
@@ -846,59 +846,59 @@ public:
break;
case 20:
- if (Creature* temp = Unit::GetCreature(*me, uiDarionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDarionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN36);
JumpToNextStep(4000);
break;
case 21:
- if (Creature* temp = Unit::GetCreature(*me, uiDarionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDarionGUID))
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN08);
JumpToNextStep(4000);
break;
case 22:
- if (Creature* temp = Unit::GetCreature(*me, uiAlexandrosGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN37);
JumpToNextStep(8000);
break;
case 23:
- if (Creature* temp = Unit::GetCreature(*me, uiDarionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDarionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN38);
JumpToNextStep(8000);
break;
case 24:
- if (Creature* temp = Unit::GetCreature(*me, uiAlexandrosGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN39);
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) // Tirion moves forward here
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) // Tirion moves forward here
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[1].x, LightofDawnLoc[1].y, LightofDawnLoc[1].z);
JumpToNextStep(15000);
break;
case 25:
- if (Creature* temp = Unit::GetCreature(*me, uiDarionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDarionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN40);
JumpToNextStep(11000);
break;
case 26:
- if (Creature* temp = Unit::GetCreature(*me, uiAlexandrosGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN41);
JumpToNextStep(5000);
break;
case 27:
- if (Creature* temp = Unit::GetCreature(*me, uiDarionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDarionGUID))
temp->setDeathState(JUST_DIED);
JumpToNextStep(24000);
break;
case 28:
- if (Creature* temp = Unit::GetCreature(*me, uiAlexandrosGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN42);
JumpToNextStep(6000);
break;
@@ -908,19 +908,19 @@ public:
{
temp->AI()->Talk(SAY_LIGHT_OF_DAWN43);
uiLichKingGUID = temp->GetGUID();
- if (Unit* pAlex = Unit::GetCreature(*me, uiAlexandrosGUID))
+ if (Unit* pAlex = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID))
temp->CastSpell(pAlex, SPELL_SOUL_FEAST_ALEX, false);
}
JumpToNextStep(2000);
break;
case 30:
- if (Creature* temp = Unit::GetCreature(*me, uiAlexandrosGUID)) // just hide him
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID)) // just hide him
{
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN09);
temp->SetVisible(false);
}
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
{
temp->InterruptNonMeleeSpells(false);
temp->AI()->Talk(SAY_LIGHT_OF_DAWN45);
@@ -936,13 +936,13 @@ public:
break;
case 32:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[27].x, LightofDawnLoc[27].y, LightofDawnLoc[27].z);
JumpToNextStep(6000);
break;
case 33: // Darion supports to jump to lich king here
- if (Unit::GetCreature(*me, uiLichKingGUID))
+ if (ObjectAccessor::GetCreature(*me, uiLichKingGUID))
DoCast(me, SPELL_MOGRAINE_CHARGE); // jumping charge
// doesn't make it looks well, so workarounds, Darion charges, looks better
me->SetSpeed(MOVE_RUN, 3.0f);
@@ -952,7 +952,7 @@ public:
break;
case 35: // Lich king counterattacks
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
{
temp->HandleEmoteCommand(EMOTE_ONESHOT_KICK);
temp->AI()->Talk(SAY_LIGHT_OF_DAWN46);
@@ -969,29 +969,29 @@ public:
break;
case 38:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN47);
JumpToNextStep(8000);
break;
case 39:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN48);
JumpToNextStep(15000);
break;
case 40:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN49);
JumpToNextStep(17000);
break;
case 41: // Lich king - Apocalypse
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
{
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN11);
temp->AI()->Talk(SAY_LIGHT_OF_DAWN51);
- if (Creature* pTirion = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* pTirion = ObjectAccessor::GetCreature(*me, uiTirionGUID))
{
pTirion->SetStandState(UNIT_STAND_STATE_KNEEL);
//temp->CastSpell(pTirion, SPELL_APOCALYPSE, false); // not working
@@ -1007,7 +1007,7 @@ public:
float fLichPositionX = 0,
fLichPositionY = 0,
fLichPositionZ = 0;
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
{
fLichPositionX = temp->GetPositionX();
fLichPositionY = temp->GetPositionY();
@@ -1016,7 +1016,7 @@ public:
if (fLichPositionX && fLichPositionY)
{
- Unit* temp = me->SummonCreature(NPC_DEFENDER_OF_THE_LIGHT, LightofDawnLoc[0].x+rand()%10, LightofDawnLoc[0].y+rand()%10, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
+ Unit* temp = me->SummonCreature(NPC_DEFENDER_OF_THE_LIGHT, LightofDawnLoc[0].x + rand32() % 10, LightofDawnLoc[0].y + rand32() % 10, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED);
temp->SetWalk(false);
temp->SetSpeed(MOVE_RUN, 2.0f);
@@ -1024,7 +1024,7 @@ public:
temp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ);
uiDefenderGUID[0] = temp->GetGUID();
- temp = me->SummonCreature(NPC_RIMBLAT_EARTHSHATTER, LightofDawnLoc[0].x+rand()%10, LightofDawnLoc[0].y+rand()%10, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
+ temp = me->SummonCreature(NPC_RIMBLAT_EARTHSHATTER, LightofDawnLoc[0].x + rand32() % 10, LightofDawnLoc[0].y + rand32() % 10, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED);
temp->SetWalk(false);
temp->SetSpeed(MOVE_RUN, 2.0f);
@@ -1032,7 +1032,7 @@ public:
temp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ);
uiEarthshatterGUID[0] = temp->GetGUID();
}
- if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID))
{
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED);
temp->SetWalk(false);
@@ -1040,7 +1040,7 @@ public:
temp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ);
temp->AI()->Talk(SAY_LIGHT_OF_DAWN50);
}
- if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID))
{
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED);
temp->SetWalk(false);
@@ -1048,7 +1048,7 @@ public:
temp->HandleEmoteCommand(EMOTE_STATE_ATTACK_UNARMED);
temp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ);
}
- if (Creature* temp = Unit::GetCreature(*me, uiEligorGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID))
{
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED);
temp->SetWalk(false);
@@ -1060,51 +1060,51 @@ public:
break;
case 43: // They all got kicked
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN13);
- if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID))
{
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
temp->SetSpeed(MOVE_RUN, 6.0f);
temp->SetStandState(UNIT_STAND_STATE_DEAD);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[14].x, LightofDawnLoc[14].y, LightofDawnLoc[14].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID))
{
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
temp->SetSpeed(MOVE_RUN, 6.0f);
temp->SetStandState(UNIT_STAND_STATE_DEAD);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[11].x, LightofDawnLoc[11].y, LightofDawnLoc[11].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiEligorGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID))
{
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
temp->SetSpeed(MOVE_RUN, 6.0f);
temp->SetStandState(UNIT_STAND_STATE_DEAD);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[17].x, LightofDawnLoc[17].y, LightofDawnLoc[17].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiDefenderGUID[0]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDefenderGUID[0]))
{
temp->SetSpeed(MOVE_RUN, 6.0f);
temp->SetStandState(UNIT_STAND_STATE_DEAD);
- temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%10, LightofDawnLoc[0].y+rand()%10, LightofDawnLoc[0].z);
+ temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x + rand32() % 10, LightofDawnLoc[0].y + rand32() % 10, LightofDawnLoc[0].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiEarthshatterGUID[0]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEarthshatterGUID[0]))
{
temp->SetSpeed(MOVE_RUN, 6.0f);
temp->SetStandState(UNIT_STAND_STATE_DEAD);
- temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%10, LightofDawnLoc[0].y+rand()%10, LightofDawnLoc[0].z);
+ temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x + rand32() % 10, LightofDawnLoc[0].y + rand32() % 10, LightofDawnLoc[0].z);
}
JumpToNextStep(3000);
break;
case 44: // make them stand up
- if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID))
temp->SetStandState(UNIT_STAND_STATE_STAND);
- if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID))
temp->SetStandState(UNIT_STAND_STATE_STAND);
- if (Creature* temp = Unit::GetCreature(*me, uiEligorGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID))
temp->SetStandState(UNIT_STAND_STATE_STAND);
JumpToNextStep(1000);
break;
@@ -1126,7 +1126,7 @@ public:
case 47: // Ashbringer rebirth
me->SetStandState(UNIT_STAND_STATE_KNEEL);
Talk(EMOTE_LIGHT_OF_DAWN15);
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
{
temp->SetStandState(UNIT_STAND_STATE_STAND);
temp->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(EQUIP_HIGHLORD_TIRION_FORDRING));
@@ -1139,38 +1139,38 @@ public:
//if (GameObject* go = me->GetMap()->GetGameObject(uiDawnofLightGUID))
// go->SetPhaseMask(128, true);
me->SummonGameObject(GO_LIGHT_OF_DAWN, 2283.896f, -5287.914f, 83.066f, 0, 0, 0, 0, 0, 30000);
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
{
if (temp->HasAura(SPELL_REBIRTH_OF_THE_ASHBRINGER, 0))
temp->RemoveAurasDueToSpell(SPELL_REBIRTH_OF_THE_ASHBRINGER);
temp->CastSpell(temp, 41542, false); // workarounds, light expoded, makes it cool
temp->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
}
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->InterruptNonMeleeSpells(false);
JumpToNextStep(2500);
break;
case 49:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN54);
JumpToNextStep(4000);
break;
case 50:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN55);
JumpToNextStep(5000);
break;
case 51:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN56);
JumpToNextStep(1000);
break;
case 52: // Tiron charges
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
{
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN16);
temp->CastSpell(temp, SPELL_TIRION_CHARGE, false); // jumping charge
@@ -1178,20 +1178,20 @@ public:
temp->SetSpeed(MOVE_RUN, 3.0f); // workarounds, make Tirion still running
temp->SetWalk(false);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[2].x, LightofDawnLoc[2].y, LightofDawnLoc[2].z);
- if (Creature* lktemp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* lktemp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
lktemp->Relocate(LightofDawnLoc[28].x, LightofDawnLoc[28].y, LightofDawnLoc[28].z); // workarounds, he should kick back by Tirion, but here we relocate him
}
JumpToNextStep(1500);
break;
case 53:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN57);
JumpToNextStep(1000);
break;
case 54:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
{
temp->SetSpeed(MOVE_RUN, 1.0f);
me->SetWalk(true);
@@ -1201,33 +1201,33 @@ public:
break;
case 55:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->SetStandState(UNIT_STAND_STATE_KNEEL);
JumpToNextStep(2000);
break;
case 56:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->SetStandState(UNIT_STAND_STATE_STAND);
JumpToNextStep(1500);
break;
case 57:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN58);
JumpToNextStep(10000);
break;
case 58:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN59);
JumpToNextStep(10000);
break;
case 59:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->CastSpell(temp, SPELL_TELEPORT_VISUAL, false);
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) // Tirion runs to Darion
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) // Tirion runs to Darion
{
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
temp->SetSpeed(MOVE_RUN, 1.0f);
@@ -1237,7 +1237,7 @@ public:
break;
case 60:
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) // Lich king disappears here
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) // Lich king disappears here
{
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN17);
temp->Kill(temp);
@@ -1246,13 +1246,13 @@ public:
break;
case 61:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN60);
JumpToNextStep(3000);
break;
case 62:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
{
temp->SetWalk(true);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[7].x, LightofDawnLoc[7].y, LightofDawnLoc[7].z);
@@ -1261,7 +1261,7 @@ public:
break;
case 63:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
{
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[8].x, LightofDawnLoc[8].y, LightofDawnLoc[8].z);
temp->AI()->Talk(SAY_LIGHT_OF_DAWN61);
@@ -1270,37 +1270,37 @@ public:
break;
case 64:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN62);
JumpToNextStep(7000);
break;
case 65:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN63);
JumpToNextStep(10000);
break;
case 66:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN64);
JumpToNextStep(11000);
break;
case 67:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN65);
JumpToNextStep(10000);
break;
case 68:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN66);
JumpToNextStep(8000);
break;
case 69:
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN67);
JumpToNextStep(10000);
break;
@@ -1335,13 +1335,13 @@ public:
break;
case 73:
- if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID))
temp->DespawnOrUnsummon();
- if (Creature* temp = Unit::GetCreature(*me, uiOrbazGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiOrbazGUID))
temp->DespawnOrUnsummon();
- if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID))
temp->DespawnOrUnsummon();
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID))
temp->DespawnOrUnsummon();
me->DespawnOrUnsummon();
break;
@@ -1452,7 +1452,7 @@ public:
for (uint8 i = 0; i < ENCOUNTER_WARRIOR_NUMBER; ++i)
DespawnNPC(uiWarriorGUID[i]);
- if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID))
{
temp->RemoveAllAuras();
temp->DeleteThreatList();
@@ -1463,7 +1463,7 @@ public:
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[9].x, LightofDawnLoc[9].y, LightofDawnLoc[9].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID))
{
temp->RemoveAllAuras();
temp->DeleteThreatList();
@@ -1474,7 +1474,7 @@ public:
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[12].x, LightofDawnLoc[12].y, LightofDawnLoc[12].z);
}
- if (Creature* temp = Unit::GetCreature(*me, uiEligorGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID))
{
temp->RemoveAllAuras();
temp->DeleteThreatList();
@@ -1486,7 +1486,7 @@ public:
}
DespawnNPC(uiRayneGUID);
- if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID))
{
temp->RemoveAllAuras();
temp->DeleteThreatList();
@@ -1498,10 +1498,10 @@ public:
temp->CastSpell(temp, SPELL_THE_LIGHT_OF_DAWN, false);
}
- if (Creature* temp = Unit::GetCreature(*me, uiOrbazGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiOrbazGUID))
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN04);
- if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID))
{
temp->RemoveAllAuras();
temp->DeleteThreatList();
@@ -1513,7 +1513,7 @@ public:
temp->CastSpell(temp, SPELL_THE_LIGHT_OF_DAWN, false);
}
- if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID))
temp->AI()->Talk(SAY_LIGHT_OF_DAWN26);
SetHoldState(false);
@@ -1532,7 +1532,7 @@ public:
void NPCChangeTarget(uint64 ui_GUID)
{
- if (Creature* temp = Unit::GetCreature(*me, ui_GUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, ui_GUID))
if (temp->IsAlive())
if (Unit* pTarger = SelectTarget(SELECT_TARGET_RANDOM, 0))
if (pTarger->IsAlive())
@@ -1553,40 +1553,40 @@ public:
// Death
for (uint8 i = 0; i < ENCOUNTER_GHOUL_NUMBER; ++i)
{
- temp = Unit::GetCreature(*me, uiGhoulGUID[i]);
+ temp = ObjectAccessor::GetCreature(*me, uiGhoulGUID[i]);
if (!temp)
{
- temp = me->SummonCreature(NPC_ACHERUS_GHOUL, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
+ temp = me->SummonCreature(NPC_ACHERUS_GHOUL, LightofDawnLoc[0].x + rand32() % 30, LightofDawnLoc[0].y + rand32() % 30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
temp->setFaction(2084);
uiGhoulGUID[i] = temp->GetGUID();
}
}
for (uint8 i = 0; i < ENCOUNTER_ABOMINATION_NUMBER; ++i)
{
- temp = Unit::GetCreature(*me, uiAbominationGUID[i]);
+ temp = ObjectAccessor::GetCreature(*me, uiAbominationGUID[i]);
if (!temp)
{
- temp = me->SummonCreature(NPC_WARRIOR_OF_THE_FROZEN_WASTES, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
+ temp = me->SummonCreature(NPC_WARRIOR_OF_THE_FROZEN_WASTES, LightofDawnLoc[0].x + rand32() % 30, LightofDawnLoc[0].y + rand32() % 30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
temp->setFaction(2084);
uiAbominationGUID[i] = temp->GetGUID();
}
}
for (uint8 i = 0; i < ENCOUNTER_WARRIOR_NUMBER; ++i)
{
- temp = Unit::GetCreature(*me, uiWarriorGUID[i]);
+ temp = ObjectAccessor::GetCreature(*me, uiWarriorGUID[i]);
if (!temp)
{
- temp = me->SummonCreature(NPC_RAMPAGING_ABOMINATION, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
+ temp = me->SummonCreature(NPC_RAMPAGING_ABOMINATION, LightofDawnLoc[0].x + rand32() % 30, LightofDawnLoc[0].y + rand32() % 30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
temp->setFaction(2084);
uiWarriorGUID[i] = temp->GetGUID();
}
}
for (uint8 i = 0; i < ENCOUNTER_BEHEMOTH_NUMBER; ++i)
{
- temp = Unit::GetCreature(*me, uiBehemothGUID[i]);
+ temp = ObjectAccessor::GetCreature(*me, uiBehemothGUID[i]);
if (!temp)
{
- temp = me->SummonCreature(NPC_FLESH_BEHEMOTH, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
+ temp = me->SummonCreature(NPC_FLESH_BEHEMOTH, LightofDawnLoc[0].x + rand32() % 30, LightofDawnLoc[0].y + rand32() % 30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
temp->setFaction(2084);
uiBehemothGUID[i] = temp->GetGUID();
}
@@ -1595,10 +1595,10 @@ public:
// Dawn
for (uint8 i = 0; i < ENCOUNTER_DEFENDER_NUMBER; ++i)
{
- temp = Unit::GetCreature(*me, uiDefenderGUID[i]);
+ temp = ObjectAccessor::GetCreature(*me, uiDefenderGUID[i]);
if (!temp)
{
- temp = me->SummonCreature(NPC_DEFENDER_OF_THE_LIGHT, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
+ temp = me->SummonCreature(NPC_DEFENDER_OF_THE_LIGHT, LightofDawnLoc[0].x + rand32() % 30, LightofDawnLoc[0].y + rand32() % 30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
temp->setFaction(2089);
me->AddThreat(temp, 0.0f);
uiDefenderGUID[i] = temp->GetGUID();
@@ -1606,43 +1606,43 @@ public:
}
for (uint8 i = 0; i < ENCOUNTER_EARTHSHATTER_NUMBER; ++i)
{
- temp = Unit::GetCreature(*me, uiEarthshatterGUID[i]);
+ temp = ObjectAccessor::GetCreature(*me, uiEarthshatterGUID[i]);
if (!temp)
{
- temp = me->SummonCreature(NPC_RIMBLAT_EARTHSHATTER, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
+ temp = me->SummonCreature(NPC_RIMBLAT_EARTHSHATTER, LightofDawnLoc[0].x + rand32() % 30, LightofDawnLoc[0].y + rand32() % 30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
temp->setFaction(2089);
me->AddThreat(temp, 0.0f);
uiEarthshatterGUID[i] = temp->GetGUID();
}
}
- temp = Unit::GetCreature(*me, uiKorfaxGUID);
+ temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID);
if (!temp)
{
- temp = me->SummonCreature(NPC_KORFAX_CHAMPION_OF_THE_LIGHT, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 600000);
+ temp = me->SummonCreature(NPC_KORFAX_CHAMPION_OF_THE_LIGHT, LightofDawnLoc[0].x + rand32() % 30, LightofDawnLoc[0].y + rand32() % 30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 600000);
temp->setFaction(2089);
me->AddThreat(temp, 0.0f);
uiKorfaxGUID = temp->GetGUID();
}
- temp = Unit::GetCreature(*me, uiMaxwellGUID);
+ temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID);
if (!temp)
{
- temp = me->SummonCreature(NPC_LORD_MAXWELL_TYROSUS, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 600000);
+ temp = me->SummonCreature(NPC_LORD_MAXWELL_TYROSUS, LightofDawnLoc[0].x + rand32() % 30, LightofDawnLoc[0].y + rand32() % 30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 600000);
temp->setFaction(2089);
me->AddThreat(temp, 0.0f);
uiMaxwellGUID = temp->GetGUID();
}
- temp = Unit::GetCreature(*me, uiEligorGUID);
+ temp = ObjectAccessor::GetCreature(*me, uiEligorGUID);
if (!temp)
{
- temp = me->SummonCreature(NPC_COMMANDER_ELIGOR_DAWNBRINGER, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 600000);
+ temp = me->SummonCreature(NPC_COMMANDER_ELIGOR_DAWNBRINGER, LightofDawnLoc[0].x + rand32() % 30, LightofDawnLoc[0].y + rand32() % 30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 600000);
temp->setFaction(2089);
me->AddThreat(temp, 0.0f);
uiEligorGUID = temp->GetGUID();
}
- temp = Unit::GetCreature(*me, uiRayneGUID);
+ temp = ObjectAccessor::GetCreature(*me, uiRayneGUID);
if (!temp)
{
- temp = me->SummonCreature(NPC_RAYNE, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
+ temp = me->SummonCreature(NPC_RAYNE, LightofDawnLoc[0].x + rand32() % 30, LightofDawnLoc[0].y + rand32() % 30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000);
temp->setFaction(2089);
me->AddThreat(temp, 0.0f);
uiRayneGUID = temp->GetGUID();
@@ -1651,7 +1651,7 @@ public:
void DespawnNPC(uint64 pGUID)
{
- if (Creature* temp = Unit::GetCreature(*me, pGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, pGUID))
if (temp->IsAlive())
{
temp->SetVisible(false);
@@ -1670,7 +1670,7 @@ class npc_the_lich_king_tirion_dawn : public CreatureScript
public:
npc_the_lich_king_tirion_dawn() : CreatureScript("npc_the_lich_king_tirion_dawn") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_the_lich_king_tirion_dawnAI(creature);
}
@@ -1678,10 +1678,10 @@ public:
struct npc_the_lich_king_tirion_dawnAI : public ScriptedAI
{
npc_the_lich_king_tirion_dawnAI(Creature* creature) : ScriptedAI(creature) { Reset(); }
- void Reset() OVERRIDE { }
- void AttackStart(Unit* /*who*/) { } // very sample, just don't make them aggreesive OVERRIDE
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
- void JustDied(Unit* /*killer*/) OVERRIDE { }
+ void Reset() override { }
+ void AttackStart(Unit* /*who*/) { } // very sample, just don't make them aggreesive override
+ void UpdateAI(uint32 /*diff*/) override { }
+ void JustDied(Unit* /*killer*/) override { }
};
};
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp
index cdc37b40521..43dee1338ef 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp
@@ -39,7 +39,7 @@ class npc_valkyr_battle_maiden : public CreatureScript
public:
npc_valkyr_battle_maiden() : CreatureScript("npc_valkyr_battle_maiden") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_valkyr_battle_maidenAI(creature);
}
@@ -52,7 +52,7 @@ public:
float x, y, z;
uint32 phase;
- void Reset() OVERRIDE
+ void Reset() override
{
me->setActive(true);
me->SetVisible(false);
@@ -69,7 +69,7 @@ public:
me->SetPosition(x, y, z, 0.0f);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (FlyBackTimer <= diff)
{
@@ -99,7 +99,7 @@ public:
FlyBackTimer = 4500;
break;
case 2:
- if (!player->isRessurectRequested())
+ if (!player->isResurrectRequested())
{
me->HandleEmoteCommand(EMOTE_ONESHOT_CUSTOM_SPELL_01);
DoCast(player, SPELL_REVIVE, true);
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp
index 5370adf8384..26937a83e63 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -16,15 +15,9 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Arcanist_Doan
-SD%Complete: 100
-SDComment:
-SDCategory: Scarlet Monastery
-EndScriptData */
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "scarlet_monastery.h"
enum Yells
{
@@ -34,103 +27,105 @@ enum Yells
enum Spells
{
- SPELL_POLYMORPH = 13323,
- SPELL_AOESILENCE = 8988,
- SPELL_ARCANEEXPLOSION = 9433,
- SPELL_FIREAOE = 9435,
- SPELL_ARCANEBUBBLE = 9438
+ SPELL_SILENCE = 8988,
+ SPELL_ARCANE_EXPLOSION = 9433,
+ SPELL_DETONATION = 9435,
+ SPELL_ARCANE_BUBBLE = 9438,
+ SPELL_POLYMORPH = 13323
};
-class boss_arcanist_doan : public CreatureScript
+enum Events
{
-public:
- boss_arcanist_doan() : CreatureScript("boss_arcanist_doan") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_arcanist_doanAI(creature);
- }
-
- struct boss_arcanist_doanAI : public ScriptedAI
- {
- boss_arcanist_doanAI(Creature* creature) : ScriptedAI(creature) { }
-
- uint32 Polymorph_Timer;
- uint32 AoESilence_Timer;
- uint32 ArcaneExplosion_Timer;
- bool bCanDetonate;
- bool bShielded;
-
- void Reset() OVERRIDE
- {
- Polymorph_Timer = 20000;
- AoESilence_Timer = 15000;
- ArcaneExplosion_Timer = 3000;
- bCanDetonate = false;
- bShielded = false;
- }
+ EVENT_SILENCE = 1,
+ EVENT_ARCANE_EXPLOSION = 2,
+ EVENT_ARCANE_BUBBLE = 3,
+ EVENT_POLYMORPH = 4
+};
- void EnterCombat(Unit* /*who*/) OVERRIDE
- {
- Talk(SAY_AGGRO);
- }
+class boss_arcanist_doan : public CreatureScript
+{
+ public:
+ boss_arcanist_doan() : CreatureScript("boss_arcanist_doan") { }
- void UpdateAI(uint32 diff) OVERRIDE
+ struct boss_arcanist_doanAI : public BossAI
{
- if (!UpdateVictim())
- return;
-
- if (bShielded && bCanDetonate)
+ boss_arcanist_doanAI(Creature* creature) : BossAI(creature, DATA_ARCANIST_DOAN)
{
- DoCast(me, SPELL_FIREAOE);
- bCanDetonate = false;
+ _healthAbove50Pct = true;
}
- if (me->HasAura(SPELL_ARCANEBUBBLE))
- return;
-
- //If we are <50% hp cast Arcane Bubble
- if (!bShielded && !HealthAbovePct(50))
+ void Reset() override
{
- //wait if we already casting
- if (me->IsNonMeleeSpellCast(false))
- return;
-
- Talk(SAY_SPECIALAE);
- DoCast(me, SPELL_ARCANEBUBBLE);
-
- bCanDetonate = true;
- bShielded = true;
+ _Reset();
+ _healthAbove50Pct = true;
}
- if (Polymorph_Timer <= diff)
+ void EnterCombat(Unit* /*who*/) override
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1))
- DoCast(target, SPELL_POLYMORPH);
+ _EnterCombat();
+ Talk(SAY_AGGRO);
- Polymorph_Timer = 20000;
+ events.ScheduleEvent(EVENT_SILENCE, 15 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, 3 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_POLYMORPH, 30 * IN_MILLISECONDS);
}
- else Polymorph_Timer -= diff;
- //AoESilence_Timer
- if (AoESilence_Timer <= diff)
+ void JustDied(Unit* /*killer*/) override
{
- DoCastVictim(SPELL_AOESILENCE);
- AoESilence_Timer = urand(15000, 20000);
+ _JustDied();
}
- else AoESilence_Timer -= diff;
- //ArcaneExplosion_Timer
- if (ArcaneExplosion_Timer <= diff)
+ void UpdateAI(uint32 diff) override
{
- DoCastVictim(SPELL_ARCANEEXPLOSION);
- ArcaneExplosion_Timer = 8000;
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_SILENCE:
+ DoCastVictim(SPELL_SILENCE);
+ events.ScheduleEvent(EVENT_SILENCE, urand(15, 20) * IN_MILLISECONDS);
+ break;
+ case EVENT_ARCANE_EXPLOSION:
+ DoCastVictim(SPELL_ARCANE_EXPLOSION);
+ events.ScheduleEvent(EVENT_SILENCE, 8 * IN_MILLISECONDS);
+ break;
+ case EVENT_POLYMORPH:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 30.0f, true))
+ DoCast(target, SPELL_POLYMORPH);
+ events.ScheduleEvent(EVENT_POLYMORPH, 20 * IN_MILLISECONDS);
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (_healthAbove50Pct && HealthBelowPct(50))
+ {
+ _healthAbove50Pct = false;
+ Talk(SAY_SPECIALAE);
+ DoCast(me, SPELL_ARCANE_BUBBLE);
+ DoCastAOE(SPELL_DETONATION);
+ }
+
+ DoMeleeAttackIfReady();
}
- else ArcaneExplosion_Timer -= diff;
- DoMeleeAttackIfReady();
+ private:
+ bool _healthAbove50Pct;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_arcanist_doanAI>(creature);
}
- };
};
void AddSC_boss_arcanist_doan()
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp
index edcc78ca8fe..71a5343d160 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -25,79 +24,104 @@ EndScriptData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "scarlet_monastery.h"
enum Spells
{
- SPELL_CALLOFTHEGRAVE = 17831,
+ SPELL_CALL_OF_THE_GRAVE = 17831,
SPELL_TERRIFY = 7399,
- SPELL_SOULSIPHON = 7290
+ SPELL_SOUL_SIPHON = 7290
};
-class boss_azshir_the_sleepless : public CreatureScript
+enum Events
{
-public:
- boss_azshir_the_sleepless() : CreatureScript("boss_azshir_the_sleepless") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_azshir_the_sleeplessAI(creature);
- }
-
- struct boss_azshir_the_sleeplessAI : public ScriptedAI
- {
- boss_azshir_the_sleeplessAI(Creature* creature) : ScriptedAI(creature) { }
+ EVENT_CALL_OF_GRAVE = 1,
+ EVENT_TERRIFY,
+ EVENT_SOUL_SIPHON
+};
- uint32 SoulSiphon_Timer;
- uint32 CallOftheGrave_Timer;
- uint32 Terrify_Timer;
+class boss_azshir_the_sleepless : public CreatureScript
+{
+ public:
+ boss_azshir_the_sleepless() : CreatureScript("boss_azshir_the_sleepless") { }
- void Reset() OVERRIDE
+ struct boss_azshir_the_sleeplessAI : public BossAI
{
- SoulSiphon_Timer = 1;
- CallOftheGrave_Timer = 30000;
- Terrify_Timer = 20000;
- }
-
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ boss_azshir_the_sleeplessAI(Creature* creature) : BossAI(creature, DATA_AZSHIR)
+ {
+ _siphon = false;
+ }
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (!UpdateVictim())
- return;
+ void Reset() override
+ {
+ _Reset();
+ _siphon = false;
+ }
- //If we are <50% hp cast Soul Siphon rank 1
- if (!HealthAbovePct(50) && !me->IsNonMeleeSpellCast(false))
+ void EnterCombat(Unit* /*who*/) override
{
- //SoulSiphon_Timer
- if (SoulSiphon_Timer <= diff)
- {
- DoCastVictim(SPELL_SOULSIPHON);
- return;
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_CALL_OF_GRAVE, 30000);
+ events.ScheduleEvent(EVENT_TERRIFY, 20000);
+ }
- //SoulSiphon_Timer = 20000;
- }
- else SoulSiphon_Timer -= diff;
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
}
- //CallOfTheGrave_Timer
- if (CallOftheGrave_Timer <= diff)
+ void DamageTaken(Unit* /*done_by*/, uint32& /*damage*/) override
{
- DoCastVictim(SPELL_CALLOFTHEGRAVE);
- CallOftheGrave_Timer = 30000;
+ if (HealthBelowPct(50) && !_siphon)
+ {
+ DoCastVictim(SPELL_SOUL_SIPHON);
+ events.ScheduleEvent(EVENT_SOUL_SIPHON, 20000);
+ _siphon = true;
+ }
}
- else CallOftheGrave_Timer -= diff;
- //Terrify_Timer
- if (Terrify_Timer <= diff)
+ void UpdateAI(uint32 diff) override
{
- DoCastVictim(SPELL_TERRIFY);
- Terrify_Timer = 20000;
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_CALL_OF_GRAVE:
+ DoCastVictim(SPELL_CALL_OF_THE_GRAVE);
+ events.ScheduleEvent(EVENT_CALL_OF_GRAVE, 30000);
+ break;
+ case EVENT_TERRIFY:
+ DoCastVictim(SPELL_TERRIFY);
+ events.ScheduleEvent(EVENT_TERRIFY, 20000);
+ break;
+ case EVENT_SOUL_SIPHON:
+ DoCastVictim(SPELL_SOUL_SIPHON);
+ events.ScheduleEvent(EVENT_SOUL_SIPHON, 20000);
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
}
- else Terrify_Timer -= diff;
- DoMeleeAttackIfReady();
+ private:
+ bool _siphon;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_azshir_the_sleeplessAI>(creature);
}
- };
};
void AddSC_boss_azshir_the_sleepless()
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp
index a7db667ecfd..18369c7adfc 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -16,15 +15,9 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Bloodmage_Thalnos
-SD%Complete: 100
-SDComment:
-SDCategory: Scarlet Monastery
-EndScriptData */
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "scarlet_monastery.h"
enum Yells
{
@@ -38,95 +31,102 @@ enum Spells
SPELL_FLAMESHOCK = 8053,
SPELL_SHADOWBOLT = 1106,
SPELL_FLAMESPIKE = 8814,
- SPELL_FIRENOVA = 16079,
+ SPELL_FIRENOVA = 16079
};
-class boss_bloodmage_thalnos : public CreatureScript
+enum Events
{
-public:
- boss_bloodmage_thalnos() : CreatureScript("boss_bloodmage_thalnos") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_bloodmage_thalnosAI(creature);
- }
-
- struct boss_bloodmage_thalnosAI : public ScriptedAI
- {
- boss_bloodmage_thalnosAI(Creature* creature) : ScriptedAI(creature) { }
-
- bool HpYell;
- uint32 FlameShock_Timer;
- uint32 ShadowBolt_Timer;
- uint32 FlameSpike_Timer;
- uint32 FireNova_Timer;
+ EVENT_FLAME_SHOCK = 1,
+ EVENT_SHADOW_BOLT,
+ EVENT_FLAME_SPIKE,
+ EVENT_FIRE_NOVA
+};
- void Reset() OVERRIDE
- {
- HpYell = false;
- FlameShock_Timer = 10000;
- ShadowBolt_Timer = 2000;
- FlameSpike_Timer = 8000;
- FireNova_Timer = 40000;
- }
+class boss_bloodmage_thalnos : public CreatureScript
+{
+ public:
+ boss_bloodmage_thalnos() : CreatureScript("boss_bloodmage_thalnos") { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ struct boss_bloodmage_thalnosAI : public BossAI
{
- Talk(SAY_AGGRO);
- }
+ boss_bloodmage_thalnosAI(Creature* creature) : BossAI(creature, DATA_BLOODMAGE_THALNOS)
+ {
+ _hpYell = false;
+ }
- void KilledUnit(Unit* /*Victim*/) OVERRIDE
- {
- Talk(SAY_KILL);
- }
+ void Reset() override
+ {
+ _hpYell = false;
+ _Reset();
+ }
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (!UpdateVictim())
- return;
+ void EnterCombat(Unit* /*who*/) override
+ {
+ Talk(SAY_AGGRO);
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_FLAME_SHOCK, 10000);
+ events.ScheduleEvent(EVENT_SHADOW_BOLT, 2000);
+ events.ScheduleEvent(EVENT_FLAME_SPIKE, 8000);
+ events.ScheduleEvent(EVENT_FIRE_NOVA, 40000);
+ }
- //If we are <35% hp
- if (!HpYell && !HealthAbovePct(35))
+ void JustDied(Unit* /*killer*/) override
{
- Talk(SAY_HEALTH);
- HpYell = true;
+ _JustDied();
}
- //FlameShock_Timer
- if (FlameShock_Timer <= diff)
+ void KilledUnit(Unit* /*victim*/) override
{
- DoCastVictim(SPELL_FLAMESHOCK);
- FlameShock_Timer = urand(10000, 15000);
+ Talk(SAY_KILL);
}
- else FlameShock_Timer -= diff;
- //FlameSpike_Timer
- if (FlameSpike_Timer <= diff)
+ void DamageTaken(Unit* /*done_by*/, uint32& /*damage*/) override
{
- DoCastVictim(SPELL_FLAMESPIKE);
- FlameSpike_Timer = 30000;
+ if (HealthBelowPct(35) && !_hpYell)
+ {
+ Talk(SAY_HEALTH);
+ _hpYell = true;
+ }
}
- else FlameSpike_Timer -= diff;
- //FireNova_Timer
- if (FireNova_Timer <= diff)
+ void ExecuteEvent(uint32 eventId) override
{
- DoCastVictim(SPELL_FIRENOVA);
- FireNova_Timer = 40000;
+ switch (eventId)
+ {
+ case EVENT_FLAME_SHOCK:
+ DoCastVictim(SPELL_FLAMESHOCK);
+ events.ScheduleEvent(EVENT_FLAME_SHOCK, urand(10000, 15000));
+ break;
+ case EVENT_SHADOW_BOLT:
+ DoCastVictim(SPELL_SHADOWBOLT);
+ events.ScheduleEvent(EVENT_SHADOW_BOLT, 2000);
+ break;
+ case EVENT_FLAME_SPIKE:
+ DoCastVictim(SPELL_FLAMESPIKE);
+ events.ScheduleEvent(EVENT_FLAME_SPIKE, 30000);
+ break;
+ case EVENT_FIRE_NOVA:
+ DoCastVictim(SPELL_FIRENOVA);
+ events.ScheduleEvent(EVENT_FIRE_NOVA, 40000);
+ break;
+ default:
+ break;
+ }
}
- else FireNova_Timer -= diff;
- //ShadowBolt_Timer
- if (ShadowBolt_Timer <= diff)
+ void UpdateAI(uint32 diff) override
{
- DoCastVictim(SPELL_SHADOWBOLT);
- ShadowBolt_Timer = 2000;
+ BossAI::UpdateAI(diff);
}
- else ShadowBolt_Timer -= diff;
- DoMeleeAttackIfReady();
+ private:
+ bool _hpYell;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_bloodmage_thalnosAI>(creature);
}
- };
};
void AddSC_boss_bloodmage_thalnos()
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
index ad87b2d8d3d..cad46b84748 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
@@ -146,7 +146,7 @@ class npc_wisp_invis : public CreatureScript
public:
npc_wisp_invis() : CreatureScript("npc_wisp_invis") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_wisp_invisAI(creature);
}
@@ -155,48 +155,47 @@ public:
{
npc_wisp_invisAI(Creature* creature) : ScriptedAI(creature)
{
- Creaturetype = delay = spell = spell2 = 0;
+ Creaturetype = delay = _spell = _spell2 = 0;
}
uint32 Creaturetype;
uint32 delay;
- uint32 spell;
- uint32 spell2;
- void Reset() OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ uint32 _spell;
+ uint32 _spell2;
+ void Reset() override { }
+ void EnterCombat(Unit* /*who*/) override { }
void SetType(uint32 _type)
{
switch (Creaturetype = _type)
{
case 1:
- spell = SPELL_PUMPKIN_AURA_GREEN;
+ _spell = SPELL_PUMPKIN_AURA_GREEN;
break;
case 2:
delay = 15000;
- spell = SPELL_BODY_FLAME;
- spell2 = SPELL_DEATH;
+ _spell = SPELL_BODY_FLAME;
+ _spell2 = SPELL_DEATH;
break;
case 3:
delay = 15000;
- spell = SPELL_SMOKE;
+ _spell = SPELL_SMOKE;
break;
case 4:
delay = 7000;
- spell2 = SPELL_WISP_BLUE;
+ _spell2 = SPELL_WISP_BLUE;
break;
}
- if (spell)
- DoCast(me, spell);
+ if (_spell)
+ DoCast(me, _spell);
}
- void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
if (spell->Id == SPELL_WISP_FLIGHT_PORT && Creaturetype == 4)
me->SetDisplayId(2027);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
-
+ void MoveInLineOfSight(Unit* who) override
{
if (!who || Creaturetype != 1 || !who->isTargetableForAttack())
return;
@@ -205,15 +204,15 @@ public:
DoCast(who, SPELL_SQUASH_SOUL);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (delay)
{
if (delay <= diff)
{
me->RemoveAurasDueToSpell(SPELL_SMOKE);
- if (spell2)
- DoCast(me, spell2);
+ if (_spell2)
+ DoCast(me, _spell2);
delay = 0;
} else delay -= diff;
}
@@ -226,7 +225,7 @@ class npc_head : public CreatureScript
public:
npc_head() : CreatureScript("npc_head") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_headAI(creature);
}
@@ -244,7 +243,7 @@ public:
bool withbody;
bool die;
- void Reset() OVERRIDE
+ void Reset() override
{
Phase = 0;
bodyGUID = 0;
@@ -254,7 +253,7 @@ public:
laugh = urand(15000, 30000);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
void SaySound(uint8 textEntry, Unit* target = 0)
{
@@ -266,7 +265,7 @@ public:
laugh += 3000;
}
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
if (withbody)
return;
@@ -297,7 +296,7 @@ public:
}
}
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (!withbody)
return;
@@ -323,7 +322,7 @@ public:
}
void Disappear();
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!withbody)
{
@@ -356,7 +355,7 @@ public:
if (wait <= diff)
{
die = false;
- if (Unit* body = Unit::GetUnit(*me, bodyGUID))
+ if (Unit* body = ObjectAccessor::GetUnit(*me, bodyGUID))
body->Kill(body);
me->Kill(me);
}
@@ -372,7 +371,7 @@ class boss_headless_horseman : public CreatureScript
public:
boss_headless_horseman() : CreatureScript("boss_headless_horseman") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_headless_horsemanAI>(creature);
}
@@ -409,7 +408,7 @@ public:
bool wp_reached;
bool burned;
- void Reset() OVERRIDE
+ void Reset() override
{
Phase = 1;
conflagrate = 15000;
@@ -428,14 +427,14 @@ public:
DoCast(me, SPELL_HEAD);
if (headGUID)
{
- if (Creature* Head = Unit::GetCreature((*me), headGUID))
+ if (Creature* Head = ObjectAccessor::GetCreature((*me), headGUID))
Head->DisappearAndDie();
headGUID = 0;
}
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- //instance->SetData(DATA_HORSEMAN_EVENT, NOT_STARTED);
+ //instance->SetBossState(DATA_HORSEMAN_EVENT, NOT_STARTED);
}
void FlyMode()
@@ -451,7 +450,7 @@ public:
Phase = 0;
}
- void MovementInform(uint32 type, uint32 i) OVERRIDE
+ void MovementInform(uint32 type, uint32 i) override
{
if (type != POINT_MOTION_TYPE || !IsFlying || i != id)
return;
@@ -466,12 +465,12 @@ public:
case 1:
{
if (Creature* smoke = me->SummonCreature(HELPER, Spawn[1].x, Spawn[1].y, Spawn[1].z, 0, TEMPSUMMON_TIMED_DESPAWN, 20000))
- CAST_AI(npc_wisp_invis::npc_wisp_invisAI, smoke->AI())->SetType(3);
+ ENSURE_AI(npc_wisp_invis::npc_wisp_invisAI, smoke->AI())->SetType(3);
DoCast(me, SPELL_RHYME_BIG);
break;
}
case 6:
- instance->SetData(GAMEOBJECT_PUMPKIN_SHRINE, 0); //hide gameobject
+ instance->SetData(DATA_PUMPKIN_SHRINE, 0); //hide gameobject
break;
case 19:
me->SetDisableGravity(false);
@@ -483,7 +482,7 @@ public:
wp_reached = false;
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
SaySound(SAY_ENTRANCE);
- if (Unit* player = Unit::GetUnit(*me, PlayerGUID))
+ if (Unit* player = ObjectAccessor::GetUnit(*me, PlayerGUID))
DoStartMovement(player);
break;
}
@@ -491,33 +490,32 @@ public:
++id;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
- instance->SetData(DATA_HORSEMAN_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_HORSEMAN_EVENT, IN_PROGRESS);
DoZoneInCombat();
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
ScriptedAI::AttackStart(who);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
-
+ void MoveInLineOfSight(Unit* who) override
{
if (withhead && Phase != 0)
ScriptedAI::MoveInLineOfSight(who);
}
- void KilledUnit(Unit* player) OVERRIDE
+ void KilledUnit(Unit* player) override
{
if (player->GetTypeId() == TYPEID_PLAYER)
{
if (withhead)
SaySound(SAY_PLAYER_DEATH);
//maybe possible when player dies from conflagration
- else if (Creature* Head = Unit::GetCreature((*me), headGUID))
- CAST_AI(npc_head::npc_headAI, Head->AI())->SaySound(SAY_PLAYER_DEATH);
+ else if (Creature* Head = ObjectAccessor::GetCreature((*me), headGUID))
+ ENSURE_AI(npc_head::npc_headAI, Head->AI())->SaySound(SAY_PLAYER_DEATH);
}
}
@@ -546,19 +544,19 @@ public:
if (!temp.empty())
{
std::list<Player*>::const_iterator j = temp.begin();
- advance(j, rand()%temp.size());
+ advance(j, rand32() % temp.size());
return (*j);
}
return NULL;
}
- void SpellHitTarget(Unit* unit, const SpellInfo* spell) OVERRIDE
+ void SpellHitTarget(Unit* unit, const SpellInfo* spell) override
{
if (spell->Id == SPELL_CONFLAGRATION && unit->HasAura(SPELL_CONFLAGRATION))
SaySound(SAY_CONFLAGRATION, unit);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->StopMoving();
//me->GetMotionMaster()->MoveIdle();
@@ -566,8 +564,8 @@ public:
if (Creature* flame = DoSpawnCreature(HELPER, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN, 60000))
flame->CastSpell(flame, SPELL_BODY_FLAME, false);
if (Creature* wisp = DoSpawnCreature(WISP_INVIS, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN, 60000))
- CAST_AI(npc_wisp_invis::npc_wisp_invisAI, wisp->AI())->SetType(4);
- instance->SetData(DATA_HORSEMAN_EVENT, DONE);
+ ENSURE_AI(npc_wisp_invis::npc_wisp_invisAI, wisp->AI())->SetType(4);
+ instance->SetBossState(DATA_HORSEMAN_EVENT, DONE);
Map::PlayerList const& players = me->GetMap()->GetPlayers();
if (!players.isEmpty())
@@ -578,7 +576,7 @@ public:
}
}
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (withhead)
return;
@@ -601,14 +599,14 @@ public:
ThreatContainer::StorageType threatlist = caster->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
{
- Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (unit && unit->IsAlive() && unit != caster)
me->AddThreat(unit, caster->getThreatManager().getThreat(unit));
}
}
}
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
if (damage >= me->GetHealth() && withhead)
{
@@ -619,9 +617,9 @@ public:
me->SetName("Headless Horseman, Unhorsed");
if (!headGUID)
- headGUID = DoSpawnCreature(HEAD, float(rand()%6), float(rand()%6), 0, 0, TEMPSUMMON_DEAD_DESPAWN, 0)->GetGUID();
+ headGUID = DoSpawnCreature(HEAD, float(rand32() % 6), float(rand32() % 6), 0, 0, TEMPSUMMON_DEAD_DESPAWN, 0)->GetGUID();
- Unit* Head = Unit::GetUnit(*me, headGUID);
+ Unit* Head = ObjectAccessor::GetUnit(*me, headGUID);
if (Head && Head->IsAlive())
{
Head->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -637,7 +635,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (withhead)
{
@@ -690,7 +688,7 @@ public:
if (burn <= diff)
{
if (Creature* flame = me->SummonCreature(HELPER, Spawn[0].x, Spawn[0].y, Spawn[0].z, 0, TEMPSUMMON_TIMED_DESPAWN, 17000))
- CAST_AI(npc_wisp_invis::npc_wisp_invisAI, flame->AI())->SetType(2);
+ ENSURE_AI(npc_wisp_invis::npc_wisp_invisAI, flame->AI())->SetType(2);
burned = true;
}
else burn -= diff;
@@ -720,7 +718,7 @@ public:
{
laugh = urand(11000, 22000);
me->MonsterTextEmote(EMOTE_LAUGHS, NULL);
- DoPlaySoundToSet(me, RandomLaugh[rand()%3]);
+ DoPlaySoundToSet(me, RandomLaugh[rand32() % 3]);
}
else laugh -= diff;
@@ -746,11 +744,11 @@ public:
--Phase;
else
Phase = 1;
- Creature* Head = Unit::GetCreature((*me), headGUID);
+ Creature* Head = ObjectAccessor::GetCreature((*me), headGUID);
if (Head && Head->IsAlive())
{
- CAST_AI(npc_head::npc_headAI, Head->AI())->Phase = Phase;
- CAST_AI(npc_head::npc_headAI, Head->AI())->Disappear();
+ ENSURE_AI(npc_head::npc_headAI, Head->AI())->Phase = Phase;
+ ENSURE_AI(npc_head::npc_headAI, Head->AI())->Disappear();
}
return;
}
@@ -780,7 +778,7 @@ class npc_pulsing_pumpkin : public CreatureScript
public:
npc_pulsing_pumpkin() : CreatureScript("npc_pulsing_pumpkin") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_pulsing_pumpkinAI(creature);
}
@@ -796,7 +794,7 @@ public:
bool sprouted;
uint64 debuffGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
float x, y, z;
me->GetPosition(x, y, z); //this visual aura some under ground
@@ -808,7 +806,7 @@ public:
{
debuff->SetDisplayId(me->GetDisplayId());
debuff->CastSpell(debuff, SPELL_PUMPKIN_AURA_GREEN, false);
- CAST_AI(npc_wisp_invis::npc_wisp_invisAI, debuff->AI())->SetType(1);
+ ENSURE_AI(npc_wisp_invis::npc_wisp_invisAI, debuff->AI())->SetType(1);
debuffGUID = debuff->GetGUID();
}
sprouted = false;
@@ -817,9 +815,9 @@ public:
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
if (spell->Id == SPELL_SPROUTING)
{
@@ -837,7 +835,7 @@ public:
if (!debuffGUID)
return;
- Unit* debuff = Unit::GetUnit(*me, debuffGUID);
+ Unit* debuff = ObjectAccessor::GetUnit(*me, debuffGUID);
if (debuff)
{
debuff->SetVisible(false);
@@ -845,14 +843,13 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (!sprouted)
Despawn();
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
-
+ void MoveInLineOfSight(Unit* who) override
{
if (!who || !me->IsValidAttackTarget(who) || me->GetVictim())
return;
@@ -862,7 +859,7 @@ public:
DoStartMovement(who);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (sprouted && UpdateVictim())
DoMeleeAttackIfReady();
@@ -875,14 +872,14 @@ class go_loosely_turned_soil : public GameObjectScript
public:
go_loosely_turned_soil() : GameObjectScript("go_loosely_turned_soil") { }
- bool OnGossipHello(Player* player, GameObject* soil) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* soil) override
{
InstanceScript* instance = player->GetInstanceScript();
if (instance)
{
- if (instance->GetData(DATA_HORSEMAN_EVENT) != NOT_STARTED)
+ if (instance->GetBossState(DATA_HORSEMAN_EVENT) != NOT_STARTED)
return true;
- instance->SetData(DATA_HORSEMAN_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_HORSEMAN_EVENT, IN_PROGRESS);
}
/* if (soil->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER && player->getLevel() > 64)
{
@@ -894,8 +891,8 @@ public:
player->AreaExploredOrEventHappens(11405);
if (Creature* horseman = soil->SummonCreature(HH_MOUNTED, FlightPoint[20].x, FlightPoint[20].y, FlightPoint[20].z, 0, TEMPSUMMON_MANUAL_DESPAWN, 0))
{
- CAST_AI(boss_headless_horseman::boss_headless_horsemanAI, horseman->AI())->PlayerGUID = player->GetGUID();
- CAST_AI(boss_headless_horseman::boss_headless_horsemanAI, horseman->AI())->FlyMode();
+ ENSURE_AI(boss_headless_horseman::boss_headless_horsemanAI, horseman->AI())->PlayerGUID = player->GetGUID();
+ ENSURE_AI(boss_headless_horseman::boss_headless_horsemanAI, horseman->AI())->FlyMode();
}
//}
return true;
@@ -909,7 +906,7 @@ void npc_head::npc_headAI::Disappear()
if (bodyGUID)
{
- Creature* body = Unit::GetCreature((*me), bodyGUID);
+ Creature* body = ObjectAccessor::GetCreature((*me), bodyGUID);
if (body && body->IsAlive())
{
withbody = true;
@@ -920,7 +917,7 @@ void npc_head::npc_headAI::Disappear()
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->GetMotionMaster()->MoveIdle();
- CAST_AI(boss_headless_horseman::boss_headless_horsemanAI, body->AI())->returned = true;
+ ENSURE_AI(boss_headless_horseman::boss_headless_horsemanAI, body->AI())->returned = true;
}
}
}
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp
index da9d8345e77..d1d25dd2ba6 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp
@@ -26,6 +26,7 @@ EndScriptData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "ScriptedEscortAI.h"
+#include "scarlet_monastery.h"
enum Says
{
@@ -44,89 +45,103 @@ enum Spells
SPELL_FRENZY = 8269
};
-enum Entry
+enum Npcs
{
- ENTRY_SCARLET_TRAINEE = 6575,
- ENTRY_SCARLET_MYRMIDON = 4295
+ NPC_SCARLET_TRAINEE = 6575,
+ NPC_SCARLET_MYRMIDON = 4295
};
-class boss_herod : public CreatureScript
+enum Events
{
-public:
- boss_herod() : CreatureScript("boss_herod") { }
+ EVENT_CLEAVE = 1,
+ EVENT_WHIRLWIND
+};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_herodAI(creature);
- }
+Position const ScarletTraineePos = { 1939.18f, -431.58f, 17.09f, 6.22f };
- struct boss_herodAI : public ScriptedAI
- {
- boss_herodAI(Creature* creature) : ScriptedAI(creature) { }
+class boss_herod : public CreatureScript
+{
+ public:
+ boss_herod() : CreatureScript("boss_herod") { }
- bool Enrage;
+ struct boss_herodAI : public BossAI
+ {
+ boss_herodAI(Creature* creature) : BossAI(creature, DATA_HEROD)
+ {
+ _enrage = false;
+ }
- uint32 Cleave_Timer;
- uint32 Whirlwind_Timer;
+ void Reset() override
+ {
+ _enrage = false;
+ _Reset();
+ }
- void Reset() OVERRIDE
- {
- Enrage = false;
- Cleave_Timer = 12000;
- Whirlwind_Timer = 60000;
- }
+ void EnterCombat(Unit* /*who*/) override
+ {
+ Talk(SAY_AGGRO);
+ DoCast(me, SPELL_RUSHINGCHARGE);
+ _EnterCombat();
- void EnterCombat(Unit* /*who*/) OVERRIDE
- {
- Talk(SAY_AGGRO);
- DoCast(me, SPELL_RUSHINGCHARGE);
- }
+ events.ScheduleEvent(EVENT_CLEAVE, 12000);
+ events.ScheduleEvent(EVENT_WHIRLWIND, 60000);
+ }
- void KilledUnit(Unit* /*victim*/) OVERRIDE
- {
- Talk(SAY_KILL);
- }
+ void KilledUnit(Unit* /*victim*/) override
+ {
+ Talk(SAY_KILL);
+ }
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- for (uint8 i = 0; i < 20; ++i)
- me->SummonCreature(ENTRY_SCARLET_TRAINEE, 1939.18f, -431.58f, 17.09f, 6.22f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 600000);
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (!UpdateVictim())
- return;
+ for (uint8 i = 0; i < 20; ++i)
+ me->SummonCreature(NPC_SCARLET_TRAINEE, ScarletTraineePos, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 600000);
+ }
- //If we are <30% hp goes Enraged
- if (!Enrage && !HealthAbovePct(30) && !me->IsNonMeleeSpellCast(false))
+ void DamageTaken(Unit* /*done_by*/, uint32& /*damage*/) override
{
- Talk(EMOTE_ENRAGE);
- Talk(SAY_ENRAGE);
- DoCast(me, SPELL_FRENZY);
- Enrage = true;
+ if (HealthBelowPct(30) && !_enrage)
+ {
+ Talk(EMOTE_ENRAGE);
+ Talk(SAY_ENRAGE);
+ DoCast(me, SPELL_FRENZY);
+ _enrage = true;
+ }
}
- //Cleave_Timer
- if (Cleave_Timer <= diff)
+ void ExecuteEvent(uint32 eventId) override
{
- DoCastVictim(SPELL_CLEAVE);
- Cleave_Timer = 12000;
+ switch (eventId)
+ {
+ case EVENT_CLEAVE:
+ DoCastVictim(SPELL_CLEAVE);
+ events.ScheduleEvent(EVENT_CLEAVE, 12000);
+ break;
+ case EVENT_WHIRLWIND:
+ Talk(SAY_WHIRLWIND);
+ DoCastVictim(SPELL_WHIRLWIND);
+ events.ScheduleEvent(EVENT_WHIRLWIND, 30000);
+ break;
+ default:
+ break;
+ }
}
- else Cleave_Timer -= diff;
- // Whirlwind_Timer
- if (Whirlwind_Timer <= diff)
+ void UpdateAI(uint32 diff) override
{
- Talk(SAY_WHIRLWIND);
- DoCastVictim(SPELL_WHIRLWIND);
- Whirlwind_Timer = 30000;
+ BossAI::UpdateAI(diff);
}
- else Whirlwind_Timer -= diff;
- DoMeleeAttackIfReady();
+ private:
+ bool _enrage;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_herodAI>(creature);
}
- };
};
class npc_scarlet_trainee : public CreatureScript
@@ -134,7 +149,7 @@ class npc_scarlet_trainee : public CreatureScript
public:
npc_scarlet_trainee() : CreatureScript("npc_scarlet_trainee") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_scarlet_traineeAI(creature);
}
@@ -148,11 +163,11 @@ public:
uint32 Start_Timer;
- void Reset() OVERRIDE { }
- void WaypointReached(uint32 /*waypointId*/) OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void Reset() override { }
+ void WaypointReached(uint32 /*waypointId*/) override { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (Start_Timer)
{
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp
index ee5ac9b0620..a4a3660b360 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp
@@ -25,6 +25,7 @@ EndScriptData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "scarlet_monastery.h"
enum Spells
{
@@ -41,14 +42,17 @@ class boss_high_inquisitor_fairbanks : public CreatureScript
public:
boss_high_inquisitor_fairbanks() : CreatureScript("boss_high_inquisitor_fairbanks") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
- return new boss_high_inquisitor_fairbanksAI(creature);
+ return GetInstanceAI<boss_high_inquisitor_fairbanksAI>(creature);
}
struct boss_high_inquisitor_fairbanksAI : public ScriptedAI
{
- boss_high_inquisitor_fairbanksAI(Creature* creature) : ScriptedAI(creature) { }
+ boss_high_inquisitor_fairbanksAI(Creature* creature) : ScriptedAI(creature)
+ {
+ instance = creature->GetInstanceScript();
+ }
uint32 CurseOfBlood_Timer;
uint32 DispelMagic_Timer;
@@ -57,8 +61,9 @@ public:
uint32 Sleep_Timer;
uint32 Dispel_Timer;
bool PowerWordShield;
+ InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
CurseOfBlood_Timer = 10000;
DispelMagic_Timer = 30000;
@@ -69,15 +74,22 @@ public:
PowerWordShield = false;
me->SetStandState(UNIT_STAND_STATE_DEAD);
me->SetUInt32Value(UNIT_FIELD_BYTES_1, 7);
+ instance->SetBossState(DATA_HIGH_INQUISITOR_FAIRBANKS, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
me->SetStandState(UNIT_STAND_STATE_STAND);
me->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
+ instance->SetBossState(DATA_HIGH_INQUISITOR_FAIRBANKS, IN_PROGRESS);
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ instance->SetBossState(DATA_HIGH_INQUISITOR_FAIRBANKS, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp
index c8afa26ca4f..40c7667843b 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -16,15 +15,9 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Houndmaster_Loksey
-SD%Complete: 100
-SDComment:
-SDCategory: Scarlet Monastery
-EndScriptData */
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "scarlet_monastery.h"
enum Yells
{
@@ -37,47 +30,60 @@ enum Spells
SPELL_BLOODLUST = 6742
};
-class boss_houndmaster_loksey : public CreatureScript
+enum Events
{
-public:
- boss_houndmaster_loksey() : CreatureScript("boss_houndmaster_loksey") { }
+ EVENT_BLOODLUST = 1
+};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_houndmaster_lokseyAI(creature);
- }
+class boss_houndmaster_loksey : public CreatureScript
+{
+ public:
+ boss_houndmaster_loksey() : CreatureScript("boss_houndmaster_loksey") { }
- struct boss_houndmaster_lokseyAI : public ScriptedAI
- {
- boss_houndmaster_lokseyAI(Creature* creature) : ScriptedAI(creature) { }
+ struct boss_houndmaster_lokseyAI : public BossAI
+ {
+ boss_houndmaster_lokseyAI(Creature* creature) : BossAI(creature, DATA_HOUNDMASTER_LOKSEY) { }
- uint32 BloodLust_Timer;
+ void Reset() override
+ {
+ _Reset();
+ }
- void Reset() OVERRIDE
- {
- BloodLust_Timer = 20000;
- }
+ void EnterCombat(Unit* /*who*/) override
+ {
+ Talk(SAY_AGGRO);
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_BLOODLUST, 20000);
+ }
- void EnterCombat(Unit* /*who*/) OVERRIDE
- {
- Talk(SAY_AGGRO);
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ }
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (!UpdateVictim())
- return;
+ void ExecuteEvent(uint32 eventId) override
+ {
+ switch (eventId)
+ {
+ case EVENT_BLOODLUST:
+ DoCast(me, SPELL_BLOODLUST);
+ events.ScheduleEvent(EVENT_BLOODLUST, 20000);
+ break;
+ default:
+ break;
+ }
+ }
- if (BloodLust_Timer <= diff)
+ void UpdateAI(uint32 diff) override
{
- DoCast(me, SPELL_BLOODLUST);
- BloodLust_Timer = 20000;
+ BossAI::UpdateAI(diff);
}
- else BloodLust_Timer -= diff;
+ };
- DoMeleeAttackIfReady();
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_houndmaster_lokseyAI>(creature);
}
- };
};
void AddSC_boss_houndmaster_loksey()
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp
index 60164977735..a73cf946a7c 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp
@@ -46,7 +46,7 @@ class boss_interrogator_vishas : public CreatureScript
public:
boss_interrogator_vishas() : CreatureScript("boss_interrogator_vishas") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_interrogator_vishasAI>(creature);
}
@@ -64,31 +64,34 @@ public:
bool Yell60;
uint32 ShadowWordPain_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
ShadowWordPain_Timer = 5000;
Yell60 = false;
Yell30 = false;
+ instance->SetBossState(DATA_INTERROGATOR_VISHAS, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
+ instance->SetBossState(DATA_INTERROGATOR_VISHAS, IN_PROGRESS);
}
- void KilledUnit(Unit* /*Victim*/) OVERRIDE
+ void KilledUnit(Unit* /*Victim*/) override
{
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
//Any other Actions to do with vorrel? setStandState?
- if (Creature* vorrel = Creature::GetCreature(*me, instance->GetData64(DATA_VORREL)))
+ if (Creature* vorrel = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_VORREL)))
vorrel->AI()->Talk(SAY_TRIGGER_VORREL);
+ instance->SetBossState(DATA_INTERROGATOR_VISHAS, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp
index a78dce47784..a9988584edd 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp
@@ -33,12 +33,12 @@ enum Says
//Mograine says
SAY_MO_AGGRO = 0,
SAY_MO_KILL = 1,
- SAY_MO_RESSURECTED = 2,
+ SAY_MO_RESURRECTED = 2,
//Whitemane says
SAY_WH_INTRO = 0,
SAY_WH_KILL = 1,
- SAY_WH_RESSURECT = 2,
+ SAY_WH_RESURRECT = 2,
};
enum Spells
@@ -63,7 +63,7 @@ class boss_scarlet_commander_mograine : public CreatureScript
public:
boss_scarlet_commander_mograine() : CreatureScript("boss_scarlet_commander_mograine") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_scarlet_commander_mograineAI>(creature);
}
@@ -84,7 +84,7 @@ public:
bool _bHeal;
bool _bFakeDeath;
- void Reset() OVERRIDE
+ void Reset() override
{
CrusaderStrike_Timer = 10000;
HammerOfJustice_Timer = 10000;
@@ -95,20 +95,20 @@ public:
me->SetStandState(UNIT_STAND_STATE_STAND);
if (me->IsAlive())
- instance->SetData(TYPE_MOGRAINE_AND_WHITE_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_MOGRAINE_AND_WHITE_EVENT, NOT_STARTED);
_bHasDied = false;
_bHeal = false;
_bFakeDeath = false;
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
- if (instance->GetData(TYPE_MOGRAINE_AND_WHITE_EVENT) != NOT_STARTED)
- instance->SetData(TYPE_MOGRAINE_AND_WHITE_EVENT, FAIL);
+ if (instance->GetBossState(DATA_MOGRAINE_AND_WHITE_EVENT) != NOT_STARTED)
+ instance->SetBossState(DATA_MOGRAINE_AND_WHITE_EVENT, FAIL);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_MO_AGGRO);
DoCast(me, SPELL_RETRIBUTIONAURA);
@@ -116,20 +116,20 @@ public:
me->CallForHelp(VISIBLE_RANGE);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_MO_KILL);
}
- void DamageTaken(Unit* /*doneBy*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*doneBy*/, uint32 &damage) override
{
if (damage < me->GetHealth() || _bHasDied || _bFakeDeath)
return;
//On first death, fake death and open door, as well as initiate whitemane if exist
- if (Unit* Whitemane = Unit::GetUnit(*me, instance->GetData64(DATA_WHITEMANE)))
+ if (Unit* Whitemane = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_WHITEMANE)))
{
- instance->SetData(TYPE_MOGRAINE_AND_WHITE_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_MOGRAINE_AND_WHITE_EVENT, IN_PROGRESS);
Whitemane->GetMotionMaster()->MovePoint(1, 1163.113370f, 1398.856812f, 32.527786f);
@@ -155,27 +155,27 @@ public:
}
}
- void SpellHit(Unit* /*who*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*who*/, const SpellInfo* spell) override
{
- //When hit with ressurection say text
+ //When hit with resurrection say text
if (spell->Id == SPELL_SCARLETRESURRECTION)
{
- Talk(SAY_MO_RESSURECTED);
+ Talk(SAY_MO_RESURRECTED);
_bFakeDeath = false;
- instance->SetData(TYPE_MOGRAINE_AND_WHITE_EVENT, SPECIAL);
+ instance->SetBossState(DATA_MOGRAINE_AND_WHITE_EVENT, SPECIAL);
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
- if (_bHasDied && !_bHeal && instance->GetData(TYPE_MOGRAINE_AND_WHITE_EVENT) == SPECIAL)
+ if (_bHasDied && !_bHeal && instance->GetBossState(DATA_MOGRAINE_AND_WHITE_EVENT) == SPECIAL)
{
- //On ressurection, stop fake death and heal whitemane and resume fight
- if (Unit* Whitemane = Unit::GetUnit(*me, instance->GetData64(DATA_WHITEMANE)))
+ //On resurrection, stop fake death and heal whitemane and resume fight
+ if (Unit* Whitemane = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_WHITEMANE)))
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetStandState(UNIT_STAND_STATE_STAND);
@@ -221,7 +221,7 @@ class boss_high_inquisitor_whitemane : public CreatureScript
public:
boss_high_inquisitor_whitemane() : CreatureScript("boss_high_inquisitor_whitemane") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_high_inquisitor_whitemaneAI>(creature);
}
@@ -243,7 +243,7 @@ public:
bool _bCanResurrectCheck;
bool _bCanResurrect;
- void Reset() OVERRIDE
+ void Reset() override
{
Wait_Timer = 7000;
Heal_Timer = 10000;
@@ -254,34 +254,34 @@ public:
_bCanResurrect = false;
if (me->IsAlive())
- instance->SetData(TYPE_MOGRAINE_AND_WHITE_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_MOGRAINE_AND_WHITE_EVENT, NOT_STARTED);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
- if (instance->GetData(TYPE_MOGRAINE_AND_WHITE_EVENT) == NOT_STARTED)
+ if (instance->GetBossState(DATA_MOGRAINE_AND_WHITE_EVENT) == NOT_STARTED)
return;
ScriptedAI::AttackStart(who);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_WH_INTRO);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_WH_KILL);
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if (!_bCanResurrectCheck && damage >= me->GetHealth())
damage = me->GetHealth() - 1;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -294,7 +294,7 @@ public:
if (Creature* mograine = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MOGRAINE)))
{
DoCast(mograine, SPELL_SCARLETRESURRECTION);
- Talk(SAY_WH_RESSURECT);
+ Talk(SAY_WH_RESURRECT);
_bCanResurrect = false;
}
}
@@ -325,7 +325,7 @@ public:
if (!HealthAbovePct(75))
target = me;
- if (Creature* mograine = Unit::GetCreature(*me, instance->GetData64(DATA_MOGRAINE)))
+ if (Creature* mograine = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MOGRAINE)))
{
// checking _bCanResurrectCheck prevents her healing Mograine while he is "faking death"
if (_bCanResurrectCheck && mograine->IsAlive() && !mograine->HealthAbovePct(75))
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp
index 5215fbda633..24efd7017ec 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp
@@ -25,84 +25,87 @@ EndScriptData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "scarlet_monastery.h"
enum Spells
{
SPELL_LICHSLAP = 28873,
- SPELL_FROSTBOLTVOLLEY = 8398,
+ SPELL_FROSTBOLT_VOLLEY = 8398,
SPELL_MINDFLAY = 17313,
SPELL_FROSTNOVA = 15531
};
-class boss_scorn : public CreatureScript
+enum Events
{
-public:
- boss_scorn() : CreatureScript("boss_scorn") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_scornAI(creature);
- }
-
- struct boss_scornAI : public ScriptedAI
- {
- boss_scornAI(Creature* creature) : ScriptedAI(creature) { }
+ EVENT_LICH_SLAP = 1,
+ EVENT_FROSTBOLT_VOLLEY,
+ EVENT_MIND_FLAY,
+ EVENT_FROST_NOVA
+};
- uint32 LichSlap_Timer;
- uint32 FrostboltVolley_Timer;
- uint32 MindFlay_Timer;
- uint32 FrostNova_Timer;
+class boss_scorn : public CreatureScript
+{
+ public:
+ boss_scorn() : CreatureScript("boss_scorn") { }
- void Reset() OVERRIDE
+ struct boss_scornAI : public BossAI
{
- LichSlap_Timer = 45000;
- FrostboltVolley_Timer = 30000;
- MindFlay_Timer = 30000;
- FrostNova_Timer = 30000;
- }
-
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ boss_scornAI(Creature* creature) : BossAI(creature, DATA_SCORN) { }
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (!UpdateVictim())
- return;
+ void Reset() override
+ {
+ _Reset();
+ }
- //LichSlap_Timer
- if (LichSlap_Timer <= diff)
+ void EnterCombat(Unit* /*who*/) override
{
- DoCastVictim(SPELL_LICHSLAP);
- LichSlap_Timer = 45000;
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_LICH_SLAP, 45000);
+ events.ScheduleEvent(EVENT_FROSTBOLT_VOLLEY, 30000);
+ events.ScheduleEvent(EVENT_MIND_FLAY, 30000);
+ events.ScheduleEvent(EVENT_FROST_NOVA, 30000);
}
- else LichSlap_Timer -= diff;
- //FrostboltVolley_Timer
- if (FrostboltVolley_Timer <= diff)
+ void JustDied(Unit* /*killer*/) override
{
- DoCastVictim(SPELL_FROSTBOLTVOLLEY);
- FrostboltVolley_Timer = 20000;
+ _JustDied();
}
- else FrostboltVolley_Timer -= diff;
- //MindFlay_Timer
- if (MindFlay_Timer <= diff)
+ void ExecuteEvent(uint32 eventId) override
{
- DoCastVictim(SPELL_MINDFLAY);
- MindFlay_Timer = 20000;
+ switch (eventId)
+ {
+ case EVENT_LICH_SLAP:
+ DoCastVictim(SPELL_LICHSLAP);
+ events.ScheduleEvent(EVENT_LICH_SLAP, 45000);
+ break;
+ case EVENT_FROSTBOLT_VOLLEY:
+ DoCastVictim(SPELL_FROSTBOLT_VOLLEY);
+ events.ScheduleEvent(EVENT_FROSTBOLT_VOLLEY, 20000);
+ break;
+ case EVENT_MIND_FLAY:
+ DoCastVictim(SPELL_MINDFLAY);
+ events.ScheduleEvent(EVENT_MIND_FLAY, 20000);
+ break;
+ case EVENT_FROST_NOVA:
+ DoCastVictim(SPELL_FROSTNOVA);
+ events.ScheduleEvent(EVENT_FROST_NOVA, 15000);
+ break;
+ default:
+ break;
+ }
}
- else MindFlay_Timer -= diff;
- //FrostNova_Timer
- if (FrostNova_Timer <= diff)
+ void UpdateAI(uint32 diff) override
{
- DoCastVictim(SPELL_FROSTNOVA);
- FrostNova_Timer = 15000;
+ BossAI::UpdateAI(diff);
}
- else FrostNova_Timer -= diff;
+ };
- DoMeleeAttackIfReady();
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_scornAI>(creature);
}
- };
};
void AddSC_boss_scorn()
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp
index 4de9c2c80bf..78837912688 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -16,146 +15,205 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Instance_Scarlet_Monastery
-SD%Complete: 50
-SDComment:
-SDCategory: Scarlet Monastery
-EndScriptData */
-
#include "ScriptMgr.h"
-#include "ScriptedCreature.h"
+#include "InstanceScript.h"
#include "scarlet_monastery.h"
-enum Entry
+DoorData const doorData[] =
{
- ENTRY_PUMPKIN_SHRINE = 186267,
- ENTRY_HORSEMAN = 23682,
- ENTRY_HEAD = 23775,
- ENTRY_PUMPKIN = 23694
+ { GO_HIGH_INQUISITORS_DOOR, DATA_MOGRAINE_AND_WHITE_EVENT, DOOR_TYPE_ROOM, BOUNDARY_NONE },
+ { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
};
-#define MAX_ENCOUNTER 2
-
class instance_scarlet_monastery : public InstanceMapScript
{
-public:
- instance_scarlet_monastery() : InstanceMapScript("instance_scarlet_monastery", 189) { }
+ public:
+ instance_scarlet_monastery() : InstanceMapScript("instance_scarlet_monastery", 189) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
- {
- return new instance_scarlet_monastery_InstanceMapScript(map);
- }
+ struct instance_scarlet_monastery_InstanceMapScript : public InstanceScript
+ {
+ instance_scarlet_monastery_InstanceMapScript(Map* map) : InstanceScript(map)
+ {
+ SetBossNumber(EncounterCount);
+ LoadDoorData(doorData);
- struct instance_scarlet_monastery_InstanceMapScript : public InstanceScript
- {
- instance_scarlet_monastery_InstanceMapScript(Map* map) : InstanceScript(map) { }
+ PumpkinShrineGUID = 0;
+ HorsemanGUID = 0;
+ HeadGUID = 0;
+ MograineGUID = 0;
+ WhitemaneGUID = 0;
+ VorrelGUID = 0;
- uint64 PumpkinShrineGUID;
- uint64 HorsemanGUID;
- uint64 HeadGUID;
- std::set<uint64> HorsemanAdds;
+ HorsemanAdds.clear();
+ }
- uint64 MograineGUID;
- uint64 WhitemaneGUID;
- uint64 VorrelGUID;
- uint64 DoorHighInquisitorGUID;
+ void OnGameObjectCreate(GameObject* go) override
+ {
+ switch (go->GetEntry())
+ {
+ case GO_PUMPKIN_SHRINE:
+ PumpkinShrineGUID = go->GetGUID();
+ break;
+ case GO_HIGH_INQUISITORS_DOOR:
+ AddDoor(go, true);
+ break;
+ default:
+ break;
+ }
+ }
- uint32 encounter[MAX_ENCOUNTER];
+ void OnGameObjectRemove(GameObject* go) override
+ {
+ switch (go->GetEntry())
+ {
+ case GO_HIGH_INQUISITORS_DOOR:
+ AddDoor(go, false);
+ break;
+ default:
+ break;
+ }
+ }
- void Initialize() OVERRIDE
- {
- memset(&encounter, 0, sizeof(encounter));
+ void OnCreatureCreate(Creature* creature) override
+ {
+ switch (creature->GetEntry())
+ {
+ case NPC_HORSEMAN:
+ HorsemanGUID = creature->GetGUID();
+ break;
+ case NPC_HEAD:
+ HeadGUID = creature->GetGUID();
+ break;
+ case NPC_PUMPKIN:
+ HorsemanAdds.insert(creature->GetGUID());
+ break;
+ case NPC_MOGRAINE:
+ MograineGUID = creature->GetGUID();
+ break;
+ case NPC_WHITEMANE:
+ WhitemaneGUID = creature->GetGUID();
+ break;
+ case NPC_VORREL:
+ VorrelGUID = creature->GetGUID();
+ break;
+ default:
+ break;
+ }
+ }
- PumpkinShrineGUID = 0;
- HorsemanGUID = 0;
- HeadGUID = 0;
- HorsemanAdds.clear();
+ void SetData(uint32 type, uint32 /*data*/) override
+ {
+ switch (type)
+ {
+ case DATA_PUMPKIN_SHRINE:
+ HandleGameObject(PumpkinShrineGUID, false);
+ break;
+ default:
+ break;
+ }
+ }
- MograineGUID = 0;
- WhitemaneGUID = 0;
- VorrelGUID = 0;
- DoorHighInquisitorGUID = 0;
- }
+ bool SetBossState(uint32 type, EncounterState state) override
+ {
+ if (!InstanceScript::SetBossState(type, state))
+ return false;
- void OnGameObjectCreate(GameObject* go) OVERRIDE
- {
- switch (go->GetEntry())
+ switch (type)
+ {
+ case DATA_HORSEMAN_EVENT:
+ if (state == DONE)
+ {
+ for (uint64 guid : HorsemanAdds)
+ {
+ Creature* add = instance->GetCreature(guid);
+ if (add && add->IsAlive())
+ add->Kill(add);
+ }
+ HorsemanAdds.clear();
+ HandleGameObject(PumpkinShrineGUID, false);
+ }
+ break;
+ default:
+ break;
+ }
+ return true;
+ }
+
+ uint64 GetData64(uint32 type) const override
{
- case ENTRY_PUMPKIN_SHRINE: PumpkinShrineGUID = go->GetGUID();break;
- case 104600: DoorHighInquisitorGUID = go->GetGUID(); break;
+ switch (type)
+ {
+ case DATA_MOGRAINE:
+ return MograineGUID;
+ case DATA_WHITEMANE:
+ return WhitemaneGUID;
+ case DATA_VORREL:
+ return VorrelGUID;
+ default:
+ break;
+ }
+ return 0;
}
- }
- void OnCreatureCreate(Creature* creature) OVERRIDE
- {
- switch (creature->GetEntry())
+ std::string GetSaveData() override
{
- case ENTRY_HORSEMAN: HorsemanGUID = creature->GetGUID(); break;
- case ENTRY_HEAD: HeadGUID = creature->GetGUID(); break;
- case ENTRY_PUMPKIN: HorsemanAdds.insert(creature->GetGUID());break;
- case 3976: MograineGUID = creature->GetGUID(); break;
- case 3977: WhitemaneGUID = creature->GetGUID(); break;
- case 3981: VorrelGUID = creature->GetGUID(); break;
+ OUT_SAVE_INST_DATA;
+
+ std::ostringstream saveStream;
+ saveStream << "S M " << GetBossSaveData();
+
+ OUT_SAVE_INST_DATA_COMPLETE;
+ return saveStream.str();
}
- }
- void SetData(uint32 type, uint32 data) OVERRIDE
- {
- switch (type)
+ void Load(const char* str) override
{
- case TYPE_MOGRAINE_AND_WHITE_EVENT:
- if (data == IN_PROGRESS)
- DoUseDoorOrButton(DoorHighInquisitorGUID);
- if (data == FAIL)
- DoUseDoorOrButton(DoorHighInquisitorGUID);
-
- encounter[0] = data;
- break;
- case GAMEOBJECT_PUMPKIN_SHRINE:
- HandleGameObject(PumpkinShrineGUID, false);
- break;
- case DATA_HORSEMAN_EVENT:
- encounter[1] = data;
- if (data == DONE)
+ if (!str)
{
- for (std::set<uint64>::const_iterator itr = HorsemanAdds.begin(); itr != HorsemanAdds.end(); ++itr)
+ OUT_LOAD_INST_DATA_FAIL;
+ return;
+ }
+
+ OUT_LOAD_INST_DATA(str);
+
+ char dataHead1, dataHead2;
+
+ std::istringstream loadStream(str);
+ loadStream >> dataHead1 >> dataHead2;
+
+ if (dataHead1 == 'S' && dataHead2 == 'M')
+ {
+ for (uint8 i = 0; i < EncounterCount; ++i)
{
- Creature* add = instance->GetCreature(*itr);
- if (add && add->IsAlive())
- add->Kill(add);
+ uint32 tmpState;
+ loadStream >> tmpState;
+ if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
+ tmpState = NOT_STARTED;
+
+ SetBossState(i, EncounterState(tmpState));
}
- HorsemanAdds.clear();
- HandleGameObject(PumpkinShrineGUID, false);
}
- break;
- }
- }
+ else
+ OUT_LOAD_INST_DATA_FAIL;
- uint64 GetData64(uint32 type) const OVERRIDE
- {
- switch (type)
- {
- //case GAMEOBJECT_PUMPKIN_SHRINE: return PumpkinShrineGUID;
- //case DATA_HORSEMAN: return HorsemanGUID;
- //case DATA_HEAD: return HeadGUID;
- case DATA_MOGRAINE: return MograineGUID;
- case DATA_WHITEMANE: return WhitemaneGUID;
- case DATA_VORREL: return VorrelGUID;
- case DATA_DOOR_WHITEMANE: return DoorHighInquisitorGUID;
+ OUT_LOAD_INST_DATA_COMPLETE;
}
- return 0;
- }
- uint32 GetData(uint32 type) const OVERRIDE
+ protected:
+ uint64 PumpkinShrineGUID;
+ uint64 HorsemanGUID;
+ uint64 HeadGUID;
+ uint64 MograineGUID;
+ uint64 WhitemaneGUID;
+ uint64 VorrelGUID;
+
+ std::set<uint64> HorsemanAdds;
+ };
+
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
- if (type == TYPE_MOGRAINE_AND_WHITE_EVENT)
- return encounter[0];
- if (type == DATA_HORSEMAN_EVENT)
- return encounter[1];
- return 0;
+ return new instance_scarlet_monastery_InstanceMapScript(map);
}
- };
};
void AddSC_instance_scarlet_monastery()
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h b/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h
index cd5a74ee478..d4ce3f1614f 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -19,18 +18,43 @@
#ifndef SCARLET_M_
#define SCARLET_M_
+uint32 const EncounterCount = 10;
+
enum DataTypes
{
- TYPE_MOGRAINE_AND_WHITE_EVENT = 1,
-
+ DATA_MOGRAINE_AND_WHITE_EVENT = 1,
DATA_MOGRAINE = 2,
DATA_WHITEMANE = 3,
- DATA_DOOR_WHITEMANE = 4,
- DATA_HORSEMAN_EVENT = 5,
- GAMEOBJECT_PUMPKIN_SHRINE = 6,
+ DATA_HORSEMAN_EVENT = 4,
+ DATA_PUMPKIN_SHRINE = 5,
- DATA_VORREL = 7
+ DATA_VORREL = 6,
+ DATA_ARCANIST_DOAN = 7,
+ DATA_AZSHIR = 8,
+ DATA_BLOODMAGE_THALNOS = 9,
+ DATA_HEROD = 10,
+ DATA_HIGH_INQUISITOR_FAIRBANKS = 11,
+ DATA_HOUNDMASTER_LOKSEY = 12,
+ DATA_INTERROGATOR_VISHAS = 13,
+ DATA_SCORN = 14
+};
+
+enum CreatureIds
+{
+ NPC_MOGRAINE = 3976,
+ NPC_WHITEMANE = 3977,
+ NPC_VORREL = 3981,
+
+ NPC_HORSEMAN = 23682,
+ NPC_HEAD = 23775,
+ NPC_PUMPKIN = 23694
+};
+
+enum GameObjectIds
+{
+ GO_HIGH_INQUISITORS_DOOR = 104600,
+ GO_PUMPKIN_SHRINE = 186267
};
#endif // SCARLET_M_
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
index 37484f1c210..9a1f8f14557 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
@@ -56,21 +56,21 @@ class boss_darkmaster_gandling : public CreatureScript
{
boss_darkmaster_gandlingAI(Creature* creature) : BossAI(creature, DATA_DARKMASTERGANDLING) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_GANDLING)))
gate->SetGoState(GO_STATE_ACTIVE);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_GANDLING)))
gate->SetGoState(GO_STATE_ACTIVE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_ARCANEMISSILES, 4500);
@@ -82,13 +82,13 @@ class boss_darkmaster_gandling : public CreatureScript
gate->SetGoState(GO_STATE_READY);
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
Talk(YELL_SUMMONED);
me->GetMotionMaster()->MoveRandom(5);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -126,7 +126,7 @@ class boss_darkmaster_gandling : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_darkmaster_gandlingAI>(creature);
}
@@ -211,13 +211,13 @@ class spell_shadow_portal : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_shadow_portal_SpellScript::HandleCast, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_shadow_portal_SpellScript();
}
@@ -341,13 +341,13 @@ class spell_shadow_portal_rooms : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_shadow_portal_rooms_SpellScript::HandleSendEvent, EFFECT_1, SPELL_EFFECT_SEND_EVENT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_shadow_portal_rooms_SpellScript();
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp
index d2e4601c244..a4f53b9e082 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp
@@ -31,7 +31,7 @@ class boss_death_knight_darkreaver : public CreatureScript
public:
boss_death_knight_darkreaver() : CreatureScript("boss_death_knight_darkreaver") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_death_knight_darkreaverAI(creature);
}
@@ -40,17 +40,17 @@ public:
{
boss_death_knight_darkreaverAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
}
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
if (me->GetHealth() <= damage)
DoCast(me, 23261, true); //Summon Darkreaver's Fallen Charger
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
};
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
index 931e21f98bf..82c7e6cea78 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
@@ -53,7 +53,7 @@ class boss_doctor_theolen_krastinov : public CreatureScript
{
boss_theolenkrastinovAI(Creature* creature) : BossAI(creature, DATA_DOCTORTHEOLENKRASTINOV) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_REND, 8000);
@@ -61,7 +61,7 @@ class boss_doctor_theolen_krastinov : public CreatureScript
events.ScheduleEvent(EVENT_FRENZY, 1000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -97,7 +97,7 @@ class boss_doctor_theolen_krastinov : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_theolenkrastinovAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
index 9d3c862a3ad..e8e69c5c8b1 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
@@ -50,7 +50,7 @@ class boss_illucia_barov : public CreatureScript
{
boss_illuciabarovAI(Creature* creature) : BossAI(creature, DATA_LADYILLUCIABAROV) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_CURSEOFAGONY, 18000);
@@ -59,7 +59,7 @@ class boss_illucia_barov : public CreatureScript
events.ScheduleEvent(EVENT_FEAR, 30000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -98,7 +98,7 @@ class boss_illucia_barov : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_illuciabarovAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
index 6e0c2aab115..84ada04a989 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
@@ -55,14 +55,14 @@ class boss_instructor_malicia : public CreatureScript
uint32 FlashCounter;
uint32 TouchCounter;
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
FlashCounter = 0;
TouchCounter = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_CALLOFGRAVES, 4000);
@@ -72,7 +72,7 @@ class boss_instructor_malicia : public CreatureScript
events.ScheduleEvent(EVENT_HEALINGTOUCH, 45000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -135,7 +135,7 @@ class boss_instructor_malicia : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_instructormaliciaAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
index 448ceaa3371..57331d84b82 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
@@ -40,7 +40,7 @@ class boss_jandice_barov : public CreatureScript
public:
boss_jandice_barov() : CreatureScript("boss_jandice_barov") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_jandicebarovAI(creature);
}
@@ -55,7 +55,7 @@ public:
uint32 Invisible_Timer;
bool Invisible;
- void Reset() OVERRIDE
+ void Reset() override
{
CurseOfBlood_Timer = 15000;
Illusion_Timer = 30000;
@@ -63,7 +63,7 @@ public:
Invisible = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
@@ -73,7 +73,7 @@ public:
Illusion->AI()->AttackStart(victim);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (Invisible && Invisible_Timer <= diff)
{
@@ -162,7 +162,7 @@ class npc_illusionofjandicebarov : public CreatureScript
public:
npc_illusionofjandicebarov() : CreatureScript("npc_illusionofjandicebarov") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_illusionofjandicebarovAI(creature);
}
@@ -173,17 +173,17 @@ public:
uint32 Cleave_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Cleave_Timer = urand(2000, 8000);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
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 369ee3842d9..3b423134f2a 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
@@ -78,12 +78,12 @@ class boss_kirtonos_the_herald : public CreatureScript
{
boss_kirtonos_the_heraldAI(Creature* creature) : BossAI(creature, DATA_KIRTONOS) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_SWOOP, urand(8000, 8000));
events.ScheduleEvent(EVENT_WING_FLAP, urand(15000, 15000));
@@ -96,7 +96,7 @@ class boss_kirtonos_the_herald : public CreatureScript
_EnterCombat();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS)))
gate->SetGoState(GO_STATE_ACTIVE);
@@ -108,7 +108,7 @@ class boss_kirtonos_the_herald : public CreatureScript
_JustDied();
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS)))
gate->SetGoState(GO_STATE_ACTIVE);
@@ -120,7 +120,7 @@ class boss_kirtonos_the_herald : public CreatureScript
me->DespawnOrUnsummon(5000);
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
events.ScheduleEvent(INTRO_1, 500);
me->SetDisableGravity(true);
@@ -129,12 +129,12 @@ class boss_kirtonos_the_herald : public CreatureScript
Talk(EMOTE_SUMMONED);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
BossAI::JustSummoned(summon);
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == WAYPOINT_MOTION_TYPE && id == POINT_KIRTONOS_LAND)
{
@@ -142,7 +142,7 @@ class boss_kirtonos_the_herald : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -251,7 +251,7 @@ class boss_kirtonos_the_herald : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_kirtonos_the_heraldAI>(creature);
}
@@ -277,7 +277,7 @@ class go_brazier_of_the_herald : public GameObjectScript
public:
go_brazier_of_the_herald() : GameObjectScript("go_brazier_of_the_herald") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->UseDoorOrButton();
go->PlayDirectSound(SOUND_SCREECH, 0);
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp
index 334e7935183..b88954bd1b7 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp
@@ -37,7 +37,7 @@ class boss_kormok : public CreatureScript
public:
boss_kormok() : CreatureScript("boss_kormok") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_kormokAI(creature);
}
@@ -52,7 +52,7 @@ public:
uint32 Mage_Timer;
bool Mages;
- void Reset() OVERRIDE
+ void Reset() override
{
ShadowVolley_Timer = 10000;
BoneShield_Timer = 2000;
@@ -61,7 +61,7 @@ public:
Mages = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
@@ -77,7 +77,7 @@ public:
SummonedMage->AI()->AttackStart(victim);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
index c167f7d8641..cbe707a353e 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
@@ -47,7 +47,7 @@ class boss_lord_alexei_barov : public CreatureScript
{
boss_lordalexeibarovAI(Creature* creature) : BossAI(creature, DATA_LORDALEXEIBAROV) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
@@ -55,14 +55,14 @@ class boss_lord_alexei_barov : public CreatureScript
DoCast(me, SPELL_UNHOLY_AURA);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_IMMOLATE, 7000);
events.ScheduleEvent(EVENT_VEILOFSHADOW, 15000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -93,7 +93,7 @@ class boss_lord_alexei_barov : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_lordalexeibarovAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
index 2005ac58446..7c82520959b 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
@@ -50,7 +50,7 @@ class boss_lorekeeper_polkelt : public CreatureScript
{
boss_lorekeeperpolkeltAI(Creature* creature) : BossAI(creature, DATA_LOREKEEPERPOLKELT) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_VOLATILEINFECTION, 38000);
@@ -59,7 +59,7 @@ class boss_lorekeeper_polkelt : public CreatureScript
events.ScheduleEvent(EVENT_NOXIOUSCATALYST, 35000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -98,7 +98,7 @@ class boss_lorekeeper_polkelt : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_lorekeeperpolkeltAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
index 68d70e63ca6..2aecc8bd491 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
@@ -41,7 +41,7 @@ class boss_boss_ras_frostwhisper : public CreatureScript
public:
boss_boss_ras_frostwhisper() : CreatureScript("boss_boss_ras_frostwhisper") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_rasfrostAI(creature);
}
@@ -57,7 +57,7 @@ public:
uint32 ChillNova_Timer;
uint32 FrostVolley_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
IceArmor_Timer = 2000;
Frostbolt_Timer = 8000;
@@ -69,9 +69,9 @@ public:
DoCast(me, SPELL_ICEARMOR, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
index 3df675edd3e..51eb42cd7ab 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
@@ -50,7 +50,7 @@ class boss_the_ravenian : public CreatureScript
{
boss_theravenianAI(Creature* creature) : BossAI(creature, DATA_THERAVENIAN) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_TRAMPLE, 24000);
@@ -59,7 +59,7 @@ class boss_the_ravenian : public CreatureScript
events.ScheduleEvent(EVENT_KNOCKAWAY, 32000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -98,7 +98,7 @@ class boss_the_ravenian : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_theravenianAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
index a91b1aef13c..c111eb103b4 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
@@ -44,7 +44,7 @@ class boss_vectus : public CreatureScript
public:
boss_vectus() : CreatureScript("boss_vectus") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_vectusAI(creature);
}
@@ -57,14 +57,14 @@ public:
uint32 m_uiBlastWave_Timer;
uint32 m_uiFrenzy_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
m_uiFireShield_Timer = 2000;
m_uiBlastWave_Timer = 14000;
m_uiFrenzy_Timer = 0;
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
index a3d9ff4bb22..6bb8e301e86 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
@@ -27,7 +27,7 @@ class instance_scholomance : public InstanceMapScript
public:
instance_scholomance() : InstanceMapScript("instance_scholomance", 289) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_scholomance_InstanceMapScript(map);
}
@@ -48,7 +48,7 @@ class instance_scholomance : public InstanceMapScript
BrazierOfTheHeraldGUID = 0;
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -84,7 +84,7 @@ class instance_scholomance : public InstanceMapScript
}
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -106,7 +106,7 @@ class instance_scholomance : public InstanceMapScript
return true;
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -168,7 +168,7 @@ class instance_scholomance : public InstanceMapScript
instance->SummonCreature(NPC_DARKMASTER_GANDLING, GandlingLoc);
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -179,7 +179,7 @@ class instance_scholomance : public InstanceMapScript
return saveStream.str();
}
- void Load(const char* str) OVERRIDE
+ void Load(const char* str) override
{
if (!str)
{
diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp
index 6f0ea518fd2..c76637224ae 100644
--- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp
+++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp
@@ -71,7 +71,7 @@ class instance_shadowfang_keep : public InstanceMapScript
public:
instance_shadowfang_keep() : InstanceMapScript("instance_shadowfang_keep", 33) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_shadowfang_keep_InstanceMapScript(map);
}
@@ -94,7 +94,7 @@ public:
uint8 uiPhase;
uint16 uiTimer;
- void Initialize() OVERRIDE
+ void Initialize() override
{
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
@@ -110,7 +110,7 @@ public:
uiTimer = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -120,7 +120,7 @@ public:
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -154,7 +154,7 @@ public:
}
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -202,7 +202,7 @@ public:
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -218,12 +218,12 @@ public:
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
return str_data;
}
- void Load(const char* in) OVERRIDE
+ void Load(const char* in) override
{
if (!in)
{
diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp
index 76ae6b06058..fb839650b86 100644
--- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp
+++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp
@@ -70,12 +70,12 @@ class npc_shadowfang_prisoner : public CreatureScript
public:
npc_shadowfang_prisoner() : CreatureScript("npc_shadowfang_prisoner") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_shadowfang_prisonerAI>(creature);
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -88,7 +88,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
InstanceScript* instance = creature->GetInstanceScript();
@@ -109,7 +109,7 @@ public:
InstanceScript* instance;
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -144,8 +144,8 @@ public:
}
}
- void Reset() OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void Reset() override { }
+ void EnterCombat(Unit* /*who*/) override { }
};
};
@@ -155,7 +155,7 @@ class npc_arugal_voidwalker : public CreatureScript
public:
npc_arugal_voidwalker() : CreatureScript("npc_arugal_voidwalker") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_arugal_voidwalkerAI>(creature);
}
@@ -171,12 +171,12 @@ public:
uint32 uiDarkOffering;
- void Reset() OVERRIDE
+ void Reset() override
{
uiDarkOffering = urand(200, 1000);
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!UpdateVictim())
return;
@@ -193,7 +193,7 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(TYPE_FENRUS, instance->GetData(TYPE_FENRUS) + 1);
}
@@ -226,7 +226,7 @@ class spell_shadowfang_keep_haunting_spirits : public SpellScriptLoader
aurEff->CalculatePeriodic(GetCaster());
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_shadowfang_keep_haunting_spirits_AuraScript::CalcPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_shadowfang_keep_haunting_spirits_AuraScript::HandleDummyTick, EFFECT_0, SPELL_AURA_DUMMY);
@@ -234,7 +234,7 @@ class spell_shadowfang_keep_haunting_spirits : public SpellScriptLoader
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_shadowfang_keep_haunting_spirits_AuraScript();
}
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp
index f4663c0f8ec..de54e87fc97 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp
@@ -66,7 +66,7 @@ class boss_baron_rivendare : public CreatureScript
public:
boss_baron_rivendare() : CreatureScript("boss_baron_rivendare") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_baron_rivendareAI>(creature);
}
@@ -86,7 +86,7 @@ public:
// uint32 RaiseDead_Timer;
uint32 SummonSkeletons_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
ShadowBolt_Timer = 5000;
Cleave_Timer = 8000;
@@ -97,25 +97,25 @@ public:
instance->SetData(TYPE_BARON, NOT_STARTED);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
//can't use entercombat(), boss' dmg aura sets near players in combat, before entering the room's door
instance->SetData(TYPE_BARON, IN_PROGRESS);
ScriptedAI::AttackStart(who);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
summoned->AI()->AttackStart(target);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(TYPE_BARON, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -134,14 +134,14 @@ public:
{
DoCastVictim(SPELL_CLEAVE);
//13 seconds until we should cast this again
- Cleave_Timer = 7000 + (rand()%10000);
+ Cleave_Timer = 7000 + (rand32() % 10000);
} else Cleave_Timer -= diff;
//MortalStrike
if (MortalStrike_Timer <= diff)
{
DoCastVictim(SPELL_MORTALSTRIKE);
- MortalStrike_Timer = 10000 + (rand()%15000);
+ MortalStrike_Timer = 10000 + (rand32() % 15000);
} else MortalStrike_Timer -= diff;
//RaiseDead
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp
index 6a0794ec586..a3eb66ac23c 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp
@@ -40,7 +40,7 @@ class boss_baroness_anastari : public CreatureScript
public:
boss_baroness_anastari() : CreatureScript("boss_baroness_anastari") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_baroness_anastariAI>(creature);
}
@@ -59,7 +59,7 @@ public:
uint32 Silence_Timer;
//uint32 Possess_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
BansheeWail_Timer = 1000;
BansheeCurse_Timer = 11000;
@@ -67,16 +67,16 @@ public:
//Possess_Timer = 35000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(TYPE_BARONESS, IN_PROGRESS);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -84,7 +84,7 @@ public:
//BansheeWail
if (BansheeWail_Timer <= diff)
{
- if (rand()%100 < 95)
+ if (rand32() % 100 < 95)
DoCastVictim(SPELL_BANSHEEWAIL);
//4 seconds until we should cast this again
BansheeWail_Timer = 4000;
@@ -93,7 +93,7 @@ public:
//BansheeCurse
if (BansheeCurse_Timer <= diff)
{
- if (rand()%100 < 75)
+ if (rand32() % 100 < 75)
DoCastVictim(SPELL_BANSHEECURSE);
//18 seconds until we should cast this again
BansheeCurse_Timer = 18000;
@@ -102,27 +102,12 @@ public:
//Silence
if (Silence_Timer <= diff)
{
- if (rand()%100 < 80)
+ if (rand32() % 100 < 80)
DoCastVictim(SPELL_SILENCE);
//13 seconds until we should cast this again
Silence_Timer = 13000;
} else Silence_Timer -= diff;
- //Possess
- /* if (Possess_Timer <= diff)
- {
- //Cast
- if (rand()%100 < 65)
- {
- Unit* target = NULL;
- target = SelectUnit(SELECT_TARGET_RANDOM, 0);
- if (target)DoCast(target, SPELL_POSSESS);
- }
- //50 seconds until we should cast this again
- Possess_Timer = 50000;
- } else Possess_Timer -= diff;
- */
-
DoMeleeAttackIfReady();
}
};
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp
index dd5d2f7347c..14d2a9a9f26 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp
@@ -85,7 +85,7 @@ class boss_cannon_master_willey : public CreatureScript
public:
boss_cannon_master_willey() : CreatureScript("boss_cannon_master_willey") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_cannon_master_willeyAI(creature);
}
@@ -99,7 +99,7 @@ public:
uint32 Shoot_Timer;
uint32 SummonRifleman_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Shoot_Timer = 1000;
Pummel_Timer = 7000;
@@ -107,7 +107,7 @@ public:
SummonRifleman_Timer = 15000;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->SummonCreature(11054, ADD_1X, ADD_1Y, ADD_1Z, ADD_1O, TEMPSUMMON_TIMED_DESPAWN, 240000);
me->SummonCreature(11054, ADD_2X, ADD_2Y, ADD_2Z, ADD_2O, TEMPSUMMON_TIMED_DESPAWN, 240000);
@@ -118,11 +118,11 @@ public:
me->SummonCreature(11054, ADD_9X, ADD_9Y, ADD_9Z, ADD_9O, TEMPSUMMON_TIMED_DESPAWN, 240000);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -132,7 +132,7 @@ public:
if (Pummel_Timer <= diff)
{
//Cast
- if (rand()%100 < 90) //90% chance to cast
+ if (rand32() % 100 < 90) //90% chance to cast
{
DoCastVictim(SPELL_PUMMEL);
}
@@ -144,7 +144,7 @@ public:
if (KnockAway_Timer <= diff)
{
//Cast
- if (rand()%100 < 80) //80% chance to cast
+ if (rand32() % 100 < 80) //80% chance to cast
{
DoCastVictim(SPELL_KNOCKAWAY);
}
@@ -165,7 +165,7 @@ public:
if (SummonRifleman_Timer <= diff)
{
//Cast
- switch (rand()%9)
+ switch (rand32() % 9)
{
case 0:
me->SummonCreature(11054, ADD_1X, ADD_1Y, ADD_1Z, ADD_1O, TEMPSUMMON_TIMED_DESPAWN, 240000);
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp
index 44e641bc9b8..f0a8c5c418f 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp
@@ -74,7 +74,7 @@ class boss_dathrohan_balnazzar : public CreatureScript
public:
boss_dathrohan_balnazzar() : CreatureScript("boss_dathrohan_balnazzar") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_dathrohan_balnazzarAI(creature);
}
@@ -93,7 +93,7 @@ public:
uint32 m_uiMindControl_Timer;
bool m_bTransformed;
- void Reset() OVERRIDE
+ void Reset() override
{
m_uiCrusadersHammer_Timer = 8000;
m_uiCrusaderStrike_Timer = 12000;
@@ -109,7 +109,7 @@ public:
me->UpdateEntry(NPC_DATHROHAN);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
static uint32 uiCount = sizeof(m_aSummonPoint)/sizeof(SummonDef);
@@ -119,11 +119,11 @@ public:
TEMPSUMMON_TIMED_DESPAWN, HOUR*IN_MILLISECONDS);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp
index eb552c503eb..8b6f2da87e4 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp
@@ -46,7 +46,7 @@ class boss_magistrate_barthilas : public CreatureScript
public:
boss_magistrate_barthilas() : CreatureScript("boss_magistrate_barthilas") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_magistrate_barthilasAI(creature);
}
@@ -61,7 +61,7 @@ public:
uint32 FuriousAnger_Timer;
uint32 AngerCount;
- void Reset() OVERRIDE
+ void Reset() override
{
DrainingBlow_Timer = 20000;
CrowdPummel_Timer = 15000;
@@ -75,7 +75,7 @@ public:
me->SetDisplayId(MODEL_HUMAN);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
//nothing to see here yet
@@ -83,16 +83,16 @@ public:
ScriptedAI::MoveInLineOfSight(who);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->SetDisplayId(MODEL_HUMAN);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp
index ae07d5347b9..b3fae9821aa 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp
@@ -41,7 +41,7 @@ class boss_maleki_the_pallid : public CreatureScript
public:
boss_maleki_the_pallid() : CreatureScript("boss_maleki_the_pallid") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_maleki_the_pallidAI>(creature);
}
@@ -59,23 +59,23 @@ public:
uint32 IceTomb_Timer;
uint32 DrainLife_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Frostbolt_Timer = 1000;
IceTomb_Timer = 16000;
DrainLife_Timer = 31000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(TYPE_PALLID, IN_PROGRESS);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -84,7 +84,7 @@ public:
//Frostbolt
if (Frostbolt_Timer <= diff)
{
- if (rand()%100 < 90)
+ if (rand32() % 100 < 90)
DoCastVictim(SPELL_FROSTBOLT);
Frostbolt_Timer = 3500;
} else Frostbolt_Timer -= diff;
@@ -92,7 +92,7 @@ public:
//IceTomb
if (IceTomb_Timer <= diff)
{
- if (rand()%100 < 65)
+ if (rand32() % 100 < 65)
DoCastVictim(SPELL_ICETOMB);
IceTomb_Timer = 28000;
} else IceTomb_Timer -= diff;
@@ -100,7 +100,7 @@ public:
//DrainLife
if (DrainLife_Timer <= diff)
{
- if (rand()%100 < 55)
+ if (rand32() % 100 < 55)
DoCastVictim(SPELL_DRAINLIFE);
DrainLife_Timer = 31000;
} else DrainLife_Timer -= diff;
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp
index 9bc263f36e7..1b5127a5e1c 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp
@@ -40,7 +40,7 @@ class boss_nerubenkan : public CreatureScript
public:
boss_nerubenkan() : CreatureScript("boss_nerubenkan") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_nerubenkanAI>(creature);
}
@@ -59,7 +59,7 @@ public:
uint32 CryptScarabs_Timer;
uint32 RaiseUndeadScarab_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
CryptScarabs_Timer = 3000;
EncasingWebs_Timer = 7000;
@@ -67,11 +67,11 @@ public:
RaiseUndeadScarab_Timer = 3000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(TYPE_NERUB, IN_PROGRESS);
}
@@ -83,7 +83,7 @@ public:
pUndeadScarab->AI()->AttackStart(victim);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp
index c26754c483b..dfc3e570e1b 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp
@@ -56,7 +56,7 @@ class boss_silver_hand_bosses : public CreatureScript
public:
boss_silver_hand_bosses() : CreatureScript("boss_silver_hand_bosses") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_silver_hand_bossesAI>(creature);
}
@@ -73,7 +73,7 @@ public:
uint32 HolyLight_Timer;
uint32 DivineShield_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
HolyLight_Timer = 20000;
DivineShield_Timer = 20000;
@@ -98,11 +98,11 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
switch (me->GetEntry())
{
@@ -130,7 +130,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp
index 1f6b823de70..f5ca0a42fad 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp
@@ -61,9 +61,9 @@ class boss_postmaster_malown : public CreatureScript
{
boss_postmaster_malownAI(Creature* creature) : BossAI(creature, TYPE_MALOWN) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_WAILINGDEAD, 19000); // lasts 6 sec
events.ScheduleEvent(EVENT_BACKHAND, 8000); // 2 sec stun
@@ -72,12 +72,12 @@ class boss_postmaster_malown : public CreatureScript
events.ScheduleEvent(EVENT_CALLOFTHEGRAVE, 25000);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_KILL);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -92,27 +92,27 @@ class boss_postmaster_malown : public CreatureScript
switch (eventId)
{
case EVENT_WAILINGDEAD:
- if (rand()%100 < 65) //65% chance to cast
+ if (rand32() % 100 < 65) //65% chance to cast
DoCastVictim(SPELL_WAILINGDEAD, true);
events.ScheduleEvent(EVENT_WAILINGDEAD, 19000);
break;
case EVENT_BACKHAND:
- if (rand()%100 < 45) //45% chance to cast
+ if (rand32() % 100 < 45) //45% chance to cast
DoCastVictim(SPELL_BACKHAND, true);
events.ScheduleEvent(EVENT_WAILINGDEAD, 8000);
break;
case EVENT_CURSEOFWEAKNESS:
- if (rand()%100 < 3) //3% chance to cast
+ if (rand32() % 100 < 3) //3% chance to cast
DoCastVictim(SPELL_CURSEOFWEAKNESS, true);
events.ScheduleEvent(EVENT_WAILINGDEAD, 20000);
break;
case EVENT_CURSEOFTONGUES:
- if (rand()%100 < 3) //3% chance to cast
+ if (rand32() % 100 < 3) //3% chance to cast
DoCastVictim(SPELL_CURSEOFTONGUES, true);
events.ScheduleEvent(EVENT_WAILINGDEAD, 22000);
break;
case EVENT_CALLOFTHEGRAVE:
- if (rand()%100 < 5) //5% chance to cast
+ if (rand32() % 100 < 5) //5% chance to cast
DoCastVictim(SPELL_CALLOFTHEGRAVE, true);
events.ScheduleEvent(EVENT_WAILINGDEAD, 25000);
break;
@@ -124,7 +124,7 @@ class boss_postmaster_malown : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_postmaster_malownAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp
index ad4d8787f01..df9b6a04af4 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp
@@ -43,7 +43,7 @@ class boss_ramstein_the_gorger : public CreatureScript
public:
boss_ramstein_the_gorger() : CreatureScript("boss_ramstein_the_gorger") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_ramstein_the_gorgerAI>(creature);
}
@@ -60,17 +60,17 @@ public:
uint32 Trample_Timer;
uint32 Knockout_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Trample_Timer = 3000;
Knockout_Timer = 12000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
for (uint8 i = 0; i < 30; ++i)
{
@@ -81,7 +81,7 @@ public:
instance->SetData(TYPE_RAMSTEIN, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp
index f0e3bdf7668..a45b3594da0 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp
@@ -41,7 +41,7 @@ class boss_timmy_the_cruel : public CreatureScript
public:
boss_timmy_the_cruel() : CreatureScript("boss_timmy_the_cruel") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_timmy_the_cruelAI(creature);
}
@@ -53,13 +53,13 @@ public:
uint32 RavenousClaw_Timer;
bool HasYelled;
- void Reset() OVERRIDE
+ void Reset() override
{
RavenousClaw_Timer = 10000;
HasYelled = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (!HasYelled)
{
@@ -68,7 +68,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
index 9ceaf8cb85b..ecdc66d3e0f 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
@@ -72,7 +72,7 @@ class instance_stratholme : public InstanceMapScript
std::set<uint64> abomnationGUID;
EventMap events;
- void Initialize() OVERRIDE
+ void Initialize() override
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
EncounterState[i] = NOT_STARTED;
@@ -126,7 +126,7 @@ class instance_stratholme : public InstanceMapScript
}
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -146,7 +146,7 @@ class instance_stratholme : public InstanceMapScript
}
}
- void OnCreatureRemove(Creature* creature) OVERRIDE
+ void OnCreatureRemove(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -160,7 +160,7 @@ class instance_stratholme : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -213,7 +213,7 @@ class instance_stratholme : public InstanceMapScript
}
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -235,8 +235,7 @@ class instance_stratholme : public InstanceMapScript
EncounterState[0] = data;
if (Creature* ysidaTrigger = instance->GetCreature(ysidaTriggerGUID))
{
- Position ysidaPos;
- ysidaTrigger->GetPosition(&ysidaPos);
+ Position ysidaPos = ysidaTrigger->GetPosition();
ysidaTrigger->SummonCreature(NPC_YSIDA, ysidaPos, TEMPSUMMON_TIMED_DESPAWN, 1800000);
}
events.CancelEvent(EVENT_BARON_RUN);
@@ -357,7 +356,7 @@ class instance_stratholme : public InstanceMapScript
SaveToDB();
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -369,7 +368,7 @@ class instance_stratholme : public InstanceMapScript
return saveStream.str();
}
- void Load(const char* in) OVERRIDE
+ void Load(const char* in) override
{
if (!in)
{
@@ -394,7 +393,7 @@ class instance_stratholme : public InstanceMapScript
OUT_LOAD_INST_DATA_COMPLETE;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -418,7 +417,7 @@ class instance_stratholme : public InstanceMapScript
return 0;
}
- uint64 GetData64(uint32 data) const OVERRIDE
+ uint64 GetData64(uint32 data) const override
{
switch (data)
{
@@ -430,7 +429,7 @@ class instance_stratholme : public InstanceMapScript
return 0;
}
- void Update(uint32 diff) OVERRIDE
+ void Update(uint32 diff) override
{
events.Update(diff);
@@ -461,7 +460,7 @@ class instance_stratholme : public InstanceMapScript
}
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_stratholme_InstanceMapScript(map);
}
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp
index 3b622885ce7..4109328afda 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp
@@ -46,7 +46,7 @@ class go_gauntlet_gate : public GameObjectScript
public:
go_gauntlet_gate() : GameObjectScript("go_gauntlet_gate") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
InstanceScript* instance = go->GetInstanceScript();
@@ -93,7 +93,7 @@ class npc_freed_soul : public CreatureScript
public:
npc_freed_soul() : CreatureScript("npc_freed_soul") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_freed_soulAI(creature);
}
@@ -102,12 +102,12 @@ public:
{
npc_freed_soulAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
Talk(SAY_ZAPPED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
};
};
@@ -135,7 +135,7 @@ class npc_restless_soul : public CreatureScript
public:
npc_restless_soul() : CreatureScript("npc_restless_soul") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_restless_soulAI(creature);
}
@@ -148,16 +148,16 @@ public:
uint32 Die_Timer;
bool Tagged;
- void Reset() OVERRIDE
+ void Reset() override
{
Tagger = 0;
Die_Timer = 5000;
Tagged = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (Tagged || spell->Id != SPELL_EGAN_BLASTER)
return;
@@ -170,24 +170,24 @@ public:
Tagger = caster->GetGUID();
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->CastSpell(summoned, SPELL_SOUL_FREED, false);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Tagged)
me->SummonCreature(NPC_FREED, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, 300000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (Tagged)
{
if (Die_Timer <= diff)
{
- if (Unit* temp = Unit::GetUnit(*me, Tagger))
+ if (Unit* temp = ObjectAccessor::GetUnit(*me, Tagger))
{
if (Player* player = temp->ToPlayer())
player->KilledMonsterCredit(NPC_RESTLESS, me->GetGUID());
@@ -217,7 +217,7 @@ class npc_spectral_ghostly_citizen : public CreatureScript
public:
npc_spectral_ghostly_citizen() : CreatureScript("npc_spectral_ghostly_citizen") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_spectral_ghostly_citizenAI(creature);
}
@@ -229,21 +229,21 @@ public:
uint32 Die_Timer;
bool Tagged;
- void Reset() OVERRIDE
+ void Reset() override
{
Die_Timer = 5000;
Tagged = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
if (!Tagged && spell->Id == SPELL_EGAN_BLASTER)
Tagged = true;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Tagged)
{
@@ -256,7 +256,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (Tagged)
{
@@ -271,7 +271,7 @@ public:
DoMeleeAttackIfReady();
}
- void ReceiveEmote(Player* player, uint32 emote) OVERRIDE
+ void ReceiveEmote(Player* player, uint32 emote) override
{
switch (emote)
{
diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp
index d395bfd6e0c..0f33103fc2c 100644
--- a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp
+++ b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp
@@ -51,7 +51,7 @@ class instance_sunken_temple : public InstanceMapScript
public:
instance_sunken_temple() : InstanceMapScript("instance_sunken_temple", 109) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_sunken_temple_InstanceMapScript(map);
}
@@ -79,7 +79,7 @@ public:
bool s5;
bool s6;
- void Initialize() OVERRIDE
+ void Initialize() override
{
GOAtalaiStatue1 = 0;
GOAtalaiStatue2 = 0;
@@ -99,7 +99,7 @@ public:
s6 = false;
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -193,13 +193,13 @@ public:
}
*/
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
if (type == EVENT_STATE)
State = data;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == EVENT_STATE)
return State;
diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp
index 80a9f1600b6..327fc0cace3 100644
--- a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp
+++ b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp
@@ -41,7 +41,7 @@ class at_malfurion_stormrage : public AreaTriggerScript
public:
at_malfurion_stormrage() : AreaTriggerScript("at_malfurion_stormrage") { }
- bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE
+ bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override
{
if (player->GetInstanceScript() && !player->FindNearestCreature(15362, 15))
player->SummonCreature(15362, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), -1.52f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 100000);
@@ -58,7 +58,7 @@ class go_atalai_statue : public GameObjectScript
public:
go_atalai_statue() : GameObjectScript("go_atalai_statue") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (InstanceScript* instance = player->GetInstanceScript())
instance->SetData(EVENT_STATE, go->GetEntry());
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
index 9dcbed211bb..eb9b6c2a1df 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
@@ -89,7 +89,7 @@ public:
bool IsIntro;
bool Enraged;
- void Reset() OVERRIDE
+ void Reset() override
{
SlashTimer = 11000;
StompTimer = 30000;
@@ -108,19 +108,19 @@ public:
instance->SetBossState(DATA_BRUTALLUS, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(YELL_AGGRO);
instance->SetBossState(DATA_BRUTALLUS, IN_PROGRESS);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(YELL_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(YELL_DEATH);
@@ -130,7 +130,7 @@ public:
me->SummonCreature(NPC_FELMYST, x, y, z + 30, me->GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN, 0);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
if (!Intro)
ScriptedAI::EnterEvadeMode();
@@ -167,7 +167,7 @@ public:
IsIntro = false;
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who || Intro || IsIntro)
return;
@@ -252,7 +252,7 @@ public:
}
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!me->IsValidAttackTarget(who))
return;
@@ -267,7 +267,7 @@ public:
ScriptedAI::MoveInLineOfSight(who);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (IsIntro)
{
@@ -335,7 +335,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetSunwellPlateauAI<boss_brutallusAI>(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
index 73e218a6e35..3701d37ed7f 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
@@ -97,7 +97,7 @@ public:
uint32 ConflagrationTimer;
uint32 EnrageTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
Enraged = false;
@@ -123,7 +123,7 @@ public:
instance->SetBossState(DATA_EREDAR_TWINS, NOT_STARTED);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
DoZoneInCombat();
@@ -134,13 +134,13 @@ public:
instance->SetBossState(DATA_EREDAR_TWINS, IN_PROGRESS);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
- if (rand()%4 == 0)
+ if (rand32() % 4 == 0)
Talk(YELL_SAC_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
// only if ALY death
if (SisterDeath)
@@ -153,7 +153,7 @@ public:
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
}
- void SpellHitTarget(Unit* target, const SpellInfo* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, const SpellInfo* spell) override
{
switch (spell->Id)
{
@@ -196,7 +196,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!SisterDeath)
{
@@ -222,7 +222,7 @@ public:
me->InterruptSpell(CURRENT_GENERIC_SPELL);
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_CONFLAGRATION);
- ConflagrationTimer = 30000+(rand()%5000);
+ ConflagrationTimer = 30000 + (rand32() % 5000);
}
} else ConflagrationTimer -= diff;
}
@@ -242,7 +242,7 @@ public:
Talk(EMOTE_SHADOW_NOVA, target);
Talk(YELL_SHADOW_NOVA);
}
- ShadownovaTimer = 30000+(rand()%5000);
+ ShadownovaTimer = 30000 + (rand32() % 5000);
}
} else ShadownovaTimer -=diff;
}
@@ -253,7 +253,7 @@ public:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_CONFOUNDING_BLOW);
- ConfoundingblowTimer = 20000 + (rand()%5000);
+ ConfoundingblowTimer = 20000 + (rand32() % 5000);
}
} else ConfoundingblowTimer -=diff;
@@ -304,7 +304,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetSunwellPlateauAI<boss_sacrolashAI>(creature);
};
@@ -340,7 +340,7 @@ public:
uint32 FlamesearTimer;
uint32 EnrageTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
Enraged = false;
@@ -368,7 +368,7 @@ public:
instance->SetBossState(DATA_EREDAR_TWINS, NOT_STARTED);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
DoZoneInCombat();
@@ -379,13 +379,13 @@ public:
instance->SetBossState(DATA_EREDAR_TWINS, IN_PROGRESS);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!me->IsInCombat())
ScriptedAI::AttackStart(who);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!who || me->GetVictim())
return;
@@ -405,13 +405,13 @@ public:
IntroStepCounter = 0;
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
- if (rand()%4 == 0)
+ if (rand32() % 4 == 0)
Talk(YELL_ALY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (SisterDeath)
{
@@ -422,7 +422,7 @@ public:
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
}
- void SpellHitTarget(Unit* target, const SpellInfo* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, const SpellInfo* spell) override
{
switch (spell->Id)
{
@@ -509,7 +509,7 @@ public:
return 10000;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (IntroStepCounter < 9)
{
@@ -552,7 +552,7 @@ public:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_SHADOW_NOVA);
- ShadownovaTimer= 30000+(rand()%5000);
+ ShadownovaTimer = 30000 + (rand32() % 5000);
}
} else ShadownovaTimer -=diff;
}
@@ -566,7 +566,7 @@ public:
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0);
if (target)
DoCast(target, SPELL_CONFLAGRATION);
- ConflagrationTimer = 30000+(rand()%5000);
+ ConflagrationTimer = 30000 + (rand32() % 5000);
if (!SisterDeath)
{
@@ -617,7 +617,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetSunwellPlateauAI<boss_alythessAI>(creature);
};
@@ -628,7 +628,7 @@ class npc_shadow_image : public CreatureScript
public:
npc_shadow_image() : CreatureScript("npc_shadow_image") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_shadow_imageAI(creature);
};
@@ -641,17 +641,17 @@ public:
uint32 KillTimer;
uint32 DarkstrikeTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- ShadowfuryTimer = 5000 + (rand()%15000);
+ ShadowfuryTimer = 5000 + (rand32() % 15000);
DarkstrikeTimer = 3000;
KillTimer = 15000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void SpellHitTarget(Unit* target, const SpellInfo* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, const SpellInfo* spell) override
{
switch (spell->Id)
{
@@ -669,7 +669,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!me->HasAura(SPELL_IMAGE_VISUAL))
DoCast(me, SPELL_IMAGE_VISUAL);
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
index 02913f361e5..120d3a0b231 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
@@ -128,7 +128,7 @@ public:
float breathX, breathY;
- void Reset() OVERRIDE
+ void Reset() override
{
phase = PHASE_NONE;
@@ -146,7 +146,7 @@ public:
instance->SetBossState(DATA_FELMYST, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_BERSERK, 600000);
@@ -159,36 +159,36 @@ public:
instance->SetBossState(DATA_FELMYST, IN_PROGRESS);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (phase != PHASE_FLIGHT)
ScriptedAI::AttackStart(who);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (phase != PHASE_FLIGHT)
ScriptedAI::MoveInLineOfSight(who);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(YELL_KILL);
}
- void JustRespawned() OVERRIDE
+ void JustRespawned() override
{
Talk(YELL_BIRTH);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(YELL_DEATH);
instance->SetBossState(DATA_FELMYST, DONE);
}
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
// workaround for linked aura
/*if (spell->Id == SPELL_VAPOR_FORCE)
@@ -211,7 +211,7 @@ public:
}
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() == NPC_DEAD)
{
@@ -221,13 +221,13 @@ public:
}
}
- void MovementInform(uint32, uint32) OVERRIDE
+ void MovementInform(uint32, uint32) override
{
if (phase == PHASE_FLIGHT)
events.ScheduleEvent(EVENT_FLIGHT_SEQUENCE, 1);
}
- void DamageTaken(Unit*, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit*, uint32 &damage) override
{
if (phase != PHASE_GROUND && damage >= me->GetHealth())
damage = 0;
@@ -280,7 +280,7 @@ public:
{
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150, true);
if (!target)
- target = Unit::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID));
+ target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID));
if (!target)
{
@@ -288,7 +288,7 @@ public:
return;
}
- if (Creature* Vapor = me->SummonCreature(NPC_VAPOR, target->GetPositionX()-5+rand()%10, target->GetPositionY()-5+rand()%10, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 9000))
+ if (Creature* Vapor = me->SummonCreature(NPC_VAPOR, target->GetPositionX() - 5 + rand32() % 10, target->GetPositionY() - 5 + rand32() % 10, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 9000))
{
Vapor->AI()->AttackStart(target);
me->InterruptNonMeleeSpells(false);
@@ -306,7 +306,7 @@ public:
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150, true);
if (!target)
- target = Unit::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID));
+ target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID));
if (!target)
{
@@ -315,7 +315,7 @@ public:
}
//target->CastSpell(target, SPELL_VAPOR_SUMMON, true); need core support
- if (Creature* pVapor = me->SummonCreature(NPC_VAPOR, target->GetPositionX()-5+rand()%10, target->GetPositionY()-5+rand()%10, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 9000))
+ if (Creature* pVapor = me->SummonCreature(NPC_VAPOR, target->GetPositionX() - 5 + rand32() % 10, target->GetPositionY() - 5 + rand32() % 10, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 9000))
{
if (pVapor->AI())
pVapor->AI()->AttackStart(target);
@@ -335,7 +335,7 @@ public:
{
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150, true);
if (!target)
- target = Unit::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID));
+ target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID));
if (!target)
{
@@ -393,7 +393,7 @@ public:
++uiFlightCount;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
{
@@ -501,7 +501,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetSunwellPlateauAI<boss_felmystAI>(creature);
}
@@ -512,7 +512,7 @@ class npc_felmyst_vapor : public CreatureScript
public:
npc_felmyst_vapor() : CreatureScript("npc_felmyst_vapor") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_felmyst_vaporAI(creature);
}
@@ -525,14 +525,14 @@ public:
me->SetSpeed(MOVE_RUN, 0.8f);
}
- void Reset() OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void Reset() override { }
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
//DoCast(me, SPELL_VAPOR_FORCE, true); core bug
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!me->GetVictim())
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
@@ -546,7 +546,7 @@ class npc_felmyst_trail : public CreatureScript
public:
npc_felmyst_trail() : CreatureScript("npc_felmyst_trail") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_felmyst_trailAI(creature);
}
@@ -561,12 +561,12 @@ public:
me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 0.01f); // core bug
}
- void Reset() OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void Reset() override { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void AttackStart(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
};
};
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
index 46bd5bcbfdc..b7e03fe0459 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
@@ -134,7 +134,7 @@ public:
uint64 SathGUID;
uint64 DoorGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
SathGUID = instance->GetData64(DATA_SATHROVARR);
instance->SetBossState(DATA_KALECGOS, NOT_STARTED);
@@ -166,7 +166,7 @@ public:
isBanished = false;
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
bJustReset = true;
me->SetVisible(false);
@@ -174,7 +174,7 @@ public:
ScriptedAI::EnterEvadeMode();
}
- void DoAction(int32 param) OVERRIDE
+ void DoAction(int32 param) override
{
switch (param)
{
@@ -189,7 +189,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (TalkTimer)
{
@@ -285,7 +285,7 @@ public:
if (WildMagicTimer <= diff)
{
- DoCastAOE(WildMagic[rand()%6]);
+ DoCastAOE(WildMagic[rand32() % 6]);
WildMagicTimer = 20000;
} else WildMagicTimer -= diff;
@@ -298,7 +298,7 @@ public:
Unit* target = (*itr)->getTarget();
if (target
&& target->GetTypeId() == TYPEID_PLAYER
- && target->GetGUID() != me->GetVictim()->GetGUID()
+ && (!target->GetVictim() || target->GetGUID() != me->EnsureVictim()->GetGUID())
&& target->GetPositionZ() > me->GetPositionZ() - 5
&& !target->HasAura(AURA_SPECTRAL_EXHAUSTION))
{
@@ -312,11 +312,11 @@ public:
}
std::list<Unit*>::const_iterator i = targetList.begin();
- advance(i, rand()%targetList.size());
+ advance(i, rand32() % targetList.size());
if ((*i))
{
(*i)->CastSpell((*i), SPELL_SPECTRAL_BLAST, true);
- SpectralBlastTimer = 20000+rand()%5000;
+ SpectralBlastTimer = 20000 + rand32() % 5000;
} else SpectralBlastTimer = 1000;
} else SpectralBlastTimer -= diff;
@@ -324,7 +324,7 @@ public:
}
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (bJustReset)//boss is invisible, don't attack
return;
@@ -337,13 +337,13 @@ public:
}
}
- void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* done_by, uint32 &damage) override
{
if (damage >= me->GetHealth() && done_by != me)
damage = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
me->SetStandState(UNIT_STAND_STATE_STAND);
Talk(SAY_EVIL_AGGRO);
@@ -352,12 +352,12 @@ public:
instance->SetBossState(DATA_KALECGOS, IN_PROGRESS);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_EVIL_SLAY);
}
- void MovementInform(uint32 type, uint32 /*id*/) OVERRIDE
+ void MovementInform(uint32 type, uint32 /*id*/) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -428,7 +428,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetSunwellPlateauAI<boss_kalecgosAI>(creature);
}
@@ -439,7 +439,7 @@ class boss_kalec : public CreatureScript
public:
boss_kalec() : CreatureScript("boss_kalec") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_kalecAI>(creature);
}
@@ -462,7 +462,7 @@ public:
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
SathGUID = instance->GetData64(DATA_SATHROVARR);
@@ -474,7 +474,7 @@ public:
isEnraged = false;
}
- void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* done_by, uint32 &damage) override
{
if (done_by->GetGUID() != SathGUID)
damage = 0;
@@ -482,7 +482,7 @@ public:
damage *= 3;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!me->HasAura(AURA_SPECTRAL_INVISIBILITY))
me->CastSpell(me, AURA_SPECTRAL_INVISIBILITY, true);
@@ -540,7 +540,7 @@ class kalecgos_teleporter : public GameObjectScript
public:
kalecgos_teleporter() : GameObjectScript("kalecgos_teleporter") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
Map* map = go->GetMap();
if (!map->IsDungeon())
@@ -572,7 +572,7 @@ class boss_sathrovarr : public CreatureScript
public:
boss_sathrovarr() : CreatureScript("boss_sathrovarr") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_sathrovarrAI>(creature);
}
@@ -600,7 +600,7 @@ public:
bool isEnraged;
bool isBanished;
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFullHealth();//dunno why it does not resets health at evade..
me->setActive(true);
@@ -625,7 +625,7 @@ public:
TeleportAllPlayersBack();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (Creature* Kalec = me->SummonCreature(NPC_KALEC, me->GetPositionX() + 10, me->GetPositionY() + 5, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 0))
{
@@ -637,21 +637,21 @@ public:
Talk(SAY_SATH_AGGRO);
}
- void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* done_by, uint32 &damage) override
{
if (damage >= me->GetHealth() && done_by != me)
damage = 0;
}
- void KilledUnit(Unit* target) OVERRIDE
+ void KilledUnit(Unit* target) override
{
if (target->GetGUID() == KalecGUID)
{
TeleportAllPlayersBack();
if (Creature* Kalecgos = ObjectAccessor::GetCreature(*me, KalecgosGUID))
{
- CAST_AI(boss_kalecgos::boss_kalecgosAI, Kalecgos->AI())->TalkTimer = 1;
- CAST_AI(boss_kalecgos::boss_kalecgosAI, Kalecgos->AI())->isFriendly = false;
+ ENSURE_AI(boss_kalecgos::boss_kalecgosAI, Kalecgos->AI())->TalkTimer = 1;
+ ENSURE_AI(boss_kalecgos::boss_kalecgosAI, Kalecgos->AI())->isFriendly = false;
}
EnterEvadeMode();
return;
@@ -659,15 +659,15 @@ public:
Talk(SAY_SATH_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_SATH_DEATH);
me->SetPosition(me->GetPositionX(), me->GetPositionY(), DRAGON_REALM_Z, me->GetOrientation());
TeleportAllPlayersBack();
if (Creature* Kalecgos = ObjectAccessor::GetCreature(*me, KalecgosGUID))
{
- CAST_AI(boss_kalecgos::boss_kalecgosAI, Kalecgos->AI())->TalkTimer = 1;
- CAST_AI(boss_kalecgos::boss_kalecgosAI, Kalecgos->AI())->isFriendly = true;
+ ENSURE_AI(boss_kalecgos::boss_kalecgosAI, Kalecgos->AI())->TalkTimer = 1;
+ ENSURE_AI(boss_kalecgos::boss_kalecgosAI, Kalecgos->AI())->isFriendly = true;
}
instance->SetBossState(DATA_KALECGOS, DONE);
@@ -679,18 +679,21 @@ public:
if (!map->IsDungeon())
return;
- Map::PlayerList const &PlayerList = map->GetPlayers();
- for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
+ Map::PlayerList const &playerList = map->GetPlayers();
+ Position homePos = me->GetHomePosition();
+ for (Map::PlayerList::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr)
{
- if (i->GetSource()->GetPositionZ() <= DRAGON_REALM_Z-5)
+ Player* player = itr->GetSource();
+ if (player->IsInDist(&homePos, 50.0f) && player->GetPositionZ() <= DEMON_REALM_Z + 10.f)
{
- i->GetSource()->RemoveAura(AURA_SPECTRAL_REALM);
- i->GetSource()->TeleportTo(me->GetMap()->GetId(), i->GetSource()->GetPositionX(), i->GetSource()->GetPositionY(), DRAGON_REALM_Z+5, i->GetSource()->GetOrientation());
+ player->RemoveAura(AURA_SPECTRAL_REALM);
+ player->TeleportTo(me->GetMap()->GetId(), player->GetPositionX(),
+ player->GetPositionY(), DRAGON_REALM_Z + 5, player->GetOrientation());
}
}
}
- void DoAction(int32 param) OVERRIDE
+ void DoAction(int32 param) override
{
switch (param)
{
@@ -705,7 +708,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!me->HasAura(AURA_SPECTRAL_INVISIBILITY))
me->CastSpell(me, AURA_SPECTRAL_INVISIBILITY, true);
@@ -763,7 +766,7 @@ public:
ThreatContainer::StorageType threatlist = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
{
- if (Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid()))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()))
if (unit->GetPositionZ() > me->GetPositionZ() + 5)
me->getThreatManager().modifyThreatPercent(unit, -100);
}
@@ -772,10 +775,10 @@ public:
if (ShadowBoltTimer <= diff)
{
- if (!(rand()%5))
+ if (!(rand32() % 5))
Talk(SAY_SATH_SPELL1);
DoCast(me, SPELL_SHADOW_BOLT);
- ShadowBoltTimer = 7000+(rand()%3000);
+ ShadowBoltTimer = 7000 + (rand32() % 3000);
} else ShadowBoltTimer -= diff;
if (AgonyCurseTimer <= diff)
@@ -789,7 +792,7 @@ public:
if (CorruptionStrikeTimer <= diff)
{
- if (!(rand()%5))Talk(SAY_SATH_SPELL2);
+ if (!(rand32() % 5))Talk(SAY_SATH_SPELL2);
DoCastVictim(SPELL_CORRUPTION_STRIKE);
CorruptionStrikeTimer = 13000;
} else CorruptionStrikeTimer -= diff;
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
index e8b112aa1cd..1f66f834b28 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
@@ -234,7 +234,7 @@ class boss_kalecgos_kj : public CreatureScript
public:
boss_kalecgos_kj() : CreatureScript("boss_kalecgos_kj") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_kalecgos_kjAI>(creature);
}
@@ -250,7 +250,7 @@ public:
uint8 OrbsEmpowered;
uint8 EmpowerCount;
- void Reset() OVERRIDE
+ void Reset() override
{
OrbsEmpowered = 0;
EmpowerCount = 0;
@@ -332,7 +332,7 @@ public:
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
}
@@ -360,7 +360,7 @@ class go_orb_of_the_blue_flight : public GameObjectScript
public:
go_orb_of_the_blue_flight() : GameObjectScript("go_orb_of_the_blue_flight") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (go->GetUInt32Value(GAMEOBJECT_FACTION) == 35)
{
@@ -370,7 +370,7 @@ public:
go->SetUInt32Value(GAMEOBJECT_FACTION, 0);
if (Creature* pKalec = ObjectAccessor::GetCreature(*player, instance->GetData64(DATA_KALECGOS_KJ)))
- CAST_AI(boss_kalecgos_kj::boss_kalecgos_kjAI, pKalec->AI())->SetRingOfBlueFlames();
+ ENSURE_AI(boss_kalecgos_kj::boss_kalecgos_kjAI, pKalec->AI())->SetRingOfBlueFlames();
go->Refresh();
}
@@ -384,7 +384,7 @@ class npc_kiljaeden_controller : public CreatureScript
public:
npc_kiljaeden_controller() : CreatureScript("npc_kiljaeden_controller") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_kiljaeden_controllerAI>(creature);
}
@@ -408,7 +408,7 @@ public:
uint32 phase;
uint8 deceiverDeathCount;
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -417,12 +417,12 @@ public:
ScriptedAI::InitializeAI();
}
- void Reset() OVERRIDE
+ void Reset() override
{
phase = PHASE_DECEIVERS;
if (Creature* pKalecKJ = ObjectAccessor::GetCreature((*me), instance->GetData64(DATA_KALECGOS_KJ)))
- CAST_AI(boss_kalecgos_kj::boss_kalecgos_kjAI, pKalecKJ->AI())->ResetOrbs();
+ ENSURE_AI(boss_kalecgos_kj::boss_kalecgos_kjAI, pKalecKJ->AI())->ResetOrbs();
deceiverDeathCount = 0;
bSummonedDeceivers = false;
bKiljaedenDeath = false;
@@ -430,7 +430,7 @@ public:
summons.DespawnAll();
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
switch (summoned->GetEntry())
{
@@ -450,7 +450,7 @@ public:
summons.Summon(summoned);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (uiRandomSayTimer < diff)
{
@@ -513,12 +513,12 @@ public:
bool OrbActivated;
bool SpeechBegins;
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
// Scripted_NoMovementAI::InitializeAI();
}
- void Reset() OVERRIDE
+ void Reset() override
{
TimerIsDeactivated[TIMER_SPEECH] = false;
Timer[TIMER_SPEECH] = 0;
@@ -577,7 +577,7 @@ public:
TimerIsDeactivated[TIMER_SUMMON_SHILEDORB] = true;
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned->GetEntry() == NPC_ARMAGEDDON_TARGET)
{
@@ -592,19 +592,19 @@ public:
summons.Summon(summoned);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_KJ_DEATH);
summons.DespawnAll();
instance->SetBossState(DATA_KILJAEDEN, DONE);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_KJ_SLAY);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
ScriptedAI::EnterEvadeMode();
@@ -612,10 +612,10 @@ public:
// Reset the controller
if (Creature* pControl = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KILJAEDEN_CONTROLLER)))
- CAST_AI(npc_kiljaeden_controller::npc_kiljaeden_controllerAI, pControl->AI())->Reset();
+ ENSURE_AI(npc_kiljaeden_controller::npc_kiljaeden_controllerAI, pControl->AI())->Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
}
@@ -650,7 +650,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || Phase < PHASE_NORMAL)
return;
@@ -800,10 +800,10 @@ public:
switch (Phase)
{
case PHASE_SACRIFICE:
- CAST_AI(boss_kalecgos_kj::boss_kalecgos_kjAI, pKalec->AI())->EmpowerOrb(true);
+ ENSURE_AI(boss_kalecgos_kj::boss_kalecgos_kjAI, pKalec->AI())->EmpowerOrb(true);
break;
default:
- CAST_AI(boss_kalecgos_kj::boss_kalecgos_kjAI, pKalec->AI())->EmpowerOrb(false);
+ ENSURE_AI(boss_kalecgos_kj::boss_kalecgos_kjAI, pKalec->AI())->EmpowerOrb(false);
break;
}
}
@@ -874,7 +874,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetSunwellPlateauAI<boss_kiljaedenAI>(creature);
}
@@ -898,7 +898,7 @@ public:
uint32 ShadowBoltVolleyTimer;
uint32 FelfirePortalTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
/// @todo Timers!
ShadowBoltVolleyTimer = urand(8000, 14000); // So they don't all cast it in the same moment.
@@ -906,13 +906,13 @@ public:
instance->SetBossState(DATA_KILJAEDEN, NOT_STARTED);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->setFaction(me->getFaction());
summoned->SetLevel(me->getLevel());
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
instance->SetBossState(DATA_KILJAEDEN, IN_PROGRESS);
if (Creature* pControl = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KILJAEDEN_CONTROLLER)))
@@ -921,13 +921,13 @@ public:
me->InterruptNonMeleeSpells(true);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* pControl = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KILJAEDEN_CONTROLLER)))
- ++(CAST_AI(npc_kiljaeden_controller::npc_kiljaeden_controllerAI, pControl->AI())->deceiverDeathCount);
+ ++(ENSURE_AI(npc_kiljaeden_controller::npc_kiljaeden_controllerAI, pControl->AI())->deceiverDeathCount);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!me->IsInCombat())
DoCast(me, SPELL_SHADOW_CHANNELING);
@@ -956,7 +956,7 @@ public:
ThreatContainer::StorageType const &threatlist = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
{
- Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (unit)
pPortal->AddThreat(unit, 1.0f);
}
@@ -968,7 +968,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetSunwellPlateauAI<npc_hand_of_the_deceiverAI>(creature);
}
@@ -980,7 +980,7 @@ class npc_felfire_portal : public CreatureScript
public:
npc_felfire_portal() : CreatureScript("npc_felfire_portal") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_felfire_portalAI(creature);
}
@@ -994,19 +994,19 @@ public:
uint32 uiSpawnFiendTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiSpawnFiendTimer = 5000;
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_NON_ATTACKABLE);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->setFaction(me->getFaction());
summoned->SetLevel(me->getLevel());
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1027,7 +1027,7 @@ class npc_volatile_felfire_fiend : public CreatureScript
public:
npc_volatile_felfire_fiend() : CreatureScript("npc_volatile_felfire_fiend") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_volatile_felfire_fiendAI(creature);
}
@@ -1040,19 +1040,19 @@ public:
bool bLockedTarget;
- void Reset() OVERRIDE
+ void Reset() override
{
uiExplodeTimer = 2000;
bLockedTarget = false;
}
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
if (damage > me->GetHealth())
DoCast(me, SPELL_FELFIRE_FISSION, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1084,7 +1084,7 @@ class npc_armageddon : public CreatureScript
public:
npc_armageddon() : CreatureScript("npc_armageddon") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_armageddonAI(creature);
}
@@ -1099,13 +1099,13 @@ public:
uint8 spell;
uint32 uiTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
spell = 0;
uiTimer = 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (uiTimer <= diff)
{
@@ -1141,7 +1141,7 @@ class npc_shield_orb : public CreatureScript
public:
npc_shield_orb() : CreatureScript("npc_shield_orb") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_shield_orbAI>(creature);
}
@@ -1161,7 +1161,7 @@ public:
uint32 uiCheckTimer;
float x, y, r, c, mx, my;
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetDisableGravity(true);
bPointReached = true;
@@ -1171,10 +1171,10 @@ public:
c = 0;
mx = ShieldOrbLocations[0][0];
my = ShieldOrbLocations[0][1];
- bClockwise = urand(0, 1);
+ bClockwise = roll_chance_i(50);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (bPointReached)
{
@@ -1191,8 +1191,8 @@ public:
bPointReached = false;
uiCheckTimer = 1000;
me->GetMotionMaster()->MovePoint(1, x, y, SHIELD_ORB_Z);
- c += M_PI/32;
- if (c >= 2*M_PI) c = 0;
+ c += float(M_PI)/32;
+ if (c >= 2 * float(M_PI)) c = 0;
}
else
{
@@ -1212,7 +1212,7 @@ public:
} else uiTimer -= diff;
}
- void MovementInform(uint32 type, uint32 /*id*/) OVERRIDE
+ void MovementInform(uint32 type, uint32 /*id*/) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -1228,7 +1228,7 @@ class npc_sinster_reflection : public CreatureScript
public:
npc_sinster_reflection() : CreatureScript("npc_sinster_reflection") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_sinster_reflectionAI(creature);
}
@@ -1240,7 +1240,7 @@ public:
uint8 victimClass;
uint32 uiTimer[3];
- void Reset() OVERRIDE
+ void Reset() override
{
uiTimer[0] = 0;
uiTimer[1] = 0;
@@ -1248,14 +1248,14 @@ public:
victimClass = 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
if ((victimClass == 0) && me->GetVictim())
{
- victimClass = me->GetVictim()->getClass();
+ victimClass = me->EnsureVictim()->getClass();
switch (victimClass)
{
case CLASS_DRUID:
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
index 6980dbfb9c2..6ccce62cb6f 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
@@ -123,7 +123,7 @@ public:
uint32 BlackHoleSummonTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
BlackHoleSummonTimer = 15000;
DoCastAOE(SPELL_NEGATIVE_ENERGY_E, false);
@@ -133,7 +133,7 @@ public:
instance->SetBossState(DATA_MURU, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoCastAOE(SPELL_NEGATIVE_ENERGY_E, true);
DoCast(me, SPELL_ENTROPIUS_SPAWN, false);
@@ -141,7 +141,7 @@ public:
instance->SetBossState(DATA_MURU, IN_PROGRESS);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
switch (summoned->GetEntry())
{
@@ -159,13 +159,13 @@ public:
Summons.Summon(summoned);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Summons.DespawnAll();
instance->SetBossState(DATA_MURU, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -195,7 +195,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetSunwellPlateauAI<boss_entropiusAI>(creature);
}
@@ -222,7 +222,7 @@ public:
bool DarkFiend;
- void Reset() OVERRIDE
+ void Reset() override
{
DarkFiend = false;
Phase = 1;
@@ -240,13 +240,13 @@ public:
instance->SetBossState(DATA_MURU, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoCastAOE(SPELL_NEGATIVE_ENERGY, false);
instance->SetBossState(DATA_MURU, IN_PROGRESS);
}
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
if (damage > me->GetHealth() && Phase == 1)
{
@@ -260,7 +260,7 @@ public:
damage = 0;
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
switch (summoned->GetEntry())
{
@@ -275,7 +275,7 @@ public:
Summons.Summon(summoned);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -358,7 +358,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetSunwellPlateauAI<boss_muruAI>(creature);
}
@@ -369,7 +369,7 @@ class npc_muru_portal : public CreatureScript
public:
npc_muru_portal() : CreatureScript("npc_muru_portal") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_muru_portalAI>(creature);
}
@@ -391,7 +391,7 @@ public:
uint32 SummonTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
SummonTimer = 5000;
@@ -403,7 +403,7 @@ public:
Summons.DespawnAll();
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (Player* Target = ObjectAccessor::GetPlayer(*me, instance->GetData64(DATA_PLAYER_GUID)))
summoned->AI()->AttackStart(Target);
@@ -411,7 +411,7 @@ public:
Summons.Summon(summoned);
}
- void SpellHit(Unit* /*caster*/, const SpellInfo* Spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* Spell) override
{
float x, y, z, o;
me->GetHomePosition(x, y, z, o);
@@ -429,7 +429,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!SummonSentinel)
{
@@ -453,7 +453,7 @@ class npc_dark_fiend : public CreatureScript
public:
npc_dark_fiend() : CreatureScript("npc_dark_fiend") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_dark_fiendAI(creature);
}
@@ -465,7 +465,7 @@ public:
uint32 WaitTimer;
bool InAction;
- void Reset() OVERRIDE
+ void Reset() override
{
WaitTimer = 2000;
InAction = false;
@@ -473,14 +473,14 @@ public:
me->AddUnitState(UNIT_STATE_STUNNED);
}
- void SpellHit(Unit* /*caster*/, const SpellInfo* Spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* Spell) override
{
for (uint8 i = 0; i < 3; ++i)
if (Spell->Effects[i].Effect == 38)
me->DisappearAndDie();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -514,7 +514,7 @@ class npc_void_sentinel : public CreatureScript
public:
npc_void_sentinel() : CreatureScript("npc_void_sentinel") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_void_sentinelAI(creature);
}
@@ -526,7 +526,7 @@ public:
uint32 PulseTimer;
uint32 VoidBlastTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
PulseTimer = 3000;
VoidBlastTimer = 45000; //is this a correct timer?
@@ -536,13 +536,13 @@ public:
DoTeleportTo(x, y, 71);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
for (uint8 i = 0; i < 8; ++i)
- me->SummonCreature(NPC_VOID_SPAWN, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), float(rand()%6), TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 180000);
+ me->SummonCreature(NPC_VOID_SPAWN, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), float(rand32() % 6), TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 180000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -569,7 +569,7 @@ class npc_blackhole : public CreatureScript
public:
npc_blackhole() : CreatureScript("npc_blackhole") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_blackholeAI>(creature);
}
@@ -588,7 +588,7 @@ public:
uint8 Phase;
uint8 NeedForAHack;
- void Reset() OVERRIDE
+ void Reset() override
{
DespawnTimer = 15000;
SpellTimer = 5000;
@@ -599,11 +599,11 @@ public:
DoCastAOE(SPELL_BLACKHOLE_SPAWN, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (SpellTimer <= diff)
{
- Unit* Victim = Unit::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID));
+ Unit* Victim = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID));
switch (NeedForAHack)
{
case 0:
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp
index 38f63d106ee..5a411d504aa 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp
@@ -89,7 +89,7 @@ class instance_sunwell_plateau : public InstanceMapScript
return NULL;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -137,7 +137,7 @@ class instance_sunwell_plateau : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -154,7 +154,7 @@ class instance_sunwell_plateau : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -171,7 +171,7 @@ class instance_sunwell_plateau : public InstanceMapScript
}
}
- uint64 GetData64(uint32 id) const OVERRIDE
+ uint64 GetData64(uint32 id) const override
{
switch (id)
{
@@ -212,7 +212,7 @@ class instance_sunwell_plateau : public InstanceMapScript
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -223,7 +223,7 @@ class instance_sunwell_plateau : public InstanceMapScript
return saveStream.str();
}
- void Load(char const* str) OVERRIDE
+ void Load(char const* str) override
{
if (!str)
{
@@ -275,7 +275,7 @@ class instance_sunwell_plateau : public InstanceMapScript
std::vector<uint64> SpectralRealmList;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_sunwell_plateau_InstanceMapScript(map);
}
diff --git a/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp b/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp
index 6d5d9ab4939..53602e866ad 100644
--- a/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp
+++ b/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp
@@ -30,7 +30,7 @@ class instance_the_stockade : public InstanceMapScript
public:
instance_the_stockade() : InstanceMapScript("instance_the_stockade", 34) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_the_stockade_InstanceMapScript(map);
}
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
index 496be57932e..f06dc247883 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
+++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
@@ -76,7 +76,7 @@ class boss_archaedas : public CreatureScript
bool bVaultWalkersAwake;
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
uiTremorTimer = 60000;
iAwakenTimer = 0;
@@ -94,7 +94,7 @@ class boss_archaedas : public CreatureScript
void ActivateMinion(uint64 uiGuid, bool flag)
{
- Unit* minion = Unit::GetUnit(*me, uiGuid);
+ Unit* minion = ObjectAccessor::GetUnit(*me, uiGuid);
if (minion && minion->IsAlive())
{
@@ -106,14 +106,14 @@ class boss_archaedas : public CreatureScript
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
me->setFaction(14);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
}
- void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
// Being woken up from the altar, start the awaken sequence
if (spell == sSpellMgr->GetSpellInfo(SPELL_ARCHAEDAS_AWAKEN))
@@ -124,12 +124,12 @@ class boss_archaedas : public CreatureScript
}
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_KILL);
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
// we're still doing awaken animation
if (bWakingUp && iAwakenTimer >= 0)
@@ -139,7 +139,7 @@ class boss_archaedas : public CreatureScript
} else if (bWakingUp && iAwakenTimer <= 0)
{
bWakingUp = false;
- AttackStart(Unit::GetUnit(*me, instance->GetData64(0)));
+ AttackStart(ObjectAccessor::GetUnit(*me, instance->GetData64(0)));
return; // dont want to continue until we finish the AttackStart method
}
@@ -198,7 +198,7 @@ class boss_archaedas : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_archaedasAI>(creature);
}
@@ -234,7 +234,7 @@ class npc_archaedas_minions : public CreatureScript
bool bAmIAwake;
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
uiArcing_Timer = 3000;
iAwakenTimer = 0;
@@ -248,7 +248,7 @@ class npc_archaedas_minions : public CreatureScript
me->RemoveAllAuras();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
me->setFaction (14);
me->RemoveAllAuras();
@@ -257,7 +257,7 @@ class npc_archaedas_minions : public CreatureScript
bAmIAwake = true;
}
- void SpellHit(Unit * /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit * /*caster*/, const SpellInfo* spell) override
{
// time to wake up, start animation
if (spell == sSpellMgr->GetSpellInfo(SPELL_ARCHAEDAS_AWAKEN))
@@ -267,14 +267,14 @@ class npc_archaedas_minions : public CreatureScript
}
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (bAmIAwake)
ScriptedAI::MoveInLineOfSight(who);
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
// we're still in the awaken animation
if (bWakingUp && iAwakenTimer >= 0)
@@ -285,7 +285,7 @@ class npc_archaedas_minions : public CreatureScript
{
bWakingUp = false;
bAmIAwake = true;
- // AttackStart(Unit::GetUnit(*me, instance->GetData64(0))); // whoWokeArchaedasGUID
+ // AttackStart(ObjectAccessor::GetUnit(*me, instance->GetData64(0))); // whoWokeArchaedasGUID
return; // dont want to continue until we finish the AttackStart method
}
@@ -297,7 +297,7 @@ class npc_archaedas_minions : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_archaedas_minionsAI>(creature);
}
@@ -328,7 +328,7 @@ class npc_stonekeepers : public CreatureScript
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
me->setFaction(35);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -336,14 +336,14 @@ class npc_stonekeepers : public CreatureScript
me->RemoveAllAuras();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
me->setFaction(14);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -352,14 +352,14 @@ class npc_stonekeepers : public CreatureScript
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*attacker*/) OVERRIDE
+ void JustDied(Unit* /*attacker*/) override
{
DoCast (me, SPELL_SELF_DESTRUCT, true);
instance->SetData(DATA_STONE_KEEPERS, IN_PROGRESS); // activate next stonekeeper
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_stonekeepersAI>(creature);
}
@@ -381,7 +381,7 @@ class go_altar_of_archaedas : public GameObjectScript
{
}
- bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* /*go*/) override
{
InstanceScript* instance = player->GetInstanceScript();
if (!instance)
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp
index d883cc136eb..13a475604a7 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp
+++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp
@@ -51,19 +51,19 @@ class boss_ironaya : public CreatureScript
bool bHasCastWstomp;
bool bHasCastKnockaway;
- void Reset() OVERRIDE
+ void Reset() override
{
uiArcingTimer = 3000;
bHasCastKnockaway = false;
bHasCastWstomp = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -104,7 +104,7 @@ class boss_ironaya : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_ironayaAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp
index 39e47d109c6..56c84677181 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp
+++ b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp
@@ -47,7 +47,7 @@ class instance_uldaman : public InstanceMapScript
{
instance_uldaman_InstanceMapScript(Map* map) : InstanceScript(map) { }
- void Initialize() OVERRIDE
+ void Initialize() override
{
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
@@ -67,7 +67,7 @@ class instance_uldaman : public InstanceMapScript
keystoneCheck = false;
}
- bool IsEncounterInProgress() const OVERRIDE
+ bool IsEncounterInProgress() const override
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
@@ -99,7 +99,7 @@ class instance_uldaman : public InstanceMapScript
uint32 m_auiEncounter[MAX_ENCOUNTER];
std::string str_data;
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -252,7 +252,7 @@ class instance_uldaman : public InstanceMapScript
if (!archaedas)
return;
- if (Unit::GetUnit(*archaedas, target))
+ if (ObjectAccessor::GetUnit(*archaedas, target))
{
archaedas->CastSpell(archaedas, SPELL_ARCHAEDAS_AWAKEN, false);
whoWokeuiArchaedasGUID = target;
@@ -308,7 +308,7 @@ class instance_uldaman : public InstanceMapScript
}
}
}
- void Update(uint32 diff) OVERRIDE
+ void Update(uint32 diff) override
{
if (!keystoneCheck)
return;
@@ -327,7 +327,7 @@ class instance_uldaman : public InstanceMapScript
ironayaSealDoorTimer -= diff;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -393,7 +393,7 @@ class instance_uldaman : public InstanceMapScript
}
}
- void SetData64(uint32 type, uint64 data) OVERRIDE
+ void SetData64(uint32 type, uint64 data) override
{
// Archaedas
if (type == 0)
@@ -403,12 +403,12 @@ class instance_uldaman : public InstanceMapScript
}
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
return str_data;
}
- void Load(const char* in) OVERRIDE
+ void Load(const char* in) override
{
if (!in)
{
@@ -430,7 +430,7 @@ class instance_uldaman : public InstanceMapScript
OUT_LOAD_INST_DATA_COMPLETE;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -469,7 +469,7 @@ class instance_uldaman : public InstanceMapScript
}
}
- uint64 GetData64(uint32 identifier) const OVERRIDE
+ uint64 GetData64(uint32 identifier) const override
{
switch (identifier)
{
@@ -494,7 +494,7 @@ class instance_uldaman : public InstanceMapScript
return 0;
} // end GetData64
- void ProcessEvent(WorldObject* /*gameObject*/, uint32 eventId) OVERRIDE
+ void ProcessEvent(WorldObject* /*gameObject*/, uint32 eventId) override
{
switch (eventId)
{
@@ -507,7 +507,7 @@ class instance_uldaman : public InstanceMapScript
}
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_uldaman_InstanceMapScript(map);
}
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp
index cd79f90cf58..fdb71cbbf83 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp
+++ b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp
@@ -58,16 +58,16 @@ class npc_jadespine_basilisk : public CreatureScript
uint32 uiCslumberTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiCslumberTimer = 2000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -96,7 +96,7 @@ class npc_jadespine_basilisk : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_jadespine_basiliskAI(creature);
}
@@ -111,7 +111,7 @@ class go_keystone_chamber : public GameObjectScript
public:
go_keystone_chamber() : GameObjectScript("go_keystone_chamber") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
if (InstanceScript* instance = go->GetInstanceScript())
instance->SetData(DATA_IRONAYA_SEAL, IN_PROGRESS); //door animation and save state.
@@ -135,7 +135,7 @@ class AreaTrigger_at_map_chamber : public AreaTriggerScript
{
}
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override
{
if (player->GetQuestStatus(QUEST_HIDDEN_CHAMBER) == QUEST_STATUS_INCOMPLETE)
player->AreaExploredOrEventHappens(QUEST_HIDDEN_CHAMBER);
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp
index eca840dbeb2..b55a9cc74d6 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp
@@ -91,7 +91,7 @@ class boss_akilzon : public CreatureScript
memset(BirdGUIDs, 0, sizeof(BirdGUIDs));
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
@@ -105,7 +105,7 @@ class boss_akilzon : public CreatureScript
SetWeather(WEATHER_STATE_FINE, 0.0f);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_STATIC_DISRUPTION, urand(10000, 20000)); // 10 to 20 seconds (bosskillers)
events.ScheduleEvent(EVENT_GUST_OF_WIND, urand(20000, 30000)); // 20 to 30 seconds(bosskillers)
@@ -119,13 +119,13 @@ class boss_akilzon : public CreatureScript
instance->SetData(DATA_AKILZONEVENT, IN_PROGRESS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
_JustDied();
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
@@ -182,10 +182,11 @@ class boss_akilzon : public CreatureScript
// visual
float x, y, z;
z = me->GetPositionZ();
- for (uint8 i = 0; i < 5+rand()%5; ++i)
+ uint8 maxCount = 5 + rand32() % 5;
+ for (uint8 i = 0; i < maxCount; ++i)
{
- x = 343.0f+rand()%60;
- y = 1380.0f+rand()%60;
+ x = 343.0f + rand32() % 60;
+ y = 1380.0f + rand32() % 60;
if (Unit* trigger = me->SummonTrigger(x, y, z, 0, 2000))
{
trigger->setFaction(35);
@@ -214,7 +215,7 @@ class boss_akilzon : public CreatureScript
events.ScheduleEvent(EVENT_STORM_SEQUENCE, 1000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -304,13 +305,13 @@ class boss_akilzon : public CreatureScript
break;
case EVENT_STORM_SEQUENCE:
{
- Unit* target = Unit::GetUnit(*me, CloudGUID);
+ Unit* target = ObjectAccessor::GetUnit(*me, CloudGUID);
if (!target || !target->IsAlive())
{
EnterEvadeMode();
return;
}
- else if (Unit* Cyclone = Unit::GetUnit(*me, CycloneGUID))
+ else if (Unit* Cyclone = ObjectAccessor::GetUnit(*me, CycloneGUID))
Cyclone->CastSpell(target, SPELL_SAND_STORM, true); // keep casting or...
HandleStormSequence(target);
break;
@@ -323,7 +324,7 @@ class boss_akilzon : public CreatureScript
for (uint8 i = 0; i < 8; ++i)
{
- Unit* bird = Unit::GetUnit(*me, BirdGUIDs[i]);
+ Unit* bird = ObjectAccessor::GetUnit(*me, BirdGUIDs[i]);
if (!bird) //they despawned on die
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
@@ -366,7 +367,7 @@ class boss_akilzon : public CreatureScript
bool isRaining;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_akilzonAI>(creature);
}
@@ -385,7 +386,7 @@ class npc_akilzon_eagle : public CreatureScript
bool arrived;
uint64 TargetGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
EagleSwoop_Timer = urand(5000, 10000);
arrived = true;
@@ -393,20 +394,20 @@ class npc_akilzon_eagle : public CreatureScript
me->SetDisableGravity(true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void MovementInform(uint32, uint32) OVERRIDE
+ void MovementInform(uint32, uint32) override
{
arrived = true;
if (TargetGUID)
{
- if (Unit* target = Unit::GetUnit(*me, TargetGUID))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, TargetGUID))
DoCast(target, SPELL_EAGLE_SWOOP, true);
TargetGUID = 0;
me->SetSpeed(MOVE_RUN, 1.2f);
@@ -414,7 +415,7 @@ class npc_akilzon_eagle : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (EagleSwoop_Timer <= diff)
EagleSwoop_Timer = 0;
@@ -448,7 +449,7 @@ class npc_akilzon_eagle : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_akilzon_eagleAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp
index 0c8eb663c9a..74ce267441f 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp
@@ -91,7 +91,7 @@ class boss_halazzi : public CreatureScript
uint64 LynxGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
instance->SetData(DATA_HALAZZIEVENT, NOT_STARTED);
summons.DespawnAll();
@@ -107,14 +107,14 @@ class boss_halazzi : public CreatureScript
EnterPhase(PHASE_LYNX);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
instance->SetData(DATA_HALAZZIEVENT, IN_PROGRESS);
Talk(SAY_AGGRO);
EnterPhase(PHASE_LYNX);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summon->AI()->AttackStart(me->GetVictim());
if (summon->GetEntry() == NPC_SPIRIT_LYNX)
@@ -122,19 +122,19 @@ class boss_halazzi : public CreatureScript
summons.Summon(summon);
}
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
if (damage >= me->GetHealth() && Phase != PHASE_ENRAGE)
damage = 0;
}
- void SpellHit(Unit*, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit*, const SpellInfo* spell) override
{
if (spell->Id == SPELL_TRANSFORM_SPLIT2)
EnterPhase(PHASE_HUMAN);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (Phase != PHASE_MERGE)
ScriptedAI::AttackStart(who);
@@ -152,7 +152,7 @@ class boss_halazzi : public CreatureScript
me->Attack(me->GetVictim(), true);
me->GetMotionMaster()->MoveChase(me->GetVictim());
}
- if (Creature* Lynx = Unit::GetCreature(*me, LynxGUID))
+ if (Creature* Lynx = ObjectAccessor::GetCreature(*me, LynxGUID))
Lynx->DisappearAndDie();
me->SetMaxHealth(600000);
me->SetHealth(600000 - 150000 * TransformCount);
@@ -174,7 +174,7 @@ class boss_halazzi : public CreatureScript
TotemTimer = 12000;
break;
case PHASE_MERGE:
- if (Unit* pLynx = Unit::GetUnit(*me, LynxGUID))
+ if (Unit* pLynx = ObjectAccessor::GetUnit(*me, LynxGUID))
{
Talk(SAY_MERGE);
pLynx->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -191,7 +191,7 @@ class boss_halazzi : public CreatureScript
Phase = NextPhase;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -259,7 +259,7 @@ class boss_halazzi : public CreatureScript
EnterPhase(PHASE_MERGE);
else
{
- Unit* Lynx = Unit::GetUnit(*me, LynxGUID);
+ Unit* Lynx = ObjectAccessor::GetUnit(*me, LynxGUID);
if (Lynx && !Lynx->HealthAbovePct(20) /*Lynx->HealthBelowPct(10)*/)
EnterPhase(PHASE_MERGE);
}
@@ -272,7 +272,7 @@ class boss_halazzi : public CreatureScript
{
if (CheckTimer <= diff)
{
- Unit* Lynx = Unit::GetUnit(*me, LynxGUID);
+ Unit* Lynx = ObjectAccessor::GetUnit(*me, LynxGUID);
if (Lynx)
{
Lynx->GetMotionMaster()->MoveFollow(me, 0, 0);
@@ -292,7 +292,7 @@ class boss_halazzi : public CreatureScript
DoMeleeAttackIfReady();
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -300,14 +300,14 @@ class boss_halazzi : public CreatureScript
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_HALAZZIEVENT, DONE);
Talk(SAY_DEATH);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_halazziAI>(creature);
}
@@ -326,27 +326,27 @@ class npc_halazzi_lynx : public CreatureScript
uint32 FrenzyTimer;
uint32 shredder_timer;
- void Reset() OVERRIDE
+ void Reset() override
{
FrenzyTimer = urand(30000, 50000); //frenzy every 30-50 seconds
shredder_timer = 4000;
}
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
if (damage >= me->GetHealth())
damage = 0;
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
ScriptedAI::AttackStart(who);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE {/*DoZoneInCombat();*/ }
+ void EnterCombat(Unit* /*who*/) override {/*DoZoneInCombat();*/ }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -368,7 +368,7 @@ class npc_halazzi_lynx : public CreatureScript
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_halazzi_lynxAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
index d6657ac0986..0fee04f0d20 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
@@ -222,14 +222,14 @@ struct boss_hexlord_addAI : public ScriptedAI
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (instance->GetData(DATA_HEXLORDEVENT) != IN_PROGRESS)
{
@@ -276,7 +276,7 @@ class boss_hexlord_malacrass : public CreatureScript
uint32 PlayerClass;
- void Reset() OVERRIDE
+ void Reset() override
{
instance->SetData(DATA_HEXLORDEVENT, NOT_STARTED);
@@ -293,7 +293,7 @@ class boss_hexlord_malacrass : public CreatureScript
me->SetByteValue(UNIT_FIELD_BYTES_2, 0, SHEATH_STATE_MELEE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
instance->SetData(DATA_HEXLORDEVENT, IN_PROGRESS);
@@ -303,7 +303,7 @@ class boss_hexlord_malacrass : public CreatureScript
for (uint8 i = 0; i < 4; ++i)
{
- Creature* creature = Unit::GetCreature(*me, AddGUID[i]);
+ Creature* creature = ObjectAccessor::GetCreature(*me, AddGUID[i]);
if (creature && creature->IsAlive())
creature->AI()->AttackStart(me->GetVictim());
else
@@ -314,7 +314,7 @@ class boss_hexlord_malacrass : public CreatureScript
}
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
switch (urand(0, 1))
{
@@ -329,7 +329,7 @@ class boss_hexlord_malacrass : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_HEXLORDEVENT, DONE);
@@ -338,7 +338,7 @@ class boss_hexlord_malacrass : public CreatureScript
for (uint8 i = 0; i < 4; ++i)
{
- Unit* Temp = Unit::GetUnit(*me, AddGUID[i]);
+ Unit* Temp = ObjectAccessor::GetUnit(*me, AddGUID[i]);
if (Temp && Temp->IsAlive())
Temp->DealDamage(Temp, Temp->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
}
@@ -352,7 +352,7 @@ class boss_hexlord_malacrass : public CreatureScript
AddList.push_back(AddEntryList[i]);
while (AddList.size() > 4)
- AddList.erase(AddList.begin()+rand()%AddList.size());
+ AddList.erase(AddList.begin() + rand32() % AddList.size());
uint8 i = 0;
for (std::vector<uint32>::const_iterator itr = AddList.begin(); itr != AddList.end(); ++itr, ++i)
@@ -363,7 +363,7 @@ class boss_hexlord_malacrass : public CreatureScript
{
for (uint8 i = 0; i < 4; ++i)
{
- Creature* creature = (Unit::GetCreature((*me), AddGUID[i]));
+ Creature* creature = (ObjectAccessor::GetCreature((*me), AddGUID[i]));
if (!creature || !creature->IsAlive())
{
if (creature) creature->setDeathState(DEAD);
@@ -379,7 +379,7 @@ class boss_hexlord_malacrass : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -397,7 +397,7 @@ class boss_hexlord_malacrass : public CreatureScript
if (CheckAddState_Timer <= diff)
{
for (uint8 i = 0; i < 4; ++i)
- if (Creature* temp = Unit::GetCreature(*me, AddGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, AddGUID[i]))
if (temp->IsAlive() && !temp->GetVictim())
temp->AI()->AttackStart(me->GetVictim());
@@ -462,7 +462,7 @@ class boss_hexlord_malacrass : public CreatureScript
if (PlayerAbility_Timer <= diff)
{
- //Unit* target = Unit::GetUnit(*me, PlayerGUID);
+ //Unit* target = ObjectAccessor::GetUnit(*me, PlayerGUID);
//if (target && target->IsAlive())
//{
UseAbility();
@@ -505,7 +505,7 @@ class boss_hexlord_malacrass : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_hex_lord_malacrassAI>(creature);
}
@@ -528,7 +528,7 @@ class boss_thurg : public CreatureScript
uint32 bloodlust_timer;
uint32 cleave_timer;
- void Reset() OVERRIDE
+ void Reset() override
{
bloodlust_timer = 15000;
cleave_timer = 10000;
@@ -536,7 +536,7 @@ class boss_thurg : public CreatureScript
boss_hexlord_addAI::Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -562,7 +562,7 @@ class boss_thurg : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_thurgAI>(creature);
}
@@ -585,7 +585,7 @@ class boss_alyson_antille : public CreatureScript
uint32 flashheal_timer;
uint32 dispelmagic_timer;
- void Reset() OVERRIDE
+ void Reset() override
{
flashheal_timer = 2500;
dispelmagic_timer = 10000;
@@ -595,7 +595,7 @@ class boss_alyson_antille : public CreatureScript
boss_hexlord_addAI::Reset();
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who)
return;
@@ -610,7 +610,7 @@ class boss_alyson_antille : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -659,7 +659,7 @@ class boss_alyson_antille : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_alyson_antilleAI>(creature);
}
@@ -671,13 +671,13 @@ struct boss_gazakrothAI : public boss_hexlord_addAI
uint32 firebolt_timer;
- void Reset() OVERRIDE
+ void Reset() override
{
firebolt_timer = 2000;
boss_hexlord_addAI::Reset();
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who)
return;
@@ -692,7 +692,7 @@ struct boss_gazakrothAI : public boss_hexlord_addAI
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -723,7 +723,7 @@ class boss_lord_raadan : public CreatureScript
uint32 flamebreath_timer;
uint32 thunderclap_timer;
- void Reset() OVERRIDE
+ void Reset() override
{
flamebreath_timer = 8000;
thunderclap_timer = 13000;
@@ -731,7 +731,7 @@ class boss_lord_raadan : public CreatureScript
boss_hexlord_addAI::Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -752,7 +752,7 @@ class boss_lord_raadan : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_lord_raadanAI>(creature);
}
@@ -773,12 +773,12 @@ class boss_darkheart : public CreatureScript
uint32 psychicwail_timer;
- void Reset() OVERRIDE
+ void Reset() override
{
psychicwail_timer = 8000;
boss_hexlord_addAI::Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -793,7 +793,7 @@ class boss_darkheart : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_darkheartAI>(creature);
}
@@ -815,13 +815,13 @@ class boss_slither : public CreatureScript
uint32 venomspit_timer;
- void Reset() OVERRIDE
+ void Reset() override
{
venomspit_timer = 5000;
boss_hexlord_addAI::Reset();
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who)
return;
@@ -836,7 +836,7 @@ class boss_slither : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -852,7 +852,7 @@ class boss_slither : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_slitherAI>(creature);
}
@@ -873,13 +873,13 @@ class boss_fenstalker : public CreatureScript
uint32 volatileinf_timer;
- void Reset() OVERRIDE
+ void Reset() override
{
volatileinf_timer = 15000;
boss_hexlord_addAI::Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -887,7 +887,8 @@ class boss_fenstalker : public CreatureScript
if (volatileinf_timer <= diff)
{
// core bug
- me->GetVictim()->CastSpell(me->GetVictim(), SPELL_VOLATILE_INFECTION, false);
+ if (me->GetVictim())
+ me->EnsureVictim()->CastSpell(me->GetVictim(), SPELL_VOLATILE_INFECTION, false);
volatileinf_timer = 12000;
} else volatileinf_timer -= diff;
@@ -895,7 +896,7 @@ class boss_fenstalker : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_fenstalkerAI>(creature);
}
@@ -917,14 +918,14 @@ class boss_koragg : public CreatureScript
uint32 coldstare_timer;
uint32 mightyblow_timer;
- void Reset() OVERRIDE
+ void Reset() override
{
coldstare_timer = 15000;
mightyblow_timer = 10000;
boss_hexlord_addAI::Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -945,7 +946,7 @@ class boss_koragg : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_koraggAI>(creature);
}
@@ -960,7 +961,7 @@ class spell_hexlord_unstable_affliction : public SpellScriptLoader
{
PrepareAuraScript(spell_hexlord_unstable_affliction_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WL_UNSTABLE_AFFL_DISPEL))
return false;
@@ -973,13 +974,13 @@ class spell_hexlord_unstable_affliction : public SpellScriptLoader
caster->CastSpell(dispelInfo->GetDispeller(), SPELL_WL_UNSTABLE_AFFL_DISPEL, true, NULL, GetEffect(EFFECT_0));
}
- void Register() OVERRIDE
+ void Register() override
{
AfterDispel += AuraDispelFn(spell_hexlord_unstable_affliction_AuraScript::HandleDispel);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_hexlord_unstable_affliction_AuraScript();
}
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp
index caf54313fe7..d5260c18add 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp
@@ -141,7 +141,7 @@ class boss_janalai : public CreatureScript
uint64 FireBombGUIDs[40];
- void Reset() OVERRIDE
+ void Reset() override
{
instance->SetData(DATA_JANALAIEVENT, NOT_STARTED);
@@ -164,19 +164,19 @@ class boss_janalai : public CreatureScript
HatchAllEggs(1);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetData(DATA_JANALAIEVENT, DONE);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
instance->SetData(DATA_JANALAIEVENT, IN_PROGRESS);
@@ -184,11 +184,11 @@ class boss_janalai : public CreatureScript
// DoZoneInCombat();
}
- void DamageDealt(Unit* target, uint32 &damage, DamageEffectType /*damagetype*/) OVERRIDE
+ void DamageDealt(Unit* target, uint32 &damage, DamageEffectType /*damagetype*/) override
{
if (isFlameBreathing)
{
- if (!me->HasInArc(M_PI/6, target))
+ if (!me->HasInArc(float(M_PI) / 6, target))
damage = 0;
}
}
@@ -292,7 +292,7 @@ class boss_janalai : public CreatureScript
{
if (BombCount < 40)
{
- if (Unit* FireBomb = Unit::GetUnit(*me, FireBombGUIDs[BombCount]))
+ if (Unit* FireBomb = ObjectAccessor::GetUnit(*me, FireBombGUIDs[BombCount]))
{
FireBomb->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
DoCast(FireBomb, SPELL_FIRE_BOMB_THROW, true);
@@ -317,7 +317,7 @@ class boss_janalai : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (isFlameBreathing)
{
@@ -385,7 +385,7 @@ class boss_janalai : public CreatureScript
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
if (Player* i_pl = i->GetSource())
if (i_pl->IsAlive())
- DoTeleportPlayer(i_pl, JanalainPos[0][0]-5+rand()%10, JanalainPos[0][1]-5+rand()%10, JanalainPos[0][2], 0);
+ DoTeleportPlayer(i_pl, JanalainPos[0][0] - 5 + rand32() % 10, JanalainPos[0][1] - 5 + rand32() % 10, JanalainPos[0][2], 0);
//DoCast(Temp, SPELL_SUMMON_PLAYERS, true) // core bug, spell does not work if too far
return;
} else BombTimer -= diff;
@@ -437,7 +437,7 @@ class boss_janalai : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_janalaiAI>(creature);
}
@@ -456,25 +456,25 @@ class npc_janalai_firebomb : public CreatureScript
{
npc_janalai_firebombAI(Creature* creature) : ScriptedAI(creature){ }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
if (spell->Id == SPELL_FIRE_BOMB_THROW)
DoCast(me, SPELL_FIRE_BOMB_DUMMY, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
+ void AttackStart(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_janalai_firebombAI(creature);
}
@@ -506,7 +506,7 @@ class npc_janalai_hatcher : public CreatureScript
bool hasChangedSide;
bool isHatching;
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetWalk(true);
side =(me->GetPositionY() < 1150);
@@ -548,11 +548,11 @@ class npc_janalai_hatcher : public CreatureScript
return num == 0; // if num == 0, no more templist
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void AttackStart(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void MovementInform(uint32, uint32) OVERRIDE
+ void MovementInform(uint32, uint32) override
{
if (waypoint == 5)
{
@@ -564,7 +564,7 @@ class npc_janalai_hatcher : public CreatureScript
WaitTimer = 1;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!instance || !(instance->GetData(DATA_JANALAIEVENT) == IN_PROGRESS))
{
@@ -607,7 +607,7 @@ class npc_janalai_hatcher : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_janalai_hatcherAI>(creature);
}
@@ -632,20 +632,20 @@ class npc_janalai_hatchling : public CreatureScript
InstanceScript* instance;
uint32 BuffetTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
BuffetTimer = 7000;
if (me->GetPositionY() > 1150)
- me->GetMotionMaster()->MovePoint(0, hatcherway[0][3][0]+rand()%4-2, 1150.0f+rand()%4-2, hatcherway[0][3][2]);
+ me->GetMotionMaster()->MovePoint(0, hatcherway[0][3][0] + rand32() % 4 - 2, 1150.0f + rand32() % 4 - 2, hatcherway[0][3][2]);
else
- me->GetMotionMaster()->MovePoint(0, hatcherway[1][3][0]+rand()%4-2, 1150.0f+rand()%4-2, hatcherway[1][3][2]);
+ me->GetMotionMaster()->MovePoint(0, hatcherway[1][3][0] + rand32() % 4 - 2, 1150.0f + rand32() % 4 - 2, hatcherway[1][3][2]);
me->SetDisableGravity(true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE {/*DoZoneInCombat();*/ }
+ void EnterCombat(Unit* /*who*/) override {/*DoZoneInCombat();*/ }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!instance || !(instance->GetData(DATA_JANALAIEVENT) == IN_PROGRESS))
{
@@ -666,7 +666,7 @@ class npc_janalai_hatchling : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_janalai_hatchlingAI>(creature);
}
@@ -677,7 +677,7 @@ class npc_janalai_egg : public CreatureScript
public:
npc_janalai_egg(): CreatureScript("npc_janalai_egg") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_janalai_eggAI(creature);
}
@@ -686,11 +686,11 @@ public:
{
npc_janalai_eggAI(Creature* creature) : ScriptedAI(creature){ }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
- void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
if (spell->Id == SPELL_HATCH_EGG)
{
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp
index 5bd78006f95..4909074b059 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp
@@ -133,7 +133,7 @@ class boss_nalorakk : public CreatureScript
uint32 MovePhase;
uint32 waitTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
if (MoveEvent)
{
@@ -192,13 +192,13 @@ class boss_nalorakk : public CreatureScript
}
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!MoveEvent)
ScriptedAI::AttackStart(who);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!MoveEvent)
@@ -272,7 +272,7 @@ class boss_nalorakk : public CreatureScript
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
instance->SetData(DATA_NALORAKKEVENT, IN_PROGRESS);
@@ -281,7 +281,7 @@ class boss_nalorakk : public CreatureScript
DoZoneInCombat();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_NALORAKKEVENT, DONE);
@@ -289,7 +289,7 @@ class boss_nalorakk : public CreatureScript
DoPlaySoundToSet(me, SOUND_YELL_DEATH);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
switch (urand(0, 1))
{
@@ -304,7 +304,7 @@ class boss_nalorakk : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (MoveEvent)
{
@@ -344,7 +344,7 @@ class boss_nalorakk : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (waitTimer && inMove)
{
@@ -405,7 +405,7 @@ class boss_nalorakk : public CreatureScript
if (Mangle_Timer <= diff)
{
- if (me->GetVictim() && !me->GetVictim()->HasAura(SPELL_MANGLEEFFECT))
+ if (me->GetVictim() && !me->EnsureVictim()->HasAura(SPELL_MANGLEEFFECT))
{
DoCastVictim(SPELL_MANGLE);
Mangle_Timer = 1000;
@@ -448,7 +448,7 @@ class boss_nalorakk : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_nalorakkAI>(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp
index 9af8eeccc5c..6b0fc05ba3d 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp
@@ -167,7 +167,7 @@ class boss_zuljin : public CreatureScript
SummonList Summons;
- void Reset() OVERRIDE
+ void Reset() override
{
instance->SetData(DATA_ZULJINEVENT, NOT_STARTED);
@@ -203,7 +203,7 @@ class boss_zuljin : public CreatureScript
//me->SetByteValue(UNIT_FIELD_BYTES_2, 0, SHEATH_STATE_MELEE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
instance->SetData(DATA_ZULJINEVENT, IN_PROGRESS);
@@ -214,7 +214,7 @@ class boss_zuljin : public CreatureScript
EnterPhase(0);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
if (Intro_Timer)
return;
@@ -222,18 +222,18 @@ class boss_zuljin : public CreatureScript
Talk(YELL_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_ZULJINEVENT, DONE);
Talk(YELL_DEATH);
Summons.DespawnEntry(CREATURE_COLUMN_OF_FIRE);
- if (Unit* Temp = Unit::GetUnit(*me, SpiritGUID[3]))
+ if (Unit* Temp = ObjectAccessor::GetUnit(*me, SpiritGUID[3]))
Temp->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_DEAD);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (Phase == 2)
AttackStartNoMove(who);
@@ -249,9 +249,9 @@ class boss_zuljin : public CreatureScript
{
if (Phase == 1 && !Overpower_Timer)
{
- uint32 health = me->GetVictim()->GetHealth();
+ uint32 health = me->EnsureVictim()->GetHealth();
me->AttackerStateUpdate(me->GetVictim());
- if (me->GetVictim() && health == me->GetVictim()->GetHealth())
+ if (me->GetVictim() && health == me->EnsureVictim()->GetHealth())
{
DoCastVictim(SPELL_OVERPOWER, false);
Overpower_Timer = 5000;
@@ -284,7 +284,7 @@ class boss_zuljin : public CreatureScript
{
if (SpiritGUID[i])
{
- if (Unit* temp = Unit::GetUnit(*me, SpiritGUID[i]))
+ if (Unit* temp = ObjectAccessor::GetUnit(*me, SpiritGUID[i]))
{
temp->SetVisible(false);
temp->setDeathState(DEAD);
@@ -294,12 +294,12 @@ class boss_zuljin : public CreatureScript
}
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
Summons.Summon(summon);
}
- void SummonedCreatureDespawn(Creature* summon) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summon) override
{
Summons.Despawn(summon);
}
@@ -322,10 +322,10 @@ class boss_zuljin : public CreatureScript
Talk(Transform[Phase].text);
if (Phase > 0)
{
- if (Unit* Temp = Unit::GetUnit(*me, SpiritGUID[Phase - 1]))
+ if (Unit* Temp = ObjectAccessor::GetUnit(*me, SpiritGUID[Phase - 1]))
Temp->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_DEAD);
}
- if (Unit* Temp = Unit::GetUnit(*me, SpiritGUID[NextPhase - 1]))
+ if (Unit* Temp = ObjectAccessor::GetUnit(*me, SpiritGUID[NextPhase - 1]))
Temp->CastSpell(me, SPELL_SIPHON_SOUL, false); // should m cast on temp
if (NextPhase == 2)
{
@@ -360,7 +360,7 @@ class boss_zuljin : public CreatureScript
Phase = NextPhase;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!TankGUID)
{
@@ -428,7 +428,8 @@ class boss_zuljin : public CreatureScript
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
- TankGUID = me->GetVictim()->GetGUID();
+ if (me->GetVictim())
+ TankGUID = me->EnsureVictim()->GetGUID();
me->SetSpeed(MOVE_RUN, 5.0f);
AttackStart(target); // change victim
Claw_Rage_Timer = 0;
@@ -441,7 +442,7 @@ class boss_zuljin : public CreatureScript
if (Claw_Loop_Timer <= diff)
{
Unit* target = me->GetVictim();
- if (!target || !target->isTargetableForAttack()) target = Unit::GetUnit(*me, TankGUID);
+ if (!target || !target->isTargetableForAttack()) target = ObjectAccessor::GetUnit(*me, TankGUID);
if (!target || !target->isTargetableForAttack()) target = SelectTarget(SELECT_TARGET_RANDOM, 0);
if (target)
{
@@ -454,7 +455,7 @@ class boss_zuljin : public CreatureScript
{
Claw_Rage_Timer = urand(15000, 20000);
me->SetSpeed(MOVE_RUN, 1.2f);
- AttackStart(Unit::GetUnit(*me, TankGUID));
+ AttackStart(ObjectAccessor::GetUnit(*me, TankGUID));
TankGUID = 0;
return;
}
@@ -477,7 +478,7 @@ class boss_zuljin : public CreatureScript
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
- TankGUID = me->GetVictim()->GetGUID();
+ TankGUID = me->EnsureVictim()->GetGUID();
me->SetSpeed(MOVE_RUN, 5.0f);
AttackStart(target); // change victim
Lynx_Rush_Timer = 0;
@@ -502,7 +503,7 @@ class boss_zuljin : public CreatureScript
{
Lynx_Rush_Timer = urand(15000, 20000);
me->SetSpeed(MOVE_RUN, 1.2f);
- AttackStart(Unit::GetUnit(*me, TankGUID));
+ AttackStart(ObjectAccessor::GetUnit(*me, TankGUID));
TankGUID = 0;
}
else
@@ -550,7 +551,7 @@ class boss_zuljin : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_zuljinAI>(creature);
}
@@ -569,17 +570,17 @@ class npc_zuljin_vortex : public CreatureScript
{
npc_zuljin_vortexAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*target*/) OVERRIDE { }
+ void EnterCombat(Unit* /*target*/) override { }
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (spell->Id == SPELL_ZAP_INFORM)
DoCast(caster, SPELL_ZAP_DAMAGE, true);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
//if the vortex reach the target, it change his target to another player
if (me->IsWithinMeleeRange(me->GetVictim()))
@@ -587,7 +588,7 @@ class npc_zuljin_vortex : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_zuljin_vortexAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp
index 2347de4fa66..64ffddbbb6e 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp
@@ -90,7 +90,7 @@ class instance_zulaman : public InstanceMapScript
uint32 m_auiEncounter[MAX_ENCOUNTER];
uint32 RandVendor[RAND_VENDOR];
- void Initialize() OVERRIDE
+ void Initialize() override
{
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
@@ -119,7 +119,7 @@ class instance_zulaman : public InstanceMapScript
m_auiEncounter[DATA_GONGEVENT] = NOT_STARTED;
}
- bool IsEncounterInProgress() const OVERRIDE
+ bool IsEncounterInProgress() const override
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
@@ -134,7 +134,7 @@ class instance_zulaman : public InstanceMapScript
instance->SummonCreature(NPC_HARRISON_JONES, HarrisonJonesLoc);
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -151,7 +151,7 @@ class instance_zulaman : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -201,7 +201,7 @@ class instance_zulaman : public InstanceMapScript
HandleGameObject(ZulJinGateGUID, true);
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -231,7 +231,7 @@ class instance_zulaman : public InstanceMapScript
} else TC_LOG_ERROR("scripts", "Zul'aman: corrupted save data.");
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -313,7 +313,7 @@ class instance_zulaman : public InstanceMapScript
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -331,7 +331,7 @@ class instance_zulaman : public InstanceMapScript
}
}
- void Update(uint32 diff) OVERRIDE
+ void Update(uint32 diff) override
{
if (QuestMinute)
{
@@ -350,7 +350,7 @@ class instance_zulaman : public InstanceMapScript
}
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -365,7 +365,7 @@ class instance_zulaman : public InstanceMapScript
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_zulaman_InstanceMapScript(map);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
index e51bcfc70ba..5561ed3c2dd 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
@@ -68,14 +68,14 @@ class npc_forest_frog : public CreatureScript
InstanceScript* instance;
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
void DoSpawnRandom()
{
uint32 cEntry = 0;
- switch (rand()%10)
+ switch (rand32() % 10)
{
case 0: cEntry = 24397; break; //Mannuth
case 1: cEntry = 24403; break; //Deez
@@ -90,9 +90,9 @@ class npc_forest_frog : public CreatureScript
}
if (!instance->GetData(TYPE_RAND_VENDOR_1))
- if (rand()%10 == 1) cEntry = 24408; //Gunter
+ if (rand32() % 10 == 1) cEntry = 24408; //Gunter
if (!instance->GetData(TYPE_RAND_VENDOR_2))
- if (rand()%10 == 1) cEntry = 24409; //Kyren
+ if (rand32() % 10 == 1) cEntry = 24409; //Kyren
if (cEntry) me->UpdateEntry(cEntry);
@@ -100,18 +100,18 @@ class npc_forest_frog : public CreatureScript
if (cEntry == 24409) instance->SetData(TYPE_RAND_VENDOR_2, DONE);
}
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (spell->Id == SPELL_REMOVE_AMANI_CURSE && caster->GetTypeId() == TYPEID_PLAYER && me->GetEntry() == NPC_FOREST_FROG)
{
//increase or decrease chance of mojo?
- if (rand()%99 == 50) DoCast(caster, SPELL_PUSH_MOJO, true);
+ if (rand32() % 99 == 50) DoCast(caster, SPELL_PUSH_MOJO, true);
else DoSpawnRandom();
}
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_forest_frogAI>(creature);
}
@@ -141,36 +141,36 @@ class npc_zulaman_hostage : public CreatureScript
bool IsLoot;
uint64 PlayerGUID;
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID))
player->SendLoot(me->GetGUID(), LOOT_CORPSE);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (IsLoot)
DoCast(me, 7, false);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_zulaman_hostageAI(creature);
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HOSTAGE1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
@@ -285,16 +285,16 @@ class npc_harrison_jones : public CreatureScript
uint32 _gongTimer;
uint64 uiTargetGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
_gongEvent = 0;
_gongTimer = 0;
uiTargetGUID = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void sGossipSelect(Player* player, uint32 sender, uint32 action) OVERRIDE
+ void sGossipSelect(Player* player, uint32 sender, uint32 action) override
{
if (me->GetCreatureTemplate()->GossipMenuId == sender && !action)
{
@@ -307,7 +307,7 @@ class npc_harrison_jones : public CreatureScript
}
}
- void SpellHit(Unit*, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit*, const SpellInfo* spell) override
{
if (spell->Id == SPELL_COSMETIC_SPEAR_THROW)
{
@@ -321,7 +321,7 @@ class npc_harrison_jones : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_gongEvent)
{
@@ -451,7 +451,7 @@ class npc_harrison_jones : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_harrison_jonesAI>(creature);
}
@@ -472,13 +472,13 @@ class spell_banging_the_gong : public SpellScriptLoader
GetHitGObj()->SendCustomAnim(0);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_banging_the_gong_SpellScript::Activate, EFFECT_1, SPELL_EFFECT_ACTIVATE_OBJECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_banging_the_gong_SpellScript();
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
index d34b3600fe9..4ac34615498 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
@@ -94,7 +94,7 @@ class boss_arlokk : public CreatureScript
{
boss_arlokkAI(Creature* creature) : BossAI(creature, DATA_ARLOKK) { }
- void Reset() OVERRIDE
+ void Reset() override
{
if (events.IsInPhase(PHASE_TWO))
me->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, 35.0f, false); // hack
@@ -107,13 +107,13 @@ class boss_arlokk : public CreatureScript
me->GetMotionMaster()->MovePoint(0, PosMoveOnSpawn[0]);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(7000, 9000), 0, PHASE_ONE);
@@ -149,7 +149,7 @@ class boss_arlokk : public CreatureScript
}
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
BossAI::EnterEvadeMode();
if (GameObject* object = ObjectAccessor::GetGameObject(*me, instance->GetData64(GO_GONG_OF_BETHEKK)))
@@ -157,7 +157,7 @@ class boss_arlokk : public CreatureScript
me->DespawnOrUnsummon(4000);
}
- void SetData(uint32 id, uint32 /*value*/) OVERRIDE
+ void SetData(uint32 id, uint32 /*value*/) override
{
if (id == 1)
--_summonCountA;
@@ -165,7 +165,7 @@ class boss_arlokk : public CreatureScript
--_summonCountB;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -299,7 +299,7 @@ class boss_arlokk : public CreatureScript
uint64 _triggersSideBGUID[5];
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetZulGurubAI<boss_arlokkAI>(creature);
}
@@ -334,7 +334,7 @@ class npc_zulian_prowler : public CreatureScript
{
npc_zulian_prowlerAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
- void Reset() OVERRIDE
+ void Reset() override
{
if (me->GetPositionY() < -1625.0f)
_sideData = 1;
@@ -344,25 +344,25 @@ class npc_zulian_prowler : public CreatureScript
DoCast(me, SPELL_SNEAK_RANK_1_1);
DoCast(me, SPELL_SNEAK_RANK_1_2);
- if (Unit* arlokk = me->GetUnit(*me, _instance->GetData64(NPC_ARLOKK)))
+ if (Unit* arlokk = ObjectAccessor::GetUnit(*me, _instance->GetData64(NPC_ARLOKK)))
me->GetMotionMaster()->MovePoint(0, arlokk->GetPositionX(), arlokk->GetPositionY(), arlokk->GetPositionZ());
_events.ScheduleEvent(EVENT_ATTACK, 6000);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
me->GetMotionMaster()->Clear(false);
me->RemoveAura(SPELL_SNEAK_RANK_1_1);
me->RemoveAura(SPELL_SNEAK_RANK_1_2);
}
- void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* caster, SpellInfo const* spell) override
{
if (spell->Id == SPELL_MARK_OF_ARLOKK_TRIGGER) // Should only hit if line of sight
me->Attack(caster, true);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Unit* arlokk = ObjectAccessor::GetUnit(*me, _instance->GetData64(NPC_ARLOKK)))
{
@@ -372,7 +372,7 @@ class npc_zulian_prowler : public CreatureScript
me->DespawnOrUnsummon(4000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (UpdateVictim())
{
@@ -402,7 +402,7 @@ class npc_zulian_prowler : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetZulGurubAI<npc_zulian_prowlerAI>(creature);
}
@@ -421,7 +421,7 @@ class go_gong_of_bethekk : public GameObjectScript
{
public: go_gong_of_bethekk() : GameObjectScript("go_gong_of_bethekk") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
if (go->GetInstanceScript())
{
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp
index 70d920c1ad4..51b00e39fed 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp
@@ -50,17 +50,17 @@ class boss_gahzranka : public CreatureScript // gahzranka
{
boss_gahzrankaAI(Creature* creature) : BossAI(creature, DATA_GAHZRANKA) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_FROSTBREATH, 8000);
@@ -68,7 +68,7 @@ class boss_gahzranka : public CreatureScript // gahzranka
events.ScheduleEvent(EVENT_SLAM, 17000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -103,7 +103,7 @@ class boss_gahzranka : public CreatureScript // gahzranka
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_gahzrankaAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp
index 2e7f5b2900f..4ffe7b35240 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp
@@ -48,24 +48,24 @@ class boss_grilek : public CreatureScript // grilek
{
boss_grilekAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_AVATAR, urand(15000, 25000));
events.ScheduleEvent(EVENT_GROUND_TREMOR, urand(15000, 25000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -104,7 +104,7 @@ class boss_grilek : public CreatureScript // grilek
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_grilekAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp
index 0d70552d306..2d4a424476d 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp
@@ -73,17 +73,17 @@ class boss_hakkar : public CreatureScript
{
boss_hakkarAI(Creature* creature) : BossAI(creature, DATA_HAKKAR) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_BLOOD_SIPHON, 90000);
@@ -104,7 +104,7 @@ class boss_hakkar : public CreatureScript
Talk(SAY_AGGRO);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -168,7 +168,7 @@ class boss_hakkar : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_hakkarAI>(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp
index 6b938dc9276..6b964d8825f 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp
@@ -49,17 +49,17 @@ class boss_hazzarah : public CreatureScript
{
boss_hazzarahAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_MANABURN, urand(4000, 10000));
@@ -67,7 +67,7 @@ class boss_hazzarah : public CreatureScript
events.ScheduleEvent(EVENT_ILLUSIONS, urand(10000, 18000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -109,7 +109,7 @@ class boss_hazzarah : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_hazzarahAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
index 5d4bafb5f94..7a16f670afe 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
@@ -84,18 +84,18 @@ class boss_jeklik : public CreatureScript
{
boss_jeklikAI(Creature* creature) : BossAI(creature, DATA_JEKLIK) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -110,7 +110,7 @@ class boss_jeklik : public CreatureScript
DoCast(me, SPELL_BAT_FORM);
}
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
if (events.IsInPhase(PHASE_ONE) && !HealthAbovePct(50))
{
@@ -127,7 +127,7 @@ class boss_jeklik : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -198,7 +198,7 @@ class boss_jeklik : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetZulGurubAI<boss_jeklikAI>(creature);
}
@@ -216,15 +216,15 @@ class npc_batrider : public CreatureScript
uint32 Bomb_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Bomb_Timer = 2000;
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -244,7 +244,7 @@ class npc_batrider : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_batriderAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp
index 240a3b1fc9a..f766a795658 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp
@@ -74,17 +74,17 @@ class boss_jindo : public CreatureScript
{
boss_jindoAI(Creature* creature) : BossAI(creature, DATA_JINDO) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_BRAIN_WASH_TOTEM, 20000);
@@ -95,7 +95,7 @@ class boss_jindo : public CreatureScript
Talk(SAY_AGGRO);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -159,7 +159,7 @@ class boss_jindo : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_jindoAI(creature);
}
@@ -181,14 +181,14 @@ class npc_healing_ward : public CreatureScript
uint32 Heal_Timer;
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
Heal_Timer = 2000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// Heal_Timer
if (Heal_Timer <= diff)
@@ -202,7 +202,7 @@ class npc_healing_ward : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_healing_wardAI>(creature);
}
@@ -220,15 +220,15 @@ class npc_shade_of_jindo : public CreatureScript
uint32 ShadowShock_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
ShadowShock_Timer = 1000;
DoCast(me, SPELL_INVISIBLE, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// ShadowShock_Timer
if (ShadowShock_Timer <= diff)
@@ -241,7 +241,7 @@ class npc_shade_of_jindo : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_shade_of_jindoAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
index bb2a17704ed..72ba9db3637 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
@@ -114,7 +114,7 @@ class boss_mandokir : public CreatureScript
{
boss_mandokirAI(Creature* creature) : BossAI(creature, DATA_MANDOKIR) { }
- void Reset() OVERRIDE
+ void Reset() override
{
if (me->GetPositionZ() > 140.0f)
{
@@ -130,7 +130,7 @@ class boss_mandokir : public CreatureScript
me->Mount(MODEL_OHGAN_MOUNT);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
// Do not want to unsummon Ohgan
for (int i = 0; i < CHAINED_SPIRT_COUNT; ++i)
@@ -140,7 +140,7 @@ class boss_mandokir : public CreatureScript
instance->SaveToDB();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_OVERPOWER, urand(7000, 9000));
@@ -163,7 +163,7 @@ class boss_mandokir : public CreatureScript
DoZoneInCombat();
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -179,7 +179,7 @@ class boss_mandokir : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == WAYPOINT_MOTION_TYPE)
{
@@ -193,7 +193,7 @@ class boss_mandokir : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -238,7 +238,7 @@ class boss_mandokir : public CreatureScript
events.ScheduleEvent(EVENT_OVERPOWER, urand(6000, 12000));
break;
case EVENT_MORTAL_STRIKE:
- if (me->GetVictim() && me->GetVictim()->HealthBelowPct(50))
+ if (me->GetVictim() && me->EnsureVictim()->HealthBelowPct(50))
DoCastVictim(SPELL_MORTAL_STRIKE, true);
events.ScheduleEvent(EVENT_MORTAL_STRIKE, urand(12000, 18000));
break;
@@ -280,7 +280,7 @@ class boss_mandokir : public CreatureScript
uint64 chainedSpirtGUIDs[CHAINED_SPIRT_COUNT];
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetZulGurubAI<boss_mandokirAI>(creature);
}
@@ -302,19 +302,19 @@ class npc_ohgan : public CreatureScript
{
npc_ohganAI(Creature* creature) : ScriptedAI(creature), instance(creature->GetInstanceScript()) { }
- void Reset() OVERRIDE
+ void Reset() override
{
SunderArmor_Timer = 5000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetBossState(DATA_OHGAN, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// Return since we have no target
if (!UpdateVictim())
@@ -334,7 +334,7 @@ class npc_ohgan : public CreatureScript
InstanceScript* instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetZulGurubAI<npc_ohganAI>(creature);
}
@@ -355,20 +355,20 @@ class npc_vilebranch_speaker : public CreatureScript
{
npc_vilebranch_speakerAI(Creature* creature) : ScriptedAI(creature), instance(creature->GetInstanceScript()) { }
- void Reset() OVERRIDE
+ void Reset() override
{
demoralizing_Shout_Timer = urand(2000, 4000);
cleave_Timer = urand(5000, 8000);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetBossState(DATA_MANDOKIR, SPECIAL);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// Return since we have no target
if (!UpdateVictim())
@@ -395,7 +395,7 @@ class npc_vilebranch_speaker : public CreatureScript
InstanceScript* instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_vilebranch_speakerAI>(creature);
}
@@ -418,13 +418,13 @@ class spell_threatening_gaze : public SpellScriptLoader
caster->CastSpell(target, SPELL_WATCH_CHARGE);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectRemove += AuraEffectRemoveFn(spell_threatening_gaze_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_threatening_gaze_AuraScript();
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp
index 0afee7f66e0..bbc1fb6c90e 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp
@@ -77,27 +77,27 @@ class boss_marli : public CreatureScript
{
boss_marliAI(Creature* creature) : BossAI(creature, DATA_MARLI) { }
- void Reset() OVERRIDE
+ void Reset() override
{
if (events.IsInPhase(PHASE_THREE))
me->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, 35.0f, false); // hack
_Reset();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_SPAWN_START_SPIDERS, 1000, 0, PHASE_ONE);
Talk(SAY_AGGRO);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -204,7 +204,7 @@ class boss_marli : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_marliAI(creature);
}
@@ -221,14 +221,14 @@ class npc_spawn_of_marli : public CreatureScript
uint32 LevelUp_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
LevelUp_Timer = 3000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -245,7 +245,7 @@ class npc_spawn_of_marli : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_spawn_of_marliAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp
index 6ed9f5e073f..015a2840a9c 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp
@@ -56,7 +56,7 @@ class boss_renataki : public CreatureScript
bool Invisible;
bool Ambushed;
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
Invisible_Timer = urand(8000, 18000);
@@ -69,17 +69,17 @@ class boss_renataki : public CreatureScript
Ambushed = false;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -155,7 +155,7 @@ class boss_renataki : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_renatakiAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp
index 63531fc8ee9..997818aced2 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp
@@ -88,7 +88,7 @@ class boss_thekal : public CreatureScript
bool Enraged;
bool WasDead;
- void Reset() OVERRIDE
+ void Reset() override
{
if (events.IsInPhase(PHASE_TWO))
me->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, 35.0f, false); // hack
@@ -97,13 +97,13 @@ class boss_thekal : public CreatureScript
WasDead = false;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_MORTALCLEAVE, 4000, 0, PHASE_ONE); // Phase 1
@@ -113,12 +113,12 @@ class boss_thekal : public CreatureScript
Talk(SAY_AGGRO);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
instance->SetBossState(DATA_THEKAL, NOT_STARTED);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -249,7 +249,7 @@ class boss_thekal : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_thekalAI>(creature);
}
@@ -277,7 +277,7 @@ class npc_zealot_lorkhan : public CreatureScript
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
Shield_Timer = 1000;
BloodLust_Timer = 16000;
@@ -293,11 +293,11 @@ class npc_zealot_lorkhan : public CreatureScript
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -313,7 +313,7 @@ class npc_zealot_lorkhan : public CreatureScript
if (BloodLust_Timer <= diff)
{
DoCast(me, SPELL_BLOODLUST);
- BloodLust_Timer = 20000+rand()%8000;
+ BloodLust_Timer = 20000 + rand32() % 8000;
} else BloodLust_Timer -= diff;
//Casting Greaterheal to Thekal or Zath if they are in meele range.
@@ -337,14 +337,14 @@ class npc_zealot_lorkhan : public CreatureScript
break;
}
- GreaterHeal_Timer = 15000+rand()%5000;
+ GreaterHeal_Timer = 15000 + rand32() % 5000;
} else GreaterHeal_Timer -= diff;
//Disarm_Timer
if (Disarm_Timer <= diff)
{
DoCastVictim(SPELL_DISARM);
- Disarm_Timer = 15000+rand()%10000;
+ Disarm_Timer = 15000 + rand32() % 10000;
} else Disarm_Timer -= diff;
//Check_Timer for the death of LorKhan and Zath.
@@ -396,7 +396,7 @@ class npc_zealot_lorkhan : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_zealot_lorkhanAI>(creature);
}
@@ -426,7 +426,7 @@ class npc_zealot_zath : public CreatureScript
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
SweepingStrikes_Timer = 13000;
SinisterStrike_Timer = 8000;
@@ -443,11 +443,11 @@ class npc_zealot_zath : public CreatureScript
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -456,14 +456,14 @@ class npc_zealot_zath : public CreatureScript
if (SweepingStrikes_Timer <= diff)
{
DoCastVictim(SPELL_SWEEPINGSTRIKES);
- SweepingStrikes_Timer = 22000+rand()%4000;
+ SweepingStrikes_Timer = 22000 + rand32() % 4000;
} else SweepingStrikes_Timer -= diff;
//SinisterStrike_Timer
if (SinisterStrike_Timer <= diff)
{
DoCastVictim(SPELL_SINISTERSTRIKE);
- SinisterStrike_Timer = 8000+rand()%8000;
+ SinisterStrike_Timer = 8000 + rand32() % 8000;
} else SinisterStrike_Timer -= diff;
//Gouge_Timer
@@ -474,21 +474,21 @@ class npc_zealot_zath : public CreatureScript
if (DoGetThreat(me->GetVictim()))
DoModifyThreatPercent(me->GetVictim(), -100);
- Gouge_Timer = 17000+rand()%10000;
+ Gouge_Timer = 17000 + rand32() % 10000;
} else Gouge_Timer -= diff;
//Kick_Timer
if (Kick_Timer <= diff)
{
DoCastVictim(SPELL_KICK);
- Kick_Timer = 15000+rand()%10000;
+ Kick_Timer = 15000 + rand32() % 10000;
} else Kick_Timer -= diff;
//Blind_Timer
if (Blind_Timer <= diff)
{
DoCastVictim(SPELL_BLIND);
- Blind_Timer = 10000+rand()%10000;
+ Blind_Timer = 10000 + rand32() % 10000;
} else Blind_Timer -= diff;
//Check_Timer for the death of LorKhan and Zath.
@@ -540,7 +540,7 @@ class npc_zealot_zath : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_zealot_zathAI>(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp
index eb795d3a9ef..7047d22c970 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp
@@ -92,7 +92,7 @@ class boss_venoxis : public CreatureScript
{
boss_venoxisAI(Creature* creature) : BossAI(creature, DATA_VENOXIS) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
// remove all spells and auras from previous attempts
@@ -105,14 +105,14 @@ class boss_venoxis : public CreatureScript
events.SetPhase(PHASE_ONE);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_VENOXIS_DEATH);
me->RemoveAllAuras();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
me->SetReactState(REACT_AGGRESSIVE);
@@ -131,7 +131,7 @@ class boss_venoxis : public CreatureScript
DoZoneInCombat();
}
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
// check if venoxis is ready to transform
if (!_transformed && !HealthAbovePct(50))
@@ -148,7 +148,7 @@ class boss_venoxis : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -262,7 +262,7 @@ class boss_venoxis : public CreatureScript
bool _frenzied;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_venoxisAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp
index 9b7d3863ba8..6644724a430 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp
@@ -48,24 +48,24 @@ class boss_wushoolay : public CreatureScript
{
boss_wushoolayAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_LIGHTNINGCLOUD, urand(5000, 10000));
events.ScheduleEvent(EVENT_LIGHTNINGWAVE, urand(8000, 16000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -96,7 +96,7 @@ class boss_wushoolay : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_wushoolayAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp
index 67d40abaea3..de1ed629a34 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp
@@ -45,7 +45,7 @@ class instance_zulgurub : public InstanceMapScript
LoadDoorData(doorData);
}
- void Initialize() OVERRIDE
+ void Initialize() override
{
_zealotLorkhanGUID = 0;
_zealotZathGUID = 0;
@@ -56,13 +56,13 @@ class instance_zulgurub : public InstanceMapScript
_goGongOfBethekkGUID = 0;
}
- bool IsEncounterInProgress() const OVERRIDE
+ bool IsEncounterInProgress() const override
{
// not active in Zul'Gurub
return false;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -87,7 +87,7 @@ class instance_zulgurub : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -106,7 +106,7 @@ class instance_zulgurub : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -118,7 +118,7 @@ class instance_zulgurub : public InstanceMapScript
}
}
- uint64 GetData64(uint32 uiData) const OVERRIDE
+ uint64 GetData64(uint32 uiData) const override
{
switch (uiData)
{
@@ -144,7 +144,7 @@ class instance_zulgurub : public InstanceMapScript
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -155,7 +155,7 @@ class instance_zulgurub : public InstanceMapScript
return saveStream.str();
}
- void Load(const char* str) OVERRIDE
+ void Load(const char* str) override
{
if (!str)
{
@@ -199,7 +199,7 @@ class instance_zulgurub : public InstanceMapScript
uint64 _goGongOfBethekkGUID;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_zulgurub_InstanceMapScript(map);
}
diff --git a/src/server/scripts/EasternKingdoms/boss_kruul.cpp b/src/server/scripts/EasternKingdoms/boss_kruul.cpp
deleted file mode 100644
index faed1a3cc34..00000000000
--- a/src/server/scripts/EasternKingdoms/boss_kruul.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* ScriptData
-SDName: Boss_Kruul
-SD%Complete: 100
-SDComment: Highlord Kruul are presumably no longer in-game on regular bases, however future events could bring him back.
-SDCategory: Bosses
-EndScriptData */
-
-#include "ScriptMgr.h"
-#include "ScriptedCreature.h"
-
-enum Spells
-{
- SPELL_SHADOWVOLLEY = 21341,
- SPELL_CLEAVE = 20677,
- SPELL_THUNDERCLAP = 23931,
- SPELL_TWISTEDREFLECTION = 21063,
- SPELL_VOIDBOLT = 21066,
- SPELL_RAGE = 21340,
- SPELL_CAPTURESOUL = 21054
-};
-
-class boss_kruul : public CreatureScript
-{
-public:
- boss_kruul() : CreatureScript("boss_kruul") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_kruulAI(creature);
- }
-
- struct boss_kruulAI : public ScriptedAI
- {
- boss_kruulAI(Creature* creature) : ScriptedAI(creature) { }
-
- uint32 ShadowVolley_Timer;
- uint32 Cleave_Timer;
- uint32 ThunderClap_Timer;
- uint32 TwistedReflection_Timer;
- uint32 VoidBolt_Timer;
- uint32 Rage_Timer;
- uint32 Hound_Timer;
-
- void Reset() OVERRIDE
- {
- ShadowVolley_Timer = 10000;
- Cleave_Timer = 14000;
- ThunderClap_Timer = 20000;
- TwistedReflection_Timer = 25000;
- VoidBolt_Timer = 30000;
- Rage_Timer = 60000; //Cast rage after 1 minute
- Hound_Timer = 8000;
- }
-
- void EnterCombat(Unit* /*who*/) OVERRIDE
- {
- }
-
- void KilledUnit(Unit* /*victim*/) OVERRIDE
- {
- // When a player, pet or totem gets killed, Lord Kazzak casts this spell to instantly regenerate 70, 000 health.
- DoCast(me, SPELL_CAPTURESOUL);
- }
-
- void SummonHounds(Unit* victim)
- {
- if (Creature* Hound = DoSpawnCreature(19207, float(irand(-9, 9)), float(irand(-9, 9)), 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000))
- Hound->AI()->AttackStart(victim);
- }
-
- void UpdateAI(uint32 diff) OVERRIDE
- {
- //Return since we have no target
- if (!UpdateVictim())
- return;
-
- //ShadowVolley_Timer
- if (ShadowVolley_Timer <= diff)
- {
- if (urand(0, 99) < 45)
- DoCastVictim(SPELL_SHADOWVOLLEY);
-
- ShadowVolley_Timer = 5000;
- } else ShadowVolley_Timer -= diff;
-
- //Cleave_Timer
- if (Cleave_Timer <= diff)
- {
- if (urand(0, 1))
- DoCastVictim(SPELL_CLEAVE);
-
- Cleave_Timer = 10000;
- } else Cleave_Timer -= diff;
-
- //ThunderClap_Timer
- if (ThunderClap_Timer <= diff)
- {
- if (urand(0, 9) < 2)
- DoCastVictim(SPELL_THUNDERCLAP);
-
- ThunderClap_Timer = 12000;
- } else ThunderClap_Timer -= diff;
-
- //TwistedReflection_Timer
- if (TwistedReflection_Timer <= diff)
- {
- DoCastVictim(SPELL_TWISTEDREFLECTION);
- TwistedReflection_Timer = 30000;
- } else TwistedReflection_Timer -= diff;
-
- //VoidBolt_Timer
- if (VoidBolt_Timer <= diff)
- {
- if (urand(0, 9) < 4)
- DoCastVictim(SPELL_VOIDBOLT);
-
- VoidBolt_Timer = 18000;
- } else VoidBolt_Timer -= diff;
-
- //Rage_Timer
- if (Rage_Timer <= diff)
- {
- DoCast(me, SPELL_RAGE);
- Rage_Timer = 70000;
- } else Rage_Timer -= diff;
-
- //Hound_Timer
- if (Hound_Timer <= diff)
- {
- SummonHounds(me->GetVictim());
- SummonHounds(me->GetVictim());
- SummonHounds(me->GetVictim());
-
- Hound_Timer = 45000;
- } else Hound_Timer -= diff;
-
- DoMeleeAttackIfReady();
- }
- };
-};
-
-void AddSC_boss_kruul()
-{
- new boss_kruul();
-}
diff --git a/src/server/scripts/EasternKingdoms/zone_alterac_mountains.cpp b/src/server/scripts/EasternKingdoms/zone_alterac_mountains.cpp
deleted file mode 100644
index 3df4fddf69f..00000000000
--- a/src/server/scripts/EasternKingdoms/zone_alterac_mountains.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* ScriptData
-SDName: Alterac_Mountains
-SD%Complete: 0
-SDComment: Placeholder
-SDCategory: Alterac Mountains
-EndScriptData */
-
-/* ContentData
-EndContentData */
-
-#include "ScriptMgr.h"
-#include "ScriptedCreature.h"
-
-/*void AddSC_alterac_mountains()
-{
- Script* newscript;
-}*/
diff --git a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp
index 7a2c1cb09db..0480b99b912 100644
--- a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp
@@ -65,7 +65,7 @@ class npc_professor_phizzlethorpe : public CreatureScript
{
npc_professor_phizzlethorpeAI(Creature* creature) : npc_escortAI(creature) { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -104,12 +104,12 @@ class npc_professor_phizzlethorpe : public CreatureScript
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->AI()->AttackStart(me);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
}
@@ -124,13 +124,13 @@ class npc_professor_phizzlethorpe : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_professor_phizzlethorpeAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp b/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp
index bc09983fee1..293a6b90915 100644
--- a/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp
@@ -46,7 +46,7 @@ class spell_razelikh_teleport_group : public SpellScriptLoader
{
PrepareSpellScript(spell_razelikh_teleport_group_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TELEPORT_SINGLE) && !sSpellMgr->GetSpellInfo(SPELL_TELEPORT_SINGLE_IN_GROUP))
return false;
@@ -69,13 +69,13 @@ class spell_razelikh_teleport_group : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_razelikh_teleport_group_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_razelikh_teleport_group_SpellScript();
}
diff --git a/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp b/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp
index b991ab3c7a2..9d046ff16d8 100644
--- a/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp
@@ -66,9 +66,9 @@ public:
{
npc_ragged_johnAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (who->HasAura(SPELL_MOTHERS_MILK))
{
@@ -83,10 +83,10 @@ public:
ScriptedAI::MoveInLineOfSight(who);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
};
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -143,7 +143,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -155,7 +155,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ragged_johnAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp
index 0332727fa4c..4eaf98d0a0e 100644
--- a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp
@@ -29,18 +29,19 @@ EndScriptData */
enum TwilightCorrupter
{
- ITEM_FRAGMENT = 21149,
NPC_TWILIGHT_CORRUPTER = 15625,
- YELL_TWILIGHTCORRUPTOR_RESPAWN = 0,
- YELL_TWILIGHTCORRUPTOR_AGGRO = 1,
- YELL_TWILIGHTCORRUPTOR_KILL = 2,
+ YELL_TWILIGHT_CORRUPTOR_RESPAWN = 0,
+ YELL_TWILIGHT_CORRUPTOR_AGGRO = 1,
+ YELL_TWILIGHT_CORRUPTOR_KILL = 2,
+
SPELL_SOUL_CORRUPTION = 25805,
SPELL_CREATURE_OF_NIGHTMARE = 25806,
SPELL_LEVEL_UP = 24312,
EVENT_SOUL_CORRUPTION = 1,
EVENT_CREATURE_OF_NIGHTMARE = 2,
- FACTION_HOSTILE = 14
+
+ QUEST_NIGHTMARES_CORRUPTION = 8735
};
/*######
@@ -56,24 +57,25 @@ public:
{
boss_twilight_corrupterAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
- KillCount = 0;
+ _events.Reset();
+ KillCount = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
- Talk(YELL_TWILIGHTCORRUPTOR_AGGRO);
+ Talk(YELL_TWILIGHT_CORRUPTOR_AGGRO);
_events.ScheduleEvent(EVENT_SOUL_CORRUPTION, 15000);
_events.ScheduleEvent(EVENT_CREATURE_OF_NIGHTMARE, 30000);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
{
++KillCount;
- Talk(YELL_TWILIGHTCORRUPTOR_KILL, victim);
+ Talk(YELL_TWILIGHT_CORRUPTOR_KILL, victim);
if (KillCount == 3)
{
@@ -83,29 +85,34 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
_events.Update(diff);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_SOUL_CORRUPTION:
- DoCastVictim(SPELL_SOUL_CORRUPTION);
- _events.ScheduleEvent(EVENT_SOUL_CORRUPTION, rand()%4000+15000);
+ DoCastAOE(SPELL_SOUL_CORRUPTION);
+ _events.ScheduleEvent(EVENT_SOUL_CORRUPTION, urand(15000, 19000));
break;
case EVENT_CREATURE_OF_NIGHTMARE:
- DoCastVictim(SPELL_CREATURE_OF_NIGHTMARE);
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
+ DoCast(target, SPELL_CREATURE_OF_NIGHTMARE);
_events.ScheduleEvent(EVENT_CREATURE_OF_NIGHTMARE, 45000);
break;
default:
break;
}
}
+
DoMeleeAttackIfReady();
}
@@ -114,7 +121,7 @@ public:
uint8 KillCount;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_twilight_corrupterAI(creature);
}
@@ -124,27 +131,22 @@ public:
# at_twilight_grove
######*/
+Position const TwillightCorrupter = { -10328.16f, -489.57f, 49.95f, 0.0f };
+
class at_twilight_grove : public AreaTriggerScript
{
-public:
- at_twilight_grove() : AreaTriggerScript("at_twilight_grove") { }
+ public:
+ at_twilight_grove() : AreaTriggerScript("at_twilight_grove") { }
- bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE
- {
- if (player->HasQuestForItem(ITEM_FRAGMENT))
+ bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override
{
- if (Unit* corrupter = player->SummonCreature(NPC_TWILIGHT_CORRUPTER, -10328.16f, -489.57f, 49.95f, 0, TEMPSUMMON_MANUAL_DESPAWN, 60000))
- corrupter->setFaction(FACTION_HOSTILE);
+ if (player->GetQuestStatus(QUEST_NIGHTMARES_CORRUPTION) == QUEST_STATUS_INCOMPLETE)
+ if (!player->FindNearestCreature(NPC_TWILIGHT_CORRUPTER, 500.0f, true))
+ if (Creature* corrupter = player->SummonCreature(NPC_TWILIGHT_CORRUPTER, TwillightCorrupter, TEMPSUMMON_MANUAL_DESPAWN, 60000))
+ corrupter->AI()->Talk(YELL_TWILIGHT_CORRUPTOR_RESPAWN, player);
- if (Creature* CorrupterSpeaker = player->SummonCreature(1, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()-1, 0, TEMPSUMMON_TIMED_DESPAWN, 15000))
- {
- CorrupterSpeaker->SetName("Twilight Corrupter");
- CorrupterSpeaker->SetVisible(true);
- CorrupterSpeaker->AI()->Talk(YELL_TWILIGHTCORRUPTOR_RESPAWN, player);
- }
- }
- return false;
- };
+ return false;
+ };
};
void AddSC_duskwood()
diff --git a/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp
index 23b218897b7..81b0491f48d 100644
--- a/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp
@@ -45,18 +45,18 @@ public:
{
npc_ghoul_flayerAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
if (killer->GetTypeId() == TYPEID_PLAYER)
me->SummonCreature(11064, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 60000);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ghoul_flayerAI(creature);
}
@@ -71,7 +71,7 @@ class npc_augustus_the_touched : public CreatureScript
public:
npc_augustus_the_touched() : CreatureScript("npc_augustus_the_touched") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_TRADE)
@@ -79,7 +79,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -106,7 +106,7 @@ class npc_darrowshire_spirit : public CreatureScript
public:
npc_darrowshire_spirit() : CreatureScript("npc_darrowshire_spirit") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
player->SEND_GOSSIP_MENU(3873, creature->GetGUID());
player->TalkedToCreature(creature->GetEntry(), creature->GetGUID());
@@ -114,7 +114,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_darrowshire_spiritAI(creature);
}
@@ -123,13 +123,13 @@ public:
{
npc_darrowshire_spiritAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
DoCast(me, SPELL_SPIRIT_SPAWNIN);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
};
};
@@ -147,7 +147,7 @@ class npc_tirion_fordring : public CreatureScript
public:
npc_tirion_fordring() : CreatureScript("npc_tirion_fordring") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -172,7 +172,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
diff --git a/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp b/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp
deleted file mode 100644
index dcfa576e7fe..00000000000
--- a/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* ScriptData
-SDName: Eversong_Woods
-SD%Complete: 95
-SDComment: Quest support: 8487, 8488, 8490
-SDCategory: Eversong Woods
-EndScriptData */
-
-/* ContentData
-npc_apprentice_mirveda
-npc_infused_crystal
-EndContentData */
-
-#include "ScriptMgr.h"
-#include "ScriptedCreature.h"
-#include "ScriptedGossip.h"
-#include "ScriptedEscortAI.h"
-#include "Player.h"
-
-enum UnexpectedResults
-{
- // Quest
- QUEST_CORRUPTED_SOIL = 8487,
- QUEST_UNEXPECTED_RESULT = 8488,
-
- // Creatures
- NPC_GHARZUL = 15958, // Quest 8488
- NPC_ANGERSHADE = 15656, // Quest 8488
-
- // Factions
- FACTION_NORMAL = 1604, // Quest 8488
- FACTION_COMBAT = 232, // Quest 8488
-
- // Spells
- SPELL_TEST_SOIL = 29535, // Quest 8487
- SPELL_FIREBALL = 20811, // Quest 8488
-
- // Text
- SAY_TEST_SOIL = 0, // Quest 8487
-
- // Events
- EVENT_TALK = 1, // Quest 8487
- EVENT_ADD_QUEST_GIVER_FLAG = 2, // Quest 8487
- EVENT_SUMMON = 3, // Quest 8488
- EVENT_FIREBALL = 4 // Quest 8488
-};
-
-class npc_apprentice_mirveda : public CreatureScript
-{
-public:
- npc_apprentice_mirveda() : CreatureScript("npc_apprentice_mirveda") { }
-
- struct npc_apprentice_mirvedaAI : public ScriptedAI
- {
- npc_apprentice_mirvedaAI(Creature* creature) : ScriptedAI(creature), Summons(me) { }
-
- uint32 KillCount;
- uint64 PlayerGUID;
- SummonList Summons;
- EventMap events;
-
- void Reset() OVERRIDE
- {
- SetCombatMovement(false);
- KillCount = 0;
- PlayerGUID = 0;
- Summons.DespawnAll();
- }
-
- void sQuestReward(Player* /*player*/, Quest const* quest, uint32 /*opt*/) OVERRIDE
- {
- if (quest->GetQuestId() == QUEST_CORRUPTED_SOIL)
- {
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
- events.ScheduleEvent(EVENT_TALK, 2000);
- }
- }
-
- void sQuestAccept(Player* player, Quest const* quest) OVERRIDE
- {
- if (quest->GetQuestId() == QUEST_UNEXPECTED_RESULT)
- {
- me->setFaction(FACTION_COMBAT);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
- events.ScheduleEvent(EVENT_SUMMON, 1000);
- PlayerGUID = player->GetGUID();
- }
- }
-
- void EnterCombat(Unit* /*who*/) OVERRIDE
- {
- events.ScheduleEvent(EVENT_FIREBALL, 1000);
- }
-
- void JustSummoned(Creature* summoned) OVERRIDE
- {
- // This is the best I can do because AttackStart does nothing
- summoned->GetMotionMaster()->MovePoint(1, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
- // summoned->AI()->AttackStart(me);
- Summons.Summon(summoned);
- }
-
- void SummonedCreatureDies(Creature* summoned, Unit* /*who*/) OVERRIDE
- {
- Summons.Despawn(summoned);
- ++KillCount;
- }
-
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- me->setFaction(FACTION_NORMAL);
-
- if (PlayerGUID)
- if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID))
- player->FailQuest(QUEST_UNEXPECTED_RESULT);
- }
-
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (KillCount >= 3 && PlayerGUID)
- if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID))
- if (player->GetQuestStatus(QUEST_UNEXPECTED_RESULT) == QUEST_STATUS_INCOMPLETE)
- {
- player->CompleteQuest(QUEST_UNEXPECTED_RESULT);
- me->setFaction(FACTION_NORMAL);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
- }
-
- events.Update(diff);
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_TALK:
- Talk(SAY_TEST_SOIL);
- events.ScheduleEvent(EVENT_ADD_QUEST_GIVER_FLAG, 7000);
- break;
- case EVENT_ADD_QUEST_GIVER_FLAG:
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
- break;
- case EVENT_SUMMON:
- me->SummonCreature(NPC_GHARZUL, 8749.505f, -7132.595f, 35.31983f, 3.816502f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 180000);
- me->SummonCreature(NPC_ANGERSHADE, 8755.38f, -7131.521f, 35.30957f, 3.816502f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 180000);
- me->SummonCreature(NPC_ANGERSHADE, 8753.199f, -7125.975f, 35.31986f, 3.816502f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 180000);
- break;
- case EVENT_FIREBALL:
- if (!UpdateVictim())
- continue;
- DoCastVictim(SPELL_FIREBALL, true); // Not casting in combat
- events.ScheduleEvent(EVENT_FIREBALL, 3000);
- break;
- default:
- break;
- }
- }
- DoMeleeAttackIfReady();
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_apprentice_mirvedaAI(creature);
- }
-};
-
-/*######
-## npc_infused_crystal
-######*/
-
-enum InfusedCrystal
-{
- // Quest
- QUEST_POWERING_OUR_DEFENSES = 8490,
-
- // Says
- EMOTE = 0,
-
- // Creatures
- NPC_ENRAGED_WRAITH = 17086
-};
-
-struct Location
-{
- float x, y, z;
-};
-
-static Location SpawnLocations[] =
-{
- {8270.68f, -7188.53f, 139.619f},
- {8284.27f, -7187.78f, 139.603f},
- {8297.43f, -7193.53f, 139.603f},
- {8303.5f, -7201.96f, 139.577f},
- {8273.22f, -7241.82f, 139.382f},
- {8254.89f, -7222.12f, 139.603f},
- {8278.51f, -7242.13f, 139.162f},
- {8267.97f, -7239.17f, 139.517f}
-};
-
-class npc_infused_crystal : public CreatureScript
-{
-public:
- npc_infused_crystal() : CreatureScript("npc_infused_crystal") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_infused_crystalAI(creature);
- }
-
- struct npc_infused_crystalAI : public ScriptedAI
- {
- npc_infused_crystalAI(Creature* creature) : ScriptedAI(creature)
- {
- SetCombatMovement(false);
- }
-
- uint32 EndTimer;
- uint32 WaveTimer;
- bool Completed;
- bool Progress;
- uint64 PlayerGUID;
-
- void Reset() OVERRIDE
- {
- EndTimer = 0;
- Completed = false;
- Progress = false;
- PlayerGUID = 0;
- WaveTimer = 0;
- }
-
- void MoveInLineOfSight(Unit* who) OVERRIDE
-
- {
- if (!Progress && who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 10.0f))
- {
- if (who->ToPlayer()->GetQuestStatus(QUEST_POWERING_OUR_DEFENSES) == QUEST_STATUS_INCOMPLETE)
- {
- PlayerGUID = who->GetGUID();
- WaveTimer = 1000;
- EndTimer = 60000;
- Progress = true;
- }
- }
- }
-
- void JustSummoned(Creature* summoned) OVERRIDE
- {
- summoned->AI()->AttackStart(me);
- }
-
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- if (PlayerGUID && !Completed)
- if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID))
- player->FailQuest(QUEST_POWERING_OUR_DEFENSES);
- }
-
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (EndTimer < diff && Progress)
- {
- Talk(EMOTE);
- Completed = true;
- if (PlayerGUID)
- if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID))
- player->CompleteQuest(QUEST_POWERING_OUR_DEFENSES);
-
- me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
- me->RemoveCorpse();
- } else EndTimer -= diff;
-
- if (WaveTimer < diff && !Completed && Progress)
- {
- uint32 ran1 = rand()%8;
- uint32 ran2 = rand()%8;
- uint32 ran3 = rand()%8;
- me->SummonCreature(NPC_ENRAGED_WRAITH, SpawnLocations[ran1].x, SpawnLocations[ran1].y, SpawnLocations[ran1].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
- me->SummonCreature(NPC_ENRAGED_WRAITH, SpawnLocations[ran2].x, SpawnLocations[ran2].y, SpawnLocations[ran2].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
- me->SummonCreature(NPC_ENRAGED_WRAITH, SpawnLocations[ran3].x, SpawnLocations[ran3].y, SpawnLocations[ran3].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
- WaveTimer = 30000;
- } else WaveTimer -= diff;
- }
- };
-};
-
-void AddSC_eversong_woods()
-{
- new npc_apprentice_mirveda();
- new npc_infused_crystal();
-}
diff --git a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp
index 86fb1677526..68f41ce6588 100644
--- a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp
@@ -64,7 +64,7 @@ public:
{
npc_ranger_lilathaAI(Creature* creature) : npc_escortAI(creature) { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -121,14 +121,14 @@ public:
}
}
- void Reset() OVERRIDE
+ void Reset() override
{
if (GameObject* Cage = me->FindNearestGameObject(GO_CAGE, 20))
Cage->SetGoState(GO_STATE_READY);
}
};
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_ESCAPE_FROM_THE_CATACOMBS)
{
@@ -140,7 +140,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ranger_lilathaAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp
index 9db6a6b4d19..86ddf33f2fd 100644
--- a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp
@@ -60,9 +60,9 @@ public:
{
npc_oox09hlAI(Creature* creature) : npc_escortAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (who->GetEntry() == NPC_MARAUDING_OWL || who->GetEntry() == NPC_VILE_AMBUSHER)
return;
@@ -70,7 +70,7 @@ public:
Talk(SAY_OOX_AGGRO);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
}
@@ -86,7 +86,7 @@ public:
}
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -104,7 +104,7 @@ public:
}
}
- void WaypointStart(uint32 pointId) OVERRIDE
+ void WaypointStart(uint32 pointId) override
{
switch (pointId)
{
@@ -112,8 +112,7 @@ public:
for (uint8 i = 0; i < 3; ++i)
{
const Position src = {147.927444f, -3851.513428f, 130.893f, 0};
- Position dst;
- me->GetRandomPoint(src, 7.0f, dst);
+ Position dst = me->GetRandomPoint(src, 7.0f);
DoSummon(NPC_MARAUDING_OWL, dst, 25000, TEMPSUMMON_CORPSE_TIMED_DESPAWN);
}
break;
@@ -121,8 +120,7 @@ public:
for (uint8 i = 0; i < 3; ++i)
{
const Position src = {-141.151581f, -4291.213867f, 120.130f, 0};
- Position dst;
- me->GetRandomPoint(src, 7.0f, dst);
+ Position dst = me->GetRandomPoint(src, 7.0f);
me->SummonCreature(NPC_VILE_AMBUSHER, dst, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 25000);
}
break;
@@ -130,7 +128,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_oox09hlAI(creature);
}
@@ -184,13 +182,13 @@ public:
spawnId = 0;
}
- void Reset() OVERRIDE
+ void Reset() override
{
postEventCount = 0;
postEventTimer = 3000;
}
- void JustRespawned() OVERRIDE
+ void JustRespawned() override
{
_IsByOutrunner = false;
spawnId = 0;
@@ -198,7 +196,7 @@ public:
npc_escortAI::JustRespawned();
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (HasEscortState(STATE_ESCORT_ESCORTING))
{
@@ -209,7 +207,7 @@ public:
_IsByOutrunner = true;
}
- if (rand()%4)
+ if (rand32() % 4)
return;
//only if attacked and escorter is not in combat?
@@ -232,7 +230,7 @@ public:
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->SetWalk(false);
summoned->GetMotionMaster()->MovePoint(0, AmbushMoveTo[spawnId].posX, AmbushMoveTo[spawnId].posY, AmbushMoveTo[spawnId].posZ);
@@ -249,7 +247,7 @@ public:
}
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -275,7 +273,7 @@ public:
}
}
- void UpdateEscortAI(const uint32 diff) OVERRIDE
+ void UpdateEscortAI(const uint32 diff) override
{
//Check if we have a current target
if (!UpdateVictim())
@@ -321,7 +319,7 @@ public:
bool _IsByOutrunner;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_rinjiAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/zone_ironforge.cpp b/src/server/scripts/EasternKingdoms/zone_ironforge.cpp
deleted file mode 100644
index e50bbb9f3e0..00000000000
--- a/src/server/scripts/EasternKingdoms/zone_ironforge.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "ScriptMgr.h"
-#include "ScriptedCreature.h"
-#include "ScriptedGossip.h"
-#include "Player.h"
-
-void AddSC_ironforge() { }
diff --git a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp
index 65c070ffcf1..fc8fdf41f51 100644
--- a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp
@@ -50,7 +50,7 @@ class npc_converted_sentry : public CreatureScript
public:
npc_converted_sentry() : CreatureScript("npc_converted_sentry") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_converted_sentryAI(creature);
}
@@ -62,17 +62,17 @@ public:
bool Credit;
uint32 Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Credit = false;
Timer = 2500;
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!Credit)
{
@@ -104,7 +104,7 @@ class npc_greengill_slave : public CreatureScript
public:
npc_greengill_slave() : CreatureScript("npc_greengill_slave") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_greengill_slaveAI(creature);
}
@@ -113,9 +113,9 @@ public:
{
npc_greengill_slaveAI(Creature* creature) : ScriptedAI(creature) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void SpellHit(Unit* caster, SpellInfo const* spellInfo) OVERRIDE
+ void SpellHit(Unit* caster, SpellInfo const* spellInfo) override
{
Player* player = caster->ToPlayer();
if (!player)
@@ -136,7 +136,7 @@ public:
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
DoMeleeAttackIfReady();
}
diff --git a/src/server/scripts/EasternKingdoms/zone_loch_modan.cpp b/src/server/scripts/EasternKingdoms/zone_loch_modan.cpp
index af0ec5aa4f5..1926a032aeb 100644
--- a/src/server/scripts/EasternKingdoms/zone_loch_modan.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_loch_modan.cpp
@@ -50,7 +50,7 @@ class npc_mountaineer_pebblebitty : public CreatureScript
public:
npc_mountaineer_pebblebitty() : CreatureScript("npc_mountaineer_pebblebitty") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -86,7 +86,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
diff --git a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp
index 08028cc5872..342bba3b729 100644
--- a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp
@@ -47,7 +47,7 @@ public:
{
npc_corporal_keeshanAI(Creature* creature) : npc_escortAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
timer = 0;
phase = 0;
@@ -64,7 +64,7 @@ public:
}
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -91,7 +91,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (HasEscortState(STATE_ESCORT_NONE))
return;
@@ -160,7 +160,7 @@ public:
uint32 shieldBashTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_corporal_keeshanAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp
index b7ab4227e5e..6bdf43c3305 100644
--- a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp
@@ -67,7 +67,7 @@ public:
{
npc_deathstalker_erlandAI(Creature* creature) : npc_escortAI(creature) { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -108,15 +108,15 @@ public:
}
}
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
Talk(SAY_AGGRO, who);
}
};
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_ESCORTING)
{
@@ -129,7 +129,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_deathstalker_erlandAI(creature);
}
@@ -166,20 +166,20 @@ class pyrewood_ambush : public CreatureScript
public:
pyrewood_ambush() : CreatureScript("pyrewood_ambush") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest *quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest *quest) override
{
- if (quest->GetQuestId() == QUEST_PYREWOOD_AMBUSH && !CAST_AI(pyrewood_ambush::pyrewood_ambushAI, creature->AI())->QuestInProgress)
+ if (quest->GetQuestId() == QUEST_PYREWOOD_AMBUSH && !ENSURE_AI(pyrewood_ambush::pyrewood_ambushAI, creature->AI())->QuestInProgress)
{
- CAST_AI(pyrewood_ambush::pyrewood_ambushAI, creature->AI())->QuestInProgress = true;
- CAST_AI(pyrewood_ambush::pyrewood_ambushAI, creature->AI())->Phase = 0;
- CAST_AI(pyrewood_ambush::pyrewood_ambushAI, creature->AI())->KillCount = 0;
- CAST_AI(pyrewood_ambush::pyrewood_ambushAI, creature->AI())->PlayerGUID = player->GetGUID();
+ ENSURE_AI(pyrewood_ambush::pyrewood_ambushAI, creature->AI())->QuestInProgress = true;
+ ENSURE_AI(pyrewood_ambush::pyrewood_ambushAI, creature->AI())->Phase = 0;
+ ENSURE_AI(pyrewood_ambush::pyrewood_ambushAI, creature->AI())->KillCount = 0;
+ ENSURE_AI(pyrewood_ambush::pyrewood_ambushAI, creature->AI())->PlayerGUID = player->GetGUID();
}
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new pyrewood_ambushAI(creature);
}
@@ -199,7 +199,7 @@ public:
bool QuestInProgress;
- void Reset() OVERRIDE
+ void Reset() override
{
WaitTimer = WAIT_SECS;
@@ -212,15 +212,15 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
Summons.Summon(summoned);
++KillCount;
}
- void SummonedCreatureDespawn(Creature* summoned) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summoned) override
{
Summons.Despawn(summoned);
--KillCount;
@@ -245,7 +245,7 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (PlayerGUID)
if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID))
@@ -253,7 +253,7 @@ public:
player->FailQuest(QUEST_PYREWOOD_AMBUSH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//TC_LOG_INFO("scripts", "DEBUG: p(%i) k(%i) d(%u) W(%i)", Phase, KillCount, diff, WaitTimer);
diff --git a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
index 0cd1403d48a..16c66c5e4e3 100644
--- a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
@@ -50,7 +50,7 @@ class npc_archmage_malin : public CreatureScript
public:
npc_archmage_malin() : CreatureScript("npc_archmage_malin") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF)
@@ -62,7 +62,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -91,7 +91,7 @@ class npc_bartleby : public CreatureScript
public:
npc_bartleby() : CreatureScript("npc_bartleby") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_BEAT)
{
@@ -101,7 +101,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_bartlebyAI(creature);
}
@@ -115,13 +115,13 @@ public:
uint32 m_uiNormalFaction;
- void Reset() OVERRIDE
+ void Reset() override
{
if (me->getFaction() != m_uiNormalFaction)
me->setFaction(m_uiNormalFaction);
}
- void AttackedBy(Unit* pAttacker) OVERRIDE
+ void AttackedBy(Unit* pAttacker) override
{
if (me->GetVictim())
return;
@@ -132,7 +132,7 @@ public:
AttackStart(pAttacker);
}
- void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) OVERRIDE
+ void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) override
{
if (uiDamage > me->GetHealth() || me->HealthBelowPctDamaged(15, uiDamage))
{
@@ -161,7 +161,7 @@ class npc_lady_katrana_prestor : public CreatureScript
public:
npc_lady_katrana_prestor() : CreatureScript("npc_lady_katrana_prestor") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -186,7 +186,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -226,7 +226,7 @@ class npc_lord_gregor_lescovar : public CreatureScript
public:
npc_lord_gregor_lescovar() : CreatureScript("npc_lord_gregor_lescovar") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_lord_gregor_lescovarAI(creature);
}
@@ -240,7 +240,7 @@ public:
uint64 MarzonGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
uiTimer = 0;
uiPhase = 0;
@@ -248,27 +248,27 @@ public:
MarzonGUID = 0;
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
me->DisappearAndDie();
- if (Creature* pMarzon = Unit::GetCreature(*me, MarzonGUID))
+ if (Creature* pMarzon = ObjectAccessor::GetCreature(*me, MarzonGUID))
{
if (pMarzon->IsAlive())
pMarzon->DisappearAndDie();
}
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
- if (Creature* pMarzon = Unit::GetCreature(*me, MarzonGUID))
+ if (Creature* pMarzon = ObjectAccessor::GetCreature(*me, MarzonGUID))
{
if (pMarzon->IsAlive() && !pMarzon->IsInCombat())
pMarzon->AI()->AttackStart(who);
}
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -305,7 +305,7 @@ public:
}
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (uiPhase)
{
@@ -335,7 +335,7 @@ public:
uiPhase = 0;
break;
case 5:
- if (Creature* pMarzon = Unit::GetCreature(*me, MarzonGUID))
+ if (Creature* pMarzon = ObjectAccessor::GetCreature(*me, MarzonGUID))
pMarzon->AI()->Talk(SAY_MARZON_1);
uiTimer = 3000;
uiPhase = 6;
@@ -350,7 +350,7 @@ public:
case 7:
if (Creature* pTyrion = me->FindNearestCreature(NPC_TYRION, 20.0f, true))
pTyrion->AI()->Talk(SAY_TYRION_2);
- if (Creature* pMarzon = Unit::GetCreature(*me, MarzonGUID))
+ if (Creature* pMarzon = ObjectAccessor::GetCreature(*me, MarzonGUID))
pMarzon->setFaction(14);
me->setFaction(14);
uiTimer = 0;
@@ -378,7 +378,7 @@ class npc_marzon_silent_blade : public CreatureScript
public:
npc_marzon_silent_blade() : CreatureScript("npc_marzon_silent_blade") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_marzon_silent_bladeAI(creature);
}
@@ -390,12 +390,12 @@ public:
me->SetWalk(true);
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->RestoreFaction();
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
Talk(SAY_MARZON_2);
@@ -409,7 +409,7 @@ public:
}
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
me->DisappearAndDie();
@@ -423,7 +423,7 @@ public:
}
}
- void MovementInform(uint32 uiType, uint32 /*uiId*/) OVERRIDE
+ void MovementInform(uint32 uiType, uint32 /*uiId*/) override
{
if (uiType != POINT_MOTION_TYPE)
return;
@@ -445,7 +445,7 @@ public:
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
return;
@@ -479,7 +479,7 @@ class npc_tyrion_spybot : public CreatureScript
public:
npc_tyrion_spybot() : CreatureScript("npc_tyrion_spybot") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_tyrion_spybotAI(creature);
}
@@ -491,13 +491,13 @@ public:
uint32 uiTimer;
uint32 uiPhase;
- void Reset() OVERRIDE
+ void Reset() override
{
uiTimer = 0;
uiPhase = 0;
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -521,7 +521,7 @@ public:
}
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (uiPhase)
{
@@ -541,7 +541,7 @@ public:
uiPhase = 3;
break;
case 3:
- me->UpdateEntry(NPC_PRIESTESS_TYRIONA, ALLIANCE);
+ me->UpdateEntry(NPC_PRIESTESS_TYRIONA);
uiTimer = 2000;
uiPhase = 4;
break;
@@ -582,8 +582,8 @@ 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())->SetMaxPlayerDistance(200.0f);
+ ENSURE_AI(npc_lord_gregor_lescovar::npc_lord_gregor_lescovarAI, pLescovar->AI())->Start(false, false, player->GetGUID());
+ ENSURE_AI(npc_lord_gregor_lescovar::npc_lord_gregor_lescovarAI, pLescovar->AI())->SetMaxPlayerDistance(200.0f);
}
}
me->DisappearAndDie();
@@ -617,14 +617,14 @@ class npc_tyrion : public CreatureScript
public:
npc_tyrion() : CreatureScript("npc_tyrion") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_THE_ATTACK)
{
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())->SetMaxPlayerDistance(200.0f);
+ ENSURE_AI(npc_tyrion_spybot::npc_tyrion_spybotAI, pSpybot->AI())->Start(false, false, player->GetGUID());
+ ENSURE_AI(npc_tyrion_spybot::npc_tyrion_spybotAI, pSpybot->AI())->SetMaxPlayerDistance(200.0f);
}
return true;
}
diff --git a/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp b/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp
index 6cfef015450..b52cb9fa1bf 100644
--- a/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp
@@ -41,7 +41,7 @@ class npc_yenniku : public CreatureScript
public:
npc_yenniku() : CreatureScript("npc_yenniku") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_yennikuAI(creature);
}
@@ -56,13 +56,13 @@ public:
uint32 Reset_Timer;
bool bReset;
- void Reset() OVERRIDE
+ void Reset() override
{
Reset_Timer = 0;
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
}
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (bReset || spell->Id != 3607)
return;
@@ -82,9 +82,9 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (bReset)
{
@@ -100,7 +100,7 @@ public:
if (me->IsInCombat() && me->GetVictim())
{
- if (Player* player = me->GetVictim()->ToPlayer())
+ if (Player* player = me->EnsureVictim()->ToPlayer())
{
if (player->GetTeam() == HORDE)
{
diff --git a/src/server/scripts/EasternKingdoms/zone_swamp_of_sorrows.cpp b/src/server/scripts/EasternKingdoms/zone_swamp_of_sorrows.cpp
index 9232a7962e3..20e9f28e0b7 100644
--- a/src/server/scripts/EasternKingdoms/zone_swamp_of_sorrows.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_swamp_of_sorrows.cpp
@@ -50,12 +50,12 @@ public:
Reset();
}
- void Reset() OVERRIDE
+ void Reset() override
{
periodicSay = 6000;
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (HasEscortState(STATE_ESCORT_ESCORTING))
Talk(SAY_ATTACKED, who);
@@ -70,7 +70,7 @@ public:
}
}
- void WaypointStart(uint32 uiPointId) OVERRIDE
+ void WaypointStart(uint32 uiPointId) override
{
switch (uiPointId)
{
@@ -94,7 +94,7 @@ public:
}
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -115,7 +115,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
@@ -139,7 +139,7 @@ public:
uint32 periodicSay;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_galen_goodwardAI(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/zone_tirisfal_glades.cpp b/src/server/scripts/EasternKingdoms/zone_tirisfal_glades.cpp
index e11e387ab0a..4d19256e5a1 100644
--- a/src/server/scripts/EasternKingdoms/zone_tirisfal_glades.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_tirisfal_glades.cpp
@@ -50,18 +50,18 @@ class npc_calvin_montague : public CreatureScript
public:
npc_calvin_montague() : CreatureScript("npc_calvin_montague") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_590)
{
creature->setFaction(FACTION_HOSTILE);
creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- CAST_AI(npc_calvin_montague::npc_calvin_montagueAI, creature->AI())->AttackStart(player);
+ ENSURE_AI(npc_calvin_montague::npc_calvin_montagueAI, creature->AI())->AttackStart(player);
}
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_calvin_montagueAI(creature);
}
@@ -74,7 +74,7 @@ public:
uint32 m_uiPhaseTimer;
uint64 m_uiPlayerGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
m_uiPhase = 0;
m_uiPhaseTimer = 5000;
@@ -86,9 +86,9 @@ public:
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void AttackedBy(Unit* pAttacker) OVERRIDE
+ void AttackedBy(Unit* pAttacker) override
{
if (me->GetVictim() || me->IsFriendlyTo(pAttacker))
return;
@@ -96,7 +96,7 @@ public:
AttackStart(pAttacker);
}
- void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) OVERRIDE
+ void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) override
{
if (uiDamage > me->GetHealth() || me->HealthBelowPctDamaged(15, uiDamage))
{
@@ -113,7 +113,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (m_uiPhase)
{
@@ -172,7 +172,7 @@ class go_mausoleum_door : public GameObjectScript
public:
go_mausoleum_door() : GameObjectScript("go_mausoleum_door") { }
- bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* /*go*/) override
{
if (player->GetQuestStatus(QUEST_ULAG) != QUEST_STATUS_INCOMPLETE)
return false;
@@ -194,7 +194,7 @@ class go_mausoleum_trigger : public GameObjectScript
public:
go_mausoleum_trigger() : GameObjectScript("go_mausoleum_trigger") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (player->GetQuestStatus(QUEST_ULAG) != QUEST_STATUS_INCOMPLETE)
return false;
diff --git a/src/server/scripts/EasternKingdoms/zone_undercity.cpp b/src/server/scripts/EasternKingdoms/zone_undercity.cpp
index 652189a8eea..41e6bafd4a7 100644
--- a/src/server/scripts/EasternKingdoms/zone_undercity.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_undercity.cpp
@@ -77,12 +77,12 @@ class npc_lady_sylvanas_windrunner : public CreatureScript
public:
npc_lady_sylvanas_windrunner() : CreatureScript("npc_lady_sylvanas_windrunner") { }
- bool OnQuestReward(Player* /*player*/, Creature* creature, const Quest *_Quest, uint32 /*slot*/) OVERRIDE
+ bool OnQuestReward(Player* /*player*/, Creature* creature, const Quest *_Quest, uint32 /*slot*/) override
{
if (_Quest->GetQuestId() == QUEST_JOURNEY_TO_UNDERCITY)
{
- CAST_AI(npc_lady_sylvanas_windrunner::npc_lady_sylvanas_windrunnerAI, creature->AI())->LamentEvent = true;
- CAST_AI(npc_lady_sylvanas_windrunner::npc_lady_sylvanas_windrunnerAI, creature->AI())->DoPlaySoundToSet(creature, SOUND_CREDIT);
+ ENSURE_AI(npc_lady_sylvanas_windrunner::npc_lady_sylvanas_windrunnerAI, creature->AI())->LamentEvent = true;
+ ENSURE_AI(npc_lady_sylvanas_windrunner::npc_lady_sylvanas_windrunnerAI, creature->AI())->DoPlaySoundToSet(creature, SOUND_CREDIT);
creature->CastSpell(creature, SPELL_SYLVANAS_CAST, false);
for (uint8 i = 0; i < 4; ++i)
@@ -92,7 +92,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_lady_sylvanas_windrunnerAI(creature);
}
@@ -111,7 +111,7 @@ public:
uint32 ShotTimer;
uint32 MultiShotTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
LamentEventTimer = 5000;
LamentEvent = false;
@@ -124,13 +124,13 @@ public:
MultiShotTimer = 10000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned->GetEntry() == ENTRY_HIGHBORNE_BUNNY)
{
- if (Creature* target = Unit::GetCreature(*summoned, targetGUID))
+ if (Creature* target = ObjectAccessor::GetCreature(*summoned, targetGUID))
{
target->MonsterMoveWithSpeed(target->GetPositionX(), target->GetPositionY(), me->GetPositionZ()+15.0f, 0);
target->SetPosition(target->GetPositionX(), target->GetPositionY(), me->GetPositionZ()+15.0f, 0.0f);
@@ -142,7 +142,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (LamentEvent)
{
@@ -170,7 +170,7 @@ public:
DoCast(me, SPELL_FADE);
// add a blink to simulate a stealthed movement and reappearing elsewhere
DoCast(me, SPELL_FADE_BLINK);
- FadeTimer = 30000 + rand()%5000;
+ FadeTimer = 30000 + rand32() % 5000;
// if the victim is out of melee range she cast multi shot
if (Unit* victim = me->GetVictim())
if (me->GetDistance(victim) > 10.0f)
@@ -180,7 +180,7 @@ public:
if (SummonSkeletonTimer <= diff)
{
DoCast(me, SPELL_SUMMON_SKELETON);
- SummonSkeletonTimer = 20000 + rand()%10000;
+ SummonSkeletonTimer = 20000 + rand32() % 10000;
} else SummonSkeletonTimer -= diff;
if (BlackArrowTimer <= diff)
@@ -188,7 +188,7 @@ public:
if (Unit* victim = me->GetVictim())
{
DoCast(victim, SPELL_BLACK_ARROW);
- BlackArrowTimer = 15000 + rand()%5000;
+ BlackArrowTimer = 15000 + rand32() % 5000;
}
} else BlackArrowTimer -= diff;
@@ -197,7 +197,7 @@ public:
if (Unit* victim = me->GetVictim())
{
DoCast(victim, SPELL_SHOT);
- ShotTimer = 8000 + rand()%2000;
+ ShotTimer = 8000 + rand32() % 2000;
}
} else ShotTimer -= diff;
@@ -206,7 +206,7 @@ public:
if (Unit* victim = me->GetVictim())
{
DoCast(victim, SPELL_MULTI_SHOT);
- MultiShotTimer = 10000 + rand()%3000;
+ MultiShotTimer = 10000 + rand32() % 3000;
}
} else MultiShotTimer -= diff;
@@ -224,7 +224,7 @@ class npc_highborne_lamenter : public CreatureScript
public:
npc_highborne_lamenter() : CreatureScript("npc_highborne_lamenter") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_highborne_lamenterAI(creature);
}
@@ -238,7 +238,7 @@ public:
bool EventMove;
bool EventCast;
- void Reset() OVERRIDE
+ void Reset() override
{
EventMoveTimer = 10000;
EventCastTimer = 17500;
@@ -246,9 +246,9 @@ public:
EventCast = true;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (EventMove)
{
@@ -290,7 +290,7 @@ class npc_parqual_fintallas : public CreatureScript
public:
npc_parqual_fintallas() : CreatureScript("npc_parqual_fintallas") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -306,7 +306,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
diff --git a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp
index 56961d2fb02..dbcf5998bdb 100644
--- a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp
@@ -53,7 +53,7 @@ class npcs_dithers_and_arbington : public CreatureScript
public:
npcs_dithers_and_arbington() : CreatureScript("npcs_dithers_and_arbington") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -85,7 +85,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -126,7 +126,7 @@ class npc_myranda_the_hag : public CreatureScript
public:
npc_myranda_the_hag() : CreatureScript("npc_myranda_the_hag") { }
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF + 1)
@@ -137,13 +137,14 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
if (player->GetQuestStatus(QUEST_SUBTERFUGE) == QUEST_STATUS_COMPLETE &&
- !player->GetQuestRewardStatus(QUEST_IN_DREAMS) && !player->HasAura(SPELL_SCARLET_ILLUSION))
+ player->GetQuestStatus(QUEST_IN_DREAMS) != QUEST_STATUS_COMPLETE &&
+ !player->HasAura(SPELL_SCARLET_ILLUSION))
{
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_ILLUSION, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
player->SEND_GOSSIP_MENU(4773, creature->GetGUID());
@@ -165,7 +166,7 @@ class npc_the_scourge_cauldron : public CreatureScript
public:
npc_the_scourge_cauldron() : CreatureScript("npc_the_scourge_cauldron") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_the_scourge_cauldronAI(creature);
}
@@ -174,9 +175,9 @@ public:
{
npc_the_scourge_cauldronAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
void DoDie()
{
@@ -188,7 +189,7 @@ public:
me->SetRespawnDelay(600);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!who)
return;
@@ -250,7 +251,7 @@ class npc_andorhal_tower : public CreatureScript
public:
npc_andorhal_tower() : CreatureScript("npc_andorhal_tower") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_andorhal_towerAI(creature);
}
@@ -262,7 +263,7 @@ public:
SetCombatMovement(false);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!who || who->GetTypeId() != TYPEID_PLAYER)
@@ -301,16 +302,17 @@ class npc_anchorite_truuen : public CreatureScript
public:
npc_anchorite_truuen() : CreatureScript("npc_anchorite_truuen") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
- npc_escortAI* pEscortAI = CAST_AI(npc_anchorite_truuen::npc_anchorite_truuenAI, creature->AI());
-
if (quest->GetQuestId() == QUEST_TOMB_LIGHTBRINGER)
+ {
+ npc_escortAI* pEscortAI = ENSURE_AI(npc_anchorite_truuen::npc_anchorite_truuenAI, creature->AI());
pEscortAI->Start(true, true, player->GetGUID());
+ }
return false;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_anchorite_truuenAI(creature);
}
@@ -327,18 +329,18 @@ public:
Creature* Ughost;
Creature* Theldanis;
- void Reset() OVERRIDE
+ void Reset() override
{
m_uiChatTimer = 7000;
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned->GetEntry() == NPC_GHOUL)
summoned->AI()->AttackStart(me);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
@@ -392,15 +394,15 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Player* player = GetPlayerForEscort())
player->FailQuest(QUEST_TOMB_LIGHTBRINGER);
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
npc_escortAI::UpdateAI(uiDiff);
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/zone_westfall.cpp b/src/server/scripts/EasternKingdoms/zone_westfall.cpp
deleted file mode 100644
index d01806028c6..00000000000
--- a/src/server/scripts/EasternKingdoms/zone_westfall.cpp
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* ScriptData
-SDName: Westfall
-SD%Complete: 90
-SDComment: Quest support: 1651
-SDCategory: Westfall
-EndScriptData */
-
-/* ContentData
-npc_daphne_stilwell
-EndContentData */
-
-#include "ScriptMgr.h"
-#include "ScriptedCreature.h"
-#include "ScriptedEscortAI.h"
-#include "Player.h"
-
-/*######
-## npc_daphne_stilwell
-######*/
-
-enum DaphneStilwell
-{
- // Yells
- SAY_DS_START = 0,
- SAY_DS_DOWN_1 = 1,
- SAY_DS_DOWN_2 = 2,
- SAY_DS_DOWN_3 = 3,
- SAY_DS_PROLOGUE = 4,
-
- // Spells
- SPELL_SHOOT = 6660,
-
- // Quests
- QUEST_TOME_VALOR = 1651,
-
- // Creatures
- NPC_DEFIAS_RAIDER = 6180,
-
- // Equips
- EQUIP_ID_RIFLE = 2511
-};
-
-class npc_daphne_stilwell : public CreatureScript
-{
-public:
- npc_daphne_stilwell() : CreatureScript("npc_daphne_stilwell") { }
-
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
- {
- if (quest->GetQuestId() == QUEST_TOME_VALOR)
- {
- creature->AI()->Talk(SAY_DS_START);
-
- if (npc_escortAI* pEscortAI = CAST_AI(npc_daphne_stilwell::npc_daphne_stilwellAI, creature->AI()))
- pEscortAI->Start(true, true, player->GetGUID());
- }
-
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_daphne_stilwellAI(creature);
- }
-
- struct npc_daphne_stilwellAI : public npc_escortAI
- {
- npc_daphne_stilwellAI(Creature* creature) : npc_escortAI(creature) { }
-
- uint32 uiWPHolder;
- uint32 uiShootTimer;
-
- void Reset() OVERRIDE
- {
- if (HasEscortState(STATE_ESCORT_ESCORTING))
- {
- switch (uiWPHolder)
- {
- case 7:
- Talk(SAY_DS_DOWN_1);
- break;
- case 8:
- Talk(SAY_DS_DOWN_2);
- break;
- case 9:
- Talk(SAY_DS_DOWN_3);
- break;
- }
- }
- else
- uiWPHolder = 0;
-
- uiShootTimer = 0;
- }
-
- void WaypointReached(uint32 waypointId) OVERRIDE
- {
- Player* player = GetPlayerForEscort();
- if (!player)
- return;
-
- uiWPHolder = waypointId;
-
- switch (waypointId)
- {
- case 4:
- SetEquipmentSlots(false, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE, EQUIP_ID_RIFLE);
- me->SetSheath(SHEATH_STATE_RANGED);
- me->HandleEmoteCommand(EMOTE_STATE_USE_STANDING_NO_SHEATHE);
- break;
- case 7:
- me->SummonCreature(NPC_DEFIAS_RAIDER, -11450.836f, 1569.755f, 54.267f, 4.230f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- me->SummonCreature(NPC_DEFIAS_RAIDER, -11449.697f, 1569.124f, 54.421f, 4.206f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- me->SummonCreature(NPC_DEFIAS_RAIDER, -11448.237f, 1568.307f, 54.620f, 4.206f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- break;
- case 8:
- me->SetSheath(SHEATH_STATE_RANGED);
- me->SummonCreature(NPC_DEFIAS_RAIDER, -11450.836f, 1569.755f, 54.267f, 4.230f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- me->SummonCreature(NPC_DEFIAS_RAIDER, -11449.697f, 1569.124f, 54.421f, 4.206f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- me->SummonCreature(NPC_DEFIAS_RAIDER, -11448.237f, 1568.307f, 54.620f, 4.206f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- me->SummonCreature(NPC_DEFIAS_RAIDER, -11448.037f, 1570.213f, 54.961f, 4.283f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- break;
- case 9:
- me->SetSheath(SHEATH_STATE_RANGED);
- me->SummonCreature(NPC_DEFIAS_RAIDER, -11450.836f, 1569.755f, 54.267f, 4.230f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- me->SummonCreature(NPC_DEFIAS_RAIDER, -11449.697f, 1569.124f, 54.421f, 4.206f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- me->SummonCreature(NPC_DEFIAS_RAIDER, -11448.237f, 1568.307f, 54.620f, 4.206f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- me->SummonCreature(NPC_DEFIAS_RAIDER, -11448.037f, 1570.213f, 54.961f, 4.283f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- me->SummonCreature(NPC_DEFIAS_RAIDER, -11449.018f, 1570.738f, 54.828f, 4.220f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- break;
- case 10:
- SetRun(false);
- break;
- case 11:
- Talk(SAY_DS_PROLOGUE);
- break;
- case 13:
- SetEquipmentSlots(true);
- me->SetSheath(SHEATH_STATE_UNARMED);
- me->HandleEmoteCommand(EMOTE_STATE_USE_STANDING_NO_SHEATHE);
- break;
- case 17:
- player->GroupEventHappens(QUEST_TOME_VALOR, me);
- break;
- }
- }
-
- void AttackStart(Unit* who) OVERRIDE
- {
- if (!who)
- return;
-
- if (me->Attack(who, false))
- {
- me->AddThreat(who, 0.0f);
- me->SetInCombatWith(who);
- who->SetInCombatWith(me);
-
- me->GetMotionMaster()->MoveChase(who, 30.0f);
- }
- }
-
- void JustSummoned(Creature* summoned) OVERRIDE
- {
- summoned->AI()->AttackStart(me);
- }
-
- void Update(const uint32 diff)
- {
- npc_escortAI::UpdateAI(diff);
-
- if (!UpdateVictim())
- return;
-
- if (uiShootTimer <= diff)
- {
- uiShootTimer = 1500;
-
- if (!me->IsWithinDist(me->GetVictim(), ATTACK_DISTANCE))
- DoCastVictim(SPELL_SHOOT);
- } else uiShootTimer -= diff;
- }
- };
-};
-
-void AddSC_westfall()
-{
- new npc_daphne_stilwell();
-}
diff --git a/src/server/scripts/EasternKingdoms/zone_wetlands.cpp b/src/server/scripts/EasternKingdoms/zone_wetlands.cpp
index a7feb2b7c43..e6c844b1b1e 100644
--- a/src/server/scripts/EasternKingdoms/zone_wetlands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_wetlands.cpp
@@ -52,7 +52,7 @@ class npc_tapoke_slim_jahn : public CreatureScript
public:
npc_tapoke_slim_jahn() : CreatureScript("npc_tapoke_slim_jahn") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_tapoke_slim_jahnAI(creature);
}
@@ -63,13 +63,13 @@ public:
bool IsFriendSummoned;
- void Reset() OVERRIDE
+ void Reset() override
{
if (!HasEscortState(STATE_ESCORT_ESCORTING))
IsFriendSummoned = false;
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -82,7 +82,7 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (HasEscortState(STATE_ESCORT_ESCORTING) && !IsFriendSummoned && GetPlayerForEscort())
{
@@ -93,13 +93,13 @@ public:
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (Player* player = GetPlayerForEscort())
summoned->AI()->AttackStart(player);
}
- void AttackedBy(Unit* pAttacker) OVERRIDE
+ void AttackedBy(Unit* pAttacker) override
{
if (me->GetVictim())
return;
@@ -110,7 +110,7 @@ public:
AttackStart(pAttacker);
}
- void DamageTaken(Unit* /*pDoneBy*/, uint32& uiDamage) OVERRIDE
+ void DamageTaken(Unit* /*pDoneBy*/, uint32& uiDamage) override
{
if (HealthBelowPct(20))
{
@@ -141,7 +141,7 @@ class npc_mikhail : public CreatureScript
public:
npc_mikhail() : CreatureScript("npc_mikhail") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
{
if (quest->GetQuestId() == QUEST_MISSING_DIPLO_PT11)
{
diff --git a/src/server/scripts/Events/CMakeLists.txt b/src/server/scripts/Events/CMakeLists.txt
index e45bc585007..3bdb6e6eac2 100644
--- a/src/server/scripts/Events/CMakeLists.txt
+++ b/src/server/scripts/Events/CMakeLists.txt
@@ -8,9 +8,11 @@
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+file(GLOB_RECURSE sources_Events Events/*.cpp Events/*.h)
+
set(scripts_STAT_SRCS
${scripts_STAT_SRCS}
- Events/childrens_week.cpp
+ ${sources_Events}
)
message(" -> Prepared: Events")
diff --git a/src/server/scripts/Events/childrens_week.cpp b/src/server/scripts/Events/childrens_week.cpp
index 9a332fe335d..683b8d36011 100644
--- a/src/server/scripts/Events/childrens_week.cpp
+++ b/src/server/scripts/Events/childrens_week.cpp
@@ -160,7 +160,7 @@ class npc_winterfin_playmate : public CreatureScript
orphanGUID = 0;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!phase && who && who->GetDistance2d(me) < 10.0f)
@@ -193,7 +193,7 @@ class npc_winterfin_playmate : public CreatureScript
switch (phase)
{
case 1:
- orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + cos(me->GetOrientation()) * 5, me->GetPositionY() + sin(me->GetOrientation()) * 5, me->GetPositionZ());
+ orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + std::cos(me->GetOrientation()) * 5, me->GetPositionY() + std::sin(me->GetOrientation()) * 5, me->GetPositionZ());
orphan->AI()->Talk(TEXT_ORACLE_ORPHAN_1);
timer = 3000;
break;
@@ -259,7 +259,7 @@ class npc_snowfall_glade_playmate : public CreatureScript
orphanGUID = 0;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!phase && who && who->GetDistance2d(me) < 10.0f)
@@ -292,7 +292,7 @@ class npc_snowfall_glade_playmate : public CreatureScript
switch (phase)
{
case 1:
- orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + cos(me->GetOrientation()) * 5, me->GetPositionY() + sin(me->GetOrientation()) * 5, me->GetPositionZ());
+ orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + std::cos(me->GetOrientation()) * 5, me->GetPositionY() + std::sin(me->GetOrientation()) * 5, me->GetPositionZ());
orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_1);
timer = 5000;
break;
@@ -360,7 +360,7 @@ class npc_the_biggest_tree : public CreatureScript
orphanGUID = 0;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!phase && who && who->GetDistance2d(me) < 10.0f)
@@ -393,7 +393,7 @@ class npc_the_biggest_tree : public CreatureScript
switch (phase)
{
case 1:
- orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + cos(me->GetOrientation()) * 5, me->GetPositionY() + sin(me->GetOrientation()) * 5, me->GetPositionZ());
+ orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + std::cos(me->GetOrientation()) * 5, me->GetPositionY() + std::sin(me->GetOrientation()) * 5, me->GetPositionZ());
timer = 2000;
break;
case 2:
@@ -447,7 +447,7 @@ class npc_high_oracle_soo_roo : public CreatureScript
orphanGUID = 0;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!phase && who && who->GetDistance2d(me) < 10.0f)
@@ -480,7 +480,7 @@ class npc_high_oracle_soo_roo : public CreatureScript
switch (phase)
{
case 1:
- orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + cos(me->GetOrientation()) * 5, me->GetPositionY() + sin(me->GetOrientation()) * 5, me->GetPositionZ());
+ orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + std::cos(me->GetOrientation()) * 5, me->GetPositionY() + std::sin(me->GetOrientation()) * 5, me->GetPositionZ());
orphan->AI()->Talk(TEXT_ORACLE_ORPHAN_5);
timer = 3000;
break;
@@ -536,7 +536,7 @@ class npc_elder_kekek : public CreatureScript
orphanGUID = 0;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!phase && who && who->GetDistance2d(me) < 10.0f)
@@ -569,7 +569,7 @@ class npc_elder_kekek : public CreatureScript
switch (phase)
{
case 1:
- orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + cos(me->GetOrientation()) * 5, me->GetPositionY() + sin(me->GetOrientation()) * 5, me->GetPositionZ());
+ orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + std::cos(me->GetOrientation()) * 5, me->GetPositionY() + std::sin(me->GetOrientation()) * 5, me->GetPositionZ());
orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_4);
timer = 3000;
break;
@@ -625,7 +625,7 @@ class npc_the_etymidian : public CreatureScript
orphanGUID = 0;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!phase && who && who->GetDistance2d(me) < 10.0f)
@@ -658,7 +658,7 @@ class npc_the_etymidian : public CreatureScript
switch (phase)
{
case 1:
- orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + cos(me->GetOrientation()) * 5, me->GetPositionY() + sin(me->GetOrientation()) * 5, me->GetPositionZ());
+ orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + std::cos(me->GetOrientation()) * 5, me->GetPositionY() + std::sin(me->GetOrientation()) * 5, me->GetPositionZ());
orphan->AI()->Talk(TEXT_ORACLE_ORPHAN_7);
timer = 5000;
break;
@@ -721,7 +721,7 @@ class npc_alexstraza_the_lifebinder : public CreatureScript
orphanGUID = 0;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
// Existing SmartAI
if (type == 0)
@@ -738,7 +738,7 @@ class npc_alexstraza_the_lifebinder : public CreatureScript
}
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!phase && who && who->GetDistance2d(me) < 10.0f)
@@ -780,7 +780,7 @@ class npc_alexstraza_the_lifebinder : public CreatureScript
switch (phase)
{
case 1:
- orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + cos(me->GetOrientation()) * 5, me->GetPositionY() + sin(me->GetOrientation()) * 5, me->GetPositionZ());
+ orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + std::cos(me->GetOrientation()) * 5, me->GetPositionY() + std::sin(me->GetOrientation()) * 5, me->GetPositionZ());
orphan->AI()->Talk(TEXT_ORACLE_ORPHAN_11);
timer = 5000;
break;
@@ -811,7 +811,7 @@ class npc_alexstraza_the_lifebinder : public CreatureScript
Reset();
return;
case 7:
- orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + cos(me->GetOrientation()) * 5, me->GetPositionY() + sin(me->GetOrientation()) * 5, me->GetPositionZ());
+ orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + std::cos(me->GetOrientation()) * 5, me->GetPositionY() + std::sin(me->GetOrientation()) * 5, me->GetPositionZ());
orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_11);
timer = 5000;
break;
@@ -933,7 +933,7 @@ class npc_cw_area_trigger : public CreatureScript
me->SetDisplayId(DISPLAY_INVISIBLE);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (who && me->GetDistance2d(who) < 20.0f)
@@ -1030,13 +1030,13 @@ class npc_grizzlemaw_cw_trigger : public CreatureScript
me->SetDisplayId(DISPLAY_INVISIBLE);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (who && who->GetDistance2d(me) < 10.0f)
if (Player* player = who->ToPlayer())
if (player->GetQuestStatus(QUEST_HOME_OF_THE_BEAR_MEN) == QUEST_STATUS_INCOMPLETE)
- if (Creature* orphan = Creature::GetCreature(*me, getOrphanGUID(player, ORPHAN_WOLVAR)))
+ if (Creature* orphan = ObjectAccessor::GetCreature(*me, getOrphanGUID(player, ORPHAN_WOLVAR)))
{
player->AreaExploredOrEventHappens(QUEST_HOME_OF_THE_BEAR_MEN);
orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_10);
diff --git a/src/server/scripts/Examples/example_commandscript.cpp b/src/server/scripts/Examples/example_commandscript.cpp
index eb87a58be77..8b7003c6666 100644
--- a/src/server/scripts/Examples/example_commandscript.cpp
+++ b/src/server/scripts/Examples/example_commandscript.cpp
@@ -43,7 +43,7 @@ class example_commandscript : public CommandScript
return true;
}
- ChatCommand* GetCommands() const OVERRIDE
+ ChatCommand* GetCommands() const override
{
static ChatCommand HelloWorldCommandTable[] =
{
diff --git a/src/server/scripts/Examples/example_creature.cpp b/src/server/scripts/Examples/example_creature.cpp
index 1ef0290af53..9fa2940a43f 100644
--- a/src/server/scripts/Examples/example_creature.cpp
+++ b/src/server/scripts/Examples/example_creature.cpp
@@ -111,7 +111,7 @@ class example_creature : public CreatureScript
// *** HANDLED FUNCTION ***
//This is called after spawn and whenever the core decides we need to evade
- void Reset() OVERRIDE
+ void Reset() override
{
m_uiPhase = 1; // Start in phase 1
m_uiPhaseTimer = 60000; // 60 seconds
@@ -125,7 +125,7 @@ class example_creature : public CreatureScript
// *** HANDLED FUNCTION ***
// Enter Combat called once per combat
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
//Say some stuff
Talk(SAY_AGGRO, who);
@@ -134,21 +134,21 @@ class example_creature : public CreatureScript
// *** HANDLED FUNCTION ***
// Attack Start is called when victim change (including at start of combat)
// By default, attack who and start movement toward the victim.
- //void AttackStart(Unit* who) OVERRIDE
+ //void AttackStart(Unit* who) override
//{
// ScriptedAI::AttackStart(who);
//}
// *** HANDLED FUNCTION ***
// Called when going out of combat. Reset is called just after.
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
Talk(SAY_EVADE);
}
// *** HANDLED FUNCTION ***
//Our Receive emote function
- void ReceiveEmote(Player* /*player*/, uint32 uiTextEmote) OVERRIDE
+ void ReceiveEmote(Player* /*player*/, uint32 uiTextEmote) override
{
me->HandleEmoteCommand(uiTextEmote);
@@ -165,7 +165,7 @@ class example_creature : public CreatureScript
// *** HANDLED FUNCTION ***
//Update AI is called Every single map update (roughly once every 50ms if a player is within the grid)
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
//Out of combat timers
if (!me->GetVictim())
@@ -199,7 +199,7 @@ class example_creature : public CreatureScript
if (m_uiSpell1Timer <= uiDiff)
{
//Cast spell one on our current target.
- if (rand()%50 > 10)
+ if (rand32() % 50 > 10)
DoCastVictim(SPELL_ONE_ALT);
else if (me->IsWithinDist(me->GetVictim(), 25.0f))
DoCastVictim(SPELL_ONE);
@@ -262,12 +262,12 @@ class example_creature : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new example_creatureAI(creature);
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
player->SEND_GOSSIP_MENU(907, creature->GetGUID());
@@ -275,7 +275,7 @@ class example_creature : public CreatureScript
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
diff --git a/src/server/scripts/Examples/example_escort.cpp b/src/server/scripts/Examples/example_escort.cpp
index 57fe27ad041..88188a45296 100644
--- a/src/server/scripts/Examples/example_escort.cpp
+++ b/src/server/scripts/Examples/example_escort.cpp
@@ -79,13 +79,13 @@ class example_escort : public CreatureScript
uint32 m_uiDeathCoilTimer;
uint32 m_uiChatTimer;
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->AI()->AttackStart(me);
}
// Pure Virtual Functions (Have to be implemented)
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -108,7 +108,7 @@ class example_escort : public CreatureScript
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (HasEscortState(STATE_ESCORT_ESCORTING))
{
@@ -119,13 +119,13 @@ class example_escort : public CreatureScript
Talk(SAY_AGGRO2);
}
- void Reset() OVERRIDE
+ void Reset() override
{
m_uiDeathCoilTimer = 4000;
m_uiChatTimer = 4000;
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
if (HasEscortState(STATE_ESCORT_ESCORTING))
{
@@ -142,7 +142,7 @@ class example_escort : public CreatureScript
Talk(SAY_DEATH_3);
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
//Must update npc_escortAI
npc_escortAI::UpdateAI(uiDiff);
@@ -186,12 +186,12 @@ class example_escort : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new example_escortAI(creature);
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
player->TalkedToCreature(creature->GetEntry(), creature->GetGUID());
player->PrepareGossipMenu(creature, 0);
@@ -205,7 +205,7 @@ class example_escort : public CreatureScript
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
npc_escortAI* pEscortAI = CAST_AI(example_escort::example_escortAI, creature->AI());
diff --git a/src/server/scripts/Examples/example_gossip_codebox.cpp b/src/server/scripts/Examples/example_gossip_codebox.cpp
index 4ab39f429b1..801159ff6ae 100644
--- a/src/server/scripts/Examples/example_gossip_codebox.cpp
+++ b/src/server/scripts/Examples/example_gossip_codebox.cpp
@@ -55,7 +55,7 @@ class example_gossip_codebox : public CreatureScript
{
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1, "", 0, true);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
@@ -65,7 +65,7 @@ class example_gossip_codebox : public CreatureScript
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+2)
@@ -78,7 +78,7 @@ class example_gossip_codebox : public CreatureScript
return true;
}
- bool OnGossipSelectCode(Player* player, Creature* creature, uint32 sender, uint32 action, char const* code) OVERRIDE
+ bool OnGossipSelectCode(Player* player, Creature* creature, uint32 sender, uint32 action, char const* code) override
{
player->PlayerTalkClass->ClearMenus();
if (sender == GOSSIP_SENDER_MAIN)
diff --git a/src/server/scripts/Examples/example_misc.cpp b/src/server/scripts/Examples/example_misc.cpp
index 938a5f9e623..1cf0d1375be 100644
--- a/src/server/scripts/Examples/example_misc.cpp
+++ b/src/server/scripts/Examples/example_misc.cpp
@@ -35,7 +35,7 @@ class AT_example_areatrigger : public AreaTriggerScript
{
}
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override
{
player->Kill(player);
return true;
@@ -51,7 +51,7 @@ class ItemUse_example_item : public ItemScript
{
}
- bool OnUse(Player* /*player*/, Item* /*item*/, SpellCastTargets const& /*targets*/) OVERRIDE
+ bool OnUse(Player* /*player*/, Item* /*item*/, SpellCastTargets const& /*targets*/) override
{
sScriptMgr->LoadDatabase();
return true;
@@ -67,7 +67,7 @@ class GOHello_example_go_teleporter : public GameObjectScript
{
}
- bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* /*go*/) override
{
player->TeleportTo(0, 1807.07f, 336.105f, 70.3975f, 0.0f);
return false;
diff --git a/src/server/scripts/Examples/example_spell.cpp b/src/server/scripts/Examples/example_spell.cpp
index 9bf91d08ac0..9097f7cd650 100644
--- a/src/server/scripts/Examples/example_spell.cpp
+++ b/src/server/scripts/Examples/example_spell.cpp
@@ -50,7 +50,7 @@ class spell_ex_5581 : public SpellScriptLoader
// function called on server startup
// checks if script has data required for it to work
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
// check if spellid 70522 exists in dbc, we will trigger it later
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
@@ -60,7 +60,7 @@ class spell_ex_5581 : public SpellScriptLoader
// function called just after script is added to spell
// we initialize local variables if needed
- bool Load() OVERRIDE
+ bool Load() override
{
localVariable = "we're using local variable";
localVariable2 = new char();
@@ -73,7 +73,7 @@ class spell_ex_5581 : public SpellScriptLoader
// function called just before script delete
// we free allocated memory
- void Unload() OVERRIDE
+ void Unload() override
{
delete localVariable2;
}
@@ -159,7 +159,7 @@ class spell_ex_5581 : public SpellScriptLoader
}
// register functions used in spell script - names of these functions do not matter
- void Register() OVERRIDE
+ void Register() override
{
// we're registering our functions here
BeforeCast += SpellCastFn(spell_ex_5581SpellScript::HandleBeforeCast);
@@ -192,7 +192,7 @@ class spell_ex_5581 : public SpellScriptLoader
};
// function which creates SpellScript
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_ex_5581SpellScript();
}
@@ -208,7 +208,7 @@ class spell_ex_66244 : public SpellScriptLoader
PrepareAuraScript(spell_ex_66244AuraScript);
// function called on server startup
// checks if script has data required for it to work
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
// check if spellid exists in dbc, we will trigger it later
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
@@ -218,7 +218,7 @@ class spell_ex_66244 : public SpellScriptLoader
// function called in aura constructor
// we initialize local variables if needed
- bool Load() OVERRIDE
+ bool Load() override
{
// do not load script if aura is cast by player or caster not avalible
if (Unit* caster = GetCaster())
@@ -316,7 +316,7 @@ class spell_ex_66244 : public SpellScriptLoader
}
// function registering
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleOnEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
@@ -347,7 +347,7 @@ class spell_ex_66244 : public SpellScriptLoader
};
// function which creates AuraScript
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_ex_66244AuraScript();
}
@@ -379,7 +379,7 @@ class spell_ex_absorb_aura : public SpellScriptLoader
}
// function registering
- void Register() OVERRIDE
+ void Register() override
{
OnEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleOnEffectAbsorb, EFFECT_0);
AfterEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleAfterEffectAbsorb, EFFECT_0);
@@ -387,7 +387,7 @@ class spell_ex_absorb_aura : public SpellScriptLoader
};
// function which creates AuraScript
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_ex_absorb_auraAuraScript();
}
@@ -408,14 +408,14 @@ class spell_ex_463 : public SpellScriptLoader
// in our script we allow only players to be affected
return target->GetTypeId() == TYPEID_PLAYER;
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_ex_463AuraScript::CheckAreaTarget);
}
};
// function which creates AuraScript
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_ex_463AuraScript();
}
@@ -440,18 +440,18 @@ class spell_ex : public SpellScriptLoader
{
PrepareSpellScript(spell_ex_SpellScript);
- //bool Validate(SpellInfo const* spellEntry){return true;} OVERRIDE
+ //bool Validate(SpellInfo const* spellEntry){return true;} override
//bool Load(){return true;}
//void Unload(){ }
//void Function(SpellEffIndex effIndex) //OnEffect += SpellEffectFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_EFFECT_ANY);
//void Function() //OnHit += SpellEffectFn(spell_ex_SpellScript::Function);
- void Register() OVERRIDE
+ void Register() override
{
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_ex_SpellScript();
}
@@ -467,7 +467,7 @@ class spell_ex : public SpellScriptLoader
class spell_ex_AuraScript : public AuraScript
{
PrepareAuraScript(spell_ex)
- //bool Validate(SpellInfo const* spellEntry){return true;} OVERRIDE
+ //bool Validate(SpellInfo const* spellEntry){return true;} override
//bool Load(){return true;}
//void Unload(){ }
@@ -478,12 +478,12 @@ class spell_ex : public SpellScriptLoader
//void spell_ex_SpellScript::Function(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated) //DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
//void spell_ex_SpellScript::Function(AuraEffect const* aurEff, bool& isPeriodic, int32& amplitude) //OnEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
//void spell_ex_SpellScript::Function(AuraEffect const* aurEff, SpellModifier*& spellMod) //OnEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
- void Register() OVERRIDE
+ void Register() override
{
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_ex_AuraScript();
}
diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
index c7ef191cf8f..e7beb4cf454 100644
--- a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
+++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
@@ -38,7 +38,7 @@ class go_blackfathom_altar : public GameObjectScript
public:
go_blackfathom_altar() : GameObjectScript("go_blackfathom_altar") { }
- bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* /*go*/) override
{
if (!player->HasAura(SPELL_BLESSING_OF_BLACKFATHOM))
player->AddAura(SPELL_BLESSING_OF_BLACKFATHOM, player);
@@ -51,7 +51,7 @@ class go_blackfathom_fire : public GameObjectScript
public:
go_blackfathom_fire() : GameObjectScript("go_blackfathom_fire") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
InstanceScript* instance = go->GetInstanceScript();
@@ -71,7 +71,7 @@ class npc_blackfathom_deeps_event : public CreatureScript
public:
npc_blackfathom_deeps_event() : CreatureScript("npc_blackfathom_deeps_event") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_blackfathom_deeps_eventAI>(creature);
}
@@ -97,7 +97,7 @@ public:
bool Flee;
- void Reset() OVERRIDE
+ void Reset() override
{
Flee = false;
@@ -130,7 +130,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -179,7 +179,7 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (me->IsSummon()) //we are not a normal spawn.
instance->SetData(DATA_EVENT, instance->GetData(DATA_EVENT) + 1);
@@ -207,7 +207,7 @@ public:
Start(false, false, 0);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -220,13 +220,13 @@ public:
}
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE
+ void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
{
DoCast(player, SPELL_TELEPORT_DARNASSUS);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_morriduneAI(creature);
}
diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp
index dfff92b8f05..f6c34c6b555 100644
--- a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp
+++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp
@@ -40,24 +40,24 @@ public:
{
boss_aku_maiAI(Creature* creature) : BossAI(creature, TYPE_AKU_MAI) { }
- void Reset() OVERRIDE
+ void Reset() override
{
IsEnraged = false;
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_POISON_CLOUD, urand(5000, 9000));
_EnterCombat();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -90,7 +90,7 @@ public:
bool IsEnraged;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_aku_maiAI(creature);
}
diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp
index 8d2ced59276..9e25de817fa 100644
--- a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp
+++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp
@@ -29,7 +29,7 @@ class boss_gelihast : public CreatureScript
public:
boss_gelihast() : CreatureScript("boss_gelihast") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_gelihastAI>(creature);
}
@@ -45,23 +45,23 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
netTimer = urand(2000, 4000);
instance->SetData(TYPE_GELIHAST, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
instance->SetData(TYPE_GELIHAST, IN_PROGRESS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(TYPE_GELIHAST, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp
index 3ded27bd42a..37fac0fa7de 100644
--- a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp
+++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp
@@ -34,7 +34,7 @@ class boss_kelris : public CreatureScript
public:
boss_kelris() : CreatureScript("boss_kelris") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_kelrisAI>(creature);
}
@@ -51,26 +51,26 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
mindBlastTimer = urand(2000, 5000);
sleepTimer = urand(9000, 12000);
instance->SetData(TYPE_KELRIS, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetData(TYPE_KELRIS, IN_PROGRESS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetData(TYPE_KELRIS, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp
index 2c9c94d9724..940da4fcf52 100644
--- a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp
+++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp
@@ -57,7 +57,7 @@ class instance_blackfathom_deeps : public InstanceMapScript
public:
instance_blackfathom_deeps() : InstanceMapScript("instance_blackfathom_deeps", 48) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_blackfathom_deeps_InstanceMapScript(map);
}
@@ -79,7 +79,7 @@ public:
uint8 countFires;
uint8 deathTimes;
- void Initialize() OVERRIDE
+ void Initialize() override
{
memset(&encounter, 0, sizeof(encounter));
@@ -95,7 +95,7 @@ public:
deathTimes = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -108,7 +108,7 @@ public:
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -142,7 +142,7 @@ public:
}
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -212,7 +212,7 @@ public:
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -233,7 +233,7 @@ public:
return 0;
}
- uint64 GetData64(uint32 data) const OVERRIDE
+ uint64 GetData64(uint32 data) const override
{
switch (data)
{
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
index e5ddcd1c2ef..7aaa2239745 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
@@ -45,7 +45,7 @@ class boss_anetheron : public CreatureScript
public:
boss_anetheron() : CreatureScript("boss_anetheron") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_anetheronAI>(creature);
}
@@ -64,7 +64,7 @@ public:
uint32 InfernoTimer;
bool go;
- void Reset() OVERRIDE
+ void Reset() override
{
damageTaken = 0;
SwarmTimer = 45000;
@@ -76,7 +76,7 @@ public:
instance->SetData(DATA_ANETHERONEVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (IsEvent)
instance->SetData(DATA_ANETHERONEVENT, IN_PROGRESS);
@@ -84,23 +84,23 @@ public:
Talk(SAY_ONAGGRO);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_ONSLAY);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (waypointId == 7)
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
hyjal_trashAI::JustDied(killer);
if (IsEvent)
@@ -108,7 +108,7 @@ public:
Talk(SAY_ONDEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (IsEvent)
{
@@ -176,7 +176,7 @@ class npc_towering_infernal : public CreatureScript
public:
npc_towering_infernal() : CreatureScript("npc_towering_infernal") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_towering_infernalAI>(creature);
}
@@ -196,33 +196,33 @@ public:
uint64 AnetheronGUID;
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
DoCast(me, SPELL_INFERNO_EFFECT);
ImmolationTimer = 5000;
CheckTimer = 5000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (me->IsWithinDist(who, 50) && !me->IsInCombat() && me->IsValidAttackTarget(who))
AttackStart(who);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (CheckTimer <= diff)
{
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
index 4fa9af466b1..576b3dbdb39 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
@@ -81,7 +81,7 @@ class npc_ancient_wisp : public CreatureScript
public:
npc_ancient_wisp() : CreatureScript("npc_ancient_wisp") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ancient_wispAI>(creature);
}
@@ -98,7 +98,7 @@ public:
uint64 ArchimondeGUID;
uint32 CheckTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
CheckTimer = 1000;
@@ -107,18 +107,18 @@ public:
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
damage = 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (CheckTimer <= diff)
{
- if (Unit* Archimonde = Unit::GetUnit(*me, ArchimondeGUID))
+ if (Unit* Archimonde = ObjectAccessor::GetUnit(*me, ArchimondeGUID))
{
if (Archimonde->HealthBelowPct(2) || !Archimonde->IsAlive())
DoCast(me, SPELL_DENOUEMENT_WISP);
@@ -138,7 +138,7 @@ class npc_doomfire : public CreatureScript
public:
npc_doomfire() : CreatureScript("npc_doomfire") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_doomfireAI(creature);
}
@@ -147,13 +147,13 @@ public:
{
npc_doomfireAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
damage = 0;
}
@@ -167,7 +167,7 @@ class npc_doomfire_targetting : public CreatureScript
public:
npc_doomfire_targetting() : CreatureScript("npc_doomfire_targetting") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_doomfire_targettingAI(creature);
}
@@ -179,13 +179,13 @@ public:
uint64 TargetGUID;
uint32 ChangeTargetTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
TargetGUID = 0;
ChangeTargetTimer = 5000;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
//will update once TargetGUID is 0. In case noone actually moves(not likely) and this is 0
@@ -194,26 +194,25 @@ public:
TargetGUID = who->GetGUID();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
damage = 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (ChangeTargetTimer <= diff)
{
- if (Unit* temp = Unit::GetUnit(*me, TargetGUID))
+ if (Unit* temp = ObjectAccessor::GetUnit(*me, TargetGUID))
{
me->GetMotionMaster()->MoveFollow(temp, 0.0f, 0.0f);
TargetGUID = 0;
}
else
{
- Position pos;
- me->GetRandomNearPosition(pos, 40);
+ Position pos = me->GetRandomNearPosition(40);
me->GetMotionMaster()->MovePoint(0, pos.m_positionX, pos.m_positionY, pos.m_positionZ);
}
@@ -236,7 +235,7 @@ class boss_archimonde : public CreatureScript
public:
boss_archimonde() : CreatureScript("boss_archimonde") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_archimondeAI>(creature);
}
@@ -272,7 +271,7 @@ public:
bool HasProtected;
bool IsChanneling;
- void Reset() OVERRIDE
+ void Reset() override
{
instance->SetData(DATA_ARCHIMONDEEVENT, NOT_STARTED);
@@ -300,7 +299,7 @@ public:
IsChanneling = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
me->InterruptSpell(CURRENT_CHANNELED_SPELL);
Talk(SAY_AGGRO);
@@ -309,7 +308,7 @@ public:
instance->SetData(DATA_ARCHIMONDEEVENT, IN_PROGRESS);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
Talk(SAY_SLAY);
@@ -342,7 +341,7 @@ public:
++SoulChargeCount;
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
hyjal_trashAI::JustDied(killer);
Talk(SAY_DEATH);
@@ -365,7 +364,7 @@ public:
ThreatContainer::StorageType::const_iterator itr = threatlist.begin();
for (; itr != threatlist.end(); ++itr)
{
- Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (unit && unit->IsAlive())
targets.push_back(unit);
}
@@ -386,7 +385,7 @@ public:
return false;
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned->GetEntry() == CREATURE_ANCIENT_WISP)
summoned->AI()->AttackStart(me);
@@ -407,7 +406,7 @@ public:
summoned->CastSpell(summoned, SPELL_DOOMFIRE_SPAWN, false);
summoned->CastSpell(summoned, SPELL_DOOMFIRE, true, 0, 0, me->GetGUID());
- if (Unit* DoomfireSpirit = Unit::GetUnit(*me, DoomfireSpiritGUID))
+ if (Unit* DoomfireSpirit = ObjectAccessor::GetUnit(*me, DoomfireSpiritGUID))
{
summoned->GetMotionMaster()->MoveFollow(DoomfireSpirit, 0.0f, 0.0f);
DoomfireSpiritGUID = 0;
@@ -463,7 +462,7 @@ public:
SoulChargeTimer = urand(2000, 30000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!me->IsInCombat())
{
@@ -488,7 +487,7 @@ public:
if (temp)
WorldTreeGUID = temp->GetGUID();
- if (Unit* Nordrassil = Unit::GetUnit(*me, WorldTreeGUID))
+ if (Unit* Nordrassil = ObjectAccessor::GetUnit(*me, WorldTreeGUID))
{
Nordrassil->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
Nordrassil->SetDisplayId(11686);
@@ -497,7 +496,7 @@ public:
}
}
- if (Unit* Nordrassil = Unit::GetUnit(*me, WorldTreeGUID))
+ if (Unit* Nordrassil = ObjectAccessor::GetUnit(*me, WorldTreeGUID))
{
Nordrassil->CastSpell(me, SPELL_DRAIN_WORLD_TREE_2, true);
DrainNordrassilTimer = 1000;
@@ -559,7 +558,7 @@ public:
if (SummonWispTimer <= diff)
{
- DoSpawnCreature(CREATURE_ANCIENT_WISP, float(rand()%40), float(rand()%40), 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ DoSpawnCreature(CREATURE_ANCIENT_WISP, float(rand32() % 40), float(rand32() % 40), 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
SummonWispTimer = 1500;
++WispCount;
} else SummonWispTimer -= diff;
@@ -631,7 +630,7 @@ public:
DoMeleeAttackIfReady();
}
- void WaypointReached(uint32 /*waypointId*/) OVERRIDE { }
+ void WaypointReached(uint32 /*waypointId*/) override { }
};
};
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp
index 16002b59f1a..38e398f3d5b 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp
@@ -46,7 +46,7 @@ class boss_azgalor : public CreatureScript
public:
boss_azgalor() : CreatureScript("boss_azgalor") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_azgalorAI>(creature);
}
@@ -68,7 +68,7 @@ public:
bool go;
- void Reset() OVERRIDE
+ void Reset() override
{
damageTaken = 0;
RainTimer = 20000;
@@ -82,7 +82,7 @@ public:
instance->SetData(DATA_AZGALOREVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (IsEvent)
instance->SetData(DATA_AZGALOREVENT, IN_PROGRESS);
@@ -90,22 +90,22 @@ public:
Talk(SAY_ONAGGRO);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_ONSLAY);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (waypointId == 7 && instance)
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
hyjal_trashAI::JustDied(killer);
if (IsEvent)
@@ -113,7 +113,7 @@ public:
Talk(SAY_ONDEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (IsEvent)
{
@@ -142,13 +142,13 @@ public:
if (RainTimer <= diff)
{
DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0, 30, true), SPELL_RAIN_OF_FIRE);
- RainTimer = 20000+rand()%15000;
+ RainTimer = 20000 + rand32() % 15000;
} else RainTimer -= diff;
if (DoomTimer <= diff)
{
DoCast(SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true), SPELL_DOOM);//never on tank
- DoomTimer = 45000+rand()%5000;
+ DoomTimer = 45000 + rand32() % 5000;
} else DoomTimer -= diff;
if (HowlTimer <= diff)
@@ -160,7 +160,7 @@ public:
if (CleaveTimer <= diff)
{
DoCastVictim(SPELL_CLEAVE);
- CleaveTimer = 10000+rand()%5000;
+ CleaveTimer = 10000 + rand32() % 5000;
} else CleaveTimer -= diff;
if (EnrageTimer < diff && !enraged)
@@ -182,7 +182,7 @@ class npc_lesser_doomguard : public CreatureScript
public:
npc_lesser_doomguard() : CreatureScript("npc_lesser_doomguard") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_lesser_doomguardAI>(creature);
}
@@ -204,7 +204,7 @@ public:
uint64 AzgalorGUID;
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
CrippleTimer = 50000;
WarstompTimer = 10000;
@@ -212,30 +212,30 @@ public:
CheckTimer = 5000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
}
- void WaypointReached(uint32 /*waypointId*/) OVERRIDE
+ void WaypointReached(uint32 /*waypointId*/) override
{
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (me->IsWithinDist(who, 50) && !me->IsInCombat() && me->IsValidAttackTarget(who))
AttackStart(who);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (CheckTimer <= diff)
{
@@ -259,13 +259,13 @@ public:
if (WarstompTimer <= diff)
{
DoCast(me, SPELL_WARSTOMP);
- WarstompTimer = 10000+rand()%5000;
+ WarstompTimer = 10000 + rand32() % 5000;
} else WarstompTimer -= diff;
if (CrippleTimer <= diff)
{
DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true), SPELL_CRIPPLE);
- CrippleTimer = 25000+rand()%5000;
+ CrippleTimer = 25000 + rand32() % 5000;
} else CrippleTimer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
index af7b0c1d899..c5fcb150d3f 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
@@ -47,7 +47,7 @@ class boss_kazrogal : public CreatureScript
public:
boss_kazrogal() : CreatureScript("boss_kazrogal") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_kazrogalAI>(creature);
}
@@ -66,7 +66,7 @@ public:
uint32 MarkTimerBase;
bool go;
- void Reset() OVERRIDE
+ void Reset() override
{
damageTaken = 0;
CleaveTimer = 5000;
@@ -78,29 +78,29 @@ public:
instance->SetData(DATA_KAZROGALEVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (IsEvent)
instance->SetData(DATA_KAZROGALEVENT, IN_PROGRESS);
Talk(SAY_ONAGGRO);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_ONSLAY);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (waypointId == 7 && instance)
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
hyjal_trashAI::JustDied(killer);
if (IsEvent)
@@ -108,7 +108,7 @@ public:
DoPlaySoundToSet(me, SOUND_ONDEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (IsEvent)
{
@@ -137,7 +137,7 @@ public:
if (CleaveTimer <= diff)
{
DoCast(me, SPELL_CLEAVE);
- CleaveTimer = 6000+rand()%15000;
+ CleaveTimer = 6000 + rand32() % 15000;
} else CleaveTimer -= diff;
if (WarStompTimer <= diff)
@@ -188,7 +188,7 @@ class spell_mark_of_kazrogal : public SpellScriptLoader
targets.remove_if(MarkTargetFilter());
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mark_of_kazrogal_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
@@ -198,7 +198,7 @@ class spell_mark_of_kazrogal : public SpellScriptLoader
{
PrepareAuraScript(spell_mark_of_kazrogal_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MARK_DAMAGE))
return false;
@@ -217,7 +217,7 @@ class spell_mark_of_kazrogal : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_mark_of_kazrogal_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_MANA_LEECH);
}
@@ -228,7 +228,7 @@ class spell_mark_of_kazrogal : public SpellScriptLoader
return new spell_mark_of_kazrogal_SpellScript();
}
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_mark_of_kazrogal_AuraScript();
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp
index 691207a4682..c37b9d910e7 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp
@@ -42,7 +42,7 @@ class boss_rage_winterchill : public CreatureScript
public:
boss_rage_winterchill() : CreatureScript("boss_rage_winterchill") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_rage_winterchillAI>(creature);
}
@@ -61,7 +61,7 @@ public:
uint32 IceboltTimer;
bool go;
- void Reset() OVERRIDE
+ void Reset() override
{
damageTaken = 0;
FrostArmorTimer = 37000;
@@ -73,29 +73,29 @@ public:
instance->SetData(DATA_RAGEWINTERCHILLEVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (IsEvent)
instance->SetData(DATA_RAGEWINTERCHILLEVENT, IN_PROGRESS);
Talk(SAY_ONAGGRO);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_ONSLAY);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (waypointId == 7 && instance)
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
hyjal_trashAI::JustDied(killer);
if (IsEvent)
@@ -103,7 +103,7 @@ public:
Talk(SAY_ONDEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (IsEvent)
{
@@ -132,24 +132,24 @@ public:
if (FrostArmorTimer <= diff)
{
DoCast(me, SPELL_FROST_ARMOR);
- FrostArmorTimer = 40000+rand()%20000;
+ FrostArmorTimer = 40000 + rand32() % 20000;
} else FrostArmorTimer -= diff;
if (DecayTimer <= diff)
{
DoCastVictim(SPELL_DEATH_AND_DECAY);
- DecayTimer = 60000+rand()%20000;
+ DecayTimer = 60000 + rand32() % 20000;
Talk(SAY_DECAY);
} else DecayTimer -= diff;
if (NovaTimer <= diff)
{
DoCastVictim(SPELL_FROST_NOVA);
- NovaTimer = 30000+rand()%15000;
+ NovaTimer = 30000 + rand32() % 15000;
Talk(SAY_NOVA);
} else NovaTimer -= diff;
if (IceboltTimer <= diff)
{
DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0, 40, true), SPELL_ICEBOLT);
- IceboltTimer = 11000+rand()%20000;
+ IceboltTimer = 11000 + rand32() % 20000;
} else IceboltTimer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp
index 4419973902a..4a92041f921 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp
@@ -53,10 +53,10 @@ class npc_jaina_proudmoore : public CreatureScript
public:
npc_jaina_proudmoore() : CreatureScript("npc_jaina_proudmoore") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
- hyjalAI* ai = CAST_AI(hyjalAI, creature->AI());
+ hyjalAI* ai = ENSURE_AI(hyjalAI, creature->AI());
switch (action)
{
case GOSSIP_ACTION_INFO_DEF + 1:
@@ -78,9 +78,9 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
- hyjalAI* ai = CAST_AI(hyjalAI, creature->AI());
+ hyjalAI* ai = ENSURE_AI(hyjalAI, creature->AI());
if (ai->EventBegun)
return false;
@@ -100,7 +100,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
if (!creature->GetInstanceScript())
return NULL;
@@ -132,10 +132,10 @@ class npc_thrall : public CreatureScript
public:
npc_thrall() : CreatureScript("npc_thrall") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
- hyjalAI* ai = CAST_AI(hyjalAI, creature->AI());
+ hyjalAI* ai = ENSURE_AI(hyjalAI, creature->AI());
ai->DeSpawnVeins();//despawn the alliance veins
switch (action)
{
@@ -158,9 +158,9 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
- hyjalAI* ai = CAST_AI(hyjalAI, creature->AI());
+ hyjalAI* ai = ENSURE_AI(hyjalAI, creature->AI());
if (ai->EventBegun)
return false;
@@ -185,7 +185,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
if (!creature->GetInstanceScript())
return NULL;
@@ -213,7 +213,7 @@ class npc_tyrande_whisperwind : public CreatureScript
public:
npc_tyrande_whisperwind() : CreatureScript("npc_tyrande_whisperwind") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
if (!creature->GetInstanceScript())
return NULL;
@@ -224,7 +224,7 @@ public:
return ai;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF)
@@ -240,9 +240,9 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
- hyjalAI* ai = CAST_AI(hyjalAI, creature->AI());
+ hyjalAI* ai = ENSURE_AI(hyjalAI, creature->AI());
uint32 AzgalorEvent = ai->GetInstanceData(DATA_AZGALOREVENT);
// Only let them get item if Azgalor is dead.
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp
index c8006158ef1..b9c6025b91c 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp
@@ -444,7 +444,7 @@ void hyjalAI::MoveInLineOfSight(Unit* who)
void hyjalAI::SummonCreature(uint32 entry, float Base[4][3])
{
- uint32 random = rand()%4;
+ uint32 random = rand32() % 4;
float SpawnLoc[3];
for (uint8 i = 0; i < 3; ++i)
@@ -460,7 +460,7 @@ void hyjalAI::SummonCreature(uint32 entry, float Base[4][3])
{//summon at tower
creature = me->SummonCreature(entry, SpawnPointSpecial[SPAWN_NEAR_TOWER][0]+irand(-20, 20), SpawnPointSpecial[SPAWN_NEAR_TOWER][1]+irand(-20, 20), SpawnPointSpecial[SPAWN_NEAR_TOWER][2]+irand(-10, 10), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000);
if (creature)
- CAST_AI(hyjal_trashAI, creature->AI())->useFlyPath = true;
+ ENSURE_AI(hyjal_trashAI, creature->AI())->useFlyPath = true;
}
else
{//summon at gate
@@ -474,7 +474,7 @@ void hyjalAI::SummonCreature(uint32 entry, float Base[4][3])
{
creature = me->SummonCreature(entry, SpawnPointSpecial[SPAWN_NEAR_TOWER][0], SpawnPointSpecial[SPAWN_NEAR_TOWER][1], SpawnPointSpecial[SPAWN_NEAR_TOWER][2], 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000);
if (creature)
- CAST_AI(hyjal_trashAI, creature->AI())->useFlyPath = true;
+ ENSURE_AI(hyjal_trashAI, creature->AI())->useFlyPath = true;
}
break;
case 17908: //GIANT_INFERNAL
@@ -511,7 +511,7 @@ void hyjalAI::SummonCreature(uint32 entry, float Base[4][3])
case ANETHERON:
case KAZROGAL:
case AZGALOR:
- CAST_AI(hyjal_trashAI, creature->AI())->IsEvent = true;
+ ENSURE_AI(hyjal_trashAI, creature->AI())->IsEvent = true;
break;
}
if (instance->GetData(DATA_RAIDDAMAGE) < MINRAIDDAMAGE)
@@ -529,7 +529,7 @@ void hyjalAI::SummonCreature(uint32 entry, float Base[4][3])
void hyjalAI::SummonNextWave(const Wave wave[18], uint32 Count, float Base[4][3])
{
// 1 in 4 chance we give a rally yell. Not sure if the chance is offilike.
- if (rand()%4 == 0)
+ if (rand32() % 4 == 0)
Talk(RALLY);
InfernalCount = 0;//reset infernal count every new wave
@@ -623,7 +623,7 @@ void hyjalAI::Retreat()
if (JainaDummy)
{
JainaDummy->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- CAST_AI(hyjalAI, JainaDummy->AI())->IsDummy = true;
+ ENSURE_AI(hyjalAI, JainaDummy->AI())->IsDummy = true;
DummyGuid = JainaDummy->GetGUID();
}
AddWaypoint(0, JainaDummySpawn[1][0], JainaDummySpawn[1][1], JainaDummySpawn[1][2]);
@@ -665,7 +665,7 @@ void hyjalAI::DeSpawnVeins()
{
if (Faction == 1)
{
- Creature* unit=Unit::GetCreature((*me), instance->GetData64(DATA_JAINAPROUDMOORE));
+ Creature* unit=ObjectAccessor::GetCreature((*me), instance->GetData64(DATA_JAINAPROUDMOORE));
if (!unit)return;
hyjalAI* ai = CAST_AI(hyjalAI, unit->AI());
if (!ai)return;
@@ -676,7 +676,7 @@ void hyjalAI::DeSpawnVeins()
}
} else if (Faction)
{
- Creature* unit=Unit::GetCreature((*me), instance->GetData64(DATA_THRALL));
+ Creature* unit=ObjectAccessor::GetCreature((*me), instance->GetData64(DATA_THRALL));
if (!unit)return;
hyjalAI* ai = CAST_AI(hyjalAI, unit->AI());
if (!ai)return;
@@ -804,7 +804,7 @@ void hyjalAI::UpdateAI(uint32 diff)
{
if (BossGUID[i])
{
- Unit* unit = Unit::GetUnit(*me, BossGUID[i]);
+ Unit* unit = ObjectAccessor::GetUnit(*me, BossGUID[i]);
if (unit && (!unit->IsAlive()))
{
if (BossGUID[i] == BossGUID[0])
@@ -937,9 +937,9 @@ void hyjalAI::WaypointReached(uint32 waypointId)
DoCast(me, SPELL_MASS_TELEPORT, false);
if (me->GetEntry() == THRALL && DummyGuid)
{
- if (Creature* creature = Unit::GetCreature(*me, DummyGuid))
+ if (Creature* creature = ObjectAccessor::GetCreature(*me, DummyGuid))
{
- hyjalAI* ai = CAST_AI(hyjalAI, creature->AI());
+ hyjalAI* ai = ENSURE_AI(hyjalAI, creature->AI());
ai->DoMassTeleport = true;
ai->MassTeleportTimer = 20000;
creature->CastSpell(me, SPELL_MASS_TELEPORT, false);
@@ -1032,25 +1032,25 @@ void hyjalAI::DoOverrun(uint32 faction, const uint32 diff)
for (uint8 i = 0; i < 25; ++i)//summon 25 ghouls
{
- uint8 r = rand()%4;
+ uint8 r = rand32() % 4;
Creature* unit = me->SummonCreature(GHOUL, AllianceBase[r][0]+irand(-15, 15), AllianceBase[r][1]+irand(-15, 15), AllianceBase[r][2], 0, TEMPSUMMON_MANUAL_DESPAWN, 2*60*1000);
if (unit)
{
- CAST_AI(hyjal_trashAI, unit->AI())->faction = Faction;
- CAST_AI(hyjal_trashAI, unit->AI())->IsOverrun = true;
- CAST_AI(hyjal_trashAI, unit->AI())->OverrunType = i;
+ ENSURE_AI(hyjal_trashAI, unit->AI())->faction = Faction;
+ ENSURE_AI(hyjal_trashAI, unit->AI())->IsOverrun = true;
+ ENSURE_AI(hyjal_trashAI, unit->AI())->OverrunType = i;
unit->setActive(true);
}
}
for (uint8 i = 0; i < 3; ++i)//summon 3 abominations
{
- uint8 r = rand()%4;
+ uint8 r = rand32() % 4;
Creature* unit = me->SummonCreature(ABOMINATION, AllianceBase[r][0]+irand(-15, 15), AllianceBase[r][1]+irand(-15, 15), AllianceBase[r][2], 0, TEMPSUMMON_MANUAL_DESPAWN, 2*60*1000);
if (unit)
{
- CAST_AI(hyjal_trashAI, unit->AI())->faction = Faction;
- CAST_AI(hyjal_trashAI, unit->AI())->IsOverrun = true;
- CAST_AI(hyjal_trashAI, unit->AI())->OverrunType = i;
+ ENSURE_AI(hyjal_trashAI, unit->AI())->faction = Faction;
+ ENSURE_AI(hyjal_trashAI, unit->AI())->IsOverrun = true;
+ ENSURE_AI(hyjal_trashAI, unit->AI())->OverrunType = i;
unit->setActive(true);
}
}
@@ -1060,9 +1060,9 @@ void hyjalAI::DoOverrun(uint32 faction, const uint32 diff)
if (unit)
{
unit->SetHomePosition(AllianceOverrunGargPos[i][0], AllianceOverrunGargPos[i][1], AllianceOverrunGargPos[i][2], AllianceOverrunGargPos[i][3]);
- CAST_AI(hyjal_trashAI, unit->AI())->faction = Faction;
- CAST_AI(hyjal_trashAI, unit->AI())->IsOverrun = true;
- CAST_AI(hyjal_trashAI, unit->AI())->OverrunType = i;
+ ENSURE_AI(hyjal_trashAI, unit->AI())->faction = Faction;
+ ENSURE_AI(hyjal_trashAI, unit->AI())->IsOverrun = true;
+ ENSURE_AI(hyjal_trashAI, unit->AI())->OverrunType = i;
unit->setActive(true);
}
}
@@ -1077,33 +1077,33 @@ void hyjalAI::DoOverrun(uint32 faction, const uint32 diff)
if (unit)
{
unit->SetHomePosition(InfernalSPWP[i][0], InfernalSPWP[i][1], InfernalSPWP[i][2], InfernalSPWP[i][3]);
- CAST_AI(hyjal_trashAI, unit->AI())->faction = Faction;
- CAST_AI(hyjal_trashAI, unit->AI())->IsOverrun = true;
- CAST_AI(hyjal_trashAI, unit->AI())->OverrunType = i;
+ ENSURE_AI(hyjal_trashAI, unit->AI())->faction = Faction;
+ ENSURE_AI(hyjal_trashAI, unit->AI())->IsOverrun = true;
+ ENSURE_AI(hyjal_trashAI, unit->AI())->OverrunType = i;
unit->setActive(true);
}
}
for (uint8 i = 0; i < 25; ++i)//summon 25 ghouls
{
- uint8 r = rand()%4;
+ uint8 r = rand32() % 4;
Creature* unit = me->SummonCreature(GHOUL, HordeBase[r][0]+irand(-15, 15), HordeBase[r][1]+irand(-15, 15), HordeBase[r][2], 0, TEMPSUMMON_MANUAL_DESPAWN, 2*60*1000);
if (unit)
{
- CAST_AI(hyjal_trashAI, unit->AI())->faction = Faction;
- CAST_AI(hyjal_trashAI, unit->AI())->IsOverrun = true;
- CAST_AI(hyjal_trashAI, unit->AI())->OverrunType = i;
+ ENSURE_AI(hyjal_trashAI, unit->AI())->faction = Faction;
+ ENSURE_AI(hyjal_trashAI, unit->AI())->IsOverrun = true;
+ ENSURE_AI(hyjal_trashAI, unit->AI())->OverrunType = i;
unit->setActive(true);
}
}
for (uint8 i = 0; i < 5; ++i)//summon 5 abominations
{
- uint8 r = rand()%4;
+ uint8 r = rand32() % 4;
Creature* unit = me->SummonCreature(ABOMINATION, HordeBase[r][0]+irand(-15, 15), HordeBase[r][1]+irand(-15, 15), HordeBase[r][2], 0, TEMPSUMMON_MANUAL_DESPAWN, 2*60*1000);
if (unit)
{
- CAST_AI(hyjal_trashAI, unit->AI())->faction = Faction;
- CAST_AI(hyjal_trashAI, unit->AI())->IsOverrun = true;
- CAST_AI(hyjal_trashAI, unit->AI())->OverrunType = i;
+ ENSURE_AI(hyjal_trashAI, unit->AI())->faction = Faction;
+ ENSURE_AI(hyjal_trashAI, unit->AI())->IsOverrun = true;
+ ENSURE_AI(hyjal_trashAI, unit->AI())->OverrunType = i;
unit->setActive(true);
}
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
index cbace6df028..7537654c09c 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
@@ -417,7 +417,7 @@ public:
instance = creature->GetInstanceScript();
meteor = false;//call once!
CanMove = false;
- Delay = rand()%30000;
+ Delay = rand32() % 30000;
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetDisplayId(MODEL_INVIS);
@@ -432,29 +432,29 @@ public:
uint32 FlameBuffetTimer;
bool imol;
- void Reset() OVERRIDE
+ void Reset() override
{
spawnTimer = 2000;
FlameBuffetTimer= 2000;
imol = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (waypointId == 0 && !IsOverrun)
{
if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (Delay <= diff)
{
@@ -467,7 +467,7 @@ public:
{
float x, y, z;
me->GetPosition(x, y, z);
- Creature* trigger = me->SummonCreature(NPC_TRIGGER, x+8, y+8, z+25+rand()%10, me->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, 1000);
+ Creature* trigger = me->SummonCreature(NPC_TRIGGER, x + 8, y + 8, z + 25 + rand32() % 10, me->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, 1000);
if (trigger)
{
trigger->SetVisible(false);
@@ -486,7 +486,7 @@ public:
CanMove = true;
if (instance->GetData(DATA_ALLIANCE_RETREAT) && !instance->GetData(DATA_HORDE_RETREAT))
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
} else if (instance->GetData(DATA_ALLIANCE_RETREAT) && instance->GetData(DATA_HORDE_RETREAT)){
@@ -525,7 +525,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_giant_infernalAI>(creature);
}
@@ -536,7 +536,7 @@ class npc_abomination : public CreatureScript
public:
npc_abomination() : CreatureScript("npc_abomination") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_abominationAI>(creature);
}
@@ -552,24 +552,24 @@ public:
bool go;
uint32 KnockDownTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
KnockDownTimer = 10000;
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (waypointId == 7 && !IsOverrun)
{
if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
else
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
@@ -584,9 +584,9 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
hyjal_trashAI::UpdateAI(diff);
if (IsEvent || IsOverrun)
@@ -618,7 +618,7 @@ public:
if (KnockDownTimer <= diff)
{
DoCastVictim(SPELL_KNOCKDOWN);
- KnockDownTimer = 15000+rand()%10000;
+ KnockDownTimer = 15000 + rand32() % 10000;
} else KnockDownTimer -= diff;
DoMeleeAttackIfReady();
}
@@ -631,7 +631,7 @@ class npc_ghoul : public CreatureScript
public:
npc_ghoul() : CreatureScript("npc_ghoul") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ghoulAI>(creature);
}
@@ -649,26 +649,26 @@ public:
uint32 FrenzyTimer;
uint32 MoveTimer;
bool RandomMove;
- void Reset() OVERRIDE
+ void Reset() override
{
- FrenzyTimer = 5000+rand()%5000;
+ FrenzyTimer = 5000 + rand32() % 5000;
MoveTimer = 2000;
RandomMove = false;
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (waypointId == 7 && !IsOverrun)
{
if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
else
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
@@ -684,9 +684,9 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
hyjal_trashAI::UpdateAI(diff);
if (IsEvent || IsOverrun)
@@ -714,7 +714,7 @@ public:
if (FrenzyTimer <= diff)
{
DoCast(me, SPELL_FRENZY);
- FrenzyTimer = 15000+rand()%15000;
+ FrenzyTimer = 15000 + rand32() % 15000;
} else FrenzyTimer -= diff;
if (!UpdateVictim())
return;
@@ -730,7 +730,7 @@ class npc_necromancer : public CreatureScript
public:
npc_necromancer() : CreatureScript("npc_necromancer") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_necromancerAI>(creature);
}
@@ -748,13 +748,13 @@ public:
bool go;
uint32 ShadowBoltTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
- ShadowBoltTimer = 1000+rand()%5000;
+ ShadowBoltTimer = 1000 + rand32() % 5000;
summons.DespawnAll();
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 30, true);
if (target)
@@ -762,31 +762,31 @@ public:
summons.Summon(summon);
}
- void SummonedCreatureDespawn(Creature* summon) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summon) override
{
summons.Despawn(summon);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (waypointId == 7 && !IsOverrun)
{
if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
else
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
}
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
switch (urand(0, 2))
{
@@ -804,9 +804,9 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
hyjal_trashAI::UpdateAI(diff);
@@ -840,7 +840,7 @@ public:
if (ShadowBoltTimer <= diff)
{
DoCastVictim(SPELL_SHADOW_BOLT);
- ShadowBoltTimer = 20000+rand()%10000;
+ ShadowBoltTimer = 20000 + rand32() % 10000;
} else ShadowBoltTimer -= diff;
DoMeleeAttackIfReady();
@@ -854,7 +854,7 @@ class npc_banshee : public CreatureScript
public:
npc_banshee() : CreatureScript("npc_banshee") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_bansheeAI>(creature);
}
@@ -873,35 +873,35 @@ public:
uint32 WailTimer;
uint32 ShellTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
- CourseTimer = 20000+rand()%5000;
- WailTimer = 15000+rand()%5000;
- ShellTimer = 50000+rand()%10000;
+ CourseTimer = 20000 + rand32() % 5000;
+ WailTimer = 15000 + rand32() % 5000;
+ ShellTimer = 50000 + rand32() % 10000;
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (waypointId == 7 && !IsOverrun)
{
if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
else
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
hyjal_trashAI::UpdateAI(diff);
if (IsEvent || IsOverrun)
@@ -931,17 +931,17 @@ public:
if (CourseTimer <= diff)
{
DoCastVictim(SPELL_BANSHEE_CURSE);
- CourseTimer = 20000+rand()%5000;
+ CourseTimer = 20000 + rand32() % 5000;
} else CourseTimer -= diff;
if (WailTimer <= diff)
{
DoCastVictim(SPELL_BANSHEE_WAIL);
- WailTimer = 15000+rand()%5000;
+ WailTimer = 15000 + rand32() % 5000;
} else WailTimer -= diff;
if (ShellTimer <= diff)
{
DoCast(me, SPELL_ANTI_MAGIC_SHELL);
- ShellTimer = 50000+rand()%10000;
+ ShellTimer = 50000 + rand32() % 10000;
} else ShellTimer -= diff;
DoMeleeAttackIfReady();
}
@@ -954,7 +954,7 @@ class npc_crypt_fiend : public CreatureScript
public:
npc_crypt_fiend() : CreatureScript("npc_crypt_fiend") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_crypt_fiendAI>(creature);
}
@@ -971,33 +971,33 @@ public:
bool go;
uint32 WebTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
- WebTimer = 20000+rand()%5000;
+ WebTimer = 20000 + rand32() % 5000;
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (waypointId == 7 && !IsOverrun)
{
if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
else
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
hyjal_trashAI::UpdateAI(diff);
if (IsEvent || IsOverrun)
@@ -1027,7 +1027,7 @@ public:
if (WebTimer <= diff)
{
DoCastVictim(SPELL_WEB);
- WebTimer = 20000+rand()%5000;
+ WebTimer = 20000 + rand32() % 5000;
} else WebTimer -= diff;
DoMeleeAttackIfReady();
}
@@ -1040,7 +1040,7 @@ class npc_fel_stalker : public CreatureScript
public:
npc_fel_stalker() : CreatureScript("npc_fel_stalker") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_fel_stalkerAI>(creature);
}
@@ -1057,33 +1057,33 @@ public:
bool go;
uint32 ManaBurnTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
- ManaBurnTimer = 9000+rand()%5000;
+ ManaBurnTimer = 9000 + rand32() % 5000;
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (waypointId == 7 && !IsOverrun)
{
if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
else
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE));
if (target && target->IsAlive())
me->AddThreat(target, 0.0f);
}
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
hyjal_trashAI::UpdateAI(diff);
if (IsEvent || IsOverrun)
@@ -1113,7 +1113,7 @@ public:
if (ManaBurnTimer <= diff)
{
DoCastVictim(SPELL_MANA_BURN);
- ManaBurnTimer = 9000+rand()%5000;
+ ManaBurnTimer = 9000 + rand32() % 5000;
} else ManaBurnTimer -= diff;
DoMeleeAttackIfReady();
}
@@ -1126,7 +1126,7 @@ class npc_frost_wyrm : public CreatureScript
public:
npc_frost_wyrm() : CreatureScript("npc_frost_wyrm") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_frost_wyrmAI>(creature);
}
@@ -1144,18 +1144,18 @@ public:
uint32 FrostBreathTimer;
uint32 MoveTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
FrostBreathTimer = 5000;
MoveTimer = 0;
me->SetDisableGravity(true);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (waypointId == 2 && !IsOverrun)
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
{
me->AddThreat(target, 0.0f);
@@ -1164,7 +1164,7 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (IsEvent)
instance->SetData(DATA_TRASH, 0);//signal trash is dead
@@ -1176,15 +1176,15 @@ public:
me->SetPosition(x, y, z, 0);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
hyjal_trashAI::UpdateAI(diff);
if (IsEvent || IsOverrun)
{
- CAST_AI(hyjal_trashAI, me->AI())->SetCanAttack(false);
+ ENSURE_AI(hyjal_trashAI, me->AI())->SetCanAttack(false);
npc_escortAI::UpdateAI(diff);
}
@@ -1241,7 +1241,7 @@ class npc_gargoyle : public CreatureScript
public:
npc_gargoyle() : CreatureScript("npc_gargoyle") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_gargoyleAI>(creature);
}
@@ -1263,20 +1263,20 @@ public:
float Zpos;
bool forcemove;
- void Reset() OVERRIDE
+ void Reset() override
{
forcemove = true;
Zpos = 10.0f;
- StrikeTimer = 2000+rand()%5000;
+ StrikeTimer = 2000 + rand32() % 5000;
MoveTimer = 0;
me->SetDisableGravity(true);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (waypointId == 2 && !IsOverrun)
{
- Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL));
+ Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL));
if (target && target->IsAlive())
{
me->AddThreat(target, 0.0f);
@@ -1285,7 +1285,7 @@ public:
}
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
float x, y, z;
me->GetPosition(x, y, z);
@@ -1295,13 +1295,13 @@ public:
hyjal_trashAI::JustDied(killer);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
hyjal_trashAI::UpdateAI(diff);
if (IsEvent || IsOverrun)
{
- CAST_AI(hyjal_trashAI, me->AI())->SetCanAttack(false);
+ ENSURE_AI(hyjal_trashAI, me->AI())->SetCanAttack(false);
npc_escortAI::UpdateAI(diff);
}
@@ -1332,7 +1332,7 @@ public:
if (StrikeTimer <= diff)
{
me->CastSpell(DummyTarget[0], DummyTarget[1], DummyTarget[2], SPELL_GARGOYLE_STRIKE, false);
- StrikeTimer = 2000+rand()%1000;
+ StrikeTimer = 2000 + rand32() % 1000;
} else StrikeTimer -= diff;
}
}
@@ -1351,7 +1351,7 @@ public:
if (MoveTimer <= diff)
{
float x, y, z;
- me->GetVictim()->GetPosition(x, y, z);
+ me->EnsureVictim()->GetPosition(x, y, z);
me->GetMotionMaster()->MovePoint(0, x, y, z+Zpos);
Zpos -= 1.0f;
if (Zpos <= 0)
@@ -1367,7 +1367,7 @@ public:
DoCastVictim(SPELL_GARGOYLE_STRIKE);
me->StopMoving();
me->GetMotionMaster()->Clear();
- StrikeTimer = 2000+rand()%1000;
+ StrikeTimer = 2000 + rand32() % 1000;
} else StrikeTimer=0;
} else StrikeTimer -= diff;
}
@@ -1379,7 +1379,7 @@ class alliance_rifleman : public CreatureScript
public:
alliance_rifleman() : CreatureScript("alliance_rifleman") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new alliance_riflemanAI(creature);
}
@@ -1393,16 +1393,16 @@ public:
uint32 ExplodeTimer;
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
- ExplodeTimer = 5000+rand()%5000;
+ ExplodeTimer = 5000 + rand32() % 5000;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!who || me->GetVictim())
@@ -1416,11 +1416,11 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Check if we have a target
if (!UpdateVictim())
@@ -1432,9 +1432,9 @@ public:
EnterEvadeMode();
return;
}
- int dmg = 500+rand()%700;
+ int dmg = 500 + rand32() % 700;
me->CastCustomSpell(me->GetVictim(), SPELL_EXPLODING_SHOT, &dmg, 0, 0, false);
- ExplodeTimer = 5000+rand()%5000;
+ ExplodeTimer = 5000 + rand32() % 5000;
} else ExplodeTimer -= diff;
DoMeleeAttackIfReady();
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp
index 0c3f33dea55..b228cb91382 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp
@@ -48,7 +48,7 @@ class instance_hyjal : public InstanceMapScript
public:
instance_hyjal() : InstanceMapScript("instance_hyjal", 534) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_mount_hyjal_InstanceMapScript(map);
}
@@ -57,7 +57,7 @@ public:
{
instance_mount_hyjal_InstanceMapScript(Map* map) : InstanceScript(map) { }
- void Initialize() OVERRIDE
+ void Initialize() override
{
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
@@ -81,7 +81,7 @@ public:
ArchiYell = false;
}
- bool IsEncounterInProgress() const OVERRIDE
+ bool IsEncounterInProgress() const override
{
for (uint8 i = 0; i < EncounterCount; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
@@ -90,7 +90,7 @@ public:
return false;
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -114,7 +114,7 @@ public:
}
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -129,7 +129,7 @@ public:
}
}
- uint64 GetData64(uint32 identifier) const OVERRIDE
+ uint64 GetData64(uint32 identifier) const override
{
switch (identifier)
{
@@ -146,7 +146,7 @@ public:
return 0;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -266,7 +266,7 @@ public:
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -283,12 +283,12 @@ public:
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
return str_data;
}
- void Load(const char* in) OVERRIDE
+ void Load(const char* in) override
{
if (!in)
{
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp
index a03bfb3082b..44e1067498d 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp
@@ -50,7 +50,7 @@ class boss_epoch : public CreatureScript
public:
boss_epoch() : CreatureScript("boss_epoch") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_epochAI>(creature);
}
@@ -72,7 +72,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
uiStep = 1;
uiStepTimer = 26000;
@@ -84,14 +84,14 @@ public:
instance->SetData(DATA_EPOCH_EVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetData(DATA_EPOCH_EVENT, IN_PROGRESS);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -126,14 +126,14 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetData(DATA_EPOCH_EVENT, DONE);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp
index c3427c99fbb..f3333c0b0b6 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp
@@ -37,7 +37,7 @@ class boss_infinite_corruptor : public CreatureScript
public:
boss_infinite_corruptor() : CreatureScript("boss_infinite_corruptor") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_infinite_corruptorAI>(creature);
}
@@ -51,18 +51,18 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
instance->SetData(DATA_INFINITE_EVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetData(DATA_INFINITE_EVENT, IN_PROGRESS);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -71,7 +71,7 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetData(DATA_INFINITE_EVENT, DONE);
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 7c0169cda95..6d36a933687 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
@@ -64,7 +64,7 @@ class boss_mal_ganis : public CreatureScript
public:
boss_mal_ganis() : CreatureScript("boss_mal_ganis") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_mal_ganisAI>(creature);
}
@@ -91,7 +91,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
bYelled = false;
bYelled2 = false;
@@ -105,19 +105,19 @@ public:
instance->SetData(DATA_MAL_GANIS_EVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetData(DATA_MAL_GANIS_EVENT, IN_PROGRESS);
}
- void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* done_by, uint32 &damage) override
{
if (damage >= me->GetHealth() && done_by != me)
damage = me->GetHealth()-1;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
switch (Phase)
{
@@ -223,7 +223,7 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_MAL_GANIS_EVENT, DONE);
DoCastAOE(SPELL_MAL_GANIS_KILL_CREDIT);
@@ -231,7 +231,7 @@ public:
DoCastAOE(SPELL_KILL_CREDIT);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp
index b4bf6a30140..4c26b30947f 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp
@@ -49,7 +49,7 @@ class boss_meathook : public CreatureScript
public:
boss_meathook() : CreatureScript("boss_meathook") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_meathookAI>(creature);
}
@@ -68,7 +68,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
uiChainTimer = urand(12000, 17000); //seen on video 13, 17, 15, 12, 16
uiDiseaseTimer = urand(2000, 4000); //approx 3s
@@ -77,14 +77,14 @@ public:
instance->SetData(DATA_MEATHOOK_EVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetData(DATA_MEATHOOK_EVENT, IN_PROGRESS);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -112,14 +112,14 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetData(DATA_MEATHOOK_EVENT, DONE);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp
index 5d9477a1b45..7c299b1feaa 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp
@@ -54,7 +54,7 @@ class boss_salramm : public CreatureScript
public:
boss_salramm() : CreatureScript("boss_salramm") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_salrammAI>(creature);
}
@@ -75,7 +75,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
uiCurseFleshTimer = 30000; //30s DBM
uiExplodeGhoulTimer = urand(25000, 28000); //approx 6 sec after summon ghouls
@@ -86,14 +86,14 @@ public:
instance->SetData(DATA_SALRAMM_EVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetData(DATA_SALRAMM_EVENT, IN_PROGRESS);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -135,14 +135,14 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetData(DATA_SALRAMM_EVENT, DONE);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
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 60352f7d55c..fd832051421 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
@@ -255,7 +255,7 @@ class npc_arthas : public CreatureScript
public:
npc_arthas() : CreatureScript("npc_arthas") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
npc_arthasAI* ai = CAST_AI(npc_arthas::npc_arthasAI, creature->AI());
@@ -298,7 +298,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
npc_arthasAI* ai = CAST_AI(npc_arthas::npc_arthasAI, creature->AI());
@@ -342,7 +342,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_arthasAI>(creature);
}
@@ -379,7 +379,7 @@ public:
uint32 exorcismTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
utherGUID = 0;
jainaGUID = 0;
@@ -415,12 +415,12 @@ public:
wave = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoCast(me, SPELL_ARTHAS_AURA);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_ARTHAS_EVENT, FAIL);
}
@@ -467,7 +467,7 @@ public:
++step;
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -585,7 +585,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
@@ -627,7 +627,7 @@ public:
JumpToNextStep(2000);
break;
case 3:
- if (Creature* uther = Unit::GetCreature(*me, utherGUID))
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID))
{
uther->AI()->Talk(SAY_PHASE102);
}
@@ -642,13 +642,13 @@ public:
break;
//After waypoint 1
case 5:
- if (Creature* jaina = Unit::GetCreature(*me, jainaGUID))
+ if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID))
jaina->SetTarget(me->GetGUID());
Talk(SAY_PHASE104);
JumpToNextStep(10000);
break;
case 6:
- if (Creature* uther = Unit::GetCreature(*me, utherGUID))
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID))
uther->AI()->Talk(SAY_PHASE105);
JumpToNextStep(1000);
break;
@@ -657,7 +657,7 @@ public:
JumpToNextStep(4000);
break;
case 8:
- if (Creature* uther = Unit::GetCreature(*me, utherGUID))
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID))
uther->AI()->Talk(SAY_PHASE107);
JumpToNextStep(6000);
break;
@@ -666,7 +666,7 @@ public:
JumpToNextStep(4000);
break;
case 10:
- if (Creature* uther = Unit::GetCreature(*me, utherGUID))
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID))
uther->AI()->Talk(SAY_PHASE109);
JumpToNextStep(8000);
break;
@@ -675,7 +675,7 @@ public:
JumpToNextStep(4000);
break;
case 12:
- if (Creature* uther = Unit::GetCreature(*me, utherGUID))
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID))
uther->AI()->Talk(SAY_PHASE111);
JumpToNextStep(4000);
break;
@@ -684,7 +684,7 @@ public:
JumpToNextStep(11000);
break;
case 14:
- if (Creature* jaina = Unit::GetCreature(*me, jainaGUID))
+ if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID))
jaina->AI()->Talk(SAY_PHASE113);
JumpToNextStep(3000);
break;
@@ -693,12 +693,12 @@ public:
JumpToNextStep(9000);
break;
case 16:
- if (Creature* uther = Unit::GetCreature(*me, utherGUID))
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID))
uther->AI()->Talk(SAY_PHASE115);
JumpToNextStep(4000);
break;
case 17:
- if (Creature* uther = Unit::GetCreature(*me, utherGUID))
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID))
{
uther->SetWalk(true);
uther->GetMotionMaster()->MovePoint(0, 1794.357f, 1272.183f, 140.558f);
@@ -706,7 +706,7 @@ public:
JumpToNextStep(1000);
break;
case 18:
- if (Creature* jaina = Unit::GetCreature(*me, jainaGUID))
+ if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID))
{
me->SetTarget(jainaGUID);
jaina->SetWalk(true);
@@ -719,7 +719,7 @@ public:
JumpToNextStep(1000);
break;
case 20:
- if (Creature* jaina = Unit::GetCreature(*me, jainaGUID))
+ if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID))
jaina->AI()->Talk(SAY_PHASE117);
JumpToNextStep(3000);
break;
@@ -740,10 +740,10 @@ public:
bStepping = false;
SetRun(true);
- if (Creature* jaina = Unit::GetCreature(*me, jainaGUID))
+ if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID))
jaina->DisappearAndDie();
- if (Creature* uther = Unit::GetCreature(*me, utherGUID))
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID))
uther->DisappearAndDie();
me->SetTarget(0);
@@ -772,7 +772,7 @@ public:
//After waypoint 9
case 27:
me->SetTarget(citymenGUID[0]);
- if (Creature* cityman = Unit::GetCreature(*me, citymenGUID[0]))
+ if (Creature* cityman = ObjectAccessor::GetCreature(*me, citymenGUID[0]))
{
cityman->SetTarget(me->GetGUID());
cityman->SetWalk(true);
@@ -781,7 +781,7 @@ public:
JumpToNextStep(2000);
break;
case 28:
- if (Creature* cityman = Unit::GetCreature(*me, citymenGUID[0]))
+ if (Creature* cityman = ObjectAccessor::GetCreature(*me, citymenGUID[0]))
cityman->AI()->Talk(SAY_PHASE202);
JumpToNextStep(4000);
break;
@@ -799,11 +799,11 @@ public:
case 31:
SetEscortPaused(false);
bStepping = false;
- if (Creature* cityman1 = Unit::GetCreature(*me, citymenGUID[1]))
+ if (Creature* cityman1 = ObjectAccessor::GetCreature(*me, citymenGUID[1]))
{
cityman1->AI()->Talk(SAY_PHASE204);
cityman1->SetTarget(me->GetGUID());
- if (Creature* cityman0 = Unit::GetCreature(*me, citymenGUID[0]))
+ if (Creature* cityman0 = ObjectAccessor::GetCreature(*me, citymenGUID[0]))
cityman0->Kill(cityman0);
me->SetTarget(citymenGUID[1]);
}
@@ -815,7 +815,7 @@ public:
JumpToNextStep(1000);
break;
case 33:
- if (Creature* cityman1 = Unit::GetCreature(*me, citymenGUID[1]))
+ if (Creature* cityman1 = ObjectAccessor::GetCreature(*me, citymenGUID[1]))
cityman1->Kill(cityman1);
JumpToNextStep(1000);
break;
@@ -839,7 +839,7 @@ public:
case 36:
if (Creature* malganis = me->SummonCreature(NPC_MAL_GANIS, 2117.349f, 1288.624f, 136.271f, 1.37f, TEMPSUMMON_TIMED_DESPAWN, 60000))
{
- if (Creature* pStalkerM = Unit::GetCreature(*me, stalkerGUID))
+ if (Creature* pStalkerM = ObjectAccessor::GetCreature(*me, stalkerGUID))
malganis->CastSpell(pStalkerM, 63793, false);
malganisGUID = malganis->GetGUID();
@@ -850,13 +850,13 @@ public:
JumpToNextStep(11000);
break;
case 37:
- if (Creature* malganis = Unit::GetCreature(*me, malganisGUID))
+ if (Creature* malganis = ObjectAccessor::GetCreature(*me, malganisGUID))
{
Creature* pZombie = GetClosestCreatureWithEntry(malganis, NPC_CITY_MAN, 100.0f);
if (!pZombie)
pZombie = GetClosestCreatureWithEntry(malganis, NPC_CITY_MAN2, 100.0f);
if (pZombie)
- pZombie->UpdateEntry(NPC_ZOMBIE, 0);
+ pZombie->UpdateEntry(NPC_ZOMBIE);
else //There's no one else to transform
step++;
}
@@ -865,12 +865,12 @@ public:
phaseTimer = 500;
break;
case 38:
- if (Creature* malganis = Unit::GetCreature(*me, malganisGUID))
+ if (Creature* malganis = ObjectAccessor::GetCreature(*me, malganisGUID))
malganis->AI()->Talk(SAY_PHASE207);
JumpToNextStep(17000);
break;
case 39:
- if (Creature* malganis = Unit::GetCreature(*me, malganisGUID))
+ if (Creature* malganis = ObjectAccessor::GetCreature(*me, malganisGUID))
malganis->SetVisible(false);
Talk(SAY_PHASE208);
JumpToNextStep(7000);
@@ -922,7 +922,7 @@ public:
if (waveGUID[i] == 0)
break;
++mobCounter;
- Unit* temp = Unit::GetCreature(*me, waveGUID[i]);
+ Unit* temp = ObjectAccessor::GetCreature(*me, waveGUID[i]);
if (!temp || temp->isDead())
++deadCounter;
}
@@ -976,16 +976,16 @@ public:
//After Gossip 2 (waypoint 22)
case 61:
me->SetReactState(REACT_AGGRESSIVE);
- if (Creature* disguised0 = Unit::GetCreature(*me, infiniteDraconianGUID[0]))
+ if (Creature* disguised0 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[0]))
disguised0->SetTarget(me->GetGUID());
- if (Creature* disguised1 = Unit::GetCreature(*me, infiniteDraconianGUID[1]))
+ if (Creature* disguised1 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[1]))
disguised1->SetTarget(me->GetGUID());
- if (Creature* disguised2 = Unit::GetCreature(*me, infiniteDraconianGUID[2]))
+ if (Creature* disguised2 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[2]))
disguised2->SetTarget(me->GetGUID());
JumpToNextStep(1000);
break;
case 62:
- if (Creature* disguised0 = Unit::GetCreature(*me, infiniteDraconianGUID[0]))
+ if (Creature* disguised0 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[0]))
disguised0->AI()->Talk(SAY_PHASE302);
JumpToNextStep(7000);
break;
@@ -1001,7 +1001,7 @@ public:
JumpToNextStep(1000);
break;
case 65:
- if (Creature* disguised0 = Unit::GetCreature(*me, infiniteDraconianGUID[0]))
+ if (Creature* disguised0 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[0]))
disguised0->HandleEmoteCommand(11);
JumpToNextStep(1000);
break;
@@ -1010,14 +1010,14 @@ public:
JumpToNextStep(2000);
break;
case 67:
- if (Creature* disguised0 = Unit::GetCreature(*me, infiniteDraconianGUID[0]))
+ if (Creature* disguised0 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[0]))
disguised0->AI()->Talk(SAY_PHASE305);
JumpToNextStep(1000);
break;
case 68:
- if (Creature* disguised2 = Unit::GetCreature(*me, infiniteDraconianGUID[2]))
+ if (Creature* disguised2 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[2]))
{
- disguised2->UpdateEntry(NPC_INFINITE_HUNTER, 0);
+ disguised2->UpdateEntry(NPC_INFINITE_HUNTER);
//Make them unattackable
disguised2->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
disguised2->SetReactState(REACT_PASSIVE);
@@ -1025,9 +1025,9 @@ public:
JumpToNextStep(2000);
break;
case 69:
- if (Creature* disguised1 = Unit::GetCreature(*me, infiniteDraconianGUID[1]))
+ if (Creature* disguised1 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[1]))
{
- disguised1->UpdateEntry(NPC_INFINITE_AGENT, 0);
+ disguised1->UpdateEntry(NPC_INFINITE_AGENT);
//Make them unattackable
disguised1->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
disguised1->SetReactState(REACT_PASSIVE);
@@ -1035,9 +1035,9 @@ public:
JumpToNextStep(2000);
break;
case 70:
- if (Creature* disguised0 = Unit::GetCreature(*me, infiniteDraconianGUID[0]))
+ if (Creature* disguised0 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[0]))
{
- disguised0->UpdateEntry(NPC_INFINITE_ADVERSARY, 0);
+ disguised0->UpdateEntry(NPC_INFINITE_ADVERSARY);
//Make them unattackable
disguised0->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
disguised0->SetReactState(REACT_PASSIVE);
@@ -1051,7 +1051,7 @@ public:
case 77:
//Make cratures attackable
for (uint32 i = 0; i< ENCOUNTER_DRACONIAN_NUMBER; ++i)
- if (Creature* temp = Unit::GetCreature(*me, infiniteDraconianGUID[i]))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[i]))
{
temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
temp->SetReactState(REACT_AGGRESSIVE);
@@ -1091,7 +1091,7 @@ public:
if (instance->GetData(DATA_EPOCH_EVENT) != DONE)
{
SpawnTimeRift(17, &epochGUID);
- if (Creature* epoch = Unit::GetCreature(*me, epochGUID))
+ if (Creature* epoch = ObjectAccessor::GetCreature(*me, epochGUID))
epoch->AI()->Talk(SAY_PHASE314);
me->SetTarget(epochGUID);
}
@@ -1105,7 +1105,7 @@ public:
case 82:
if (instance->GetData(DATA_EPOCH_EVENT) != DONE)
{
- if (Creature* epoch = Unit::GetCreature(*me, epochGUID))
+ if (Creature* epoch = ObjectAccessor::GetCreature(*me, epochGUID))
{
//Make Epoch attackable
epoch->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
@@ -1157,7 +1157,7 @@ public:
me->SetTarget(malganisGUID);
break;
case 87:
- if (Creature* malganis = Unit::GetCreature(*me, malganisGUID))
+ if (Creature* malganis = ObjectAccessor::GetCreature(*me, malganisGUID))
{
malganis->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_UNK_6 | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_UNK_15);
malganis->SetReactState(REACT_AGGRESSIVE);
@@ -1222,7 +1222,7 @@ class npc_crate_helper : public CreatureScript
_marked = false;
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_ARCANE_DISRUPTION && !_marked)
{
@@ -1241,7 +1241,7 @@ class npc_crate_helper : public CreatureScript
bool _marked;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_crate_helperAI(creature);
}
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 9e192d2e1a2..503166e0b12 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
@@ -45,7 +45,7 @@ class instance_culling_of_stratholme : public InstanceMapScript
public:
instance_culling_of_stratholme() : InstanceMapScript("instance_culling_of_stratholme", 595) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_culling_of_stratholme_InstanceMapScript(map);
}
@@ -70,7 +70,7 @@ class instance_culling_of_stratholme : public InstanceMapScript
_crateCount = 0;
}
- bool IsEncounterInProgress() const OVERRIDE
+ bool IsEncounterInProgress() const override
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (_encounterState[i] == IN_PROGRESS)
@@ -79,7 +79,7 @@ class instance_culling_of_stratholme : public InstanceMapScript
return false;
}
- void FillInitialWorldStates(WorldPacket& data) OVERRIDE
+ void FillInitialWorldStates(WorldPacket& data) override
{
data << uint32(WORLDSTATE_SHOW_CRATES) << uint32(1);
data << uint32(WORLDSTATE_CRATES_REVEALED) << uint32(_crateCount);
@@ -88,7 +88,7 @@ class instance_culling_of_stratholme : public InstanceMapScript
data << uint32(WORLDSTATE_TIME_GUARDIAN_SHOW) << uint32(0);
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -116,7 +116,7 @@ class instance_culling_of_stratholme : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -143,7 +143,7 @@ class instance_culling_of_stratholme : public InstanceMapScript
}
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -187,7 +187,7 @@ class instance_culling_of_stratholme : public InstanceMapScript
// Summon Chromie and global whisper
if (Creature* chromie = instance->SummonCreature(NPC_CHROMIE_2, ChromieSummonPos))
if (!instance->GetPlayers().isEmpty())
- sCreatureTextMgr->SendChat(chromie, SAY_CRATES_COMPLETED, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP);
+ chromie->AI()->TalkToMap(SAY_CRATES_COMPLETED);
}
DoUpdateWorldState(WORLDSTATE_CRATES_REVEALED, _crateCount);
break;
@@ -197,7 +197,7 @@ class instance_culling_of_stratholme : public InstanceMapScript
SaveToDB();
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -217,7 +217,7 @@ class instance_culling_of_stratholme : public InstanceMapScript
return 0;
}
- uint64 GetData64(uint32 identifier) const OVERRIDE
+ uint64 GetData64(uint32 identifier) const override
{
switch (identifier)
{
@@ -247,7 +247,7 @@ class instance_culling_of_stratholme : public InstanceMapScript
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -259,7 +259,7 @@ class instance_culling_of_stratholme : public InstanceMapScript
return saveStream.str();
}
- void Load(const char* in) OVERRIDE
+ void Load(const char* in) override
{
if (!in)
{
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp
index 5b1db051a56..b63075b681a 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp
@@ -52,7 +52,7 @@ class boss_captain_skarloc : public CreatureScript
public:
boss_captain_skarloc() : CreatureScript("boss_captain_skarloc") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_captain_skarlocAI>(creature);
}
@@ -73,7 +73,7 @@ public:
uint32 DevotionAura_Timer;
uint32 Consecration_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Holy_Light_Timer = urand(20000, 30000);
Cleanse_Timer = 10000;
@@ -83,19 +83,19 @@ public:
Consecration_Timer = 8000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
//This is not correct. Should taunt Thrall before engage in combat
Talk(SAY_TAUNT1);
Talk(SAY_TAUNT2);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -103,7 +103,7 @@ public:
instance->SetData(TYPE_THRALL_PART1, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp
index 4d75bc0545c..e27dec09802 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp
@@ -50,7 +50,7 @@ class boss_epoch_hunter : public CreatureScript
public:
boss_epoch_hunter() : CreatureScript("boss_epoch_hunter") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_epoch_hunterAI>(creature);
}
@@ -69,7 +69,7 @@ public:
uint32 WingBuffet_Timer;
uint32 Mda_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
SandBreath_Timer = urand(8000, 16000);
ImpendingDeath_Timer = urand(25000, 30000);
@@ -77,17 +77,17 @@ public:
Mda_Timer = 40000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -95,7 +95,7 @@ public:
instance->SetData(TYPE_THRALL_PART4, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -117,14 +117,14 @@ public:
if (ImpendingDeath_Timer <= diff)
{
DoCastVictim(SPELL_IMPENDING_DEATH);
- ImpendingDeath_Timer = 25000+rand()%5000;
+ ImpendingDeath_Timer = 25000 + rand32() % 5000;
} else ImpendingDeath_Timer -= diff;
if (WingBuffet_Timer <= diff)
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_WING_BUFFET);
- WingBuffet_Timer = 25000+rand()%10000;
+ WingBuffet_Timer = 25000 + rand32() % 10000;
} else WingBuffet_Timer -= diff;
if (Mda_Timer <= diff)
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp
index 7ca850e8754..2cf5169b530 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp
@@ -37,7 +37,7 @@ class go_barrel_old_hillsbrad : public GameObjectScript
public:
go_barrel_old_hillsbrad() : GameObjectScript("go_barrel_old_hillsbrad") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
if (InstanceScript* instance = go->GetInstanceScript())
{
@@ -107,7 +107,7 @@ class boss_lieutenant_drake : public CreatureScript
public:
boss_lieutenant_drake() : CreatureScript("boss_lieutenant_drake") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_lieutenant_drakeAI(creature);
}
@@ -124,7 +124,7 @@ public:
uint32 MortalStrike_Timer;
uint32 ExplodingShout_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
CanPatrol = true;
wpId = 0;
@@ -135,22 +135,22 @@ public:
ExplodingShout_Timer = 25000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
/// @todo make this work
if (CanPatrol && wpId == 0)
@@ -167,7 +167,7 @@ public:
if (Whirlwind_Timer <= diff)
{
DoCastVictim(SPELL_WHIRLWIND);
- Whirlwind_Timer = 20000+rand()%5000;
+ Whirlwind_Timer = 20000 + rand32() % 5000;
} else Whirlwind_Timer -= diff;
//Fear
@@ -175,7 +175,7 @@ public:
{
Talk(SAY_SHOUT);
DoCastVictim(SPELL_FRIGHTENING_SHOUT);
- Fear_Timer = 25000+rand()%10000;
+ Fear_Timer = 25000 + rand32() % 10000;
} else Fear_Timer -= diff;
//Mortal Strike
@@ -183,7 +183,7 @@ public:
{
Talk(SAY_MORTAL);
DoCastVictim(SPELL_MORTAL_STRIKE);
- MortalStrike_Timer = 20000+rand()%10000;
+ MortalStrike_Timer = 20000 + rand32() % 10000;
} else MortalStrike_Timer -= diff;
DoMeleeAttackIfReady();
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 47317b0a13e..6fc36663c2a 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp
@@ -45,7 +45,7 @@ class instance_old_hillsbrad : public InstanceMapScript
public:
instance_old_hillsbrad() : InstanceMapScript("instance_old_hillsbrad", 560) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_old_hillsbrad_InstanceMapScript(map);
}
@@ -62,7 +62,7 @@ public:
uint64 TarethaGUID;
uint64 EpochGUID;
- void Initialize() OVERRIDE
+ void Initialize() override
{
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
@@ -104,7 +104,7 @@ public:
}
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -120,7 +120,7 @@ public:
}
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
Player* player = GetPlayerInMap();
@@ -203,7 +203,7 @@ public:
}
}
- uint32 GetData(uint32 data) const OVERRIDE
+ uint32 GetData(uint32 data) const override
{
switch (data)
{
@@ -223,7 +223,7 @@ public:
return 0;
}
- uint64 GetData64(uint32 data) const OVERRIDE
+ uint64 GetData64(uint32 data) const override
{
switch (data)
{
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
index bf902ba403c..1dc86cd4ad4 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
@@ -56,7 +56,7 @@ class npc_erozion : public CreatureScript
public:
npc_erozion() : CreatureScript("npc_erozion") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -76,7 +76,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -185,12 +185,12 @@ class npc_thrall_old_hillsbrad : public CreatureScript
public:
npc_thrall_old_hillsbrad() : CreatureScript("npc_thrall_old_hillsbrad") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_thrall_old_hillsbradAI>(creature);
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
InstanceScript* instance = creature->GetInstanceScript();
@@ -209,9 +209,9 @@ public:
if (npc_escortAI* pEscortAI = CAST_AI(npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI, creature->AI()))
pEscortAI->Start(true, true, player->GetGUID());
- CAST_AI(npc_escortAI, (creature->AI()))->SetMaxPlayerDistance(100.0f);//not really needed, because it will not despawn if player is too far
- CAST_AI(npc_escortAI, (creature->AI()))->SetDespawnAtEnd(false);
- CAST_AI(npc_escortAI, (creature->AI()))->SetDespawnAtFar(false);
+ ENSURE_AI(npc_escortAI, (creature->AI()))->SetMaxPlayerDistance(100.0f);//not really needed, because it will not despawn if player is too far
+ ENSURE_AI(npc_escortAI, (creature->AI()))->SetDespawnAtEnd(false);
+ ENSURE_AI(npc_escortAI, (creature->AI()))->SetDespawnAtFar(false);
break;
case GOSSIP_ACTION_INFO_DEF+2:
@@ -227,20 +227,20 @@ public:
creature->AI()->Talk(SAY_TH_START_EVENT_PART2);
- CAST_AI(npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI, creature->AI())->StartWP();
+ ENSURE_AI(npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI, creature->AI())->StartWP();
break;
case GOSSIP_ACTION_INFO_DEF+3:
player->CLOSE_GOSSIP_MENU();
if (instance)
instance->SetData(TYPE_THRALL_PART3, IN_PROGRESS);
- CAST_AI(npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI, creature->AI())->StartWP();
+ ENSURE_AI(npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI, creature->AI())->StartWP();
break;
}
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
{
@@ -283,12 +283,10 @@ public:
InstanceScript* instance;
- uint64 TarethaGUID;
-
bool LowHp;
bool HadMount;
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -400,11 +398,8 @@ public:
me->SummonCreature(NPC_INN_GUARDSMAN, 2656.39f, 659.77f, 61.93f, 2.61f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
break;
case 94:
- if (uint64 TarethaGUID = instance->GetData64(DATA_TARETHA))
- {
- if (Creature* Taretha = Creature::GetCreature(*me, TarethaGUID))
- Taretha->AI()->Talk(SAY_TA_ESCAPED, me);
- }
+ if (Creature* Taretha = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_TARETHA)))
+ Taretha->AI()->Talk(SAY_TA_ESCAPED, me);
break;
case 95:
Talk(SAY_TH_MEET_TARETHA);
@@ -428,7 +423,7 @@ public:
if (Creature* Taretha = instance->instance->GetCreature(instance->GetData64(DATA_TARETHA)))
{
if (Player* player = GetPlayerForEscort())
- CAST_AI(npc_escortAI, (Taretha->AI()))->Start(false, true, player->GetGUID());
+ ENSURE_AI(npc_escortAI, (Taretha->AI()))->Start(false, true, player->GetGUID());
}
//kill credit Creature for quest
@@ -454,7 +449,7 @@ public:
}
}
- void Reset() OVERRIDE
+ void Reset() override
{
LowHp = false;
@@ -489,7 +484,7 @@ public:
me->Dismount();
me->SetSpeed(MOVE_RUN, SPEED_RUN);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_TH_RANDOM_AGGRO);
if (me->IsMounted())
@@ -499,7 +494,7 @@ public:
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
switch (summoned->GetEntry())
{
@@ -516,11 +511,11 @@ public:
}
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_TH_RANDOM_KILL);
}
- void JustDied(Unit* slayer) OVERRIDE
+ void JustDied(Unit* slayer) override
{
instance->SetData(TYPE_THRALL_EVENT, FAIL);
@@ -531,7 +526,7 @@ public:
Talk(SAY_TH_RANDOM_DIE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
@@ -566,12 +561,12 @@ class npc_taretha : public CreatureScript
public:
npc_taretha() : CreatureScript("npc_taretha") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_tarethaAI>(creature);
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
InstanceScript* instance = creature->GetInstanceScript();
@@ -590,14 +585,14 @@ public:
if (instance->GetData64(DATA_EPOCH) == 0)
creature->SummonCreature(ENTRY_EPOCH, 2639.13f, 698.55f, 65.43f, 4.59f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000);
- if (Creature* thrall = (Unit::GetCreature(*creature, instance->GetData64(DATA_THRALL))))
- CAST_AI(npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI, thrall->AI())->StartWP();
+ if (Creature* thrall = (ObjectAccessor::GetCreature(*creature, instance->GetData64(DATA_THRALL))))
+ ENSURE_AI(npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI, thrall->AI())->StartWP();
}
}
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
InstanceScript* instance = creature->GetInstanceScript();
if (instance->GetData(TYPE_THRALL_PART3) == DONE && instance->GetData(TYPE_THRALL_PART4) == NOT_STARTED)
@@ -617,7 +612,7 @@ public:
InstanceScript* instance;
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -630,10 +625,10 @@ public:
}
}
- void Reset() OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void Reset() override { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp
index bf11d781a0c..4a2b3d650d6 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp
@@ -59,9 +59,9 @@ public:
{
boss_aeonusAI(Creature* creature) : BossAI(creature, TYPE_AEONUS) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_SANDBREATH, urand(15000, 30000));
events.ScheduleEvent(EVENT_TIMESTOP, urand(10000, 15000));
@@ -70,7 +70,7 @@ public:
Talk(SAY_AGGRO);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
//Despawn Time Keeper
@@ -86,7 +86,7 @@ public:
ScriptedAI::MoveInLineOfSight(who);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -94,13 +94,13 @@ public:
instance->SetData(TYPE_MEDIVH, DONE); // FIXME: later should be removed
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -136,7 +136,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_aeonusAI>(creature);
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp
index 251c1b14e9b..4c69efa6ca7 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp
@@ -60,9 +60,9 @@ public:
{
boss_chrono_lord_dejaAI(Creature* creature) : BossAI(creature, TYPE_CRONO_LORD_DEJA) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_ARCANE_BLAST, urand(18000, 23000));
events.ScheduleEvent(EVENT_TIME_LAPSE, urand(10000, 15000));
@@ -73,7 +73,7 @@ public:
Talk(SAY_AGGRO);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
//Despawn Time Keeper
@@ -89,19 +89,19 @@ public:
ScriptedAI::MoveInLineOfSight(who);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetData(TYPE_RIFT, SPECIAL);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -142,7 +142,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_chrono_lord_dejaAI>(creature);
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp
index fcd3cc92604..e83c290e010 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp
@@ -59,9 +59,9 @@ public:
{
boss_temporusAI(Creature* creature) : BossAI(creature, TYPE_TEMPORUS) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_HASTE, urand(15000, 23000));
events.ScheduleEvent(EVENT_MORTAL_WOUND, 8000);
@@ -72,19 +72,19 @@ public:
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetData(TYPE_RIFT, SPECIAL);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
//Despawn Time Keeper
@@ -101,7 +101,7 @@ public:
ScriptedAI::MoveInLineOfSight(who);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -140,7 +140,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_temporusAI>(creature);
}
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 e5920084033..3e776a0c905 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
@@ -37,7 +37,7 @@ enum Misc
RIFT_BOSS = 1
};
-inline uint32 RandRiftBoss() { return ((rand()%2) ? NPC_RIFT_KEEPER : NPC_RIFT_LORD); }
+inline uint32 RandRiftBoss() { return ((rand32() % 2) ? NPC_RIFT_KEEPER : NPC_RIFT_LORD); }
float PortalLocation[4][4]=
{
@@ -73,7 +73,7 @@ class instance_the_black_morass : public InstanceMapScript
public:
instance_the_black_morass() : InstanceMapScript("instance_the_black_morass", 269) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_the_black_morass_InstanceMapScript(map);
}
@@ -92,7 +92,7 @@ public:
uint64 _medivhGUID;
uint8 _currentRiftId;
- void Initialize() OVERRIDE
+ void Initialize() override
{
_medivhGUID = 0;
Clear();
@@ -117,7 +117,7 @@ public:
DoUpdateWorldState(WORLD_STATE_BM_RIFT, 0);
}
- bool IsEncounterInProgress() const OVERRIDE
+ bool IsEncounterInProgress() const override
{
if (GetData(TYPE_MEDIVH) == IN_PROGRESS)
return true;
@@ -125,7 +125,7 @@ public:
return false;
}
- void OnPlayerEnter(Player* player) OVERRIDE
+ void OnPlayerEnter(Player* player) override
{
if (GetData(TYPE_MEDIVH) == IN_PROGRESS)
return;
@@ -133,7 +133,7 @@ public:
player->SendUpdateWorldState(WORLD_STATE_BM, 0);
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
if (creature->GetEntry() == NPC_MEDIVH)
_medivhGUID = creature->GetGUID();
@@ -165,7 +165,7 @@ public:
}
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -236,7 +236,7 @@ public:
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -252,7 +252,7 @@ public:
return 0;
}
- uint64 GetData64(uint32 data) const OVERRIDE
+ uint64 GetData64(uint32 data) const override
{
if (data == DATA_MEDIVH)
return _medivhGUID;
@@ -269,8 +269,7 @@ public:
TC_LOG_DEBUG("scripts", "Instance The Black Morass: Summoning rift boss entry %u.", entry);
- Position pos;
- me->GetRandomNearPosition(pos, 10.0f);
+ Position pos = me->GetRandomNearPosition(10.0f);
//normalize Z-level if we can, if rift is not at ground level.
pos.m_positionZ = std::max(me->GetMap()->GetHeight(pos.m_positionX, pos.m_positionY, MAX_HEIGHT), me->GetMap()->GetWaterLevel(pos.m_positionX, pos.m_positionY));
@@ -317,7 +316,7 @@ public:
}
}
- void Update(uint32 diff) OVERRIDE
+ void Update(uint32 diff) override
{
if (m_auiEncounter[1] != IN_PROGRESS)
return;
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 58bda23fb36..a1c4f057161 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp
@@ -68,7 +68,7 @@ class npc_medivh_bm : public CreatureScript
public:
npc_medivh_bm() : CreatureScript("npc_medivh_bm") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_medivh_bmAI>(creature);
}
@@ -89,7 +89,7 @@ public:
bool Life50;
bool Life25;
- void Reset() OVERRIDE
+ void Reset() override
{
SpellCorrupt_Timer = 0;
Check_Timer = 0;
@@ -105,7 +105,7 @@ public:
DoCast(me, SPELL_PORTAL_RUNE, true);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 10.0f))
{
@@ -136,7 +136,7 @@ public:
}
}
- void AttackStart(Unit* /*who*/) OVERRIDE
+ void AttackStart(Unit* /*who*/) override
{
//if (instance->GetData(TYPE_MEDIVH) == IN_PROGRESS)
// return;
@@ -144,9 +144,9 @@ public:
//ScriptedAI::AttackStart(who);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
if (SpellCorrupt_Timer)
return;
@@ -158,7 +158,7 @@ public:
SpellCorrupt_Timer = 3000;
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
if (killer->GetEntry() == me->GetEntry())
return;
@@ -166,7 +166,7 @@ public:
Talk(SAY_DEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (SpellCorrupt_Timer)
{
@@ -256,7 +256,7 @@ class npc_time_rift : public CreatureScript
public:
npc_time_rift() : CreatureScript("npc_time_rift") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_time_riftAI>(creature);
}
@@ -275,7 +275,7 @@ public:
uint8 mPortalCount;
uint8 mWaveId;
- void Reset() OVERRIDE
+ void Reset() override
{
TimeRiftWave_Timer = 15000;
@@ -290,7 +290,7 @@ public:
else mWaveId = 1;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
void DoSummonAtRift(uint32 creature_entry)
{
@@ -304,8 +304,7 @@ public:
return;
}
- Position pos;
- me->GetRandomNearPosition(pos, 10.0f);
+ Position pos = me->GetRandomNearPosition(10.0f);
//normalize Z-level if we can, if rift is not at ground level.
pos.m_positionZ = std::max(me->GetMap()->GetHeight(pos.m_positionX, pos.m_positionY, MAX_HEIGHT), me->GetMap()->GetWaterLevel(pos.m_positionX, pos.m_positionY));
@@ -334,7 +333,7 @@ public:
} else DoSummonAtRift(entry);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (TimeRiftWave_Timer <= diff)
{
@@ -368,7 +367,7 @@ class npc_saat : public CreatureScript
public:
npc_saat() : CreatureScript("npc_saat") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -379,7 +378,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
diff --git a/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp b/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp
index 160495a8dc2..ff4c0e7578b 100644
--- a/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp
+++ b/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp
@@ -30,7 +30,7 @@ class instance_dire_maul : public InstanceMapScript
public:
instance_dire_maul() : InstanceMapScript("instance_dire_maul", 429) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_dire_maul_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp
index ec8596e4fc0..15330643bd3 100644
--- a/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp
+++ b/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp
@@ -38,7 +38,7 @@ class celebras_the_cursed : public CreatureScript
public:
celebras_the_cursed() : CreatureScript("celebras_the_cursed") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new celebras_the_cursedAI(creature);
}
@@ -51,21 +51,21 @@ public:
uint32 EntanglingRootsTimer;
uint32 CorruptForcesTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
WrathTimer = 8000;
EntanglingRootsTimer = 2000;
CorruptForcesTimer = 30000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->SummonCreature(13716, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 600000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp
index 3b9ad0bfb79..12016d2223a 100644
--- a/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp
+++ b/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp
@@ -38,7 +38,7 @@ class boss_landslide : public CreatureScript
public:
boss_landslide() : CreatureScript("boss_landslide") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_landslideAI(creature);
}
@@ -51,18 +51,18 @@ public:
uint32 TrampleTimer;
uint32 LandslideTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
KnockAwayTimer = 8000;
TrampleTimer = 2000;
LandslideTimer = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp
index 6b425c4c0fe..8c7197b2942 100644
--- a/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp
+++ b/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp
@@ -37,7 +37,7 @@ class boss_noxxion : public CreatureScript
public:
boss_noxxion() : CreatureScript("boss_noxxion") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_noxxionAI(creature);
}
@@ -52,7 +52,7 @@ public:
uint32 InvisibleTimer;
bool Invisible;
- void Reset() OVERRIDE
+ void Reset() override
{
ToxicVolleyTimer = 7000;
UppercutTimer = 16000;
@@ -61,7 +61,7 @@ public:
Invisible = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
void SummonAdds(Unit* victim)
{
@@ -69,7 +69,7 @@ public:
Add->AI()->AttackStart(victim);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (Invisible && InvisibleTimer <= diff)
{
diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp
index 035ababd3b9..0d48d8f43c6 100644
--- a/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp
+++ b/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp
@@ -40,7 +40,7 @@ class boss_princess_theradras : public CreatureScript
public:
boss_princess_theradras() : CreatureScript("boss_princess_theradras") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_ptheradrasAI(creature);
}
@@ -54,7 +54,7 @@ public:
uint32 ThrashTimer;
uint32 RepulsiveGazeTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
DustfieldTimer = 8000;
BoulderTimer = 2000;
@@ -62,14 +62,14 @@ public:
RepulsiveGazeTimer = 23000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->SummonCreature(12238, 28.067f, 61.875f, -123.405f, 4.67f, TEMPSUMMON_TIMED_DESPAWN, 600000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp b/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp
index e5653df8f64..be71fdebe3e 100644
--- a/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp
+++ b/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp
@@ -30,7 +30,7 @@ class instance_maraudon : public InstanceMapScript
public:
instance_maraudon() : InstanceMapScript("instance_maraudon", 349) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_maraudon_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp
index 29e08699a0f..f04b5634616 100644
--- a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp
+++ b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp
@@ -133,7 +133,7 @@ public:
Reset();
}
- void Reset() OVERRIDE
+ void Reset() override
{
if (!IsCombatMovementAllowed())
SetCombatMovement(true);
@@ -150,7 +150,7 @@ public:
instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
me->SetInCombatWithZone();
@@ -164,14 +164,14 @@ public:
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetBossState(DATA_ONYXIA, DONE);
Summons.DespawnAll();
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->SetInCombatWithZone();
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
@@ -189,17 +189,17 @@ public:
Summons.Summon(summoned);
}
- void SummonedCreatureDespawn(Creature* summon) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summon) override
{
Summons.Despawn(summon);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_KILL);
}
- void SpellHit(Unit* /*pCaster*/, const SpellInfo* Spell) OVERRIDE
+ void SpellHit(Unit* /*pCaster*/, const SpellInfo* Spell) override
{
if (Spell->Id == SPELL_BREATH_EAST_TO_WEST ||
Spell->Id == SPELL_BREATH_WEST_TO_EAST ||
@@ -216,7 +216,7 @@ public:
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == POINT_MOTION_TYPE)
{
@@ -256,7 +256,7 @@ public:
}
}
- void SpellHitTarget(Unit* target, const SpellInfo* Spell) OVERRIDE
+ void SpellHitTarget(Unit* target, const SpellInfo* Spell) override
{
//Workaround - Couldn't find a way to group this spells (All Eruption)
if (((Spell->Id >= 17086 && Spell->Id <= 17095) ||
@@ -301,7 +301,7 @@ public:
MovePoint = iTemp;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -455,7 +455,7 @@ public:
bool IsMoving;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_onyxiaAI>(creature);
}
diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp
index 678a79c51ad..e6a08ade87f 100644
--- a/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp
+++ b/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp
@@ -36,7 +36,7 @@ class instance_onyxias_lair : public InstanceMapScript
public:
instance_onyxias_lair() : InstanceMapScript("instance_onyxias_lair", 249) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_onyxias_lair_InstanceMapScript(map);
}
@@ -48,7 +48,7 @@ public:
//Eruption is a BFS graph problem
//One map to remember all floor, one map to keep floor that still need to erupt and one queue to know what needs to be removed
- void Initialize() OVERRIDE
+ void Initialize() override
{
SetBossNumber(EncounterCount);
@@ -61,7 +61,7 @@ public:
achievSheDeepBreathMore = true;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -71,7 +71,7 @@ public:
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
if ((go->GetGOInfo()->displayId == 4392 || go->GetGOInfo()->displayId == 4472) && go->GetGOInfo()->trap.spellId == 17731)
{
@@ -82,8 +82,7 @@ public:
switch (go->GetEntry())
{
case GO_WHELP_SPAWNER:
- Position goPos;
- go->GetPosition(&goPos);
+ Position goPos = go->GetPosition();
if (Creature* temp = go->SummonCreature(NPC_WHELP, goPos, TEMPSUMMON_CORPSE_DESPAWN))
{
temp->SetInCombatWithZone();
@@ -93,7 +92,7 @@ public:
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
if ((go->GetGOInfo()->displayId == 4392 || go->GetGOInfo()->displayId == 4472) && go->GetGOInfo()->trap.spellId == 17731)
{
@@ -133,7 +132,7 @@ public:
FloorEruptionGUID[1].erase(floorEruptedGUID);
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -148,7 +147,7 @@ public:
return true;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -173,7 +172,7 @@ public:
}
}
- void SetData64(uint32 type, uint64 data) OVERRIDE
+ void SetData64(uint32 type, uint64 data) override
{
switch (type)
{
@@ -185,7 +184,7 @@ public:
}
}
- uint64 GetData64(uint32 data) const OVERRIDE
+ uint64 GetData64(uint32 data) const override
{
switch (data)
{
@@ -196,7 +195,7 @@ public:
return 0;
}
- void Update(uint32 diff) OVERRIDE
+ void Update(uint32 diff) override
{
if (GetBossState(DATA_ONYXIA) == IN_PROGRESS)
{
@@ -237,7 +236,7 @@ public:
}
}
- bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const* /*source*/, Unit const* /*target = NULL*/, uint32 /*miscValue1 = 0*/) OVERRIDE
+ bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const* /*source*/, Unit const* /*target = NULL*/, uint32 /*miscValue1 = 0*/) override
{
switch (criteriaId)
{
@@ -251,7 +250,7 @@ public:
return false;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -262,7 +261,7 @@ public:
return saveStream.str();
}
- void Load(const char* strIn) OVERRIDE
+ void Load(const char* strIn) override
{
if (!strIn)
{
diff --git a/src/server/scripts/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp b/src/server/scripts/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp
index 8d5173ff266..f5f63910b1a 100644
--- a/src/server/scripts/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp
+++ b/src/server/scripts/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp
@@ -30,7 +30,7 @@ class instance_ragefire_chasm : public InstanceMapScript
public:
instance_ragefire_chasm() : InstanceMapScript("instance_ragefire_chasm", 389) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_ragefire_chasm_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp
index bfc8c468af6..e0a30eba2c9 100644
--- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp
@@ -52,7 +52,7 @@ public:
{
boss_amnennar_the_coldbringerAI(Creature* creature) : BossAI(creature, DATA_AMNENNAR_THE_COLD_BRINGER) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
hp60Spectrals = false;
@@ -60,7 +60,7 @@ public:
hp50 = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_AMNENNARSWRATH, 8000);
@@ -69,18 +69,18 @@ public:
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -138,7 +138,7 @@ public:
bool hp50;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_amnennar_the_coldbringerAI(creature);
}
diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp
index 1e0d481249d..b1bce6ff38c 100644
--- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp
@@ -46,30 +46,30 @@ public:
hp15 = false;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
hp50 = false;
hp15 = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
return;
@@ -95,7 +95,7 @@ public:
bool hp15;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_gluttonAI(creature);
}
diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp
index 6026991f253..c2b94b7c7ae 100644
--- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp
@@ -52,13 +52,13 @@ public:
{
boss_mordresh_fire_eyeAI(Creature* creature) : BossAI(creature, DATA_MORDRESH_FIRE_EYE) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
events.ScheduleEvent(EVENT_OOC_1, 10000);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.Reset();
@@ -67,12 +67,12 @@ public:
events.ScheduleEvent(EVENT_FIRE_NOVA, urand(8000, 12000));
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -124,7 +124,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_mordresh_fire_eyeAI(creature);
}
diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_tuten_kash.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_tuten_kash.cpp
index 0c76da22625..8370d856524 100644
--- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_tuten_kash.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_tuten_kash.cpp
@@ -42,7 +42,7 @@ public:
{
boss_tuten_kashAI(Creature* creature) : BossAI(creature, DATA_TUTEN_KASH) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
if (!me->HasAura(SPELL_THRASH))
@@ -51,19 +51,19 @@ public:
DoCast(me, SPELL_VIRULENT_POISON);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_WEB_SPRAY, urand(3000, 5000));
events.ScheduleEvent(EVENT_CURSE_OF_TUTENKASH, urand(9000, 14000));
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -95,7 +95,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_tuten_kashAI(creature);
}
diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp
index a4ab03d6611..f7f4b035614 100644
--- a/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp
@@ -56,7 +56,7 @@ public:
SetBossNumber(EncounterCount);
}
- void Initialize() OVERRIDE
+ void Initialize() override
{
goGongGUID = 0;
gongWave = 0;
@@ -67,7 +67,7 @@ public:
summonCreature = 0;
}
- void OnGameObjectCreate(GameObject* gameObject) OVERRIDE
+ void OnGameObjectCreate(GameObject* gameObject) override
{
switch (gameObject->GetEntry())
{
@@ -87,7 +87,7 @@ public:
}
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -108,7 +108,7 @@ public:
return true;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
if (type == DATA_WAVE)
{
@@ -172,7 +172,7 @@ public:
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -183,7 +183,7 @@ public:
return saveStream.str();
}
- void Load(const char* str) OVERRIDE
+ void Load(const char* str) override
{
if (!str)
{
@@ -225,7 +225,7 @@ public:
uint32 summonCreature;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_razorfen_downs_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
index f1d8e1b67e8..ce9ed4f36c8 100644
--- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
@@ -38,73 +38,6 @@ EndContentData */
#include "CellImpl.h"
/*###
-# npc_henry_stern
-####*/
-
-enum Spells
-{
- SPELL_TEACHING_GOLDTHORN_TEA = 13029,
- SPELL_TEACHING_MIGHTY_TROLLS_BLOOD_POTION = 13030
-};
-
-enum Gossips
-{
- GOSSIP_COOKING_SKILL_HIGH = 1444,
- GOSSIP_COOKING_SKILL_LOW = 1501,
- GOSSIP_ALCHEMY_SKILL_HIGH = 1442,
- GOSSIP_ALCHEMY_SKILL_LOW = 1502
-};
-
-class npc_henry_stern : public CreatureScript
-{
-public:
- npc_henry_stern() : CreatureScript("npc_henry_stern") { }
-
- struct npc_henry_sternAI : public ScriptedAI
- {
- npc_henry_sternAI(Creature* creature) : ScriptedAI(creature) { }
-
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) OVERRIDE
- {
- if (action == 0)
- {
- if (player->GetBaseSkillValue(SKILL_COOKING) >= 175)
- {
- player->PrepareGossipMenu(me, GOSSIP_COOKING_SKILL_HIGH);
- player->SendPreparedGossip(me);
- DoCast(player, SPELL_TEACHING_GOLDTHORN_TEA);
- }
- else
- {
- player->PrepareGossipMenu(me, GOSSIP_COOKING_SKILL_LOW);
- player->SendPreparedGossip(me);
- }
- }
-
- if (action == 1)
- {
- if (player->GetBaseSkillValue(SKILL_ALCHEMY) >= 180)
- {
- player->PrepareGossipMenu(me, GOSSIP_ALCHEMY_SKILL_HIGH);
- player->SendPreparedGossip(me);
- DoCast(player, SPELL_TEACHING_MIGHTY_TROLLS_BLOOD_POTION);
- }
- else
- {
- player->PrepareGossipMenu(me, GOSSIP_ALCHEMY_SKILL_LOW);
- player->SendPreparedGossip(me);
- }
- }
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_henry_sternAI(creature);
- }
-};
-
-/*######
## npc_belnistrasz for Quest 3525 "Extinguishing the Idol"
######*/
@@ -163,7 +96,7 @@ public:
spawnerCount = 0;
}
- void Reset() OVERRIDE
+ void Reset() override
{
if (!eventInProgress)
{
@@ -177,7 +110,7 @@ public:
}
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (channeling)
Talk(SAY_WATCH_OUT, who);
@@ -190,13 +123,13 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetBossState(DATA_EXTINGUISHING_THE_IDOL, DONE);
me->DespawnOrUnsummon(5000);
}
- void sQuestAccept(Player* /*player*/, Quest const* quest) OVERRIDE
+ void sQuestAccept(Player* /*player*/, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_EXTINGUISHING_THE_IDOL)
{
@@ -208,7 +141,7 @@ public:
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == WAYPOINT_MOTION_TYPE && id == POINT_REACH_IDOL)
{
@@ -217,7 +150,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!eventInProgress)
return;
@@ -320,7 +253,7 @@ public:
uint8 spawnerCount;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_belnistraszAI>(creature);
}
@@ -338,17 +271,17 @@ public:
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void SetData(uint32 /*type*/, uint32 data) OVERRIDE
+ void SetData(uint32 /*type*/, uint32 data) override
{
if (data < 7)
{
me->SummonCreature(NPC_WITHERED_BATTLE_BOAR, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
if (data > 0 && me->GetOrientation() < 4.0f)
me->SummonCreature(NPC_WITHERED_BATTLE_BOAR, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
- me->SummonCreature(NPC_DEATHS_HEAD_GEOMANCER, me->GetPositionX() + (cos(me->GetOrientation() - (M_PI/2)) * 2), me->GetPositionY() + (sin(me->GetOrientation() - (M_PI/2)) * 2), me->GetPositionZ(), me->GetOrientation());
- me->SummonCreature(NPC_WITHERED_QUILGUARD, me->GetPositionX() + (cos(me->GetOrientation() + (M_PI/2)) * 2), me->GetPositionY() + (sin(me->GetOrientation() + (M_PI/2)) * 2), me->GetPositionZ(), me->GetOrientation());
+ me->SummonCreature(NPC_DEATHS_HEAD_GEOMANCER, me->GetPositionX() + (std::cos(me->GetOrientation() - (float(M_PI) / 2)) * 2), me->GetPositionY() + (std::sin(me->GetOrientation() - (float(M_PI) / 2)) * 2), me->GetPositionZ(), me->GetOrientation());
+ me->SummonCreature(NPC_WITHERED_QUILGUARD, me->GetPositionX() + (std::cos(me->GetOrientation() + (float(M_PI) / 2)) * 2), me->GetPositionY() + (std::sin(me->GetOrientation() + (float(M_PI) / 2)) * 2), me->GetPositionZ(), me->GetOrientation());
}
else if (data == 7)
me->SummonCreature(NPC_PLAGUEMAW_THE_ROTTING, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
@@ -358,7 +291,7 @@ public:
InstanceScript* instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_idol_room_spawnerAI>(creature);
}
@@ -384,7 +317,7 @@ public:
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
if (!me->HasAura(SPELL_POISON_PROC) && me->GetEntry() == NPC_TOMB_FIEND)
DoCast(me, SPELL_POISON_PROC);
@@ -393,17 +326,17 @@ public:
DoCast(me, SPELL_VIRULENT_POISON_PROC);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_WAVE, me->GetEntry());
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_WEB, urand(5000, 8000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -428,7 +361,7 @@ public:
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_tomb_creatureAI>(creature);
}
@@ -443,7 +376,7 @@ class go_gong : public GameObjectScript
public:
go_gong() : GameObjectScript("go_gong") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
InstanceScript* instance = go->GetInstanceScript();
@@ -460,7 +393,6 @@ public:
void AddSC_razorfen_downs()
{
- new npc_henry_stern();
new npc_belnistrasz();
new npc_idol_room_spawner();
new npc_tomb_creature();
diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp
index 9900ba9e3b3..705b0231e82 100644
--- a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp
@@ -35,7 +35,7 @@ class instance_razorfen_kraul : public InstanceMapScript
public:
instance_razorfen_kraul() : InstanceMapScript("instance_razorfen_kraul", 47) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_razorfen_kraul_InstanceMapScript(map);
}
@@ -47,7 +47,7 @@ public:
uint64 DoorWardGUID;
int WardKeeperDeath;
- void Initialize() OVERRIDE
+ void Initialize() override
{
WardKeeperDeath = 0;
DoorWardGUID = 0;
@@ -69,7 +69,7 @@ public:
return NULL;
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -88,7 +88,7 @@ public:
}
}
- void SetData(uint32 type, uint32 /*data*/) OVERRIDE
+ void SetData(uint32 type, uint32 /*data*/) override
{
switch (type)
{
diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
index 1dc37e063ba..e3021ff7a95 100644
--- a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
@@ -47,28 +47,21 @@ class npc_willix : public CreatureScript
public:
npc_willix() : CreatureScript("npc_willix") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
- {
- if (quest->GetQuestId() == QUEST_WILLIX_THE_IMPORTER)
- {
- CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
- creature->AI()->Talk(SAY_READY, player);
- creature->setFaction(113);
- }
-
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_willixAI(creature);
- }
-
struct npc_willixAI : public npc_escortAI
{
npc_willixAI(Creature* creature) : npc_escortAI(creature) { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void sQuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_WILLIX_THE_IMPORTER)
+ {
+ Start(true, false, player->GetGUID());
+ Talk(SAY_READY, player);
+ me->setFaction(113);
+ }
+ }
+
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -118,25 +111,29 @@ public:
}
}
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO1);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->AI()->AttackStart(me);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Player* player = GetPlayerForEscort())
player->FailQuest(QUEST_WILLIX_THE_IMPORTER);
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_willixAI(creature);
+ }
};
enum SnufflenoseGopher
@@ -147,24 +144,12 @@ enum SnufflenoseGopher
POINT_TUBBER = 0
};
-struct DistanceOrder : public std::binary_function<GameObject, GameObject, bool>
-{
- DistanceOrder(Creature* me) : me(me) { }
-
- bool operator() (GameObject* first, GameObject* second)
- {
- return me->GetDistanceOrder(first, second);
- }
-
- Creature* me;
-};
-
struct npc_snufflenose_gopher : public CreatureScript
{
public:
npc_snufflenose_gopher() : CreatureScript("npc_snufflenose_gopher") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_snufflenose_gopherAI(creature);
}
@@ -177,13 +162,13 @@ public:
TargetTubberGUID = 0;
}
- void Reset() OVERRIDE
+ void Reset() override
{
IsMovementActive = false;
TargetTubberGUID = 0;
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == POINT_MOTION_TYPE && id == POINT_TUBBER)
{
@@ -208,18 +193,14 @@ public:
if (tubbersInRange.empty())
return;
- tubbersInRange.sort(DistanceOrder(me));
- GameObject* nearestTubber = NULL;
-
- for (std::list<GameObject*>::const_iterator itr = tubbersInRange.begin(); itr != tubbersInRange.end(); ++itr)
+ tubbersInRange.remove_if([](GameObject* go)
{
- if (!(*itr)->isSpawned() && (*itr)->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND))
- {
- nearestTubber = *itr;
- break;
- }
- }
+ return go->isSpawned() || !go->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
+ });
+ tubbersInRange.sort(Trinity::ObjectDistanceOrderPred(me));
+
+ GameObject* nearestTubber = tubbersInRange.front();
if (!nearestTubber)
return;
@@ -232,13 +213,13 @@ public:
IsMovementActive = true;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!IsMovementActive)
PetAI::UpdateAI(diff);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_FIND_NEW_TUBBER)
DoFindNewTubber();
@@ -259,25 +240,20 @@ class spell_snufflenose_command : public SpellScriptLoader
{
PrepareSpellScript(spell_snufflenose_commandSpellScript);
- bool Load() OVERRIDE
- {
- return GetCaster()->GetTypeId() == TYPEID_PLAYER;
- }
-
- void HandleAfterCast()
+ void HandleEffect(SpellEffIndex /*effIndex*/)
{
- if (Unit* target = GetCaster()->ToPlayer()->GetSelectedUnit())
+ if (Creature* target = GetHitCreature())
if (target->GetEntry() == NPC_SNUFFLENOSE_GOPHER)
- target->ToCreature()->AI()->DoAction(ACTION_FIND_NEW_TUBBER);
+ target->AI()->DoAction(ACTION_FIND_NEW_TUBBER);
}
- void Register() OVERRIDE
+ void Register() override
{
- AfterCast += SpellCastFn(spell_snufflenose_commandSpellScript::HandleAfterCast);
+ OnEffectHitTarget += SpellEffectFn(spell_snufflenose_commandSpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_snufflenose_commandSpellScript();
}
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp
index a12a400ea8e..162ce9b5359 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp
@@ -82,7 +82,7 @@ class boss_ayamiss : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
_phase = PHASE_AIR;
@@ -90,7 +90,7 @@ class boss_ayamiss : public CreatureScript
SetCombatMovement(false);
}
- void JustSummoned(Creature* who) OVERRIDE
+ void JustSummoned(Creature* who) override
{
switch (who->GetEntry())
{
@@ -107,7 +107,7 @@ class boss_ayamiss : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == POINT_MOTION_TYPE)
{
@@ -123,13 +123,13 @@ class boss_ayamiss : public CreatureScript
}
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
me->ClearUnitState(UNIT_STATE_ROOT);
BossAI::EnterEvadeMode();
}
- void EnterCombat(Unit* attacker) OVERRIDE
+ void EnterCombat(Unit* attacker) override
{
BossAI::EnterCombat(attacker);
@@ -144,7 +144,7 @@ class boss_ayamiss : public CreatureScript
me->GetMotionMaster()->MovePoint(POINT_AIR, AyamissAirPos);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -156,9 +156,11 @@ class boss_ayamiss : public CreatureScript
_phase = PHASE_GROUND;
SetCombatMovement(true);
me->SetCanFly(false);
- Position VictimPos;
- me->GetVictim()->GetPosition(&VictimPos);
- me->GetMotionMaster()->MovePoint(POINT_GROUND, VictimPos);
+ if (me->GetVictim())
+ {
+ Position VictimPos = me->EnsureVictim()->GetPosition();
+ me->GetMotionMaster()->MovePoint(POINT_GROUND, VictimPos);
+ }
DoResetThreat();
events.ScheduleEvent(EVENT_LASH, urand(5000, 8000));
events.ScheduleEvent(EVENT_TRASH, urand(3000, 6000));
@@ -209,8 +211,7 @@ class boss_ayamiss : public CreatureScript
break;
case EVENT_SUMMON_SWARMER:
{
- Position Pos;
- me->GetRandomPoint(SwarmerPos, 80.0f, Pos);
+ Position Pos = me->GetRandomPoint(SwarmerPos, 80.0f);
me->SummonCreature(NPC_SWARMER, Pos);
events.ScheduleEvent(EVENT_SUMMON_SWARMER, 5000);
break;
@@ -232,7 +233,7 @@ class boss_ayamiss : public CreatureScript
bool _enraged;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_ayamissAI>(creature);
}
@@ -250,7 +251,7 @@ class npc_hive_zara_larva : public CreatureScript
_instance = me->GetInstanceScript();
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == POINT_MOTION_TYPE)
if (id == POINT_PARALYZE)
@@ -258,7 +259,7 @@ class npc_hive_zara_larva : public CreatureScript
DoCast(target, SPELL_FEED); // Omnomnom
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (_instance->GetBossState(DATA_AYAMISS) == IN_PROGRESS)
@@ -267,7 +268,7 @@ class npc_hive_zara_larva : public CreatureScript
ScriptedAI::MoveInLineOfSight(who);
}
- void AttackStart(Unit* victim) OVERRIDE
+ void AttackStart(Unit* victim) override
{
if (_instance->GetBossState(DATA_AYAMISS) == IN_PROGRESS)
return;
@@ -275,7 +276,7 @@ class npc_hive_zara_larva : public CreatureScript
ScriptedAI::AttackStart(victim);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_instance->GetBossState(DATA_AYAMISS) == IN_PROGRESS)
return;
@@ -286,7 +287,7 @@ class npc_hive_zara_larva : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_hive_zara_larvaAI>(creature);
}
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
index e62f1781f13..ac490b1440d 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
@@ -71,7 +71,7 @@ class boss_buru : public CreatureScript
{
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
BossAI::EnterEvadeMode();
@@ -82,7 +82,7 @@ class boss_buru : public CreatureScript
Eggs.clear();
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
_EnterCombat();
Talk(EMOTE_TARGET, who);
@@ -95,14 +95,14 @@ class boss_buru : public CreatureScript
_phase = PHASE_EGG;
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_EXPLODE)
if (_phase == PHASE_EGG)
me->DealDamage(me, 45000);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
ChaseNewVictim();
@@ -133,7 +133,7 @@ class boss_buru : public CreatureScript
events.ScheduleEvent(EVENT_RESPAWN_EGG, 100000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -186,7 +186,7 @@ class boss_buru : public CreatureScript
std::list<uint64> Eggs;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_buruAI(creature);
}
@@ -205,14 +205,14 @@ class npc_buru_egg : public CreatureScript
SetCombatMovement(false);
}
- void EnterCombat(Unit* attacker) OVERRIDE
+ void EnterCombat(Unit* attacker) override
{
if (Creature* buru = me->GetMap()->GetCreature(_instance->GetData64(DATA_BURU)))
if (!buru->IsInCombat())
buru->AI()->AttackStart(attacker);
}
- void JustSummoned(Creature* who) OVERRIDE
+ void JustSummoned(Creature* who) override
{
if (who->GetEntry() == NPC_HATCHLING)
if (Creature* buru = me->GetMap()->GetCreature(_instance->GetData64(DATA_BURU)))
@@ -220,7 +220,7 @@ class npc_buru_egg : public CreatureScript
who->AI()->AttackStart(target);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
DoCastAOE(SPELL_EXPLODE, true);
DoCastAOE(SPELL_EXPLODE_2, true); // Unknown purpose
@@ -234,7 +234,7 @@ class npc_buru_egg : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_buru_eggAI>(creature);
}
@@ -261,14 +261,14 @@ class spell_egg_explosion : public SpellScriptLoader
GetCaster()->DealDamage(target, -16 * GetCaster()->GetDistance(target) + 500);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterCast += SpellCastFn(spell_egg_explosion_SpellScript::HandleAfterCast);
OnEffectHitTarget += SpellEffectFn(spell_egg_explosion_SpellScript::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_egg_explosion_SpellScript();
}
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp
index 84003576a2a..f0e582dee95 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp
@@ -55,7 +55,7 @@ class boss_kurinnaxx : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
_enraged = false;
@@ -65,7 +65,7 @@ class boss_kurinnaxx : public CreatureScript
events.ScheduleEvent(EVENT_WIDE_SLASH, 11000);
}
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
if (!_enraged && HealthBelowPct(30))
{
@@ -74,14 +74,14 @@ class boss_kurinnaxx : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
if (Creature* Ossirian = me->GetMap()->GetCreature(instance->GetData64(DATA_OSSIRIAN)))
sCreatureTextMgr->SendChat(Ossirian, SAY_KURINAXX_DEATH, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_ZONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -125,7 +125,7 @@ class boss_kurinnaxx : public CreatureScript
bool _enraged;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_kurinnaxxAI>(creature);
}
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp
index 9dd82bf157e..e123a84f88e 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp
@@ -62,7 +62,7 @@ class boss_moam : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
me->SetPower(POWER_MANA, 0);
@@ -71,7 +71,7 @@ class boss_moam : public CreatureScript
//events.ScheduleEvent(EVENT_WIDE_SLASH, 11000);
}
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
if (!_isStonePhase && HealthBelowPct(45))
{
@@ -80,7 +80,7 @@ class boss_moam : public CreatureScript
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -105,7 +105,7 @@ class boss_moam : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -175,7 +175,7 @@ class boss_moam : public CreatureScript
bool _isStonePhase;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_moamAI(creature);
}
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
index 3852802f43d..256f76337b4 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
@@ -96,7 +96,7 @@ class boss_ossirian : public CreatureScript
uint8 CrystalIterator;
bool SaidIntro;
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
CrystalIterator = 0;
@@ -104,7 +104,7 @@ class boss_ossirian : public CreatureScript
CrystalGUID = 0;
}
- void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* caster, SpellInfo const* spell) override
{
for (uint8 i = 0; i < NUM_WEAKNESS; ++i)
{
@@ -117,7 +117,7 @@ class boss_ossirian : public CreatureScript
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_TRIGGER_WEAKNESS)
if (Creature* Trigger = me->GetMap()->GetCreature(TriggerGUID))
@@ -125,7 +125,7 @@ class boss_ossirian : public CreatureScript
Trigger->CastSpell(Trigger, SpellWeakness[urand(0, 4)], false);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.Reset();
@@ -146,8 +146,7 @@ class boss_ossirian : public CreatureScript
for (uint8 i = 0; i < NUM_TORNADOS; ++i)
{
- Position Point;
- me->GetRandomPoint(RoomCenter, RoomRadius, Point);
+ Position Point = me->GetRandomPoint(RoomCenter, RoomRadius);
if (Creature* Tornado = me->GetMap()->SummonCreature(NPC_SAND_VORTEX, Point))
Tornado->CastSpell(Tornado, SPELL_SAND_STORM, true);
}
@@ -155,19 +154,19 @@ class boss_ossirian : public CreatureScript
SpawnNextCrystal();
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
Cleanup();
summons.DespawnAll();
BossAI::EnterEvadeMode();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Cleanup();
_JustDied();
@@ -199,7 +198,7 @@ class boss_ossirian : public CreatureScript
}
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!SaidIntro)
@@ -210,7 +209,7 @@ class boss_ossirian : public CreatureScript
BossAI::MoveInLineOfSight(who);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -268,7 +267,7 @@ class boss_ossirian : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_ossirianAI>(creature);
}
@@ -279,7 +278,7 @@ class go_ossirian_crystal : public GameObjectScript
public:
go_ossirian_crystal() : GameObjectScript("go_ossirian_crystal") { }
- bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* /*go*/) override
{
InstanceScript* Instance = player->GetInstanceScript();
if (!Instance)
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
index b2aedfb5c99..0bb35f3842a 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
@@ -67,7 +67,7 @@ class boss_rajaxx : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
enraged = false;
@@ -75,18 +75,18 @@ class boss_rajaxx : public CreatureScript
events.ScheduleEvent(EVENT_THUNDERCRASH, 12000);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
//SAY_DEATH
_JustDied();
}
- void EnterCombat(Unit* /*victim*/) OVERRIDE
+ void EnterCombat(Unit* /*victim*/) override
{
_EnterCombat();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -119,7 +119,7 @@ class boss_rajaxx : public CreatureScript
bool enraged;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_rajaxxAI(creature);
}
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp
index 761ca60f714..3da7e5b833f 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp
@@ -39,7 +39,7 @@ class instance_ruins_of_ahnqiraj : public InstanceMapScript
_paralyzedGUID = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -72,13 +72,13 @@ class instance_ruins_of_ahnqiraj : public InstanceMapScript
return true;
}
- void SetData64(uint32 type, uint64 data) OVERRIDE
+ void SetData64(uint32 type, uint64 data) override
{
if (type == DATA_PARALYZED)
_paralyzedGUID = data;
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -101,7 +101,7 @@ class instance_ruins_of_ahnqiraj : public InstanceMapScript
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -154,7 +154,7 @@ class instance_ruins_of_ahnqiraj : public InstanceMapScript
uint64 _paralyzedGUID;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_ruins_of_ahnqiraj_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
index 433193bd703..189cb7854ad 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
@@ -46,7 +46,7 @@ class boss_kri : public CreatureScript
public:
boss_kri() : CreatureScript("boss_kri") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_kriAI>(creature);
}
@@ -67,7 +67,7 @@ public:
bool VemDead;
bool Death;
- void Reset() OVERRIDE
+ void Reset() override
{
Cleave_Timer = urand(4000, 8000);
ToxicVolley_Timer = urand(6000, 12000);
@@ -77,18 +77,18 @@ public:
Death = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (instance->GetData(DATA_BUG_TRIO_DEATH) < 2)// Unlootable if death
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
instance->SetData(DATA_BUG_TRIO_DEATH, 1);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -139,7 +139,7 @@ class boss_vem : public CreatureScript
public:
boss_vem() : CreatureScript("boss_vem") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_vemAI>(creature);
}
@@ -159,7 +159,7 @@ public:
bool Enraged;
- void Reset() OVERRIDE
+ void Reset() override
{
Charge_Timer = urand(15000, 27000);
KnockBack_Timer = urand(8000, 20000);
@@ -168,7 +168,7 @@ public:
Enraged = false;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_VEM_DEATH, 0);
if (instance->GetData(DATA_BUG_TRIO_DEATH) < 2)// Unlootable if death
@@ -176,11 +176,11 @@ public:
instance->SetData(DATA_BUG_TRIO_DEATH, 1);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -228,7 +228,7 @@ class boss_yauj : public CreatureScript
public:
boss_yauj() : CreatureScript("boss_yauj") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_yaujAI>(creature);
}
@@ -248,7 +248,7 @@ public:
bool VemDead;
- void Reset() OVERRIDE
+ void Reset() override
{
Heal_Timer = urand(25000, 40000);
Fear_Timer = urand(12000, 24000);
@@ -257,7 +257,7 @@ public:
VemDead = false;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (instance->GetData(DATA_BUG_TRIO_DEATH) < 2)// Unlootable if death
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
@@ -273,11 +273,11 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -309,7 +309,7 @@ public:
break;
}
- Heal_Timer = 15000+rand()%15000;
+ Heal_Timer = 15000 + rand32() % 15000;
} else Heal_Timer -= diff;
//Checking if Vem is dead. If yes we will enrage.
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
index 988436066b6..2cfd977fe99 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
@@ -151,7 +151,7 @@ class boss_eye_of_cthun : public CreatureScript
public:
boss_eye_of_cthun() : CreatureScript("boss_eye_of_cthun") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<eye_of_cthunAI>(creature);
}
@@ -181,7 +181,7 @@ public:
float DarkGlareAngle;
bool ClockWise;
- void Reset() OVERRIDE
+ void Reset() override
{
//Phase information
PhaseTimer = 50000; //First dark glare in 50 seconds
@@ -212,7 +212,7 @@ public:
pPortal->SetReactState(REACT_PASSIVE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
instance->SetData(DATA_CTHUN_PHASE, PHASE_EYE_GREEN_BEAM);
@@ -226,7 +226,7 @@ public:
Spawned->AI()->AttackStart(target);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Check if we have a target
if (!UpdateVictim())
@@ -334,9 +334,9 @@ public:
{
//Set angle and cast
if (ClockWise)
- me->SetOrientation(DarkGlareAngle + DarkGlareTick * M_PI / 35);
+ me->SetOrientation(DarkGlareAngle + DarkGlareTick * float(M_PI) / 35);
else
- me->SetOrientation(DarkGlareAngle - DarkGlareTick * M_PI / 35);
+ me->SetOrientation(DarkGlareAngle - DarkGlareTick * float(M_PI) / 35);
me->StopMoving();
@@ -394,7 +394,7 @@ public:
}
}
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
switch (instance->GetData(DATA_CTHUN_PHASE))
{
@@ -445,7 +445,7 @@ class boss_cthun : public CreatureScript
public:
boss_cthun() : CreatureScript("boss_cthun") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<cthunAI>(creature);
}
@@ -483,9 +483,9 @@ public:
uint64 StomachEnterTarget;
//Stomach map, bool = true then in stomach
- UNORDERED_MAP<uint64, bool> Stomach_Map;
+ std::unordered_map<uint64, bool> Stomach_Map;
- void Reset() OVERRIDE
+ void Reset() override
{
//One random wisper every 90 - 300 seconds
WisperTimer = 90000;
@@ -517,7 +517,7 @@ public:
instance->SetData(DATA_CTHUN_PHASE, PHASE_NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
}
@@ -536,7 +536,7 @@ public:
if (Stomach_Map.empty())
return NULL;
- UNORDERED_MAP<uint64, bool>::const_iterator i = Stomach_Map.begin();
+ std::unordered_map<uint64, bool>::const_iterator i = Stomach_Map.begin();
std::list<Unit*> temp;
std::list<Unit*>::const_iterator j;
@@ -545,7 +545,7 @@ public:
while (i != Stomach_Map.end())
{
//Check for valid player
- Unit* unit = Unit::GetUnit(*me, i->first);
+ Unit* unit = ObjectAccessor::GetUnit(*me, i->first);
//Only units out of stomach
if (unit && i->second == false)
@@ -561,12 +561,12 @@ public:
//Get random but only if we have more than one unit on threat list
if (temp.size() > 1)
- advance (j, rand() % (temp.size() - 1));
+ advance(j, rand32() % (temp.size() - 1));
return (*j);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Check if we have a target
if (!UpdateVictim())
@@ -640,7 +640,7 @@ public:
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
//Emerging phase
- //AttackStart(Unit::GetUnit(*me, HoldpPlayer));
+ //AttackStart(ObjectAccessor::GetUnit(*me, HoldpPlayer));
DoZoneInCombat();
//Place all units in threat list on outside of stomach
@@ -680,19 +680,19 @@ public:
DoCast(me, SPELL_PURPLE_COLORATION, true);
- UNORDERED_MAP<uint64, bool>::iterator i = Stomach_Map.begin();
+ std::unordered_map<uint64, bool>::iterator i = Stomach_Map.begin();
//Kick all players out of stomach
while (i != Stomach_Map.end())
{
//Check for valid player
- Unit* unit = Unit::GetUnit(*me, i->first);
+ Unit* unit = ObjectAccessor::GetUnit(*me, i->first);
//Only move units in stomach
if (unit && i->second == true)
{
//Teleport each player out
- DoTeleportPlayer(unit, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()+10, float(rand()%6));
+ DoTeleportPlayer(unit, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 10, float(rand32() % 6));
//Cast knockback on them
DoCast(unit, SPELL_EXIT_STOMACH_KNOCKBACK, true);
@@ -712,12 +712,12 @@ public:
if (StomachAcidTimer <= diff)
{
//Apply aura to all players in stomach
- UNORDERED_MAP<uint64, bool>::iterator i = Stomach_Map.begin();
+ std::unordered_map<uint64, bool>::iterator i = Stomach_Map.begin();
while (i != Stomach_Map.end())
{
//Check for valid player
- Unit* unit = Unit::GetUnit(*me, i->first);
+ Unit* unit = ObjectAccessor::GetUnit(*me, i->first);
//Only apply to units in stomach
if (unit && i->second == true)
@@ -729,7 +729,7 @@ public:
if (unit->IsWithinDist3d(&KickPos, 15.0f))
{
//Teleport each player out
- DoTeleportPlayer(unit, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()+10, float(rand()%6));
+ DoTeleportPlayer(unit, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 10, float(rand32() % 6));
//Cast knockback on them
DoCast(unit, SPELL_EXIT_STOMACH_KNOCKBACK, true);
@@ -767,7 +767,7 @@ public:
if (StomachEnterVisTimer <= diff)
{
//Check for valid player
- Unit* unit = Unit::GetUnit(*me, StomachEnterTarget);
+ Unit* unit = ObjectAccessor::GetUnit(*me, StomachEnterTarget);
if (unit)
{
@@ -840,12 +840,12 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_CTHUN_PHASE, PHASE_CTHUN_DONE);
}
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
switch (instance->GetData(DATA_CTHUN_PHASE))
{
@@ -871,7 +871,7 @@ public:
}
}
- void DoAction(int32 param) OVERRIDE
+ void DoAction(int32 param) override
{
switch (param)
{
@@ -889,7 +889,7 @@ class npc_eye_tentacle : public CreatureScript
public:
npc_eye_tentacle() : CreatureScript("npc_eye_tentacle") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new eye_tentacleAI(creature);
}
@@ -915,13 +915,13 @@ public:
uint32 KillSelfTimer;
uint64 Portal;
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
- if (Unit* p = Unit::GetUnit(*me, Portal))
+ if (Unit* p = ObjectAccessor::GetUnit(*me, Portal))
p->Kill(p);
}
- void Reset() OVERRIDE
+ void Reset() override
{
//Mind flay half a second after we spawn
MindflayTimer = 500;
@@ -930,12 +930,12 @@ public:
KillSelfTimer = 35000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Check if we have a target
if (!UpdateVictim())
@@ -968,7 +968,7 @@ class npc_claw_tentacle : public CreatureScript
public:
npc_claw_tentacle() : CreatureScript("npc_claw_tentacle") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new claw_tentacleAI(creature);
}
@@ -996,13 +996,13 @@ public:
uint32 EvadeTimer;
uint64 Portal;
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
- if (Unit* p = Unit::GetUnit(*me, Portal))
+ if (Unit* p = ObjectAccessor::GetUnit(*me, Portal))
p->Kill(p);
}
- void Reset() OVERRIDE
+ void Reset() override
{
//First rupture should happen half a second after we spawn
GroundRuptureTimer = 500;
@@ -1010,12 +1010,12 @@ public:
EvadeTimer = 5000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Check if we have a target
if (!UpdateVictim())
@@ -1026,7 +1026,7 @@ public:
{
if (EvadeTimer <= diff)
{
- if (Unit* p = Unit::GetUnit(*me, Portal))
+ if (Unit* p = ObjectAccessor::GetUnit(*me, Portal))
p->Kill(p);
//Dissapear and reappear at new position
@@ -1083,7 +1083,7 @@ class npc_giant_claw_tentacle : public CreatureScript
public:
npc_giant_claw_tentacle() : CreatureScript("npc_giant_claw_tentacle") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new giant_claw_tentacleAI(creature);
}
@@ -1113,13 +1113,13 @@ public:
uint32 EvadeTimer;
uint64 Portal;
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
- if (Unit* p = Unit::GetUnit(*me, Portal))
+ if (Unit* p = ObjectAccessor::GetUnit(*me, Portal))
p->Kill(p);
}
- void Reset() OVERRIDE
+ void Reset() override
{
//First rupture should happen half a second after we spawn
GroundRuptureTimer = 500;
@@ -1128,12 +1128,12 @@ public:
EvadeTimer = 5000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Check if we have a target
if (!UpdateVictim())
@@ -1144,7 +1144,7 @@ public:
{
if (EvadeTimer <= diff)
{
- if (Unit* p = Unit::GetUnit(*me, Portal))
+ if (Unit* p = ObjectAccessor::GetUnit(*me, Portal))
p->Kill(p);
//Dissapear and reappear at new position
@@ -1208,7 +1208,7 @@ class npc_giant_eye_tentacle : public CreatureScript
public:
npc_giant_eye_tentacle() : CreatureScript("npc_giant_eye_tentacle") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new giant_eye_tentacleAI(creature);
}
@@ -1232,24 +1232,24 @@ public:
uint32 BeamTimer;
uint64 Portal;
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
- if (Unit* p = Unit::GetUnit(*me, Portal))
+ if (Unit* p = ObjectAccessor::GetUnit(*me, Portal))
p->Kill(p);
}
- void Reset() OVERRIDE
+ void Reset() override
{
//Green Beam half a second after we spawn
BeamTimer = 500;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Check if we have a target
if (!UpdateVictim())
@@ -1275,7 +1275,7 @@ class npc_giant_flesh_tentacle : public CreatureScript
public:
npc_giant_flesh_tentacle() : CreatureScript("npc_giant_flesh_tentacle") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new flesh_tentacleAI(creature);
}
@@ -1287,7 +1287,7 @@ public:
SetCombatMovement(false);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (TempSummon* summon = me->ToTempSummon())
if (Unit* summoner = summon->GetSummoner())
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp
index 910b09ec278..5947c9860ec 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp
@@ -46,7 +46,7 @@ class boss_fankriss : public CreatureScript
public:
boss_fankriss() : CreatureScript("boss_fankriss") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_fankrissAI(creature);
}
@@ -65,7 +65,7 @@ public:
Creature* Hatchling;
Creature* Spawn;
- void Reset() OVERRIDE
+ void Reset() override
{
MortalWound_Timer = urand(10000, 15000);
SpawnHatchlings_Timer = urand(6000, 12000);
@@ -77,15 +77,15 @@ public:
if (!victim)
return;
- Rand = 10 + (rand()%10);
- switch (rand()%2)
+ Rand = 10 + (rand32() % 10);
+ switch (rand32() % 2)
{
case 0: RandX = 0.0f - Rand; break;
case 1: RandX = 0.0f + Rand; break;
}
- Rand = 10 + (rand()%10);
- switch (rand()%2)
+ Rand = 10 + (rand32() % 10);
+ switch (rand32() % 2)
{
case 0: RandY = 0.0f - Rand; break;
case 1: RandY = 0.0f + Rand; break;
@@ -96,11 +96,11 @@ public:
Spawn->AI()->AttackStart(victim);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp
index 34dc224214e..5cc1670d8fb 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp
@@ -44,7 +44,7 @@ class boss_huhuran : public CreatureScript
public:
boss_huhuran() : CreatureScript("boss_huhuran") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_huhuranAI(creature);
}
@@ -63,7 +63,7 @@ public:
bool Frenzy;
bool Berserk;
- void Reset() OVERRIDE
+ void Reset() override
{
Frenzy_Timer = urand(25000, 35000);
Wyvern_Timer = urand(18000, 28000);
@@ -76,11 +76,11 @@ public:
Berserk = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp
index 233dc12de4f..26866de9aa8 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp
@@ -41,7 +41,7 @@ class boss_ouro : public CreatureScript
public:
boss_ouro() : CreatureScript("boss_ouro") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_ouroAI(creature);
}
@@ -60,7 +60,7 @@ public:
bool Enrage;
bool Submerged;
- void Reset() OVERRIDE
+ void Reset() override
{
Sweep_Timer = urand(5000, 10000);
SandBlast_Timer = urand(20000, 35000);
@@ -73,12 +73,12 @@ public:
Submerged = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoCastVictim(SPELL_BIRTH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp
index b8042e8e106..e9eb9d58ca8 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp
@@ -46,7 +46,7 @@ class boss_sartura : public CreatureScript
public:
boss_sartura() : CreatureScript("boss_sartura") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_sarturaAI(creature);
}
@@ -67,7 +67,7 @@ public:
bool WhirlWind;
bool AggroReset;
- void Reset() OVERRIDE
+ void Reset() override
{
WhirlWind_Timer = 30000;
WhirlWindRandom_Timer = urand(3000, 7000);
@@ -83,22 +83,22 @@ public:
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -189,7 +189,7 @@ class npc_sartura_royal_guard : public CreatureScript
public:
npc_sartura_royal_guard() : CreatureScript("npc_sartura_royal_guard") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_sartura_royal_guardAI(creature);
}
@@ -208,7 +208,7 @@ public:
bool WhirlWind;
bool AggroReset;
- void Reset() OVERRIDE
+ void Reset() override
{
WhirlWind_Timer = 30000;
WhirlWindRandom_Timer = urand(3000, 7000);
@@ -221,11 +221,11 @@ public:
AggroReset = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp
index 4708a563098..51384cc117d 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp
@@ -57,26 +57,26 @@ class boss_skeram : public CreatureScript
{
boss_skeramAI(Creature* creature) : BossAI(creature, DATA_SKERAM) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_flag = 0;
_hpct = 75.0f;
me->SetVisible(true);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
ScriptedAI::EnterEvadeMode();
if (me->IsSummon())
((TempSummon*)me)->UnSummon();
}
- void JustSummoned(Creature* creature) OVERRIDE
+ void JustSummoned(Creature* creature) override
{
// Shift the boss and images (Get it? *Shift*?)
uint8 rand = 0;
@@ -113,7 +113,7 @@ class boss_skeram : public CreatureScript
creature->SetHealth(creature->GetMaxHealth() * (me->GetHealthPct() / 100.0f));
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (!me->IsSummon())
Talk(SAY_DEATH);
@@ -121,7 +121,7 @@ class boss_skeram : public CreatureScript
me->RemoveCorpse();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.Reset();
@@ -134,7 +134,7 @@ class boss_skeram : public CreatureScript
Talk(SAY_AGGRO);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -189,7 +189,7 @@ class boss_skeram : public CreatureScript
uint8 _flag;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_skeramAI(creature);
}
@@ -222,13 +222,13 @@ class spell_skeram_arcane_explosion : public SpellScriptLoader
targets.remove_if(PlayerOrPetCheck());
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_skeram_arcane_explosion_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_skeram_arcane_explosion_SpellScript();
}
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
index d84279f1e8b..3e02406b93d 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
@@ -103,10 +103,10 @@ struct boss_twinemperorsAI : public ScriptedAI
Creature* GetOtherBoss()
{
- return Unit::GetCreature(*me, instance->GetData64(IAmVeklor() ? DATA_VEKNILASH : DATA_VEKLOR));
+ return ObjectAccessor::GetCreature(*me, instance->GetData64(IAmVeklor() ? DATA_VEKNILASH : DATA_VEKLOR));
}
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
Unit* pOtherBoss = GetOtherBoss();
if (pOtherBoss)
@@ -123,7 +123,7 @@ struct boss_twinemperorsAI : public ScriptedAI
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Creature* pOtherBoss = GetOtherBoss();
if (pOtherBoss)
@@ -131,18 +131,18 @@ struct boss_twinemperorsAI : public ScriptedAI
pOtherBoss->SetHealth(0);
pOtherBoss->setDeathState(JUST_DIED);
pOtherBoss->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
- CAST_AI(boss_twinemperorsAI, pOtherBoss->AI())->DontYellWhenDead = true;
+ ENSURE_AI(boss_twinemperorsAI, pOtherBoss->AI())->DontYellWhenDead = true;
}
if (!DontYellWhenDead) // I hope AI is not threaded
DoPlaySoundToSet(me, IAmVeklor() ? SOUND_VL_DEATH : SOUND_VN_DEATH);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
DoPlaySoundToSet(me, IAmVeklor() ? SOUND_VL_KILL : SOUND_VN_KILL);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
DoZoneInCombat();
Creature* pOtherBoss = GetOtherBoss();
@@ -150,9 +150,9 @@ struct boss_twinemperorsAI : public ScriptedAI
{
/// @todo we should activate the other boss location so he can start attackning even if nobody
// is near I dont know how to do that
- ScriptedAI* otherAI = CAST_AI(ScriptedAI, pOtherBoss->AI());
if (!pOtherBoss->IsInCombat())
{
+ ScriptedAI* otherAI = ENSURE_AI(ScriptedAI, pOtherBoss->AI());
DoPlaySoundToSet(me, IAmVeklor() ? SOUND_VL_AGGRO : SOUND_VN_AGGRO);
otherAI->AttackStart(who);
otherAI->DoZoneInCombat();
@@ -160,7 +160,7 @@ struct boss_twinemperorsAI : public ScriptedAI
}
}
- void SpellHit(Unit* caster, const SpellInfo* entry) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* entry) override
{
if (caster == me)
return;
@@ -224,7 +224,7 @@ struct boss_twinemperorsAI : public ScriptedAI
me->SetPosition(otherPos);
SetAfterTeleport();
- CAST_AI(boss_twinemperorsAI, pOtherBoss->AI())->SetAfterTeleport();
+ ENSURE_AI(boss_twinemperorsAI, pOtherBoss->AI())->SetAfterTeleport();
}
}
@@ -286,7 +286,7 @@ struct boss_twinemperorsAI : public ScriptedAI
}
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!who || me->GetVictim())
@@ -330,7 +330,7 @@ struct boss_twinemperorsAI : public ScriptedAI
}
if (c->IsWithinDistInMap(me, ABUSE_BUG_RANGE))
{
- if (!nearb || (rand()%4) == 0)
+ if (!nearb || (rand32() % 4) == 0)
nearb = c;
}
}
@@ -386,7 +386,7 @@ class boss_veknilash : public CreatureScript
public:
boss_veknilash() : CreatureScript("boss_veknilash") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_veknilashAI>(creature);
}
@@ -405,7 +405,7 @@ public:
Creature* Summoned;
- void Reset() OVERRIDE
+ void Reset() override
{
TwinReset();
UpperCut_Timer = urand(14000, 29000);
@@ -424,7 +424,7 @@ public:
target->SetFullHealth();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -437,7 +437,7 @@ public:
if (UnbalancingStrike_Timer <= diff)
{
DoCastVictim(SPELL_UNBALANCING_STRIKE);
- UnbalancingStrike_Timer = 8000+rand()%12000;
+ UnbalancingStrike_Timer = 8000 + rand32() % 12000;
} else UnbalancingStrike_Timer -= diff;
if (UpperCut_Timer <= diff)
@@ -445,7 +445,7 @@ public:
Unit* randomMelee = SelectTarget(SELECT_TARGET_RANDOM, 0, NOMINAL_MELEE_RANGE, true);
if (randomMelee)
DoCast(randomMelee, SPELL_UPPERCUT);
- UpperCut_Timer = 15000+rand()%15000;
+ UpperCut_Timer = 15000 + rand32() % 15000;
} else UpperCut_Timer -= diff;
HandleBugs(diff);
@@ -472,7 +472,7 @@ class boss_veklor : public CreatureScript
public:
boss_veklor() : CreatureScript("boss_veklor") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_veklorAI>(creature);
}
@@ -492,7 +492,7 @@ public:
Creature* Summoned;
- void Reset() OVERRIDE
+ void Reset() override
{
TwinReset();
ShadowBolt_Timer = 0;
@@ -511,7 +511,7 @@ public:
target->SetFullHealth();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -542,7 +542,7 @@ public:
target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45, true);
if (target)
DoCast(target, SPELL_BLIZZARD);
- Blizzard_Timer = 15000+rand()%15000;
+ Blizzard_Timer = 15000 + rand32() % 15000;
} else Blizzard_Timer -= diff;
if (ArcaneBurst_Timer <= diff)
@@ -572,7 +572,7 @@ public:
//DoMeleeAttackIfReady();
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who)
return;
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp
index 44c70075a94..a9ec3007e5d 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp
@@ -93,14 +93,14 @@ class boss_viscidus : public CreatureScript
{
boss_viscidusAI(Creature* creature) : BossAI(creature, DATA_VISCIDUS) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
_hitcounter = 0;
_phase = PHASE_FROST;
}
- void DamageTaken(Unit* attacker, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* attacker, uint32& /*damage*/) override
{
if (_phase != PHASE_MELEE)
return;
@@ -120,7 +120,7 @@ class boss_viscidus : public CreatureScript
uint8 NumGlobes = me->GetHealthPct() / 5.0f;
for (uint8 i = 0; i < NumGlobes; ++i)
{
- float Angle = i * 2 * M_PI / NumGlobes;
+ float Angle = i * 2 * float(M_PI) / NumGlobes;
float X = ViscidusCoord.GetPositionX() + std::cos(Angle) * RoomRadius;
float Y = ViscidusCoord.GetPositionY() + std::sin(Angle) * RoomRadius;
float Z = -35.0f;
@@ -139,7 +139,7 @@ class boss_viscidus : public CreatureScript
Talk(EMOTE_CRACK);
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if ((spell->GetSchoolMask() & SPELL_SCHOOL_MASK_FROST) && _phase == PHASE_FROST && me->GetHealthPct() > 5.0f)
{
@@ -168,7 +168,7 @@ class boss_viscidus : public CreatureScript
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.Reset();
@@ -182,19 +182,19 @@ class boss_viscidus : public CreatureScript
events.ScheduleEvent(EVENT_POISON_SHOCK, urand(7000, 12000));
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
summons.DespawnAll();
ScriptedAI::EnterEvadeMode();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
DoCast(me, SPELL_VISCIDUS_SUICIDE);
summons.DespawnAll();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -245,7 +245,7 @@ class boss_viscidus : public CreatureScript
Phases _phase;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_viscidusAI(creature);
}
@@ -260,7 +260,7 @@ class npc_glob_of_viscidus : public CreatureScript
{
npc_glob_of_viscidusAI(Creature* creature) : ScriptedAI(creature) { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
InstanceScript* Instance = me->GetInstanceScript();
@@ -272,7 +272,8 @@ class npc_glob_of_viscidus : public CreatureScript
if (Viscidus->IsAlive() && Viscidus->GetHealthPct() < 5.0f)
{
Viscidus->SetVisible(true);
- Viscidus->GetVictim()->Kill(Viscidus);
+ if (Viscidus->GetVictim())
+ Viscidus->EnsureVictim()->Kill(Viscidus);
}
else
{
@@ -282,7 +283,7 @@ class npc_glob_of_viscidus : public CreatureScript
}
}
- void MovementInform(uint32 /*type*/, uint32 id) OVERRIDE
+ void MovementInform(uint32 /*type*/, uint32 id) override
{
if (id == ROOM_CENTER)
{
@@ -293,7 +294,7 @@ class npc_glob_of_viscidus : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_glob_of_viscidusAI>(creature);
}
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp
index b1402f95135..5780da5e759 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp
@@ -32,7 +32,7 @@ class instance_temple_of_ahnqiraj : public InstanceMapScript
public:
instance_temple_of_ahnqiraj() : InstanceMapScript("instance_temple_of_ahnqiraj", 531) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_temple_of_ahnqiraj_InstanceMapScript(map);
}
@@ -56,7 +56,7 @@ class instance_temple_of_ahnqiraj : public InstanceMapScript
uint32 CthunPhase;
- void Initialize() OVERRIDE
+ void Initialize() override
{
IsBossDied[0] = false;
IsBossDied[1] = false;
@@ -74,7 +74,7 @@ class instance_temple_of_ahnqiraj : public InstanceMapScript
CthunPhase = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -99,13 +99,13 @@ class instance_temple_of_ahnqiraj : public InstanceMapScript
}
}
- bool IsEncounterInProgress() const OVERRIDE
+ bool IsEncounterInProgress() const override
{
//not active in AQ40
return false;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -133,7 +133,7 @@ class instance_temple_of_ahnqiraj : public InstanceMapScript
return 0;
}
- uint64 GetData64(uint32 identifier) const OVERRIDE
+ uint64 GetData64(uint32 identifier) const override
{
switch (identifier)
{
@@ -153,7 +153,7 @@ class instance_temple_of_ahnqiraj : public InstanceMapScript
return 0;
} // end GetData64
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp
index 7fc6af08d9d..a0d57481c75 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp
@@ -64,7 +64,7 @@ class npc_anubisath_sentinel : public CreatureScript
public:
npc_anubisath_sentinel() : CreatureScript("npc_anubisath_sentinel") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new aqsentinelAI(creature);
}
@@ -122,7 +122,7 @@ public:
void GiveBuddyMyList(Creature* c)
{
- aqsentinelAI* cai = CAST_AI(aqsentinelAI, (c)->AI());
+ aqsentinelAI* cai = ENSURE_AI(aqsentinelAI, (c)->AI());
for (int i=0; i<3; ++i)
if (NearbyGUID[i] && NearbyGUID[i] != c->GetGUID())
cai->AddBuddyToList(NearbyGUID[i]);
@@ -132,7 +132,7 @@ public:
void SendMyListToBuddies()
{
for (int i=0; i<3; ++i)
- if (Creature* pNearby = Unit::GetCreature(*me, NearbyGUID[i]))
+ if (Creature* pNearby = ObjectAccessor::GetCreature(*me, NearbyGUID[i]))
GiveBuddyMyList(pNearby);
}
@@ -140,7 +140,7 @@ public:
{
for (int i=0; i<3; ++i)
{
- Creature* c = Unit::GetCreature(*me, NearbyGUID[i]);
+ Creature* c = ObjectAccessor::GetCreature(*me, NearbyGUID[i]);
if (c)
{
if (!c->IsInCombat())
@@ -169,7 +169,7 @@ public:
{
for (int t = 0; t < 2; ++t)
{
- for (int i = !t ? (rand()%9) : 0; i < 9; ++i)
+ for (int i = !t ? (rand32()%9) : 0; i < 9; ++i)
{
if (!chosenAbilities[i])
{
@@ -195,13 +195,13 @@ public:
if (!NearbyGUID[bli])
break;
- Creature* pNearby = Unit::GetCreature(*me, NearbyGUID[bli]);
+ Creature* pNearby = ObjectAccessor::GetCreature(*me, NearbyGUID[bli]);
if (!pNearby)
break;
AddSentinelsNear(pNearby);
- CAST_AI(aqsentinelAI, pNearby->AI())->gatherOthersWhenAggro = false;
- CAST_AI(aqsentinelAI, pNearby->AI())->selectAbility(pickAbilityRandom(chosenAbilities));
+ ENSURE_AI(aqsentinelAI, pNearby->AI())->gatherOthersWhenAggro = false;
+ ENSURE_AI(aqsentinelAI, pNearby->AI())->selectAbility(pickAbilityRandom(chosenAbilities));
}
/*if (bli < 3)
DoYell("I dont have enough buddies.", LANG_NEUTRAL, 0);*/
@@ -213,7 +213,7 @@ public:
bool gatherOthersWhenAggro;
- void Reset() OVERRIDE
+ void Reset() override
{
if (!me->isDead())
{
@@ -221,7 +221,7 @@ public:
{
if (!NearbyGUID[i])
continue;
- if (Creature* pNearby = Unit::GetCreature(*me, NearbyGUID[i]))
+ if (Creature* pNearby = ObjectAccessor::GetCreature(*me, NearbyGUID[i]))
{
if (pNearby->isDead())
pNearby->Respawn();
@@ -237,7 +237,7 @@ public:
me->AddAura(id, me);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (gatherOthersWhenAggro)
GetOtherSentinels(who);
@@ -246,17 +246,17 @@ public:
DoZoneInCombat();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
for (int ni=0; ni<3; ++ni)
{
- Creature* sent = Unit::GetCreature(*me, NearbyGUID[ni]);
+ Creature* sent = ObjectAccessor::GetCreature(*me, NearbyGUID[ni]);
if (!sent)
continue;
if (sent->isDead())
continue;
sent->ModifyHealth(int32(sent->CountPctFromMaxHealth(50)));
- CAST_AI(aqsentinelAI, sent->AI())->GainSentinelAbility(ability);
+ ENSURE_AI(aqsentinelAI, sent->AI())->GainSentinelAbility(ability);
}
}
};
diff --git a/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp b/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp
index f903d1b6da8..9b8397ec6cd 100644
--- a/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp
+++ b/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp
@@ -34,7 +34,7 @@ class instance_wailing_caverns : public InstanceMapScript
public:
instance_wailing_caverns() : InstanceMapScript("instance_wailing_caverns", 43) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_wailing_caverns_InstanceMapScript(map);
}
@@ -48,7 +48,7 @@ public:
bool yelled;
uint64 NaralexGUID;
- void Initialize() OVERRIDE
+ void Initialize() override
{
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
@@ -56,13 +56,13 @@ public:
NaralexGUID = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
if (creature->GetEntry() == DATA_NARALEX)
NaralexGUID = creature->GetGUID();
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -80,7 +80,7 @@ public:
if (data == DONE)SaveToDB();
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -98,13 +98,13 @@ public:
return 0;
}
- uint64 GetData64(uint32 data) const OVERRIDE
+ uint64 GetData64(uint32 data) const override
{
if (data == DATA_NARALEX)return NaralexGUID;
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -117,7 +117,7 @@ public:
return saveStream.str();
}
- void Load(const char* in) OVERRIDE
+ void Load(const char* in) override
{
if (!in)
{
diff --git a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp
index 72ced3d3399..bb872421197 100644
--- a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp
+++ b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp
@@ -79,12 +79,12 @@ class npc_disciple_of_naralex : public CreatureScript
public:
npc_disciple_of_naralex() : CreatureScript("npc_disciple_of_naralex") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_disciple_of_naralexAI>(creature);
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
InstanceScript* instance = creature->GetInstanceScript();
@@ -99,14 +99,14 @@ public:
creature->setFaction(250);
creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- CAST_AI(npc_escortAI, (creature->AI()))->Start(false, false, player->GetGUID());
- CAST_AI(npc_escortAI, (creature->AI()))->SetDespawnAtFar(false);
- CAST_AI(npc_escortAI, (creature->AI()))->SetDespawnAtEnd(false);
+ ENSURE_AI(npc_escortAI, (creature->AI()))->Start(false, false, player->GetGUID());
+ ENSURE_AI(npc_escortAI, (creature->AI()))->SetDespawnAtFar(false);
+ ENSURE_AI(npc_escortAI, (creature->AI()))->SetDespawnAtEnd(false);
}
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
InstanceScript* instance = creature->GetInstanceScript();
@@ -150,7 +150,7 @@ public:
uint32 eventProgress;
InstanceScript* instance;
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -179,17 +179,17 @@ public:
}
}
- void Reset() OVERRIDE
+ void Reset() override
{
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
Talk(SAY_ATTACKED, who);
}
- void JustDied(Unit* /*slayer*/) OVERRIDE
+ void JustDied(Unit* /*slayer*/) override
{
instance->SetData(TYPE_NARALEX_EVENT, FAIL);
instance->SetData(TYPE_NARALEX_PART1, FAIL);
@@ -197,12 +197,12 @@ public:
instance->SetData(TYPE_NARALEX_PART3, FAIL);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->AI()->AttackStart(me);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (currentEvent != TYPE_NARALEX_PART3)
npc_escortAI::UpdateAI(diff);
diff --git a/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp b/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp
index 2ddd60ca442..f0035cc921c 100644
--- a/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp
+++ b/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp
@@ -61,7 +61,7 @@ public:
{
boss_zum_rahAI(Creature* creature) : BossAI(creature, DATA_ZUM_RAH) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->setFaction(ZUMRAH_FRIENDLY_FACTION); // areatrigger sets faction to enemy
_ward80 = false;
@@ -69,24 +69,24 @@ public:
_heal30 = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_SANCT_INVADE);
events.ScheduleEvent(EVENT_SHADOW_BOLT, 1000);
events.ScheduleEvent(EVENT_SHADOWBOLT_VOLLEY, 10000);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_ZUM_RAH, DONE);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_KILL);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -147,7 +147,7 @@ public:
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_zum_rahAI>(creature);
}
diff --git a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp
index 8a7b5effa67..8139f45bf46 100644
--- a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp
+++ b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp
@@ -101,7 +101,7 @@ class instance_zulfarrak : public InstanceMapScript
public:
instance_zulfarrak() : InstanceMapScript("instance_zulfarrak", 209) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_zulfarrak_InstanceMapScript(map);
}
@@ -124,7 +124,7 @@ public:
uint32 addGroupSize;
uint32 waypoint;
- void Initialize() OVERRIDE
+ void Initialize() override
{
GahzRillaEncounter = NOT_STARTED;
ZumrahGUID = 0;
@@ -141,7 +141,7 @@ public:
waypoint = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -177,7 +177,7 @@ public:
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -187,7 +187,7 @@ public:
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -197,7 +197,7 @@ public:
return 0;
}
- uint64 GetData64(uint32 data) const OVERRIDE
+ uint64 GetData64(uint32 data) const override
{
switch (data)
{
@@ -219,7 +219,7 @@ public:
return 0;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
diff --git a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp
index 4b95d33a81e..7c02ecdb8f2 100644
--- a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp
+++ b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp
@@ -64,19 +64,19 @@ class npc_sergeant_bly : public CreatureScript
public:
npc_sergeant_bly() : CreatureScript("npc_sergeant_bly") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
{
player->CLOSE_GOSSIP_MENU();
- CAST_AI(npc_sergeant_bly::npc_sergeant_blyAI, creature->AI())->PlayerGUID = player->GetGUID();
+ ENSURE_AI(npc_sergeant_bly::npc_sergeant_blyAI, creature->AI())->PlayerGUID = player->GetGUID();
creature->AI()->DoAction(0);
}
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (InstanceScript* instance = creature->GetInstanceScript())
{
@@ -95,7 +95,7 @@ public:
return false;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_sergeant_blyAI>(creature);
}
@@ -116,7 +116,7 @@ public:
uint32 Revenge_Timer; //this is wrong, spell should never be used unless me->GetVictim() dodge, parry or block attack. Trinity support required.
uint64 PlayerGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
ShieldBash_Timer = 5000;
Revenge_Timer = 8000;
@@ -124,7 +124,7 @@ public:
me->setFaction(FACTION_FRIENDLY);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (postGossipStep>0 && postGossipStep<4)
{
@@ -148,9 +148,9 @@ public:
if (Player* target = ObjectAccessor::GetPlayer(*me, PlayerGUID))
AttackStart(target);
- switchFactionIfAlive(instance, ENTRY_RAVEN);
- switchFactionIfAlive(instance, ENTRY_ORO);
- switchFactionIfAlive(instance, ENTRY_MURTA);
+ switchFactionIfAlive(ENTRY_RAVEN);
+ switchFactionIfAlive(ENTRY_ORO);
+ switchFactionIfAlive(ENTRY_MURTA);
}
postGossipStep++;
}
@@ -179,15 +179,15 @@ public:
DoMeleeAttackIfReady();
}
- void DoAction(int32 /*param*/) OVERRIDE
+ void DoAction(int32 /*param*/) override
{
postGossipStep=1;
Text_Timer = 0;
}
- void switchFactionIfAlive(InstanceScript* instance, uint32 entry)
+ void switchFactionIfAlive(uint32 entry)
{
- if (Creature* crew = instance->instance->GetCreature(instance->GetData64(entry)))
+ if (Creature* crew = ObjectAccessor::GetCreature(*me, instance->GetData64(entry)))
if (crew->IsAlive())
crew->setFaction(FACTION_HOSTILE);
}
@@ -204,7 +204,7 @@ class go_troll_cage : public GameObjectScript
public:
go_troll_cage() : GameObjectScript("go_troll_cage") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
if (InstanceScript* instance = go->GetInstanceScript())
{
@@ -258,7 +258,7 @@ class npc_weegli_blastfuse : public CreatureScript
public:
npc_weegli_blastfuse() : CreatureScript("npc_weegli_blastfuse") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -270,7 +270,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (InstanceScript* instance = creature->GetInstanceScript())
{
@@ -291,7 +291,7 @@ public:
return false;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_weegli_blastfuseAI>(creature);
}
@@ -311,22 +311,22 @@ public:
bool destroyingDoor;
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
/*instance->SetData(0, NOT_STARTED);*/
}
- void AttackStart(Unit* victim) OVERRIDE
+ void AttackStart(Unit* victim) override
{
AttackStartCaster(victim, 10);//keep back & toss bombs/shoot
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
/*instance->SetData(0, DONE);*/
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -351,7 +351,7 @@ public:
}
}
- void MovementInform(uint32 /*type*/, uint32 /*id*/) OVERRIDE
+ void MovementInform(uint32 /*type*/, uint32 /*id*/) override
{
if (instance->GetData(EVENT_PYRAMID) == PYRAMID_CAGES_OPEN)
{
@@ -368,7 +368,7 @@ public:
};
}
- void DoAction(int32 /*param*/) OVERRIDE
+ void DoAction(int32 /*param*/) override
{
DestroyDoor();
}
@@ -405,7 +405,7 @@ class go_shallow_grave : public GameObjectScript
public:
go_shallow_grave() : GameObjectScript("go_shallow_grave") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
// randomly summon a zombie or dead hero the first time a grave is used
if (go->GetUseCount() == 0)
@@ -437,7 +437,7 @@ class at_zumrah : public AreaTriggerScript
public:
at_zumrah() : AreaTriggerScript("at_zumrah") { }
- bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE
+ bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override
{
Creature* pZumrah = player->FindNearestCreature(ZUMRAH_ID, 30.0f);
diff --git a/src/server/scripts/Kalimdor/boss_azuregos.cpp b/src/server/scripts/Kalimdor/boss_azuregos.cpp
index 3eceb2adcf7..db41213e94e 100644
--- a/src/server/scripts/Kalimdor/boss_azuregos.cpp
+++ b/src/server/scripts/Kalimdor/boss_azuregos.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -16,151 +15,206 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Azuregos
-SD%Complete: 90
-SDComment: Teleport not included, spell reflect not effecting dots (Core problem)
-SDCategory: Azshara
-EndScriptData */
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "SpellScript.h"
+#include "SpellAuraEffects.h"
+#include "Player.h"
enum Say
{
- SAY_TELEPORT = 0
+ SAY_TELEPORT = 0
};
enum Spells
{
- SPELL_MARKOFFROST = 23182,
- SPELL_MANASTORM = 21097,
- SPELL_CHILL = 21098,
- SPELL_FROSTBREATH = 21099,
- SPELL_REFLECT = 22067,
- SPELL_CLEAVE = 8255, //Perhaps not right ID
- SPELL_ENRAGE = 23537
+ SPELL_MARK_OF_FROST = 23182,
+ SPELL_AURA_OF_FROST = 23186,
+ SPELL_MARK_OF_FROST_AURA = 23184,
+ SPELL_MANA_STORM = 21097,
+ SPELL_CHILL = 21098,
+ SPELL_FROST_BREATH = 21099,
+ SPELL_REFLECT = 22067,
+ SPELL_CLEAVE = 8255, // Perhaps not right ID
+ SPELL_ENRAGE = 23537
+};
+
+enum Events
+{
+ EVENT_MARK_OF_FROST = 1,
+ EVENT_MANA_STORM,
+ EVENT_CHILL,
+ EVENT_BREATH,
+ EVENT_TELEPORT,
+ EVENT_REFLECT,
+ EVENT_CLEAVE,
+ EVENT_ENRAGE
};
class boss_azuregos : public CreatureScript
{
-public:
- boss_azuregos() : CreatureScript("boss_azuregos") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_azuregosAI(creature);
- }
-
- struct boss_azuregosAI : public ScriptedAI
- {
- boss_azuregosAI(Creature* creature) : ScriptedAI(creature) { }
-
- uint32 MarkOfFrostTimer;
- uint32 ManaStormTimer;
- uint32 ChillTimer;
- uint32 BreathTimer;
- uint32 TeleportTimer;
- uint32 ReflectTimer;
- uint32 CleaveTimer;
- uint32 EnrageTimer;
- bool Enraged;
-
- void Reset() OVERRIDE
+ public:
+ boss_azuregos() : CreatureScript("boss_azuregos") { }
+
+ struct boss_azuregosAI : public WorldBossAI
{
- MarkOfFrostTimer = 35000;
- ManaStormTimer = urand(5000, 17000);
- ChillTimer = urand(10000, 30000);
- BreathTimer = urand(2000, 8000);
- TeleportTimer = 30000;
- ReflectTimer = urand(15000, 30000);
- CleaveTimer = 7000;
- EnrageTimer = 0;
- Enraged = false;
- }
+ boss_azuregosAI(Creature* creature) : WorldBossAI(creature) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void Reset() override
+ {
+ _Reset();
+ }
- void UpdateAI(uint32 diff) OVERRIDE
- {
- //Return since we have no target
- if (!UpdateVictim())
- return;
+ void EnterCombat(Unit* /*who*/) override
+ {
+ DoCast(me, SPELL_MARK_OF_FROST_AURA, true);
+ _enraged = false;
+
+ events.ScheduleEvent(EVENT_MARK_OF_FROST, 35000);
+ events.ScheduleEvent(EVENT_MANA_STORM, urand(5000, 17000));
+ events.ScheduleEvent(EVENT_CHILL, urand(10000, 30000));
+ events.ScheduleEvent(EVENT_BREATH, urand(2000, 8000));
+ events.ScheduleEvent(EVENT_TELEPORT, 30000);
+ events.ScheduleEvent(EVENT_REFLECT, urand(15000, 30000));
+ events.ScheduleEvent(EVENT_CLEAVE, 7000);
+ }
- if (TeleportTimer <= diff)
+ void KilledUnit(Unit* who) override
{
- Talk(SAY_TELEPORT);
- ThreatContainer::StorageType threatlist = me->getThreatManager().getThreatList();
- ThreatContainer::StorageType::const_iterator i = threatlist.begin();
- for (i = threatlist.begin(); i != threatlist.end(); ++i)
+ if (who->GetTypeId() == TYPEID_PLAYER)
+ who->CastSpell(who, SPELL_MARK_OF_FROST, true);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
- if (unit && (unit->GetTypeId() == TYPEID_PLAYER))
+ switch (eventId)
{
- DoTeleportPlayer(unit, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()+3, unit->GetOrientation());
+ case EVENT_MANA_STORM:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 60.0f, true))
+ DoCast(target, SPELL_MANA_STORM);
+ events.ScheduleEvent(EVENT_MANA_STORM, urand(7500, 12500));
+ break;
+ case EVENT_CHILL:
+ DoCastVictim(SPELL_CHILL);
+ events.ScheduleEvent(EVENT_CHILL, urand(13000, 25000));
+ break;
+ case EVENT_BREATH:
+ DoCastVictim(SPELL_FROST_BREATH);
+ events.ScheduleEvent(EVENT_BREATH, urand(10000, 15000));
+ break;
+ case EVENT_TELEPORT:
+ {
+ Talk(SAY_TELEPORT);
+ ThreatContainer::StorageType const& threatlist = me->getThreatManager().getThreatList();
+ for (ThreatContainer::StorageType::const_iterator i = threatlist.begin(); i != threatlist.end(); ++i)
+ {
+ if (Player* player = ObjectAccessor::GetPlayer(*me, (*i)->getUnitGuid()))
+ DoTeleportPlayer(player, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()+3, player->GetOrientation());
+ }
+
+ DoResetThreat();
+ events.ScheduleEvent(EVENT_TELEPORT, 30000);
+ break;
+ }
+ case EVENT_REFLECT:
+ DoCast(me, SPELL_REFLECT);
+ events.ScheduleEvent(EVENT_REFLECT, urand(20000, 35000));
+ break;
+ case EVENT_CLEAVE:
+ DoCastVictim(SPELL_CLEAVE);
+ events.ScheduleEvent(EVENT_CLEAVE, 7000);
+ break;
+ default:
+ break;
}
}
- DoResetThreat();
- TeleportTimer = 30000;
- } else TeleportTimer -= diff;
+ if (HealthBelowPct(26) && !_enraged)
+ {
+ DoCast(me, SPELL_ENRAGE);
+ _enraged = true;
+ }
- // //MarkOfFrostTimer
- // if (MarkOfFrostTimer <= diff)
- // {
- // DoCastVictim(SPELL_MARKOFFROST);
- // MarkOfFrostTimer = 25000;
- // } else MarkOfFrostTimer -= diff;
+ DoMeleeAttackIfReady();
+ }
- //ChillTimer
- if (ChillTimer <= diff)
- {
- DoCastVictim(SPELL_CHILL);
- ChillTimer = urand(13000, 25000);
- } else ChillTimer -= diff;
+ private:
+ bool _enraged;
+ };
- //BreathTimer
- if (BreathTimer <= diff)
- {
- DoCastVictim(SPELL_FROSTBREATH);
- BreathTimer = urand(10000, 15000);
- } else BreathTimer -= diff;
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new boss_azuregosAI(creature);
+ }
+};
- //ManaStormTimer
- if (ManaStormTimer <= diff)
+class MarkOfFrostTargetSelector
+{
+ public:
+ MarkOfFrostTargetSelector() { }
+
+ bool operator()(WorldObject* object) const
+ {
+ if (Unit* unit = object->ToUnit())
+ return !(unit->HasAura(SPELL_MARK_OF_FROST) && !unit->HasAura(SPELL_AURA_OF_FROST));
+ return true;
+ }
+};
+
+class spell_mark_of_frost : public SpellScriptLoader
+{
+ public:
+ spell_mark_of_frost() : SpellScriptLoader("spell_mark_of_frost") { }
+
+ class spell_mark_of_frost_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mark_of_frost_SpellScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_MANASTORM);
- ManaStormTimer = urand(7500, 12500);
- } else ManaStormTimer -= diff;
+ if (!sSpellMgr->GetSpellInfo(SPELL_MARK_OF_FROST))
+ return false;
+ if (!sSpellMgr->GetSpellInfo(SPELL_AURA_OF_FROST))
+ return false;
+ return true;
+ }
- //ReflectTimer
- if (ReflectTimer <= diff)
+ void FilterTargets(std::list<WorldObject*>& targets)
{
- DoCast(me, SPELL_REFLECT);
- ReflectTimer = urand(20000, 35000);
- } else ReflectTimer -= diff;
+ targets.remove_if(MarkOfFrostTargetSelector());
+ }
- //CleaveTimer
- if (CleaveTimer <= diff)
+ void HandleEffect(SpellEffIndex effIndex)
{
- DoCastVictim(SPELL_CLEAVE);
- CleaveTimer = 7000;
- } else CleaveTimer -= diff;
+ PreventHitDefaultEffect(effIndex);
+ GetHitUnit()->CastSpell(GetHitUnit(), SPELL_AURA_OF_FROST, true);
+ }
- //EnrageTimer
- if (HealthBelowPct(26) && !Enraged)
+ void Register() override
{
- DoCast(me, SPELL_ENRAGE);
- Enraged = true;
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mark_of_frost_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
+ OnEffectHitTarget += SpellEffectFn(spell_mark_of_frost_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
}
+ };
- DoMeleeAttackIfReady();
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mark_of_frost_SpellScript();
}
- };
};
void AddSC_boss_azuregos()
{
new boss_azuregos();
+ new spell_mark_of_frost();
}
diff --git a/src/server/scripts/Kalimdor/zone_ashenvale.cpp b/src/server/scripts/Kalimdor/zone_ashenvale.cpp
index ec28ee42625..2b8dbdaab6c 100644
--- a/src/server/scripts/Kalimdor/zone_ashenvale.cpp
+++ b/src/server/scripts/Kalimdor/zone_ashenvale.cpp
@@ -63,16 +63,16 @@ public:
{
npc_torekAI(Creature* creature) : npc_escortAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
rend_Timer = 5000;
thunderclap_Timer = 8000;
_completed = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->AI()->AttackStart(me);
}
@@ -88,7 +88,7 @@ public:
}
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (Player* player = GetPlayerForEscort())
{
@@ -118,7 +118,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
@@ -145,7 +145,7 @@ public:
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_torekAI(creature);
}
@@ -183,15 +183,15 @@ public:
{
npc_ruul_snowhoofAI(Creature* creature) : npc_escortAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
if (GameObject* Cage = me->FindNearestGameObject(GO_CAGE, 20))
Cage->SetGoState(GO_STATE_READY);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->AI()->AttackStart(me);
}
@@ -205,7 +205,7 @@ public:
}
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -234,13 +234,13 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ruul_snowhoofAI(creature);
}
@@ -300,14 +300,14 @@ public:
{
npc_muglashAI(Creature* creature) : npc_escortAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
eventTimer = 10000;
waveId = 0;
_isBrazierExtinguished = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (Player* player = GetPlayerForEscort())
if (HasEscortState(STATE_ESCORT_PAUSED))
@@ -318,14 +318,14 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (HasEscortState(STATE_ESCORT_ESCORTING))
if (Player* player = GetPlayerForEscort())
player->FailQuest(QUEST_VORSHA);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->AI()->AttackStart(me);
}
@@ -340,7 +340,7 @@ public:
}
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (Player* player = GetPlayerForEscort())
{
@@ -396,7 +396,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
@@ -426,7 +426,7 @@ public:
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_muglashAI(creature);
}
@@ -437,7 +437,7 @@ class go_naga_brazier : public GameObjectScript
public:
go_naga_brazier() : GameObjectScript("go_naga_brazier") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
if (Creature* creature = GetClosestCreatureWithEntry(go, NPC_MUGLASH, INTERACTION_DISTANCE*2))
{
diff --git a/src/server/scripts/Kalimdor/zone_azshara.cpp b/src/server/scripts/Kalimdor/zone_azshara.cpp
index edc13c8d446..e62e17593ba 100644
--- a/src/server/scripts/Kalimdor/zone_azshara.cpp
+++ b/src/server/scripts/Kalimdor/zone_azshara.cpp
@@ -63,15 +63,15 @@ public:
uint32 morphtimer;
bool spellhit;
- void Reset() OVERRIDE
+ void Reset() override
{
morphtimer = 0;
spellhit = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void SpellHit(Unit* unit, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* unit, const SpellInfo* spell) override
{
if (spellhit)
return;
@@ -94,7 +94,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// we mustn't remove the Creature in the same round in which we cast the summon spell, otherwise there will be no summons
if (spellhit && morphtimer >= 5000)
@@ -120,7 +120,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_spitelashesAI(creature);
}
@@ -143,7 +143,7 @@ class npc_loramus_thalipedes : public CreatureScript
public:
npc_loramus_thalipedes() : CreatureScript("npc_loramus_thalipedes") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -181,7 +181,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -294,7 +294,7 @@ public:
{
npc_rizzle_sprysprocketAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
SpellEscapeTimer = 1300;
TeleportTimer = 3500;
@@ -311,9 +311,9 @@ public:
Reached = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who || PlayerGUID)
return;
@@ -329,7 +329,7 @@ public:
}
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE
+ void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
{
player->CLOSE_GOSSIP_MENU();
me->CastSpell(player, SPELL_GIVE_SOUTHFURY_MOONSTONE, true);
@@ -337,7 +337,7 @@ public:
MustDie = true;
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -352,7 +352,7 @@ public:
ContinueWP = true;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (MustDie)
{
@@ -450,7 +450,7 @@ public:
bool Reached;
};
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(QUEST_CHASING_THE_MOONSTONE) != QUEST_STATUS_INCOMPLETE)
return true;
@@ -459,7 +459,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_rizzle_sprysprocketAI(creature);
}
@@ -480,7 +480,7 @@ public:
bool WeMustDie;
uint32 WeMustDieTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetHover(true);
me->SetSwim(true);
@@ -489,11 +489,11 @@ public:
WeMustDieTimer = 1000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
+ void AttackStart(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!who)
return;
@@ -506,7 +506,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (WeMustDie)
{
@@ -519,7 +519,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_depth_chargeAI(creature);
}
diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
index 38bc321d2af..6f02752d2fb 100644
--- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
@@ -71,7 +71,7 @@ public:
bool CanSayHelp;
- void Reset() OVERRIDE
+ void Reset() override
{
pCaster = 0;
@@ -89,9 +89,9 @@ public:
me->SetStandState(UNIT_STAND_STATE_SLEEP);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (CanSayHelp && who->GetTypeId() == TYPEID_PLAYER && me->IsFriendlyTo(who) && me->IsWithinDistInMap(who, 25.0f))
{
@@ -103,7 +103,7 @@ public:
}
}
- void SpellHit(Unit* Caster, const SpellInfo* Spell) OVERRIDE
+ void SpellHit(Unit* Caster, const SpellInfo* Spell) override
{
if (Spell->SpellFamilyFlags[2] & 0x080000000)
{
@@ -118,7 +118,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (SayThanksTimer)
{
@@ -161,7 +161,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_draenei_survivorAI(creature);
}
@@ -200,7 +200,7 @@ public:
IsTreeEvent = true;
}
- void Reset() OVERRIDE
+ void Reset() override
{
DynamiteTimer = 8000;
EmoteTimer = urand(120000, 150000);
@@ -211,19 +211,19 @@ public:
IsTreeEvent = false;
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
Talk(ATTACK_YELL, who);
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE
+ void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
{
player->CLOSE_GOSSIP_MENU();
me->setFaction(FACTION_HOSTILE);
me->Attack(player, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!me->IsInCombat() && !IsTreeEvent)
{
@@ -257,7 +257,7 @@ public:
bool IsTreeEvent;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_engineer_spark_overgrindAI(creature);
}
@@ -276,7 +276,7 @@ public:
{
npc_injured_draeneiAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
me->SetHealth(me->CountPctFromMaxHealth(15));
@@ -292,14 +292,14 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_injured_draeneiAI(creature);
}
@@ -330,9 +330,9 @@ public:
{
npc_magwinAI(Creature* creature) : npc_escortAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
Talk(SAY_AGGRO, who);
}
@@ -346,7 +346,7 @@ public:
}
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (Player* player = GetPlayerForEscort())
{
@@ -371,7 +371,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_magwinAI(creature);
}
@@ -419,14 +419,14 @@ public:
bool EventStarted;
- void Reset() OVERRIDE
+ void Reset() override
{
SparkGUID = 0;
Step = 0;
StartEvent();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
void StartEvent()
{
@@ -443,7 +443,7 @@ public:
uint32 NextStep(uint8 Step)
{
- Creature* Spark = Unit::GetCreature(*me, SparkGUID);
+ Creature* Spark = ObjectAccessor::GetCreature(*me, SparkGUID);
if (!Spark)
return 99999999;
@@ -526,7 +526,7 @@ public:
TC_LOG_ERROR("scripts", "SD2 ERROR: FlagList is empty!");
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (SayTimer <= diff)
{
@@ -538,7 +538,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_geezleAI(creature);
}
@@ -559,7 +559,7 @@ class go_ravager_cage : public GameObjectScript
public:
go_ravager_cage() : GameObjectScript("go_ravager_cage") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->UseDoorOrButton();
if (player->GetQuestStatus(QUEST_STRENGTH_ONE) == QUEST_STATUS_INCOMPLETE)
@@ -587,7 +587,7 @@ public:
uint32 RendTimer;
uint32 EnragingBiteTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
RendTimer = 30000;
EnragingBiteTimer = 20000;
@@ -596,7 +596,7 @@ public:
me->SetReactState(REACT_PASSIVE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -619,7 +619,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_death_ravagerAI(creature);
}
@@ -650,7 +650,7 @@ class npc_stillpine_capitive : public CreatureScript
{
npc_stillpine_capitiveAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
if (GameObject* cage = me->FindNearestGameObject(GO_BRISTELIMB_CAGE, 5.0f))
{
@@ -669,12 +669,11 @@ class npc_stillpine_capitive : public CreatureScript
Talk(CAPITIVE_SAY, owner);
_player = owner;
}
- Position pos;
- me->GetNearPosition(pos, 3.0f, 0.0f);
+ Position pos = me->GetNearPosition(3.0f, 0.0f);
me->GetMotionMaster()->MovePoint(POINT_INIT, pos);
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE || id != POINT_INIT)
return;
@@ -686,7 +685,7 @@ class npc_stillpine_capitive : public CreatureScript
_events.ScheduleEvent(EVENT_DESPAWN, 3500);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!_movementComplete)
return;
@@ -703,7 +702,7 @@ class npc_stillpine_capitive : public CreatureScript
bool _movementComplete;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_stillpine_capitiveAI(creature);
}
@@ -714,7 +713,7 @@ class go_bristlelimb_cage : public GameObjectScript
public:
go_bristlelimb_cage() : GameObjectScript("go_bristlelimb_cage") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->SetGoState(GO_STATE_READY);
if (player->GetQuestStatus(QUEST_THE_PROPHECY_OF_AKIDA) == QUEST_STATUS_INCOMPLETE)
@@ -722,7 +721,7 @@ class go_bristlelimb_cage : public GameObjectScript
if (Creature* capitive = go->FindNearestCreature(NPC_STILLPINE_CAPITIVE, 5.0f, true))
{
go->ResetDoorOrButton();
- CAST_AI(npc_stillpine_capitive::npc_stillpine_capitiveAI, capitive->AI())->StartMoving(player);
+ ENSURE_AI(npc_stillpine_capitive::npc_stillpine_capitiveAI, capitive->AI())->StartMoving(player);
return false;
}
}
diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
index c935a83b3ee..81a175b57b7 100644
--- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
@@ -19,14 +19,12 @@
/* ScriptData
SDName: Bloodmyst_Isle
SD%Complete: 80
-SDComment: Quest support: 9670, 9667
+SDComment: Quest support: 9670
SDCategory: Bloodmyst Isle
EndScriptData */
/* ContentData
npc_webbed_creature
-npc_princess_stillpine
-go_princess_stillpines_cage
EndContentData */
#include "ScriptMgr.h"
@@ -54,11 +52,11 @@ public:
{
npc_webbed_creatureAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
uint32 spawnCreatureID = 0;
@@ -79,70 +77,13 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_webbed_creatureAI(creature);
}
};
-/*######
-## Quest 9667: Saving Princess Stillpine
-######*/
-
-enum Stillpine
-{
- QUEST_SAVING_PRINCESS_STILLPINE = 9667,
- NPC_PRINCESS_STILLPINE = 17682,
- GO_PRINCESS_STILLPINES_CAGE = 181928,
- SPELL_OPENING_PRINCESS_STILLPINE_CREDIT = 31003,
- SAY_DIRECTION = 0
-};
-
-class go_princess_stillpines_cage : public GameObjectScript
-{
-public:
- go_princess_stillpines_cage() : GameObjectScript("go_princess_stillpines_cage") { }
-
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
- {
- go->SetGoState(GO_STATE_READY);
- if (Creature* stillpine = go->FindNearestCreature(NPC_PRINCESS_STILLPINE, 25, true))
- {
- stillpine->GetMotionMaster()->MovePoint(1, go->GetPositionX(), go->GetPositionY()-15, go->GetPositionZ());
- player->KilledMonsterCredit(NPC_PRINCESS_STILLPINE, stillpine->GetGUID());
- }
- return true;
- }
-};
-
-class npc_princess_stillpine : public CreatureScript
-{
-public:
- npc_princess_stillpine() : CreatureScript("npc_princess_stillpine") { }
-
- struct npc_princess_stillpineAI : public ScriptedAI
- {
- npc_princess_stillpineAI(Creature* creature) : ScriptedAI(creature) { }
-
- void MovementInform(uint32 type, uint32 id) OVERRIDE
- {
- if (type == POINT_MOTION_TYPE && id == 1)
- {
- Talk(SAY_DIRECTION);
- me->DespawnOrUnsummon();
- }
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_princess_stillpineAI(creature);
- }
-};
-
void AddSC_bloodmyst_isle()
{
new npc_webbed_creature();
- new npc_princess_stillpine();
- new go_princess_stillpines_cage();
}
diff --git a/src/server/scripts/Kalimdor/zone_darkshore.cpp b/src/server/scripts/Kalimdor/zone_darkshore.cpp
index c19de7b8ab3..43a533ada01 100644
--- a/src/server/scripts/Kalimdor/zone_darkshore.cpp
+++ b/src/server/scripts/Kalimdor/zone_darkshore.cpp
@@ -69,12 +69,12 @@ public:
uint32 FallAsleepTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
FallAsleepTimer = urand(10000, 45000);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
FollowerAI::MoveInLineOfSight(who);
@@ -96,7 +96,7 @@ public:
}
}
- void SpellHit(Unit* /*pCaster*/, const SpellInfo* pSpell) OVERRIDE
+ void SpellHit(Unit* /*pCaster*/, const SpellInfo* pSpell) override
{
if (HasFollowState(STATE_FOLLOW_INPROGRESS | STATE_FOLLOW_PAUSED) && pSpell->Id == SPELL_AWAKEN)
ClearSleeping();
@@ -124,7 +124,7 @@ public:
SetFollowPaused(false);
}
- void UpdateFollowerAI(uint32 diff) OVERRIDE
+ void UpdateFollowerAI(uint32 diff) override
{
if (!UpdateVictim())
{
@@ -149,7 +149,7 @@ public:
}
};
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
{
if (quest->GetQuestId() == QUEST_SLEEPER_AWAKENED)
{
@@ -164,7 +164,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_kerlonianAI(creature);
}
@@ -206,21 +206,21 @@ public:
{
npc_prospector_remtravelAI(Creature* creature) : npc_escortAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (urand(0, 1))
Talk(SAY_REM_AGGRO, who);
}
- void JustSummoned(Creature* /*pSummoned*/) OVERRIDE
+ void JustSummoned(Creature* /*pSummoned*/) override
{
//unsure if it should be any
//pSummoned->AI()->AttackStart(me);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (Player* player = GetPlayerForEscort())
{
@@ -282,7 +282,7 @@ public:
}
};
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
{
if (quest->GetQuestId() == QUEST_ABSENT_MINDED_PT2)
{
@@ -295,7 +295,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_prospector_remtravelAI(creature);
}
@@ -325,9 +325,9 @@ public:
{
npc_threshwackonatorAI(Creature* creature) : FollowerAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
FollowerAI::MoveInLineOfSight(who);
@@ -349,11 +349,11 @@ public:
if (Player* pHolder = GetLeaderForFollower())
AttackStart(pHolder);
- SetFollowComplete();
+ SetFollowComplete(true);
}
};
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -370,7 +370,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(QUEST_GYROMAST_REV) == QUEST_STATUS_INCOMPLETE)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_INSERT_KEY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
@@ -379,7 +379,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_threshwackonatorAI(creature);
}
diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp
index 58322963c6e..0a56253cabd 100644
--- a/src/server/scripts/Kalimdor/zone_desolace.cpp
+++ b/src/server/scripts/Kalimdor/zone_desolace.cpp
@@ -65,7 +65,7 @@ public:
{
npc_aged_dying_ancient_kodoAI(Creature* creature) : ScriptedAI(creature) { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (who->GetEntry() == NPC_SMEED && me->IsWithinDistInMap(who, 10.0f) && !me->HasAura(SPELL_KODO_KOMBO_GOSSIP))
@@ -77,7 +77,7 @@ public:
}
}
- void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* caster, SpellInfo const* spell) override
{
if (spell->Id == SPELL_KODO_KOMBO_ITEM)
{
@@ -99,7 +99,7 @@ public:
}
};
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->HasAura(SPELL_KODO_KOMBO_PLAYER_BUFF) && creature->HasAura(SPELL_KODO_KOMBO_DESPAWN_BUFF))
{
@@ -111,7 +111,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_aged_dying_ancient_kodoAI(creature);
}
@@ -134,7 +134,7 @@ class go_iruxos : public GameObjectScript
public:
go_iruxos() : GameObjectScript("go_iruxos") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (player->GetQuestStatus(QUEST_HAND_IRUXOS) == QUEST_STATUS_INCOMPLETE && !go->FindNearestCreature(NPC_DEMON_SPIRIT, 25.0f, true))
player->SummonCreature(NPC_DEMON_SPIRIT, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);
@@ -161,18 +161,18 @@ public:
{
npc_dalindaAI(Creature* creature) : npc_escortAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Player* player = GetPlayerForEscort())
player->FailQuest(QUEST_RETURN_TO_VAHLARRIEL);
return;
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
@@ -188,7 +188,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
@@ -199,7 +199,7 @@ public:
}
};
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_RETURN_TO_VAHLARRIEL)
{
@@ -212,7 +212,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_dalindaAI(creature);
}
@@ -233,7 +233,7 @@ class go_demon_portal : public GameObjectScript
public:
go_demon_portal() : GameObjectScript("go_demon_portal") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (player->GetQuestStatus(QUEST_PORTAL_OF_THE_LEGION) == QUEST_STATUS_INCOMPLETE && !go->FindNearestCreature(NPC_DEMON_GUARDIAN, 5.0f, true))
{
diff --git a/src/server/scripts/Kalimdor/zone_durotar.cpp b/src/server/scripts/Kalimdor/zone_durotar.cpp
index 08f4f2ebfdf..a1df70522a8 100644
--- a/src/server/scripts/Kalimdor/zone_durotar.cpp
+++ b/src/server/scripts/Kalimdor/zone_durotar.cpp
@@ -44,7 +44,7 @@ class npc_lazy_peon : public CreatureScript
public:
npc_lazy_peon() : CreatureScript("npc_lazy_peon") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_lazy_peonAI(creature);
}
@@ -58,20 +58,20 @@ public:
uint32 RebuffTimer;
bool work;
- void Reset() OVERRIDE
+ void Reset() override
{
PlayerGUID = 0;
RebuffTimer = 0;
work = false;
}
- void MovementInform(uint32 /*type*/, uint32 id) OVERRIDE
+ void MovementInform(uint32 /*type*/, uint32 id) override
{
if (id == 1)
work = true;
}
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (spell->Id != SPELL_AWAKEN_PEON)
return;
@@ -87,7 +87,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (work == true)
me->HandleEmoteCommand(EMOTE_ONESHOT_WORK_CHOPWOOD);
@@ -186,7 +186,7 @@ class npc_tiger_matriarch_credit : public CreatureScript
events.ScheduleEvent(EVENT_CHECK_SUMMON_AURA, 2000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -221,7 +221,7 @@ class npc_tiger_matriarch_credit : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_tiger_matriarch_creditAI(creature);
}
@@ -239,14 +239,14 @@ class npc_tiger_matriarch : public CreatureScript
{
}
- void EnterCombat(Unit* /*target*/) OVERRIDE
+ void EnterCombat(Unit* /*target*/) override
{
_events.Reset();
_events.ScheduleEvent(EVENT_POUNCE, 100);
_events.ScheduleEvent(EVENT_NOSUMMON, 50000);
}
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
if (summoner->GetTypeId() != TYPEID_PLAYER || !summoner->GetVehicle())
return;
@@ -259,7 +259,7 @@ class npc_tiger_matriarch : public CreatureScript
}
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_UNIT || !victim->IsSummon())
return;
@@ -274,7 +274,7 @@ class npc_tiger_matriarch : public CreatureScript
me->DespawnOrUnsummon();
}
- void DamageTaken(Unit* attacker, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* attacker, uint32& damage) override
{
if (!attacker->IsSummon())
return;
@@ -298,7 +298,7 @@ class npc_tiger_matriarch : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -338,7 +338,7 @@ class npc_tiger_matriarch : public CreatureScript
uint64 _tigerGuid;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_tiger_matriarchAI(creature);
}
@@ -362,7 +362,7 @@ class npc_troll_volunteer : public CreatureScript
{
}
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
if (me->isDead() || !me->GetOwner())
return;
@@ -386,10 +386,10 @@ class npc_troll_volunteer : public CreatureScript
}
me->SetDisplayId(trollmodel[urand(0, 39)]);
if (Player* player = me->GetOwner()->ToPlayer())
- me->GetMotionMaster()->MoveFollow(player, 5.0f, float(rand_norm() + 1.0f) * M_PI / 3.0f * 4.0f);
+ me->GetMotionMaster()->MoveFollow(player, 5.0f, float(rand_norm() + 1.0f) * float(M_PI) / 3.0f * 4.0f);
}
- void Reset() OVERRIDE
+ void Reset() override
{
_complete = false;
me->AddAura(SPELL_VOLUNTEER_AURA, me);
@@ -405,7 +405,7 @@ class npc_troll_volunteer : public CreatureScript
return _mountModel;
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -413,7 +413,7 @@ class npc_troll_volunteer : public CreatureScript
me->DespawnOrUnsummon();
}
- void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* caster, SpellInfo const* spell) override
{
if (spell->Id == SPELL_AOE_TURNIN && caster->GetEntry() == NPC_URUZIN && !_complete)
{
@@ -432,7 +432,7 @@ class npc_troll_volunteer : public CreatureScript
bool _complete;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_troll_volunteerAI(creature);
}
@@ -447,9 +447,9 @@ class spell_mount_check : public SpellScriptLoader
class spell_mount_check_AuraScript : public AuraScript
{
- PrepareAuraScript(spell_mount_check_AuraScript)
+ PrepareAuraScript(spell_mount_check_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MOUNTING_CHECK))
return false;
@@ -476,13 +476,13 @@ class spell_mount_check : public SpellScriptLoader
target->SetSpeed(MOVE_WALK, owner->GetSpeedRate(MOVE_WALK));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_mount_check_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_mount_check_AuraScript();
}
@@ -495,9 +495,9 @@ class spell_voljin_war_drums : public SpellScriptLoader
class spell_voljin_war_drums_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_voljin_war_drums_SpellScript)
+ PrepareSpellScript(spell_voljin_war_drums_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MOTIVATE_1))
return false;
@@ -521,13 +521,13 @@ class spell_voljin_war_drums : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_voljin_war_drums_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_voljin_war_drums_SpellScript();
}
@@ -552,9 +552,9 @@ class spell_voodoo : public SpellScriptLoader
class spell_voodoo_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_voodoo_SpellScript)
+ PrepareSpellScript(spell_voodoo_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_BREW) || !sSpellMgr->GetSpellInfo(SPELL_GHOSTLY) ||
!sSpellMgr->GetSpellInfo(SPELL_HEX1) || !sSpellMgr->GetSpellInfo(SPELL_HEX2) ||
@@ -571,13 +571,13 @@ class spell_voodoo : public SpellScriptLoader
GetCaster()->CastSpell(target, spellid, false);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_voodoo_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_voodoo_SpellScript();
}
diff --git a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp
index 6030ce9f8fc..ee244e51b09 100644
--- a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp
+++ b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp
@@ -74,7 +74,7 @@ class npc_risen_husk_spirit : public CreatureScript
{
npc_risen_husk_spiritAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
if (me->GetEntry() == NPC_RISEN_HUSK)
@@ -83,7 +83,7 @@ class npc_risen_husk_spirit : public CreatureScript
events.ScheduleEvent(EVENT_INTANGIBLE_PRESENCE, 5000);
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
if (killer->GetTypeId() == TYPEID_PLAYER)
{
@@ -95,7 +95,7 @@ class npc_risen_husk_spirit : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -126,113 +126,13 @@ class npc_risen_husk_spirit : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_risen_husk_spiritAI(creature);
}
};
/*######
-## npc_theramor_guard
-######*/
-
-enum TheramoreGuard
-{
- QUEST_DISCREDITING_THE_DESERTERS = 11133,
-
- NPC_THERAMORE_GUARD = 4979,
-
- SPELL_DOCTORED_LEAFLET = 42725,
- SPELL_PROPAGANDIZED = 42246,
-
- SAY_QUEST1 = 0,
- SAY_QUEST2 = 1,
- SAY_QUEST3 = 2
-};
-
-#define GOSSIP_ITEM_THERAMORE_GUARD "You look like an intelligent person. Why don't you read one of these leaflets and give it some thought?"
-
-class npc_theramore_guard : public CreatureScript
-{
-public:
- npc_theramore_guard() : CreatureScript("npc_theramore_guard") { }
-
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
- {
- if (player->GetQuestStatus(QUEST_DISCREDITING_THE_DESERTERS) == QUEST_STATUS_INCOMPLETE)
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_THERAMORE_GUARD, GOSSIP_SENDER_MAIN, GOSSIP_SENDER_INFO);
-
- player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
-
- return true;
- }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
- {
- player->PlayerTalkClass->ClearMenus();
-
- if (action == GOSSIP_SENDER_INFO)
- {
- player->CLOSE_GOSSIP_MENU();
- player->KilledMonsterCredit(NPC_THERAMORE_GUARD, 0);
- creature->AI()->Talk(SAY_QUEST1);
- creature->CastSpell(creature, SPELL_DOCTORED_LEAFLET, false);
- creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- CAST_AI(npc_theramore_guard::npc_theramore_guardAI, creature->AI())->YellTimer = 4000;
- CAST_AI(npc_theramore_guard::npc_theramore_guardAI, creature->AI())->bYellTimer = true;
- }
-
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_theramore_guardAI(creature);
- }
-
- struct npc_theramore_guardAI : public ScriptedAI
- {
- npc_theramore_guardAI(Creature* creature) : ScriptedAI(creature) { }
-
- uint32 YellTimer;
- uint32 Step;
- bool bYellTimer;
-
- void Reset() OVERRIDE
- {
- bYellTimer = false;
- Step = 0;
- }
-
- void UpdateAI(uint32 Diff) OVERRIDE
- {
- if (!me->HasAura(SPELL_PROPAGANDIZED))
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
-
- if (bYellTimer && YellTimer <= Diff)
- {
- switch (Step)
- {
- case 0:
- Talk(SAY_QUEST2);
- YellTimer = 3000;
- ++Step;
- break;
- case 1:
- Talk(SAY_QUEST3);
- me->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH);
- Step = 0;
- bYellTimer = false;
- break;
- }
- }
- else
- YellTimer -= Diff;
- }
- };
-};
-
-/*######
## npc_lady_jaina_proudmoore
######*/
@@ -249,7 +149,7 @@ class npc_lady_jaina_proudmoore : public CreatureScript
public:
npc_lady_jaina_proudmoore() : CreatureScript("npc_lady_jaina_proudmoore") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_SENDER_INFO)
@@ -260,7 +160,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -289,7 +189,7 @@ class npc_nat_pagle : public CreatureScript
public:
npc_nat_pagle() : CreatureScript("npc_nat_pagle") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_TRADE)
@@ -298,7 +198,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -342,7 +242,7 @@ class npc_private_hendel : public CreatureScript
public:
npc_private_hendel() : CreatureScript("npc_private_hendel") { }
- bool OnQuestAccept(Player* /*player*/, Creature* creature, const Quest* quest) OVERRIDE
+ bool OnQuestAccept(Player* /*player*/, Creature* creature, const Quest* quest) override
{
if (quest->GetQuestId() == QUEST_MISSING_DIPLO_PT16)
creature->setFaction(FACTION_HOSTILE);
@@ -350,7 +250,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_private_hendelAI(creature);
}
@@ -359,12 +259,12 @@ public:
{
npc_private_hendelAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->RestoreFaction();
}
- void AttackedBy(Unit* pAttacker) OVERRIDE
+ void AttackedBy(Unit* pAttacker) override
{
if (me->GetVictim())
return;
@@ -375,7 +275,7 @@ public:
AttackStart(pAttacker);
}
- void DamageTaken(Unit* pDoneBy, uint32 &Damage) OVERRIDE
+ void DamageTaken(Unit* pDoneBy, uint32 &Damage) override
{
if (Damage > me->GetHealth() || me->HealthBelowPctDamaged(20, Damage))
{
@@ -409,7 +309,7 @@ class npc_zelfrax : public CreatureScript
public:
npc_zelfrax() : CreatureScript("npc_zelfrax") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_zelfraxAI(creature);
}
@@ -421,7 +321,7 @@ public:
MoveToDock();
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who)
return;
@@ -436,7 +336,7 @@ public:
}
}
- void MovementInform(uint32 Type, uint32 /*Id*/) OVERRIDE
+ void MovementInform(uint32 Type, uint32 /*Id*/) override
{
if (Type != POINT_MOTION_TYPE)
return;
@@ -458,7 +358,7 @@ public:
Talk(SAY_ZELFRAX2);
}
- void UpdateAI(uint32 /*Diff*/) OVERRIDE
+ void UpdateAI(uint32 /*Diff*/) override
{
if (!UpdateVictim())
return;
@@ -494,12 +394,12 @@ class npc_stinky : public CreatureScript
public:
npc_stinky() : CreatureScript("npc_stinky") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_stinkyAI(creature);
}
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_STINKYS_ESCAPE_H || quest->GetQuestId() == QUEST_STINKYS_ESCAPE_A)
{
@@ -518,7 +418,7 @@ public:
{
npc_stinkyAI(Creature* creature) : npc_escortAI(creature) { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -563,14 +463,14 @@ public:
}
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
Talk(SAY_ATTACKED_1, who);
}
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Player* player = GetPlayerForEscort();
if (player && HasEscortState(STATE_ESCORT_ESCORTING))
@@ -583,7 +483,7 @@ public:
}
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
npc_escortAI::UpdateAI(uiDiff);
@@ -612,7 +512,7 @@ class spell_ooze_zap : public SpellScriptLoader
{
PrepareSpellScript(spell_ooze_zap_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_OOZE_ZAP))
return false;
@@ -637,14 +537,14 @@ class spell_ooze_zap : public SpellScriptLoader
GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_ooze_zap_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
OnCheckCast += SpellCheckCastFn(spell_ooze_zap_SpellScript::CheckRequirement);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_ooze_zap_SpellScript();
}
@@ -659,7 +559,7 @@ class spell_ooze_zap_channel_end : public SpellScriptLoader
{
PrepareSpellScript(spell_ooze_zap_channel_end_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_OOZE_ZAP_CHANNEL_END))
return false;
@@ -674,13 +574,13 @@ class spell_ooze_zap_channel_end : public SpellScriptLoader
GetHitUnit()->Kill(GetHitUnit());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_ooze_zap_channel_end_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_ooze_zap_channel_end_SpellScript();
}
@@ -695,7 +595,7 @@ class spell_energize_aoe : public SpellScriptLoader
{
PrepareSpellScript(spell_energize_aoe_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ENERGIZED))
return false;
@@ -720,7 +620,7 @@ class spell_energize_aoe : public SpellScriptLoader
GetCaster()->CastSpell(GetCaster(), uint32(GetEffectValue()), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_energize_aoe_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_energize_aoe_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
@@ -728,7 +628,7 @@ class spell_energize_aoe : public SpellScriptLoader
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_energize_aoe_SpellScript();
}
@@ -749,7 +649,7 @@ class go_blackhoof_cage : public GameObjectScript
public:
go_blackhoof_cage() : GameObjectScript("go_blackhoof_cage") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->UseDoorOrButton();
if (Creature* prisoner = go->FindNearestCreature(NPC_THERAMORE_PRISONER, 1.0f))
@@ -772,7 +672,6 @@ void AddSC_dustwallow_marsh()
new npc_private_hendel();
new npc_zelfrax();
new npc_stinky();
- new npc_theramore_guard();
new spell_ooze_zap();
new spell_ooze_zap_channel_end();
new spell_energize_aoe();
diff --git a/src/server/scripts/Kalimdor/zone_felwood.cpp b/src/server/scripts/Kalimdor/zone_felwood.cpp
index 2d322a7c079..b79bc1f088b 100644
--- a/src/server/scripts/Kalimdor/zone_felwood.cpp
+++ b/src/server/scripts/Kalimdor/zone_felwood.cpp
@@ -54,7 +54,7 @@ class npcs_riverbreeze_and_silversky : public CreatureScript
public:
npcs_riverbreeze_and_silversky() : CreatureScript("npcs_riverbreeze_and_silversky") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -65,7 +65,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
diff --git a/src/server/scripts/Kalimdor/zone_feralas.cpp b/src/server/scripts/Kalimdor/zone_feralas.cpp
index 11e95f325c2..17b5ddaf6bb 100644
--- a/src/server/scripts/Kalimdor/zone_feralas.cpp
+++ b/src/server/scripts/Kalimdor/zone_feralas.cpp
@@ -19,7 +19,7 @@
/* ScriptData
SDName: Feralas
SD%Complete: 100
-SDComment: Quest support: 3520, 2767, Special vendor Gregan Brewspewer
+SDComment: Quest support: 2767, Special vendor Gregan Brewspewer
SDCategory: Feralas
EndScriptData */
@@ -42,7 +42,7 @@ class npc_gregan_brewspewer : public CreatureScript
public:
npc_gregan_brewspewer() : CreatureScript("npc_gregan_brewspewer") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -55,7 +55,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -97,7 +97,7 @@ class npc_oox22fe : public CreatureScript
public:
npc_oox22fe() : CreatureScript("npc_oox22fe") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
{
if (quest->GetQuestId() == QUEST_RESCUE_OOX22FE)
{
@@ -118,7 +118,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_oox22feAI(creature);
}
@@ -127,7 +127,7 @@ public:
{
npc_oox22feAI(Creature* creature) : npc_escortAI(creature) { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -162,20 +162,20 @@ public:
}
}
- void Reset() OVERRIDE
+ void Reset() override
{
if (!HasEscortState(STATE_ESCORT_ESCORTING))
me->SetStandState(UNIT_STAND_STATE_DEAD);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
//For an small probability the npc says something when he get aggro
if (urand(0, 9) > 7)
Talk(SAY_OOX_AGGRO);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->AI()->AttackStart(me);
}
@@ -183,26 +183,6 @@ public:
};
-/*######
-## npc_screecher_spirit
-######*/
-
-class npc_screecher_spirit : public CreatureScript
-{
-public:
- npc_screecher_spirit() : CreatureScript("npc_screecher_spirit") { }
-
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
- {
- player->SEND_GOSSIP_MENU(2039, creature->GetGUID());
- player->TalkedToCreature(creature->GetEntry(), creature->GetGUID());
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
-
- return true;
- }
-
-};
-
enum GordunniTrap
{
GO_GORDUNNI_DIRT_MOUND = 144064,
@@ -227,13 +207,13 @@ class spell_gordunni_trap : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnCast += SpellCastFn(spell_gordunni_trap_SpellScript::HandleDummy);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gordunni_trap_SpellScript();
}
@@ -247,6 +227,5 @@ void AddSC_feralas()
{
new npc_gregan_brewspewer();
new npc_oox22fe();
- new npc_screecher_spirit();
new spell_gordunni_trap();
}
diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp
index 3b77a2c7a0b..0c07d5dc6df 100644
--- a/src/server/scripts/Kalimdor/zone_moonglade.cpp
+++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp
@@ -62,7 +62,7 @@ class npc_bunthen_plainswind : public CreatureScript
public:
npc_bunthen_plainswind() : CreatureScript("npc_bunthen_plainswind") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -82,7 +82,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->getClass() != CLASS_DRUID)
player->SEND_GOSSIP_MENU(4916, creature->GetGUID());
@@ -121,7 +121,7 @@ class npc_great_bear_spirit : public CreatureScript
public:
npc_great_bear_spirit() : CreatureScript("npc_great_bear_spirit") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -149,7 +149,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
//ally or horde quest
if (player->GetQuestStatus(5929) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(5930) == QUEST_STATUS_INCOMPLETE)
@@ -177,7 +177,7 @@ class npc_silva_filnaveth : public CreatureScript
public:
npc_silva_filnaveth() : CreatureScript("npc_silva_filnaveth") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -197,7 +197,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->getClass() != CLASS_DRUID)
player->SEND_GOSSIP_MENU(4913, creature->GetGUID());
@@ -288,7 +288,7 @@ class npc_clintar_spirit : public CreatureScript
public:
npc_clintar_spirit() : CreatureScript("npc_clintar_spirit") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_clintar_spiritAI(creature);
}
@@ -310,7 +310,7 @@ public:
bool EventOnWait;
- void Reset() OVERRIDE
+ void Reset() override
{
if (!PlayerGUID)
{
@@ -323,7 +323,7 @@ public:
}
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
std::list<Player*> playerOnQuestList;
Trinity::AnyPlayerInObjectRangeCheck checker(me, 5.0f);
@@ -345,7 +345,7 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (!PlayerGUID)
return;
@@ -359,7 +359,7 @@ public:
}
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID);
if (player && player->IsInCombat() && player->getAttackerForHelper())
@@ -384,7 +384,7 @@ public:
return;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
@@ -546,7 +546,7 @@ public:
} else if (EventOnWait) EventTimer -= diff;
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
CurrWP = waypointId;
EventTimer = 0;
@@ -593,7 +593,7 @@ public:
EventMap events;
- void MovementInform(uint32 type, uint32 pointId) OVERRIDE
+ void MovementInform(uint32 type, uint32 pointId) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -607,19 +607,19 @@ public:
}
}
- void EnterCombat(Unit* /*attacker*/) OVERRIDE
+ void EnterCombat(Unit* /*attacker*/) override
{
events.Reset();
events.ScheduleEvent(EVENT_CAST_CLEAVE, urand(3000, 5000));
events.ScheduleEvent(EVENT_CAST_STARFALL, urand(8000, 10000));
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
DoCast(SPELL_OMEN_SUMMON_SPOTLIGHT);
}
- void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
if (spell->Id == SPELL_ELUNE_CANDLE)
{
@@ -630,7 +630,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -654,7 +654,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_omenAI(creature);
}
@@ -671,13 +671,13 @@ public:
EventMap events;
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
events.ScheduleEvent(EVENT_DESPAWN, 5*MINUTE*IN_MILLISECONDS);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -697,7 +697,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_giant_spotlightAI(creature);
}
diff --git a/src/server/scripts/Kalimdor/zone_mulgore.cpp b/src/server/scripts/Kalimdor/zone_mulgore.cpp
index f8cc21da209..fa35371f3f2 100644
--- a/src/server/scripts/Kalimdor/zone_mulgore.cpp
+++ b/src/server/scripts/Kalimdor/zone_mulgore.cpp
@@ -55,7 +55,7 @@ class npc_kyle_frenzied : public CreatureScript
public:
npc_kyle_frenzied() : CreatureScript("npc_kyle_frenzied") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_kyle_frenziedAI(creature);
}
@@ -70,7 +70,7 @@ public:
uint32 EventTimer;
uint8 EventPhase;
- void Reset() OVERRIDE
+ void Reset() override
{
EventActive = false;
IsMovingToLunch = false;
@@ -82,7 +82,7 @@ public:
me->UpdateEntry(NPC_KYLE_FRENZIED);
}
- void SpellHit(Unit* Caster, SpellInfo const* Spell) OVERRIDE
+ void SpellHit(Unit* Caster, SpellInfo const* Spell) override
{
if (!me->GetVictim() && !EventActive && Spell->Id == SPELL_LUNCH)
{
@@ -102,7 +102,7 @@ public:
}
}
- void MovementInform(uint32 Type, uint32 PointId) OVERRIDE
+ void MovementInform(uint32 Type, uint32 PointId) override
{
if (Type != POINT_MOTION_TYPE || !EventActive)
return;
@@ -111,7 +111,7 @@ public:
IsMovingToLunch = false;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (EventActive)
{
@@ -228,7 +228,7 @@ class npc_plains_vision : public CreatureScript
public:
npc_plains_vision() : CreatureScript("npc_plains_vision") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_plains_visionAI(creature);
}
@@ -241,16 +241,16 @@ public:
uint8 WayPointId;
uint8 amountWP;
- void Reset() OVERRIDE
+ void Reset() override
{
WayPointId = 0;
newWaypoint = true;
amountWP = 49;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -267,7 +267,7 @@ public:
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (newWaypoint)
{
diff --git a/src/server/scripts/Kalimdor/zone_orgrimmar.cpp b/src/server/scripts/Kalimdor/zone_orgrimmar.cpp
index 4b6670043bf..5ae50ff7c8e 100644
--- a/src/server/scripts/Kalimdor/zone_orgrimmar.cpp
+++ b/src/server/scripts/Kalimdor/zone_orgrimmar.cpp
@@ -47,17 +47,17 @@ class npc_shenthul : public CreatureScript
public:
npc_shenthul() : CreatureScript("npc_shenthul") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_SHATTERED_SALUTE)
{
- CAST_AI(npc_shenthul::npc_shenthulAI, creature->AI())->CanTalk = true;
- CAST_AI(npc_shenthul::npc_shenthulAI, creature->AI())->PlayerGUID = player->GetGUID();
+ ENSURE_AI(npc_shenthul::npc_shenthulAI, creature->AI())->CanTalk = true;
+ ENSURE_AI(npc_shenthul::npc_shenthulAI, creature->AI())->PlayerGUID = player->GetGUID();
}
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_shenthulAI(creature);
}
@@ -72,7 +72,7 @@ public:
uint32 ResetTimer;
uint64 PlayerGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
CanTalk = false;
CanEmote = false;
@@ -81,9 +81,9 @@ public:
PlayerGUID = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (CanEmote)
{
@@ -114,7 +114,7 @@ public:
DoMeleeAttackIfReady();
}
- void ReceiveEmote(Player* player, uint32 emote) OVERRIDE
+ void ReceiveEmote(Player* player, uint32 emote) override
{
if (emote == TEXT_EMOTE_SALUTE && player->GetQuestStatus(QUEST_SHATTERED_SALUTE) == QUEST_STATUS_INCOMPLETE)
{
@@ -155,7 +155,7 @@ class npc_thrall_warchief : public CreatureScript
public:
npc_thrall_warchief() : CreatureScript("npc_thrall_warchief") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -192,7 +192,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -204,7 +204,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_thrall_warchiefAI(creature);
}
@@ -216,15 +216,15 @@ public:
uint32 ChainLightningTimer;
uint32 ShockTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
ChainLightningTimer = 2000;
ShockTimer = 8000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/Kalimdor/zone_silithus.cpp b/src/server/scripts/Kalimdor/zone_silithus.cpp
index ce5591ec5db..3ddf97c164d 100644
--- a/src/server/scripts/Kalimdor/zone_silithus.cpp
+++ b/src/server/scripts/Kalimdor/zone_silithus.cpp
@@ -65,7 +65,7 @@ class npcs_rutgar_and_frankal : public CreatureScript
public:
npcs_rutgar_and_frankal() : CreatureScript("npcs_rutgar_and_frankal") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -129,7 +129,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -415,7 +415,7 @@ class npc_anachronos_the_ancient : public CreatureScript
public:
npc_anachronos_the_ancient() : CreatureScript("npc_anachronos_the_ancient") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_anachronos_the_ancientAI(creature);
}
@@ -435,7 +435,7 @@ public:
uint64 PlayerGUID;
bool eventEnd;
- void Reset() OVERRIDE
+ void Reset() override
{
AnimationTimer = 1500;
AnimationCount = 0;
@@ -706,7 +706,7 @@ public:
break;
case 65:
me->SetVisible(false);
- if (Creature* AnachronosQuestTrigger = (Unit::GetCreature(*me, AnachronosQuestTriggerGUID)))
+ if (Creature* AnachronosQuestTrigger = (ObjectAccessor::GetCreature(*me, AnachronosQuestTriggerGUID)))
{
Talk(ARYGOS_YELL_1);
AnachronosQuestTrigger->AI()->EnterEvadeMode();
@@ -717,7 +717,7 @@ public:
}
++AnimationCount;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (AnimationTimer)
{
@@ -743,7 +743,7 @@ class npc_qiraj_war_spawn : public CreatureScript
public:
npc_qiraj_war_spawn() : CreatureScript("npc_qiraj_war_spawn") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_qiraj_war_spawnAI(creature);
}
@@ -758,7 +758,7 @@ public:
bool Timers;
bool hasTarget;
- void Reset() OVERRIDE
+ void Reset() override
{
MobGUID = 0;
PlayerGUID = 0;
@@ -766,10 +766,10 @@ public:
hasTarget = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void JustDied(Unit* /*slayer*/) OVERRIDE;
+ void EnterCombat(Unit* /*who*/) override { }
+ void JustDied(Unit* /*slayer*/) override;
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!Timers)
{
@@ -856,7 +856,7 @@ class npc_anachronos_quest_trigger : public CreatureScript
public:
npc_anachronos_quest_trigger() : CreatureScript("npc_anachronos_quest_trigger") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_anachronos_quest_triggerAI(creature);
}
@@ -877,7 +877,7 @@ public:
bool Announced;
bool Failed;
- void Reset() OVERRIDE
+ void Reset() override
{
PlayerGUID = 0;
@@ -905,7 +905,7 @@ public:
if (Creature* spawn = me->SummonCreature(WavesInfo[WaveCount].CreatureId, SpawnLocation[i], TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, desptimer))
{
if (spawn->GetEntry() == 15423)
- spawn->SetUInt32Value(UNIT_FIELD_DISPLAYID, 15427+rand()%4);
+ spawn->SetUInt32Value(UNIT_FIELD_DISPLAYID, 15427 + rand32() % 4);
if (i >= 30) WaveCount = 1;
if (i >= 33) WaveCount = 2;
if (i >= 45) WaveCount = 3;
@@ -970,7 +970,7 @@ public:
Announced = false;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!PlayerGUID || !EventStarted)
return;
@@ -1002,11 +1002,11 @@ void npc_qiraj_war_spawn::npc_qiraj_war_spawnAI::JustDied(Unit* /*slayer*/)
if (!MobGUID)
return;
- if (Creature* mob = Unit::GetCreature(*me, MobGUID))
+ if (Creature* mob = ObjectAccessor::GetCreature(*me, MobGUID))
if (npc_anachronos_quest_trigger::npc_anachronos_quest_triggerAI* triggerAI = CAST_AI(npc_anachronos_quest_trigger::npc_anachronos_quest_triggerAI, mob->AI()))
triggerAI->LiveCounter();
-};
+}
/*#####
# go_crystalline_tear
@@ -1017,7 +1017,7 @@ class go_crystalline_tear : public GameObjectScript
public:
go_crystalline_tear() : GameObjectScript("go_crystalline_tear") { }
- bool OnQuestAccept(Player* player, GameObject* go, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, GameObject* go, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_A_PAWN_ON_THE_ETERNAL_BOARD)
{
@@ -1258,7 +1258,7 @@ class go_wind_stone : public GameObjectScript
void SummonNPC(GameObject* go, Player* player, uint32 npc, uint32 spell)
{
go->CastSpell(player, spell);
- TempSummon* summons = go->SummonCreature(npc, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), player->GetOrientation() - M_PI, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 10 * 60 * 1000);
+ TempSummon* summons = go->SummonCreature(npc, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), player->GetOrientation() - float(M_PI), TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 10 * 60 * 1000);
summons->CastSpell(summons, SPELL_SPAWN_IN, false);
switch (summons->GetEntry())
{
@@ -1288,7 +1288,7 @@ class go_wind_stone : public GameObjectScript
}
public:
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
uint8 rank = GetPlayerRank(player);
@@ -1366,7 +1366,7 @@ class go_wind_stone : public GameObjectScript
return true;
}
- bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
player->PlayerTalkClass->SendCloseGossip();
diff --git a/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp b/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp
index 92fd5a3fd47..7b29ced9860 100644
--- a/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp
+++ b/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp
@@ -49,7 +49,7 @@ class npc_braug_dimspirit : public CreatureScript
public:
npc_braug_dimspirit() : CreatureScript("npc_braug_dimspirit") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -66,7 +66,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -117,7 +117,7 @@ public:
{
npc_kaya_flathoofAI(Creature* creature) : npc_escortAI(creature) { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -139,15 +139,15 @@ public:
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->AI()->AttackStart(me);
}
- void Reset() OVERRIDE { }
+ void Reset() override { }
};
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_PROTECT_KAYA)
{
@@ -161,7 +161,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_kaya_flathoofAI(creature);
}
diff --git a/src/server/scripts/Kalimdor/zone_tanaris.cpp b/src/server/scripts/Kalimdor/zone_tanaris.cpp
index 3ced3c7115d..23e8e2f26ff 100644
--- a/src/server/scripts/Kalimdor/zone_tanaris.cpp
+++ b/src/server/scripts/Kalimdor/zone_tanaris.cpp
@@ -57,7 +57,7 @@ class npc_aquementas : public CreatureScript
public:
npc_aquementas() : CreatureScript("npc_aquementas") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_aquementasAI(creature);
}
@@ -73,7 +73,7 @@ public:
uint32 FrostShockTimer;
uint32 AquaJetTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
SendItemTimer = 0;
SwitchFactionTimer = 10000;
@@ -100,12 +100,12 @@ public:
}
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
Talk(AGGRO_YELL_AQUE, who);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (isFriendly)
{
@@ -123,7 +123,7 @@ public:
{
if (SendItemTimer <= diff)
{
- if (me->GetVictim()->GetTypeId() == TYPEID_PLAYER)
+ if (me->GetVictim() && me->EnsureVictim()->GetTypeId() == TYPEID_PLAYER)
SendItem(me->GetVictim());
SendItemTimer = 5000;
} else SendItemTimer -= diff;
@@ -174,7 +174,7 @@ class npc_custodian_of_time : public CreatureScript
public:
npc_custodian_of_time() : CreatureScript("npc_custodian_of_time") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_custodian_of_timeAI(creature);
}
@@ -183,7 +183,7 @@ public:
{
npc_custodian_of_timeAI(Creature* creature) : npc_escortAI(creature) { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (Player* player = GetPlayerForEscort())
{
@@ -250,7 +250,7 @@ public:
}
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (HasEscortState(STATE_ESCORT_ESCORTING))
@@ -269,10 +269,10 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void Reset() OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void Reset() override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
}
@@ -291,7 +291,7 @@ class npc_steward_of_time : public CreatureScript
public:
npc_steward_of_time() : CreatureScript("npc_steward_of_time") { }
- bool OnQuestAccept(Player* player, Creature* /*creature*/, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* /*creature*/, Quest const* quest) override
{
if (quest->GetQuestId() == 10279) //Quest: To The Master's Lair
player->CastSpell(player, 34891, true); //(Flight through Caverns)
@@ -299,7 +299,7 @@ public:
return false;
}
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF + 1)
@@ -308,7 +308,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -342,7 +342,7 @@ class npc_stone_watcher_of_norgannon : public CreatureScript
public:
npc_stone_watcher_of_norgannon() : CreatureScript("npc_stone_watcher_of_norgannon") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -375,7 +375,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -413,7 +413,7 @@ class npc_OOX17 : public CreatureScript
public:
npc_OOX17() : CreatureScript("npc_OOX17") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == Q_OOX17)
{
@@ -429,7 +429,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_OOX17AI(creature);
}
@@ -438,7 +438,7 @@ public:
{
npc_OOX17AI(Creature* creature) : npc_escortAI(creature) { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (Player* player = GetPlayerForEscort())
{
@@ -466,14 +466,14 @@ public:
}
}
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_OOX_AGGRO);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->AI()->AttackStart(me);
}
@@ -508,7 +508,7 @@ class npc_tooga : public CreatureScript
public:
npc_tooga() : CreatureScript("npc_tooga") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
{
if (quest->GetQuestId() == QUEST_TOOGA)
{
@@ -519,7 +519,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_toogaAI(creature);
}
@@ -534,7 +534,7 @@ public:
uint64 TortaGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
CheckSpeechTimer = 2500;
PostEventTimer = 1000;
@@ -543,7 +543,7 @@ public:
TortaGUID = 0;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
FollowerAI::MoveInLineOfSight(who);
@@ -562,7 +562,7 @@ public:
}
}
- void MovementInform(uint32 MotionType, uint32 PointId) OVERRIDE
+ void MovementInform(uint32 MotionType, uint32 PointId) override
{
FollowerAI::MovementInform(MotionType, PointId);
@@ -573,7 +573,7 @@ public:
SetFollowComplete();
}
- void UpdateFollowerAI(uint32 Diff) OVERRIDE
+ void UpdateFollowerAI(uint32 Diff) override
{
if (!UpdateVictim())
{
@@ -584,7 +584,7 @@ public:
{
PostEventTimer = 5000;
- Creature* torta = Creature::GetCreature(*me, TortaGUID);
+ Creature* torta = ObjectAccessor::GetCreature(*me, TortaGUID);
if (!torta || !torta->IsAlive())
{
//something happened, so just complete
diff --git a/src/server/scripts/Kalimdor/zone_teldrassil.cpp b/src/server/scripts/Kalimdor/zone_teldrassil.cpp
index a94813f2b0f..e1b2144c97c 100644
--- a/src/server/scripts/Kalimdor/zone_teldrassil.cpp
+++ b/src/server/scripts/Kalimdor/zone_teldrassil.cpp
@@ -50,7 +50,7 @@ class npc_mist : public CreatureScript
public:
npc_mist() : CreatureScript("npc_mist") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_MIST)
if (npc_mistAI* pMistAI = CAST_AI(npc_mist::npc_mistAI, creature->AI()))
@@ -59,7 +59,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_mistAI(creature);
}
@@ -68,9 +68,9 @@ public:
{
npc_mistAI(Creature* creature) : FollowerAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
FollowerAI::MoveInLineOfSight(who);
@@ -98,7 +98,7 @@ public:
}
//call not needed here, no known abilities
- /*void UpdateFollowerAI(const uint32 Diff) OVERRIDE
+ /*void UpdateFollowerAI(const uint32 Diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp
index 7b08baa0511..b158422054f 100644
--- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp
+++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp
@@ -55,7 +55,7 @@ class npc_beaten_corpse : public CreatureScript
public:
npc_beaten_corpse() : CreatureScript("npc_beaten_corpse") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF +1)
@@ -66,7 +66,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(QUEST_LOST_IN_BATTLE) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(QUEST_LOST_IN_BATTLE) == QUEST_STATUS_COMPLETE)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_CORPSE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
@@ -102,7 +102,7 @@ class npc_gilthares : public CreatureScript
public:
npc_gilthares() : CreatureScript("npc_gilthares") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
{
if (quest->GetQuestId() == QUEST_FREE_FROM_HOLD)
{
@@ -117,7 +117,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_giltharesAI(creature);
}
@@ -126,9 +126,9 @@ public:
{
npc_giltharesAI(Creature* creature) : npc_escortAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -158,10 +158,10 @@ public:
}
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
//not always use
- if (rand()%4)
+ if (rand32() % 4)
return;
//only aggro text if not player and only in this area
@@ -191,7 +191,7 @@ class npc_taskmaster_fizzule : public CreatureScript
public:
npc_taskmaster_fizzule() : CreatureScript("npc_taskmaster_fizzule") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_taskmaster_fizzuleAI(creature);
}
@@ -208,7 +208,7 @@ public:
uint32 ResetTimer;
uint8 FlareCount;
- void Reset() OVERRIDE
+ void Reset() override
{
IsFriend = false;
ResetTimer = 120000;
@@ -229,7 +229,7 @@ public:
me->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE);
}
- void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
if (spell->Id == SPELL_FLARE || spell->Id == SPELL_FOLLY)
{
@@ -240,9 +240,9 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (IsFriend)
{
@@ -259,7 +259,7 @@ public:
DoMeleeAttackIfReady();
}
- void ReceiveEmote(Player* /*player*/, uint32 emote) OVERRIDE
+ void ReceiveEmote(Player* /*player*/, uint32 emote) override
{
if (emote == TEXT_EMOTE_SALUTE)
{
@@ -307,7 +307,7 @@ class npc_twiggy_flathead : public CreatureScript
public:
npc_twiggy_flathead() : CreatureScript("npc_twiggy_flathead") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_twiggy_flatheadAI(creature);
}
@@ -327,7 +327,7 @@ public:
uint64 AffrayChallenger[6];
uint64 BigWill;
- void Reset() OVERRIDE
+ void Reset() override
{
EventInProgress = false;
EventGrate = false;
@@ -345,7 +345,7 @@ public:
BigWill = 0;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!who || !who->IsAlive() || EventInProgress)
return;
@@ -359,7 +359,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (EventInProgress)
{
@@ -380,7 +380,7 @@ public:
{
if (AffrayChallenger[i])
{
- Creature* creature = Unit::GetCreature((*me), AffrayChallenger[i]);
+ Creature* creature = ObjectAccessor::GetCreature((*me), AffrayChallenger[i]);
if (creature && creature->IsAlive())
creature->DisappearAndDie();
}
@@ -388,7 +388,7 @@ public:
if (BigWill) // unsummon bigWill
{
- Creature* creature = Unit::GetCreature((*me), BigWill);
+ Creature* creature = ObjectAccessor::GetCreature((*me), BigWill);
if (creature && creature->IsAlive())
creature->DisappearAndDie();
}
@@ -429,7 +429,7 @@ public:
{
if (AffrayChallenger[i])
{
- Creature* creature = Unit::GetCreature((*me), AffrayChallenger[i]);
+ Creature* creature = ObjectAccessor::GetCreature((*me), AffrayChallenger[i]);
if ((!creature || (!creature->IsAlive())) && !ChallengerDown[i])
{
Talk(SAY_TWIGGY_FLATHEAD_DOWN);
@@ -526,7 +526,7 @@ public:
uint32 PostEventTimer;
uint32 PostEventCount;
- void Reset() OVERRIDE
+ void Reset() override
{
if (!HasEscortState(STATE_ESCORT_ESCORTING))
{
@@ -539,7 +539,7 @@ public:
}
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -562,7 +562,7 @@ public:
}
}
- void WaypointStart(uint32 PointId) OVERRIDE
+ void WaypointStart(uint32 PointId) override
{
Player* player = GetPlayerForEscort();
@@ -581,7 +581,7 @@ public:
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned->GetEntry() == NPC_PILOT_WIZZ)
me->SetStandState(UNIT_STAND_STATE_DEAD);
@@ -590,7 +590,7 @@ public:
summoned->AI()->AttackStart(me);
}
- void UpdateEscortAI(const uint32 Diff) OVERRIDE
+ void UpdateEscortAI(const uint32 Diff) override
{
if (!UpdateVictim())
{
@@ -632,7 +632,7 @@ public:
}
};
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_ESCAPE)
{
@@ -643,7 +643,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_wizzlecrank_shredderAI(creature);
}
diff --git a/src/server/scripts/Kalimdor/zone_thousand_needles.cpp b/src/server/scripts/Kalimdor/zone_thousand_needles.cpp
index f027fd05f8b..b36037d9995 100644
--- a/src/server/scripts/Kalimdor/zone_thousand_needles.cpp
+++ b/src/server/scripts/Kalimdor/zone_thousand_needles.cpp
@@ -57,7 +57,7 @@ class npc_kanati : public CreatureScript
public:
npc_kanati() : CreatureScript("npc_kanati") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
{
if (quest->GetQuestId() == QUEST_PROTECT_KANATI)
if (npc_kanatiAI* pEscortAI = CAST_AI(npc_kanati::npc_kanatiAI, creature->AI()))
@@ -66,7 +66,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_kanatiAI(creature);
}
@@ -75,9 +75,9 @@ public:
{
npc_kanatiAI(Creature* creature) : npc_escortAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -98,7 +98,7 @@ public:
me->SummonCreature(NPC_GALAK_ASS, GalakLoc, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->AI()->AttackStart(me);
}
@@ -142,7 +142,7 @@ class npc_lakota_windsong : public CreatureScript
public:
npc_lakota_windsong() : CreatureScript("npc_lakota_windsong") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
{
if (quest->GetQuestId() == QUEST_FREE_AT_LAST)
{
@@ -155,7 +155,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_lakota_windsongAI(creature);
}
@@ -164,9 +164,9 @@ public:
{
npc_lakota_windsongAI(Creature* creature) : npc_escortAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -225,7 +225,7 @@ class npc_paoka_swiftmountain : public CreatureScript
public:
npc_paoka_swiftmountain() : CreatureScript("npc_paoka_swiftmountain") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
{
if (quest->GetQuestId() == QUEST_HOMEWARD)
{
@@ -238,7 +238,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_paoka_swiftmountainAI(creature);
}
@@ -247,9 +247,9 @@ public:
{
npc_paoka_swiftmountainAI(Creature* creature) : npc_escortAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -294,7 +294,7 @@ class npc_plucky : public CreatureScript
public:
npc_plucky() : CreatureScript("npc_plucky") { }
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -307,7 +307,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(QUEST_SCOOP) == QUEST_STATUS_INCOMPLETE)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_P, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
@@ -317,7 +317,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_pluckyAI(creature);
}
@@ -329,7 +329,7 @@ public:
uint32 NormFaction;
uint32 ResetTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
ResetTimer = 120000;
@@ -342,7 +342,7 @@ public:
DoCast(me, SPELL_PLUCKY_CHICKEN, false);
}
- void ReceiveEmote(Player* player, uint32 TextEmote) OVERRIDE
+ void ReceiveEmote(Player* player, uint32 TextEmote) override
{
if (player->GetQuestStatus(QUEST_SCOOP) == QUEST_STATUS_INCOMPLETE)
{
@@ -368,7 +368,7 @@ public:
}
}
- void UpdateAI(uint32 Diff) OVERRIDE
+ void UpdateAI(uint32 Diff) override
{
if (me->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP))
{
@@ -404,7 +404,7 @@ class go_panther_cage : public GameObjectScript
public:
go_panther_cage() : GameObjectScript("go_panther_cage") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->UseDoorOrButton();
if (player->GetQuestStatus(5151) == QUEST_STATUS_INCOMPLETE)
@@ -426,7 +426,7 @@ class npc_enraged_panther : public CreatureScript
public:
npc_enraged_panther() : CreatureScript("npc_enraged_panther") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_enraged_pantherAI(creature);
}
@@ -435,13 +435,13 @@ public:
{
npc_enraged_pantherAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetReactState(REACT_PASSIVE);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp b/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp
index 10538fb2387..3b303ffa463 100644
--- a/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp
+++ b/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp
@@ -48,7 +48,7 @@ class npc_cairne_bloodhoof : public CreatureScript
public:
npc_cairne_bloodhoof() : CreatureScript("npc_cairne_bloodhoof") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_SENDER_INFO)
@@ -59,7 +59,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -72,7 +72,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_cairne_bloodhoofAI(creature);
}
@@ -87,7 +87,7 @@ public:
uint32 ThunderclapTimer;
uint32 UppercutTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
BerserkerChargeTimer = 30000;
CleaveTimer = 5000;
@@ -96,9 +96,9 @@ public:
UppercutTimer = 10000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp
index dd165f807b2..a1e4467e9fb 100644
--- a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp
+++ b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp
@@ -57,11 +57,11 @@ class npc_ame : public CreatureScript
public:
npc_ame() : CreatureScript("npc_ame") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_CHASING_AME)
{
- CAST_AI(npc_escortAI, (creature->AI()))->Start(false, false, player->GetGUID());
+ ENSURE_AI(npc_escortAI, (creature->AI()))->Start(false, false, player->GetGUID());
creature->AI()->Talk(SAY_READY, player);
creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
// Change faction so mobs attack
@@ -70,7 +70,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ameAI(creature);
}
@@ -81,7 +81,7 @@ public:
uint32 DemoralizingShoutTimer;
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (Player* player = GetPlayerForEscort())
{
@@ -110,23 +110,23 @@ public:
}
}
- void Reset() OVERRIDE
+ void Reset() override
{
DemoralizingShoutTimer = 5000;
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->AI()->AttackStart(me);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Player* player = GetPlayerForEscort())
player->FailQuest(QUEST_CHASING_AME);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
if (!UpdateVictim())
@@ -173,7 +173,7 @@ class npc_ringo : public CreatureScript
public:
npc_ringo() : CreatureScript("npc_ringo") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
{
if (quest->GetQuestId() == QUEST_A_LITTLE_HELP)
{
@@ -187,7 +187,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ringoAI(creature);
}
@@ -202,7 +202,7 @@ public:
uint64 SpraggleGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
FaintTimer = urand(30000, 60000);
EndEventProgress = 0;
@@ -210,7 +210,7 @@ public:
SpraggleGUID = 0;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
FollowerAI::MoveInLineOfSight(who);
@@ -231,7 +231,7 @@ public:
}
}
- void SpellHit(Unit* /*pCaster*/, const SpellInfo* pSpell) OVERRIDE
+ void SpellHit(Unit* /*pCaster*/, const SpellInfo* pSpell) override
{
if (HasFollowState(STATE_FOLLOW_INPROGRESS | STATE_FOLLOW_PAUSED) && pSpell->Id == SPELL_REVIVE_RINGO)
ClearFaint();
@@ -262,7 +262,7 @@ public:
SetFollowPaused(false);
}
- void UpdateFollowerAI(uint32 Diff) OVERRIDE
+ void UpdateFollowerAI(uint32 Diff) override
{
if (!UpdateVictim())
{
@@ -270,7 +270,7 @@ public:
{
if (EndEventTimer <= Diff)
{
- Creature* spraggle = Creature::GetCreature(*me, SpraggleGUID);
+ Creature* spraggle = ObjectAccessor::GetCreature(*me, SpraggleGUID);
if (!spraggle || !spraggle->IsAlive())
{
SetFollowComplete();
diff --git a/src/server/scripts/Kalimdor/zone_winterspring.cpp b/src/server/scripts/Kalimdor/zone_winterspring.cpp
index 3ae8bc38120..11b720ad8d5 100644
--- a/src/server/scripts/Kalimdor/zone_winterspring.cpp
+++ b/src/server/scripts/Kalimdor/zone_winterspring.cpp
@@ -45,7 +45,7 @@ class npc_rivern_frostwind : public CreatureScript
public:
npc_rivern_frostwind() : CreatureScript("npc_rivern_frostwind") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_TRADE)
@@ -54,7 +54,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -292,7 +292,7 @@ class npc_ranshalla : public CreatureScript
{
public:
npc_ranshalla() : CreatureScript("npc_ranshalla") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_GUARDIANS_ALTAR)
{
@@ -307,7 +307,7 @@ public:
return false;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ranshallaAI(creature);
}
@@ -328,7 +328,7 @@ public:
uint64 _voiceEluneGUID;
uint64 _altarGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
_delayTimer = 0;
}
@@ -394,7 +394,7 @@ public:
StartNextDialogueText(SAY_PRIESTESS_ALTAR_3);
}
- void WaypointReached(uint32 pointId) OVERRIDE
+ void WaypointReached(uint32 pointId) override
{
switch (pointId)
{
@@ -563,7 +563,7 @@ public:
}
- void UpdateEscortAI(const uint32 diff) OVERRIDE
+ void UpdateEscortAI(const uint32 diff) override
{
DialogueUpdate(diff);
@@ -596,7 +596,7 @@ class go_elune_fire : public GameObjectScript
{
public:
go_elune_fire() : GameObjectScript("go_elune_fire") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
// Check if we are using the torches or the altar
bool isAltar = false;
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp
index 8f71ae47bcb..42ceaec4def 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp
@@ -57,14 +57,14 @@ class boss_amanitar : public CreatureScript
{
boss_amanitarAI(Creature* creature) : BossAI(creature, DATA_AMANITAR) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
me->SetMeleeDamageSchool(SPELL_SCHOOL_NATURE);
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
@@ -75,7 +75,7 @@ class boss_amanitar : public CreatureScript
events.ScheduleEvent(EVENT_SPAWN, 5 * IN_MILLISECONDS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_MINI);
@@ -87,9 +87,7 @@ class boss_amanitar : public CreatureScript
for (uint8 i = 0; i < 30; ++i)
{
- Position pos;
- me->GetPosition(&pos);
- me->GetRandomNearPosition(pos, 30.0f);
+ Position pos = me->GetRandomNearPosition(30.0f);
pos.m_positionZ = me->GetMap()->GetHeight(pos.GetPositionX(), pos.GetPositionY(), MAX_HEIGHT) + 2.0f;
if (Creature* trigger = me->SummonCreature(NPC_TRIGGER, pos))
@@ -110,7 +108,7 @@ class boss_amanitar : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -152,7 +150,7 @@ class boss_amanitar : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetAhnKahetAI<boss_amanitarAI>(creature);
}
@@ -169,7 +167,7 @@ public:
EventMap events;
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
events.ScheduleEvent(EVENT_AURA, 1 * IN_MILLISECONDS);
@@ -183,16 +181,16 @@ public:
DoCast(SPELL_POWER_MUSHROOM_VISUAL_AURA);
}
- void DamageTaken(Unit* /*attacker*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32 &damage) override
{
if (damage >= me->GetHealth() && me->GetEntry() == NPC_HEALTHY_MUSHROOM)
DoCast(me, SPELL_HEALTHY_MUSHROOM_POTENT_FUNGUS, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void AttackStart(Unit* /*victim*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void AttackStart(Unit* /*victim*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -221,7 +219,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_amanitar_mushroomsAI(creature);
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp
index 84c9181e495..d4dc5efb6d5 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp
@@ -17,6 +17,7 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "SpellAuras.h"
#include "SpellScript.h"
#include "ahnkahet.h"
@@ -31,14 +32,16 @@ enum Yells
enum Spells
{
+ // Elder Nadox
SPELL_BROOD_PLAGUE = 56130,
H_SPELL_BROOD_RAGE = 59465,
SPELL_ENRAGE = 26662, // Enraged if too far away from home
SPELL_SUMMON_SWARMERS = 56119, // 2x 30178 -- 2x every 10secs
- SPELL_SUMMON_SWARM_GUARD = 56120, // 1x 30176 -- every 25%
- // Spells Adds
- SPELL_SPRINT = 56354,
- SPELL_GUARDIAN_AURA = 56151
+ SPELL_SUMMON_SWARM_GUARD = 56120, // 1x 30176
+
+ // Adds
+ SPELL_SWARM_BUFF = 56281,
+ SPELL_SPRINT = 56354
};
enum Events
@@ -60,14 +63,14 @@ class boss_elder_nadox : public CreatureScript
{
boss_elder_nadoxAI(Creature* creature) : BossAI(creature, DATA_ELDER_NADOX) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
- AmountHealthModifier = 1;
+ GuardianSummoned = false;
GuardianDied = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -82,13 +85,13 @@ class boss_elder_nadox : public CreatureScript
}
}
- void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) OVERRIDE
+ void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override
{
if (summon->GetEntry() == NPC_AHNKAHAR_GUARDIAN)
GuardianDied = true;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_RESPECT_YOUR_ELDERS)
return !GuardianDied ? 1 : 0;
@@ -96,19 +99,19 @@ class boss_elder_nadox : public CreatureScript
return 0;
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -128,6 +131,7 @@ class boss_elder_nadox : public CreatureScript
events.ScheduleEvent(EVENT_RAGE, urand(10 * IN_MILLISECONDS, 50 * IN_MILLISECONDS));
break;
case EVENT_SUMMON_SWARMER:
+ /// @todo: summoned by egg
DoCast(me, SPELL_SUMMON_SWARMERS);
if (urand(1, 3) == 3) // 33% chance of dialog
Talk(SAY_EGG_SAC);
@@ -145,22 +149,23 @@ class boss_elder_nadox : public CreatureScript
}
}
- if (me->HealthBelowPct(100 - AmountHealthModifier * 25))
+ if (!GuardianSummoned && me->HealthBelowPct(50))
{
+ /// @todo: summoned by egg
Talk(EMOTE_HATCHES, me);
DoCast(me, SPELL_SUMMON_SWARM_GUARD);
- ++AmountHealthModifier;
+ GuardianSummoned = true;
}
DoMeleeAttackIfReady();
}
private:
+ bool GuardianSummoned;
bool GuardianDied;
- uint8 AmountHealthModifier;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetAhnKahetAI<boss_elder_nadoxAI>(creature);
}
@@ -175,141 +180,121 @@ class npc_ahnkahar_nerubian : public CreatureScript
{
npc_ahnkahar_nerubianAI(Creature* creature) : ScriptedAI(creature) { }
- EventMap events;
-
- void Reset() OVERRIDE
- {
- if (me->GetEntry() == NPC_AHNKAHAR_GUARDIAN)
- DoCast(me, SPELL_GUARDIAN_AURA, true);
-
- events.ScheduleEvent(EVENT_SPRINT, 13 * IN_MILLISECONDS);
- }
-
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void Reset() override
{
- if (me->GetEntry() == NPC_AHNKAHAR_GUARDIAN)
- me->RemoveAurasDueToSpell(SPELL_GUARDIAN_AURA);
+ _events.Reset();
+ _events.ScheduleEvent(EVENT_SPRINT, 13 * IN_MILLISECONDS);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
- events.Update(diff);
+ _events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
- while (uint32 eventId = events.ExecuteEvent())
+ while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
- case EVENT_SPRINT:
- DoCast(me, SPELL_SPRINT);
- events.ScheduleEvent(EVENT_SPRINT, 20 * IN_MILLISECONDS);
- break;
+ case EVENT_SPRINT:
+ DoCast(me, SPELL_SPRINT);
+ _events.ScheduleEvent(EVENT_SPRINT, 20 * IN_MILLISECONDS);
+ break;
}
}
+
DoMeleeAttackIfReady();
}
+
+ private:
+ EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ahnkahar_nerubianAI(creature);
}
};
-//HACK: No, AI. Replace with proper db content?
-class npc_nadox_eggs : public CreatureScript
+// 56159 - Swarm
+class spell_ahn_kahet_swarm : public SpellScriptLoader
{
-public:
- npc_nadox_eggs() : CreatureScript("npc_nadox_eggs") { }
+ public:
+ spell_ahn_kahet_swarm() : SpellScriptLoader("spell_ahn_kahet_swarm") { }
- struct npc_nadox_eggsAI : public ScriptedAI
- {
- npc_nadox_eggsAI(Creature* creature) : ScriptedAI(creature)
+ class spell_ahn_kahet_swarm_SpellScript : public SpellScript
{
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
- }
-
- void Reset() OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void AttackStart(Unit* /*victim*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ PrepareSpellScript(spell_ahn_kahet_swarm_SpellScript);
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
- };
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_SWARM_BUFF))
+ return false;
+ return true;
+ }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_nadox_eggsAI(creature);
- }
-};
+ bool Load() override
+ {
+ _targetCount = 0;
+ return true;
+ }
-class GuardianCheck
-{
-public:
- bool operator()(const WorldObject* target) const
- {
- if (target->GetEntry() == NPC_AHNKAHAR_GUARDIAN)
- return true;
-
- return false;
- }
-};
+ void CountTargets(std::list<WorldObject*>& targets)
+ {
+ _targetCount = targets.size();
+ }
-class spell_elder_nadox_guardian : public SpellScriptLoader
-{
-public:
- spell_elder_nadox_guardian() : SpellScriptLoader("spell_elder_nadox_guardian") { }
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ if (_targetCount)
+ {
+ if (Aura* aura = GetCaster()->GetAura(SPELL_SWARM_BUFF))
+ {
+ aura->SetStackAmount(_targetCount);
+ aura->RefreshDuration();
+ }
+ else
+ GetCaster()->CastCustomSpell(SPELL_SWARM_BUFF, SPELLVALUE_AURA_STACK, _targetCount, GetCaster(), TRIGGERED_FULL_MASK);
+ }
+ else
+ GetCaster()->RemoveAurasDueToSpell(SPELL_SWARM_BUFF);
+ }
- class spell_elder_nadox_guardian_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_elder_nadox_guardian_SpellScript);
+ void Register() override
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_ahn_kahet_swarm_SpellScript::CountTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
+ OnEffectHit += SpellEffectFn(spell_ahn_kahet_swarm_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- targets.remove_if(GuardianCheck());
- }
+ private:
+ uint32 _targetCount;
+ };
- void Register() OVERRIDE
+ SpellScript* GetSpellScript() const override
{
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_elder_nadox_guardian_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_elder_nadox_guardian_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ALLY);
+ return new spell_ahn_kahet_swarm_SpellScript();
}
- };
-
- SpellScript* GetSpellScript() const OVERRIDE
- {
- return new spell_elder_nadox_guardian_SpellScript();
- }
};
class achievement_respect_your_elders : public AchievementCriteriaScript
{
-public:
- achievement_respect_your_elders() : AchievementCriteriaScript("achievement_respect_your_elders") { }
-
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
- {
- if (!target)
- return false;
-
- if (Creature* Nadox = target->ToCreature())
- if (Nadox->AI()->GetData(DATA_RESPECT_YOUR_ELDERS))
- return true;
+ public:
+ achievement_respect_your_elders() : AchievementCriteriaScript("achievement_respect_your_elders") { }
- return false;
- }
+ bool OnCheck(Player* /*player*/, Unit* target) override
+ {
+ return target && target->GetAI()->GetData(DATA_RESPECT_YOUR_ELDERS);
+ }
};
void AddSC_boss_elder_nadox()
{
new boss_elder_nadox();
new npc_ahnkahar_nerubian();
- new npc_nadox_eggs();
- new spell_elder_nadox_guardian();
+ new spell_ahn_kahet_swarm();
new achievement_respect_your_elders();
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp
index 7555ba39206..1c042f4d185 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp
@@ -82,7 +82,7 @@ public:
return 100*(me->GetHealth()-damage)/me->GetMaxHealth();
}
- void DamageTaken(Unit* /*pAttacker*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*pAttacker*/, uint32 &damage) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
damage = 0;
@@ -95,7 +95,7 @@ public:
}
}
- void SpellHitTarget(Unit* target, const SpellInfo* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, const SpellInfo* spell) override
{
if (spell->Id == SPELL_INSANITY)
{
@@ -143,7 +143,7 @@ public:
}
}
- void Reset() OVERRIDE
+ void Reset() override
{
uiMindFlayTimer = 8*IN_MILLISECONDS;
uiShadowBoltVolleyTimer = 5*IN_MILLISECONDS;
@@ -165,7 +165,7 @@ public:
me->SetControlled(false, UNIT_STATE_STUNNED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
@@ -173,7 +173,7 @@ public:
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_QUICK_DEMISE_START_EVENT);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
Summons.Summon(summon);
}
@@ -202,7 +202,7 @@ public:
return spell;
}
- void SummonedCreatureDespawn(Creature* summon) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summon) override
{
uint32 phase = summon->GetPhaseMask();
uint32 nextPhase = 0;
@@ -211,7 +211,7 @@ public:
// Check if all summons in this phase killed
for (SummonList::const_iterator iter = Summons.begin(); iter != Summons.end(); ++iter)
{
- if (Creature* visage = Unit::GetCreature(*me, *iter))
+ if (Creature* visage = ObjectAccessor::GetCreature(*me, *iter))
{
// Not all are dead
if (phase == visage->GetPhaseMask())
@@ -246,7 +246,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -285,7 +285,7 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -295,14 +295,14 @@ public:
ResetPlayersPhaseMask();
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_volazjAI>(creature);
}
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 f599e6e7c27..bc6807c54d9 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
@@ -87,7 +87,7 @@ public:
bool volunteerWork;
bool bFirstTime;
- void Reset() OVERRIDE
+ void Reset() override
{
uiOpFerTimer = urand(15*IN_MILLISECONDS, 20*IN_MILLISECONDS);
@@ -112,7 +112,7 @@ public:
bFirstTime = false;
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (!instance || (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_JEDOGA_CONTROLLER))
return;
@@ -122,7 +122,7 @@ public:
instance->SetBossState(DATA_JEDOGA_SHADOWSEEKER, IN_PROGRESS);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who || (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_JEDOGA_CONTROLLER))
return;
@@ -130,7 +130,7 @@ public:
ScriptedAI::AttackStart(who);
}
- void KilledUnit(Unit* Victim) OVERRIDE
+ void KilledUnit(Unit* Victim) override
{
if (!Victim || Victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -138,19 +138,19 @@ public:
Talk(TEXT_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(TEXT_DEATH);
instance->SetBossState(DATA_JEDOGA_SHADOWSEEKER, DONE);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_INITIAND_KILLED)
volunteerWork = false;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_VOLUNTEER_WORK)
return volunteerWork ? 1 : 0;
@@ -158,7 +158,7 @@ public:
return 0;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!instance || !who || (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_JEDOGA_CONTROLLER))
return;
@@ -212,7 +212,7 @@ public:
}
else
{
- if (Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_PL_JEDOGA_TARGET)))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_PL_JEDOGA_TARGET)))
{
AttackStart(target);
instance->SetData(DATA_JEDOGA_RESET_INITIANDS, 0);
@@ -266,7 +266,7 @@ public:
bCanDown = true;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) != IN_PROGRESS && instance->GetData(DATA_ALL_INITIAND_DEAD))
MoveDown();
@@ -319,7 +319,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_jedoga_shadowseekerAI>(creature);
}
@@ -343,7 +343,7 @@ public:
bool bWalking;
- void Reset() OVERRIDE
+ void Reset() override
{
bWalking = false;
bCheckTimer = 2*IN_MILLISECONDS;
@@ -364,7 +364,7 @@ public:
}
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
if (!killer || !instance)
return;
@@ -373,8 +373,8 @@ public:
{
if (Creature* boss = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_JEDOGA_SHADOWSEEKER)))
{
- if (!CAST_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerok)
- CAST_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerokFail = true;
+ if (!ENSURE_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerok)
+ ENSURE_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerokFail = true;
if (killer->GetTypeId() == TYPEID_PLAYER)
boss->AI()->DoAction(ACTION_INITIAND_KILLED);
@@ -388,11 +388,11 @@ public:
instance->SetData64(DATA_PL_JEDOGA_TARGET, killer->GetGUID());
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void AttackStart(Unit* victim) OVERRIDE
+ void AttackStart(Unit* victim) override
{
if ((instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) == IN_PROGRESS) || !victim)
return;
@@ -400,7 +400,7 @@ public:
ScriptedAI::AttackStart(victim);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if ((instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) == IN_PROGRESS) || !who)
@@ -409,7 +409,7 @@ public:
ScriptedAI::MoveInLineOfSight(who);
}
- void MovementInform(uint32 uiType, uint32 uiPointId) OVERRIDE
+ void MovementInform(uint32 uiType, uint32 uiPointId) override
{
if (uiType != POINT_MOTION_TYPE || !instance)
return;
@@ -421,8 +421,8 @@ public:
Creature* boss = me->GetMap()->GetCreature(instance->GetData64(DATA_JEDOGA_SHADOWSEEKER));
if (boss)
{
- CAST_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerok = true;
- CAST_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerokFail = false;
+ ENSURE_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerok = true;
+ ENSURE_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerokFail = false;
me->Kill(me);
}
}
@@ -430,7 +430,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (bCheckTimer <= diff)
{
@@ -482,7 +482,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_jedoga_initiandAI>(creature);
}
@@ -522,13 +522,13 @@ public:
bool bCast;
bool bCast2;
- void Reset() OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void AttackStart(Unit* /*victim*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void Reset() override { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void AttackStart(Unit* /*victim*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!bRemoved && me->GetPositionX() > 440.0f)
{
@@ -565,7 +565,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_jedogas_aufseher_triggerAI>(creature);
}
@@ -578,7 +578,7 @@ class achievement_volunteer_work : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
index 3541ad0f1a3..9cc8540342f 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
@@ -50,7 +50,7 @@ enum Misc
};
#define DATA_SPHERE_DISTANCE 25.0f
-#define DATA_SPHERE_ANGLE_OFFSET M_PI / 2
+#define DATA_SPHERE_ANGLE_OFFSET float(M_PI) / 2
#define DATA_GROUND_POSITION_Z 11.30809f
enum Yells
@@ -93,7 +93,7 @@ class boss_prince_taldaram : public CreatureScript
_embraceTakenDamage = 0;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
_flameSphereTargetGUID = 0;
@@ -101,7 +101,7 @@ class boss_prince_taldaram : public CreatureScript
_embraceTakenDamage = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -125,7 +125,7 @@ class boss_prince_taldaram : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -204,7 +204,7 @@ class boss_prince_taldaram : public CreatureScript
DoMeleeAttackIfReady();
}
- void DamageTaken(Unit* /*doneBy*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*doneBy*/, uint32& damage) override
{
Unit* embraceTarget = GetEmbraceTarget();
@@ -219,13 +219,13 @@ class boss_prince_taldaram : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
_JustDied();
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -272,7 +272,7 @@ class boss_prince_taldaram : public CreatureScript
uint32 _embraceTakenDamage;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetAhnKahetAI<boss_prince_taldaramAI>(creature);
}
@@ -291,7 +291,7 @@ class npc_prince_taldaram_flame_sphere : public CreatureScript
_flameSphereTargetGUID = 0;
}
- void Reset() OVERRIDE
+ void Reset() override
{
DoCast(me, SPELL_FLAME_SPHERE_SPAWN_EFFECT, true);
DoCast(me, SPELL_FLAME_SPHERE_VISUAL, true);
@@ -302,15 +302,15 @@ class npc_prince_taldaram_flame_sphere : public CreatureScript
_events.ScheduleEvent(EVENT_DESPAWN, 13 * IN_MILLISECONDS);
}
- void SetGUID(uint64 guid, int32 /*id = 0*/) OVERRIDE
+ void SetGUID(uint64 guid, int32 /*id = 0*/) override
{
_flameSphereTargetGUID = guid;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
@@ -367,7 +367,7 @@ class npc_prince_taldaram_flame_sphere : public CreatureScript
uint64 _flameSphereTargetGUID;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_prince_taldaram_flame_sphereAI(creature);
}
@@ -379,7 +379,7 @@ class go_prince_taldaram_sphere : public GameObjectScript
public:
go_prince_taldaram_sphere() : GameObjectScript("go_prince_taldaram_sphere") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
InstanceScript* instance = go->GetInstanceScript();
if (!instance)
@@ -403,7 +403,7 @@ class go_prince_taldaram_sphere : public GameObjectScript
break;
}
- CAST_AI(boss_prince_taldaram::boss_prince_taldaramAI, PrinceTaldaram->AI())->CheckSpheres();
+ ENSURE_AI(boss_prince_taldaram::boss_prince_taldaramAI, PrinceTaldaram->AI())->CheckSpheres();
}
return true;
}
@@ -419,7 +419,7 @@ class spell_prince_taldaram_conjure_flame_sphere : public SpellScriptLoader
{
PrepareSpellScript(spell_prince_taldaram_conjure_flame_sphere_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_FLAME_SPHERE_SUMMON_1)
|| !sSpellMgr->GetSpellInfo(SPELL_FLAME_SPHERE_SUMMON_2)
@@ -440,13 +440,13 @@ class spell_prince_taldaram_conjure_flame_sphere : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_prince_taldaram_conjure_flame_sphere_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_prince_taldaram_conjure_flame_sphere_SpellScript();
}
@@ -468,13 +468,13 @@ class spell_prince_taldaram_flame_sphere_summon : public SpellScriptLoader
dest.RelocateOffset(offset);
}
- void Register() OVERRIDE
+ void Register() override
{
OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_prince_taldaram_flame_sphere_summon_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_prince_taldaram_flame_sphere_summon_SpellScript();
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp
index 6f03228ad76..bf7b4355ea6 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp
@@ -55,7 +55,7 @@ class instance_ahnkahet : public InstanceMapScript
InitiandGUIDs.clear();
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -82,7 +82,7 @@ class instance_ahnkahet : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -117,7 +117,7 @@ class instance_ahnkahet : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -129,7 +129,7 @@ class instance_ahnkahet : public InstanceMapScript
}
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -141,9 +141,9 @@ class instance_ahnkahet : public InstanceMapScript
SwitchTrigger = data;
break;
case DATA_JEDOGA_RESET_INITIANDS:
- for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr)
+ for (uint64 guid : InitiandGUIDs)
{
- if (Creature* creature = instance->GetCreature(*itr))
+ if (Creature* creature = instance->GetCreature(guid))
{
creature->Respawn();
if (!creature->IsInEvadeMode())
@@ -156,7 +156,7 @@ class instance_ahnkahet : public InstanceMapScript
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -164,9 +164,9 @@ class instance_ahnkahet : public InstanceMapScript
case DATA_SPHERE_2:
return SpheresState[type - DATA_SPHERE_1];
case DATA_ALL_INITIAND_DEAD:
- for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr)
+ for (uint64 guid : InitiandGUIDs)
{
- Creature* cr = instance->GetCreature(*itr);
+ Creature* cr = instance->GetCreature(guid);
if (!cr || cr->IsAlive())
return 0;
}
@@ -179,7 +179,7 @@ class instance_ahnkahet : public InstanceMapScript
return 0;
}
- void SetData64(uint32 type, uint64 data) OVERRIDE
+ void SetData64(uint32 type, uint64 data) override
{
switch (type)
{
@@ -194,7 +194,7 @@ class instance_ahnkahet : public InstanceMapScript
}
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -214,11 +214,11 @@ class instance_ahnkahet : public InstanceMapScript
{
std::vector<uint64> vInitiands;
vInitiands.clear();
- for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr)
+ for (uint64 guid : InitiandGUIDs)
{
- Creature* cr = instance->GetCreature(*itr);
+ Creature* cr = instance->GetCreature(guid);
if (cr && cr->IsAlive())
- vInitiands.push_back(*itr);
+ vInitiands.push_back(guid);
}
if (vInitiands.empty())
return 0;
@@ -235,7 +235,7 @@ class instance_ahnkahet : public InstanceMapScript
return 0;
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -245,9 +245,9 @@ class instance_ahnkahet : public InstanceMapScript
case DATA_JEDOGA_SHADOWSEEKER:
if (state == DONE)
{
- for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr)
+ for (uint64 guid : InitiandGUIDs)
{
- if (Creature* cr = instance->GetCreature(*itr))
+ if (Creature* cr = instance->GetCreature(guid))
cr->DespawnOrUnsummon();
}
}
@@ -258,7 +258,7 @@ class instance_ahnkahet : public InstanceMapScript
return true;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -269,7 +269,7 @@ class instance_ahnkahet : public InstanceMapScript
return saveStream.str();
}
- void Load(char const* str) OVERRIDE
+ void Load(char const* str) override
{
if (!str)
{
@@ -321,7 +321,7 @@ class instance_ahnkahet : public InstanceMapScript
uint8 SwitchTrigger;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_ahnkahet_InstanceScript(map);
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
index 8a9fc2993a8..bf5855c3318 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
@@ -113,7 +113,7 @@ public:
SummonList Summons;
- void Reset() OVERRIDE
+ void Reset() override
{
CarrionBeetlesTimer = 8*IN_MILLISECONDS;
LeechingSwarmTimer = 20*IN_MILLISECONDS;
@@ -136,8 +136,7 @@ public:
Creature* DoSummonImpaleTarget(Unit* target)
{
- Position targetPos;
- target->GetPosition(&targetPos);
+ Position targetPos = target->GetPosition();
if (TempSummon* impaleTarget = me->SummonCreature(CREATURE_IMPALE_TARGET, targetPos, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 6*IN_MILLISECONDS))
{
@@ -151,7 +150,7 @@ public:
return NULL;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
DelayTimer = 0;
@@ -163,7 +162,7 @@ public:
instance->SetBossState(DATA_ANUBARAK, IN_PROGRESS);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -189,7 +188,7 @@ public:
}
break;
case IMPALE_PHASE_ATTACK:
- if (Creature* impaleTarget = Unit::GetCreature(*me, ImpaleTarget))
+ if (Creature* impaleTarget = ObjectAccessor::GetCreature(*me, ImpaleTarget))
{
impaleTarget->CastSpell(impaleTarget, SPELL_IMPALE_SPIKE, false);
impaleTarget->RemoveAurasDueToSpell(SPELL_IMPALE_SHAKEGROUND);
@@ -198,7 +197,7 @@ public:
ImpaleTimer = 1*IN_MILLISECONDS;
break;
case IMPALE_PHASE_DMG:
- if (Creature* impaleTarget = Unit::GetCreature(*me, ImpaleTarget))
+ if (Creature* impaleTarget = ObjectAccessor::GetCreature(*me, ImpaleTarget))
me->CastSpell(impaleTarget, SPELL_IMPALE_DMG, true);
ImpalePhase = IMPALE_PHASE_TARGET;
ImpaleTimer = 9*IN_MILLISECONDS;
@@ -326,14 +325,14 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
Summons.DespawnAll();
instance->SetBossState(DATA_ANUBARAK, DONE);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -341,13 +340,13 @@ public:
Talk(SAY_SLAY);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
Summons.Summon(summon);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_anub_arakAI>(creature);
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
index a7ad7dbfb4b..10d34be46b6 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
@@ -72,7 +72,7 @@ public:
float fMaxDistance;
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 9.0f);
me->SetFloatValue(UNIT_FIELD_COMBATREACH, 9.0f);
@@ -91,7 +91,7 @@ public:
}
//when Hadronox kills any enemy (that includes a party member) she will regain 10% of her HP if the target had Leech Poison on
- void KilledUnit(Unit* Victim) OVERRIDE
+ void KilledUnit(Unit* Victim) override
{
// not sure if this aura check is correct, I think it is though
if (!Victim || !Victim->HasAura(DUNGEON_MODE(SPELL_LEECH_POISON, H_SPELL_LEECH_POISON)) || !me->IsAlive())
@@ -100,12 +100,12 @@ public:
me->ModifyHealth(int32(me->CountPctFromMaxHealth(10)));
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetBossState(DATA_HADRONOX, DONE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
instance->SetBossState(DATA_HADRONOX, IN_PROGRESS);
me->SetInCombatWithZone();
@@ -132,7 +132,7 @@ public:
EnterEvadeMode();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -188,7 +188,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_hadronoxAI>(creature);
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
index 916f60bd78a..00aa2120225 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
@@ -89,12 +89,12 @@ class boss_krik_thir : public CreatureScript
{
boss_krik_thirAI(Creature* creature) : BossAI(creature, DATA_KRIKTHIR_THE_GATEWATCHER) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
_EnterCombat();
@@ -115,7 +115,7 @@ class boss_krik_thir : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -153,13 +153,13 @@ class boss_krik_thir : public CreatureScript
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
_JustDied();
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -167,13 +167,13 @@ class boss_krik_thir : public CreatureScript
Talk(SAY_SLAY);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetAzjolNerubAI<boss_krik_thirAI>(creature);
}
@@ -188,13 +188,13 @@ class npc_skittering_infector : public CreatureScript
{
npc_skittering_infectorAI(Creature* creature) : ScriptedAI(creature) { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
DoCastAOE(SPELL_ACID_SPLASH);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetAzjolNerubAI<npc_skittering_infectorAI>(creature);
}
@@ -238,18 +238,18 @@ class npc_anub_ar_skirmisher : public CreatureScript
{
npc_anub_ar_skirmisherAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_ANUBAR_CHARGE, 11000);
events.ScheduleEvent(EVENT_BACKSTAB, 7000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -288,7 +288,7 @@ class npc_anub_ar_skirmisher : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetAzjolNerubAI<npc_anub_ar_skirmisherAI>(creature);
}
@@ -303,18 +303,18 @@ class npc_anub_ar_shadowcaster : public CreatureScript
{
npc_anub_ar_shadowcasterAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_SHADOW_BOLT, 6000);
events.ScheduleEvent(EVENT_SHADOW_NOVA, 15000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -349,7 +349,7 @@ class npc_anub_ar_shadowcaster : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetAzjolNerubAI<npc_anub_ar_shadowcasterAI>(creature);
}
@@ -364,18 +364,18 @@ class npc_anub_ar_warrior : public CreatureScript
{
npc_anub_ar_warriorAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_CLEAVE, 11000);
events.ScheduleEvent(EVENT_STRIKE, 6000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -409,7 +409,7 @@ class npc_anub_ar_warrior : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetAzjolNerubAI<npc_anub_ar_warriorAI>(creature);
}
@@ -427,26 +427,26 @@ class npc_watcher_gashra : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoCast(me, SPELL_ENRAGE, true);
_events.ScheduleEvent(EVENT_WEB_WRAP_GASHRA, 11000);
_events.ScheduleEvent(EVENT_INFECTED_BITE_GASHRA, 4000);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Creature* krikthir = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KRIKTHIR_THE_GATEWATCHER));
if (krikthir && krikthir->IsAlive())
krikthir->AI()->Talk(SAY_PREFIGHT);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -482,7 +482,7 @@ class npc_watcher_gashra : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetAzjolNerubAI<npc_watcher_gashraAI>(creature);
}
@@ -500,26 +500,26 @@ class npc_watcher_narjil : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_events.ScheduleEvent(EVENT_WEB_WRAP_NARJIL, 11000);
_events.ScheduleEvent(EVENT_INFECTED_BITE_NARJIL, 4000);
_events.ScheduleEvent(EVENT_BINDING_WEBS, 17000);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Creature* krikthir = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KRIKTHIR_THE_GATEWATCHER));
if (krikthir && krikthir->IsAlive())
krikthir->AI()->Talk(SAY_PREFIGHT);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -559,7 +559,7 @@ class npc_watcher_narjil : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetAzjolNerubAI<npc_watcher_narjilAI>(creature);
}
@@ -577,26 +577,26 @@ class npc_watcher_silthik : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_events.ScheduleEvent(EVENT_WEB_WRAP_SILTHIK, 11000);
_events.ScheduleEvent(EVENT_INFECTED_BITE_SILTHIK, 4000);
_events.ScheduleEvent(EVENT_POISON_SPRAY, 15000);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Creature* krikthir = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KRIKTHIR_THE_GATEWATCHER));
if (krikthir && krikthir->IsAlive())
krikthir->AI()->Talk(SAY_PREFIGHT);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -636,7 +636,7 @@ class npc_watcher_silthik : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetAzjolNerubAI<npc_watcher_silthikAI>(creature);
}
@@ -649,7 +649,7 @@ class achievement_watch_him_die : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp
index 0b641eea3bc..106d7e54150 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp
@@ -48,7 +48,7 @@ class instance_azjol_nerub : public InstanceMapScript
WatcherNarjilGUID = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -75,7 +75,7 @@ class instance_azjol_nerub : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -90,7 +90,7 @@ class instance_azjol_nerub : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -105,7 +105,7 @@ class instance_azjol_nerub : public InstanceMapScript
}
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -128,7 +128,7 @@ class instance_azjol_nerub : public InstanceMapScript
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -139,7 +139,7 @@ class instance_azjol_nerub : public InstanceMapScript
return saveStream.str();
}
- void Load(char const* str) OVERRIDE
+ void Load(char const* str) override
{
if (!str)
{
@@ -180,7 +180,7 @@ class instance_azjol_nerub : public InstanceMapScript
uint64 WatcherNarjilGUID;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_azjol_nerub_InstanceScript(map);
}
diff --git a/src/server/scripts/Northrend/CMakeLists.txt b/src/server/scripts/Northrend/CMakeLists.txt
index aff3c0a9528..8401ea4b9a5 100644
--- a/src/server/scripts/Northrend/CMakeLists.txt
+++ b/src/server/scripts/Northrend/CMakeLists.txt
@@ -20,7 +20,6 @@ set(scripts_STAT_SRCS
Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
- Northrend/Ulduar/Ulduar/ulduar_teleporter.cpp
Northrend/Ulduar/Ulduar/boss_thorim.cpp
Northrend/Ulduar/Ulduar/boss_ignis.cpp
Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
index 045564ce570..81e124cf5bc 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
@@ -134,7 +134,7 @@ public:
{
boss_sartharionAI(Creature* creature) : BossAI(creature, DATA_SARTHARION) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_isBerserk = false;
_isSoftEnraged = false;
@@ -150,12 +150,12 @@ public:
instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_SARTHARION_AGGRO);
_EnterCombat();
@@ -173,25 +173,25 @@ public:
events.ScheduleEvent(EVENT_CALL_VESPERON, 120000);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_SARTHARION_DEATH);
_JustDied();
- if (Creature* tenebron = Unit::GetCreature(*me, instance->GetData64(DATA_TENEBRON)))
+ if (Creature* tenebron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_TENEBRON)))
if (tenebron->IsAlive())
tenebron->DisappearAndDie();
- if (Creature* shadron = Unit::GetCreature(*me, instance->GetData64(DATA_SHADRON)))
+ if (Creature* shadron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADRON)))
if (shadron->IsAlive())
shadron->DisappearAndDie();
- if (Creature* vesperon = Unit::GetCreature(*me, instance->GetData64(DATA_VESPERON)))
+ if (Creature* vesperon = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_VESPERON)))
if (vesperon->IsAlive())
vesperon->DisappearAndDie();
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SARTHARION_SLAY);
@@ -211,7 +211,7 @@ public:
void DrakeRespawn() // Drakes respawning system
{
- if (Creature* tenebron = Unit::GetCreature(*me, instance->GetData64(DATA_TENEBRON)))
+ if (Creature* tenebron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_TENEBRON)))
{
tenebron->SetHomePosition(3239.07f, 657.235f, 86.8775f, 4.74729f);
if (tenebron->IsAlive())
@@ -231,7 +231,7 @@ public:
}
}
- if (Creature* shadron = Unit::GetCreature(*me, instance->GetData64(DATA_SHADRON)))
+ if (Creature* shadron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADRON)))
{
shadron->SetHomePosition(3363.06f, 525.28f, 98.362f, 4.76475f);
if (shadron->IsAlive())
@@ -251,7 +251,7 @@ public:
}
}
- if (Creature* vesperon = Unit::GetCreature(*me, instance->GetData64(DATA_VESPERON)))
+ if (Creature* vesperon = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_VESPERON)))
{
vesperon->SetHomePosition(3145.68f, 520.71f, 89.7f, 4.64258f);
if (vesperon->IsAlive())
@@ -280,7 +280,7 @@ public:
//if at least one of the dragons are alive and are being called
bool _canUseWill = false;
- if (Creature* fetchTene = Unit::GetCreature(*me, instance->GetData64(DATA_TENEBRON)))
+ if (Creature* fetchTene = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_TENEBRON)))
{
if (fetchTene->IsAlive() && !fetchTene->GetVictim())
{
@@ -298,7 +298,7 @@ public:
}
}
- if (Creature* fetchShad = Unit::GetCreature(*me, instance->GetData64(DATA_SHADRON)))
+ if (Creature* fetchShad = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADRON)))
{
if (fetchShad->IsAlive() && !fetchShad->GetVictim())
{
@@ -316,7 +316,7 @@ public:
}
}
- if (Creature* fetchVesp = Unit::GetCreature(*me, instance->GetData64(DATA_VESPERON)))
+ if (Creature* fetchVesp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_VESPERON)))
{
if (fetchVesp && fetchVesp->IsAlive() && !fetchVesp->GetVictim())
{
@@ -340,7 +340,7 @@ public:
void CallDragon(uint32 dataId)
{
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(dataId)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(dataId)))
{
if (temp->IsAlive() && !temp->GetVictim())
{
@@ -375,7 +375,7 @@ public:
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == TWILIGHT_ACHIEVEMENTS)
return drakeCount;
@@ -398,7 +398,7 @@ public:
Trinity::Containers::SelectRandomContainerElement(fireCyclonesList)->CastSpell(target, SPELL_LAVA_STRIKE, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -506,7 +506,7 @@ public:
uint8 drakeCount;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetObsidianSanctumAI<boss_sartharionAI>(creature);
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp
index be5a42517b5..0d07a9fde50 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp
@@ -32,7 +32,7 @@ public:
{
instance_obsidian_sanctum_InstanceMapScript(Map* map) : InstanceScript(map) { }
- void Initialize() OVERRIDE
+ void Initialize() override
{
sartharionGUID = 0;
tenebronGUID = 0;
@@ -40,7 +40,7 @@ public:
vesperonGUID = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -64,7 +64,7 @@ public:
}
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -82,7 +82,7 @@ public:
return true;
}
- uint64 GetData64(uint32 Data) const OVERRIDE
+ uint64 GetData64(uint32 Data) const override
{
switch (Data)
{
@@ -98,7 +98,7 @@ public:
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -109,7 +109,7 @@ public:
return saveStream.str();
}
- void Load(const char* str) OVERRIDE
+ void Load(const char* str) override
{
if (!str)
{
@@ -148,7 +148,7 @@ public:
uint64 vesperonGUID;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_obsidian_sanctum_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
index a24cd4db7c5..e332e7959ce 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
@@ -168,7 +168,7 @@ struct dummy_dragonAI : public ScriptedAI
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -180,7 +180,7 @@ struct dummy_dragonAI : public ScriptedAI
_canLoot = true;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
DoZoneInCombat();
@@ -189,13 +189,13 @@ struct dummy_dragonAI : public ScriptedAI
events.ScheduleEvent(EVENT_SHADOW_BREATH, 20000);
}
- void SetData(uint32 type, uint32 value) OVERRIDE
+ void SetData(uint32 type, uint32 value) override
{
if (type == DATA_CAN_LOOT)
- _canLoot = value;
+ _canLoot = value != 0;
}
- void MovementInform(uint32 type, uint32 pointId) OVERRIDE
+ void MovementInform(uint32 type, uint32 pointId) override
{
if (!instance || type != POINT_MOTION_TYPE)
return;
@@ -311,13 +311,13 @@ struct dummy_dragonAI : public ScriptedAI
// Refresh respawnTime so time again are set to 30secs?
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (!_canLoot)
me->SetLootRecipient(NULL);
@@ -365,7 +365,7 @@ struct dummy_dragonAI : public ScriptedAI
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -417,19 +417,19 @@ public:
{
npc_tenebronAI(Creature* creature) : dummy_dragonAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
dummy_dragonAI::Reset();
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
dummy_dragonAI::EnterCombat(who);
events.ScheduleEvent(EVENT_HATCH_EGGS, 30000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// if no target, update dummy and return
if (!UpdateVictim())
@@ -458,7 +458,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetObsidianSanctumAI<npc_tenebronAI>(creature);
}
@@ -477,7 +477,7 @@ public:
{
npc_shadronAI(Creature* creature) : dummy_dragonAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
dummy_dragonAI::Reset();
@@ -490,14 +490,14 @@ public:
instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
dummy_dragonAI::EnterCombat(who);
events.ScheduleEvent(EVENT_ACOLYTE_SHADRON, 60000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// if no target, update dummy and return
if (!UpdateVictim())
@@ -537,7 +537,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetObsidianSanctumAI<npc_shadronAI>(creature);
}
@@ -556,19 +556,19 @@ public:
{
npc_vesperonAI(Creature* creature) : dummy_dragonAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
dummy_dragonAI::Reset();
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
dummy_dragonAI::EnterCombat(who);
events.ScheduleEvent(EVENT_ACOLYTE_VESPERON, 60000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// if no target, update dummy and return
if (!UpdateVictim())
@@ -603,7 +603,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetObsidianSanctumAI<npc_vesperonAI>(creature);
}
@@ -625,7 +625,7 @@ class npc_acolyte_of_shadron : public CreatureScript
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
// Despawn the NPC automatically after 28 seconds
me->DespawnOrUnsummon(28000);
@@ -645,7 +645,7 @@ class npc_acolyte_of_shadron : public CreatureScript
me->AddAura(SPELL_TWILIGHT_SHIFT_ENTER, me);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADRON)))
instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED);
@@ -681,7 +681,7 @@ class npc_acolyte_of_shadron : public CreatureScript
debuffTarget->RemoveAurasDueToSpell(SPELL_GIFT_OF_TWILIGTH_SHA);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
return;
@@ -693,7 +693,7 @@ class npc_acolyte_of_shadron : public CreatureScript
InstanceScript* instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetObsidianSanctumAI<npc_acolyte_of_shadronAI>(creature);
}
@@ -715,7 +715,7 @@ class npc_acolyte_of_vesperon : public CreatureScript
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
// Despawn the NPC automatically after 28 seconds
me->DespawnOrUnsummon(28000);
@@ -725,7 +725,7 @@ class npc_acolyte_of_vesperon : public CreatureScript
DoCast(me, SPELL_TWILIGHT_TORMENT_VESP_ACO);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP_ACO);
@@ -765,7 +765,7 @@ class npc_acolyte_of_vesperon : public CreatureScript
instance->DoRemoveAurasDueToSpellOnPlayers(58835); // Components of spell Twilight Torment
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
return;
@@ -777,7 +777,7 @@ class npc_acolyte_of_vesperon : public CreatureScript
InstanceScript* instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetObsidianSanctumAI<npc_acolyte_of_vesperonAI>(creature);
}
@@ -805,7 +805,7 @@ public:
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->AddAura(SPELL_TWILIGHT_SHIFT_ENTER, me);
@@ -823,12 +823,12 @@ public:
me->DealDamage(me, me->GetHealth());
}
- void JustSummoned(Creature* who) OVERRIDE
+ void JustSummoned(Creature* who) override
{
who->SetInCombatWithZone();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -846,7 +846,7 @@ public:
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetObsidianSanctumAI<npc_twilight_eggsAI>(creature);
}
@@ -875,7 +875,7 @@ public:
me->AddAura(SPELL_FLAME_TSUNAMI, me);
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetReactState(REACT_PASSIVE);
events.ScheduleEvent(EVENT_TSUNAMI_TIMER, 100);
@@ -883,7 +883,7 @@ public:
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -908,7 +908,7 @@ public:
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_flame_tsunamiAI(creature);
}
@@ -935,7 +935,7 @@ public:
SetCombatMovement(false);
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->AddAura(46265, me); // Wrong, can't find proper visual
@@ -943,7 +943,7 @@ public:
events.ScheduleEvent(EVENT_VOID_BLAST, 5000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -962,7 +962,7 @@ public:
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_twilight_fissureAI(creature);
}
@@ -989,14 +989,14 @@ public:
Reset();
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->RemoveAllAuras();
me->SetInCombatWithZone();
events.ScheduleEvent(EVENT_FADE_ARMOR, 1000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1017,7 +1017,7 @@ public:
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_twilight_whelpAI(creature);
}
@@ -1028,7 +1028,7 @@ class achievement_twilight_assist : public AchievementCriteriaScript
public:
achievement_twilight_assist() : AchievementCriteriaScript("achievement_twilight_assist") { }
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
return target && target->GetAI()->GetData(TWILIGHT_ACHIEVEMENTS) >= 1;
}
@@ -1039,7 +1039,7 @@ class achievement_twilight_duo : public AchievementCriteriaScript
public:
achievement_twilight_duo() : AchievementCriteriaScript("achievement_twilight_duo") { }
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
return target && target->GetAI()->GetData(TWILIGHT_ACHIEVEMENTS) >= 2;
}
@@ -1050,7 +1050,7 @@ class achievement_twilight_zone : public AchievementCriteriaScript
public:
achievement_twilight_zone() : AchievementCriteriaScript("achievement_twilight_zone") { }
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
return target && target->GetAI()->GetData(TWILIGHT_ACHIEVEMENTS) == 3;
}
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 6c0acc9bba4..69605574f86 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
@@ -76,7 +76,7 @@ class boss_baltharus_the_warborn : public CreatureScript
_introDone = false;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
events.SetPhase(PHASE_INTRO);
@@ -85,7 +85,7 @@ class boss_baltharus_the_warborn : public CreatureScript
instance->SetData(DATA_BALTHARUS_SHARED_HEALTH, me->GetMaxHealth());
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -110,7 +110,7 @@ class boss_baltharus_the_warborn : public CreatureScript
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
me->InterruptNonMeleeSpells(false);
_EnterCombat();
@@ -122,7 +122,7 @@ class boss_baltharus_the_warborn : public CreatureScript
Talk(SAY_AGGRO);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
@@ -130,20 +130,20 @@ class boss_baltharus_the_warborn : public CreatureScript
xerestrasza->AI()->DoAction(ACTION_BALTHARUS_DEATH);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summons.Summon(summon);
summon->SetHealth(me->GetHealth());
summon->CastSpell(summon, SPELL_SPAWN_EFFECT, true);
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if (GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL)
{
@@ -162,7 +162,7 @@ class boss_baltharus_the_warborn : public CreatureScript
instance->SetData(DATA_BALTHARUS_SHARED_HEALTH, me->GetHealth() - damage);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
bool introPhase = events.IsInPhase(PHASE_INTRO);
if (!UpdateVictim() && !introPhase)
@@ -215,7 +215,7 @@ class boss_baltharus_the_warborn : public CreatureScript
bool _introDone;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetRubySanctumAI<boss_baltharus_the_warbornAI>(creature);
}
@@ -233,7 +233,7 @@ class npc_baltharus_the_warborn_clone : public CreatureScript
{
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
_events.Reset();
@@ -242,21 +242,21 @@ class npc_baltharus_the_warborn_clone : public CreatureScript
_events.ScheduleEvent(EVENT_ENERVATING_BRAND, urand(10000, 15000));
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
// Setting DATA_BALTHARUS_SHARED_HEALTH to 0 when killed would bug the boss.
if (_instance && me->GetHealth() > damage)
_instance->SetData(DATA_BALTHARUS_SHARED_HEALTH, me->GetHealth() - damage);
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
// This is here because DamageTaken wont trigger if the damage is deadly.
if (Creature* baltharus = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_BALTHARUS_THE_WARBORN)))
killer->Kill(baltharus);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -299,7 +299,7 @@ class npc_baltharus_the_warborn_clone : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetRubySanctumAI<npc_baltharus_the_warborn_cloneAI>(creature);
}
@@ -323,13 +323,13 @@ class spell_baltharus_enervating_brand_trigger : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnHit += SpellHitFn(spell_baltharus_enervating_brand_trigger_SpellScript::CheckDistance);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_baltharus_enervating_brand_trigger_SpellScript();
}
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 8ac095971bc..b5c20e95278 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
@@ -94,14 +94,14 @@ class boss_general_zarithrian : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
if (instance->GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE && instance->GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE)
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -111,36 +111,36 @@ class boss_general_zarithrian : public CreatureScript
events.ScheduleEvent(EVENT_SUMMON_ADDS, 40000);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
_JustReachedHome();
instance->SetBossState(DATA_GENERAL_ZARITHRIAN, FAIL);
}
// Override to not set adds in combat yet.
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summons.Summon(summon);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- bool CanAIAttack(Unit const* /*target*/) const OVERRIDE
+ bool CanAIAttack(Unit const* /*target*/) const override
{
return (instance->GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE && instance->GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -189,7 +189,7 @@ class boss_general_zarithrian : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetRubySanctumAI<boss_general_zarithrianAI>(creature);
}
@@ -207,7 +207,7 @@ class npc_onyx_flamecaller : public CreatureScript
npc_escortAI::SetDespawnAtEnd(false);
}
- void Reset() OVERRIDE
+ void Reset() override
{
_lavaGoutCount = 0;
me->setActive(true);
@@ -215,26 +215,26 @@ class npc_onyx_flamecaller : public CreatureScript
Start(true, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_events.Reset();
_events.ScheduleEvent(EVENT_BLAST_NOVA, urand(20000, 30000));
_events.ScheduleEvent(EVENT_LAVA_GOUT, 5000);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
// Prevent EvadeMode
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
// Let Zarithrian count as summoner.
if (Creature* zarithrian = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_GENERAL_ZARITHRIAN)))
zarithrian->AI()->JustSummoned(me);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (waypointId == MAX_PATH_FLAMECALLER_WAYPOINTS - 1 || waypointId == MAX_PATH_FLAMECALLER_WAYPOINTS * 2 - 1)
{
@@ -257,7 +257,7 @@ class npc_onyx_flamecaller : public CreatureScript
}
}
- void UpdateEscortAI(uint32 const diff) OVERRIDE
+ void UpdateEscortAI(uint32 const diff) override
{
if (!UpdateVictim())
return;
@@ -299,7 +299,7 @@ class npc_onyx_flamecaller : public CreatureScript
uint8 _lavaGoutCount;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetRubySanctumAI<npc_onyx_flamecallerAI>(creature);
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
index 47c876f2a52..43c295d5f64 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
@@ -199,8 +199,8 @@ uint8 const MAX_CORPOREALITY_STATE = 11;
struct CorporealityEntry
{
- uint32 materialRealmSpell;
uint32 twilightRealmSpell;
+ uint32 materialRealmSpell;
};
CorporealityEntry const _corporealityReference[MAX_CORPOREALITY_STATE] = {
@@ -221,7 +221,7 @@ struct generic_halionAI : public BossAI
{
generic_halionAI(Creature* creature, uint32 bossId) : BossAI(creature, bossId), _canEvade(false) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
me->AddAura(SPELL_TWILIGHT_PRECISION, me);
@@ -231,19 +231,19 @@ struct generic_halionAI : public BossAI
events.ScheduleEvent(EVENT_BREATH, urand(10000, 15000));
}
- void Reset() OVERRIDE
+ void Reset() override
{
_canEvade = false;
_Reset();
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
_JustReachedHome();
}
- void ExecuteEvent(uint32 eventId) OVERRIDE
+ void ExecuteEvent(uint32 eventId) override
{
switch (eventId)
{
@@ -262,7 +262,7 @@ struct generic_halionAI : public BossAI
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_CASTING))
return;
@@ -275,7 +275,7 @@ struct generic_halionAI : public BossAI
DoMeleeAttackIfReady();
}
- void SetData(uint32 index, uint32 dataValue) OVERRIDE
+ void SetData(uint32 index, uint32 dataValue) override
{
switch (index)
{
@@ -287,7 +287,7 @@ struct generic_halionAI : public BossAI
}
}
- void SpellHit(Unit* /*who*/, SpellInfo const* spellInfo) OVERRIDE
+ void SpellHit(Unit* /*who*/, SpellInfo const* spellInfo) override
{
if (spellInfo->Id == SPELL_TWILIGHT_MENDING)
Talk(SAY_REGENERATE);
@@ -309,7 +309,7 @@ class boss_halion : public CreatureScript
me->SetHomePosition(HalionSpawnPos);
}
- void Reset() OVERRIDE
+ void Reset() override
{
generic_halionAI::Reset();
me->SetReactState(REACT_DEFENSIVE);
@@ -317,14 +317,14 @@ class boss_halion : public CreatureScript
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
// Phase 1: We always can evade. Phase 2 & 3: We can evade if and only if the controller tells us to.
if (events.IsInPhase(PHASE_ONE) || _canEvade)
generic_halionAI::EnterEvadeMode();
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
Talk(SAY_AGGRO);
@@ -344,7 +344,7 @@ class boss_halion : public CreatureScript
controller->AI()->SetData(DATA_FIGHT_PHASE, PHASE_ONE);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
@@ -362,7 +362,7 @@ class boss_halion : public CreatureScript
Position const* GetMeteorStrikePosition() const { return &_meteorStrikePos; }
- void DamageTaken(Unit* attacker, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* attacker, uint32& damage) override
{
if (me->HealthBelowPctDamaged(75, damage) && events.IsInPhase(PHASE_ONE))
{
@@ -389,7 +389,7 @@ class boss_halion : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (events.IsInPhase(PHASE_TWO))
return;
@@ -404,7 +404,7 @@ class boss_halion : public CreatureScript
generic_halionAI::UpdateAI(diff);
}
- void ExecuteEvent(uint32 eventId) OVERRIDE
+ void ExecuteEvent(uint32 eventId) override
{
switch (eventId)
{
@@ -418,7 +418,7 @@ class boss_halion : public CreatureScript
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, -SPELL_TWILIGHT_REALM))
{
- target->GetPosition(&_meteorStrikePos);
+ _meteorStrikePos = target->GetPosition();
me->CastSpell(_meteorStrikePos.GetPositionX(), _meteorStrikePos.GetPositionY(), _meteorStrikePos.GetPositionZ(), SPELL_METEOR_STRIKE, true, NULL, NULL, me->GetGUID());
Talk(SAY_METEOR_STRIKE);
}
@@ -438,7 +438,7 @@ class boss_halion : public CreatureScript
}
}
- void SetData(uint32 index, uint32 value) OVERRIDE
+ void SetData(uint32 index, uint32 value) override
{
switch (index)
{
@@ -454,7 +454,7 @@ class boss_halion : public CreatureScript
Position _meteorStrikePos;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetRubySanctumAI<boss_halionAI>(creature);
}
@@ -485,7 +485,7 @@ class boss_twilight_halion : public CreatureScript
me->SetReactState(REACT_AGGRESSIVE);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
events.Reset();
events.SetPhase(PHASE_TWO);
@@ -498,9 +498,9 @@ class boss_twilight_halion : public CreatureScript
}
// Never evade
- void EnterEvadeMode() OVERRIDE { }
+ void EnterEvadeMode() override { }
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
@@ -509,7 +509,7 @@ class boss_twilight_halion : public CreatureScript
me->CastSpell(victim, SPELL_LEAVE_TWILIGHT_REALM, true);
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
if (Creature* halion = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_HALION)))
{
@@ -528,7 +528,7 @@ class boss_twilight_halion : public CreatureScript
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
}
- void DamageTaken(Unit* attacker, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* attacker, uint32& damage) override
{
if (me->HealthBelowPctDamaged(50, damage) && events.IsInPhase(PHASE_TWO))
{
@@ -550,7 +550,7 @@ class boss_twilight_halion : public CreatureScript
}
}
- void SpellHit(Unit* who, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* who, SpellInfo const* spell) override
{
switch (spell->Id)
{
@@ -564,7 +564,7 @@ class boss_twilight_halion : public CreatureScript
}
}
- void ExecuteEvent(uint32 eventId) OVERRIDE
+ void ExecuteEvent(uint32 eventId) override
{
switch (eventId)
{
@@ -583,7 +583,7 @@ class boss_twilight_halion : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetRubySanctumAI<boss_twilight_halionAI>(creature);
}
@@ -602,7 +602,7 @@ class npc_halion_controller : public CreatureScript
me->SetPhaseMask(me->GetPhaseMask() | 0x20, true);
}
- void Reset() OVERRIDE
+ void Reset() override
{
_summons.DespawnAll();
_events.Reset();
@@ -613,12 +613,12 @@ class npc_halion_controller : public CreatureScript
DoCast(me, SPELL_CLEAR_DEBUFFS);
}
- void JustSummoned(Creature* who) OVERRIDE
+ void JustSummoned(Creature* who) override
{
_summons.Summon(who);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_events.Reset();
_summons.DespawnAll();
@@ -626,7 +626,7 @@ class npc_halion_controller : public CreatureScript
DoCast(me, SPELL_CLEAR_DEBUFFS);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_twilightDamageTaken = 0;
_materialDamageTaken = 0;
@@ -634,7 +634,7 @@ class npc_halion_controller : public CreatureScript
_events.ScheduleEvent(EVENT_TRIGGER_BERSERK, 8 * MINUTE * IN_MILLISECONDS);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
if (Creature* twilightHalion = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_TWILIGHT_HALION)))
twilightHalion->DespawnOrUnsummon();
@@ -648,7 +648,7 @@ class npc_halion_controller : public CreatureScript
_instance->SetBossState(DATA_HALION, FAIL);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -690,7 +690,7 @@ class npc_halion_controller : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// The IsInCombat() check is needed because that check should be false when Halion is
// not engaged, while it would return true without as UpdateVictim() checks for
@@ -757,7 +757,7 @@ class npc_halion_controller : public CreatureScript
}
}
- void SetData(uint32 id, uint32 value) OVERRIDE
+ void SetData(uint32 id, uint32 value) override
{
switch (id)
{
@@ -855,7 +855,6 @@ class npc_halion_controller : public CreatureScript
{
if (Creature* halion = ObjectAccessor::GetCreature(*me, _instance->GetData64(itr)))
{
- RemoveCorporeality(halion, itr == DATA_TWILIGHT_HALION);
halion->CastSpell(halion, GetSpell(_materialCorporealityValue, itr == DATA_TWILIGHT_HALION), true);
if (itr == DATA_TWILIGHT_HALION)
@@ -866,19 +865,6 @@ class npc_halion_controller : public CreatureScript
}
}
- void RemoveCorporeality(Creature* who, bool isTwilight = false)
- {
- for (uint8 i = 0; i < MAX_CORPOREALITY_STATE; i++)
- {
- uint32 spellID = (isTwilight ? _corporealityReference[i].twilightRealmSpell : _corporealityReference[i].materialRealmSpell);
- if (who->HasAura(spellID))
- {
- who->RemoveAurasDueToSpell(spellID);
- break;
- }
- }
- }
-
uint32 GetSpell(uint8 pctValue, bool isTwilight = false) const
{
CorporealityEntry entry = _corporealityReference[pctValue];
@@ -894,7 +880,7 @@ class npc_halion_controller : public CreatureScript
uint8 _materialCorporealityValue;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetRubySanctumAI<npc_halion_controllerAI>(creature);
}
@@ -915,7 +901,7 @@ class npc_orb_carrier : public CreatureScript
ASSERT(creature->GetVehicleKit());
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
/// According to sniffs this spell is cast every 1 or 2 seconds.
/// However, refreshing it looks bad, so just cast the spell if
@@ -931,7 +917,7 @@ class npc_orb_carrier : public CreatureScript
me->SetFacingToObject(rotationFocus); // setInFront
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_SHOOT)
{
@@ -965,7 +951,7 @@ class npc_orb_carrier : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetRubySanctumAI<npc_orb_carrierAI>(creature);
}
@@ -984,7 +970,7 @@ class npc_meteor_strike_initial : public CreatureScript
SetCombatMovement(false);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -997,7 +983,7 @@ class npc_meteor_strike_initial : public CreatureScript
}
}
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
Creature* owner = summoner->ToCreature();
if (!owner)
@@ -1013,7 +999,6 @@ class npc_meteor_strike_initial : public CreatureScript
if (HalionAI* halionAI = CAST_AI(HalionAI, owner->AI()))
{
Position const* ownerPos = halionAI->GetMeteorStrikePosition();
- Position newPos;
float angle[4];
angle[0] = me->GetAngle(ownerPos);
angle[1] = me->GetAngle(ownerPos) - static_cast<float>(M_PI/2);
@@ -1025,21 +1010,21 @@ class npc_meteor_strike_initial : public CreatureScript
{
angle[i] = Position::NormalizeOrientation(angle[i]);
me->SetOrientation(angle[i]);
- me->GetNearPosition(newPos, 10.0f, 0.0f); // Exact distance
+ Position newPos = me->GetNearPosition(10.0f, 0.0f); // Exact distance
if (Creature* meteor = me->SummonCreature(NPC_METEOR_STRIKE_NORTH + i, newPos, TEMPSUMMON_TIMED_DESPAWN, 30000))
_meteorList.push_back(meteor);
}
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
- void EnterEvadeMode() OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
+ void EnterEvadeMode() override { }
private:
InstanceScript* _instance;
std::list<Creature*> _meteorList;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetRubySanctumAI<npc_meteor_strike_initialAI>(creature);
}
@@ -1061,7 +1046,7 @@ class npc_meteor_strike : public CreatureScript
SetCombatMovement(false);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_METEOR_STRIKE_BURN)
{
@@ -1071,14 +1056,14 @@ class npc_meteor_strike : public CreatureScript
}
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
// Let Halion Controller count as summoner.
if (Creature* controller = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_HALION_CONTROLLER)))
controller->AI()->JustSummoned(me);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_spawnCount > 5)
return;
@@ -1087,8 +1072,7 @@ class npc_meteor_strike : public CreatureScript
if (_events.ExecuteEvent() == EVENT_SPAWN_METEOR_FLAME)
{
- Position pos;
- me->GetNearPosition(pos, _range, 0.0f);
+ Position pos = me->GetNearPosition( _range, 0.0f);
if (Creature* flame = me->SummonCreature(NPC_METEOR_STRIKE_FLAME, pos, TEMPSUMMON_TIMED_DESPAWN, 25000))
{
@@ -1110,7 +1094,7 @@ class npc_meteor_strike : public CreatureScript
uint8 _spawnCount;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetRubySanctumAI<npc_meteor_strikeAI>(creature);
}
@@ -1150,7 +1134,7 @@ class npc_combustion_consumption : public CreatureScript
me->SetPhaseMask(0x01 | 0x20, true);
}
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
// Let Halion Controller count as summoner
if (Creature* controller = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_HALION_CONTROLLER)))
@@ -1159,7 +1143,7 @@ class npc_combustion_consumption : public CreatureScript
_summonerGuid = summoner->GetGUID();
}
- void SetData(uint32 type, uint32 stackAmount) OVERRIDE
+ void SetData(uint32 type, uint32 stackAmount) override
{
Unit* summoner = ObjectAccessor::GetUnit(*me, _summonerGuid);
@@ -1173,7 +1157,7 @@ class npc_combustion_consumption : public CreatureScript
summoner->CastCustomSpell(_explosionSpell, SPELLVALUE_BASE_POINT0, damage, summoner);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
private:
InstanceScript* _instance;
@@ -1182,7 +1166,7 @@ class npc_combustion_consumption : public CreatureScript
uint64 _summonerGuid;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetRubySanctumAI<npc_combustion_consumptionAI>(creature);
}
@@ -1197,7 +1181,7 @@ class npc_living_inferno : public CreatureScript
{
npc_living_infernoAI(Creature* creature) : ScriptedAI(creature) { }
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
me->SetInCombatWithZone();
me->CastSpell(me, SPELL_BLAZING_AURA, true);
@@ -1207,13 +1191,13 @@ class npc_living_inferno : public CreatureScript
controller->AI()->JustSummoned(me);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->DespawnOrUnsummon(1);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetRubySanctumAI<npc_living_infernoAI>(creature);
}
@@ -1229,30 +1213,30 @@ class npc_living_ember : public CreatureScript
{
npc_living_emberAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_hasEnraged = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_enrageTimer = 20000;
_hasEnraged = false;
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
if (InstanceScript* instance = me->GetInstanceScript())
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_HALION_CONTROLLER)))
controller->AI()->JustSummoned(me);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->DespawnOrUnsummon(1);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_CASTING))
return;
@@ -1272,7 +1256,7 @@ class npc_living_ember : public CreatureScript
bool _hasEnraged;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetRubySanctumAI<npc_living_emberAI>(creature);
}
@@ -1306,14 +1290,14 @@ class go_twilight_portal : public GameObjectScript
}
}
- bool GossipHello(Player* player) OVERRIDE
+ bool GossipHello(Player* player) override
{
if (_spellId != 0)
player->CastSpell(player, _spellId, true);
return true;
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (_instance->GetBossState(DATA_HALION) == IN_PROGRESS)
return;
@@ -1331,7 +1315,7 @@ class go_twilight_portal : public GameObjectScript
bool _deleted;
};
- GameObjectAI* GetAI(GameObject* gameobject) const OVERRIDE
+ GameObjectAI* GetAI(GameObject* gameobject) const override
{
return GetRubySanctumAI<go_twilight_portalAI>(gameobject);
}
@@ -1356,13 +1340,13 @@ class spell_halion_meteor_strike_marker : public SpellScriptLoader
creCaster->AI()->DoAction(ACTION_METEOR_STRIKE_AOE);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_halion_meteor_strike_marker_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_halion_meteor_strike_marker_AuraScript();
}
@@ -1380,7 +1364,7 @@ class spell_halion_combustion_consumption : public SpellScriptLoader
public:
spell_halion_combustion_consumption_AuraScript(uint32 spellID) : AuraScript(), _markSpell(spellID) { }
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(_markSpell))
return false;
@@ -1406,7 +1390,7 @@ class spell_halion_combustion_consumption : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), _markSpell, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_halion_combustion_consumption_AuraScript::AddMarkStack, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
AfterEffectApply += AuraEffectApplyFn(spell_halion_combustion_consumption_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
@@ -1416,7 +1400,7 @@ class spell_halion_combustion_consumption : public SpellScriptLoader
uint32 _markSpell;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_halion_combustion_consumption_AuraScript(_spellID);
}
@@ -1439,7 +1423,7 @@ class spell_halion_marks : public SpellScriptLoader
spell_halion_marks_AuraScript(uint32 summonSpell, uint32 removeSpell) : AuraScript(),
_summonSpellId(summonSpell), _removeSpellId(removeSpell) { }
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(_summonSpellId))
return false;
@@ -1466,7 +1450,7 @@ class spell_halion_marks : public SpellScriptLoader
GetTarget()->CastCustomSpell(_summonSpellId, SPELLVALUE_BASE_POINT1, aurEff->GetBase()->GetStackAmount(), GetTarget(), TRIGGERED_FULL_MASK, NULL, NULL, GetCasterGUID());
}
- void Register() OVERRIDE
+ void Register() override
{
OnDispel += AuraDispelFn(spell_halion_marks_AuraScript::BeforeDispel);
AfterEffectRemove += AuraEffectRemoveFn(spell_halion_marks_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
@@ -1476,7 +1460,7 @@ class spell_halion_marks : public SpellScriptLoader
uint32 _removeSpellId;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_halion_marks_AuraScript(_summonSpell, _removeSpell);
}
@@ -1503,20 +1487,19 @@ class spell_halion_damage_aoe_summon : public SpellScriptLoader
SummonPropertiesEntry const* properties = sSummonPropertiesStore.LookupEntry(uint32(GetSpellInfo()->Effects[effIndex].MiscValueB));
uint32 duration = uint32(GetSpellInfo()->GetDuration());
- Position pos;
- caster->GetPosition(&pos);
+ Position pos = caster->GetPosition();
if (Creature* summon = caster->GetMap()->SummonCreature(entry, pos, properties, duration, caster, GetSpellInfo()->Id))
if (summon->IsAIEnabled)
summon->AI()->SetData(DATA_STACKS_DISPELLED, GetSpellValue()->EffectBasePoints[EFFECT_1]);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_halion_damage_aoe_summon_SpellScript::HandleSummon, EFFECT_0, SPELL_EFFECT_SUMMON);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_halion_damage_aoe_summon_SpellScript();
}
@@ -1538,7 +1521,7 @@ class spell_halion_twilight_realm_handlers : public SpellScriptLoader
_isApply(isApplyHandler), _beforeHitSpellId(beforeHitSpell)
{ }
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(_beforeHitSpellId))
return false;
@@ -1563,7 +1546,7 @@ class spell_halion_twilight_realm_handlers : public SpellScriptLoader
instance->SendEncounterUnit(ENCOUNTER_FRAME_UNK7);
}
- void Register() OVERRIDE
+ void Register() override
{
if (!_isApply)
{
@@ -1578,7 +1561,7 @@ class spell_halion_twilight_realm_handlers : public SpellScriptLoader
uint32 _beforeHitSpellId;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_halion_twilight_realm_handlers_AuraScript(_beforeHitSpell, _isApplyHandler);
}
@@ -1597,7 +1580,7 @@ class spell_halion_clear_debuffs : public SpellScriptLoader
{
PrepareSpellScript(spell_halion_clear_debuffs_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_CLEAR_DEBUFFS))
return false;
@@ -1612,13 +1595,13 @@ class spell_halion_clear_debuffs : public SpellScriptLoader
GetHitUnit()->RemoveAurasDueToSpell(GetSpellInfo()->Effects[effIndex].CalcValue());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_halion_clear_debuffs_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_halion_clear_debuffs_SpellScript();
}
@@ -1664,13 +1647,13 @@ class spell_halion_twilight_cutter : public SpellScriptLoader
unitList.clear();
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_halion_twilight_cutter_SpellScript::RemoveNotBetween, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_halion_twilight_cutter_SpellScript();
}
@@ -1692,13 +1675,13 @@ class spell_halion_twilight_phasing : public SpellScriptLoader
caster->GetMap()->SummonCreature(NPC_TWILIGHT_HALION, HalionSpawnPos);
}
- void Register() OVERRIDE
+ void Register() override
{
OnHit += SpellHitFn(spell_halion_twilight_phasing_SpellScript::Phase);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_halion_twilight_phasing_SpellScript();
}
@@ -1726,14 +1709,14 @@ class spell_halion_summon_exit_portals : public SpellScriptLoader
dest.RelocateOffset(offset);
}
- void Register() OVERRIDE
+ void Register() override
{
OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_halion_summon_exit_portals_SpellScript::SetDest0, EFFECT_0, TARGET_DEST_CASTER);
OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_halion_summon_exit_portals_SpellScript::SetDest1, EFFECT_1, TARGET_DEST_CASTER);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_halion_summon_exit_portals_SpellScript();
}
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 bd5ab3d1a6e..199337b0631 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp
@@ -77,13 +77,13 @@ class boss_saviana_ragefire : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
me->SetReactState(REACT_AGGRESSIVE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -93,13 +93,13 @@ class boss_saviana_ragefire : public CreatureScript
events.ScheduleEvent(EVENT_FLIGHT, 60000);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
me->PlayDirectSound(SOUND_ID_DEATH);
}
- void MovementInform(uint32 type, uint32 point) OVERRIDE
+ void MovementInform(uint32 type, uint32 point) override
{
if (type != POINT_MOTION_TYPE && type != EFFECT_MOTION_TYPE)
return;
@@ -128,20 +128,20 @@ class boss_saviana_ragefire : public CreatureScript
}
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
_JustReachedHome();
me->SetCanFly(false);
me->SetDisableGravity(false);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -197,7 +197,7 @@ class boss_saviana_ragefire : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetRubySanctumAI<boss_saviana_ragefireAI>(creature);
}
@@ -238,14 +238,14 @@ class spell_saviana_conflagration_init : public SpellScriptLoader
GetCaster()->CastSpell(GetHitUnit(), SPELL_CONFLAGRATION_2, false);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_saviana_conflagration_init_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_init_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_saviana_conflagration_init_SpellScript();
}
@@ -267,13 +267,13 @@ class spell_saviana_conflagration_throwback : public SpellScriptLoader
GetHitUnit()->GetMotionMaster()->MovePoint(POINT_LAND, SavianaRagefireFlyInPos);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_throwback_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_saviana_conflagration_throwback_SpellScript();
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
index 1f8656853a2..eed8168eff8 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
@@ -67,7 +67,7 @@ class instance_ruby_sanctum : public InstanceMapScript
}
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -112,7 +112,7 @@ class instance_ruby_sanctum : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -155,7 +155,7 @@ class instance_ruby_sanctum : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -167,7 +167,7 @@ class instance_ruby_sanctum : public InstanceMapScript
}
}
- void OnUnitDeath(Unit* unit) OVERRIDE
+ void OnUnitDeath(Unit* unit) override
{
Creature* creature = unit->ToCreature();
if (!creature)
@@ -181,7 +181,7 @@ class instance_ruby_sanctum : public InstanceMapScript
}
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -224,7 +224,7 @@ class instance_ruby_sanctum : public InstanceMapScript
return 0;
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -278,7 +278,7 @@ class instance_ruby_sanctum : public InstanceMapScript
return true;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
if (type != DATA_BALTHARUS_SHARED_HEALTH)
return;
@@ -286,7 +286,7 @@ class instance_ruby_sanctum : public InstanceMapScript
BaltharusSharedHealth = data;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type != DATA_BALTHARUS_SHARED_HEALTH)
return 0;
@@ -294,7 +294,7 @@ class instance_ruby_sanctum : public InstanceMapScript
return BaltharusSharedHealth;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -305,14 +305,14 @@ class instance_ruby_sanctum : public InstanceMapScript
return saveStream.str();
}
- void FillInitialWorldStates(WorldPacket& data) OVERRIDE
+ void FillInitialWorldStates(WorldPacket& data) override
{
data << uint32(WORLDSTATE_CORPOREALITY_MATERIAL) << uint32(50);
data << uint32(WORLDSTATE_CORPOREALITY_TWILIGHT) << uint32(50);
data << uint32(WORLDSTATE_CORPOREALITY_TOGGLE) << uint32(0);
}
- void Load(char const* str) OVERRIDE
+ void Load(char const* str) override
{
if (!str)
{
@@ -365,7 +365,7 @@ class instance_ruby_sanctum : public InstanceMapScript
uint32 BaltharusSharedHealth;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_ruby_sanctum_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
index d0a46b01bd4..0d2b98dbd1c 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
@@ -60,13 +60,13 @@ class npc_xerestrasza : public CreatureScript
_introDone = false;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
me->RemoveFlag(UNIT_NPC_FLAGS, GOSSIP_OPTION_QUESTGIVER);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_BALTHARUS_DEATH)
{
@@ -92,7 +92,7 @@ class npc_xerestrasza : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_isIntro)
return;
@@ -138,7 +138,7 @@ class npc_xerestrasza : public CreatureScript
bool _introDone;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetRubySanctumAI<npc_xerestraszaAI>(creature);
}
@@ -149,7 +149,7 @@ class at_baltharus_plateau : public AreaTriggerScript
public:
at_baltharus_plateau() : AreaTriggerScript("at_baltharus_plateau") { }
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
{
// Only trigger once
if (InstanceScript* instance = player->GetInstanceScript())
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 773009b06d6..7e9e351ae9c 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
@@ -135,14 +135,14 @@ class spell_eadric_radiance : public SpellScriptLoader
unitList.remove_if(OrientationCheck(GetCaster()));
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_eadric_radiance_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_eadric_radiance_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_eadric_radiance_SpellScript();
}
@@ -170,7 +170,7 @@ public:
bool bDone;
- void Reset() OVERRIDE
+ void Reset() override
{
uiVenganceTimer = 10000;
uiRadianceTimer = 16000;
@@ -180,7 +180,7 @@ public:
bDone = false;
}
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
if (damage >= me->GetHealth())
{
@@ -191,7 +191,7 @@ public:
}
}
- void MovementInform(uint32 MovementType, uint32 /*Data*/) OVERRIDE
+ void MovementInform(uint32 MovementType, uint32 /*Data*/) override
{
if (MovementType != POINT_MOTION_TYPE)
return;
@@ -201,7 +201,7 @@ public:
me->DisappearAndDie();
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (bDone && uiResetTimer <= uiDiff)
{
@@ -245,7 +245,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_eadricAI>(creature);
}
@@ -279,7 +279,7 @@ public:
uint32 uiRenewTimer;
uint32 uiResetTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
me->RemoveAllAuras();
@@ -292,18 +292,18 @@ public:
bHealth = false;
bDone = false;
- if (Creature* pMemory = Unit::GetCreature(*me, MemoryGUID))
+ if (Creature* pMemory = ObjectAccessor::GetCreature(*me, MemoryGUID))
if (pMemory->IsAlive())
pMemory->RemoveFromWorld();
}
- void SetData(uint32 uiId, uint32 /*uiValue*/) OVERRIDE
+ void SetData(uint32 uiId, uint32 /*uiValue*/) override
{
if (uiId == 1)
me->RemoveAura(SPELL_SHIELD);
}
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
if (damage >= me->GetHealth())
{
@@ -314,7 +314,7 @@ public:
}
}
- void MovementInform(uint32 MovementType, uint32 Point) OVERRIDE
+ void MovementInform(uint32 MovementType, uint32 Point) override
{
if (MovementType != POINT_MOTION_TYPE || Point != 0)
return;
@@ -324,7 +324,7 @@ public:
me->DisappearAndDie();
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (bDone && uiResetTimer <= uiDiff)
{
@@ -373,7 +373,7 @@ public:
DoCast(me, SPELL_RENEW);
break;
case 1:
- if (Creature* pMemory = Unit::GetCreature(*me, MemoryGUID))
+ if (Creature* pMemory = ObjectAccessor::GetCreature(*me, MemoryGUID))
if (pMemory->IsAlive())
DoCast(pMemory, SPELL_RENEW);
break;
@@ -396,13 +396,13 @@ public:
DoMeleeAttackIfReady();
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
MemoryGUID = summon->GetGUID();
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_paletressAI>(creature);
}
@@ -421,14 +421,14 @@ public:
uint32 uiShadowPastTimer;
uint32 uiWakingNightmare;
- void Reset() OVERRIDE
+ void Reset() override
{
uiOldWoundsTimer = 12000;
uiShadowPastTimer = 5000;
uiWakingNightmare = 7000;
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!UpdateVictim())
return;
@@ -462,7 +462,7 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (TempSummon* summ = me->ToTempSummon())
if (Unit* summoner = summ->GetSummoner())
@@ -471,7 +471,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_memoryAI(creature);
}
@@ -497,7 +497,7 @@ public:
uint8 uiWaypoint;
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (waypointId == 0)
{
@@ -516,7 +516,7 @@ public:
}
}
- void SetData(uint32 uiType, uint32 /*uiData*/) OVERRIDE
+ void SetData(uint32 uiType, uint32 /*uiData*/) override
{
switch (me->GetEntry())
{
@@ -568,7 +568,7 @@ public:
uiWaypoint = uiType;
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
npc_escortAI::UpdateAI(uiDiff);
@@ -578,13 +578,13 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_ARGENT_SOLDIER_DEFEATED, instance->GetData(DATA_ARGENT_SOLDIER_DEFEATED) + 1);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_argent_soldierAI>(creature);
}
@@ -629,7 +629,7 @@ class spell_paletress_summon_memory : public SpellScriptLoader
{
PrepareSpellScript(spell_paletress_summon_memory_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
for (uint8 i = 0; i < 25; ++i)
if (!sSpellMgr->GetSpellInfo(memorySpellId[i]))
@@ -652,14 +652,14 @@ class spell_paletress_summon_memory : public SpellScriptLoader
GetHitUnit()->CastSpell(GetHitUnit(), memorySpellId[urand(0, 24)], true, NULL, NULL, GetCaster()->GetGUID());
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_paletress_summon_memory_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnEffectHitTarget += SpellEffectFn(spell_paletress_summon_memory_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_paletress_summon_memory_SpellScript();
}
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 5a0cd7cc3d2..a8aff70b034 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp
@@ -108,7 +108,7 @@ public:
uint32 uiDeathBiteTimer;
uint32 uiMarkedDeathTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
RemoveSummons();
me->SetDisplayId(me->GetNativeDisplayId());
@@ -140,20 +140,20 @@ public:
for (std::list<uint64>::const_iterator itr = SummonList.begin(); itr != SummonList.end(); ++itr)
{
- if (Creature* temp = Unit::GetCreature(*me, *itr))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, *itr))
if (temp)
temp->DisappearAndDie();
}
SummonList.clear();
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
SummonList.push_back(summon->GetGUID());
summon->AI()->AttackStart(me->GetVictim());
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -268,7 +268,7 @@ public:
DoMeleeAttackIfReady();
}
- void DamageTaken(Unit* /*pDoneBy*/, uint32& uiDamage) OVERRIDE
+ void DamageTaken(Unit* /*pDoneBy*/, uint32& uiDamage) override
{
if (uiDamage > me->GetHealth() && uiPhase <= PHASE_SKELETON)
{
@@ -289,7 +289,7 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
DoCast(me, SPELL_KILL_CREDIT);
@@ -297,7 +297,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_black_knightAI>(creature);
}
@@ -314,12 +314,12 @@ public:
uint32 uiAttackTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiAttackTimer = 3500;
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!UpdateVictim())
return;
@@ -338,7 +338,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_risen_ghoulAI(creature);
}
@@ -356,12 +356,12 @@ public:
Start(false, true, 0, NULL);
}
- void WaypointReached(uint32 /*waypointId*/) OVERRIDE
+ void WaypointReached(uint32 /*waypointId*/) override
{
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
npc_escortAI::UpdateAI(uiDiff);
@@ -371,7 +371,7 @@ public:
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_black_knight_skeletal_gryphonAI(creature);
}
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 d2f6b8a3420..7dd935e86f0 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
@@ -126,9 +126,9 @@ bool GrandChampionsOutVehicle(Creature* me)
if (!instance)
return false;
- Creature* pGrandChampion1 = Unit::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_1));
- Creature* pGrandChampion2 = Unit::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_2));
- Creature* pGrandChampion3 = Unit::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_3));
+ Creature* pGrandChampion1 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_1));
+ Creature* pGrandChampion2 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_2));
+ Creature* pGrandChampion3 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_3));
if (pGrandChampion1 && pGrandChampion2 && pGrandChampion3)
{
@@ -169,14 +169,14 @@ public:
uint32 uiWaypointPath;
- void Reset() OVERRIDE
+ void Reset() override
{
uiChargeTimer = 5000;
uiShieldBreakerTimer = 8000;
uiBuffTimer = urand(30000, 60000);
}
- void SetData(uint32 uiType, uint32 /*uiData*/) OVERRIDE
+ void SetData(uint32 uiType, uint32 /*uiData*/) override
{
switch (uiType)
{
@@ -205,7 +205,7 @@ public:
Start(false, true, 0, NULL);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -219,7 +219,7 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoCastSpellShield();
}
@@ -230,7 +230,7 @@ public:
DoCast(me, SPELL_SHIELD, true);
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
npc_escortAI::UpdateAI(uiDiff);
@@ -295,7 +295,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<generic_vehicleAI_toc5AI>(creature);
}
@@ -337,14 +337,14 @@ public:
bool bDone;
bool bHome;
- void Reset() OVERRIDE
+ void Reset() override
{
uiBladeStormTimer = urand(15000, 20000);
uiInterceptTimer = 7000;
uiMortalStrikeTimer = urand(8000, 12000);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
ScriptedAI::JustReachedHome();
@@ -357,7 +357,7 @@ public:
bHome = false;
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!bDone && GrandChampionsOutVehicle(me))
{
@@ -421,13 +421,13 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(BOSS_GRAND_CHAMPIONS, DONE);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_warrior_toc5AI>(creature);
}
@@ -469,7 +469,7 @@ public:
bool bDone;
bool bHome;
- void Reset() OVERRIDE
+ void Reset() override
{
uiFireBallTimer = 5000;
uiPolymorphTimer = 8000;
@@ -477,7 +477,7 @@ public:
uiHasteTimer = 22000;
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
ScriptedAI::JustReachedHome();
@@ -490,7 +490,7 @@ public:
bHome = false;
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!bDone && GrandChampionsOutVehicle(me))
{
@@ -558,13 +558,13 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(BOSS_GRAND_CHAMPIONS, DONE);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_mage_toc5AI>(creature);
}
@@ -606,7 +606,7 @@ public:
bool bDone;
bool bHome;
- void Reset() OVERRIDE
+ void Reset() override
{
uiChainLightningTimer = 16000;
uiHealingWaveTimer = 12000;
@@ -614,13 +614,13 @@ public:
uiHexMendingTimer = urand(20000, 25000);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
DoCast(me, SPELL_EARTH_SHIELD);
DoCast(who, SPELL_HEX_OF_MENDING);
};
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
ScriptedAI::JustReachedHome();
@@ -633,7 +633,7 @@ public:
bHome = false;
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!bDone && GrandChampionsOutVehicle(me))
{
@@ -674,7 +674,7 @@ public:
if (uiHealingWaveTimer <= uiDiff)
{
- bool bChance = urand(0, 1);
+ bool bChance = roll_chance_i(50);
if (!bChance)
{
@@ -703,13 +703,13 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(BOSS_GRAND_CHAMPIONS, DONE);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_shaman_toc5AI>(creature);
}
@@ -753,7 +753,7 @@ public:
bool bDone;
bool bHome;
- void Reset() OVERRIDE
+ void Reset() override
{
uiShootTimer = 12000;
uiMultiShotTimer = 0;
@@ -764,7 +764,7 @@ public:
bShoot = false;
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
ScriptedAI::JustReachedHome();
@@ -777,7 +777,7 @@ public:
bHome = false;
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!bDone && GrandChampionsOutVehicle(me))
{
@@ -829,7 +829,7 @@ public:
if (bShoot && uiMultiShotTimer <= uiDiff)
{
me->InterruptNonMeleeSpells(true);
- Unit* target = Unit::GetUnit(*me, uiTargetGUID);
+ Unit* target = ObjectAccessor::GetUnit(*me, uiTargetGUID);
if (target && me->IsInRange(target, 5.0f, 30.0f, false))
{
@@ -857,13 +857,13 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(BOSS_GRAND_CHAMPIONS, DONE);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_hunter_toc5AI>(creature);
}
@@ -903,14 +903,14 @@ public:
bool bDone;
bool bHome;
- void Reset() OVERRIDE
+ void Reset() override
{
uiEviscerateTimer = 8000;
uiFanKivesTimer = 14000;
uiPosionBottleTimer = 19000;
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
ScriptedAI::JustReachedHome();
@@ -923,7 +923,7 @@ public:
bHome = false;
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!bDone && GrandChampionsOutVehicle(me))
{
@@ -976,13 +976,13 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(BOSS_GRAND_CHAMPIONS, DONE);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_rouge_toc5AI>(creature);
}
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 1f8b281b807..ac8a7969c9d 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
@@ -34,7 +34,7 @@ class instance_trial_of_the_champion : public InstanceMapScript
public:
instance_trial_of_the_champion() : InstanceMapScript("instance_trial_of_the_champion", 650) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_trial_of_the_champion_InstanceMapScript(map);
}
@@ -66,7 +66,7 @@ public:
bool bDone;
- void Initialize() OVERRIDE
+ void Initialize() override
{
uiMovementDone = 0;
uiGrandChampionsDeaths = 0;
@@ -90,7 +90,7 @@ public:
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
}
- bool IsEncounterInProgress() const OVERRIDE
+ bool IsEncounterInProgress() const override
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
{
@@ -101,7 +101,7 @@ public:
return false;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
Map::PlayerList const &players = instance->GetPlayers();
uint32 TeamInInstance = 0;
@@ -117,29 +117,29 @@ public:
// Champions
case VEHICLE_MOKRA_SKILLCRUSHER_MOUNT:
if (TeamInInstance == HORDE)
- creature->UpdateEntry(VEHICLE_MARSHAL_JACOB_ALERIUS_MOUNT, ALLIANCE);
+ creature->UpdateEntry(VEHICLE_MARSHAL_JACOB_ALERIUS_MOUNT);
break;
case VEHICLE_ERESSEA_DAWNSINGER_MOUNT:
if (TeamInInstance == HORDE)
- creature->UpdateEntry(VEHICLE_AMBROSE_BOLTSPARK_MOUNT, ALLIANCE);
+ creature->UpdateEntry(VEHICLE_AMBROSE_BOLTSPARK_MOUNT);
break;
case VEHICLE_RUNOK_WILDMANE_MOUNT:
if (TeamInInstance == HORDE)
- creature->UpdateEntry(VEHICLE_COLOSOS_MOUNT, ALLIANCE);
+ creature->UpdateEntry(VEHICLE_COLOSOS_MOUNT);
break;
case VEHICLE_ZUL_TORE_MOUNT:
if (TeamInInstance == HORDE)
- creature->UpdateEntry(VEHICLE_EVENSONG_MOUNT, ALLIANCE);
+ creature->UpdateEntry(VEHICLE_EVENSONG_MOUNT);
break;
case VEHICLE_DEATHSTALKER_VESCERI_MOUNT:
if (TeamInInstance == HORDE)
- creature->UpdateEntry(VEHICLE_LANA_STOUTHAMMER_MOUNT, ALLIANCE);
+ creature->UpdateEntry(VEHICLE_LANA_STOUTHAMMER_MOUNT);
break;
// Coliseum Announcer || Just NPC_JAEREN must be spawned.
case NPC_JAEREN:
uiAnnouncerGUID = creature->GetGUID();
if (TeamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_ARELAS, ALLIANCE);
+ creature->UpdateEntry(NPC_ARELAS);
break;
case VEHICLE_ARGENT_WARHORSE:
case VEHICLE_ARGENT_BATTLEWORG:
@@ -152,7 +152,7 @@ public:
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -166,7 +166,7 @@ public:
}
}
- void SetData(uint32 uiType, uint32 uiData) OVERRIDE
+ void SetData(uint32 uiType, uint32 uiData) override
{
switch (uiType)
{
@@ -235,7 +235,7 @@ public:
SaveToDB();
}
- uint32 GetData(uint32 uiData) const OVERRIDE
+ uint32 GetData(uint32 uiData) const override
{
switch (uiData)
{
@@ -251,7 +251,7 @@ public:
return 0;
}
- uint64 GetData64(uint32 uiData) const OVERRIDE
+ uint64 GetData64(uint32 uiData) const override
{
switch (uiData)
{
@@ -266,7 +266,7 @@ public:
return 0;
}
- void SetData64(uint32 uiType, uint64 uiData) OVERRIDE
+ void SetData64(uint32 uiType, uint64 uiData) override
{
switch (uiType)
{
@@ -282,7 +282,7 @@ public:
}
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -301,7 +301,7 @@ public:
return str_data;
}
- void Load(const char* in) OVERRIDE
+ void Load(const char* in) override
{
if (!in)
{
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp
index 8b6cbb340e5..e0930a1ae2e 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp
@@ -130,7 +130,7 @@ public:
uiPhase = uiPhaseStep;
}
- void SetData(uint32 uiType, uint32 /*uiData*/) OVERRIDE
+ void SetData(uint32 uiType, uint32 /*uiData*/) override
{
switch (uiType)
{
@@ -161,7 +161,7 @@ public:
}
for (std::list<uint64>::const_iterator itr = TempList.begin(); itr != TempList.end(); ++itr)
- if (Creature* summon = Unit::GetCreature(*me, *itr))
+ if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr))
AggroAllPlayers(summon);
}else if (uiLesserChampions == 9)
StartGrandChampionsAttack();
@@ -173,9 +173,9 @@ public:
void StartGrandChampionsAttack()
{
- Creature* pGrandChampion1 = Unit::GetCreature(*me, uiVehicle1GUID);
- Creature* pGrandChampion2 = Unit::GetCreature(*me, uiVehicle2GUID);
- Creature* pGrandChampion3 = Unit::GetCreature(*me, uiVehicle3GUID);
+ Creature* pGrandChampion1 = ObjectAccessor::GetCreature(*me, uiVehicle1GUID);
+ Creature* pGrandChampion2 = ObjectAccessor::GetCreature(*me, uiVehicle2GUID);
+ Creature* pGrandChampion3 = ObjectAccessor::GetCreature(*me, uiVehicle3GUID);
if (pGrandChampion1 && pGrandChampion2 && pGrandChampion3)
{
@@ -185,7 +185,7 @@ public:
}
}
- void MovementInform(uint32 uiType, uint32 uiPointId) OVERRIDE
+ void MovementInform(uint32 uiType, uint32 uiPointId) override
{
if (uiType != POINT_MOTION_TYPE)
return;
@@ -289,13 +289,13 @@ public:
switch (i)
{
case 0:
- pAdd->GetMotionMaster()->MoveFollow(pBoss, 2.0f, M_PI);
+ pAdd->GetMotionMaster()->MoveFollow(pBoss, 2.0f, float(M_PI));
break;
case 1:
- pAdd->GetMotionMaster()->MoveFollow(pBoss, 2.0f, M_PI / 2);
+ pAdd->GetMotionMaster()->MoveFollow(pBoss, 2.0f, float(M_PI) / 2);
break;
case 2:
- pAdd->GetMotionMaster()->MoveFollow(pBoss, 2.0f, M_PI / 2 + M_PI);
+ pAdd->GetMotionMaster()->MoveFollow(pBoss, 2.0f, float(M_PI) / 2 + float(M_PI));
break;
}
}
@@ -397,7 +397,7 @@ public:
}
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
ScriptedAI::UpdateAI(uiDiff);
@@ -417,7 +417,7 @@ public:
if (!Champion1List.empty())
{
for (std::list<uint64>::const_iterator itr = Champion1List.begin(); itr != Champion1List.end(); ++itr)
- if (Creature* summon = Unit::GetCreature(*me, *itr))
+ if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr))
AggroAllPlayers(summon);
NextStep(0, false);
}
@@ -429,7 +429,7 @@ public:
return;
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (instance->GetData(BOSS_GRAND_CHAMPIONS) == NOT_STARTED)
{
@@ -438,7 +438,7 @@ public:
}
}
- void SummonedCreatureDespawn(Creature* summon) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summon) override
{
switch (summon->GetEntry())
{
@@ -458,12 +458,12 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_announcer_toc5AI>(creature);
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
InstanceScript* instance = creature->GetInstanceScript();
@@ -488,13 +488,13 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
{
player->CLOSE_GOSSIP_MENU();
- CAST_AI(npc_announcer_toc5::npc_announcer_toc5AI, creature->AI())->StartEncounter();
+ ENSURE_AI(npc_announcer_toc5::npc_announcer_toc5AI, creature->AI())->StartEncounter();
}
return true;
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 93d5c399725..6a664ec7f8d 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
@@ -168,7 +168,7 @@ class boss_anubarak_trial : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
events.SetPhase(PHASE_MELEE);
@@ -196,7 +196,7 @@ class boss_anubarak_trial : public CreatureScript
_burrowGUID.clear();
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
{
@@ -205,7 +205,7 @@ class boss_anubarak_trial : public CreatureScript
}
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE
+ void MoveInLineOfSight(Unit* /*who*/) override
{
if (!_intro)
@@ -215,7 +215,7 @@ class boss_anubarak_trial : public CreatureScript
}
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
instance->SetBossState(BOSS_ANUBARAK, FAIL);
//Summon Scarab Swarms neutral at random places
@@ -227,7 +227,7 @@ class boss_anubarak_trial : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
@@ -241,7 +241,7 @@ class boss_anubarak_trial : public CreatureScript
(*itr)->DespawnOrUnsummon();
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
switch (summoned->GetEntry())
{
@@ -265,7 +265,7 @@ class boss_anubarak_trial : public CreatureScript
summons.Summon(summoned);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -285,7 +285,7 @@ class boss_anubarak_trial : public CreatureScript
_sphereGUID[i] = summoned->GetGUID();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -344,7 +344,7 @@ class boss_anubarak_trial : public CreatureScript
uint32 at = urand(0, _burrowGUID.size()-1);
for (uint32 k = 0; k < at; k++)
++i;
- if (Creature* pBurrow = Unit::GetCreature(*me, *i))
+ if (Creature* pBurrow = ObjectAccessor::GetCreature(*me, *i))
pBurrow->CastSpell(pBurrow, 66340, false);
events.ScheduleEvent(EVENT_SUMMON_SCARAB, 4*IN_MILLISECONDS, 0, PHASE_SUBMERGED);
@@ -377,7 +377,7 @@ class boss_anubarak_trial : public CreatureScript
uint8 i = startAt;
do
{
- if (Unit* pSphere = Unit::GetCreature(*me, _sphereGUID[i]))
+ if (Unit* pSphere = ObjectAccessor::GetCreature(*me, _sphereGUID[i]))
{
if (!pSphere->HasAura(SPELL_FROST_SPHERE))
{
@@ -421,7 +421,7 @@ class boss_anubarak_trial : public CreatureScript
bool _reachedPhase3;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_anubarak_trialAI>(creature);
};
@@ -439,7 +439,7 @@ class npc_swarm_scarab : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetCorpseDelay(0);
_determinationTimer = urand(5*IN_MILLISECONDS, 60*IN_MILLISECONDS);
@@ -450,7 +450,7 @@ class npc_swarm_scarab : public CreatureScript
Anubarak->AI()->JustSummoned(me);
}
- void DoAction(int32 actionId) OVERRIDE
+ void DoAction(int32 actionId) override
{
switch (actionId)
{
@@ -463,12 +463,12 @@ class npc_swarm_scarab : public CreatureScript
}
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
DoCast(killer, RAID_MODE(SPELL_TRAITOR_KING_10, SPELL_TRAITOR_KING_25));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_instance->GetBossState(BOSS_ANUBARAK) != IN_PROGRESS)
me->DisappearAndDie();
@@ -493,7 +493,7 @@ class npc_swarm_scarab : public CreatureScript
uint32 _determinationTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_swarm_scarabAI>(creature);
};
@@ -511,7 +511,7 @@ class npc_nerubian_burrower : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetCorpseDelay(10);
_submergeTimer = 30*IN_MILLISECONDS;
@@ -524,7 +524,7 @@ class npc_nerubian_burrower : public CreatureScript
Anubarak->AI()->JustSummoned(me);
}
- void DoAction(int32 actionId) OVERRIDE
+ void DoAction(int32 actionId) override
{
switch (actionId)
{
@@ -538,7 +538,7 @@ class npc_nerubian_burrower : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_instance->GetBossState(BOSS_ANUBARAK) != IN_PROGRESS)
me->DisappearAndDie();
@@ -581,7 +581,7 @@ class npc_nerubian_burrower : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_nerubian_burrowerAI>(creature);
};
@@ -598,7 +598,7 @@ class npc_frost_sphere : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetReactState(REACT_PASSIVE);
DoCast(SPELL_FROST_SPHERE);
@@ -606,7 +606,7 @@ class npc_frost_sphere : public CreatureScript
me->GetMotionMaster()->MoveRandom(20.0f);
}
- void DamageTaken(Unit* /*who*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*who*/, uint32& damage) override
{
if (me->GetHealth() <= damage)
{
@@ -634,7 +634,7 @@ class npc_frost_sphere : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 pointId) OVERRIDE
+ void MovementInform(uint32 type, uint32 pointId) override
{
if (type != EFFECT_MOTION_TYPE)
return;
@@ -654,7 +654,7 @@ class npc_frost_sphere : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_frost_sphereAI(creature);
};
@@ -671,7 +671,7 @@ class npc_anubarak_spike : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_phase = PHASE_NO_MOVEMENT;
_phaseSwitchTimer = 1;
@@ -679,12 +679,12 @@ class npc_anubarak_spike : public CreatureScript
me->SetInCombatWithZone();
}
- bool CanAIAttack(Unit const* victim) const OVERRIDE
+ bool CanAIAttack(Unit const* victim) const override
{
return victim->GetTypeId() == TYPEID_PLAYER;
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
{
@@ -693,12 +693,12 @@ class npc_anubarak_spike : public CreatureScript
}
}
- void DamageTaken(Unit* /*who*/, uint32& uiDamage) OVERRIDE
+ void DamageTaken(Unit* /*who*/, uint32& uiDamage) override
{
uiDamage = 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
{
@@ -742,7 +742,7 @@ class npc_anubarak_spike : public CreatureScript
}
}
- void MoveInLineOfSight(Unit* pWho) OVERRIDE
+ void MoveInLineOfSight(Unit* pWho) override
{
if (!pWho)
@@ -802,7 +802,7 @@ class npc_anubarak_spike : public CreatureScript
PursuingSpikesPhases _phase;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_anubarak_spikeAI(creature);
};
@@ -827,13 +827,13 @@ class spell_impale : public SpellScriptLoader
SetHitDamage(0);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_impale_SpellScript::HandleDamageCalc, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_impale_SpellScript();
}
@@ -848,7 +848,7 @@ class spell_anubarak_leeching_swarm : public SpellScriptLoader
{
PrepareAuraScript(spell_anubarak_leeching_swarm_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_LEECHING_SWARM_DMG) || !sSpellMgr->GetSpellInfo(SPELL_LEECHING_SWARM_HEAL))
return false;
@@ -870,13 +870,13 @@ class spell_anubarak_leeching_swarm : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_anubarak_leeching_swarm_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_anubarak_leeching_swarm_AuraScript();
}
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 44a6ddb368f..0a43c01081f 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
@@ -351,7 +351,7 @@ class boss_toc_champion_controller : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_championsNotStarted = 0;
_championsFailed = 0;
@@ -469,7 +469,7 @@ class boss_toc_champion_controller : public CreatureScript
}
}
- void SetData(uint32 uiType, uint32 uiData) OVERRIDE
+ void SetData(uint32 uiType, uint32 uiData) override
{
switch (uiType)
{
@@ -479,7 +479,7 @@ class boss_toc_champion_controller : public CreatureScript
case 1:
for (std::list<uint64>::iterator i = _summons.begin(); i != _summons.end(); ++i)
{
- if (Creature* temp = Unit::GetCreature(*me, *i))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, *i))
{
temp->SetReactState(REACT_AGGRESSIVE);
temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
@@ -537,7 +537,7 @@ class boss_toc_champion_controller : public CreatureScript
bool _inProgress;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_toc_champion_controllerAI>(creature);
}
@@ -550,16 +550,16 @@ struct boss_faction_championsAI : public BossAI
_aiType = aitype;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.ScheduleEvent(EVENT_THREAT, 5*IN_MILLISECONDS);
if (IsHeroic() && (_aiType != AI_PET))
_events.ScheduleEvent(EVENT_REMOVE_CC, 5*IN_MILLISECONDS);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
- if (Creature* pChampionController = Unit::GetCreature((*me), instance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
+ if (Creature* pChampionController = ObjectAccessor::GetCreature((*me), instance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
pChampionController->AI()->SetData(2, FAIL);
me->DespawnOrUnsummon();
}
@@ -577,7 +577,7 @@ struct boss_faction_championsAI : public BossAI
std::list<HostileReference*> const& tList = me->getThreatManager().getThreatList();
for (std::list<HostileReference*>::const_iterator itr = tList.begin(); itr != tList.end(); ++itr)
{
- Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (unit && me->getThreatManager().getThreat(unit))
{
if (unit->GetTypeId() == TYPEID_PLAYER)
@@ -606,22 +606,22 @@ struct boss_faction_championsAI : public BossAI
//DoCast(me, SPELL_PVP_TRINKET);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (_aiType != AI_PET)
- if (Creature* pChampionController = Unit::GetCreature((*me), instance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
+ if (Creature* pChampionController = ObjectAccessor::GetCreature((*me), instance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
pChampionController->AI()->SetData(2, DONE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoCast(me, SPELL_ANTI_AOE, true);
_EnterCombat();
- if (Creature* pChampionController = Unit::GetCreature((*me), instance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
+ if (Creature* pChampionController = ObjectAccessor::GetCreature((*me), instance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
pChampionController->AI()->SetData(2, IN_PROGRESS);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
{
@@ -634,11 +634,11 @@ struct boss_faction_championsAI : public BossAI
if (TeamInInstance == ALLIANCE)
{
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(NPC_VARIAN)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(NPC_VARIAN)))
temp->AI()->Talk(SAY_KILL_PLAYER);
}
else
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(NPC_GARROSH)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(NPC_GARROSH)))
temp->AI()->Talk(SAY_KILL_PLAYER);
@@ -652,7 +652,7 @@ struct boss_faction_championsAI : public BossAI
std::list<Creature*>::const_iterator itr = lst.begin();
if (lst.empty())
return NULL;
- advance(itr, rand() % lst.size());
+ advance(itr, rand32() % lst.size());
return (*itr);
}
@@ -663,7 +663,7 @@ struct boss_faction_championsAI : public BossAI
Unit* target;
for (iter = tList.begin(); iter!=tList.end(); ++iter)
{
- target = Unit::GetUnit(*me, (*iter)->getUnitGuid());
+ target = ObjectAccessor::GetUnit(*me, (*iter)->getUnitGuid());
if (target && target->getPowerType() == POWER_MANA)
return target;
}
@@ -678,14 +678,14 @@ struct boss_faction_championsAI : public BossAI
Unit* target;
for (iter = tList.begin(); iter != tList.end(); ++iter)
{
- target = Unit::GetUnit(*me, (*iter)->getUnitGuid());
+ target = ObjectAccessor::GetUnit(*me, (*iter)->getUnitGuid());
if (target && me->GetDistance2d(target) < distance)
++count;
}
return count;
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who)
return;
@@ -704,7 +704,7 @@ struct boss_faction_championsAI : public BossAI
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
@@ -753,7 +753,7 @@ class npc_toc_druid : public CreatureScript
{
npc_toc_druidAI(Creature* creature) : boss_faction_championsAI(creature, AI_HEALER) { }
- void Reset() OVERRIDE
+ void Reset() override
{
boss_faction_championsAI::Reset();
events.ScheduleEvent(EVENT_LIFEBLOOM, urand(5*IN_MILLISECONDS, 15*IN_MILLISECONDS));
@@ -767,7 +767,7 @@ class npc_toc_druid : public CreatureScript
SetEquipmentSlots(false, 51799, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -831,7 +831,7 @@ class npc_toc_druid : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_toc_druidAI>(creature);
}
@@ -846,7 +846,7 @@ class npc_toc_shaman : public CreatureScript
{
npc_toc_shamanAI(Creature* creature) : boss_faction_championsAI(creature, AI_HEALER) { }
- void Reset() OVERRIDE
+ void Reset() override
{
boss_faction_championsAI::Reset();
events.ScheduleEvent(EVENT_HEALING_WAVE, urand(5*IN_MILLISECONDS, 10*IN_MILLISECONDS));
@@ -859,7 +859,7 @@ class npc_toc_shaman : public CreatureScript
SetEquipmentSlots(false, 49992, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -924,7 +924,7 @@ class npc_toc_shaman : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_toc_shamanAI>(creature);
}
@@ -939,7 +939,7 @@ class npc_toc_paladin : public CreatureScript
{
npc_toc_paladinAI(Creature* creature) : boss_faction_championsAI(creature, AI_HEALER) { }
- void Reset() OVERRIDE
+ void Reset() override
{
boss_faction_championsAI::Reset();
events.ScheduleEvent(EVENT_HAND_OF_FREEDOM, urand(10*IN_MILLISECONDS, 20*IN_MILLISECONDS));
@@ -953,7 +953,7 @@ class npc_toc_paladin : public CreatureScript
SetEquipmentSlots(false, 50771, 47079, EQUIP_NO_CHANGE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1028,7 +1028,7 @@ class npc_toc_paladin : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_toc_paladinAI>(creature);
}
@@ -1043,7 +1043,7 @@ class npc_toc_priest : public CreatureScript
{
npc_toc_priestAI(Creature* creature) : boss_faction_championsAI(creature, AI_HEALER) { }
- void Reset() OVERRIDE
+ void Reset() override
{
boss_faction_championsAI::Reset();
events.ScheduleEvent(EVENT_RENEW, urand(3*IN_MILLISECONDS, 10*IN_MILLISECONDS));
@@ -1056,7 +1056,7 @@ class npc_toc_priest : public CreatureScript
SetEquipmentSlots(false, 49992, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1113,7 +1113,7 @@ class npc_toc_priest : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_toc_priestAI>(creature);
}
@@ -1131,7 +1131,7 @@ class npc_toc_shadow_priest : public CreatureScript
{
npc_toc_shadow_priestAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) { }
- void Reset() OVERRIDE
+ void Reset() override
{
boss_faction_championsAI::Reset();
events.ScheduleEvent(EVENT_SILENCE, urand(10*IN_MILLISECONDS, 25*IN_MILLISECONDS));
@@ -1146,7 +1146,7 @@ class npc_toc_shadow_priest : public CreatureScript
DoCast(me, SPELL_SHADOWFORM);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1211,7 +1211,7 @@ class npc_toc_shadow_priest : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_toc_shadow_priestAI>(creature);
}
@@ -1226,7 +1226,7 @@ class npc_toc_warlock : public CreatureScript
{
npc_toc_warlockAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) { }
- void Reset() OVERRIDE
+ void Reset() override
{
boss_faction_championsAI::Reset();
events.ScheduleEvent(EVENT_HELLFIRE, urand(10*IN_MILLISECONDS, 30*IN_MILLISECONDS));
@@ -1239,13 +1239,13 @@ class npc_toc_warlock : public CreatureScript
SetEquipmentSlots(false, 49992, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
boss_faction_championsAI::EnterCombat(who);
DoCast(SPELL_SUMMON_FELHUNTER);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1302,7 +1302,7 @@ class npc_toc_warlock : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_toc_warlockAI>(creature);
}
@@ -1317,7 +1317,7 @@ class npc_toc_mage : public CreatureScript
{
npc_toc_mageAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) { }
- void Reset() OVERRIDE
+ void Reset() override
{
boss_faction_championsAI::Reset();
events.ScheduleEvent(EVENT_ARCANE_BARRAGE, urand(1*IN_MILLISECONDS, 5*IN_MILLISECONDS));
@@ -1331,7 +1331,7 @@ class npc_toc_mage : public CreatureScript
SetEquipmentSlots(false, 47524, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1396,7 +1396,7 @@ class npc_toc_mage : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_toc_mageAI>(creature);
}
@@ -1411,7 +1411,7 @@ class npc_toc_hunter : public CreatureScript
{
npc_toc_hunterAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) { }
- void Reset() OVERRIDE
+ void Reset() override
{
boss_faction_championsAI::Reset();
events.ScheduleEvent(EVENT_AIMED_SHOT, urand(5*IN_MILLISECONDS, 10*IN_MILLISECONDS));
@@ -1425,13 +1425,13 @@ class npc_toc_hunter : public CreatureScript
SetEquipmentSlots(false, 47156, EQUIP_NO_CHANGE, 48711);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
boss_faction_championsAI::EnterCombat(who);
DoCast(SPELL_CALL_PET);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1498,7 +1498,7 @@ class npc_toc_hunter : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_toc_hunterAI>(creature);
}
@@ -1513,7 +1513,7 @@ class npc_toc_boomkin : public CreatureScript
{
npc_toc_boomkinAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) { }
- void Reset() OVERRIDE
+ void Reset() override
{
boss_faction_championsAI::Reset();
events.ScheduleEvent(EVENT_CYCLONE, urand(10*IN_MILLISECONDS, 20*IN_MILLISECONDS));
@@ -1528,7 +1528,7 @@ class npc_toc_boomkin : public CreatureScript
SetEquipmentSlots(false, 50966, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1590,7 +1590,7 @@ class npc_toc_boomkin : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_toc_boomkinAI>(creature);
}
@@ -1608,7 +1608,7 @@ class npc_toc_warrior : public CreatureScript
{
npc_toc_warriorAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) { }
- void Reset() OVERRIDE
+ void Reset() override
{
boss_faction_championsAI::Reset();
events.ScheduleEvent(EVENT_BLADESTORM, urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS));
@@ -1623,7 +1623,7 @@ class npc_toc_warrior : public CreatureScript
SetEquipmentSlots(false, 47427, 46964, EQUIP_NO_CHANGE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1694,7 +1694,7 @@ class npc_toc_warrior : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_toc_warriorAI>(creature);
}
@@ -1709,7 +1709,7 @@ class npc_toc_dk : public CreatureScript
{
npc_toc_dkAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) { }
- void Reset() OVERRIDE
+ void Reset() override
{
boss_faction_championsAI::Reset();
events.ScheduleEvent(EVENT_CHAINS_OF_ICE, urand(5*IN_MILLISECONDS, 15*IN_MILLISECONDS));
@@ -1722,7 +1722,7 @@ class npc_toc_dk : public CreatureScript
SetEquipmentSlots(false, 47518, 51021, EQUIP_NO_CHANGE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1790,7 +1790,7 @@ class npc_toc_dk : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_toc_dkAI>(creature);
}
@@ -1805,7 +1805,7 @@ class npc_toc_rogue : public CreatureScript
{
npc_toc_rogueAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) { }
- void Reset() OVERRIDE
+ void Reset() override
{
boss_faction_championsAI::Reset();
events.ScheduleEvent(EVENT_FAN_OF_KNIVES, urand(5*IN_MILLISECONDS, 10*IN_MILLISECONDS));
@@ -1821,7 +1821,7 @@ class npc_toc_rogue : public CreatureScript
me->SetMaxPower(POWER_ENERGY, 100);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1895,7 +1895,7 @@ class npc_toc_rogue : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_toc_rogueAI>(creature);
}
@@ -1910,7 +1910,7 @@ class npc_toc_enh_shaman : public CreatureScript
{
npc_toc_enh_shamanAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) { }
- void Reset() OVERRIDE
+ void Reset() override
{
boss_faction_championsAI::Reset();
events.ScheduleEvent(EVENT_DPS_EARTH_SHOCK, urand(5*IN_MILLISECONDS, 10*IN_MILLISECONDS));
@@ -1927,12 +1927,12 @@ class npc_toc_enh_shaman : public CreatureScript
summons.DespawnAll();
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summons.Summon(summoned);
}
- void SummonedCreatureDespawn(Creature* /*pSummoned*/) OVERRIDE
+ void SummonedCreatureDespawn(Creature* /*pSummoned*/) override
{
--_totemCount;
}
@@ -1955,13 +1955,13 @@ class npc_toc_enh_shaman : public CreatureScript
*/
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
boss_faction_championsAI::JustDied(killer);
summons.DespawnAll();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -2021,7 +2021,7 @@ class npc_toc_enh_shaman : public CreatureScript
float _totemOldCenterX, _totemOldCenterY;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_toc_enh_shamanAI>(creature);
}
@@ -2036,7 +2036,7 @@ class npc_toc_retro_paladin : public CreatureScript
{
npc_toc_retro_paladinAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) { }
- void Reset() OVERRIDE
+ void Reset() override
{
boss_faction_championsAI::Reset();
events.ScheduleEvent(EVENT_AVENGING_WRATH, urand(25*IN_MILLISECONDS, 35*IN_MILLISECONDS));
@@ -2050,13 +2050,13 @@ class npc_toc_retro_paladin : public CreatureScript
SetEquipmentSlots(false, 47519, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
boss_faction_championsAI::EnterCombat(who);
DoCast(SPELL_SEAL_OF_COMMAND);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -2127,7 +2127,7 @@ class npc_toc_retro_paladin : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_toc_retro_paladinAI>(creature);
}
@@ -2142,14 +2142,14 @@ class npc_toc_pet_warlock : public CreatureScript
{
npc_toc_pet_warlockAI(Creature* creature) : boss_faction_championsAI(creature, AI_PET) { }
- void Reset() OVERRIDE
+ void Reset() override
{
boss_faction_championsAI::Reset();
events.ScheduleEvent(EVENT_DEVOUR_MAGIC, urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS));
events.ScheduleEvent(EVENT_SPELL_LOCK, urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -2179,7 +2179,7 @@ class npc_toc_pet_warlock : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_toc_pet_warlockAI>(creature);
}
@@ -2194,13 +2194,13 @@ class npc_toc_pet_hunter : public CreatureScript
{
npc_toc_pet_hunterAI(Creature* creature) : boss_faction_championsAI(creature, AI_PET) { }
- void Reset() OVERRIDE
+ void Reset() override
{
boss_faction_championsAI::Reset();
_clawTimer = urand(5*IN_MILLISECONDS, 10*IN_MILLISECONDS);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -2219,7 +2219,7 @@ class npc_toc_pet_hunter : public CreatureScript
uint32 _clawTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_toc_pet_hunterAI>(creature);
}
@@ -2234,7 +2234,7 @@ class spell_faction_champion_warl_unstable_affliction : public SpellScriptLoader
{
PrepareAuraScript(spell_faction_champion_warl_unstable_affliction_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_UNSTABLE_AFFLICTION_DISPEL))
return false;
@@ -2247,13 +2247,13 @@ class spell_faction_champion_warl_unstable_affliction : public SpellScriptLoader
caster->CastSpell(dispelInfo->GetDispeller(), SPELL_UNSTABLE_AFFLICTION_DISPEL, true, NULL, GetEffect(EFFECT_0));
}
- void Register() OVERRIDE
+ void Register() override
{
AfterDispel += AuraDispelFn(spell_faction_champion_warl_unstable_affliction_AuraScript::HandleDispel);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_faction_champion_warl_unstable_affliction_AuraScript();
}
@@ -2268,7 +2268,7 @@ class spell_faction_champion_death_grip : public SpellScriptLoader
{
PrepareSpellScript(spell_faction_champion_death_grip_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DEATH_GRIP_PULL))
return false;
@@ -2284,14 +2284,14 @@ class spell_faction_champion_death_grip : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_faction_champion_death_grip_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_faction_champion_death_grip_SpellScript();
}
@@ -2306,7 +2306,7 @@ class spell_toc_bloodlust : public SpellScriptLoader
{
PrepareSpellScript(spell_toc_bloodlust_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(AURA_SATED))
return false;
@@ -2324,7 +2324,7 @@ class spell_toc_bloodlust : public SpellScriptLoader
target->CastSpell(target, AURA_SATED, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_toc_bloodlust_SpellScript::RemoveInvalidTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_toc_bloodlust_SpellScript::RemoveInvalidTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ALLY);
@@ -2332,7 +2332,7 @@ class spell_toc_bloodlust : public SpellScriptLoader
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_toc_bloodlust_SpellScript();
}
@@ -2347,7 +2347,7 @@ class spell_toc_heroism : public SpellScriptLoader
{
PrepareSpellScript(spell_toc_heroism_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(AURA_EXHAUSTION))
return false;
@@ -2365,7 +2365,7 @@ class spell_toc_heroism : public SpellScriptLoader
target->CastSpell(target, AURA_EXHAUSTION, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_toc_heroism_SpellScript::RemoveInvalidTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_toc_heroism_SpellScript::RemoveInvalidTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ALLY);
@@ -2373,7 +2373,7 @@ class spell_toc_heroism : public SpellScriptLoader
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_toc_heroism_SpellScript();
}
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 cb4b3cfcea3..c0f7b2f1856 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
@@ -101,7 +101,7 @@ class boss_jaraxxus : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
events.ScheduleEvent(EVENT_FEL_FIREBALL, 5*IN_MILLISECONDS);
@@ -113,7 +113,7 @@ class boss_jaraxxus : public CreatureScript
events.ScheduleEvent(EVENT_SUMMON_INFERNAL_ERUPTION, 80*IN_MILLISECONDS);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
_JustReachedHome();
instance->SetBossState(BOSS_JARAXXUS, FAIL);
@@ -121,7 +121,7 @@ class boss_jaraxxus : public CreatureScript
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
{
@@ -130,24 +130,24 @@ class boss_jaraxxus : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summons.Summon(summoned);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -210,7 +210,7 @@ class boss_jaraxxus : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_jaraxxusAI>(creature);
}
@@ -229,14 +229,14 @@ class npc_legion_flame : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->SetInCombatWithZone();
DoCast(SPELL_LEGION_FLAME_EFFECT);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
UpdateVictim();
if (_instance->GetBossState(BOSS_JARAXXUS) != IN_PROGRESS)
@@ -246,7 +246,7 @@ class npc_legion_flame : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_legion_flameAI>(creature);
}
@@ -264,7 +264,7 @@ class npc_infernal_volcano : public CreatureScript
SetCombatMovement(false);
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetReactState(REACT_PASSIVE);
@@ -276,31 +276,31 @@ class npc_infernal_volcano : public CreatureScript
_summons.DespawnAll();
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
DoCast(SPELL_INFERNAL_ERUPTION_EFFECT);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
_summons.Summon(summoned);
// makes immediate corpse despawn of summoned Felflame Infernals
summoned->SetCorpseDelay(0);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
// used to despawn corpse immediately
me->DespawnOrUnsummon();
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
private:
SummonList _summons;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_infernal_volcanoAI(creature);
}
@@ -318,13 +318,13 @@ class npc_fel_infernal : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_felStreakTimer = 30*IN_MILLISECONDS;
me->SetInCombatWithZone();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_instance->GetBossState(BOSS_JARAXXUS) != IN_PROGRESS)
{
@@ -351,7 +351,7 @@ class npc_fel_infernal : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_fel_infernalAI>(creature);
}
@@ -368,7 +368,7 @@ class npc_nether_portal : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetReactState(REACT_PASSIVE);
@@ -380,31 +380,31 @@ class npc_nether_portal : public CreatureScript
_summons.DespawnAll();
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
DoCast(SPELL_NETHER_PORTAL_EFFECT);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
_summons.Summon(summoned);
// makes immediate corpse despawn of summoned Mistress of Pain
summoned->SetCorpseDelay(0);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
// used to despawn corpse immediately
me->DespawnOrUnsummon();
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
private:
SummonList _summons;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_nether_portalAI(creature);
}
@@ -423,7 +423,7 @@ class npc_mistress_of_pain : public CreatureScript
_instance->SetData(DATA_MISTRESS_OF_PAIN_COUNT, INCREASE);
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.ScheduleEvent(EVENT_SHIVAN_SLASH, 30*IN_MILLISECONDS);
_events.ScheduleEvent(EVENT_SPINNING_STRIKE, 30*IN_MILLISECONDS);
@@ -432,12 +432,12 @@ class npc_mistress_of_pain : public CreatureScript
me->SetInCombatWithZone();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_instance->SetData(DATA_MISTRESS_OF_PAIN_COUNT, DECREASE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_instance->GetBossState(BOSS_JARAXXUS) != IN_PROGRESS)
{
@@ -482,7 +482,7 @@ class npc_mistress_of_pain : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_mistress_of_painAI>(creature);
}
@@ -497,7 +497,7 @@ class spell_mistress_kiss : public SpellScriptLoader
{
PrepareAuraScript(spell_mistress_kiss_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (GetCaster())
if (sSpellMgr->GetSpellIdForDifficulty(SPELL_MISTRESS_KISS_DAMAGE_SILENCE, GetCaster()))
@@ -519,13 +519,13 @@ class spell_mistress_kiss : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_mistress_kiss_AuraScript::HandleDummyTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_mistress_kiss_AuraScript();
}
@@ -553,7 +553,7 @@ class spell_mistress_kiss_area : public SpellScriptLoader
class spell_mistress_kiss_area_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_mistress_kiss_area_SpellScript)
+ PrepareSpellScript(spell_mistress_kiss_area_SpellScript);
void FilterTargets(std::list<WorldObject*>& targets)
{
@@ -572,14 +572,14 @@ class spell_mistress_kiss_area : public SpellScriptLoader
GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mistress_kiss_area_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnEffectHitTarget += SpellEffectFn(spell_mistress_kiss_area_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_mistress_kiss_area_SpellScript();
}
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 4210ebfcad5..9e75bef9735 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
@@ -160,7 +160,7 @@ class boss_gormok : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.ScheduleEvent(EVENT_IMPALE, urand(8*IN_MILLISECONDS, 10*IN_MILLISECONDS));
events.ScheduleEvent(EVENT_STAGGERING_STOMP, 15*IN_MILLISECONDS);
@@ -169,13 +169,13 @@ class boss_gormok : public CreatureScript
summons.DespawnAll();
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
instance->DoUseDoorOrButton(instance->GetData64(GO_MAIN_GATE_DOOR));
ScriptedAI::EnterEvadeMode();
}
- void MovementInform(uint32 type, uint32 pointId) OVERRIDE
+ void MovementInform(uint32 type, uint32 pointId) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -193,12 +193,12 @@ class boss_gormok : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(TYPE_NORTHREND_BEASTS, GORMOK_DONE);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
instance->DoUseDoorOrButton(instance->GetData64(GO_MAIN_GATE_DOOR));
instance->SetData(TYPE_NORTHREND_BEASTS, FAIL);
@@ -206,7 +206,7 @@ class boss_gormok : public CreatureScript
me->DespawnOrUnsummon();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
me->SetInCombatWithZone();
@@ -223,7 +223,7 @@ class boss_gormok : public CreatureScript
}
}
- void DamageTaken(Unit* /*who*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*who*/, uint32& damage) override
{
// despawn the remaining passengers on death
if (damage >= me->GetHealth())
@@ -232,7 +232,7 @@ class boss_gormok : public CreatureScript
pSnobold->ToCreature()->DespawnOrUnsummon();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -279,7 +279,7 @@ class boss_gormok : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_gormokAI>(creature);
}
@@ -300,7 +300,7 @@ class npc_snobold_vassal : public CreatureScript
_instance->SetData(DATA_SNOBOLD_COUNT, INCREASE);
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.ScheduleEvent(EVENT_BATTER, 5*IN_MILLISECONDS);
_events.ScheduleEvent(EVENT_HEAD_CRACK, 25*IN_MILLISECONDS);
@@ -312,25 +312,25 @@ class npc_snobold_vassal : public CreatureScript
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
ScriptedAI::EnterEvadeMode();
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
_targetGUID = who->GetGUID();
me->TauntApply(who);
DoCast(who, SPELL_SNOBOLLED);
}
- void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) OVERRIDE
+ void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) override
{
if (pDoneBy->GetGUID() == _targetGUID)
uiDamage = 0;
}
- void MovementInform(uint32 type, uint32 pointId) OVERRIDE
+ void MovementInform(uint32 type, uint32 pointId) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -346,7 +346,7 @@ class npc_snobold_vassal : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Unit* target = ObjectAccessor::GetPlayer(*me, _targetGUID))
if (target->IsAlive())
@@ -354,7 +354,7 @@ class npc_snobold_vassal : public CreatureScript
_instance->SetData(DATA_SNOBOLD_COUNT, DECREASE);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -369,7 +369,7 @@ class npc_snobold_vassal : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || _targetDied)
return;
@@ -446,7 +446,7 @@ class npc_snobold_vassal : public CreatureScript
bool _targetDied;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_snobold_vassalAI>(creature);
}
@@ -464,7 +464,7 @@ class npc_firebomb : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
DoCast(me, SPELL_FIRE_BOMB_DOT, true);
SetCombatMovement(false);
@@ -472,7 +472,7 @@ class npc_firebomb : public CreatureScript
me->SetDisplayId(me->GetCreatureTemplate()->Modelid2);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (_instance->GetData(TYPE_NORTHREND_BEASTS) != GORMOK_IN_PROGRESS)
me->DespawnOrUnsummon();
@@ -482,7 +482,7 @@ class npc_firebomb : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_firebombAI>(creature);
}
@@ -494,7 +494,7 @@ struct boss_jormungarAI : public BossAI
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
Enraged = false;
@@ -506,9 +506,9 @@ struct boss_jormungarAI : public BossAI
events.ScheduleEvent(EVENT_SLIME_POOL, 15*IN_MILLISECONDS, 0, PHASE_MOBILE);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
- if (Creature* otherWorm = Unit::GetCreature(*me, instance->GetData64(OtherWormEntry)))
+ if (Creature* otherWorm = ObjectAccessor::GetCreature(*me, instance->GetData64(OtherWormEntry)))
{
if (!otherWorm->IsAlive())
{
@@ -522,7 +522,7 @@ struct boss_jormungarAI : public BossAI
}
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
// prevent losing 2 attempts at once on heroics
if (instance->GetData(TYPE_NORTHREND_BEASTS) != FAIL)
@@ -531,20 +531,20 @@ struct boss_jormungarAI : public BossAI
me->DespawnOrUnsummon();
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
instance->SetData(DATA_TRIBUTE_TO_IMMORTALITY_ELIGIBLE, 0);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
me->SetInCombatWithZone();
instance->SetData(TYPE_NORTHREND_BEASTS, SNAKES_IN_PROGRESS);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -683,7 +683,7 @@ class boss_acidmaw : public CreatureScript
{
boss_acidmawAI(Creature* creature) : boss_jormungarAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
boss_jormungarAI::Reset();
BiteSpell = SPELL_PARALYTIC_BITE;
@@ -699,7 +699,7 @@ class boss_acidmaw : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_acidmawAI>(creature);
}
@@ -716,7 +716,7 @@ class boss_dreadscale : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
boss_jormungarAI::Reset();
BiteSpell = SPELL_BURNING_BITE;
@@ -733,7 +733,7 @@ class boss_dreadscale : public CreatureScript
WasMobile = false;
}
- void MovementInform(uint32 type, uint32 pointId) OVERRIDE
+ void MovementInform(uint32 type, uint32 pointId) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -751,13 +751,13 @@ class boss_dreadscale : public CreatureScript
}
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
instance->DoUseDoorOrButton(instance->GetData64(GO_MAIN_GATE_DOOR));
boss_jormungarAI::EnterEvadeMode();
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
instance->DoUseDoorOrButton(instance->GetData64(GO_MAIN_GATE_DOOR));
@@ -765,7 +765,7 @@ class boss_dreadscale : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_dreadscaleAI>(creature);
}
@@ -783,13 +783,13 @@ class npc_slime_pool : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_cast = false;
me->SetReactState(REACT_PASSIVE);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!_cast)
{
@@ -806,7 +806,7 @@ class npc_slime_pool : public CreatureScript
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_slime_poolAI>(creature);
}
@@ -830,13 +830,13 @@ class spell_gormok_fire_bomb : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_gormok_fire_bomb_SpellScript::TriggerFireBomb, EFFECT_0, SPELL_EFFECT_TRIGGER_MISSILE);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gormok_fire_bomb_SpellScript();
}
@@ -853,7 +853,7 @@ class boss_icehowl : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.ScheduleEvent(EVENT_FEROCIOUS_BUTT, urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS));
events.ScheduleEvent(EVENT_ARCTIC_BREATH, urand(15*IN_MILLISECONDS, 25*IN_MILLISECONDS));
@@ -869,13 +869,13 @@ class boss_icehowl : public CreatureScript
_stage = 0;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
instance->SetData(TYPE_NORTHREND_BEASTS, ICEHOWL_DONE);
}
- void MovementInform(uint32 type, uint32 pointId) OVERRIDE
+ void MovementInform(uint32 type, uint32 pointId) override
{
if (type != POINT_MOTION_TYPE && type != EFFECT_MOTION_TYPE)
return;
@@ -912,20 +912,20 @@ class boss_icehowl : public CreatureScript
}
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
instance->DoUseDoorOrButton(instance->GetData64(GO_MAIN_GATE_DOOR));
ScriptedAI::EnterEvadeMode();
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
instance->DoUseDoorOrButton(instance->GetData64(GO_MAIN_GATE_DOOR));
instance->SetData(TYPE_NORTHREND_BEASTS, FAIL);
me->DespawnOrUnsummon();
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
{
@@ -933,13 +933,13 @@ class boss_icehowl : public CreatureScript
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
instance->SetData(TYPE_NORTHREND_BEASTS, ICEHOWL_IN_PROGRESS);
}
- void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, SpellInfo const* spell) override
{
if (spell->Id == SPELL_TRAMPLE && target->GetTypeId() == TYPEID_PLAYER)
{
@@ -951,7 +951,7 @@ class boss_icehowl : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1117,7 +1117,7 @@ class boss_icehowl : public CreatureScript
uint8 _stage;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_icehowlAI>(creature);
}
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 0d7dc9062ad..68de65f9f7b 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
@@ -145,7 +145,7 @@ struct boss_twin_baseAI : public BossAI
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->SetReactState(REACT_PASSIVE);
@@ -163,7 +163,7 @@ struct boss_twin_baseAI : public BossAI
summons.DespawnAll();
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
instance->SetBossState(BOSS_VALKIRIES, FAIL);
@@ -171,7 +171,7 @@ struct boss_twin_baseAI : public BossAI
me->DespawnOrUnsummon();
}
- void MovementInform(uint32 uiType, uint32 uiId) OVERRIDE
+ void MovementInform(uint32 uiType, uint32 uiId) override
{
if (uiType != POINT_MOTION_TYPE)
return;
@@ -187,7 +187,7 @@ struct boss_twin_baseAI : public BossAI
}
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
{
@@ -196,12 +196,12 @@ struct boss_twin_baseAI : public BossAI
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summons.Summon(summoned);
}
- void SummonedCreatureDespawn(Creature* summoned) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summoned) override
{
switch (summoned->GetEntry())
{
@@ -222,7 +222,7 @@ struct boss_twin_baseAI : public BossAI
summons.Despawn(summoned);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
if (Creature* pSister = GetSister())
@@ -245,10 +245,10 @@ struct boss_twin_baseAI : public BossAI
// Called when sister pointer needed
Creature* GetSister()
{
- return Unit::GetCreature((*me), instance->GetData64(SisterNpcId));
+ return ObjectAccessor::GetCreature((*me), instance->GetData64(SisterNpcId));
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
me->SetInCombatWithZone();
if (Creature* pSister = GetSister())
@@ -262,7 +262,7 @@ struct boss_twin_baseAI : public BossAI
DoCast(me, SurgeSpellId);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -283,7 +283,7 @@ struct boss_twin_baseAI : public BossAI
me->SetCanDualWield(mode);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!instance || !UpdateVictim())
return;
@@ -394,7 +394,7 @@ class boss_fjola : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
SetEquipmentSlots(false, EQUIP_MAIN_1, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
Stage = 0;
@@ -415,7 +415,7 @@ class boss_fjola : public CreatureScript
boss_twin_baseAI::Reset();
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, EVENT_START_TWINS_FIGHT);
@@ -423,13 +423,13 @@ class boss_fjola : public CreatureScript
boss_twin_baseAI::EnterCombat(who);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
instance->DoUseDoorOrButton(instance->GetData64(GO_MAIN_GATE_DOOR));
boss_twin_baseAI::EnterEvadeMode();
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
instance->DoUseDoorOrButton(instance->GetData64(GO_MAIN_GATE_DOOR));
@@ -437,7 +437,7 @@ class boss_fjola : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_fjolaAI>(creature);
}
@@ -452,7 +452,7 @@ class boss_eydis : public CreatureScript
{
boss_eydisAI(Creature* creature) : boss_twin_baseAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
SetEquipmentSlots(false, EQUIP_MAIN_2, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
Stage = 1;
@@ -472,7 +472,7 @@ class boss_eydis : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_eydisAI>(creature);
}
@@ -487,7 +487,7 @@ class npc_essence_of_twin : public CreatureScript
{
npc_essence_of_twinAI(Creature* creature) : ScriptedAI(creature) { }
- uint32 GetData(uint32 data) const OVERRIDE
+ uint32 GetData(uint32 data) const override
{
uint32 spellReturned = 0;
switch (me->GetEntry())
@@ -506,12 +506,12 @@ class npc_essence_of_twin : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_essence_of_twinAI(creature);
};
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
player->RemoveAurasDueToSpell(creature->GetAI()->GetData(ESSENCE_REMOVE));
player->CastSpell(player, creature->GetAI()->GetData(ESSENCE_APPLY), true);
@@ -531,8 +531,8 @@ struct npc_unleashed_ballAI : public ScriptedAI
float x0 = ToCCommonLoc[1].GetPositionX(), y0 = ToCCommonLoc[1].GetPositionY(), r = 47.0f;
float y = y0;
float x = frand(x0 - r, x0 + r);
- float sq = pow(r, 2) - pow(x - x0, 2);
- float rt = sqrtf(fabs(sq));
+ float sq = std::pow(r, 2.f) - std::pow(x - x0, 2.f);
+ float rt = std::sqrt(std::fabs(sq));
if (urand(0, 1))
y = y0 + rt;
else
@@ -540,7 +540,7 @@ struct npc_unleashed_ballAI : public ScriptedAI
me->GetMotionMaster()->MovePoint(0, x, y, me->GetPositionZ());
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->SetReactState(REACT_PASSIVE);
@@ -551,7 +551,7 @@ struct npc_unleashed_ballAI : public ScriptedAI
RangeCheckTimer = 0.5*IN_MILLISECONDS;
}
- void MovementInform(uint32 uiType, uint32 uiId) OVERRIDE
+ void MovementInform(uint32 uiType, uint32 uiId) override
{
if (uiType != POINT_MOTION_TYPE)
return;
@@ -582,7 +582,7 @@ class npc_unleashed_dark : public CreatureScript
{
npc_unleashed_darkAI(Creature* creature) : npc_unleashed_ballAI(creature) { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (RangeCheckTimer < diff)
{
@@ -599,7 +599,7 @@ class npc_unleashed_dark : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_unleashed_darkAI(creature);
}
@@ -614,7 +614,7 @@ class npc_unleashed_light : public CreatureScript
{
npc_unleashed_lightAI(Creature* creature) : npc_unleashed_ballAI(creature) { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (RangeCheckTimer < diff)
{
@@ -631,7 +631,7 @@ class npc_unleashed_light : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_unleashed_lightAI(creature);
}
@@ -649,18 +649,18 @@ class npc_bullet_controller : public CreatureScript
SetCombatMovement(false);
}
- void Reset() OVERRIDE
+ void Reset() override
{
DoCastAOE(SPELL_CONTROLLER_PERIODIC);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
UpdateVictim();
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_bullet_controllerAI(creature);
}
@@ -673,13 +673,12 @@ class spell_powering_up : public SpellScriptLoader
class spell_powering_up_SpellScript : public SpellScript
{
- public:
- PrepareSpellScript(spell_powering_up_SpellScript)
+ PrepareSpellScript(spell_powering_up_SpellScript);
uint32 spellId;
uint32 poweringUp;
- bool Load() OVERRIDE
+ bool Load() override
{
spellId = sSpellMgr->GetSpellIdForDifficulty(SPELL_SURGE_OF_SPEED, GetCaster());
if (!sSpellMgr->GetSpellInfo(spellId))
@@ -712,13 +711,13 @@ class spell_powering_up : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_powering_up_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_powering_up_SpellScript();
}
@@ -735,7 +734,7 @@ class spell_valkyr_essences : public SpellScriptLoader
uint32 spellId;
- bool Load() OVERRIDE
+ bool Load() override
{
spellId = sSpellMgr->GetSpellIdForDifficulty(SPELL_SURGE_OF_SPEED, GetCaster());
if (!sSpellMgr->GetSpellInfo(spellId))
@@ -757,7 +756,7 @@ class spell_valkyr_essences : public SpellScriptLoader
// Twin Vortex part
uint32 lightVortex = sSpellMgr->GetSpellIdForDifficulty(SPELL_LIGHT_VORTEX_DAMAGE, owner);
uint32 darkVortex = sSpellMgr->GetSpellIdForDifficulty(SPELL_DARK_VORTEX_DAMAGE, owner);
- int32 stacksCount = int32(dmgInfo.GetSpellInfo()->Effects[EFFECT_0].CalcValue()) * 0.001 - 1;
+ int32 stacksCount = dmgInfo.GetSpellInfo()->Effects[EFFECT_0].CalcValue() / 1000 - 1;
if (lightVortex && darkVortex && stacksCount)
{
@@ -807,13 +806,13 @@ class spell_valkyr_essences : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectAbsorb += AuraEffectAbsorbFn(spell_valkyr_essences_AuraScript::Absorb, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_valkyr_essences_AuraScript();
}
@@ -828,7 +827,7 @@ class spell_power_of_the_twins : public SpellScriptLoader
{
PrepareAuraScript(spell_power_of_the_twins_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
@@ -838,7 +837,7 @@ class spell_power_of_the_twins : public SpellScriptLoader
if (InstanceScript* instance = GetCaster()->GetInstanceScript())
{
if (Creature* Valk = ObjectAccessor::GetCreature(*GetCaster(), instance->GetData64(GetCaster()->GetEntry())))
- CAST_AI(boss_twin_baseAI, Valk->AI())->EnableDualWield(true);
+ ENSURE_AI(boss_twin_baseAI, Valk->AI())->EnableDualWield(true);
}
}
@@ -847,11 +846,11 @@ class spell_power_of_the_twins : public SpellScriptLoader
if (InstanceScript* instance = GetCaster()->GetInstanceScript())
{
if (Creature* Valk = ObjectAccessor::GetCreature(*GetCaster(), instance->GetData64(GetCaster()->GetEntry())))
- CAST_AI(boss_twin_baseAI, Valk->AI())->EnableDualWield(false);
+ ENSURE_AI(boss_twin_baseAI, Valk->AI())->EnableDualWield(false);
}
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_power_of_the_twins_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_power_of_the_twins_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
@@ -859,7 +858,7 @@ class spell_power_of_the_twins : public SpellScriptLoader
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_power_of_the_twins_AuraScript();
}
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 c0e49fa43fb..7cab84ee4a7 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
@@ -31,7 +31,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
{
instance_trial_of_the_crusader_InstanceMapScript(Map* map) : InstanceScript(map) { }
- void Initialize() OVERRIDE
+ void Initialize() override
{
SetBossNumber(MAX_ENCOUNTERS);
TrialCounter = 50;
@@ -69,7 +69,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
FloorGUID = 0;
}
- bool IsEncounterInProgress() const OVERRIDE
+ bool IsEncounterInProgress() const override
{
for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
if (GetBossState(i) == IN_PROGRESS)
@@ -82,7 +82,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
return false;
}
- void OnPlayerEnter(Player* player) OVERRIDE
+ void OnPlayerEnter(Player* player) override
{
if (instance->IsHeroic())
{
@@ -95,7 +95,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
// make sure Anub'arak isnt missing and floor is destroyed after a crash
if (GetBossState(BOSS_LICH_KING) == DONE && TrialCounter && GetBossState(BOSS_ANUBARAK) != DONE)
{
- Creature* anubArak = Unit::GetCreature(*player, GetData64(NPC_ANUBARAK));
+ Creature* anubArak = ObjectAccessor::GetCreature(*player, GetData64(NPC_ANUBARAK));
if (!anubArak)
anubArak = player->SummonCreature(NPC_ANUBARAK, AnubarakLoc[0].GetPositionX(), AnubarakLoc[0].GetPositionY(), AnubarakLoc[0].GetPositionZ(), 3, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME);
@@ -122,7 +122,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
go->SetGoState(GO_STATE_READY);
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -179,7 +179,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -227,7 +227,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
}
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -403,7 +403,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
return true;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -472,7 +472,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
}
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -523,7 +523,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
return 0;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -586,7 +586,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
case 5060:
case 5070:
case 5080:
- return NPC_LICH_KING_1;
+ return NPC_LICH_KING;
break;
case 120:
case 122:
@@ -629,7 +629,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
return 0;
}
- void Update(uint32 diff) OVERRIDE
+ void Update(uint32 diff) override
{
if (GetData(TYPE_NORTHREND_BEASTS) == SNAKES_SPECIAL && NotOneButTwoJormungarsTimer)
{
@@ -665,12 +665,12 @@ class instance_trial_of_the_crusader : public InstanceMapScript
NeedSave = false;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
return SaveDataBuffer;
}
- void Load(const char* strIn) OVERRIDE
+ void Load(const char* strIn) override
{
if (!strIn)
{
@@ -697,7 +697,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
OUT_LOAD_INST_DATA_COMPLETE;
}
- bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) OVERRIDE
+ bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) override
{
switch (criteria_id)
{
@@ -774,7 +774,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
bool TributeToImmortalityEligible;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_trial_of_the_crusader_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
index fdefde10b4f..11548ba4b1c 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
@@ -115,7 +115,7 @@ class npc_announcer_toc10 : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
if (Creature* pAlly = GetClosestCreatureWithEntry(me, NPC_THRALL, 300.0f))
@@ -124,10 +124,10 @@ class npc_announcer_toc10 : public CreatureScript
pAlly->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
}
- void AttackStart(Unit* /*who*/) OVERRIDE { }
+ void AttackStart(Unit* /*who*/) override { }
};
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
InstanceScript* instance = creature->GetInstanceScript();
if (!instance)
@@ -156,7 +156,7 @@ class npc_announcer_toc10 : public CreatureScript
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 /*action*/) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 /*action*/) override
{
player->PlayerTalkClass->ClearMenus();
player->CLOSE_GOSSIP_MENU();
@@ -173,7 +173,7 @@ class npc_announcer_toc10 : public CreatureScript
else if (instance->GetBossState(BOSS_JARAXXUS) != DONE)
{
// if Jaraxxus is spawned, but the raid wiped
- if (Creature* jaraxxus = Unit::GetCreature(*player, instance->GetData64(NPC_JARAXXUS)))
+ if (Creature* jaraxxus = ObjectAccessor::GetCreature(*player, instance->GetData64(NPC_JARAXXUS)))
{
jaraxxus->RemoveAurasDueToSpell(SPELL_JARAXXUS_CHAINS);
jaraxxus->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -207,7 +207,7 @@ class npc_announcer_toc10 : public CreatureScript
creature->CastSpell(creature, SPELL_CORPSE_TELEPORT, false);
creature->CastSpell(creature, SPELL_DESTROY_FLOOR_KNOCKUP, false);
- Creature* anubArak = Unit::GetCreature(*creature, instance->GetData64(NPC_ANUBARAK));
+ Creature* anubArak = ObjectAccessor::GetCreature(*creature, instance->GetData64(NPC_ANUBARAK));
if (!anubArak || !anubArak->IsAlive())
anubArak = creature->SummonCreature(NPC_ANUBARAK, AnubarakLoc[0].GetPositionX(), AnubarakLoc[0].GetPositionY(), AnubarakLoc[0].GetPositionZ(), 3, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME);
@@ -220,7 +220,7 @@ class npc_announcer_toc10 : public CreatureScript
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_announcer_toc10AI(creature);
}
@@ -238,7 +238,7 @@ class boss_lich_king_toc : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_updateTimer = 0;
me->SetReactState(REACT_PASSIVE);
@@ -252,7 +252,7 @@ class boss_lich_king_toc : public CreatureScript
me->SetWalk(true);
}
- void MovementInform(uint32 uiType, uint32 uiId) OVERRIDE
+ void MovementInform(uint32 uiType, uint32 uiId) override
{
if (uiType != POINT_MOTION_TYPE || !_instance)
return;
@@ -270,12 +270,12 @@ class boss_lich_king_toc : public CreatureScript
}
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!_instance)
return;
- if (_instance->GetData(TYPE_EVENT_NPC) != NPC_LICH_KING_1)
+ if (_instance->GetData(TYPE_EVENT_NPC) != NPC_LICH_KING)
return;
_updateTimer = _instance->GetData(TYPE_EVENT_TIMER);
@@ -330,7 +330,7 @@ class boss_lich_king_toc : public CreatureScript
me->CastSpell(me, SPELL_DESTROY_FLOOR_KNOCKUP, false);
_instance->SetBossState(BOSS_LICH_KING, DONE);
- Creature* temp = Unit::GetCreature(*me, _instance->GetData64(NPC_ANUBARAK));
+ Creature* temp = ObjectAccessor::GetCreature(*me, _instance->GetData64(NPC_ANUBARAK));
if (!temp || !temp->IsAlive())
temp = me->SummonCreature(NPC_ANUBARAK, AnubarakLoc[0].GetPositionX(), AnubarakLoc[0].GetPositionY(), AnubarakLoc[0].GetPositionZ(), 3, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME);
@@ -355,7 +355,7 @@ class boss_lich_king_toc : public CreatureScript
uint32 _updateTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_lich_king_tocAI>(creature);
}
@@ -373,11 +373,11 @@ class npc_fizzlebang_toc : public CreatureScript
_instance = me->GetInstanceScript();
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
Talk(SAY_STAGE_1_06, killer);
_instance->SetData(TYPE_EVENT, 1180);
- if (Creature* temp = Unit::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS)))
{
temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
temp->SetReactState(REACT_AGGRESSIVE);
@@ -385,14 +385,14 @@ class npc_fizzlebang_toc : public CreatureScript
}
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetWalk(true);
_portalGUID = 0;
me->GetMotionMaster()->MovePoint(1, ToCCommonLoc[10].GetPositionX(), ToCCommonLoc[10].GetPositionY()-60, ToCCommonLoc[10].GetPositionZ());
}
- void MovementInform(uint32 uiType, uint32 uiId) OVERRIDE
+ void MovementInform(uint32 uiType, uint32 uiId) override
{
if (uiType != POINT_MOTION_TYPE)
return;
@@ -410,12 +410,12 @@ class npc_fizzlebang_toc : public CreatureScript
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
_summons.Summon(summoned);
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!_instance)
return;
@@ -484,23 +484,23 @@ class npc_fizzlebang_toc : public CreatureScript
_updateTimer = 5*IN_MILLISECONDS;
break;
case 1142:
- if (Creature* temp = Unit::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS)))
temp->SetTarget(me->GetGUID());
- if (Creature* pTrigger = Unit::GetCreature(*me, _triggerGUID))
+ if (Creature* pTrigger = ObjectAccessor::GetCreature(*me, _triggerGUID))
pTrigger->DespawnOrUnsummon();
- if (Creature* pPortal = Unit::GetCreature(*me, _portalGUID))
+ if (Creature* pPortal = ObjectAccessor::GetCreature(*me, _portalGUID))
pPortal->DespawnOrUnsummon();
_instance->SetData(TYPE_EVENT, 1144);
_updateTimer = 10*IN_MILLISECONDS;
break;
case 1144:
- if (Creature* temp = Unit::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS)))
temp->AI()->Talk(SAY_STAGE_1_05);
_instance->SetData(TYPE_EVENT, 1150);
_updateTimer = 5*IN_MILLISECONDS;
break;
case 1150:
- if (Creature* temp = Unit::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS)))
{
//1-shot Fizzlebang
temp->CastSpell(me, 67888, false);
@@ -526,7 +526,7 @@ class npc_fizzlebang_toc : public CreatureScript
uint64 _triggerGUID;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_fizzlebang_tocAI>(creature);
}
@@ -544,11 +544,11 @@ class npc_tirion_toc : public CreatureScript
_instance = me->GetInstanceScript();
}
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
+ void AttackStart(Unit* /*who*/) override { }
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!_instance)
return;
@@ -699,7 +699,7 @@ class npc_tirion_toc : public CreatureScript
_instance->SetData(TYPE_EVENT, 3092);
break;
case 3092:
- if (Creature* pChampionController = Unit::GetCreature((*me), _instance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
+ if (Creature* pChampionController = ObjectAccessor::GetCreature((*me), _instance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
pChampionController->AI()->SetData(1, NOT_STARTED);
_instance->SetData(TYPE_EVENT, 3095);
break;
@@ -735,12 +735,12 @@ class npc_tirion_toc : public CreatureScript
break;
case 4015:
_instance->DoUseDoorOrButton(_instance->GetData64(GO_MAIN_GATE_DOOR));
- if (Creature* temp = Unit::GetCreature((*me), _instance->GetData64(NPC_LIGHTBANE)))
+ if (Creature* temp = ObjectAccessor::GetCreature((*me), _instance->GetData64(NPC_LIGHTBANE)))
{
temp->GetMotionMaster()->MovePoint(1, ToCCommonLoc[8].GetPositionX(), ToCCommonLoc[8].GetPositionY(), ToCCommonLoc[8].GetPositionZ());
temp->SetVisible(true);
}
- if (Creature* temp = Unit::GetCreature((*me), _instance->GetData64(NPC_DARKBANE)))
+ if (Creature* temp = ObjectAccessor::GetCreature((*me), _instance->GetData64(NPC_DARKBANE)))
{
temp->GetMotionMaster()->MovePoint(1, ToCCommonLoc[9].GetPositionX(), ToCCommonLoc[9].GetPositionY(), ToCCommonLoc[9].GetPositionZ());
temp->SetVisible(true);
@@ -764,7 +764,7 @@ class npc_tirion_toc : public CreatureScript
case 5005:
_updateTimer = 8*IN_MILLISECONDS;
_instance->SetData(TYPE_EVENT, 5010);
- me->SummonCreature(NPC_LICH_KING_1, ToCCommonLoc[2].GetPositionX(), ToCCommonLoc[2].GetPositionY(), ToCCommonLoc[2].GetPositionZ(), 5);
+ me->SummonCreature(NPC_LICH_KING, ToCCommonLoc[2].GetPositionX(), ToCCommonLoc[2].GetPositionY(), ToCCommonLoc[2].GetPositionZ(), 5);
break;
case 5020:
Talk(SAY_STAGE_4_03);
@@ -779,7 +779,7 @@ class npc_tirion_toc : public CreatureScript
_instance->SetData(TYPE_EVENT, 6005);
break;
case 6005:
- if (Creature* tirionFordring = Unit::GetCreature((*me), _instance->GetData64(NPC_TIRION_FORDRING)))
+ if (Creature* tirionFordring = ObjectAccessor::GetCreature((*me), _instance->GetData64(NPC_TIRION_FORDRING)))
tirionFordring->AI()->Talk(SAY_STAGE_4_06);
_updateTimer = 20*IN_MILLISECONDS;
_instance->SetData(TYPE_EVENT, 6010);
@@ -787,7 +787,7 @@ class npc_tirion_toc : public CreatureScript
case 6010:
if (IsHeroic())
{
- if (Creature* tirionFordring = Unit::GetCreature((*me), _instance->GetData64(NPC_TIRION_FORDRING)))
+ if (Creature* tirionFordring = ObjectAccessor::GetCreature((*me), _instance->GetData64(NPC_TIRION_FORDRING)))
tirionFordring->AI()->Talk(SAY_STAGE_4_07);
_updateTimer = 1*MINUTE*IN_MILLISECONDS;
_instance->SetBossState(BOSS_ANUBARAK, SPECIAL);
@@ -814,7 +814,7 @@ class npc_tirion_toc : public CreatureScript
uint32 _updateTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_tirion_tocAI>(creature);
}
@@ -832,11 +832,11 @@ class npc_garrosh_toc : public CreatureScript
_instance = me->GetInstanceScript();
}
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
+ void AttackStart(Unit* /*who*/) override { }
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!_instance)
return;
@@ -898,7 +898,7 @@ class npc_garrosh_toc : public CreatureScript
uint32 _updateTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_garrosh_tocAI>(creature);
}
@@ -916,11 +916,11 @@ class npc_varian_toc : public CreatureScript
_instance = me->GetInstanceScript();
}
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
+ void AttackStart(Unit* /*who*/) override { }
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!_instance)
return;
@@ -982,7 +982,7 @@ class npc_varian_toc : public CreatureScript
uint32 _updateTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_varian_tocAI>(creature);
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h
index 17e4f2869c6..8a62453d7c1 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h
@@ -40,7 +40,7 @@ enum SpellIds
enum MiscData
{
- DESPAWN_TIME = 300000,
+ DESPAWN_TIME = 1200000,
DISPLAYID_DESTROYED_FLOOR = 9060
};
@@ -184,8 +184,7 @@ enum CreatureIds
NPC_FIZZLEBANG = 35458,
NPC_GARROSH = 34995,
NPC_VARIAN = 34990,
- NPC_LICH_KING_0 = 16980,
- NPC_LICH_KING_1 = 35877,
+ NPC_LICH_KING = 35877,
NPC_THRALL = 34994,
NPC_PROUDMOORE = 34992,
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp
index 7b55452105b..a1690598532 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp
@@ -60,12 +60,12 @@ class boss_king_dred : public CreatureScript
{
boss_king_dredAI(Creature* creature) : BossAI(creature, DATA_KING_DRED) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
@@ -77,13 +77,13 @@ class boss_king_dred : public CreatureScript
events.ScheduleEvent(EVENT_RAPTOR_CALL, urand(20000, 25000));
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_RAPTOR_KILLED)
++raptorsKilled;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_RAPTORS_KILLED)
return raptorsKilled;
@@ -91,12 +91,12 @@ class boss_king_dred : public CreatureScript
return 0;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -151,7 +151,7 @@ class boss_king_dred : public CreatureScript
uint8 raptorsKilled;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetDrakTharonKeepAI<boss_king_dredAI>(creature);
}
@@ -173,12 +173,12 @@ class npc_drakkari_gutripper : public CreatureScript
uint32 GutRipTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
GutRipTimer = urand(10000, 15000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -194,14 +194,14 @@ class npc_drakkari_gutripper : public CreatureScript
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KING_DRED)))
Dred->AI()->DoAction(ACTION_RAPTOR_KILLED);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetDrakTharonKeepAI<npc_drakkari_gutripperAI>(creature);
}
@@ -223,12 +223,12 @@ class npc_drakkari_scytheclaw : public CreatureScript
uint32 uiRendTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiRendTimer = urand(10000, 15000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -244,14 +244,14 @@ class npc_drakkari_scytheclaw : public CreatureScript
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KING_DRED)))
Dred->AI()->DoAction(ACTION_RAPTOR_KILLED);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetDrakTharonKeepAI<npc_drakkari_scytheclawAI>(creature);
}
@@ -264,7 +264,7 @@ class achievement_king_dred : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
index f84f288d55a..4e9462a447f 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
@@ -82,7 +82,7 @@ public:
{
boss_novosAI(Creature* creature) : BossAI(creature, DATA_NOVOS) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
@@ -93,7 +93,7 @@ public:
SetBubbled(false);
}
- void EnterCombat(Unit* /* victim */) OVERRIDE
+ void EnterCombat(Unit* /* victim */) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -103,7 +103,7 @@ public:
SetBubbled(true);
}
- void AttackStart(Unit* target) OVERRIDE
+ void AttackStart(Unit* target) override
{
if (!target)
return;
@@ -112,19 +112,19 @@ public:
DoStartNoMovement(target);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || _bubbled)
return;
@@ -153,13 +153,13 @@ public:
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_CRYSTAL_HANDLER_DIED)
CrystalHandlerDied();
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
BossAI::MoveInLineOfSight(who);
@@ -171,12 +171,12 @@ public:
_ohNovos = false;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
return type == DATA_NOVOS_ACHIEV && _ohNovos ? 1 : 0;
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summons.Summon(summon);
}
@@ -208,7 +208,7 @@ public:
{
for (uint8 i = 0; i < 4; i++)
if (uint64 guid = instance->GetData64(summoners[i].data))
- if (Creature* crystalChannelTarget = instance->instance->GetCreature(guid))
+ if (Creature* crystalChannelTarget = ObjectAccessor::GetCreature(*me, guid))
{
if (active)
crystalChannelTarget->AI()->SetData(summoners[i].spell, summoners[i].timer);
@@ -221,7 +221,7 @@ public:
{
for (uint8 i = 0; i < 4; i++)
if (uint64 guid = instance->GetData64(DATA_NOVOS_CRYSTAL_1 + i))
- if (GameObject* crystal = instance->instance->GetGameObject(guid))
+ if (GameObject* crystal = ObjectAccessor::GetGameObject(*me, guid))
SetCrystalStatus(crystal, active);
}
@@ -241,7 +241,7 @@ public:
{
for (uint8 i = 0; i < 4; i++)
if (uint64 guid = instance->GetData64(DATA_NOVOS_CRYSTAL_1 + i))
- if (GameObject* crystal = instance->instance->GetGameObject(guid))
+ if (GameObject* crystal = ObjectAccessor::GetGameObject(*me, guid))
if (crystal->GetGoState() == GO_STATE_ACTIVE)
{
SetCrystalStatus(crystal, false);
@@ -258,7 +258,7 @@ public:
events.ScheduleEvent(EVENT_SUMMON_MINIONS, 15000);
}
else if (uint64 guid = instance->GetData64(DATA_NOVOS_SUMMONER_4))
- if (Creature* crystalChannelTarget = instance->instance->GetCreature(guid))
+ if (Creature* crystalChannelTarget = ObjectAccessor::GetCreature(*me, guid))
crystalChannelTarget->AI()->SetData(SPELL_SUMMON_CRYSTAL_HANDLER, 15000);
}
@@ -267,7 +267,7 @@ public:
bool _bubbled;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetDrakTharonKeepAI<boss_novosAI>(creature);
}
@@ -282,14 +282,14 @@ public:
{
npc_crystal_channel_targetAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_spell = 0;
_timer = 0;
_temp = 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_spell)
{
@@ -303,18 +303,18 @@ public:
}
}
- void SetData(uint32 id, uint32 value) OVERRIDE
+ void SetData(uint32 id, uint32 value) override
{
_spell = id;
_timer = value;
_temp = value;
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (InstanceScript* instance = me->GetInstanceScript())
if (uint64 guid = instance->GetData64(DATA_NOVOS))
- if (Creature* novos = Creature::GetCreature(*me, guid))
+ if (Creature* novos = ObjectAccessor::GetCreature(*me, guid))
novos->AI()->JustSummoned(summon);
if (summon)
@@ -330,7 +330,7 @@ public:
uint32 _temp;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetDrakTharonKeepAI<npc_crystal_channel_targetAI>(creature);
}
@@ -341,7 +341,7 @@ class achievement_oh_novos : public AchievementCriteriaScript
public:
achievement_oh_novos() : AchievementCriteriaScript("achievement_oh_novos") { }
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
return target && target->GetTypeId() == TYPEID_UNIT && target->ToCreature()->AI()->GetData(DATA_NOVOS_ACHIEV);
}
@@ -356,7 +356,7 @@ class spell_novos_summon_minions : public SpellScriptLoader
{
PrepareSpellScript(spell_novos_summon_minions_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_COPY_OF_MINIONS))
return false;
@@ -369,13 +369,13 @@ class spell_novos_summon_minions : public SpellScriptLoader
GetCaster()->CastSpell((Unit*)NULL, SPELL_SUMMON_COPY_OF_MINIONS, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_novos_summon_minions_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_novos_summon_minions_SpellScript();
}
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp
index 8022c19180c..77f026b1d3a 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp
@@ -84,13 +84,13 @@ class boss_tharon_ja : public CreatureScript
{
boss_tharon_jaAI(Creature* creature) : BossAI(creature, DATA_THARON_JA) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
me->RestoreDisplayId();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
_EnterCombat();
@@ -101,13 +101,13 @@ class boss_tharon_ja : public CreatureScript
events.ScheduleEvent(EVENT_SHADOW_VOLLEY, urand(8000, 10000));
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
@@ -116,7 +116,7 @@ class boss_tharon_ja : public CreatureScript
DoCastAOE(SPELL_ACHIEVEMENT_CHECK, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -199,7 +199,7 @@ class boss_tharon_ja : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetDrakTharonKeepAI<boss_tharon_jaAI>(creature);
}
@@ -214,7 +214,7 @@ class spell_tharon_ja_clear_gift_of_tharon_ja : public SpellScriptLoader
{
PrepareSpellScript(spell_tharon_ja_clear_gift_of_tharon_ja_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_GIFT_OF_THARON_JA))
return false;
@@ -227,13 +227,13 @@ class spell_tharon_ja_clear_gift_of_tharon_ja : public SpellScriptLoader
target->RemoveAura(SPELL_GIFT_OF_THARON_JA);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_tharon_ja_clear_gift_of_tharon_ja_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_tharon_ja_clear_gift_of_tharon_ja_SpellScript();
}
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
index 4fc8f532c47..13d968d9e06 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
@@ -75,13 +75,13 @@ class boss_trollgore : public CreatureScript
{
boss_trollgoreAI(Creature* creature) : BossAI(creature, DATA_TROLLGORE) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
_consumptionJunction = true;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -93,7 +93,7 @@ class boss_trollgore : public CreatureScript
events.ScheduleEvent(EVENT_SPAWN, urand(30000, 40000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -147,13 +147,13 @@ class boss_trollgore : public CreatureScript
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_CONSUMPTION_JUNCTION)
return _consumptionJunction ? 1 : 0;
@@ -161,7 +161,7 @@ class boss_trollgore : public CreatureScript
return 0;
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -169,7 +169,7 @@ class boss_trollgore : public CreatureScript
Talk(SAY_KILL);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summon->GetMotionMaster()->MovePoint(POINT_LANDING, Landing);
summons.Summon(summon);
@@ -179,7 +179,7 @@ class boss_trollgore : public CreatureScript
bool _consumptionJunction;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetDrakTharonKeepAI<boss_trollgoreAI>(creature);
}
@@ -194,7 +194,7 @@ class npc_drakkari_invader : public CreatureScript
{
npc_drakkari_invaderAI(Creature* creature) : ScriptedAI(creature) { }
- void MovementInform(uint32 type, uint32 pointId) OVERRIDE
+ void MovementInform(uint32 type, uint32 pointId) override
{
if (type == POINT_MOTION_TYPE && pointId == POINT_LANDING)
{
@@ -205,7 +205,7 @@ class npc_drakkari_invader : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetDrakTharonKeepAI<npc_drakkari_invaderAI>(creature);
}
@@ -221,7 +221,7 @@ class spell_trollgore_consume : public SpellScriptLoader
{
PrepareSpellScript(spell_trollgore_consume_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_CONSUME_BUFF))
return false;
@@ -234,13 +234,13 @@ class spell_trollgore_consume : public SpellScriptLoader
target->CastSpell(GetCaster(), SPELL_CONSUME_BUFF, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_trollgore_consume_SpellScript::HandleConsume, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_trollgore_consume_SpellScript();
}
@@ -256,7 +256,7 @@ class spell_trollgore_corpse_explode : public SpellScriptLoader
{
PrepareAuraScript(spell_trollgore_corpse_explode_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_CORPSE_EXPLODE_DAMAGE))
return false;
@@ -276,14 +276,14 @@ class spell_trollgore_corpse_explode : public SpellScriptLoader
target->DespawnOrUnsummon();
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_trollgore_corpse_explode_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
AfterEffectRemove += AuraEffectRemoveFn(spell_trollgore_corpse_explode_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_trollgore_corpse_explode_AuraScript();
}
@@ -299,7 +299,7 @@ class spell_trollgore_invader_taunt : public SpellScriptLoader
{
PrepareSpellScript(spell_trollgore_invader_taunt_SpellScript);
- bool Validate(SpellInfo const* spellInfo) OVERRIDE
+ bool Validate(SpellInfo const* spellInfo) override
{
if (!sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_0].CalcValue()))
return false;
@@ -312,13 +312,13 @@ class spell_trollgore_invader_taunt : public SpellScriptLoader
target->CastSpell(GetCaster(), uint32(GetEffectValue()), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_trollgore_invader_taunt_SpellScript::HandleTaunt, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_trollgore_invader_taunt_SpellScript();
}
@@ -331,7 +331,7 @@ class achievement_consumption_junction : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
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 112afe732b6..d7c21991ca0 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp
@@ -41,7 +41,7 @@ class instance_drak_tharon_keep : public InstanceMapScript
memset(NovosSummonerGUIDs, 0, 4 * sizeof(uint64));
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -68,7 +68,7 @@ class instance_drak_tharon_keep : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -121,7 +121,7 @@ class instance_drak_tharon_keep : public InstanceMapScript
NovosSummonerGUIDs[3] = creature->GetGUID();
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -152,14 +152,14 @@ class instance_drak_tharon_keep : public InstanceMapScript
return 0;
}
- void OnUnitDeath(Unit* unit) OVERRIDE
+ void OnUnitDeath(Unit* unit) override
{
if (unit->GetEntry() == NPC_CRYSTAL_HANDLER)
if (Creature* novos = instance->GetCreature(NovosGUID))
novos->AI()->DoAction(ACTION_CRYSTAL_HANDLER_DIED);
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -170,7 +170,7 @@ class instance_drak_tharon_keep : public InstanceMapScript
return saveStream.str();
}
- void Load(char const* str) OVERRIDE
+ void Load(char const* str) override
{
if (!str)
{
@@ -213,7 +213,7 @@ class instance_drak_tharon_keep : public InstanceMapScript
uint64 NovosSummonerGUIDs[4];
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_drak_tharon_keep_InstanceScript(map);
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
index 2e0466d19d0..fe98f005bca 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
@@ -71,7 +71,7 @@ class boss_bronjahm : public CreatureScript
DoCast(me, SPELL_SOULSTORM_CHANNEL, true);
}
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != sObjectMgr->GetScriptId(FoSScriptName))
me->IsAIEnabled = false;
@@ -79,7 +79,7 @@ class boss_bronjahm : public CreatureScript
Reset();
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
events.SetPhase(PHASE_1);
@@ -90,12 +90,12 @@ class boss_bronjahm : public CreatureScript
instance->SetBossState(DATA_BRONJAHM, NOT_STARTED);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
DoCast(me, SPELL_SOULSTORM_CHANNEL, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
me->RemoveAurasDueToSpell(SPELL_SOULSTORM_CHANNEL);
@@ -103,20 +103,20 @@ class boss_bronjahm : public CreatureScript
instance->SetBossState(DATA_BRONJAHM, IN_PROGRESS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetBossState(DATA_BRONJAHM, DONE);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
if (events.IsInPhase(PHASE_1) && !HealthAbovePct(30))
{
@@ -127,7 +127,7 @@ class boss_bronjahm : public CreatureScript
}
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summons.Summon(summon);
summon->SetReactState(REACT_PASSIVE);
@@ -136,7 +136,7 @@ class boss_bronjahm : public CreatureScript
summon->CastSpell(summon, SPELL_PURPLE_BANISH_VISUAL, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -186,7 +186,7 @@ class boss_bronjahm : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_bronjahmAI>(creature);
}
@@ -204,7 +204,7 @@ class npc_corrupted_soul_fragment : public CreatureScript
instance = me->GetInstanceScript();
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != CHASE_MOTION_TYPE)
return;
@@ -226,7 +226,7 @@ class npc_corrupted_soul_fragment : public CreatureScript
InstanceScript* instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_corrupted_soul_fragmentAI>(creature);
}
@@ -254,13 +254,13 @@ class spell_bronjahm_magic_bane : public SpellScriptLoader
SetHitDamage(newDamage);
}
- void Register() OVERRIDE
+ void Register() override
{
OnHit += SpellHitFn(spell_bronjahm_magic_bane_SpellScript::RecalculateDamage);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_bronjahm_magic_bane_SpellScript();
}
@@ -281,13 +281,13 @@ class spell_bronjahm_consume_soul : public SpellScriptLoader
GetHitUnit()->CastSpell(GetHitUnit(), GetEffectValue(), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_bronjahm_consume_soul_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_bronjahm_consume_soul_SpellScript();
}
@@ -309,13 +309,13 @@ class spell_bronjahm_soulstorm_channel : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), i, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_bronjahm_soulstorm_channel_AuraScript::HandlePeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_bronjahm_soulstorm_channel_AuraScript();
}
@@ -340,13 +340,13 @@ class spell_bronjahm_soulstorm_visual : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), i, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_bronjahm_soulstorm_visual_AuraScript::HandlePeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_bronjahm_soulstorm_visual_AuraScript();
}
@@ -388,7 +388,7 @@ class spell_bronjahm_soulstorm_targeting : public SpellScriptLoader
targets = sharedTargets;
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_bronjahm_soulstorm_targeting_SpellScript::FilterTargetsInitial, EFFECT_1, TARGET_UNIT_DEST_AREA_ENEMY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_bronjahm_soulstorm_targeting_SpellScript::FilterTargetsSubsequent, EFFECT_2, TARGET_UNIT_DEST_AREA_ENEMY);
@@ -397,7 +397,7 @@ class spell_bronjahm_soulstorm_targeting : public SpellScriptLoader
std::list<WorldObject*> sharedTargets;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_bronjahm_soulstorm_targeting_SpellScript();
}
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 8ef6abf2f47..a048abd6554 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
@@ -132,7 +132,7 @@ class boss_devourer_of_souls : public CreatureScript
{
}
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != sObjectMgr->GetScriptId(FoSScriptName))
me->IsAIEnabled = false;
@@ -140,7 +140,7 @@ class boss_devourer_of_souls : public CreatureScript
Reset();
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
me->SetDisplayId(DISPLAY_ANGER);
@@ -154,7 +154,7 @@ class boss_devourer_of_souls : public CreatureScript
instance->SetData(DATA_DEVOURER_EVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_FACE_AGGRO);
@@ -169,7 +169,7 @@ class boss_devourer_of_souls : public CreatureScript
instance->SetData(DATA_DEVOURER_EVENT, IN_PROGRESS);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -194,7 +194,7 @@ class boss_devourer_of_souls : public CreatureScript
Talk(textId);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
summons.DespawnAll();
@@ -223,13 +223,13 @@ class boss_devourer_of_souls : public CreatureScript
}
}
- void SpellHitTarget(Unit* /*target*/, const SpellInfo* spell) OVERRIDE
+ void SpellHitTarget(Unit* /*target*/, const SpellInfo* spell) override
{
if (spell->Id == H_SPELL_PHANTOM_BLAST)
threeFaced = false;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_THREE_FACED)
return threeFaced;
@@ -237,7 +237,7 @@ class boss_devourer_of_souls : public CreatureScript
return 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// Return since we have no target
if (!UpdateVictim())
@@ -292,7 +292,7 @@ class boss_devourer_of_souls : public CreatureScript
beamAngle = me->GetOrientation();
- beamAngleDiff = M_PI/30.0f; // PI/2 in 15 sec = PI/30 per tick
+ beamAngleDiff = float(M_PI)/30.0f; // PI/2 in 15 sec = PI/30 per tick
if (RAND(true, false))
beamAngleDiff = -beamAngleDiff;
@@ -343,7 +343,7 @@ class boss_devourer_of_souls : public CreatureScript
int8 wailingSoulTick;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_devourer_of_soulsAI>(creature);
}
@@ -359,7 +359,7 @@ class spell_devourer_of_souls_mirrored_soul : public SpellScriptLoader
{
PrepareSpellScript(spell_devourer_of_souls_mirrored_soul_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MIRRORED_SOUL_PROC_AURA))
return false;
@@ -372,13 +372,13 @@ class spell_devourer_of_souls_mirrored_soul : public SpellScriptLoader
target->CastSpell(GetCaster(), SPELL_MIRRORED_SOUL_PROC_AURA, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_devourer_of_souls_mirrored_soul_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_devourer_of_souls_mirrored_soul_SpellScript();
}
@@ -394,14 +394,14 @@ class spell_devourer_of_souls_mirrored_soul_proc : public SpellScriptLoader
{
PrepareAuraScript(spell_devourer_of_souls_mirrored_soul_proc_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MIRRORED_SOUL_DAMAGE))
return false;
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
return true;
}
@@ -418,14 +418,14 @@ class spell_devourer_of_souls_mirrored_soul_proc : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_MIRRORED_SOUL_DAMAGE, SPELLVALUE_BASE_POINT0, damage, GetCaster(), true);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_devourer_of_souls_mirrored_soul_proc_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_devourer_of_souls_mirrored_soul_proc_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_devourer_of_souls_mirrored_soul_proc_AuraScript();
}
@@ -441,7 +441,7 @@ class spell_devourer_of_souls_mirrored_soul_target_selector : public SpellScript
{
PrepareSpellScript(spell_devourer_of_souls_mirrored_soul_target_selector_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MIRRORED_SOUL_BUFF))
return false;
@@ -464,14 +464,14 @@ class spell_devourer_of_souls_mirrored_soul_target_selector : public SpellScript
GetCaster()->CastSpell(target, SPELL_MIRRORED_SOUL_BUFF, false);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_devourer_of_souls_mirrored_soul_target_selector_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
OnEffectHitTarget += SpellEffectFn(spell_devourer_of_souls_mirrored_soul_target_selector_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_devourer_of_souls_mirrored_soul_target_selector_SpellScript();
}
@@ -482,7 +482,7 @@ class achievement_three_faced : public AchievementCriteriaScript
public:
achievement_three_faced() : AchievementCriteriaScript("achievement_three_faced") { }
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp
index 3e901bfd0d4..fc9a786aab9 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp
@@ -89,13 +89,13 @@ public:
EventMap events;
Phase phase;
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
phase = PHASE_NORMAL;
}
- void DoAction(int32 actionId) OVERRIDE
+ void DoAction(int32 actionId) override
{
switch (actionId)
{
@@ -109,7 +109,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (phase == PHASE_INTRO)
{
@@ -158,7 +158,7 @@ public:
}
};
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -172,7 +172,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -188,7 +188,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_sylvanas_fosAI>(creature);
}
@@ -212,13 +212,13 @@ public:
EventMap events;
Phase phase;
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
phase = PHASE_NORMAL;
}
- void DoAction(int32 actionId) OVERRIDE
+ void DoAction(int32 actionId) override
{
switch (actionId)
{
@@ -232,7 +232,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (phase == PHASE_INTRO)
{
@@ -292,7 +292,7 @@ public:
}
};
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -306,7 +306,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -322,7 +322,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_jaina_fosAI>(creature);
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp
index cb03842cf3f..964787777a7 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp
@@ -43,13 +43,13 @@ class instance_forge_of_souls : public InstanceMapScript
teamInInstance = 0;
}
- void OnPlayerEnter(Player* player) OVERRIDE
+ void OnPlayerEnter(Player* player) override
{
if (!teamInInstance)
teamInInstance = player->GetTeam();
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
if (!teamInInstance)
{
@@ -69,20 +69,20 @@ class instance_forge_of_souls : public InstanceMapScript
break;
case NPC_SYLVANAS_PART1:
if (teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_JAINA_PART1, ALLIANCE);
+ creature->UpdateEntry(NPC_JAINA_PART1);
break;
case NPC_LORALEN:
if (teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_ELANDRA, ALLIANCE);
+ creature->UpdateEntry(NPC_ELANDRA);
break;
case NPC_KALIRA:
if (teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_KORELN, ALLIANCE);
+ creature->UpdateEntry(NPC_KORELN);
break;
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -95,7 +95,7 @@ class instance_forge_of_souls : public InstanceMapScript
return 0;
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -110,7 +110,7 @@ class instance_forge_of_souls : public InstanceMapScript
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -121,7 +121,7 @@ class instance_forge_of_souls : public InstanceMapScript
return saveStream.str();
}
- void Load(const char* in) OVERRIDE
+ void Load(const char* in) override
{
if (!in)
{
@@ -158,7 +158,7 @@ class instance_forge_of_souls : public InstanceMapScript
uint32 teamInInstance;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_forge_of_souls_InstanceScript(map);
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp
index 2ba47d354f9..a5577b6a0ea 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp
@@ -25,7 +25,7 @@ enum Texts
SAY_SLAY = 1,
SAY_DEATH = 2,
SAY_IMPENDING_DESPAIR = 3,
- SAY_DEFILING_HORROR = 4,
+ SAY_DEFILING_HORROR = 4
};
enum Spells
@@ -33,8 +33,9 @@ enum Spells
SPELL_QUIVERING_STRIKE = 72422,
SPELL_IMPENDING_DESPAIR = 72426,
SPELL_DEFILING_HORROR = 72435,
- SPELL_HOPELESSNESS = 72395,
- H_SPELL_HOPELESSNESS = 72390, /// @todo not in dbc. Add in DB.
+ SPELL_HOPELESSNESS_1 = 72395,
+ SPELL_HOPELESSNESS_2 = 72396,
+ SPELL_HOPELESSNESS_3 = 72397
};
enum Events
@@ -42,99 +43,106 @@ enum Events
EVENT_NONE,
EVENT_QUIVERING_STRIKE,
EVENT_IMPENDING_DESPAIR,
- EVENT_DEFILING_HORROR,
+ EVENT_DEFILING_HORROR
};
+uint32 const HopelessnessHelper[3] = { SPELL_HOPELESSNESS_1, SPELL_HOPELESSNESS_2, SPELL_HOPELESSNESS_3 };
+
class boss_falric : public CreatureScript
{
-public:
- boss_falric() : CreatureScript("boss_falric") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetInstanceAI<boss_falricAI>(creature);
- }
-
- struct boss_falricAI : public boss_horAI
- {
- boss_falricAI(Creature* creature) : boss_horAI(creature) { }
-
- uint8 uiHopelessnessCount;
-
- void Reset() OVERRIDE
- {
- boss_horAI::Reset();
-
- uiHopelessnessCount = 0;
+ public:
+ boss_falric() : CreatureScript("boss_falric") { }
- instance->SetBossState(DATA_FALRIC_EVENT, NOT_STARTED);
- }
-
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ struct boss_falricAI : public boss_horAI
{
- Talk(SAY_AGGRO);
- instance->SetBossState(DATA_FALRIC_EVENT, IN_PROGRESS);
-
- events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 23000);
- events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 9000);
- events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(25000, 45000)); /// @todo adjust timer.
- }
+ boss_falricAI(Creature* creature) : boss_horAI(creature, DATA_FALRIC) { }
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- Talk(SAY_DEATH);
-
- instance->SetBossState(DATA_FALRIC_EVENT, DONE);
- }
+ void Reset() override
+ {
+ boss_horAI::Reset();
+ _hopelessnessCount = 0;
+ }
- void KilledUnit(Unit* /*victim*/) OVERRIDE
- {
- Talk(SAY_SLAY);
- }
+ void EnterCombat(Unit* /*who*/) override
+ {
+ Talk(SAY_AGGRO);
+ DoZoneInCombat();
+ instance->SetBossState(DATA_FALRIC, IN_PROGRESS);
- void UpdateAI(uint32 diff) OVERRIDE
- {
- // Return since we have no target
- if (!UpdateVictim())
- return;
+ events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 23000);
+ events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 9000);
+ events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(21000, 39000));
+ }
- events.Update(diff);
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
+ {
+ if ((_hopelessnessCount < 1 && me->HealthBelowPctDamaged(66, damage))
+ || (_hopelessnessCount < 2 && me->HealthBelowPctDamaged(33, damage))
+ || (_hopelessnessCount < 3 && me->HealthBelowPctDamaged(10, damage)))
+ {
+ if (_hopelessnessCount)
+ me->RemoveOwnedAura(sSpellMgr->GetSpellIdForDifficulty(HopelessnessHelper[_hopelessnessCount - 1], me));
+ DoCast(me, HopelessnessHelper[_hopelessnessCount]);
+ ++_hopelessnessCount;
+ }
+ }
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ void JustDied(Unit* /*killer*/) override
+ {
+ Talk(SAY_DEATH);
+ events.Reset();
+ instance->SetBossState(DATA_FALRIC, DONE);
+ }
- switch (events.ExecuteEvent())
+ void KilledUnit(Unit* who) override
{
- case EVENT_QUIVERING_STRIKE:
- DoCast(SPELL_QUIVERING_STRIKE);
- events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 10000);
- break;
- case EVENT_IMPENDING_DESPAIR:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- {
- Talk(SAY_IMPENDING_DESPAIR);
- DoCast(target, SPELL_IMPENDING_DESPAIR);
- }
- events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 13000);
- break;
- case EVENT_DEFILING_HORROR:
- DoCast(SPELL_DEFILING_HORROR);
- events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(25000, 45000)); /// @todo adjust timer.
- break;
+ if (who->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_SLAY);
}
- if ((uiHopelessnessCount < 1 && HealthBelowPct(66))
- || (uiHopelessnessCount < 2 && HealthBelowPct(33))
- || (uiHopelessnessCount < 3 && HealthBelowPct(10)))
+ void UpdateAI(uint32 diff) override
{
- uiHopelessnessCount++;
- DoCast(DUNGEON_MODE(SPELL_HOPELESSNESS, H_SPELL_HOPELESSNESS));
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ switch (events.ExecuteEvent())
+ {
+ case EVENT_QUIVERING_STRIKE:
+ DoCastVictim(SPELL_QUIVERING_STRIKE);
+ events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 10000);
+ break;
+ case EVENT_IMPENDING_DESPAIR:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
+ {
+ Talk(SAY_IMPENDING_DESPAIR);
+ DoCast(target, SPELL_IMPENDING_DESPAIR);
+ }
+ events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 13000);
+ break;
+ case EVENT_DEFILING_HORROR:
+ DoCastAOE(SPELL_DEFILING_HORROR);
+ events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(21000, 39000));
+ break;
+ default:
+ break;
+ }
+
+ DoMeleeAttackIfReady();
}
- DoMeleeAttackIfReady();
- }
- };
+ private:
+ uint8 _hopelessnessCount;
+ };
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfReflectionAI<boss_falricAI>(creature);
+ }
};
void AddSC_boss_falric()
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp
index c6f692e7ff5..902a917c594 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp
@@ -17,6 +17,8 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "SpellScript.h"
+#include "SpellAuraEffects.h"
#include "halls_of_reflection.h"
enum Texts
@@ -33,6 +35,7 @@ enum Spells
SPELL_WELL_OF_CORRUPTION = 72362,
SPELL_CORRUPTED_FLESH = 72363,
SPELL_SHARED_SUFFERING = 72368,
+ SPELL_SHARED_SUFFERING_DISPEL = 72373
};
enum Events
@@ -41,93 +44,130 @@ enum Events
EVENT_OBLITERATE,
EVENT_WELL_OF_CORRUPTION,
EVENT_CORRUPTED_FLESH,
- EVENT_SHARED_SUFFERING,
+ EVENT_SHARED_SUFFERING
};
class boss_marwyn : public CreatureScript
{
-public:
- boss_marwyn() : CreatureScript("boss_marwyn") { }
+ public:
+ boss_marwyn() : CreatureScript("boss_marwyn") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetInstanceAI<boss_marwynAI>(creature);
- }
-
- struct boss_marwynAI : public boss_horAI
- {
- boss_marwynAI(Creature* creature) : boss_horAI(creature) { }
-
- void Reset() OVERRIDE
+ struct boss_marwynAI : public boss_horAI
{
- boss_horAI::Reset();
+ boss_marwynAI(Creature* creature) : boss_horAI(creature, DATA_MARWYN) { }
- instance->SetBossState(DATA_MARWYN_EVENT, NOT_STARTED);
- }
+ void Reset() override
+ {
+ boss_horAI::Reset();
+ }
- void EnterCombat(Unit* /*who*/) OVERRIDE
- {
- Talk(SAY_AGGRO);
- instance->SetBossState(DATA_MARWYN_EVENT, IN_PROGRESS);
+ void EnterCombat(Unit* /*who*/) override
+ {
+ Talk(SAY_AGGRO);
+ DoZoneInCombat();
+ instance->SetBossState(DATA_MARWYN, IN_PROGRESS);
+
+ events.ScheduleEvent(EVENT_OBLITERATE, urand(8000, 13000));
+ events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000);
+ events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000);
+ events.ScheduleEvent(EVENT_SHARED_SUFFERING, urand(14000, 15000));
+ }
- events.ScheduleEvent(EVENT_OBLITERATE, 30000); /// @todo Check timer
- events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000);
- events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000);
- events.ScheduleEvent(EVENT_SHARED_SUFFERING, 20000); /// @todo Check timer
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ Talk(SAY_DEATH);
+ events.Reset();
+ instance->SetBossState(DATA_MARWYN, DONE);
+ }
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- Talk(SAY_DEATH);
+ void KilledUnit(Unit* who) override
+ {
+ if (who->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_SLAY);
+ }
- instance->SetBossState(DATA_MARWYN_EVENT, DONE);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ switch (events.ExecuteEvent())
+ {
+ case EVENT_OBLITERATE:
+ DoCastVictim(SPELL_OBLITERATE);
+ events.ScheduleEvent(EVENT_OBLITERATE, urand(8000, 13000));
+ break;
+ case EVENT_WELL_OF_CORRUPTION:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
+ DoCast(target, SPELL_WELL_OF_CORRUPTION);
+ events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000);
+ break;
+ case EVENT_CORRUPTED_FLESH:
+ Talk(SAY_CORRUPTED_FLESH);
+ DoCastAOE(SPELL_CORRUPTED_FLESH);
+ events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000);
+ break;
+ case EVENT_SHARED_SUFFERING:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
+ DoCast(target, SPELL_SHARED_SUFFERING);
+ events.ScheduleEvent(EVENT_SHARED_SUFFERING, urand(14000, 15000));
+ break;
+ default:
+ break;
+ }
+
+ DoMeleeAttackIfReady();
+ }
+ };
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
- Talk(SAY_SLAY);
+ return GetHallsOfReflectionAI<boss_marwynAI>(creature);
}
+};
- void UpdateAI(uint32 diff) OVERRIDE
- {
- // Return since we have no target
- if (!UpdateVictim())
- return;
+// 72368, 72369 - Shared Suffering
+class spell_marwyn_shared_suffering : public SpellScriptLoader
+{
+ public:
+ spell_marwyn_shared_suffering() : SpellScriptLoader("spell_marwyn_shared_suffering") { }
- events.Update(diff);
+ class spell_marwyn_shared_suffering_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_marwyn_shared_suffering_AuraScript);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ {
+ if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_ENEMY_SPELL)
+ return;
+
+ if (Unit* caster = GetCaster())
+ {
+ int32 remainingDamage = aurEff->GetAmount() * (aurEff->GetTotalTicks() - aurEff->GetTickNumber());
+ if (remainingDamage > 0)
+ caster->CastCustomSpell(SPELL_SHARED_SUFFERING_DISPEL, SPELLVALUE_BASE_POINT1, remainingDamage, GetTarget(), TRIGGERED_FULL_MASK);
+ }
+ }
- switch (events.ExecuteEvent())
+ void Register() override
{
- case EVENT_OBLITERATE:
- DoCast(SPELL_OBLITERATE);
- events.ScheduleEvent(EVENT_OBLITERATE, 30000);
- break;
- case EVENT_WELL_OF_CORRUPTION:
- DoCast(SPELL_WELL_OF_CORRUPTION);
- events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000);
- break;
- case EVENT_CORRUPTED_FLESH:
- Talk(SAY_CORRUPTED_FLESH);
- DoCast(SPELL_CORRUPTED_FLESH);
- events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000);
- break;
- case EVENT_SHARED_SUFFERING:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_SHARED_SUFFERING);
- events.ScheduleEvent(EVENT_SHARED_SUFFERING, 20000);
- break;
+ AfterEffectRemove += AuraEffectRemoveFn(spell_marwyn_shared_suffering_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
}
+ };
- DoMeleeAttackIfReady();
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_marwyn_shared_suffering_AuraScript();
}
- };
-
};
void AddSC_boss_marwyn()
{
new boss_marwyn();
+ new spell_marwyn_shared_suffering();
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
index af459729eb8..b4d1ee2f09b 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
@@ -18,6 +18,8 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
+#include "SpellScript.h"
+#include "Transport.h"
#include "Player.h"
#include "halls_of_reflection.h"
@@ -36,17 +38,6 @@ enum Text
SAY_JAINA_INTRO_11 = 10,
SAY_JAINA_INTRO_END = 11,
- SAY_JAINA_ESCAPE_1 = 0,
- SAY_JAINA_ESCAPE_2 = 1,
- SAY_JAINA_ESCAPE_3 = 2,
- SAY_JAINA_ESCAPE_4 = 3,
- SAY_JAINA_ESCAPE_5 = 4,
- SAY_JAINA_ESCAPE_6 = 5,
- SAY_JAINA_ESCAPE_7 = 6,
- SAY_JAINA_ESCAPE_8 = 7,
- SAY_JAINA_ESCAPE_9 = 8,
- SAY_JAINA_ESCAPE_10 = 9,
-
SAY_SYLVANAS_INTRO_1 = 0,
SAY_SYLVANAS_INTRO_2 = 1,
SAY_SYLVANAS_INTRO_3 = 2,
@@ -57,16 +48,6 @@ enum Text
SAY_SYLVANAS_INTRO_8 = 7,
SAY_SYLVANAS_INTRO_END = 8,
- SAY_SYLVANAS_ESCAPE_1 = 0,
- SAY_SYLVANAS_ESCAPE_2 = 1,
- SAY_SYLVANAS_ESCAPE_3 = 2,
- SAY_SYLVANAS_ESCAPE_4 = 3,
- SAY_SYLVANAS_ESCAPE_5 = 4,
- SAY_SYLVANAS_ESCAPE_6 = 5,
- SAY_SYLVANAS_ESCAPE_7 = 6,
- SAY_SYLVANAS_ESCAPE_8 = 7,
- SAY_SYLVANAS_ESCAPE_9 = 8,
-
SAY_UTHER_INTRO_A2_1 = 0,
SAY_UTHER_INTRO_A2_2 = 1,
SAY_UTHER_INTRO_A2_3 = 2,
@@ -90,27 +71,40 @@ enum Text
SAY_LK_JAINA_INTRO_END = 3,
SAY_LK_SYLVANAS_INTRO_END = 4,
+ SAY_JAINA_SYLVANAS_ESCAPE_1 = 0,
+ SAY_JAINA_SYLVANAS_ESCAPE_2 = 1,
+ SAY_JAINA_SYLVANAS_ESCAPE_3 = 2,
+ SAY_JAINA_SYLVANAS_ESCAPE_4 = 3,
+ SAY_JAINA_SYLVANAS_ESCAPE_5 = 4,
+ SAY_JAINA_SYLVANAS_ESCAPE_6 = 5,
+ SAY_JAINA_SYLVANAS_ESCAPE_7 = 6, // unused
+ SAY_JAINA_SYLVANAS_ESCAPE_8 = 7,
+
+ SAY_JAINA_ESCAPE_9 = 8,
+ SAY_JAINA_ESCAPE_10 = 9,
+
+ SAY_SYLVANAS_ESCAPE_9 = 8,
+
SAY_LK_ESCAPE_1 = 0,
SAY_LK_ESCAPE_2 = 1,
- SAY_LK_ESCAPE_3 = 2,
- SAY_LK_ESCAPE_4 = 3,
- SAY_LK_ESCAPE_5 = 4,
- SAY_LK_ESCAPE_6 = 5,
- SAY_LK_ESCAPE_7 = 6,
- SAY_LK_ESCAPE_8 = 7,
- SAY_LK_ESCAPE_9 = 8,
- SAY_LK_ESCAPE_10 = 9,
- SAY_LK_ESCAPE_11 = 10,
+ SAY_LK_ESCAPE_ICEWALL_SUMMONED_1 = 2,
+ SAY_LK_ESCAPE_ICEWALL_SUMMONED_2 = 3,
+ SAY_LK_ESCAPE_ICEWALL_SUMMONED_3 = 4,
+ SAY_LK_ESCAPE_ICEWALL_SUMMONED_4 = 5,
+ SAY_LK_ESCAPE_GHOULS = 6,
+ SAY_LK_ESCAPE_ABOMINATION = 7,
+ SAY_LK_ESCAPE_WINTER = 8,
+ SAY_LK_ESCAPE_HARVEST_SOUL = 9,
SAY_FALRIC_INTRO_1 = 5,
SAY_FALRIC_INTRO_2 = 6,
- SAY_MARWYN_INTRO_1 = 4,
+ SAY_MARWYN_INTRO_1 = 4
};
enum Events
{
- EVENT_WALK_INTRO1 = 1,
+ EVENT_WALK_INTRO1 = 1,
EVENT_WALK_INTRO2,
EVENT_START_INTRO,
EVENT_SKIP_INTRO,
@@ -181,21 +175,17 @@ enum Events
EVENT_ESCAPE_13,
EVENT_ESCAPE_14,
EVENT_ESCAPE_15,
- //EVENT_ESCAPE_16,
+ EVENT_ESCAPE_16,
EVENT_ESCAPE_17,
- EVENT_ESCAPE_18,
- EVENT_ESCAPE_19,
- EVENT_ESCAPE_20,
- EVENT_ESCAPE_21,
- EVENT_ESCAPE_22,
- EVENT_ESCAPE_23,
- EVENT_ESCAPE_24,
- EVENT_ESCAPE_25,
- EVENT_ESCAPE_26,
- EVENT_ESCAPE_27,
-
- EVENT_OPEN_FROSTWORN_DOOR,
- EVENT_CLOSE_FROSTWORN_DOOR,
+
+ EVENT_REMORSELESS_WINTER,
+ EVENT_ESCAPE_SUMMON_GHOULS,
+ EVENT_ESCAPE_SUMMON_WITCH_DOCTOR,
+ EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION,
+
+ EVENT_OPEN_IMPENETRABLE_DOOR,
+ EVENT_CLOSE_IMPENETRABLE_DOOR,
+ EVENT_KORELN_LORALEN_DEATH
};
enum Misc
@@ -203,907 +193,1153 @@ enum Misc
ACTION_START_INTRO,
ACTION_SKIP_INTRO,
- QUEST_DELIVRANCE_FROM_THE_PIT_A2 = 24710,
- QUEST_DELIVRANCE_FROM_THE_PIT_H2 = 24712,
- QUEST_WRATH_OF_THE_LICH_KING_A2 = 24500,
- QUEST_WRATH_OF_THE_LICH_KING_H2 = 24802,
+ JAINA_SYLVANAS_MAX_HEALTH = 252000,
+
+ POINT_SHADOW_THRONE_DOOR = 1,
+ POINT_ATTACK_ICEWALL = 2,
+ POINT_TRAP = 3,
+
+ SOUND_LK_SLAY_1 = 17214,
+ SOUND_LK_SLAY_2 = 17215,
+ SOUND_LK_FURY_OF_FROSTMOURNE = 17224
};
enum Spells
{
- SPELL_CAST_VISUAL = 65633, // Jaina/Sylavana
- SPELL_BOSS_SPAWN_AURA = 72712, // Falric and Marwyn
- SPELL_UTHER_DESPAWN = 70693,
+ // Misc
SPELL_TAKE_FROSTMOURNE = 72729,
SPELL_FROSTMOURNE_DESPAWN = 72726,
SPELL_FROSTMOURNE_VISUAL = 73220,
SPELL_FROSTMOURNE_SOUNDS = 70667,
- SPELL_JAINA_ICEBARRIER = 69787, // Jaina Ice Barrier
- SPELL_JAINA_ICEPRISON = 69708, // Jaina Ice Prison
- SPELL_SYLVANAS_CLOAKOFDARKNESS = 70188, // Sylvanas Cloak of Darkness
- SPELL_SYLVANAS_DARKBINDING = 70194, // Sylvanas Dark Binding
- SPELL_REMORSELESS_WINTER = 69780, // Lich King Remorseless Winter
- SPELL_SOUL_REAPER = 69409, // Lich King Soul Reaper
- SPELL_FURY_OF_FROSTMOURNE = 70063, // Lich King Fury of FrostMourne
+ SPELL_BOSS_SPAWN_AURA = 72712, // Falric and Marwyn
+ SPELL_UTHER_DESPAWN = 70693,
+
+ // Jaina, Sylvanas
+ SPELL_CAST_VISUAL = 65633, // wrong
+ SPELL_SUMMON_SOULS = 72711,
+ SPELL_TAUNT_ARTHAS = 69857,
+ SPELL_JAINA_ICE_BARRIER = 69787, // Jaina Ice Barrier
+ SPELL_JAINA_ICE_PRISON = 69708, // Jaina Ice Prison
SPELL_JAINA_DESTROY_ICE_WALL = 69784, // Jaina
+ SPELL_SYLVANAS_CLOAK_OF_DARKNESS = 70188, // Sylvanas Cloak of Darkness
+ SPELL_SYLVANAS_DARK_BINDING = 70194, // Sylvanas Dark Binding
SPELL_SYLVANAS_DESTROY_ICE_WALL = 70224, // Sylvanas
- SPELL_SYLVANAS_JUMP = 68339, // Sylvanas Jump
+ SPELL_SYLVANAS_BLINDING_RETREAT = 70199, // Sylvanas Blinding Retreat
+
+ // Lich King
+ SPELL_REMORSELESS_WINTER = 69780, // Lich King Remorseless Winter
+ SPELL_SOUL_REAPER = 69409, // Lich King Soul Reaper
+ SPELL_FURY_OF_FROSTMOURNE = 70063, // Lich King Fury of Frostmourne
SPELL_RAISE_DEAD = 69818,
- SPELL_HARVEST_SOUL = 70070,
- SPELL_SUMMON_RISE_WITCH_DOCTOR = 69836,
+ SPELL_SUMMON_RISEN_WITCH_DOCTOR = 69836,
SPELL_SUMMON_LUMBERING_ABOMINATION = 69835,
SPELL_SUMMON_ICE_WALL = 69768, // Visual effect and icewall summoning
+ SPELL_PAIN_AND_SUFFERING = 74115, // Lich King Pain and Suffering
+ SPELL_STUN_BREAK_JAINA = 69764, // Lich King visual spell, another Stun Break is 69763, should remove the stun effect
+ SPELL_STUN_BREAK_SYLVANAS = 70200,
+ SPELL_HARVEST_SOUL = 69866, // Lich King Harvest Soul
+
+ // Koreln, Loralen
+ SPELL_FEIGN_DEATH = 29266,
// Raging Ghoul
- SPELL_EMERGE_VISUAL = 50142,
SPELL_GHOUL_JUMP = 70150,
+ SPELL_RAGING_GHOUL_SPAWN = 69636,
- // Witch Doctor
- SPELL_COURSE_OF_DOOM = 70144,
+ // Risen Witch Doctor
+ SPELL_CURSE_OF_DOOM = 70144,
SPELL_SHADOW_BOLT_VOLLEY = 70145,
SPELL_SHADOW_BOLT = 70080,
+ SPELL_RISEN_WITCH_DOCTOR_SPAWN = 69639,
// Lumbering Abomination
- SPELL_ABON_STRIKE = 40505,
- SPELL_VOMIT_SPRAY = 70176,
+ SPELL_CLEAVE = 40505,
+ SPELL_VOMIT_SPRAY = 70176
};
-const Position HallsofReflectionLocs[] =
+enum HorGossipMenu
{
- {5283.234863f, 1990.946777f, 707.695679f, 0.929097f}, // 2 Loralen Follows
- {5408.031250f, 2102.918213f, 707.695251f, 0.792756f}, // 9 Sylvanas Follows
- {5401.866699f, 2110.837402f, 707.695251f, 0.800610f}, // 10 Loralen follows
+ GOSSIP_MENU_JAINA_FINAL = 10930,
+ GOSSIP_MENU_SYLVANAS_FINAL = 10931
};
-const Position NpcJainaOrSylvanasEscapeRoute[] =
+Position const NpcJainaOrSylvanasEscapeRoute[] =
{
- {5601.217285f, 2207.652832f, 731.541931f, 5.223304f}, // leave the throne room
- {5607.224375f, 2173.913330f, 731.126038f, 2.608723f}, // adjust route
- {5583.427246f, 2138.784180f, 731.150391f, 4.260901f}, // stop for talking
- {5560.281738f, 2104.025635f, 731.410889f, 4.058383f}, // attack the first icewall
- {5510.990723f, 2000.772217f, 734.716064f, 3.973213f}, // attack the second icewall
- {5452.641113f, 1905.762329f, 746.530579f, 4.118834f}, // attack the third icewall
- {5338.126953f, 1768.429810f, 767.237244f, 3.855189f}, // attack the fourth icewall
- {5257.712402f, 1669.379395f, 784.300110f, 0.908373f}, // face the Lich king
- {5261.191895f, 1681.901611f, 784.285278f, 4.410465f}, // final position
+ { 5601.217285f, 2207.652832f, 731.541931f, 5.223304f }, // leave the throne room
+ { 5607.224375f, 2173.913330f, 731.126038f, 2.608723f }, // adjust route
+ { 5583.427246f, 2138.784180f, 731.150391f, 4.260901f }, // stop for talking
+ { 5560.281738f, 2104.025635f, 731.410889f, 4.058383f }, // attack the first icewall
+ { 5510.990723f, 2000.772217f, 734.716064f, 3.973213f }, // attack the second icewall
+ { 5452.641113f, 1905.762329f, 746.530579f, 4.118834f }, // attack the third icewall
+ { 5338.126953f, 1768.429810f, 767.237244f, 3.855189f }, // attack the fourth icewall
+ { 5259.06f, 1669.27f, 784.3008f, 0.0f }, // trap (sniffed)
+ { 5265.53f, 1681.6f, 784.2947f, 4.13643f } // final position (sniffed)
};
-const Position IceWalls[] =
+Position const LichKingMoveAwayPos = { 5400.069824f, 2102.7131689f, 707.69525f, 0.843803f }; // Lich King walks away
+Position const LichKingFirstSummon = { 5600.076172f, 2192.270996f, 731.750488f, 4.330935f }; // Lich King First summons
+Position const JainaSylvanasShadowThroneDoor = { 5577.243f, 2235.852f, 733.0128f, 2.209562f }; // Jaina/Sylvanas move to door
+Position const LichKingFinalPos = { 5283.742188f, 1706.335693f, 783.293518f, 4.138510f }; // Lich King Final Pos
+
+// sniffed
+Position const KorelnOrLoralenPos[] =
{
- {5547.833f, 2083.701f,731.4332f,4.24115f}, // first icewall
- {5503.213f, 1969.547f,737.0245f,4.293779f},// second icewall
- {5439.976f, 1879.005f,752.7048f,4.207591f},// third icewall
- {5318.289f, 1749.184f,771.9423f,4.054276f},// fourth icewall
+ { 5253.061f, 1953.616f, 707.6948f, 0.8377581f },
+ { 5283.226f, 1992.300f, 707.7445f, 0.8377581f },
+ { 5360.711f, 2064.797f, 707.6948f, 0.0f }
};
-const Position IntroPos = {5265.89f, 1952.98f, 707.6978f, 0.0f}; // Jaina/Sylvanas Intro Start Position
-const Position MoveThronePos = {5306.952148f, 1998.499023f, 709.341431f, 1.277278f}; // Jaina/Sylvanas walks to throne
-const Position UtherSpawnPos = {5308.310059f, 2003.857178f, 709.341431f, 4.650315f};
-const Position LichKingSpawnPos = {5362.917480f, 2062.307129f, 707.695374f, 3.945812f};
-const Position LichKingMoveThronePos = {5312.080566f, 2009.172119f, 709.341431f, 3.973301f}; // Lich King walks to throne
-const Position LichKingMoveAwayPos = {5400.069824f, 2102.7131689f, 707.69525f, 0.843803f}; // Lich King walks away
-const Position LichKingSpawnPos2 = {5552.733398f, 2262.718506f, 733.011047f, 4.009696f}; // Lich King Spawn Position 2
-const Position LichKingFirstSummon = {5600.076172f, 2192.270996f, 731.750488f, 4.330935f}; // Lich King First summons
-const Position JainaShadowThroneDoor = {5577.243f, 2235.852f, 733.0128f, 2.209562f}; // Jaina Spawn Position 2
-const Position SylvanasShadowThroneDoor = {5577.243f, 2235.852f, 733.0128f, 2.209562f}; // Sylvanas Spawn Position 2
-const Position FalricStartPos = {5283.878906f, 2030.459595f, 709.319641f, 5.506670f}; // Falric start position
-const Position MarwynStartPos = {5334.979980f, 1982.399536f, 709.320129f, 2.347014f}; // Marwyn start position
-const Position LichKingFinalPos = {5283.742188f, 1706.335693f, 783.293518f, 4.138510f}; // Lich King Final Pos
-const Position ChestPos = {5246.187500f, 1649.079468f, 784.301758f, 0.901268f}; // Chest position
-const Position FinalPortalPos = {5270.634277f ,1639.101196f, 784.303040f, 1.682743f}; // Final portal position
-
-class npc_jaina_or_sylvanas_hor : public CreatureScript
+Position const SylvanasIntroPosition[] =
{
- public:
- npc_jaina_or_sylvanas_hor() : CreatureScript("npc_jaina_or_sylvanas_hor") { }
-
- // AI of Part1
- struct npc_jaina_or_sylvanas_horAI : public ScriptedAI
- {
- npc_jaina_or_sylvanas_horAI(Creature* creature) : ScriptedAI(creature)
- {
- _instance = me->GetInstanceScript();
- }
-
- InstanceScript* _instance;
- uint64 _utherGUID;
- uint64 _lichkingGUID;
+ { 0.0f, 0.0f, 0.0f, 0.0f }, // 0 - Spawn
+ { 5263.2f, 1950.96f, 707.6948f, 0.8028514f }, // 1 - Move to Door
+ { 5306.82f, 1998.17f, 709.341f, 1.239184f }, // 2 - Move to Frostmourne
+};
- EventMap _events;
+Position const JainaIntroPosition[] =
+{
+ { 0.0f, 0.0f, 0.0f, 0.0f }, // 0 - Spawn
+ { 5265.89f, 1952.98f, 707.6978f, 0.0f }, // 1 - Move to Door
+ { 5306.95f, 1998.49f, 709.3414f, 1.277278f } // 2 - Move to Frostmourne
+};
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) OVERRIDE
- {
- player->PlayerTalkClass->ClearMenus();
- switch (action)
- {
- case 0:
- player->CLOSE_GOSSIP_MENU();
- _events.ScheduleEvent(EVENT_START_INTRO, 1000);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER);
- break;
- case 1:
- player->CLOSE_GOSSIP_MENU();
- _events.ScheduleEvent(EVENT_SKIP_INTRO, 1000);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER);
- break;
- }
- }
+Position const UtherSpawnPos = { 5307.814f, 2003.168f, 709.4244f, 4.537856f };
- void Reset() OVERRIDE
- {
- _events.Reset();
+Position const LichKingIntroPosition[] =
+{
+ { 5362.463f, 2062.693f, 707.7781f, 3.944444f }, // 0 - Spawn
+ { 5332.83f, 2031.24f, 707.6948f, 0.0f }, // 1 - Door
+ { 5312.93f, 2010.24f, 709.34f, 0.0f }, // 2 - Move to Frostmourne
+ { 5319.028f, 2016.662f, 707.6948f, 0.0f }, // 3 - Move back
+ { 5332.285f, 2030.832f, 707.6948f, 0.0f }, // 4 - Move back 2
+ { 5355.488f, 2055.149f, 707.6907f, 0.0f } // 5 - Move back 3
+};
- _utherGUID = 0;
- _lichkingGUID = 0;
+Position const FalricPosition[] =
+{
+ { 5276.583f, 2037.45f, 709.4025f, 5.532694f }, // 0 - Spawn
+ { 5283.95f, 2030.53f, 709.3191f, 0.0f } // 1 - Intro
+};
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER);
- me->SetStandState(UNIT_STAND_STATE_STAND);
- _events.ScheduleEvent(EVENT_WALK_INTRO1, 3000);
- }
+Position const MarwynPosition[] =
+{
+ { 5342.232f, 1975.696f, 709.4025f, 2.391101f }, // 0 - Spawn
+ { 5335.01f, 1982.37f, 709.3191f, 0.0f } // 1 - Intro
+};
- void UpdateAI(uint32 diff) OVERRIDE
- {
- _events.Update(diff);
+Position const SylvanasShadowThroneDoorPosition = { 5576.79f, 2235.73f, 733.0029f, 2.687807f };
- switch (_events.ExecuteEvent())
- {
- case EVENT_WALK_INTRO1:
- me->GetMotionMaster()->MovePoint(0, IntroPos);
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- {
- Talk(SAY_JAINA_INTRO_1);
- _events.ScheduleEvent(EVENT_WALK_INTRO2, 7000);
- }
- else
- {
- Talk(SAY_SYLVANAS_INTRO_1);
- _events.ScheduleEvent(EVENT_WALK_INTRO2, 9000);
- }
- break;
- case EVENT_WALK_INTRO2:
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- Talk(SAY_JAINA_INTRO_2);
- else
- Talk(SAY_SYLVANAS_INTRO_2);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER);
- break;
- case EVENT_START_INTRO:
- me->GetMotionMaster()->MovePoint(0, MoveThronePos);
- // Begining of intro is differents between fActions as the speech sequence and timers are differents.
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- _events.ScheduleEvent(EVENT_INTRO_A2_1, 0);
- else
- _events.ScheduleEvent(EVENT_INTRO_H2_1, 0);
- break;
- // A2 Intro Events
- case EVENT_INTRO_A2_1:
- Talk(SAY_JAINA_INTRO_3);
- _events.ScheduleEvent(EVENT_INTRO_A2_2, 7000);
- break;
- case EVENT_INTRO_A2_2:
- Talk(SAY_JAINA_INTRO_4);
- _events.ScheduleEvent(EVENT_INTRO_A2_3, 10000);
- break;
- case EVENT_INTRO_A2_3:
- me->CastSpell(me, SPELL_CAST_VISUAL, false);
- me->CastSpell(me, SPELL_FROSTMOURNE_SOUNDS, true);
- _instance->HandleGameObject(_instance->GetData64(DATA_FROSTMOURNE), true);
- _events.ScheduleEvent(EVENT_INTRO_A2_4, 10000);
- break;
- case EVENT_INTRO_A2_4:
- if (Creature* uther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN))
- {
- uther->GetMotionMaster()->MoveIdle();
- _utherGUID = uther->GetGUID();
- }
- _events.ScheduleEvent(EVENT_INTRO_A2_5, 2000);
- break;
- case EVENT_INTRO_A2_5:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_A2_1);
- _events.ScheduleEvent(EVENT_INTRO_A2_6, 3000);
- break;
- case EVENT_INTRO_A2_6:
- Talk(SAY_JAINA_INTRO_5);
- _events.ScheduleEvent(EVENT_INTRO_A2_7, 7000);
- break;
- case EVENT_INTRO_A2_7:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_A2_2);
- _events.ScheduleEvent(EVENT_INTRO_A2_8, 7000);
- break;
- case EVENT_INTRO_A2_8:
- Talk(SAY_JAINA_INTRO_6);
- _events.ScheduleEvent(EVENT_INTRO_A2_9, 1200);
- break;
- case EVENT_INTRO_A2_9:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_A2_3);
- _events.ScheduleEvent(EVENT_INTRO_A2_10, 11000);
- break;
- case EVENT_INTRO_A2_10:
- Talk(SAY_JAINA_INTRO_7);
- _events.ScheduleEvent(EVENT_INTRO_A2_11, 6000);
- break;
- case EVENT_INTRO_A2_11:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_A2_4);
- _events.ScheduleEvent(EVENT_INTRO_A2_12, 12000);
- break;
- case EVENT_INTRO_A2_12:
- Talk(SAY_JAINA_INTRO_8);
- _events.ScheduleEvent(EVENT_INTRO_A2_13, 6000);
- break;
- case EVENT_INTRO_A2_13:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_A2_5);
- _events.ScheduleEvent(EVENT_INTRO_A2_14, 13000);
- break;
- case EVENT_INTRO_A2_14:
- Talk(SAY_JAINA_INTRO_9);
- _events.ScheduleEvent(EVENT_INTRO_A2_15, 12000);
- break;
- case EVENT_INTRO_A2_15:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_A2_6);
- _events.ScheduleEvent(EVENT_INTRO_A2_16, 25000);
- break;
- case EVENT_INTRO_A2_16:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_A2_7);
- _events.ScheduleEvent(EVENT_INTRO_A2_17, 6000);
- break;
- case EVENT_INTRO_A2_17:
- Talk(SAY_JAINA_INTRO_10);
- _events.ScheduleEvent(EVENT_INTRO_A2_18, 5000);
- break;
- case EVENT_INTRO_A2_18:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- {
- uther->HandleEmoteCommand(EMOTE_ONESHOT_NO);
- uther->AI()->Talk(SAY_UTHER_INTRO_A2_8);
- }
- _events.ScheduleEvent(EVENT_INTRO_A2_19, 12000);
- break;
- case EVENT_INTRO_A2_19:
- Talk(SAY_JAINA_INTRO_11);
- _events.ScheduleEvent(EVENT_INTRO_LK_1, 3000);
- break;
- // H2 Intro Events
- case EVENT_INTRO_H2_1:
- Talk(SAY_SYLVANAS_INTRO_1);
- _events.ScheduleEvent(EVENT_INTRO_H2_2, 8000);
- break;
- case EVENT_INTRO_H2_2:
- Talk(SAY_SYLVANAS_INTRO_2);
- _events.ScheduleEvent(EVENT_INTRO_H2_3, 6000);
- break;
- case EVENT_INTRO_H2_3:
- Talk(SAY_SYLVANAS_INTRO_3);
- me->CastSpell(me, SPELL_CAST_VISUAL, false);
- me->CastSpell(me, SPELL_FROSTMOURNE_SOUNDS, true);
- _instance->HandleGameObject(_instance->GetData64(DATA_FROSTMOURNE), true);
- _events.ScheduleEvent(EVENT_INTRO_H2_4, 6000);
- break;
- case EVENT_INTRO_H2_4:
- // spawn UTHER during speach 2
- if (Creature* uther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN))
- {
- uther->GetMotionMaster()->MoveIdle();
- _utherGUID = uther->GetGUID();
- }
- _events.ScheduleEvent(EVENT_INTRO_H2_5, 2000);
- break;
- case EVENT_INTRO_H2_5:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_H2_1);
- _events.ScheduleEvent(EVENT_INTRO_H2_6, 11000);
- break;
- case EVENT_INTRO_H2_6:
- Talk(SAY_SYLVANAS_INTRO_4);
- _events.ScheduleEvent(EVENT_INTRO_H2_7, 3000);
- break;
- case EVENT_INTRO_H2_7:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_H2_2);
- _events.ScheduleEvent(EVENT_INTRO_H2_8, 6000);
- break;
- case EVENT_INTRO_H2_8:
- Talk(SAY_SYLVANAS_INTRO_5);
- _events.ScheduleEvent(EVENT_INTRO_H2_9, 5000);
- break;
- case EVENT_INTRO_H2_9:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_H2_3);
- _events.ScheduleEvent(EVENT_INTRO_H2_10, 19000);
- break;
- case EVENT_INTRO_H2_10:
- Talk(SAY_SYLVANAS_INTRO_6);
- _events.ScheduleEvent(EVENT_INTRO_H2_11, 1500);
- break;
- case EVENT_INTRO_H2_11:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_H2_4);
- _events.ScheduleEvent(EVENT_INTRO_H2_12, 19500);
- break;
- case EVENT_INTRO_H2_12:
- Talk(SAY_SYLVANAS_INTRO_7);
- _events.ScheduleEvent(EVENT_INTRO_H2_13, 2000);
- break;
- case EVENT_INTRO_H2_13:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- {
- uther->HandleEmoteCommand(EMOTE_ONESHOT_NO);
- uther->AI()->Talk(SAY_UTHER_INTRO_H2_5);
- }
- _events.ScheduleEvent(EVENT_INTRO_H2_14, 12000);
- break;
- case EVENT_INTRO_H2_14:
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- uther->AI()->Talk(SAY_UTHER_INTRO_H2_6);
- _events.ScheduleEvent(EVENT_INTRO_H2_15, 8000);
- break;
- case EVENT_INTRO_H2_15:
- Talk(SAY_SYLVANAS_INTRO_8);
- _events.ScheduleEvent(EVENT_INTRO_LK_1, 2000);
- break;
- // Remaining Intro Events common for both faction
- case EVENT_INTRO_LK_1:
- // Spawn LK in front of door, and make him move to the sword.
- if (Creature* lichking = me->SummonCreature(NPC_LICH_KING_PART1, LichKingSpawnPos, TEMPSUMMON_MANUAL_DESPAWN))
- {
- lichking->SetWalk(true);
- lichking->GetMotionMaster()->MovePoint(0, LichKingMoveThronePos);
- _lichkingGUID = lichking->GetGUID();
- _events.ScheduleEvent(EVENT_OPEN_FROSTWORN_DOOR, 0);
- _events.ScheduleEvent(EVENT_CLOSE_FROSTWORN_DOOR, 4000);
- }
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- {
- uther->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_COWER);
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- uther->AI()->Talk(SAY_UTHER_INTRO_A2_9);
- else
- uther->AI()->Talk(SAY_UTHER_INTRO_H2_7);
- }
- _events.ScheduleEvent(EVENT_INTRO_LK_2, 10000);
- break;
- case EVENT_INTRO_LK_2:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- lichking->AI()->Talk(SAY_LK_INTRO_1);
- _events.ScheduleEvent(EVENT_INTRO_LK_3, 1000);
- break;
- case EVENT_INTRO_LK_3:
- // The Lich King banishes Uther to the abyss.
- if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
- {
- uther->CastSpell(uther, SPELL_UTHER_DESPAWN, true);
- uther->DespawnOrUnsummon(5000);
- _utherGUID = 0;
- }
- _events.ScheduleEvent(EVENT_INTRO_LK_4, 9000);
- break;
- case EVENT_INTRO_LK_4:
- // He steps forward and removes the runeblade from the heap of skulls.
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- {
- if (GameObject* frostmourne = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_FROSTMOURNE)))
- frostmourne->SetPhaseMask(2, true);
- lichking->CastSpell(lichking, SPELL_TAKE_FROSTMOURNE, true);
- lichking->CastSpell(lichking, SPELL_FROSTMOURNE_VISUAL, true);
- }
- _events.ScheduleEvent(EVENT_INTRO_LK_5, 8000);
- break;
- case EVENT_INTRO_LK_5:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- lichking->AI()->Talk(SAY_LK_INTRO_2);
- _events.ScheduleEvent(EVENT_INTRO_LK_6, 10000);
- break;
- case EVENT_INTRO_LK_6:
- // summon Falric and Marwyn. then go back to the door
- if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC_EVENT)))
- {
- falric->CastSpell(falric, SPELL_BOSS_SPAWN_AURA, true);
- falric->SetVisible(true);
- }
- if (Creature* marwyn = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MARWYN_EVENT)))
- {
- marwyn->CastSpell(marwyn, SPELL_BOSS_SPAWN_AURA, true);
- marwyn->SetVisible(true);
- }
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- {
- lichking->AI()->Talk(SAY_LK_INTRO_3);
- lichking->SetWalk(true);
- lichking->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos);
- }
- _events.ScheduleEvent(EVENT_INTRO_LK_7, 10000);
- _events.ScheduleEvent(EVENT_OPEN_FROSTWORN_DOOR, 5000);
- break;
- case EVENT_INTRO_LK_7:
- if (Creature* marwyn = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MARWYN_EVENT)))
- {
- marwyn->AI()->Talk(SAY_MARWYN_INTRO_1);
- marwyn->SetWalk(true);
- marwyn->GetMotionMaster()->MovePoint(0, MarwynStartPos);
- }
- _events.ScheduleEvent(EVENT_INTRO_LK_8, 1000);
- break;
- case EVENT_INTRO_LK_8:
- if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC_EVENT)))
- {
- falric->AI()->Talk(SAY_FALRIC_INTRO_1);
- falric->SetWalk(true);
- falric->GetMotionMaster()->MovePoint(0, FalricStartPos);
- }
- _events.ScheduleEvent(EVENT_INTRO_LK_9, 5000);
- break;
- case EVENT_INTRO_LK_9:
- if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC_EVENT)))
- falric->AI()->Talk(SAY_FALRIC_INTRO_2);
- _instance->ProcessEvent(0, EVENT_SPAWN_WAVES);
- _events.ScheduleEvent(EVENT_INTRO_LK_10, 4000);
- break;
- case EVENT_INTRO_LK_10:
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- Talk(SAY_JAINA_INTRO_END);
- else
- Talk(SAY_SYLVANAS_INTRO_END);
- me->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos);
- /// @todo Loralen/Koreln shall run also
- _events.ScheduleEvent(EVENT_INTRO_LK_11, 5000);
- break;
- case EVENT_INTRO_LK_11:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- {
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- lichking->AI()->Talk(SAY_LK_JAINA_INTRO_END);
- else
- lichking->AI()->Talk(SAY_LK_SYLVANAS_INTRO_END);
- }
- _events.ScheduleEvent(EVENT_INTRO_END, 5000);
- break;
- case EVENT_INTRO_END:
- _instance->SetData(DATA_INTRO_EVENT, DONE);
- // Loralen or Koreln disappearAndDie()
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- {
- lichking->DespawnOrUnsummon(5000);
- _lichkingGUID = 0;
- }
- me->DespawnOrUnsummon(10000);
- _events.ScheduleEvent(EVENT_CLOSE_FROSTWORN_DOOR, 7000);
- break;
- case EVENT_SKIP_INTRO:
- me->GetMotionMaster()->MovePoint(0, MoveThronePos);
- /// @todo Loralen/Koreln shall run also
- if (Creature* lichking = me->SummonCreature(NPC_LICH_KING_PART1, LichKingSpawnPos, TEMPSUMMON_MANUAL_DESPAWN))
- {
- lichking->SetWalk(true);
- lichking->GetMotionMaster()->MovePoint(0, LichKingMoveThronePos);
- lichking->SetReactState(REACT_PASSIVE);
- _lichkingGUID = lichking->GetGUID();
- _events.ScheduleEvent(EVENT_OPEN_FROSTWORN_DOOR, 0);
- _events.ScheduleEvent(EVENT_CLOSE_FROSTWORN_DOOR, 4000);
- }
- _events.ScheduleEvent(EVENT_INTRO_LK_4, 15000);
- break;
- case EVENT_OPEN_FROSTWORN_DOOR:
- if (GameObject* gate = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_FROSTWORN_DOOR)))
- _instance->HandleGameObject(0, true, gate);
- break;
- case EVENT_CLOSE_FROSTWORN_DOOR:
- if (GameObject* gate = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_FROSTWORN_DOOR)))
- _instance->HandleGameObject(0, false, gate);
- break;
- }
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetHallsOfReflectionAI<npc_jaina_or_sylvanas_horAI>(creature);
- }
+Position const IceWallTargetPosition[] =
+{
+ { 5547.833f, 2083.701f, 731.4332f, 1.029744f }, // 1st Icewall
+ { 5503.213f, 1969.547f, 737.0245f, 1.27409f }, // 2nd Icewall
+ { 5439.976f, 1879.005f, 752.7048f, 1.064651f }, // 3rd Icewall
+ { 5318.289f, 1749.184f, 771.9423f, 0.8726646f } // 4th Icewall
};
-class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
+class npc_jaina_or_sylvanas_intro_hor : public CreatureScript
{
public:
- npc_jaina_or_sylvanas_escape_hor() : CreatureScript("npc_jaina_or_sylvanas_escape_hor") { }
-
- // AI of Part2
- struct npc_jaina_or_sylvanas_escape_horAI : public ScriptedAI
- {
- npc_jaina_or_sylvanas_escape_horAI(Creature* creature) : ScriptedAI(creature),
- _instance(creature->GetInstanceScript()), _lichkingGUID(0), _walltargetGUID(0),
- _icewallGUID(0), _icewall(0)
- {
- }
-
- InstanceScript* _instance;
- uint64 _lichkingGUID;
- uint64 _walltargetGUID; // dummy
- uint64 _icewallGUID; // object
- uint32 _icewall; // icewall number
-
- EventMap _events;
+ npc_jaina_or_sylvanas_intro_hor() : CreatureScript("npc_jaina_or_sylvanas_intro_hor") { }
- void Reset() OVERRIDE
+ struct npc_jaina_or_sylvanas_intro_horAI : public ScriptedAI
{
- _events.Reset();
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- lichking->DespawnOrUnsummon(1);
- _lichkingGUID = 0;
- _walltargetGUID = 0;
- _icewallGUID = 0;
- _icewall = 0;
- _events.ScheduleEvent(EVENT_ESCAPE, 0);
- }
-
- void JustDied(Unit* /*Killer*/) OVERRIDE
- {
- _instance->SetData(DATA_ESCAPE_EVENT, FAIL);
- }
-
- void DoAction(int32 actionId) OVERRIDE
- {
- switch (actionId)
- {
- case ACTION_START_ESCAPING: // called by InstanceScript when we need to start the escaping event
- _events.ScheduleEvent(EVENT_ESCAPE_1, 1000);
- break;
- case ACTION_WALL_BROKEN:
- _icewall++;
- if (_icewall != 4)
- _events.ScheduleEvent(EVENT_ESCAPE_17, 3000);
- else
- _events.ScheduleEvent(EVENT_ESCAPE_23, 3000);
- break;
+ npc_jaina_or_sylvanas_intro_horAI(Creature* creature) : ScriptedAI(creature)
+ {
+ _instance = me->GetInstanceScript();
+ _utherGUID = 0;
+ _lichkingGUID = 0;
}
- }
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) OVERRIDE
- {
- player->PlayerTalkClass->ClearMenus();
- switch (action)
+ void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- case 0:
- player->CLOSE_GOSSIP_MENU();
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER);
- _events.ScheduleEvent(EVENT_ESCAPE_7, 0);
- break;
- }
- }
+ player->PlayerTalkClass->ClearMenus();
- void DestroyIceWall()
- {
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- me->RemoveAurasDueToSpell(SPELL_JAINA_DESTROY_ICE_WALL);
- else
- me->RemoveAurasDueToSpell(SPELL_SYLVANAS_DESTROY_ICE_WALL);
+ switch (gossipListId)
+ {
+ case 0:
+ player->PlayerTalkClass->SendCloseGossip();
+ _events.ScheduleEvent(EVENT_START_INTRO, 1000);
+ me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
+ break;
+ case 1:
+ player->PlayerTalkClass->SendCloseGossip();
+ _events.ScheduleEvent(EVENT_SKIP_INTRO, 1000);
+ me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
+ break;
+ default:
+ break;
+ }
+ }
- _instance->HandleGameObject(_icewallGUID, true);
+ void Reset() override
+ {
+ _events.Reset();
- if (Creature* wallTarget = ObjectAccessor::GetCreature(*me, _walltargetGUID))
- wallTarget->DespawnOrUnsummon();
- }
+ _utherGUID = 0;
+ _lichkingGUID = 0;
- void UpdateAI(uint32 diff) OVERRIDE
- {
- _events.Update(diff);
+ me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
+ me->SetStandState(UNIT_STAND_STATE_STAND);
+ _events.ScheduleEvent(EVENT_WALK_INTRO1, 3000);
+ }
- while (uint32 event = _events.ExecuteEvent())
+ void UpdateAI(uint32 diff) override
{
- switch (event)
+ _events.Update(diff);
+
+ switch (_events.ExecuteEvent())
{
- case EVENT_ESCAPE:
- if (Creature* lichking = me->SummonCreature(NPC_LICH_KING_PART2, LichKingSpawnPos2, TEMPSUMMON_MANUAL_DESPAWN))
+ case EVENT_WALK_INTRO1:
+ if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN)))
+ korelnOrLoralen->GetMotionMaster()->MovePoint(0, KorelnOrLoralenPos[0]);
+
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
{
- me->Attack(lichking, true);
- lichking->Attack(me, true);
- me->SetReactState(REACT_PASSIVE);
- lichking->SetReactState(REACT_PASSIVE);
- _lichkingGUID = lichking->GetGUID();
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- DoCast(me, SPELL_JAINA_ICEBARRIER);
- else
- DoCast(me, SPELL_SYLVANAS_CLOAKOFDARKNESS);
+ me->GetMotionMaster()->MovePoint(0, JainaIntroPosition[1]);
+ Talk(SAY_JAINA_INTRO_1);
+ _events.ScheduleEvent(EVENT_WALK_INTRO2, 7000);
}
- me->SetHealth(252000);
- break;
- case EVENT_ESCAPE_1:
- _instance->SetData(DATA_ESCAPE_EVENT, IN_PROGRESS);
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
+ else
{
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- lichking->AI()->Talk(SAY_LK_ESCAPE_1);
- else
- lichking->AI()->Talk(SAY_LK_ESCAPE_2);
- _events.ScheduleEvent(EVENT_ESCAPE_2, 8000);
+ me->GetMotionMaster()->MovePoint(0, SylvanasIntroPosition[1]);
+ Talk(SAY_SYLVANAS_INTRO_1);
+ _events.ScheduleEvent(EVENT_WALK_INTRO2, 9000);
}
break;
- case EVENT_ESCAPE_2:
+ case EVENT_WALK_INTRO2:
if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- DoCast(me, SPELL_CAST_VISUAL, true);
+ Talk(SAY_JAINA_INTRO_2);
else
- DoCast(me, SPELL_SYLVANAS_JUMP, true);
- _events.ScheduleEvent(EVENT_ESCAPE_3, 1000);
+ Talk(SAY_SYLVANAS_INTRO_2);
+ me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
break;
- case EVENT_ESCAPE_3:
+ case EVENT_START_INTRO:
+ if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN)))
+ korelnOrLoralen->GetMotionMaster()->MovePoint(0, KorelnOrLoralenPos[1]);
+ // Begining of intro is differents between factions as the speech sequence and timers are differents.
if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- DoCastAOE(SPELL_JAINA_ICEPRISON, true);
+ {
+ me->GetMotionMaster()->MovePoint(0, JainaIntroPosition[2]);
+ _events.ScheduleEvent(EVENT_INTRO_A2_1, 0);
+ }
else
- DoCastAOE(SPELL_SYLVANAS_DARKBINDING, true);
- _events.ScheduleEvent(EVENT_ESCAPE_4, 2000);
+ {
+ me->GetMotionMaster()->MovePoint(0, SylvanasIntroPosition[2]);
+ _events.ScheduleEvent(EVENT_INTRO_H2_1, 0);
+ }
break;
- case EVENT_ESCAPE_4:
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- Talk(SAY_JAINA_ESCAPE_1);
- else
- Talk(SAY_SYLVANAS_ESCAPE_1);
- _events.ScheduleEvent(EVENT_ESCAPE_5, 2000);
+ // A2 Intro Events
+ case EVENT_INTRO_A2_1:
+ Talk(SAY_JAINA_INTRO_3);
+ _events.ScheduleEvent(EVENT_INTRO_A2_2, 7000);
break;
- case EVENT_ESCAPE_5:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- lichking->CombatStop();
- me->GetMotionMaster()->MovePoint(0, JainaShadowThroneDoor);
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- me->RemoveAurasDueToSpell(SPELL_JAINA_ICEBARRIER);
- else
- me->RemoveAurasDueToSpell(SPELL_SYLVANAS_CLOAKOFDARKNESS);
- _events.ScheduleEvent(EVENT_ESCAPE_6, 5000);
+ case EVENT_INTRO_A2_2:
+ Talk(SAY_JAINA_INTRO_4);
+ _events.ScheduleEvent(EVENT_INTRO_A2_3, 10000);
break;
- case EVENT_ESCAPE_6:
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER);
+ case EVENT_INTRO_A2_3:
+ me->CastSpell(me, SPELL_CAST_VISUAL, false);
+ me->CastSpell(me, SPELL_FROSTMOURNE_SOUNDS, true);
+ _instance->HandleGameObject(_instance->GetData64(DATA_FROSTMOURNE), true);
+ _events.ScheduleEvent(EVENT_INTRO_A2_4, 10000);
break;
- case EVENT_ESCAPE_7:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- {
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- lichking->RemoveAurasDueToSpell(SPELL_JAINA_ICEPRISON);
- else
- lichking->RemoveAurasDueToSpell(SPELL_SYLVANAS_DARKBINDING);
- }
- _events.ScheduleEvent(EVENT_ESCAPE_8, 1000);
+ case EVENT_INTRO_A2_4:
+ if (Creature* uther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN))
+ _utherGUID = uther->GetGUID();
+ _events.ScheduleEvent(EVENT_INTRO_A2_5, 2000);
break;
- case EVENT_ESCAPE_8:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- lichking->HandleEmoteCommand(TEXT_EMOTE_ROAR);
- me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[0]);
- _events.ScheduleEvent(EVENT_ESCAPE_9, 3000);
+ case EVENT_INTRO_A2_5:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_A2_1);
+ _events.ScheduleEvent(EVENT_INTRO_A2_6, 3000);
break;
- case EVENT_ESCAPE_9:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- lichking->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[0]);
- _events.ScheduleEvent(EVENT_ESCAPE_10, 1000);
+ case EVENT_INTRO_A2_6:
+ Talk(SAY_JAINA_INTRO_5);
+ _events.ScheduleEvent(EVENT_INTRO_A2_7, 7000);
break;
- case EVENT_ESCAPE_10:
- me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[1]);
- _events.ScheduleEvent(EVENT_ESCAPE_11, 5000);
+ case EVENT_INTRO_A2_7:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_A2_2);
+ _events.ScheduleEvent(EVENT_INTRO_A2_8, 7000);
break;
- case EVENT_ESCAPE_11:
- me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[2]);
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- lichking->GetMotionMaster()->MovePoint(0, LichKingFirstSummon);
- _events.ScheduleEvent(EVENT_ESCAPE_12, 6000);
+ case EVENT_INTRO_A2_8:
+ Talk(SAY_JAINA_INTRO_6);
+ _events.ScheduleEvent(EVENT_INTRO_A2_9, 1200);
break;
- case EVENT_ESCAPE_12:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
+ case EVENT_INTRO_A2_9:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_A2_3);
+ _events.ScheduleEvent(EVENT_INTRO_A2_10, 11000);
+ break;
+ case EVENT_INTRO_A2_10:
+ Talk(SAY_JAINA_INTRO_7);
+ _events.ScheduleEvent(EVENT_INTRO_A2_11, 6000);
+ break;
+ case EVENT_INTRO_A2_11:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_A2_4);
+ _events.ScheduleEvent(EVENT_INTRO_A2_12, 12000);
+ break;
+ case EVENT_INTRO_A2_12:
+ Talk(SAY_JAINA_INTRO_8);
+ _events.ScheduleEvent(EVENT_INTRO_A2_13, 6000);
+ break;
+ case EVENT_INTRO_A2_13:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_A2_5);
+ _events.ScheduleEvent(EVENT_INTRO_A2_14, 13000);
+ break;
+ case EVENT_INTRO_A2_14:
+ Talk(SAY_JAINA_INTRO_9);
+ _events.ScheduleEvent(EVENT_INTRO_A2_15, 12000);
+ break;
+ case EVENT_INTRO_A2_15:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_A2_6);
+ _events.ScheduleEvent(EVENT_INTRO_A2_16, 25000);
+ break;
+ case EVENT_INTRO_A2_16:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_A2_7);
+ _events.ScheduleEvent(EVENT_INTRO_A2_17, 6000);
+ break;
+ case EVENT_INTRO_A2_17:
+ Talk(SAY_JAINA_INTRO_10);
+ _events.ScheduleEvent(EVENT_INTRO_A2_18, 5000);
+ break;
+ case EVENT_INTRO_A2_18:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
{
- lichking->AI()->Talk(SAY_LK_ESCAPE_3);
- lichking->CastSpell(me, SPELL_RAISE_DEAD);
- lichking->Attack(me, true);
+ uther->HandleEmoteCommand(EMOTE_ONESHOT_NO);
+ uther->AI()->Talk(SAY_UTHER_INTRO_A2_8);
}
- _events.ScheduleEvent(EVENT_ESCAPE_13, 4000);
+ _events.ScheduleEvent(EVENT_INTRO_A2_19, 12000);
break;
- case EVENT_ESCAPE_13:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
+ case EVENT_INTRO_A2_19:
+ Talk(SAY_JAINA_INTRO_11);
+ _events.ScheduleEvent(EVENT_INTRO_LK_1, 3000);
+ break;
+ // H2 Intro Events
+ case EVENT_INTRO_H2_1:
+ Talk(SAY_SYLVANAS_INTRO_1);
+ _events.ScheduleEvent(EVENT_INTRO_H2_2, 8000);
+ break;
+ case EVENT_INTRO_H2_2:
+ Talk(SAY_SYLVANAS_INTRO_2);
+ _events.ScheduleEvent(EVENT_INTRO_H2_3, 6000);
+ break;
+ case EVENT_INTRO_H2_3:
+ Talk(SAY_SYLVANAS_INTRO_3);
+ me->CastSpell(me, SPELL_CAST_VISUAL, false);
+ me->CastSpell(me, SPELL_FROSTMOURNE_SOUNDS, true);
+ _instance->HandleGameObject(_instance->GetData64(DATA_FROSTMOURNE), true);
+ _events.ScheduleEvent(EVENT_INTRO_H2_4, 6000);
+ break;
+ case EVENT_INTRO_H2_4:
+ // spawn UTHER during speach 2
+ if (Creature* uther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN))
+ _utherGUID = uther->GetGUID();
+ _events.ScheduleEvent(EVENT_INTRO_H2_5, 2000);
+ break;
+ case EVENT_INTRO_H2_5:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_H2_1);
+ _events.ScheduleEvent(EVENT_INTRO_H2_6, 11000);
+ break;
+ case EVENT_INTRO_H2_6:
+ Talk(SAY_SYLVANAS_INTRO_4);
+ _events.ScheduleEvent(EVENT_INTRO_H2_7, 3000);
+ break;
+ case EVENT_INTRO_H2_7:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_H2_2);
+ _events.ScheduleEvent(EVENT_INTRO_H2_8, 6000);
+ break;
+ case EVENT_INTRO_H2_8:
+ Talk(SAY_SYLVANAS_INTRO_5);
+ _events.ScheduleEvent(EVENT_INTRO_H2_9, 5000);
+ break;
+ case EVENT_INTRO_H2_9:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_H2_3);
+ _events.ScheduleEvent(EVENT_INTRO_H2_10, 19000);
+ break;
+ case EVENT_INTRO_H2_10:
+ Talk(SAY_SYLVANAS_INTRO_6);
+ _events.ScheduleEvent(EVENT_INTRO_H2_11, 1500);
+ break;
+ case EVENT_INTRO_H2_11:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_H2_4);
+ _events.ScheduleEvent(EVENT_INTRO_H2_12, 19500);
+ break;
+ case EVENT_INTRO_H2_12:
+ Talk(SAY_SYLVANAS_INTRO_7);
+ _events.ScheduleEvent(EVENT_INTRO_H2_13, 2000);
+ break;
+ case EVENT_INTRO_H2_13:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
{
- lichking->CastSpell(lichking, SPELL_REMORSELESS_WINTER, true);
- lichking->CastSpell(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR);
- lichking->GetMotionMaster()->MoveIdle();
- lichking->GetMotionMaster()->MoveChase(me);
+ uther->HandleEmoteCommand(EMOTE_ONESHOT_NO);
+ uther->AI()->Talk(SAY_UTHER_INTRO_H2_5);
}
- if (Creature* walltarget = me->SummonCreature(NPC_ICE_WALL, IceWalls[0], TEMPSUMMON_MANUAL_DESPAWN, 720000))
+ _events.ScheduleEvent(EVENT_INTRO_H2_14, 12000);
+ break;
+ case EVENT_INTRO_H2_14:
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
+ uther->AI()->Talk(SAY_UTHER_INTRO_H2_6);
+ _events.ScheduleEvent(EVENT_INTRO_H2_15, 8000);
+ break;
+ case EVENT_INTRO_H2_15:
+ Talk(SAY_SYLVANAS_INTRO_8);
+ _events.ScheduleEvent(EVENT_INTRO_LK_1, 2000);
+ break;
+ // Remaining Intro Events common for both faction
+ case EVENT_INTRO_LK_1:
+ // Spawn LK in front of door, and make him move to the sword.
+ if (Creature* lichking = me->SummonCreature(NPC_THE_LICH_KING_INTRO, LichKingIntroPosition[0], TEMPSUMMON_MANUAL_DESPAWN))
{
- _walltargetGUID = walltarget->GetGUID();
- walltarget->CastSpell(walltarget, SPELL_SUMMON_ICE_WALL);
- walltarget->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
- me->Attack(walltarget, false);
+ lichking->SetWalk(true);
+ lichking->GetMotionMaster()->MovePoint(0, LichKingIntroPosition[2]);
+ _lichkingGUID = lichking->GetGUID();
+ _events.ScheduleEvent(EVENT_OPEN_IMPENETRABLE_DOOR, 0);
+ _events.ScheduleEvent(EVENT_CLOSE_IMPENETRABLE_DOOR, 4000);
}
- me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[3]);
- _events.ScheduleEvent(EVENT_ESCAPE_14, 8000);
- break;
- case EVENT_ESCAPE_14:
- if (Creature* walltarget = ObjectAccessor::GetCreature(*me, _walltargetGUID))
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
{
- if (GameObject* icewall = walltarget->FindNearestGameObject(GO_ICE_WALL, 50.00f))
- {
- _icewallGUID = icewall->GetGUID();
- icewall->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
- _instance->HandleGameObject(0, false, icewall);
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- Talk(SAY_JAINA_ESCAPE_2);
- else
- Talk(SAY_SYLVANAS_ESCAPE_2);
- }
+ uther->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_COWER);
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ uther->AI()->Talk(SAY_UTHER_INTRO_A2_9);
+ else
+ uther->AI()->Talk(SAY_UTHER_INTRO_H2_7);
}
- _events.ScheduleEvent(EVENT_ESCAPE_15, 1000);
+ _events.ScheduleEvent(EVENT_INTRO_LK_2, 10000);
break;
- case EVENT_ESCAPE_15:
+ case EVENT_INTRO_LK_2:
if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
+ lichking->AI()->Talk(SAY_LK_INTRO_1);
+ _events.ScheduleEvent(EVENT_INTRO_LK_3, 1000);
+ break;
+ case EVENT_INTRO_LK_3:
+ // The Lich King banishes Uther to the abyss.
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID))
{
- lichking->GetMotionMaster()->MoveIdle();
- lichking->GetMotionMaster()->MoveChase(me);
- lichking->SetReactState(REACT_PASSIVE);
+ uther->CastSpell(uther, SPELL_UTHER_DESPAWN, true);
+ uther->DespawnOrUnsummon(5000);
+ _utherGUID = 0;
}
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- DoCast(me, SPELL_JAINA_DESTROY_ICE_WALL, true);
- else
- DoCast(me, SPELL_SYLVANAS_DESTROY_ICE_WALL, true);
+ _events.ScheduleEvent(EVENT_INTRO_LK_4, 9000);
break;
- case EVENT_ESCAPE_17:// ICEWALL BROKEN
- me->GetMotionMaster()->MoveIdle();
+ case EVENT_INTRO_LK_4:
+ // He steps forward and removes the runeblade from the heap of skulls.
if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
{
- lichking->StopMoving();
- lichking->AI()->Talk(SAY_LK_ESCAPE_3);
- lichking->CastSpell(me, SPELL_RAISE_DEAD);
+ if (GameObject* frostmourne = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_FROSTMOURNE)))
+ frostmourne->SetPhaseMask(2, true);
+ lichking->CastSpell(lichking, SPELL_TAKE_FROSTMOURNE, true);
+ lichking->CastSpell(lichking, SPELL_FROSTMOURNE_VISUAL, true);
}
-
- DestroyIceWall();
-
- if (_icewall && _icewall < 4)
- me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[_icewall + 3]);
- _events.ScheduleEvent(EVENT_ESCAPE_18, 2000);
+ _events.ScheduleEvent(EVENT_INTRO_LK_5, 8000);
break;
- case EVENT_ESCAPE_18:
+ case EVENT_INTRO_LK_5:
if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
+ lichking->AI()->Talk(SAY_LK_INTRO_2);
+ _events.ScheduleEvent(EVENT_INTRO_LK_6, 10000);
+ break;
+ case EVENT_INTRO_LK_6:
+ // summon Falric and Marwyn. then go back to the door
+ if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC)))
{
- lichking->GetMotionMaster()->MoveIdle();
- lichking->GetMotionMaster()->MoveChase(me);
+ falric->CastSpell(falric, SPELL_BOSS_SPAWN_AURA, true);
+ falric->SetVisible(true);
}
- _events.ScheduleEvent(EVENT_ESCAPE_19, 6000);
- break;
- case EVENT_ESCAPE_19:
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
+ if (Creature* marwyn = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MARWYN)))
{
- if (_icewall && _icewall < 4)
- lichking->CastSpell(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR);
- lichking->GetMotionMaster()->MoveIdle();
- lichking->GetMotionMaster()->MoveChase(me);
- lichking->SetReactState(REACT_PASSIVE);
- lichking->Attack(me, true);
+ marwyn->CastSpell(marwyn, SPELL_BOSS_SPAWN_AURA, true);
+ marwyn->SetVisible(true);
}
- if (_icewall < 4)
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
{
- if (Creature* walltarget = me->SummonCreature(NPC_ICE_WALL, IceWalls[_icewall], TEMPSUMMON_MANUAL_DESPAWN, 720000))
- {
- _walltargetGUID = walltarget->GetGUID();
- walltarget->CastSpell(walltarget, SPELL_SUMMON_ICE_WALL);
- walltarget->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
- me->Attack(walltarget, false);
- }
+ lichking->AI()->Talk(SAY_LK_INTRO_3);
+ lichking->SetWalk(true);
+ lichking->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos);
}
- _events.ScheduleEvent(EVENT_ESCAPE_20, 3000);
+ _events.ScheduleEvent(EVENT_INTRO_LK_7, 10000);
+ _events.ScheduleEvent(EVENT_OPEN_IMPENETRABLE_DOOR, 5000);
break;
- case EVENT_ESCAPE_20:
- if (Creature* walltarget = ObjectAccessor::GetCreature(*me, _walltargetGUID))
+ case EVENT_INTRO_LK_7:
+ if (Creature* marwyn = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MARWYN)))
{
- if (GameObject* icewall = walltarget->FindNearestGameObject(GO_ICE_WALL, 50.00f))
- {
- _icewallGUID = icewall->GetGUID();
- _instance->HandleGameObject(0, false, icewall);
- icewall->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- {
- if (_icewall == 1)
- Talk(SAY_JAINA_ESCAPE_3);
- else if (_icewall == 2)
- Talk(SAY_JAINA_ESCAPE_4);
- else if (_icewall == 3)
- Talk(SAY_JAINA_ESCAPE_5);
- }
- else if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE)
- {
- if (_icewall == 1)
- Talk(SAY_SYLVANAS_ESCAPE_3);
- else if (_icewall == 2)
- Talk(SAY_SYLVANAS_ESCAPE_4);
- else if (_icewall == 3)
- Talk(SAY_SYLVANAS_ESCAPE_5);
- }
- }
+ marwyn->AI()->Talk(SAY_MARWYN_INTRO_1);
+ marwyn->SetWalk(true);
+ marwyn->GetMotionMaster()->MovePoint(0, MarwynPosition[1]);
}
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
+ _events.ScheduleEvent(EVENT_INTRO_LK_8, 1000);
+ break;
+ case EVENT_INTRO_LK_8:
+ if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC)))
{
- if (_icewall && _icewall < 3)
- lichking->CastSpell(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR);
- else
- lichking->CastSpell(lichking, SPELL_SUMMON_LUMBERING_ABOMINATION);
+ falric->AI()->Talk(SAY_FALRIC_INTRO_1);
+ falric->SetWalk(true);
+ falric->GetMotionMaster()->MovePoint(0, FalricPosition[1]);
}
- if (_icewall == 3)
- _events.ScheduleEvent(EVENT_ESCAPE_21, 16000); // last wall, really far
- else
- _events.ScheduleEvent(EVENT_ESCAPE_21, 9000);
+ _events.ScheduleEvent(EVENT_INTRO_LK_9, 5000);
+ break;
+ case EVENT_INTRO_LK_9:
+ if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC)))
+ falric->AI()->Talk(SAY_FALRIC_INTRO_2);
+ _instance->ProcessEvent(0, EVENT_SPAWN_WAVES);
+ _events.ScheduleEvent(EVENT_INTRO_LK_10, 4000);
break;
- case EVENT_ESCAPE_21:
+ case EVENT_INTRO_LK_10:
if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- DoCast(me, SPELL_JAINA_DESTROY_ICE_WALL, true);
+ Talk(SAY_JAINA_INTRO_END);
else
- DoCast(me, SPELL_SYLVANAS_DESTROY_ICE_WALL, true);
-
+ Talk(SAY_SYLVANAS_INTRO_END);
+ me->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos);
+ /// @todo: needs some improvements
+ if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN)))
+ korelnOrLoralen->GetMotionMaster()->MovePoint(1, KorelnOrLoralenPos[2]);
+ _events.ScheduleEvent(EVENT_INTRO_LK_11, 5000);
+ break;
+ case EVENT_INTRO_LK_11:
if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
{
- if (_icewall == 1)
- lichking->CastSpell(lichking, SPELL_SUMMON_LUMBERING_ABOMINATION);
- else if (_icewall > 1 && _icewall < 4)
- {
- lichking->CastSpell(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR);
- _events.ScheduleEvent(EVENT_ESCAPE_22, 1000);
- }
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ lichking->AI()->Talk(SAY_LK_JAINA_INTRO_END);
+ else
+ lichking->AI()->Talk(SAY_LK_SYLVANAS_INTRO_END);
}
+ _events.ScheduleEvent(EVENT_INTRO_END, 5000);
break;
- case EVENT_ESCAPE_22:
+ case EVENT_INTRO_END:
+ _instance->SetData(DATA_INTRO_EVENT, DONE);
+ _events.ScheduleEvent(EVENT_KORELN_LORALEN_DEATH, 8000);
if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
{
- if (_icewall >= 2 && _icewall < 4)
- lichking->CastSpell(lichking, SPELL_SUMMON_LUMBERING_ABOMINATION);
+ lichking->DespawnOrUnsummon(5000);
+ _lichkingGUID = 0;
}
+ me->DespawnOrUnsummon(10000);
+ _events.ScheduleEvent(EVENT_CLOSE_IMPENETRABLE_DOOR, 7000);
break;
- case EVENT_ESCAPE_23: // FINAL PART
- DestroyIceWall();
-
+ case EVENT_SKIP_INTRO:
if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- Talk(SAY_JAINA_ESCAPE_6);
+ me->GetMotionMaster()->MovePoint(0, JainaIntroPosition[2]);
else
- Talk(SAY_SYLVANAS_ESCAPE_6);
+ me->GetMotionMaster()->MovePoint(0, SylvanasIntroPosition[2]);
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
+ if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN)))
+ korelnOrLoralen->GetMotionMaster()->MovePoint(0, KorelnOrLoralenPos[1]);
+
+ if (Creature* lichking = me->SummonCreature(NPC_THE_LICH_KING_INTRO, LichKingIntroPosition[0], TEMPSUMMON_MANUAL_DESPAWN))
{
- lichking->GetMotionMaster()->MovePoint(0, LichKingFinalPos);
- lichking->AI()->Talk(SAY_LK_ESCAPE_11);
+ lichking->SetWalk(true);
+ lichking->GetMotionMaster()->MovePoint(0, LichKingIntroPosition[2]);
+ lichking->SetReactState(REACT_PASSIVE);
+ _lichkingGUID = lichking->GetGUID();
+ _events.ScheduleEvent(EVENT_OPEN_IMPENETRABLE_DOOR, 0);
+ _events.ScheduleEvent(EVENT_CLOSE_IMPENETRABLE_DOOR, 4000);
}
- me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[8]);
- _events.ScheduleEvent(EVENT_ESCAPE_24, 10000);
+ _events.ScheduleEvent(EVENT_INTRO_LK_4, 15000);
break;
- case EVENT_ESCAPE_24:
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- Talk(SAY_JAINA_ESCAPE_8);
- else
- Talk(SAY_SYLVANAS_ESCAPE_8);
- _events.ScheduleEvent(EVENT_ESCAPE_25, 5000);
+ case EVENT_OPEN_IMPENETRABLE_DOOR:
+ _instance->HandleGameObject(_instance->GetData64(DATA_IMPENETRABLE_DOOR), true);
break;
- case EVENT_ESCAPE_25:
- if (GameObject* cave = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_CAVE_IN)))
- cave->SetGoState(GO_STATE_READY);
- _events.ScheduleEvent(EVENT_ESCAPE_26, 4000);
+ case EVENT_CLOSE_IMPENETRABLE_DOOR:
+ _instance->HandleGameObject(_instance->GetData64(DATA_IMPENETRABLE_DOOR), false);
break;
- case EVENT_ESCAPE_26:
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- Talk(SAY_JAINA_ESCAPE_10);
+ case EVENT_KORELN_LORALEN_DEATH:
+ if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN)))
+ korelnOrLoralen->CastSpell(korelnOrLoralen, SPELL_FEIGN_DEATH);
+ break;
+ default:
+ break;
+ }
+ }
+
+ private:
+ InstanceScript* _instance;
+ EventMap _events;
+ uint64 _utherGUID;
+ uint64 _lichkingGUID;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfReflectionAI<npc_jaina_or_sylvanas_intro_horAI>(creature);
+ }
+};
+
+class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
+{
+ public:
+ npc_jaina_or_sylvanas_escape_hor() : CreatureScript("npc_jaina_or_sylvanas_escape_hor") { }
+
+ bool OnGossipHello(Player* player, Creature* creature) override
+ {
+ // override default gossip
+ if (InstanceScript* instance = creature->GetInstanceScript())
+ if (instance->GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE)
+ {
+ player->PrepareGossipMenu(creature, creature->GetEntry() == NPC_JAINA_ESCAPE ? GOSSIP_MENU_JAINA_FINAL : GOSSIP_MENU_SYLVANAS_FINAL, true);
+ player->SendPreparedGossip(creature);
+ return true;
+ }
+
+ // load default gossip
+ return false;
+ }
+
+ struct npc_jaina_or_sylvanas_escape_horAI : public ScriptedAI
+ {
+ npc_jaina_or_sylvanas_escape_horAI(Creature* creature) : ScriptedAI(creature),
+ _instance(creature->GetInstanceScript()), _icewall(0), _prefight(false), _invincibility(true) { }
+
+ void Reset() override
+ {
+ _events.Reset();
+ _icewall = 0;
+ _events.ScheduleEvent(EVENT_ESCAPE, 1000);
+ _instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_NOT_RETREATING_EVENT);
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ lichking->AI()->EnterEvadeMode(); // event failed
+ }
+
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
+ {
+ if (damage >= me->GetHealth() && _invincibility)
+ damage = me->GetHealth() - 1;
+ }
+
+ void DoAction(int32 actionId) override
+ {
+ switch (actionId)
+ {
+ case ACTION_START_PREFIGHT:
+ if (_prefight)
+ return;
+ _prefight = true;
+ _events.ScheduleEvent(EVENT_ESCAPE_1, 1000);
+ break;
+ case ACTION_WALL_BROKEN:
+ ++_icewall;
+ if (_icewall < 4)
+ _events.ScheduleEvent(EVENT_ESCAPE_13, 3000);
else
- Talk(SAY_SYLVANAS_ESCAPE_9);
- _events.ScheduleEvent(EVENT_ESCAPE_27, 4000);
+ _events.ScheduleEvent(EVENT_ESCAPE_15, 3000);
break;
- case EVENT_ESCAPE_27:
- if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- me->SummonGameObject(IsHeroic() ? GO_CAPTAIN_CHEST_ALLIANCE_HEROIC : GO_CAPTAIN_CHEST_ALLIANCE_NORMAL, ChestPos.GetPositionX(), ChestPos.GetPositionY(), ChestPos.GetPositionZ(), ChestPos.GetOrientation(), 0, 0, 0, 0, 720000);
+ case ACTION_GUNSHIP_ARRIVAL:
+ _events.ScheduleEvent(EVENT_ESCAPE_16, 5000);
+ break;
+ case ACTION_GUNSHIP_ARRIVAL_2:
+ _events.ScheduleEvent(EVENT_ESCAPE_17, 5000);
+ break;
+ default:
+ break;
+ }
+ }
+
+ void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ player->PlayerTalkClass->ClearMenus();
+
+ switch (gossipListId)
+ {
+ case 0:
+ player->PlayerTalkClass->SendCloseGossip();
+ me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ _events.ScheduleEvent(EVENT_ESCAPE_6, 0);
+ break;
+ default:
+ break;
+ }
+ }
+
+ void DestroyIceWall()
+ {
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ me->RemoveAurasDueToSpell(SPELL_JAINA_DESTROY_ICE_WALL);
+ else
+ me->RemoveAurasDueToSpell(SPELL_SYLVANAS_DESTROY_ICE_WALL);
+
+ _instance->HandleGameObject(_instance->GetData64(DATA_ICEWALL), true);
+ me->m_Events.AddEvent(new GameObjectDeleteDelayEvent(me, _instance->GetData64(DATA_ICEWALL)), me->m_Events.CalculateTime(5000));
+
+ if (Creature* wallTarget = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ICEWALL_TARGET)))
+ wallTarget->DespawnOrUnsummon();
+ }
+
+ void SummonIceWall()
+ {
+ if (_icewall < 4)
+ {
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ {
+ lichking->StopMoving();
+ if (Creature* wallTarget = me->SummonCreature(NPC_ICE_WALL_TARGET, IceWallTargetPosition[_icewall], TEMPSUMMON_MANUAL_DESPAWN, 720000))
+ lichking->CastSpell(wallTarget, SPELL_SUMMON_ICE_WALL);
+
+ lichking->AI()->SetData(DATA_ICEWALL, _icewall);
+ }
+ }
+ }
+
+ void AttackIceWall()
+ {
+ if (_icewall < 4)
+ Talk(SAY_JAINA_SYLVANAS_ESCAPE_2 + _icewall);
+
+ if (Creature* wallTarget = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ICEWALL_TARGET)))
+ me->SetFacingToObject(wallTarget);
+
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ DoCast(me, SPELL_JAINA_DESTROY_ICE_WALL, true);
+ else
+ DoCast(me, SPELL_SYLVANAS_DESTROY_ICE_WALL, true);
+ }
+
+ void MovementInform(uint32 type, uint32 pointId) override
+ {
+ if (type != POINT_MOTION_TYPE)
+ return;
+
+ switch (pointId)
+ {
+ case POINT_SHADOW_THRONE_DOOR:
+ if (me->GetEntry() == NPC_JAINA_ESCAPE)
+ me->RemoveAurasDueToSpell(SPELL_JAINA_ICE_BARRIER);
else
- me->SummonGameObject(IsHeroic() ? GO_CAPTAIN_CHEST_HORDE_HEROIC : GO_CAPTAIN_CHEST_HORDE_NORMAL, ChestPos.GetPositionX(), ChestPos.GetPositionY(), ChestPos.GetPositionZ(), ChestPos.GetOrientation(), 0, 0, 0, 0, 720000);
- me->SummonGameObject(GO_PORTAL, FinalPortalPos.GetPositionX(), FinalPortalPos.GetPositionY(), FinalPortalPos.GetPositionZ(), FinalPortalPos.GetOrientation(), 0, 0, 0, 0, 720000);
- if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID))
- lichking->DespawnOrUnsummon(1);
+ me->RemoveAurasDueToSpell(SPELL_SYLVANAS_CLOAK_OF_DARKNESS);
+ me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ me->SetHealth(JAINA_SYLVANAS_MAX_HEALTH);
+ me->SetFacingTo(SylvanasShadowThroneDoorPosition.GetOrientation());
+ break;
+ case POINT_ATTACK_ICEWALL:
+ AttackIceWall();
+ break;
+ case POINT_TRAP:
+ Talk(SAY_JAINA_SYLVANAS_ESCAPE_8);
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ me->SetFacingToObject(lichking);
break;
+ default:
+ break;
+ }
+ }
+
+ void DeleteAllFromThreatList(Unit* target, uint64 except)
+ {
+ ThreatContainer::StorageType threatlist = target->getThreatManager().getThreatList();
+ for (auto i : threatlist)
+ {
+ if (i->getUnitGuid() == except)
+ continue;
+
+ i->removeReference();
+ }
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ _events.Update(diff);
+
+ while (uint32 event = _events.ExecuteEvent())
+ {
+ switch (event)
+ {
+ case EVENT_ESCAPE:
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ DoCast(me, SPELL_JAINA_ICE_BARRIER);
+ else
+ DoCast(me, SPELL_SYLVANAS_CLOAK_OF_DARKNESS);
+
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ {
+ me->CastSpell(lichking, SPELL_TAUNT_ARTHAS, true);
+ lichking->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);
+ lichking->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true);
+ AttackStart(lichking);
+ lichking->AI()->AttackStart(me);
+ }
+ me->SetHealth(JAINA_SYLVANAS_MAX_HEALTH);
+ me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
+ break;
+ case EVENT_ESCAPE_1:
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ {
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ lichking->AI()->Talk(SAY_LK_ESCAPE_1);
+ else
+ lichking->AI()->Talk(SAY_LK_ESCAPE_2);
+ _events.ScheduleEvent(EVENT_ESCAPE_2, 8000);
+ }
+ break;
+ case EVENT_ESCAPE_2:
+ me->AttackStop();
+ me->StopMoving();
+ me->SetReactState(REACT_PASSIVE);
+
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ DoCast(me, SPELL_JAINA_ICE_PRISON, false);
+ else
+ DoCast(me, SPELL_SYLVANAS_BLINDING_RETREAT, true);
+
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ {
+ lichking->SetReactState(REACT_PASSIVE);
+ lichking->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED);
+ }
+
+ _events.ScheduleEvent(EVENT_ESCAPE_3, 1500);
+ break;
+ case EVENT_ESCAPE_3:
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE)
+ DoCastAOE(SPELL_SYLVANAS_DARK_BINDING, true);
+ _events.ScheduleEvent(EVENT_ESCAPE_4, 1000);
+ break;
+ case EVENT_ESCAPE_4:
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ DoCast(me, SPELL_CREDIT_FINDING_JAINA);
+ else
+ DoCast(me, SPELL_CREDIT_FINDING_SYLVANAS);
+ Talk(SAY_JAINA_SYLVANAS_ESCAPE_1);
+
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ {
+ lichking->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ lichking->RemoveAllAttackers();
+
+ DeleteAllFromThreatList(lichking, me->GetGUID());
+ }
+
+ _events.ScheduleEvent(EVENT_ESCAPE_5, 2000);
+ break;
+ case EVENT_ESCAPE_5:
+ me->GetMotionMaster()->MovePoint(POINT_SHADOW_THRONE_DOOR, SylvanasShadowThroneDoorPosition);
+ break;
+ case EVENT_ESCAPE_6:
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ {
+ lichking->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_PACIFIED);
+
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ {
+ lichking->CastSpell(lichking, SPELL_STUN_BREAK_JAINA);
+ lichking->RemoveAurasDueToSpell(SPELL_JAINA_ICE_PRISON);
+ }
+ else
+ {
+ lichking->CastSpell(lichking, SPELL_STUN_BREAK_SYLVANAS);
+ lichking->RemoveAurasDueToSpell(SPELL_SYLVANAS_DARK_BINDING);
+ }
+ }
+ _invincibility = false;
+ _instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_NOT_RETREATING_EVENT);
+ _events.ScheduleEvent(EVENT_ESCAPE_7, 1000);
+ break;
+ case EVENT_ESCAPE_7:
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ lichking->HandleEmoteCommand(TEXT_EMOTE_ROAR);
+ me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[0]);
+ _events.ScheduleEvent(EVENT_ESCAPE_8, 3000);
+ break;
+ case EVENT_ESCAPE_8:
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ lichking->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[0]);
+ _events.ScheduleEvent(EVENT_ESCAPE_9, 1000);
+ break;
+ case EVENT_ESCAPE_9:
+ me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[1]);
+ _events.ScheduleEvent(EVENT_ESCAPE_10, 5000);
+ break;
+ case EVENT_ESCAPE_10:
+ me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[2]);
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ lichking->GetMotionMaster()->MovePoint(1, LichKingFirstSummon);
+ _events.ScheduleEvent(EVENT_ESCAPE_11, 6000);
+ break;
+ case EVENT_ESCAPE_11:
+ SummonIceWall();
+ _events.ScheduleEvent(EVENT_ESCAPE_12, 4000);
+ break;
+ case EVENT_ESCAPE_12:
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ lichking->CastSpell(lichking, SPELL_PAIN_AND_SUFFERING, true);
+
+ me->GetMotionMaster()->MovePoint(POINT_ATTACK_ICEWALL, NpcJainaOrSylvanasEscapeRoute[3]);
+ break;
+ case EVENT_ESCAPE_13: // ICEWALL BROKEN
+ DestroyIceWall();
+
+ if (_icewall && _icewall < 4)
+ me->GetMotionMaster()->MovePoint(POINT_ATTACK_ICEWALL, NpcJainaOrSylvanasEscapeRoute[_icewall + 3]);
+ _events.ScheduleEvent(EVENT_ESCAPE_14, 8000);
+ break;
+ case EVENT_ESCAPE_14:
+ SummonIceWall();
+ break;
+ case EVENT_ESCAPE_15: // FINAL PART
+ DestroyIceWall();
+
+ Talk(SAY_JAINA_SYLVANAS_ESCAPE_6);
+
+ if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
+ {
+ lichking->GetMotionMaster()->MovePoint(2, LichKingFinalPos);
+ lichking->RemoveAurasDueToSpell(SPELL_REMORSELESS_WINTER);
+ }
+ me->GetMotionMaster()->MovePoint(POINT_TRAP, NpcJainaOrSylvanasEscapeRoute[7]);
+ break;
+ case EVENT_ESCAPE_16:
+ me->RemoveAurasDueToSpell(SPELL_HARVEST_SOUL);
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ Talk(SAY_JAINA_ESCAPE_9);
+ if (Transport* gunship = ObjectAccessor::GetTransport(*me, _instance->GetData64(DATA_GUNSHIP)))
+ gunship->EnableMovement(true);
+ _instance->SetBossState(DATA_THE_LICH_KING_ESCAPE, DONE);
+ break;
+ case EVENT_ESCAPE_17:
+ if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
+ Talk(SAY_JAINA_ESCAPE_10);
+ else
+ Talk(SAY_SYLVANAS_ESCAPE_9);
+ DoCast(me, SPELL_CREDIT_ESCAPING_ARTHAS);
+ me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
+ break;
+ default:
+ break;
}
}
+
+ DoMeleeAttackIfReady();
}
- };
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetHallsOfReflectionAI<npc_jaina_or_sylvanas_escape_horAI>(creature);
- }
+ private:
+ InstanceScript* _instance;
+ EventMap _events;
+ uint32 _icewall; // icewall number
+ bool _prefight;
+ bool _invincibility;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfReflectionAI<npc_jaina_or_sylvanas_escape_horAI>(creature);
+ }
+};
+
+class npc_the_lich_king_escape_hor : public CreatureScript
+{
+ public:
+ npc_the_lich_king_escape_hor() : CreatureScript("npc_the_lich_king_escape_hor") { }
+
+ struct npc_the_lich_king_escape_horAI : public ScriptedAI
+ {
+ npc_the_lich_king_escape_horAI(Creature* creature) : ScriptedAI(creature)
+ {
+ _instance = me->GetInstanceScript();
+ _instance->SetBossState(DATA_THE_LICH_KING_ESCAPE, NOT_STARTED);
+ _summonsCount = 0;
+ _icewall = 0;
+ _despawn = false;
+ }
+
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
+ {
+ if (damage >= me->GetHealth())
+ damage = me->GetHealth() - 1;
+ }
+
+ void MovementInform(uint32 type, uint32 pointId) override
+ {
+ if (type == POINT_MOTION_TYPE)
+ {
+ switch (pointId)
+ {
+ case 1:
+ if (Creature* target = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER)))
+ me->GetMotionMaster()->MoveChase(target);
+ break;
+ case 2:
+ Talk(SAY_LK_ESCAPE_HARVEST_SOUL);
+
+ if (Creature* target = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER)))
+ DoCast(target, SPELL_HARVEST_SOUL);
+
+ if (Transport* gunship = ObjectAccessor::GetTransport(*me, _instance->GetData64(DATA_GUNSHIP)))
+ gunship->EnableMovement(true);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ void JustSummoned(Creature* /*summon*/) override
+ {
+ ++_summonsCount;
+ }
+
+ void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) override
+ {
+ // should never happen
+ if (!_summonsCount)
+ return;
+
+ --_summonsCount;
+
+ // All summons dead and no summon events scheduled
+ if (!_summonsCount && _events.Empty())
+ {
+ if (Creature* jainaOrSylvanas = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER)))
+ jainaOrSylvanas->AI()->DoAction(ACTION_WALL_BROKEN);
+ }
+ }
+
+ void KilledUnit(Unit* who) override
+ {
+ if (who->GetTypeId() == TYPEID_PLAYER)
+ DoPlaySoundToSet(me, RAND(SOUND_LK_SLAY_1, SOUND_LK_SLAY_2));
+ }
+
+ void SetData(uint32 type, uint32 data) override
+ {
+ if (type != DATA_ICEWALL)
+ return;
+
+ _icewall = data;
+
+ switch (_icewall)
+ {
+ case 0: // 6 Ghouls, 1 Witch Doctor
+ DoZoneInCombat();
+ _events.ScheduleEvent(EVENT_REMORSELESS_WINTER, 0);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 8000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 14000);
+ Talk(SAY_LK_ESCAPE_ICEWALL_SUMMONED_1);
+ break;
+ case 1: // 6 Ghouls, 2 Witch Doctor, 1 Lumbering Abomination
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 8000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 13000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 16000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 18000);
+ Talk(SAY_LK_ESCAPE_ICEWALL_SUMMONED_2);
+ break;
+ case 2: // 6 Ghouls, 2 Witch Doctor, 2 Lumbering Abomination
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 9000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 14000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 17000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 19000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 39000);
+ Talk(SAY_LK_ESCAPE_ICEWALL_SUMMONED_3);
+ break;
+ case 3: // 12 Ghouls, 4 Witch Doctor, 3 Lumbering Abomination
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 9000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 17000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 19000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 40000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 46000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 55000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 62000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 66000);
+ _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 14000);
+ Talk(SAY_LK_ESCAPE_ICEWALL_SUMMONED_4);
+ break;
+ default:
+ break;
+ }
+ }
+
+ void EnterEvadeMode() override
+ {
+ if (_despawn)
+ return;
+
+ _instance->SetBossState(DATA_THE_LICH_KING_ESCAPE, FAIL);
+ me->StopMoving();
+ DoPlaySoundToSet(me, SOUND_LK_FURY_OF_FROSTMOURNE);
+ DoCastAOE(SPELL_FURY_OF_FROSTMOURNE);
+ me->DespawnOrUnsummon(12000);
+ _despawn = true;
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!SelectVictim())
+ return;
+
+ _events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 event = _events.ExecuteEvent())
+ {
+ switch (event)
+ {
+ case EVENT_REMORSELESS_WINTER:
+ me->StopMoving();
+ Talk(SAY_LK_ESCAPE_WINTER);
+ DoCast(me, SPELL_REMORSELESS_WINTER);
+ break;
+ case EVENT_ESCAPE_SUMMON_GHOULS:
+ me->StopMoving();
+ Talk(SAY_LK_ESCAPE_GHOULS);
+ DoCast(me, SPELL_RAISE_DEAD);
+ break;
+ case EVENT_ESCAPE_SUMMON_WITCH_DOCTOR:
+ DoCast(me, SPELL_SUMMON_RISEN_WITCH_DOCTOR);
+ break;
+ case EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION:
+ Talk(SAY_LK_ESCAPE_ABOMINATION);
+ DoCast(me, SPELL_SUMMON_LUMBERING_ABOMINATION);
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
+ }
+
+ private:
+ bool SelectVictim()
+ {
+ if (!me->IsInCombat())
+ return false;
+
+ if (!me->HasReactState(REACT_PASSIVE))
+ {
+ if (Unit* victim = me->SelectVictim())
+ AttackStart(victim);
+ return me->GetVictim() != nullptr;
+ }
+ else if (me->getThreatManager().getThreatList().size() < 2 && me->HasAura(SPELL_REMORSELESS_WINTER))
+ {
+ EnterEvadeMode();
+ return false;
+ }
+
+ return true;
+ }
+
+ InstanceScript* _instance;
+ EventMap _events;
+ uint8 _icewall;
+ uint32 _summonsCount;
+ bool _despawn;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfReflectionAI<npc_the_lich_king_escape_horAI>(creature);
+ }
};
enum TrashSpells
@@ -1140,7 +1376,7 @@ enum TrashSpells
SPELL_SHOOT = 72208,
SPELL_CURSED_ARROW = 72222,
SPELL_FROST_TRAP = 72215,
- SPELL_ICE_SHOT = 72268,
+ SPELL_ICE_SHOT = 72268
};
enum TrashEvents
@@ -1175,30 +1411,27 @@ enum TrashEvents
EVENT_SHOOT,
EVENT_CURSED_ARROW,
EVENT_FROST_TRAP,
- EVENT_ICE_SHOT,
+ EVENT_ICE_SHOT
};
struct npc_gauntlet_trash : public ScriptedAI
{
- npc_gauntlet_trash(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript())
- {
- InternalWaveId = 0;
- }
+ npc_gauntlet_trash(Creature* creature) : ScriptedAI(creature),
+ _instance(creature->GetInstanceScript()), InternalWaveId(0) { }
- void Reset() OVERRIDE
+ void Reset() override
{
- InternalWaveId = 0;
me->CastSpell(me, SPELL_WELL_OF_SOULS, true);
_events.Reset();
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
if (_instance->GetData(DATA_WAVE_COUNT) != NOT_STARTED)
_instance->SetData(DATA_WAVE_COUNT, NOT_STARTED);
}
- void SetData(uint32 type, uint32 value) OVERRIDE
+ void SetData(uint32 type, uint32 value) override
{
if (type)
return;
@@ -1206,7 +1439,7 @@ struct npc_gauntlet_trash : public ScriptedAI
InternalWaveId = value;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type)
return 0;
@@ -1222,352 +1455,362 @@ protected:
class npc_ghostly_priest : public CreatureScript
{
-public:
- npc_ghostly_priest() : CreatureScript("npc_ghostly_priest") { }
-
- struct npc_ghostly_priestAI : public npc_gauntlet_trash
- {
- npc_ghostly_priestAI(Creature* creature) : npc_gauntlet_trash(creature) { }
+ public:
+ npc_ghostly_priest() : CreatureScript("npc_ghostly_priest") { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ struct npc_ghostly_priestAI : public npc_gauntlet_trash
{
- _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 8000); /// @todo adjust timers
- _events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 12000);
- _events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10000);
- _events.ScheduleEvent(EVENT_DARK_MENDING, 20000);
- }
+ npc_ghostly_priestAI(Creature* creature) : npc_gauntlet_trash(creature) { }
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (!UpdateVictim())
- return;
-
- _events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- switch (_events.ExecuteEvent())
- {
- case EVENT_SHADOW_WORD_PAIN:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_SHADOW_WORD_PAIN);
- _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 8000);
- break;
- case EVENT_CIRCLE_OF_DESTRUCTION:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_CIRCLE_OF_DESTRUCTION);
- _events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 12000);
- break;
- case EVENT_COWER_IN_FEAR:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_COWER_IN_FEAR);
- _events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10000);
- break;
- case EVENT_DARK_MENDING:
- // find an ally with missing HP
- if (Unit* target = DoSelectLowestHpFriendly(40, DUNGEON_MODE(30000, 50000)))
- {
- DoCast(target, SPELL_DARK_MENDING);
- _events.ScheduleEvent(EVENT_DARK_MENDING, 20000);
- }
- else
- {
- // no friendly unit with missing hp. re-check in just 5 sec.
- _events.ScheduleEvent(EVENT_DARK_MENDING, 5000);
- }
- break;
+ void EnterCombat(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(6000, 15000));
+ _events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 12000);
+ _events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10000);
+ _events.ScheduleEvent(EVENT_DARK_MENDING, 20000);
}
- DoMeleeAttackIfReady();
- }
- };
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetInstanceAI<npc_ghostly_priestAI>(creature);
- }
-};
+ _events.Update(diff);
-class npc_phantom_mage : public CreatureScript
-{
-public:
- npc_phantom_mage() : CreatureScript("npc_phantom_mage") { }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- struct npc_phantom_mageAI : public npc_gauntlet_trash
- {
- npc_phantom_mageAI(Creature* creature) : npc_gauntlet_trash(creature) { }
+ switch (_events.ExecuteEvent())
+ {
+ case EVENT_SHADOW_WORD_PAIN:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true))
+ DoCast(target, SPELL_SHADOW_WORD_PAIN);
+ _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(6000, 15000));
+ break;
+ case EVENT_CIRCLE_OF_DESTRUCTION:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 10.0f, true))
+ DoCast(target, SPELL_CIRCLE_OF_DESTRUCTION);
+ _events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 12000);
+ break;
+ case EVENT_COWER_IN_FEAR:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 20.0f, true))
+ DoCast(target, SPELL_COWER_IN_FEAR);
+ _events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10000);
+ break;
+ case EVENT_DARK_MENDING:
+ // find an ally with missing HP
+ if (Unit* target = DoSelectLowestHpFriendly(40, DUNGEON_MODE(30000, 50000)))
+ {
+ DoCast(target, SPELL_DARK_MENDING);
+ _events.ScheduleEvent(EVENT_DARK_MENDING, 20000);
+ }
+ else
+ {
+ // no friendly unit with missing hp. re-check in just 5 sec.
+ _events.ScheduleEvent(EVENT_DARK_MENDING, 5000);
+ }
+ break;
+ default:
+ break;
+ }
- void EnterEvadeMode() OVERRIDE
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
{
- if (!me->HasAura(AURA_HALLUCINATION))
- npc_gauntlet_trash::EnterEvadeMode();
+ return GetHallsOfReflectionAI<npc_ghostly_priestAI>(creature);
}
+};
- void EnterCombat(Unit* /*who*/) OVERRIDE
+class npc_phantom_mage : public CreatureScript
+{
+ public:
+ npc_phantom_mage() : CreatureScript("npc_phantom_mage") { }
+
+ struct npc_phantom_mageAI : public npc_gauntlet_trash
{
- _events.ScheduleEvent(EVENT_FIREBALL, 3000); /// @todo adjust timers
- _events.ScheduleEvent(EVENT_FLAMESTRIKE, 6000);
- _events.ScheduleEvent(EVENT_FROSTBOLT, 9000);
- _events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 12000);
- _events.ScheduleEvent(EVENT_HALLUCINATION, 40000);
- }
+ npc_phantom_mageAI(Creature* creature) : npc_gauntlet_trash(creature) { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void EnterEvadeMode() override
+ {
+ if (!me->HasAura(AURA_HALLUCINATION))
+ npc_gauntlet_trash::EnterEvadeMode();
+ }
+
+ void EnterCombat(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_FIREBALL, 3000);
+ _events.ScheduleEvent(EVENT_FLAMESTRIKE, 6000);
+ _events.ScheduleEvent(EVENT_FROSTBOLT, 9000);
+ _events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 12000);
+ _events.ScheduleEvent(EVENT_HALLUCINATION, 40000);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ _events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ switch (_events.ExecuteEvent())
+ {
+ case EVENT_FIREBALL:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true))
+ DoCast(target, SPELL_FIREBALL);
+ _events.ScheduleEvent(EVENT_FIREBALL, 15000);
+ break;
+ case EVENT_FLAMESTRIKE:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true))
+ DoCast(target, SPELL_FLAMESTRIKE);
+ _events.ScheduleEvent(EVENT_FLAMESTRIKE, 15000);
+ break;
+ case EVENT_FROSTBOLT:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true))
+ DoCast(target, SPELL_FROSTBOLT);
+ _events.ScheduleEvent(EVENT_FROSTBOLT, 15000);
+ break;
+ case EVENT_CHAINS_OF_ICE:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
+ DoCast(target, SPELL_CHAINS_OF_ICE);
+ _events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 15000);
+ break;
+ case EVENT_HALLUCINATION:
+ // removing any dots on mage or else the invisibility spell will break duration
+ me->RemoveAllAuras();
+ DoCast(me, SPELL_HALLUCINATION);
+ break;
+ default:
+ break;
+ }
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
{
- if (!UpdateVictim())
- return;
-
- _events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- switch (_events.ExecuteEvent())
- {
- case EVENT_FIREBALL:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_FIREBALL);
- _events.ScheduleEvent(EVENT_FIREBALL, 15000);
- break;
- case EVENT_FLAMESTRIKE:
- DoCast(SPELL_FLAMESTRIKE);
- _events.ScheduleEvent(EVENT_FLAMESTRIKE, 15000);
- break;
- case EVENT_FROSTBOLT:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_FROSTBOLT);
- _events.ScheduleEvent(EVENT_FROSTBOLT, 15000);
- break;
- case EVENT_CHAINS_OF_ICE:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_CHAINS_OF_ICE);
- _events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 15000);
- break;
- case EVENT_HALLUCINATION:
- // removing any dots on mage or else the invisibility spell will break duration
- me->RemoveAllAuras();
- DoCast(SPELL_HALLUCINATION);
- break;
- }
-
- DoMeleeAttackIfReady();
+ return GetHallsOfReflectionAI<npc_phantom_mageAI>(creature);
}
- };
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetInstanceAI<npc_phantom_mageAI>(creature);
- }
};
class npc_phantom_hallucination : public CreatureScript
{
-public:
- npc_phantom_hallucination() : CreatureScript("npc_phantom_hallucination") { }
-
- struct npc_phantom_hallucinationAI : public npc_phantom_mage::npc_phantom_mageAI
- {
- npc_phantom_hallucinationAI(Creature* creature) : npc_phantom_mage::npc_phantom_mageAI(creature) { }
+ public:
+ npc_phantom_hallucination() : CreatureScript("npc_phantom_hallucination") { }
- void Reset() OVERRIDE
+ struct npc_phantom_hallucinationAI : public npc_phantom_mage::npc_phantom_mageAI
{
- if (Unit* unit = me->SelectNearestTarget())
- AttackStart(unit);
- DoZoneInCombat();
- }
+ npc_phantom_hallucinationAI(Creature* creature) : npc_phantom_mage::npc_phantom_mageAI(creature) { }
- void EnterEvadeMode() OVERRIDE
- {
- if (me->GetOwner() && !me->GetOwner()->HasAura(AURA_HALLUCINATION))
- npc_phantom_mage::npc_phantom_mageAI::EnterEvadeMode();
- }
+ void Reset() override
+ {
+ DoZoneInCombat(me, 150.0f);
+ }
+
+ void EnterEvadeMode() override
+ {
+ if (me->GetOwner() && !me->GetOwner()->HasAura(AURA_HALLUCINATION))
+ npc_phantom_mage::npc_phantom_mageAI::EnterEvadeMode();
+ }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
+ {
+ DoCastAOE(SPELL_HALLUCINATION_2);
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
{
- DoCast(SPELL_HALLUCINATION_2);
+ return new npc_phantom_hallucinationAI(creature);
}
- };
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_phantom_hallucinationAI(creature);
- }
};
class npc_shadowy_mercenary : public CreatureScript
{
-public:
- npc_shadowy_mercenary() : CreatureScript("npc_shadowy_mercenary") { }
-
- struct npc_shadowy_mercenaryAI : public npc_gauntlet_trash
- {
- npc_shadowy_mercenaryAI(Creature* creature) : npc_gauntlet_trash(creature) { }
+ public:
+ npc_shadowy_mercenary() : CreatureScript("npc_shadowy_mercenary") { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ struct npc_shadowy_mercenaryAI : public npc_gauntlet_trash
{
- _events.ScheduleEvent(EVENT_SHADOW_STEP, 8000); /// @todo adjust timers
- _events.ScheduleEvent(EVENT_DEADLY_POISON, 5000);
- _events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10000);
- _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 12000);
- }
+ npc_shadowy_mercenaryAI(Creature* creature) : npc_gauntlet_trash(creature) { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_SHADOW_STEP, 23000);
+ _events.ScheduleEvent(EVENT_DEADLY_POISON, 5000);
+ _events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10000);
+ _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 12000);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ _events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ switch (_events.ExecuteEvent())
+ {
+ case EVENT_SHADOW_STEP:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
+ DoCast(target, SPELL_SHADOW_STEP);
+ _events.ScheduleEvent(EVENT_SHADOW_STEP, 8000);
+ break;
+ case EVENT_DEADLY_POISON:
+ DoCastVictim(SPELL_DEADLY_POISON);
+ _events.ScheduleEvent(EVENT_DEADLY_POISON, 10000);
+ break;
+ case EVENT_ENVENOMED_DAGGER_THROW:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true))
+ DoCast(target, SPELL_ENVENOMED_DAGGER_THROW);
+ _events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10000);
+ break;
+ case EVENT_KIDNEY_SHOT:
+ DoCastVictim(SPELL_KIDNEY_SHOT);
+ _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 10000);
+ break;
+ default:
+ break;
+ }
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
{
- if (!UpdateVictim())
- return;
-
- _events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- switch (_events.ExecuteEvent())
- {
- case EVENT_SHADOW_STEP:
- DoCast(SPELL_SHADOW_STEP);
- _events.ScheduleEvent(EVENT_SHADOW_STEP, 8000);
- break;
- case EVENT_DEADLY_POISON:
- DoCastVictim(SPELL_DEADLY_POISON);
- _events.ScheduleEvent(EVENT_DEADLY_POISON, 10000);
- break;
- case EVENT_ENVENOMED_DAGGER_THROW:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_ENVENOMED_DAGGER_THROW);
- _events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10000);
- break;
- case EVENT_KIDNEY_SHOT:
- DoCastVictim(SPELL_KIDNEY_SHOT);
- _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 10000);
- break;
- }
-
- DoMeleeAttackIfReady();
+ return GetHallsOfReflectionAI<npc_shadowy_mercenaryAI>(creature);
}
- };
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetInstanceAI<npc_shadowy_mercenaryAI>(creature);
- }
};
class npc_spectral_footman : public CreatureScript
{
-public:
- npc_spectral_footman() : CreatureScript("npc_spectral_footman") { }
-
- struct npc_spectral_footmanAI : public npc_gauntlet_trash
- {
- npc_spectral_footmanAI(Creature* creature) : npc_gauntlet_trash(creature) { }
+ public:
+ npc_spectral_footman() : CreatureScript("npc_spectral_footman") { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ struct npc_spectral_footmanAI : public npc_gauntlet_trash
{
- _events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 5000); /// @todo adjust timers
- _events.ScheduleEvent(EVENT_SHIELD_BASH, 10000);
- _events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000);
- }
+ npc_spectral_footmanAI(Creature* creature) : npc_gauntlet_trash(creature) { }
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (!UpdateVictim())
- return;
+ void EnterCombat(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 14000);
+ _events.ScheduleEvent(EVENT_SHIELD_BASH, 10000);
+ _events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000);
+ }
- _events.Update(diff);
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ _events.Update(diff);
- switch (_events.ExecuteEvent())
- {
- case EVENT_SPECTRAL_STRIKE:
- DoCastVictim(SPELL_SPECTRAL_STRIKE);
- _events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 5000);
- break;
- case EVENT_SHIELD_BASH:
- DoCastVictim(SPELL_SHIELD_BASH);
- _events.ScheduleEvent(EVENT_SHIELD_BASH, 5000);
- break;
- case EVENT_TORTURED_ENRAGE:
- DoCast(SPELL_TORTURED_ENRAGE);
- _events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000);
- break;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ switch (_events.ExecuteEvent())
+ {
+ case EVENT_SPECTRAL_STRIKE:
+ DoCastVictim(SPELL_SPECTRAL_STRIKE);
+ _events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 5000);
+ break;
+ case EVENT_SHIELD_BASH:
+ DoCastVictim(SPELL_SHIELD_BASH);
+ _events.ScheduleEvent(EVENT_SHIELD_BASH, 5000);
+ break;
+ case EVENT_TORTURED_ENRAGE:
+ DoCast(me, SPELL_TORTURED_ENRAGE);
+ _events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000);
+ break;
+ default:
+ break;
+ }
+
+ DoMeleeAttackIfReady();
}
+ };
- DoMeleeAttackIfReady();
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfReflectionAI<npc_spectral_footmanAI>(creature);
}
- };
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetInstanceAI<npc_spectral_footmanAI>(creature);
- }
};
class npc_tortured_rifleman : public CreatureScript
{
-public:
- npc_tortured_rifleman() : CreatureScript("npc_tortured_rifleman") { }
-
- struct npc_tortured_riflemanAI : public npc_gauntlet_trash
- {
- npc_tortured_riflemanAI(Creature* creature) : npc_gauntlet_trash(creature) { }
+ public:
+ npc_tortured_rifleman() : CreatureScript("npc_tortured_rifleman") { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ struct npc_tortured_riflemanAI : public npc_gauntlet_trash
{
- _events.ScheduleEvent(EVENT_SHOOT, 1); /// @todo adjust timers
- _events.ScheduleEvent(EVENT_CURSED_ARROW, 7000);
- _events.ScheduleEvent(EVENT_FROST_TRAP, 10000);
- _events.ScheduleEvent(EVENT_ICE_SHOT, 15000);
- }
+ npc_tortured_riflemanAI(Creature* creature) : npc_gauntlet_trash(creature) { }
+
+ void EnterCombat(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_SHOOT, 1);
+ _events.ScheduleEvent(EVENT_CURSED_ARROW, 7000);
+ _events.ScheduleEvent(EVENT_FROST_TRAP, 10000);
+ _events.ScheduleEvent(EVENT_ICE_SHOT, 15000);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ _events.Update(diff);
- void UpdateAI(uint32 diff) OVERRIDE
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ switch (_events.ExecuteEvent())
+ {
+ case EVENT_SHOOT:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true))
+ DoCast(target, SPELL_SHOOT);
+ _events.ScheduleEvent(EVENT_SHOOT, 2000);
+ break;
+ case EVENT_CURSED_ARROW:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true))
+ DoCast(target, SPELL_CURSED_ARROW);
+ _events.ScheduleEvent(EVENT_CURSED_ARROW, 10000);
+ break;
+ case EVENT_FROST_TRAP:
+ DoCast(me, SPELL_FROST_TRAP);
+ _events.ScheduleEvent(EVENT_FROST_TRAP, 30000);
+ break;
+ case EVENT_ICE_SHOT:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true))
+ DoCast(target, SPELL_ICE_SHOT);
+ _events.ScheduleEvent(EVENT_ICE_SHOT, 15000);
+ break;
+ default:
+ break;
+ }
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
{
- if (!UpdateVictim())
- return;
-
- _events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- switch (_events.ExecuteEvent())
- {
- case EVENT_SHOOT:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_SHOOT);
- _events.ScheduleEvent(EVENT_SHOOT, 2000);
- break;
- case EVENT_CURSED_ARROW:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_CURSED_ARROW);
- _events.ScheduleEvent(EVENT_CURSED_ARROW, 10000);
- break;
- case EVENT_FROST_TRAP:
- DoCast(SPELL_FROST_TRAP);
- _events.ScheduleEvent(EVENT_FROST_TRAP, 30000);
- break;
- case EVENT_ICE_SHOT:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_ICE_SHOT);
- _events.ScheduleEvent(EVENT_ICE_SHOT, 15000);
- break;
- }
- DoMeleeAttackIfReady();
+ return GetHallsOfReflectionAI<npc_tortured_riflemanAI>(creature);
}
- };
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetInstanceAI<npc_tortured_riflemanAI>(creature);
- }
};
-
-enum GeneralEvents
+enum FrostswornGeneral
{
- //General
+ // General
EVENT_SHIELD = 1,
EVENT_SPIKE = 2,
EVENT_CLONE = 3,
@@ -1575,554 +1818,652 @@ enum GeneralEvents
SAY_AGGRO = 0,
SAY_DEATH = 1,
- SPELL_SHIELD_THROWN = 69222, // 73076 on hc
- SPELL_SPIKE = 69184, // 70399 on hc
- SPELL_CLONE_NAME = 57507,
- SPELL_CLONE_MODEL = 45204,
+ SPELL_SHIELD_THROWN = 69222,
+ SPELL_SPIKE = 69184,
+ SPELL_CLONE = 69828,
+ SPELL_GHOST_VISUAL = 69861,
// Reflection
EVENT_BALEFUL_STRIKE = 1,
- SPELL_BALEFUL_STRIKE = 69933, // 70400 on hc
- SPELL_SPIRIT_BURST = 69900, // 73046 on hc
+ SPELL_BALEFUL_STRIKE = 69933,
+ SPELL_SPIRIT_BURST = 69900
};
-class npc_frostworn_general : public CreatureScript
+class npc_frostsworn_general : public CreatureScript
{
-public:
- npc_frostworn_general() : CreatureScript("npc_frostworn_general") { }
+ public:
+ npc_frostsworn_general() : CreatureScript("npc_frostsworn_general") { }
- struct npc_frostworn_generalAI : public ScriptedAI
- {
- npc_frostworn_generalAI(Creature* creature) : ScriptedAI(creature)
+ struct npc_frostsworn_generalAI : public ScriptedAI
{
- _instance = me->GetInstanceScript();
- Reset();
- }
+ npc_frostsworn_generalAI(Creature* creature) : ScriptedAI(creature)
+ {
+ _instance = creature->GetInstanceScript();
+ }
- InstanceScript* _instance;
- EventMap _events;
+ void Reset() override
+ {
+ _events.Reset();
+ _instance->SetData(DATA_FROSTSWORN_GENERAL, NOT_STARTED);
+ }
- void Reset() OVERRIDE
- {
- _events.Reset();
- _instance->SetData(DATA_FROSWORN_EVENT, NOT_STARTED);
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ Talk(SAY_DEATH);
+ _events.Reset();
+ _instance->SetData(DATA_FROSTSWORN_GENERAL, DONE);
+ }
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- Talk(SAY_DEATH);
- _instance->SetData(DATA_FROSWORN_EVENT, DONE);
- }
+ void EnterCombat(Unit* /*victim*/) override
+ {
+ Talk(SAY_AGGRO);
+ DoZoneInCombat();
+ _events.ScheduleEvent(EVENT_SHIELD, 5000);
+ _events.ScheduleEvent(EVENT_SPIKE, 14000);
+ _events.ScheduleEvent(EVENT_CLONE, 22000);
+ _instance->SetData(DATA_FROSTSWORN_GENERAL, IN_PROGRESS);
+ }
- void EnterCombat(Unit* /*victim*/) OVERRIDE
- {
- Talk(SAY_AGGRO);
- _events.ScheduleEvent(EVENT_SHIELD, 5000);
- _events.ScheduleEvent(EVENT_SPIKE, 14000);
- _events.ScheduleEvent(EVENT_CLONE, 22000);
- _instance->SetData(DATA_FROSWORN_EVENT, IN_PROGRESS);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (!UpdateVictim())
- return;
+ _events.Update(diff);
- _events.Update(diff);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ while (uint32 event = _events.ExecuteEvent())
+ {
+ switch (event)
+ {
+ case EVENT_SHIELD:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
+ DoCast(target, SPELL_SHIELD_THROWN);
+ _events.ScheduleEvent(EVENT_SHIELD, urand(8000, 12000));
+ break;
+ case EVENT_SPIKE:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
+ DoCast(target, SPELL_SPIKE);
+ _events.ScheduleEvent(EVENT_SPIKE, urand(15000, 20000));
+ break;
+ case EVENT_CLONE:
+ SummonClones();
+ _events.ScheduleEvent(EVENT_CLONE, 60000);
+ break;
+ default:
+ break;
+ }
+ }
+ DoMeleeAttackIfReady();
+ }
- while (uint32 event = _events.ExecuteEvent())
+ void SummonClones()
{
- switch (event)
+ std::list<Unit*> playerList;
+ SelectTargetList(playerList, 5, SELECT_TARGET_TOPAGGRO, 0.0f, true);
+ for (Unit* target : playerList)
{
- case EVENT_SHIELD:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_SHIELD_THROWN);
- _events.ScheduleEvent(EVENT_SHIELD, urand(8000, 12000));
- break;
- case EVENT_SPIKE:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_SPIKE);
- _events.ScheduleEvent(EVENT_SPIKE, urand(15000, 20000));
- break;
- case EVENT_CLONE:
- SummonClones();
- _events.ScheduleEvent(EVENT_CLONE, 60000);
- break;
+ if (Creature* reflection = me->SummonCreature(NPC_REFLECTION, *target, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000))
+ {
+ target->CastSpell(reflection, SPELL_CLONE, true);
+ target->CastSpell(reflection, SPELL_GHOST_VISUAL, true);
+ reflection->AI()->AttackStart(target);
+ }
}
}
- DoMeleeAttackIfReady();
- }
- void SummonClones()
+ private:
+ InstanceScript* _instance;
+ EventMap _events;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
{
- std::list<Unit *> playerList;
- SelectTargetList(playerList, 5, SELECT_TARGET_TOPAGGRO, 0, true);
- for (std::list<Unit*>::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr)
- {
- Unit* temp = (*itr);
- Creature* reflection = me->SummonCreature(NPC_REFLECTION, temp->GetPositionX(), temp->GetPositionY(), temp->GetPositionZ(), temp->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000);
- reflection->SetName(temp->GetName());
- temp->CastSpell(reflection, SPELL_CLONE_NAME, true);
- temp->CastSpell(reflection, SPELL_CLONE_MODEL, true);
- reflection->setFaction(me->getFaction());
- reflection->AI()->AttackStart(temp);
- }
+ return GetHallsOfReflectionAI<npc_frostsworn_generalAI>(creature);
}
- };
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetInstanceAI<npc_frostworn_generalAI>(creature);
- }
};
class npc_spiritual_reflection : public CreatureScript
{
-public:
- npc_spiritual_reflection() : CreatureScript("npc_spiritual_reflection") { }
+ public:
+ npc_spiritual_reflection() : CreatureScript("npc_spiritual_reflection") { }
- struct npc_spiritual_reflectionAI : public ScriptedAI
- {
- npc_spiritual_reflectionAI(Creature *creature) : ScriptedAI(creature)
+ struct npc_spiritual_reflectionAI : public ScriptedAI
{
- Reset();
- }
+ npc_spiritual_reflectionAI(Creature *creature) : ScriptedAI(creature) { }
- EventMap _events;
+ void Reset() override
+ {
+ _events.Reset();
+ }
- void Reset() OVERRIDE
- {
- _events.Reset();
- }
+ void EnterCombat(Unit* /*victim*/) override
+ {
+ _events.ScheduleEvent(EVENT_BALEFUL_STRIKE, 3000);
+ }
- void EnterCombat(Unit* /*victim*/) OVERRIDE
- {
- _events.ScheduleEvent(EVENT_BALEFUL_STRIKE, 3000);
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ DoCastAOE(SPELL_SPIRIT_BURST);
+ }
- void JustDied(Unit* killer) OVERRIDE
- {
- DoCast(killer, SPELL_SPIRIT_BURST);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (!UpdateVictim())
- return;
+ _events.Update(diff);
- _events.Update(diff);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ switch (_events.ExecuteEvent())
+ {
+ case EVENT_BALEFUL_STRIKE:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 8.0f, true))
+ DoCast(target, SPELL_BALEFUL_STRIKE);
+ _events.ScheduleEvent(EVENT_BALEFUL_STRIKE, urand(3000, 8000));
+ break;
+ default:
+ break;
+ }
- switch (_events.ExecuteEvent())
- {
- case EVENT_BALEFUL_STRIKE:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_BALEFUL_STRIKE);
- _events.ScheduleEvent(EVENT_BALEFUL_STRIKE, urand(3000, 8000));
+ DoMeleeAttackIfReady();
}
- DoMeleeAttackIfReady();
- }
- };
+ private:
+ EventMap _events;
+ };
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_spiritual_reflectionAI(creature);
- }
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_spiritual_reflectionAI(creature);
+ }
};
+// 5689
class at_hor_intro_start : public AreaTriggerScript
{
-public:
- at_hor_intro_start() : AreaTriggerScript("at_hor_intro_start") { }
+ public:
+ at_hor_intro_start() : AreaTriggerScript("at_hor_intro_start") { }
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE
- {
- InstanceScript* _instance = player->GetInstanceScript();
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override
+ {
+ if (player->IsGameMaster())
+ return true;
- if (player->IsGameMaster())
- return true;
+ InstanceScript* _instance = player->GetInstanceScript();
- if (_instance->GetData(DATA_INTRO_EVENT) == NOT_STARTED)
- _instance->SetData(DATA_INTRO_EVENT, IN_PROGRESS);
+ if (_instance->GetData(DATA_INTRO_EVENT) == NOT_STARTED)
+ _instance->SetData(DATA_INTRO_EVENT, IN_PROGRESS);
- return true;
- }
+ return true;
+ }
};
class at_hor_waves_restarter : public AreaTriggerScript
{
-public:
- at_hor_waves_restarter() : AreaTriggerScript("at_hor_waves_restarter") { }
+ public:
+ at_hor_waves_restarter() : AreaTriggerScript("at_hor_waves_restarter") { }
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE
- {
- InstanceScript* _instance = player->GetInstanceScript();
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override
+ {
+ if (player->IsGameMaster())
+ return true;
- if (player->IsGameMaster())
- return true;
+ InstanceScript* _instance = player->GetInstanceScript();
- if (_instance->GetData(DATA_WAVE_COUNT))
+ if (_instance->GetData(DATA_WAVE_COUNT))
+ return true;
+
+ if (_instance->GetData(DATA_INTRO_EVENT) == DONE && _instance->GetBossState(DATA_MARWYN) != DONE)
+ {
+ _instance->ProcessEvent(0, EVENT_SPAWN_WAVES);
+
+ if (Creature* falric = ObjectAccessor::GetCreature(*player, _instance->GetData64(DATA_FALRIC)))
+ {
+ falric->CastSpell(falric, SPELL_BOSS_SPAWN_AURA, true);
+ falric->SetVisible(true);
+ }
+ if (Creature* marwyn = ObjectAccessor::GetCreature(*player, _instance->GetData64(DATA_MARWYN)))
+ {
+ marwyn->CastSpell(marwyn, SPELL_BOSS_SPAWN_AURA, true);
+ marwyn->SetVisible(true);
+ }
+ }
return true;
+ }
+};
- if (_instance->GetData(DATA_INTRO_EVENT) == DONE && _instance->GetBossState(DATA_MARWYN_EVENT) != DONE)
+// 5740
+class at_hor_impenetrable_door : public AreaTriggerScript
+{
+ public:
+ at_hor_impenetrable_door() : AreaTriggerScript("at_hor_impenetrable_door") { }
+
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*at*/) override
{
- _instance->ProcessEvent(0, EVENT_SPAWN_WAVES);
+ if (player->IsGameMaster())
+ return true;
- if (Creature* falric = player->GetCreature(*player, _instance->GetData64(DATA_FALRIC_EVENT)))
- {
- falric->CastSpell(falric, SPELL_BOSS_SPAWN_AURA, true);
- falric->SetVisible(true);
- }
- if (Creature* marwyn = player->GetCreature(*player, _instance->GetData64(DATA_MARWYN_EVENT)))
- {
- marwyn->CastSpell(marwyn, SPELL_BOSS_SPAWN_AURA, true);
- marwyn->SetVisible(true);
- }
+ InstanceScript* _instance = player->GetInstanceScript();
+ if (_instance->GetBossState(DATA_MARWYN) == DONE)
+ return true;
+
+ /// return false to handle teleport by db
+ return false;
}
- return true;
- }
};
-class at_shadow_throne : public AreaTriggerScript
+// 5605
+class at_hor_shadow_throne : public AreaTriggerScript
{
-public:
- at_shadow_throne() : AreaTriggerScript("at_shadow_throne") { }
+ public:
+ at_hor_shadow_throne() : AreaTriggerScript("at_hor_shadow_throne") { }
- bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE
- {
- InstanceScript* _instance = player->GetInstanceScript();
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*at*/) override
+ {
+ if (player->IsGameMaster())
+ return true;
+
+ InstanceScript* _instance = player->GetInstanceScript();
+
+ if (_instance->GetBossState(DATA_THE_LICH_KING_ESCAPE) == NOT_STARTED)
+ _instance->SetBossState(DATA_THE_LICH_KING_ESCAPE, IN_PROGRESS);
- if (player->IsGameMaster())
return true;
+ }
+};
- if (_instance->GetData(DATA_ESCAPE_EVENT) == NOT_STARTED)
- _instance->SetData(DATA_ESCAPE_EVENT, IN_PROGRESS);
+enum EscapeEvents
+{
+ // Raging Ghoul
+ EVENT_RAGING_GHOUL_JUMP = 1,
- return true;
- }
+ // Risen Witch Doctor
+ EVENT_RISEN_WITCH_DOCTOR_CURSE,
+ EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT,
+ EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT_VOLLEY,
+
+ // Lumbering Abomination
+ EVENT_LUMBERING_ABOMINATION_VOMIT_SPRAY,
+ EVENT_LUMBERING_ABOMINATION_CLEAVE
};
-class npc_raging_ghoul : public CreatureScript
+namespace hor
{
-public:
- npc_raging_ghoul() : CreatureScript("npc_raging_ghoul") { }
- struct npc_raging_ghoulAI : public ScriptedAI
- {
- npc_raging_ghoulAI(Creature* creature) : ScriptedAI(creature)
+class StartMovementEvent : public BasicEvent
+{
+ public:
+ StartMovementEvent(Creature* owner) : _owner(owner) { }
+
+ bool Execute(uint64 /*execTime*/, uint32 /*diff*/) override
{
- _instance = me->GetInstanceScript();
+ _owner->SetReactState(REACT_AGGRESSIVE);
+ if (Unit* target = _owner->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
+ _owner->AI()->AttackStart(target);
+ return true;
}
- InstanceScript* _instance;
- uint32 _emergeTimer;
- bool _doEmerge;
- bool _doJump;
- uint64 _leaderGUID;
+ private:
+ Creature* _owner;
+};
- void Reset() OVERRIDE
- {
- _emergeTimer = 4000;
- _doEmerge = false;
- _doJump = false;
- if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS)
- _instance->SetData(DATA_SUMMONS, 1);
+} // namespace hor
- }
+struct npc_escape_event_trash : public ScriptedAI
+{
+ npc_escape_event_trash(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
- void IsSummonedBy(Unit*) OVERRIDE
- {
- DoCast(me, SPELL_EMERGE_VISUAL);
- }
+ void Reset() override
+ {
+ _events.Reset();
+ }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
+ {
+ if (_instance->GetBossState(DATA_THE_LICH_KING_ESCAPE) == FAIL || _instance->GetBossState(DATA_THE_LICH_KING_ESCAPE) == NOT_STARTED)
+ me->DespawnOrUnsummon();
+ }
+
+ void IsSummonedBy(Unit* /*summoner*/) override
+ {
+ DoZoneInCombat(me, 0.0f);
+ if (Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER)))
{
- _instance->SetData(DATA_SUMMONS, 0);
+ me->SetInCombatWith(leader);
+ leader->SetInCombatWith(me);
+ me->AddThreat(leader, 0.0f);
}
+ }
- void AttackStart(Unit* who) OVERRIDE
+protected:
+ EventMap _events;
+ InstanceScript* _instance;
+};
+
+class npc_raging_ghoul : public CreatureScript
+{
+ public:
+ npc_raging_ghoul() : CreatureScript("npc_raging_ghoul") { }
+
+ struct npc_raging_ghoulAI : public npc_escape_event_trash
{
- if (!who)
- return;
+ npc_raging_ghoulAI(Creature* creature) : npc_escape_event_trash(creature) { }
- if (!_doEmerge)
- return;
+ void Reset() override
+ {
+ npc_escape_event_trash::Reset();
+ _events.ScheduleEvent(EVENT_RAGING_GHOUL_JUMP, 5000);
+ }
- ScriptedAI::AttackStart(who);
- }
+ void IsSummonedBy(Unit* summoner) override
+ {
+ me->CastSpell(me, SPELL_RAGING_GHOUL_SPAWN, true);
+ me->SetReactState(REACT_PASSIVE);
+ me->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE);
+ me->m_Events.AddEvent(new hor::StartMovementEvent(me), me->m_Events.CalculateTime(5000));
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (!_instance)
- return;
+ npc_escape_event_trash::IsSummonedBy(summoner);
+ }
- if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS)
+ void UpdateAI(uint32 diff) override
{
- _leaderGUID = _instance->GetData64(DATA_ESCAPE_LEADER);
- Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER));
+ npc_escape_event_trash::UpdateAI(diff);
+
+ if (!UpdateVictim())
+ return;
+
+ _events.Update(diff);
- if (_doEmerge != true)
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ switch (_events.ExecuteEvent())
{
- if (_emergeTimer < diff)
- {
- _doEmerge = true;
- if (leader)
+ case EVENT_RAGING_GHOUL_JUMP:
+ if (Unit* victim = me->GetVictim())
{
- DoResetThreat();
- me->GetMotionMaster()->MoveIdle();
- me->GetMotionMaster()->MoveChase(leader);
+ if (me->IsInRange(victim, 5.0f, 30.0f))
+ {
+ DoCast(victim, SPELL_GHOUL_JUMP);
+ return;
+ }
}
- }
- else
- _emergeTimer -= diff;
+ _events.ScheduleEvent(EVENT_RAGING_GHOUL_JUMP, 500);
+ break;
+ default:
+ break;
}
- if (me->Attack(leader,true))/*(Unit *target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150.0f))*/
- {
- if (!_doJump && me->IsWithinDistInMap(leader, 30.0f) && !me->IsWithinDistInMap(leader, 5.0f))
- {
- _doJump = true;
- DoCast(leader, SPELL_GHOUL_JUMP);
- }
- }
+ DoMeleeAttackIfReady();
}
- else if (_instance->GetData(DATA_ESCAPE_EVENT) == FAIL || _instance->GetData(DATA_ESCAPE_EVENT) == NOT_STARTED)
- me->DespawnOrUnsummon();
- DoMeleeAttackIfReady();
- }
- };
+ };
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetInstanceAI<npc_raging_ghoulAI>(creature);
- }
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfReflectionAI<npc_raging_ghoulAI>(creature);
+ }
};
class npc_risen_witch_doctor : public CreatureScript
{
-public:
- npc_risen_witch_doctor() : CreatureScript("npc_risen_witch_doctor") { }
+ public:
+ npc_risen_witch_doctor() : CreatureScript("npc_risen_witch_doctor") { }
- struct npc_risen_witch_doctorAI : public ScriptedAI
- {
- npc_risen_witch_doctorAI(Creature* creature) : ScriptedAI(creature)
+ struct npc_risen_witch_doctorAI : public npc_escape_event_trash
{
- _instance = me->GetInstanceScript();
- }
+ npc_risen_witch_doctorAI(Creature* creature) : npc_escape_event_trash(creature) { }
- InstanceScript* _instance;
- uint32 _emergeTimer;
- bool _doEmerge;
- uint64 _leaderGUID;
- uint32 _boltTimer;
- uint32 _boltVolleyTimer;
- uint32 _curseTimer;
+ void Reset() override
+ {
+ npc_escape_event_trash::Reset();
+ _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT, 6000);
+ _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT_VOLLEY, 15000);
+ _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_CURSE, 7000);
+ }
- void Reset() OVERRIDE
- {
- _emergeTimer = 5000;
- _boltTimer = 6000;
- _boltVolleyTimer = 15000;
- _curseTimer = 7000;
- _doEmerge = false;
- if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS)
- _instance->SetData(DATA_SUMMONS, 1);
- }
+ void IsSummonedBy(Unit* summoner) override
+ {
+ me->CastSpell(me, SPELL_RISEN_WITCH_DOCTOR_SPAWN, true);
+ me->SetReactState(REACT_PASSIVE);
+ me->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE);
+ me->m_Events.AddEvent(new hor::StartMovementEvent(me), me->m_Events.CalculateTime(5000));
- void IsSummonedBy(Unit*) OVERRIDE
- {
- DoCast(me, SPELL_EMERGE_VISUAL);
- DoZoneInCombat(me, 100.00f);
- }
+ npc_escape_event_trash::IsSummonedBy(summoner);
+ }
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- _instance->SetData(DATA_SUMMONS, 0);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ npc_escape_event_trash::UpdateAI(diff);
- void AttackStart(Unit* who) OVERRIDE
- {
- if (!who)
- return;
+ if (!UpdateVictim())
+ return;
+
+ _events.Update(diff);
- if (_doEmerge == false)
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- ScriptedAI::AttackStart(who);
+ switch (_events.ExecuteEvent())
+ {
+ case EVENT_RISEN_WITCH_DOCTOR_CURSE:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true))
+ DoCast(target, SPELL_CURSE_OF_DOOM);
+ _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_CURSE, urand(10000, 15000));
+ break;
+ case EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT:
+ if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 0, 20.0f, true))
+ DoCast(target, SPELL_SHADOW_BOLT);
+ _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT, urand(2000, 3000));
+ break;
+ case EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT_VOLLEY:
+ if (SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true))
+ DoCastAOE(SPELL_SHADOW_BOLT_VOLLEY);
+ _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT_VOLLEY, urand(15000, 22000));
+ break;
+ default:
+ break;
+ }
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfReflectionAI<npc_risen_witch_doctorAI>(creature);
}
+};
+
+class npc_lumbering_abomination : public CreatureScript
+{
+ public:
+ npc_lumbering_abomination() : CreatureScript("npc_lumbering_abomination") { }
- void UpdateAI(uint32 diff) OVERRIDE
+ struct npc_lumbering_abominationAI : public npc_escape_event_trash
{
- if (!_instance)
- return;
+ npc_lumbering_abominationAI(Creature* creature) : npc_escape_event_trash(creature) { }
- if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS)
+ void Reset() override
{
- if (_doEmerge != true)
- {
- if (_emergeTimer < diff)
- {
- _doEmerge = true;
- _leaderGUID = _instance->GetData64(DATA_ESCAPE_LEADER);
+ npc_escape_event_trash::Reset();
+ _events.ScheduleEvent(EVENT_LUMBERING_ABOMINATION_VOMIT_SPRAY, 15000);
+ _events.ScheduleEvent(EVENT_LUMBERING_ABOMINATION_CLEAVE, 6000);
+ }
- if (Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER)))
- {
- DoResetThreat();
- me->GetMotionMaster()->MoveIdle();
- me->GetMotionMaster()->MoveChase(leader);
- }
- }
- else
- _emergeTimer -= diff;
- }
+ void UpdateAI(uint32 diff) override
+ {
+ npc_escape_event_trash::UpdateAI(diff);
- if (_curseTimer < diff)
- {
- if (Unit *target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_COURSE_OF_DOOM);
- _curseTimer = urand(10000, 15000);
- }
- else
- _curseTimer -= diff;
+ if (!UpdateVictim())
+ return;
- if (_boltTimer < diff)
- {
- if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO))
- DoCast(target, SPELL_SHADOW_BOLT);
- _boltTimer = urand(2000, 3000);
- }
- else
- _boltTimer -= diff;
+ _events.Update(diff);
- if (_boltVolleyTimer < diff)
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ switch (_events.ExecuteEvent())
{
- if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO))
- DoCast(target, SPELL_SHADOW_BOLT_VOLLEY);
- _boltVolleyTimer = urand(15000, 22000);
+ case EVENT_LUMBERING_ABOMINATION_VOMIT_SPRAY:
+ DoCastVictim(SPELL_VOMIT_SPRAY);
+ _events.ScheduleEvent(EVENT_LUMBERING_ABOMINATION_VOMIT_SPRAY, urand(15000, 20000));
+ break;
+ case EVENT_LUMBERING_ABOMINATION_CLEAVE:
+ DoCastVictim(SPELL_CLEAVE);
+ _events.ScheduleEvent(EVENT_LUMBERING_ABOMINATION_CLEAVE, urand(7000, 9000));
+ break;
+ default:
+ break;
}
- else
- _boltVolleyTimer -= diff;
+
+ DoMeleeAttackIfReady();
}
- else if (_instance->GetData(DATA_ESCAPE_EVENT) == FAIL || _instance->GetData(DATA_ESCAPE_EVENT) == NOT_STARTED)
- me->DespawnOrUnsummon();
- DoMeleeAttackIfReady();
- }
- };
+ };
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetInstanceAI<npc_risen_witch_doctorAI>(creature);
- }
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfReflectionAI<npc_lumbering_abominationAI>(creature);
+ }
};
-
-class npc_lumbering_abomination : public CreatureScript
+// 72900 - Start Halls of Reflection Quest AE
+class spell_hor_start_halls_of_reflection_quest_ae : public SpellScriptLoader
{
-public:
- npc_lumbering_abomination() : CreatureScript("npc_lumbering_abomination") { }
+ public:
+ spell_hor_start_halls_of_reflection_quest_ae() : SpellScriptLoader("spell_hor_start_halls_of_reflection_quest_ae") { }
- struct npc_lumbering_abominationAI : public ScriptedAI
- {
- npc_lumbering_abominationAI(Creature* creature) : ScriptedAI(creature)
+ class spell_hor_start_halls_of_reflection_quest_ae_SpellScript : public SpellScript
{
- _instance = me->GetInstanceScript();
- }
+ PrepareSpellScript(spell_hor_start_halls_of_reflection_quest_ae_SpellScript);
+
+ void StartQuests(SpellEffIndex /*effIndex*/)
+ {
+ if (Player* target = GetHitPlayer())
+ {
+ // CanTakeQuest and CanAddQuest checks done in spell effect execution
+ if (target->GetTeam() == ALLIANCE)
+ target->CastSpell(target, SPELL_START_HALLS_OF_REFLECTION_QUEST_A, true);
+ else
+ target->CastSpell(target, SPELL_START_HALLS_OF_REFLECTION_QUEST_H, true);
+ }
+ }
- InstanceScript* _instance;
- uint64 _leaderGUID;
- bool _doWalk;
- uint32 _strikeTimer;
- uint32 _vomitTimer;
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_hor_start_halls_of_reflection_quest_ae_SpellScript::StartQuests, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
- void Reset() OVERRIDE
+ SpellScript* GetSpellScript() const override
{
- _doWalk = false;
- _vomitTimer = 15000;
- _strikeTimer = 6000;
- if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS)
- _instance->SetData(DATA_SUMMONS, 1);
+ return new spell_hor_start_halls_of_reflection_quest_ae_SpellScript();
}
+};
+
+// 70190 - Evasion
+class spell_hor_evasion : public SpellScriptLoader
+{
+ public:
+ spell_hor_evasion() : SpellScriptLoader("spell_hor_evasion") { }
+
+ class spell_hor_evasion_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_hor_evasion_SpellScript);
+
+ bool Load() override
+ {
+ return GetCaster()->GetTypeId() == TYPEID_UNIT;
+ }
+
+ void SetDest(SpellDestination& dest)
+ {
+ WorldObject* target = GetExplTargetWorldObject();
+ Position pos(*target);
+ Position home = GetCaster()->ToCreature()->GetHomePosition();
+
+ // prevent evasion outside the room
+ if (pos.IsInDist2d(&home, 15.0f))
+ return;
+
+ float angle = pos.GetAngle(&home);
+ float dist = GetSpellInfo()->Effects[EFFECT_0].CalcRadius(GetCaster());
+ target->MovePosition(pos, dist, angle);
+
+ dest.Relocate(pos);
+ }
+
+ void Register() override
+ {
+ OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_hor_evasion_SpellScript::SetDest, EFFECT_0, TARGET_DEST_TARGET_RADIUS);
+ }
+ };
- void IsSummonedBy(Unit*) OVERRIDE
+ SpellScript* GetSpellScript() const override
{
- DoCast(me, SPELL_EMERGE_VISUAL);
- DoZoneInCombat(me, 100.00f);
+ return new spell_hor_evasion_SpellScript();
}
+};
+
+// 70017 - Gunship Cannon Fire
+class spell_hor_gunship_cannon_fire : public SpellScriptLoader
+{
+ public:
+ spell_hor_gunship_cannon_fire() : SpellScriptLoader("spell_hor_gunship_cannon_fire") { }
- void UpdateAI(uint32 diff) OVERRIDE
+ class spell_hor_gunship_cannon_fire_AuraScript : public AuraScript
{
- if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS)
+ PrepareAuraScript(spell_hor_gunship_cannon_fire_AuraScript);
+
+ void HandlePeriodic(AuraEffect const* /*aurEff*/)
{
- if (_doWalk != true)
+ if (!urand(0, 2))
{
- _doWalk = true;
- _leaderGUID = _instance->GetData64(DATA_ESCAPE_LEADER);
- if (Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER)))
- {
- DoResetThreat();
- me->GetMotionMaster()->MoveIdle();
- me->GetMotionMaster()->MoveChase(leader);
- }
- }
- if (_strikeTimer < diff)
- {
- if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO))
- DoCast(target, SPELL_ABON_STRIKE);
- _strikeTimer = urand(7000, 9000);
+ if (GetTarget()->GetEntry() == NPC_GUNSHIP_CANNON_HORDE)
+ GetTarget()->CastSpell((Unit*)NULL, SPELL_GUNSHIP_CANNON_FIRE_MISSILE_HORDE, true);
+ else
+ GetTarget()->CastSpell((Unit*)NULL, SPELL_GUNSHIP_CANNON_FIRE_MISSILE_ALLIANCE, true);
}
- else
- _strikeTimer -= diff;
+ }
- if (_vomitTimer < diff)
- {
- if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO))
- DoCast(target, SPELL_VOMIT_SPRAY);
- _vomitTimer = urand(15000, 20000);
- }
- else
- _vomitTimer -= diff;
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_hor_gunship_cannon_fire_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
- else if (_instance->GetData(DATA_ESCAPE_EVENT) == FAIL || _instance->GetData(DATA_ESCAPE_EVENT) == NOT_STARTED)
- me->DespawnOrUnsummon();
- DoMeleeAttackIfReady();
- }
+ };
- void JustDied(Unit* /*killer*/) OVERRIDE
+ AuraScript* GetAuraScript() const override
{
- _instance->SetData(DATA_SUMMONS, 0);
+ return new spell_hor_gunship_cannon_fire_AuraScript();
}
-
- };
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetInstanceAI<npc_lumbering_abominationAI>(creature);
- }
};
void AddSC_halls_of_reflection()
{
new at_hor_intro_start();
new at_hor_waves_restarter();
- new at_shadow_throne();
- new npc_jaina_or_sylvanas_hor();
+ new at_hor_impenetrable_door();
+ new at_hor_shadow_throne();
+ new npc_jaina_or_sylvanas_intro_hor();
new npc_jaina_or_sylvanas_escape_hor();
+ new npc_the_lich_king_escape_hor();
new npc_ghostly_priest();
new npc_phantom_mage();
new npc_phantom_hallucination();
new npc_shadowy_mercenary();
new npc_spectral_footman();
new npc_tortured_rifleman();
+ new npc_frostsworn_general();
+ new npc_spiritual_reflection();
new npc_raging_ghoul();
new npc_risen_witch_doctor();
new npc_lumbering_abomination();
- new npc_frostworn_general();
- new npc_spiritual_reflection();
+ new spell_hor_start_halls_of_reflection_quest_ae();
+ new spell_hor_evasion();
+ new spell_hor_gunship_cannon_fire();
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h
index c4776c3cfcd..a05035f7b44 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h
@@ -15,170 +15,231 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef DEF_HALLS_OF_REFLECTION_H
-#define DEF_HALLS_OF_REFLECTION_H
+#ifndef HALLS_OF_REFLECTION_H_
+#define HALLS_OF_REFLECTION_H_
#define HoRScriptName "instance_halls_of_reflection"
-#define MAX_ENCOUNTER 3
+
+uint32 const EncounterCount = 3;
/* Halls of Reflection encounters:
-0- Falric
-1- Marwyn
-2- The Lich King
+ 0 - Falric
+ 1 - Marwyn
+ 2 - The Lich King
*/
-enum Data
+enum DataTypes
{
- DATA_FALRIC_EVENT = 0,
- DATA_MARWYN_EVENT = 1,
- DATA_LICHKING_EVENT = 2,
+ DATA_FALRIC = 0,
+ DATA_MARWYN = 1,
+ DATA_THE_LICH_KING_ESCAPE = 2,
+
DATA_INTRO_EVENT = 3,
- DATA_FROSWORN_EVENT = 4,
+ DATA_FROSTSWORN_GENERAL = 4,
- DATA_WAVE_COUNT = 5,
- DATA_TEAM_IN_INSTANCE = 6,
- DATA_FROSTMOURNE = 7,
- DATA_FROSTWORN_DOOR = 8,
- DATA_ESCAPE_EVENT = 9,
+ DATA_KORELN_LORALEN = 5,
+ DATA_WAVE_COUNT = 6,
+ DATA_TEAM_IN_INSTANCE = 7,
+ DATA_FROSTMOURNE = 8,
+ DATA_IMPENETRABLE_DOOR = 9,
DATA_ESCAPE_LEADER = 10,
- DATA_SUMMONS = 11,
- DATA_ICEWALL = 12,
- DATA_CAVE_IN = 13
+ DATA_ICEWALL = 11,
+ DATA_ICEWALL_TARGET = 12,
+ DATA_GUNSHIP = 13
};
-enum Creatures
+enum CreatureIds
{
- NPC_JAINA_PART1 = 37221,
- NPC_SYLVANAS_PART1 = 37223,
- NPC_UTHER = 37225,
- NPC_LICH_KING_PART1 = 37226,
- NPC_LORALEN = 37779,
- NPC_KORELN = 37582,
-
- NPC_FALRIC = 38112,
- NPC_MARWYN = 38113,
- NPC_WAVE_MERCENARY = 38177,
- NPC_WAVE_FOOTMAN = 38173,
- NPC_WAVE_RIFLEMAN = 38176,
- NPC_WAVE_PRIEST = 38175,
- NPC_WAVE_MAGE = 38172,
-
- NPC_FROSTWORN_GENERAL = 36723,
- NPC_REFLECTION = 37068, // 37107 for tank only?
-
- NPC_JAINA_PART2 = 36955,
- NPC_SYLVANAS_PART2 = 37554,
- NPC_LICH_KING_PART2 = 36954,
- NPC_BARTLETT = 37182, // High Captain Justin Bartlett
- NPC_KORM = 37833, // Sky-Reaver Korm Blackscar
- NPC_ICE_WALL = 37014, // Ice Wall Target
-
- NPC_RAGING_GNOUL = 36940,
- NPC_RISEN_WITCH_DOCTOR = 36941,
- NPC_ABON = 37069
+ NPC_JAINA_INTRO = 37221,
+ NPC_SYLVANAS_INTRO = 37223,
+ NPC_UTHER = 37225,
+ NPC_THE_LICH_KING_INTRO = 37226,
+ NPC_KORELN = 37582,
+ NPC_LORALEN = 37779,
+ NPC_FROSTMOUNRE_ALTAR_BUNNY = 37704,
+
+ NPC_FALRIC = 38112,
+ NPC_MARWYN = 38113,
+ NPC_WAVE_MERCENARY = 38177,
+ NPC_WAVE_FOOTMAN = 38173,
+ NPC_WAVE_RIFLEMAN = 38176,
+ NPC_WAVE_PRIEST = 38175,
+ NPC_WAVE_MAGE = 38172,
+
+ NPC_FROSTSWORN_GENERAL = 36723,
+ NPC_REFLECTION = 37068, // 37107 for tank only?
+
+ NPC_JAINA_ESCAPE = 36955,
+ NPC_SYLVANAS_ESCAPE = 37554,
+ NPC_THE_LICH_KING_ESCAPE = 36954,
+ NPC_ICE_WALL_TARGET = 37014,
+
+ NPC_RAGING_GHOUL = 36940,
+ NPC_RISEN_WITCH_DOCTOR = 36941,
+ NPC_LUMBERING_ABOMINATION = 37069,
+
+ NPC_GUNSHIP_CANNON_HORDE = 37593,
+ NPC_JUSTIN_BARTLETT = 30344,
+ NPC_KORM_BLACKSCAR = 30824,
+
+ NPC_WORLD_TRIGGER = 22515
};
-enum GameObjects
+enum GameObjectIds
{
- GO_FROSTMOURNE = 202302,
- GO_ENTRANCE_DOOR = 201976,
- GO_FROSTWORN_DOOR = 197341,
- GO_ARTHAS_DOOR = 197342,
- //GO_ESCAPE_DOOR = 197343, // always open ?
-
- GO_ICE_WALL = 201385,
- GO_CAVE = 201596,
-
- GO_STAIRS_SKYBREAKER = 201709,
- GO_SKYBREAKER = 201598,
- GO_STAIRS_ORGRIM_HAMMER = 202211,
- GO_ORGRIM_HAMMER = 201599,
- GO_PORTAL = 202079,
-
- GO_CAPTAIN_CHEST_HORDE_NORMAL = 202212, //3145
- GO_CAPTAIN_CHEST_ALLIANCE_NORMAL = 201710, //30357
- GO_CAPTAIN_CHEST_HORDE_HEROIC = 202337, //3246
- GO_CAPTAIN_CHEST_ALLIANCE_HEROIC = 202336, //3333
+ GO_FROSTMOURNE = 202302,
+ GO_ENTRANCE_DOOR = 201976,
+ GO_IMPENETRABLE_DOOR = 197341,
+ GO_SHADOW_THRONE_DOOR = 197342,
+ GO_ESCAPE_DOOR = 197343, // always open ?
+
+ GO_ICE_WALL = 201385,
+ GO_CAVE_IN = 201596,
+
+ GO_THE_SKYBREAKER = 201598,
+ GO_ORGRIMS_HAMMER = 201599,
+ GO_THE_SKYBREAKER_STAIRS = 201709,
+ GO_ORGRIMS_HAMMER_STAIRS = 202211,
+ GO_PORTAL_TO_DALARAN = 195682,
+
+ GO_THE_CAPTAIN_CHEST_ALLIANCE_NORMAL = 201710,
+ GO_THE_CAPTAIN_CHEST_HORDE_NORMAL = 202212,
+ GO_THE_CAPTAIN_CHEST_ALLIANCE_HEROIC = 202336,
+ GO_THE_CAPTAIN_CHEST_HORDE_HEROIC = 202337
};
-enum HorWorldStates
+enum Achievements
{
- WORLD_STATE_HOR_WAVES_ENABLED = 4884,
- WORLD_STATE_HOR_WAVE_COUNT = 4882,
+ ACHIEV_NOT_RETREATING_EVENT = 22615,
+ SPELL_ACHIEV_CHECK = 72830
};
// Common actions from Instance Script to Boss Script
enum Actions
{
- ACTION_ENTER_COMBAT,
- ACTION_START_ESCAPING,
- ACTION_WALL_BROKEN
+ ACTION_ENTER_COMBAT = -668001,
+ ACTION_START_PREFIGHT = -668002,
+ ACTION_WALL_BROKEN = -668003,
+ ACTION_GUNSHIP_ARRIVAL = -668004,
+ ACTION_GUNSHIP_ARRIVAL_2 = -668005
};
-enum TrashGeneralSpells
+enum InstanceEvents
{
- // General spells
- SPELL_WELL_OF_SOULS = 72630, // cast when spawn(become visible)
- SPELL_SPIRIT_ACTIVATE = 72130, // cast when unit activates
+ EVENT_SPAWN_WAVES = 1,
+ EVENT_NEXT_WAVE = 2,
+ EVENT_DO_WIPE = 3,
+ EVENT_ADD_WAVE = 4,
+ EVENT_SPAWN_ESCAPE_EVENT = 5
};
-enum InstanceEvents
+enum InstanceEventIds
{
- EVENT_SPAWN_WAVES = 1,
- EVENT_NEXT_WAVE = 2,
- EVENT_DO_WIPE = 3,
- EVENT_ADD_WAVE = 4,
+ EVENT_GUNSHIP_ARRIVAL = 22709,
+ EVENT_GUNSHIP_ARRIVAL_2 = 22714,
+ EVENT_ICE_WALL_SUMMONED = 22795
};
-// Base class for FALRIC and MARWYN
-// handled the summonList and the notification events to/from the InstanceScript
-struct boss_horAI : ScriptedAI
+enum InstanceSpells
{
- boss_horAI(Creature* creature) : ScriptedAI(creature), summons(creature)
- {
- instance = me->GetInstanceScript();
- }
+ // Trash
+ SPELL_WELL_OF_SOULS = 72630, // cast when spawn (become visible)
+ SPELL_SPIRIT_ACTIVATE = 72130, // cast when unit activates
+
+ // Start Quests
+ SPELL_START_HALLS_OF_REFLECTION_QUEST_A = 71351,
+ SPELL_START_HALLS_OF_REFLECTION_QUEST_H = 71542,
+ SPELL_START_HALLS_OF_REFLECTION_QUEST_AE = 72900,
+
+ // Quest Credits
+ SPELL_CREDIT_FINDING_SYLVANAS = 71536,
+ SPELL_CREDIT_FINDING_JAINA = 71538,
+ SPELL_CREDIT_ESCAPING_ARTHAS = 71352,
+
+ // Gunship
+ SPELL_GUNSHIP_CANNON_FIRE = 70017,
+ SPELL_GUNSHIP_CANNON_FIRE_MISSILE_ALLIANCE = 70021,
+ SPELL_GUNSHIP_CANNON_FIRE_MISSILE_HORDE = 70246
+};
- InstanceScript* instance;
- EventMap events;
- SummonList summons;
+enum InstanceWorldStates
+{
+ WORLD_STATE_HOR_WAVES_ENABLED = 4884,
+ WORLD_STATE_HOR_WAVE_COUNT = 4882
+};
+
+enum InstanceYells
+{
+ SAY_CAPTAIN_FIRE = 0,
+ SAY_CAPTAIN_FINAL = 1
+};
+
+// Base class for FALRIC and MARWYN
+struct boss_horAI : BossAI
+{
+ boss_horAI(Creature* creature, uint32 bossId) : BossAI(creature, bossId) { }
- void Reset()
+ void Reset() override
{
- events.Reset();
+ _Reset();
me->SetVisible(false);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetReactState(REACT_PASSIVE);
if (instance->GetData(DATA_WAVE_COUNT) != NOT_STARTED)
- instance->ProcessEvent(0, EVENT_DO_WIPE);
+ instance->ProcessEvent(NULL, EVENT_DO_WIPE);
}
- void DoAction(int32 actionID)
+ void DoAction(int32 actionId) override
{
- switch (actionID)
+ switch (actionId)
{
- case ACTION_ENTER_COMBAT: // called by InstanceScript when boss shall enter in combat.
+ case ACTION_ENTER_COMBAT: // called by InstanceScript when boss shall enter in combat.
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetReactState(REACT_AGGRESSIVE);
-
- if (Unit* unit = me->SelectNearestTarget())
- AttackStart(unit);
-
- DoZoneInCombat();
+ DoZoneInCombat(me, 150.0f);
+ break;
+ default:
break;
}
}
- void JustSummoned(Creature* summoned)
+ void JustSummoned(Creature* summon) override
{
- summons.Summon(summoned);
+ summons.Summon(summon);
}
};
+class GameObjectDeleteDelayEvent : public BasicEvent
+{
+ public:
+ GameObjectDeleteDelayEvent(Unit* owner, uint64 gameObjectGUID) : _owner(owner), _gameObjectGUID(gameObjectGUID) { }
+
+ void DeleteGameObject()
+ {
+ if (GameObject* go = ObjectAccessor::GetGameObject(*_owner, _gameObjectGUID))
+ go->Delete();
+ }
+
+ bool Execute(uint64 /*execTime*/, uint32 /*diff*/) override
+ {
+ DeleteGameObject();
+ return true;
+ }
+
+ void Abort(uint64 /*execTime*/) override
+ {
+ DeleteGameObject();
+ }
+
+ private:
+ Unit* _owner;
+ uint64 _gameObjectGUID;
+};
+
template<class AI>
AI* GetHallsOfReflectionAI(Creature* creature)
{
return GetInstanceAI<AI>(creature, HoRScriptName);
}
-#endif
+#endif // HALLS_OF_REFLECTION_H_
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
index f78be036900..6f33e80b92b 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
@@ -19,590 +19,792 @@
#include "ScriptedCreature.h"
#include "InstanceScript.h"
#include "Player.h"
+#include "Transport.h"
#include "WorldPacket.h"
#include "halls_of_reflection.h"
-Position const JainaSpawnPos = {5236.659f, 1929.894f, 707.7781f, 0.8726646f}; // Jaina Spawn Position
-Position const SylvanasSpawnPos = {5236.667f, 1929.906f, 707.7781f, 0.8377581f}; // Sylvanas Spawn Position
-Position const GeneralSpawnPos = {5415.538f, 2117.842f, 707.7781f, 3.944444f}; // Frostsworn General
-Position const JainaSpawnPos2 = {5549.011f, 2257.041f, 733.0120f, 1.153993f}; // Jaina Spawn Position 2
-Position const SylvanasSpawnPos2 = {5549.011f, 2257.041f, 733.0120f, 1.153993f}; // Sylvanas Spawn Position 2
+Position const JainaSpawnPos = { 5236.659f, 1929.894f, 707.7781f, 0.8726646f }; // Jaina Spawn Position
+Position const SylvanasSpawnPos = { 5236.667f, 1929.906f, 707.7781f, 0.8377581f }; // Sylvanas Spawn Position (sniffed)
+Position const JainaSpawnPos2 = { 5549.011f, 2257.041f, 733.0120f, 1.153993f }; // Jaina Spawn Position 2
+Position const SylvanasSpawnPos2 = { 5549.29f, 2257.353f, 733.0943f, 0.8901179f }; // Sylvanas Spawn Position 2 (sniffed)
+Position const KorelnOrLoralenSpawnPos = { 5232.68f, 1931.46f, 707.7781f, 0.8377581f };
+
+Position const TheLichKingEscapePosition[] =
+{
+ { 5557.017f, 2266.103f, 733.0943f, 3.892084f }, // 0 - Spawn (Horde)
+ { 5552.733f, 2262.718f, 733.0110f, 4.009696f } // 1 - Spawn (Alliance)
+};
Position const SpawnPos[] =
{
- {5309.577f, 2042.668f, 707.7781f, 4.694936f},
- {5295.885f, 2040.342f, 707.7781f, 5.078908f},
- {5340.836f, 1992.458f, 707.7781f, 2.757620f},
- {5325.072f, 1977.597f, 707.7781f, 2.076942f},
- {5277.365f, 1993.229f, 707.7781f, 0.401426f},
- {5275.479f, 2001.135f, 707.7781f, 0.174533f},
- {5302.448f, 2042.222f, 707.7781f, 4.904375f},
- {5343.293f, 1999.384f, 707.7781f, 2.914700f},
- {5295.635f, 1973.757f, 707.7781f, 1.186824f},
- {5311.031f, 1972.229f, 707.7781f, 1.640610f},
- {5275.076f, 2008.724f, 707.7781f, 6.213372f},
- {5316.701f, 2041.550f, 707.7781f, 4.502949f},
- {5344.150f, 2007.168f, 707.7781f, 3.159046f},
- {5319.158f, 1973.998f, 707.7781f, 1.919862f},
- {5302.247f, 1972.415f, 707.7781f, 1.378810f},
- {5277.739f, 2016.882f, 707.7781f, 5.969026f},
- {5322.964f, 2040.288f, 707.7781f, 4.345870f},
- {5343.467f, 2015.951f, 707.7781f, 3.490659f},
- {5313.820f, 1978.146f, 707.7781f, 1.745329f},
- {5279.649f, 2004.656f, 707.7781f, 0.069814f},
- {5306.057f, 2037.002f, 707.7781f, 4.817109f},
- {5337.865f, 2003.403f, 707.7781f, 2.984513f},
- {5299.434f, 1979.009f, 707.7781f, 1.239184f},
- {5312.752f, 2037.122f, 707.7781f, 4.590216f},
- {5335.724f, 1996.859f, 707.7781f, 2.740167f},
- {5280.632f, 2012.156f, 707.7781f, 6.056293f},
- {5320.369f, 1980.125f, 707.7781f, 2.007129f},
- {5306.572f, 1977.474f, 707.7781f, 1.500983f},
- {5336.599f, 2017.278f, 707.7781f, 3.473205f},
- {5282.897f, 2019.597f, 707.7781f, 5.881760f},
- {5318.704f, 2036.108f, 707.7781f, 4.223697f},
- {5280.513f, 1997.842f, 707.7781f, 0.296706f},
- {5337.833f, 2010.057f, 707.7781f, 3.228859f},
- {5299.250f, 2035.998f, 707.7781f, 5.026548f},
+ { 5309.577f, 2042.668f, 707.7781f, 4.694936f },
+ { 5295.885f, 2040.342f, 707.7781f, 5.078908f },
+ { 5340.836f, 1992.458f, 707.7781f, 2.757620f },
+ { 5325.072f, 1977.597f, 707.7781f, 2.076942f },
+ { 5277.365f, 1993.229f, 707.7781f, 0.401426f },
+ { 5275.479f, 2001.135f, 707.7781f, 0.174533f },
+ { 5302.448f, 2042.222f, 707.7781f, 4.904375f },
+ { 5343.293f, 1999.384f, 707.7781f, 2.914700f },
+ { 5295.635f, 1973.757f, 707.7781f, 1.186824f },
+ { 5311.031f, 1972.229f, 707.7781f, 1.640610f },
+ { 5275.076f, 2008.724f, 707.7781f, 6.213372f },
+ { 5316.701f, 2041.550f, 707.7781f, 4.502949f },
+ { 5344.150f, 2007.168f, 707.7781f, 3.159046f },
+ { 5319.158f, 1973.998f, 707.7781f, 1.919862f },
+ { 5302.247f, 1972.415f, 707.7781f, 1.378810f },
+ { 5277.739f, 2016.882f, 707.7781f, 5.969026f },
+ { 5322.964f, 2040.288f, 707.7781f, 4.345870f },
+ { 5343.467f, 2015.951f, 707.7781f, 3.490659f },
+ { 5313.820f, 1978.146f, 707.7781f, 1.745329f },
+ { 5279.649f, 2004.656f, 707.7781f, 0.069814f },
+ { 5306.057f, 2037.002f, 707.7781f, 4.817109f },
+ { 5337.865f, 2003.403f, 707.7781f, 2.984513f },
+ { 5299.434f, 1979.009f, 707.7781f, 1.239184f },
+ { 5312.752f, 2037.122f, 707.7781f, 4.590216f },
+ { 5335.724f, 1996.859f, 707.7781f, 2.740167f },
+ { 5280.632f, 2012.156f, 707.7781f, 6.056293f },
+ { 5320.369f, 1980.125f, 707.7781f, 2.007129f },
+ { 5306.572f, 1977.474f, 707.7781f, 1.500983f },
+ { 5336.599f, 2017.278f, 707.7781f, 3.473205f },
+ { 5282.897f, 2019.597f, 707.7781f, 5.881760f },
+ { 5318.704f, 2036.108f, 707.7781f, 4.223697f },
+ { 5280.513f, 1997.842f, 707.7781f, 0.296706f },
+ { 5337.833f, 2010.057f, 707.7781f, 3.228859f },
+ { 5299.250f, 2035.998f, 707.7781f, 5.026548f }
};
class instance_halls_of_reflection : public InstanceMapScript
{
-public:
- instance_halls_of_reflection() : InstanceMapScript("instance_halls_of_reflection", 668) { }
-
- struct instance_halls_of_reflection_InstanceMapScript : public InstanceScript
- {
- instance_halls_of_reflection_InstanceMapScript(Map* map) : InstanceScript(map) { }
+ public:
+ instance_halls_of_reflection() : InstanceMapScript(HoRScriptName, 668) { }
- void Initialize() OVERRIDE
+ struct instance_halls_of_reflection_InstanceMapScript : public InstanceScript
{
- SetBossNumber(MAX_ENCOUNTER);
- events.Reset();
-
- _falricGUID = 0;
- _marwynGUID = 0;
- _jainaOrSylvanasPart1GUID = 0;
- _jainaOrSylvanasPart2GUID = 0;
- _lichkingPart1GUID = 0;
- _frostwornGeneralGUID = 0;
-
- _frostmourneGUID = 0;
- _entranceDoorGUID = 0;
- _frostwornDoorGUID = 0;
- _arthasDoorGUID = 0;
- _escapeDoorGUID = 0;
- _caveGUID = 0;
-
- _teamInInstance = 0;
- _waveCount = 0;
- _introEvent = NOT_STARTED;
- _frostwornGeneral = NOT_STARTED;
- _escapeevent = NOT_STARTED;
- _mobsaticewall = 0;
- }
+ instance_halls_of_reflection_InstanceMapScript(Map* map) : InstanceScript(map)
+ {
+ SetBossNumber(EncounterCount);
+
+ JainaOrSylvanasIntroGUID = 0;
+ KorelnOrLoralenGUID = 0;
+ TheLichkingIntroGUID = 0;
+ FalricGUID = 0;
+ MarwynGUID = 0;
+ FrostmourneAltarBunnyGUID = 0;
+ FrostswornGeneralGUID = 0;
+ JainaOrSylvanasEscapeGUID = 0;
+ TheLichKingEscapeGUID = 0;
+
+ FrostmourneGUID = 0;
+ EntranceDoorGUID = 0;
+ ImpenetrableDoorGUID = 0;
+ ShadowThroneDoorGUID = 0;
+ CaveInGUID = 0;
+ GunshipGUID = 0;
+ CaptainsChestGUID = 0;
+ CaptainGUID = 0;
+ IcewallGUID = 0;
+ IcewallTargetGUID = 0;
+
+ _teamInInstance = 0;
+ _waveCount = 0;
+ _introState = NOT_STARTED;
+ _frostswornGeneralState = NOT_STARTED;
+
+ events.Reset();
+ }
- void OnPlayerEnter(Player* player) OVERRIDE
- {
- if (!_teamInInstance)
- _teamInInstance = player->GetTeam();
- }
+ void OnPlayerEnter(Player* player) override
+ {
+ if (!_teamInInstance)
+ _teamInInstance = player->GetTeam();
- void OnCreatureCreate(Creature* creature) OVERRIDE
- {
- if (!_teamInInstance)
+ if (GetBossState(DATA_MARWYN) == DONE)
+ {
+ SpawnGunship();
+
+ if (!JainaOrSylvanasEscapeGUID && GetBossState(DATA_THE_LICH_KING_ESCAPE) != DONE)
+ SpawnEscapeEvent();
+ }
+ }
+
+ void OnCreatureCreate(Creature* creature) override
{
- Map::PlayerList const& players = instance->GetPlayers();
- if (!players.isEmpty())
- if (Player* player = players.begin()->GetSource())
- _teamInInstance = player->GetTeam();
+ switch (creature->GetEntry())
+ {
+ case NPC_JAINA_INTRO:
+ case NPC_SYLVANAS_INTRO:
+ JainaOrSylvanasIntroGUID = creature->GetGUID();
+ break;
+ case NPC_KORELN:
+ case NPC_LORALEN:
+ if (GetBossState(DATA_MARWYN) != DONE)
+ creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
+ KorelnOrLoralenGUID = creature->GetGUID();
+ break;
+ case NPC_THE_LICH_KING_INTRO:
+ TheLichkingIntroGUID = creature->GetGUID();
+ break;
+ case NPC_FALRIC:
+ FalricGUID = creature->GetGUID();
+ break;
+ case NPC_MARWYN:
+ MarwynGUID = creature->GetGUID();
+ break;
+ case NPC_FROSTMOUNRE_ALTAR_BUNNY:
+ FrostmourneAltarBunnyGUID = creature->GetGUID();
+ break;
+ case NPC_FROSTSWORN_GENERAL:
+ FrostswornGeneralGUID = creature->GetGUID();
+ if (GetBossState(DATA_MARWYN) == DONE)
+ creature->SetPhaseMask(1, true);
+ break;
+ case NPC_JAINA_ESCAPE:
+ case NPC_SYLVANAS_ESCAPE:
+ JainaOrSylvanasEscapeGUID = creature->GetGUID();
+ break;
+ case NPC_THE_LICH_KING_ESCAPE:
+ TheLichKingEscapeGUID = creature->GetGUID();
+ break;
+ case NPC_JUSTIN_BARTLETT:
+ case NPC_KORM_BLACKSCAR:
+ CaptainGUID = creature->GetGUID();
+ break;
+ case NPC_WORLD_TRIGGER:
+ if (!creature->GetTransport())
+ break;
+ // no break
+ case NPC_GUNSHIP_CANNON_HORDE:
+ GunshipCannonGUIDs.insert(creature->GetGUID());
+ break;
+ case NPC_ICE_WALL_TARGET:
+ IcewallTargetGUID = creature->GetGUID();
+ break;
+ default:
+ break;
+ }
}
- switch (creature->GetEntry())
+ void OnCreatureRemove(Creature* creature) override
{
- case NPC_JAINA_PART1:
- case NPC_SYLVANAS_PART1:
- _jainaOrSylvanasPart1GUID = creature->GetGUID();
- break;
- case NPC_FALRIC:
- _falricGUID = creature->GetGUID();
- break;
- case NPC_MARWYN:
- _marwynGUID = creature->GetGUID();
- break;
- case NPC_FROSTWORN_GENERAL:
- _frostwornGeneralGUID = creature->GetGUID();
- if (GetBossState(DATA_MARWYN_EVENT) == DONE)
- if (Creature* general = instance->GetCreature(_frostwornGeneralGUID))
- general->SetPhaseMask(1, true);
- break;
- case NPC_JAINA_PART2:
- case NPC_SYLVANAS_PART2:
- _jainaOrSylvanasPart2GUID = creature->GetGUID();
- break;
+ switch (creature->GetEntry())
+ {
+ case NPC_WAVE_MERCENARY:
+ case NPC_WAVE_FOOTMAN:
+ case NPC_WAVE_RIFLEMAN:
+ case NPC_WAVE_PRIEST:
+ case NPC_WAVE_MAGE:
+ {
+ uint32 internalWaveId = creature->AI()->GetData(0);
+ waveGuidList[internalWaveId].erase(creature->GetGUID());
+ break;
+ }
+ case NPC_ICE_WALL_TARGET:
+ IcewallTargetGUID = 0;
+ break;
+ case NPC_WORLD_TRIGGER:
+ case NPC_GUNSHIP_CANNON_HORDE:
+ GunshipCannonGUIDs.erase(creature->GetGUID());
+ break;
+ default:
+ break;
+ }
}
- }
- void OnCreatureRemove(Creature* creature) OVERRIDE
- {
- switch (creature->GetEntry())
+ uint32 GetGameObjectEntry(uint32 /*guidLow*/, uint32 entry) override
{
- case NPC_WAVE_MERCENARY:
- case NPC_WAVE_FOOTMAN:
- case NPC_WAVE_RIFLEMAN:
- case NPC_WAVE_PRIEST:
- case NPC_WAVE_MAGE:
+ if (!_teamInInstance)
+ {
+ Map::PlayerList const& players = instance->GetPlayers();
+ if (!players.isEmpty())
+ if (Player* player = players.begin()->GetSource())
+ _teamInInstance = player->GetTeam();
+ }
+
+ switch (entry)
{
- uint32 internalWaveId = creature->AI()->GetData(0);
- waveGuidList[internalWaveId].erase(creature->GetGUID());
- break;
+ case GO_THE_CAPTAIN_CHEST_ALLIANCE_NORMAL:
+ case GO_THE_CAPTAIN_CHEST_ALLIANCE_HEROIC:
+ case GO_THE_SKYBREAKER_STAIRS:
+ if (_teamInInstance == HORDE)
+ return 0;
+ break;
+ case GO_THE_CAPTAIN_CHEST_HORDE_NORMAL:
+ case GO_THE_CAPTAIN_CHEST_HORDE_HEROIC:
+ case GO_ORGRIMS_HAMMER_STAIRS:
+ if (_teamInInstance == ALLIANCE)
+ return 0;
+ break;
+ default:
+ break;
}
+
+ return entry;
}
- }
- void OnGameObjectCreate(GameObject* go) OVERRIDE
- {
- switch (go->GetEntry())
+ void OnGameObjectCreate(GameObject* go) override
{
- case GO_FROSTMOURNE:
- _frostmourneGUID = go->GetGUID();
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
- HandleGameObject(0, false, go);
- if (GetData(DATA_INTRO_EVENT) == DONE)
- go->SetPhaseMask(2, true);
- break;
- case GO_ENTRANCE_DOOR:
- _entranceDoorGUID = go->GetGUID();
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
- HandleGameObject(0, true, go);
- break;
- case GO_FROSTWORN_DOOR:
- _frostwornDoorGUID = go->GetGUID();
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
- if (GetBossState(DATA_MARWYN_EVENT) == DONE)
- HandleGameObject(0, true, go);
- else
- HandleGameObject(0, false, go);
- break;
- case GO_ARTHAS_DOOR:
- _arthasDoorGUID = go->GetGUID();
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
- if (GetData(DATA_FROSWORN_EVENT) == DONE)
- HandleGameObject(0, true, go);
- else
+ switch (go->GetEntry())
+ {
+ case GO_FROSTMOURNE:
+ FrostmourneGUID = go->GetGUID();
+ if (GetData(DATA_INTRO_EVENT) == DONE)
+ go->SetPhaseMask(2, true);
+ break;
+ case GO_ENTRANCE_DOOR:
+ EntranceDoorGUID = go->GetGUID();
+ break;
+ case GO_IMPENETRABLE_DOOR:
+ ImpenetrableDoorGUID = go->GetGUID();
+ HandleGameObject(0, GetBossState(DATA_MARWYN) == DONE, go);
+ break;
+ case GO_SHADOW_THRONE_DOOR:
+ ShadowThroneDoorGUID = go->GetGUID();
+ HandleGameObject(0, GetData(DATA_FROSTSWORN_GENERAL) == DONE, go);
+ break;
+ case GO_CAVE_IN:
+ CaveInGUID = go->GetGUID();
+ break;
+ case GO_THE_SKYBREAKER:
+ case GO_ORGRIMS_HAMMER:
+ GunshipGUID = go->GetGUID();
+ break;
+ case GO_THE_SKYBREAKER_STAIRS:
+ case GO_ORGRIMS_HAMMER_STAIRS:
+ if (GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE)
+ go->SetRespawnTime(DAY);
+ GunshipStairGUIDs.insert(go->GetGUID());
+ break;
+ case GO_THE_CAPTAIN_CHEST_ALLIANCE_NORMAL:
+ case GO_THE_CAPTAIN_CHEST_HORDE_NORMAL:
+ case GO_THE_CAPTAIN_CHEST_ALLIANCE_HEROIC:
+ case GO_THE_CAPTAIN_CHEST_HORDE_HEROIC:
+ CaptainsChestGUID = go->GetGUID();
+ break;
+ case GO_ICE_WALL:
HandleGameObject(0, false, go);
- break;
- case GO_CAVE:
- _caveGUID = go->GetGUID();
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
- break;
+ IcewallGUID = go->GetGUID();
+ break;
+ default:
+ break;
+ }
}
- }
- void FillInitialWorldStates(WorldPacket& data) OVERRIDE
- {
- data << uint32(WORLD_STATE_HOR_WAVES_ENABLED) << uint32(0);
- data << uint32(WORLD_STATE_HOR_WAVE_COUNT) << uint32(0);
- }
-
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
- {
- if (!InstanceScript::SetBossState(type, state))
- return false;
-
- switch (type)
+ void OnGameObjectRemove(GameObject* go) override
{
- case DATA_FALRIC_EVENT:
- if (state == DONE)
- {
- ++_waveCount;
- events.ScheduleEvent(EVENT_NEXT_WAVE, 60000);
- }
- break;
- case DATA_MARWYN_EVENT:
- if (state == DONE)
- {
- HandleGameObject(_entranceDoorGUID, true);
- HandleGameObject(_frostwornDoorGUID, true);
- DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 0);
- if (Creature* general = instance->GetCreature(_frostwornGeneralGUID))
- general->SetPhaseMask(1, true);
- }
- break;
- case DATA_LICHKING_EVENT:
- default:
- break;
+ switch (go->GetEntry())
+ {
+ case GO_THE_SKYBREAKER_STAIRS:
+ case GO_ORGRIMS_HAMMER_STAIRS:
+ GunshipStairGUIDs.erase(go->GetGUID());
+ break;
+ default:
+ break;
+ }
}
- return true;
- }
+ void FillInitialWorldStates(WorldPacket& data) override
+ {
+ data << uint32(WORLD_STATE_HOR_WAVES_ENABLED) << uint32(_introState == DONE && GetBossState(DATA_MARWYN) != DONE);
+ data << uint32(WORLD_STATE_HOR_WAVE_COUNT) << uint32(_waveCount);
+ }
- void SetData(uint32 type, uint32 data) OVERRIDE
- {
- switch (type)
+ bool SetBossState(uint32 type, EncounterState state) override
{
- case DATA_INTRO_EVENT:
- if (data == IN_PROGRESS)
- {
- if (!_introEvent)
+ if (!InstanceScript::SetBossState(type, state))
+ return false;
+
+ switch (type)
+ {
+ case DATA_FALRIC:
+ if (state == DONE)
{
- if (_teamInInstance == ALLIANCE)
- instance->SummonCreature(NPC_JAINA_PART1, JainaSpawnPos);
- else
- instance->SummonCreature(NPC_SYLVANAS_PART1, SylvanasSpawnPos);
+ ++_waveCount;
+ events.ScheduleEvent(EVENT_NEXT_WAVE, 60000);
}
- }
- _introEvent = data;
- break;
- case DATA_WAVE_COUNT:
- if (_waveCount && data == NOT_STARTED)
- ProcessEvent(NULL, EVENT_DO_WIPE);
- break;
- case DATA_FROSWORN_EVENT:
- if (data == DONE)
- {
- HandleGameObject(_arthasDoorGUID, true);
- if (_teamInInstance == ALLIANCE)
- instance->SummonCreature(NPC_JAINA_PART2, JainaSpawnPos2);
- else
- instance->SummonCreature(NPC_SYLVANAS_PART2, SylvanasSpawnPos2);
- }
- _frostwornGeneral = data;
- break;
- case DATA_ESCAPE_EVENT:
- if (data == IN_PROGRESS)
- {
- if (!_escapeevent)
- if (Creature* jaina_or_sylvanas = instance->GetCreature(_jainaOrSylvanasPart2GUID))
- jaina_or_sylvanas->AI()->DoAction(ACTION_START_ESCAPING);
- }
- else if (data == NOT_STARTED)
- {
- if (Creature* jaina_or_sylvanas = instance->GetCreature(_jainaOrSylvanasPart2GUID))
- jaina_or_sylvanas->DespawnOrUnsummon(1);
- if (_teamInInstance == ALLIANCE)
- instance->SummonCreature(NPC_JAINA_PART2, JainaSpawnPos2);
- else
- instance->SummonCreature(NPC_SYLVANAS_PART2, SylvanasSpawnPos2);
- SetData(DATA_ESCAPE_EVENT,IN_PROGRESS);
- }
- _escapeevent = data;
- break;
- case DATA_SUMMONS:
- if (data == 0)
- {
- _mobsaticewall--;
- if (_mobsaticewall == 0)
+ break;
+ case DATA_MARWYN:
+ if (state == DONE)
{
- if (Creature* jaina_or_sylvanas = instance->GetCreature(_jainaOrSylvanasPart2GUID))
- jaina_or_sylvanas->AI()->DoAction(ACTION_WALL_BROKEN);
+ if (Creature* bunny = instance->GetCreature(FrostmourneAltarBunnyGUID))
+ bunny->CastSpell(bunny, SPELL_START_HALLS_OF_REFLECTION_QUEST_AE, true);
+
+ if (Creature* korelnOrLoralen = instance->GetCreature(KorelnOrLoralenGUID))
+ korelnOrLoralen->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
+
+ HandleGameObject(EntranceDoorGUID, true);
+ HandleGameObject(ImpenetrableDoorGUID, true);
+ DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 0);
+ if (Creature* general = instance->GetCreature(FrostswornGeneralGUID))
+ general->SetPhaseMask(1, true);
+
+ SpawnGunship();
+ SpawnEscapeEvent();
}
- }
- else if (data == 1)
- _mobsaticewall++;
- break;
+ break;
+ case DATA_THE_LICH_KING_ESCAPE:
+ switch (state)
+ {
+ case NOT_STARTED:
+ break;
+ case IN_PROGRESS:
+ if (Creature* jainaOrSylvanas = instance->GetCreature(JainaOrSylvanasEscapeGUID))
+ jainaOrSylvanas->AI()->DoAction(ACTION_START_PREFIGHT);
+ break;
+ case DONE:
+ if (GameObject* chest = instance->GetGameObject(CaptainsChestGUID))
+ chest->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN);
+
+ DoUseDoorOrButton(CaveInGUID, 15);
+
+ if (Creature* lichking = instance->GetCreature(TheLichKingEscapeGUID))
+ {
+ lichking->CastSpell((Unit*)NULL, SPELL_ACHIEV_CHECK, true);
+ lichking->DespawnOrUnsummon(1);
+ }
+ break;
+ case FAIL:
+ DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_NOT_RETREATING_EVENT);
+
+ if (Creature* jainaOrSylvanas = instance->GetCreature(JainaOrSylvanasEscapeGUID))
+ jainaOrSylvanas->DespawnOrUnsummon(10000);
+
+ if (Creature* icewallTarget = instance->GetCreature(IcewallTargetGUID))
+ icewallTarget->DespawnOrUnsummon();
+
+ if (GameObject* icewall = instance->GetGameObject(IcewallGUID))
+ icewall->Delete();
+
+ events.ScheduleEvent(EVENT_SPAWN_ESCAPE_EVENT, 30000);
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+
+ return true;
}
- SaveToDB();
- }
+ void SpawnGunship()
+ {
+ // don't spawn gunship twice
+ if (GunshipGUID)
+ return;
+ if (!_teamInInstance)
+ {
+ Map::PlayerList const& players = instance->GetPlayers();
+ if (!players.isEmpty())
+ if (Player* player = players.begin()->GetSource())
+ _teamInInstance = player->GetTeam();
+ }
- // wave scheduling,checked when wave npcs die
- void OnUnitDeath(Unit* unit) OVERRIDE
- {
- Creature* creature = unit->ToCreature();
- if (!creature)
- return;
+ if (Transport* gunship = sTransportMgr->CreateTransport(_teamInInstance == HORDE ? GO_ORGRIMS_HAMMER : GO_THE_SKYBREAKER, 0, instance))
+ gunship->EnableMovement(GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE);
+ }
- switch (creature->GetEntry())
+ void SpawnEscapeEvent()
{
- case NPC_WAVE_MERCENARY:
- case NPC_WAVE_FOOTMAN:
- case NPC_WAVE_RIFLEMAN:
- case NPC_WAVE_PRIEST:
- case NPC_WAVE_MAGE:
+ if (!_teamInInstance)
{
- uint32 deadNpcs = 0;
- uint32 waveId = creature->AI()->GetData(0);
- for (std::set<uint64>::const_iterator itr = waveGuidList[waveId].begin(); itr != waveGuidList[waveId].end(); ++itr)
- {
- Creature* npc = instance->GetCreature(*itr);
- if (!npc || !npc->IsAlive())
- ++deadNpcs;
- }
- // because the current npc returns IsAlive when OnUnitDeath happens
- // we check if the number of dead npcs is equal to the list-1
- if (deadNpcs == waveGuidList[waveId].size() - 1)
+ Map::PlayerList const& players = instance->GetPlayers();
+ if (!players.isEmpty())
+ if (Player* player = players.begin()->GetSource())
+ _teamInInstance = player->GetTeam();
+ }
+
+ if (_teamInInstance == ALLIANCE)
+ {
+ instance->SummonCreature(NPC_JAINA_ESCAPE, JainaSpawnPos2);
+ instance->SummonCreature(NPC_THE_LICH_KING_ESCAPE, TheLichKingEscapePosition[1]);
+ }
+ else
+ {
+ instance->SummonCreature(NPC_SYLVANAS_ESCAPE, SylvanasSpawnPos2);
+ instance->SummonCreature(NPC_THE_LICH_KING_ESCAPE, TheLichKingEscapePosition[0]);
+ }
+ }
+
+ void SetData(uint32 type, uint32 data) override
+ {
+ switch (type)
+ {
+ case DATA_INTRO_EVENT:
+ if (data == IN_PROGRESS)
+ {
+ if (_introState == NOT_STARTED)
+ {
+ if (_teamInInstance == ALLIANCE)
+ {
+ instance->SummonCreature(NPC_JAINA_INTRO, JainaSpawnPos);
+ instance->SummonCreature(NPC_KORELN, KorelnOrLoralenSpawnPos);
+ }
+ else
+ {
+ instance->SummonCreature(NPC_SYLVANAS_INTRO, SylvanasSpawnPos);
+ instance->SummonCreature(NPC_LORALEN, KorelnOrLoralenSpawnPos);
+ }
+ }
+ }
+ _introState = data;
+ break;
+ case DATA_WAVE_COUNT:
+ if (_waveCount && data == NOT_STARTED)
+ ProcessEvent(NULL, EVENT_DO_WIPE);
+ break;
+ case DATA_FROSTSWORN_GENERAL:
+ if (data == DONE)
+ HandleGameObject(ShadowThroneDoorGUID, true);
+ _frostswornGeneralState = data;
+ break;
+ default:
+ break;
+ }
+
+ SaveToDB();
+ }
+
+ // wave scheduling, checked when wave npcs die
+ void OnUnitDeath(Unit* unit) override
+ {
+ Creature* creature = unit->ToCreature();
+ if (!creature)
+ return;
+
+ switch (creature->GetEntry())
+ {
+ case NPC_WAVE_MERCENARY:
+ case NPC_WAVE_FOOTMAN:
+ case NPC_WAVE_RIFLEMAN:
+ case NPC_WAVE_PRIEST:
+ case NPC_WAVE_MAGE:
{
+ uint32 waveId = creature->AI()->GetData(0);
+ for (uint64 guid : waveGuidList[waveId])
+ {
+ if (Creature* npc = instance->GetCreature(guid))
+ if (npc->IsAlive())
+ return;
+ }
+
++_waveCount;
events.ScheduleEvent(EVENT_NEXT_WAVE, 3000);
+ break;
}
- break;
}
}
- }
- void Update(uint32 diff) OVERRIDE
- {
- if (!instance->HavePlayers())
- return;
+ void Update(uint32 diff) override
+ {
+ if (!instance->HavePlayers())
+ return;
- events.Update(diff);
+ events.Update(diff);
- switch (events.ExecuteEvent())
- {
- case EVENT_NEXT_WAVE:
- ProcessEvent(NULL, EVENT_ADD_WAVE);
- break;
+ switch (events.ExecuteEvent())
+ {
+ case EVENT_NEXT_WAVE:
+ ProcessEvent(NULL, EVENT_ADD_WAVE);
+ break;
+ case EVENT_SPAWN_ESCAPE_EVENT:
+ SpawnEscapeEvent();
+ break;
+ }
}
- }
- void ProcessEvent(WorldObject* /*go*/, uint32 eventId) OVERRIDE
- {
- switch (eventId)
+ void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) override
{
- // spawning all wave npcs at once
- case EVENT_SPAWN_WAVES:
- _waveCount = 1;
- DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1);
- DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount);
- {
- std::list<uint32> possibilityList, tempList;
- uint32 posIndex = 0;
+ switch (eventId)
+ {
+ // spawning all wave npcs at once
+ case EVENT_SPAWN_WAVES:
+ _waveCount = 1;
+ DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1);
+ DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount);
+ {
+ std::list<uint32> possibilityList, tempList;
+ uint32 posIndex = 0;
- possibilityList.push_back(NPC_WAVE_MERCENARY);
- possibilityList.push_back(NPC_WAVE_FOOTMAN);
- possibilityList.push_back(NPC_WAVE_RIFLEMAN);
- possibilityList.push_back(NPC_WAVE_PRIEST);
- possibilityList.push_back(NPC_WAVE_MAGE);
+ possibilityList.push_back(NPC_WAVE_MERCENARY);
+ possibilityList.push_back(NPC_WAVE_FOOTMAN);
+ possibilityList.push_back(NPC_WAVE_RIFLEMAN);
+ possibilityList.push_back(NPC_WAVE_PRIEST);
+ possibilityList.push_back(NPC_WAVE_MAGE);
- // iterate each wave
- for (uint8 i = 0; i < 8; ++i)
- {
- tempList = possibilityList;
+ // iterate each wave
+ for (uint8 i = 0; i < 8; ++i)
+ {
+ tempList = possibilityList;
- uint64 bossGuid = i <= 3 ? _falricGUID : _marwynGUID;
+ uint64 bossGuid = i <= 3 ? FalricGUID : MarwynGUID;
- if (!i)
- Trinity::Containers::RandomResizeList(tempList, 3);
- else if (i < 6 && i != 3)
- Trinity::Containers::RandomResizeList(tempList, 4);
+ if (!i)
+ Trinity::Containers::RandomResizeList(tempList, 3);
+ else if (i < 6 && i != 3)
+ Trinity::Containers::RandomResizeList(tempList, 4);
- for (std::list<uint32>::const_iterator itr = tempList.begin(); itr != tempList.end(); ++itr)
- {
- if (Creature* boss = instance->GetCreature(bossGuid))
+ for (uint32 entry : tempList)
{
- if (Creature* temp = boss->SummonCreature(*itr, SpawnPos[posIndex], TEMPSUMMON_DEAD_DESPAWN))
+ if (Creature* boss = instance->GetCreature(bossGuid))
{
- temp->AI()->SetData(0, i);
- waveGuidList[i].insert(temp->GetGUID());
+ if (Creature* temp = boss->SummonCreature(entry, SpawnPos[posIndex], TEMPSUMMON_DEAD_DESPAWN))
+ {
+ temp->AI()->SetData(0, i);
+ waveGuidList[i].insert(temp->GetGUID());
+ }
}
- }
- ++posIndex;
+ ++posIndex;
+ }
}
}
- }
- events.ScheduleEvent(EVENT_NEXT_WAVE, 5000);
- break;
- case EVENT_ADD_WAVE:
- DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1);
- DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount);
- HandleGameObject(_entranceDoorGUID, false);
-
- if (_waveCount % 5)
- {
- uint32 internalWaveId = _waveCount - ((_waveCount < 5) ? 1 : 2);
- for (std::set<uint64>::const_iterator itr = waveGuidList[internalWaveId].begin(); itr != waveGuidList[internalWaveId].end(); ++itr)
+ events.ScheduleEvent(EVENT_NEXT_WAVE, 5000);
+ break;
+ case EVENT_ADD_WAVE:
+ DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1);
+ DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount);
+ HandleGameObject(EntranceDoorGUID, false);
+
+ if (_waveCount % 5)
{
- if (Creature* temp = instance->GetCreature(*itr))
+ uint32 internalWaveId = _waveCount - ((_waveCount < 5) ? 1 : 2);
+ for (uint64 guid : waveGuidList[internalWaveId])
{
- temp->CastSpell(temp, SPELL_SPIRIT_ACTIVATE, true);
- temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC|UNIT_FLAG_NOT_SELECTABLE);
- temp->AI()->DoZoneInCombat(temp, 100.00f);
+ if (Creature* temp = instance->GetCreature(guid))
+ {
+ temp->CastSpell(temp, SPELL_SPIRIT_ACTIVATE, false);
+ temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE);
+ temp->AI()->DoZoneInCombat(temp, 100.00f);
+ }
}
}
- }
- else
- {
- uint32 bossIndex = (_waveCount / 5) - 1;
- if (GetBossState(DATA_FALRIC_EVENT + bossIndex) != DONE)
+ else
+ {
+ uint32 bossIndex = (_waveCount / 5) - 1;
+ if (GetBossState(DATA_FALRIC + bossIndex) != DONE)
+ {
+ if (Creature* boss = instance->GetCreature(bossIndex ? MarwynGUID : FalricGUID))
+ boss->AI()->DoAction(ACTION_ENTER_COMBAT);
+ }
+ else if (_waveCount != 10)
+ {
+ ++_waveCount;
+ events.ScheduleEvent(EVENT_NEXT_WAVE, 5000);
+ }
+ }
+ break;
+ case EVENT_DO_WIPE:
+ _waveCount = 0;
+ events.Reset();
+ DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1);
+ DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount);
+ HandleGameObject(EntranceDoorGUID, true);
+
+ if (Creature* falric = instance->GetCreature(FalricGUID))
+ falric->SetVisible(false);
+ if (Creature* marwyn = instance->GetCreature(MarwynGUID))
+ marwyn->SetVisible(false);
+ // despawn wave npcs
+ for (uint8 i = 0; i < 8; ++i)
{
- if (Creature* boss = instance->GetCreature(bossIndex ? _marwynGUID : _falricGUID))
- boss->AI()->DoAction(ACTION_ENTER_COMBAT);
+ for (uint64 guid : waveGuidList[i])
+ if (Creature* creature = instance->GetCreature(guid))
+ creature->DespawnOrUnsummon(1);
+ waveGuidList[i].clear();
}
- else if (_waveCount != 10)
+ break;
+ // Gunship Outro
+ case EVENT_GUNSHIP_ARRIVAL:
+ if (GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE)
+ break;
+
+ if (Transport* gunship = instance->GetTransport(GunshipGUID))
+ gunship->EnableMovement(false);
+
+ if (Creature* jainaOrSylvanas = instance->GetCreature(JainaOrSylvanasEscapeGUID))
+ jainaOrSylvanas->AI()->DoAction(ACTION_GUNSHIP_ARRIVAL);
+
+ if (Creature* captain = instance->GetCreature(CaptainGUID))
+ captain->AI()->Talk(SAY_CAPTAIN_FIRE);
+
+ for (uint64 guid : GunshipCannonGUIDs)
{
- ++_waveCount;
- events.ScheduleEvent(EVENT_NEXT_WAVE, 5000);
+ uint32 entry = GUID_ENPART(guid);
+ if ((entry == NPC_WORLD_TRIGGER && _teamInInstance == ALLIANCE) || (entry == NPC_GUNSHIP_CANNON_HORDE && _teamInInstance == HORDE))
+ if (Creature* cannon = instance->GetCreature(guid))
+ cannon->CastSpell(cannon, SPELL_GUNSHIP_CANNON_FIRE, true);
}
- }
- break;
- case EVENT_DO_WIPE:
- _waveCount = 0;
- events.Reset();
- DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1);
- DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount);
- HandleGameObject(_entranceDoorGUID, true);
-
- if (Creature* falric = instance->GetCreature(_falricGUID))
- falric->SetVisible(false);
- if (Creature* marwyn = instance->GetCreature(_marwynGUID))
- marwyn->SetVisible(false);
- //despawn wave npcs
- for (uint8 i = 0; i < 8; ++i)
- {
- for (std::set<uint64>::const_iterator itr = waveGuidList[i].begin(); itr != waveGuidList[i].end(); ++itr)
- if (Creature* creature = instance->GetCreature(*itr))
- creature->DespawnOrUnsummon(1);
- waveGuidList[i].clear();
- }
- break;
+ break;
+ case EVENT_GUNSHIP_ARRIVAL_2:
+ if (Transport* gunship = instance->GetTransport(GunshipGUID))
+ gunship->EnableMovement(false);
+
+ for (uint64 guid : GunshipStairGUIDs)
+ if (GameObject* stairs = instance->GetGameObject(guid))
+ stairs->SetRespawnTime(DAY);
+
+ if (Creature* jainaOrSylvanas = instance->GetCreature(JainaOrSylvanasEscapeGUID))
+ jainaOrSylvanas->AI()->DoAction(ACTION_GUNSHIP_ARRIVAL_2);
+
+ if (Creature* captain = instance->GetCreature(CaptainGUID))
+ captain->AI()->Talk(SAY_CAPTAIN_FINAL);
+
+ break;
+ default:
+ break;
+ }
}
- }
- uint32 GetData(uint32 type) const OVERRIDE
- {
- switch (type)
+ uint32 GetData(uint32 type) const override
{
- case DATA_WAVE_COUNT:
- return _waveCount;
- case DATA_TEAM_IN_INSTANCE:
- return _teamInInstance;
- case DATA_INTRO_EVENT:
- return _introEvent;
- case DATA_FROSWORN_EVENT:
- return _frostwornGeneral;
- case DATA_ESCAPE_EVENT:
- return _escapeevent;
- case DATA_SUMMONS:
- return _mobsaticewall;
- default:
- break;
- }
+ switch (type)
+ {
+ case DATA_WAVE_COUNT:
+ return _waveCount;
+ case DATA_TEAM_IN_INSTANCE:
+ return _teamInInstance;
+ case DATA_INTRO_EVENT:
+ return _introState;
+ case DATA_FROSTSWORN_GENERAL:
+ return _frostswornGeneralState;
+ default:
+ break;
+ }
- return 0;
- }
+ return 0;
+ }
- uint64 GetData64(uint32 type) const OVERRIDE
- {
- switch (type)
+ uint64 GetData64(uint32 type) const override
{
- case DATA_FALRIC_EVENT:
- return _falricGUID;
- case DATA_MARWYN_EVENT:
- return _marwynGUID;
- case DATA_FROSWORN_EVENT:
- return _frostwornGeneralGUID;
- case DATA_FROSTWORN_DOOR:
- return _frostwornDoorGUID;
- case DATA_FROSTMOURNE:
- return _frostmourneGUID;
- case DATA_ESCAPE_LEADER:
- return _jainaOrSylvanasPart2GUID;
- case DATA_CAVE_IN:
- return _caveGUID;
- default:
- break;
- }
+ switch (type)
+ {
+ case DATA_FALRIC:
+ return FalricGUID;
+ case DATA_MARWYN:
+ return MarwynGUID;
+ case DATA_FROSTSWORN_GENERAL:
+ return FrostswornGeneralGUID;
+ case DATA_IMPENETRABLE_DOOR:
+ return ImpenetrableDoorGUID;
+ case DATA_FROSTMOURNE:
+ return FrostmourneGUID;
+ case DATA_ESCAPE_LEADER:
+ return JainaOrSylvanasEscapeGUID;
+ case DATA_KORELN_LORALEN:
+ return KorelnOrLoralenGUID;
+ case DATA_THE_LICH_KING_ESCAPE:
+ return TheLichKingEscapeGUID;
+ case DATA_GUNSHIP:
+ return GunshipGUID;
+ case DATA_ICEWALL:
+ return IcewallGUID;
+ case DATA_ICEWALL_TARGET:
+ return IcewallTargetGUID;
+ default:
+ break;
+ }
- return 0;
- }
+ return 0;
+ }
- std::string GetSaveData() OVERRIDE
- {
- OUT_SAVE_INST_DATA;
+ std::string GetSaveData() override
+ {
+ OUT_SAVE_INST_DATA;
- std::ostringstream saveStream;
- saveStream << "H R " << GetBossSaveData() << _introEvent << ' ' << _frostwornGeneral << ' ' << _escapeevent;
+ std::ostringstream saveStream;
+ saveStream << "H R " << GetBossSaveData() << _introState << ' ' << _frostswornGeneralState;
- OUT_SAVE_INST_DATA_COMPLETE;
- return saveStream.str();
- }
+ OUT_SAVE_INST_DATA_COMPLETE;
+ return saveStream.str();
+ }
- void Load(char const* in) OVERRIDE
- {
- if (!in)
+ void Load(char const* in) override
{
- OUT_LOAD_INST_DATA_FAIL;
- return;
- }
+ if (!in)
+ {
+ OUT_LOAD_INST_DATA_FAIL;
+ return;
+ }
- OUT_LOAD_INST_DATA(in);
+ OUT_LOAD_INST_DATA(in);
- char dataHead1, dataHead2;
+ char dataHead1, dataHead2;
- std::istringstream loadStream(in);
- loadStream >> dataHead1 >> dataHead2;
+ std::istringstream loadStream(in);
+ loadStream >> dataHead1 >> dataHead2;
- if (dataHead1 == 'H' && dataHead2 == 'R')
- {
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
+ if (dataHead1 == 'H' && dataHead2 == 'R')
{
- uint32 tmpState;
- loadStream >> tmpState;
- if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
- tmpState = NOT_STARTED;
+ for (uint8 i = 0; i < EncounterCount; ++i)
+ {
+ uint32 tmpState;
+ loadStream >> tmpState;
+ if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
+ tmpState = NOT_STARTED;
- SetBossState(i, EncounterState(tmpState));
- }
+ SetBossState(i, EncounterState(tmpState));
+ }
- uint32 temp = 0;
- loadStream >> temp;
- if (temp == DONE)
- SetData(DATA_INTRO_EVENT, DONE);
- else
- SetData(DATA_INTRO_EVENT, NOT_STARTED);
+ uint32 temp = 0;
+ loadStream >> temp;
+ if (temp == DONE)
+ SetData(DATA_INTRO_EVENT, DONE);
+ else
+ SetData(DATA_INTRO_EVENT, NOT_STARTED);
- loadStream >> temp;
- if (temp == DONE)
- SetData(DATA_FROSWORN_EVENT, DONE);
+ loadStream >> temp;
+ if (temp == DONE)
+ SetData(DATA_FROSTSWORN_GENERAL, DONE);
+ else
+ SetData(DATA_FROSTSWORN_GENERAL, NOT_STARTED);
+ }
else
- SetData(DATA_FROSWORN_EVENT, NOT_STARTED);
+ OUT_LOAD_INST_DATA_FAIL;
- loadStream >> temp;
- if (temp == DONE)
- SetData(DATA_ESCAPE_EVENT, DONE);
- else
- SetData(DATA_ESCAPE_EVENT, NOT_STARTED);
+ OUT_LOAD_INST_DATA_COMPLETE;
}
- else
- OUT_LOAD_INST_DATA_FAIL;
- OUT_LOAD_INST_DATA_COMPLETE;
+ private:
+ uint64 JainaOrSylvanasIntroGUID; // unused
+ uint64 KorelnOrLoralenGUID;
+ uint64 TheLichkingIntroGUID; // unused
+ uint64 FalricGUID;
+ uint64 MarwynGUID;
+ uint64 FrostmourneAltarBunnyGUID;
+ uint64 FrostswornGeneralGUID;
+ uint64 JainaOrSylvanasEscapeGUID;
+ uint64 TheLichKingEscapeGUID;
+
+ uint64 FrostmourneGUID;
+ uint64 EntranceDoorGUID;
+ uint64 ImpenetrableDoorGUID;
+ uint64 ShadowThroneDoorGUID;
+ uint64 CaveInGUID;
+
+ uint32 _teamInInstance;
+ uint32 _waveCount;
+ uint32 _introState;
+ uint32 _frostswornGeneralState;
+
+ EventMap events;
+ std::set<uint64> waveGuidList[8];
+
+ uint64 GunshipGUID;
+ uint64 CaptainsChestGUID;
+ uint64 CaptainGUID;
+ uint64 IcewallGUID;
+ uint64 IcewallTargetGUID;
+
+ std::set<uint64> GunshipCannonGUIDs;
+ std::set<uint64> GunshipStairGUIDs;
+ };
+
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
+ {
+ return new instance_halls_of_reflection_InstanceMapScript(map);
}
-
- private:
- uint64 _falricGUID;
- uint64 _marwynGUID;
- uint64 _jainaOrSylvanasPart1GUID;
- uint64 _jainaOrSylvanasPart2GUID;
- uint64 _lichkingPart1GUID;
- uint64 _frostwornGeneralGUID;
-
- uint64 _frostmourneGUID;
- uint64 _entranceDoorGUID;
- uint64 _frostwornDoorGUID;
- uint64 _arthasDoorGUID;
- uint64 _escapeDoorGUID;
- uint64 _caveGUID;
-
- uint32 _teamInInstance;
- uint32 _waveCount;
- uint32 _introEvent;
- uint32 _frostwornGeneral;
- uint32 _escapeevent;
- uint32 _mobsaticewall;
-
- EventMap events;
-
- std::set<uint64> waveGuidList[8];
- };
-
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
- {
- return new instance_halls_of_reflection_InstanceMapScript(map);
- }
};
void AddSC_instance_halls_of_reflection()
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp
index fe2b818b325..783f9e245c8 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp
@@ -84,7 +84,7 @@ class boss_garfrost : public CreatureScript
{
boss_garfrostAI(Creature* creature) : BossAI(creature, DATA_GARFROST) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
events.SetPhase(PHASE_ONE);
@@ -92,7 +92,7 @@ class boss_garfrost : public CreatureScript
_permafrostStack = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -101,23 +101,23 @@ class boss_garfrost : public CreatureScript
events.ScheduleEvent(EVENT_THROW_SARONITE, 7000);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
me->RemoveAllGameObjects();
- if (Creature* tyrannus = me->GetCreature(*me, instance->GetData64(DATA_TYRANNUS)))
+ if (Creature* tyrannus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_TYRANNUS)))
tyrannus->AI()->Talk(SAY_TYRANNUS_DEATH);
}
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
if (events.IsInPhase(PHASE_ONE) && !HealthAbovePct(66))
{
@@ -140,7 +140,7 @@ class boss_garfrost : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != EFFECT_MOTION_TYPE || id != POINT_FORGE)
return;
@@ -159,7 +159,7 @@ class boss_garfrost : public CreatureScript
events.ScheduleEvent(EVENT_RESUME_ATTACK, 5000);
}
- void SpellHitTarget(Unit* target, const SpellInfo* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, const SpellInfo* spell) override
{
if (spell->Id == SPELL_PERMAFROST_HELPER)
{
@@ -168,12 +168,12 @@ class boss_garfrost : public CreatureScript
}
}
- uint32 GetData(uint32 /*type*/) const OVERRIDE
+ uint32 GetData(uint32 /*type*/) const override
{
return _permafrostStack;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -233,7 +233,7 @@ class boss_garfrost : public CreatureScript
uint32 _permafrostStack;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetPitOfSaronAI<boss_garfrostAI>(creature);
}
@@ -248,7 +248,7 @@ class spell_garfrost_permafrost : public SpellScriptLoader
{
PrepareSpellScript(spell_garfrost_permafrost_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
prevented = false;
return true;
@@ -294,7 +294,7 @@ class spell_garfrost_permafrost : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
BeforeHit += SpellHitFn(spell_garfrost_permafrost_SpellScript::PreventHitByLoS);
AfterHit += SpellHitFn(spell_garfrost_permafrost_SpellScript::RestoreImmunity);
@@ -303,7 +303,7 @@ class spell_garfrost_permafrost : public SpellScriptLoader
bool prevented;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_garfrost_permafrost_SpellScript();
}
@@ -314,7 +314,7 @@ class achievement_doesnt_go_to_eleven : public AchievementCriteriaScript
public:
achievement_doesnt_go_to_eleven() : AchievementCriteriaScript("achievement_doesnt_go_to_eleven") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
if (target)
if (Creature* garfrost = target->ToCreature())
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
index 7720d4a4ca0..3f8e1cc6ee0 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
@@ -142,7 +142,7 @@ class boss_ick : public CreatureScript
ASSERT(_vehicle);
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
instance->SetBossState(DATA_ICK, NOT_STARTED);
@@ -153,7 +153,7 @@ class boss_ick : public CreatureScript
return ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KRICK));
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
@@ -166,13 +166,13 @@ class boss_ick : public CreatureScript
events.ScheduleEvent(EVENT_SPECIAL, urand(30000, 35000));
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
me->GetMotionMaster()->Clear();
ScriptedAI::EnterEvadeMode();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* krick = GetKrick())
{
@@ -195,7 +195,7 @@ class boss_ick : public CreatureScript
me->AddThreat(target, _tempThreat);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!me->IsInCombat())
return;
@@ -271,7 +271,7 @@ class boss_ick : public CreatureScript
float _tempThreat;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetPitOfSaronAI<boss_ickAI>(creature);
}
@@ -288,7 +288,7 @@ class boss_krick : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_phase = PHASE_COMBAT;
@@ -304,7 +304,7 @@ class boss_krick : public CreatureScript
return ObjectAccessor::GetCreature(*me, _instanceScript->GetData64(DATA_ICK));
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -312,7 +312,7 @@ class boss_krick : public CreatureScript
Talk(SAY_KRICK_SLAY);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
_summons.Summon(summon);
if (summon->GetEntry() == NPC_EXPLODING_ORB)
@@ -322,7 +322,7 @@ class boss_krick : public CreatureScript
}
}
- void DoAction(int32 actionId) OVERRIDE
+ void DoAction(int32 actionId) override
{
if (actionId == ACTION_OUTRO)
{
@@ -338,7 +338,7 @@ class boss_krick : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE || id != POINT_KRICK_INTRO)
return;
@@ -349,7 +349,7 @@ class boss_krick : public CreatureScript
_events.ScheduleEvent(EVENT_OUTRO_1, 1000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_phase != PHASE_OUTRO)
return;
@@ -362,7 +362,7 @@ class boss_krick : public CreatureScript
{
case EVENT_OUTRO_1:
{
- if (Creature* temp = me->GetCreature(*me, _instanceScript->GetData64(DATA_JAINA_SYLVANAS_1)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, _instanceScript->GetData64(DATA_JAINA_SYLVANAS_1)))
temp->DespawnOrUnsummon();
Creature* jainaOrSylvanas = NULL;
@@ -410,7 +410,7 @@ class boss_krick : public CreatureScript
_events.ScheduleEvent(EVENT_OUTRO_6, 1000);
break;
case EVENT_OUTRO_6:
- if (Creature* tyrannus = me->GetCreature(*me, _instanceScript->GetData64(DATA_TYRANNUS_EVENT)))
+ if (Creature* tyrannus = ObjectAccessor::GetCreature(*me, _instanceScript->GetData64(DATA_TYRANNUS_EVENT)))
{
tyrannus->SetSpeed(MOVE_FLIGHT, 3.5f, true);
tyrannus->GetMotionMaster()->MovePoint(1, outroPos[4]);
@@ -491,7 +491,7 @@ class boss_krick : public CreatureScript
uint64 _tyrannusGUID;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetPitOfSaronAI<boss_krickAI>(creature);
}
@@ -520,13 +520,13 @@ class spell_krick_explosive_barrage : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_krick_explosive_barrage_AuraScript::HandlePeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_krick_explosive_barrage_AuraScript();
}
@@ -558,14 +558,14 @@ class spell_ick_explosive_barrage : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_ick_explosive_barrage_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_ick_explosive_barrage_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_ick_explosive_barrage_AuraScript();
}
@@ -594,13 +594,13 @@ class spell_exploding_orb_hasty_grow : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_exploding_orb_hasty_grow_AuraScript::OnStackChange, EFFECT_0, SPELL_AURA_MOD_SCALE, AURA_EFFECT_HANDLE_REAPPLY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_exploding_orb_hasty_grow_AuraScript();
}
@@ -624,14 +624,14 @@ class spell_krick_pursuit : public SpellScriptLoader
{
ick->AI()->Talk(SAY_ICK_CHASE_1, target);
ick->AddAura(GetSpellInfo()->Id, target);
- CAST_AI(boss_ick::boss_ickAI, ick->AI())->SetTempThreat(ick->getThreatManager().getThreat(target));
+ ENSURE_AI(boss_ick::boss_ickAI, ick->AI())->SetTempThreat(ick->getThreatManager().getThreat(target));
ick->AddThreat(target, float(GetEffectValue()));
target->AddThreat(ick, float(GetEffectValue()));
}
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_krick_pursuit_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
}
@@ -645,21 +645,21 @@ class spell_krick_pursuit : public SpellScriptLoader
{
if (Unit* caster = GetCaster())
if (Creature* creCaster = caster->ToCreature())
- CAST_AI(boss_ick::boss_ickAI, creCaster->AI())->_ResetThreat(GetTarget());
+ ENSURE_AI(boss_ick::boss_ickAI, creCaster->AI())->_ResetThreat(GetTarget());
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_krick_pursuit_AuraScript::HandleExtraEffect, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_krick_pursuit_SpellScript();
}
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_krick_pursuit_AuraScript();
}
@@ -686,14 +686,14 @@ class spell_krick_pursuit_confusion : public SpellScriptLoader
GetTarget()->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, false);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_krick_pursuit_confusion_AuraScript::OnApply, EFFECT_2, SPELL_AURA_LINKED, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_krick_pursuit_confusion_AuraScript::OnRemove, EFFECT_2, SPELL_AURA_LINKED, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_krick_pursuit_confusion_AuraScript();
}
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 833c3765145..c4f46136bd9 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
@@ -25,12 +25,12 @@
enum Yells
{
- //Gorkun
+ // Gorkun
SAY_GORKUN_INTRO_2 = 0,
SAY_GORKUN_OUTRO_1 = 1,
SAY_GORKUN_OUTRO_2 = 2,
- //Tyrannus
+ // Tyrannus
SAY_AMBUSH_1 = 3,
SAY_AMBUSH_2 = 4,
SAY_GAUNTLET_START = 5,
@@ -44,12 +44,12 @@ enum Yells
SAY_DARK_MIGHT_1 = 13,
SAY_DARK_MIGHT_2 = 14,
- //Jaina
+ // Jaina
SAY_JAYNA_OUTRO_3 = 3,
SAY_JAYNA_OUTRO_4 = 4,
SAY_JAYNA_OUTRO_5 = 5,
- //Sylvanas
+ // Sylvanas
SAY_SYLVANAS_OUTRO_3 = 3,
SAY_SYLVANAS_OUTRO_4 = 4
};
@@ -121,7 +121,7 @@ static const Position rimefangPos[10] =
{1012.601f, 142.4965f, 665.0453f, 0.000000f},
};
-static const Position miscPos = {1018.376f, 167.2495f, 628.2811f, 0.000000f}; //tyrannus combat start position
+static Position const miscPos = { 1018.376f, 167.2495f, 628.2811f, 0.000000f }; // tyrannus combat start position
class boss_tyrannus : public CreatureScript
{
@@ -134,7 +134,7 @@ class boss_tyrannus : public CreatureScript
{
}
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
if (instance->GetBossState(DATA_TYRANNUS) != DONE)
Reset();
@@ -142,7 +142,7 @@ class boss_tyrannus : public CreatureScript
me->DespawnOrUnsummon();
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
events.SetPhase(PHASE_NONE);
@@ -156,12 +156,12 @@ class boss_tyrannus : public CreatureScript
return ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_RIMEFANG));
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
}
- void AttackStart(Unit* victim) OVERRIDE
+ void AttackStart(Unit* victim) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -170,7 +170,7 @@ class boss_tyrannus : public CreatureScript
me->GetMotionMaster()->MoveChase(victim);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
instance->SetBossState(DATA_TYRANNUS, FAIL);
if (Creature* rimefang = GetRimefang())
@@ -179,13 +179,13 @@ class boss_tyrannus : public CreatureScript
me->DespawnOrUnsummon();
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetBossState(DATA_TYRANNUS, DONE);
@@ -199,7 +199,7 @@ class boss_tyrannus : public CreatureScript
rimefang->AI()->DoAction(ACTION_END_COMBAT);
}
- void DoAction(int32 actionId) OVERRIDE
+ void DoAction(int32 actionId) override
{
if (actionId == ACTION_START_INTRO)
{
@@ -213,7 +213,7 @@ class boss_tyrannus : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() && !events.IsInPhase(PHASE_INTRO))
return;
@@ -235,7 +235,7 @@ class boss_tyrannus : public CreatureScript
me->GetMotionMaster()->MovePoint(0, miscPos);
break;
case EVENT_COMBAT_START:
- if (Creature* rimefang = me->GetCreature(*me, instance->GetData64(DATA_RIMEFANG)))
+ if (Creature* rimefang = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_RIMEFANG)))
rimefang->AI()->DoAction(ACTION_START_RIMEFANG); //set rimefang also infight
events.SetPhase(PHASE_COMBAT);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -277,7 +277,7 @@ class boss_tyrannus : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetPitOfSaronAI<boss_tyrannusAI>(creature);
}
@@ -295,7 +295,7 @@ class boss_rimefang : public CreatureScript
ASSERT(_vehicle);
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.SetPhase(PHASE_NONE);
@@ -306,12 +306,12 @@ class boss_rimefang : public CreatureScript
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
_vehicle->InstallAllAccessories(false);
}
- void DoAction(int32 actionId) OVERRIDE
+ void DoAction(int32 actionId) override
{
if (actionId == ACTION_START_RIMEFANG)
{
@@ -324,7 +324,7 @@ class boss_rimefang : public CreatureScript
_EnterEvadeMode();
}
- void SetGUID(uint64 guid, int32 type) OVERRIDE
+ void SetGUID(uint64 guid, int32 type) override
{
if (type == GUID_HOARFROST)
{
@@ -333,7 +333,7 @@ class boss_rimefang : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() && !_events.IsInPhase(PHASE_COMBAT))
return;
@@ -357,7 +357,7 @@ class boss_rimefang : public CreatureScript
_events.ScheduleEvent(EVENT_ICY_BLAST, 15000, 0, PHASE_COMBAT);
break;
case EVENT_HOARFROST:
- if (Unit* target = me->GetUnit(*me, _hoarfrostTargetGUID))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, _hoarfrostTargetGUID))
{
DoCast(target, SPELL_HOARFROST);
_hoarfrostTargetGUID = 0;
@@ -376,7 +376,7 @@ class boss_rimefang : public CreatureScript
uint8 _currentWaypoint;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_rimefangAI(creature);
}
@@ -387,20 +387,20 @@ class player_overlord_brandAI : public PlayerAI
public:
player_overlord_brandAI(Player* player, uint64 casterGUID) : PlayerAI(player), _tyrannusGUID(casterGUID) { }
- void DamageDealt(Unit* /*victim*/, uint32& damage, DamageEffectType /*damageType*/) OVERRIDE
+ void DamageDealt(Unit* /*victim*/, uint32& damage, DamageEffectType /*damageType*/) override
{
if (Creature* tyrannus = ObjectAccessor::GetCreature(*me, _tyrannusGUID))
if (Unit* victim = tyrannus->GetVictim())
me->CastCustomSpell(SPELL_OVERLORD_BRAND_DAMAGE, SPELLVALUE_BASE_POINT0, damage, victim, true, NULL, NULL, tyrannus->GetGUID());
}
- void HealDone(Unit* /*target*/, uint32& addHealth) OVERRIDE
+ void HealDone(Unit* /*target*/, uint32& addHealth) override
{
if (Creature* tyrannus = ObjectAccessor::GetCreature(*me, _tyrannusGUID))
me->CastCustomSpell(SPELL_OVERLORD_BRAND_HEAL, SPELLVALUE_BASE_POINT0, int32(addHealth * 5.5f), tyrannus, true, NULL, NULL, tyrannus->GetGUID());
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
private:
uint64 _tyrannusGUID;
@@ -415,7 +415,7 @@ class spell_tyrannus_overlord_brand : public SpellScriptLoader
{
PrepareAuraScript(spell_tyrannus_overlord_brand_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster() && GetCaster()->GetEntry() == NPC_TYRANNUS;
}
@@ -442,7 +442,7 @@ class spell_tyrannus_overlord_brand : public SpellScriptLoader
delete thisAI;
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_tyrannus_overlord_brand_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_tyrannus_overlord_brand_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
@@ -452,7 +452,7 @@ class spell_tyrannus_overlord_brand : public SpellScriptLoader
bool oldAIState;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_tyrannus_overlord_brand_AuraScript();
}
@@ -478,24 +478,61 @@ class spell_tyrannus_mark_of_rimefang : public SpellScriptLoader
rimefang->AI()->SetGUID(GetTarget()->GetGUID(), GUID_HOARFROST);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_tyrannus_mark_of_rimefang_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_tyrannus_mark_of_rimefang_AuraScript();
}
};
+// 69232 - Icy Blast
+class spell_tyrannus_rimefang_icy_blast : public SpellScriptLoader
+{
+ public:
+ spell_tyrannus_rimefang_icy_blast() : SpellScriptLoader("spell_tyrannus_rimefang_icy_blast") { }
+
+ class spell_tyrannus_rimefang_icy_blast_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_tyrannus_rimefang_icy_blast_SpellScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_ICY_BLAST_AURA))
+ return false;
+ return true;
+ }
+
+ void HandleTriggerMissile(SpellEffIndex effIndex)
+ {
+ PreventHitDefaultEffect(effIndex);
+ if (Position const* pos = GetHitDest())
+ if (TempSummon* summon = GetCaster()->SummonCreature(NPC_ICY_BLAST, *pos, TEMPSUMMON_TIMED_DESPAWN, 60000))
+ summon->CastSpell(summon, SPELL_ICY_BLAST_AURA, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_tyrannus_rimefang_icy_blast_SpellScript::HandleTriggerMissile, EFFECT_1, SPELL_EFFECT_TRIGGER_MISSILE);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_tyrannus_rimefang_icy_blast_SpellScript();
+ }
+};
+
class at_tyrannus_event_starter : public AreaTriggerScript
{
public:
at_tyrannus_event_starter() : AreaTriggerScript("at_tyrannus_event_starter") { }
- bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE
+ bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override
{
InstanceScript* instance = player->GetInstanceScript();
if (player->IsGameMaster() || !instance)
@@ -518,5 +555,6 @@ void AddSC_boss_tyrannus()
new boss_rimefang();
new spell_tyrannus_overlord_brand();
new spell_tyrannus_mark_of_rimefang();
+ new spell_tyrannus_rimefang_icy_blast();
new at_tyrannus_event_starter();
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp
index 364246e05f1..c2df16f03e1 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp
@@ -53,13 +53,13 @@ class instance_pit_of_saron : public InstanceMapScript
_teamInInstance = 0;
}
- void OnPlayerEnter(Player* player) OVERRIDE
+ void OnPlayerEnter(Player* player) override
{
if (!_teamInInstance)
_teamInInstance = player->GetTeam();
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
if (!_teamInInstance)
{
@@ -91,80 +91,80 @@ class instance_pit_of_saron : public InstanceMapScript
break;
case NPC_SYLVANAS_PART1:
if (_teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_JAINA_PART1, ALLIANCE);
+ creature->UpdateEntry(NPC_JAINA_PART1);
_jainaOrSylvanas1GUID = creature->GetGUID();
break;
case NPC_SYLVANAS_PART2:
if (_teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_JAINA_PART2, ALLIANCE);
+ creature->UpdateEntry(NPC_JAINA_PART2);
_jainaOrSylvanas2GUID = creature->GetGUID();
break;
case NPC_KILARA:
if (_teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_ELANDRA, ALLIANCE);
+ creature->UpdateEntry(NPC_ELANDRA);
break;
case NPC_KORALEN:
if (_teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_KORLAEN, ALLIANCE);
+ creature->UpdateEntry(NPC_KORLAEN);
break;
case NPC_CHAMPION_1_HORDE:
if (_teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_CHAMPION_1_ALLIANCE, ALLIANCE);
+ creature->UpdateEntry(NPC_CHAMPION_1_ALLIANCE);
break;
case NPC_CHAMPION_2_HORDE:
if (_teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_CHAMPION_2_ALLIANCE, ALLIANCE);
+ creature->UpdateEntry(NPC_CHAMPION_2_ALLIANCE);
break;
case NPC_CHAMPION_3_HORDE: // No 3rd set for Alliance?
if (_teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_CHAMPION_2_ALLIANCE, ALLIANCE);
+ creature->UpdateEntry(NPC_CHAMPION_2_ALLIANCE);
break;
case NPC_HORDE_SLAVE_1:
if (_teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_ALLIANCE_SLAVE_1, ALLIANCE);
+ creature->UpdateEntry(NPC_ALLIANCE_SLAVE_1);
break;
case NPC_HORDE_SLAVE_2:
if (_teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_ALLIANCE_SLAVE_2, ALLIANCE);
+ creature->UpdateEntry(NPC_ALLIANCE_SLAVE_2);
break;
case NPC_HORDE_SLAVE_3:
if (_teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_ALLIANCE_SLAVE_3, ALLIANCE);
+ creature->UpdateEntry(NPC_ALLIANCE_SLAVE_3);
break;
case NPC_HORDE_SLAVE_4:
if (_teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_ALLIANCE_SLAVE_4, ALLIANCE);
+ creature->UpdateEntry(NPC_ALLIANCE_SLAVE_4);
break;
case NPC_FREED_SLAVE_1_HORDE:
if (_teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_FREED_SLAVE_1_ALLIANCE, ALLIANCE);
+ creature->UpdateEntry(NPC_FREED_SLAVE_1_ALLIANCE);
break;
case NPC_FREED_SLAVE_2_HORDE:
if (_teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_FREED_SLAVE_2_ALLIANCE, ALLIANCE);
+ creature->UpdateEntry(NPC_FREED_SLAVE_2_ALLIANCE);
break;
case NPC_FREED_SLAVE_3_HORDE:
if (_teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_FREED_SLAVE_3_ALLIANCE, ALLIANCE);
+ creature->UpdateEntry(NPC_FREED_SLAVE_3_ALLIANCE);
break;
case NPC_RESCUED_SLAVE_HORDE:
if (_teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_RESCUED_SLAVE_ALLIANCE, ALLIANCE);
+ creature->UpdateEntry(NPC_RESCUED_SLAVE_ALLIANCE);
break;
case NPC_MARTIN_VICTUS_1:
if (_teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_MARTIN_VICTUS_1, ALLIANCE);
+ creature->UpdateEntry(NPC_MARTIN_VICTUS_1);
break;
case NPC_MARTIN_VICTUS_2:
if (_teamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_MARTIN_VICTUS_2, ALLIANCE);
+ creature->UpdateEntry(NPC_MARTIN_VICTUS_2);
break;
default:
break;
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -175,7 +175,7 @@ class instance_pit_of_saron : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -186,7 +186,7 @@ class instance_pit_of_saron : public InstanceMapScript
}
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -224,7 +224,7 @@ class instance_pit_of_saron : public InstanceMapScript
return true;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -237,7 +237,7 @@ class instance_pit_of_saron : public InstanceMapScript
return 0;
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -264,7 +264,7 @@ class instance_pit_of_saron : public InstanceMapScript
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -275,7 +275,7 @@ class instance_pit_of_saron : public InstanceMapScript
return saveStream.str();
}
- void Load(const char* in) OVERRIDE
+ void Load(const char* in) override
{
if (!in)
{
@@ -322,7 +322,7 @@ class instance_pit_of_saron : public InstanceMapScript
uint32 _teamInInstance;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_pit_of_saron_InstanceScript(map);
}
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 bce9e067ae1..7bd9325dd97 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
@@ -49,18 +49,18 @@ class npc_ymirjar_flamebearer : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_events.ScheduleEvent(EVENT_FIREBALL, 4000);
_events.ScheduleEvent(EVENT_TACTICAL_BLINK, 15000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -97,7 +97,7 @@ class npc_ymirjar_flamebearer : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ymirjar_flamebearerAI(creature);
}
@@ -115,17 +115,17 @@ class npc_iceborn_protodrake : public CreatureScript
ASSERT(_vehicle);
}
- void Reset() OVERRIDE
+ void Reset() override
{
_frostBreathCooldown = 5000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_vehicle->RemoveAllPassengers();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -146,7 +146,7 @@ class npc_iceborn_protodrake : public CreatureScript
uint32 _frostBreathCooldown;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_iceborn_protodrakeAI(creature);
}
@@ -163,12 +163,12 @@ class npc_geist_ambusher : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_leapingFaceMaulCooldown = 9000;
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (who->GetTypeId() != TYPEID_PLAYER)
return;
@@ -178,7 +178,7 @@ class npc_geist_ambusher : public CreatureScript
DoCast(who, SPELL_LEAPING_FACE_MAUL);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -199,7 +199,7 @@ class npc_geist_ambusher : public CreatureScript
uint32 _leapingFaceMaulCooldown;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_geist_ambusherAI(creature);
}
@@ -223,13 +223,13 @@ class spell_trash_npc_glacial_strike : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_trash_npc_glacial_strike_AuraScript::PeriodicTick, EFFECT_2, SPELL_AURA_PERIODIC_DAMAGE_PERCENT);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_trash_npc_glacial_strike_AuraScript();
}
diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp
index 46912eeb898..68929d2aa01 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp
@@ -86,13 +86,13 @@ class boss_drakkari_colossus : public CreatureScript
introDone = false;
}
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
if (!me->isDead())
Reset();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
@@ -113,7 +113,7 @@ class boss_drakkari_colossus : public CreatureScript
instance->SetData(DATA_DRAKKARI_COLOSSUS_EVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
@@ -124,7 +124,7 @@ class boss_drakkari_colossus : public CreatureScript
instance->SetData(DATA_DRAKKARI_COLOSSUS_EVENT, IN_PROGRESS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
@@ -133,14 +133,14 @@ class boss_drakkari_colossus : public CreatureScript
instance->SetData(DATA_DRAKKARI_COLOSSUS_EVENT, DONE);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
// Note: This should not be called, but before use SetBossState function we should use BossAI
// in all the bosses of the instance
instance->SetData(DATA_DRAKKARI_COLOSSUS_EVENT, FAIL);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -173,7 +173,7 @@ class boss_drakkari_colossus : public CreatureScript
}
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC))
damage = 0;
@@ -192,7 +192,7 @@ class boss_drakkari_colossus : public CreatureScript
}
}
- uint32 GetData(uint32 data) const OVERRIDE
+ uint32 GetData(uint32 data) const override
{
if (data == DATA_COLOSSUS_PHASE)
return phase;
@@ -202,13 +202,13 @@ class boss_drakkari_colossus : public CreatureScript
return 0;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
if (type == DATA_INTRO_DONE)
- introDone = data;
+ introDone = data != 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -233,7 +233,7 @@ class boss_drakkari_colossus : public CreatureScript
DoMeleeAttackIfReady();
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summon->SetInCombatWithZone();
@@ -246,7 +246,7 @@ class boss_drakkari_colossus : public CreatureScript
bool introDone;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_drakkari_colossusAI>(creature);
}
@@ -265,7 +265,7 @@ class boss_drakkari_elemental : public CreatureScript
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
events.ScheduleEvent(EVENT_SURGE, urand(5000, 15000));
@@ -273,16 +273,16 @@ class boss_drakkari_elemental : public CreatureScript
me->AddAura(SPELL_MOJO_VOLLEY, me);
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
if (killer == me)
return;
- if (Creature* colossus = Unit::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))
+ if (Creature* colossus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))
killer->Kill(colossus);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -308,24 +308,24 @@ class boss_drakkari_elemental : public CreatureScript
DoMeleeAttackIfReady();
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
case ACTION_RETURN_TO_COLOSSUS:
DoCast(SPELL_SURGE_VISUAL);
- if (Creature* colossus = Unit::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))
+ if (Creature* colossus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))
// what if the elemental is more than 80 yards from drakkari colossus ?
DoCast(colossus, SPELL_MERGE, true);
break;
}
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if (HealthBelowPct(50) && instance)
{
- if (Creature* colossus = Unit::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))
+ if (Creature* colossus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))
{
if (colossus->AI()->GetData(DATA_COLOSSUS_PHASE) == COLOSSUS_PHASE_FIRST_ELEMENTAL_SUMMON)
{
@@ -351,12 +351,12 @@ class boss_drakkari_elemental : public CreatureScript
}
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
me->DespawnOrUnsummon();
}
- void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, SpellInfo const* spell) override
{
if (spell->Id == SPELL_MERGE)
{
@@ -373,7 +373,7 @@ class boss_drakkari_elemental : public CreatureScript
InstanceScript* instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_drakkari_elementalAI>(creature);
}
@@ -384,7 +384,7 @@ class npc_living_mojo : public CreatureScript
public:
npc_living_mojo() : CreatureScript("npc_living_mojo") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_living_mojoAI>(creature);
}
@@ -396,7 +396,7 @@ public:
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
mojoWaveTimer = 2*IN_MILLISECONDS;
mojoPuddleTimer = 7*IN_MILLISECONDS;
@@ -416,14 +416,14 @@ public:
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
if (id == 1)
{
- if (Creature* colossus = Unit::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))
+ if (Creature* colossus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))
{
colossus->AI()->DoAction(ACTION_UNFREEZE_COLOSSUS);
if (!colossus->AI()->GetData(DATA_INTRO_DONE))
@@ -434,7 +434,7 @@ public:
}
}
- void AttackStart(Unit* attacker) OVERRIDE
+ void AttackStart(Unit* attacker) override
{
if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == POINT_MOTION_TYPE)
return;
@@ -442,11 +442,9 @@ public:
// we do this checks to see if the creature is one of the creatures that sorround the boss
if (Creature* colossus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))
{
- Position homePosition;
- me->GetHomePosition().GetPosition(&homePosition);
+ Position homePosition = me->GetHomePosition();
- Position colossusHomePosition;
- colossus->GetHomePosition().GetPosition(&colossusHomePosition);
+ Position colossusHomePosition = colossus->GetHomePosition();
float distance = homePosition.GetExactDist(colossusHomePosition.GetPositionX(), colossusHomePosition.GetPositionY(), colossusHomePosition.GetPositionZ());
@@ -460,7 +458,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
diff --git a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp
index e8791c6e97e..8e0ff54e161 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp
@@ -35,7 +35,7 @@ class boss_eck : public CreatureScript
public:
boss_eck() : CreatureScript("boss_eck") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_eckAI>(creature);
}
@@ -56,7 +56,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
uiBerserkTimer = urand(60*IN_MILLISECONDS, 90*IN_MILLISECONDS); //60-90 secs according to wowwiki
uiBiteTimer = 5*IN_MILLISECONDS;
@@ -68,12 +68,12 @@ public:
instance->SetData(DATA_ECK_THE_FEROCIOUS_EVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
instance->SetData(DATA_ECK_THE_FEROCIOUS_EVENT, IN_PROGRESS);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -123,7 +123,7 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_ECK_THE_FEROCIOUS_EVENT, DONE);
}
@@ -136,7 +136,7 @@ class npc_ruins_dweller : public CreatureScript
public:
npc_ruins_dweller() : CreatureScript("npc_ruins_dweller") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ruins_dwellerAI>(creature);
}
@@ -150,7 +150,7 @@ public:
InstanceScript* instance;
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData64(DATA_RUIN_DWELLER_DIED, me->GetGUID());
if (instance->GetData(DATA_ALIVE_RUIN_DWELLERS) == 0)
diff --git a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp
index 4cf9eea8734..f1c246dbbea 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp
@@ -68,7 +68,7 @@ class boss_gal_darah : public CreatureScript
public:
boss_gal_darah() : CreatureScript("boss_gal_darah") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_gal_darahAI>(creature);
}
@@ -98,7 +98,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
uiStampedeTimer = 10*IN_MILLISECONDS;
uiWhirlingSlashTimer = 21*IN_MILLISECONDS;
@@ -121,14 +121,14 @@ public:
instance->SetData(DATA_GAL_DARAH_EVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetData(DATA_GAL_DARAH_EVENT, IN_PROGRESS);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -255,7 +255,7 @@ public:
impaledList.push_back(guid);
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_SHARE_THE_LOVE)
return shareTheLove;
@@ -263,14 +263,14 @@ public:
return 0;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetData(DATA_GAL_DARAH_EVENT, DONE);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -288,7 +288,7 @@ class achievement_share_the_love : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
index 25580efb9e0..7645d984aac 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
@@ -52,7 +52,7 @@ class boss_moorabi : public CreatureScript
public:
boss_moorabi() : CreatureScript("boss_moorabi") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_moorabiAI>(creature);
}
@@ -73,7 +73,7 @@ public:
uint32 uiDeterminedStabTimer;
uint32 uiTransformationTImer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiGroundTremorTimer = 18*IN_MILLISECONDS;
uiNumblingShoutTimer = 10*IN_MILLISECONDS;
@@ -84,7 +84,7 @@ public:
instance->SetData(DATA_MOORABI_EVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
DoCast(me, SPELL_MOJO_FRENZY, true);
@@ -92,7 +92,7 @@ public:
instance->SetData(DATA_MOORABI_EVENT, IN_PROGRESS);
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -143,7 +143,7 @@ public:
DoMeleeAttackIfReady();
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_LESS_RABI)
return bPhase ? 0 : 1;
@@ -151,14 +151,14 @@ public:
return 0;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetData(DATA_MOORABI_EVENT, DONE);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -176,7 +176,7 @@ class achievement_less_rabi : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp
index 0feec20d55f..98c8481b5ae 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp
@@ -74,7 +74,7 @@ class boss_slad_ran : public CreatureScript
public:
boss_slad_ran() : CreatureScript("boss_slad_ran") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_slad_ranAI>(creature);
}
@@ -98,7 +98,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
uiPoisonNovaTimer = 10*IN_MILLISECONDS;
uiPowerfullBiteTimer = 3*IN_MILLISECONDS;
@@ -112,14 +112,14 @@ public:
instance->SetData(DATA_SLAD_RAN_EVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetData(DATA_SLAD_RAN_EVENT, IN_PROGRESS);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -173,7 +173,7 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
lSummons.DespawnAll();
@@ -181,19 +181,19 @@ public:
instance->SetData(DATA_SLAD_RAN_EVENT, DONE);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
lSummons.Summon(summoned);
}
- void SetGUID(uint64 guid, int32 type) OVERRIDE
+ void SetGUID(uint64 guid, int32 type) override
{
if (type == DATA_SNAKES_WHYD_IT_HAVE_TO_BE_SNAKES)
lWrappedPlayers.insert(guid);
@@ -201,7 +201,7 @@ public:
bool WasWrapped(uint64 guid)
{
- return lWrappedPlayers.count(guid);
+ return lWrappedPlayers.count(guid) != 0;
}
};
@@ -212,7 +212,7 @@ class npc_slad_ran_constrictor : public CreatureScript
public:
npc_slad_ran_constrictor() : CreatureScript("npc_slad_ran_constrictor") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_slad_ran_constrictorAI(creature);
}
@@ -226,12 +226,12 @@ public:
uint32 uiGripOfSladRanTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiGripOfSladRanTimer = 1*IN_MILLISECONDS;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -267,7 +267,7 @@ class npc_slad_ran_viper : public CreatureScript
public:
npc_slad_ran_viper() : CreatureScript("npc_slad_ran_viper") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_slad_ran_viperAI(creature);
}
@@ -281,12 +281,12 @@ public:
uint32 uiVenomousBiteTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiVenomousBiteTimer = 2*IN_MILLISECONDS;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -308,7 +308,7 @@ class achievement_snakes_whyd_it_have_to_be_snakes : public AchievementCriteriaS
{
}
- bool OnCheck(Player* player, Unit* target) OVERRIDE
+ bool OnCheck(Player* player, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
index 3ac3c32916e..273cc4361af 100644
--- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
+++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
@@ -36,7 +36,7 @@ class instance_gundrak : public InstanceMapScript
public:
instance_gundrak() : InstanceMapScript("instance_gundrak", 604) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_gundrak_InstanceMapScript(map);
}
@@ -89,7 +89,7 @@ public:
std::string str_data;
- void Initialize() OVERRIDE
+ void Initialize() override
{
spawnSupport = false;
@@ -133,7 +133,7 @@ public:
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
}
- bool IsEncounterInProgress() const OVERRIDE
+ bool IsEncounterInProgress() const override
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
@@ -142,7 +142,7 @@ public:
return false;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -168,7 +168,7 @@ public:
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -273,7 +273,7 @@ public:
}
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -326,7 +326,7 @@ public:
SaveToDB();
}
- void SetData64(uint32 type, uint64 data) OVERRIDE
+ void SetData64(uint32 type, uint64 data) override
{
if (type == DATA_RUIN_DWELLER_DIED)
DwellerGUIDs.erase(data);
@@ -338,7 +338,7 @@ public:
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -359,7 +359,7 @@ public:
return 0;
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -384,7 +384,7 @@ public:
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -401,7 +401,7 @@ public:
return str_data;
}
- void Load(const char* in) OVERRIDE
+ void Load(const char* in) override
{
if (!in)
{
@@ -440,7 +440,7 @@ public:
OUT_LOAD_INST_DATA_COMPLETE;
}
- void Update(uint32 diff) OVERRIDE
+ void Update(uint32 diff) override
{
// Spawn the support for the bridge if necessary
if (spawnSupport)
@@ -542,7 +542,7 @@ class go_gundrak_altar : public GameObjectScript
public:
go_gundrak_altar() : GameObjectScript("go_gundrak_altar") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
InstanceScript* instance = go->GetInstanceScript();
uint64 statueGUID = 0;
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 b053f0a0258..a9088207ebe 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
@@ -184,7 +184,7 @@ class boss_blood_council_controller : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
me->SetReactState(REACT_PASSIVE);
@@ -194,7 +194,7 @@ class boss_blood_council_controller : public CreatureScript
instance->SetBossState(DATA_BLOOD_PRINCE_COUNCIL, NOT_STARTED);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (instance->GetBossState(DATA_BLOOD_PRINCE_COUNCIL) == IN_PROGRESS)
return;
@@ -243,14 +243,14 @@ class boss_blood_council_controller : public CreatureScript
}
}
- void SetData(uint32 /*type*/, uint32 data) OVERRIDE
+ void SetData(uint32 /*type*/, uint32 data) override
{
_resetCounter += uint8(data);
if (_resetCounter == 3)
EnterEvadeMode();
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
_resetCounter = 0;
if (Creature* keleseth = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PRINCE_KELESETH_GUID)))
@@ -263,7 +263,7 @@ class boss_blood_council_controller : public CreatureScript
valanar->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
_JustDied();
// kill all prices
@@ -282,7 +282,7 @@ class boss_blood_council_controller : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -349,7 +349,7 @@ class boss_blood_council_controller : public CreatureScript
uint32 _resetCounter;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<boss_blood_council_controllerAI>(creature);
}
@@ -368,7 +368,7 @@ class boss_prince_keleseth_icc : public CreatureScript
_spawnHealth = creature->GetMaxHealth();
}
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetDBTableGUIDLow()))
if (data->curhealth)
@@ -380,7 +380,7 @@ class boss_prince_keleseth_icc : public CreatureScript
me->SetReactState(REACT_DEFENSIVE);
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
summons.DespawnAll();
@@ -392,7 +392,7 @@ class boss_prince_keleseth_icc : public CreatureScript
me->SetReactState(REACT_DEFENSIVE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BLOOD_PRINCES_CONTROL)))
DoZoneInCombat(controller);
@@ -408,7 +408,7 @@ class boss_prince_keleseth_icc : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
events.Reset();
summons.DespawnAll();
@@ -417,7 +417,7 @@ class boss_prince_keleseth_icc : public CreatureScript
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
me->SetHealth(_spawnHealth);
@@ -429,23 +429,22 @@ class boss_prince_keleseth_icc : public CreatureScript
}
}
- void JustRespawned() OVERRIDE
+ void JustRespawned() override
{
DoCast(me, SPELL_FEIGN_DEATH);
me->SetHealth(_spawnHealth);
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_INVOCATION_OF_BLOOD_KELESETH)
DoAction(ACTION_CAST_INVOCATION);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summons.Summon(summon);
- Position pos;
- me->GetPosition(&pos);
+ Position pos = me->GetPosition();
float maxRange = me->GetDistance2d(summon);
float angle = me->GetAngle(summon);
me->MovePositionToFirstCollision(pos, maxRange, angle);
@@ -453,7 +452,7 @@ class boss_prince_keleseth_icc : public CreatureScript
summon->ToTempSummon()->SetTempSummonType(TEMPSUMMON_CORPSE_DESPAWN);
}
- void DamageDealt(Unit* /*target*/, uint32& damage, DamageEffectType damageType) OVERRIDE
+ void DamageDealt(Unit* /*target*/, uint32& damage, DamageEffectType damageType) override
{
if (damageType != SPELL_DIRECT_DAMAGE)
return;
@@ -462,7 +461,7 @@ class boss_prince_keleseth_icc : public CreatureScript
instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(false));
}
- void DamageTaken(Unit* attacker, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* attacker, uint32& damage) override
{
if (!_isEmpowered)
{
@@ -471,13 +470,13 @@ class boss_prince_keleseth_icc : public CreatureScript
}
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KELESETH_KILL);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -522,7 +521,7 @@ class boss_prince_keleseth_icc : public CreatureScript
return true;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || !CheckRoom())
return;
@@ -565,7 +564,7 @@ class boss_prince_keleseth_icc : public CreatureScript
bool _isEmpowered;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<boss_prince_kelesethAI>(creature);
}
@@ -584,7 +583,7 @@ class boss_prince_taldaram_icc : public CreatureScript
_spawnHealth = creature->GetMaxHealth();
}
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetDBTableGUIDLow()))
if (data->curhealth)
@@ -596,7 +595,7 @@ class boss_prince_taldaram_icc : public CreatureScript
me->SetReactState(REACT_DEFENSIVE);
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
summons.DespawnAll();
@@ -608,12 +607,12 @@ class boss_prince_taldaram_icc : public CreatureScript
me->SetReactState(REACT_DEFENSIVE);
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE
+ void MoveInLineOfSight(Unit* /*who*/) override
{
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BLOOD_PRINCES_CONTROL)))
DoZoneInCombat(controller);
@@ -625,7 +624,7 @@ class boss_prince_taldaram_icc : public CreatureScript
me->AddAura(SPELL_SHADOW_PRISON, me);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
events.Reset();
summons.DespawnAll();
@@ -634,7 +633,7 @@ class boss_prince_taldaram_icc : public CreatureScript
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
me->SetHealth(_spawnHealth);
@@ -646,19 +645,19 @@ class boss_prince_taldaram_icc : public CreatureScript
}
}
- void JustRespawned() OVERRIDE
+ void JustRespawned() override
{
DoCast(me, SPELL_FEIGN_DEATH);
me->SetHealth(_spawnHealth);
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_INVOCATION_OF_BLOOD_TALDARAM)
DoAction(ACTION_CAST_INVOCATION);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summons.Summon(summon);
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, -10.0f, true); // first try at distance
@@ -672,7 +671,7 @@ class boss_prince_taldaram_icc : public CreatureScript
summon->AI()->SetGUID(target->GetGUID());
}
- void DamageDealt(Unit* /*target*/, uint32& damage, DamageEffectType damageType) OVERRIDE
+ void DamageDealt(Unit* /*target*/, uint32& damage, DamageEffectType damageType) override
{
if (damageType != SPELL_DIRECT_DAMAGE)
return;
@@ -681,7 +680,7 @@ class boss_prince_taldaram_icc : public CreatureScript
instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(false));
}
- void DamageTaken(Unit* attacker, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* attacker, uint32& damage) override
{
if (!_isEmpowered)
{
@@ -690,13 +689,13 @@ class boss_prince_taldaram_icc : public CreatureScript
}
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_TALDARAM_KILL);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -741,7 +740,7 @@ class boss_prince_taldaram_icc : public CreatureScript
return true;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || !CheckRoom())
return;
@@ -789,7 +788,7 @@ class boss_prince_taldaram_icc : public CreatureScript
bool _isEmpowered;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<boss_prince_taldaramAI>(creature);
}
@@ -808,7 +807,7 @@ class boss_prince_valanar_icc : public CreatureScript
_spawnHealth = creature->GetMaxHealth();
}
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetDBTableGUIDLow()))
if (data->curhealth)
@@ -820,7 +819,7 @@ class boss_prince_valanar_icc : public CreatureScript
me->SetReactState(REACT_DEFENSIVE);
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
summons.DespawnAll();
@@ -832,12 +831,12 @@ class boss_prince_valanar_icc : public CreatureScript
me->SetReactState(REACT_DEFENSIVE);
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE
+ void MoveInLineOfSight(Unit* /*who*/) override
{
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BLOOD_PRINCES_CONTROL)))
DoZoneInCombat(controller);
@@ -849,7 +848,7 @@ class boss_prince_valanar_icc : public CreatureScript
me->AddAura(SPELL_SHADOW_PRISON, me);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
events.Reset();
summons.DespawnAll();
@@ -858,7 +857,7 @@ class boss_prince_valanar_icc : public CreatureScript
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
me->SetHealth(me->GetMaxHealth());
@@ -870,13 +869,13 @@ class boss_prince_valanar_icc : public CreatureScript
}
}
- void JustRespawned() OVERRIDE
+ void JustRespawned() override
{
DoCast(me, SPELL_FEIGN_DEATH);
me->SetHealth(_spawnHealth);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
switch (summon->GetEntry())
{
@@ -905,13 +904,13 @@ class boss_prince_valanar_icc : public CreatureScript
DoZoneInCombat(summon);
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_INVOCATION_OF_BLOOD_VALANAR)
DoAction(ACTION_CAST_INVOCATION);
}
- void DamageDealt(Unit* /*target*/, uint32& damage, DamageEffectType damageType) OVERRIDE
+ void DamageDealt(Unit* /*target*/, uint32& damage, DamageEffectType damageType) override
{
if (damageType != SPELL_DIRECT_DAMAGE)
return;
@@ -920,7 +919,7 @@ class boss_prince_valanar_icc : public CreatureScript
instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(false));
}
- void DamageTaken(Unit* attacker, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* attacker, uint32& damage) override
{
if (!_isEmpowered)
{
@@ -929,13 +928,13 @@ class boss_prince_valanar_icc : public CreatureScript
}
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_VALANAR_KILL);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -980,7 +979,7 @@ class boss_prince_valanar_icc : public CreatureScript
return true;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || !CheckRoom())
return;
@@ -1033,7 +1032,7 @@ class boss_prince_valanar_icc : public CreatureScript
bool _isEmpowered;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<boss_prince_valanarAI>(creature);
}
@@ -1052,7 +1051,7 @@ class npc_blood_queen_lana_thel : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
me->SetDisableGravity(true);
@@ -1065,7 +1064,7 @@ class npc_blood_queen_lana_thel : public CreatureScript
me->SetVisible(true);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (_introDone)
@@ -1087,13 +1086,13 @@ class npc_blood_queen_lana_thel : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == POINT_MOTION_TYPE && id == POINT_INTRO_DESPAWN)
me->SetVisible(false);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!_events.GetPhaseMask())
return;
@@ -1127,7 +1126,7 @@ class npc_blood_queen_lana_thel : public CreatureScript
bool _introDone;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_blood_queen_lana_thelAI>(creature);
}
@@ -1145,7 +1144,7 @@ class npc_ball_of_flame : public CreatureScript
_despawnTimer = 0;
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->CastSpell(me, SPELL_BALL_OF_FLAMES_VISUAL, true);
if (me->GetEntry() == NPC_BALL_OF_INFERNO_FLAME)
@@ -1155,7 +1154,7 @@ class npc_ball_of_flame : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == CHASE_MOTION_TYPE && id == GUID_LOPART(_chaseGUID) && _chaseGUID)
{
@@ -1166,12 +1165,12 @@ class npc_ball_of_flame : public CreatureScript
}
}
- void SetGUID(uint64 guid, int32 /*type*/) OVERRIDE
+ void SetGUID(uint64 guid, int32 /*type*/) override
{
_chaseGUID = guid;
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_FLAME_BALL_CHASE)
if (Player* target = ObjectAccessor::GetPlayer(*me, _chaseGUID))
@@ -1183,7 +1182,7 @@ class npc_ball_of_flame : public CreatureScript
}
}
- void DamageDealt(Unit* /*target*/, uint32& damage, DamageEffectType damageType) OVERRIDE
+ void DamageDealt(Unit* /*target*/, uint32& damage, DamageEffectType damageType) override
{
if (damageType != SPELL_DIRECT_DAMAGE)
return;
@@ -1192,7 +1191,7 @@ class npc_ball_of_flame : public CreatureScript
_instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(false));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!_despawnTimer)
return;
@@ -1212,7 +1211,7 @@ class npc_ball_of_flame : public CreatureScript
uint32 _despawnTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_ball_of_flameAI>(creature);
}
@@ -1227,7 +1226,7 @@ class npc_kinetic_bomb : public CreatureScript
{
npc_kinetic_bombAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
me->SetWalk(true);
@@ -1239,7 +1238,7 @@ class npc_kinetic_bomb : public CreatureScript
_groundZ = me->GetMap()->GetHeight(me->GetPhaseMask(), _x, _y, _groundZ, true, 500.0f);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == SPELL_KINETIC_BOMB_EXPLOSION)
_events.ScheduleEvent(EVENT_BOMB_DESPAWN, 1000);
@@ -1251,7 +1250,7 @@ class npc_kinetic_bomb : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
@@ -1279,7 +1278,7 @@ class npc_kinetic_bomb : public CreatureScript
float _groundZ;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_kinetic_bombAI>(creature);
}
@@ -1298,13 +1297,13 @@ class npc_dark_nucleus : public CreatureScript
_targetAuraCheck = 0;
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetReactState(REACT_DEFENSIVE);
me->CastSpell(me, SPELL_SHADOW_RESONANCE_AURA, true);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
_targetAuraCheck = 1000;
if (me->GetDistance(who) >= 15.0f)
@@ -1317,13 +1316,13 @@ class npc_dark_nucleus : public CreatureScript
me->ClearUnitState(UNIT_STATE_CASTING);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
ScriptedAI::MoveInLineOfSight(who);
}
- void DamageTaken(Unit* attacker, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* attacker, uint32& /*damage*/) override
{
if (attacker == me)
return;
@@ -1332,7 +1331,7 @@ class npc_dark_nucleus : public CreatureScript
me->AddThreat(attacker, 500000000.0f);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1361,7 +1360,7 @@ class npc_dark_nucleus : public CreatureScript
bool _lockedTarget;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_dark_nucleusAI>(creature);
}
@@ -1382,13 +1381,13 @@ class spell_taldaram_glittering_sparks : public SpellScriptLoader
GetCaster()->CastSpell(GetCaster(), uint32(GetEffectValue()), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_taldaram_glittering_sparks_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_taldaram_glittering_sparks_SpellScript();
}
@@ -1409,13 +1408,13 @@ class spell_taldaram_summon_flame_ball : public SpellScriptLoader
GetCaster()->CastSpell(GetCaster(), uint32(GetEffectValue()), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_taldaram_summon_flame_ball_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_taldaram_summon_flame_ball_SpellScript();
}
@@ -1430,7 +1429,7 @@ class spell_taldaram_flame_ball_visual : public SpellScriptLoader
{
PrepareAuraScript(spell_flame_ball_visual_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (GetCaster()->GetEntry() == NPC_BALL_OF_FLAME || GetCaster()->GetEntry() == NPC_BALL_OF_INFERNO_FLAME)
return true;
@@ -1453,13 +1452,13 @@ class spell_taldaram_flame_ball_visual : public SpellScriptLoader
target->DespawnOrUnsummon();
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_flame_ball_visual_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_flame_ball_visual_AuraScript();
}
@@ -1480,13 +1479,13 @@ class spell_taldaram_ball_of_inferno_flame : public SpellScriptLoader
aur->SetStackAmount(uint8(GetSpellInfo()->StackAmount));
}
- void Register() OVERRIDE
+ void Register() override
{
AfterHit += SpellHitFn(spell_taldaram_ball_of_inferno_flame_SpellScript::ModAuraStack);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_taldaram_ball_of_inferno_flame_SpellScript();
}
@@ -1508,7 +1507,7 @@ class spell_valanar_kinetic_bomb : public SpellScriptLoader
dest.RelocateOffset(offset);
}
- void Register() OVERRIDE
+ void Register() override
{
OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_valanar_kinetic_bomb_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER);
}
@@ -1533,18 +1532,18 @@ class spell_valanar_kinetic_bomb : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_valanar_kinetic_bomb_AuraScript::HandleDummyTick, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_valanar_kinetic_bomb_SpellScript();
}
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_valanar_kinetic_bomb_AuraScript();
}
@@ -1565,13 +1564,13 @@ class spell_valanar_kinetic_bomb_knockback : public SpellScriptLoader
target->AI()->DoAction(ACTION_KINETIC_BOMB_JUMP);
}
- void Register() OVERRIDE
+ void Register() override
{
BeforeHit += SpellHitFn(spell_valanar_kinetic_bomb_knockback_SpellScript::KnockIntoAir);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_valanar_kinetic_bomb_knockback_SpellScript();
}
@@ -1593,13 +1592,13 @@ class spell_valanar_kinetic_bomb_absorb : public SpellScriptLoader
dmgInfo.AbsorbDamage(absorbAmount);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectAbsorb += AuraEffectAbsorbFn(spell_valanar_kinetic_bomb_absorb_AuraScript::OnAbsorb, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_valanar_kinetic_bomb_absorb_AuraScript();
}
@@ -1620,13 +1619,13 @@ class spell_blood_council_shadow_prison : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), SPELL_SHADOW_PRISON_DAMAGE, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_blood_council_shadow_prison_AuraScript::HandleDummyTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_blood_council_shadow_prison_AuraScript();
}
@@ -1648,13 +1647,13 @@ class spell_blood_council_shadow_prison_damage : public SpellScriptLoader
SetHitDamage(GetHitDamage() + eff->GetAmount());
}
- void Register() OVERRIDE
+ void Register() override
{
OnHit += SpellHitFn(spell_blood_council_shadow_prison_SpellScript::AddExtraDamage);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_blood_council_shadow_prison_SpellScript();
}
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 bbf3e8afc0f..104a8357917 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
@@ -145,7 +145,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
events.ScheduleEvent(EVENT_BERSERK, 330000);
@@ -163,7 +163,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
_killMinchar = false;
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (!instance->CheckRequiredBosses(DATA_BLOOD_QUEEN_LANA_THEL, who->ToPlayer()))
{
@@ -183,7 +183,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
_creditBloodQuickening = instance->GetData(DATA_BLOOD_QUICKENING_STATE) == IN_PROGRESS;
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
_JustDied();
Talk(SAY_DEATH);
@@ -223,7 +223,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
instance->DoRemoveAurasDueToSpellOnPlayers(PRESENCE_OF_THE_DARKFALLEN);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action != ACTION_KILL_MINCHAR)
return;
@@ -238,7 +238,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
}
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
_EnterEvadeMode();
CleanAuras();
@@ -256,7 +256,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
}
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
me->SetDisableGravity(false);
me->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND);
@@ -266,13 +266,13 @@ class boss_blood_queen_lana_thel : public CreatureScript
instance->SetBossState(DATA_BLOOD_QUEEN_LANA_THEL, FAIL);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- void SetGUID(uint64 guid, int32 type = 0) OVERRIDE
+ void SetGUID(uint64 guid, int32 type = 0) override
{
switch (type)
{
@@ -287,7 +287,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -325,7 +325,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || !CheckInRoom())
return;
@@ -374,7 +374,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
// both spells have SPELL_ATTR5_SINGLE_TARGET_SPELL, no manual removal needed
newOfftank->CastSpell(me->GetVictim(), SPELL_BLOOD_MIRROR_DAMAGE, true);
- me->GetVictim()->CastSpell(newOfftank, SPELL_BLOOD_MIRROR_DUMMY, true);
+ me->EnsureVictim()->CastSpell(newOfftank, SPELL_BLOOD_MIRROR_DUMMY, true);
DoCastVictim(SPELL_BLOOD_MIRROR_VISUAL);
if (Is25ManRaid() && newOfftank->GetQuestStatus(QUEST_BLOOD_INFUSION) == QUEST_STATUS_INCOMPLETE &&
newOfftank->HasAura(SPELL_UNSATED_CRAVING) && !newOfftank->HasAura(SPELL_THIRST_QUENCHED) &&
@@ -502,7 +502,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
bool _killMinchar;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<boss_blood_queen_lana_thelAI>(creature);
}
@@ -520,7 +520,7 @@ class spell_blood_queen_vampiric_bite : public SpellScriptLoader
{
PrepareSpellScript(spell_blood_queen_vampiric_bite_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_PLR))
return false;
@@ -574,7 +574,7 @@ class spell_blood_queen_vampiric_bite : public SpellScriptLoader
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_PRESENCE_OF_THE_DARKFALLEN_2, TRIGGERED_FULL_MASK);
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_blood_queen_vampiric_bite_SpellScript::CheckTarget);
BeforeHit += SpellHitFn(spell_blood_queen_vampiric_bite_SpellScript::OnCast);
@@ -582,7 +582,7 @@ class spell_blood_queen_vampiric_bite : public SpellScriptLoader
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_blood_queen_vampiric_bite_SpellScript();
}
@@ -620,14 +620,14 @@ class spell_blood_queen_frenzied_bloodthirst : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_blood_queen_frenzied_bloodthirst_AuraScript::OnApply, EFFECT_0, SPELL_AURA_OVERRIDE_SPELLS, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_blood_queen_frenzied_bloodthirst_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_OVERRIDE_SPELLS, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_blood_queen_frenzied_bloodthirst_AuraScript();
}
@@ -656,14 +656,14 @@ class spell_blood_queen_bloodbolt : public SpellScriptLoader
{
PrepareSpellScript(spell_blood_queen_bloodbolt_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TWILIGHT_BLOODBOLT))
return false;
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetEntry() == NPC_BLOOD_QUEEN_LANA_THEL;
}
@@ -684,14 +684,14 @@ class spell_blood_queen_bloodbolt : public SpellScriptLoader
GetCaster()->CastSpell(GetHitUnit(), SPELL_TWILIGHT_BLOODBOLT, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_blood_queen_bloodbolt_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
OnEffectHitTarget += SpellEffectFn(spell_blood_queen_bloodbolt_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_blood_queen_bloodbolt_SpellScript();
}
@@ -707,7 +707,7 @@ class spell_blood_queen_essence_of_the_blood_queen : public SpellScriptLoader
{
PrepareAuraScript(spell_blood_queen_essence_of_the_blood_queen_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL))
return false;
@@ -721,13 +721,13 @@ class spell_blood_queen_essence_of_the_blood_queen : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL, SPELLVALUE_BASE_POINT0, heal, GetTarget(), TRIGGERED_FULL_MASK, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_blood_queen_essence_of_the_blood_queen_AuraScript::OnProc, EFFECT_1, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_blood_queen_essence_of_the_blood_queen_AuraScript();
}
@@ -769,13 +769,13 @@ class spell_blood_queen_pact_of_the_darkfallen : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_blood_queen_pact_of_the_darkfallen_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_blood_queen_pact_of_the_darkfallen_SpellScript();
}
@@ -790,7 +790,7 @@ class spell_blood_queen_pact_of_the_darkfallen_dmg : public SpellScriptLoader
{
PrepareAuraScript(spell_blood_queen_pact_of_the_darkfallen_dmg_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PACT_OF_THE_DARKFALLEN_DAMAGE))
return false;
@@ -807,13 +807,13 @@ class spell_blood_queen_pact_of_the_darkfallen_dmg : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_PACT_OF_THE_DARKFALLEN_DAMAGE, SPELLVALUE_BASE_POINT0, damage, GetTarget(), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_blood_queen_pact_of_the_darkfallen_dmg_AuraScript::PeriodicTick, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_blood_queen_pact_of_the_darkfallen_dmg_AuraScript();
}
@@ -834,13 +834,13 @@ class spell_blood_queen_pact_of_the_darkfallen_dmg_target : public SpellScriptLo
unitList.push_back(GetCaster());
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_blood_queen_pact_of_the_darkfallen_dmg_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_blood_queen_pact_of_the_darkfallen_dmg_SpellScript();
}
@@ -851,7 +851,7 @@ class achievement_once_bitten_twice_shy_n : public AchievementCriteriaScript
public:
achievement_once_bitten_twice_shy_n() : AchievementCriteriaScript("achievement_once_bitten_twice_shy_n") { }
- bool OnCheck(Player* source, Unit* target) OVERRIDE
+ bool OnCheck(Player* source, Unit* target) override
{
if (!target)
return false;
@@ -867,7 +867,7 @@ class achievement_once_bitten_twice_shy_v : public AchievementCriteriaScript
public:
achievement_once_bitten_twice_shy_v() : AchievementCriteriaScript("achievement_once_bitten_twice_shy_v") { }
- bool OnCheck(Player* source, Unit* target) OVERRIDE
+ bool OnCheck(Player* source, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
index e8048404027..5ef84c7bb40 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
@@ -254,7 +254,7 @@ class boss_deathbringer_saurfang : public CreatureScript
_fallenChampionCastCount = 0;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
me->SetReactState(REACT_DEFENSIVE);
@@ -271,7 +271,7 @@ class boss_deathbringer_saurfang : public CreatureScript
me->RemoveAurasDueToSpell(SPELL_FRENZY);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (_dead)
return;
@@ -299,6 +299,12 @@ class boss_deathbringer_saurfang : public CreatureScript
_introDone = true;
+ if (GameObject* teleporter = GameObject::GetGameObject(*me, instance->GetData64(GO_SCOURGE_TRANSPORTER_DEATHBRINGER)))
+ {
+ instance->HandleGameObject(0, false, teleporter);
+ teleporter->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ }
+
Talk(SAY_AGGRO);
events.ScheduleEvent(EVENT_SUMMON_BLOOD_BEAST, 30000, 0, PHASE_COMBAT);
events.ScheduleEvent(EVENT_BERSERK, IsHeroic() ? 360000 : 480000, 0, PHASE_COMBAT);
@@ -311,11 +317,11 @@ class boss_deathbringer_saurfang : public CreatureScript
instance->SetBossState(DATA_DEATHBRINGER_SAURFANG, IN_PROGRESS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
}
- void AttackStart(Unit* victim) OVERRIDE
+ void AttackStart(Unit* victim) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC))
return;
@@ -323,14 +329,14 @@ class boss_deathbringer_saurfang : public CreatureScript
ScriptedAI::AttackStart(victim);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
ScriptedAI::EnterEvadeMode();
if (_introDone)
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
_JustReachedHome();
Reset();
@@ -338,13 +344,13 @@ class boss_deathbringer_saurfang : public CreatureScript
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_MARK_OF_THE_FALLEN_CHAMPION);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if (damage >= me->GetHealth())
damage = me->GetHealth() - 1;
@@ -374,7 +380,7 @@ class boss_deathbringer_saurfang : public CreatureScript
}
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true))
{
@@ -394,12 +400,12 @@ class boss_deathbringer_saurfang : public CreatureScript
DoZoneInCombat(summon);
}
- void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) OVERRIDE
+ void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override
{
summons.Despawn(summon);
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE && id != POINT_SAURFANG)
return;
@@ -407,7 +413,7 @@ class boss_deathbringer_saurfang : public CreatureScript
instance->HandleGameObject(instance->GetData64(GO_SAURFANG_S_DOOR), false);
}
- void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, SpellInfo const* spell) override
{
if (target->GetTransport())
{
@@ -432,14 +438,14 @@ class boss_deathbringer_saurfang : public CreatureScript
}
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_BLOOD_LINK_POWER)
if (Aura* bloodPower = me->GetAura(SPELL_BLOOD_POWER))
bloodPower->RecalculateAmountOfEffects();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() && !(events.IsInPhase(PHASE_INTRO_A) || events.IsInPhase(PHASE_INTRO_H)))
return;
@@ -521,7 +527,7 @@ class boss_deathbringer_saurfang : public CreatureScript
DoMeleeAttackIfReady();
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_MADE_A_MESS)
if (_fallenChampionCastCount < RAID_MODE<uint32>(3, 5, 3, 5))
@@ -531,19 +537,13 @@ class boss_deathbringer_saurfang : public CreatureScript
}
// intro setup
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
case PHASE_INTRO_A:
case PHASE_INTRO_H:
{
- if (GameObject* teleporter = GameObject::GetGameObject(*me, instance->GetData64(GO_SCOURGE_TRANSPORTER_SAURFANG)))
- {
- instance->HandleGameObject(0, false, teleporter);
- teleporter->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
- }
-
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
// controls what events will execute
events.SetPhase(uint32(action));
@@ -587,7 +587,7 @@ class boss_deathbringer_saurfang : public CreatureScript
}
}
- bool CanAIAttack(Unit const* target) const OVERRIDE
+ bool CanAIAttack(Unit const* target) const override
{
if (target->GetTransport())
return false;
@@ -604,7 +604,7 @@ class boss_deathbringer_saurfang : public CreatureScript
bool _dead;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<boss_deathbringer_saurfangAI>(creature);
}
@@ -625,12 +625,12 @@ class npc_high_overlord_saurfang_icc : public CreatureScript
_instance = me->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -681,7 +681,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript
}
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_GRIP_OF_AGONY)
{
@@ -690,7 +690,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == POINT_MOTION_TYPE)
{
@@ -735,7 +735,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
while (uint32 eventId = _events.ExecuteEvent())
@@ -794,7 +794,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript
std::list<Creature*> _guardList;
};
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
InstanceScript* instance = creature->GetInstanceScript();
if (instance && instance->GetBossState(DATA_DEATHBRINGER_SAURFANG) != DONE)
@@ -806,7 +806,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
player->CLOSE_GOSSIP_MENU();
@@ -816,7 +816,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_high_overlord_saurfangAI>(creature);
}
@@ -834,12 +834,12 @@ class npc_muradin_bronzebeard_icc : public CreatureScript
_instance = me->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -886,7 +886,7 @@ class npc_muradin_bronzebeard_icc : public CreatureScript
}
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_GRIP_OF_AGONY)
{
@@ -895,7 +895,7 @@ class npc_muradin_bronzebeard_icc : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == POINT_MOTION_TYPE && id == POINT_FIRST_STEP)
{
@@ -915,7 +915,7 @@ class npc_muradin_bronzebeard_icc : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
while (uint32 eventId = _events.ExecuteEvent())
@@ -942,7 +942,7 @@ class npc_muradin_bronzebeard_icc : public CreatureScript
std::list<Creature*> _guardList;
};
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
InstanceScript* instance = creature->GetInstanceScript();
if (instance && instance->GetBossState(DATA_DEATHBRINGER_SAURFANG) != DONE)
@@ -954,7 +954,7 @@ class npc_muradin_bronzebeard_icc : public CreatureScript
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
player->CLOSE_GOSSIP_MENU();
@@ -964,7 +964,7 @@ class npc_muradin_bronzebeard_icc : public CreatureScript
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_muradin_bronzebeard_iccAI>(creature);
}
@@ -982,13 +982,13 @@ class npc_saurfang_event : public CreatureScript
_index = 0;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
ASSERT(!type && data && data < 6);
_index = data;
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_GRIP_OF_AGONY)
{
@@ -997,7 +997,7 @@ class npc_saurfang_event : public CreatureScript
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_CHARGE && _index)
me->GetMotionMaster()->MoveCharge(chargePos[_index].GetPositionX(), chargePos[_index].GetPositionY(), chargePos[_index].GetPositionZ(), 13.0f, POINT_CHARGE);
@@ -1009,7 +1009,7 @@ class npc_saurfang_event : public CreatureScript
uint32 _index;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_saurfang_eventAI>(creature);
}
@@ -1024,7 +1024,7 @@ class spell_deathbringer_blood_link : public SpellScriptLoader
{
PrepareSpellScript(spell_deathbringer_blood_link_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_BLOOD_LINK_POWER))
return false;
@@ -1039,13 +1039,13 @@ class spell_deathbringer_blood_link : public SpellScriptLoader
PreventHitDefaultEffect(EFFECT_0);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_deathbringer_blood_link_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_deathbringer_blood_link_SpellScript();
}
@@ -1060,7 +1060,7 @@ class spell_deathbringer_blood_link_aura : public SpellScriptLoader
{
PrepareAuraScript(spell_deathbringer_blood_link_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MARK_OF_THE_FALLEN_CHAMPION))
return false;
@@ -1075,13 +1075,13 @@ class spell_deathbringer_blood_link_aura : public SpellScriptLoader
saurfang->AI()->DoAction(ACTION_MARK_OF_THE_FALLEN_CHAMPION);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_deathbringer_blood_link_AuraScript::HandlePeriodicTick, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_deathbringer_blood_link_AuraScript();
}
@@ -1102,7 +1102,7 @@ class spell_deathbringer_blood_power : public SpellScriptLoader
aura->RecalculateAmountOfEffects();
}
- void Register() OVERRIDE
+ void Register() override
{
AfterHit += SpellHitFn(spell_deathbringer_blood_power_SpellScript::ModAuraValue);
}
@@ -1118,19 +1118,19 @@ class spell_deathbringer_blood_power : public SpellScriptLoader
canBeRecalculated = true;
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_deathbringer_blood_power_AuraScript::RecalculateHook, EFFECT_0, SPELL_AURA_MOD_SCALE);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_deathbringer_blood_power_AuraScript::RecalculateHook, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_deathbringer_blood_power_SpellScript();
}
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_deathbringer_blood_power_AuraScript();
}
@@ -1145,7 +1145,7 @@ class spell_deathbringer_rune_of_blood : public SpellScriptLoader
{
PrepareSpellScript(spell_deathbringer_rune_of_blood_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_BLOOD_LINK_DUMMY))
return false;
@@ -1159,13 +1159,13 @@ class spell_deathbringer_rune_of_blood : public SpellScriptLoader
GetHitUnit()->CastCustomSpell(SPELL_BLOOD_LINK_DUMMY, SPELLVALUE_BASE_POINT0, 1, GetCaster(), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_deathbringer_rune_of_blood_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_deathbringer_rune_of_blood_SpellScript();
}
@@ -1180,7 +1180,7 @@ class spell_deathbringer_blood_nova : public SpellScriptLoader
{
PrepareSpellScript(spell_deathbringer_blood_nova_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_BLOOD_LINK_DUMMY))
return false;
@@ -1194,13 +1194,13 @@ class spell_deathbringer_blood_nova : public SpellScriptLoader
GetHitUnit()->CastCustomSpell(SPELL_BLOOD_LINK_DUMMY, SPELLVALUE_BASE_POINT0, 2, GetCaster(), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_deathbringer_blood_nova_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_deathbringer_blood_nova_SpellScript();
}
@@ -1215,7 +1215,7 @@ class spell_deathbringer_blood_nova_targeting : public SpellScriptLoader
{
PrepareSpellScript(spell_deathbringer_blood_nova_targeting_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
// initialize variable
target = NULL;
@@ -1227,9 +1227,9 @@ class spell_deathbringer_blood_nova_targeting : public SpellScriptLoader
if (targets.empty())
return;
- // select one random target, with preference of ranged targets
+ // select one random target, preferring ranged targets
uint32 targetsAtRange = 0;
- uint32 const minTargets = uint32(GetCaster()->GetMap()->GetSpawnMode() & 1 ? 10 : 4);
+ uint32 const minTargets = uint32(GetCaster()->GetMap()->Is25ManRaid() ? 10 : 4);
targets.sort(Trinity::ObjectDistanceOrderPred(GetCaster(), false));
// get target count at range
@@ -1237,18 +1237,12 @@ class spell_deathbringer_blood_nova_targeting : public SpellScriptLoader
if ((*itr)->GetDistance(GetCaster()) < 12.0f)
break;
- // set the upper cap
+ // If not enough ranged targets are present just select anyone
if (targetsAtRange < minTargets)
- targetsAtRange = std::min<uint32>(targets.size() - 1, minTargets);
-
- if (!targetsAtRange)
- {
- targets.clear();
- return;
- }
+ targetsAtRange = uint32(targets.size());
std::list<WorldObject*>::const_iterator itr = targets.begin();
- std::advance(itr, urand(0, targetsAtRange));
+ std::advance(itr, urand(0, targetsAtRange - 1));
target = *itr;
targets.clear();
targets.push_back(target);
@@ -1269,7 +1263,7 @@ class spell_deathbringer_blood_nova_targeting : public SpellScriptLoader
GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), TRIGGERED_FULL_MASK);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_deathbringer_blood_nova_targeting_SpellScript::FilterTargetsInitial, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_deathbringer_blood_nova_targeting_SpellScript::FilterTargetsSubsequent, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
@@ -1279,7 +1273,7 @@ class spell_deathbringer_blood_nova_targeting : public SpellScriptLoader
WorldObject* target;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_deathbringer_blood_nova_targeting_SpellScript();
}
@@ -1294,7 +1288,7 @@ class spell_deathbringer_boiling_blood : public SpellScriptLoader
{
PrepareSpellScript(spell_deathbringer_boiling_blood_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
@@ -1310,13 +1304,13 @@ class spell_deathbringer_boiling_blood : public SpellScriptLoader
targets.push_back(target);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_deathbringer_boiling_blood_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_deathbringer_boiling_blood_SpellScript();
}
@@ -1337,13 +1331,13 @@ class spell_deathbringer_remove_marks : public SpellScriptLoader
GetHitUnit()->RemoveAurasDueToSpell(uint32(GetEffectValue()));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_deathbringer_remove_marks_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_deathbringer_remove_marks_SpellScript();
}
@@ -1354,7 +1348,7 @@ class achievement_ive_gone_and_made_a_mess : public AchievementCriteriaScript
public:
achievement_ive_gone_and_made_a_mess() : AchievementCriteriaScript("achievement_ive_gone_and_made_a_mess") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
if (target)
if (Creature* saurfang = target->ToCreature())
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
index 884baaf39c7..90d91199e7a 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
@@ -20,6 +20,7 @@
#include "ScriptedCreature.h"
#include "SpellAuras.h"
#include "icecrown_citadel.h"
+#include "Player.h"
enum ScriptTexts
{
@@ -90,7 +91,7 @@ class boss_festergut : public CreatureScript
_gasDummyGUID = 0;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
me->SetReactState(REACT_DEFENSIVE);
@@ -112,7 +113,7 @@ class boss_festergut : public CreatureScript
}
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (!instance->CheckRequiredBosses(DATA_FESTERGUT, who->ToPlayer()))
{
@@ -130,7 +131,7 @@ class boss_festergut : public CreatureScript
DoZoneInCombat();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
@@ -140,32 +141,32 @@ class boss_festergut : public CreatureScript
RemoveBlight();
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
_JustReachedHome();
instance->SetBossState(DATA_FESTERGUT, FAIL);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
ScriptedAI::EnterEvadeMode();
if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
professor->AI()->EnterEvadeMode();
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, SpellInfo const* spell) override
{
if (spell->Id == PUNGENT_BLIGHT_HELPER)
target->RemoveAurasDueToSpell(INOCULATED_HELPER);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || !CheckInRoom())
return;
@@ -253,13 +254,13 @@ class boss_festergut : public CreatureScript
DoMeleeAttackIfReady();
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
if (type == DATA_INOCULATED_STACK && data > _maxInoculatedStack)
_maxInoculatedStack = data;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_INOCULATED_STACK)
return uint32(_maxInoculatedStack);
@@ -283,7 +284,7 @@ class boss_festergut : public CreatureScript
uint32 _inhaleCounter;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<boss_festergutAI>(creature);
}
@@ -301,19 +302,19 @@ class npc_stinky_icc : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_DECIMATE, urand(20000, 25000));
_events.ScheduleEvent(EVENT_MORTAL_WOUND, urand(3000, 7000));
}
- void EnterCombat(Unit* /*target*/) OVERRIDE
+ void EnterCombat(Unit* /*target*/) override
{
DoCast(me, SPELL_PLAGUE_STENCH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -343,9 +344,9 @@ class npc_stinky_icc : public CreatureScript
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
- if (Creature* festergut = me->GetCreature(*me, _instance->GetData64(DATA_FESTERGUT)))
+ if (Creature* festergut = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FESTERGUT)))
if (festergut->IsAlive())
festergut->AI()->Talk(SAY_STINKY_DEAD);
}
@@ -355,7 +356,7 @@ class npc_stinky_icc : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_stinky_iccAI>(creature);
}
@@ -370,7 +371,7 @@ class spell_festergut_pungent_blight : public SpellScriptLoader
{
PrepareSpellScript(spell_festergut_pungent_blight_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
@@ -385,13 +386,13 @@ class spell_festergut_pungent_blight : public SpellScriptLoader
GetCaster()->ToCreature()->AI()->Talk(EMOTE_PUNGENT_BLIGHT);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_festergut_pungent_blight_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_festergut_pungent_blight_SpellScript();
}
@@ -406,7 +407,7 @@ class spell_festergut_gastric_bloat : public SpellScriptLoader
{
PrepareSpellScript(spell_festergut_gastric_bloat_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_GASTRIC_EXPLOSION))
return false;
@@ -423,13 +424,13 @@ class spell_festergut_gastric_bloat : public SpellScriptLoader
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_GASTRIC_EXPLOSION, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_festergut_gastric_bloat_SpellScript::HandleScript, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_festergut_gastric_bloat_SpellScript();
}
@@ -444,7 +445,7 @@ class spell_festergut_blighted_spores : public SpellScriptLoader
{
PrepareAuraScript(spell_festergut_blighted_spores_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_INOCULATED))
return false;
@@ -457,15 +458,43 @@ class spell_festergut_blighted_spores : public SpellScriptLoader
if (InstanceScript* instance = GetTarget()->GetInstanceScript())
if (Creature* festergut = ObjectAccessor::GetCreature(*GetTarget(), instance->GetData64(DATA_FESTERGUT)))
festergut->AI()->SetData(DATA_INOCULATED_STACK, GetStackAmount());
+
+ HandleResidue();
+ }
+
+ void HandleResidue()
+ {
+ Player* target = GetUnitOwner()->ToPlayer();
+ if (!target)
+ return;
+
+ if (target->HasAura(SPELL_ORANGE_BLIGHT_RESIDUE))
+ return;
+
+ if (target->GetMap() && !target->GetMap()->Is25ManRaid())
+ {
+ if (target->GetQuestStatus(QUEST_RESIDUE_RENDEZVOUS_10) != QUEST_STATUS_INCOMPLETE)
+ return;
+
+ target->CastSpell(target, SPELL_ORANGE_BLIGHT_RESIDUE, TRIGGERED_FULL_MASK);
+ }
+
+ if (target->GetMap() && target->GetMap()->Is25ManRaid())
+ {
+ if (target->GetQuestStatus(QUEST_RESIDUE_RENDEZVOUS_25) != QUEST_STATUS_INCOMPLETE)
+ return;
+
+ target->CastSpell(target, SPELL_ORANGE_BLIGHT_RESIDUE, TRIGGERED_FULL_MASK);
+ }
}
- void Register() OVERRIDE
+ void Register() override
{
- AfterEffectApply += AuraEffectApplyFn(spell_festergut_blighted_spores_AuraScript::ExtraEffect, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ OnEffectRemove += AuraEffectApplyFn(spell_festergut_blighted_spores_AuraScript::ExtraEffect, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_festergut_blighted_spores_AuraScript();
}
@@ -476,7 +505,7 @@ class achievement_flu_shot_shortage : public AchievementCriteriaScript
public:
achievement_flu_shot_shortage() : AchievementCriteriaScript("achievement_flu_shot_shortage") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
if (target && target->GetTypeId() == TYPEID_UNIT)
return target->ToCreature()->AI()->GetData(DATA_INOCULATED_STACK) < 3;
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 0a9e207db36..535ace3259c 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
@@ -205,8 +205,8 @@ enum EncounterActions
ACTION_SHIP_VISITS = 5
};
-Position const SkybreakerAddsSpawnPos = { 15.91131f, 0.0f, 20.4628f, M_PI };
-Position const OrgrimsHammerAddsSpawnPos = { 60.728395f, 0.0f, 38.93467f, M_PI };
+Position const SkybreakerAddsSpawnPos = { 15.91131f, 0.0f, 20.4628f, float(M_PI) };
+Position const OrgrimsHammerAddsSpawnPos = { 60.728395f, 0.0f, 38.93467f, float(M_PI) };
// Horde encounter
Position const SkybreakerTeleportPortal = { 6.666975f, 0.013001f, 20.87888f, 0.0f };
@@ -439,7 +439,7 @@ private:
Position SelectSpawnPoint() const
{
Position newPos;
- float angle = frand(-M_PI * 0.5f, M_PI * 0.5f);
+ float angle = frand(float(-M_PI) * 0.5f, float(M_PI) * 0.5f);
newPos.m_positionX = _spawnPoint->GetPositionX() + 2.0f * std::cos(angle);
newPos.m_positionY = _spawnPoint->GetPositionY() + 2.0f * std::sin(angle);
newPos.m_positionZ = _spawnPoint->GetPositionZ();
@@ -459,7 +459,7 @@ class DelayedMovementEvent : public BasicEvent
public:
DelayedMovementEvent(Creature* owner, Position const& dest) : _owner(owner), _dest(dest) { }
- bool Execute(uint64, uint32) OVERRIDE
+ bool Execute(uint64, uint32) override
{
if (!_owner->IsAlive())
return true;
@@ -484,7 +484,7 @@ class ResetEncounterEvent : public BasicEvent
public:
ResetEncounterEvent(Unit* caster, uint32 spellId, uint64 otherTransport) : _caster(caster), _spellId(spellId), _otherTransport(otherTransport) { }
- bool Execute(uint64, uint32) OVERRIDE
+ bool Execute(uint64, uint32) override
{
_caster->CastSpell(_caster, _spellId, true);
_caster->GetTransport()->AddObjectToRemoveList();
@@ -509,7 +509,7 @@ public:
BattleExperienceEvent(Creature* creature) : _creature(creature), _level(0) { }
- bool Execute(uint64 timer, uint32 /*diff*/) OVERRIDE
+ bool Execute(uint64 timer, uint32 /*diff*/) override
{
if (!_creature->IsAlive())
return true;
@@ -544,7 +544,7 @@ struct gunship_npc_AI : public ScriptedAI
me->setRegeneratingHealth(false);
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
if (type == ACTION_SET_SLOT && data < MAX_SLOTS)
{
@@ -569,7 +569,7 @@ struct gunship_npc_AI : public ScriptedAI
}
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
if (!me->IsAlive() || !me->IsInCombat())
return;
@@ -579,14 +579,14 @@ struct gunship_npc_AI : public ScriptedAI
me->GetMotionMaster()->MoveTargetedHome();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Slot)
if (Creature* captain = me->FindNearestCreature(Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? NPC_IGB_MURADIN_BRONZEBEARD : NPC_IGB_HIGH_OVERLORD_SAURFANG, 200.0f))
captain->AI()->SetData(ACTION_CLEAR_SLOT, Index);
}
- void MovementInform(uint32 type, uint32 pointId) OVERRIDE
+ void MovementInform(uint32 type, uint32 pointId) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -600,7 +600,7 @@ struct gunship_npc_AI : public ScriptedAI
}
}
- bool CanAIAttack(Unit const* target) const OVERRIDE
+ bool CanAIAttack(Unit const* target) const override
{
if (Instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != IN_PROGRESS)
return false;
@@ -626,7 +626,8 @@ protected:
{
if (Unit* victim = me->SelectVictim())
AttackStart(victim);
- return me->GetVictim();
+
+ return me->GetVictim() != nullptr;
}
else if (me->getThreatManager().isThreatListEmpty())
{
@@ -668,7 +669,7 @@ class npc_gunship : public CreatureScript
me->setRegeneratingHealth(false);
}
- void DamageTaken(Unit* /*source*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*source*/, uint32& damage) override
{
if (damage >= me->GetHealth())
{
@@ -691,7 +692,7 @@ class npc_gunship : public CreatureScript
captain->AI()->DoAction(ACTION_SPAWN_MAGE);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (_died)
return;
@@ -795,7 +796,7 @@ class npc_gunship : public CreatureScript
}
}
- void SetGUID(uint64 guid, int32 id/* = 0*/) OVERRIDE
+ void SetGUID(uint64 guid, int32 id/* = 0*/) override
{
if (id != ACTION_SHIP_VISITS)
return;
@@ -807,7 +808,7 @@ class npc_gunship : public CreatureScript
++itr->second;
}
- uint32 GetData(uint32 id) const OVERRIDE
+ uint32 GetData(uint32 id) const override
{
if (id != ACTION_SHIP_VISITS)
return 0;
@@ -826,7 +827,7 @@ class npc_gunship : public CreatureScript
bool _died;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
if (!creature->GetTransport())
return NULL;
@@ -854,7 +855,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript
_rocketeersYellCooldown = time_t(0);
}
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
ScriptedAI::InitializeAI();
@@ -864,7 +865,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript
_rocketeersYellCooldown = time_t(0);
}
- void EnterCombat(Unit* /*target*/) OVERRIDE
+ void EnterCombat(Unit* /*target*/) override
{
_events.SetPhase(PHASE_COMBAT);
DoCast(me, _instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_FRIENDLY_BOSS_DAMAGE_MOD : SPELL_MELEE_TARGETING_ON_ORGRIMS_HAMMER, true);
@@ -872,7 +873,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript
_events.ScheduleEvent(EVENT_CLEAVE, urand(2000, 10000));
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
if (!me->IsAlive())
return;
@@ -884,7 +885,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript
Reset();
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_ENEMY_GUNSHIP_TALK)
{
@@ -948,7 +949,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript
}
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
if (type == ACTION_CLEAR_SLOT)
{
@@ -958,7 +959,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript
}
}
- void sGossipSelect(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/) OVERRIDE
+ void sGossipSelect(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/) override
{
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
me->GetTransport()->EnableMovement(true);
@@ -970,7 +971,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript
_events.ScheduleEvent(EVENT_INTRO_H_4, 39200, 0, PHASE_INTRO);
}
- void DamageTaken(Unit* , uint32& damage) OVERRIDE
+ void DamageTaken(Unit* , uint32& damage) override
{
if (me->HealthBelowPctDamaged(65, damage) && !me->HasAura(SPELL_TASTE_OF_BLOOD))
DoCast(me, SPELL_TASTE_OF_BLOOD, true);
@@ -979,7 +980,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript
damage = me->GetHealth() - 1;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() && !_events.IsInPhase(PHASE_INTRO) && _instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != IN_PROGRESS)
return;
@@ -1082,7 +1083,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript
}
}
- bool CanAIAttack(Unit const* target) const OVERRIDE
+ bool CanAIAttack(Unit const* target) const override
{
if (_instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != IN_PROGRESS)
return false;
@@ -1098,7 +1099,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript
time_t _rocketeersYellCooldown;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_high_overlord_saurfang_igbAI>(creature);
}
@@ -1123,7 +1124,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript
_mortarYellCooldown = time_t(0);
}
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
ScriptedAI::InitializeAI();
@@ -1133,7 +1134,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript
_mortarYellCooldown = time_t(0);
}
- void EnterCombat(Unit* /*target*/) OVERRIDE
+ void EnterCombat(Unit* /*target*/) override
{
_events.SetPhase(PHASE_COMBAT);
DoCast(me, _instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE ? SPELL_FRIENDLY_BOSS_DAMAGE_MOD : SPELL_MELEE_TARGETING_ON_SKYBREAKER, true);
@@ -1141,7 +1142,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript
_events.ScheduleEvent(EVENT_CLEAVE, urand(2000, 10000));
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
if (!me->IsAlive())
return;
@@ -1153,7 +1154,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript
Reset();
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_ENEMY_GUNSHIP_TALK)
{
@@ -1217,7 +1218,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript
}
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
if (type == ACTION_CLEAR_SLOT)
{
@@ -1227,7 +1228,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript
}
}
- void sGossipSelect(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/) OVERRIDE
+ void sGossipSelect(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/) override
{
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
me->GetTransport()->EnableMovement(true);
@@ -1240,7 +1241,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript
_events.ScheduleEvent(EVENT_INTRO_A_5, 45000, 0, PHASE_INTRO);
}
- void DamageTaken(Unit* , uint32& damage) OVERRIDE
+ void DamageTaken(Unit* , uint32& damage) override
{
if (me->HealthBelowPctDamaged(65, damage) && me->HasAura(SPELL_TASTE_OF_BLOOD))
DoCast(me, SPELL_TASTE_OF_BLOOD, true);
@@ -1249,7 +1250,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript
damage = me->GetHealth() - 1;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() && !_events.IsInPhase(PHASE_INTRO) && _instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != IN_PROGRESS)
return;
@@ -1355,7 +1356,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript
}
}
- bool CanAIAttack(Unit const* target) const OVERRIDE
+ bool CanAIAttack(Unit const* target) const override
{
if (_instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != IN_PROGRESS)
return false;
@@ -1371,7 +1372,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript
time_t _mortarYellCooldown;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_muradin_bronzebeard_igbAI>(creature);
}
@@ -1388,24 +1389,24 @@ class npc_zafod_boombox : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetReactState(REACT_PASSIVE);
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE
+ void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
{
player->AddItem(ITEM_GOBLIN_ROCKET_PACK, 1);
player->PlayerTalkClass->SendCloseGossip();
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
UpdateVictim();
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_zafod_boomboxAI>(creature);
}
@@ -1419,7 +1420,7 @@ struct npc_gunship_boarding_addAI : public gunship_npc_AI
_usedDesperateResolve = false;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
// detach from captain
if (type == ACTION_SET_SLOT)
@@ -1435,7 +1436,7 @@ struct npc_gunship_boarding_addAI : public gunship_npc_AI
}
}
- void MovementInform(uint32 type, uint32 pointId) OVERRIDE
+ void MovementInform(uint32 type, uint32 pointId) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -1454,7 +1455,7 @@ struct npc_gunship_boarding_addAI : public gunship_npc_AI
if (Transport* destTransport = go->ToTransport())
destTransport->CalculatePassengerPosition(x, y, z, &o);
- float angle = frand(0, M_PI * 2.0f);
+ float angle = frand(0, float(M_PI) * 2.0f);
x += 2.0f * std::cos(angle);
y += 2.0f * std::sin(angle);
@@ -1491,7 +1492,7 @@ struct npc_gunship_boarding_addAI : public gunship_npc_AI
}
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if (_usedDesperateResolve)
return;
@@ -1503,7 +1504,7 @@ struct npc_gunship_boarding_addAI : public gunship_npc_AI
DoCast(me, SPELL_DESPERATE_RESOLVE, true);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!SelectVictim())
{
@@ -1517,7 +1518,7 @@ struct npc_gunship_boarding_addAI : public gunship_npc_AI
DoMeleeAttackIfReady();
}
- bool CanAIAttack(Unit const* target) const OVERRIDE
+ bool CanAIAttack(Unit const* target) const override
{
uint32 spellId = SPELL_ON_SKYBREAKER_DECK;
uint32 creatureEntry = NPC_IGB_MURADIN_BRONZEBEARD;
@@ -1560,14 +1561,14 @@ class npc_gunship_boarding_leader : public CreatureScript
{
}
- void EnterCombat(Unit* target) OVERRIDE
+ void EnterCombat(Unit* target) override
{
npc_gunship_boarding_addAI::EnterCombat(target);
_events.ScheduleEvent(EVENT_BLADESTORM, urand(13000, 18000));
_events.ScheduleEvent(EVENT_WOUNDING_STRIKE, urand(8000, 10000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!SelectVictim())
{
@@ -1607,7 +1608,7 @@ class npc_gunship_boarding_leader : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_gunship_boarding_leaderAI>(creature);
}
@@ -1619,7 +1620,7 @@ class npc_gunship_boarding_add : public CreatureScript
npc_gunship_boarding_add() : CreatureScript("npc_gunship_boarding_add") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_gunship_boarding_addAI>(creature);
}
@@ -1637,19 +1638,19 @@ class npc_gunship_gunner : public CreatureScript
creature->m_CombatDistance = 200.0f;
}
- void AttackStart(Unit* target) OVERRIDE
+ void AttackStart(Unit* target) override
{
me->Attack(target, false);
}
- void MovementInform(uint32 type, uint32 pointId) OVERRIDE
+ void MovementInform(uint32 type, uint32 pointId) override
{
gunship_npc_AI::MovementInform(type, pointId);
if (type == POINT_MOTION_TYPE && pointId == EVENT_CHARGE_PREPATH)
me->SetControlled(true, UNIT_STATE_ROOT);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!SelectVictim())
{
@@ -1661,7 +1662,7 @@ class npc_gunship_gunner : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_gunship_gunnerAI>(creature);
}
@@ -1679,14 +1680,14 @@ class npc_gunship_rocketeer : public CreatureScript
creature->m_CombatDistance = 200.0f;
}
- void MovementInform(uint32 type, uint32 pointId) OVERRIDE
+ void MovementInform(uint32 type, uint32 pointId) override
{
gunship_npc_AI::MovementInform(type, pointId);
if (type == POINT_MOTION_TYPE && pointId == EVENT_CHARGE_PREPATH)
me->SetControlled(true, UNIT_STATE_ROOT);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!SelectVictim())
return;
@@ -1703,7 +1704,7 @@ class npc_gunship_rocketeer : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_gunship_rocketeerAI>(creature);
}
@@ -1721,12 +1722,12 @@ class npc_gunship_mage : public CreatureScript
me->SetReactState(REACT_PASSIVE);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
ScriptedAI::EnterEvadeMode();
}
- void MovementInform(uint32 type, uint32 pointId) OVERRIDE
+ void MovementInform(uint32 type, uint32 pointId) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -1752,18 +1753,18 @@ class npc_gunship_mage : public CreatureScript
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
UpdateVictim();
}
- bool CanAIAttack(Unit const* /*target*/) const OVERRIDE
+ bool CanAIAttack(Unit const* /*target*/) const override
{
return true;
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_gunship_mageAI>(creature);
}
@@ -1799,9 +1800,9 @@ class npc_gunship_cannon : public CreatureScript
{
}
- void OnCharmed(bool /*apply*/) OVERRIDE { }
+ void OnCharmed(bool /*apply*/) override { }
- void PassengerBoarded(Unit* /*passenger*/, int8 /*seat*/, bool apply) OVERRIDE
+ void PassengerBoarded(Unit* /*passenger*/, int8 /*seat*/, bool apply) override
{
if (!apply)
{
@@ -1811,7 +1812,7 @@ class npc_gunship_cannon : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_gunship_cannonAI(creature);
}
@@ -1826,7 +1827,7 @@ class spell_igb_rocket_pack : public SpellScriptLoader
{
PrepareAuraScript(spell_igb_rocket_pack_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ROCKET_PACK_DAMAGE) ||
!sSpellMgr->GetSpellInfo(SPELL_ROCKET_BURST))
@@ -1848,14 +1849,14 @@ class spell_igb_rocket_pack : public SpellScriptLoader
GetTarget()->CastSpell(NULL, SPELL_ROCKET_BURST, TRIGGERED_FULL_MASK);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_igb_rocket_pack_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
OnEffectRemove += AuraEffectRemoveFn(spell_igb_rocket_pack_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_igb_rocket_pack_AuraScript();
}
@@ -1872,7 +1873,7 @@ class spell_igb_rocket_pack_useable : public SpellScriptLoader
bool Load()
{
- return GetOwner()->GetInstanceScript();
+ return GetOwner()->GetInstanceScript() != nullptr;
}
bool CheckAreaTarget(Unit* target)
@@ -1896,7 +1897,7 @@ class spell_igb_rocket_pack_useable : public SpellScriptLoader
sCreatureTextMgr->SendChat(owner, SAY_ZAFOD_ROCKET_PACK_DISABLED, target, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, target);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_igb_rocket_pack_useable_AuraScript::CheckAreaTarget);
AfterEffectApply += AuraEffectApplyFn(spell_igb_rocket_pack_useable_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
@@ -1904,7 +1905,7 @@ class spell_igb_rocket_pack_useable : public SpellScriptLoader
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_igb_rocket_pack_useable_AuraScript();
}
@@ -1919,7 +1920,7 @@ class spell_igb_on_gunship_deck : public SpellScriptLoader
{
PrepareAuraScript(spell_igb_on_gunship_deck_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (InstanceScript* instance = GetOwner()->GetInstanceScript())
_teamInInstance = instance->GetData(DATA_TEAM_IN_INSTANCE);
@@ -1940,7 +1941,7 @@ class spell_igb_on_gunship_deck : public SpellScriptLoader
gunship->AI()->SetGUID(GetTarget()->GetGUID(), ACTION_SHIP_VISITS);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_igb_on_gunship_deck_AuraScript::CheckAreaTarget);
AfterEffectApply += AuraEffectApplyFn(spell_igb_on_gunship_deck_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
@@ -1949,7 +1950,7 @@ class spell_igb_on_gunship_deck : public SpellScriptLoader
uint32 _teamInInstance;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_igb_on_gunship_deck_AuraScript();
}
@@ -1970,13 +1971,13 @@ class spell_igb_periodic_trigger_with_power_cost : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_POWER_AND_REAGENT_COST));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_igb_periodic_trigger_with_power_cost_AuraScript::HandlePeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_igb_periodic_trigger_with_power_cost_AuraScript();
}
@@ -2007,13 +2008,13 @@ class spell_igb_cannon_blast : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
AfterHit += SpellHitFn(spell_igb_cannon_blast_SpellScript::CheckEnergy);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_igb_cannon_blast_SpellScript();
}
@@ -2043,7 +2044,7 @@ class spell_igb_incinerating_blast : public SpellScriptLoader
SetEffectValue(GetEffectValue() + _energyLeft * _energyLeft * 8);
}
- void Register() OVERRIDE
+ void Register() override
{
OnCast += SpellCastFn(spell_igb_incinerating_blast_SpellScript::StoreEnergy);
AfterCast += SpellCastFn(spell_igb_incinerating_blast_SpellScript::RemoveEnergy);
@@ -2053,7 +2054,7 @@ class spell_igb_incinerating_blast : public SpellScriptLoader
uint32 _energyLeft;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_igb_incinerating_blast_SpellScript();
}
@@ -2068,7 +2069,7 @@ class spell_igb_overheat : public SpellScriptLoader
{
PrepareAuraScript(spell_igb_overheat_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (GetAura()->GetType() != UNIT_AURA_TYPE)
return false;
@@ -2102,14 +2103,14 @@ class spell_igb_overheat : public SpellScriptLoader
SendClientControl(1);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_igb_overheat_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_igb_overheat_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_igb_overheat_AuraScript();
}
@@ -2129,13 +2130,13 @@ class spell_igb_below_zero : public SpellScriptLoader
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_EJECT_ALL_PASSENGERS_BELOW_ZERO, TRIGGERED_FULL_MASK);
}
- void Register() OVERRIDE
+ void Register() override
{
BeforeHit += SpellHitFn(spell_igb_below_zero_SpellScript::RemovePassengers);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_igb_below_zero_SpellScript();
}
@@ -2163,13 +2164,13 @@ class spell_igb_teleport_to_enemy_ship : public SpellScriptLoader
target->m_movementInfo.transport.pos.Relocate(x, y, z, o);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_igb_teleport_to_enemy_ship_SpellScript::RelocateTransportOffset, EFFECT_0, SPELL_EFFECT_TELEPORT_UNITS);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_igb_teleport_to_enemy_ship_SpellScript();
}
@@ -2211,14 +2212,14 @@ class spell_igb_burning_pitch_selector : public SpellScriptLoader
GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), TRIGGERED_NONE);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_igb_burning_pitch_selector_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
OnEffectHitTarget += SpellEffectFn(spell_igb_burning_pitch_selector_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_igb_burning_pitch_selector_SpellScript();
}
@@ -2240,13 +2241,13 @@ class spell_igb_burning_pitch : public SpellScriptLoader
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_BURNING_PITCH, TRIGGERED_FULL_MASK);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_igb_burning_pitch_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_igb_burning_pitch_SpellScript();
}
@@ -2277,14 +2278,14 @@ class spell_igb_rocket_artillery : public SpellScriptLoader
GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), TRIGGERED_NONE);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_igb_rocket_artillery_SpellScript::SelectRandomTarget, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnEffectHitTarget += SpellEffectFn(spell_igb_rocket_artillery_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_igb_rocket_artillery_SpellScript();
}
@@ -2305,13 +2306,13 @@ class spell_igb_rocket_artillery_explosion : public SpellScriptLoader
GetCaster()->CastCustomSpell(instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_BURNING_PITCH_DAMAGE_A : SPELL_BURNING_PITCH_DAMAGE_H, SPELLVALUE_BASE_POINT0, 5000, NULL, TRIGGERED_FULL_MASK);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_igb_rocket_artillery_explosion_SpellScript::DamageGunship, EFFECT_0, SPELL_EFFECT_TRIGGER_MISSILE);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_igb_rocket_artillery_explosion_SpellScript();
}
@@ -2328,7 +2329,7 @@ class spell_igb_gunship_fall_teleport : public SpellScriptLoader
bool Load()
{
- return GetCaster()->GetInstanceScript();
+ return GetCaster()->GetInstanceScript() != nullptr;
}
void SelectTransport(WorldObject*& target)
@@ -2345,14 +2346,14 @@ class spell_igb_gunship_fall_teleport : public SpellScriptLoader
GetHitDest()->RelocateOffset({ 0.0f, 0.0f, 21.0f, 0.0f });
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_igb_gunship_fall_teleport_SpellScript::SelectTransport, EFFECT_0, TARGET_DEST_NEARBY_ENTRY);
OnEffectLaunch += SpellEffectFn(spell_igb_gunship_fall_teleport_SpellScript::RelocateDest, EFFECT_0, SPELL_EFFECT_TELEPORT_UNITS);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_igb_gunship_fall_teleport_SpellScript();
}
@@ -2367,7 +2368,7 @@ class spell_igb_check_for_players : public SpellScriptLoader
{
PrepareSpellScript(spell_igb_check_for_players_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_playerCount = 0;
return GetCaster()->GetTypeId() == TYPEID_UNIT;
@@ -2390,7 +2391,7 @@ class spell_igb_check_for_players : public SpellScriptLoader
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_GUNSHIP_FALL_TELEPORT, TRIGGERED_FULL_MASK);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_igb_check_for_players_SpellScript::CountTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
AfterCast += SpellCastFn(spell_igb_check_for_players_SpellScript::TriggerWipe);
@@ -2400,7 +2401,7 @@ class spell_igb_check_for_players : public SpellScriptLoader
uint32 _playerCount;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_igb_check_for_players_SpellScript();
}
@@ -2415,9 +2416,9 @@ class spell_igb_teleport_players_on_victory : public SpellScriptLoader
{
PrepareSpellScript(spell_igb_teleport_players_on_victory_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
- return GetCaster()->GetInstanceScript();
+ return GetCaster()->GetInstanceScript() != nullptr;
}
void FilterTargets(std::list<WorldObject*>& targets)
@@ -2429,13 +2430,13 @@ class spell_igb_teleport_players_on_victory : public SpellScriptLoader
});
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_igb_teleport_players_on_victory_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENTRY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_igb_teleport_players_on_victory_SpellScript();
}
@@ -2446,7 +2447,7 @@ class achievement_im_on_a_boat : public AchievementCriteriaScript
public:
achievement_im_on_a_boat() : AchievementCriteriaScript("achievement_im_on_a_boat") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
return target->GetAI() && target->GetAI()->GetData(ACTION_SHIP_VISITS) <= 2;
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
index 6b81bcc46a5..d59e723d070 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
@@ -220,7 +220,7 @@ class boss_lady_deathwhisper : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
me->SetPower(POWER_MANA, me->GetMaxPower(POWER_MANA));
@@ -235,7 +235,7 @@ class boss_lady_deathwhisper : public CreatureScript
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, false);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!_introDone && me->IsWithinDistInMap(who, 110.0f))
@@ -252,7 +252,7 @@ class boss_lady_deathwhisper : public CreatureScript
}
}
- void AttackStart(Unit* victim) OVERRIDE
+ void AttackStart(Unit* victim) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -261,7 +261,7 @@ class boss_lady_deathwhisper : public CreatureScript
me->GetMotionMaster()->MoveChase(victim);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (!instance->CheckRequiredBosses(DATA_LADY_DEATHWHISPER, who->ToPlayer()))
{
@@ -293,7 +293,7 @@ class boss_lady_deathwhisper : public CreatureScript
instance->SetBossState(DATA_LADY_DEATHWHISPER, IN_PROGRESS);
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
Talk(SAY_DEATH);
@@ -334,7 +334,7 @@ class boss_lady_deathwhisper : public CreatureScript
_JustDied();
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
_JustReachedHome();
instance->SetBossState(DATA_LADY_DEATHWHISPER, FAIL);
@@ -347,13 +347,13 @@ class boss_lady_deathwhisper : public CreatureScript
}
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- void DamageTaken(Unit* /*damageDealer*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*damageDealer*/, uint32& damage) override
{
// phase transition
if (events.IsInPhase(PHASE_ONE) && damage > me->GetPower(POWER_MANA))
@@ -379,7 +379,7 @@ class boss_lady_deathwhisper : public CreatureScript
}
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() == NPC_DARNAVAN)
_darnavanGUID = summon->GetGUID();
@@ -402,7 +402,7 @@ class boss_lady_deathwhisper : public CreatureScript
summon->CastSpell(summon, SPELL_ADHERENT_S_DETERMINATION, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if ((!UpdateVictim() && !events.IsInPhase(PHASE_INTRO)) || !CheckInRoom())
return;
@@ -548,7 +548,7 @@ class boss_lady_deathwhisper : public CreatureScript
summon->CastSpell(summon, SPELL_TELEPORT_VISUAL);
}
- void SetGUID(uint64 guid, int32 id/* = 0*/) OVERRIDE
+ void SetGUID(uint64 guid, int32 id/* = 0*/) override
{
if (id != GUID_CULTIST)
return;
@@ -572,12 +572,11 @@ class boss_lady_deathwhisper : public CreatureScript
DoCast(cultist, SPELL_DARK_MARTYRDOM_T);
}
- void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, SpellInfo const* spell) override
{
if (spell->Id == SPELL_DARK_MARTYRDOM_T)
{
- Position pos;
- target->GetPosition(&pos);
+ Position pos = target->GetPosition();
if (target->GetEntry() == NPC_CULT_FANATIC)
me->SummonCreature(NPC_REANIMATED_FANATIC, pos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000);
else
@@ -618,7 +617,7 @@ class boss_lady_deathwhisper : public CreatureScript
bool _introDone;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<boss_lady_deathwhisperAI>(creature);
}
@@ -635,7 +634,7 @@ class npc_cult_fanatic : public CreatureScript
{
npc_cult_fanaticAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
Events.Reset();
Events.ScheduleEvent(EVENT_FANATIC_NECROTIC_STRIKE, urand(10000, 12000));
@@ -645,7 +644,7 @@ class npc_cult_fanatic : public CreatureScript
Events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM, urand(18000, 32000));
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_DARK_TRANSFORMATION)
me->UpdateEntry(NPC_DEFORMED_FANATIC);
@@ -657,7 +656,7 @@ class npc_cult_fanatic : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -697,7 +696,7 @@ class npc_cult_fanatic : public CreatureScript
EventMap Events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_cult_fanaticAI>(creature);
}
@@ -712,7 +711,7 @@ class npc_cult_adherent : public CreatureScript
{
npc_cult_adherentAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
Events.Reset();
Events.ScheduleEvent(EVENT_ADHERENT_FROST_FEVER, urand(10000, 12000));
@@ -723,7 +722,7 @@ class npc_cult_adherent : public CreatureScript
Events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM, urand(18000, 32000));
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_DARK_EMPOWERMENT)
me->UpdateEntry(NPC_EMPOWERED_ADHERENT);
@@ -735,7 +734,7 @@ class npc_cult_adherent : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -783,7 +782,7 @@ class npc_cult_adherent : public CreatureScript
EventMap Events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_cult_adherentAI>(creature);
}
@@ -802,12 +801,12 @@ class npc_vengeful_shade : public CreatureScript
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->AddAura(SPELL_VENGEFUL_BLAST_PASSIVE, me);
}
- void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override
{
switch (spell->Id)
{
@@ -823,7 +822,7 @@ class npc_vengeful_shade : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_vengeful_shadeAI>(creature);
}
@@ -840,7 +839,7 @@ class npc_darnavan : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_DARNAVAN_BLADESTORM, 10000);
@@ -851,7 +850,7 @@ class npc_darnavan : public CreatureScript
_canShatter = true;
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
_events.Reset();
if (Player* owner = killer->GetCharmerOrOwnerPlayerOrPlayerItself())
@@ -867,7 +866,7 @@ class npc_darnavan : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE || id != POINT_DESPAWN)
return;
@@ -875,12 +874,12 @@ class npc_darnavan : public CreatureScript
me->DespawnOrUnsummon();
}
- void EnterCombat(Unit* /*victim*/) OVERRIDE
+ void EnterCombat(Unit* /*victim*/) override
{
Talk(SAY_DARNAVAN_AGGRO);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -890,7 +889,7 @@ class npc_darnavan : public CreatureScript
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
- if (_canShatter && me->GetVictim() && me->GetVictim()->IsImmunedToDamage(SPELL_SCHOOL_MASK_NORMAL))
+ if (_canShatter && me->GetVictim() && me->EnsureVictim()->IsImmunedToDamage(SPELL_SCHOOL_MASK_NORMAL))
{
DoCastVictim(SPELL_SHATTERING_THROW);
_canShatter = false;
@@ -944,7 +943,7 @@ class npc_darnavan : public CreatureScript
bool _canShatter;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_darnavanAI>(creature);
}
@@ -970,13 +969,13 @@ class spell_deathwhisper_mana_barrier : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_deathwhisper_mana_barrier_AuraScript::HandlePeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_deathwhisper_mana_barrier_AuraScript();
}
@@ -1001,13 +1000,13 @@ class spell_cultist_dark_martyrdom : public SpellScriptLoader
GetCaster()->SetDisplayId(uint32(GetCaster()->GetEntry() == NPC_CULT_FANATIC ? 38009 : 38010));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_cultist_dark_martyrdom_SpellScript::HandleEffect, EFFECT_2, SPELL_EFFECT_FORCE_DESELECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_cultist_dark_martyrdom_SpellScript();
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
index 162382e91b0..1ff7e1b1352 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
@@ -135,7 +135,7 @@ class boss_lord_marrowgar : public CreatureScript
_boneSlice = false;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
me->SetSpeed(MOVE_RUN, _baseSpeed, true);
@@ -150,7 +150,7 @@ class boss_lord_marrowgar : public CreatureScript
_boneSpikeImmune.clear();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
@@ -159,27 +159,27 @@ class boss_lord_marrowgar : public CreatureScript
instance->SetBossState(DATA_LORD_MARROWGAR, IN_PROGRESS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
_JustDied();
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
_JustReachedHome();
instance->SetBossState(DATA_LORD_MARROWGAR, FAIL);
instance->SetData(DATA_BONED_ACHIEVEMENT, uint32(true)); // reset
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!_introDone && me->IsWithinDistInMap(who, 70.0f))
@@ -189,7 +189,7 @@ class boss_lord_marrowgar : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || !CheckInRoom())
return;
@@ -274,7 +274,7 @@ class boss_lord_marrowgar : public CreatureScript
DoMeleeAttackIfReady();
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE || id != POINT_TARGET_BONESTORM_PLAYER)
return;
@@ -288,7 +288,7 @@ class boss_lord_marrowgar : public CreatureScript
return &_coldflameLastPos;
}
- uint64 GetGUID(int32 type /*= 0 */) const OVERRIDE
+ uint64 GetGUID(int32 type /*= 0 */) const override
{
switch (type)
{
@@ -309,7 +309,7 @@ class boss_lord_marrowgar : public CreatureScript
return 0LL;
}
- void SetGUID(uint64 guid, int32 type /*= 0 */) OVERRIDE
+ void SetGUID(uint64 guid, int32 type /*= 0 */) override
{
switch (type)
{
@@ -322,7 +322,7 @@ class boss_lord_marrowgar : public CreatureScript
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action != ACTION_CLEAR_SPIKE_IMMUNITIES)
return;
@@ -340,7 +340,7 @@ class boss_lord_marrowgar : public CreatureScript
bool _boneSlice;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<boss_lord_marrowgarAI>(creature);
}
@@ -359,7 +359,7 @@ class npc_coldflame : public CreatureScript
{
}
- void IsSummonedBy(Unit* owner) OVERRIDE
+ void IsSummonedBy(Unit* owner) override
{
if (owner->GetTypeId() != TYPEID_UNIT)
return;
@@ -395,14 +395,13 @@ class npc_coldflame : public CreatureScript
_events.ScheduleEvent(EVENT_COLDFLAME_TRIGGER, 500);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
if (_events.ExecuteEvent() == EVENT_COLDFLAME_TRIGGER)
{
- Position newPos;
- me->GetNearPosition(newPos, 5.0f, 0.0f);
+ Position newPos = me->GetNearPosition(5.0f, 0.0f);
me->NearTeleportTo(newPos.GetPositionX(), newPos.GetPositionY(), me->GetPositionZ(), me->GetOrientation());
DoCast(SPELL_COLDFLAME_SUMMON);
_events.ScheduleEvent(EVENT_COLDFLAME_TRIGGER, 500);
@@ -413,7 +412,7 @@ class npc_coldflame : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_coldflameAI>(creature);
}
@@ -433,7 +432,7 @@ class npc_bone_spike : public CreatureScript
SetCombatMovement(false);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (TempSummon* summ = me->ToTempSummon())
if (Unit* trapped = summ->GetSummoner())
@@ -442,13 +441,13 @@ class npc_bone_spike : public CreatureScript
me->DespawnOrUnsummon();
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
me->DespawnOrUnsummon();
victim->RemoveAurasDueToSpell(SPELL_IMPALED);
}
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
DoCast(summoner, SPELL_IMPALED);
summoner->CastSpell(me, SPELL_RIDE_VEHICLE, true);
@@ -456,7 +455,7 @@ class npc_bone_spike : public CreatureScript
_hasTrappedUnit = true;
}
- void PassengerBoarded(Unit* passenger, int8 /*seat*/, bool apply) OVERRIDE
+ void PassengerBoarded(Unit* passenger, int8 /*seat*/, bool apply) override
{
if (!apply)
return;
@@ -470,7 +469,7 @@ class npc_bone_spike : public CreatureScript
init.Launch();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!_hasTrappedUnit)
return;
@@ -487,7 +486,7 @@ class npc_bone_spike : public CreatureScript
bool _hasTrappedUnit;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_bone_spikeAI>(creature);
}
@@ -522,14 +521,14 @@ class spell_marrowgar_coldflame : public SpellScriptLoader
GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_marrowgar_coldflame_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
OnEffectHitTarget += SpellEffectFn(spell_marrowgar_coldflame_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_marrowgar_coldflame_SpellScript();
}
@@ -551,13 +550,13 @@ class spell_marrowgar_coldflame_bonestorm : public SpellScriptLoader
GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue() + i), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_marrowgar_coldflame_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_marrowgar_coldflame_SpellScript();
}
@@ -587,13 +586,13 @@ class spell_marrowgar_coldflame_damage : public SpellScriptLoader
return true;
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_marrowgar_coldflame_damage_AuraScript::CanBeAppliedOn);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_marrowgar_coldflame_damage_AuraScript();
}
@@ -608,7 +607,7 @@ class spell_marrowgar_bone_spike_graveyard : public SpellScriptLoader
{
PrepareSpellScript(spell_marrowgar_bone_spike_graveyard_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
for (uint32 i = 0; i < 3; ++i)
if (!sSpellMgr->GetSpellInfo(BoneSpikeSummonId[i]))
@@ -617,7 +616,7 @@ class spell_marrowgar_bone_spike_graveyard : public SpellScriptLoader
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT && GetCaster()->IsAIEnabled;
}
@@ -651,14 +650,14 @@ class spell_marrowgar_bone_spike_graveyard : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_marrowgar_bone_spike_graveyard_SpellScript::CheckCast);
OnEffectHitTarget += SpellEffectFn(spell_marrowgar_bone_spike_graveyard_SpellScript::HandleSpikes, EFFECT_1, SPELL_EFFECT_APPLY_AURA);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_marrowgar_bone_spike_graveyard_SpellScript();
}
@@ -675,16 +674,16 @@ class spell_marrowgar_bone_storm : public SpellScriptLoader
void RecalculateDamage()
{
- SetHitDamage(int32(GetHitDamage() / std::max(sqrtf(GetHitUnit()->GetExactDist2d(GetCaster())), 1.0f)));
+ SetHitDamage(int32(GetHitDamage() / std::max(std::sqrt(GetHitUnit()->GetExactDist2d(GetCaster())), 1.0f)));
}
- void Register() OVERRIDE
+ void Register() override
{
OnHit += SpellHitFn(spell_marrowgar_bone_storm_SpellScript::RecalculateDamage);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_marrowgar_bone_storm_SpellScript();
}
@@ -699,7 +698,7 @@ class spell_marrowgar_bone_slice : public SpellScriptLoader
{
PrepareSpellScript(spell_marrowgar_bone_slice_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_targetCount = 0;
return true;
@@ -726,7 +725,7 @@ class spell_marrowgar_bone_slice : public SpellScriptLoader
SetHitDamage(GetHitDamage() / _targetCount);
}
- void Register() OVERRIDE
+ void Register() override
{
BeforeCast += SpellCastFn(spell_marrowgar_bone_slice_SpellScript::ClearSpikeImmunities);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_marrowgar_bone_slice_SpellScript::CountTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
@@ -736,7 +735,7 @@ class spell_marrowgar_bone_slice : public SpellScriptLoader
uint32 _targetCount;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_marrowgar_bone_slice_SpellScript();
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
index ac4d18adb8b..f60a7ba278b 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
@@ -225,7 +225,7 @@ class boss_professor_putricide : public CreatureScript
_phase = PHASE_NONE;
}
- void Reset() OVERRIDE
+ void Reset() override
{
if (!(events.IsInPhase(PHASE_ROTFACE) || events.IsInPhase(PHASE_FESTERGUT)))
instance->SetBossState(DATA_PROFESSOR_PUTRICIDE, NOT_STARTED);
@@ -244,7 +244,7 @@ class boss_professor_putricide : public CreatureScript
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (events.IsInPhase(PHASE_ROTFACE) || events.IsInPhase(PHASE_FESTERGUT))
return;
@@ -272,7 +272,7 @@ class boss_professor_putricide : public CreatureScript
instance->SetBossState(DATA_PROFESSOR_PUTRICIDE, IN_PROGRESS);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
_JustReachedHome();
me->SetWalk(false);
@@ -280,13 +280,13 @@ class boss_professor_putricide : public CreatureScript
instance->SetBossState(DATA_PROFESSOR_PUTRICIDE, FAIL);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
@@ -297,7 +297,7 @@ class boss_professor_putricide : public CreatureScript
DoCast(SPELL_MUTATED_PLAGUE_CLEAR);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summons.Summon(summon);
switch (summon->GetEntry())
@@ -341,7 +341,7 @@ class boss_professor_putricide : public CreatureScript
DoZoneInCombat(summon);
}
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
switch (_phase)
{
@@ -362,7 +362,7 @@ class boss_professor_putricide : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -372,7 +372,7 @@ class boss_professor_putricide : public CreatureScript
instance->SetBossState(DATA_FESTERGUT, IN_PROGRESS); // needed here for delayed gate close
me->SetSpeed(MOVE_RUN, _baseSpeed, true);
DoAction(ACTION_FESTERGUT_GAS);
- if (Creature* festergut = Unit::GetCreature(*me, instance->GetData64(DATA_FESTERGUT)))
+ if (Creature* festergut = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_FESTERGUT)))
festergut->CastSpell(festergut, SPELL_GASEOUS_BLIGHT_LARGE, false, NULL, NULL, festergut->GetGUID());
break;
case POINT_ROTFACE:
@@ -413,7 +413,7 @@ class boss_professor_putricide : public CreatureScript
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -442,7 +442,7 @@ class boss_professor_putricide : public CreatureScript
_oozeFloodStage = 0;
DoZoneInCombat(me);
// init random sequence of floods
- if (Creature* rotface = Unit::GetCreature(*me, instance->GetData64(DATA_ROTFACE)))
+ if (Creature* rotface = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ROTFACE)))
{
std::list<Creature*> list;
GetCreatureListWithEntryInGrid(list, rotface, NPC_PUDDLE_STALKER, 50.0f);
@@ -469,7 +469,7 @@ class boss_professor_putricide : public CreatureScript
}
case ACTION_ROTFACE_OOZE:
Talk(SAY_ROTFACE_OOZE_FLOOD);
- if (Creature* dummy = Unit::GetCreature(*me, _oozeFloodDummyGUIDs[_oozeFloodStage]))
+ if (Creature* dummy = ObjectAccessor::GetCreature(*me, _oozeFloodDummyGUIDs[_oozeFloodStage]))
dummy->CastSpell(dummy, oozeFloodSpells[_oozeFloodStage], true, NULL, NULL, me->GetGUID()); // cast from self for LoS (with prof's GUID for logs)
if (++_oozeFloodStage == 4)
_oozeFloodStage = 0;
@@ -538,7 +538,7 @@ class boss_professor_putricide : public CreatureScript
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -555,13 +555,13 @@ class boss_professor_putricide : public CreatureScript
return 0;
}
- void SetData(uint32 id, uint32 data) OVERRIDE
+ void SetData(uint32 id, uint32 data) override
{
if (id == DATA_EXPERIMENT_STAGE)
- _experimentState = bool(data);
+ _experimentState = data != 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if ((!(events.IsInPhase(PHASE_ROTFACE) || events.IsInPhase(PHASE_FESTERGUT)) && !UpdateVictim()) || !CheckInRoom())
return;
@@ -708,7 +708,7 @@ class boss_professor_putricide : public CreatureScript
bool _experimentState;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<boss_professor_putricideAI>(creature);
}
@@ -722,19 +722,19 @@ class npc_putricide_oozeAI : public ScriptedAI
{
}
- void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override
{
if (!_newTargetSelectTimer && spell->Id == sSpellMgr->GetSpellIdForDifficulty(_hitTargetSpellId, me))
_newTargetSelectTimer = 1000;
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_TEAR_GAS_CREATURE)
_newTargetSelectTimer = 1000;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() && !_newTargetSelectTimer)
return;
@@ -783,7 +783,7 @@ class npc_volatile_ooze : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_volatile_oozeAI>(creature);
}
@@ -810,7 +810,7 @@ class npc_gas_cloud : public CreatureScript
uint32 _newTargetSelectTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_gas_cloudAI>(creature);
}
@@ -836,13 +836,13 @@ class spell_putricide_gaseous_bloat : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_putricide_gaseous_bloat_AuraScript::HandleExtraEffect, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_putricide_gaseous_bloat_AuraScript();
}
@@ -857,7 +857,7 @@ class spell_putricide_ooze_channel : public SpellScriptLoader
{
PrepareSpellScript(spell_putricide_ooze_channel_SpellScript);
- bool Validate(SpellInfo const* spell) OVERRIDE
+ bool Validate(SpellInfo const* spell) override
{
if (!spell->ExcludeTargetAuraSpell)
return false;
@@ -868,7 +868,7 @@ class spell_putricide_ooze_channel : public SpellScriptLoader
// set up initial variables and check if caster is creature
// this will let use safely use ToCreature() casts in entire script
- bool Load() OVERRIDE
+ bool Load() override
{
_target = NULL;
return GetCaster()->GetTypeId() == TYPEID_UNIT;
@@ -904,7 +904,7 @@ class spell_putricide_ooze_channel : public SpellScriptLoader
GetCaster()->AddThreat(GetHitUnit(), 500000000.0f); // value seen in sniff
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_putricide_ooze_channel_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_putricide_ooze_channel_SpellScript::SetTarget, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
@@ -915,7 +915,7 @@ class spell_putricide_ooze_channel : public SpellScriptLoader
WorldObject* _target;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_putricide_ooze_channel_SpellScript();
}
@@ -950,14 +950,14 @@ class spell_putricide_slime_puddle : public SpellScriptLoader
targets.remove_if(ExactDistanceCheck(GetCaster(), 2.5f * GetCaster()->GetObjectScale()));
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_putricide_slime_puddle_SpellScript::ScaleRange, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_putricide_slime_puddle_SpellScript::ScaleRange, EFFECT_1, TARGET_UNIT_DEST_AREA_ENTRY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_putricide_slime_puddle_SpellScript();
}
@@ -979,13 +979,13 @@ class spell_putricide_slime_puddle_aura : public SpellScriptLoader
GetCaster()->AddAura((GetCaster()->GetMap()->GetSpawnMode() & 1) ? 72456 : 70346, target);
}
- void Register() OVERRIDE
+ void Register() override
{
OnHit += SpellHitFn(spell_putricide_slime_puddle_aura_SpellScript::ReplaceAura);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_putricide_slime_puddle_aura_SpellScript();
}
@@ -1027,13 +1027,13 @@ class spell_putricide_unstable_experiment : public SpellScriptLoader
GetCaster()->CastSpell(target, uint32(GetSpellInfo()->Effects[stage].CalcValue()), true, NULL, NULL, GetCaster()->GetGUID());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_putricide_unstable_experiment_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_putricide_unstable_experiment_SpellScript();
}
@@ -1058,13 +1058,13 @@ class spell_putricide_ooze_eruption_searcher : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_putricide_ooze_eruption_searcher_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_putricide_ooze_eruption_searcher_SpellScript();
}
@@ -1092,13 +1092,13 @@ class spell_putricide_choking_gas_bomb : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_putricide_choking_gas_bomb_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_putricide_choking_gas_bomb_SpellScript();
}
@@ -1113,7 +1113,7 @@ class spell_putricide_unbound_plague : public SpellScriptLoader
{
PrepareSpellScript(spell_putricide_unbound_plague_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_UNBOUND_PLAGUE))
return false;
@@ -1170,14 +1170,14 @@ class spell_putricide_unbound_plague : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_putricide_unbound_plague_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
OnEffectHitTarget += SpellEffectFn(spell_putricide_unbound_plague_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_putricide_unbound_plague_SpellScript();
}
@@ -1222,14 +1222,14 @@ class spell_putricide_eat_ooze : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_putricide_eat_ooze_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_putricide_eat_ooze_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_DEST_AREA_ENTRY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_putricide_eat_ooze_SpellScript();
}
@@ -1272,14 +1272,14 @@ class spell_putricide_mutated_plague : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), healSpell, true, NULL, NULL, GetCasterGUID());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_putricide_mutated_plague_AuraScript::HandleTriggerSpell, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
AfterEffectRemove += AuraEffectRemoveFn(spell_putricide_mutated_plague_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_putricide_mutated_plague_AuraScript();
}
@@ -1338,7 +1338,7 @@ class spell_putricide_mutation_init : public SpellScriptLoader
return SPELL_CAST_OK;
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_putricide_mutation_init_SpellScript::CheckRequirement);
}
@@ -1357,18 +1357,18 @@ class spell_putricide_mutation_init : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), spellId, true);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_putricide_mutation_init_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_putricide_mutation_init_SpellScript();
}
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_putricide_mutation_init_AuraScript();
}
@@ -1389,13 +1389,13 @@ class spell_putricide_mutated_transformation_dismiss : public SpellScriptLoader
veh->RemoveAllPassengers();
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_putricide_mutated_transformation_dismiss_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_putricide_mutated_transformation_dismiss_AuraScript();
}
@@ -1436,8 +1436,7 @@ class spell_putricide_mutated_transformation : public SpellScriptLoader
SummonPropertiesEntry const* properties = sSummonPropertiesStore.LookupEntry(uint32(GetSpellInfo()->Effects[effIndex].MiscValueB));
uint32 duration = uint32(GetSpellInfo()->GetDuration());
- Position pos;
- caster->GetPosition(&pos);
+ Position pos = caster->GetPosition();
TempSummon* summon = caster->GetMap()->SummonCreature(entry, pos, properties, duration, caster, GetSpellInfo()->Id);
if (!summon || !summon->IsVehicle())
return;
@@ -1451,13 +1450,13 @@ class spell_putricide_mutated_transformation : public SpellScriptLoader
putricide->AI()->JustSummoned(summon);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_putricide_mutated_transformation_SpellScript::HandleSummon, EFFECT_0, SPELL_EFFECT_SUMMON);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_putricide_mutated_transformation_SpellScript();
}
@@ -1478,13 +1477,13 @@ class spell_putricide_mutated_transformation_dmg : public SpellScriptLoader
targets.remove(owner);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_putricide_mutated_transformation_dmg_SpellScript::FilterTargetsInitial, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_putricide_mutated_transformation_dmg_SpellScript();
}
@@ -1506,13 +1505,13 @@ class spell_putricide_regurgitated_ooze : public SpellScriptLoader
instance->SetData(DATA_NAUSEA_ACHIEVEMENT, uint32(false));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_putricide_regurgitated_ooze_SpellScript::ExtraEffect, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_putricide_regurgitated_ooze_SpellScript();
}
@@ -1535,13 +1534,13 @@ class spell_putricide_clear_aura_effect_value : public SpellScriptLoader
GetHitUnit()->RemoveAurasDueToSpell(auraId);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_putricide_clear_aura_effect_value_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_putricide_clear_aura_effect_value_SpellScript();
}
@@ -1566,13 +1565,13 @@ class spell_stinky_precious_decimate : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_stinky_precious_decimate_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_stinky_precious_decimate_SpellScript();
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
index e3c21c6b88e..2f2889a9cf3 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
@@ -102,7 +102,7 @@ class boss_rotface : public CreatureScript
infectionCooldown = 14000;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
events.ScheduleEvent(EVENT_SLIME_SPRAY, 20000);
@@ -115,7 +115,7 @@ class boss_rotface : public CreatureScript
infectionCooldown = 14000;
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (!instance->CheckRequiredBosses(DATA_ROTFACE, who->ToPlayer()))
{
@@ -126,61 +126,61 @@ class boss_rotface : public CreatureScript
me->setActive(true);
Talk(SAY_AGGRO);
- if (Creature* professor = Unit::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
+ if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
professor->AI()->DoAction(ACTION_ROTFACE_COMBAT);
DoZoneInCombat();
DoCast(me, SPELL_GREEN_ABOMINATION_HITTIN__YA_PROC, true);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->DoRemoveAurasDueToSpellOnPlayers(MUTATED_INFECTION);
_JustDied();
Talk(SAY_DEATH);
- if (Creature* professor = Unit::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
+ if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
professor->AI()->DoAction(ACTION_ROTFACE_DEATH);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
_JustReachedHome();
instance->SetBossState(DATA_ROTFACE, FAIL);
instance->SetData(DATA_OOZE_DANCE_ACHIEVEMENT, uint32(true)); // reset
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
ScriptedAI::EnterEvadeMode();
- if (Creature* professor = Unit::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
+ if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
professor->AI()->EnterEvadeMode();
}
- void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_SLIME_SPRAY)
Talk(SAY_SLIME_SPRAY);
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE
+ void MoveInLineOfSight(Unit* /*who*/) override
{
// don't enter combat
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() == NPC_VILE_GAS_STALKER)
- if (Creature* professor = Unit::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
+ if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)))
professor->CastSpell(summon, SPELL_VILE_GAS_H, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || !CheckInRoom())
return;
@@ -231,7 +231,7 @@ class boss_rotface : public CreatureScript
uint32 infectionStage;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<boss_rotfaceAI>(creature);
}
@@ -248,7 +248,7 @@ class npc_little_ooze : public CreatureScript
{
}
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
DoCast(me, SPELL_LITTLE_OOZE_COMBINE, true);
DoCast(me, SPELL_WEAK_RADIATING_OOZE, true);
@@ -257,12 +257,12 @@ class npc_little_ooze : public CreatureScript
me->AddThreat(summoner, 500000.0f);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->DespawnOrUnsummon();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -282,7 +282,7 @@ class npc_little_ooze : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_little_oozeAI>(creature);
}
@@ -299,7 +299,7 @@ class npc_big_ooze : public CreatureScript
{
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
DoCast(me, SPELL_LARGE_OOZE_COMBINE, true);
DoCast(me, SPELL_LARGE_OOZE_BUFF_COMBINE, true);
@@ -308,24 +308,24 @@ class npc_big_ooze : public CreatureScript
DoCast(me, SPELL_GREEN_ABOMINATION_HITTIN__YA_PROC, true);
events.ScheduleEvent(EVENT_STICKY_OOZE, 5000);
// register in Rotface's summons - not summoned with Rotface as owner
- if (Creature* rotface = Unit::GetCreature(*me, instance->GetData64(DATA_ROTFACE)))
+ if (Creature* rotface = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ROTFACE)))
rotface->AI()->JustSummoned(me);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
- if (Creature* rotface = Unit::GetCreature(*me, instance->GetData64(DATA_ROTFACE)))
+ if (Creature* rotface = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ROTFACE)))
rotface->AI()->SummonedCreatureDespawn(me);
me->DespawnOrUnsummon();
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == EVENT_STICKY_OOZE)
events.CancelEvent(EVENT_STICKY_OOZE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -353,7 +353,7 @@ class npc_big_ooze : public CreatureScript
InstanceScript* instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_big_oozeAI>(creature);
}
@@ -371,7 +371,7 @@ class npc_precious_icc : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_DECIMATE, urand(20000, 25000));
@@ -380,27 +380,27 @@ class npc_precious_icc : public CreatureScript
_summons.DespawnAll();
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
_summons.Summon(summon);
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
summon->AI()->AttackStart(target);
}
- void SummonedCreatureDespawn(Creature* summon) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summon) override
{
_summons.Despawn(summon);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_summons.DespawnAll();
- if (Creature* rotface = Unit::GetCreature(*me, _instance->GetData64(DATA_ROTFACE)))
+ if (Creature* rotface = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ROTFACE)))
if (rotface->IsAlive())
rotface->AI()->Talk(SAY_PRECIOUS_DIES);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -442,7 +442,7 @@ class npc_precious_icc : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_precious_iccAI>(creature);
}
@@ -485,14 +485,14 @@ class spell_rotface_ooze_flood : public SpellScriptLoader
targets.pop_front();
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_rotface_ooze_flood_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rotface_ooze_flood_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_rotface_ooze_flood_SpellScript();
}
@@ -507,7 +507,7 @@ class spell_rotface_mutated_infection : public SpellScriptLoader
{
PrepareSpellScript(spell_rotface_mutated_infection_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_target = NULL;
return true;
@@ -541,7 +541,7 @@ class spell_rotface_mutated_infection : public SpellScriptLoader
caster->AI()->Talk(EMOTE_MUTATED_INFECTION, target);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rotface_mutated_infection_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rotface_mutated_infection_SpellScript::ReplaceTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
@@ -552,7 +552,7 @@ class spell_rotface_mutated_infection : public SpellScriptLoader
WorldObject* _target;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_rotface_mutated_infection_SpellScript();
}
@@ -578,13 +578,13 @@ class spell_rotface_little_ooze_combine : public SpellScriptLoader
GetHitCreature()->DespawnOrUnsummon();
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_rotface_little_ooze_combine_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_rotface_little_ooze_combine_SpellScript();
}
@@ -620,13 +620,13 @@ class spell_rotface_large_ooze_combine : public SpellScriptLoader
GetHitCreature()->DespawnOrUnsummon();
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_rotface_large_ooze_combine_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_rotface_large_ooze_combine_SpellScript();
}
@@ -657,7 +657,7 @@ class spell_rotface_large_ooze_buff_combine : public SpellScriptLoader
GetCaster()->RemoveAurasDueToSpell(SPELL_LARGE_OOZE_BUFF_COMBINE);
GetCaster()->RemoveAurasDueToSpell(SPELL_LARGE_OOZE_COMBINE);
if (InstanceScript* instance = GetCaster()->GetInstanceScript())
- if (Creature* rotface = Unit::GetCreature(*GetCaster(), instance->GetData64(DATA_ROTFACE)))
+ if (Creature* rotface = ObjectAccessor::GetCreature(*GetCaster(), instance->GetData64(DATA_ROTFACE)))
if (rotface->IsAlive())
{
rotface->AI()->Talk(EMOTE_UNSTABLE_EXPLOSION);
@@ -675,13 +675,13 @@ class spell_rotface_large_ooze_buff_combine : public SpellScriptLoader
GetHitCreature()->DespawnOrUnsummon();
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_rotface_large_ooze_buff_combine_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_rotface_large_ooze_buff_combine_SpellScript();
}
@@ -696,7 +696,7 @@ class spell_rotface_unstable_ooze_explosion_init : public SpellScriptLoader
{
PrepareSpellScript(spell_rotface_unstable_ooze_explosion_init_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_UNSTABLE_OOZE_EXPLOSION_TRIGGER))
return false;
@@ -715,13 +715,13 @@ class spell_rotface_unstable_ooze_explosion_init : public SpellScriptLoader
GetCaster()->CastSpell(dummy, SPELL_UNSTABLE_OOZE_EXPLOSION_TRIGGER, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_rotface_unstable_ooze_explosion_init_SpellScript::HandleCast, EFFECT_0, SPELL_EFFECT_FORCE_CAST);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_rotface_unstable_ooze_explosion_init_SpellScript();
}
@@ -752,13 +752,13 @@ class spell_rotface_unstable_ooze_explosion : public SpellScriptLoader
rotface->CastSpell(x, y, z, triggered_spell_id, true, NULL, NULL, GetCaster()->GetGUID());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_rotface_unstable_ooze_explosion_SpellScript::CheckTarget, EFFECT_0, SPELL_EFFECT_TRIGGER_MISSILE);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_rotface_unstable_ooze_explosion_SpellScript();
}
@@ -785,13 +785,13 @@ class spell_rotface_unstable_ooze_explosion_suicide : public SpellScriptLoader
target->ToCreature()->DespawnOrUnsummon(60000);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_rotface_unstable_ooze_explosion_suicide_AuraScript::DespawnSelf, EFFECT_2, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_rotface_unstable_ooze_explosion_suicide_AuraScript();
}
@@ -862,6 +862,53 @@ class spell_rotface_vile_gas_trigger : public SpellScriptLoader
}
};
+class spell_rotface_slime_spray : public SpellScriptLoader
+{
+ public:
+ spell_rotface_slime_spray() : SpellScriptLoader("spell_rotface_slime_spray") { }
+
+ class spell_rotface_slime_spray_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_rotface_slime_spray_SpellScript);
+
+ void HandleResidue()
+ {
+ Player* target = GetHitPlayer();
+ if (!target)
+ return;
+
+ if (target->HasAura(SPELL_GREEN_BLIGHT_RESIDUE))
+ return;
+
+ if (target->GetMap() && !target->GetMap()->Is25ManRaid())
+ {
+ if (target->GetQuestStatus(QUEST_RESIDUE_RENDEZVOUS_10) != QUEST_STATUS_INCOMPLETE)
+ return;
+
+ target->CastSpell(target, SPELL_GREEN_BLIGHT_RESIDUE, TRIGGERED_FULL_MASK);
+ }
+
+ if (target->GetMap() && target->GetMap()->Is25ManRaid())
+ {
+ if (target->GetQuestStatus(QUEST_RESIDUE_RENDEZVOUS_25) != QUEST_STATUS_INCOMPLETE)
+ return;
+
+ target->CastSpell(target, SPELL_GREEN_BLIGHT_RESIDUE, TRIGGERED_FULL_MASK);
+ }
+ }
+
+ void Register() override
+ {
+ OnHit += SpellHitFn(spell_rotface_slime_spray_SpellScript::HandleResidue);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_rotface_slime_spray_SpellScript();
+ }
+};
+
void AddSC_boss_rotface()
{
new boss_rotface();
@@ -877,4 +924,5 @@ void AddSC_boss_rotface()
new spell_rotface_unstable_ooze_explosion();
new spell_rotface_unstable_ooze_explosion_suicide();
new spell_rotface_vile_gas_trigger();
+ new spell_rotface_slime_spray();
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
index b1141e31d39..76c5a93f9c5 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
@@ -223,7 +223,7 @@ class boss_sindragosa : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
BossAI::Reset();
me->SetReactState(REACT_DEFENSIVE);
@@ -246,7 +246,7 @@ class boss_sindragosa : public CreatureScript
}
}
- void JustDied(Unit* /* killer */) OVERRIDE
+ void JustDied(Unit* /* killer */) override
{
_JustDied();
Talk(SAY_DEATH);
@@ -256,7 +256,7 @@ class boss_sindragosa : public CreatureScript
}
- void EnterCombat(Unit* victim) OVERRIDE
+ void EnterCombat(Unit* victim) override
{
if (!instance->CheckRequiredBosses(DATA_SINDRAGOSA, victim->ToPlayer()))
{
@@ -271,7 +271,7 @@ class boss_sindragosa : public CreatureScript
Talk(SAY_AGGRO);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
BossAI::JustReachedHome();
instance->SetBossState(DATA_SINDRAGOSA, FAIL);
@@ -279,13 +279,13 @@ class boss_sindragosa : public CreatureScript
me->SetDisableGravity(false);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_START_FROSTWYRM)
{
@@ -312,14 +312,14 @@ class boss_sindragosa : public CreatureScript
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_MYSTIC_BUFFET_STACK)
return _mysticBuffetStack;
return 0xFFFFFFFF;
}
- void MovementInform(uint32 type, uint32 point) OVERRIDE
+ void MovementInform(uint32 type, uint32 point) override
{
if (type != POINT_MOTION_TYPE && type != EFFECT_MOTION_TYPE)
return;
@@ -373,7 +373,7 @@ class boss_sindragosa : public CreatureScript
}
}
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
if (!_isThirdPhase && !HealthAbovePct(35))
{
@@ -383,7 +383,7 @@ class boss_sindragosa : public CreatureScript
}
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summons.Summon(summon);
if (summon->GetEntry() == NPC_FROST_BOMB)
@@ -394,14 +394,14 @@ class boss_sindragosa : public CreatureScript
}
}
- void SummonedCreatureDespawn(Creature* summon) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summon) override
{
BossAI::SummonedCreatureDespawn(summon);
if (summon->GetEntry() == NPC_ICE_TOMB)
summon->AI()->JustDied(summon);
}
- void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, SpellInfo const* spell) override
{
if (uint32 spellId = sSpellMgr->GetSpellIdForDifficulty(70127, me))
if (spellId == spell->Id)
@@ -410,7 +410,7 @@ class boss_sindragosa : public CreatureScript
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || !CheckInRoom())
return;
@@ -542,7 +542,7 @@ class boss_sindragosa : public CreatureScript
bool _summoned;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<boss_sindragosaAI>(creature);
}
@@ -561,12 +561,12 @@ class npc_ice_tomb : public CreatureScript
SetCombatMovement(false);
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetReactState(REACT_PASSIVE);
}
- void SetGUID(uint64 guid, int32 type/* = 0 */) OVERRIDE
+ void SetGUID(uint64 guid, int32 type/* = 0 */) override
{
if (type == DATA_TRAPPED_PLAYER)
{
@@ -575,14 +575,14 @@ class npc_ice_tomb : public CreatureScript
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_TRIGGER_ASPHYXIATION)
if (Player* player = ObjectAccessor::GetPlayer(*me, _trappedPlayerGUID))
player->CastSpell(player, SPELL_ASPHYXIATION, true);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->RemoveAllGameObjects();
@@ -594,7 +594,7 @@ class npc_ice_tomb : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!_trappedPlayerGUID)
return;
@@ -620,7 +620,7 @@ class npc_ice_tomb : public CreatureScript
uint32 _existenceCheckTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_ice_tombAI>(creature);
}
@@ -637,7 +637,7 @@ class npc_spinestalker : public CreatureScript
{
}
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
// Increase add count
if (!me->isDead())
@@ -647,7 +647,7 @@ class npc_spinestalker : public CreatureScript
}
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_BELLOWING_ROAR, urand(20000, 25000));
@@ -662,18 +662,18 @@ class npc_spinestalker : public CreatureScript
}
}
- void JustRespawned() OVERRIDE
+ void JustRespawned() override
{
ScriptedAI::JustRespawned();
_instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetDBTableGUIDLow()); // this cannot be in Reset because reset also happens on evade
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_events.Reset();
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_START_FROSTWYRM)
{
@@ -696,7 +696,7 @@ class npc_spinestalker : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 point) OVERRIDE
+ void MovementInform(uint32 type, uint32 point) override
{
if (type != EFFECT_MOTION_TYPE || point != POINT_FROSTWYRM_LAND)
return;
@@ -710,7 +710,7 @@ class npc_spinestalker : public CreatureScript
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -750,7 +750,7 @@ class npc_spinestalker : public CreatureScript
bool _summoned;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_spinestalkerAI>(creature);
}
@@ -767,7 +767,7 @@ class npc_rimefang : public CreatureScript
{
}
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
// Increase add count
if (!me->isDead())
@@ -777,7 +777,7 @@ class npc_rimefang : public CreatureScript
}
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_FROST_BREATH_RIMEFANG, urand(12000, 15000));
@@ -792,18 +792,18 @@ class npc_rimefang : public CreatureScript
}
}
- void JustRespawned() OVERRIDE
+ void JustRespawned() override
{
ScriptedAI::JustRespawned();
_instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetDBTableGUIDLow()); // this cannot be in Reset because reset also happens on evade
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_events.Reset();
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_START_FROSTWYRM)
{
@@ -826,7 +826,7 @@ class npc_rimefang : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 point) OVERRIDE
+ void MovementInform(uint32 type, uint32 point) override
{
if (type != EFFECT_MOTION_TYPE || point != POINT_FROSTWYRM_LAND)
return;
@@ -840,12 +840,12 @@ class npc_rimefang : public CreatureScript
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
}
- void EnterCombat(Unit* /*victim*/) OVERRIDE
+ void EnterCombat(Unit* /*victim*/) override
{
DoCast(me, SPELL_FROST_AURA_RIMEFANG, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -907,7 +907,7 @@ class npc_rimefang : public CreatureScript
bool _summoned;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_rimefangAI>(creature);
}
@@ -925,7 +925,7 @@ class npc_sindragosa_trash : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
_frostwyrmId = (me->GetHomePosition().GetPositionY() < 2484.35f) ? DATA_RIMEFANG : DATA_SPINESTALKER;
// Increase add count
@@ -937,7 +937,7 @@ class npc_sindragosa_trash : public CreatureScript
}
}
- void Reset() OVERRIDE
+ void Reset() override
{
// This is shared AI for handler and whelps
if (me->GetEntry() == NPC_FROSTWARDEN_HANDLER)
@@ -949,7 +949,7 @@ class npc_sindragosa_trash : public CreatureScript
_isTaunted = false;
}
- void JustRespawned() OVERRIDE
+ void JustRespawned() override
{
ScriptedAI::JustRespawned();
@@ -958,13 +958,13 @@ class npc_sindragosa_trash : public CreatureScript
_instance->SetData(_frostwyrmId, me->GetDBTableGUIDLow()); // this cannot be in Reset because reset also happens on evade
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
if (type == DATA_WHELP_MARKER)
_isTaunted = data != 0;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_FROSTWYRM_OWNER)
return _frostwyrmId;
@@ -973,7 +973,7 @@ class npc_sindragosa_trash : public CreatureScript
return 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1010,7 +1010,7 @@ class npc_sindragosa_trash : public CreatureScript
bool _isTaunted; // Frostwing Whelp only
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_sindragosa_trashAI>(creature);
}
@@ -1025,7 +1025,7 @@ class spell_sindragosa_s_fury : public SpellScriptLoader
{
PrepareSpellScript(spell_sindragosa_s_fury_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_targetCount = 0;
@@ -1074,7 +1074,7 @@ class spell_sindragosa_s_fury : public SpellScriptLoader
GetCaster()->DealSpellDamage(&damageInfo, false);
}
- void Register() OVERRIDE
+ void Register() override
{
BeforeCast += SpellCastFn(spell_sindragosa_s_fury_SpellScript::SelectDest);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sindragosa_s_fury_SpellScript::CountTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENTRY);
@@ -1084,7 +1084,7 @@ class spell_sindragosa_s_fury : public SpellScriptLoader
uint32 _targetCount;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_sindragosa_s_fury_SpellScript();
}
@@ -1120,13 +1120,13 @@ class spell_sindragosa_unchained_magic : public SpellScriptLoader
Trinity::Containers::RandomResizeList(unitList, maxSize);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sindragosa_unchained_magic_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_sindragosa_unchained_magic_SpellScript();
}
@@ -1165,13 +1165,13 @@ class spell_sindragosa_frost_breath : public SpellScriptLoader
target->CastSpell(target, SPELL_FROST_INFUSION, TRIGGERED_FULL_MASK);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterHit += SpellHitFn(spell_sindragosa_frost_breath_SpellScript::HandleInfusion);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_sindragosa_frost_breath_SpellScript();
}
@@ -1186,7 +1186,7 @@ class spell_sindragosa_instability : public SpellScriptLoader
{
PrepareAuraScript(spell_sindragosa_instability_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_BACKLASH))
return false;
@@ -1199,13 +1199,13 @@ class spell_sindragosa_instability : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_BACKLASH, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, NULL, aurEff, GetCasterGUID());
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_sindragosa_instability_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_sindragosa_instability_AuraScript();
}
@@ -1220,7 +1220,7 @@ class spell_sindragosa_frost_beacon : public SpellScriptLoader
{
PrepareAuraScript(spell_sindragosa_frost_beacon_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ICE_TOMB_DAMAGE))
return false;
@@ -1234,13 +1234,13 @@ class spell_sindragosa_frost_beacon : public SpellScriptLoader
caster->CastSpell(GetTarget(), SPELL_ICE_TOMB_DAMAGE, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_sindragosa_frost_beacon_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_sindragosa_frost_beacon_AuraScript();
}
@@ -1255,7 +1255,7 @@ class spell_sindragosa_ice_tomb : public SpellScriptLoader
{
PrepareSpellScript(spell_sindragosa_ice_tomb_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sObjectMgr->GetCreatureTemplate(NPC_ICE_TOMB))
return false;
@@ -1266,8 +1266,7 @@ class spell_sindragosa_ice_tomb : public SpellScriptLoader
void SummonTomb()
{
- Position pos;
- GetHitUnit()->GetPosition(&pos);
+ Position pos = GetHitUnit()->GetPosition();
if (TempSummon* summon = GetCaster()->SummonCreature(NPC_ICE_TOMB, pos))
{
summon->AI()->SetGUID(GetHitUnit()->GetGUID(), DATA_TRAPPED_PLAYER);
@@ -1279,7 +1278,7 @@ class spell_sindragosa_ice_tomb : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
AfterHit += SpellHitFn(spell_sindragosa_ice_tomb_SpellScript::SummonTomb);
}
@@ -1294,18 +1293,18 @@ class spell_sindragosa_ice_tomb : public SpellScriptLoader
PreventDefaultAction();
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_sindragosa_ice_tomb_AuraScript::PeriodicTick, EFFECT_2, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_sindragosa_ice_tomb_SpellScript();
}
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_sindragosa_ice_tomb_AuraScript();
}
@@ -1320,7 +1319,7 @@ class spell_sindragosa_icy_grip : public SpellScriptLoader
{
PrepareSpellScript(spell_sindragosa_icy_grip_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ICY_GRIP_JUMP))
return false;
@@ -1333,13 +1332,13 @@ class spell_sindragosa_icy_grip : public SpellScriptLoader
GetHitUnit()->CastSpell(GetCaster(), SPELL_ICY_GRIP_JUMP, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_sindragosa_icy_grip_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_sindragosa_icy_grip_SpellScript();
}
@@ -1373,13 +1372,13 @@ class spell_sindragosa_mystic_buffet : public SpellScriptLoader
targets.remove_if(MysticBuffetTargetFilter(GetCaster()));
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sindragosa_mystic_buffet_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_sindragosa_mystic_buffet_SpellScript();
}
@@ -1394,7 +1393,7 @@ class spell_rimefang_icy_blast : public SpellScriptLoader
{
PrepareSpellScript(spell_rimefang_icy_blast_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ICY_BLAST_AREA))
return false;
@@ -1409,13 +1408,13 @@ class spell_rimefang_icy_blast : public SpellScriptLoader
summon->CastSpell(summon, SPELL_ICY_BLAST_AREA, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_rimefang_icy_blast_SpellScript::HandleTriggerMissile, EFFECT_1, SPELL_EFFECT_TRIGGER_MISSILE);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_rimefang_icy_blast_SpellScript();
}
@@ -1446,7 +1445,7 @@ class spell_frostwarden_handler_order_whelp : public SpellScriptLoader
{
PrepareSpellScript(spell_frostwarden_handler_order_whelp_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_FOCUS_FIRE))
return false;
@@ -1479,14 +1478,14 @@ class spell_frostwarden_handler_order_whelp : public SpellScriptLoader
Trinity::Containers::SelectRandomContainerElement(unitList)->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_frostwarden_handler_order_whelp_SpellScript::HandleForcedCast, EFFECT_0, SPELL_EFFECT_FORCE_CAST);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_frostwarden_handler_order_whelp_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_frostwarden_handler_order_whelp_SpellScript();
}
@@ -1508,7 +1507,7 @@ class spell_frostwarden_handler_focus_fire : public SpellScriptLoader
GetCaster()->GetAI()->SetData(DATA_WHELP_MARKER, 1);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_frostwarden_handler_focus_fire_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
}
@@ -1528,18 +1527,18 @@ class spell_frostwarden_handler_focus_fire : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_frostwarden_handler_focus_fire_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_frostwarden_handler_focus_fire_SpellScript();
}
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_frostwarden_handler_focus_fire_AuraScript();
}
@@ -1550,7 +1549,7 @@ class at_sindragosa_lair : public AreaTriggerScript
public:
at_sindragosa_lair() : AreaTriggerScript("at_sindragosa_lair") { }
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
{
if (InstanceScript* instance = player->GetInstanceScript())
{
@@ -1582,7 +1581,7 @@ class achievement_all_you_can_eat : public AchievementCriteriaScript
public:
achievement_all_you_can_eat() : AchievementCriteriaScript("achievement_all_you_can_eat") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
if (!target)
return false;
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 0d262110b5f..b72b953efb4 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
@@ -506,7 +506,7 @@ class boss_the_lich_king : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
me->SetReactState(REACT_PASSIVE);
@@ -516,7 +516,7 @@ class boss_the_lich_king : public CreatureScript
SetEquipmentSlots(true);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
DoCastAOE(SPELL_PLAY_MOVIE, false);
@@ -527,7 +527,7 @@ class boss_the_lich_king : public CreatureScript
frostmourne->DespawnOrUnsummon();
}
- void EnterCombat(Unit* target) OVERRIDE
+ void EnterCombat(Unit* target) override
{
if (!instance->CheckRequiredBosses(DATA_THE_LICH_KING, target->ToPlayer()))
{
@@ -549,7 +549,7 @@ class boss_the_lich_king : public CreatureScript
events.ScheduleEvent(EVENT_SHADOW_TRAP, 15500, 0, PHASE_ONE);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
_JustReachedHome();
instance->SetBossState(DATA_THE_LICH_KING, NOT_STARTED);
@@ -559,17 +559,22 @@ class boss_the_lich_king : public CreatureScript
Trinity::GameObjectWorker<FrozenThroneResetWorker> worker(me, reset);
me->VisitNearbyGridObject(333.0f, worker);
+ // Restore Tirion's gossip only after The Lich King fully resets to prevent
+ // restarting the encounter while LK still runs back to spawn point
+ if (Creature* tirion = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_HIGHLORD_TIRION_FORDRING)))
+ tirion->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+
// Reset any light override
me->GetMap()->SetZoneOverrideLight(AREA_THE_FROZEN_THRONE, 0, 5000);
}
- bool CanAIAttack(Unit const* target) const OVERRIDE
+ bool CanAIAttack(Unit const* target) const override
{
// The Lich King must not select targets in frostmourne room if he killed everyone outside
return !target->HasAura(SPELL_IN_FROSTMOURNE_ROOM);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
instance->SetBossState(DATA_THE_LICH_KING, FAIL);
BossAI::EnterEvadeMode();
@@ -580,13 +585,13 @@ class boss_the_lich_king : public CreatureScript
summons.DoAction(ACTION_TELEPORT_BACK, pred);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER && !me->IsInEvadeMode() && !events.IsInPhase(PHASE_OUTRO))
Talk(SAY_LK_KILL);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -630,7 +635,7 @@ class boss_the_lich_king : public CreatureScript
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -645,7 +650,7 @@ class boss_the_lich_king : public CreatureScript
return 0;
}
- void SetData(uint32 type, uint32 value) OVERRIDE
+ void SetData(uint32 type, uint32 value) override
{
switch (type)
{
@@ -660,7 +665,7 @@ class boss_the_lich_king : public CreatureScript
}
}
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
if (events.IsInPhase(PHASE_ONE) && !HealthAbovePct(70))
{
@@ -705,7 +710,7 @@ class boss_the_lich_king : public CreatureScript
}
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
switch (summon->GetEntry())
{
@@ -765,7 +770,7 @@ class boss_the_lich_king : public CreatureScript
BossAI::JustSummoned(summon);
}
- void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) OVERRIDE
+ void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override
{
switch (summon->GetEntry())
{
@@ -782,13 +787,13 @@ class boss_the_lich_king : public CreatureScript
}
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_HARVESTED_SOUL && me->IsInCombat() && !IsHeroic())
Talk(SAY_LK_FROSTMOURNE_KILL);
}
- void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override
{
if (spell->Id == REMORSELESS_WINTER_1 || spell->Id == REMORSELESS_WINTER_2)
{
@@ -797,7 +802,7 @@ class boss_the_lich_king : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 pointId) OVERRIDE
+ void MovementInform(uint32 type, uint32 pointId) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -863,7 +868,7 @@ class boss_the_lich_king : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// check phase first to prevent updating victim and entering evade mode when not wanted
if (!(events.IsInPhase(PHASE_OUTRO) || events.IsInPhase(PHASE_INTRO) || events.IsInPhase(PHASE_FROSTMOURNE)))
@@ -1118,7 +1123,7 @@ class boss_the_lich_king : public CreatureScript
uint32 _vileSpiritExplosions;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<boss_the_lich_kingAI>(creature);
}
@@ -1136,14 +1141,14 @@ class npc_tirion_fordring_tft : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
if (_instance->GetBossState(DATA_THE_LICH_KING) == DONE)
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -1161,7 +1166,7 @@ class npc_tirion_fordring_tft : public CreatureScript
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -1179,7 +1184,7 @@ class npc_tirion_fordring_tft : public CreatureScript
}
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_ICE_LOCK)
me->SetFacingTo(3.085098f);
@@ -1187,7 +1192,7 @@ class npc_tirion_fordring_tft : public CreatureScript
SetEquipmentSlots(true); // remove glow on ashbringer
}
- void sGossipSelect(Player* /*player*/, uint32 sender, uint32 action) OVERRIDE
+ void sGossipSelect(Player* /*player*/, uint32 sender, uint32 action) override
{
if (me->GetCreatureTemplate()->GossipMenuId == sender && !action)
{
@@ -1198,17 +1203,12 @@ class npc_tirion_fordring_tft : public CreatureScript
}
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
-
- if (_instance->GetBossState(DATA_THE_LICH_KING) == DONE)
- return;
-
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() && !(_events.IsInPhase(PHASE_OUTRO) || _events.IsInPhase(PHASE_INTRO)))
return;
@@ -1268,7 +1268,7 @@ class npc_tirion_fordring_tft : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_tirion_fordringAI>(creature);
}
@@ -1286,14 +1286,14 @@ class npc_shambling_horror_icc : public CreatureScript
_frenzied = false;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_SHOCKWAVE, urand(20000, 25000));
_events.ScheduleEvent(EVENT_ENRAGE, urand(11000, 14000));
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if (!_frenzied && IsHeroic() && me->HealthBelowPctDamaged(20, damage))
{
@@ -1302,7 +1302,7 @@ class npc_shambling_horror_icc : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1337,7 +1337,7 @@ class npc_shambling_horror_icc : public CreatureScript
bool _frenzied;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_shambling_horror_iccAI>(creature);
}
@@ -1355,7 +1355,7 @@ class npc_raging_spirit : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_SOUL_SHRIEK, urand(12000, 15000));
@@ -1367,14 +1367,14 @@ class npc_raging_spirit : public CreatureScript
DoCast(me, SPELL_BOSS_HITTIN_YA, true);
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
// player is the spellcaster so register summon manually
if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING)))
lichKing->AI()->JustSummoned(me);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING)))
lichKing->AI()->SummonedCreatureDespawn(me);
@@ -1382,7 +1382,7 @@ class npc_raging_spirit : public CreatureScript
summon->SetTempSummonType(TEMPSUMMON_CORPSE_DESPAWN);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1413,7 +1413,7 @@ class npc_raging_spirit : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_raging_spiritAI>(creature);
}
@@ -1431,7 +1431,7 @@ class npc_valkyr_shadowguard : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
me->SetReactState(REACT_PASSIVE);
@@ -1439,13 +1439,13 @@ class npc_valkyr_shadowguard : public CreatureScript
me->SetSpeed(MOVE_FLIGHT, 0.642857f, true);
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
_events.Reset();
_events.ScheduleEvent(EVENT_GRAB_PLAYER, 2500);
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if (!IsHeroic())
return;
@@ -1462,7 +1462,7 @@ class npc_valkyr_shadowguard : public CreatureScript
}
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
// schedule siphon life event (heroic only)
DoZoneInCombat();
@@ -1470,11 +1470,11 @@ class npc_valkyr_shadowguard : public CreatureScript
_events.ScheduleEvent(EVENT_LIFE_SIPHON, 2000);
}
- void AttackStart(Unit* /*target*/) OVERRIDE
+ void AttackStart(Unit* /*target*/) override
{
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -1512,12 +1512,12 @@ class npc_valkyr_shadowguard : public CreatureScript
}
}
- void SetGUID(uint64 guid, int32 /* = 0*/) OVERRIDE
+ void SetGUID(uint64 guid, int32 /* = 0*/) override
{
_grabbedPlayer = guid;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1561,7 +1561,7 @@ class npc_valkyr_shadowguard : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_valkyr_shadowguardAI>(creature);
}
@@ -1579,7 +1579,7 @@ class npc_strangulate_vehicle : public CreatureScript
{
}
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
me->SetFacingToObject(summoner);
DoCast(summoner, SPELL_HARVEST_SOUL_VEHICLE);
@@ -1592,7 +1592,7 @@ class npc_strangulate_vehicle : public CreatureScript
lichKing->AI()->JustSummoned(me);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action != ACTION_TELEPORT_BACK)
return;
@@ -1610,7 +1610,7 @@ class npc_strangulate_vehicle : public CreatureScript
lichKing->AI()->SummonedCreatureDespawn(me);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
UpdateVictim();
@@ -1646,8 +1646,7 @@ class npc_strangulate_vehicle : public CreatureScript
{
if (me->GetExactDist(lichKing) > 10.0f)
{
- Position pos;
- lichKing->GetNearPosition(pos, float(rand_norm()) * 5.0f + 7.5f, lichKing->GetAngle(me));
+ Position pos = lichKing->GetNearPosition(float(rand_norm()) * 5.0f + 7.5f, lichKing->GetAngle(me));
me->GetMotionMaster()->MovePoint(0, pos);
}
}
@@ -1668,7 +1667,7 @@ class npc_strangulate_vehicle : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_strangulate_vehicleAI>(creature);
}
@@ -1686,12 +1685,12 @@ class npc_terenas_menethil : public CreatureScript
{
}
- bool CanAIAttack(Unit const* target) const OVERRIDE
+ bool CanAIAttack(Unit const* target) const override
{
return target->GetEntry() != NPC_THE_LICH_KING;
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -1718,7 +1717,7 @@ class npc_terenas_menethil : public CreatureScript
}
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
// no running back home
if (!me->IsAlive())
@@ -1728,7 +1727,7 @@ class npc_terenas_menethil : public CreatureScript
me->CombatStop(false);
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if (damage >= me->GetHealth())
{
@@ -1749,7 +1748,7 @@ class npc_terenas_menethil : public CreatureScript
}
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
_events.Reset();
_events.SetPhase(PHASE_OUTRO);
@@ -1760,7 +1759,7 @@ class npc_terenas_menethil : public CreatureScript
_events.ScheduleEvent(EVENT_OUTRO_TERENAS_TALK_2, 14000, 0, PHASE_OUTRO);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
UpdateVictim();
@@ -1821,7 +1820,7 @@ class npc_terenas_menethil : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_terenas_menethilAI>(creature);
}
@@ -1839,20 +1838,20 @@ class npc_spirit_warden : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_SOUL_RIP, urand(12000, 15000));
DoCast(SPELL_DARK_HUNGER);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* terenas = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_TERENAS_MENETHIL)))
terenas->AI()->DoAction(ACTION_TELEPORT_BACK);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1880,7 +1879,7 @@ class npc_spirit_warden : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_spirit_wardenAI>(creature);
}
@@ -1897,7 +1896,7 @@ class npc_spirit_bomb : public CreatureScript
{
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
float destX, destY, destZ;
me->GetPosition(destX, destY);
@@ -1906,7 +1905,7 @@ class npc_spirit_bomb : public CreatureScript
me->GetMotionMaster()->MovePoint(POINT_GROUND, destX, destY, destZ);
}
- void MovementInform(uint32 type, uint32 point) OVERRIDE
+ void MovementInform(uint32 type, uint32 point) override
{
if (type != POINT_MOTION_TYPE || point != POINT_GROUND)
return;
@@ -1916,18 +1915,18 @@ class npc_spirit_bomb : public CreatureScript
me->DespawnOrUnsummon(1000);
}
- void AttackStart(Unit* /*victim*/) OVERRIDE
+ void AttackStart(Unit* /*victim*/) override
{
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
UpdateVictim();
// no melee attacks
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_spirit_bombAI>(creature);
}
@@ -1944,28 +1943,28 @@ class npc_broken_frostmourne : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
_events.SetPhase(PHASE_OUTRO);
_events.ScheduleEvent(EVENT_OUTRO_KNOCK_BACK, 3000, 0, PHASE_OUTRO);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_SUMMON_TERENAS)
_events.ScheduleEvent(EVENT_OUTRO_SUMMON_TERENAS, 6000, 0, PHASE_OUTRO);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
UpdateVictim();
@@ -1993,7 +1992,7 @@ class npc_broken_frostmourne : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_broken_frostmourneAI>(creature);
}
@@ -2026,14 +2025,14 @@ class spell_the_lich_king_infest : public SpellScriptLoader
aurEff->SetAmount(int32(aurEff->GetAmount() * 1.15f));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_the_lich_king_infest_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_the_lich_king_infest_AuraScript::OnUpdate, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_the_lich_king_infest_AuraScript();
}
@@ -2048,7 +2047,7 @@ class spell_the_lich_king_necrotic_plague : public SpellScriptLoader
{
PrepareAuraScript(spell_the_lich_king_necrotic_plague_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_NECROTIC_PLAGUE_JUMP))
return false;
@@ -2075,13 +2074,13 @@ class spell_the_lich_king_necrotic_plague : public SpellScriptLoader
caster->CastSpell(caster, SPELL_PLAGUE_SIPHON, true);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_the_lich_king_necrotic_plague_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_the_lich_king_necrotic_plague_AuraScript();
}
@@ -2096,7 +2095,7 @@ class spell_the_lich_king_necrotic_plague_jump : public SpellScriptLoader
{
PrepareSpellScript(spell_the_lich_king_necrotic_plague_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_hadAura = false;
return true;
@@ -2123,7 +2122,7 @@ class spell_the_lich_king_necrotic_plague_jump : public SpellScriptLoader
GetHitAura()->ModStackAmount(1);
}
- void Register() OVERRIDE
+ void Register() override
{
BeforeHit += SpellHitFn(spell_the_lich_king_necrotic_plague_SpellScript::CheckAura);
OnHit += SpellHitFn(spell_the_lich_king_necrotic_plague_SpellScript::AddMissingStack);
@@ -2136,7 +2135,7 @@ class spell_the_lich_king_necrotic_plague_jump : public SpellScriptLoader
{
PrepareAuraScript(spell_the_lich_king_necrotic_plague_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_lastAmount = 0;
return true;
@@ -2189,7 +2188,7 @@ class spell_the_lich_king_necrotic_plague_jump : public SpellScriptLoader
Remove(AURA_REMOVE_BY_ENEMY_SPELL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_the_lich_king_necrotic_plague_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
AfterEffectRemove += AuraEffectRemoveFn(spell_the_lich_king_necrotic_plague_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
@@ -2200,12 +2199,12 @@ class spell_the_lich_king_necrotic_plague_jump : public SpellScriptLoader
int32 _lastAmount;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_necrotic_plague_SpellScript();
}
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_the_lich_king_necrotic_plague_AuraScript();
}
@@ -2226,13 +2225,13 @@ class spell_the_lich_king_shadow_trap_visual : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), SPELL_SHADOW_TRAP_AURA, TRIGGERED_NONE);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_the_lich_king_shadow_trap_visual_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_the_lich_king_shadow_trap_visual_AuraScript();
}
@@ -2255,13 +2254,13 @@ class spell_the_lich_king_shadow_trap_periodic : public SpellScriptLoader
GetCaster()->CastSpell((Unit*)NULL, SPELL_SHADOW_TRAP_KNOCKBACK, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_shadow_trap_periodic_SpellScript::CheckTargetCount, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_shadow_trap_periodic_SpellScript();
}
@@ -2276,7 +2275,7 @@ class spell_the_lich_king_quake : public SpellScriptLoader
{
PrepareSpellScript(spell_the_lich_king_quake_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetInstanceScript() != NULL;
}
@@ -2293,14 +2292,14 @@ class spell_the_lich_king_quake : public SpellScriptLoader
GetCaster()->GetAI()->DoAction(ACTION_START_ATTACK);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_quake_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
OnEffectHit += SpellEffectFn(spell_the_lich_king_quake_SpellScript::HandleSendEvent, EFFECT_1, SPELL_EFFECT_SEND_EVENT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_quake_SpellScript();
}
@@ -2315,7 +2314,7 @@ class spell_the_lich_king_ice_burst_target_search : public SpellScriptLoader
{
PrepareSpellScript(spell_the_lich_king_ice_burst_target_search_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ICE_BURST))
return false;
@@ -2337,13 +2336,13 @@ class spell_the_lich_king_ice_burst_target_search : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_ice_burst_target_search_SpellScript::CheckTargetCount, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_ice_burst_target_search_SpellScript();
}
@@ -2358,7 +2357,7 @@ class spell_the_lich_king_raging_spirit : public SpellScriptLoader
{
PrepareSpellScript(spell_the_lich_king_raging_spirit_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_LIFE_SIPHON_HEAL))
return false;
@@ -2371,13 +2370,13 @@ class spell_the_lich_king_raging_spirit : public SpellScriptLoader
GetHitUnit()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_the_lich_king_raging_spirit_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_raging_spirit_SpellScript();
}
@@ -2421,7 +2420,7 @@ class spell_the_lich_king_defile : public SpellScriptLoader
GetCaster()->CastSpell(GetCaster(), SPELL_DEFILE_GROW, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_defile_SpellScript::CorrectRange, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_defile_SpellScript::CorrectRange, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
@@ -2429,7 +2428,7 @@ class spell_the_lich_king_defile : public SpellScriptLoader
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_defile_SpellScript();
}
@@ -2458,13 +2457,13 @@ class spell_the_lich_king_summon_into_air : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_the_lich_king_summon_into_air_SpellScript::ModDestHeight, EFFECT_0, SPELL_EFFECT_SUMMON);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_summon_into_air_SpellScript();
}
@@ -2479,7 +2478,7 @@ class spell_the_lich_king_soul_reaper : public SpellScriptLoader
{
PrepareAuraScript(spell_the_lich_king_soul_reaper_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SOUL_REAPER_BUFF))
return false;
@@ -2492,13 +2491,13 @@ class spell_the_lich_king_soul_reaper : public SpellScriptLoader
GetTarget()->CastSpell(caster, SPELL_SOUL_REAPER_BUFF, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_the_lich_king_soul_reaper_AuraScript::OnPeriodic, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_the_lich_king_soul_reaper_AuraScript();
}
@@ -2513,14 +2512,14 @@ class spell_the_lich_king_valkyr_target_search : public SpellScriptLoader
{
PrepareSpellScript(spell_the_lich_king_valkyr_target_search_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ICE_BURST))
return false;
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
_target = NULL;
return true;
@@ -2554,7 +2553,7 @@ class spell_the_lich_king_valkyr_target_search : public SpellScriptLoader
GetCaster()->CastSpell(GetHitUnit(), SPELL_CHARGE, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_valkyr_target_search_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_valkyr_target_search_SpellScript::ReplaceTarget, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
@@ -2564,7 +2563,7 @@ class spell_the_lich_king_valkyr_target_search : public SpellScriptLoader
WorldObject* _target;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_valkyr_target_search_SpellScript();
}
@@ -2584,13 +2583,13 @@ class spell_the_lich_king_cast_back_to_caster : public SpellScriptLoader
GetHitUnit()->CastSpell(GetCaster(), uint32(GetEffectValue()), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_the_lich_king_cast_back_to_caster_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_cast_back_to_caster_SpellScript();
}
@@ -2605,7 +2604,7 @@ class spell_the_lich_king_life_siphon : public SpellScriptLoader
{
PrepareSpellScript(spell_the_lich_king_life_siphon_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_LIFE_SIPHON_HEAL))
return false;
@@ -2617,13 +2616,13 @@ class spell_the_lich_king_life_siphon : public SpellScriptLoader
GetHitUnit()->CastCustomSpell(SPELL_LIFE_SIPHON_HEAL, SPELLVALUE_BASE_POINT0, GetHitDamage() * 10, GetCaster(), true);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterHit += SpellHitFn(spell_the_lich_king_life_siphon_SpellScript::TriggerHeal);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_life_siphon_SpellScript();
}
@@ -2638,7 +2637,7 @@ class spell_the_lich_king_vile_spirits : public SpellScriptLoader
{
PrepareAuraScript(spell_the_lich_king_vile_spirits_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_is25Man = GetUnitOwner()->GetMap()->Is25ManRaid();
return true;
@@ -2650,7 +2649,7 @@ class spell_the_lich_king_vile_spirits : public SpellScriptLoader
GetTarget()->CastSpell((Unit*)NULL, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true, NULL, aurEff, GetCasterGUID());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_the_lich_king_vile_spirits_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
@@ -2658,7 +2657,7 @@ class spell_the_lich_king_vile_spirits : public SpellScriptLoader
bool _is25Man;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_the_lich_king_vile_spirits_AuraScript();
}
@@ -2679,13 +2678,13 @@ class spell_the_lich_king_vile_spirits_visual : public SpellScriptLoader
const_cast<WorldLocation*>(GetExplTargetDest())->RelocateOffset(offset);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectLaunch += SpellEffectFn(spell_the_lich_king_vile_spirits_visual_SpellScript::ModDestHeight, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_vile_spirits_visual_SpellScript();
}
@@ -2700,7 +2699,7 @@ class spell_the_lich_king_vile_spirit_move_target_search : public SpellScriptLoa
{
PrepareSpellScript(spell_the_lich_king_vile_spirit_move_target_search_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_target = NULL;
return GetCaster()->GetTypeId() == TYPEID_UNIT;
@@ -2725,7 +2724,7 @@ class spell_the_lich_king_vile_spirit_move_target_search : public SpellScriptLoa
GetCaster()->AddThreat(GetHitUnit(), 100000.0f);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_vile_spirit_move_target_search_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnEffectHitTarget += SpellEffectFn(spell_the_lich_king_vile_spirit_move_target_search_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
@@ -2734,7 +2733,7 @@ class spell_the_lich_king_vile_spirit_move_target_search : public SpellScriptLoa
WorldObject* _target;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_vile_spirit_move_target_search_SpellScript();
}
@@ -2749,7 +2748,7 @@ class spell_the_lich_king_vile_spirit_damage_target_search : public SpellScriptL
{
PrepareSpellScript(spell_the_lich_king_vile_spirit_damage_target_search_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
@@ -2769,13 +2768,13 @@ class spell_the_lich_king_vile_spirit_damage_target_search : public SpellScriptL
GetCaster()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_vile_spirit_damage_target_search_SpellScript::CheckTargetCount, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_vile_spirit_damage_target_search_SpellScript();
}
@@ -2790,7 +2789,7 @@ class spell_the_lich_king_harvest_soul : public SpellScriptLoader
{
PrepareAuraScript(spell_the_lich_king_harvest_soul_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetOwner()->GetInstanceScript() != NULL;
}
@@ -2802,13 +2801,13 @@ class spell_the_lich_king_harvest_soul : public SpellScriptLoader
GetTarget()->CastSpell((Unit*)NULL, SPELL_HARVESTED_SOUL, true, NULL, NULL, GetTarget()->GetInstanceScript()->GetData64(DATA_THE_LICH_KING));
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_the_lich_king_harvest_soul_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_the_lich_king_harvest_soul_AuraScript();
}
@@ -2838,14 +2837,14 @@ class spell_the_lich_king_lights_favor : public SpellScriptLoader
amount = int32(caster->GetHealthPct());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_the_lich_king_lights_favor_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_HEAL);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_the_lich_king_lights_favor_AuraScript::CalculateBonus, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_the_lich_king_lights_favor_AuraScript();
}
@@ -2868,13 +2867,13 @@ class spell_the_lich_king_soul_rip : public SpellScriptLoader
caster->CastCustomSpell(SPELL_SOUL_RIP_DAMAGE, SPELLVALUE_BASE_POINT0, 5000 * aurEff->GetTickNumber(), GetTarget(), true, NULL, aurEff, GetCasterGUID());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_the_lich_king_soul_rip_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_the_lich_king_soul_rip_AuraScript();
}
@@ -2889,7 +2888,7 @@ class spell_the_lich_king_restore_soul : public SpellScriptLoader
{
PrepareSpellScript(spell_the_lich_king_restore_soul_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_instance = GetCaster()->GetInstanceScript();
return _instance != NULL;
@@ -2918,7 +2917,7 @@ class spell_the_lich_king_restore_soul : public SpellScriptLoader
target->RemoveAurasDueToSpell(target->GetMap()->IsHeroic() ? SPELL_HARVEST_SOULS_TELEPORT : SPELL_HARVEST_SOUL_TELEPORT);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_the_lich_king_restore_soul_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
BeforeHit += SpellHitFn(spell_the_lich_king_restore_soul_SpellScript::RemoveAura);
@@ -2927,7 +2926,7 @@ class spell_the_lich_king_restore_soul : public SpellScriptLoader
InstanceScript* _instance;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_restore_soul_SpellScript();
}
@@ -2942,7 +2941,7 @@ class spell_the_lich_king_dark_hunger : public SpellScriptLoader
{
PrepareAuraScript(spell_the_lich_king_dark_hunger_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DARK_HUNGER_HEAL))
return false;
@@ -2956,13 +2955,13 @@ class spell_the_lich_king_dark_hunger : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_DARK_HUNGER_HEAL, SPELLVALUE_BASE_POINT0, heal, GetTarget(), true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_the_lich_king_dark_hunger_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_the_lich_king_dark_hunger_AuraScript();
}
@@ -2977,7 +2976,7 @@ class spell_the_lich_king_in_frostmourne_room : public SpellScriptLoader
{
PrepareAuraScript(spell_the_lich_king_in_frostmourne_room_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetOwner()->GetInstanceScript() != NULL;
}
@@ -2989,13 +2988,13 @@ class spell_the_lich_king_in_frostmourne_room : public SpellScriptLoader
GetTarget()->CastSpell((Unit*)NULL, SPELL_HARVESTED_SOUL, true, NULL, NULL, GetTarget()->GetInstanceScript()->GetData64(DATA_THE_LICH_KING));
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_the_lich_king_in_frostmourne_room_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_the_lich_king_in_frostmourne_room_AuraScript();
}
@@ -3016,13 +3015,13 @@ class spell_the_lich_king_summon_spirit_bomb : public SpellScriptLoader
GetHitUnit()->CastSpell((Unit*)NULL, uint32(GetEffectValue()), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_the_lich_king_summon_spirit_bomb_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_summon_spirit_bomb_SpellScript();
}
@@ -3046,13 +3045,13 @@ class spell_the_lich_king_trigger_vile_spirit : public SpellScriptLoader
VileSpiritActivateEvent(target).Execute(0, 0);
}
- void Register() OVERRIDE
+ void Register() override
{
OnHit += SpellHitFn(spell_the_lich_king_trigger_vile_spirit_SpellScript::ActivateSpirit);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_trigger_vile_spirit_SpellScript();
}
@@ -3076,13 +3075,13 @@ class spell_the_lich_king_jump : public SpellScriptLoader
creature->AI()->DoAction(ACTION_BREAK_FROSTMOURNE);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_the_lich_king_jump_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_jump_SpellScript();
}
@@ -3103,13 +3102,13 @@ class spell_the_lich_king_jump_remove_aura : public SpellScriptLoader
GetHitUnit()->RemoveAurasDueToSpell(uint32(GetEffectValue()));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_the_lich_king_jump_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_jump_SpellScript();
}
@@ -3124,7 +3123,7 @@ class spell_the_lich_king_play_movie : public SpellScriptLoader
{
PrepareSpellScript(spell_the_lich_king_play_movie_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sMovieStore.LookupEntry(MOVIE_FALL_OF_THE_LICH_KING))
return false;
@@ -3138,13 +3137,13 @@ class spell_the_lich_king_play_movie : public SpellScriptLoader
player->SendMovieStart(MOVIE_FALL_OF_THE_LICH_KING);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_the_lich_king_play_movie_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_the_lich_king_play_movie_SpellScript();
}
@@ -3155,7 +3154,7 @@ class achievement_been_waiting_long_time : public AchievementCriteriaScript
public:
achievement_been_waiting_long_time() : AchievementCriteriaScript("achievement_been_waiting_long_time") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
if (!target)
return false;
@@ -3169,7 +3168,7 @@ class achievement_neck_deep_in_vile : public AchievementCriteriaScript
public:
achievement_neck_deep_in_vile() : AchievementCriteriaScript("achievement_neck_deep_in_vile") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
index e56bde39ae7..0c504842c08 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
@@ -284,7 +284,7 @@ class boss_valithria_dreamwalker : public CreatureScript
{
}
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetDBTableGUIDLow()))
if (data->curhealth)
@@ -294,7 +294,7 @@ class boss_valithria_dreamwalker : public CreatureScript
Reset();
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetHealth(_spawnHealth);
me->SetReactState(REACT_PASSIVE);
@@ -312,11 +312,11 @@ class boss_valithria_dreamwalker : public CreatureScript
_done = false;
}
- void AttackStart(Unit* /*target*/) OVERRIDE
+ void AttackStart(Unit* /*target*/) override
{
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action != ACTION_ENTER_COMBAT)
return;
@@ -329,7 +329,7 @@ class boss_valithria_dreamwalker : public CreatureScript
_events.ScheduleEvent(EVENT_BERSERK, 420000);
}
- void HealReceived(Unit* healer, uint32& heal) OVERRIDE
+ void HealReceived(Unit* healer, uint32& heal) override
{
if (!me->hasLootRecipient())
me->SetLootRecipient(healer);
@@ -359,7 +359,7 @@ class boss_valithria_dreamwalker : public CreatureScript
archmage->AI()->DoZoneInCombat(); // call EnterCombat on one of them, that will make it all start
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if (me->HealthBelowPctDamaged(25, damage))
{
@@ -384,7 +384,7 @@ class boss_valithria_dreamwalker : public CreatureScript
}
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_DREAM_SLIP)
{
@@ -402,7 +402,7 @@ class boss_valithria_dreamwalker : public CreatureScript
}
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() == NPC_DREAM_PORTAL_PRE_EFFECT)
{
@@ -416,14 +416,14 @@ class boss_valithria_dreamwalker : public CreatureScript
}
}
- void SummonedCreatureDespawn(Creature* summon) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summon) override
{
if (summon->GetEntry() == NPC_DREAM_PORTAL || summon->GetEntry() == NPC_NIGHTMARE_PORTAL)
if (summon->AI()->GetData(MISSED_PORTALS))
++_missedPortals;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// does not enter combat
if (_instance->GetBossState(DATA_VALITHRIA_DREAMWALKER) != IN_PROGRESS)
@@ -460,7 +460,7 @@ class boss_valithria_dreamwalker : public CreatureScript
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == MISSED_PORTALS)
return _missedPortals;
@@ -480,7 +480,7 @@ class boss_valithria_dreamwalker : public CreatureScript
bool _done;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<boss_valithria_dreamwalkerAI>(creature);
}
@@ -497,13 +497,13 @@ class npc_green_dragon_combat_trigger : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
me->SetReactState(REACT_PASSIVE);
}
- void EnterCombat(Unit* target) OVERRIDE
+ void EnterCombat(Unit* target) override
{
if (!instance->CheckRequiredBosses(DATA_VALITHRIA_DREAMWALKER, target->ToPlayer()))
{
@@ -519,24 +519,24 @@ class npc_green_dragon_combat_trigger : public CreatureScript
valithria->AI()->DoAction(ACTION_ENTER_COMBAT);
}
- void AttackStart(Unit* target) OVERRIDE
+ void AttackStart(Unit* target) override
{
if (target->GetTypeId() == TYPEID_PLAYER)
BossAI::AttackStart(target);
}
- bool CanAIAttack(Unit const* target) const OVERRIDE
+ bool CanAIAttack(Unit const* target) const override
{
return target->GetTypeId() == TYPEID_PLAYER;
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
_JustReachedHome();
DoAction(ACTION_DEATH);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_DEATH)
{
@@ -545,7 +545,7 @@ class npc_green_dragon_combat_trigger : public CreatureScript
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!me->IsInCombat())
return;
@@ -575,7 +575,7 @@ class npc_green_dragon_combat_trigger : public CreatureScript
bool _evadeCheck;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_green_dragon_combat_triggerAI>(creature);
}
@@ -593,7 +593,7 @@ class npc_the_lich_king_controller : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_GLUTTONOUS_ABOMINATION_SUMMONER, 5000);
@@ -604,18 +604,18 @@ class npc_the_lich_king_controller : public CreatureScript
me->SetReactState(REACT_PASSIVE);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
me->setActive(false);
}
- void EnterCombat(Unit* /*target*/) OVERRIDE
+ void EnterCombat(Unit* /*target*/) override
{
Talk(SAY_LICH_KING_INTRO);
me->setActive(true);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
// must not be in dream phase
summon->SetPhaseMask((summon->GetPhaseMask() & ~0x10), true);
@@ -624,7 +624,7 @@ class npc_the_lich_king_controller : public CreatureScript
summon->AI()->AttackStart(target);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -664,7 +664,7 @@ class npc_the_lich_king_controller : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_the_lich_king_controllerAI>(creature);
}
@@ -682,12 +682,12 @@ class npc_risen_archmage : public CreatureScript
{
}
- bool CanAIAttack(Unit const* target) const OVERRIDE
+ bool CanAIAttack(Unit const* target) const override
{
return target->GetEntry() != NPC_VALITHRIA_DREAMWALKER;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_FROSTBOLT_VOLLEY, urand(5000, 15000));
@@ -696,7 +696,7 @@ class npc_risen_archmage : public CreatureScript
_canCallEnterCombat = true;
}
- void EnterCombat(Unit* /*target*/) OVERRIDE
+ void EnterCombat(Unit* /*target*/) override
{
me->FinishSpell(CURRENT_CHANNELED_SPELL, false);
if (me->GetDBTableGUIDLow() && _canCallEnterCombat)
@@ -716,7 +716,7 @@ class npc_risen_archmage : public CreatureScript
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action != ACTION_ENTER_COMBAT)
return;
@@ -726,7 +726,7 @@ class npc_risen_archmage : public CreatureScript
_canCallEnterCombat = true;
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() == NPC_COLUMN_OF_FROST)
summon->m_Events.AddEvent(new DelayedCastEvent(summon, SPELL_COLUMN_OF_FROST_DAMAGE, 0, 8000), summon->m_Events.CalculateTime(2000));
@@ -734,7 +734,7 @@ class npc_risen_archmage : public CreatureScript
summon->DespawnOrUnsummon(36000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!me->IsInCombat())
if (me->GetDBTableGUIDLow())
@@ -781,7 +781,7 @@ class npc_risen_archmage : public CreatureScript
bool _canCallEnterCombat;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_risen_archmageAI>(creature);
}
@@ -798,14 +798,14 @@ class npc_blazing_skeleton : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_FIREBALL, urand(2000, 4000));
_events.ScheduleEvent(EVENT_LEY_WASTE, urand(15000, 20000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -840,7 +840,7 @@ class npc_blazing_skeleton : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_blazing_skeletonAI>(creature);
}
@@ -858,20 +858,20 @@ class npc_suppresser : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_SUPPRESSION, urand(10000, 15000));
me->SetReactState(REACT_PASSIVE);
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
if (Creature* valithria = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_VALITHRIA_DREAMWALKER)))
AttackStart(valithria);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -906,7 +906,7 @@ class npc_suppresser : public CreatureScript
InstanceScript* const _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_suppresserAI>(creature);
}
@@ -923,12 +923,12 @@ class npc_blistering_zombie : public CreatureScript
{
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
DoCast(me, SPELL_ACID_BURST, true);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
return;
@@ -937,7 +937,7 @@ class npc_blistering_zombie : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_blistering_zombieAI>(creature);
}
@@ -954,18 +954,18 @@ class npc_gluttonous_abomination : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_GUT_SPRAY, urand(10000, 13000));
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
DoCast(me, SPELL_ROT_WORM_SPAWNER, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -995,7 +995,7 @@ class npc_gluttonous_abomination : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_gluttonous_abominationAI>(creature);
}
@@ -1013,7 +1013,7 @@ class npc_dream_portal : public CreatureScript
{
}
- void OnSpellClick(Unit* /*clicker*/, bool& result) OVERRIDE
+ void OnSpellClick(Unit* /*clicker*/, bool& result) override
{
if (!result)
return;
@@ -1022,12 +1022,12 @@ class npc_dream_portal : public CreatureScript
me->DespawnOrUnsummon();
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
return (type == MISSED_PORTALS && _used) ? 0 : 1;
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
UpdateVictim();
}
@@ -1036,7 +1036,7 @@ class npc_dream_portal : public CreatureScript
bool _used;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_dream_portalAI>(creature);
}
@@ -1054,7 +1054,7 @@ class npc_dream_cloud : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_CHECK_PLAYER, 1000);
@@ -1062,7 +1062,7 @@ class npc_dream_cloud : public CreatureScript
me->LoadCreaturesAddon(true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// trigger
if (_instance->GetBossState(DATA_VALITHRIA_DREAMWALKER) != IN_PROGRESS)
@@ -1100,7 +1100,7 @@ class npc_dream_cloud : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_dream_cloudAI>(creature);
}
@@ -1124,13 +1124,13 @@ class spell_dreamwalker_mana_void : public SpellScriptLoader
PreventDefaultAction();
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_dreamwalker_mana_void_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dreamwalker_mana_void_AuraScript();
}
@@ -1145,7 +1145,7 @@ class spell_dreamwalker_decay_periodic_timer : public SpellScriptLoader
{
PrepareAuraScript(spell_dreamwalker_decay_periodic_timer_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_decayRate = GetId() != SPELL_TIMER_BLAZING_SKELETON ? 1000 : 5000;
return true;
@@ -1160,7 +1160,7 @@ class spell_dreamwalker_decay_periodic_timer : public SpellScriptLoader
aurEff->SetPeriodicTimer(timer - _decayRate);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_dreamwalker_decay_periodic_timer_AuraScript::DecayPeriodicTimer, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
@@ -1168,7 +1168,7 @@ class spell_dreamwalker_decay_periodic_timer : public SpellScriptLoader
int32 _decayRate;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dreamwalker_decay_periodic_timer_AuraScript();
}
@@ -1183,7 +1183,7 @@ class spell_dreamwalker_summoner : public SpellScriptLoader
{
PrepareSpellScript(spell_dreamwalker_summoner_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster()->GetInstanceScript())
return false;
@@ -1210,14 +1210,14 @@ class spell_dreamwalker_summoner : public SpellScriptLoader
GetHitUnit()->CastSpell(GetCaster(), GetSpellInfo()->Effects[effIndex].TriggerSpell, true, NULL, NULL, GetCaster()->GetInstanceScript()->GetData64(DATA_VALITHRIA_LICH_KING));
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dreamwalker_summoner_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
OnEffectHitTarget += SpellEffectFn(spell_dreamwalker_summoner_SpellScript::HandleForceCast, EFFECT_0, SPELL_EFFECT_FORCE_CAST);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dreamwalker_summoner_SpellScript();
}
@@ -1252,13 +1252,13 @@ class spell_dreamwalker_summon_suppresser : public SpellScriptLoader
caster->CastSpell(summoners.back(), SPELL_SUMMON_SUPPRESSER, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_dreamwalker_summon_suppresser_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dreamwalker_summon_suppresser_AuraScript();
}
@@ -1273,7 +1273,7 @@ class spell_dreamwalker_summon_suppresser_effect : public SpellScriptLoader
{
PrepareSpellScript(spell_dreamwalker_summon_suppresser_effect_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster()->GetInstanceScript())
return false;
@@ -1289,13 +1289,13 @@ class spell_dreamwalker_summon_suppresser_effect : public SpellScriptLoader
GetHitUnit()->CastSpell(GetCaster(), GetSpellInfo()->Effects[effIndex].TriggerSpell, true, NULL, NULL, GetCaster()->GetInstanceScript()->GetData64(DATA_VALITHRIA_LICH_KING));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_dreamwalker_summon_suppresser_effect_SpellScript::HandleForceCast, EFFECT_0, SPELL_EFFECT_FORCE_CAST);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dreamwalker_summon_suppresser_effect_SpellScript();
}
@@ -1320,13 +1320,13 @@ class spell_dreamwalker_summon_dream_portal : public SpellScriptLoader
GetHitUnit()->CastSpell(GetHitUnit(), spellId, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_dreamwalker_summon_dream_portal_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dreamwalker_summon_dream_portal_SpellScript();
}
@@ -1351,13 +1351,13 @@ class spell_dreamwalker_summon_nightmare_portal : public SpellScriptLoader
GetHitUnit()->CastSpell(GetHitUnit(), spellId, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_dreamwalker_summon_nightmare_portal_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dreamwalker_summon_nightmare_portal_SpellScript();
}
@@ -1372,7 +1372,7 @@ class spell_dreamwalker_nightmare_cloud : public SpellScriptLoader
{
PrepareAuraScript(spell_dreamwalker_nightmare_cloud_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_instance = GetOwner()->GetInstanceScript();
return _instance != NULL;
@@ -1384,7 +1384,7 @@ class spell_dreamwalker_nightmare_cloud : public SpellScriptLoader
PreventDefaultAction();
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_dreamwalker_nightmare_cloud_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
@@ -1392,7 +1392,7 @@ class spell_dreamwalker_nightmare_cloud : public SpellScriptLoader
InstanceScript* _instance;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dreamwalker_nightmare_cloud_AuraScript();
}
@@ -1418,13 +1418,13 @@ class spell_dreamwalker_twisted_nightmares : public SpellScriptLoader
GetHitUnit()->CastSpell((Unit*)NULL, GetSpellInfo()->Effects[effIndex].TriggerSpell, true, NULL, NULL, instance->GetData64(DATA_VALITHRIA_DREAMWALKER));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_dreamwalker_twisted_nightmares_SpellScript::HandleScript, EFFECT_2, SPELL_EFFECT_FORCE_CAST);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dreamwalker_twisted_nightmares_SpellScript();
}
@@ -1435,7 +1435,7 @@ class achievement_portal_jockey : public AchievementCriteriaScript
public:
achievement_portal_jockey() : AchievementCriteriaScript("achievement_portal_jockey") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
return target && !target->GetAI()->GetData(MISSED_PORTALS);
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
index ca2c75e502c..e85ddc21dda 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -387,7 +387,7 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_theLichKing = 0;
@@ -398,7 +398,7 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript
// IMPORTANT NOTE: This is triggered from per-GUID scripts
// of The Damned SAI
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
if (type == DATA_DAMNED_KILLS && data == 1)
{
@@ -460,7 +460,7 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_damnedKills != 2)
return;
@@ -581,7 +581,7 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript
uint16 _damnedKills;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_highlord_tirion_fordringAI>(creature);
}
@@ -598,7 +598,7 @@ class npc_rotting_frost_giant : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_DEATH_PLAGUE, 15000);
@@ -606,12 +606,12 @@ class npc_rotting_frost_giant : public CreatureScript
_events.ScheduleEvent(EVENT_ARCTIC_BREATH, urand(10000, 15000));
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_events.Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -653,7 +653,7 @@ class npc_rotting_frost_giant : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_rotting_frost_giantAI>(creature);
}
@@ -671,7 +671,7 @@ class npc_frost_freeze_trap : public CreatureScript
SetCombatMovement(false);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -684,7 +684,7 @@ class npc_frost_freeze_trap : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
@@ -699,7 +699,7 @@ class npc_frost_freeze_trap : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_frost_freeze_trapAI>(creature);
}
@@ -710,7 +710,7 @@ class npc_alchemist_adrianna : public CreatureScript
public:
npc_alchemist_adrianna() : CreatureScript("npc_alchemist_adrianna") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (!creature->FindCurrentSpellBySpellId(SPELL_HARVEST_BLIGHT_SPECIMEN) && !creature->FindCurrentSpellBySpellId(SPELL_HARVEST_BLIGHT_SPECIMEN25))
if (player->HasAura(SPELL_ORANGE_BLIGHT_RESIDUE) && player->HasAura(SPELL_GREEN_BLIGHT_RESIDUE))
@@ -731,7 +731,7 @@ class boss_sister_svalna : public CreatureScript
{
}
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
if (!me->isDead())
Reset();
@@ -739,14 +739,14 @@ class boss_sister_svalna : public CreatureScript
me->SetReactState(REACT_PASSIVE);
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
me->SetReactState(REACT_DEFENSIVE);
_isEventInProgress = false;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_SVALNA_DEATH);
@@ -765,7 +765,7 @@ class boss_sister_svalna : public CreatureScript
}
}
- void EnterCombat(Unit* /*attacker*/) OVERRIDE
+ void EnterCombat(Unit* /*attacker*/) override
{
_EnterCombat();
if (Creature* crok = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_CROK_SCOURGEBANE)))
@@ -775,7 +775,7 @@ class boss_sister_svalna : public CreatureScript
events.ScheduleEvent(EVENT_AETHER_SHIELD, urand(100000, 110000));
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
switch (victim->GetTypeId())
{
@@ -800,7 +800,7 @@ class boss_sister_svalna : public CreatureScript
}
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
_JustReachedHome();
me->SetReactState(REACT_PASSIVE);
@@ -808,7 +808,7 @@ class boss_sister_svalna : public CreatureScript
me->SetHover(false);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -836,7 +836,7 @@ class boss_sister_svalna : public CreatureScript
}
}
- void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* caster, SpellInfo const* spell) override
{
if (spell->Id == SPELL_HURL_SPEAR && me->HasAura(SPELL_AETHER_SHIELD))
{
@@ -845,7 +845,7 @@ class boss_sister_svalna : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != EFFECT_MOTION_TYPE || id != POINT_LAND)
return;
@@ -857,7 +857,7 @@ class boss_sister_svalna : public CreatureScript
me->SetHover(false);
}
- void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, SpellInfo const* spell) override
{
switch (spell->Id)
{
@@ -877,7 +877,7 @@ class boss_sister_svalna : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() && !_isEventInProgress)
return;
@@ -922,7 +922,7 @@ class boss_sister_svalna : public CreatureScript
bool _isEventInProgress;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<boss_sister_svalnaAI>(creature);
}
@@ -946,7 +946,7 @@ class npc_crok_scourgebane : public CreatureScript
_didUnderTenPercentText = false;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_SCOURGE_STRIKE, urand(7500, 12500));
@@ -956,7 +956,7 @@ class npc_crok_scourgebane : public CreatureScript
_wipeCheckTimer = 1000;
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_START_GAUNTLET)
{
@@ -988,7 +988,7 @@ class npc_crok_scourgebane : public CreatureScript
}
}
- void SetGUID(uint64 guid, int32 type/* = 0*/) OVERRIDE
+ void SetGUID(uint64 guid, int32 type/* = 0*/) override
{
if (type == ACTION_VRYKUL_DEATH)
{
@@ -1008,7 +1008,7 @@ class npc_crok_scourgebane : public CreatureScript
}
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -1038,7 +1038,7 @@ class npc_crok_scourgebane : public CreatureScript
}
}
- void WaypointStart(uint32 waypointId) OVERRIDE
+ void WaypointStart(uint32 waypointId) override
{
_currentWPid = waypointId;
switch (waypointId)
@@ -1086,7 +1086,7 @@ class npc_crok_scourgebane : public CreatureScript
}
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
// check wipe
if (!_wipeCheckTimer)
@@ -1128,7 +1128,7 @@ class npc_crok_scourgebane : public CreatureScript
}
}
- void UpdateEscortAI(uint32 const diff) OVERRIDE
+ void UpdateEscortAI(uint32 const diff) override
{
if (_wipeCheckTimer <= diff)
_wipeCheckTimer = 0;
@@ -1186,7 +1186,7 @@ class npc_crok_scourgebane : public CreatureScript
DoMeleeAttackIfReady();
}
- bool CanAIAttack(Unit const* target) const OVERRIDE
+ bool CanAIAttack(Unit const* target) const override
{
// do not see targets inside Frostwing Halls when we are not there
return (me->GetPositionY() > 2660.0f) == (target->GetPositionY() > 2660.0f);
@@ -1205,7 +1205,7 @@ class npc_crok_scourgebane : public CreatureScript
bool _didUnderTenPercentText;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_crok_scourgebaneAI>(creature);
}
@@ -1221,7 +1221,7 @@ struct npc_argent_captainAI : public ScriptedAI
IsUndead = false;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (_firstDeath)
{
@@ -1232,13 +1232,13 @@ struct npc_argent_captainAI : public ScriptedAI
Talk(SAY_CAPTAIN_SECOND_DEATH);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_CAPTAIN_KILL);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_START_GAUNTLET)
{
@@ -1258,20 +1258,20 @@ struct npc_argent_captainAI : public ScriptedAI
}
}
- void EnterCombat(Unit* /*target*/) OVERRIDE
+ void EnterCombat(Unit* /*target*/) override
{
me->SetHomePosition(*me);
if (IsUndead)
DoZoneInCombat();
}
- bool CanAIAttack(Unit const* target) const OVERRIDE
+ bool CanAIAttack(Unit const* target) const override
{
// do not see targets inside Frostwing Halls when we are not there
return (me->GetPositionY() > 2660.0f) == (target->GetPositionY() > 2660.0f);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
// not yet following
if (me->GetMotionMaster()->GetMotionSlotType(MOTION_SLOT_IDLE) != CHASE_MOTION_TYPE || IsUndead)
@@ -1293,7 +1293,7 @@ struct npc_argent_captainAI : public ScriptedAI
Reset();
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_REVIVE_CHAMPION && !IsUndead)
{
@@ -1319,7 +1319,7 @@ struct npc_argent_captainAI : public ScriptedAI
}
Talk(SAY_CAPTAIN_RESURRECTED);
- me->UpdateEntry(newEntry, instance->GetData(DATA_TEAM_IN_INSTANCE), me->GetCreatureData());
+ me->UpdateEntry(newEntry, me->GetCreatureData());
DoCast(me, SPELL_UNDEATH, true);
}
}
@@ -1346,7 +1346,7 @@ class npc_captain_arnath : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
Events.Reset();
Events.ScheduleEvent(EVENT_ARNATH_FLASH_HEAL, urand(4000, 7000));
@@ -1356,7 +1356,7 @@ class npc_captain_arnath : public CreatureScript
Events.ScheduleEvent(EVENT_ARNATH_DOMINATE_MIND, urand(22000, 27000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1410,7 +1410,7 @@ class npc_captain_arnath : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_captain_arnathAI>(creature);
}
@@ -1427,7 +1427,7 @@ class npc_captain_brandon : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
Events.Reset();
Events.ScheduleEvent(EVENT_BRANDON_CRUSADER_STRIKE, urand(6000, 10000));
@@ -1437,7 +1437,7 @@ class npc_captain_brandon : public CreatureScript
Events.ScheduleEvent(EVENT_BRANDON_HAMMER_OF_BETRAYAL, urand(25000, 30000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1478,7 +1478,7 @@ class npc_captain_brandon : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_captain_brandonAI>(creature);
}
@@ -1495,7 +1495,7 @@ class npc_captain_grondel : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
Events.Reset();
Events.ScheduleEvent(EVENT_GRONDEL_CHARGE_CHECK, 500);
@@ -1505,7 +1505,7 @@ class npc_captain_grondel : public CreatureScript
Events.ScheduleEvent(EVENT_GRONDEL_CONFLAGRATION, urand(12000, 17000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1545,7 +1545,7 @@ class npc_captain_grondel : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_captain_grondelAI>(creature);
}
@@ -1562,7 +1562,7 @@ class npc_captain_rupert : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
Events.Reset();
Events.ScheduleEvent(EVENT_RUPERT_FEL_IRON_BOMB, urand(15000, 20000));
@@ -1570,7 +1570,7 @@ class npc_captain_rupert : public CreatureScript
Events.ScheduleEvent(EVENT_RUPERT_ROCKET_LAUNCH, urand(10000, 15000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1608,7 +1608,7 @@ class npc_captain_rupert : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_captain_rupertAI>(creature);
}
@@ -1625,14 +1625,14 @@ class npc_frostwing_vrykul : public CreatureScript
{
}
- bool CanAIAttack(Unit const* target) const OVERRIDE
+ bool CanAIAttack(Unit const* target) const override
{
// do not see targets inside Frostwing Halls when we are not there
return (me->GetPositionY() > 2660.0f) == (target->GetPositionY() > 2660.0f) && SmartAI::CanAIAttack(target);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_frostwing_vrykulAI(creature);
}
@@ -1649,13 +1649,13 @@ class npc_impaling_spear : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetReactState(REACT_PASSIVE);
_vehicleCheckTimer = 500;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_vehicleCheckTimer <= diff)
{
@@ -1670,7 +1670,7 @@ class npc_impaling_spear : public CreatureScript
uint32 _vehicleCheckTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_impaling_spearAI(creature);
}
@@ -1687,7 +1687,7 @@ class npc_arthas_teleport_visual : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
if (_instance->GetBossState(DATA_PROFESSOR_PUTRICIDE) == DONE &&
@@ -1696,7 +1696,7 @@ class npc_arthas_teleport_visual : public CreatureScript
_events.ScheduleEvent(EVENT_SOUL_MISSILE, urand(1000, 6000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_events.Empty())
return;
@@ -1715,7 +1715,7 @@ class npc_arthas_teleport_visual : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
// Distance from the center of the spire
if (creature->GetExactDist2d(4357.052f, 2769.421f) < 100.0f && creature->GetHomePosition().GetPositionZ() < 315.0f)
@@ -1755,14 +1755,14 @@ class spell_icc_stoneform : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_icc_stoneform_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_icc_stoneform_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_icc_stoneform_AuraScript();
}
@@ -1800,7 +1800,7 @@ class spell_icc_sprit_alarm : public SpellScriptLoader
}
if (GameObject* trap = GetCaster()->FindNearestGameObject(trapId, 5.0f))
- trap->SetRespawnTime(trap->GetGOInfo()->trap.autoCloseTime);
+ trap->SetRespawnTime(trap->GetGOInfo()->GetAutoCloseTime());
std::list<Creature*> wards;
GetCaster()->GetCreatureListWithEntryInGrid(wards, NPC_DEATHBOUND_WARD, 150.0f);
@@ -1818,13 +1818,13 @@ class spell_icc_sprit_alarm : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_icc_sprit_alarm_SpellScript::HandleEvent, EFFECT_2, SPELL_EFFECT_SEND_EVENT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_icc_sprit_alarm_SpellScript();
}
@@ -1862,7 +1862,7 @@ class spell_frost_giant_death_plague : public SpellScriptLoader
{
PrepareSpellScript(spell_frost_giant_death_plague_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_failed = false;
return true;
@@ -1899,7 +1899,7 @@ class spell_frost_giant_death_plague : public SpellScriptLoader
GetCaster()->CastSpell(GetCaster(), SPELL_DEATH_PLAGUE_KILL, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_frost_giant_death_plague_SpellScript::CountTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_frost_giant_death_plague_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ALLY);
@@ -1909,7 +1909,7 @@ class spell_frost_giant_death_plague : public SpellScriptLoader
bool _failed;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_frost_giant_death_plague_SpellScript();
}
@@ -1935,14 +1935,14 @@ class spell_icc_harvest_blight_specimen : public SpellScriptLoader
GetHitUnit()->RemoveAurasDueToSpell(uint32(GetEffectValue()));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_icc_harvest_blight_specimen_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
OnEffectHitTarget += SpellEffectFn(spell_icc_harvest_blight_specimen_SpellScript::HandleQuestComplete, EFFECT_1, SPELL_EFFECT_QUEST_COMPLETE);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_icc_harvest_blight_specimen_SpellScript();
}
@@ -1980,23 +1980,21 @@ class spell_svalna_revive_champion : public SpellScriptLoader
if (!caster)
return;
- Position pos;
- caster->GetPosition(&pos);
- caster->GetNearPosition(pos, 5.0f, 0.0f);
+ Position pos = caster->GetNearPosition(5.0f, 0.0f);
//pos.m_positionZ = caster->GetBaseMap()->GetHeight(caster->GetPhaseMask(), pos.GetPositionX(), pos.GetPositionY(), caster->GetPositionZ(), true, 50.0f);
//pos.m_positionZ += 0.05f;
caster->SetHomePosition(pos);
caster->GetMotionMaster()->MoveLand(POINT_LAND, pos);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_svalna_revive_champion_SpellScript::RemoveAliveTarget, EFFECT_0, TARGET_UNIT_DEST_AREA_ENTRY);
OnEffectHit += SpellEffectFn(spell_svalna_revive_champion_SpellScript::Land, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_svalna_revive_champion_SpellScript();
}
@@ -2022,13 +2020,13 @@ class spell_svalna_remove_spear : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_svalna_remove_spear_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_svalna_remove_spear_SpellScript();
}
@@ -2050,13 +2048,13 @@ class spell_icc_soul_missile : public SpellScriptLoader
dest.RelocateOffset(offset);
}
- void Register() OVERRIDE
+ void Register() override
{
OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_icc_soul_missile_SpellScript::RelocateDest, EFFECT_0, TARGET_DEST_CASTER);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_icc_soul_missile_SpellScript();
}
@@ -2067,7 +2065,7 @@ class at_icc_saurfang_portal : public AreaTriggerScript
public:
at_icc_saurfang_portal() : AreaTriggerScript("at_icc_saurfang_portal") { }
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
{
InstanceScript* instance = player->GetInstanceScript();
if (!instance || instance->GetBossState(DATA_DEATHBRINGER_SAURFANG) != DONE)
@@ -2101,10 +2099,18 @@ class at_icc_shutdown_traps : public AreaTriggerScript
public:
at_icc_shutdown_traps() : AreaTriggerScript("at_icc_shutdown_traps") { }
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
{
if (InstanceScript* instance = player->GetInstanceScript())
- instance->SetData(DATA_COLDFLAME_JETS, DONE);
+ {
+ instance->SetData(DATA_UPPERSPIRE_TELE_ACT, DONE);
+ uint64 teleporterGUID = instance->GetData64(GO_SCOURGE_TRANSPORTER_UPPERSPIRE);
+ if (GameObject* go = instance->instance->GetGameObject(teleporterGUID))
+ {
+ go->SetGoState(GO_STATE_ACTIVE);
+ go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ }
+ }
return true;
}
};
@@ -2114,7 +2120,7 @@ class at_icc_start_blood_quickening : public AreaTriggerScript
public:
at_icc_start_blood_quickening() : AreaTriggerScript("at_icc_start_blood_quickening") { }
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
{
if (InstanceScript* instance = player->GetInstanceScript())
if (instance->GetData(DATA_BLOOD_QUICKENING_STATE) == NOT_STARTED)
@@ -2128,7 +2134,7 @@ class at_icc_start_frostwing_gauntlet : public AreaTriggerScript
public:
at_icc_start_frostwing_gauntlet() : AreaTriggerScript("at_icc_start_frostwing_gauntlet") { }
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
{
if (InstanceScript* instance = player->GetInstanceScript())
if (Creature* crok = ObjectAccessor::GetCreature(*player, instance->GetData64(DATA_CROK_SCOURGEBANE)))
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
index 6aeab015b78..fbd3a715fb8 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
@@ -116,7 +116,8 @@ enum DataTypes
DATA_HIGHLORD_TIRION_FORDRING = 37,
DATA_ARTHAS_PLATFORM = 38,
DATA_TERENAS_MENETHIL = 39,
- DATA_ENEMY_GUNSHIP = 40
+ DATA_ENEMY_GUNSHIP = 40,
+ DATA_UPPERSPIRE_TELE_ACT = 41,
};
enum CreaturesIds
@@ -142,6 +143,10 @@ enum CreaturesIds
NPC_GARROSH_HELLSCREAM = 39372,
NPC_KING_VARIAN_WRYNN = 39371,
NPC_DEATHBOUND_WARD = 37007,
+ NPC_LADY_JAINA_PROUDMOORE_QUEST = 38606,
+ NPC_MURADIN_BRONZEBEARD_QUEST = 38607,
+ NPC_UTHER_THE_LIGHTBRINGER_QUEST = 38608,
+ NPC_LADY_SYLVANAS_WINDRUNNER_QUEST = 38609,
// Weekly quests
NPC_INFILTRATOR_MINCHAR = 38471,
@@ -318,6 +323,15 @@ enum CreaturesIds
enum GameObjectsIds
{
+ // ICC Teleporters
+ GO_SCOURGE_TRANSPORTER_LICHKING = 202223,
+ GO_SCOURGE_TRANSPORTER_UPPERSPIRE = 202235,
+ GO_SCOURGE_TRANSPORTER_LIGHTSHAMMER = 202242,
+ GO_SCOURGE_TRANSPORTER_RAMPART = 202243,
+ GO_SCOURGE_TRANSPORTER_DEATHBRINGER = 202244,
+ GO_SCOURGE_TRANSPORTER_ORATORY = 202245,
+ GO_SCOURGE_TRANSPORTER_SINDRAGOSA = 202246,
+
// Lower Spire Trash
GO_SPIRIT_ALARM_1 = 201814,
GO_SPIRIT_ALARM_2 = 201815,
@@ -355,7 +369,6 @@ enum GameObjectsIds
GO_DEATHBRINGER_S_CACHE_25N = 202240,
GO_DEATHBRINGER_S_CACHE_10H = 202238,
GO_DEATHBRINGER_S_CACHE_25H = 202241,
- GO_SCOURGE_TRANSPORTER_SAURFANG = 202244,
// Professor Putricide
GO_ORANGE_PLAGUE_MONSTER_ENTRANCE = 201371,
@@ -400,7 +413,6 @@ enum GameObjectsIds
GO_SIGIL_OF_THE_FROSTWING = 202181,
// The Lich King
- GO_SCOURGE_TRANSPORTER_LK = 202223,
GO_ARTHAS_PLATFORM = 202161,
GO_ARTHAS_PRECIPICE = 202078,
GO_DOODAD_ICECROWN_THRONEFROSTYWIND01 = 202188,
@@ -523,7 +535,7 @@ class spell_trigger_spell_from_caster : public SpellScriptLoader
public:
spell_trigger_spell_from_caster_SpellScript(uint32 triggerId) : SpellScript(), _triggerId(triggerId) { }
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(_triggerId))
return false;
@@ -535,7 +547,7 @@ class spell_trigger_spell_from_caster : public SpellScriptLoader
GetCaster()->CastSpell(GetHitUnit(), _triggerId, true);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterHit += SpellHitFn(spell_trigger_spell_from_caster_SpellScript::HandleTrigger);
}
@@ -543,7 +555,7 @@ class spell_trigger_spell_from_caster : public SpellScriptLoader
uint32 _triggerId;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_trigger_spell_from_caster_SpellScript(_triggerId);
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp
index b56e0dd6360..469bfc1d310 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp
@@ -29,21 +29,25 @@ class icecrown_citadel_teleport : public GameObjectScript
public:
icecrown_citadel_teleport() : GameObjectScript("icecrown_citadel_teleport") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to Light's Hammer.", GOSSIP_SENDER_ICC_PORT, LIGHT_S_HAMMER_TELEPORT);
if (InstanceScript* instance = go->GetInstanceScript())
{
if (instance->GetBossState(DATA_LORD_MARROWGAR) == DONE)
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Oratory of the Damned.", GOSSIP_SENDER_ICC_PORT, ORATORY_OF_THE_DAMNED_TELEPORT);
- if (instance->GetBossState(DATA_LADY_DEATHWHISPER) == DONE)
+ {
+ if (go->GetEntry() != GO_SCOURGE_TRANSPORTER_LIGHTSHAMMER)
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to Light's Hammer.", GOSSIP_SENDER_ICC_PORT, LIGHT_S_HAMMER_TELEPORT);
+ if (go->GetEntry() != GO_SCOURGE_TRANSPORTER_ORATORY)
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Oratory of the Damned.", GOSSIP_SENDER_ICC_PORT, ORATORY_OF_THE_DAMNED_TELEPORT);
+ }
+ if (instance->GetBossState(DATA_LADY_DEATHWHISPER) == DONE && go->GetEntry() != GO_SCOURGE_TRANSPORTER_RAMPART)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Rampart of Skulls.", GOSSIP_SENDER_ICC_PORT, RAMPART_OF_SKULLS_TELEPORT);
- if (instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) == DONE)
+ if (instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) == DONE && go->GetEntry() != GO_SCOURGE_TRANSPORTER_DEATHBRINGER)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Deathbringer's Rise.", GOSSIP_SENDER_ICC_PORT, DEATHBRINGER_S_RISE_TELEPORT);
- if (instance->GetData(DATA_COLDFLAME_JETS) == DONE)
+ if (instance->GetData(DATA_UPPERSPIRE_TELE_ACT) == DONE && go->GetEntry() != GO_SCOURGE_TRANSPORTER_UPPERSPIRE)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Upper Spire.", GOSSIP_SENDER_ICC_PORT, UPPER_SPIRE_TELEPORT);
/// @todo Gauntlet event before Sindragosa
- if (instance->GetBossState(DATA_VALITHRIA_DREAMWALKER) == DONE)
+ if (instance->GetBossState(DATA_VALITHRIA_DREAMWALKER) == DONE && go->GetEntry() != GO_SCOURGE_TRANSPORTER_SINDRAGOSA)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to Sindragosa's Lair", GOSSIP_SENDER_ICC_PORT, SINDRAGOSA_S_LAIR_TELEPORT);
}
@@ -51,7 +55,7 @@ class icecrown_citadel_teleport : public GameObjectScript
return true;
}
- bool OnGossipSelect(Player* player, GameObject* /*go*/, uint32 sender, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, GameObject* /*go*/, uint32 sender, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
player->CLOSE_GOSSIP_MENU();
@@ -77,7 +81,7 @@ class at_frozen_throne_teleport : public AreaTriggerScript
public:
at_frozen_throne_teleport() : AreaTriggerScript("at_frozen_throne_teleport") { }
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
{
if (player->IsInCombat())
{
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
index 31daa92cbe8..f7f8e3e2489 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
@@ -100,6 +100,12 @@ WeeklyQuest const WeeklyQuestData[WeeklyNPCs] =
{NPC_VALITHRIA_DREAMWALKER_QUEST, {QUEST_RESPITE_FOR_A_TORNMENTED_SOUL_10, QUEST_RESPITE_FOR_A_TORNMENTED_SOUL_25}} // Respite for a Tormented Soul
};
+// NPCs spawned at Light's Hammer on Lich King dead
+Position const JainaSpawnPos = { -48.65278f, 2211.026f, 27.98586f, 3.124139f };
+Position const MuradinSpawnPos = { -47.34549f, 2208.087f, 27.98586f, 3.106686f };
+Position const UtherSpawnPos = { -26.58507f, 2211.524f, 30.19898f, 3.124139f };
+Position const SylvanasSpawnPos = { -41.45833f, 2222.891f, 27.98586f, 3.647738f };
+
class instance_icecrown_citadel : public InstanceMapScript
{
public:
@@ -121,7 +127,13 @@ class instance_icecrown_citadel : public InstanceMapScript
DeathbringerSaurfangDoorGUID = 0;
DeathbringerSaurfangEventGUID = 0;
DeathbringersCacheGUID = 0;
- SaurfangTeleportGUID = 0;
+ TeleporterLichKingGUID = 0;
+ TeleporterUpperSpireGUID = 0;
+ TeleporterLightsHammerGUID = 0;
+ TeleporterRampartsGUID = 0;
+ TeleporterDeathBringerGUID = 0;
+ TeleporterOratoryGUID = 0;
+ TeleporterSindragosaGUID = 0;
PlagueSigilGUID = 0;
BloodwingSigilGUID = 0;
FrostwingSigilGUID = 0;
@@ -158,11 +170,27 @@ class instance_icecrown_citadel : public InstanceMapScript
IsNauseaEligible = true;
IsOrbWhispererEligible = true;
ColdflameJetsState = NOT_STARTED;
+ UpperSpireTeleporterActiveState = NOT_STARTED;
BloodQuickeningState = NOT_STARTED;
BloodQuickeningMinutes = 0;
}
- void FillInitialWorldStates(WorldPacket& data) OVERRIDE
+ // A function to help reduce the number of lines for teleporter management.
+ void SetTeleporterState(GameObject* go, bool usable)
+ {
+ if (usable)
+ {
+ go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->SetGoState(GO_STATE_ACTIVE);
+ }
+ else
+ {
+ go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->SetGoState(GO_STATE_READY);
+ }
+ }
+
+ void FillInitialWorldStates(WorldPacket& data) override
{
data << uint32(WORLDSTATE_SHOW_TIMER) << uint32(BloodQuickeningState == IN_PROGRESS);
data << uint32(WORLDSTATE_EXECUTION_TIME) << uint32(BloodQuickeningMinutes);
@@ -171,7 +199,7 @@ class instance_icecrown_citadel : public InstanceMapScript
data << uint32(WORLDSTATE_ATTEMPTS_MAX) << uint32(MaxHeroicAttempts);
}
- void OnPlayerEnter(Player* player) OVERRIDE
+ void OnPlayerEnter(Player* player) override
{
if (!TeamInInstance)
TeamInInstance = player->GetTeam();
@@ -180,7 +208,7 @@ class instance_icecrown_citadel : public InstanceMapScript
SpawnGunship();
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
if (!TeamInInstance)
{
@@ -194,39 +222,39 @@ class instance_icecrown_citadel : public InstanceMapScript
{
case NPC_KOR_KRON_GENERAL:
if (TeamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_ALLIANCE_COMMANDER, ALLIANCE);
+ creature->UpdateEntry(NPC_ALLIANCE_COMMANDER);
break;
case NPC_KOR_KRON_LIEUTENANT:
if (TeamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_SKYBREAKER_LIEUTENANT, ALLIANCE);
+ creature->UpdateEntry(NPC_SKYBREAKER_LIEUTENANT);
break;
case NPC_TORTUNOK:
if (TeamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_ALANA_MOONSTRIKE, ALLIANCE);
+ creature->UpdateEntry(NPC_ALANA_MOONSTRIKE);
break;
case NPC_GERARDO_THE_SUAVE:
if (TeamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_TALAN_MOONSTRIKE, ALLIANCE);
+ creature->UpdateEntry(NPC_TALAN_MOONSTRIKE);
break;
case NPC_UVLUS_BANEFIRE:
if (TeamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_MALFUS_GRIMFROST, ALLIANCE);
+ creature->UpdateEntry(NPC_MALFUS_GRIMFROST);
break;
case NPC_IKFIRUS_THE_VILE:
if (TeamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_YILI, ALLIANCE);
+ creature->UpdateEntry(NPC_YILI);
break;
case NPC_VOL_GUK:
if (TeamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_JEDEBIA, ALLIANCE);
+ creature->UpdateEntry(NPC_JEDEBIA);
break;
case NPC_HARAGG_THE_UNSEEN:
if (TeamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_NIBY_THE_ALMIGHTY, ALLIANCE);
+ creature->UpdateEntry(NPC_NIBY_THE_ALMIGHTY);
break;
case NPC_GARROSH_HELLSCREAM:
if (TeamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_KING_VARIAN_WRYNN, ALLIANCE);
+ creature->UpdateEntry(NPC_KING_VARIAN_WRYNN);
break;
case NPC_DEATHBRINGER_SAURFANG:
DeathbringerSaurfangGUID = creature->GetGUID();
@@ -237,7 +265,7 @@ class instance_icecrown_citadel : public InstanceMapScript
break;
case NPC_SE_HIGH_OVERLORD_SAURFANG:
if (TeamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_SE_MURADIN_BRONZEBEARD, ALLIANCE, creature->GetCreatureData());
+ creature->UpdateEntry(NPC_SE_MURADIN_BRONZEBEARD, creature->GetCreatureData());
// no break;
case NPC_SE_MURADIN_BRONZEBEARD:
DeathbringerSaurfangEventGUID = creature->GetGUID();
@@ -245,7 +273,7 @@ class instance_icecrown_citadel : public InstanceMapScript
break;
case NPC_SE_KOR_KRON_REAVER:
if (TeamInInstance == ALLIANCE)
- creature->UpdateEntry(NPC_SE_SKYBREAKER_MARINE, ALLIANCE);
+ creature->UpdateEntry(NPC_SE_SKYBREAKER_MARINE);
break;
case NPC_FESTERGUT:
FestergutGUID = creature->GetGUID();
@@ -327,7 +355,7 @@ class instance_icecrown_citadel : public InstanceMapScript
}
}
- void OnCreatureRemove(Creature* creature) OVERRIDE
+ void OnCreatureRemove(Creature* creature) override
{
if (creature->GetEntry() == NPC_SINDRAGOSA)
SindragosaGUID = 0;
@@ -389,7 +417,7 @@ class instance_icecrown_citadel : public InstanceMapScript
return entry;
}
- uint32 GetGameObjectEntry(uint32 /*guidLow*/, uint32 entry) OVERRIDE
+ uint32 GetGameObjectEntry(uint32 /*guidLow*/, uint32 entry) override
{
switch (entry)
{
@@ -414,7 +442,7 @@ class instance_icecrown_citadel : public InstanceMapScript
return entry;
}
- void OnUnitDeath(Unit* unit) OVERRIDE
+ void OnUnitDeath(Unit* unit) override
{
Creature* creature = unit->ToCreature();
if (!creature)
@@ -472,7 +500,7 @@ class instance_icecrown_citadel : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -536,8 +564,37 @@ class instance_icecrown_citadel : public InstanceMapScript
case GO_DEATHBRINGER_S_CACHE_25H:
DeathbringersCacheGUID = go->GetGUID();
break;
- case GO_SCOURGE_TRANSPORTER_SAURFANG:
- SaurfangTeleportGUID = go->GetGUID();
+ case GO_SCOURGE_TRANSPORTER_LICHKING:
+ TeleporterLichKingGUID = go->GetGUID();
+ if (GetBossState(DATA_PROFESSOR_PUTRICIDE) == DONE && GetBossState(DATA_BLOOD_QUEEN_LANA_THEL) == DONE && GetBossState(DATA_SINDRAGOSA) == DONE)
+ go->SetGoState(GO_STATE_ACTIVE);
+ break;
+ case GO_SCOURGE_TRANSPORTER_UPPERSPIRE:
+ TeleporterUpperSpireGUID = go->GetGUID();
+ if (GetBossState(DATA_DEATHBRINGER_SAURFANG) != DONE || GetData(DATA_UPPERSPIRE_TELE_ACT) != DONE)
+ SetTeleporterState(go, false);
+ else
+ SetTeleporterState(go, true);
+ break;
+ case GO_SCOURGE_TRANSPORTER_LIGHTSHAMMER:
+ TeleporterLightsHammerGUID = go->GetGUID();
+ SetTeleporterState(go, GetBossState(DATA_LORD_MARROWGAR) == DONE);
+ break;
+ case GO_SCOURGE_TRANSPORTER_RAMPART:
+ TeleporterRampartsGUID = go->GetGUID();
+ SetTeleporterState(go, GetBossState(DATA_LADY_DEATHWHISPER) == DONE);
+ break;
+ case GO_SCOURGE_TRANSPORTER_DEATHBRINGER:
+ TeleporterDeathBringerGUID = go->GetGUID();
+ SetTeleporterState(go, GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) == DONE);
+ break;
+ case GO_SCOURGE_TRANSPORTER_ORATORY:
+ TeleporterOratoryGUID = go->GetGUID();
+ SetTeleporterState(go, GetBossState(DATA_LORD_MARROWGAR) == DONE);
+ break;
+ case GO_SCOURGE_TRANSPORTER_SINDRAGOSA:
+ TeleporterSindragosaGUID = go->GetGUID();
+ SetTeleporterState(go, GetBossState(DATA_VALITHRIA_DREAMWALKER) == DONE);
break;
case GO_PLAGUE_SIGIL:
PlagueSigilGUID = go->GetGUID();
@@ -594,11 +651,6 @@ class instance_icecrown_citadel : public InstanceMapScript
go->SetLootRecipient(valithria->GetLootRecipient());
go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN);
break;
- case GO_SCOURGE_TRANSPORTER_LK:
- TheLichKingTeleportGUID = go->GetGUID();
- if (GetBossState(DATA_PROFESSOR_PUTRICIDE) == DONE && GetBossState(DATA_BLOOD_QUEEN_LANA_THEL) == DONE && GetBossState(DATA_SINDRAGOSA) == DONE)
- go->SetGoState(GO_STATE_ACTIVE);
- break;
case GO_ARTHAS_PLATFORM:
// this enables movement at The Frozen Throne, when printed this value is 0.000000f
// however, when represented as integer client will accept only this value
@@ -638,7 +690,7 @@ class instance_icecrown_citadel : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -676,7 +728,7 @@ class instance_icecrown_citadel : public InstanceMapScript
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -688,6 +740,8 @@ class instance_icecrown_citadel : public InstanceMapScript
return RimefangTrash.size();
case DATA_COLDFLAME_JETS:
return ColdflameJetsState;
+ case DATA_UPPERSPIRE_TELE_ACT:
+ return UpperSpireTeleporterActiveState;
case DATA_TEAM_IN_INSTANCE:
return TeamInInstance;
case DATA_BLOOD_QUICKENING_STATE:
@@ -701,7 +755,7 @@ class instance_icecrown_citadel : public InstanceMapScript
return 0;
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -715,8 +769,20 @@ class instance_icecrown_citadel : public InstanceMapScript
return DeathbringerSaurfangEventGUID;
case GO_SAURFANG_S_DOOR:
return DeathbringerSaurfangDoorGUID;
- case GO_SCOURGE_TRANSPORTER_SAURFANG:
- return SaurfangTeleportGUID;
+ case GO_SCOURGE_TRANSPORTER_LICHKING:
+ return TeleporterLichKingGUID;
+ case GO_SCOURGE_TRANSPORTER_UPPERSPIRE:
+ return TeleporterUpperSpireGUID;
+ case GO_SCOURGE_TRANSPORTER_LIGHTSHAMMER:
+ return TeleporterLightsHammerGUID;
+ case GO_SCOURGE_TRANSPORTER_RAMPART:
+ return TeleporterRampartsGUID;
+ case GO_SCOURGE_TRANSPORTER_DEATHBRINGER:
+ return TeleporterDeathBringerGUID;
+ case GO_SCOURGE_TRANSPORTER_ORATORY:
+ return TeleporterOratoryGUID;
+ case GO_SCOURGE_TRANSPORTER_SINDRAGOSA:
+ return TeleporterSindragosaGUID;
case DATA_FESTERGUT:
return FestergutGUID;
case DATA_ROTFACE:
@@ -771,17 +837,31 @@ class instance_icecrown_citadel : public InstanceMapScript
return 0;
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
switch (type)
{
+ case DATA_LORD_MARROWGAR:
+ {
+ if (state == DONE)
+ {
+ if (GameObject* teleporter = instance->GetGameObject(TeleporterLightsHammerGUID))
+ SetTeleporterState(teleporter, true);
+ if (GameObject* teleporter = instance->GetGameObject(TeleporterOratoryGUID))
+ SetTeleporterState(teleporter, true);
+ }
+ break;
+ }
case DATA_LADY_DEATHWHISPER:
{
if (state == DONE)
{
+ if (GameObject* teleporter = instance->GetGameObject(TeleporterRampartsGUID))
+ SetTeleporterState(teleporter, true);
+
if (GameObject* elevator = instance->GetGameObject(LadyDeathwisperElevatorGUID))
{
elevator->SetUInt32Value(GAMEOBJECT_LEVEL, 0);
@@ -795,6 +875,9 @@ class instance_icecrown_citadel : public InstanceMapScript
case DATA_ICECROWN_GUNSHIP_BATTLE:
if (state == DONE)
{
+ if (GameObject* teleporter = instance->GetGameObject(TeleporterDeathBringerGUID))
+ SetTeleporterState(teleporter, true);
+
if (GameObject* loot = instance->GetGameObject(GunshipArmoryGUID))
loot->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN);
}
@@ -805,20 +888,28 @@ class instance_icecrown_citadel : public InstanceMapScript
switch (state)
{
case DONE:
+ {
if (GameObject* loot = instance->GetGameObject(DeathbringersCacheGUID))
{
if (Creature* deathbringer = instance->GetCreature(DeathbringerSaurfangGUID))
loot->SetLootRecipient(deathbringer->GetLootRecipient());
loot->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN);
}
- // no break
+
+ if (GameObject* teleporter = instance->GetGameObject(TeleporterUpperSpireGUID))
+ SetTeleporterState(teleporter, true);
+
+ if (GameObject* teleporter = instance->GetGameObject(TeleporterDeathBringerGUID))
+ SetTeleporterState(teleporter, true);
+ break;
+ }
case NOT_STARTED:
- if (GameObject* teleporter = instance->GetGameObject(SaurfangTeleportGUID))
- {
- HandleGameObject(SaurfangTeleportGUID, true, teleporter);
- teleporter->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
- }
+ {
+ if (GameObject* teleporter = instance->GetGameObject(TeleporterDeathBringerGUID))
+ SetTeleporterState(teleporter, true);
+
break;
+ }
default:
break;
}
@@ -888,8 +979,13 @@ class instance_icecrown_citadel : public InstanceMapScript
}
break;
case DATA_VALITHRIA_DREAMWALKER:
- if (state == DONE && sPoolMgr->IsSpawnedObject<Quest>(WeeklyQuestData[8].questId[instance->GetSpawnMode() & 1]))
- instance->SummonCreature(NPC_VALITHRIA_DREAMWALKER_QUEST, ValithriaSpawnPos);
+ if (state == DONE)
+ {
+ if (sPoolMgr->IsSpawnedObject<Quest>(WeeklyQuestData[8].questId[instance->GetSpawnMode() & 1]))
+ instance->SummonCreature(NPC_VALITHRIA_DREAMWALKER_QUEST, ValithriaSpawnPos);
+ if (GameObject* teleporter = instance->GetGameObject(TeleporterSindragosaGUID))
+ SetTeleporterState(teleporter, true);
+ }
break;
case DATA_SINDRAGOSA:
HandleGameObject(FrostwingSigilGUID, state != DONE);
@@ -936,6 +1032,11 @@ class instance_icecrown_citadel : public InstanceMapScript
pillars->SetRespawnTime(7 * DAY);
if (GameObject* pillars = instance->GetGameObject(PillarsUnchainedGUID))
pillars->SetRespawnTime(7 * DAY);
+
+ instance->SummonCreature(NPC_LADY_JAINA_PROUDMOORE_QUEST, JainaSpawnPos);
+ instance->SummonCreature(NPC_MURADIN_BRONZEBEARD_QUEST, MuradinSpawnPos);
+ instance->SummonCreature(NPC_UTHER_THE_LIGHTBRINGER_QUEST, UtherSpawnPos);
+ instance->SummonCreature(NPC_LADY_SYLVANAS_WINDRUNNER_QUEST, SylvanasSpawnPos);
}
break;
}
@@ -957,7 +1058,7 @@ class instance_icecrown_citadel : public InstanceMapScript
}
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -1018,12 +1119,17 @@ class instance_icecrown_citadel : public InstanceMapScript
SaveToDB();
break;
}
+ case DATA_UPPERSPIRE_TELE_ACT:
+ UpperSpireTeleporterActiveState = data;
+ if (UpperSpireTeleporterActiveState == DONE)
+ SaveToDB();
+ break;
default:
break;
}
}
- bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) OVERRIDE
+ bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) override
{
switch (criteria_id)
{
@@ -1063,7 +1169,7 @@ class instance_icecrown_citadel : public InstanceMapScript
return false;
}
- bool CheckRequiredBosses(uint32 bossId, Player const* player = NULL) const OVERRIDE
+ bool CheckRequiredBosses(uint32 bossId, Player const* player = NULL) const override
{
if (player && player->GetSession()->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_INSTANCE_REQUIRED_BOSSES))
return true;
@@ -1218,19 +1324,19 @@ class instance_icecrown_citadel : public InstanceMapScript
}
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
std::ostringstream saveStream;
saveStream << "I C " << GetBossSaveData() << HeroicAttempts << ' '
- << ColdflameJetsState << ' ' << BloodQuickeningState << ' ' << BloodQuickeningMinutes;
+ << ColdflameJetsState << ' ' << BloodQuickeningState << ' ' << BloodQuickeningMinutes << ' ' << UpperSpireTeleporterActiveState;
OUT_SAVE_INST_DATA_COMPLETE;
return saveStream.str();
}
- void Load(const char* str) OVERRIDE
+ void Load(const char* str) override
{
if (!str)
{
@@ -1260,11 +1366,17 @@ class instance_icecrown_citadel : public InstanceMapScript
uint32 temp = 0;
loadStream >> temp;
- ColdflameJetsState = temp ? DONE : NOT_STARTED;
+ if (temp == IN_PROGRESS)
+ ColdflameJetsState = NOT_STARTED;
+ else
+ ColdflameJetsState = temp ? DONE : NOT_STARTED;
loadStream >> temp;
BloodQuickeningState = temp ? DONE : NOT_STARTED; // DONE means finished (not success/fail)
loadStream >> BloodQuickeningMinutes;
+
+ loadStream >> temp;
+ UpperSpireTeleporterActiveState = temp ? DONE : NOT_STARTED;
}
else
OUT_LOAD_INST_DATA_FAIL;
@@ -1272,7 +1384,7 @@ class instance_icecrown_citadel : public InstanceMapScript
OUT_LOAD_INST_DATA_COMPLETE;
}
- void Update(uint32 diff) OVERRIDE
+ void Update(uint32 diff) override
{
if (BloodQuickeningState != IN_PROGRESS && GetBossState(DATA_THE_LICH_KING) != IN_PROGRESS && GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != FAIL)
return;
@@ -1333,7 +1445,7 @@ class instance_icecrown_citadel : public InstanceMapScript
}
}
- void ProcessEvent(WorldObject* source, uint32 eventId) OVERRIDE
+ void ProcessEvent(WorldObject* source, uint32 eventId) override
{
switch (eventId)
{
@@ -1405,7 +1517,13 @@ class instance_icecrown_citadel : public InstanceMapScript
uint64 DeathbringerSaurfangDoorGUID;
uint64 DeathbringerSaurfangEventGUID; // Muradin Bronzebeard or High Overlord Saurfang
uint64 DeathbringersCacheGUID;
- uint64 SaurfangTeleportGUID;
+ uint64 TeleporterLichKingGUID;
+ uint64 TeleporterUpperSpireGUID;
+ uint64 TeleporterLightsHammerGUID;
+ uint64 TeleporterRampartsGUID;
+ uint64 TeleporterDeathBringerGUID;
+ uint64 TeleporterOratoryGUID;
+ uint64 TeleporterSindragosaGUID;
uint64 PlagueSigilGUID;
uint64 BloodwingSigilGUID;
uint64 FrostwingSigilGUID;
@@ -1442,6 +1560,7 @@ class instance_icecrown_citadel : public InstanceMapScript
uint64 PillarsUnchainedGUID;
uint32 TeamInInstance;
uint32 ColdflameJetsState;
+ uint32 UpperSpireTeleporterActiveState;
std::set<uint32> FrostwyrmGUIDs;
std::set<uint32> SpinestalkerTrash;
std::set<uint32> RimefangTrash;
@@ -1454,7 +1573,7 @@ class instance_icecrown_citadel : public InstanceMapScript
bool IsOrbWhispererEligible;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_icecrown_citadel_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
index be6531df66a..2a587e535a3 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
@@ -57,7 +57,7 @@ class boss_anubrekhan : public CreatureScript
public:
boss_anubrekhan() : CreatureScript("boss_anubrekhan") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_anubrekhanAI>(creature);
}
@@ -68,7 +68,7 @@ public:
bool hasTaunted;
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
@@ -90,24 +90,24 @@ public:
}
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
/// Force the player to spawn corpse scarabs via spell, @todo Check percent chance for scarabs, 20% at the moment
- if (!(rand()%5))
+ if (!(rand32() % 5))
if (victim->GetTypeId() == TYPEID_PLAYER)
victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCARABS_PLR, true, NULL, NULL, me->GetGUID());
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
// start achievement timer (kill Maexna within 20 min)
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -119,8 +119,7 @@ public:
events.ScheduleEvent(EVENT_SPAWN_GUARDIAN_NORMAL, urand(15000, 20000));
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
-
+ void MoveInLineOfSight(Unit* who) override
{
if (!hasTaunted && me->IsWithinDistInMap(who, 60.0f) && who->GetTypeId() == TYPEID_PLAYER)
{
@@ -130,7 +129,7 @@ public:
ScriptedAI::MoveInLineOfSight(who);
}
- void SummonedCreatureDespawn(Creature* summon) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summon) override
{
BossAI::SummonedCreatureDespawn(summon);
@@ -141,7 +140,7 @@ public:
summon->CastSpell(summon, SPELL_SUMMON_CORPSE_SCARABS_MOB, true, NULL, NULL, me->GetGUID());
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || !CheckInRoom())
return;
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp
index a61331bee3e..3d42827c0a8 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp
@@ -67,7 +67,7 @@ class boss_faerlina : public CreatureScript
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -76,15 +76,14 @@ class boss_faerlina : public CreatureScript
events.ScheduleEvent(EVENT_FRENZY, urand(60000, 80000));
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
_delayFrenzy = false;
_frenzyDispels = 0;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
-
+ void MoveInLineOfSight(Unit* who) override
{
if (!_introDone && who->GetTypeId() == TYPEID_PLAYER)
{
@@ -95,19 +94,19 @@ class boss_faerlina : public CreatureScript
BossAI::MoveInLineOfSight(who);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
if (!urand(0, 2))
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* caster, SpellInfo const* spell) override
{
if (spell->Id == SPELL_WIDOWS_EMBRACE || spell->Id == H_SPELL_WIDOWS_EMBRACE)
{
@@ -118,7 +117,7 @@ class boss_faerlina : public CreatureScript
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_FRENZY_DISPELS)
return _frenzyDispels;
@@ -126,7 +125,7 @@ class boss_faerlina : public CreatureScript
return 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -177,7 +176,7 @@ class boss_faerlina : public CreatureScript
bool _delayFrenzy;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_faerlinaAI(creature);
}
@@ -195,7 +194,7 @@ class npc_faerlina_add : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
if (GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL) {
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_BIND, true);
@@ -203,7 +202,7 @@ class npc_faerlina_add : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (_instance && GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL)
if (Creature* faerlina = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FAERLINA)))
@@ -214,7 +213,7 @@ class npc_faerlina_add : public CreatureScript
InstanceScript* const _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_faerlina_addAI>(creature);
}
@@ -225,7 +224,7 @@ class achievement_momma_said_knock_you_out : public AchievementCriteriaScript
public:
achievement_momma_said_knock_you_out() : AchievementCriteriaScript("achievement_momma_said_knock_you_out") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
return target && !target->GetAI()->GetData(DATA_FRENZY_DISPELS);
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
index 544077db8e8..e2ff68ab851 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
@@ -87,7 +87,7 @@ class boss_four_horsemen : public CreatureScript
public:
boss_four_horsemen() : CreatureScript("boss_four_horsemen") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_four_horsemenAI>(creature);
}
@@ -116,7 +116,7 @@ public:
bool encounterActionReset;
bool doDelayPunish;
- void Reset() OVERRIDE
+ void Reset() override
{
if (!encounterActionReset)
DoEncounteraction(NULL, false, true, false);
@@ -138,24 +138,24 @@ public:
bool DoEncounteraction(Unit* who, bool attack, bool reset, bool checkAllDead)
{
- Creature* Thane = Unit::GetCreature(*me, instance->GetData64(DATA_THANE));
- Creature* Lady = Unit::GetCreature(*me, instance->GetData64(DATA_LADY));
- Creature* Baron = Unit::GetCreature(*me, instance->GetData64(DATA_BARON));
- Creature* Sir = Unit::GetCreature(*me, instance->GetData64(DATA_SIR));
+ Creature* Thane = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_THANE));
+ Creature* Lady = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_LADY));
+ Creature* Baron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BARON));
+ Creature* Sir = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SIR));
if (Thane && Lady && Baron && Sir)
{
if (attack && who)
{
- CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Thane->AI())->encounterActionAttack = true;
- CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Lady->AI())->encounterActionAttack = true;
- CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Baron->AI())->encounterActionAttack = true;
- CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Sir->AI())->encounterActionAttack = true;
-
- CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Thane->AI())->AttackStart(who);
- CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Lady->AI())->AttackStart(who);
- CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Baron->AI())->AttackStart(who);
- CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Sir->AI())->AttackStart(who);
+ ENSURE_AI(boss_four_horsemen::boss_four_horsemenAI, Thane->AI())->encounterActionAttack = true;
+ ENSURE_AI(boss_four_horsemen::boss_four_horsemenAI, Lady->AI())->encounterActionAttack = true;
+ ENSURE_AI(boss_four_horsemen::boss_four_horsemenAI, Baron->AI())->encounterActionAttack = true;
+ ENSURE_AI(boss_four_horsemen::boss_four_horsemenAI, Sir->AI())->encounterActionAttack = true;
+
+ ENSURE_AI(boss_four_horsemen::boss_four_horsemenAI, Thane->AI())->AttackStart(who);
+ ENSURE_AI(boss_four_horsemen::boss_four_horsemenAI, Lady->AI())->AttackStart(who);
+ ENSURE_AI(boss_four_horsemen::boss_four_horsemenAI, Baron->AI())->AttackStart(who);
+ ENSURE_AI(boss_four_horsemen::boss_four_horsemenAI, Sir->AI())->AttackStart(who);
}
if (reset)
@@ -174,15 +174,15 @@ public:
if (!Sir->IsAlive())
Sir->Respawn();
- CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Thane->AI())->encounterActionReset = true;
- CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Lady->AI())->encounterActionReset = true;
- CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Baron->AI())->encounterActionReset = true;
- CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Sir->AI())->encounterActionReset = true;
+ ENSURE_AI(boss_four_horsemen::boss_four_horsemenAI, Thane->AI())->encounterActionReset = true;
+ ENSURE_AI(boss_four_horsemen::boss_four_horsemenAI, Lady->AI())->encounterActionReset = true;
+ ENSURE_AI(boss_four_horsemen::boss_four_horsemenAI, Baron->AI())->encounterActionReset = true;
+ ENSURE_AI(boss_four_horsemen::boss_four_horsemenAI, Sir->AI())->encounterActionReset = true;
- CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Thane->AI())->EnterEvadeMode();
- CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Lady->AI())->EnterEvadeMode();
- CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Baron->AI())->EnterEvadeMode();
- CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Sir->AI())->EnterEvadeMode();
+ ENSURE_AI(boss_four_horsemen::boss_four_horsemenAI, Thane->AI())->EnterEvadeMode();
+ ENSURE_AI(boss_four_horsemen::boss_four_horsemenAI, Lady->AI())->EnterEvadeMode();
+ ENSURE_AI(boss_four_horsemen::boss_four_horsemenAI, Baron->AI())->EnterEvadeMode();
+ ENSURE_AI(boss_four_horsemen::boss_four_horsemenAI, Sir->AI())->EnterEvadeMode();
}
}
@@ -216,7 +216,7 @@ public:
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -226,7 +226,7 @@ public:
movementCompleted = true;
me->SetReactState(REACT_AGGRESSIVE);
- Unit* eventStarter = Unit::GetUnit(*me, uiEventStarterGUID);
+ Unit* eventStarter = ObjectAccessor::GetUnit(*me, uiEventStarterGUID);
if (eventStarter && me->IsValidAttackTarget(eventStarter))
AttackStart(eventStarter);
@@ -259,7 +259,7 @@ public:
}
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
BossAI::MoveInLineOfSight(who);
@@ -267,7 +267,7 @@ public:
SelectNearestTarget(who);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!movementCompleted && !movementStarted)
{
@@ -286,13 +286,13 @@ public:
}
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
- if (!(rand()%5))
+ if (!(rand32() % 5))
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
events.Reset();
summons.DespawnAll();
@@ -312,17 +312,17 @@ public:
Talk(SAY_DEATH);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
events.ScheduleEvent(EVENT_MARK, 15000);
- events.ScheduleEvent(EVENT_CAST, 20000+rand()%5000);
+ events.ScheduleEvent(EVENT_CAST, 20000 + rand32() % 5000);
events.ScheduleEvent(EVENT_BERSERK, 15*100*1000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (nextWP && movementStarted && !movementCompleted && !nextMovementStarted)
{
@@ -343,18 +343,18 @@ public:
switch (eventId)
{
case EVENT_MARK:
- if (!(rand()%5))
+ if (!(rand32() % 5))
Talk(SAY_SPECIAL);
DoCastAOE(SPELL_MARK[id]);
events.ScheduleEvent(EVENT_MARK, 15000);
break;
case EVENT_CAST:
- if (!(rand()%5))
+ if (!(rand32() % 5))
Talk(SAY_TAUNT);
if (caster)
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
DoCast(target, SPELL_PRIMARY(id));
}
else
@@ -431,13 +431,13 @@ class spell_four_horsemen_mark : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_four_horsemen_mark_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_four_horsemen_mark_AuraScript();
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
index d33d218fab9..cea4b540f7b 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
@@ -56,7 +56,7 @@ class boss_gluth : public CreatureScript
public:
boss_gluth() : CreatureScript("boss_gluth") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_gluthAI(creature);
}
@@ -69,8 +69,7 @@ public:
me->ApplySpellImmune(0, IMMUNITY_ID, SPELL_INFECTED_WOUND, true);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
-
+ void MoveInLineOfSight(Unit* who) override
{
if (who->GetEntry() == NPC_ZOMBIE && me->IsWithinDistInMap(who, 7))
{
@@ -82,7 +81,7 @@ public:
BossAI::MoveInLineOfSight(who);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_WOUND, 10000);
@@ -92,14 +91,14 @@ public:
events.ScheduleEvent(EVENT_SUMMON, 15000);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() == NPC_ZOMBIE)
summon->AI()->AttackStart(me);
summons.Summon(summon);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictimWithGaze() || !CheckInRoom())
return;
@@ -130,13 +129,13 @@ public:
break;
case EVENT_SUMMON:
for (int32 i = 0; i < RAID_MODE(1, 2); ++i)
- DoSummon(NPC_ZOMBIE, PosSummon[rand() % RAID_MODE(1, 3)]);
+ DoSummon(NPC_ZOMBIE, PosSummon[rand32() % RAID_MODE(1, 3)]);
events.ScheduleEvent(EVENT_SUMMON, 10000);
break;
}
}
- if (me->GetVictim() && me->GetVictim()->GetEntry() == NPC_ZOMBIE)
+ if (me->GetVictim() && me->EnsureVictim()->GetEntry() == NPC_ZOMBIE)
{
if (me->IsWithinMeleeRange(me->GetVictim()))
{
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
index 20f7ec25775..fa5a0c47808 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
@@ -175,7 +175,7 @@ class boss_gothik : public CreatureScript
std::vector<uint64> LiveTriggerGUID;
std::vector<uint64> DeadTriggerGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
LiveTriggerGUID.clear();
DeadTriggerGUID.clear();
@@ -188,7 +188,7 @@ class boss_gothik : public CreatureScript
thirtyPercentReached = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
for (uint32 i = 0; i < POS_LIVE; ++i)
if (Creature* trigger = DoSummon(WORLD_TRIGGER, PosSummonLive[i]))
@@ -212,7 +212,7 @@ class boss_gothik : public CreatureScript
instance->SetData(DATA_GOTHIK_GATE, GO_STATE_READY);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() == WORLD_TRIGGER)
summon->setActive(true);
@@ -229,18 +229,18 @@ class boss_gothik : public CreatureScript
summons.Summon(summon);
}
- void SummonedCreatureDespawn(Creature* summon) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summon) override
{
summons.Despawn(summon);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
- if (!(rand()%5))
+ if (!(rand32() % 5))
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
LiveTriggerGUID.clear();
DeadTriggerGUID.clear();
@@ -257,25 +257,25 @@ class boss_gothik : public CreatureScript
{
case NPC_LIVE_TRAINEE:
{
- if (Creature* liveTrigger = Unit::GetCreature(*me, LiveTriggerGUID[0]))
+ if (Creature* liveTrigger = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[0]))
DoSummon(NPC_LIVE_TRAINEE, liveTrigger, 1);
- if (Creature* liveTrigger1 = Unit::GetCreature(*me, LiveTriggerGUID[1]))
+ if (Creature* liveTrigger1 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[1]))
DoSummon(NPC_LIVE_TRAINEE, liveTrigger1, 1);
- if (Creature* liveTrigger2 = Unit::GetCreature(*me, LiveTriggerGUID[2]))
+ if (Creature* liveTrigger2 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[2]))
DoSummon(NPC_LIVE_TRAINEE, liveTrigger2, 1);
break;
}
case NPC_LIVE_KNIGHT:
{
- if (Creature* liveTrigger3 = Unit::GetCreature(*me, LiveTriggerGUID[3]))
+ if (Creature* liveTrigger3 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[3]))
DoSummon(NPC_LIVE_KNIGHT, liveTrigger3, 1);
- if (Creature* liveTrigger5 = Unit::GetCreature(*me, LiveTriggerGUID[5]))
+ if (Creature* liveTrigger5 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[5]))
DoSummon(NPC_LIVE_KNIGHT, liveTrigger5, 1);
break;
}
case NPC_LIVE_RIDER:
{
- if (Creature* liveTrigger4 = Unit::GetCreature(*me, LiveTriggerGUID[4]))
+ if (Creature* liveTrigger4 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[4]))
DoSummon(NPC_LIVE_RIDER, liveTrigger4, 1);
break;
}
@@ -287,21 +287,21 @@ class boss_gothik : public CreatureScript
{
case NPC_LIVE_TRAINEE:
{
- if (Creature* liveTrigger = Unit::GetCreature(*me, LiveTriggerGUID[4]))
+ if (Creature* liveTrigger = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[4]))
DoSummon(NPC_LIVE_TRAINEE, liveTrigger, 1);
- if (Creature* liveTrigger2 = Unit::GetCreature(*me, LiveTriggerGUID[4]))
+ if (Creature* liveTrigger2 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[4]))
DoSummon(NPC_LIVE_TRAINEE, liveTrigger2, 1);
break;
}
case NPC_LIVE_KNIGHT:
{
- if (Creature* liveTrigger5 = Unit::GetCreature(*me, LiveTriggerGUID[4]))
+ if (Creature* liveTrigger5 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[4]))
DoSummon(NPC_LIVE_KNIGHT, liveTrigger5, 1);
break;
}
case NPC_LIVE_RIDER:
{
- if (Creature* liveTrigger4 = Unit::GetCreature(*me, LiveTriggerGUID[4]))
+ if (Creature* liveTrigger4 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[4]))
DoSummon(NPC_LIVE_RIDER, liveTrigger4, 1);
break;
}
@@ -347,7 +347,7 @@ class boss_gothik : public CreatureScript
return false;
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
uint32 spellId = 0;
switch (spell->Id)
@@ -359,18 +359,18 @@ class boss_gothik : public CreatureScript
if (spellId && me->IsInCombat())
{
me->HandleEmoteCommand(EMOTE_ONESHOT_SPELL_CAST);
- if (Creature* pRandomDeadTrigger = Unit::GetCreature(*me, DeadTriggerGUID[rand() % POS_DEAD]))
+ if (Creature* pRandomDeadTrigger = ObjectAccessor::GetCreature(*me, DeadTriggerGUID[rand32() % POS_DEAD]))
me->CastSpell(pRandomDeadTrigger, spellId, true);
}
}
- void DamageTaken(Unit* /*who*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*who*/, uint32& damage) override
{
if (!phaseTwo)
damage = 0;
}
- void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, SpellInfo const* spell) override
{
if (!me->IsInCombat())
return;
@@ -390,7 +390,7 @@ class boss_gothik : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || !CheckInRoom())
return;
@@ -493,7 +493,7 @@ class boss_gothik : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_gothikAI>(creature);
}
@@ -520,25 +520,25 @@ class npc_gothik_minion : public CreatureScript
return (liveSide == IN_LIVE_SIDE(who));
}
- void DoAction(int32 param) OVERRIDE
+ void DoAction(int32 param) override
{
- gateClose = param;
+ gateClose = param != 0;
}
- void DamageTaken(Unit* attacker, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* attacker, uint32 &damage) override
{
if (gateClose && !isOnSameSide(attacker))
damage = 0;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (me->IsSummon())
if (Unit* owner = me->ToTempSummon()->GetSummoner())
CombatAI::JustDied(owner);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
if (!gateClose)
{
@@ -570,7 +570,7 @@ class npc_gothik_minion : public CreatureScript
Reset();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (gateClose && (!isOnSameSide(me) || (me->GetVictim() && !isOnSameSide(me->GetVictim()))))
{
@@ -582,7 +582,7 @@ class npc_gothik_minion : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_gothik_minionAI(creature);
}
@@ -602,13 +602,13 @@ class spell_gothik_shadow_bolt_volley : public SpellScriptLoader
targets.remove_if(Trinity::UnitAuraCheck(false, SPELL_SHADOW_MARK));
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_gothik_shadow_bolt_volley_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gothik_shadow_bolt_volley_SpellScript();
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
index 6769e3429fa..929c52a986c 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
@@ -54,7 +54,7 @@ class boss_grobbulus : public CreatureScript
{
boss_grobbulusAI(Creature* creature) : BossAI(creature, BOSS_GROBBULUS) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_CLOUD, 15000);
@@ -63,13 +63,13 @@ class boss_grobbulus : public CreatureScript
events.ScheduleEvent(EVENT_BERSERK, 12 * 60000);
}
- void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, SpellInfo const* spell) override
{
if (spell->Id == SPELL_SLIME_SPRAY)
me->SummonCreature(NPC_FALLOUT_SLIME, *target, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -105,7 +105,7 @@ class boss_grobbulus : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_grobbulusAI(creature);
}
@@ -124,16 +124,16 @@ class npc_grobbulus_poison_cloud : public CreatureScript
creature->SetReactState(REACT_PASSIVE);
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
// no visual when casting in ctor or Reset()
DoCast(me, SPELL_POISON_CLOUD_PASSIVE, true);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_grobbulus_poison_cloudAI(creature);
}
@@ -149,7 +149,7 @@ class spell_grobbulus_mutating_injection : public SpellScriptLoader
{
PrepareAuraScript(spell_grobbulus_mutating_injection_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MUTATING_EXPLOSION)
|| !sSpellMgr->GetSpellInfo(SPELL_POISON_CLOUD))
@@ -170,13 +170,13 @@ class spell_grobbulus_mutating_injection : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_grobbulus_mutating_injection_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_grobbulus_mutating_injection_AuraScript();
}
@@ -192,7 +192,7 @@ class spell_grobbulus_poison_cloud : public SpellScriptLoader
{
PrepareAuraScript(spell_grobbulus_poison_cloud_AuraScript);
- bool Validate(SpellInfo const* spellInfo) OVERRIDE
+ bool Validate(SpellInfo const* spellInfo) override
{
if (!sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_0].TriggerSpell))
return false;
@@ -208,13 +208,13 @@ class spell_grobbulus_poison_cloud : public SpellScriptLoader
GetTarget()->CastCustomSpell(triggerSpell, SPELLVALUE_RADIUS_MOD, mod, (Unit*)NULL, TRIGGERED_FULL_MASK, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_grobbulus_poison_cloud_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_grobbulus_poison_cloud_AuraScript();
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
index b850d5e5072..648da29ca66 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
@@ -59,7 +59,7 @@ class boss_heigan : public CreatureScript
public:
boss_heigan() : CreatureScript("boss_heigan") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_heiganAI>(creature);
}
@@ -73,21 +73,21 @@ public:
bool safetyDance;
Phases phase;
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
- if (!(rand()%5))
+ if (!(rand32() % 5))
Talk(SAY_SLAY);
if (who->GetTypeId() == TYPEID_PLAYER)
safetyDance = false;
}
- void SetData(uint32 id, uint32 data) OVERRIDE
+ void SetData(uint32 id, uint32 data) override
{
if (id == DATA_SAFETY_DANCE)
safetyDance = data ? true : false;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_SAFETY_DANCE)
return safetyDance ? 1 : 0;
@@ -95,13 +95,13 @@ public:
return 0;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -126,7 +126,7 @@ public:
{
float x, y, z, o;
me->GetHomePosition(x, y, z, o);
- me->NearTeleportTo(x, y, z, o - G3D::halfPi());
+ me->NearTeleportTo(x, y, z, o - (float(M_PI) / 2));
me->GetMotionMaster()->Clear();
me->GetMotionMaster()->MoveIdle();
me->SetTarget(0);
@@ -136,7 +136,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || !CheckInRoom())
return;
@@ -202,13 +202,13 @@ class spell_heigan_eruption : public SpellScriptLoader
Heigan->AI()->SetData(DATA_SAFETY_DANCE, 0);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_heigan_eruption_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_heigan_eruption_SpellScript();
}
@@ -221,7 +221,7 @@ class achievement_safety_dance : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
index 762277ec4fa..61ee650b37a 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
@@ -290,7 +290,7 @@ public:
chained.clear();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
@@ -323,12 +323,12 @@ public:
nWeaver = 0;
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
@@ -336,7 +336,7 @@ public:
ResetPlayerScale();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
me->setFaction(uiFaction);
@@ -359,7 +359,7 @@ public:
events.ScheduleEvent(EVENT_PHASE, 228000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -368,38 +368,33 @@ public:
if (Phase == 1)
{
- while (uint32 eventId = events.GetEvent())
+ while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_WASTE:
DoSummon(NPC_WASTE, Pos[RAND(0, 3, 6, 9)]);
- events.RepeatEvent(urand(2000, 5000));
+ events.Repeat(2000, 5000);
break;
case EVENT_ABOMIN:
if (nAbomination < 8)
{
DoSummon(NPC_ABOMINATION, Pos[RAND(1, 4, 7, 10)]);
nAbomination++;
- events.RepeatEvent(20000);
+ events.Repeat(20000);
}
- else
- events.PopEvent();
break;
case EVENT_WEAVER:
if (nWeaver < 8)
{
DoSummon(NPC_WEAVER, Pos[RAND(0, 3, 6, 9)]);
nWeaver++;
- events.RepeatEvent(25000);
+ events.Repeat(25000);
}
- else
- events.PopEvent();
break;
case EVENT_TRIGGER:
if (GameObject* trigger = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_KELTHUZAD_TRIGGER)))
trigger->SetPhaseMask(2, true);
- events.PopEvent();
break;
case EVENT_PHASE:
events.Reset();
@@ -419,7 +414,6 @@ public:
Phase = 2;
break;
default:
- events.PopEvent();
break;
}
}
@@ -461,17 +455,17 @@ public:
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
- if (uint32 eventId = events.GetEvent())
+ if (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_BOLT:
DoCastVictim(SPELL_FROST_BOLT);
- events.RepeatEvent(urand(5000, 10000));
+ events.Repeat(5000, 10000);
break;
case EVENT_NOVA:
DoCastAOE(SPELL_FROST_BOLT_AOE);
- events.RepeatEvent(urand(15000, 30000));
+ events.Repeat(15000, 30000);
break;
case EVENT_CHAIN:
{
@@ -490,7 +484,7 @@ public:
}
if (!chained.empty())
Talk(SAY_CHAIN);
- events.RepeatEvent(urand(100000, 180000));
+ events.Repeat(100000, 180000);
break;
}
case EVENT_CHAINED_SPELL:
@@ -565,10 +559,8 @@ public:
++itr;
}
- if (chained.empty())
- events.PopEvent();
- else
- events.RepeatEvent(5000);
+ if (!chained.empty())
+ events.Repeat(5000);
break;
}
@@ -591,28 +583,27 @@ public:
if (!unitList.empty())
{
std::vector<Unit*>::const_iterator itr = unitList.begin();
- advance(itr, rand()%unitList.size());
+ advance(itr, rand32() % unitList.size());
DoCast(*itr, SPELL_MANA_DETONATION);
Talk(SAY_SPECIAL);
}
- events.RepeatEvent(urand(20000, 50000));
+ events.Repeat(20000, 50000);
break;
}
case EVENT_FISSURE:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_SHADOW_FISURE);
- events.RepeatEvent(urand(10000, 45000));
+ events.Repeat(10000, 45000);
break;
case EVENT_BLAST:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, RAID_MODE(1, 0), 0, true))
DoCast(target, SPELL_FROST_BLAST);
- if (rand()%2)
+ if (rand32() % 2)
Talk(SAY_FROST_BLAST);
- events.RepeatEvent(urand(30000, 90000));
+ events.Repeat(30000, 90000);
break;
default:
- events.PopEvent();
break;
}
}
@@ -622,7 +613,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_kelthuzadAI>(creature);
}
@@ -633,7 +624,7 @@ class at_kelthuzad_center : public AreaTriggerScript
public:
at_kelthuzad_center() : AreaTriggerScript("at_kelthuzad_center") { }
- bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE
+ bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override
{
if (player->IsGameMaster())
return false;
@@ -703,14 +694,14 @@ class npc_kelthuzad_abomination : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_MORTAL_WOUND, urand(2000, 5000));
DoCast(me, SPELL_FRENZY, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -731,7 +722,7 @@ class npc_kelthuzad_abomination : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_instance->SetData(DATA_ABOMINATION_KILLED, _instance->GetData(DATA_ABOMINATION_KILLED) + 1);
}
@@ -741,7 +732,7 @@ class npc_kelthuzad_abomination : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_kelthuzad_abominationAI>(creature);
}
@@ -756,7 +747,7 @@ class spell_kelthuzad_detonate_mana : public SpellScriptLoader
{
PrepareAuraScript(spell_kelthuzad_detonate_mana_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MANA_DETONATION_DAMAGE))
return false;
@@ -775,13 +766,13 @@ class spell_kelthuzad_detonate_mana : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_kelthuzad_detonate_mana_AuraScript::HandleScript, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_kelthuzad_detonate_mana_AuraScript();
}
@@ -792,7 +783,7 @@ class achievement_just_cant_get_enough : public AchievementCriteriaScript
public:
achievement_just_cant_get_enough() : AchievementCriteriaScript("achievement_just_cant_get_enough") { }
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
index 760cc180b95..5702987cc5a 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
@@ -64,14 +64,14 @@ class boss_loatheb : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
_doomCounter = 0;
_sporeLoserData = true;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_NECROTIC_AURA, 17000);
@@ -80,12 +80,12 @@ class boss_loatheb : public CreatureScript
events.ScheduleEvent(EVENT_INEVITABLE_DOOM, 120000);
}
- void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) OVERRIDE
+ void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) override
{
_sporeLoserData = false;
}
- uint32 GetData(uint32 id) const OVERRIDE
+ uint32 GetData(uint32 id) const override
{
if (id != DATA_ACHIEVEMENT_SPORE_LOSER)
return 0;
@@ -93,7 +93,7 @@ class boss_loatheb : public CreatureScript
return uint32(_sporeLoserData);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -139,7 +139,7 @@ class boss_loatheb : public CreatureScript
uint8 _doomCounter;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_loathebAI(creature);
}
@@ -150,7 +150,7 @@ class achievement_spore_loser : public AchievementCriteriaScript
public:
achievement_spore_loser() : AchievementCriteriaScript("achievement_spore_loser") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
return target && target->GetAI()->GetData(DATA_ACHIEVEMENT_SPORE_LOSER);
}
@@ -167,7 +167,7 @@ class spell_loatheb_necrotic_aura_warning : public SpellScriptLoader
{
PrepareAuraScript(spell_loatheb_necrotic_aura_warning_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellStore.LookupEntry(SPELL_WARN_NECROTIC_AURA))
return false;
@@ -177,23 +177,23 @@ class spell_loatheb_necrotic_aura_warning : public SpellScriptLoader
void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (GetTarget()->IsAIEnabled)
- CAST_AI(LoathebAI, GetTarget()->GetAI())->Talk(SAY_NECROTIC_AURA_APPLIED);
+ ENSURE_AI(LoathebAI, GetTarget()->GetAI())->Talk(SAY_NECROTIC_AURA_APPLIED);
}
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (GetTarget()->IsAIEnabled)
- CAST_AI(LoathebAI, GetTarget()->GetAI())->Talk(SAY_NECROTIC_AURA_REMOVED);
+ ENSURE_AI(LoathebAI, GetTarget()->GetAI())->Talk(SAY_NECROTIC_AURA_REMOVED);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_loatheb_necrotic_aura_warning_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_loatheb_necrotic_aura_warning_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_loatheb_necrotic_aura_warning_AuraScript();
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
index 9d8dbf70ce7..7f7adefc2fb 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
@@ -63,7 +63,7 @@ class boss_maexxna : public CreatureScript
public:
boss_maexxna() : CreatureScript("boss_maexxna") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_maexxnaAI(creature);
}
@@ -74,7 +74,7 @@ public:
bool enraged;
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
enraged = false;
@@ -85,7 +85,7 @@ public:
events.ScheduleEvent(EVENT_SUMMON, 30000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || !CheckInRoom())
return;
@@ -109,7 +109,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0, true, -SPELL_WEB_WRAP))
{
target->RemoveAura(RAID_MODE(SPELL_WEB_SPRAY_10, SPELL_WEB_SPRAY_25));
- uint8 pos = rand()%MAX_POS_WRAP;
+ uint8 pos = rand32() % MAX_POS_WRAP;
target->GetMotionMaster()->MoveJump(PosWrap[pos].GetPositionX(), PosWrap[pos].GetPositionY(), PosWrap[pos].GetPositionZ(), 20, 20);
if (Creature* wrap = DoSummon(NPC_WEB_WRAP, PosWrap[pos], 0, TEMPSUMMON_CORPSE_DESPAWN))
wrap->AI()->SetGUID(target->GetGUID());
@@ -154,7 +154,7 @@ class npc_webwrap : public CreatureScript
public:
npc_webwrap() : CreatureScript("npc_webwrap") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_webwrapAI(creature);
}
@@ -165,18 +165,18 @@ public:
uint64 victimGUID;
- void SetGUID(uint64 guid, int32 /*param*/) OVERRIDE
+ void SetGUID(uint64 guid, int32 /*param*/) override
{
victimGUID = guid;
if (me->m_spells[0] && victimGUID)
- if (Unit* victim = Unit::GetUnit(*me, victimGUID))
+ if (Unit* victim = ObjectAccessor::GetUnit(*me, victimGUID))
victim->CastSpell(victim, me->m_spells[0], true, NULL, NULL, me->GetGUID());
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (me->m_spells[0] && victimGUID)
- if (Unit* victim = Unit::GetUnit(*me, victimGUID))
+ if (Unit* victim = ObjectAccessor::GetUnit(*me, victimGUID))
victim->RemoveAurasDueToSpell(me->m_spells[0], me->GetGUID());
}
};
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
index 93cbb1b992a..94117e9dbbf 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
@@ -74,14 +74,14 @@ public:
{
boss_nothAI(Creature* creature) : BossAI(creature, BOSS_NOTH) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetReactState(REACT_AGGRESSIVE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -100,27 +100,27 @@ public:
else
{
events.ScheduleEvent(EVENT_BALCONY, 110000);
- events.ScheduleEvent(EVENT_CURSE, 10000+rand()%15000);
+ events.ScheduleEvent(EVENT_CURSE, 10000 + rand32() % 15000);
events.ScheduleEvent(EVENT_WARRIOR, 30000);
if (GetDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL)
events.ScheduleEvent(EVENT_BLINK, urand(20000, 40000));
}
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
- if (!(rand()%5))
+ if (!(rand32() % 5))
Talk(SAY_SLAY);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summons.Summon(summon);
summon->setActive(true);
summon->AI()->DoZoneInCombat();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
@@ -129,10 +129,10 @@ public:
void SummonUndead(uint32 entry, uint32 num)
{
for (uint32 i = 0; i < num; ++i)
- me->SummonCreature(entry, SummonPos[rand()%MAX_SUMMON_POS], TEMPSUMMON_CORPSE_DESPAWN, 60000);
+ me->SummonCreature(entry, SummonPos[rand32() % MAX_SUMMON_POS], TEMPSUMMON_CORPSE_DESPAWN, 60000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || !CheckInRoom())
return;
@@ -215,7 +215,7 @@ public:
uint32 balconyCount;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_nothAI>(creature);
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
index cc0b3836a7a..a47b75ec234 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
@@ -55,7 +55,7 @@ class boss_patchwerk : public CreatureScript
public:
boss_patchwerk() : CreatureScript("boss_patchwerk") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_patchwerkAI>(creature);
}
@@ -66,26 +66,26 @@ public:
bool Enraged;
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_MAKE_QUICK_WERK_OF_HIM_STARTING_EVENT);
}
- void KilledUnit(Unit* /*Victim*/) OVERRIDE
+ void KilledUnit(Unit* /*Victim*/) override
{
- if (!(rand()%5))
+ if (!(rand32() % 5))
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Enraged = false;
@@ -96,7 +96,7 @@ public:
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_MAKE_QUICK_WERK_OF_HIM_STARTING_EVENT);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
index 4936681839f..3a29e8ac83f 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
@@ -61,7 +61,7 @@ class boss_razuvious : public CreatureScript
public:
boss_razuvious() : CreatureScript("boss_razuvious") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_razuviousAI(creature);
}
@@ -70,13 +70,13 @@ public:
{
boss_razuviousAI(Creature* creature) : BossAI(creature, BOSS_RAZUVIOUS) { }
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
- if (!(rand()%3))
+ if (!(rand32() % 3))
DoPlaySoundToSet(me, SOUND_SLAY);
}
- void DamageTaken(Unit* pDone_by, uint32& uiDamage) OVERRIDE
+ void DamageTaken(Unit* pDone_by, uint32& uiDamage) override
{
// Damage done by the controlled Death Knight understudies should also count toward damage done by players
if (pDone_by->GetTypeId() == TYPEID_UNIT && (pDone_by->GetEntry() == 16803 || pDone_by->GetEntry() == 29941))
@@ -85,14 +85,14 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
DoPlaySoundToSet(me, SOUND_DEATH);
me->CastSpell(me, SPELL_HOPELESS, true); /// @todo this may affect other creatures
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
DoPlaySoundToSet(me, SOUND_AGGRO);
@@ -102,7 +102,7 @@ public:
events.ScheduleEvent(EVENT_KNIFE, 10000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
index be434ecc73a..6a3927d4aa0 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
@@ -94,7 +94,7 @@ class boss_sapphiron : public CreatureScript
_map(me->GetMap())
{ }
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
_canTheHundredClub = true;
@@ -108,7 +108,7 @@ class boss_sapphiron : public CreatureScript
BossAI::InitializeAI();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
@@ -121,7 +121,7 @@ class boss_sapphiron : public CreatureScript
_checkFrostResistTimer = 5 * IN_MILLISECONDS;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
@@ -133,7 +133,7 @@ class boss_sapphiron : public CreatureScript
CheckPlayersFrostResist();
}
- void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, SpellInfo const* spell) override
{
if (spell->Id == SPELL_ICEBOLT)
{
@@ -146,7 +146,7 @@ class boss_sapphiron : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
me->CastSpell(me, SPELL_DIES, true);
@@ -154,13 +154,13 @@ class boss_sapphiron : public CreatureScript
CheckPlayersFrostResist();
}
- void MovementInform(uint32 /*type*/, uint32 id) OVERRIDE
+ void MovementInform(uint32 /*type*/, uint32 id) override
{
if (id == 1)
events.ScheduleEvent(EVENT_LIFTOFF, 0);
}
- void DoAction(int32 param) OVERRIDE
+ void DoAction(int32 param) override
{
if (param == DATA_SAPPHIRON_BIRTH)
{
@@ -210,7 +210,7 @@ class boss_sapphiron : public CreatureScript
_iceblocks.clear();
}
- uint32 GetData(uint32 data) const OVERRIDE
+ uint32 GetData(uint32 data) const override
{
if (data == DATA_THE_HUNDRED_CLUB)
return _canTheHundredClub;
@@ -218,7 +218,7 @@ class boss_sapphiron : public CreatureScript
return 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!_phase)
return;
@@ -312,7 +312,7 @@ class boss_sapphiron : public CreatureScript
else
{
std::vector<Unit*>::const_iterator itr = targets.begin();
- advance(itr, rand()%targets.size());
+ advance(itr, rand32() % targets.size());
_iceblocks.insert(std::make_pair((*itr)->GetGUID(), 0));
DoCast(*itr, SPELL_ICEBOLT);
--_iceboltCount;
@@ -403,7 +403,7 @@ class boss_sapphiron : public CreatureScript
Map* _map;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_sapphironAI(creature);
}
@@ -414,7 +414,7 @@ class achievement_the_hundred_club : public AchievementCriteriaScript
public:
achievement_the_hundred_club() : AchievementCriteriaScript("achievement_the_hundred_club") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
return target && target->GetAI()->GetData(DATA_THE_HUNDRED_CLUB);
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
index 245399afdda..34e21336547 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
@@ -108,7 +108,7 @@ class boss_thaddius : public CreatureScript
public:
boss_thaddius() : CreatureScript("boss_thaddius") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_thaddiusAI>(creature);
}
@@ -123,11 +123,11 @@ public:
// Moreover, the adds may not yet be spawn. So just track down the status if mob is spawn
// and each mob will send its status at reset (meaning that it is alive)
checkFeugenAlive = false;
- if (Creature* pFeugen = me->GetCreature(*me, instance->GetData64(DATA_FEUGEN)))
+ if (Creature* pFeugen = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_FEUGEN)))
checkFeugenAlive = pFeugen->IsAlive();
checkStalaggAlive = false;
- if (Creature* pStalagg = me->GetCreature(*me, instance->GetData64(DATA_STALAGG)))
+ if (Creature* pStalagg = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_STALAGG)))
checkStalaggAlive = pStalagg->IsAlive();
if (!checkFeugenAlive && !checkStalaggAlive)
@@ -147,19 +147,19 @@ public:
bool polaritySwitch;
uint32 uiAddsTimer;
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
- if (!(rand()%5))
+ if (!(rand32() % 5))
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -190,7 +190,7 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -199,18 +199,18 @@ public:
events.ScheduleEvent(EVENT_BERSERK, 360000);
}
- void DamageTaken(Unit* /*pDoneBy*/, uint32 & /*uiDamage*/) OVERRIDE
+ void DamageTaken(Unit* /*pDoneBy*/, uint32 & /*uiDamage*/) override
{
me->SetReactState(REACT_AGGRESSIVE);
}
- void SetData(uint32 id, uint32 data) OVERRIDE
+ void SetData(uint32 id, uint32 data) override
{
if (id == DATA_POLARITY_SWITCH)
polaritySwitch = data ? true : false;
}
- uint32 GetData(uint32 id) const OVERRIDE
+ uint32 GetData(uint32 id) const override
{
if (id != DATA_POLARITY_SWITCH)
return 0;
@@ -218,7 +218,7 @@ public:
return uint32(polaritySwitch);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (checkFeugenAlive && checkStalaggAlive)
uiAddsTimer = 0;
@@ -230,12 +230,12 @@ public:
{
if (!checkStalaggAlive)
{
- if (Creature* pStalagg = me->GetCreature(*me, instance->GetData64(DATA_STALAGG)))
+ if (Creature* pStalagg = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_STALAGG)))
pStalagg->Respawn();
}
else
{
- if (Creature* pFeugen = me->GetCreature(*me, instance->GetData64(DATA_FEUGEN)))
+ if (Creature* pFeugen = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_FEUGEN)))
pFeugen->Respawn();
}
}
@@ -281,7 +281,7 @@ class npc_stalagg : public CreatureScript
public:
npc_stalagg() : CreatureScript("npc_stalagg") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_stalaggAI>(creature);
}
@@ -298,43 +298,43 @@ public:
uint32 powerSurgeTimer;
uint32 magneticPullTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
- if (Creature* pThaddius = me->GetCreature(*me, instance->GetData64(DATA_THADDIUS)))
+ if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_THADDIUS)))
if (pThaddius->AI())
pThaddius->AI()->DoAction(ACTION_STALAGG_RESET);
powerSurgeTimer = urand(20000, 25000);
magneticPullTimer = 20000;
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
- if (!(rand()%5))
+ if (!(rand32() % 5))
Talk(SAY_STAL_SLAY);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_STAL_AGGRO);
DoCast(SPELL_STALAGG_TESLA);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_STAL_DEATH);
- if (Creature* pThaddius = me->GetCreature(*me, instance->GetData64(DATA_THADDIUS)))
+ if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_THADDIUS)))
if (pThaddius->AI())
pThaddius->AI()->DoAction(ACTION_STALAGG_DIED);
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!UpdateVictim())
return;
if (magneticPullTimer <= uiDiff)
{
- if (Creature* pFeugen = me->GetCreature(*me, instance->GetData64(DATA_FEUGEN)))
+ if (Creature* pFeugen = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_FEUGEN)))
{
Unit* pStalaggVictim = me->GetVictim();
Unit* pFeugenVictim = pFeugen->GetVictim();
@@ -373,7 +373,7 @@ class npc_feugen : public CreatureScript
public:
npc_feugen() : CreatureScript("npc_feugen") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_feugenAI>(creature);
}
@@ -389,35 +389,35 @@ public:
uint32 staticFieldTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
- if (Creature* pThaddius = me->GetCreature(*me, instance->GetData64(DATA_THADDIUS)))
+ if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_THADDIUS)))
if (pThaddius->AI())
pThaddius->AI()->DoAction(ACTION_FEUGEN_RESET);
staticFieldTimer = 5000;
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
- if (!(rand()%5))
+ if (!(rand32() % 5))
Talk(SAY_FEUG_SLAY);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_FEUG_AGGRO);
DoCast(SPELL_FEUGEN_TESLA);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_FEUG_DEATH);
- if (Creature* pThaddius = me->GetCreature(*me, instance->GetData64(DATA_THADDIUS)))
+ if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_THADDIUS)))
if (pThaddius->AI())
pThaddius->AI()->DoAction(ACTION_FEUGEN_DIED);
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!UpdateVictim())
return;
@@ -443,7 +443,7 @@ class spell_thaddius_pos_neg_charge : public SpellScriptLoader
{
PrepareSpellScript(spell_thaddius_pos_neg_charge_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE))
return false;
@@ -456,7 +456,7 @@ class spell_thaddius_pos_neg_charge : public SpellScriptLoader
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
@@ -500,14 +500,14 @@ class spell_thaddius_pos_neg_charge : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_thaddius_pos_neg_charge_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_thaddius_pos_neg_charge_SpellScript::HandleTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_thaddius_pos_neg_charge_SpellScript();
}
@@ -522,7 +522,7 @@ class spell_thaddius_polarity_shift : public SpellScriptLoader
{
PrepareSpellScript(spell_thaddius_polarity_shift_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_POSITIVE_POLARITY) || !sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_POLARITY))
return false;
@@ -536,13 +536,13 @@ class spell_thaddius_polarity_shift : public SpellScriptLoader
target->CastSpell(target, roll_chance_i(50) ? SPELL_POSITIVE_POLARITY : SPELL_NEGATIVE_POLARITY, true, NULL, NULL, caster->GetGUID());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_thaddius_polarity_shift_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_thaddius_polarity_shift_SpellScript();
}
@@ -553,7 +553,7 @@ class achievement_polarity_switch : public AchievementCriteriaScript
public:
achievement_polarity_switch() : AchievementCriteriaScript("achievement_polarity_switch") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
return target && target->GetAI()->GetData(DATA_POLARITY_SWITCH);
}
diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
index 137c9e68247..e8ed181da5a 100644
--- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
@@ -131,7 +131,7 @@ class instance_naxxramas : public InstanceMapScript
memset(PortalsGUID, 0, sizeof(PortalsGUID));
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -175,12 +175,12 @@ class instance_naxxramas : public InstanceMapScript
AddMinion(creature, true);
}
- void OnCreatureRemove(Creature* creature) OVERRIDE
+ void OnCreatureRemove(Creature* creature) override
{
AddMinion(creature, false);
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
if (go->GetGOInfo()->displayId == 6785 || go->GetGOInfo()->displayId == 1287)
{
@@ -220,7 +220,7 @@ class instance_naxxramas : public InstanceMapScript
AddDoor(go, true);
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
if (go->GetGOInfo()->displayId == 6785 || go->GetGOInfo()->displayId == 1287)
{
@@ -247,7 +247,7 @@ class instance_naxxramas : public InstanceMapScript
AddDoor(go, false);
}
- void OnUnitDeath(Unit* unit) OVERRIDE
+ void OnUnitDeath(Unit* unit) override
{
if (unit->GetTypeId() == TYPEID_PLAYER && IsEncounterInProgress())
{
@@ -256,7 +256,7 @@ class instance_naxxramas : public InstanceMapScript
}
}
- void SetData(uint32 id, uint32 value) OVERRIDE
+ void SetData(uint32 id, uint32 value) override
{
switch (id)
{
@@ -292,7 +292,7 @@ class instance_naxxramas : public InstanceMapScript
}
}
- uint32 GetData(uint32 id) const OVERRIDE
+ uint32 GetData(uint32 id) const override
{
switch (id)
{
@@ -305,7 +305,7 @@ class instance_naxxramas : public InstanceMapScript
return 0;
}
- uint64 GetData64(uint32 id) const OVERRIDE
+ uint64 GetData64(uint32 id) const override
{
switch (id)
{
@@ -344,7 +344,7 @@ class instance_naxxramas : public InstanceMapScript
return 0;
}
- bool SetBossState(uint32 id, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 id, EncounterState state) override
{
if (!InstanceScript::SetBossState(id, state))
return false;
@@ -368,9 +368,9 @@ class instance_naxxramas : public InstanceMapScript
if (i == section)
continue;
- for (std::set<uint64>::const_iterator itr = HeiganEruptionGUID[i].begin(); itr != HeiganEruptionGUID[i].end(); ++itr)
+ for (uint64 guid : HeiganEruptionGUID[i])
{
- if (GameObject* heiganEruption = instance->GetGameObject(*itr))
+ if (GameObject* heiganEruption = instance->GetGameObject(guid))
{
heiganEruption->SendCustomAnim(heiganEruption->GetGoAnimProgress());
heiganEruption->CastSpell(NULL, SPELL_ERUPTION);
@@ -427,7 +427,7 @@ class instance_naxxramas : public InstanceMapScript
return false;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -438,7 +438,7 @@ class instance_naxxramas : public InstanceMapScript
return saveStream.str();
}
- void Load(const char* strIn) OVERRIDE
+ void Load(const char* strIn) override
{
if (!strIn)
{
@@ -513,7 +513,7 @@ class instance_naxxramas : public InstanceMapScript
uint32 playerDied;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_naxxramas_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index fd2734f55ba..ac6fd29d8a1 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -346,7 +346,7 @@ public:
_flySpeed = me->GetSpeed(MOVE_FLIGHT); // Get initial fly speed, otherwise on each wipe fly speed would add up if we get it
}
- void Reset() OVERRIDE
+ void Reset() override
{
// EnterEvadeMode and Reset() links are cut for the sake of properly functioning despawner.
if (!_despawned)
@@ -379,7 +379,7 @@ public:
instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
}
- uint32 GetData(uint32 data) const OVERRIDE
+ uint32 GetData(uint32 data) const override
{
switch (data)
{
@@ -392,7 +392,7 @@ public:
return 0;
}
- void SetData(uint32 data, uint32 value) OVERRIDE
+ void SetData(uint32 data, uint32 value) override
{
if (data == DATA_SUMMON_DEATHS && _phase == PHASE_TWO && !_despawned)
{
@@ -417,7 +417,7 @@ public:
}
}
- uint64 GetGUID(int32 type) const OVERRIDE
+ uint64 GetGUID(int32 type) const override
{
if (type >= DATA_FIRST_SURGE_TARGET_GUID && type < DATA_FIRST_SURGE_TARGET_GUID + NUM_MAX_SURGE_TARGETS)
return _surgeTargetGUID[type - DATA_FIRST_SURGE_TARGET_GUID];
@@ -427,7 +427,7 @@ public:
return 0;
}
- void SetGUID(uint64 guid, int32 type) OVERRIDE
+ void SetGUID(uint64 guid, int32 type) override
{
switch (type)
{
@@ -444,7 +444,7 @@ public:
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -470,8 +470,7 @@ public:
break;
case ACTION_LIFT_IN_AIR:
{
- Position _zToLift;
- me->GetPosition(&_zToLift);
+ Position _zToLift = me->GetPosition();
if (_phase == PHASE_ONE)
{
_zToLift.m_positionZ += 20.0f;
@@ -558,13 +557,13 @@ public:
}
// There are moments where boss will do nothing while being attacked
- void AttackStart(Unit* target) OVERRIDE
+ void AttackStart(Unit* target) override
{
if (_canAttack)
BossAI::AttackStart(target);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
// We can't call full function here since it includes DoZoneInCombat(),
// if someone does it will be returned with a warning.
@@ -582,7 +581,7 @@ public:
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
instance->SetBossState(DATA_MALYGOS_EVENT, FAIL);
@@ -627,7 +626,7 @@ public:
instance->SetBossState(DATA_MALYGOS_EVENT, NOT_STARTED);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -655,7 +654,7 @@ public:
}
}
- void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* caster, SpellInfo const* spell) override
{
if (spell->Id == SPELL_POWER_SPARK_MALYGOS)
{
@@ -665,10 +664,10 @@ public:
Talk(SAY_BUFF_SPARK);
}
else if (spell->Id == SPELL_MALYGOS_BERSERK)
- sCreatureTextMgr->SendChat(me, EMOTE_HIT_BERSERKER_TIMER, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP);
+ TalkToMap(EMOTE_HIT_BERSERKER_TIMER);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!me->IsInCombat() || _phase != PHASE_ONE)
@@ -679,7 +678,7 @@ public:
who->CastSpell(me, SPELL_POWER_SPARK_MALYGOS, true);
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE && type != EFFECT_MOTION_TYPE)
return;
@@ -750,7 +749,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!instance || (!UpdateVictim() && _phase != PHASE_NOT_STARTED && _phase != PHASE_TWO))
return;
@@ -993,7 +992,7 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
@@ -1015,7 +1014,7 @@ public:
// Used to generate perfect cyclic movements (Enter Circle).
void FillCirclePath(Position const& centerPos, float radius, float z, Movement::PointsArray& path, bool clockwise)
{
- float step = clockwise ? -M_PI / 8.0f : M_PI / 8.0f;
+ float step = clockwise ? float(-M_PI) / 8.0f : float(M_PI) / 8.0f;
float angle = centerPos.GetAngle(me->GetPositionX(), me->GetPositionY());
for (uint8 i = 0; i < 16; angle += step, ++i)
@@ -1048,7 +1047,7 @@ public:
float _flySpeed; // Used to store base fly speed to prevent stacking on each evade.
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_malygosAI>(creature);
}
@@ -1066,7 +1065,7 @@ public:
_instance = creature->GetInstanceScript();
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_PORTAL_OPENED)
{
@@ -1078,7 +1077,7 @@ public:
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
// When duration of opened riff visual ends, closed one should be cast
if (!me->HasAura(SPELL_PORTAL_VISUAL_CLOSED) && !me->HasAura(SPELL_PORTAL_OPENED))
@@ -1098,7 +1097,7 @@ public:
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_portal_eoeAI>(creature);
}
@@ -1114,8 +1113,7 @@ public:
npc_power_sparkAI(Creature* creature) : ScriptedAI(creature)
{
_instance = creature->GetInstanceScript();
- // Talk range was not enough for this encounter
- sCreatureTextMgr->SendChat(me, EMOTE_POWER_SPARK_SUMMONED, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP);
+ TalkToMap(EMOTE_POWER_SPARK_SUMMONED);
MoveToMalygos();
}
@@ -1127,7 +1125,7 @@ public:
me->GetMotionMaster()->MoveFollow(malygos, 0.0f, 0.0f);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!_instance)
return;
@@ -1151,7 +1149,7 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->CastSpell(me, SPELL_POWER_SPARK_DEATH, true); // not supposed to hide the fact it's there by not selectable
}
@@ -1160,7 +1158,7 @@ public:
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_power_sparkAI>(creature);
}
@@ -1181,14 +1179,14 @@ public:
me->SetSpeed(MOVE_FLIGHT, 1.25f);
}
- void Reset() OVERRIDE
+ void Reset() override
{
VehicleAI::Reset();
_wpCount = 0;
}
- void PassengerBoarded(Unit* unit, int8 /*seat*/, bool apply) OVERRIDE
+ void PassengerBoarded(Unit* unit, int8 /*seat*/, bool apply) override
{
if (apply)
{
@@ -1221,7 +1219,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
@@ -1229,7 +1227,7 @@ public:
me->GetMotionMaster()->MovePoint(eventId, MeleeHoverDisksWaypoints[eventId]);
}
- void DoAction(int32 /*action*/) OVERRIDE
+ void DoAction(int32 /*action*/) override
{
if (Vehicle* vehicleTemp = me->GetVehicleKit())
if (vehicleTemp->GetPassenger(0) && vehicleTemp->GetPassenger(0)->GetTypeId() == TYPEID_PLAYER)
@@ -1241,7 +1239,7 @@ public:
me->DespawnOrUnsummon(3*IN_MILLISECONDS);
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -1262,7 +1260,7 @@ public:
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_melee_hover_diskAI>(creature);
}
@@ -1284,16 +1282,16 @@ public:
me->SetSpeed(MOVE_FLIGHT, 0.45f);
}
- void Reset() OVERRIDE
+ void Reset() override
{
VehicleAI::Reset();
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
}
- void PassengerBoarded(Unit* unit, int8 /*seat*/, bool apply) OVERRIDE
+ void PassengerBoarded(Unit* unit, int8 /*seat*/, bool apply) override
{
if (apply)
{
@@ -1309,7 +1307,7 @@ public:
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action < ACTION_DELAYED_DESPAWN)
{
@@ -1328,7 +1326,7 @@ public:
private:
void FillCirclePath(Position const& centerPos, float radius, float z, Movement::PointsArray& path, bool clockwise)
{
- float step = clockwise ? -M_PI / 9.0f : M_PI / 9.0f;
+ float step = clockwise ? float(-M_PI) / 9.0f : float(M_PI) / 9.0f;
float angle = centerPos.GetAngle(me->GetPositionX(), me->GetPositionY());
for (uint8 i = 0; i < 18; angle += step, ++i)
@@ -1344,7 +1342,7 @@ public:
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_caster_hover_diskAI>(creature);
}
@@ -1362,23 +1360,23 @@ class npc_nexus_lord : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
}
- void DoAction(int32 /*action*/) OVERRIDE
+ void DoAction(int32 /*action*/) override
{
_events.ScheduleEvent(EVENT_NUKE_DUMMY, 1);
_events.ScheduleEvent(EVENT_ARCANE_SHOCK, 2*IN_MILLISECONDS);
_events.ScheduleEvent(EVENT_HASTE_BUFF, 12*IN_MILLISECONDS);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1409,7 +1407,7 @@ class npc_nexus_lord : public CreatureScript
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* malygos = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MALYGOS)))
malygos->AI()->SetData(DATA_SUMMON_DEATHS, malygos->AI()->GetData(DATA_SUMMON_DEATHS) + 1);
@@ -1420,7 +1418,7 @@ class npc_nexus_lord : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_nexus_lordAI>(creature);
}
@@ -1438,29 +1436,29 @@ class npc_scion_of_eternity : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
_events.ScheduleEvent(EVENT_ARCANE_BARRAGE, urand(14, 29)*IN_MILLISECONDS);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void AttackStart(Unit* /*target*/) OVERRIDE
+ void AttackStart(Unit* /*target*/) override
{
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
@@ -1476,7 +1474,7 @@ class npc_scion_of_eternity : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* malygos = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MALYGOS)))
malygos->AI()->SetData(DATA_SUMMON_DEATHS, malygos->AI()->GetData(DATA_SUMMON_DEATHS) + 1);
@@ -1487,7 +1485,7 @@ class npc_scion_of_eternity : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_scion_of_eternityAI>(creature);
}
@@ -1506,7 +1504,7 @@ public:
me->SetReactState(REACT_PASSIVE);
}
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
if (Creature* creature = summoner->ToCreature())
{
@@ -1519,7 +1517,7 @@ public:
{
}
- void DoAction(int32 /*action*/) OVERRIDE
+ void DoAction(int32 /*action*/) override
{
if (Creature* malygos = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MALYGOS)))
{
@@ -1531,7 +1529,7 @@ public:
}
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_ARCANE_BOMB_TRIGGER)
{
@@ -1545,7 +1543,7 @@ public:
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_arcane_overloadAI>(creature);
}
@@ -1563,7 +1561,7 @@ public:
{
}
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
_summoner = NULL;
if (Player* player = summoner->ToPlayer())
@@ -1573,7 +1571,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
VehicleAI::UpdateAI(diff);
_events.Update(diff);
@@ -1589,15 +1587,14 @@ public:
}
}
- void PassengerBoarded(Unit* /*unit*/, int8 /*seat*/, bool apply) OVERRIDE
+ void PassengerBoarded(Unit* /*unit*/, int8 /*seat*/, bool apply) override
{
if (!apply)
{
me->DespawnOrUnsummon(2050);
me->SetOrientation(2.5f);
me->SetSpeed(MOVE_FLIGHT, 1.0f, true);
- Position pos;
- me->GetPosition(&pos);
+ Position pos = me->GetPosition();
pos.m_positionX += 10.0f;
pos.m_positionY += 10.0f;
pos.m_positionZ += 12.0f;
@@ -1610,7 +1607,7 @@ public:
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_wyrmrest_skytalonAI(creature);
}
@@ -1629,14 +1626,14 @@ class npc_static_field : public CreatureScript
{
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
// For some great reason the spell doesn't time it...
me->DespawnOrUnsummon(30*IN_MILLISECONDS);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_static_fieldAI(creature);
}
@@ -1651,12 +1648,12 @@ class spell_malygos_portal_beam : public SpellScriptLoader
{
PrepareAuraScript(spell_malygos_portal_beam_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PORTAL_OPENED))
return false;
@@ -1676,14 +1673,14 @@ class spell_malygos_portal_beam : public SpellScriptLoader
target->RemoveAura(SPELL_PORTAL_OPENED);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_malygos_portal_beam_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_malygos_portal_beam_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_malygos_portal_beam_AuraScript();
}
@@ -1698,7 +1695,7 @@ class spell_malygos_random_portal : public SpellScriptLoader
{
PrepareSpellScript(spell_malygos_random_portal_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
@@ -1715,13 +1712,13 @@ class spell_malygos_random_portal : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_malygos_random_portal_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_malygos_random_portal_SpellScript();
}
@@ -1754,12 +1751,12 @@ class spell_malygos_arcane_storm : public SpellScriptLoader
{
PrepareSpellScript(spell_malygos_arcane_storm_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ARCANE_STORM_EXTRA_VISUAL))
return false;
@@ -1792,14 +1789,14 @@ class spell_malygos_arcane_storm : public SpellScriptLoader
GetCaster()->CastSpell(GetHitUnit(), SPELL_ARCANE_STORM_EXTRA_VISUAL, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_malygos_arcane_storm_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnEffectLaunchTarget += SpellEffectFn(spell_malygos_arcane_storm_SpellScript::HandleVisual, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_malygos_arcane_storm_SpellScript();
}
@@ -1812,9 +1809,9 @@ public:
class spell_malygos_vortex_dummy_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_malygos_vortex_dummy_SpellScript)
+ PrepareSpellScript(spell_malygos_vortex_dummy_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
@@ -1830,13 +1827,13 @@ public:
// the rest of the vortex execution continues when SPELL_VORTEX_2 is removed.
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_malygos_vortex_dummy_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_malygos_vortex_dummy_SpellScript();
}
@@ -1851,12 +1848,12 @@ class spell_malygos_vortex_visual : public SpellScriptLoader
{
PrepareAuraScript(spell_malygos_vortex_visual_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_VORTEX_1) || !sSpellMgr->GetSpellInfo(SPELL_VORTEX_6))
return false;
@@ -1894,13 +1891,13 @@ class spell_malygos_vortex_visual : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_malygos_vortex_visual_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_malygos_vortex_visual_AuraScript();
}
@@ -1930,7 +1927,7 @@ class spell_arcane_overload : public SpellScriptLoader
{
PrepareSpellScript(spell_arcane_overload_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
@@ -1942,13 +1939,13 @@ class spell_arcane_overload : public SpellScriptLoader
GetSpellInfo()->Effects[EFFECT_0].CalcRadius(arcaneOverload) * arcaneOverload->GetObjectScale()));
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_arcane_overload_SpellScript::ResizeEffectRadiusTargetChecker, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_arcane_overload_SpellScript();
}
@@ -1963,7 +1960,7 @@ class spell_nexus_lord_align_disk_aggro : public SpellScriptLoader
{
PrepareSpellScript(spell_nexus_lord_align_disk_aggro_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
@@ -1975,13 +1972,13 @@ class spell_nexus_lord_align_disk_aggro : public SpellScriptLoader
target->GetMotionMaster()->MoveChase(caster->GetVictim());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_nexus_lord_align_disk_aggro_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_nexus_lord_align_disk_aggro_SpellScript();
}
@@ -2014,7 +2011,7 @@ class spell_scion_of_eternity_arcane_barrage : public SpellScriptLoader
{
PrepareSpellScript(spell_scion_of_eternity_arcane_barrage_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT && GetCaster()->GetInstanceScript() != NULL;
}
@@ -2076,14 +2073,14 @@ class spell_scion_of_eternity_arcane_barrage : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_scion_of_eternity_arcane_barrage_SpellScript::FilterMeleeHoverDiskPassangers, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnHit += SpellHitFn(spell_scion_of_eternity_arcane_barrage_SpellScript::TriggerDamageSpellFromPlayer);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_scion_of_eternity_arcane_barrage_SpellScript();
}
@@ -2098,12 +2095,12 @@ class spell_malygos_destroy_platform_channel : public SpellScriptLoader
{
PrepareAuraScript(spell_malygos_destroy_platform_channel_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DESTROY_PLATFORM_BOOM_VISUAL))
return false;
@@ -2119,13 +2116,13 @@ class spell_malygos_destroy_platform_channel : public SpellScriptLoader
platformTrigger->CastSpell(platformTrigger, SPELL_DESTROY_PLATFORM_BOOM_VISUAL);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_malygos_destroy_platform_channel_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_malygos_destroy_platform_channel_AuraScript();
}
@@ -2140,12 +2137,12 @@ class spell_alexstrasza_bunny_destroy_platform_boom_visual : public SpellScriptL
{
PrepareSpellScript(spell_alexstrasza_bunny_destroy_platform_boom_visual_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DESTROY_PLATFORM_EVENT))
return false;
@@ -2159,13 +2156,13 @@ class spell_alexstrasza_bunny_destroy_platform_boom_visual : public SpellScriptL
target->CastSpell(target, SPELL_DESTROY_PLATFORM_EVENT);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_alexstrasza_bunny_destroy_platform_boom_visual_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_alexstrasza_bunny_destroy_platform_boom_visual_SpellScript();
}
@@ -2180,7 +2177,7 @@ class spell_alexstrasza_bunny_destroy_platform_event : public SpellScriptLoader
{
PrepareSpellScript(spell_alexstrasza_bunny_destroy_platform_event_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
@@ -2198,14 +2195,14 @@ class spell_alexstrasza_bunny_destroy_platform_event : public SpellScriptLoader
GetCaster()->CastSpell((Unit*)NULL, SPELL_SUMMON_RED_DRAGON_BUDDY_F_CAST);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_alexstrasza_bunny_destroy_platform_event_SpellScript::HandleSendEvent, EFFECT_0, SPELL_EFFECT_SEND_EVENT);
OnEffectHit += SpellEffectFn(spell_alexstrasza_bunny_destroy_platform_event_SpellScript::HandleScript, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_alexstrasza_bunny_destroy_platform_event_SpellScript();
}
@@ -2221,7 +2218,7 @@ class spell_wyrmrest_skytalon_summon_red_dragon_buddy : public SpellScriptLoader
{
PrepareSpellScript(spell_wyrmrest_skytalon_summon_red_dragon_buddy_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -2233,13 +2230,13 @@ class spell_wyrmrest_skytalon_summon_red_dragon_buddy : public SpellScriptLoader
dest.RelocateOffset(offset);
}
- void Register() OVERRIDE
+ void Register() override
{
OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_wyrmrest_skytalon_summon_red_dragon_buddy_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER_RADIUS);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_wyrmrest_skytalon_summon_red_dragon_buddy_SpellScript();
}
@@ -2254,7 +2251,7 @@ class spell_wyrmrest_skytalon_ride_red_dragon_buddy_trigger : public SpellScript
{
PrepareSpellScript(spell_wyrmrest_skytalon_ride_red_dragon_buddy_trigger_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
@@ -2265,13 +2262,13 @@ class spell_wyrmrest_skytalon_ride_red_dragon_buddy_trigger : public SpellScript
target->CastSpell(GetCaster(), GetEffectValue(), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_wyrmrest_skytalon_ride_red_dragon_buddy_trigger_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_wyrmrest_skytalon_ride_red_dragon_buddy_trigger_SpellScript();
}
@@ -2284,14 +2281,14 @@ class spell_malygos_surge_of_power_warning_selector_25 : public SpellScriptLoade
class spell_malygos_surge_of_power_warning_selector_25_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_malygos_surge_of_power_warning_selector_25_SpellScript)
+ PrepareSpellScript(spell_malygos_surge_of_power_warning_selector_25_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SURGE_OF_POWER_PHASE_3_25))
return false;
@@ -2330,14 +2327,14 @@ class spell_malygos_surge_of_power_warning_selector_25 : public SpellScriptLoade
GetCaster()->ToCreature()->CastSpell((Unit*)NULL, SPELL_SURGE_OF_POWER_PHASE_3_25);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_malygos_surge_of_power_warning_selector_25_SpellScript::SendThreeTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
AfterHit += SpellHitFn(spell_malygos_surge_of_power_warning_selector_25_SpellScript::ExecuteMainSpell);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_malygos_surge_of_power_warning_selector_25_SpellScript();
}
@@ -2350,9 +2347,9 @@ class spell_malygos_surge_of_power_25 : public SpellScriptLoader
class spell_malygos_surge_of_power_25_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_malygos_surge_of_power_25_SpellScript)
+ PrepareSpellScript(spell_malygos_surge_of_power_25_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
@@ -2382,13 +2379,13 @@ class spell_malygos_surge_of_power_25 : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_malygos_surge_of_power_25_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_malygos_surge_of_power_25_SpellScript();
}
@@ -2403,12 +2400,12 @@ class spell_alexstrasza_gift_beam : public SpellScriptLoader
{
PrepareAuraScript(spell_alexstrasza_gift_beam_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ALEXSTRASZAS_GIFT_BEAM_VISUAL))
return false;
@@ -2428,14 +2425,14 @@ class spell_alexstrasza_gift_beam : public SpellScriptLoader
target->RemoveAura(SPELL_ALEXSTRASZAS_GIFT_BEAM_VISUAL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_alexstrasza_gift_beam_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_alexstrasza_gift_beam_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_alexstrasza_gift_beam_AuraScript();
}
@@ -2450,7 +2447,7 @@ class spell_alexstrasza_gift_beam_visual : public SpellScriptLoader
{
PrepareAuraScript(spell_alexstrasza_gift_beam_visual_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
@@ -2482,7 +2479,7 @@ class spell_alexstrasza_gift_beam_visual : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_alexstrasza_gift_beam_visual_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_alexstrasza_gift_beam_visual_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
@@ -2491,7 +2488,7 @@ class spell_alexstrasza_gift_beam_visual : public SpellScriptLoader
GameObject* _alexstraszaGift;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_alexstrasza_gift_beam_visual_AuraScript();
}
@@ -2502,7 +2499,7 @@ class achievement_denyin_the_scion : public AchievementCriteriaScript
public:
achievement_denyin_the_scion() : AchievementCriteriaScript("achievement_denyin_the_scion") { }
- bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE
+ bool OnCheck(Player* source, Unit* /*target*/) override
{
// Only melee disks can be used
if (Unit* disk = source->GetVehicleBase())
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 e79f8d0764f..8a1fb6a9829 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
@@ -26,7 +26,7 @@ class instance_eye_of_eternity : public InstanceMapScript
public:
instance_eye_of_eternity() : InstanceMapScript("instance_eye_of_eternity", 616) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_eye_of_eternity_InstanceMapScript(map);
}
@@ -48,7 +48,7 @@ public:
alexstraszaBunnyGUID = 0;
};
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -94,7 +94,7 @@ public:
instance->AddToMap(go);
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -105,19 +105,19 @@ public:
if (instance->GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL)
{
irisGUID = go->GetGUID();
- go->GetPosition(&focusingIrisPosition);
+ focusingIrisPosition = go->GetPosition();
}
break;
case GO_FOCUSING_IRIS_25:
if (instance->GetDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL)
{
irisGUID = go->GetGUID();
- go->GetPosition(&focusingIrisPosition);
+ focusingIrisPosition = go->GetPosition();
}
break;
case GO_EXIT_PORTAL:
exitPortalGUID = go->GetGUID();
- go->GetPosition(&exitPortalPosition);
+ exitPortalPosition = go->GetPosition();
break;
case GO_HEART_OF_MAGIC_10:
if (instance->GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL)
@@ -130,7 +130,7 @@ public:
}
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -152,7 +152,7 @@ public:
}
}
- void OnUnitDeath(Unit* unit) OVERRIDE
+ void OnUnitDeath(Unit* unit) override
{
if (unit->GetTypeId() != TYPEID_PLAYER)
return;
@@ -165,7 +165,7 @@ public:
unit->SetControlled(true, UNIT_STATE_ROOT);
}
- void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) OVERRIDE
+ void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) override
{
if (eventId == EVENT_FOCUSING_IRIS)
{
@@ -239,7 +239,7 @@ public:
}
}
- void SetData(uint32 data, uint32 /*value*/) OVERRIDE
+ void SetData(uint32 data, uint32 /*value*/) override
{
switch (data)
{
@@ -255,7 +255,7 @@ public:
}
}
- uint64 GetData64(uint32 data) const OVERRIDE
+ uint64 GetData64(uint32 data) const override
{
switch (data)
{
@@ -278,7 +278,7 @@ public:
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -289,7 +289,7 @@ public:
return saveStream.str();
}
- void Load(const char* str) OVERRIDE
+ void Load(const char* str) override
{
if (!str)
{
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp
index f3304368e70..019a85c1387 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp
@@ -88,7 +88,7 @@ class boss_anomalus : public CreatureScript
uint64 uiChaoticRiftGUID;
bool chaosTheory;
- void Reset() OVERRIDE
+ void Reset() override
{
Phase = 0;
uiSparkTimer = 5000;
@@ -98,21 +98,21 @@ class boss_anomalus : public CreatureScript
instance->SetData(DATA_ANOMALUS_EVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetData(DATA_ANOMALUS_EVENT, IN_PROGRESS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetData(DATA_ANOMALUS_EVENT, DONE);
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_CHAOS_THEORY)
return chaosTheory ? 1 : 0;
@@ -120,13 +120,13 @@ class boss_anomalus : public CreatureScript
return 0;
}
- void SummonedCreatureDies(Creature* summoned, Unit* /*who*/) OVERRIDE
+ void SummonedCreatureDies(Creature* summoned, Unit* /*who*/) override
{
if (summoned->GetEntry() == NPC_CHAOTIC_RIFT)
chaosTheory = false;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -182,7 +182,7 @@ class boss_anomalus : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_anomalusAI>(creature);
}
@@ -206,7 +206,7 @@ class npc_chaotic_rift : public CreatureScript
uint32 uiChaoticEnergyBurstTimer;
uint32 uiSummonCrazedManaWraithTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiChaoticEnergyBurstTimer = 1000;
uiSummonCrazedManaWraithTimer = 5000;
@@ -214,7 +214,7 @@ class npc_chaotic_rift : public CreatureScript
DoCast(me, SPELL_ARCANEFORM, false);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -250,7 +250,7 @@ class npc_chaotic_rift : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_chaotic_riftAI>(creature);
}
@@ -263,7 +263,7 @@ class achievement_chaos_theory : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp
index b82f131457a..3e1996fd053 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp
@@ -47,7 +47,7 @@ class boss_commander_kolurg : public CreatureScript
public:
boss_commander_kolurg() : CreatureScript("boss_commander_kolurg") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_commander_kolurgAI(creature);
}
@@ -56,12 +56,12 @@ public:
{
boss_commander_kolurgAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void Reset() override { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void AttackStart(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -69,7 +69,7 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE { }
+ void JustDied(Unit* /*killer*/) override { }
};
};
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp
index 7a9ea8ec9c3..c1ecdff8576 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp
@@ -41,7 +41,7 @@ class boss_commander_stoutbeard : public CreatureScript
public:
boss_commander_stoutbeard() : CreatureScript("boss_commander_stoutbeard") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_commander_stoutbeardAI(creature);
}
@@ -50,11 +50,11 @@ public:
{
boss_commander_stoutbeardAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void Reset() override { }
+ void AttackStart(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
//Return since we have no target
if (!UpdateVictim())
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
index 9943ad7e1b1..bfe34ece6cf 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
@@ -59,7 +59,7 @@ class boss_keristrasza : public CreatureScript
public:
boss_keristrasza() : CreatureScript("boss_keristrasza") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_keristraszaAI>(creature);
}
@@ -81,7 +81,7 @@ public:
bool intenseCold;
bool bEnrage;
- void Reset() OVERRIDE
+ void Reset() override
{
uiCrystalfireBreathTimer = 14*IN_MILLISECONDS;
uiCrystalChainsCrystalizeTimer = DUNGEON_MODE(30*IN_MILLISECONDS, 11*IN_MILLISECONDS);
@@ -98,7 +98,7 @@ public:
instance->SetData(DATA_KERISTRASZA_EVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
DoCastAOE(SPELL_INTENSE_COLD);
@@ -106,14 +106,14 @@ public:
instance->SetData(DATA_KERISTRASZA_EVENT, IN_PROGRESS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetData(DATA_KERISTRASZA_EVENT, DONE);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
@@ -157,13 +157,13 @@ public:
}
}
- void SetGUID(uint64 guid, int32 id/* = 0 */) OVERRIDE
+ void SetGUID(uint64 guid, int32 id/* = 0 */) override
{
if (id == DATA_INTENSE_COLD)
intenseColdList.push_back(guid);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -209,7 +209,7 @@ class containment_sphere : public GameObjectScript
public:
containment_sphere() : GameObjectScript("containment_sphere") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
InstanceScript* instance = go->GetInstanceScript();
@@ -220,7 +220,7 @@ public:
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
go->SetGoState(GO_STATE_ACTIVE);
- CAST_AI(boss_keristrasza::boss_keristraszaAI, pKeristrasza->AI())->CheckContainmentSpheres(true);
+ ENSURE_AI(boss_keristrasza::boss_keristraszaAI, pKeristrasza->AI())->CheckContainmentSpheres(true);
}
return true;
}
@@ -247,13 +247,13 @@ class spell_intense_cold : public SpellScriptLoader
caster->GetAI()->SetGUID(GetTarget()->GetGUID(), DATA_INTENSE_COLD);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_intense_cold_AuraScript::HandlePeriodicTick, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_intense_cold_AuraScript();
}
@@ -266,12 +266,12 @@ class achievement_intense_cold : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* player, Unit* target) OVERRIDE
+ bool OnCheck(Player* player, Unit* target) override
{
if (!target)
return false;
- std::list<uint64> intenseColdList = CAST_AI(boss_keristrasza::boss_keristraszaAI, target->ToCreature()->AI())->intenseColdList;
+ std::list<uint64> intenseColdList = ENSURE_AI(boss_keristrasza::boss_keristraszaAI, target->ToCreature()->AI())->intenseColdList;
if (!intenseColdList.empty())
for (std::list<uint64>::iterator itr = intenseColdList.begin(); itr != intenseColdList.end(); ++itr)
if (player->GetGUID() == *itr)
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 ee1524564a8..e42d3d2bcfc 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp
@@ -63,7 +63,7 @@ class boss_magus_telestra : public CreatureScript
public:
boss_magus_telestra() : CreatureScript("boss_magus_telestra") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_magus_telestraAI>(creature);
}
@@ -96,7 +96,7 @@ public:
uint8 splitPersonality;
time_t time[3];
- void Reset() OVERRIDE
+ void Reset() override
{
Phase = 0;
//These times are probably wrong
@@ -121,27 +121,27 @@ public:
instance->SetData(DATA_MAGUS_TELESTRA_EVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetData(DATA_MAGUS_TELESTRA_EVENT, IN_PROGRESS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetData(DATA_MAGUS_TELESTRA_EVENT, DONE);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_MAGUS_DEAD)
{
@@ -155,7 +155,7 @@ public:
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_SPLIT_PERSONALITY)
return splitPersonality;
@@ -192,7 +192,7 @@ public:
return 0;
}
- void SummonedCreatureDespawn(Creature* summon) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summon) override
{
if (summon->IsAlive())
return;
@@ -214,7 +214,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -345,7 +345,7 @@ class achievement_split_personality : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp
index 93e52c4da73..222f0474c01 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp
@@ -76,7 +76,7 @@ public:
frenzy = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
@@ -91,7 +91,7 @@ public:
instance->SetData(DATA_ORMOROK_EVENT, IN_PROGRESS);
}
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
if (!frenzy && HealthBelowPct(25))
{
@@ -101,7 +101,7 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
@@ -110,13 +110,13 @@ public:
instance->SetData(DATA_ORMOROK_EVENT, DONE);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -162,7 +162,7 @@ public:
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_ormorokAI>(creature);
}
@@ -201,7 +201,7 @@ public:
_despawntimer = 0;
}
- void IsSummonedBy(Unit* owner) OVERRIDE
+ void IsSummonedBy(Unit* owner) override
{
switch (me->GetEntry())
{
@@ -225,12 +225,12 @@ public:
_despawntimer = 2000;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
return type == DATA_COUNT ? _count : 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_despawntimer <= diff)
{
@@ -250,7 +250,7 @@ public:
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_crystal_spike_triggerAI(creature);
}
@@ -277,13 +277,13 @@ class spell_crystal_spike : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_crystal_spike_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_crystal_spike_AuraScript();
}
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp
index 851e16fe576..f2118932d61 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp
@@ -33,7 +33,7 @@ class instance_nexus : public InstanceMapScript
public:
instance_nexus() : InstanceMapScript("instance_nexus", 576) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_nexus_InstanceMapScript(map);
}
@@ -53,7 +53,7 @@ public:
std::string strInstData;
- void Initialize() OVERRIDE
+ void Initialize() override
{
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
@@ -64,7 +64,7 @@ public:
TelestrasContainmentSphere = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
Map::PlayerList const &players = instance->GetPlayers();
uint32 TeamInInstance = 0;
@@ -88,7 +88,7 @@ public:
if (ServerAllowsTwoSideGroups())
creature->setFaction(FACTION_HOSTILE_FOR_ALL);
if (TeamInInstance == ALLIANCE)
- creature->UpdateEntry(26799, HORDE);
+ creature->UpdateEntry(26799);
break;
}
case 26802:
@@ -96,7 +96,7 @@ public:
if (ServerAllowsTwoSideGroups())
creature->setFaction(FACTION_HOSTILE_FOR_ALL);
if (TeamInInstance == ALLIANCE)
- creature->UpdateEntry(26801, HORDE);
+ creature->UpdateEntry(26801);
break;
}
case 26805:
@@ -104,7 +104,7 @@ public:
if (ServerAllowsTwoSideGroups())
creature->setFaction(FACTION_HOSTILE_FOR_ALL);
if (TeamInInstance == ALLIANCE)
- creature->UpdateEntry(26803, HORDE);
+ creature->UpdateEntry(26803);
break;
}
case 27949:
@@ -112,7 +112,7 @@ public:
if (ServerAllowsTwoSideGroups())
creature->setFaction(FACTION_HOSTILE_FOR_ALL);
if (TeamInInstance == ALLIANCE)
- creature->UpdateEntry(27947, HORDE);
+ creature->UpdateEntry(27947);
break;
}
case 26796:
@@ -120,13 +120,13 @@ public:
if (ServerAllowsTwoSideGroups())
creature->setFaction(FACTION_HOSTILE_FOR_ALL);
if (TeamInInstance == ALLIANCE)
- creature->UpdateEntry(26798, HORDE);
+ creature->UpdateEntry(26798);
break;
}
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -154,7 +154,7 @@ public:
}
}
- uint32 GetData(uint32 identifier) const OVERRIDE
+ uint32 GetData(uint32 identifier) const override
{
switch (identifier)
{
@@ -166,7 +166,7 @@ public:
return 0;
}
- void SetData(uint32 identifier, uint32 data) OVERRIDE
+ void SetData(uint32 identifier, uint32 data) override
{
switch (identifier)
{
@@ -221,7 +221,7 @@ public:
}
}
- uint64 GetData64(uint32 uiIdentifier) const OVERRIDE
+ uint64 GetData64(uint32 uiIdentifier) const override
{
switch (uiIdentifier)
{
@@ -234,7 +234,7 @@ public:
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
return strInstData;
}
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp
index 949b26d3d3b..3539661ea19 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp
@@ -59,7 +59,7 @@ class boss_drakos : public CreatureScript
{
boss_drakosAI(Creature* creature) : BossAI(creature, DATA_DRAKOS) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
@@ -70,13 +70,13 @@ class boss_drakos : public CreatureScript
postPull = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -92,12 +92,9 @@ class boss_drakos : public CreatureScript
{
case EVENT_BOMB_SUMMON:
{
- Position position;
- me->GetPosition(&position);
-
for (uint8 i = 0; i <= (postPull ? 3 : 0); i++)
{
- me->GetRandomNearPosition(position, frand(0.0f, 10.0f));
+ Position position = me->GetRandomNearPosition(frand(0.0f, 10.0f));
me->SummonCreature(NPC_UNSTABLE_SPHERE, position);
}
}
@@ -121,7 +118,7 @@ class boss_drakos : public CreatureScript
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
@@ -131,7 +128,7 @@ class boss_drakos : public CreatureScript
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_KILL);
}
@@ -140,7 +137,7 @@ class boss_drakos : public CreatureScript
bool postPull;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetOculusAI<boss_drakosAI>(creature);
}
@@ -155,7 +152,7 @@ class npc_unstable_sphere : public CreatureScript
{
npc_unstable_sphereAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetReactState(REACT_PASSIVE);
me->GetMotionMaster()->MoveRandom(40.0f);
@@ -168,7 +165,7 @@ class npc_unstable_sphere : public CreatureScript
me->DespawnOrUnsummon(19000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (pulseTimer <= diff)
{
@@ -183,7 +180,7 @@ class npc_unstable_sphere : public CreatureScript
uint32 pulseTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_unstable_sphereAI(creature);
}
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp
index c4fda7e68b3..3ae61bdd116 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp
@@ -87,7 +87,7 @@ class boss_eregos : public CreatureScript
{
boss_eregosAI(Creature* creature) : BossAI(creature, DATA_EREGOS) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
_phase = PHASE_NORMAL;
@@ -99,13 +99,13 @@ class boss_eregos : public CreatureScript
DoAction(ACTION_SET_NORMAL_EVENTS);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
@@ -121,7 +121,7 @@ class boss_eregos : public CreatureScript
_amberVoid = false;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -137,7 +137,7 @@ class boss_eregos : public CreatureScript
return 0;
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action != ACTION_SET_NORMAL_EVENTS)
return;
@@ -149,7 +149,7 @@ class boss_eregos : public CreatureScript
events.ScheduleEvent(EVENT_SUMMON_LEY_WHELP, urand(15, 30) * IN_MILLISECONDS, 0, PHASE_NORMAL);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
BossAI::JustSummoned(summon);
@@ -161,7 +161,7 @@ class boss_eregos : public CreatureScript
summon->GetMotionMaster()->MoveRandom(100.0f);
}
- void SummonedCreatureDespawn(Creature* summon) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summon) override
{
if (summon->GetEntry() != NPC_PLANAR_ANOMALY)
return;
@@ -170,7 +170,7 @@ class boss_eregos : public CreatureScript
summon->CastSpell(summon, SPELL_PLANAR_BLAST, true);
}
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
if (!IsHeroic())
return;
@@ -191,7 +191,7 @@ class boss_eregos : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -231,7 +231,7 @@ class boss_eregos : public CreatureScript
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -245,7 +245,7 @@ class boss_eregos : public CreatureScript
bool _amberVoid;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_eregosAI(creature);
}
@@ -266,13 +266,13 @@ class spell_eregos_planar_shift : public SpellScriptLoader
creature->AI()->DoAction(ACTION_SET_NORMAL_EVENTS);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_eregos_planar_shift_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_SCHOOL_IMMUNITY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_eregos_planar_shift_AuraScript();
}
@@ -283,7 +283,7 @@ class achievement_gen_eregos_void : public AchievementCriteriaScript
public:
achievement_gen_eregos_void(char const* name, uint32 data) : AchievementCriteriaScript(name), _data(data) { }
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
return target && target->GetAI()->GetData(_data);
}
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp
index 8cc198a0d84..c4e0986edd4 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp
@@ -103,7 +103,7 @@ class boss_urom : public CreatureScript
std::random_shuffle(group, group + 3);
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->CastSpell(me, SPELL_EVOCATE);
@@ -123,14 +123,14 @@ class boss_urom : public CreatureScript
timeBombTimer = urand(20000, 25000);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
StartAttack();
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who)
return;
@@ -187,13 +187,13 @@ class boss_urom : public CreatureScript
++platform;
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_PLAYER_KILL);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -230,11 +230,13 @@ class boss_urom : public CreatureScript
{
if (arcaneExplosionTimer <= diff)
{
- Position pos;
- me->GetVictim()->GetPosition(&pos);
+ if (me->GetVictim())
+ {
+ Position pos = me->EnsureVictim()->GetPosition();
- me->NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation());
- me->GetMotionMaster()->MoveChase(me->GetVictim());
+ me->NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation());
+ me->GetMotionMaster()->MoveChase(me->GetVictim());
+ }
me->SetWalk(true);
Talk(EMOTE_ARCANE_EXPLOSION);
@@ -272,7 +274,7 @@ class boss_urom : public CreatureScript
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
@@ -286,7 +288,7 @@ class boss_urom : public CreatureScript
me->DeleteThreatList();
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override
{
switch (spellInfo->Id)
{
@@ -333,7 +335,7 @@ class boss_urom : public CreatureScript
uint32 timeBombTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetOculusAI<boss_uromAI>(creature);
}
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp
index f6cf17c5b88..d07d68f28c9 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp
@@ -61,14 +61,14 @@ class boss_varos : public CreatureScript
{
boss_varosAI(Creature* creature) : BossAI(creature, DATA_VAROS) { }
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
BossAI::InitializeAI();
if (instance->GetBossState(DATA_DRAKOS) != DONE)
DoCast(me, SPELL_CENTRIFUGE_SHIELD);
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
@@ -81,7 +81,7 @@ class boss_varos : public CreatureScript
coreEnergizeOrientation = 0.0f;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
@@ -93,7 +93,7 @@ class boss_varos : public CreatureScript
return coreEnergizeOrientation;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -143,7 +143,7 @@ class boss_varos : public CreatureScript
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
@@ -155,7 +155,7 @@ class boss_varos : public CreatureScript
float coreEnergizeOrientation;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetOculusAI<boss_varosAI>(creature);
}
@@ -173,7 +173,7 @@ class npc_azure_ring_captain : public CreatureScript
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
targetGUID = 0;
@@ -183,7 +183,7 @@ class npc_azure_ring_captain : public CreatureScript
me->SetReactState(REACT_AGGRESSIVE);
}
- void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, SpellInfo const* spell) override
{
if (spell->Id == SPELL_ICE_BEAM)
{
@@ -192,7 +192,7 @@ class npc_azure_ring_captain : public CreatureScript
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
return;
@@ -200,7 +200,7 @@ class npc_azure_ring_captain : public CreatureScript
DoMeleeAttackIfReady();
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE ||
id != ACTION_CALL_DRAGON_EVENT)
@@ -212,7 +212,7 @@ class npc_azure_ring_captain : public CreatureScript
DoCast(target, SPELL_ICE_BEAM);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -236,7 +236,7 @@ class npc_azure_ring_captain : public CreatureScript
InstanceScript* instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_azure_ring_captainAI>(creature);
}
@@ -251,7 +251,7 @@ class spell_varos_centrifuge_shield : public SpellScriptLoader
{
PrepareAuraScript(spell_varos_centrifuge_shield_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
Unit* caster = GetCaster();
return (caster && caster->ToCreature());
@@ -279,14 +279,14 @@ class spell_varos_centrifuge_shield : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectRemove += AuraEffectRemoveFn(spell_varos_centrifuge_shield_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectApply += AuraEffectApplyFn(spell_varos_centrifuge_shield_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_varos_centrifuge_shield_AuraScript();
}
@@ -299,7 +299,7 @@ class spell_varos_energize_core_area_enemy : public SpellScriptLoader
class spell_varos_energize_core_area_enemySpellScript : public SpellScript
{
- PrepareSpellScript(spell_varos_energize_core_area_enemySpellScript)
+ PrepareSpellScript(spell_varos_energize_core_area_enemySpellScript);
void FilterTargets(std::list<WorldObject*>& targets)
{
@@ -310,15 +310,12 @@ class spell_varos_energize_core_area_enemy : public SpellScriptLoader
if (varos->GetEntry() != NPC_VAROS)
return;
- float orientation = CAST_AI(boss_varos::boss_varosAI, varos->AI())->GetCoreEnergizeOrientation();
+ float orientation = ENSURE_AI(boss_varos::boss_varosAI, varos->AI())->GetCoreEnergizeOrientation();
for (std::list<WorldObject*>::iterator itr = targets.begin(); itr != targets.end();)
{
- Position pos;
- (*itr)->GetPosition(&pos);
-
float angle = varos->GetAngle((*itr)->GetPositionX(), (*itr)->GetPositionY());
- float diff = fabs(orientation - angle);
+ float diff = std::fabs(orientation - angle);
if (diff > 1.0f)
itr = targets.erase(itr);
@@ -327,13 +324,13 @@ class spell_varos_energize_core_area_enemy : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_varos_energize_core_area_enemySpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_varos_energize_core_area_enemySpellScript();
}
@@ -346,7 +343,7 @@ class spell_varos_energize_core_area_entry : public SpellScriptLoader
class spell_varos_energize_core_area_entrySpellScript : public SpellScript
{
- PrepareSpellScript(spell_varos_energize_core_area_entrySpellScript)
+ PrepareSpellScript(spell_varos_energize_core_area_entrySpellScript);
void FilterTargets(std::list<WorldObject*>& targets)
{
@@ -357,15 +354,12 @@ class spell_varos_energize_core_area_entry : public SpellScriptLoader
if (varos->GetEntry() != NPC_VAROS)
return;
- float orientation = CAST_AI(boss_varos::boss_varosAI, varos->AI())->GetCoreEnergizeOrientation();
+ float orientation = ENSURE_AI(boss_varos::boss_varosAI, varos->AI())->GetCoreEnergizeOrientation();
for (std::list<WorldObject*>::iterator itr = targets.begin(); itr != targets.end();)
{
- Position pos;
- (*itr)->GetPosition(&pos);
-
float angle = varos->GetAngle((*itr)->GetPositionX(), (*itr)->GetPositionY());
- float diff = fabs(orientation - angle);
+ float diff = std::fabs(orientation - angle);
if (diff > 1.0f)
itr = targets.erase(itr);
@@ -374,13 +368,13 @@ class spell_varos_energize_core_area_entry : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_varos_energize_core_area_entrySpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_varos_energize_core_area_entrySpellScript();
}
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp
index 39dec9999cc..2b15ddf32c4 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp
@@ -59,7 +59,7 @@ class instance_oculus : public InstanceMapScript
VerdisaGUID = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -121,7 +121,7 @@ class instance_oculus : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -137,7 +137,7 @@ class instance_oculus : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -149,7 +149,7 @@ class instance_oculus : public InstanceMapScript
}
}
- void OnUnitDeath(Unit* unit) OVERRIDE
+ void OnUnitDeath(Unit* unit) override
{
Creature* creature = unit->ToCreature();
if (!creature)
@@ -165,7 +165,7 @@ class instance_oculus : public InstanceMapScript
}
}
- void FillInitialWorldStates(WorldPacket& data) OVERRIDE
+ void FillInitialWorldStates(WorldPacket& data) override
{
if (GetBossState(DATA_DRAKOS) == DONE && GetBossState(DATA_VAROS) != DONE)
{
@@ -179,7 +179,7 @@ class instance_oculus : public InstanceMapScript
}
}
- void ProcessEvent(WorldObject* /*unit*/, uint32 eventId) OVERRIDE
+ void ProcessEvent(WorldObject* /*unit*/, uint32 eventId) override
{
if (eventId != EVENT_CALL_DRAGON)
return;
@@ -189,7 +189,7 @@ class instance_oculus : public InstanceMapScript
drake->AI()->DoAction(ACTION_CALL_DRAGON_EVENT);
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -239,7 +239,7 @@ class instance_oculus : public InstanceMapScript
return true;
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -281,12 +281,12 @@ class instance_oculus : public InstanceMapScript
void GreaterWhelps()
{
- for (std::list<uint64>::const_iterator itr = GreaterWhelpList.begin(); itr != GreaterWhelpList.end(); ++itr)
- if (Creature* gwhelp = instance->GetCreature(*itr))
+ for (uint64 guid : GreaterWhelpList)
+ if (Creature* gwhelp = instance->GetCreature(guid))
gwhelp->SetPhaseMask(1, true);
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -297,7 +297,7 @@ class instance_oculus : public InstanceMapScript
return saveStream.str();
}
- void Load(char const* str) OVERRIDE
+ void Load(char const* str) override
{
if (!str)
{
@@ -346,7 +346,7 @@ class instance_oculus : public InstanceMapScript
std::list<uint64> GreaterWhelpList;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_oculus_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
index 506e16741fb..259d7faa6fe 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
@@ -126,7 +126,7 @@ class npc_verdisa_beglaristrasz_eternos : public CreatureScript
player->DestroyItemCount(itemId, 1, true, false);
}
- void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) OVERRIDE
+ void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
switch (menuId)
{
@@ -172,7 +172,7 @@ class npc_verdisa_beglaristrasz_eternos : public CreatureScript
player->PlayerTalkClass->SendCloseGossip();
}
- void MovementInform(uint32 /*type*/, uint32 id) OVERRIDE
+ void MovementInform(uint32 /*type*/, uint32 id) override
{
if (id != POINT_MOVE_OUT)
return;
@@ -186,7 +186,7 @@ class npc_verdisa_beglaristrasz_eternos : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetOculusAI<npc_verdisa_beglaristrasz_eternosAI>(creature);
}
@@ -201,7 +201,7 @@ class npc_image_belgaristrasz : public CreatureScript
{
npc_image_belgaristraszAI(Creature* creature) : ScriptedAI(creature) { }
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
if (summoner->GetEntry() == NPC_VAROS)
{
@@ -217,7 +217,7 @@ class npc_image_belgaristrasz : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetOculusAI<npc_image_belgaristraszAI>(creature);
}
@@ -235,13 +235,13 @@ class npc_ruby_emerald_amber_drake : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_healthWarning = true;
}
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
if (_instance->GetBossState(DATA_EREGOS) == IN_PROGRESS)
if (Creature* eregos = me->FindNearestCreature(NPC_EREGOS, 450.0f, true))
@@ -264,18 +264,17 @@ class npc_ruby_emerald_amber_drake : public CreatureScript
return;
}
- Position pos;
- summoner->GetPosition(&pos);
+ Position pos = summoner->GetPosition();
me->GetMotionMaster()->MovePoint(POINT_LAND, pos);
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == POINT_MOTION_TYPE && id == POINT_LAND)
me->SetDisableGravity(false); // Needed this for proper animation after spawn, the summon in air fall to ground bug leave no other option for now, if this isn't used the drake will only walk on move.
}
- void PassengerBoarded(Unit* passenger, int8 /*seatId*/, bool apply) OVERRIDE
+ void PassengerBoarded(Unit* passenger, int8 /*seatId*/, bool apply) override
{
if (passenger->GetTypeId() != TYPEID_PLAYER)
return;
@@ -295,7 +294,7 @@ class npc_ruby_emerald_amber_drake : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_healthWarning)
{
@@ -337,8 +336,7 @@ class npc_ruby_emerald_amber_drake : public CreatureScript
me->SetOrientation(2.5f);
me->SetSpeed(MOVE_FLIGHT, 1.0f, true);
Talk(SAY_DRAKES_TAKEOFF);
- Position pos;
- me->GetPosition(&pos);
+ Position pos = me->GetPosition();
Position offset = { 10.0f, 10.0f, 12.0f, 0.0f };
pos.RelocateOffset(offset);
me->SetDisableGravity(true);
@@ -357,7 +355,7 @@ class npc_ruby_emerald_amber_drake : public CreatureScript
bool _healthWarning;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetOculusAI<npc_ruby_emerald_amber_drakeAI>(creature);
}
@@ -382,13 +380,13 @@ class spell_oculus_call_ruby_emerald_amber_drake : public SpellScriptLoader
dest.RelocateOffset(offset);
}
- void Register() OVERRIDE
+ void Register() override
{
OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_oculus_call_ruby_emerald_amber_drake_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER_FRONT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_oculus_call_ruby_emerald_amber_drake_SpellScript();
}
@@ -414,13 +412,13 @@ class spell_oculus_ride_ruby_emerald_amber_drake_que : public SpellScriptLoader
GetTarget()->CastSpell(caster, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_oculus_ride_ruby_emerald_amber_drake_que_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_oculus_ride_ruby_emerald_amber_drake_que_AuraScript();
}
@@ -436,7 +434,7 @@ class spell_oculus_evasive_maneuvers : public SpellScriptLoader
{
PrepareAuraScript(spell_oculus_evasive_maneuvers_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_RUBY_EVASIVE_CHARGES))
return false;
@@ -451,13 +449,13 @@ class spell_oculus_evasive_maneuvers : public SpellScriptLoader
Remove();
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_oculus_evasive_maneuvers_AuraScript::HandleProc, EFFECT_2, SPELL_AURA_PROC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_oculus_evasive_maneuvers_AuraScript();
}
@@ -473,7 +471,7 @@ class spell_oculus_shock_lance : public SpellScriptLoader
{
PrepareSpellScript(spell_oculus_shock_lance_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_AMBER_SHOCK_CHARGE))
return false;
@@ -493,13 +491,13 @@ class spell_oculus_shock_lance : public SpellScriptLoader
SetHitDamage(damage);
}
- void Register() OVERRIDE
+ void Register() override
{
OnHit += SpellHitFn(spell_oculus_shock_lance_SpellScript::CalcDamage);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_oculus_shock_lance_SpellScript();
}
@@ -515,7 +513,7 @@ class spell_oculus_stop_time : public SpellScriptLoader
{
PrepareAuraScript(spell_oculus_stop_time_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_AMBER_SHOCK_CHARGE))
return false;
@@ -533,13 +531,13 @@ class spell_oculus_stop_time : public SpellScriptLoader
caster->CastSpell(target, SPELL_AMBER_SHOCK_CHARGE, true);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_oculus_stop_time_AuraScript::Apply, EFFECT_0, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_oculus_stop_time_AuraScript();
}
@@ -555,7 +553,7 @@ class spell_oculus_temporal_rift : public SpellScriptLoader
{
PrepareAuraScript(spell_oculus_temporal_rift_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_AMBER_SHOCK_CHARGE))
return false;
@@ -577,13 +575,13 @@ class spell_oculus_temporal_rift : public SpellScriptLoader
const_cast<AuraEffect*>(aurEff)->SetAmount(amount);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_oculus_temporal_rift_AuraScript::HandleProc, EFFECT_2, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_oculus_temporal_rift_AuraScript();
}
@@ -604,13 +602,13 @@ class spell_oculus_touch_the_nightmare : public SpellScriptLoader
SetHitDamage(int32(GetCaster()->CountPctFromMaxHealth(30)));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_oculus_touch_the_nightmare_SpellScript::HandleDamageCalc, EFFECT_2, SPELL_EFFECT_SCHOOL_DAMAGE);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_oculus_touch_the_nightmare_SpellScript();
}
@@ -634,14 +632,14 @@ class spell_oculus_dream_funnel : public SpellScriptLoader
canBeRecalculated = false;
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_oculus_dream_funnel_AuraScript::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_oculus_dream_funnel_AuraScript::HandleEffectCalcAmount, EFFECT_2, SPELL_AURA_PERIODIC_DAMAGE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_oculus_dream_funnel_AuraScript();
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
index dbdcfc88951..40fa5a5c934 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
@@ -97,7 +97,7 @@ class boss_bjarngrim : public CreatureScript
public:
boss_bjarngrim() : CreatureScript("boss_bjarngrim") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_bjarngrimAI>(creature);
}
@@ -137,7 +137,7 @@ public:
uint64 m_auiStormforgedLieutenantGUID[2];
- void Reset() OVERRIDE
+ void Reset() override
{
if (canBuff)
if (!me->HasAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE))
@@ -164,11 +164,9 @@ public:
for (uint8 i = 0; i < 2; ++i)
{
- if (Creature* pStormforgedLieutenant = (Unit::GetCreature((*me), m_auiStormforgedLieutenantGUID[i])))
- {
+ if (Creature* pStormforgedLieutenant = ObjectAccessor::GetCreature(*me, m_auiStormforgedLieutenantGUID[i]))
if (!pStormforgedLieutenant->IsAlive())
pStormforgedLieutenant->Respawn();
- }
}
if (m_uiStance != STANCE_DEFENSIVE)
@@ -183,7 +181,7 @@ public:
instance->SetBossState(DATA_BJARNGRIM, NOT_STARTED);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
if (me->HasAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE))
canBuff = true;
@@ -193,7 +191,7 @@ public:
ScriptedAI::EnterEvadeMode();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
@@ -203,12 +201,12 @@ public:
instance->SetBossState(DATA_BJARNGRIM, IN_PROGRESS);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -232,7 +230,7 @@ public:
}
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -247,7 +245,7 @@ public:
DoRemoveStanceAura(m_uiStance);
- int uiTempStance = rand()%(3-1);
+ int uiTempStance = rand32() % (3 - 1);
if (uiTempStance >= m_uiStance)
++uiTempStance;
@@ -386,7 +384,7 @@ class npc_stormforged_lieutenant : public CreatureScript
public:
npc_stormforged_lieutenant() : CreatureScript("npc_stormforged_lieutenant") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_stormforged_lieutenantAI>(creature);
}
@@ -403,22 +401,22 @@ public:
uint32 m_uiArcWeld_Timer;
uint32 m_uiRenewSteel_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
m_uiArcWeld_Timer = urand(20000, 21000);
m_uiRenewSteel_Timer = urand(10000, 11000);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
- if (Creature* pBjarngrim = instance->instance->GetCreature(instance->GetData64(DATA_BJARNGRIM)))
+ if (Creature* pBjarngrim = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BJARNGRIM)))
{
if (pBjarngrim->IsAlive() && !pBjarngrim->GetVictim())
pBjarngrim->AI()->AttackStart(who);
}
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -434,7 +432,7 @@ public:
if (m_uiRenewSteel_Timer <= uiDiff)
{
- if (Creature* pBjarngrim = instance->instance->GetCreature(instance->GetData64(DATA_BJARNGRIM)))
+ if (Creature* pBjarngrim = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BJARNGRIM)))
{
if (pBjarngrim->IsAlive())
DoCast(pBjarngrim, SPELL_RENEW_STEEL_N);
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
index 1788ecacd35..83082b18d73 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
@@ -70,7 +70,7 @@ class boss_ionar : public CreatureScript
public:
boss_ionar() : CreatureScript("boss_ionar") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_ionarAI>(creature);
}
@@ -96,7 +96,7 @@ public:
uint32 uiDisperseHealth;
- void Reset() OVERRIDE
+ void Reset() override
{
lSparkList.DespawnAll();
@@ -118,14 +118,14 @@ public:
instance->SetBossState(DATA_IONAR, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetBossState(DATA_IONAR, IN_PROGRESS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -134,13 +134,13 @@ public:
instance->SetBossState(DATA_IONAR, DONE);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
if (spell->Id == SPELL_DISPERSE)
{
@@ -163,12 +163,11 @@ public:
if (lSparkList.empty())
return;
- Position pos;
- me->GetPosition(&pos);
+ Position pos = me->GetPosition();
- for (std::list<uint64>::const_iterator itr = lSparkList.begin(); itr != lSparkList.end(); ++itr)
+ for (uint64 guid : lSparkList)
{
- if (Creature* pSpark = ObjectAccessor::GetCreature(*me, *itr))
+ if (Creature* pSpark = ObjectAccessor::GetCreature(*me, guid))
{
if (pSpark->IsAlive())
{
@@ -182,13 +181,13 @@ public:
}
}
- void DamageTaken(Unit* /*pDoneBy*/, uint32 &uiDamage) OVERRIDE
+ void DamageTaken(Unit* /*pDoneBy*/, uint32 &uiDamage) override
{
if (!me->IsVisible())
uiDamage = 0;
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned->GetEntry() == NPC_SPARK_OF_IONAR)
{
@@ -205,13 +204,13 @@ public:
}
}
- void SummonedCreatureDespawn(Creature* summoned) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summoned) override
{
if (summoned->GetEntry() == NPC_SPARK_OF_IONAR)
lSparkList.Despawn(summoned);
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -308,13 +307,13 @@ public:
uint32 uiCheckTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiCheckTimer = 2*IN_MILLISECONDS;
me->SetReactState(REACT_PASSIVE);
}
- void MovementInform(uint32 uiType, uint32 uiPointId) OVERRIDE
+ void MovementInform(uint32 uiType, uint32 uiPointId) override
{
if (uiType != POINT_MOTION_TYPE || !instance)
return;
@@ -323,12 +322,12 @@ public:
me->DespawnOrUnsummon();
}
- void DamageTaken(Unit* /*pDoneBy*/, uint32 &uiDamage) OVERRIDE
+ void DamageTaken(Unit* /*pDoneBy*/, uint32 &uiDamage) override
{
uiDamage = 0;
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
// Despawn if the encounter is not running
if (instance->GetBossState(DATA_IONAR) != IN_PROGRESS)
@@ -345,8 +344,7 @@ public:
{
if (me->GetDistance(ionar) > DATA_MAX_SPARK_DISTANCE)
{
- Position pos;
- ionar->GetPosition(&pos);
+ Position pos = ionar->GetPosition();
me->SetSpeed(MOVE_RUN, 2.0f);
me->GetMotionMaster()->Clear();
@@ -364,7 +362,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_spark_of_ionarAI>(creature);
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
index fee7d201a31..576fc4492f1 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
@@ -67,7 +67,7 @@ class boss_loken : public CreatureScript
public:
boss_loken() : CreatureScript("boss_loken") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_lokenAI>(creature);
}
@@ -87,7 +87,7 @@ public:
uint32 m_uiHealthAmountModifier;
- void Reset() OVERRIDE
+ void Reset() override
{
m_uiArcLightning_Timer = 15000;
m_uiLightningNova_Timer = 20000;
@@ -99,7 +99,7 @@ public:
instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMELY_DEATH_START_EVENT);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
@@ -107,7 +107,7 @@ public:
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMELY_DEATH_START_EVENT);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -115,13 +115,13 @@ public:
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_PULSING_SHOCKWAVE_AURA);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -202,13 +202,13 @@ class spell_loken_pulsing_shockwave : public SpellScriptLoader
SetHitDamage(int32(GetHitDamage() * distance));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_loken_pulsing_shockwave_SpellScript::CalculateDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_loken_pulsing_shockwave_SpellScript();
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
index c312d001ee7..b424ce01b06 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
@@ -73,7 +73,7 @@ class boss_volkhan : public CreatureScript
public:
boss_volkhan() : CreatureScript("boss_volkhan") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_volkhanAI>(creature);
}
@@ -102,7 +102,7 @@ public:
uint32 m_uiHealthAmountModifier;
- void Reset() OVERRIDE
+ void Reset() override
{
m_bIsStriking = false;
m_bHasTemper = false;
@@ -123,14 +123,14 @@ public:
instance->SetBossState(DATA_VOLKHAN, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetBossState(DATA_VOLKHAN, IN_PROGRESS);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (me->Attack(who, true))
{
@@ -143,7 +143,7 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
DespawnGolem();
@@ -151,7 +151,7 @@ public:
instance->SetBossState(DATA_VOLKHAN, DONE);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
@@ -162,13 +162,11 @@ public:
if (m_lGolemGUIDList.empty())
return;
- for (std::list<uint64>::const_iterator itr = m_lGolemGUIDList.begin(); itr != m_lGolemGUIDList.end(); ++itr)
+ for (uint64 guid : m_lGolemGUIDList)
{
- if (Creature* temp = Unit::GetCreature(*me, *itr))
- {
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, guid))
if (temp->IsAlive())
temp->DespawnOrUnsummon();
- }
}
m_lGolemGUIDList.clear();
@@ -179,9 +177,9 @@ public:
if (m_lGolemGUIDList.empty())
return;
- for (std::list<uint64>::const_iterator itr = m_lGolemGUIDList.begin(); itr != m_lGolemGUIDList.end(); ++itr)
+ for (uint64 guid : m_lGolemGUIDList)
{
- if (Creature* temp = Unit::GetCreature(*me, *itr))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, guid))
{
// Only shatter brittle golems
if (temp->IsAlive() && temp->GetEntry() == NPC_BRITTLE_GOLEM)
@@ -193,7 +191,7 @@ public:
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned->GetEntry() == NPC_MOLTEN_GOLEM)
{
@@ -207,7 +205,7 @@ public:
}
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
if (m_uiSummonPhase == 2)
{
@@ -216,7 +214,7 @@ public:
}
}
- uint32 GetData(uint32 data) const OVERRIDE
+ uint32 GetData(uint32 data) const override
{
if (data == DATA_SHATTER_RESISTANT)
return GolemsShattered;
@@ -224,7 +222,7 @@ public:
return 0;
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!UpdateVictim())
return;
@@ -305,7 +303,7 @@ public:
case 2:
// 2 - Check if reached Anvil
- // This is handled in: void JustReachedHome() OVERRIDE
+ // This is handled in: void JustReachedHome() override
break;
case 3:
@@ -361,7 +359,7 @@ class npc_molten_golem : public CreatureScript
public:
npc_molten_golem() : CreatureScript("npc_molten_golem") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_molten_golemAI(creature);
}
@@ -376,7 +374,7 @@ public:
uint32 m_uiDeathDelay_Timer;
uint32 m_uiImmolation_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
m_bIsFrozen = false;
@@ -385,7 +383,7 @@ public:
m_uiImmolation_Timer = 5000;
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (me->Attack(who, true))
{
@@ -398,7 +396,7 @@ public:
}
}
- void DamageTaken(Unit* /*pDoneBy*/, uint32 &uiDamage) OVERRIDE
+ void DamageTaken(Unit* /*pDoneBy*/, uint32 &uiDamage) override
{
if (uiDamage > me->GetHealth())
{
@@ -417,7 +415,7 @@ public:
}
}
- void SpellHit(Unit* /*pCaster*/, const SpellInfo* pSpell) OVERRIDE
+ void SpellHit(Unit* /*pCaster*/, const SpellInfo* pSpell) override
{
// This is the dummy effect of the spells
if (pSpell->Id == SPELL_SHATTER_N || pSpell->Id == SPELL_SHATTER_H)
@@ -425,7 +423,7 @@ public:
me->DespawnOrUnsummon();
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
// Return since we have no target or if we are frozen
if (!UpdateVictim() || m_bIsFrozen)
@@ -457,7 +455,7 @@ class achievement_shatter_resistant : public AchievementCriteriaScript
public:
achievement_shatter_resistant() : AchievementCriteriaScript("achievement_shatter_resistant") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
return target && target->GetAI()->GetData(DATA_SHATTER_RESISTANT) < 5;
}
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 a6d55c363f5..2f5273f0296 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
@@ -47,7 +47,7 @@ class instance_halls_of_lightning : public InstanceMapScript
LokenGlobeGUID = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -68,7 +68,7 @@ class instance_halls_of_lightning : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -85,7 +85,7 @@ class instance_halls_of_lightning : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -99,7 +99,7 @@ class instance_halls_of_lightning : public InstanceMapScript
}
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -118,7 +118,7 @@ class instance_halls_of_lightning : public InstanceMapScript
return true;
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -136,7 +136,7 @@ class instance_halls_of_lightning : public InstanceMapScript
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -147,7 +147,7 @@ class instance_halls_of_lightning : public InstanceMapScript
return saveStream.str();
}
- void Load(const char* str) OVERRIDE
+ void Load(const char* str) override
{
if (!str)
{
@@ -188,7 +188,7 @@ class instance_halls_of_lightning : public InstanceMapScript
uint64 LokenGlobeGUID;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_halls_of_lightning_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
index 3a38f2b61e5..07cdfa3353c 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
@@ -15,14 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* Script Data Start
-SDName: Boss krystallus
-SDAuthor: LordVanMartin
-SD%Complete:
-SDComment:
-SDCategory:
-Script Data End */
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "SpellScript.h"
@@ -30,17 +22,13 @@ Script Data End */
enum Spells
{
- SPELL_BOULDER_TOSS = 50843,
- H_SPELL_BOULDER_TOSS = 59742,
- SPELL_GROUND_SPIKE = 59750,
- SPELL_GROUND_SLAM = 50827,
- SPELL_SHATTER = 50810,
- H_SPELL_SHATTER = 61546,
- SPELL_SHATTER_EFFECT = 50811,
- H_SPELL_SHATTER_EFFECT = 61547,
- SPELL_STONED = 50812,
- SPELL_STOMP = 48131,
- H_SPELL_STOMP = 59744
+ SPELL_BOULDER_TOSS = 50843,
+ SPELL_GROUND_SPIKE = 59750,
+ SPELL_GROUND_SLAM = 50827,
+ SPELL_SHATTER = 50810,
+ SPELL_SHATTER_EFFECT = 50811,
+ SPELL_STONED = 50812,
+ SPELL_STOMP = 48131
};
enum Yells
@@ -51,133 +39,103 @@ enum Yells
SAY_SHATTER = 3
};
-class boss_krystallus : public CreatureScript
+enum Events
{
-public:
- boss_krystallus() : CreatureScript("boss_krystallus") { }
-
- struct boss_krystallusAI : public ScriptedAI
- {
- boss_krystallusAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = creature->GetInstanceScript();
- }
-
- uint32 uiBoulderTossTimer;
- uint32 uiGroundSpikeTimer;
- uint32 uiGroundSlamTimer;
- uint32 uiShatterTimer;
- uint32 uiStompTimer;
-
- bool bIsSlam;
-
- InstanceScript* instance;
-
- void Reset() OVERRIDE
- {
- bIsSlam = false;
-
- uiBoulderTossTimer = urand(3000, 9000);
- uiGroundSpikeTimer = urand(9000, 14000);
- uiGroundSlamTimer = urand(15000, 18000);
- uiStompTimer = urand(20000, 29000);
- uiShatterTimer = 0;
-
- instance->SetBossState(DATA_KRYSTALLUS, NOT_STARTED);
- }
- void EnterCombat(Unit* /*who*/) OVERRIDE
- {
- Talk(SAY_AGGRO);
+ EVENT_BOULDER_TOSS = 1,
+ EVENT_GROUND_SPIKE,
+ EVENT_GROUND_SLAM,
+ EVENT_STOMP,
+ EVENT_SHATTER
+};
- instance->SetBossState(DATA_KRYSTALLUS, IN_PROGRESS);
- }
+class boss_krystallus : public CreatureScript
+{
+ public:
+ boss_krystallus() : CreatureScript("boss_krystallus") { }
- void UpdateAI(uint32 diff) OVERRIDE
+ struct boss_krystallusAI : public BossAI
{
- //Return since we have no target
- if (!UpdateVictim())
- return;
+ boss_krystallusAI(Creature* creature) : BossAI(creature, DATA_KRYSTALLUS) { }
- if (uiBoulderTossTimer <= diff)
+ void Reset() override
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- DoCast(target, SPELL_BOULDER_TOSS);
- uiBoulderTossTimer = urand(9000, 15000);
- } else uiBoulderTossTimer -= diff;
-
- if (uiGroundSpikeTimer <= diff)
- {
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- DoCast(target, SPELL_GROUND_SPIKE);
- uiGroundSpikeTimer = urand(12000, 17000);
- } else uiGroundSpikeTimer -= diff;
-
- if (uiStompTimer <= diff)
- {
- DoCast(me, SPELL_STOMP);
- uiStompTimer = urand(20000, 29000);
- } else uiStompTimer -= diff;
-
- if (uiGroundSlamTimer <= diff)
- {
- DoCast(me, SPELL_GROUND_SLAM);
- bIsSlam = true;
- uiShatterTimer = 10000;
- uiGroundSlamTimer = urand(15000, 18000);
- } else uiGroundSlamTimer -= diff;
+ _Reset();
+ }
- if (bIsSlam)
+ void EnterCombat(Unit* /*who*/) override
{
- if (uiShatterTimer <= diff)
- {
- DoCast(me, DUNGEON_MODE(SPELL_SHATTER, H_SPELL_SHATTER));
- } else uiShatterTimer -= diff;
+ Talk(SAY_AGGRO);
+ _EnterCombat();
+
+ events.ScheduleEvent(EVENT_BOULDER_TOSS, urand(3000, 9000));
+ events.ScheduleEvent(EVENT_GROUND_SLAM, urand(15000, 18000));
+ events.ScheduleEvent(EVENT_STOMP, urand(20000, 29000));
+ if (IsHeroic())
+ events.ScheduleEvent(EVENT_GROUND_SPIKE, urand(9000, 14000));
}
- DoMeleeAttackIfReady();
- }
-
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- Talk(SAY_DEATH);
-
- instance->SetBossState(DATA_KRYSTALLUS, DONE);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ // Return since we have no target
+ if (!UpdateVictim())
+ return;
- void KilledUnit(Unit* victim) OVERRIDE
- {
- if (victim->GetTypeId() != TYPEID_PLAYER)
- return;
+ events.Update(diff);
- Talk(SAY_KILL);
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- void SpellHitTarget(Unit* /*target*/, const SpellInfo* pSpell) OVERRIDE
- {
- //this part should be in the core
- if (pSpell->Id == SPELL_SHATTER || pSpell->Id == H_SPELL_SHATTER)
- {
- /// @todo we need eventmap to kill this stuff
- //clear this, if we are still performing
- if (bIsSlam)
+ while (uint32 eventId = events.ExecuteEvent())
{
- bIsSlam = false;
-
- //and correct movement, if not already
- if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() != CHASE_MOTION_TYPE)
+ switch (eventId)
{
- if (me->GetVictim())
- me->GetMotionMaster()->MoveChase(me->GetVictim());
+ case EVENT_BOULDER_TOSS:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50.0f, true))
+ DoCast(target, SPELL_BOULDER_TOSS);
+ events.ScheduleEvent(EVENT_BOULDER_TOSS, urand(9000, 15000));
+ break;
+ case EVENT_GROUND_SPIKE:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
+ DoCast(target, SPELL_GROUND_SPIKE);
+ events.ScheduleEvent(EVENT_GROUND_SPIKE, urand(12000, 17000));
+ break;
+ case EVENT_GROUND_SLAM:
+ DoCast(me, SPELL_GROUND_SLAM);
+ events.ScheduleEvent(EVENT_SHATTER, 10000);
+ events.ScheduleEvent(EVENT_GROUND_SLAM, urand(15000, 18000));
+ break;
+ case EVENT_STOMP:
+ DoCast(me, SPELL_STOMP);
+ events.ScheduleEvent(EVENT_STOMP, urand(20000, 29000));
+ break;
+ case EVENT_SHATTER:
+ DoCast(me, SPELL_SHATTER);
+ break;
+ default:
+ break;
}
}
+
+ DoMeleeAttackIfReady();
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ Talk(SAY_DEATH);
+ _JustDied();
}
- }
- };
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetHallsOfStoneAI<boss_krystallusAI>(creature);
- }
+ void KilledUnit(Unit* victim) override
+ {
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_KILL);
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfStoneAI<boss_krystallusAI>(creature);
+ }
};
class spell_krystallus_shatter : public SpellScriptLoader
@@ -198,13 +156,13 @@ class spell_krystallus_shatter : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_krystallus_shatter_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_krystallus_shatter_SpellScript();
}
@@ -233,13 +191,13 @@ class spell_krystallus_shatter_effect : public SpellScriptLoader
SetHitDamage(int32(GetHitDamage() * ((radius - distance) / radius)));
}
- void Register() OVERRIDE
+ void Register() override
{
OnHit += SpellHitFn(spell_krystallus_shatter_effect_SpellScript::CalculateDamage);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_krystallus_shatter_effect_SpellScript();
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp
index 927f4490770..796299cc952 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp
@@ -37,7 +37,7 @@ enum Spells
enum Events
{
- EVENT_PARTING_SORROW = 1,
+ EVENT_PARTING_SORROW = 1,
EVENT_STORM_OF_GRIEF,
EVENT_SHOCK_OF_SORROW,
EVENT_PILLAR_OF_WOE
@@ -57,7 +57,7 @@ class boss_maiden_of_grief : public CreatureScript
{
boss_maiden_of_griefAI(Creature* creature) : BossAI(creature, DATA_MAIDEN_OF_GRIEF) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
@@ -70,7 +70,7 @@ class boss_maiden_of_grief : public CreatureScript
instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_GOOD_GRIEF_START_EVENT);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -78,19 +78,19 @@ class boss_maiden_of_grief : public CreatureScript
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_GOOD_GRIEF_START_EVENT);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -135,7 +135,7 @@ class boss_maiden_of_grief : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetHallsOfStoneAI<boss_maiden_of_griefAI>(creature);
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
index b2785fbaba5..0337a603e3b 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
@@ -78,13 +78,13 @@ class boss_sjonnir : public CreatureScript
{
boss_sjonnirAI(Creature* creature) : BossAI(creature, DATA_SJONNIR) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
abuseTheOoze = 0;
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (!instance->CheckRequiredBosses(DATA_SJONNIR, who->ToPlayer()))
{
@@ -103,7 +103,7 @@ class boss_sjonnir : public CreatureScript
events.ScheduleEvent(EVENT_FRENZY, 300000);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summon->GetMotionMaster()->MovePoint(0, CenterPoint);
/*if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
@@ -111,25 +111,25 @@ class boss_sjonnir : public CreatureScript
summons.Summon(summon);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action == ACTION_OOZE_DEAD)
++abuseTheOoze;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_ABUSE_THE_OOZE)
return abuseTheOoze;
@@ -137,7 +137,7 @@ class boss_sjonnir : public CreatureScript
return 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -198,7 +198,7 @@ class boss_sjonnir : public CreatureScript
uint8 abuseTheOoze;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetHallsOfStoneAI<boss_sjonnirAI>(creature);
}
@@ -213,12 +213,12 @@ class npc_malformed_ooze : public CreatureScript
{
npc_malformed_oozeAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_mergeTimer = 10000;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_mergeTimer <= diff)
{
@@ -243,7 +243,7 @@ class npc_malformed_ooze : public CreatureScript
uint32 _mergeTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetHallsOfStoneAI<npc_malformed_oozeAI>(creature);
}
@@ -263,14 +263,14 @@ class npc_iron_sludge : public CreatureScript
InstanceScript* instance;
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* sjonnir = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SJONNIR)))
sjonnir->AI()->DoAction(ACTION_OOZE_DEAD);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetHallsOfStoneAI<npc_iron_sludgeAI>(creature);
}
@@ -283,7 +283,7 @@ class achievement_abuse_the_ooze : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
index d64b0d5c71d..683eb97a4f7 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
@@ -157,7 +157,7 @@ public:
std::list<uint64> KaddrakGUIDList;
- void Reset() OVERRIDE
+ void Reset() override
{
uiKaddrakEncounterTimer = 1500;
uiMarnakEncounterTimer = 10000;
@@ -201,7 +201,7 @@ public:
}*/
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (bKaddrakActivated)
{
@@ -211,7 +211,7 @@ public:
if (!KaddrakGUIDList.empty())
for (std::list<uint64>::const_iterator itr = KaddrakGUIDList.begin(); itr != KaddrakGUIDList.end(); ++itr)
{
- if (Creature* pKaddrak = Unit::GetCreature(*me, *itr))
+ if (Creature* pKaddrak = ObjectAccessor::GetCreature(*me, *itr))
{
if (pKaddrak->IsAlive())
pKaddrak->CastSpell(target, DUNGEON_MODE(SPELL_GLARE_OF_THE_TRIBUNAL, H_SPELL_GLARE_OF_THE_TRIBUNAL), true);
@@ -255,7 +255,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetHallsOfStoneAI<npc_tribuna_controllerAI>(creature);
}
@@ -266,19 +266,19 @@ class npc_brann_hos : public CreatureScript
public:
npc_brann_hos() : CreatureScript("npc_brann_hos") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1 || action == GOSSIP_ACTION_INFO_DEF+2)
{
player->CLOSE_GOSSIP_MENU();
- CAST_AI(npc_brann_hos::npc_brann_hosAI, creature->AI())->StartWP();
+ ENSURE_AI(npc_brann_hos::npc_brann_hosAI, creature->AI())->StartWP();
}
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -308,7 +308,7 @@ public:
bool bIsLowHP;
bool brannSparklinNews;
- void Reset() OVERRIDE
+ void Reset() override
{
if (!HasEscortState(STATE_ESCORT_ESCORTING))
{
@@ -331,14 +331,14 @@ public:
return;
for (std::list<uint64>::const_iterator itr = lDwarfGUIDList.begin(); itr != lDwarfGUIDList.end(); ++itr)
{
- Creature* temp = Unit::GetCreature(*me, instance ? (*itr) : 0);
+ Creature* temp = ObjectAccessor::GetCreature(*me, instance ? (*itr) : 0);
if (temp && temp->IsAlive())
temp->DespawnOrUnsummon();
}
lDwarfGUIDList.clear();
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -347,7 +347,7 @@ public:
{
if (!creature->IsAlive())
creature->Respawn();
- CAST_AI(npc_tribuna_controller::npc_tribuna_controllerAI, creature->AI())->UpdateFacesList();
+ ENSURE_AI(npc_tribuna_controller::npc_tribuna_controllerAI, creature->AI())->UpdateFacesList();
uiControllerGUID = creature->GetGUID();
}
break;
@@ -391,7 +391,7 @@ public:
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
lDwarfGUIDList.push_back(summoned->GetGUID());
summoned->AddThreat(me, 0.0f);
@@ -412,13 +412,13 @@ public:
Start();
}
- void DamageTaken(Unit* /*done_by*/, uint32 & /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 & /*damage*/) override
{
if (brannSparklinNews)
brannSparklinNews = false;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_BRANN_SPARKLIN_NEWS)
return brannSparklinNews ? 1 : 0;
@@ -426,7 +426,7 @@ public:
return 0;
}
- void UpdateEscortAI(const uint32 uiDiff) OVERRIDE
+ void UpdateEscortAI(const uint32 uiDiff) override
{
if (uiPhaseTimer <= uiDiff)
{
@@ -446,7 +446,7 @@ public:
JumpToNextStep(0);
break;
case 5:
- if (Creature* temp = (Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))))
+ if (Creature* temp = (ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))))
temp->AI()->Talk(SAY_EVENT_INTRO_3_ABED);
JumpToNextStep(8500);
break;
@@ -455,15 +455,15 @@ public:
JumpToNextStep(6500);
break;
case 7:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
temp->AI()->Talk(SAY_EVENT_A_2_KADD);
JumpToNextStep(12500);
break;
case 8:
Talk(SAY_EVENT_A_3);
instance->HandleGameObject(instance->GetData64(DATA_GO_KADDRAK), true);
- if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID))
- CAST_AI(npc_tribuna_controller::npc_tribuna_controllerAI, temp->AI())->bKaddrakActivated = true;
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiControllerGUID))
+ ENSURE_AI(npc_tribuna_controller::npc_tribuna_controllerAI, temp->AI())->bKaddrakActivated = true;
JumpToNextStep(5000);
break;
case 9:
@@ -476,7 +476,7 @@ public:
JumpToNextStep(6000);
break;
case 11:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
temp->AI()->Talk(SAY_EVENT_B_2_MARN);
SpawnDwarf(1);
JumpToNextStep(20000);
@@ -484,8 +484,8 @@ public:
case 12:
Talk(SAY_EVENT_B_3);
instance->HandleGameObject(instance->GetData64(DATA_GO_MARNAK), true);
- if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID))
- CAST_AI(npc_tribuna_controller::npc_tribuna_controllerAI, temp->AI())->bMarnakActivated = true;
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiControllerGUID))
+ ENSURE_AI(npc_tribuna_controller::npc_tribuna_controllerAI, temp->AI())->bMarnakActivated = true;
JumpToNextStep(10000);
break;
case 13:
@@ -506,7 +506,7 @@ public:
JumpToNextStep(20000);
break;
case 17:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
temp->AI()->Talk(SAY_EVENT_C_2_ABED);
SpawnDwarf(1);
JumpToNextStep(20000);
@@ -514,8 +514,8 @@ public:
case 18:
Talk(SAY_EVENT_C_3);
instance->HandleGameObject(instance->GetData64(DATA_GO_ABEDNEUM), true);
- if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID))
- CAST_AI(npc_tribuna_controller::npc_tribuna_controllerAI, temp->AI())->bAbedneumActivated = true;
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiControllerGUID))
+ ENSURE_AI(npc_tribuna_controller::npc_tribuna_controllerAI, temp->AI())->bAbedneumActivated = true;
JumpToNextStep(5000);
break;
case 19:
@@ -532,7 +532,7 @@ public:
JumpToNextStep(20000);
break;
case 22:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
temp->AI()->Talk(SAY_EVENT_D_2_ABED);
SpawnDwarf(1);
JumpToNextStep(5000);
@@ -555,7 +555,7 @@ public:
JumpToNextStep(10000);
break;
case 27:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
temp->AI()->Talk(SAY_EVENT_D_4_ABED);
SpawnDwarf(1);
JumpToNextStep(10000);
@@ -565,7 +565,7 @@ public:
Talk(SAY_EVENT_END_01);
me->SetStandState(UNIT_STAND_STATE_STAND);
instance->HandleGameObject(instance->GetData64(DATA_GO_SKY_FLOOR), true);
- if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, uiControllerGUID))
temp->DealDamage(temp, temp->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
bIsBattle = true;
SetEscortPaused(false);
@@ -578,7 +578,7 @@ public:
JumpToNextStep(5500);
break;
case 30:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
temp->AI()->Talk(SAY_EVENT_END_03_ABED);
JumpToNextStep(8500);
break;
@@ -587,7 +587,7 @@ public:
JumpToNextStep(11500);
break;
case 32:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
temp->AI()->Talk(SAY_EVENT_END_05_ABED);
JumpToNextStep(11500);
break;
@@ -596,7 +596,7 @@ public:
JumpToNextStep(4500);
break;
case 34:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
temp->AI()->Talk(SAY_EVENT_END_07_ABED);
JumpToNextStep(22500);
break;
@@ -605,7 +605,7 @@ public:
JumpToNextStep(7500);
break;
case 36:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
temp->AI()->Talk(SAY_EVENT_END_09_KADD);
JumpToNextStep(18500);
break;
@@ -614,7 +614,7 @@ public:
JumpToNextStep(5500);
break;
case 38:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
temp->AI()->Talk(SAY_EVENT_END_11_KADD);
JumpToNextStep(20500);
break;
@@ -623,7 +623,7 @@ public:
JumpToNextStep(2500);
break;
case 40:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
temp->AI()->Talk(SAY_EVENT_END_13_KADD);
JumpToNextStep(19500);
break;
@@ -632,7 +632,7 @@ public:
JumpToNextStep(10500);
break;
case 42:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
temp->AI()->Talk(SAY_EVENT_END_15_MARN);
JumpToNextStep(6500);
break;
@@ -641,7 +641,7 @@ public:
JumpToNextStep(6500);
break;
case 44:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
temp->AI()->Talk(SAY_EVENT_END_17_MARN);
JumpToNextStep(25500);
break;
@@ -650,7 +650,7 @@ public:
JumpToNextStep(23500);
break;
case 46:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
temp->AI()->Talk(SAY_EVENT_END_19_MARN);
JumpToNextStep(3500);
break;
@@ -659,7 +659,7 @@ public:
JumpToNextStep(8500);
break;
case 48:
- if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
temp->AI()->Talk(SAY_EVENT_END_21_ABED);
JumpToNextStep(5500);
break;
@@ -697,7 +697,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetHallsOfStoneAI<npc_brann_hosAI>(creature);
}
@@ -710,7 +710,7 @@ class achievement_brann_spankin_new : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp
index 9f0bb3c87c1..0c9492c87c0 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp
@@ -56,7 +56,7 @@ class instance_halls_of_stone : public InstanceMapScript
MarnakGoGUID = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -86,7 +86,7 @@ class instance_halls_of_stone : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -119,7 +119,7 @@ class instance_halls_of_stone : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -131,7 +131,7 @@ class instance_halls_of_stone : public InstanceMapScript
}
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -164,7 +164,7 @@ class instance_halls_of_stone : public InstanceMapScript
return 0;
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -185,7 +185,7 @@ class instance_halls_of_stone : public InstanceMapScript
return true;
}
- bool CheckRequiredBosses(uint32 bossId, Player const* player /*= NULL*/) const OVERRIDE
+ bool CheckRequiredBosses(uint32 bossId, Player const* player /*= NULL*/) const override
{
if (player && player->GetSession()->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_INSTANCE_REQUIRED_BOSSES))
return true;
@@ -203,7 +203,7 @@ class instance_halls_of_stone : public InstanceMapScript
return true;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -214,7 +214,7 @@ class instance_halls_of_stone : public InstanceMapScript
return saveStream.str();
}
- void Load(char const* str) OVERRIDE
+ void Load(char const* str) override
{
if (!str)
{
@@ -264,7 +264,7 @@ class instance_halls_of_stone : public InstanceMapScript
uint64 MarnakGoGUID;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_halls_of_stone_InstanceMapScript(map);
}
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 e2c6a72241e..595dcecd554 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
@@ -305,7 +305,7 @@ class boss_algalon_the_observer : public CreatureScript
_fedOnTears = false;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
me->SetReactState(REACT_PASSIVE);
@@ -314,7 +314,7 @@ class boss_algalon_the_observer : public CreatureScript
_hasYelled = false;
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_UNIT)
{
@@ -328,13 +328,13 @@ class boss_algalon_the_observer : public CreatureScript
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
case ACTION_START_INTRO:
{
- me->SetFlag(UNIT_FIELD_FLAGS_2, 0x20);
+ me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_INSTANTLY_APPEAR_MODEL);
me->SetDisableGravity(true);
DoCast(me, SPELL_ARRIVAL, true);
DoCast(me, SPELL_RIDE_THE_LIGHTNING, true);
@@ -375,12 +375,12 @@ class boss_algalon_the_observer : public CreatureScript
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
return type == DATA_HAS_FED_ON_TEARS ? _fedOnTears : 1;
}
- void EnterCombat(Unit* /*target*/) OVERRIDE
+ void EnterCombat(Unit* /*target*/) override
{
uint32 introDelay = 0;
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC);
@@ -422,7 +422,7 @@ class boss_algalon_the_observer : public CreatureScript
(*itr)->m_Events.KillAllEvents(true);
}
- void MovementInform(uint32 movementType, uint32 pointId) OVERRIDE
+ void MovementInform(uint32 movementType, uint32 pointId) override
{
if (movementType != POINT_MOTION_TYPE)
return;
@@ -444,7 +444,7 @@ class boss_algalon_the_observer : public CreatureScript
}
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summons.Summon(summon);
switch (summon->GetEntry())
@@ -486,7 +486,7 @@ class boss_algalon_the_observer : public CreatureScript
}
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
instance->SetBossState(BOSS_ALGALON, FAIL);
BossAI::EnterEvadeMode();
@@ -494,7 +494,7 @@ class boss_algalon_the_observer : public CreatureScript
me->SetSheath(SHEATH_STATE_UNARMED);
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if (_fightWon)
{
@@ -537,7 +537,7 @@ class boss_algalon_the_observer : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if ((!(events.IsInPhase(PHASE_ROLE_PLAY) || events.IsInPhase(PHASE_BIG_BANG)) && !UpdateVictim()) || !CheckInRoom())
return;
@@ -700,7 +700,7 @@ class boss_algalon_the_observer : public CreatureScript
bool _hasYelled;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_algalon_the_observerAI>(creature);
}
@@ -717,19 +717,19 @@ class npc_living_constellation : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_ARCANE_BARRAGE, 2500);
_isActive = false;
}
- uint32 GetData(uint32 /*type*/) const OVERRIDE
+ uint32 GetData(uint32 /*type*/) const override
{
return _isActive ? 1 : 0;
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -754,7 +754,7 @@ class npc_living_constellation : public CreatureScript
}
}
- void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* caster, SpellInfo const* spell) override
{
if (spell->Id != SPELL_CONSTELLATION_PHASE_EFFECT || caster->GetTypeId() != TYPEID_UNIT)
return;
@@ -766,7 +766,7 @@ class npc_living_constellation : public CreatureScript
caster->ToCreature()->DespawnOrUnsummon(1);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!(_events.IsInPhase(PHASE_ROLE_PLAY) || _events.IsInPhase(PHASE_BIG_BANG)) && !UpdateVictim())
return;
@@ -793,7 +793,7 @@ class npc_living_constellation : public CreatureScript
bool _isActive;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_living_constellationAI>(creature);
}
@@ -811,7 +811,7 @@ class npc_collapsing_star : public CreatureScript
_dying = false;
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() != NPC_BLACK_HOLE)
return;
@@ -823,7 +823,7 @@ class npc_collapsing_star : public CreatureScript
me->DespawnOrUnsummon(1);
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if (_dying)
{
@@ -843,7 +843,7 @@ class npc_collapsing_star : public CreatureScript
bool _dying;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_collapsing_starAI>(creature);
}
@@ -860,7 +860,7 @@ class npc_brann_bronzebeard_algalon : public CreatureScript
{
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -882,7 +882,7 @@ class npc_brann_bronzebeard_algalon : public CreatureScript
}
}
- void MovementInform(uint32 movementType, uint32 pointId) OVERRIDE
+ void MovementInform(uint32 movementType, uint32 pointId) override
{
if (movementType != POINT_MOTION_TYPE)
return;
@@ -911,7 +911,7 @@ class npc_brann_bronzebeard_algalon : public CreatureScript
_events.ScheduleEvent(EVENT_BRANN_MOVE_INTRO, delay);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
UpdateVictim();
@@ -947,7 +947,7 @@ class npc_brann_bronzebeard_algalon : public CreatureScript
uint32 _currentPoint;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_brann_bronzebeard_algalonAI>(creature);
}
@@ -964,7 +964,7 @@ class go_celestial_planetarium_access : public GameObjectScript
{
}
- bool GossipHello(Player* player) OVERRIDE
+ bool GossipHello(Player* player) override
{
bool hasKey = true;
if (LockEntry const* lock = sLockStore.LookupEntry(go->GetGOInfo()->goober.lockId))
@@ -1005,7 +1005,7 @@ class go_celestial_planetarium_access : public GameObjectScript
return false;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_events.Empty())
return;
@@ -1026,7 +1026,7 @@ class go_celestial_planetarium_access : public GameObjectScript
EventMap _events;
};
- GameObjectAI* GetAI(GameObject* go) const OVERRIDE
+ GameObjectAI* GetAI(GameObject* go) const override
{
return GetUlduarAI<go_celestial_planetarium_accessAI>(go);
}
@@ -1057,14 +1057,14 @@ class spell_algalon_phase_punch : public SpellScriptLoader
GetTarget()->RemoveAurasDueToSpell(PhasePunchAlphaId[GetStackAmount() - 1]);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_algalon_phase_punch_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
OnEffectRemove += AuraEffectRemoveFn(spell_algalon_phase_punch_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_algalon_phase_punch_AuraScript();
}
@@ -1100,13 +1100,13 @@ class spell_algalon_arcane_barrage : public SpellScriptLoader
targets.remove_if(NotVictimFilter(GetCaster()));
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_algalon_arcane_barrage_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_algalon_arcane_barrage_SpellScript();
}
@@ -1145,13 +1145,13 @@ class spell_algalon_trigger_3_adds : public SpellScriptLoader
target->AI()->DoAction(ACTION_ACTIVATE_STAR);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_algalon_trigger_3_adds_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_algalon_trigger_3_adds_SpellScript();
}
@@ -1172,13 +1172,13 @@ class spell_algalon_collapse : public SpellScriptLoader
GetTarget()->DealDamage(GetTarget(), GetTarget()->CountPctFromMaxHealth(1), NULL, NODAMAGE);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_algalon_collapse_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_algalon_collapse_AuraScript();
}
@@ -1193,10 +1193,10 @@ class spell_algalon_big_bang : public SpellScriptLoader
{
PrepareSpellScript(spell_algalon_big_bang_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_targetCount = 0;
- return true;
+ return GetCaster()->GetTypeId() == TYPEID_UNIT && GetCaster()->IsAIEnabled;
}
void CountTargets(std::list<WorldObject*>& targets)
@@ -1210,7 +1210,7 @@ class spell_algalon_big_bang : public SpellScriptLoader
GetCaster()->GetAI()->DoAction(ACTION_ASCEND);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_algalon_big_bang_SpellScript::CountTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
AfterCast += SpellCastFn(spell_algalon_big_bang_SpellScript::CheckTargets);
@@ -1219,7 +1219,7 @@ class spell_algalon_big_bang : public SpellScriptLoader
uint32 _targetCount;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_algalon_big_bang_SpellScript();
}
@@ -1240,13 +1240,13 @@ class spell_algalon_remove_phase : public SpellScriptLoader
GetTarget()->RemoveAurasByType(SPELL_AURA_PHASE);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_algalon_remove_phase_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_algalon_remove_phase_AuraScript();
}
@@ -1268,13 +1268,13 @@ class spell_algalon_cosmic_smash : public SpellScriptLoader
dest.RelocateOffset(offset);
}
- void Register() OVERRIDE
+ void Register() override
{
OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_algalon_cosmic_smash_SpellScript::ModDestHeight, EFFECT_0, TARGET_DEST_CASTER_SUMMON);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_algalon_cosmic_smash_SpellScript();
}
@@ -1299,13 +1299,13 @@ class spell_algalon_cosmic_smash_damage : public SpellScriptLoader
SetHitDamage(int32(float(GetHitDamage()) / distance) * 2);
}
- void Register() OVERRIDE
+ void Register() override
{
OnHit += SpellHitFn(spell_algalon_cosmic_smash_damage_SpellScript::RecalculateDamage);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_algalon_cosmic_smash_damage_SpellScript();
}
@@ -1328,13 +1328,13 @@ class spell_algalon_supermassive_fail : public SpellScriptLoader
GetHitPlayer()->ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, ACHIEVEMENT_CRITERIA_CONDITION_NO_SPELL_HIT, GetSpellInfo()->Id, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnHit += SpellHitFn(spell_algalon_supermassive_fail_SpellScript::RecalculateDamage);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_algalon_supermassive_fail_SpellScript();
}
@@ -1345,7 +1345,7 @@ class achievement_he_feeds_on_your_tears : public AchievementCriteriaScript
public:
achievement_he_feeds_on_your_tears() : AchievementCriteriaScript("achievement_he_feeds_on_your_tears") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
return !target->GetAI()->GetData(DATA_HAS_FED_ON_TEARS);
}
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 9b417690f46..9a08f01c279 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
@@ -143,14 +143,14 @@ class boss_steelbreaker : public CreatureScript
uint32 phase;
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
phase = 0;
me->RemoveAllAuras();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_STEELBREAKER_AGGRO);
@@ -160,7 +160,7 @@ class boss_steelbreaker : public CreatureScript
events.ScheduleEvent(EVENT_FUSION_PUNCH, 15000);
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_PHASE_3)
return (phase >= 3) ? 1 : 0;
@@ -168,7 +168,7 @@ class boss_steelbreaker : public CreatureScript
return 0;
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -188,7 +188,7 @@ class boss_steelbreaker : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
@@ -213,7 +213,7 @@ class boss_steelbreaker : public CreatureScript
}
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_STEELBREAKER_SLAY);
@@ -222,7 +222,7 @@ class boss_steelbreaker : public CreatureScript
DoCast(me, SPELL_ELECTRICAL_CHARGE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -263,7 +263,7 @@ class boss_steelbreaker : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_steelbreakerAI>(creature);
}
@@ -280,14 +280,14 @@ class boss_runemaster_molgeim : public CreatureScript
uint32 phase;
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
phase = 0;
me->RemoveAllAuras();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_MOLGEIM_AGGRO);
@@ -297,7 +297,7 @@ class boss_runemaster_molgeim : public CreatureScript
events.ScheduleEvent(EVENT_RUNE_OF_POWER, 20000);
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_PHASE_3)
return (phase >= 3) ? 1 : 0;
@@ -305,7 +305,7 @@ class boss_runemaster_molgeim : public CreatureScript
return 0;
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -325,7 +325,7 @@ class boss_runemaster_molgeim : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
@@ -350,13 +350,13 @@ class boss_runemaster_molgeim : public CreatureScript
}
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_MOLGEIM_SLAY);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -420,7 +420,7 @@ class boss_runemaster_molgeim : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_runemaster_molgeimAI>(creature);
}
@@ -437,7 +437,7 @@ class boss_stormcaller_brundir : public CreatureScript
uint32 phase;
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
phase = 0;
@@ -447,7 +447,7 @@ class boss_stormcaller_brundir : public CreatureScript
me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, false); // Reset immumity, Brundir should be stunnable by default
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_PHASE_3)
return (phase >= 3) ? 1 : 0;
@@ -455,7 +455,7 @@ class boss_stormcaller_brundir : public CreatureScript
return 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_BRUNDIR_AGGRO);
@@ -466,7 +466,7 @@ class boss_stormcaller_brundir : public CreatureScript
events.ScheduleEvent(EVENT_OVERLOAD, urand(60000, 120000));
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -490,7 +490,7 @@ class boss_stormcaller_brundir : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
@@ -519,13 +519,13 @@ class boss_stormcaller_brundir : public CreatureScript
me->GetMotionMaster()->MoveFall();
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_BRUNDIR_SLAY);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -620,7 +620,7 @@ class boss_stormcaller_brundir : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_stormcaller_brundirAI>(creature);
}
@@ -642,13 +642,13 @@ class spell_shield_of_runes : public SpellScriptLoader
caster->CastSpell(caster, SPELL_SHIELD_OF_RUNES_BUFF, false);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_shield_of_runes_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_shield_of_runes_AuraScript();
}
@@ -670,13 +670,13 @@ class spell_assembly_meltdown : public SpellScriptLoader
Steelbreaker->AI()->DoAction(ACTION_ADD_CHARGE);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_assembly_meltdown_SpellScript::HandleInstaKill, EFFECT_1, SPELL_EFFECT_INSTAKILL);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_assembly_meltdown_SpellScript();
}
@@ -691,7 +691,7 @@ class spell_assembly_rune_of_summoning : public SpellScriptLoader
{
PrepareAuraScript(spell_assembly_rune_of_summoning_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_RUNE_OF_SUMMONING_SUMMON))
return false;
@@ -710,14 +710,14 @@ class spell_assembly_rune_of_summoning : public SpellScriptLoader
summ->DespawnOrUnsummon(1);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_assembly_rune_of_summoning_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
OnEffectRemove += AuraEffectRemoveFn(spell_assembly_rune_of_summoning_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_assembly_rune_of_summoning_AuraScript();
}
@@ -728,7 +728,7 @@ class achievement_assembly_i_choose_you : public AchievementCriteriaScript
public:
achievement_assembly_i_choose_you() : AchievementCriteriaScript("achievement_assembly_i_choose_you") { }
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
return target && target->GetAI()->GetData(DATA_PHASE_3);
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp
index 63d498de5eb..f0b8e123c63 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp
@@ -109,7 +109,7 @@ class boss_auriaya : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
DefenderGUID = 0;
@@ -118,7 +118,7 @@ class boss_auriaya : public CreatureScript
nineLives = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -131,13 +131,13 @@ class boss_auriaya : public CreatureScript
events.ScheduleEvent(EVENT_BERSERK, 600000);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summons.Summon(summoned);
@@ -158,7 +158,7 @@ class boss_auriaya : public CreatureScript
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -179,7 +179,7 @@ class boss_auriaya : public CreatureScript
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -192,7 +192,7 @@ class boss_auriaya : public CreatureScript
return 0;
}
- void SetData(uint32 id, uint32 data) OVERRIDE
+ void SetData(uint32 id, uint32 data) override
{
switch (id)
{
@@ -205,13 +205,13 @@ class boss_auriaya : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -279,7 +279,7 @@ class boss_auriaya : public CreatureScript
bool nineLives;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_auriayaAI>(creature);
}
@@ -297,13 +297,13 @@ class npc_auriaya_seeping_trigger : public CreatureScript
instance = me->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->DespawnOrUnsummon(600000);
DoCast(me, SPELL_SEEPING_ESSENCE);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (instance->GetBossState(BOSS_AURIAYA) != IN_PROGRESS)
me->DespawnOrUnsummon();
@@ -313,7 +313,7 @@ class npc_auriaya_seeping_trigger : public CreatureScript
InstanceScript* instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_auriaya_seeping_triggerAI>(creature);
}
@@ -331,18 +331,18 @@ class npc_sanctum_sentry : public CreatureScript
instance = me->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.ScheduleEvent(EVENT_RIP, urand(4000, 8000));
events.ScheduleEvent(EVENT_POUNCE, urand(12000, 15000));
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoCast(me, SPELL_STRENGHT_PACK, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -377,7 +377,7 @@ class npc_sanctum_sentry : public CreatureScript
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* Auriaya = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_AURIAYA)))
Auriaya->AI()->DoAction(ACTION_CRAZY_CAT_LADY);
@@ -388,7 +388,7 @@ class npc_sanctum_sentry : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_sanctum_sentryAI>(creature);
}
@@ -406,13 +406,13 @@ class npc_feral_defender : public CreatureScript
instance = me->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.ScheduleEvent(EVENT_FERAL_POUNCE, 5000);
events.ScheduleEvent(EVENT_RUSH, 10000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -452,7 +452,7 @@ class npc_feral_defender : public CreatureScript
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
DoCast(me, SPELL_SUMMON_ESSENCE);
if (Creature* Auriaya = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_AURIAYA)))
@@ -464,7 +464,7 @@ class npc_feral_defender : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_feral_defenderAI>(creature);
}
@@ -496,13 +496,13 @@ class spell_auriaya_strenght_of_the_pack : public SpellScriptLoader
unitList.remove_if(SanctumSentryCheck());
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_auriaya_strenght_of_the_pack_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_auriaya_strenght_of_the_pack_SpellScript();
}
@@ -522,14 +522,14 @@ class spell_auriaya_sentinel_blast : public SpellScriptLoader
unitList.remove_if(PlayerOrPetCheck());
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_auriaya_sentinel_blast_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_auriaya_sentinel_blast_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_auriaya_sentinel_blast_SpellScript();
}
@@ -543,7 +543,7 @@ class achievement_nine_lives : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
@@ -563,7 +563,7 @@ class achievement_crazy_cat_lady : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
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 aa0c67c30bd..071cf5bf14a 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
@@ -228,7 +228,7 @@ class boss_flame_leviathan : public CreatureScript
{
}
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
ASSERT(vehicle);
if (!me->isDead())
@@ -261,7 +261,7 @@ class boss_flame_leviathan : public CreatureScript
bool Shutout;
bool Unbroken;
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
//resets shutdown counter to 0. 2 or 4 depending on raid mode
@@ -271,7 +271,7 @@ class boss_flame_leviathan : public CreatureScript
me->SetReactState(REACT_DEFENSIVE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
me->SetReactState(REACT_PASSIVE);
@@ -321,7 +321,7 @@ class boss_flame_leviathan : public CreatureScript
Talk(SAY_AGGRO);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
// Set Field Flags 67108928 = 64 | 67108864 = UNIT_FLAG_UNK_6 | UNIT_FLAG_SKINNABLE
@@ -330,7 +330,7 @@ class boss_flame_leviathan : public CreatureScript
Talk(SAY_DEATH);
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_START_THE_ENGINE)
vehicle->InstallAllAccessories(false);
@@ -342,7 +342,7 @@ class boss_flame_leviathan : public CreatureScript
++Shutdown;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -360,13 +360,13 @@ class boss_flame_leviathan : public CreatureScript
return 0;
}
- void SetData(uint32 id, uint32 data) OVERRIDE
+ void SetData(uint32 id, uint32 data) override
{
if (id == DATA_UNBROKEN)
Unbroken = data ? true : false;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || !CheckInRoom())
return;
@@ -465,13 +465,13 @@ class boss_flame_leviathan : public CreatureScript
DoBatteringRamIfReady();
}
- void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, SpellInfo const* spell) override
{
if (spell->Id == SPELL_PURSUED)
_pursueTarget = target->GetGUID();
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action && action <= 4) // Tower destruction, debuff leviathan loot and reduce active tower count
{
@@ -553,7 +553,7 @@ class boss_flame_leviathan : public CreatureScript
uint64 _pursueTarget;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_flame_leviathanAI>(creature);
}
@@ -577,7 +577,7 @@ class boss_flame_leviathan_seat : public CreatureScript
InstanceScript* instance;
Vehicle* vehicle;
- void PassengerBoarded(Unit* who, int8 seatId, bool apply) OVERRIDE
+ void PassengerBoarded(Unit* who, int8 seatId, bool apply) override
{
if (!me->GetVehicle())
return;
@@ -619,7 +619,7 @@ class boss_flame_leviathan_seat : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_flame_leviathan_seatAI>(creature);
}
@@ -638,13 +638,13 @@ class boss_flame_leviathan_defense_cannon : public CreatureScript
uint32 NapalmTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
NapalmTimer = 5*IN_MILLISECONDS;
DoCast(me, AURA_STEALTH_DETECTION);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -661,7 +661,7 @@ class boss_flame_leviathan_defense_cannon : public CreatureScript
NapalmTimer -= diff;
}
- bool CanAIAttack(Unit const* who) const OVERRIDE
+ bool CanAIAttack(Unit const* who) const override
{
if (who->GetTypeId() != TYPEID_PLAYER || !who->GetVehicle() || who->GetVehicleBase()->GetEntry() == NPC_SEAT)
return false;
@@ -669,7 +669,7 @@ class boss_flame_leviathan_defense_cannon : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_flame_leviathan_defense_cannonAI(creature);
}
@@ -684,13 +684,13 @@ class boss_flame_leviathan_defense_turret : public CreatureScript
{
boss_flame_leviathan_defense_turretAI(Creature* creature) : TurretAI(creature) { }
- void DamageTaken(Unit* who, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* who, uint32 &damage) override
{
if (!CanAIAttack(who))
damage = 0;
}
- bool CanAIAttack(Unit const* who) const OVERRIDE
+ bool CanAIAttack(Unit const* who) const override
{
if (who->GetTypeId() != TYPEID_PLAYER || !who->GetVehicle() || who->GetVehicleBase()->GetEntry() != NPC_SEAT)
return false;
@@ -698,7 +698,7 @@ class boss_flame_leviathan_defense_turret : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_flame_leviathan_defense_turretAI(creature);
}
@@ -715,7 +715,7 @@ class boss_flame_leviathan_overload_device : public CreatureScript
{
}
- void OnSpellClick(Unit* /*clicker*/, bool& result) OVERRIDE
+ void OnSpellClick(Unit* /*clicker*/, bool& result) override
{
if (!result)
return;
@@ -735,7 +735,7 @@ class boss_flame_leviathan_overload_device : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_flame_leviathan_overload_deviceAI(creature);
}
@@ -752,7 +752,7 @@ class boss_flame_leviathan_safety_container : public CreatureScript
{
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
float x, y, z;
me->GetPosition(x, y, z);
@@ -761,12 +761,12 @@ class boss_flame_leviathan_safety_container : public CreatureScript
me->SetPosition(x, y, z, 0);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_flame_leviathan_safety_containerAI(creature);
}
@@ -786,13 +786,13 @@ class npc_mechanolift : public CreatureScript
uint32 MoveTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
MoveTimer = 0;
me->GetMotionMaster()->MoveRandom(50);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->GetMotionMaster()->MoveTargetedHome();
DoCast(SPELL_DUSTY_EXPLOSION);
@@ -804,14 +804,14 @@ class npc_mechanolift : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == POINT_MOTION_TYPE && id == 1)
if (Creature* container = me->FindNearestCreature(NPC_CONTAINER, 5, true))
container->EnterVehicle(me);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (MoveTimer <= diff)
{
@@ -829,7 +829,7 @@ class npc_mechanolift : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_mechanoliftAI(creature);
}
@@ -849,21 +849,21 @@ class npc_pool_of_tar : public CreatureScript
me->CastSpell(me, SPELL_TAR_PASSIVE, true);
}
- void DamageTaken(Unit* /*who*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*who*/, uint32& damage) override
{
damage = 0;
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->SchoolMask & SPELL_SCHOOL_MASK_FIRE && !me->HasAura(SPELL_BLAZE))
me->CastSpell(me, SPELL_BLAZE, true);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_pool_of_tarAI(creature);
}
@@ -883,13 +883,13 @@ class npc_colossus : public CreatureScript
InstanceScript* instance;
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (me->GetHomePosition().IsInDist(&Center, 50.f))
instance->SetData(DATA_COLOSSUS, instance->GetData(DATA_COLOSSUS)+1);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
return;
@@ -898,7 +898,7 @@ class npc_colossus : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_colossusAI>(creature);
}
@@ -917,7 +917,7 @@ class npc_thorims_hammer : public CreatureScript
me->CastSpell(me, AURA_DUMMY_BLUE, true);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER && who->IsVehicle() && me->IsInRange(who, 0, 10, false))
@@ -927,7 +927,7 @@ class npc_thorims_hammer : public CreatureScript
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!me->HasAura(AURA_DUMMY_BLUE))
me->CastSpell(me, AURA_DUMMY_BLUE, true);
@@ -936,7 +936,7 @@ class npc_thorims_hammer : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_thorims_hammerAI(creature);
}
@@ -947,7 +947,7 @@ class npc_mimirons_inferno : public CreatureScript
public:
npc_mimirons_inferno() : CreatureScript("npc_mimirons_inferno") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_mimirons_infernoAI(creature);
}
@@ -961,19 +961,19 @@ public:
me->SetReactState(REACT_PASSIVE);
}
- void WaypointReached(uint32 /*waypointId*/) OVERRIDE
+ void WaypointReached(uint32 /*waypointId*/) override
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
infernoTimer = 2000;
}
uint32 infernoTimer;
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
@@ -1013,7 +1013,7 @@ class npc_hodirs_fury : public CreatureScript
me->CastSpell(me, AURA_DUMMY_GREEN, true);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER && who->IsVehicle() && me->IsInRange(who, 0, 5, false))
@@ -1023,7 +1023,7 @@ class npc_hodirs_fury : public CreatureScript
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!me->HasAura(AURA_DUMMY_GREEN))
me->CastSpell(me, AURA_DUMMY_GREEN, true);
@@ -1032,7 +1032,7 @@ class npc_hodirs_fury : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_hodirs_furyAI(creature);
}
@@ -1052,12 +1052,12 @@ class npc_freyas_ward : public CreatureScript
uint32 summonTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
summonTimer = 5000;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (summonTimer <= diff)
{
@@ -1075,7 +1075,7 @@ class npc_freyas_ward : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_freyas_wardAI(creature);
}
@@ -1095,12 +1095,12 @@ class npc_freya_ward_summon : public CreatureScript
uint32 lashTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
lashTimer = 5000;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1117,7 +1117,7 @@ class npc_freya_ward_summon : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_freya_ward_summonAI(creature);
}
@@ -1138,7 +1138,7 @@ class npc_lorekeeper : public CreatureScript
{
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
// Start encounter
if (action == ACTION_SPAWN_VEHICLES)
@@ -1154,7 +1154,7 @@ class npc_lorekeeper : public CreatureScript
}
};
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->CLOSE_GOSSIP_MENU();
InstanceScript* instance = creature->GetInstanceScript();
@@ -1191,7 +1191,7 @@ class npc_lorekeeper : public CreatureScript
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
InstanceScript* instance = creature->GetInstanceScript();
if (instance && instance->GetData(BOSS_LEVIATHAN) != DONE && player)
@@ -1204,7 +1204,7 @@ class npc_lorekeeper : public CreatureScript
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_lorekeeperAI(creature);
}
@@ -1221,7 +1221,7 @@ class npc_brann_bronzebeard : public CreatureScript
public:
npc_brann_bronzebeard() : CreatureScript("npc_brann_bronzebeard") { }
- //bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE
+ //bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override
//{
// player->PlayerTalkClass->ClearMenus();
// switch (action)
@@ -1244,7 +1244,7 @@ public:
// }
// return true;
//}
- //bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ //bool OnGossipHello(Player* player, Creature* creature) override
//{
// InstanceScript* instance = creature->GetInstanceScript();
// if (instance && instance->GetData(BOSS_LEVIATHAN) !=DONE)
@@ -1265,7 +1265,7 @@ class go_ulduar_tower : public GameObjectScript
public:
go_ulduar_tower() : GameObjectScript("go_ulduar_tower") { }
- void OnDestroyed(GameObject* go, Player* /*player*/) OVERRIDE
+ void OnDestroyed(GameObject* go, Player* /*player*/) override
{
InstanceScript* instance = go->GetInstanceScript();
if (!instance)
@@ -1297,7 +1297,7 @@ class achievement_three_car_garage_demolisher : public AchievementCriteriaScript
public:
achievement_three_car_garage_demolisher() : AchievementCriteriaScript("achievement_three_car_garage_demolisher") { }
- bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE
+ bool OnCheck(Player* source, Unit* /*target*/) override
{
if (Creature* vehicle = source->GetVehicleCreatureBase())
{
@@ -1314,7 +1314,7 @@ class achievement_three_car_garage_chopper : public AchievementCriteriaScript
public:
achievement_three_car_garage_chopper() : AchievementCriteriaScript("achievement_three_car_garage_chopper") { }
- bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE
+ bool OnCheck(Player* source, Unit* /*target*/) override
{
if (Creature* vehicle = source->GetVehicleCreatureBase())
{
@@ -1331,7 +1331,7 @@ class achievement_three_car_garage_siege : public AchievementCriteriaScript
public:
achievement_three_car_garage_siege() : AchievementCriteriaScript("achievement_three_car_garage_siege") { }
- bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE
+ bool OnCheck(Player* source, Unit* /*target*/) override
{
if (Creature* vehicle = source->GetVehicleCreatureBase())
{
@@ -1348,7 +1348,7 @@ class achievement_shutout : public AchievementCriteriaScript
public:
achievement_shutout() : AchievementCriteriaScript("achievement_shutout") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
if (target)
if (Creature* leviathan = target->ToCreature())
@@ -1364,11 +1364,11 @@ class achievement_unbroken : public AchievementCriteriaScript
public:
achievement_unbroken() : AchievementCriteriaScript("achievement_unbroken") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
if (target)
if (InstanceScript* instance = target->GetInstanceScript())
- return instance->GetData(DATA_UNBROKEN);
+ return instance->GetData(DATA_UNBROKEN) != 0;
return false;
}
@@ -1379,7 +1379,7 @@ class achievement_orbital_bombardment : public AchievementCriteriaScript
public:
achievement_orbital_bombardment() : AchievementCriteriaScript("achievement_orbital_bombardment") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
if (!target)
return false;
@@ -1397,7 +1397,7 @@ class achievement_orbital_devastation : public AchievementCriteriaScript
public:
achievement_orbital_devastation() : AchievementCriteriaScript("achievement_orbital_devastation") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
if (!target)
return false;
@@ -1415,7 +1415,7 @@ class achievement_nuked_from_orbit : public AchievementCriteriaScript
public:
achievement_nuked_from_orbit() : AchievementCriteriaScript("achievement_nuked_from_orbit") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
if (!target)
return false;
@@ -1433,7 +1433,7 @@ class achievement_orbit_uary : public AchievementCriteriaScript
public:
achievement_orbit_uary() : AchievementCriteriaScript("achievement_orbit_uary") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
if (!target)
return false;
@@ -1478,14 +1478,14 @@ class spell_load_into_catapult : public SpellScriptLoader
owner->RemoveAurasDueToSpell(SPELL_PASSENGER_LOADED);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_load_into_catapult_AuraScript::OnApply, EFFECT_0, SPELL_AURA_CONTROL_VEHICLE, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_load_into_catapult_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_CONTROL_VEHICLE, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_load_into_catapult_AuraScript();
}
@@ -1544,14 +1544,14 @@ class spell_auto_repair : public SpellScriptLoader
instance->SetData(DATA_UNBROKEN, 0);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_auto_repair_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
BeforeHit += SpellHitFn(spell_auto_repair_SpellScript::CheckCooldownForTarget);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_auto_repair_SpellScript();
}
@@ -1587,14 +1587,14 @@ class spell_systems_shutdown : public SpellScriptLoader
owner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_systems_shutdown_AuraScript::OnApply, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_systems_shutdown_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_systems_shutdown_AuraScript();
}
@@ -1652,7 +1652,7 @@ class spell_pursue : public SpellScriptLoader
{
PrepareSpellScript(spell_pursue_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_target = NULL;
return true;
@@ -1699,7 +1699,7 @@ class spell_pursue : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pursue_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pursue_SpellScript::FilterTargetsSubsequently, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
@@ -1709,7 +1709,7 @@ class spell_pursue : public SpellScriptLoader
WorldObject* _target;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pursue_SpellScript();
}
@@ -1768,13 +1768,13 @@ class spell_vehicle_throw_passenger : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_vehicle_throw_passenger_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_vehicle_throw_passenger_SpellScript();
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
index 7f3e6485eaf..68bdbe0fdf3 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
@@ -229,7 +229,7 @@ class npc_iron_roots : public CreatureScript
summonerGUID = 0;
}
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
if (summoner->GetTypeId() != TYPEID_PLAYER)
return;
@@ -239,7 +239,7 @@ class npc_iron_roots : public CreatureScript
me->SetInCombatWith(summoner);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Player* target = ObjectAccessor::GetPlayer(*me, summonerGUID))
{
@@ -254,7 +254,7 @@ class npc_iron_roots : public CreatureScript
uint64 summonerGUID;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_iron_rootsAI(creature);
}
@@ -284,7 +284,7 @@ class boss_freya : public CreatureScript
bool trioDefeated[2];
bool random[3];
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
trioWaveCount = 0;
@@ -307,13 +307,13 @@ class boss_freya : public CreatureScript
random[n] = false;
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void DamageTaken(Unit* who, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* who, uint32& damage) override
{
if (damage >= me->GetHealth())
{
@@ -322,7 +322,7 @@ class boss_freya : public CreatureScript
}
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
_EnterCombat();
DoZoneInCombat();
@@ -373,7 +373,7 @@ class boss_freya : public CreatureScript
events.ScheduleEvent(EVENT_SUNBEAM, urand(5000, 15000));
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -386,7 +386,7 @@ class boss_freya : public CreatureScript
return 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -578,7 +578,7 @@ class boss_freya : public CreatureScript
waveCount++;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
//! Freya's chest is dynamically spawned on death by different spells.
const uint32 summonSpell[2][4] =
@@ -616,7 +616,7 @@ class boss_freya : public CreatureScript
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
switch (summoned->GetEntry())
{
@@ -645,7 +645,7 @@ class boss_freya : public CreatureScript
}
}
- void SummonedCreatureDies(Creature* summoned, Unit* who) OVERRIDE
+ void SummonedCreatureDies(Creature* summoned, Unit* who) override
{
switch (summoned->GetEntry())
{
@@ -664,7 +664,7 @@ class boss_freya : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_freyaAI>(creature);
}
@@ -681,7 +681,7 @@ class boss_elder_brightleaf : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
if (me->HasAura(SPELL_DRAINED_OF_POWER))
@@ -693,13 +693,13 @@ class boss_elder_brightleaf : public CreatureScript
lumberjack = false;
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_ELDER_SLAY);
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
_JustDied();
Talk(SAY_ELDER_DEATH);
@@ -714,14 +714,14 @@ class boss_elder_brightleaf : public CreatureScript
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
if (!me->HasAura(SPELL_DRAINED_OF_POWER))
Talk(SAY_ELDER_AGGRO);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || me->HasAura(SPELL_DRAINED_OF_POWER))
return;
@@ -764,7 +764,7 @@ class boss_elder_brightleaf : public CreatureScript
DoMeleeAttackIfReady();
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -785,7 +785,7 @@ class boss_elder_brightleaf : public CreatureScript
bool lumberjack;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_elder_brightleafAI>(creature);
}
@@ -802,7 +802,7 @@ class boss_elder_stonebark : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
if (me->HasAura(SPELL_DRAINED_OF_POWER))
@@ -814,13 +814,13 @@ class boss_elder_stonebark : public CreatureScript
lumberjack = false;
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_ELDER_SLAY);
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
_JustDied();
Talk(SAY_ELDER_DEATH);
@@ -835,14 +835,14 @@ class boss_elder_stonebark : public CreatureScript
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
if (!me->HasAura(SPELL_DRAINED_OF_POWER))
Talk(SAY_ELDER_AGGRO);
}
- void DamageTaken(Unit* who, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* who, uint32& damage) override
{
if (who == me)
return;
@@ -855,7 +855,7 @@ class boss_elder_stonebark : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || me->HasAura(SPELL_DRAINED_OF_POWER))
return;
@@ -891,7 +891,7 @@ class boss_elder_stonebark : public CreatureScript
DoMeleeAttackIfReady();
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -912,7 +912,7 @@ class boss_elder_stonebark : public CreatureScript
bool lumberjack;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_elder_stonebarkAI>(creature);
}
@@ -929,7 +929,7 @@ class boss_elder_ironbranch : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
if (me->HasAura(SPELL_DRAINED_OF_POWER))
@@ -941,13 +941,13 @@ class boss_elder_ironbranch : public CreatureScript
lumberjack = false;
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_ELDER_SLAY);
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
_JustDied();
Talk(SAY_ELDER_DEATH);
@@ -962,14 +962,14 @@ class boss_elder_ironbranch : public CreatureScript
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
if (!me->HasAura(SPELL_DRAINED_OF_POWER))
Talk(SAY_ELDER_AGGRO);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || me->HasAura(SPELL_DRAINED_OF_POWER))
return;
@@ -1005,7 +1005,7 @@ class boss_elder_ironbranch : public CreatureScript
DoMeleeAttackIfReady();
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -1026,7 +1026,7 @@ class boss_elder_ironbranch : public CreatureScript
bool lumberjack;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_elder_ironbranchAI>(creature);
}
@@ -1044,13 +1044,13 @@ class npc_detonating_lasher : public CreatureScript
me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);
}
- void Reset() OVERRIDE
+ void Reset() override
{
lashTimer = 5000;
changeTargetTimer = 7500;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1084,7 +1084,7 @@ class npc_detonating_lasher : public CreatureScript
uint32 changeTargetTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_detonating_lasherAI(creature);
}
@@ -1101,15 +1101,15 @@ class npc_ancient_water_spirit : public CreatureScript
{
instance = me->GetInstanceScript();
if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_FREYA)))
- waveCount = CAST_AI(boss_freya::boss_freyaAI, Freya->AI())->trioWaveCount;
+ waveCount = ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->trioWaveCount;
}
- void Reset() OVERRIDE
+ void Reset() override
{
tidalWaveTimer = 10000;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1129,12 +1129,12 @@ class npc_ancient_water_spirit : public CreatureScript
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_FREYA)))
{
- CAST_AI(boss_freya::boss_freyaAI, Freya->AI())->checkElementalAlive[waveCount] = false;
- CAST_AI(boss_freya::boss_freyaAI, Freya->AI())->LasherDead(1);
+ ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->checkElementalAlive[waveCount] = false;
+ ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->LasherDead(1);
}
}
@@ -1144,7 +1144,7 @@ class npc_ancient_water_spirit : public CreatureScript
uint8 waveCount;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ancient_water_spiritAI>(creature);
}
@@ -1161,16 +1161,16 @@ class npc_storm_lasher : public CreatureScript
{
instance = me->GetInstanceScript();
if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_FREYA)))
- waveCount = CAST_AI(boss_freya::boss_freyaAI, Freya->AI())->trioWaveCount;
+ waveCount = ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->trioWaveCount;
}
- void Reset() OVERRIDE
+ void Reset() override
{
lightningLashTimer = 10000;
stormboltTimer = 5000;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1195,12 +1195,12 @@ class npc_storm_lasher : public CreatureScript
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_FREYA)))
{
- CAST_AI(boss_freya::boss_freyaAI, Freya->AI())->checkElementalAlive[waveCount] = false;
- CAST_AI(boss_freya::boss_freyaAI, Freya->AI())->LasherDead(2);
+ ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->checkElementalAlive[waveCount] = false;
+ ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->LasherDead(2);
}
}
@@ -1211,7 +1211,7 @@ class npc_storm_lasher : public CreatureScript
uint8 waveCount;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_storm_lasherAI>(creature);
}
@@ -1228,10 +1228,10 @@ class npc_snaplasher : public CreatureScript
{
instance = me->GetInstanceScript();
if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_FREYA)))
- waveCount = CAST_AI(boss_freya::boss_freyaAI, Freya->AI())->trioWaveCount;
+ waveCount = ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->trioWaveCount;
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
return;
@@ -1242,12 +1242,12 @@ class npc_snaplasher : public CreatureScript
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_FREYA)))
{
- CAST_AI(boss_freya::boss_freyaAI, Freya->AI())->checkElementalAlive[waveCount] = false;
- CAST_AI(boss_freya::boss_freyaAI, Freya->AI())->LasherDead(4);
+ ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->checkElementalAlive[waveCount] = false;
+ ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->LasherDead(4);
}
}
@@ -1256,7 +1256,7 @@ class npc_snaplasher : public CreatureScript
uint8 waveCount;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_snaplasherAI>(creature);
}
@@ -1273,7 +1273,7 @@ class npc_ancient_conservator : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
natureFuryTimer = 7500;
healthySporeTimer = 3500;
@@ -1291,12 +1291,12 @@ class npc_ancient_conservator : public CreatureScript
}
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
DoCast(who, SPELL_CONSERVATOR_GRIP, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1327,7 +1327,7 @@ class npc_ancient_conservator : public CreatureScript
uint32 healthySporeTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ancient_conservatorAI(creature);
}
@@ -1349,7 +1349,7 @@ class npc_sun_beam : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_sun_beamAI(creature);
}
@@ -1373,7 +1373,7 @@ class npc_healthy_spore : public CreatureScript
lifeTimer = urand(22000, 30000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (lifeTimer <= diff)
{
@@ -1389,7 +1389,7 @@ class npc_healthy_spore : public CreatureScript
uint32 lifeTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_healthy_sporeAI(creature);
}
@@ -1412,7 +1412,7 @@ class npc_eonars_gift : public CreatureScript
DoCast(me, SPELL_EONAR_VISUAL, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (lifeBindersGiftTimer <= diff)
{
@@ -1429,7 +1429,7 @@ class npc_eonars_gift : public CreatureScript
uint32 lifeBindersGiftTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_eonars_giftAI(creature);
}
@@ -1450,7 +1450,7 @@ class npc_nature_bomb : public CreatureScript
DoCast(SPELL_OBJECT_BOMB);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (bombTimer <= diff)
{
@@ -1471,7 +1471,7 @@ class npc_nature_bomb : public CreatureScript
uint32 bombTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_nature_bombAI(creature);
}
@@ -1495,7 +1495,7 @@ class npc_unstable_sun_beam : public CreatureScript
me->SetReactState(REACT_PASSIVE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (despawnTimer <= diff)
{
@@ -1506,7 +1506,7 @@ class npc_unstable_sun_beam : public CreatureScript
despawnTimer -= diff;
}
- void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, SpellInfo const* spell) override
{
if (target && spell->Id == SPELL_UNSTABLE_ENERGY)
{
@@ -1520,7 +1520,7 @@ class npc_unstable_sun_beam : public CreatureScript
uint32 despawnTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_unstable_sun_beamAI>(creature);
}
@@ -1561,13 +1561,13 @@ class spell_freya_attuned_to_nature_dose_reduction : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_freya_attuned_to_nature_dose_reduction_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_freya_attuned_to_nature_dose_reduction_SpellScript();
}
@@ -1587,20 +1587,19 @@ class spell_freya_iron_roots : public SpellScriptLoader
PreventHitDefaultEffect(effIndex);
uint32 entry = uint32(GetSpellInfo()->Effects[effIndex].MiscValue);
- Position pos;
- GetCaster()->GetPosition(&pos);
+ Position pos = GetCaster()->GetPosition();
// Not good at all, but this prevents having roots in a different position then player
if (Creature* Roots = GetCaster()->SummonCreature(entry, pos))
GetCaster()->NearTeleportTo(Roots->GetPositionX(), Roots->GetPositionY(), Roots->GetPositionZ(), GetCaster()->GetOrientation());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_freya_iron_roots_SpellScript::HandleSummon, EFFECT_0, SPELL_EFFECT_SUMMON);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_freya_iron_roots_SpellScript();
}
@@ -1611,7 +1610,7 @@ class achievement_getting_back_to_nature : public AchievementCriteriaScript
public:
achievement_getting_back_to_nature() : AchievementCriteriaScript("achievement_getting_back_to_nature") { }
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
return target && target->GetAI()->GetData(DATA_GETTING_BACK_TO_NATURE) >= 25;
}
@@ -1622,7 +1621,7 @@ class achievement_knock_on_wood : public AchievementCriteriaScript
public:
achievement_knock_on_wood() : AchievementCriteriaScript("achievement_knock_on_wood") { }
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
return target && target->GetAI()->GetData(DATA_KNOCK_ON_WOOD) >= 1;
}
@@ -1633,7 +1632,7 @@ class achievement_knock_knock_on_wood : public AchievementCriteriaScript
public:
achievement_knock_knock_on_wood() : AchievementCriteriaScript("achievement_knock_knock_on_wood") { }
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
return target && target->GetAI()->GetData(DATA_KNOCK_ON_WOOD) >= 2;
}
@@ -1644,7 +1643,7 @@ class achievement_knock_knock_knock_on_wood : public AchievementCriteriaScript
public:
achievement_knock_knock_knock_on_wood() : AchievementCriteriaScript("achievement_knock_knock_knock_on_wood") { }
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
return target && target->GetAI()->GetData(DATA_KNOCK_ON_WOOD) == 3;
}
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 446075f76e5..196e410f239 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
@@ -112,7 +112,7 @@ class boss_general_vezax : public CreatureScript
bool animusDead; // Check against getting a HardMode achievement before killing Saronite Animus
uint8 vaporCount;
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
@@ -122,7 +122,7 @@ class boss_general_vezax : public CreatureScript
vaporCount = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
@@ -138,7 +138,7 @@ class boss_general_vezax : public CreatureScript
events.ScheduleEvent(EVENT_BERSERK, 600000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -207,19 +207,19 @@ class boss_general_vezax : public CreatureScript
DoMeleeAttackIfReady();
}
- void SpellHitTarget(Unit* who, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* who, SpellInfo const* spell) override
{
if (who && who->GetTypeId() == TYPEID_PLAYER && spell->Id == SPELL_SHADOW_CRASH_HIT)
shadowDodger = false;
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
@@ -240,7 +240,7 @@ class boss_general_vezax : public CreatureScript
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -253,7 +253,7 @@ class boss_general_vezax : public CreatureScript
return 0;
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -305,7 +305,7 @@ class boss_general_vezax : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_general_vezaxAI>(creature);
}
@@ -323,20 +323,20 @@ class boss_saronite_animus : public CreatureScript
instance = me->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
DoCast(me, SPELL_VISUAL_SARONITE_ANIMUS);
events.Reset();
events.ScheduleEvent(EVENT_PROFOUND_OF_DARKNESS, 3000);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
- if (Creature* Vezax = me->GetCreature(*me, instance->GetData64(BOSS_VEZAX)))
+ if (Creature* Vezax = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_VEZAX)))
Vezax->AI()->DoAction(ACTION_ANIMUS_DIE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -367,7 +367,7 @@ class boss_saronite_animus : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_saronite_animusAI>(creature);
}
@@ -389,13 +389,13 @@ class npc_saronite_vapors : public CreatureScript
me->SetReactState(REACT_PASSIVE);
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
events.ScheduleEvent(EVENT_RANDOM_MOVE, urand(5000, 7500));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -413,7 +413,7 @@ class npc_saronite_vapors : public CreatureScript
}
}
- void DamageTaken(Unit* /*who*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*who*/, uint32& damage) override
{
// This can't be on JustDied. In 63322 dummy handler caster needs to be this NPC
// if caster == target then damage mods will increase the damage taken
@@ -427,7 +427,7 @@ class npc_saronite_vapors : public CreatureScript
DoCast(me, SPELL_SARONITE_VAPORS);
me->DespawnOrUnsummon(30000);
- if (Creature* Vezax = me->GetCreature(*me, instance->GetData64(BOSS_VEZAX)))
+ if (Creature* Vezax = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_VEZAX)))
Vezax->AI()->DoAction(ACTION_VAPORS_DIE);
}
}
@@ -437,7 +437,7 @@ class npc_saronite_vapors : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_saronite_vaporsAI>(creature);
}
@@ -465,13 +465,13 @@ class spell_general_vezax_mark_of_the_faceless : public SpellScriptLoader
caster->CastCustomSpell(SPELL_MARK_OF_THE_FACELESS_DAMAGE, SPELLVALUE_BASE_POINT1, aurEff->GetAmount(), GetTarget(), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_general_vezax_mark_of_the_faceless_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_general_vezax_mark_of_the_faceless_AuraScript();
}
@@ -494,13 +494,13 @@ class spell_general_vezax_mark_of_the_faceless_leech : public SpellScriptLoader
FinishCast(SPELL_FAILED_NO_VALID_TARGETS);
}
- void Register()
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_general_vezax_mark_of_the_faceless_leech_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const
+ SpellScript* GetSpellScript() const override
{
return new spell_general_vezax_mark_of_the_faceless_leech_SpellScript();
}
@@ -515,7 +515,7 @@ class spell_general_vezax_saronite_vapors : public SpellScriptLoader
{
PrepareAuraScript(spell_general_vezax_saronite_vapors_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SARONITE_VAPORS_ENERGIZE) || !sSpellMgr->GetSpellInfo(SPELL_SARONITE_VAPORS_DAMAGE))
return false;
@@ -526,20 +526,20 @@ class spell_general_vezax_saronite_vapors : public SpellScriptLoader
{
if (Unit* caster = GetCaster())
{
- int32 mana = int32(aurEff->GetAmount() * pow(2.0f, GetStackAmount())); // mana restore - bp * 2^stackamount
+ int32 mana = int32(aurEff->GetAmount() * std::pow(2.0f, GetStackAmount())); // mana restore - bp * 2^stackamount
int32 damage = mana * 2;
caster->CastCustomSpell(GetTarget(), SPELL_SARONITE_VAPORS_ENERGIZE, &mana, NULL, NULL, true);
caster->CastCustomSpell(GetTarget(), SPELL_SARONITE_VAPORS_DAMAGE, &damage, NULL, NULL, true);
}
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_general_vezax_saronite_vapors_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_general_vezax_saronite_vapors_AuraScript();
}
@@ -552,7 +552,7 @@ class achievement_shadowdodger : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
@@ -572,7 +572,7 @@ class achievement_smell_saronite : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
index 578a51fa1f8..7f4d585b0a4 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
@@ -191,18 +191,21 @@ class npc_flash_freeze : public CreatureScript
uint64 targetGUID;
uint32 checkDespawnTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
targetGUID = 0;
checkDespawnTimer = 1000;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
- if (!UpdateVictim() || me->GetVictim()->HasAura(SPELL_BLOCK_OF_ICE) || me->GetVictim()->HasAura(SPELL_FLASH_FREEZE_HELPER))
+ if (!UpdateVictim()
+ || !me->GetVictim()
+ || me->EnsureVictim()->HasAura(SPELL_BLOCK_OF_ICE)
+ || me->EnsureVictim()->HasAura(SPELL_FLASH_FREEZE_HELPER))
return;
- if (me->GetVictim()->GetGUID() != targetGUID || instance->GetBossState(BOSS_HODIR) != IN_PROGRESS)
+ if (me->EnsureVictim()->GetGUID() != targetGUID || instance->GetBossState(BOSS_HODIR) != IN_PROGRESS)
me->DespawnOrUnsummon();
if (checkDespawnTimer <= diff)
@@ -216,7 +219,7 @@ class npc_flash_freeze : public CreatureScript
checkDespawnTimer -= diff;
}
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
targetGUID = summoner->GetGUID();
me->SetInCombatWith(summoner);
@@ -233,7 +236,7 @@ class npc_flash_freeze : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_flash_freezeAI>(creature);
}
@@ -258,7 +261,7 @@ class npc_ice_block : public CreatureScript
uint64 targetGUID;
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
targetGUID = summoner->GetGUID();
summoner->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED);
@@ -273,7 +276,7 @@ class npc_ice_block : public CreatureScript
}
}
- void DamageTaken(Unit* who, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* who, uint32& /*damage*/) override
{
if (Creature* Helper = ObjectAccessor::GetCreature(*me, targetGUID))
{
@@ -294,7 +297,7 @@ class npc_ice_block : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ice_blockAI>(creature);
}
@@ -319,7 +322,7 @@ class boss_hodir : public CreatureScript
bool iHaveTheCoolestFriends;
bool iCouldSayThatThisCacheWasRare;
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
me->SetReactState(REACT_PASSIVE);
@@ -329,7 +332,7 @@ class boss_hodir : public CreatureScript
FrozenHelper->CastSpell(FrozenHelper, SPELL_SUMMON_FLASH_FREEZE_HELPER, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -349,13 +352,13 @@ class boss_hodir : public CreatureScript
events.ScheduleEvent(EVENT_BERSERK, 480000);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void DamageTaken(Unit* /*who*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*who*/, uint32& damage) override
{
if (damage >= me->GetHealth())
{
@@ -385,7 +388,7 @@ class boss_hodir : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -464,7 +467,7 @@ class boss_hodir : public CreatureScript
DoMeleeAttackIfReady();
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -502,7 +505,7 @@ class boss_hodir : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_hodirAI>(creature);
};
@@ -524,12 +527,12 @@ class npc_icicle : public CreatureScript
uint32 icicleTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
icicleTimer = 2500;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (icicleTimer <= diff)
{
@@ -550,7 +553,7 @@ class npc_icicle : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_icicleAI>(creature);
};
@@ -572,12 +575,12 @@ class npc_snowpacked_icicle : public CreatureScript
uint32 despawnTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
despawnTimer = 12000;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (despawnTimer <= diff)
{
@@ -590,7 +593,7 @@ class npc_snowpacked_icicle : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_snowpacked_icicleAI>(creature);
};
@@ -608,14 +611,14 @@ class npc_hodir_priest : public CreatureScript
instance = me->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
events.ScheduleEvent(EVENT_HEAL, urand(4000, 8000));
events.ScheduleEvent(EVENT_DISPEL_MAGIC, urand(15000, 20000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED))
return;
@@ -656,7 +659,7 @@ class npc_hodir_priest : public CreatureScript
DoSpellAttackIfReady(SPELL_SMITE);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_HODIR)))
Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
@@ -667,7 +670,7 @@ class npc_hodir_priest : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_hodir_priestAI>(creature);
};
@@ -685,13 +688,13 @@ class npc_hodir_shaman : public CreatureScript
instance = me->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
events.ScheduleEvent(EVENT_STORM_CLOUD, urand(10000, 12500));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED))
return;
@@ -718,7 +721,7 @@ class npc_hodir_shaman : public CreatureScript
DoSpellAttackIfReady(SPELL_LAVA_BURST);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_HODIR)))
Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
@@ -729,7 +732,7 @@ class npc_hodir_shaman : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_hodir_shamanAI>(creature);
};
@@ -747,13 +750,13 @@ class npc_hodir_druid : public CreatureScript
instance = me->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
events.ScheduleEvent(EVENT_STARLIGHT, urand(15000, 17500));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED))
return;
@@ -779,7 +782,7 @@ class npc_hodir_druid : public CreatureScript
DoSpellAttackIfReady(SPELL_WRATH);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_HODIR)))
Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
@@ -790,7 +793,7 @@ class npc_hodir_druid : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_hodir_druidAI>(creature);
};
@@ -808,7 +811,7 @@ class npc_hodir_mage : public CreatureScript
instance = me->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
summons.DespawnAll();
@@ -816,19 +819,19 @@ class npc_hodir_mage : public CreatureScript
events.ScheduleEvent(EVENT_MELT_ICE, 5000);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned->GetEntry() == NPC_TOASTY_FIRE)
summons.Summon(summoned);
}
- void SummonedCreatureDespawn(Creature* summoned) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summoned) override
{
if (summoned->GetEntry() == NPC_TOASTY_FIRE)
summons.Despawn(summoned);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED))
return;
@@ -859,7 +862,7 @@ class npc_hodir_mage : public CreatureScript
DoSpellAttackIfReady(SPELL_FIREBALL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_HODIR)))
Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
@@ -871,7 +874,7 @@ class npc_hodir_mage : public CreatureScript
SummonList summons;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_hodir_mageAI>(creature);
};
@@ -889,12 +892,12 @@ class npc_toasty_fire : public CreatureScript
me->SetDisplayId(me->GetCreatureTemplate()->Modelid2);
}
- void Reset() OVERRIDE
+ void Reset() override
{
DoCast(me, SPELL_SINGED, true);
}
- void SpellHit(Unit* /*who*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*who*/, const SpellInfo* spell) override
{
if (spell->Id == SPELL_BLOCK_OF_ICE || spell->Id == SPELL_ICE_SHARD || spell->Id == SPELL_ICE_SHARD_HIT)
{
@@ -905,7 +908,7 @@ class npc_toasty_fire : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_toasty_fireAI>(creature);
};
@@ -951,7 +954,7 @@ class spell_biting_cold : public SpellScriptLoader
listOfTargets.push_back(std::make_pair(target->GetGUID(), 1));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_biting_cold_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
@@ -961,7 +964,7 @@ class spell_biting_cold : public SpellScriptLoader
TargetList listOfTargets;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_biting_cold_AuraScript();
}
@@ -982,20 +985,20 @@ public:
if (!caster)
return;
- int32 damage = int32(200 * pow(2.0f, GetStackAmount()));
+ int32 damage = int32(200 * std::pow(2.0f, GetStackAmount()));
caster->CastCustomSpell(caster, SPELL_BITING_COLD_DAMAGE, &damage, NULL, NULL, true);
if (caster->isMoving())
caster->RemoveAuraFromStack(SPELL_BITING_COLD_TRIGGERED);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_biting_cold_dot_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_biting_cold_dot_AuraScript();
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
index 4b1572447d4..28a87b37f5b 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
@@ -121,7 +121,7 @@ class boss_ignis : public CreatureScript
ASSERT(_vehicle);
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
if (_vehicle)
@@ -130,7 +130,7 @@ class boss_ignis : public CreatureScript
instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEVEMENT_IGNIS_START_EVENT);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -146,13 +146,13 @@ class boss_ignis : public CreatureScript
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEVEMENT_IGNIS_START_EVENT);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_SHATTERED)
return _shattered ? 1 : 0;
@@ -160,13 +160,13 @@ class boss_ignis : public CreatureScript
return 0;
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() == NPC_IRON_CONSTRUCT)
{
@@ -180,7 +180,7 @@ class boss_ignis : public CreatureScript
summons.Summon(summon);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action != ACTION_REMOVE_BUFF)
return;
@@ -193,7 +193,7 @@ class boss_ignis : public CreatureScript
_firstConstructKill = secondKill;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -283,7 +283,7 @@ class boss_ignis : public CreatureScript
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_ignis_AI>(creature);
}
@@ -301,12 +301,12 @@ class npc_iron_construct : public CreatureScript
creature->SetReactState(REACT_PASSIVE);
}
- void Reset() OVERRIDE
+ void Reset() override
{
_brittled = false;
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if (me->HasAura(SPELL_BRITTLE) && damage >= 5000)
{
@@ -319,7 +319,7 @@ class npc_iron_construct : public CreatureScript
}
}
- void UpdateAI(uint32 /*uiDiff*/) OVERRIDE
+ void UpdateAI(uint32 /*uiDiff*/) override
{
if (!UpdateVictim())
return;
@@ -350,7 +350,7 @@ class npc_iron_construct : public CreatureScript
bool _brittled;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_iron_constructAI>(creature);
}
@@ -369,7 +369,7 @@ class npc_scorch_ground : public CreatureScript
creature->SetDisplayId(16925); //model 2 in db cannot overwrite wdb fields
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!_heat)
@@ -385,7 +385,7 @@ class npc_scorch_ground : public CreatureScript
}
}
- void Reset() OVERRIDE
+ void Reset() override
{
_heat = false;
DoCast(me, SPELL_GROUND);
@@ -393,13 +393,13 @@ class npc_scorch_ground : public CreatureScript
_heatTimer = 0;
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (_heat)
{
if (_heatTimer <= uiDiff)
{
- Creature* construct = me->GetCreature(*me, _constructGUID);
+ Creature* construct = ObjectAccessor::GetCreature(*me, _constructGUID);
if (construct && !construct->HasAura(SPELL_MOLTEN))
{
me->AddAura(SPELL_HEAT, construct);
@@ -417,7 +417,7 @@ class npc_scorch_ground : public CreatureScript
bool _heat;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_scorch_groundAI>(creature);
}
@@ -432,7 +432,7 @@ class spell_ignis_slag_pot : public SpellScriptLoader
{
PrepareAuraScript(spell_ignis_slag_pot_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SLAG_POT_DAMAGE)
|| !sSpellMgr->GetSpellInfo(SPELL_SLAG_IMBUED))
@@ -456,14 +456,14 @@ class spell_ignis_slag_pot : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), SPELL_SLAG_IMBUED, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_ignis_slag_pot_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
AfterEffectRemove += AuraEffectRemoveFn(spell_ignis_slag_pot_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_ignis_slag_pot_AuraScript();
}
@@ -474,10 +474,10 @@ class achievement_ignis_shattered : public AchievementCriteriaScript
public:
achievement_ignis_shattered() : AchievementCriteriaScript("achievement_ignis_shattered") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
if (target && target->IsAIEnabled)
- return target->GetAI()->GetData(DATA_SHATTERED);
+ return target->GetAI()->GetData(DATA_SHATTERED) != 0;
return false;
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
index 26886719ec8..71a89c0e508 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
@@ -117,7 +117,7 @@ class boss_kologarn : public CreatureScript
bool left, right;
uint64 eyebeamTarget;
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
@@ -135,14 +135,14 @@ class boss_kologarn : public CreatureScript
_EnterCombat();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
eyebeamTarget = 0;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
DoCast(SPELL_KOLOGARN_PACIFY);
@@ -152,13 +152,13 @@ class boss_kologarn : public CreatureScript
_JustDied();
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) OVERRIDE
+ void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override
{
bool isEncounterInProgress = instance->GetBossState(BOSS_KOLOGARN) == IN_PROGRESS;
if (who->GetEntry() == NPC_LEFT_ARM)
@@ -208,7 +208,7 @@ class boss_kologarn : public CreatureScript
}
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
switch (summon->GetEntry())
{
@@ -234,7 +234,7 @@ class boss_kologarn : public CreatureScript
// Victim gets 67351
if (eyebeamTarget)
{
- if (Unit* target = Unit::GetUnit(*summon, eyebeamTarget))
+ if (Unit* target = ObjectAccessor::GetUnit(*summon, eyebeamTarget))
{
summon->Attack(target, false);
summon->GetMotionMaster()->MoveChase(target);
@@ -242,7 +242,7 @@ class boss_kologarn : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -318,7 +318,7 @@ class boss_kologarn : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_kologarnAI>(creature);
}
@@ -345,13 +345,13 @@ class spell_ulduar_rubble_summon : public SpellScriptLoader
caster->CastSpell(caster, spellId, true, NULL, NULL, originalCaster);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_ulduar_rubble_summonSpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_ulduar_rubble_summonSpellScript();
}
@@ -387,7 +387,7 @@ class spell_ulduar_stone_grip_cast_target : public SpellScriptLoader
{
PrepareSpellScript(spell_ulduar_stone_grip_cast_target_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (GetCaster()->GetTypeId() != TYPEID_UNIT)
return false;
@@ -420,7 +420,7 @@ class spell_ulduar_stone_grip_cast_target : public SpellScriptLoader
unitList = _unitList;
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_ulduar_stone_grip_cast_target_SpellScript::FilterTargetsInitial, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_ulduar_stone_grip_cast_target_SpellScript::FillTargetsSubsequential, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
@@ -432,7 +432,7 @@ class spell_ulduar_stone_grip_cast_target : public SpellScriptLoader
std::list<WorldObject*> _unitList;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_ulduar_stone_grip_cast_target_SpellScript();
}
@@ -466,13 +466,13 @@ class spell_ulduar_cancel_stone_grip : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_ulduar_cancel_stone_gripSpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_ulduar_cancel_stone_gripSpellScript();
}
@@ -498,19 +498,19 @@ class spell_ulduar_squeezed_lifeless : public SpellScriptLoader
pos.m_positionX = 1756.25f + irand(-3, 3);
pos.m_positionY = -8.3f + irand(-3, 3);
pos.m_positionZ = 448.8f;
- pos.SetOrientation(M_PI);
+ pos.SetOrientation(float(M_PI));
GetHitPlayer()->DestroyForNearbyPlayers();
GetHitPlayer()->ExitVehicle(&pos);
GetHitPlayer()->UpdateObjectVisibility(false);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_ulduar_squeezed_lifeless_SpellScript::HandleInstaKill, EFFECT_1, SPELL_EFFECT_INSTAKILL);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_ulduar_squeezed_lifeless_SpellScript();
}
@@ -541,13 +541,13 @@ class spell_ulduar_stone_grip_absorb : public SpellScriptLoader
rubbleStalker->CastSpell(rubbleStalker, SPELL_STONE_GRIP_CANCEL, true);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_ulduar_stone_grip_absorb_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_ulduar_stone_grip_absorb_AuraScript();
}
@@ -587,21 +587,20 @@ class spell_ulduar_stone_grip : public SpellScriptLoader
// Temporarily relocate player to vehicle exit dest serverside to send proper fall movement
// beats me why blizzard sends these 2 spline packets one after another instantly
- Position oldPos;
- caster->GetPosition(&oldPos);
+ Position oldPos = caster->GetPosition();
caster->Relocate(exitPosition);
caster->GetMotionMaster()->MoveFall();
caster->Relocate(oldPos);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectRemove += AuraEffectRemoveFn(spell_ulduar_stone_grip_AuraScript::OnRemoveVehicle, EFFECT_0, SPELL_AURA_CONTROL_VEHICLE, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_ulduar_stone_grip_AuraScript::OnRemoveStun, EFFECT_2, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_ulduar_stone_grip_AuraScript();
}
@@ -621,13 +620,13 @@ class spell_kologarn_stone_shout : public SpellScriptLoader
unitList.remove_if(PlayerOrPetCheck());
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kologarn_stone_shout_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_kologarn_stone_shout_SpellScript();
}
@@ -648,14 +647,14 @@ class spell_kologarn_summon_focused_eyebeam : public SpellScriptLoader
GetCaster()->CastSpell(GetCaster(), GetSpellInfo()->Effects[effIndex].TriggerSpell, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_kologarn_summon_focused_eyebeam_SpellScript::HandleForceCast, EFFECT_0, SPELL_EFFECT_FORCE_CAST);
OnEffectHitTarget += SpellEffectFn(spell_kologarn_summon_focused_eyebeam_SpellScript::HandleForceCast, EFFECT_1, SPELL_EFFECT_FORCE_CAST);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_kologarn_summon_focused_eyebeam_SpellScript();
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
index f58ed4e83e5..69240866742 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
@@ -15,10 +15,16 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "Cell.h"
+#include "CellImpl.h"
+#include "GridNotifiers.h"
+#include "GridNotifiersImpl.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "SpellScript.h"
+#include "SpellAuraEffects.h"
#include "ulduar.h"
+#include "Vehicle.h"
enum Yells
{
@@ -39,78 +45,1413 @@ enum Yells
SAY_BERSERK = 14
};
+enum ComputerYells
+{
+ SAY_SELF_DESTRUCT_INITIATED = 0,
+ SAY_SELF_DESTRUCT_TERMINATED = 1,
+ SAY_SELF_DESTRUCT_10 = 2,
+ SAY_SELF_DESTRUCT_9 = 3,
+ SAY_SELF_DESTRUCT_8 = 4,
+ SAY_SELF_DESTRUCT_7 = 5,
+ SAY_SELF_DESTRUCT_6 = 6,
+ SAY_SELF_DESTRUCT_5 = 7,
+ SAY_SELF_DESTRUCT_4 = 8,
+ SAY_SELF_DESTRUCT_3 = 9,
+ SAY_SELF_DESTRUCT_2 = 10,
+ SAY_SELF_DESTRUCT_1 = 11,
+ SAY_SELF_DESTRUCT_FINALIZED = 12
+};
+
enum Spells
{
+ // Mimiron
+ SPELL_WELD = 63339, // Idle aura.
+ SPELL_SEAT_1 = 52391, // Cast on all vehicles, Cycled on MKII
+ SPELL_SEAT_2 = 63313, // Cast on MKII and VX-001, Cycled on MKII
+ SPELL_SEAT_3 = 63314, // Cast on MKII, Cycled on MKII
+ SPELL_SEAT_5 = 63316, // Cast on MKII and VX-001, Cycled on MKII
+ SPELL_SEAT_6 = 63344, // Cast on MKII
+ SPELL_SEAT_7 = 63345, // Cast on MKII
SPELL_JETPACK = 63341,
- SPELL_EMERGENCY_MODE = 64582,
- SPELL_SELF_REPAIR = 64383,
- SPELL_MAGNETIC_CORE = 64444,
+ SPELL_DESPAWN_ASSAULT_BOTS = 64463, // only despawns assault bots... no equivalent spell for the other adds...
+ SPELL_TELEPORT_VISUAL = 41232,
+ SPELL_SLEEP_VISUAL_1 = 64393,
+ SPELL_SLEEP_VISUAL_2 = 64394,
+
// Leviathan MK II
SPELL_FLAME_SUPPRESSANT_MK = 64570,
SPELL_NAPALM_SHELL = 63666,
- SPELL_PLASMA_BLAST = 62977,
- SPELL_PROXIMITY_MINES = 63027,
+ SPELL_FORCE_CAST_NAPALM_SHELL = 64539,
+ SPELL_PLASMA_BLAST = 62997,
+ SPELL_SCRIPT_EFFECT_PLASMA_BLAST = 64542,
SPELL_SHOCK_BLAST = 63631,
- // VX 001
+ SPELL_SHOCK_BLAST_AURA = 63632, // Deprecated? It is never cast.
+
+ // VX-001
SPELL_FLAME_SUPPRESSANT_VX = 65192,
- SPELL_FROSTBOMB = 64623,
- SPELL_HAND_PULSE = 64348,
SPELL_SPINNING_UP = 63414,
- SPELL_RAPID_BURST = 63387,
- SPELL_P3WX2_LASER_BARRAGE = 63293,
- SPELL_ROCKET_STRIKE = 63041,
- SPELL_HEAT_WAVE = 63677,
+ SPELL_HEAT_WAVE_AURA = 63679,
+ SPELL_HAND_PULSE_LEFT = 64348,
+ SPELL_HAND_PULSE_RIGHT = 64352,
+ SPELL_MOUNT_MKII = 64387,
+ SPELL_TORSO_DISABLED = 64120,
+
// Aerial Command Unit
- SPELL_PLASMA_BALL = 63689,
- // Additonal spells
- SPELL_MAGNETIC_FIELD = 64668,
- SPELL_DEAFENING_SIREN = 64616,
+ SPELL_PLASMA_BALL_P1 = 63689,
+ SPELL_PLASMA_BALL_P2 = 65647,
+ SPELL_MOUNT_VX_001 = 64388,
+
+ // Proximity Mines
+ SPELL_PROXIMITY_MINES = 63027, // Cast by Leviathan MK II
+ SPELL_PROXIMITY_MINE_EXPLOSION = 66351,
+ SPELL_PROXIMITY_MINE_TRIGGER = 65346,
+ SPELL_PROXIMITY_MINE_PERIODIC_TRIGGER = 65345,
+ SPELL_PERIODIC_PROXIMITY_AURA = 65345,
+ SPELL_SUMMON_PROXIMITY_MINE = 65347,
+
+ // Rapid Burst
+ SPELL_RAPID_BURST_LEFT = 63387,
+ SPELL_RAPID_BURST_RIGHT = 64019,
+ SPELL_RAPID_BURST = 63382, // Cast by VX-001
+ SPELL_RAPID_BURST_TARGET_ME = 64841, // Cast by Burst Target
+ SPELL_SUMMON_BURST_TARGET = 64840, // Cast by VX-001
+
+ // Rocket Strike
+ SPELL_SUMMON_ROCKET_STRIKE = 63036,
+ SPELL_SCRIPT_EFFECT_ROCKET_STRIKE = 63681, // Cast by Rocket (Mimiron Visual)
+ SPELL_ROCKET_STRIKE = 64064, // Added in creature_template_addon
+ SPELL_ROCKET_STRIKE_LEFT = 64402, // Cast by VX-001
+ SPELL_ROCKET_STRIKE_BOTH = 65034, // Cast by VX-001
+
+ // Flames
+ SPELL_FLAMES_PERIODIC_TRIGGER = 64561, // Added in creature_template_addon
+ SPELL_SUMMON_FLAMES_SPREAD_TRIGGER = 64562,
+ SPELL_SUMMON_FLAMES_INITIAL = 64563,
+ SPELL_SUMMON_FLAMES_SPREAD = 64564,
+ SPELL_FLAMES = 64566,
+ SPELL_SCRIPT_EFFECT_SUMMON_FLAMES_INITIAL = 64567,
+
+ // Frost Bomb
+ SPELL_SCRIPT_EFFECT_FROST_BOMB = 64623, // Cast by VX-001
+ SPELL_FROST_BOMB_LINKED = 64624, // Added in creature_template_addon
+ SPELL_FROST_BOMB_DUMMY = 64625,
+ SPELL_SUMMON_FROST_BOMB = 64627, // Cast by VX-001
+ SPELL_FROST_BOMB_EXPLOSION = 64626,
+ SPELL_CLEAR_FIRES = 65354,
+
+ // Bots
+ SPELL_SUMMON_FIRE_BOT = 64622,
+ SPELL_SUMMON_FIRE_BOT_DUMMY = 64621,
+ SPELL_SUMMON_FIRE_BOT_TRIGGER = 64620, // Cast by Areal Command Unit
+ SPELL_DEAFENING_SIREN = 64616, // Added in creature_template_addon
+ SPELL_FIRE_SEARCH_AURA = 64617, // Added in creature_template_addon
+ SPELL_FIRE_SEARCH = 64618,
SPELL_WATER_SPRAY = 64619,
- SPELL_FROST_BOMB_HARD_MODE = 64627,
- SPELL_EXPLOSION = 66351,
- SPELL_DISARM = 1842,
- SPELL_RIDE_VEHICLE = 46598,
- SPELL_TRIGGER_MISSILE = 65347,
+
+ SPELL_SUMMON_JUNK_BOT = 63819,
+ SPELL_SUMMON_JUNK_BOT_TRIGGER = 63820, // Cast by Areal Command Unit
+ SPELL_SUMMON_JUNK_BOT_DUMMY = 64398,
+
+ SPELL_SUMMON_ASSAULT_BOT_TRIGGER = 64425, // Cast by Areal Command Unit
+ SPELL_SUMMON_ASSAULT_BOT_DUMMY = 64426,
+ SPELL_SUMMON_ASSAULT_BOT = 64427,
+ SPELL_MAGNETIC_FIELD = 64668,
+
+ SPELL_SUMMON_BOMB_BOT = 63811, // Cast by Areal Command Unit
+ SPELL_BOMB_BOT_AURA = 63767, // Added in creature_template_addon
+
+ // Miscellaneous
+ SPELL_SELF_DESTRUCTION_AURA = 64610,
+ SPELL_SELF_DESTRUCTION_VISUAL = 64613,
+ SPELL_NOT_SO_FRIENDLY_FIRE = 65040,
+ SPELL_ELEVATOR_KNOCKBACK = 65096, // Cast by worldtrigger.
+ SPELL_VEHICLE_DAMAGED = 63415,
+ SPELL_EMERGENCY_MODE = 64582, // mkii, vx001, aerial, assault, junk
+ SPELL_EMERGENCY_MODE_TURRET = 65101, // Cast by Leviathan MK II, only hits Leviathan MK II turret
+ SPELL_SELF_REPAIR = 64383,
+ SPELL_MAGNETIC_CORE = 64436,
+ SPELL_MAGNETIC_CORE_VISUAL = 64438,
+ SPELL_HALF_HEAL = 64188,
+ SPELL_CLEAR_ALL_DEBUFFS = 34098, // TODO: make use of this spell...
+ SPELL_FREEZE_ANIM_STUN = 63354, // used to prevent mkii from doing stuff?..
+ SPELL_FREEZE_ANIM = 16245 // Idle aura. Freezes animation.
+};
+
+enum Data
+{
+ DATA_SETUP_MINE,
+ DATA_SETUP_BOMB,
+ DATA_SETUP_ROCKET,
+ DATA_NOT_SO_FRIENDLY_FIRE,
+ DATA_FIREFIGHTER,
+ DATA_WATERSPRAY,
+ DATA_MOVE_NEW
+};
+
+enum Events
+{
+ // Leviathan MK II
+ EVENT_PROXIMITY_MINE = 1,
+ EVENT_NAPALM_SHELL,
+ EVENT_PLASMA_BLAST,
+ EVENT_SHOCK_BLAST,
+ EVENT_FLAME_SUPPRESSANT_MK,
+ EVENT_MOVE_POINT_2,
+ EVENT_MOVE_POINT_3,
+ EVENT_MOVE_POINT_5,
+
+ // VX-001
+ EVENT_RAPID_BURST,
+ EVENT_SPINNING_UP,
+ EVENT_ROCKET_STRIKE,
+ EVENT_HAND_PULSE,
+ EVENT_FROST_BOMB,
+ EVENT_FLAME_SUPPRESSANT_VX,
+ EVENT_RELOAD,
+
+ // Aerial Command Unit
+ EVENT_SUMMON_FIRE_BOTS,
+ EVENT_SUMMON_JUNK_BOT,
+ EVENT_SUMMON_ASSAULT_BOT,
+ EVENT_SUMMON_BOMB_BOT,
+
+ // Mimiron
+ EVENT_SUMMON_FLAMES,
+ EVENT_INTRO_1,
+ EVENT_INTRO_2,
+ EVENT_INTRO_3,
+
+ EVENT_VX001_ACTIVATION_1,
+ EVENT_VX001_ACTIVATION_2,
+ EVENT_VX001_ACTIVATION_3,
+ EVENT_VX001_ACTIVATION_4,
+ EVENT_VX001_ACTIVATION_5,
+ EVENT_VX001_ACTIVATION_6,
+ EVENT_VX001_ACTIVATION_7,
+ EVENT_VX001_ACTIVATION_8,
+ EVENT_VX001_ACTIVATION_9,
+
+ EVENT_AERIAL_ACTIVATION_1,
+ EVENT_AERIAL_ACTIVATION_2,
+ EVENT_AERIAL_ACTIVATION_3,
+ EVENT_AERIAL_ACTIVATION_4,
+ EVENT_AERIAL_ACTIVATION_5,
+ EVENT_AERIAL_ACTIVATION_6,
+
+ EVENT_VOL7RON_ACTIVATION_1,
+ EVENT_VOL7RON_ACTIVATION_2,
+ EVENT_VOL7RON_ACTIVATION_3,
+ EVENT_VOL7RON_ACTIVATION_4,
+ EVENT_VOL7RON_ACTIVATION_5,
+ EVENT_VOL7RON_ACTIVATION_6,
+ EVENT_VOL7RON_ACTIVATION_7,
+
+ EVENT_OUTTRO_1,
+ EVENT_OUTTRO_2,
+ EVENT_OUTTRO_3,
+
+ // Computer
+ EVENT_SELF_DESTRUCT_10,
+ EVENT_SELF_DESTRUCT_9,
+ EVENT_SELF_DESTRUCT_8,
+ EVENT_SELF_DESTRUCT_7,
+ EVENT_SELF_DESTRUCT_6,
+ EVENT_SELF_DESTRUCT_5,
+ EVENT_SELF_DESTRUCT_4,
+ EVENT_SELF_DESTRUCT_3,
+ EVENT_SELF_DESTRUCT_2,
+ EVENT_SELF_DESTRUCT_1,
+ EVENT_SELF_DESTRUCT_FINALIZED,
+
+ // Misc
+ EVENT_MAGNETIC_FIELD,
+ EVENT_SPREAD_FLAMES,
+ EVENT_FROST_BOMB_EXPLOSION,
+ EVENT_FROST_BOMB_CLEAR_FIRES,
+ EVENT_PROXIMITY_MINE_ARM,
+ EVENT_PROXIMITY_MINE_DETONATION,
+ EVENT_SEARCH_FLAMES,
+ EVENT_WATER_SPRAY
+};
+
+enum Actions
+{
+ DO_START_MKII,
+ DO_HARDMODE_MKII,
+
+ DO_ACTIVATE_VX001,
+ DO_START_VX001,
+ DO_HARDMODE_VX001,
+
+ DO_ACTIVATE_AERIAL,
+ DO_START_AERIAL,
+ DO_HARDMODE_AERIAL,
+ DO_DISABLE_AERIAL,
+ DO_ENABLE_AERIAL,
+
+ DO_ACTIVATE_V0L7R0N_1,
+ DO_ACTIVATE_V0L7R0N_2,
+ DO_ASSEMBLED_COMBAT, // All 3 parts use this action, its done on purpose.
+
+ DO_ACTIVATE_HARD_MODE,
+ DO_ACTIVATE_COMPUTER,
+ DO_DEACTIVATE_COMPUTER,
+ DO_ACTIVATE_SELF_DESTRUCT,
+
+ DO_ENCOUNTER_DONE
};
-enum Npc
+enum Phases
{
- NPC_ASSAULT_BOT = 34057,
- NPC_BOMB_BOT = 33836,
- NPC_JUNK_BOT = 33855,
- NPC_EMERGENCE_FIRE_BOT = 34147,
- NPC_FROST_BOMB = 34149,
+ // Leviathan MK II
+ PHASE_LEVIATHAN_SOLO = 1,
+ PHASE_LEVIATHAN_ASSEMBLED,
+
+ // VX-001
+ PHASE_VX001_SOLO,
+ PHASE_VX001_ASSEMBLED,
+
+ // Aerial Command Unit
+ PHASE_AERIAL_SOLO,
+ PHASE_AERIAL_ASSEMBLED
+};
+
+uint32 const RepairSpells[4] =
+{
+ SPELL_SEAT_1,
+ SPELL_SEAT_2,
+ SPELL_SEAT_3,
+ SPELL_SEAT_5
+};
+
+// 63801 Bomb Bot
+class spell_mimiron_bomb_bot : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_bomb_bot() : SpellScriptLoader("spell_mimiron_bomb_bot") { }
+
+ class spell_mimiron_bomb_bot_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_bomb_bot_SpellScript);
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ if (GetHitPlayer())
+ if (InstanceScript* instance = GetCaster()->GetInstanceScript())
+ if (Creature* mkii = ObjectAccessor::GetCreature(*GetCaster(), instance->GetData64(DATA_LEVIATHAN_MK_II)))
+ mkii->AI()->SetData(DATA_SETUP_BOMB, 0);
+ }
+
+ void HandleDespawn(SpellEffIndex /*effIndex*/)
+ {
+ if (Creature* target = GetHitCreature())
+ {
+ target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED);
+ target->DespawnOrUnsummon(1000);
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_bomb_bot_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_bomb_bot_SpellScript::HandleDespawn, EFFECT_1, SPELL_EFFECT_APPLY_AURA);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_bomb_bot_SpellScript();
+ }
};
-class spell_ulduar_proximity_mines : public SpellScriptLoader
+// 65192 - Flame Suppressant, 65224 - Clear Fires, 65354 - Clear Fires, 64619 - Water Spray
+class spell_mimiron_clear_fires : public SpellScriptLoader
{
public:
- spell_ulduar_proximity_mines() : SpellScriptLoader("spell_ulduar_proximity_mines") { }
+ spell_mimiron_clear_fires() : SpellScriptLoader("spell_mimiron_clear_fires") { }
- class spell_ulduar_proximity_minesSpellScript : public SpellScript
+ class spell_mimiron_clear_fires_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_ulduar_proximity_minesSpellScript)
+ PrepareSpellScript(spell_mimiron_clear_fires_SpellScript);
- void HandleScript(SpellEffIndex effIndex)
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ if (GetHitCreature())
+ GetHitCreature()->DespawnOrUnsummon();
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_clear_fires_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_clear_fires_SpellScript();
+ }
+};
+
+// 64463 - Despawn Assault Bots
+class spell_mimiron_despawn_assault_bots : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_despawn_assault_bots() : SpellScriptLoader("spell_mimiron_despawn_assault_bots") { }
+
+ class spell_mimiron_despawn_assault_bots_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_despawn_assault_bots_SpellScript);
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ if (GetHitCreature())
+ GetHitCreature()->DespawnOrUnsummon();
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_despawn_assault_bots_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_despawn_assault_bots_SpellScript();
+ }
+};
+
+// 64618 - Fire Search
+class spell_mimiron_fire_search : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_fire_search() : SpellScriptLoader("spell_mimiron_fire_search") { }
+
+ class spell_mimiron_fire_search_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_fire_search_SpellScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_WATER_SPRAY))
+ return false;
+ return true;
+ }
+
+ bool Load() override
+ {
+ _noTarget = false;
+ return true;
+ }
+
+ void FilterTargets(std::list<WorldObject*>& targets)
+ {
+ _noTarget = targets.empty();
+ if (_noTarget)
+ return;
+
+ WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
+ targets.clear();
+ targets.push_back(target);
+ }
+
+ void HandleAftercast()
+ {
+ if (_noTarget)
+ GetCaster()->GetMotionMaster()->MoveRandom(15.0f);
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ Unit* caster = GetCaster();
+
+ if (UnitAI* ai = caster->GetAI())
+ {
+ if (caster->GetDistance2d(GetHitUnit()) <= 15.0f && ai->GetData(DATA_WATERSPRAY))
+ {
+ caster->CastSpell(GetHitUnit(), SPELL_WATER_SPRAY, true);
+ ai->SetData(DATA_WATERSPRAY, 0);
+ ai->SetData(DATA_MOVE_NEW, 1);
+ }
+ else if (caster->GetAI()->GetData(DATA_MOVE_NEW))
+ {
+ caster->GetMotionMaster()->MoveChase(GetHitUnit());
+ ai->SetData(DATA_MOVE_NEW, 0);
+ }
+ }
+ }
+
+ void Register() override
+ {
+ AfterCast += SpellCastFn(spell_mimiron_fire_search_SpellScript::HandleAftercast);
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_fire_search_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_fire_search_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+
+ private:
+ bool _noTarget;
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_fire_search_SpellScript();
+ }
+};
+
+// 64436 - Magnetic Core
+class spell_mimiron_magnetic_core : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_magnetic_core() : SpellScriptLoader("spell_mimiron_magnetic_core") { }
+
+ class spell_mimiron_magnetic_core_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_magnetic_core_SpellScript);
+
+ void FilterTargets(std::list<WorldObject*>& targets)
+ {
+ targets.remove_if([](WorldObject* obj) { return obj->ToUnit() && (obj->ToUnit()->GetVehicleBase() || obj->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)); });
+ }
+
+ void Register() override
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_magnetic_core_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENTRY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_magnetic_core_SpellScript();
+ }
+
+ class spell_mimiron_magnetic_core_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_mimiron_magnetic_core_AuraScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_MAGNETIC_CORE_VISUAL))
+ return false;
+ return true;
+ }
+
+ void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (Creature* target = GetTarget()->ToCreature())
+ {
+ target->GetAI()->DoAction(DO_DISABLE_AERIAL);
+ target->CastSpell(target, SPELL_MAGNETIC_CORE_VISUAL, true);
+ }
+ }
+
+ void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (Creature* target = GetTarget()->ToCreature())
+ {
+ target->GetAI()->DoAction(DO_ENABLE_AERIAL);
+ target->RemoveAurasDueToSpell(SPELL_MAGNETIC_CORE_VISUAL);
+ }
+ }
+
+ void OnRemoveSelf(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (TempSummon* summ = GetTarget()->ToTempSummon())
+ summ->DespawnOrUnsummon();
+ }
+
+ void Register() override
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_mimiron_magnetic_core_AuraScript::OnApply, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectRemove += AuraEffectRemoveFn(spell_mimiron_magnetic_core_AuraScript::OnRemove, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectRemove += AuraEffectRemoveFn(spell_mimiron_magnetic_core_AuraScript::OnRemoveSelf, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_mimiron_magnetic_core_AuraScript();
+ }
+};
+
+// 63667 - Napalm Shell
+class spell_mimiron_napalm_shell : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_napalm_shell() : SpellScriptLoader("spell_mimiron_napalm_shell") { }
+
+ class spell_mimiron_napalm_shell_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_napalm_shell_SpellScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_NAPALM_SHELL))
+ return false;
+ return true;
+ }
+
+ void FilterTargets(std::list<WorldObject*>& targets)
+ {
+ if (targets.empty())
+ return;
+
+ WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
+
+ targets.remove_if(Trinity::AllWorldObjectsInRange(GetCaster(), 15.0f));
+
+ if (!targets.empty())
+ target = Trinity::Containers::SelectRandomContainerElement(targets);
+
+ targets.clear();
+ targets.push_back(target);
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_NAPALM_SHELL);
+ }
+
+ void Register() override
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_napalm_shell_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_napalm_shell_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_napalm_shell_SpellScript();
+ }
+};
+
+// 63274 - P3Wx2 Laser Barrage -- HACK! Core will currently not set UNIT_FIELD_CHANNEL_OBJECT automatially if the spell targets more than a single target.
+class spell_mimiron_p3wx2_laser_barrage : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_p3wx2_laser_barrage() : SpellScriptLoader("spell_mimiron_p3wx2_laser_barrage") { }
+
+ class spell_mimiron_p3wx2_laser_barrage_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_p3wx2_laser_barrage_SpellScript);
+
+ void OnHit(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->SetUInt64Value(UNIT_FIELD_CHANNEL_OBJECT, GetHitUnit()->GetGUID());
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_p3wx2_laser_barrage_SpellScript::OnHit, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_p3wx2_laser_barrage_SpellScript();
+ }
+};
+
+// 64542 - Plasma Blast
+class spell_mimiron_plasma_blast : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_plasma_blast() : SpellScriptLoader("spell_mimiron_plasma_blast") { }
+
+ class spell_mimiron_plasma_blast_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_plasma_blast_SpellScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_PLASMA_BLAST))
+ return false;
+ return true;
+ }
+
+ bool Load() override
+ {
+ return GetCaster()->GetVehicleKit() != nullptr;
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ if (Unit* caster = GetCaster()->GetVehicleKit()->GetPassenger(3))
+ caster->CastSpell(GetHitUnit(), SPELL_PLASMA_BLAST);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_plasma_blast_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_plasma_blast_SpellScript();
+ }
+};
+
+// 66351 - Explosion
+class spell_mimiron_proximity_explosion : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_proximity_explosion() : SpellScriptLoader("spell_mimiron_proximity_explosion") { }
+
+ class spell_mimiron_proximity_explosion_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_proximity_explosion_SpellScript);
+
+ void OnHit(SpellEffIndex /*effIndex*/)
+ {
+ if (GetHitPlayer())
+ if (InstanceScript* instance = GetCaster()->GetInstanceScript())
+ if (Creature* mkII = ObjectAccessor::GetCreature(*GetCaster(), instance->GetData64(DATA_LEVIATHAN_MK_II)))
+ mkII->AI()->SetData(DATA_SETUP_MINE, 0);
+ }
+
+ void HandleAura(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->RemoveAurasDueToSpell(SPELL_PROXIMITY_MINE_PERIODIC_TRIGGER);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_proximity_explosion_SpellScript::OnHit, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_proximity_explosion_SpellScript::HandleAura, EFFECT_1, SPELL_EFFECT_APPLY_AURA);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_proximity_explosion_SpellScript();
+ }
+};
+
+// 63027 - Proximity Mines
+class spell_mimiron_proximity_mines : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_proximity_mines() : SpellScriptLoader("spell_mimiron_proximity_mines") { }
+
+ class spell_mimiron_proximity_mines_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_proximity_mines_SpellScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_PROXIMITY_MINE))
+ return false;
+ return true;
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
{
- PreventHitDefaultEffect(effIndex);
for (uint8 i = 0; i < 10; ++i)
- GetCaster()->CastSpell(GetCaster(), SPELL_TRIGGER_MISSILE, true);
+ GetCaster()->CastSpell(GetCaster(), SPELL_SUMMON_PROXIMITY_MINE, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_proximity_mines_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_proximity_mines_SpellScript();
+ }
+};
+
+// 65346 - Proximity Mine
+class spell_mimiron_proximity_trigger : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_proximity_trigger() : SpellScriptLoader("spell_mimiron_proximity_trigger") { }
+
+ class spell_mimiron_proximity_trigger_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_proximity_trigger_SpellScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_PROXIMITY_MINE_EXPLOSION))
+ return false;
+ return true;
+ }
+
+ void FilterTargets(std::list<WorldObject*>& targets)
+ {
+ targets.remove(GetExplTargetWorldObject());
+
+ if (targets.empty())
+ FinishCast(SPELL_FAILED_NO_VALID_TARGETS);
+ }
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->CastSpell((Unit*)NULL, SPELL_PROXIMITY_MINE_EXPLOSION, true);
+ }
+
+ void Register() override
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_proximity_trigger_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
+ OnEffectHit += SpellEffectFn(spell_mimiron_proximity_trigger_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_proximity_trigger_SpellScript();
+ }
+};
+
+// 63382 - Rapid Burst
+class spell_mimiron_rapid_burst : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_rapid_burst() : SpellScriptLoader("spell_mimiron_rapid_burst") { }
+
+ class spell_mimiron_rapid_burst_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_mimiron_rapid_burst_AuraScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_RAPID_BURST_LEFT) || !sSpellMgr->GetSpellInfo(SPELL_RAPID_BURST_RIGHT))
+ return false;
+ return true;
+ }
+
+ void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (TempSummon* summ = GetTarget()->ToTempSummon())
+ summ->DespawnOrUnsummon();
+ }
+
+ void HandleDummyTick(AuraEffect const* aurEff)
+ {
+ if (GetCaster())
+ GetCaster()->CastSpell(GetTarget(), aurEff->GetTickNumber() % 2 == 0 ? SPELL_RAPID_BURST_RIGHT : SPELL_RAPID_BURST_LEFT, true, NULL, aurEff);
+ }
+
+ void Register() override
+ {
+ AfterEffectRemove += AuraEffectApplyFn(spell_mimiron_rapid_burst_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_mimiron_rapid_burst_AuraScript::HandleDummyTick, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_mimiron_rapid_burst_AuraScript();
+ }
+};
+
+// 64402 - Rocket Strike, 65034 - Rocket Strike
+class spell_mimiron_rocket_strike : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_rocket_strike() : SpellScriptLoader("spell_mimiron_rocket_strike") { }
+
+ class spell_mimiron_rocket_strike_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_rocket_strike_SpellScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_SCRIPT_EFFECT_ROCKET_STRIKE))
+ return false;
+ return true;
+ }
+
+ void FilterTargets(std::list<WorldObject*>& targets)
+ {
+ if (targets.empty())
+ return;
+
+ if (m_scriptSpellId == SPELL_ROCKET_STRIKE_LEFT && GetCaster()->IsVehicle())
+ if (WorldObject* target = GetCaster()->GetVehicleKit()->GetPassenger(6))
+ {
+ targets.clear();
+ targets.push_back(target);
+ }
+ }
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ GetHitUnit()->CastSpell((Unit*)NULL, SPELL_SCRIPT_EFFECT_ROCKET_STRIKE, true, NULL, NULL, GetCaster()->GetGUID());
+ }
+
+ void Register() override
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_rocket_strike_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_rocket_strike_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_rocket_strike_SpellScript();
+ }
+};
+
+// 63041 - Rocket Strike
+class spell_mimiron_rocket_strike_damage : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_rocket_strike_damage() : SpellScriptLoader("spell_mimiron_rocket_strike_damage") { }
+
+ class spell_mimiron_rocket_strike_damage_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_rocket_strike_damage_SpellScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_NOT_SO_FRIENDLY_FIRE))
+ return false;
+ return true;
+ }
+
+ void HandleAfterCast()
+ {
+ if (TempSummon* summ = GetCaster()->ToTempSummon())
+ summ->DespawnOrUnsummon();
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ if (GetHitPlayer())
+ if (InstanceScript* instance = GetCaster()->GetInstanceScript())
+ if (Creature* mkii = ObjectAccessor::GetCreature(*GetCaster(), instance->GetData64(DATA_LEVIATHAN_MK_II)))
+ mkii->AI()->SetData(DATA_SETUP_ROCKET, 0);
+ }
+
+ void HandleFriendlyFire(SpellEffIndex /*effIndex*/)
+ {
+ GetHitUnit()->CastSpell((Unit*)NULL, SPELL_NOT_SO_FRIENDLY_FIRE, true);
+ }
+
+ void Register() override
+ {
+ AfterCast += SpellCastFn(spell_mimiron_rocket_strike_damage_SpellScript::HandleAfterCast);
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_rocket_strike_damage_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_rocket_strike_damage_SpellScript::HandleFriendlyFire, EFFECT_1, SPELL_EFFECT_SCHOOL_DAMAGE);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_rocket_strike_damage_SpellScript();
+ }
+};
+
+// 63681 - Rocket Strike
+class spell_mimiron_rocket_strike_target_select : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_rocket_strike_target_select() : SpellScriptLoader("spell_mimiron_rocket_strike_target_select") { }
+
+ class spell_mimiron_rocket_strike_target_select_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_rocket_strike_target_select_SpellScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_ROCKET_STRIKE))
+ return false;
+ return true;
+ }
+
+ void FilterTargets(std::list<WorldObject*>& targets)
+ {
+ if (targets.empty())
+ return;
+
+ WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
+
+ targets.remove_if(Trinity::AllWorldObjectsInRange(GetCaster(), 15.0f));
+
+ if (!targets.empty())
+ target = Trinity::Containers::SelectRandomContainerElement(targets);
+
+ targets.clear();
+ targets.push_back(target);
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ if (InstanceScript* instance = GetCaster()->GetInstanceScript())
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_SUMMON_ROCKET_STRIKE, true, NULL, NULL, instance->GetData64(DATA_VX_001));
+ GetCaster()->SetDisplayId(11686);
+ }
+
+ void Register() override
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_rocket_strike_target_select_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_rocket_strike_target_select_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_rocket_strike_target_select_SpellScript();
+ }
+};
+
+// 64383 - Self Repair
+class spell_mimiron_self_repair : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_self_repair() : SpellScriptLoader("spell_mimiron_self_repair") { }
+
+ class spell_mimiron_self_repair_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_self_repair_SpellScript);
+
+ void HandleScript()
+ {
+ if (GetCaster()->GetAI())
+ GetCaster()->GetAI()->DoAction(DO_ASSEMBLED_COMBAT);
+ }
+
+ void Register() override
+ {
+ AfterHit += SpellHitFn(spell_mimiron_self_repair_SpellScript::HandleScript);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_self_repair_SpellScript();
+ }
+};
+
+// 63414 - Spinning Up -- HACK! Core will currently not set UNIT_FIELD_CHANNEL_OBJECT automatially if the spell targets more than a single target.
+// eff0 will hit both caster and target due to hack in spellmgr.cpp, it is necessary because caster will interrupt itself if aura is not active on caster.
+class spell_mimiron_spinning_up : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_spinning_up() : SpellScriptLoader("spell_mimiron_spinning_up") { }
+
+ class spell_mimiron_spinning_up_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_spinning_up_SpellScript);
+
+ void OnHit(SpellEffIndex /*effIndex*/)
+ {
+ if (GetHitUnit() != GetCaster())
+ GetCaster()->SetUInt64Value(UNIT_FIELD_CHANNEL_OBJECT, GetHitUnit()->GetGUID());
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_spinning_up_SpellScript::OnHit, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_spinning_up_SpellScript();
+ }
+};
+
+// 64426 - Summon Scrap Bot
+class spell_mimiron_summon_assault_bot : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_summon_assault_bot() : SpellScriptLoader("spell_mimiron_summon_assault_bot") { }
+
+ class spell_mimiron_summon_assault_bot_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_mimiron_summon_assault_bot_AuraScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_ASSAULT_BOT))
+ return false;
+ return true;
+ }
+
+ void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ {
+ if (Unit* caster = GetCaster())
+ if (InstanceScript* instance = caster->GetInstanceScript())
+ if (instance->GetBossState(BOSS_MIMIRON) == IN_PROGRESS)
+ caster->CastSpell(caster, SPELL_SUMMON_ASSAULT_BOT, false, NULL, aurEff, instance->GetData64(DATA_AERIAL_COMMAND_UNIT));
+ }
+
+ void Register() override
+ {
+ OnEffectRemove += AuraEffectRemoveFn(spell_mimiron_summon_assault_bot_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_mimiron_summon_assault_bot_AuraScript();
+ }
+};
+
+// 64425 - Summon Scrap Bot Trigger
+class spell_mimiron_summon_assault_bot_target : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_summon_assault_bot_target() : SpellScriptLoader("spell_mimiron_summon_assault_bot_target") { }
+
+ class spell_mimiron_summon_assault_bot_target_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_summon_assault_bot_target_SpellScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_ASSAULT_BOT_DUMMY))
+ return false;
+ return true;
+ }
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ GetHitUnit()->CastSpell(GetHitUnit(), SPELL_SUMMON_ASSAULT_BOT_DUMMY, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_summon_assault_bot_target_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_summon_assault_bot_target_SpellScript();
+ }
+};
+
+// 64621 - Summon Fire Bot
+class spell_mimiron_summon_fire_bot : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_summon_fire_bot() : SpellScriptLoader("spell_mimiron_summon_fire_bot") { }
+
+ class spell_mimiron_summon_fire_bot_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_mimiron_summon_fire_bot_AuraScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_FIRE_BOT))
+ return false;
+
+ return true;
+ }
+
+ void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ {
+ if (Unit* caster = GetCaster())
+ if (InstanceScript* instance = caster->GetInstanceScript())
+ if (instance->GetBossState(BOSS_MIMIRON) == IN_PROGRESS)
+ caster->CastSpell(caster, SPELL_SUMMON_FIRE_BOT, false, NULL, aurEff, instance->GetData64(DATA_AERIAL_COMMAND_UNIT));
+ }
+
+ void Register() override
+ {
+ OnEffectRemove += AuraEffectRemoveFn(spell_mimiron_summon_fire_bot_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_mimiron_summon_fire_bot_AuraScript();
+ }
+};
+
+// 64620 - Summon Fire Bot Trigger
+class spell_mimiron_summon_fire_bot_target : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_summon_fire_bot_target() : SpellScriptLoader("spell_mimiron_summon_fire_bot_target") { }
+
+ class spell_mimiron_summon_fire_bot_target_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_summon_fire_bot_target_SpellScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_FIRE_BOT_DUMMY))
+ return false;
+ return true;
+ }
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ GetHitUnit()->CastSpell(GetHitUnit(), SPELL_SUMMON_FIRE_BOT_DUMMY, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_summon_fire_bot_target_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_summon_fire_bot_target_SpellScript();
+ }
+};
+
+// 64562 - Summon Flames Spread Trigger
+class spell_mimiron_summon_flames_spread : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_summon_flames_spread() : SpellScriptLoader("spell_mimiron_summon_flames_spread") { }
+
+ class spell_mimiron_summon_flames_spread_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_summon_flames_spread_SpellScript);
+
+ void FilterTargets(std::list<WorldObject*>& targets)
+ {
+ if (targets.empty())
+ return;
+
+ // Flames must chase the closest player
+ WorldObject* target = targets.front();
+
+ for (std::list<WorldObject*>::const_iterator iter = targets.begin(); iter != targets.end(); ++iter)
+ if (GetCaster()->GetDistance2d(*iter) < GetCaster()->GetDistance2d(target))
+ target = *iter;
+
+ targets.clear();
+ targets.push_back(target);
+ }
+
+ void OnHit(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->SetInFront(GetHitUnit());
+ }
+
+ void Register() override
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_summon_flames_spread_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_summon_flames_spread_SpellScript::OnHit, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_summon_flames_spread_SpellScript();
+ }
+
+ class spell_mimiron_summon_flames_spread_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_mimiron_summon_flames_spread_AuraScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_FLAMES_SPREAD))
+ return false;
+ return true;
+ }
+
+ void HandleTick(AuraEffect const* /*aurEff*/)
+ {
+ PreventDefaultAction();
+ if (Unit* caster = GetCaster())
+ if (caster->HasAura(SPELL_FLAMES_PERIODIC_TRIGGER))
+ caster->CastSpell(GetTarget(), SPELL_SUMMON_FLAMES_SPREAD, true);
+ }
+
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_mimiron_summon_flames_spread_AuraScript::HandleTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_mimiron_summon_flames_spread_AuraScript();
+ }
+};
+
+// 64623 - Frost Bomb
+class spell_mimiron_summon_frost_bomb_target : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_summon_frost_bomb_target() : SpellScriptLoader("spell_mimiron_summon_frost_bomb_target") { }
+
+ class spell_mimiron_summon_frost_bomb_target_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_summon_frost_bomb_target_SpellScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_FROST_BOMB))
+ return false;
+ return true;
+ }
+
+ void FilterTargets(std::list<WorldObject*>& targets)
+ {
+ if (targets.empty())
+ return;
+
+ targets.remove_if(Trinity::AllWorldObjectsInRange(GetCaster(), 15.0f));
+
+ if (targets.empty())
+ return;
+
+ WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
+
+ targets.clear();
+ targets.push_back(target);
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_SUMMON_FROST_BOMB, true);
+ }
+
+ void Register() override
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_summon_frost_bomb_target_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_summon_frost_bomb_target_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_summon_frost_bomb_target_SpellScript();
+ }
+};
+
+// 64398 - Summon Scrap Bot
+class spell_mimiron_summon_junk_bot : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_summon_junk_bot() : SpellScriptLoader("spell_mimiron_summon_junk_bot") { }
+
+ class spell_mimiron_summon_junk_bot_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_mimiron_summon_junk_bot_AuraScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_JUNK_BOT))
+ return false;
+ return true;
+ }
+
+ void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ {
+ if (Unit* caster = GetCaster())
+ if (InstanceScript* instance = caster->GetInstanceScript())
+ if (instance->GetBossState(BOSS_MIMIRON) == IN_PROGRESS)
+ caster->CastSpell(caster, SPELL_SUMMON_JUNK_BOT, false, NULL, aurEff, instance->GetData64(DATA_AERIAL_COMMAND_UNIT));
+ }
+
+ void Register() override
+ {
+ OnEffectRemove += AuraEffectRemoveFn(spell_mimiron_summon_junk_bot_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_mimiron_summon_junk_bot_AuraScript();
+ }
+};
+
+// 63820 - Summon Scrap Bot Trigger
+class spell_mimiron_summon_junk_bot_target : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_summon_junk_bot_target() : SpellScriptLoader("spell_mimiron_summon_junk_bot_target") { }
+
+ class spell_mimiron_summon_junk_bot_target_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mimiron_summon_junk_bot_target_SpellScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_JUNK_BOT_DUMMY))
+ return false;
+ return true;
+ }
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ GetHitUnit()->CastSpell(GetHitUnit(), SPELL_SUMMON_JUNK_BOT_DUMMY, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_mimiron_summon_junk_bot_target_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_mimiron_summon_junk_bot_target_SpellScript();
+ }
+};
+
+// 63339 - Weld
+class spell_mimiron_weld : public SpellScriptLoader
+{
+ public:
+ spell_mimiron_weld() : SpellScriptLoader("spell_mimiron_weld") { }
+
+ class spell_mimiron_weld_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_mimiron_weld_AuraScript);
+
+ void HandleTick(AuraEffect const* aurEff)
+ {
+ Unit* caster = GetTarget();
+ if (Unit* vehicle = caster->GetVehicleBase())
+ {
+ if (aurEff->GetTickNumber() % 5 == 0)
+ caster->CastSpell(vehicle, RepairSpells[urand(0, 3)]);
+ caster->SetFacingToObject(vehicle);
+ }
}
- void Register() OVERRIDE
+ void Register() override
{
- OnEffectHitTarget += SpellEffectFn(spell_ulduar_proximity_minesSpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_mimiron_weld_AuraScript::HandleTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
- return new spell_ulduar_proximity_minesSpellScript();
+ return new spell_mimiron_weld_AuraScript();
}
};
void AddSC_boss_mimiron()
{
- new spell_ulduar_proximity_mines();
+ new spell_mimiron_bomb_bot();
+ new spell_mimiron_clear_fires();
+ new spell_mimiron_despawn_assault_bots();
+ new spell_mimiron_fire_search();
+ new spell_mimiron_magnetic_core();
+ new spell_mimiron_napalm_shell();
+ new spell_mimiron_p3wx2_laser_barrage();
+ new spell_mimiron_plasma_blast();
+ new spell_mimiron_proximity_explosion();
+ new spell_mimiron_proximity_mines();
+ new spell_mimiron_proximity_trigger();
+ new spell_mimiron_rapid_burst();
+ new spell_mimiron_rocket_strike();
+ new spell_mimiron_rocket_strike_damage();
+ new spell_mimiron_rocket_strike_target_select();
+ new spell_mimiron_self_repair();
+ new spell_mimiron_spinning_up();
+ new spell_mimiron_summon_assault_bot();
+ new spell_mimiron_summon_assault_bot_target();
+ new spell_mimiron_summon_fire_bot();
+ new spell_mimiron_summon_fire_bot_target();
+ new spell_mimiron_summon_flames_spread();
+ new spell_mimiron_summon_frost_bomb_target();
+ new spell_mimiron_summon_junk_bot();
+ new spell_mimiron_summon_junk_bot_target();
+ new spell_mimiron_weld();
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
index d1ed15bf8dd..399113e18c8 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
@@ -192,13 +192,13 @@ class boss_razorscale_controller : public CreatureScript
me->SetDisplayId(me->GetCreatureTemplate()->Modelid2);
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
me->SetReactState(REACT_PASSIVE);
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
switch (spell->Id)
{
@@ -223,12 +223,12 @@ class boss_razorscale_controller : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (instance->GetBossState(BOSS_RAZORSCALE) != IN_PROGRESS)
return;
@@ -247,7 +247,7 @@ class boss_razorscale_controller : public CreatureScript
}
}
- void UpdateAI(uint32 Diff) OVERRIDE
+ void UpdateAI(uint32 Diff) override
{
events.Update(Diff);
@@ -298,7 +298,7 @@ class boss_razorscale_controller : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_razorscale_controllerAI>(creature);
}
@@ -309,7 +309,7 @@ class go_razorscale_harpoon : public GameObjectScript
public:
go_razorscale_harpoon() : GameObjectScript("go_razorscale_harpoon") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
InstanceScript* instance = go->GetInstanceScript();
if (ObjectAccessor::GetCreature(*go, instance->GetData64(BOSS_RAZORSCALE)))
@@ -339,7 +339,7 @@ class boss_razorscale : public CreatureScript
bool PermaGround;
bool Enraged;
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
me->SetCanFly(true);
@@ -351,7 +351,7 @@ class boss_razorscale : public CreatureScript
commander->AI()->DoAction(ACTION_COMMANDER_RESET);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_RAZORSCALE_CONTROL)))
@@ -366,20 +366,20 @@ class boss_razorscale : public CreatureScript
events.ScheduleEvent(EVENT_FLIGHT, 0, 0, PHASE_GROUND);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_RAZORSCALE_CONTROL)))
controller->AI()->Reset();
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_HARPOON_TRIGGER)
++HarpoonCounter;
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == EFFECT_MOTION_TYPE && id == 1)
{
@@ -389,7 +389,7 @@ class boss_razorscale : public CreatureScript
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_QUICK_SHAVE)
if (FlyCount <= 2)
@@ -398,7 +398,7 @@ class boss_razorscale : public CreatureScript
return 0;
}
- void UpdateAI(uint32 Diff) OVERRIDE
+ void UpdateAI(uint32 Diff) override
{
if (!UpdateVictim())
return;
@@ -566,7 +566,7 @@ class boss_razorscale : public CreatureScript
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -579,7 +579,7 @@ class boss_razorscale : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_razorscaleAI>(creature);
}
@@ -607,7 +607,7 @@ class npc_expedition_commander : public CreatureScript
Creature* Engineer[4];
Creature* Defender[4];
- void Reset() OVERRIDE
+ void Reset() override
{
AttackStartTimer = 0;
Phase = 0;
@@ -615,7 +615,7 @@ class npc_expedition_commander : public CreatureScript
summons.clear();
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!Greet && me->IsWithinDistInMap(who, 10.0f) && who->GetTypeId() == TYPEID_PLAYER)
@@ -625,12 +625,12 @@ class npc_expedition_commander : public CreatureScript
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summons.push_back(summoned->GetGUID());
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -644,7 +644,7 @@ class npc_expedition_commander : public CreatureScript
}
}
- void UpdateAI(uint32 Diff) OVERRIDE
+ void UpdateAI(uint32 Diff) override
{
if (AttackStartTimer <= Diff)
{
@@ -704,20 +704,20 @@ class npc_expedition_commander : public CreatureScript
}
};
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
{
case GOSSIP_ACTION_INFO_DEF:
player->CLOSE_GOSSIP_MENU();
- CAST_AI(npc_expedition_commanderAI, creature->AI())->Phase = 1;
+ ENSURE_AI(npc_expedition_commanderAI, creature->AI())->Phase = 1;
break;
}
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
InstanceScript* instance = creature->GetInstanceScript();
if (instance && instance->GetBossState(BOSS_RAZORSCALE) == NOT_STARTED)
@@ -733,7 +733,7 @@ class npc_expedition_commander : public CreatureScript
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_expedition_commanderAI>(creature);
}
@@ -758,7 +758,7 @@ class npc_mole_machine_trigger : public CreatureScript
bool GobSummoned;
bool NpcSummoned;
- void Reset() OVERRIDE
+ void Reset() override
{
SummonGobTimer = 2000;
SummonNpcTimer = 6000;
@@ -767,7 +767,7 @@ class npc_mole_machine_trigger : public CreatureScript
NpcSummoned = false;
}
- void UpdateAI(uint32 Diff) OVERRIDE
+ void UpdateAI(uint32 Diff) override
{
if (!GobSummoned && SummonGobTimer <= Diff)
{
@@ -807,13 +807,13 @@ class npc_mole_machine_trigger : public CreatureScript
DissapearTimer -= Diff;
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->AI()->DoZoneInCombat();
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_mole_machine_triggerAI(creature);
}
@@ -832,13 +832,13 @@ class npc_devouring_flame : public CreatureScript
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED);
}
- void Reset() OVERRIDE
+ void Reset() override
{
DoCast(SPELL_FLAME_GROUND);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_devouring_flameAI(creature);
}
@@ -856,13 +856,13 @@ class npc_darkrune_watcher : public CreatureScript
uint32 ChainTimer;
uint32 LightTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
ChainTimer = urand(10000, 15000);
LightTimer = urand(1000, 3000);
}
- void UpdateAI(uint32 Diff) OVERRIDE
+ void UpdateAI(uint32 Diff) override
{
if (!UpdateVictim())
return;
@@ -887,7 +887,7 @@ class npc_darkrune_watcher : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_darkrune_watcherAI(creature);
}
@@ -904,25 +904,25 @@ class npc_darkrune_guardian : public CreatureScript
uint32 StormTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
StormTimer = urand(3000, 6000);
killedByBreath = false;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
return type == DATA_IRON_DWARF_MEDIUM_RARE ? killedByBreath : 0;
}
- void SetData(uint32 type, uint32 value) OVERRIDE
+ void SetData(uint32 type, uint32 value) override
{
if (type == DATA_IRON_DWARF_MEDIUM_RARE)
- killedByBreath = value;
+ killedByBreath = value != 0;
}
- void UpdateAI(uint32 Diff) OVERRIDE
+ void UpdateAI(uint32 Diff) override
{
if (!UpdateVictim())
return;
@@ -942,7 +942,7 @@ class npc_darkrune_guardian : public CreatureScript
bool killedByBreath;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_darkrune_guardianAI(creature);
}
@@ -961,14 +961,14 @@ class npc_darkrune_sentinel : public CreatureScript
uint32 WhirlTimer;
uint32 ShoutTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
HeroicTimer = urand(4000, 8000);
WhirlTimer = urand(20000, 25000);
ShoutTimer = urand(15000, 30000);
}
- void UpdateAI(uint32 Diff) OVERRIDE
+ void UpdateAI(uint32 Diff) override
{
if (!UpdateVictim())
return;
@@ -1001,7 +1001,7 @@ class npc_darkrune_sentinel : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_darkrune_sentinelAI(creature);
}
@@ -1028,13 +1028,13 @@ class spell_razorscale_devouring_flame : public SpellScriptLoader
caster->SummonCreature(entry, summonLocation->GetPositionX(), summonLocation->GetPositionY(), GROUND_Z, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 20000);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_razorscale_devouring_flame_SpellScript::HandleSummon, EFFECT_0, SPELL_EFFECT_SUMMON);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_razorscale_devouring_flame_SpellScript();
}
@@ -1059,13 +1059,13 @@ class spell_razorscale_flame_breath : public SpellScriptLoader
target->AI()->SetData(DATA_IRON_DWARF_MEDIUM_RARE, 1);
}
- void Register() OVERRIDE
+ void Register() override
{
OnHit += SpellHitFn(spell_razorscale_flame_breath_SpellScript::CheckDamage);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_razorscale_flame_breath_SpellScript();
}
@@ -1078,7 +1078,7 @@ class achievement_iron_dwarf_medium_rare : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
return target && target->IsAIEnabled && target->GetAI()->GetData(DATA_IRON_DWARF_MEDIUM_RARE);
}
@@ -1089,7 +1089,7 @@ class achievement_quick_shave : public AchievementCriteriaScript
public:
achievement_quick_shave() : AchievementCriteriaScript("achievement_quick_shave") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
if (target)
if (Creature* razorscale = target->ToCreature())
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
index 73b644f3021..0364a113491 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
@@ -49,36 +49,36 @@ class boss_thorim : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
Talk(SAY_WIPE);
_EnterEvadeMode();
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
_JustDied();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
_EnterCombat();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -91,7 +91,7 @@ class boss_thorim : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_thorimAI>(creature);
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
index ee87e3e9732..8520e317ba3 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
@@ -192,7 +192,7 @@ class boss_xt002 : public CreatureScript
public:
boss_xt002() : CreatureScript("boss_xt002") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_xt002_AI>(creature);
}
@@ -203,7 +203,7 @@ class boss_xt002 : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
@@ -221,7 +221,7 @@ class boss_xt002 : public CreatureScript
instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_MUST_DECONSTRUCT_FASTER);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
_EnterCombat();
@@ -235,7 +235,7 @@ class boss_xt002 : public CreatureScript
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_MUST_DECONSTRUCT_FASTER);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -245,25 +245,25 @@ class boss_xt002 : public CreatureScript
}
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
_JustDied();
}
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
if (!_hardMode && _phase == 1 && !HealthAbovePct(100 - 25 * (_heartExposed+1)))
ExposeHeart();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || !CheckInRoom())
return;
@@ -316,7 +316,7 @@ class boss_xt002 : public CreatureScript
DoMeleeAttackIfReady();
}
- void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) OVERRIDE
+ void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override
{
if (apply && who->GetEntry() == NPC_XS013_SCRAPBOT)
{
@@ -329,7 +329,7 @@ class boss_xt002 : public CreatureScript
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -344,7 +344,7 @@ class boss_xt002 : public CreatureScript
return 0;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -453,11 +453,11 @@ class npc_xt002_heart : public CreatureScript
SetCombatMovement(false);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
- Creature* xt002 = _instance ? me->GetCreature(*me, _instance->GetData64(BOSS_XT002)) : NULL;
+ Creature* xt002 = _instance ? ObjectAccessor::GetCreature(*me, _instance->GetData64(BOSS_XT002)) : NULL;
if (!xt002 || !xt002->AI())
return;
@@ -469,7 +469,7 @@ class npc_xt002_heart : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_xt002_heartAI>(creature);
}
@@ -485,7 +485,7 @@ class npc_scrapbot : public CreatureScript
public:
npc_scrapbot() : CreatureScript("npc_scrapbot") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_scrapbotAI>(creature);
}
@@ -497,21 +497,21 @@ class npc_scrapbot : public CreatureScript
_instance = me->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetReactState(REACT_PASSIVE);
_rangeCheckTimer = 500;
- if (Creature* pXT002 = me->GetCreature(*me, _instance->GetData64(BOSS_XT002)))
+ if (Creature* pXT002 = ObjectAccessor::GetCreature(*me, _instance->GetData64(BOSS_XT002)))
me->GetMotionMaster()->MoveFollow(pXT002, 0.0f, 0.0f);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_rangeCheckTimer <= diff)
{
- if (Creature* xt002 = me->GetCreature(*me, _instance->GetData64(BOSS_XT002)))
+ if (Creature* xt002 = ObjectAccessor::GetCreature(*me, _instance->GetData64(BOSS_XT002)))
{
if (me->IsWithinMeleeRange(xt002))
{
@@ -542,7 +542,7 @@ class npc_pummeller : public CreatureScript
public:
npc_pummeller() : CreatureScript("npc_pummeller") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_pummellerAI>(creature);
}
@@ -554,21 +554,20 @@ class npc_pummeller : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_arcingSmashTimer = TIMER_ARCING_SMASH;
_trampleTimer = TIMER_TRAMPLE;
_uppercutTimer = TIMER_UPPERCUT;
- if (Creature* xt002 = me->GetCreature(*me, _instance->GetData64(BOSS_XT002)))
+ if (Creature* xt002 = ObjectAccessor::GetCreature(*me, _instance->GetData64(BOSS_XT002)))
{
- Position pos;
- xt002->GetPosition(&pos);
+ Position pos = xt002->GetPosition();
me->GetMotionMaster()->MovePoint(0, pos);
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -644,7 +643,7 @@ class npc_boombot : public CreatureScript
public:
npc_boombot() : CreatureScript("npc_boombot") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_boombotAI>(creature);
}
@@ -656,7 +655,7 @@ class npc_boombot : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_boomed = false;
@@ -669,11 +668,11 @@ class npc_boombot : public CreatureScript
me->SetFloatValue(UNIT_FIELD_MAXDAMAGE, 18000.0f);
/// @todo proper waypoints?
- if (Creature* pXT002 = me->GetCreature(*me, _instance->GetData64(BOSS_XT002)))
+ if (Creature* pXT002 = ObjectAccessor::GetCreature(*me, _instance->GetData64(BOSS_XT002)))
me->GetMotionMaster()->MoveFollow(pXT002, 0.0f, 0.0f);
}
- void DamageTaken(Unit* /*who*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*who*/, uint32& damage) override
{
if (damage >= (me->GetHealth() - me->GetMaxHealth() * 0.5f) && !_boomed)
{
@@ -698,7 +697,7 @@ class npc_boombot : public CreatureScript
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
return;
@@ -723,7 +722,7 @@ class npc_life_spark : public CreatureScript
public:
npc_life_spark() : CreatureScript("npc_life_spark") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_life_sparkAI(creature);
}
@@ -734,13 +733,13 @@ class npc_life_spark : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
DoCast(me, RAID_MODE(SPELL_STATIC_CHARGED_10, SPELL_STATIC_CHARGED_25));
_shockTimer = 0; // first one is immediate.
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -770,7 +769,7 @@ class spell_xt002_searing_light_spawn_life_spark : public SpellScriptLoader
{
PrepareAuraScript(spell_xt002_searing_light_spawn_life_spark_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_LIFE_SPARK))
return false;
@@ -785,13 +784,13 @@ class spell_xt002_searing_light_spawn_life_spark : public SpellScriptLoader
player->CastSpell(player, SPELL_SUMMON_LIFE_SPARK, true);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_xt002_searing_light_spawn_life_spark_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_xt002_searing_light_spawn_life_spark_AuraScript();
}
@@ -806,7 +805,7 @@ class spell_xt002_gravity_bomb_aura : public SpellScriptLoader
{
PrepareAuraScript(spell_xt002_gravity_bomb_aura_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_VOID_ZONE))
return false;
@@ -836,14 +835,14 @@ class spell_xt002_gravity_bomb_aura : public SpellScriptLoader
xt002->GetAI()->SetData(DATA_GRAVITY_BOMB_CASUALTY, 1);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_xt002_gravity_bomb_aura_AuraScript::OnPeriodic, EFFECT_2, SPELL_AURA_PERIODIC_DAMAGE);
AfterEffectRemove += AuraEffectRemoveFn(spell_xt002_gravity_bomb_aura_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_xt002_gravity_bomb_aura_AuraScript();
}
@@ -869,13 +868,13 @@ class spell_xt002_gravity_bomb_damage : public SpellScriptLoader
caster->GetAI()->SetData(DATA_GRAVITY_BOMB_CASUALTY, 1);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_xt002_gravity_bomb_damage_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_xt002_gravity_bomb_damage_SpellScript();
}
@@ -890,7 +889,7 @@ class spell_xt002_heart_overload_periodic : public SpellScriptLoader
{
PrepareSpellScript(spell_xt002_heart_overload_periodic_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ENERGY_ORB))
return false;
@@ -936,13 +935,13 @@ class spell_xt002_heart_overload_periodic : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_xt002_heart_overload_periodic_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_xt002_heart_overload_periodic_SpellScript();
}
@@ -967,7 +966,7 @@ class spell_xt002_tympanic_tantrum : public SpellScriptLoader
SetHitDamage(GetHitUnit()->CountPctFromMaxHealth(GetHitDamage()));
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_xt002_tympanic_tantrum_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_xt002_tympanic_tantrum_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
@@ -975,7 +974,7 @@ class spell_xt002_tympanic_tantrum : public SpellScriptLoader
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_xt002_tympanic_tantrum_SpellScript();
}
@@ -1000,13 +999,13 @@ class spell_xt002_submerged : public SpellScriptLoader
target->SetByteValue(UNIT_FIELD_BYTES_1, 0, UNIT_STAND_STATE_SUBMERGED);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_xt002_submerged_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_xt002_submerged_SpellScript();
}
@@ -1031,13 +1030,13 @@ class spell_xt002_stand : public SpellScriptLoader
target->SetByteValue(UNIT_FIELD_BYTES_1, 0, UNIT_STAND_STATE_STAND);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_xt002_stand_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_xt002_stand_SpellScript();
}
@@ -1048,7 +1047,7 @@ class achievement_nerf_engineering : public AchievementCriteriaScript
public:
achievement_nerf_engineering() : AchievementCriteriaScript("achievement_nerf_engineering") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
if (!target || !target->GetAI())
return false;
@@ -1062,12 +1061,12 @@ class achievement_heartbreaker : public AchievementCriteriaScript
public:
achievement_heartbreaker() : AchievementCriteriaScript("achievement_heartbreaker") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
if (!target || !target->GetAI())
return false;
- return target->GetAI()->GetData(DATA_HARD_MODE);
+ return target->GetAI()->GetData(DATA_HARD_MODE) != 0;
}
};
@@ -1076,7 +1075,7 @@ class achievement_nerf_gravity_bombs : public AchievementCriteriaScript
public:
achievement_nerf_gravity_bombs() : AchievementCriteriaScript("achievement_nerf_gravity_bombs") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
if (!target || !target->GetAI())
return false;
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
index 5e44d97299e..2471b705b90 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
@@ -430,7 +430,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
SetCombatMovement(false);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
// TODO: MoveInLineOfSight doesn't work for such a big distance
@@ -438,7 +438,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
me->SetInCombatWithZone();
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
BossAI::EnterEvadeMode();
@@ -459,7 +459,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
}
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
events.SetPhase(PHASE_ONE);
@@ -482,7 +482,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (Creature* sara = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SARA)))
sara->SetInCombatWith(me);
@@ -501,7 +501,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
events.ScheduleEvent(EVENT_EXTINGUISH_ALL_LIFE, 900000); // 15 minutes
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
// don't despawn Yogg-Saron's corpse, remove him from SummonList!
if (Creature* yogg = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_YOGG_SARON)))
@@ -510,7 +510,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
BossAI::JustDied(killer);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -585,7 +585,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -615,7 +615,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
}
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
switch (summon->GetEntry())
{
@@ -651,7 +651,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
bool _illusionShattered;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_voice_of_yogg_saronAI>(creature);
}
@@ -687,7 +687,7 @@ class boss_sara : public CreatureScript
_linkData.erase(player1);
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if (_events.IsInPhase(PHASE_ONE) && damage >= me->GetHealth())
{
@@ -705,7 +705,7 @@ class boss_sara : public CreatureScript
}
}
- void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override
{
if (!roll_chance_i(30) || _events.IsInPhase(PHASE_TRANSFORM))
return;
@@ -726,13 +726,13 @@ class boss_sara : public CreatureScript
}
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER && !me->IsInEvadeMode())
Talk(SAY_SARA_KILL);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_SARA_AGGRO);
_events.ScheduleEvent(EVENT_SARAS_FERVOR, 5000, 0, PHASE_ONE);
@@ -740,7 +740,7 @@ class boss_sara : public CreatureScript
_events.ScheduleEvent(EVENT_SARAS_ANGER, urand(15000, 25000), 0, PHASE_ONE);
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->RemoveAllAuras();
me->SetReactState(REACT_PASSIVE);
@@ -749,7 +749,7 @@ class boss_sara : public CreatureScript
_events.SetPhase(PHASE_ONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!me->IsInCombat())
return;
@@ -826,7 +826,7 @@ class boss_sara : public CreatureScript
}
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summon->SetReactState(REACT_PASSIVE);
@@ -839,7 +839,7 @@ class boss_sara : public CreatureScript
{
Position pos;
float radius = frand(25.0f, 50.0f);
- float angle = frand(0.0f, 2.0f * M_PI);
+ float angle = frand(0.0f, 2.0f * float(M_PI));
pos.m_positionX = YoggSaronSpawnPos.GetPositionX() + radius * cosf(angle);
pos.m_positionY = YoggSaronSpawnPos.GetPositionY() + radius * sinf(angle);
pos.m_positionZ = me->GetMap()->GetHeight(me->GetPhaseMask(), pos.GetPositionX(), pos.GetPositionY(), YoggSaronSpawnPos.GetPositionZ() + 5.0f);
@@ -855,7 +855,7 @@ class boss_sara : public CreatureScript
voice->AI()->JustSummoned(summon);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -873,7 +873,7 @@ class boss_sara : public CreatureScript
std::map<uint64, uint64> _linkData;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_saraAI>(creature);
}
@@ -888,7 +888,7 @@ class boss_yogg_saron : public CreatureScript
{
boss_yogg_saronAI(Creature* creature) : PassiveAI(creature), _instance(creature->GetInstanceScript()) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.SetPhase(PHASE_TWO);
@@ -910,13 +910,13 @@ class boss_yogg_saron : public CreatureScript
}
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_IN_THE_MAWS_OF_THE_OLD_GOD)
me->AddLootMode(32);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_YOGG_SARON_DEATH);
@@ -940,7 +940,7 @@ class boss_yogg_saron : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
@@ -976,7 +976,7 @@ class boss_yogg_saron : public CreatureScript
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -1001,7 +1001,7 @@ class boss_yogg_saron : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_yogg_saronAI>(creature);
}
@@ -1016,14 +1016,14 @@ class boss_brain_of_yogg_saron : public CreatureScript
{
boss_brain_of_yogg_saronAI(Creature* creature) : PassiveAI(creature), _instance(creature->GetInstanceScript()), _summons(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
DoCast(me, SPELL_MATCH_HEALTH);
_summons.DespawnAll();
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if (me->HealthBelowPctDamaged(30, damage) && !me->HasAura(SPELL_BRAIN_HURT_VISUAL))
{
@@ -1047,9 +1047,9 @@ class boss_brain_of_yogg_saron : public CreatureScript
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -1086,7 +1086,7 @@ class boss_brain_of_yogg_saron : public CreatureScript
}
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
_summons.Summon(summon);
}
@@ -1097,7 +1097,7 @@ class boss_brain_of_yogg_saron : public CreatureScript
uint8 _tentaclesKilled;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_brain_of_yogg_saronAI>(creature);
}
@@ -1112,14 +1112,14 @@ class npc_ominous_cloud : public CreatureScript
{
npc_ominous_cloudAI(Creature* creature) : PassiveAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
DoCast(me, SPELL_OMINOUS_CLOUD_VISUAL);
}
void FillCirclePath(Position const& centerPos, float radius, float z, Movement::PointsArray& path, bool clockwise)
{
- float step = clockwise ? -M_PI / 8.0f : M_PI / 8.0f;
+ float step = clockwise ? float(-M_PI) / 8.0f : float(M_PI) / 8.0f;
float angle = centerPos.GetAngle(me->GetPositionX(), me->GetPositionY());
for (uint8 i = 0; i < 16; angle += step, ++i)
@@ -1132,19 +1132,19 @@ class npc_ominous_cloud : public CreatureScript
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
Movement::MoveSplineInit init(me);
- FillCirclePath(YoggSaronSpawnPos, me->GetDistance2d(YoggSaronSpawnPos.GetPositionX(), YoggSaronSpawnPos.GetPositionY()), me->GetPositionZ(), init.Path(), action);
+ FillCirclePath(YoggSaronSpawnPos, me->GetDistance2d(YoggSaronSpawnPos.GetPositionX(), YoggSaronSpawnPos.GetPositionY()), me->GetPositionZ(), init.Path(), action != 0);
init.SetWalk(true);
init.SetCyclic();
init.Launch();
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_ominous_cloudAI>(creature);
}
@@ -1159,18 +1159,18 @@ class npc_guardian_of_yogg_saron : public CreatureScript
{
npc_guardian_of_yogg_saronAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
DoCastAOE(SPELL_SHADOW_NOVA);
DoCastAOE(SPELL_SHADOW_NOVA_2);
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.ScheduleEvent(EVENT_DARK_VOLLEY, urand(10000, 15000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1196,7 +1196,7 @@ class npc_guardian_of_yogg_saron : public CreatureScript
DoMeleeAttackIfReady();
}
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
if (summoner->GetEntry() != NPC_OMINOUS_CLOUD)
return;
@@ -1211,7 +1211,7 @@ class npc_guardian_of_yogg_saron : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_guardian_of_yogg_saronAI>(creature);
}
@@ -1229,14 +1229,14 @@ class npc_corruptor_tentacle : public CreatureScript
SetCombatMovement(false);
}
- void Reset() OVERRIDE
+ void Reset() override
{
DoCast(me, SPELL_TENTACLE_VOID_ZONE);
DoCastAOE(SPELL_ERUPT);
_events.ScheduleEvent(EVENT_CAST_RANDOM_SPELL, 1);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1268,7 +1268,7 @@ class npc_corruptor_tentacle : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_corruptor_tentacleAI>(creature);
}
@@ -1286,24 +1286,24 @@ class npc_constrictor_tentacle : public CreatureScript
SetCombatMovement(false);
}
- void Reset() OVERRIDE
+ void Reset() override
{
DoCast(me, SPELL_TENTACLE_VOID_ZONE_2);
DoCastAOE(SPELL_ERUPT);
}
- void PassengerBoarded(Unit* passenger, int8 /*seatId*/, bool apply) OVERRIDE
+ void PassengerBoarded(Unit* passenger, int8 /*seatId*/, bool apply) override
{
if (!apply)
passenger->RemoveAurasDueToSpell(SPELL_SQUEEZE);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
UpdateVictim();
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_VOICE_OF_YOGG_SARON)))
voice->AI()->JustSummoned(me);
@@ -1313,7 +1313,7 @@ class npc_constrictor_tentacle : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_constrictor_tentacleAI>(creature);
}
@@ -1331,7 +1331,7 @@ class npc_crusher_tentacle : public CreatureScript
SetCombatMovement(false);
}
- void Reset() OVERRIDE
+ void Reset() override
{
DoCast(me, SPELL_CRUSH);
DoCast(me, SPELL_TENTACLE_VOID_ZONE);
@@ -1342,7 +1342,7 @@ class npc_crusher_tentacle : public CreatureScript
_events.ScheduleEvent(EVENT_DIMINISH_POWER, urand(6000, 8000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1374,7 +1374,7 @@ class npc_crusher_tentacle : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_crusher_tentacleAI>(creature);
}
@@ -1389,24 +1389,24 @@ class npc_influence_tentacle : public CreatureScript
{
npc_influence_tentacleAI(Creature* creature) : PassiveAI(creature), _instance(creature->GetInstanceScript()) { }
- void Reset() OVERRIDE
+ void Reset() override
{
DoCast(me, me->GetEntry() == NPC_SUIT_OF_ARMOR ? SPELL_NONDESCRIPT_1 : SPELL_NONDESCRIPT_2);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* brain = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_BRAIN_OF_YOGG_SARON)))
brain->AI()->DoAction(ACTION_TENTACLE_KILLED);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
private:
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_influence_tentacleAI>(creature);
}
@@ -1423,7 +1423,7 @@ class npc_descend_into_madness : public CreatureScript
{
npc_descend_into_madnessAI(Creature* creature) : PassiveAI(creature), _instance(creature->GetInstanceScript()) { }
- void OnSpellClick(Unit* clicker, bool& result) OVERRIDE
+ void OnSpellClick(Unit* clicker, bool& result) override
{
if (!result)
return;
@@ -1431,13 +1431,13 @@ class npc_descend_into_madness : public CreatureScript
me->DespawnOrUnsummon();
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
private:
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_descend_into_madnessAI>(creature);
}
@@ -1452,20 +1452,20 @@ class npc_immortal_guardian : public CreatureScript
{
npc_immortal_guardianAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
DoCast(me, SPELL_EMPOWERED);
DoCast(me, SPELL_RECENTLY_SPAWNED);
_events.ScheduleEvent(EVENT_DRAIN_LIFE, urand(3000, 13000));
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if (me->HealthBelowPctDamaged(1, damage))
damage = me->GetHealth() - me->CountPctFromMaxHealth(1); // or set immune to damage? should be done here or in SPELL_WEAKENED spell script?
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1495,7 +1495,7 @@ class npc_immortal_guardian : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_immortal_guardianAI>(creature);
}
@@ -1510,13 +1510,13 @@ class npc_observation_ring_keeper : public CreatureScript
{
npc_observation_ring_keeperAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
DoCast(SPELL_SIMPLE_TELEPORT_KEEPERS); // not visible here
DoCast(SPELL_KEEPER_ACTIVE);
}
- void sGossipSelect(Player* player, uint32 sender, uint32 /*action*/) OVERRIDE
+ void sGossipSelect(Player* player, uint32 sender, uint32 /*action*/) override
{
if (sender != 10333)
return;
@@ -1544,10 +1544,10 @@ class npc_observation_ring_keeper : public CreatureScript
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_observation_ring_keeperAI>(creature);
}
@@ -1562,12 +1562,12 @@ class npc_yogg_saron_keeper : public CreatureScript
{
npc_yogg_saron_keeperAI(Creature* creature) : ScriptedAI(creature) { }
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
DoCast(SPELL_SIMPLE_TELEPORT_KEEPERS);
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.SetPhase(PHASE_ONE);
@@ -1588,7 +1588,7 @@ class npc_yogg_saron_keeper : public CreatureScript
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
switch (me->GetEntry())
{
@@ -1609,7 +1609,7 @@ class npc_yogg_saron_keeper : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!me->IsInCombat())
return;
@@ -1634,7 +1634,7 @@ class npc_yogg_saron_keeper : public CreatureScript
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -1670,7 +1670,7 @@ class npc_yogg_saron_keeper : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_yogg_saron_keeperAI>(creature);
}
@@ -1685,7 +1685,7 @@ class npc_yogg_saron_illusions : public CreatureScript
{
npc_yogg_saron_illusionsAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
switch (_instance->GetData(DATA_ILLUSION))
{
@@ -1718,7 +1718,7 @@ class npc_yogg_saron_illusions : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
@@ -1791,7 +1791,7 @@ class npc_yogg_saron_illusions : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_yogg_saron_illusionsAI>(creature);
}
@@ -1806,7 +1806,7 @@ class npc_garona : public CreatureScript
{
npc_garonaAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
@@ -1819,7 +1819,7 @@ class npc_garona : public CreatureScript
_events.ScheduleEvent(EVENT_STORMWIND_ROLEPLAY_6, 52700);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
@@ -1854,7 +1854,7 @@ class npc_garona : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_garonaAI>(creature);
}
@@ -1869,12 +1869,12 @@ class npc_turned_champion : public CreatureScript
{
npc_turned_championAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
DoCast(SPELL_VERTEX_COLOR_BLACK);
}
- void MovementInform(uint32 type, uint32 pointId) OVERRIDE
+ void MovementInform(uint32 type, uint32 pointId) override
{
if (type != POINT_MOTION_TYPE || pointId != 0)
return;
@@ -1882,7 +1882,7 @@ class npc_turned_champion : public CreatureScript
me->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE);
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
if (action != ACTION_START_ROLEPLAY)
return;
@@ -1892,7 +1892,7 @@ class npc_turned_champion : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_turned_championAI>(creature);
}
@@ -1907,17 +1907,17 @@ class npc_laughing_skull : public CreatureScript
{
npc_laughing_skullAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetReactState(REACT_PASSIVE);
DoCast(me, SPELL_LUNATIC_GAZE_SKULL);
}
// don't evade, otherwise the Lunatic Gaze aura is removed
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_laughing_skullAI>(creature);
}
@@ -1938,13 +1938,13 @@ class spell_yogg_saron_target_selectors : public SpellScriptLoader // 63744,
GetCaster()->CastSpell(target, uint32(GetEffectValue()));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_target_selectors_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_target_selectors_SpellScript();
}
@@ -1990,7 +1990,7 @@ class spell_yogg_saron_psychosis : public SpellScriptLoader // 63795, 65301
{
PrepareSpellScript(spell_yogg_saron_psychosis_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_stacks = GetSpellInfo()->Id == SPELL_PSYCHOSIS ? 9 : 12;
return true;
@@ -2002,7 +2002,7 @@ class spell_yogg_saron_psychosis : public SpellScriptLoader // 63795, 65301
targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_ILLUSION_ROOM));
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_yogg_saron_psychosis_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_yogg_saron_psychosis_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
@@ -2010,7 +2010,7 @@ class spell_yogg_saron_psychosis : public SpellScriptLoader // 63795, 65301
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_psychosis_SpellScript();
}
@@ -2034,7 +2034,7 @@ class spell_yogg_saron_malady_of_the_mind : public SpellScriptLoader // 63830
targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_ILLUSION_ROOM));
}
- void Register() OVERRIDE
+ void Register() override
{
if (m_scriptSpellId == SPELL_MALADY_OF_THE_MIND)
{
@@ -2051,7 +2051,7 @@ class spell_yogg_saron_malady_of_the_mind : public SpellScriptLoader // 63830
{
PrepareAuraScript(spell_yogg_saron_malady_of_the_mind_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MALADY_OF_THE_MIND_JUMP))
return false;
@@ -2073,18 +2073,18 @@ class spell_yogg_saron_malady_of_the_mind : public SpellScriptLoader // 63830
GetTarget()->CastSpell(GetTarget(), SPELL_MALADY_OF_THE_MIND_JUMP);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_yogg_saron_malady_of_the_mind_AuraScript::OnRemove, EFFECT_1, SPELL_AURA_MOD_FEAR, AURA_EFFECT_HANDLE_REAL);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_malady_of_the_mind_SpellScript();
}
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_yogg_saron_malady_of_the_mind_AuraScript();
}
@@ -2113,7 +2113,7 @@ class spell_yogg_saron_brain_link : public SpellScriptLoader // 63802
ai->SetLinkBetween(targets.front()->GetGUID(), targets.back()->GetGUID());
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_yogg_saron_brain_link_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
@@ -2123,7 +2123,7 @@ class spell_yogg_saron_brain_link : public SpellScriptLoader // 63802
{
PrepareAuraScript(spell_yogg_saron_brain_link_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_BRAIN_LINK_DAMAGE))
return false;
@@ -2170,19 +2170,19 @@ class spell_yogg_saron_brain_link : public SpellScriptLoader // 63802
GetTarget()->CastSpell(linked, (GetTarget()->GetDistance(linked) > (float)aurEff->GetAmount()) ? SPELL_BRAIN_LINK_DAMAGE : SPELL_BRAIN_LINK_NO_DAMAGE, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_yogg_saron_brain_link_AuraScript::DummyTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
OnEffectRemove += AuraEffectRemoveFn(spell_yogg_saron_brain_link_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_brain_link_SpellScript();
}
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_yogg_saron_brain_link_AuraScript();
}
@@ -2200,13 +2200,13 @@ class spell_yogg_saron_brain_link_damage : public SpellScriptLoader // 6380
PrepareSpellScript(spell_yogg_saron_brain_link_damage_SpellScript);
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_brain_link_damage_SpellScript::RemoveSanity, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_brain_link_damage_SpellScript();
}
@@ -2221,7 +2221,7 @@ class spell_yogg_saron_boil_ominously : public SpellScriptLoader // 63030
{
PrepareSpellScript(spell_yogg_saron_boil_ominously_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_GUARDIAN_1))
return false;
@@ -2240,13 +2240,13 @@ class spell_yogg_saron_boil_ominously : public SpellScriptLoader // 63030
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_boil_ominously_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_boil_ominously_SpellScript();
}
@@ -2273,14 +2273,14 @@ class spell_yogg_saron_shadow_beacon : public SpellScriptLoader // 64465
target->SetEntry(NPC_IMMORTAL_GUARDIAN);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_yogg_saron_shadow_beacon_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_yogg_saron_shadow_beacon_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_yogg_saron_shadow_beacon_AuraScript();
}
@@ -2301,13 +2301,13 @@ class spell_yogg_saron_empowering_shadows_range_check : public SpellScriptLoader
target->CastSpell(GetCaster(), uint32(GetEffectValue()), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_empowering_shadows_range_check_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_empowering_shadows_range_check_SpellScript();
}
@@ -2322,7 +2322,7 @@ class spell_yogg_saron_empowering_shadows_missile : public SpellScriptLoader
{
PrepareSpellScript(spell_yogg_saron_empowering_shadows_missile_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_EMPOWERING_SHADOWS))
return false;
@@ -2335,13 +2335,13 @@ class spell_yogg_saron_empowering_shadows_missile : public SpellScriptLoader
target->CastSpell((Unit*)NULL, SPELL_EMPOWERING_SHADOWS, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_empowering_shadows_missile_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_empowering_shadows_missile_SpellScript();
}
@@ -2357,7 +2357,7 @@ class spell_yogg_saron_constrictor_tentacle : public SpellScriptLoader // 64
{
PrepareAuraScript(spell_yogg_saron_constrictor_tentacle_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_CONSTRICTOR_TENTACLE_SUMMON))
return false;
@@ -2369,13 +2369,13 @@ class spell_yogg_saron_constrictor_tentacle : public SpellScriptLoader // 64
GetTarget()->CastSpell(GetTarget(), SPELL_CONSTRICTOR_TENTACLE_SUMMON);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_yogg_saron_constrictor_tentacle_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_yogg_saron_constrictor_tentacle_AuraScript();
}
@@ -2390,7 +2390,7 @@ class spell_yogg_saron_lunge : public SpellScriptLoader // 64131
{
PrepareSpellScript(spell_yogg_saron_lunge_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SQUEEZE))
return false;
@@ -2406,13 +2406,13 @@ class spell_yogg_saron_lunge : public SpellScriptLoader // 64131
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_lunge_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_lunge_SpellScript();
}
@@ -2434,13 +2434,13 @@ class spell_yogg_saron_squeeze : public SpellScriptLoader // 64125
vehicle->Kill(vehicle); // should tentacle die or just release its target?
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_yogg_saron_squeeze_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_yogg_saron_squeeze_AuraScript();
}
@@ -2463,13 +2463,13 @@ class spell_yogg_saron_diminsh_power : public SpellScriptLoader // 64148
GetTarget()->InterruptSpell(CURRENT_CHANNELED_SPELL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_yogg_saron_diminsh_power_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_yogg_saron_diminsh_power_AuraScript();
}
@@ -2485,7 +2485,7 @@ class spell_yogg_saron_empowered : public SpellScriptLoader // 64161
{
PrepareAuraScript(spell_yogg_saron_empowered_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_EMPOWERED_BUFF))
return false;
@@ -2502,7 +2502,7 @@ class spell_yogg_saron_empowered : public SpellScriptLoader // 64161
void OnPeriodic(AuraEffect const* /*aurEff*/)
{
Unit* target = GetTarget();
- float stack = ceil((target->GetHealthPct() / 10) - 1);
+ float stack = std::ceil((target->GetHealthPct() / 10) - 1);
target->RemoveAurasDueToSpell(SPELL_EMPOWERED_BUFF);
if (stack)
@@ -2514,14 +2514,14 @@ class spell_yogg_saron_empowered : public SpellScriptLoader // 64161
target->CastSpell(target, SPELL_WEAKENED, true);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_yogg_saron_empowered_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_yogg_saron_empowered_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_yogg_saron_empowered_AuraScript();
}
@@ -2542,13 +2542,13 @@ class spell_yogg_saron_match_health : public SpellScriptLoader // 64069
target->SetHealth(target->CountPctFromMaxHealth((int32)GetCaster()->GetHealthPct()));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_match_health_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_match_health_SpellScript();
}
@@ -2569,13 +2569,13 @@ class spell_yogg_saron_shattered_illusion : public SpellScriptLoader // 65238
target->RemoveAurasDueToSpell(uint32(GetEffectValue()));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_shattered_illusion_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_shattered_illusion_SpellScript();
}
@@ -2590,7 +2590,7 @@ class spell_yogg_saron_death_ray_warning_visual : public SpellScriptLoader /
{
PrepareAuraScript(spell_yogg_saron_death_ray_warning_visual_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DEATH_RAY_PERIODIC))
return false;
@@ -2610,13 +2610,13 @@ class spell_yogg_saron_death_ray_warning_visual : public SpellScriptLoader /
}
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_yogg_saron_death_ray_warning_visual_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_yogg_saron_death_ray_warning_visual_AuraScript();
}
@@ -2631,7 +2631,7 @@ class spell_yogg_saron_cancel_illusion_room_aura : public SpellScriptLoader /
{
PrepareSpellScript(spell_yogg_saron_cancel_illusion_room_aura_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TELEPORT_BACK_TO_MAIN_ROOM))
return false;
@@ -2647,13 +2647,13 @@ class spell_yogg_saron_cancel_illusion_room_aura : public SpellScriptLoader /
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_cancel_illusion_room_aura_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_cancel_illusion_room_aura_SpellScript();
}
@@ -2673,13 +2673,13 @@ class spell_yogg_saron_nondescript : public SpellScriptLoader // 64010, 6401
GetTarget()->CastSpell(GetTarget(), uint32(aurEff->GetAmount()), true);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_yogg_saron_nondescript_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_yogg_saron_nondescript_AuraScript();
}
@@ -2694,7 +2694,7 @@ class spell_yogg_saron_revealed_tentacle : public SpellScriptLoader // 64012
{
PrepareSpellScript(spell_yogg_saron_revealed_tentacle_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TENTACLE_VOID_ZONE))
return false;
@@ -2709,17 +2709,17 @@ class spell_yogg_saron_revealed_tentacle : public SpellScriptLoader // 64012
{
caster->CastSpell(caster, SPELL_TENTACLE_VOID_ZONE, true);
caster->CastSpell(caster, SPELL_GRIM_REPRISAL, true);
- caster->UpdateEntry(NPC_INFLUENCE_TENTACLE, 0, caster->GetCreatureData());
+ caster->UpdateEntry(NPC_INFLUENCE_TENTACLE, caster->GetCreatureData());
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_revealed_tentacle_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_revealed_tentacle_SpellScript();
}
@@ -2734,7 +2734,7 @@ class spell_yogg_saron_grim_reprisal : public SpellScriptLoader // 63305
{
PrepareAuraScript(spell_yogg_saron_grim_reprisal_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_GRIM_REPRISAL_DAMAGE))
return false;
@@ -2747,13 +2747,13 @@ class spell_yogg_saron_grim_reprisal : public SpellScriptLoader // 63305
GetTarget()->CastCustomSpell(SPELL_GRIM_REPRISAL_DAMAGE, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetDamageInfo()->GetAttacker(), true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_yogg_saron_grim_reprisal_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_yogg_saron_grim_reprisal_AuraScript();
}
@@ -2768,7 +2768,7 @@ class spell_yogg_saron_induce_madness : public SpellScriptLoader // 64059
{
PrepareSpellScript(spell_yogg_saron_induce_madness_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TELEPORT_BACK_TO_MAIN_ROOM))
return false;
@@ -2796,14 +2796,14 @@ class spell_yogg_saron_induce_madness : public SpellScriptLoader // 64059
voice->AI()->DoAction(ACTION_TOGGLE_SHATTERED_ILLUSION);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_induce_madness_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
AfterCast += SpellCastFn(spell_yogg_saron_induce_madness_SpellScript::ClearShatteredIllusion);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_induce_madness_SpellScript();
}
@@ -2825,7 +2825,7 @@ class spell_yogg_saron_sanity : public SpellScriptLoader // 63050
GetSpell()->SetSpellValue(SPELLVALUE_AURA_STACK, 100);
}
- void Register() OVERRIDE
+ void Register() override
{
BeforeCast += SpellCastFn(spell_yogg_saron_sanity_SpellScript::ModSanityStacks);
}
@@ -2835,7 +2835,7 @@ class spell_yogg_saron_sanity : public SpellScriptLoader // 63050
{
PrepareAuraScript(spell_yogg_saron_sanity_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_LOW_SANITY_SCREEN_EFFECT))
return false;
@@ -2867,19 +2867,19 @@ class spell_yogg_saron_sanity : public SpellScriptLoader // 63050
caster->CastSpell(GetTarget(), SPELL_INSANE, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_yogg_saron_sanity_AuraScript::DummyTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
AfterEffectRemove += AuraEffectRemoveFn(spell_yogg_saron_sanity_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_sanity_SpellScript();
}
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_yogg_saron_sanity_AuraScript();
}
@@ -2894,7 +2894,7 @@ class spell_yogg_saron_insane : public SpellScriptLoader // 63120
{
PrepareAuraScript(spell_yogg_saron_insane_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_INSANE_VISUAL))
return false;
@@ -2916,14 +2916,14 @@ class spell_yogg_saron_insane : public SpellScriptLoader // 63120
GetTarget()->Kill(GetTarget());
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_yogg_saron_insane_AuraScript::OnApply, EFFECT_0, SPELL_AURA_AOE_CHARM, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_yogg_saron_insane_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_AOE_CHARM, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_yogg_saron_insane_AuraScript();
}
@@ -2944,13 +2944,13 @@ class spell_yogg_saron_insane_periodic : public SpellScriptLoader // 64555
GetCaster()->CastSpell(target, uint32(GetEffectValue()), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_insane_periodic_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_insane_periodic_SpellScript();
}
@@ -2979,7 +2979,7 @@ class spell_yogg_saron_lunatic_gaze : public SpellScriptLoader // 64164, 64
{
PrepareSpellScript(spell_yogg_saron_lunatic_gaze_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_stacks = GetSpellInfo()->Id == SPELL_LUNATIC_GAZE_DAMAGE ? 4 : 2;
return true;
@@ -2990,7 +2990,7 @@ class spell_yogg_saron_lunatic_gaze : public SpellScriptLoader // 64164, 64
targets.remove_if(LunaticGazeTargetSelector(GetCaster()));
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_yogg_saron_lunatic_gaze_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_yogg_saron_lunatic_gaze_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
@@ -2998,7 +2998,7 @@ class spell_yogg_saron_lunatic_gaze : public SpellScriptLoader // 64164, 64
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_lunatic_gaze_SpellScript();
}
@@ -3020,13 +3020,13 @@ class spell_yogg_saron_keeper_aura : public SpellScriptLoader // 62650, 6267
return true;
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_yogg_saron_keeper_aura_AuraScript::CanApply);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_yogg_saron_keeper_aura_AuraScript();
}
@@ -3048,13 +3048,13 @@ class spell_yogg_saron_hate_to_zero : public SpellScriptLoader // 63984
target->getThreatManager().modifyThreatPercent(GetCaster(), -100);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_hate_to_zero_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_hate_to_zero_SpellScript();
}
@@ -3084,13 +3084,13 @@ class spell_yogg_saron_in_the_maws_of_the_old_god : public SpellScriptLoader
return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW;
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_yogg_saron_in_the_maws_of_the_old_god_SpellScript::CheckRequirement);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_in_the_maws_of_the_old_god_SpellScript();
}
@@ -3111,13 +3111,13 @@ class spell_yogg_saron_titanic_storm : public SpellScriptLoader // 64172
GetCaster()->Kill(target);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_titanic_storm_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_yogg_saron_titanic_storm_SpellScript();
}
@@ -3132,7 +3132,7 @@ class spell_yogg_saron_hodirs_protective_gaze : public SpellScriptLoader //
{
PrepareAuraScript(spell_yogg_saron_hodirs_protective_gaze_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_FLASH_FREEZE))
return false;
@@ -3158,14 +3158,14 @@ class spell_yogg_saron_hodirs_protective_gaze : public SpellScriptLoader //
PreventDefaultAction();
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_yogg_saron_hodirs_protective_gaze_AuraScript::CanApply);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_yogg_saron_hodirs_protective_gaze_AuraScript::OnAbsorb, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_yogg_saron_hodirs_protective_gaze_AuraScript();
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
index c98a3db2334..1f9bfe4c3f3 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
@@ -15,11 +15,11 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "ScriptMgr.h"
-#include "ScriptedCreature.h"
-#include "InstanceScript.h"
#include "ulduar.h"
#include "Player.h"
+#include "ScriptedCreature.h"
+#include "ScriptMgr.h"
+#include "SpellScript.h"
#include "WorldPacket.h"
static DoorData const doorData[] =
@@ -31,6 +31,9 @@ static DoorData const doorData[] =
{ GO_HODIR_ENTRANCE, BOSS_HODIR, DOOR_TYPE_ROOM, BOUNDARY_E },
{ GO_HODIR_DOOR, BOSS_HODIR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_HODIR_ICE_DOOR, BOSS_HODIR, DOOR_TYPE_PASSAGE, BOUNDARY_W },
+ { GO_MIMIRON_DOOR_1, BOSS_MIMIRON, DOOR_TYPE_ROOM, BOUNDARY_W },
+ { GO_MIMIRON_DOOR_2, BOSS_MIMIRON, DOOR_TYPE_ROOM, BOUNDARY_E },
+ { GO_MIMIRON_DOOR_3, BOSS_MIMIRON, DOOR_TYPE_ROOM, BOUNDARY_S },
{ GO_VEZAX_DOOR, BOSS_VEZAX, DOOR_TYPE_PASSAGE, BOUNDARY_E },
{ GO_YOGG_SARON_DOOR, BOSS_YOGG_SARON, DOOR_TYPE_ROOM, BOUNDARY_S },
{ GO_DOODAD_UL_SIGILDOOR_03, BOSS_ALGALON, DOOR_TYPE_ROOM, BOUNDARY_W },
@@ -69,11 +72,14 @@ class instance_ulduar : public InstanceMapScript
uint64 AssemblyGUIDs[3];
uint64 KologarnGUID;
uint64 AuriayaGUID;
- uint64 MimironGUID;
uint64 HodirGUID;
uint64 ThorimGUID;
uint64 FreyaGUID;
uint64 ElderGUIDs[3];
+ uint64 MimironGUID;
+ uint64 MimironVehicleGUIDs[3];
+ uint64 MimironComputerGUID;
+ uint64 MimironWorldTriggerGUID;
uint64 VezaxGUID;
uint64 YoggSaronGUID;
uint64 VoiceOfYoggSaronGUID;
@@ -91,6 +97,9 @@ class instance_ulduar : public InstanceMapScript
uint64 ThorimChestGUID;
uint64 HodirRareCacheGUID;
uint64 HodirChestGUID;
+ uint64 MimironTramGUID;
+ uint64 MimironElevatorGUID;
+ uint64 MimironButtonGUID;
uint64 BrainRoomDoorGUIDs[3];
uint64 AlgalonSigilDoorGUID[3];
uint64 AlgalonFloorGUID[2];
@@ -111,7 +120,7 @@ class instance_ulduar : public InstanceMapScript
std::set<uint64> mRubbleSpawns;
- void Initialize() OVERRIDE
+ void Initialize() override
{
SetBossNumber(MAX_ENCOUNTER);
LoadDoorData(doorData);
@@ -125,6 +134,8 @@ class instance_ulduar : public InstanceMapScript
KologarnGUID = 0;
AuriayaGUID = 0;
MimironGUID = 0;
+ MimironComputerGUID = 0;
+ MimironWorldTriggerGUID = 0;
HodirGUID = 0;
ThorimGUID = 0;
FreyaGUID = 0;
@@ -139,6 +150,9 @@ class instance_ulduar : public InstanceMapScript
ThorimChestGUID = 0;
HodirRareCacheGUID = 0;
HodirChestGUID = 0;
+ MimironTramGUID = 0;
+ MimironElevatorGUID = 0;
+ MimironButtonGUID = 0;
LeviathanGateGUID = 0;
AlgalonUniverseGUID = 0;
AlgalonTrapdoorGUID = 0;
@@ -165,19 +179,20 @@ class instance_ulduar : public InstanceMapScript
memset(AssemblyGUIDs, 0, sizeof(AssemblyGUIDs));
memset(RazorHarpoonGUIDs, 0, sizeof(RazorHarpoonGUIDs));
memset(ElderGUIDs, 0, sizeof(ElderGUIDs));
+ memset(MimironVehicleGUIDs, 0, sizeof(MimironVehicleGUIDs));
memset(BrainRoomDoorGUIDs, 0, sizeof(BrainRoomDoorGUIDs));
memset(KeeperGUIDs, 0, sizeof(KeeperGUIDs));
memset(_summonObservationRingKeeper, false, sizeof(_summonObservationRingKeeper));
memset(_summonYSKeeper, false, sizeof(_summonYSKeeper));
}
- void FillInitialWorldStates(WorldPacket& packet) OVERRIDE
+ void FillInitialWorldStates(WorldPacket& packet) override
{
packet << uint32(WORLD_STATE_ALGALON_TIMER_ENABLED) << uint32(_algalonTimer && _algalonTimer <= 60);
packet << uint32(WORLD_STATE_ALGALON_DESPAWN_TIMER) << uint32(std::min<uint32>(_algalonTimer, 60));
}
- void OnPlayerEnter(Player* player) OVERRIDE
+ void OnPlayerEnter(Player* player) override
{
if (!TeamInInstance)
TeamInInstance = player->GetTeam();
@@ -225,7 +240,7 @@ class instance_ulduar : public InstanceMapScript
instance->SummonCreature(NPC_MIMIRON_YS, YSKeepersPos[3]);
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
if (!TeamInInstance)
{
@@ -288,9 +303,6 @@ class instance_ulduar : public InstanceMapScript
case NPC_AURIAYA:
AuriayaGUID = creature->GetGUID();
break;
- case NPC_MIMIRON:
- MimironGUID = creature->GetGUID();
- break;
// Hodir
case NPC_HODIR:
@@ -298,35 +310,35 @@ class instance_ulduar : public InstanceMapScript
break;
case NPC_EIVI_NIGHTFEATHER:
if (TeamInInstance == HORDE)
- creature->UpdateEntry(NPC_TOR_GREYCLOUD, HORDE);
+ creature->UpdateEntry(NPC_TOR_GREYCLOUD);
break;
case NPC_ELLIE_NIGHTFEATHER:
if (TeamInInstance == HORDE)
- creature->UpdateEntry(NPC_KAR_GREYCLOUD, HORDE);
+ creature->UpdateEntry(NPC_KAR_GREYCLOUD);
break;
case NPC_ELEMENTALIST_MAHFUUN:
if (TeamInInstance == HORDE)
- creature->UpdateEntry(NPC_SPIRITWALKER_TARA, HORDE);
+ creature->UpdateEntry(NPC_SPIRITWALKER_TARA);
break;
case NPC_ELEMENTALIST_AVUUN:
if (TeamInInstance == HORDE)
- creature->UpdateEntry(NPC_SPIRITWALKER_YONA, HORDE);
+ creature->UpdateEntry(NPC_SPIRITWALKER_YONA);
break;
case NPC_MISSY_FLAMECUFFS:
if (TeamInInstance == HORDE)
- creature->UpdateEntry(NPC_AMIRA_BLAZEWEAVER, HORDE);
+ creature->UpdateEntry(NPC_AMIRA_BLAZEWEAVER);
break;
case NPC_SISSY_FLAMECUFFS:
if (TeamInInstance == HORDE)
- creature->UpdateEntry(NPC_VEESHA_BLAZEWEAVER, HORDE);
+ creature->UpdateEntry(NPC_VEESHA_BLAZEWEAVER);
break;
case NPC_FIELD_MEDIC_PENNY:
if (TeamInInstance == HORDE)
- creature->UpdateEntry(NPC_BATTLE_PRIEST_ELIZA, HORDE);
+ creature->UpdateEntry(NPC_BATTLE_PRIEST_ELIZA);
break;
case NPC_FIELD_MEDIC_JESSI:
if (TeamInInstance == HORDE)
- creature->UpdateEntry(NPC_BATTLE_PRIEST_GINA, HORDE);
+ creature->UpdateEntry(NPC_BATTLE_PRIEST_GINA);
break;
case NPC_THORIM:
@@ -353,6 +365,26 @@ class instance_ulduar : public InstanceMapScript
creature->DespawnOrUnsummon();
break;
+ // Mimiron
+ case NPC_MIMIRON:
+ MimironGUID = creature->GetGUID();
+ break;
+ case NPC_LEVIATHAN_MKII:
+ MimironVehicleGUIDs[0] = creature->GetGUID();
+ break;
+ case NPC_VX_001:
+ MimironVehicleGUIDs[1] = creature->GetGUID();
+ break;
+ case NPC_AERIAL_COMMAND_UNIT:
+ MimironVehicleGUIDs[2] = creature->GetGUID();
+ break;
+ case NPC_COMPUTER:
+ MimironComputerGUID = creature->GetGUID();
+ break;
+ case NPC_WORLD_TRIGGER_MIMIRON:
+ MimironWorldTriggerGUID = creature->GetGUID();
+ break;
+
case NPC_VEZAX:
VezaxGUID = creature->GetGUID();
break;
@@ -418,7 +450,7 @@ class instance_ulduar : public InstanceMapScript
}
}
- void OnCreatureRemove(Creature* creature) OVERRIDE
+ void OnCreatureRemove(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -469,6 +501,15 @@ class instance_ulduar : public InstanceMapScript
case GO_HODIR_CHEST:
HodirChestGUID = gameObject->GetGUID();
break;
+ case GO_MIMIRON_TRAM:
+ MimironTramGUID = gameObject->GetGUID();
+ break;
+ case GO_MIMIRON_ELEVATOR:
+ MimironElevatorGUID = gameObject->GetGUID();
+ break;
+ case GO_MIMIRON_BUTTON:
+ MimironButtonGUID = gameObject->GetGUID();
+ break;
case GO_LEVIATHAN_GATE:
LeviathanGateGUID = gameObject->GetGUID();
if (GetBossState(BOSS_LEVIATHAN) == DONE)
@@ -481,6 +522,9 @@ class instance_ulduar : public InstanceMapScript
case GO_HODIR_ENTRANCE:
case GO_HODIR_DOOR:
case GO_HODIR_ICE_DOOR:
+ case GO_MIMIRON_DOOR_1:
+ case GO_MIMIRON_DOOR_2:
+ case GO_MIMIRON_DOOR_3:
case GO_VEZAX_DOOR:
case GO_YOGG_SARON_DOOR:
AddDoor(gameObject, true);
@@ -554,7 +598,7 @@ class instance_ulduar : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* gameObject) OVERRIDE
+ void OnGameObjectRemove(GameObject* gameObject) override
{
switch (gameObject->GetEntry())
{
@@ -565,6 +609,9 @@ class instance_ulduar : public InstanceMapScript
case GO_HODIR_ENTRANCE:
case GO_HODIR_DOOR:
case GO_HODIR_ICE_DOOR:
+ case GO_MIMIRON_DOOR_1:
+ case GO_MIMIRON_DOOR_2:
+ case GO_MIMIRON_DOOR_3:
case GO_VEZAX_DOOR:
case GO_YOGG_SARON_DOOR:
case GO_DOODAD_UL_SIGILDOOR_03:
@@ -579,7 +626,7 @@ class instance_ulduar : public InstanceMapScript
}
}
- void OnUnitDeath(Unit* unit) OVERRIDE
+ void OnUnitDeath(Unit* unit) override
{
Creature* creature = unit->ToCreature();
if (!creature)
@@ -606,7 +653,7 @@ class instance_ulduar : public InstanceMapScript
}
}
- void ProcessEvent(WorldObject* /*gameObject*/, uint32 eventId) OVERRIDE
+ void ProcessEvent(WorldObject* /*gameObject*/, uint32 eventId) override
{
// Flame Leviathan's Tower Event triggers
Creature* FlameLeviathan = instance->GetCreature(LeviathanGUID);
@@ -640,7 +687,7 @@ class instance_ulduar : public InstanceMapScript
}
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -747,7 +794,7 @@ class instance_ulduar : public InstanceMapScript
return true;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -772,7 +819,11 @@ class instance_ulduar : public InstanceMapScript
}
break;
case DATA_UNBROKEN:
- Unbroken = bool(data);
+ Unbroken = data != 0;
+ break;
+ case DATA_MIMIRON_ELEVATOR:
+ if (GameObject* gameObject = instance->GetGameObject(MimironElevatorGUID))
+ gameObject->SetGoState((GOState)data);
break;
case DATA_ILLUSION:
illusion = data;
@@ -795,11 +846,11 @@ class instance_ulduar : public InstanceMapScript
}
}
- void SetData64(uint32 /*type*/, uint64 /*data*/) OVERRIDE
+ void SetData64(uint32 /*type*/, uint64 /*data*/) override
{
}
- uint64 GetData64(uint32 data) const OVERRIDE
+ uint64 GetData64(uint32 data) const override
{
switch (data)
{
@@ -845,8 +896,6 @@ class instance_ulduar : public InstanceMapScript
return KologarnGUID;
case BOSS_AURIAYA:
return AuriayaGUID;
- case BOSS_MIMIRON:
- return MimironGUID;
case BOSS_HODIR:
return HodirGUID;
case BOSS_THORIM:
@@ -862,6 +911,22 @@ class instance_ulduar : public InstanceMapScript
case BOSS_STONEBARK:
return ElderGUIDs[2];
+ // Mimiron
+ case BOSS_MIMIRON:
+ return MimironGUID;
+ case DATA_LEVIATHAN_MK_II:
+ return MimironVehicleGUIDs[0];
+ case DATA_VX_001:
+ return MimironVehicleGUIDs[1];
+ case DATA_AERIAL_COMMAND_UNIT:
+ return MimironVehicleGUIDs[2];
+ case DATA_COMPUTER:
+ return MimironComputerGUID;
+ case DATA_MIMIRON_WORLD_TRIGGER:
+ return MimironWorldTriggerGUID;
+ case DATA_MIMIRON_BUTTON:
+ return MimironButtonGUID;
+
case BOSS_VEZAX:
return VezaxGUID;
@@ -913,7 +978,7 @@ class instance_ulduar : public InstanceMapScript
return 0;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -934,7 +999,7 @@ class instance_ulduar : public InstanceMapScript
return 0;
}
- bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const*, Unit const* /* = NULL */, uint32 /* = 0 */) OVERRIDE
+ bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const*, Unit const* /* = NULL */, uint32 /* = 0 */) override
{
switch (criteriaId)
{
@@ -969,7 +1034,7 @@ class instance_ulduar : public InstanceMapScript
return false;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -983,7 +1048,7 @@ class instance_ulduar : public InstanceMapScript
return saveStream.str();
}
- void Load(char const* strIn) OVERRIDE
+ void Load(char const* strIn) override
{
if (!strIn)
{
@@ -1049,7 +1114,7 @@ class instance_ulduar : public InstanceMapScript
OUT_LOAD_INST_DATA_COMPLETE;
}
- void Update(uint32 diff) OVERRIDE
+ void Update(uint32 diff) override
{
if (_events.Empty())
return;
@@ -1088,13 +1153,49 @@ class instance_ulduar : public InstanceMapScript
uint32 _maxWeaponItemLevel;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_ulduar_InstanceMapScript(map);
}
};
+class spell_ulduar_teleporter : public SpellScriptLoader
+{
+ public:
+ spell_ulduar_teleporter() : SpellScriptLoader("spell_ulduar_teleporter") { }
+
+ class spell_ulduar_teleporter_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_ulduar_teleporter_SpellScript);
+
+ SpellCastResult CheckRequirement()
+ {
+ if (GetExplTargetUnit()->GetTypeId() != TYPEID_PLAYER)
+ return SPELL_FAILED_DONT_REPORT;
+
+ if (GetExplTargetUnit()->IsInCombat())
+ {
+ Spell::SendCastResult(GetExplTargetUnit()->ToPlayer(), GetSpellInfo(), 0, SPELL_FAILED_AFFECTING_COMBAT);
+ return SPELL_FAILED_AFFECTING_COMBAT;
+ }
+
+ return SPELL_CAST_OK;
+ }
+
+ void Register() override
+ {
+ OnCheckCast += SpellCheckCastFn(spell_ulduar_teleporter_SpellScript::CheckRequirement);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_ulduar_teleporter_SpellScript();
+ }
+};
+
void AddSC_instance_ulduar()
{
new instance_ulduar();
+ new spell_ulduar_teleporter();
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
index 3544ff3c079..81cb469318f 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
@@ -18,6 +18,7 @@
#ifndef DEF_ULDUAR_H
#define DEF_ULDUAR_H
+#include "InstanceScript.h"
#include "ObjectMgr.h"
#define UlduarScriptName "instance_ulduar"
@@ -83,6 +84,18 @@ enum UlduarNPCs
NPC_LEVIATHAN_MKII = 33432,
NPC_VX_001 = 33651,
NPC_AERIAL_COMMAND_UNIT = 33670,
+ NPC_ASSAULT_BOT = 34057,
+ NPC_BOMB_BOT = 33836,
+ NPC_JUNK_BOT = 33855,
+ NPC_EMERGENCY_FIRE_BOT = 34147,
+ NPC_FROST_BOMB = 34149,
+ NPC_BURST_TARGET = 34211,
+ NPC_FLAME = 34363,
+ NPC_FLAME_SPREAD = 34121,
+ NPC_DB_TARGET = 33576,
+ NPC_ROCKET_MIMIRON_VISUAL = 34050,
+ NPC_WORLD_TRIGGER_MIMIRON = 21252,
+ NPC_COMPUTER = 34143,
// Freya's Keepers
NPC_IRONBRANCH = 32913,
@@ -204,6 +217,18 @@ enum UlduarGameObjects
GO_THORIM_CHEST_HERO = 194315,
GO_THORIM_CHEST = 194314,
+ // Mimiron
+ GO_MIMIRON_TRAM = 194675,
+ GO_MIMIRON_ELEVATOR = 194749,
+ GO_MIMIRON_BUTTON = 194739,
+ GO_MIMIRON_DOOR_1 = 194774,
+ GO_MIMIRON_DOOR_2 = 194775,
+ GO_MIMIRON_DOOR_3 = 194776,
+ GO_CACHE_OF_INNOVATION = 194789,
+ GO_CACHE_OF_INNOVATION_FIREFIGHTER = 194957,
+ GO_CACHE_OF_INNOVATION_HERO = 194956,
+ GO_CACHE_OF_INNOVATION_FIREFIGHTER_HERO = 194958,
+
// Vezax
GO_VEZAX_DOOR = 194750,
@@ -292,6 +317,16 @@ enum UlduarData
// Hodir
DATA_HODIR_RARE_CACHE,
+ // Mimiron
+ DATA_LEVIATHAN_MK_II,
+ DATA_VX_001,
+ DATA_AERIAL_COMMAND_UNIT,
+ DATA_COMPUTER,
+ DATA_MIMIRON_WORLD_TRIGGER,
+ DATA_MIMIRON_ELEVATOR,
+ DATA_MIMIRON_TRAM,
+ DATA_MIMIRON_BUTTON,
+
// Yogg-Saron
DATA_VOICE_OF_YOGG_SARON,
DATA_SARA,
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar_teleporter.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar_teleporter.cpp
deleted file mode 100644
index e3e588be076..00000000000
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar_teleporter.cpp
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "ScriptMgr.h"
-#include "ScriptedGossip.h"
-#include "InstanceScript.h"
-#include "Player.h"
-#include "ulduar.h"
-
-/*
-The teleporter appears to be active and stable.
-
-- Expedition Base Camp
-- Formation Grounds
-- Colossal Forge
-- Scrapyard
-- Antechamber of Ulduar
-- Shattered Walkway
-- Conservatory of Life
-*/
-
-enum UlduarTeleporter
-{
- BASE_CAMP = 200,
- GROUNDS = 201,
- FORGE = 202,
- SCRAPYARD = 203,
- ANTECHAMBER = 204,
- WALKWAY = 205,
- CONSERVATORY = 206,
-};
-
-class ulduar_teleporter : public GameObjectScript
-{
- public:
- ulduar_teleporter() : GameObjectScript("ulduar_teleporter") { }
-
- bool OnGossipSelect(Player* player, GameObject* /*gameObject*/, uint32 sender, uint32 action) OVERRIDE
- {
- player->PlayerTalkClass->ClearMenus();
- if (sender != GOSSIP_SENDER_MAIN)
- return false;
- if (!player->getAttackers().empty())
- return false;
-
- switch (action)
- {
- case BASE_CAMP:
- player->TeleportTo(603, -706.122f, -92.6024f, 429.876f, 0.0f);
- player->CLOSE_GOSSIP_MENU();
- break;
- case GROUNDS:
- player->TeleportTo(603, 131.248f, -35.3802f, 409.804f, 0.0f);
- player->CLOSE_GOSSIP_MENU();
- break;
- case FORGE:
- player->TeleportTo(603, 553.233f, -12.3247f, 409.679f, 0.0f);
- player->CLOSE_GOSSIP_MENU();
- break;
- case SCRAPYARD:
- player->TeleportTo(603, 926.292f, -11.4635f, 418.595f, 0.0f);
- player->CLOSE_GOSSIP_MENU();
- break;
- case ANTECHAMBER:
- player->TeleportTo(603, 1498.09f, -24.246f, 420.967f, 0.0f);
- player->CLOSE_GOSSIP_MENU();
- break;
- case WALKWAY:
- player->TeleportTo(603, 1859.45f, -24.1f, 448.9f, 0.0f);
- player->CLOSE_GOSSIP_MENU();
- break;
- case CONSERVATORY:
- player->TeleportTo(603, 2086.27f, -24.3134f, 421.239f, 0.0f);
- player->CLOSE_GOSSIP_MENU();
- break;
- }
-
- return true;
- }
-
- bool OnGossipHello(Player* player, GameObject* gameObject) OVERRIDE
- {
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Expedition Base Camp", GOSSIP_SENDER_MAIN, BASE_CAMP);
- if (InstanceScript* instance = gameObject->GetInstanceScript())
- {
- if (instance->GetData(DATA_COLOSSUS) == 2) //count of 2 collossus death
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Formation Grounds", GOSSIP_SENDER_MAIN, GROUNDS);
- if (instance->GetBossState(BOSS_LEVIATHAN) == DONE)
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Colossal Forge", GOSSIP_SENDER_MAIN, FORGE);
- if (instance->GetBossState(BOSS_XT002) == DONE)
- {
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Scrapyard", GOSSIP_SENDER_MAIN, SCRAPYARD);
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Antechamber of Ulduar", GOSSIP_SENDER_MAIN, ANTECHAMBER);
- }
- if (instance->GetBossState(BOSS_KOLOGARN) == DONE)
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Shattered Walkway", GOSSIP_SENDER_MAIN, WALKWAY);
- if (instance->GetBossState(BOSS_AURIAYA) == DONE)
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Conservatory of Life", GOSSIP_SENDER_MAIN, CONSERVATORY);
- }
-
- player->SEND_GOSSIP_MENU(gameObject->GetGOInfo()->GetGossipMenuId(), gameObject->GetGUID());
- return true;
- }
-};
-
-void AddSC_ulduar_teleporter()
-{
- new ulduar_teleporter();
-}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
index fe29f4e9f7c..7a1566df71d 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
@@ -106,7 +106,7 @@ class boss_ingvar_the_plunderer : public CreatureScript
{
boss_ingvar_the_plundererAI(Creature* creature) : BossAI(creature, DATA_INGVAR) { }
- void Reset() OVERRIDE
+ void Reset() override
{
if (me->GetEntry() != NPC_INGVAR)
me->UpdateEntry(NPC_INGVAR);
@@ -122,7 +122,7 @@ class boss_ingvar_the_plunderer : public CreatureScript
events.ScheduleEvent(EVENT_SMASH, urand(12, 17)*IN_MILLISECONDS, 0, PHASE_HUMAN);
}
- void DamageTaken(Unit* /*doneBy*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*doneBy*/, uint32& damage) override
{
if (damage >= me->GetHealth() && events.IsInPhase(PHASE_HUMAN))
{
@@ -155,13 +155,13 @@ class boss_ingvar_the_plunderer : public CreatureScript
events.ScheduleEvent(EVENT_JUST_TRANSFORMED, 2 * IN_MILLISECONDS, 0, PHASE_EVENT);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
@@ -176,13 +176,13 @@ class boss_ingvar_the_plunderer : public CreatureScript
events.ScheduleEvent(EVENT_SHADOW_AXE, 30*IN_MILLISECONDS, 0, PHASE_UNDEAD);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() && !events.IsInPhase(PHASE_EVENT))
return;
@@ -249,7 +249,7 @@ class boss_ingvar_the_plunderer : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUtgardeKeepAI<boss_ingvar_the_plundererAI>(creature);
}
@@ -267,7 +267,7 @@ class npc_annhylde_the_caller : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
@@ -275,7 +275,7 @@ class npc_annhylde_the_caller : public CreatureScript
me->GetMotionMaster()->MovePoint(1, x, y, z - 15.0f);
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -300,11 +300,11 @@ class npc_annhylde_the_caller : public CreatureScript
}
}
- void AttackStart(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void AttackStart(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
@@ -341,7 +341,7 @@ class npc_annhylde_the_caller : public CreatureScript
float x, y, z;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUtgardeKeepAI<npc_annhylde_the_callerAI>(creature);
}
@@ -356,7 +356,7 @@ class npc_ingvar_throw_dummy : public CreatureScript
{
npc_ingvar_throw_dummyAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetReactState(REACT_PASSIVE);
@@ -371,7 +371,7 @@ class npc_ingvar_throw_dummy : public CreatureScript
me->DespawnOrUnsummon();
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == EFFECT_MOTION_TYPE && id == EVENT_CHARGE)
{
@@ -381,7 +381,7 @@ class npc_ingvar_throw_dummy : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ingvar_throw_dummyAI(creature);
}
@@ -402,13 +402,13 @@ class spell_ingvar_summon_banshee : public SpellScriptLoader
dest.RelocateOffset({ 0.0f, 0.0f, 30.0f, 0.0f });
}
- void Register() OVERRIDE
+ void Register() override
{
OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_ingvar_summon_banshee_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER_BACK);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_ingvar_summon_banshee_SpellScript();
}
@@ -424,7 +424,7 @@ class spell_ingvar_woe_strike : public SpellScriptLoader
{
PrepareAuraScript(spell_ingvar_woe_strike_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WOE_STRIKE_EFFECT))
return false;
@@ -433,7 +433,7 @@ class spell_ingvar_woe_strike : public SpellScriptLoader
bool CheckProc(ProcEventInfo& eventInfo)
{
- return eventInfo.GetHealInfo()->GetHeal();
+ return eventInfo.GetHealInfo()->GetHeal() != 0;
}
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
@@ -442,14 +442,14 @@ class spell_ingvar_woe_strike : public SpellScriptLoader
GetTarget()->CastSpell(eventInfo.GetActor(), SPELL_WOE_STRIKE_EFFECT, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_ingvar_woe_strike_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_ingvar_woe_strike_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_PROC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_ingvar_woe_strike_AuraScript();
}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
index 1bcbc63a8ab..eb60444f9c2 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
@@ -85,14 +85,14 @@ class npc_frost_tomb : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
DoCast(summoner, SPELL_FROST_TOMB, true);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* keleseth = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_PRINCE_KELESETH)))
keleseth->AI()->SetData(DATA_ON_THE_ROCKS, false);
@@ -102,7 +102,7 @@ class npc_frost_tomb : public CreatureScript
InstanceScript* _instance;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUtgardeKeepAI<npc_frost_tombAI>(creature);
}
@@ -117,7 +117,7 @@ class boss_keleseth : public CreatureScript
{
boss_kelesethAI(Creature* creature) : BossAI(creature, DATA_PRINCE_KELESETH) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
events.ScheduleEvent(EVENT_SHADOWBOLT, urand(2, 3)*IN_MILLISECONDS);
@@ -127,7 +127,7 @@ class boss_keleseth : public CreatureScript
onTheRocks = true;
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
_EnterCombat();
Talk(SAY_START_COMBAT);
@@ -148,19 +148,19 @@ class boss_keleseth : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void SetData(uint32 data, uint32 value) OVERRIDE
+ void SetData(uint32 data, uint32 value) override
{
if (data == DATA_ON_THE_ROCKS)
- onTheRocks = value;
+ onTheRocks = value != 0;
}
- uint32 GetData(uint32 data) const OVERRIDE
+ uint32 GetData(uint32 data) const override
{
if (data == DATA_ON_THE_ROCKS)
return onTheRocks;
@@ -168,7 +168,7 @@ class boss_keleseth : public CreatureScript
return 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -221,7 +221,7 @@ class boss_keleseth : public CreatureScript
bool onTheRocks;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUtgardeKeepAI<boss_kelesethAI>(creature);
}
@@ -236,13 +236,13 @@ class npc_vrykul_skeleton : public CreatureScript
{
npc_vrykul_skeletonAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
events.ScheduleEvent(EVENT_DECREPIFY, urand(4, 6) * IN_MILLISECONDS);
}
- void DamageTaken(Unit* /*doneBy*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*doneBy*/, uint32& damage) override
{
if (damage >= me->GetHealth())
{
@@ -265,7 +265,7 @@ class npc_vrykul_skeleton : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -312,7 +312,7 @@ class npc_vrykul_skeleton : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUtgardeKeepAI<npc_vrykul_skeletonAI>(creature);
}
@@ -336,13 +336,13 @@ class spell_frost_tomb : public SpellScriptLoader
creature->DespawnOrUnsummon(1000);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_frost_tomb_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_frost_tomb_AuraScript();
}
@@ -354,7 +354,7 @@ class achievement_on_the_rocks : public AchievementCriteriaScript
public:
achievement_on_the_rocks() : AchievementCriteriaScript("achievement_on_the_rocks") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
return target && target->IsAIEnabled && target->GetAI()->GetData(DATA_ON_THE_ROCKS);
}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp
index 76ae2a1d374..8e619864201 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp
@@ -89,7 +89,7 @@ class boss_skarvald_the_constructor : public CreatureScript
bool Dalronn_isDead;
bool Enraged;
- void Reset() OVERRIDE
+ void Reset() override
{
Charge_Timer = 5000;
StoneStrike_Timer = 10000;
@@ -103,7 +103,7 @@ class boss_skarvald_the_constructor : public CreatureScript
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (!ghost)
{
@@ -112,7 +112,7 @@ class boss_skarvald_the_constructor : public CreatureScript
}
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if (!Enraged && !ghost && me->HealthBelowPctDamaged(15, damage))
{
@@ -126,7 +126,7 @@ class boss_skarvald_the_constructor : public CreatureScript
summons.DespawnAll();
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
if (!ghost)
{
@@ -155,13 +155,13 @@ class boss_skarvald_the_constructor : public CreatureScript
}
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (!ghost && who->GetTypeId() == TYPEID_PLAYER)
Talk(YELL_SKARVALD_KILL);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -201,7 +201,7 @@ class boss_skarvald_the_constructor : public CreatureScript
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, SkarvaldChargePredicate(me)))
DoCast(target, SPELL_CHARGE);
- Charge_Timer = 5000+rand()%5000;
+ Charge_Timer = 5000 + rand32() % 5000;
}
else
Charge_Timer -= diff;
@@ -209,7 +209,7 @@ class boss_skarvald_the_constructor : public CreatureScript
if (StoneStrike_Timer <= diff)
{
DoCastVictim(SPELL_STONE_STRIKE);
- StoneStrike_Timer = 5000+rand()%5000;
+ StoneStrike_Timer = 5000 + rand32() % 5000;
}
else
StoneStrike_Timer -= diff;
@@ -219,7 +219,7 @@ class boss_skarvald_the_constructor : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUtgardeKeepAI<boss_skarvald_the_constructorAI>(creature);
}
@@ -244,7 +244,7 @@ class boss_dalronn_the_controller : public CreatureScript
uint32 AggroYell_Timer;
bool Skarvald_isDead;
- void Reset() OVERRIDE
+ void Reset() override
{
ShadowBolt_Timer = 1000;
Debilitate_Timer = 5000;
@@ -259,7 +259,7 @@ class boss_dalronn_the_controller : public CreatureScript
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (!ghost)
{
@@ -273,7 +273,7 @@ class boss_dalronn_the_controller : public CreatureScript
summons.DespawnAll();
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
if (!ghost)
{
@@ -302,13 +302,13 @@ class boss_dalronn_the_controller : public CreatureScript
}
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (!ghost && who->GetTypeId() == TYPEID_PLAYER)
Talk(YELL_DALRONN_KILL);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -374,7 +374,7 @@ class boss_dalronn_the_controller : public CreatureScript
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
DoCast(target, SPELL_DEBILITATE);
- Debilitate_Timer = 5000+rand()%5000;
+ Debilitate_Timer = 5000 + rand32() % 5000;
}
}
else
@@ -387,7 +387,7 @@ class boss_dalronn_the_controller : public CreatureScript
if (!me->IsNonMeleeSpellCast(false))
{
DoCast(me, H_SPELL_SUMMON_SKELETONS);
- Summon_Timer = (rand()%10000) + 20000;
+ Summon_Timer = (rand32() % 10000) + 20000;
}
}
else
@@ -398,7 +398,7 @@ class boss_dalronn_the_controller : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUtgardeKeepAI<boss_dalronn_the_controllerAI>(creature);
}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp
index 763dcda24e1..69229be1771 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp
@@ -51,7 +51,7 @@ class instance_utgarde_keep : public InstanceMapScript
IngvarGUID = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -74,7 +74,7 @@ class instance_utgarde_keep : public InstanceMapScript
}
}
- void OnCreatureRemove(Creature* creature) OVERRIDE
+ void OnCreatureRemove(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -87,7 +87,7 @@ class instance_utgarde_keep : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -136,7 +136,7 @@ class instance_utgarde_keep : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -149,7 +149,7 @@ class instance_utgarde_keep : public InstanceMapScript
}
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -168,7 +168,7 @@ class instance_utgarde_keep : public InstanceMapScript
return 0;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -191,7 +191,7 @@ class instance_utgarde_keep : public InstanceMapScript
}
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -205,7 +205,7 @@ class instance_utgarde_keep : public InstanceMapScript
return saveStream.str();
}
- void Load(char const* str) OVERRIDE
+ void Load(char const* str) override
{
if (!str)
{
@@ -249,7 +249,7 @@ class instance_utgarde_keep : public InstanceMapScript
uint64 IngvarGUID;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_utgarde_keep_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
index 0ad12a15092..e54c8847d46 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
@@ -41,7 +41,7 @@ class npc_dragonflayer_forge_master : public CreatureScript
_forgeId = 0;
}
- void Reset() OVERRIDE
+ void Reset() override
{
if (!_forgeId)
_forgeId = GetForgeMasterType();
@@ -53,7 +53,7 @@ class npc_dragonflayer_forge_master : public CreatureScript
_instance->SetData(DATA_FORGE_1 + _forgeId - 1, NOT_STARTED);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (!_forgeId)
_forgeId = GetForgeMasterType();
@@ -62,7 +62,7 @@ class npc_dragonflayer_forge_master : public CreatureScript
_instance->SetData(DATA_FORGE_1 + _forgeId - 1, DONE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (!_forgeId)
_forgeId = GetForgeMasterType();
@@ -73,7 +73,7 @@ class npc_dragonflayer_forge_master : public CreatureScript
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!_forgeId)
_forgeId = GetForgeMasterType();
@@ -108,7 +108,7 @@ class npc_dragonflayer_forge_master : public CreatureScript
uint8 _forgeId;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUtgardeKeepAI<npc_dragonflayer_forge_masterAI>(creature);
}
@@ -128,7 +128,7 @@ class spell_ticking_time_bomb : public SpellScriptLoader
{
PrepareAuraScript(spell_ticking_time_bomb_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TICKING_TIME_BOMB_EXPLODE))
return false;
@@ -141,13 +141,13 @@ class spell_ticking_time_bomb : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), SPELL_TICKING_TIME_BOMB_EXPLODE, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectRemove += AuraEffectRemoveFn(spell_ticking_time_bomb_AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_ticking_time_bomb_AuraScript();
}
@@ -167,7 +167,7 @@ class spell_fixate : public SpellScriptLoader
{
PrepareSpellScript(spell_fixate_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_FIXATE_TRIGGER))
return false;
@@ -179,13 +179,13 @@ class spell_fixate : public SpellScriptLoader
GetHitUnit()->CastSpell(GetCaster(), SPELL_FIXATE_TRIGGER, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_fixate_SpellScript::HandleScriptEffect, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_fixate_SpellScript();
}
@@ -223,7 +223,7 @@ class npc_enslaved_proto_drake : public CreatureScript
_setData = false;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_REND, urand(2000, 3000));
@@ -231,7 +231,7 @@ class npc_enslaved_proto_drake : public CreatureScript
_events.ScheduleEvent(EVENT_KNOCKAWAY, urand(3500, 6000));
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == WAYPOINT_MOTION_TYPE && id == POINT_LAST)
{
@@ -239,7 +239,7 @@ class npc_enslaved_proto_drake : public CreatureScript
}
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
if (type == TYPE_PROTODRAKE_AT && data == DATA_PROTODRAKE_MOVE && !_setData && me->GetDistance(protodrakeCheckPos) < 5.0f)
{
@@ -249,7 +249,7 @@ class npc_enslaved_proto_drake : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -289,7 +289,7 @@ class npc_enslaved_proto_drake : public CreatureScript
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_enslaved_proto_drakeAI(creature);
}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
index 7c42f75b72f..245cf46336d 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
@@ -102,7 +102,7 @@ public:
uint8 AddCount;
Phase Sequence[4];
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
@@ -135,12 +135,12 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who)
return;
@@ -157,7 +157,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (currentPhase != PHASE_GORTOK_PALEHOOF)
return;
@@ -187,19 +187,19 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
//Talk(SAY_DEATH);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void DoAction(int32 actionId) OVERRIDE
+ void DoAction(int32 actionId) override
{
if (actionId != ACTION_NEXT_PHASE)
return;
@@ -226,7 +226,7 @@ public:
currentPhase = move;
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_NOT_ATTACKABLE_1|UNIT_FLAG_IMMUNE_TO_PC);
me->SetStandState(UNIT_STAND_STATE_STAND);
@@ -234,7 +234,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUtgardePinnacleAI<boss_palehoofAI>(creature);
}
@@ -254,7 +254,7 @@ class npc_ravenous_furbolg : public CreatureScript
public:
npc_ravenous_furbolg() : CreatureScript("npc_ravenous_furbolg") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ravenous_furbolgAI>(creature);
}
@@ -272,7 +272,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
uiChainLightingTimer = 5000;
uiCrazedTimer = 10000;
@@ -288,7 +288,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -297,25 +297,25 @@ public:
if (uiChainLightingTimer <= diff)
{
DoCastVictim(SPELL_CHAIN_LIGHTING);
- uiChainLightingTimer = 5000 + rand() % 5000;
+ uiChainLightingTimer = 5000 + rand32() % 5000;
} else uiChainLightingTimer -= diff;
if (uiCrazedTimer <= diff)
{
DoCast(me, SPELL_CRAZED);
- uiCrazedTimer = 8000 + rand() % 4000;
+ uiCrazedTimer = 8000 + rand32() % 4000;
} else uiCrazedTimer -= diff;
if (uiTerrifyingRoarTimer <= diff)
{
DoCast(me, SPELL_TERRIFYING_ROAR);
- uiTerrifyingRoarTimer = 10000 + rand() % 10000;
+ uiTerrifyingRoarTimer = 10000 + rand32() % 10000;
} else uiTerrifyingRoarTimer -= diff;
DoMeleeAttackIfReady();
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who)
return;
@@ -332,13 +332,13 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* palehoof = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_GORTOK_PALEHOOF)))
palehoof->AI()->DoAction(ACTION_NEXT_PHASE);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC);
me->SetStandState(UNIT_STAND_STATE_STAND);
@@ -362,7 +362,7 @@ class npc_frenzied_worgen : public CreatureScript
public:
npc_frenzied_worgen() : CreatureScript("npc_frenzied_worgen") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_frenzied_worgenAI>(creature);
}
@@ -380,7 +380,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
uiMortalWoundTimer = 5000;
uiEnrage1Timer = 15000;
@@ -396,7 +396,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -405,7 +405,7 @@ public:
if (uiMortalWoundTimer <= diff)
{
DoCastVictim(SPELL_MORTAL_WOUND);
- uiMortalWoundTimer = 3000 + rand() % 4000;
+ uiMortalWoundTimer = 3000 + rand32() % 4000;
} else uiMortalWoundTimer -= diff;
if (uiEnrage1Timer <= diff)
@@ -423,7 +423,7 @@ public:
DoMeleeAttackIfReady();
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who)
return;
@@ -441,13 +441,13 @@ public:
instance->SetBossState(DATA_GORTOK_PALEHOOF, IN_PROGRESS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* palehoof = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_GORTOK_PALEHOOF)))
palehoof->AI()->DoAction(ACTION_NEXT_PHASE);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC);
me->SetStandState(UNIT_STAND_STATE_STAND);
@@ -472,7 +472,7 @@ class npc_ferocious_rhino : public CreatureScript
public:
npc_ferocious_rhino() : CreatureScript("npc_ferocious_rhino") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ferocious_rhinoAI>(creature);
}
@@ -490,7 +490,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
uiStompTimer = 10000;
uiGoreTimer = 15000;
@@ -506,7 +506,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -515,26 +515,26 @@ public:
if (uiStompTimer <= diff)
{
DoCastVictim(SPELL_STOMP);
- uiStompTimer = 8000 + rand() % 4000;
+ uiStompTimer = 8000 + rand32() % 4000;
} else uiStompTimer -= diff;
if (uiGoreTimer <= diff)
{
DoCastVictim(SPELL_GORE);
- uiGoreTimer = 13000 + rand() % 4000;
+ uiGoreTimer = 13000 + rand32() % 4000;
} else uiGoreTimer -= diff;
if (uiGrievousWoundTimer <= diff)
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_GRIEVOUS_WOUND);
- uiGrievousWoundTimer = 18000 + rand() % 4000;
+ uiGrievousWoundTimer = 18000 + rand32() % 4000;
} else uiGrievousWoundTimer -= diff;
DoMeleeAttackIfReady();
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who)
return;
@@ -551,13 +551,13 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* palehoof = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_GORTOK_PALEHOOF)))
palehoof->AI()->DoAction(ACTION_NEXT_PHASE);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC);
me->SetStandState(UNIT_STAND_STATE_STAND);
@@ -587,7 +587,7 @@ class npc_massive_jormungar : public CreatureScript
public:
npc_massive_jormungar() : CreatureScript("npc_massive_jormungar") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_massive_jormungarAI>(creature);
}
@@ -605,7 +605,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
uiAcidSpitTimer = 3000;
uiAcidSplatterTimer = 12000;
@@ -621,7 +621,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -631,26 +631,26 @@ public:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_ACID_SPIT);
- uiAcidSpitTimer = 2000 + rand() % 2000;
+ uiAcidSpitTimer = 2000 + rand32() % 2000;
} else uiAcidSpitTimer -= diff;
if (uiAcidSplatterTimer <= diff)
{
DoCast(me, SPELL_POISON_BREATH);
- uiAcidSplatterTimer = 10000 + rand() % 4000;
+ uiAcidSplatterTimer = 10000 + rand32() % 4000;
} else uiAcidSplatterTimer -= diff;
if (uiPoisonBreathTimer <= diff)
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_POISON_BREATH);
- uiPoisonBreathTimer = 8000 + rand() % 4000;
+ uiPoisonBreathTimer = 8000 + rand32() % 4000;
} else uiPoisonBreathTimer -= diff;
DoMeleeAttackIfReady();
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who)
return;
@@ -667,13 +667,13 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* palehoof = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_GORTOK_PALEHOOF)))
palehoof->AI()->DoAction(ACTION_NEXT_PHASE);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC);
me->SetStandState(UNIT_STAND_STATE_STAND);
@@ -688,7 +688,7 @@ class npc_palehoof_orb : public CreatureScript
public:
npc_palehoof_orb() : CreatureScript("npc_palehoof_orb") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_palehoof_orbAI>(creature);
}
@@ -704,7 +704,7 @@ public:
uint32 SummonTimer;
Phase currentPhase;
- void Reset() OVERRIDE
+ void Reset() override
{
currentPhase = PHASE_NONE;
SummonTimer = 5000;
@@ -714,7 +714,7 @@ public:
me->SetSpeed(MOVE_FLIGHT, 0.5f);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (currentPhase == PHASE_NONE)
return;
@@ -760,7 +760,7 @@ public:
SummonTimer -= diff;
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -802,7 +802,7 @@ class go_palehoof_sphere : public GameObjectScript
public:
go_palehoof_sphere() : GameObjectScript("go_palehoof_sphere") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
InstanceScript* instance = go->GetInstanceScript();
if (!instance)
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
index e9cf806118f..ea44d76e7e6 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
@@ -160,7 +160,7 @@ class boss_skadi : public CreatureScript
public:
boss_skadi() : CreatureScript("boss_skadi") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_skadiAI>(creature);
}
@@ -190,7 +190,7 @@ public:
CombatPhase Phase;
- void Reset() OVERRIDE
+ void Reset() override
{
triggersGUID.clear();
@@ -206,22 +206,22 @@ public:
Summons.DespawnAll();
me->SetSpeed(MOVE_FLIGHT, 3.0f);
- if ((Unit::GetCreature(*me, m_uiGraufGUID) == NULL) && !me->IsMounted())
+ if ((ObjectAccessor::GetCreature(*me, m_uiGraufGUID) == NULL) && !me->IsMounted())
me->SummonCreature(NPC_GRAUF, Location[0].GetPositionX(), Location[0].GetPositionY(), Location[0].GetPositionZ(), 3.0f);
instance->SetBossState(DATA_SKADI_THE_RUTHLESS, NOT_STARTED);
instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
me->SetCanFly(false);
me->Dismount();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
- if (!Unit::GetCreature(*me, m_uiGraufGUID))
+ if (!ObjectAccessor::GetCreature(*me, m_uiGraufGUID))
me->SummonCreature(NPC_GRAUF, Location[0].GetPositionX(), Location[0].GetPositionY(), Location[0].GetPositionZ(), 3.0f);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
@@ -240,7 +240,7 @@ public:
Summons.DespawnEntry(NPC_GRAUF);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
switch (summoned->GetEntry())
{
@@ -263,14 +263,14 @@ public:
Summons.Summon(summoned);
}
- void SummonedCreatureDespawn(Creature* summoned) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summoned) override
{
if (summoned->GetEntry() == NPC_GRAUF)
m_uiGraufGUID = 0;
Summons.Despawn(summoned);
}
- void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
if (spell->Id == SPELL_HARPOON_DAMAGE)
{
@@ -296,7 +296,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
switch (Phase)
{
@@ -401,14 +401,14 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
Summons.DespawnAll();
instance->SetBossState(DATA_SKADI_THE_RUTHLESS, DONE);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
@@ -421,15 +421,15 @@ public:
switch (urand(0, 2))
{
case 0:
- me->SummonCreature(NPC_YMIRJAR_WARRIOR, SpawnLoc.GetPositionX()+rand()%5, SpawnLoc.GetPositionY()+rand()%5, SpawnLoc.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
+ me->SummonCreature(NPC_YMIRJAR_WARRIOR, SpawnLoc.GetPositionX() + rand32() % 5, SpawnLoc.GetPositionY() + rand32() % 5, SpawnLoc.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
break;
case 1:
- me->SummonCreature(NPC_YMIRJAR_WITCH_DOCTOR, SpawnLoc.GetPositionX()+rand()%5, SpawnLoc.GetPositionY()+rand()%5, SpawnLoc.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
+ me->SummonCreature(NPC_YMIRJAR_WITCH_DOCTOR, SpawnLoc.GetPositionX() + rand32() % 5, SpawnLoc.GetPositionY() + rand32() % 5, SpawnLoc.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
break;
case 2:
- me->SummonCreature(NPC_YMIRJAR_HARPOONER, SpawnLoc.GetPositionX()+rand()%5, SpawnLoc.GetPositionY()+rand()%5, SpawnLoc.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
+ me->SummonCreature(NPC_YMIRJAR_HARPOONER, SpawnLoc.GetPositionX() + rand32() % 5, SpawnLoc.GetPositionY() + rand32() % 5, SpawnLoc.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
break;
}
}
@@ -463,13 +463,13 @@ class go_harpoon_launcher : public GameObjectScript
public:
go_harpoon_launcher() : GameObjectScript("go_harpoon_launcher") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
InstanceScript* instance = go->GetInstanceScript();
if (!instance)
return false;
- if (Creature* pSkadi = Unit::GetCreature(*go, instance->GetData64(DATA_SKADI_THE_RUTHLESS)))
+ if (Creature* pSkadi = ObjectAccessor::GetCreature(*go, instance->GetData64(DATA_SKADI_THE_RUTHLESS)))
player->CastSpell(pSkadi, SPELL_RAPID_FIRE, true);
return false;
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
index 2a24b1145c0..621ef20e7e4 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
@@ -140,7 +140,7 @@ class boss_svala : public CreatureScript
_introCompleted = false;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
_sacrificed = false;
@@ -158,20 +158,20 @@ class boss_svala : public CreatureScript
instance->SetData64(DATA_SACRIFICED_PLAYER, 0);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() == NPC_RITUAL_CHANNELER)
summon->CastSpell(summon, SPELL_SUMMONED_VIS, true);
summons.Summon(summon);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!who)
return;
@@ -193,13 +193,13 @@ class boss_svala : public CreatureScript
}
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (events.IsInPhase(SACRIFICING))
SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE);
@@ -208,7 +208,7 @@ class boss_svala : public CreatureScript
Talk(SAY_DEATH);
}
- void SpellHitTarget(Unit* /*target*/, SpellInfo const* spellInfo) OVERRIDE
+ void SpellHitTarget(Unit* /*target*/, SpellInfo const* spellInfo) override
{
if (spellInfo->Id == SPELL_RITUAL_STRIKE_EFF_1 && !events.IsInPhase(NORMAL) && !events.IsInPhase(SVALADEAD))
{
@@ -222,7 +222,7 @@ class boss_svala : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (events.IsInPhase(IDLE))
return;
@@ -383,7 +383,7 @@ class boss_svala : public CreatureScript
bool _introCompleted;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUtgardePinnacleAI<boss_svalaAI>(creature);
}
@@ -406,7 +406,7 @@ class npc_ritual_channeler : public CreatureScript
InstanceScript* instance;
uint32 paralyzeTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
paralyzeTimer = 1600;
@@ -414,7 +414,7 @@ class npc_ritual_channeler : public CreatureScript
DoCast(me, SPELL_SHADOWS_IN_THE_DARK);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
@@ -431,7 +431,7 @@ class npc_ritual_channeler : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUtgardePinnacleAI<npc_ritual_channelerAI>(creature);
}
@@ -446,9 +446,9 @@ class npc_spectator : public CreatureScript
{
npc_spectatorAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void MovementInform(uint32 motionType, uint32 pointId) OVERRIDE
+ void MovementInform(uint32 motionType, uint32 pointId) override
{
if (motionType == POINT_MOTION_TYPE)
{
@@ -460,7 +460,7 @@ class npc_spectator : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUtgardePinnacleAI<npc_spectatorAI>(creature);
}
@@ -495,13 +495,13 @@ class spell_paralyze_pinnacle : public SpellScriptLoader
unitList.remove_if(RitualTargetCheck());
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_paralyze_pinnacle_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_paralyze_pinnacle_SpellScript();
}
@@ -519,25 +519,25 @@ class npc_scourge_hulk : public CreatureScript
uint32 mightyBlow;
uint32 volatileInfection;
- void Reset() OVERRIDE
+ void Reset() override
{
mightyBlow = urand(4000, 9000);
volatileInfection = urand(10000, 14000);
killedByRitualStrike = false;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
return type == DATA_INCREDIBLE_HULK ? killedByRitualStrike : 0;
}
- void DamageTaken(Unit* attacker, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* attacker, uint32 &damage) override
{
if (damage >= me->GetHealth() && attacker->GetEntry() == NPC_SVALA_SORROWGRAVE)
killedByRitualStrike = true;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -567,7 +567,7 @@ class npc_scourge_hulk : public CreatureScript
bool killedByRitualStrike;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUtgardePinnacleAI<npc_scourge_hulkAI>(creature);
}
@@ -578,7 +578,7 @@ class achievement_incredible_hulk : public AchievementCriteriaScript
public:
achievement_incredible_hulk() : AchievementCriteriaScript("achievement_incredible_hulk") { }
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
return target && target->IsAIEnabled && target->GetAI()->GetData(DATA_INCREDIBLE_HULK);
}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
index ba1dd0fc42b..dfef80133c4 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
@@ -111,7 +111,7 @@ public:
m_uiActiveOrder[i] = i;
for (int i = 0; i < 3; ++i)
{
- int r = i + (rand() % (4 - i));
+ int r = i + (rand32() % (4 - i));
int temp = m_uiActiveOrder[i];
m_uiActiveOrder[i] = m_uiActiveOrder[r];
m_uiActiveOrder[r] = temp;
@@ -146,7 +146,7 @@ public:
uint64 m_uiActivedCreatureGUID;
uint64 m_uiOrbGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
m_bIsWalking = false;
@@ -176,19 +176,19 @@ public:
m_uiOrbGUID = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
}
- void SpellHitTarget(Unit* who, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* who, SpellInfo const* spell) override
{
if (who && who->GetTypeId() == TYPEID_PLAYER && spell->Id == 59302)
kingsBane = false;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_KINGS_BANE)
return kingsBane ? 1 : 0;
@@ -196,7 +196,7 @@ public:
return 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (m_bIsWalking)
{
@@ -275,7 +275,7 @@ public:
if (m_bIsActiveWithBJORN && m_uiAbility_BJORN_Timer <= diff)
{
//DoCast(me, SPELL_SUMMON_SPIRIT_FOUNT); // works fine, but using summon has better control
- if (Creature* temp = me->SummonCreature(NPC_SPIRIT_FOUNT, 385.0f + rand() % 10, -330.0f + rand() % 10, 104.756f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 180000))
+ if (Creature* temp = me->SummonCreature(NPC_SPIRIT_FOUNT, 385.0f + rand32() % 10, -330.0f + rand32() % 10, 104.756f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 180000))
{
temp->SetSpeed(MOVE_RUN, 0.4f);
temp->CastSpell(temp, DUNGEON_MODE(SPELL_SPIRIT_FOUNT, H_SPELL_SPIRIT_FOUNT), true);
@@ -307,7 +307,7 @@ public:
for (uint8 i = 0; i < 4; ++i)
{
//DoCast(me, SPELL_SUMMON_AVENGING_SPIRIT); // works fine, but using summon has better control
- if (Creature* temp = me->SummonCreature(NPC_AVENGING_SPIRIT, x + rand() % 10, y + rand() % 10, z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000))
+ if (Creature* temp = me->SummonCreature(NPC_AVENGING_SPIRIT, x + rand32() % 10, y + rand32() % 10, z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000))
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
@@ -354,13 +354,13 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
@@ -369,14 +369,14 @@ public:
void DespawnBoatGhosts(uint64& m_uiCreatureGUID)
{
if (m_uiCreatureGUID)
- if (Creature* temp = Unit::GetCreature(*me, m_uiCreatureGUID))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, m_uiCreatureGUID))
temp->DisappearAndDie();
m_uiCreatureGUID = 0;
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetUtgardePinnacleAI<boss_ymironAI>(creature);
}
@@ -387,7 +387,7 @@ class achievement_kings_bane : public AchievementCriteriaScript
public:
achievement_kings_bane() : AchievementCriteriaScript("achievement_kings_bane") { }
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp
index 5068abd0131..6eea38c32a3 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp
@@ -56,7 +56,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript
SacrificedPlayerGUID = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -95,7 +95,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -119,7 +119,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -132,7 +132,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript
}
}
- void SetData64(uint32 type, uint64 data) OVERRIDE
+ void SetData64(uint32 type, uint64 data) override
{
switch (type)
{
@@ -144,7 +144,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript
}
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -181,7 +181,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -192,7 +192,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript
return saveStream.str();
}
- void Load(char const* str) OVERRIDE
+ void Load(char const* str) override
{
if (!str)
{
@@ -244,7 +244,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript
uint64 SacrificedPlayerGUID;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_utgarde_pinnacle_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp
index 398a0308760..c164f8fbf60 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp
@@ -76,7 +76,7 @@ class boss_archavon : public CreatureScript
{
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_ROCK_SHARDS, 15000);
events.ScheduleEvent(EVENT_CHOKING_CLOUD, 30000);
@@ -87,7 +87,7 @@ class boss_archavon : public CreatureScript
}
// Below UpdateAI may need review/debug.
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -132,7 +132,7 @@ class boss_archavon : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_archavonAI(creature);
}
@@ -154,7 +154,7 @@ class npc_archavon_warder : public CreatureScript
EventMap events;
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
events.ScheduleEvent(EVENT_ROCK_SHOWER, 2000);
@@ -162,12 +162,12 @@ class npc_archavon_warder : public CreatureScript
events.ScheduleEvent(EVENT_WHIRL, 7500);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -203,7 +203,7 @@ class npc_archavon_warder : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_archavon_warderAI(creature);
}
@@ -219,7 +219,7 @@ class spell_archavon_rock_shards : public SpellScriptLoader
{
PrepareSpellScript(spell_archavon_rock_shards_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ROCK_SHARDS_VISUAL_L)
|| !sSpellMgr->GetSpellInfo(SPELL_ROCK_SHARDS_VISUAL_R)
@@ -243,13 +243,13 @@ class spell_archavon_rock_shards : public SpellScriptLoader
caster->CastSpell((Unit*)NULL, SPELL_ROCK_SHARDS_DAMAGE_R, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_archavon_rock_shards_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_archavon_rock_shards_SpellScript();
}
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp
index 7377029080f..ea5c5b9ee48 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp
@@ -80,7 +80,7 @@ class boss_emalon : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
@@ -88,7 +88,7 @@ class boss_emalon : public CreatureScript
me->SummonCreature(NPC_TEMPEST_MINION, TempestMinions[i], TEMPSUMMON_CORPSE_DESPAWN, 0);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
BossAI::JustSummoned(summoned);
@@ -97,13 +97,13 @@ class boss_emalon : public CreatureScript
summoned->AI()->AttackStart(me->GetVictim());
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (!summons.empty())
{
for (std::list<uint64>::const_iterator itr = summons.begin(); itr != summons.end(); ++itr)
{
- Creature* minion = Unit::GetCreature(*me, *itr);
+ Creature* minion = ObjectAccessor::GetCreature(*me, *itr);
if (minion && minion->IsAlive() && !minion->GetVictim() && minion->AI())
minion->AI()->AttackStart(who);
}
@@ -117,7 +117,7 @@ class boss_emalon : public CreatureScript
_EnterCombat();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -143,7 +143,7 @@ class boss_emalon : public CreatureScript
case EVENT_OVERCHARGE:
if (!summons.empty())
{
- Creature* minion = Unit::GetCreature(*me, Trinity::Containers::SelectRandomContainerElement(summons));
+ Creature* minion = ObjectAccessor::GetCreature(*me, Trinity::Containers::SelectRandomContainerElement(summons));
if (minion && minion->IsAlive())
{
minion->CastSpell(me, SPELL_OVERCHARGED, true);
@@ -166,7 +166,7 @@ class boss_emalon : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_emalonAI(creature);
}
@@ -187,13 +187,13 @@ class npc_tempest_minion : public CreatureScript
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
OverchargedTimer = 0;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* emalon = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_EMALON)))
{
@@ -205,7 +205,7 @@ class npc_tempest_minion : public CreatureScript
}
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
DoZoneInCombat();
events.ScheduleEvent(EVENT_SHOCK, 20000);
@@ -217,7 +217,7 @@ class npc_tempest_minion : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -266,7 +266,7 @@ class npc_tempest_minion : public CreatureScript
uint32 OverchargedTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_tempest_minionAI>(creature);
}
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp
index 9371068e231..b6c836eb0cd 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp
@@ -61,7 +61,7 @@ class boss_koralon : public CreatureScript
{
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoCast(me, SPELL_BURNING_FURY);
@@ -73,7 +73,7 @@ class boss_koralon : public CreatureScript
_EnterCombat();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -112,7 +112,7 @@ class boss_koralon : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_koralonAI(creature);
}
@@ -132,12 +132,12 @@ class npc_flame_warder : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
@@ -145,7 +145,7 @@ class npc_flame_warder : public CreatureScript
events.ScheduleEvent(EVENT_FW_METEOR_FISTS, 10000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -176,7 +176,7 @@ class npc_flame_warder : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_flame_warderAI(creature);
}
@@ -191,7 +191,7 @@ class spell_koralon_meteor_fists : public SpellScriptLoader
{
PrepareAuraScript(spell_koralon_meteor_fists_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_METEOR_FISTS_DAMAGE))
return false;
@@ -204,13 +204,13 @@ class spell_koralon_meteor_fists : public SpellScriptLoader
GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_METEOR_FISTS_DAMAGE, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_koralon_meteor_fists_AuraScript::TriggerFists, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_koralon_meteor_fists_AuraScript();
}
@@ -225,7 +225,7 @@ class spell_koralon_meteor_fists_damage : public SpellScriptLoader
{
PrepareSpellScript(spell_koralon_meteor_fists_damage_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_chainTargets = 0;
return true;
@@ -242,7 +242,7 @@ class spell_koralon_meteor_fists_damage : public SpellScriptLoader
SetHitDamage(GetHitDamage() / (_chainTargets + 1));
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_koralon_meteor_fists_damage_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_TARGET_ENEMY);
OnHit += SpellHitFn(spell_koralon_meteor_fists_damage_SpellScript::CalculateSplitDamage);
@@ -252,7 +252,7 @@ class spell_koralon_meteor_fists_damage : public SpellScriptLoader
uint8 _chainTargets;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_koralon_meteor_fists_damage_SpellScript();
}
@@ -267,7 +267,7 @@ class spell_flame_warder_meteor_fists : public SpellScriptLoader
{
PrepareAuraScript(spell_flame_warder_meteor_fists_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_FW_METEOR_FISTS_DAMAGE))
return false;
@@ -280,13 +280,13 @@ class spell_flame_warder_meteor_fists : public SpellScriptLoader
GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_FW_METEOR_FISTS_DAMAGE, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_flame_warder_meteor_fists_AuraScript::TriggerFists, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_flame_warder_meteor_fists_AuraScript();
}
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp
index bd2128a1b4c..caba44a7100 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp
@@ -65,7 +65,7 @@ class boss_toravon : public CreatureScript
{
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoCast(me, SPELL_FROZEN_MALLET);
@@ -76,7 +76,7 @@ class boss_toravon : public CreatureScript
_EnterCombat();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -112,7 +112,7 @@ class boss_toravon : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_toravonAI(creature);
}
@@ -130,12 +130,12 @@ class npc_frost_warder : public CreatureScript
{
npc_frost_warderAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
@@ -144,7 +144,7 @@ class npc_frost_warder : public CreatureScript
events.ScheduleEvent(EVENT_FROST_BLAST, 5000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -167,7 +167,7 @@ class npc_frost_warder : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_frost_warderAI(creature);
}
@@ -187,18 +187,18 @@ public:
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
done = false;
killTimer = 60000; // if after this time there is no victim -> destroy!
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!done)
{
@@ -222,7 +222,7 @@ public:
bool done;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_frozen_orbAI(creature);
}
@@ -250,7 +250,7 @@ class npc_frozen_orb_stalker : public CreatureScript
SetCombatMovement(false);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (spawned)
return;
@@ -275,7 +275,7 @@ class npc_frozen_orb_stalker : public CreatureScript
bool spawned;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_frozen_orb_stalkerAI>(creature);
}
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp
index 59b097d98b6..1f5b16f1a46 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp
@@ -44,7 +44,7 @@ class instance_vault_of_archavon : public InstanceMapScript
KoralonDeath = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -59,7 +59,7 @@ class instance_vault_of_archavon : public InstanceMapScript
}
}
- uint64 GetData64(uint32 identifier) const OVERRIDE
+ uint64 GetData64(uint32 identifier) const override
{
switch (identifier)
{
@@ -74,7 +74,7 @@ class instance_vault_of_archavon : public InstanceMapScript
return 0;
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -103,7 +103,7 @@ class instance_vault_of_archavon : public InstanceMapScript
return true;
}
- bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) OVERRIDE
+ bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) override
{
switch (criteria_id)
{
@@ -133,7 +133,7 @@ class instance_vault_of_archavon : public InstanceMapScript
time_t KoralonDeath;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_vault_of_archavon_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp
index e53d046b396..cca2b347af7 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp
@@ -48,7 +48,7 @@ class boss_cyanigosa : public CreatureScript
public:
boss_cyanigosa() : CreatureScript("boss_cyanigosa") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_cyanigosaAI>(creature);
}
@@ -68,7 +68,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
uiArcaneVacuumTimer = 10000;
uiBlizzardTimer = 15000;
@@ -78,17 +78,17 @@ public:
instance->SetData(DATA_CYANIGOSA_EVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetData(DATA_CYANIGOSA_EVENT, IN_PROGRESS);
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (instance->GetData(DATA_REMOVE_NPC) == 1)
{
@@ -138,14 +138,14 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetData(DATA_CYANIGOSA_EVENT, DONE);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -163,7 +163,7 @@ class achievement_defenseless : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp
index 441603dcdc8..b63709b34c8 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp
@@ -47,7 +47,7 @@ class boss_erekem : public CreatureScript
public:
boss_erekem() : CreatureScript("boss_erekem") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_erekemAI>(creature);
}
@@ -67,7 +67,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
uiBloodlustTimer = 15000;
uiChainHealTimer = 0;
@@ -91,7 +91,7 @@ public:
}
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -118,7 +118,7 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
DoCast(me, SPELL_EARTH_SHIELD);
@@ -136,10 +136,10 @@ public:
instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -174,7 +174,7 @@ public:
//If one of the adds is dead spawn heals faster
Creature* pGuard1 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_EREKEM_GUARD_1));
Creature* pGuard2 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_EREKEM_GUARD_2));
- uiChainHealTimer = ((pGuard1 && !pGuard1->IsAlive()) || (pGuard2 && !pGuard2->IsAlive()) ? 3000 : 8000) + rand()%3000;
+ uiChainHealTimer = ((pGuard1 && !pGuard1->IsAlive()) || (pGuard2 && !pGuard2->IsAlive()) ? 3000 : 8000) + rand32() % 3000;
}
} else uiChainHealTimer -= diff;
@@ -200,7 +200,7 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -216,7 +216,7 @@ public:
}
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -255,7 +255,7 @@ class npc_erekem_guard : public CreatureScript
public:
npc_erekem_guard() : CreatureScript("npc_erekem_guard") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_erekem_guardAI>(creature);
}
@@ -273,14 +273,14 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
uiStrikeTimer = urand(4000, 8000);
uiHowlingScreechTimer = urand(8000, 13000);
uiGushingWoundTimer = urand(1000, 3000);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -294,10 +294,10 @@ public:
}
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
index 7bdf8234087..4aede5e5f46 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
@@ -76,7 +76,7 @@ class boss_ichoron : public CreatureScript
public:
boss_ichoron() : CreatureScript("boss_ichoron") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_ichoronAI>(creature);
}
@@ -99,7 +99,7 @@ public:
SummonList m_waterElements;
- void Reset() OVERRIDE
+ void Reset() override
{
bIsExploded = false;
bIsFrenzy = false;
@@ -116,7 +116,7 @@ public:
instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
@@ -134,7 +134,7 @@ public:
instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -148,7 +148,7 @@ public:
}
}
- void DoAction(int32 param) OVERRIDE
+ void DoAction(int32 param) override
{
if (!me->IsAlive())
return;
@@ -192,7 +192,7 @@ public:
me->GetMotionMaster()->MoveChase(me->GetVictim());
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_DEHYDRATION)
return dehydration ? 1 : 0;
@@ -200,10 +200,10 @@ public:
return 0;
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!UpdateVictim())
return;
@@ -242,7 +242,7 @@ public:
if (!m_waterElements.empty())
{
for (std::list<uint64>::const_iterator itr = m_waterElements.begin(); itr != m_waterElements.end(); ++itr)
- if (Creature* temp = Unit::GetCreature(*me, *itr))
+ if (Creature* temp = ObjectAccessor::GetCreature(*me, *itr))
if (temp->IsAlive())
{
bIsWaterElementsAlive = true;
@@ -271,7 +271,7 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -295,7 +295,7 @@ public:
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned)
{
@@ -306,7 +306,7 @@ public:
}
}
- void SummonedCreatureDespawn(Creature* summoned) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summoned) override
{
if (summoned)
{
@@ -315,7 +315,7 @@ public:
}
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -331,7 +331,7 @@ class npc_ichor_globule : public CreatureScript
public:
npc_ichor_globule() : CreatureScript("npc_ichor_globule") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ichor_globuleAI>(creature);
}
@@ -347,22 +347,22 @@ public:
uint32 uiRangeCheck_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiRangeCheck_Timer = 1000;
DoCast(me, SPELL_WATER_GLOBULE);
}
- void AttackStart(Unit* /*who*/) OVERRIDE
+ void AttackStart(Unit* /*who*/) override
{
return;
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (uiRangeCheck_Timer < uiDiff)
{
- if (Creature* pIchoron = Unit::GetCreature(*me, instance->GetData64(DATA_ICHORON)))
+ if (Creature* pIchoron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ICHORON)))
{
if (me->IsWithinDist(pIchoron, 2.0f, false))
{
@@ -376,10 +376,10 @@ public:
else uiRangeCheck_Timer -= uiDiff;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
DoCast(me, SPELL_SPLASH);
- if (Creature* pIchoron = Unit::GetCreature(*me, instance->GetData64(DATA_ICHORON)))
+ if (Creature* pIchoron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ICHORON)))
if (pIchoron->AI())
pIchoron->AI()->DoAction(ACTION_WATER_ELEMENT_KILLED);
}
@@ -394,7 +394,7 @@ class achievement_dehydration : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp
index ef0e6d900e7..3a08a4510ca 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp
@@ -35,7 +35,7 @@ class boss_lavanthor : public CreatureScript
public:
boss_lavanthor() : CreatureScript("boss_lavanthor") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_lavanthorAI>(creature);
}
@@ -54,7 +54,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
uiFireboltTimer = 1000;
uiFlameBreathTimer = 5000;
@@ -66,7 +66,7 @@ public:
instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetData64(DATA_LAVANTHOR_CELL)))
if (pDoor->GetGoState() == GO_STATE_READY)
@@ -80,7 +80,7 @@ public:
instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -94,10 +94,10 @@ public:
}
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -133,7 +133,7 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (instance->GetData(DATA_WAVE_COUNT) == 6)
{
diff --git a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
index 5829adc7c86..12ace1b1c38 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
@@ -31,7 +31,7 @@ class boss_moragg : public CreatureScript
public:
boss_moragg() : CreatureScript("boss_moragg") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_moraggAI>(creature);
}
@@ -48,7 +48,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
uiOpticLinkTimer = 10000;
uiCorrosiveSalivaTimer = 5000;
@@ -59,7 +59,7 @@ public:
instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetData64(DATA_MORAGG_CELL)))
if (pDoor->GetGoState() == GO_STATE_READY)
@@ -73,7 +73,7 @@ public:
instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -87,10 +87,10 @@ public:
}
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -111,7 +111,7 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (instance->GetData(DATA_WAVE_COUNT) == 6)
{
diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
index 477be1ee56d..734c20000eb 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
@@ -61,7 +61,7 @@ class boss_xevozz : public CreatureScript
public:
boss_xevozz() : CreatureScript("boss_xevozz") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_xevozzAI>(creature);
}
@@ -79,7 +79,7 @@ public:
uint32 uiArcaneBarrageVolley_Timer;
uint32 uiArcaneBuffet_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
if (instance->GetData(DATA_WAVE_COUNT) == 6)
instance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED);
@@ -107,7 +107,7 @@ public:
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->SetSpeed(MOVE_RUN, 0.5f);
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
@@ -117,7 +117,7 @@ public:
}
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -131,7 +131,7 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetData64(DATA_XEVOZZ_CELL)))
@@ -146,10 +146,10 @@ public:
instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -177,7 +177,7 @@ public:
Talk(SAY_SPAWN);
DoCast(me, SPELL_SUMMON_ETHEREAL_SPHERE_1);
if (IsHeroic()) // extra one for heroic
- me->SummonCreature(NPC_ETHEREAL_SPHERE, me->GetPositionX()-5+rand()%10, me->GetPositionY()-5+rand()%10, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 40000);
+ me->SummonCreature(NPC_ETHEREAL_SPHERE, me->GetPositionX() - 5 + rand32() % 10, me->GetPositionY() - 5 + rand32() % 10, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 40000);
uiSummonEtherealSphere_Timer = urand(45000, 47000);
uiArcaneBuffet_Timer = urand(5000, 6000);
@@ -187,7 +187,7 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -204,7 +204,7 @@ public:
instance->SetData(DATA_WAVE_COUNT, 13);
}
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -220,7 +220,7 @@ class npc_ethereal_sphere : public CreatureScript
public:
npc_ethereal_sphere() : CreatureScript("npc_ethereal_sphere") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ethereal_sphereAI>(creature);
}
@@ -237,13 +237,13 @@ public:
uint32 uiSummonPlayers_Timer;
uint32 uiRangeCheck_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiSummonPlayers_Timer = urand(33000, 35000);
uiRangeCheck_Timer = 1000;
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -254,7 +254,7 @@ public:
if (uiRangeCheck_Timer < uiDiff)
{
- if (Creature* pXevozz = Unit::GetCreature(*me, instance->GetData64(DATA_XEVOZZ)))
+ if (Creature* pXevozz = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_XEVOZZ)))
{
float fDistance = me->GetDistance2d(pXevozz);
if (fDistance <= 3)
diff --git a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
index 746680e32e6..7ae1c7840db 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
@@ -56,7 +56,7 @@ class boss_zuramat : public CreatureScript
public:
boss_zuramat() : CreatureScript("boss_zuramat") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_zuramatAI>(creature);
}
@@ -75,7 +75,7 @@ public:
uint32 SpellShroudOfDarknessTimer;
bool voidDance;
- void Reset() OVERRIDE
+ void Reset() override
{
if (instance->GetData(DATA_WAVE_COUNT) == 6)
instance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED);
@@ -88,7 +88,7 @@ public:
voidDance = true;
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -102,7 +102,7 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetData64(DATA_ZURAMAT_CELL)))
@@ -117,10 +117,10 @@ public:
instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -148,13 +148,13 @@ public:
DoMeleeAttackIfReady();
}
- void SummonedCreatureDies(Creature* summoned, Unit* /*who*/) OVERRIDE
+ void SummonedCreatureDies(Creature* summoned, Unit* /*who*/) override
{
if (summoned->GetEntry() == NPC_VOID_SENTRY)
voidDance = false;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_VOID_DANCE)
return voidDance ? 1 : 0;
@@ -162,7 +162,7 @@ public:
return 0;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -178,7 +178,7 @@ public:
}
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -186,7 +186,7 @@ public:
Talk(SAY_SLAY);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summon->AI()->AttackStart(me->GetVictim());
summon->CastSpell((Unit*)NULL, SPELL_ZURAMAT_ADD_2);
@@ -203,7 +203,7 @@ class achievement_void_dance : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*player*/, Unit* target) override
{
if (!target)
return false;
diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
index 9d02929efdb..c799a2f1813 100644
--- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
+++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
@@ -105,7 +105,7 @@ class instance_violet_hold : public InstanceMapScript
public:
instance_violet_hold() : InstanceMapScript("instance_violet_hold", 608) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_violet_hold_InstanceMapScript(map);
}
@@ -168,7 +168,7 @@ public:
std::string str_data;
- void Initialize() OVERRIDE
+ void Initialize() override
{
uiMoragg = 0;
uiErekem = 0;
@@ -218,7 +218,7 @@ public:
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
}
- bool IsEncounterInProgress() const OVERRIDE
+ bool IsEncounterInProgress() const override
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
@@ -227,7 +227,7 @@ public:
return false;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -272,7 +272,7 @@ public:
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -310,7 +310,7 @@ public:
}
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -406,7 +406,7 @@ public:
}
}
- void SetData64(uint32 type, uint64 data) OVERRIDE
+ void SetData64(uint32 type, uint64 data) override
{
switch (type)
{
@@ -419,7 +419,7 @@ public:
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -440,7 +440,7 @@ public:
return 0;
}
- uint64 GetData64(uint32 identifier) const OVERRIDE
+ uint64 GetData64(uint32 identifier) const override
{
switch (identifier)
{
@@ -616,7 +616,7 @@ public:
}
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -633,7 +633,7 @@ public:
return str_data;
}
- void Load(const char* in) OVERRIDE
+ void Load(const char* in) override
{
if (!in)
{
@@ -682,7 +682,7 @@ public:
return true;
}
- void Update(uint32 diff) OVERRIDE
+ void Update(uint32 diff) override
{
if (!instance->HavePlayers())
return;
diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
index 5f79e609e01..9e2bb85e27a 100644
--- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
+++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
@@ -260,14 +260,14 @@ class npc_sinclari_vh : public CreatureScript
public:
npc_sinclari_vh() : CreatureScript("npc_sinclari_vh") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
{
case GOSSIP_ACTION_INFO_DEF+1:
player->CLOSE_GOSSIP_MENU();
- CAST_AI(npc_sinclari_vh::npc_sinclariAI, (creature->AI()))->uiPhase = 1;
+ ENSURE_AI(npc_sinclari_vh::npc_sinclariAI, (creature->AI()))->uiPhase = 1;
if (InstanceScript* instance = creature->GetInstanceScript())
instance->SetData(DATA_MAIN_EVENT_PHASE, SPECIAL);
break;
@@ -282,7 +282,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (InstanceScript* instance = creature->GetInstanceScript())
{
@@ -305,7 +305,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_sinclariAI>(creature);
}
@@ -322,7 +322,7 @@ public:
uint8 uiPhase;
uint32 uiTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiPhase = 0;
uiTimer = 0;
@@ -346,7 +346,7 @@ public:
}
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
ScriptedAI::UpdateAI(uiDiff);
@@ -425,7 +425,7 @@ class npc_azure_saboteur : public CreatureScript
public:
npc_azure_saboteur() : CreatureScript("npc_azure_saboteur") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_azure_saboteurAI>(creature);
}
@@ -444,7 +444,7 @@ public:
bool bHasGotMovingPoints;
uint32 uiBoss;
- void Reset() OVERRIDE
+ void Reset() override
{
if (!uiBoss)
uiBoss = instance->GetData(DATA_WAVE_COUNT) == 6 ? instance->GetData(DATA_FIRST_BOSS) : instance->GetData(DATA_SECOND_BOSS);
@@ -453,7 +453,7 @@ public:
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (uiBoss)
{
@@ -484,7 +484,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (instance->GetData(DATA_MAIN_EVENT_PHASE) != IN_PROGRESS)
me->CastStop();
@@ -535,7 +535,7 @@ public:
{
me->CastSpell(me, SABOTEUR_SHIELD_DISRUPTION, false);
me->DisappearAndDie();
- Creature* pSaboPort = Unit::GetCreature((*me), instance->GetData64(DATA_SABOTEUR_PORTAL));
+ Creature* pSaboPort = ObjectAccessor::GetCreature((*me), instance->GetData64(DATA_SABOTEUR_PORTAL));
if (pSaboPort)
pSaboPort->DisappearAndDie();
instance->SetData(DATA_START_BOSS_ENCOUNTER, 1);
@@ -549,7 +549,7 @@ class npc_teleportation_portal_vh : public CreatureScript
public:
npc_teleportation_portal_vh() : CreatureScript("npc_teleportation_portal_vh") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_teleportation_portalAI>(creature);
}
@@ -571,18 +571,18 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
uiSpawnTimer = 10000;
bPortalGuardianOrKeeperOrEliteSpawn = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (instance->GetData(DATA_REMOVE_NPC) == 1)
{
@@ -654,18 +654,18 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_WAVE_COUNT, instance->GetData(DATA_WAVE_COUNT)+1);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
listOfMobs.Summon(summoned);
instance->SetData64(DATA_ADD_TRASH_MOB, summoned->GetGUID());
}
- void SummonedCreatureDies(Creature* summoned, Unit* /*killer*/) OVERRIDE
+ void SummonedCreatureDies(Creature* summoned, Unit* /*killer*/) override
{
listOfMobs.Despawn(summoned);
instance->SetData64(DATA_DEL_TRASH_MOB, summoned->GetGUID());
@@ -690,7 +690,7 @@ struct violet_hold_trashAI : public npc_escortAI
uint32 portalLocationID;
uint32 secondPortalRouteID;
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (portalLocationID)
{
@@ -721,7 +721,7 @@ struct violet_hold_trashAI : public npc_escortAI
}
}
- void UpdateAI(uint32) OVERRIDE
+ void UpdateAI(uint32) override
{
if (instance->GetData(DATA_MAIN_EVENT_PHASE) != IN_PROGRESS)
me->CastStop();
@@ -778,7 +778,7 @@ struct violet_hold_trashAI : public npc_escortAI
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_NPC_PRESENCE_AT_DOOR_REMOVE, 1);
}
@@ -797,7 +797,7 @@ class npc_azure_invader : public CreatureScript
public:
npc_azure_invader() : CreatureScript("npc_azure_invader") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_azure_invaderAI>(creature);
}
@@ -814,7 +814,7 @@ public:
uint32 uiBrutalStrikeTimer;
uint32 uiSunderArmorTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiCleaveTimer = 5000;
uiImpaleTimer = 4000;
@@ -822,7 +822,7 @@ public:
uiSunderArmorTimer = 4000;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
violet_hold_trashAI::UpdateAI(diff);
npc_escortAI::UpdateAI(diff);
@@ -875,7 +875,7 @@ class npc_azure_binder : public CreatureScript
public:
npc_azure_binder() : CreatureScript("npc_azure_binder") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_azure_binderAI>(creature);
}
@@ -892,7 +892,7 @@ public:
uint32 uiFrostNovaTimer;
uint32 uiFrostboltTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiArcaneExplosionTimer = 5000;
uiArcainBarrageTimer = 4000;
@@ -900,7 +900,7 @@ public:
uiFrostboltTimer = 4000;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
violet_hold_trashAI::UpdateAI(diff);
npc_escortAI::UpdateAI(diff);
@@ -953,7 +953,7 @@ class npc_azure_mage_slayer : public CreatureScript
public:
npc_azure_mage_slayer() : CreatureScript("npc_azure_mage_slayer") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_azure_mage_slayerAI>(creature);
}
@@ -968,13 +968,13 @@ public:
uint32 uiArcaneEmpowermentTimer;
uint32 uiSpellLockTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiArcaneEmpowermentTimer = 5000;
uiSpellLockTimer = 5000;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
violet_hold_trashAI::UpdateAI(diff);
npc_escortAI::UpdateAI(diff);
@@ -1013,7 +1013,7 @@ class npc_azure_raider : public CreatureScript
public:
npc_azure_raider() : CreatureScript("npc_azure_raider") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_azure_raiderAI>(creature);
}
@@ -1028,13 +1028,13 @@ public:
uint32 uiConcussionBlowTimer;
uint32 uiMagicReflectionTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiConcussionBlowTimer = 5000;
uiMagicReflectionTimer = 8000;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
violet_hold_trashAI::UpdateAI(diff);
npc_escortAI::UpdateAI(diff);
@@ -1072,14 +1072,14 @@ public:
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_backstabTimer = 1300;
_tacticalBlinkTimer = 8000;
_tacticalBlinkCast =false;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
violet_hold_trashAI::UpdateAI(diff);
npc_escortAI::UpdateAI(diff);
@@ -1119,7 +1119,7 @@ public:
bool _tacticalBlinkCast;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_azure_stalkerAI>(creature);
}
@@ -1142,7 +1142,7 @@ public:
uint32 uiChainsOfIceTimer;
uint32 uiConeOfColdTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiArcaneBlastTimer = 5000;
uiSlowTimer = 4000;
@@ -1150,7 +1150,7 @@ public:
uiConeOfColdTimer = 4000;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
violet_hold_trashAI::UpdateAI(diff);
npc_escortAI::UpdateAI(diff);
@@ -1198,7 +1198,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_azure_spellbreakerAI>(creature);
}
@@ -1209,7 +1209,7 @@ class npc_azure_captain : public CreatureScript
public:
npc_azure_captain() : CreatureScript("npc_azure_captain") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_azure_captainAI>(creature);
}
@@ -1224,13 +1224,13 @@ public:
uint32 uiMortalStrikeTimer;
uint32 uiWhirlwindTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiMortalStrikeTimer = 5000;
uiWhirlwindTimer = 8000;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
violet_hold_trashAI::UpdateAI(diff);
npc_escortAI::UpdateAI(diff);
@@ -1261,7 +1261,7 @@ class npc_azure_sorceror : public CreatureScript
public:
npc_azure_sorceror() : CreatureScript("npc_azure_sorceror") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_azure_sorcerorAI>(creature);
}
@@ -1277,14 +1277,14 @@ public:
uint32 uiArcaneStreamTimerStartingValueHolder;
uint32 uiManaDetonationTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiArcaneStreamTimer = 4000;
uiArcaneStreamTimerStartingValueHolder = uiArcaneStreamTimer;
uiManaDetonationTimer = 5000;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
violet_hold_trashAI::UpdateAI(diff);
npc_escortAI::UpdateAI(diff);
@@ -1324,7 +1324,7 @@ public:
uint32 DespawnTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
DespawnTimer = 3000;
@@ -1332,9 +1332,9 @@ public:
DoCast(me, SPELL_ARCANE_SPHERE_PASSIVE, true);
}
- void EnterCombat(Unit * /*who*/) OVERRIDE { }
+ void EnterCombat(Unit * /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (DespawnTimer <= diff)
me->Kill(me);
@@ -1343,7 +1343,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_violet_hold_arcane_sphereAI(creature);
}
@@ -1354,7 +1354,7 @@ class go_activation_crystal : public GameObjectScript
public:
go_activation_crystal() : GameObjectScript("go_activation_crystal") { }
- bool OnGossipHello(Player * /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player * /*player*/, GameObject* go) override
{
go->EventInform(EVENT_ACTIVATE_CRYSTAL);
return false;
diff --git a/src/server/scripts/Northrend/isle_of_conquest.cpp b/src/server/scripts/Northrend/isle_of_conquest.cpp
index 1149c58e561..14763577c66 100644
--- a/src/server/scripts/Northrend/isle_of_conquest.cpp
+++ b/src/server/scripts/Northrend/isle_of_conquest.cpp
@@ -20,6 +20,9 @@
#include "PassiveAI.h"
#include "BattlegroundIC.h"
#include "Player.h"
+#include "Vehicle.h"
+#include "SpellScript.h"
+#include "SpellInfo.h"
// TO-DO: This should be done with SmartAI, but yet it does not correctly support vehicles's AIs.
// Even adding ReactState Passive we still have issues using SmartAI.
@@ -33,7 +36,7 @@ class npc_four_car_garage : public CreatureScript
{
npc_four_car_garageAI(Creature* creature) : NullCreatureAI(creature) { }
- void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) OVERRIDE
+ void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override
{
if (apply)
{
@@ -64,13 +67,135 @@ class npc_four_car_garage : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_four_car_garageAI(creature);
}
};
+class spell_ioc_gunship_portal : public SpellScriptLoader
+{
+ public:
+ spell_ioc_gunship_portal() : SpellScriptLoader("spell_ioc_gunship_portal") { }
+
+ class spell_ioc_gunship_portal_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_ioc_gunship_portal_SpellScript);
+
+ bool Load() override
+ {
+ return GetCaster()->GetTypeId() == TYPEID_PLAYER;
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ Player* caster = GetCaster()->ToPlayer();
+ if (Battleground* bg = caster->GetBattleground())
+ if (bg->GetTypeID(true) == BATTLEGROUND_IC)
+ bg->DoAction(1, caster->GetGUID());
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_ioc_gunship_portal_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_ioc_gunship_portal_SpellScript();
+ }
+};
+
+enum ParachuteIC
+{
+ SPELL_PARACHUTE_IC = 66657
+};
+
+class spell_ioc_parachute_ic : public SpellScriptLoader
+{
+ public:
+ spell_ioc_parachute_ic() : SpellScriptLoader("spell_ioc_parachute_ic") { }
+
+ class spell_ioc_parachute_ic_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_ioc_parachute_ic_AuraScript);
+
+ void HandleTriggerSpell(AuraEffect const* /*aurEff*/)
+ {
+ if (Player* target = GetTarget()->ToPlayer())
+ if (target->m_movementInfo.fallTime > 2000)
+ target->CastSpell(target, SPELL_PARACHUTE_IC, true);
+ }
+
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_ioc_parachute_ic_AuraScript::HandleTriggerSpell, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_ioc_parachute_ic_AuraScript();
+ }
+};
+
+enum Launch
+{
+ SPELL_LAUNCH_NO_FALLING_DAMAGE = 66251
+};
+
+class spell_ioc_launch : public SpellScriptLoader
+{
+ public:
+ spell_ioc_launch() : SpellScriptLoader("spell_ioc_launch") { }
+
+ class spell_ioc_launch_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_ioc_launch_SpellScript);
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ if (Player* player = GetHitPlayer())
+ player->AddAura(SPELL_LAUNCH_NO_FALLING_DAMAGE, player); // prevents falling damage
+ }
+
+ void Launch()
+ {
+ WorldLocation const* const position = GetExplTargetDest();
+
+ if (Player* player = GetHitPlayer())
+ {
+ player->ExitVehicle();
+
+ // A better research is needed
+ // There is no spell for this, the following calculation was based on void Spell::CalculateJumpSpeeds
+
+ float speedZ = 10.0f;
+ float dist = position->GetExactDist2d(player->GetPositionX(), player->GetPositionY());
+ float speedXY = dist;
+
+ player->GetMotionMaster()->MoveJump(position->GetPositionX(), position->GetPositionY(), position->GetPositionZ(), speedXY, speedZ);
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_ioc_launch_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_FORCE_CAST);
+ AfterHit += SpellHitFn(spell_ioc_launch_SpellScript::Launch);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_ioc_launch_SpellScript();
+ }
+};
+
void AddSC_isle_of_conquest()
{
new npc_four_car_garage();
+ new spell_ioc_gunship_portal();
+ new spell_ioc_parachute_ic();
+ new spell_ioc_launch();
}
diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp
index 6ea4490c79d..45b640f27be 100644
--- a/src/server/scripts/Northrend/zone_borean_tundra.cpp
+++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp
@@ -74,14 +74,14 @@ public:
uint8 phase;
uint64 casterGuid;
- void Reset() OVERRIDE
+ void Reset() override
{
phaseTimer = 500;
phase = 0;
casterGuid = 0;
}
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (phase || spell->Id != SPELL_SET_CART)
return;
@@ -94,9 +94,9 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!phase)
return;
@@ -162,7 +162,7 @@ public:
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_sinkhole_kill_creditAI(creature);
}
@@ -187,7 +187,7 @@ public:
{
npc_khunok_the_behemothAI(Creature* creature) : ScriptedAI(creature) { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
ScriptedAI::MoveInLineOfSight(who);
@@ -209,7 +209,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_khunok_the_behemothAI(creature);
}
@@ -231,7 +231,7 @@ class npc_keristrasza : public CreatureScript
public:
npc_keristrasza() : CreatureScript("npc_keristrasza") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -244,7 +244,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF + 1)
@@ -277,7 +277,7 @@ class npc_corastrasza : public CreatureScript
public:
npc_corastrasza() : CreatureScript("npc_corastrasza") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -289,7 +289,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -323,7 +323,7 @@ class npc_iruk : public CreatureScript
public:
npc_iruk() : CreatureScript("npc_iruk") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(QUEST_SPIRITS_WATCH_OVER_US) == QUEST_STATUS_INCOMPLETE)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_I, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
@@ -332,7 +332,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -375,12 +375,12 @@ public:
{
npc_nerubar_victimAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void Reset() override { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
Player* player = killer->ToPlayer();
if (!player)
@@ -400,7 +400,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_nerubar_victimAI(creature);
}
@@ -436,7 +436,7 @@ public:
bool setCrateNumber;
- void Reset() OVERRIDE
+ void Reset() override
{
if (!setCrateNumber)
setCrateNumber = true;
@@ -458,12 +458,12 @@ public:
}
}
- void DamageTaken(Unit* /*pDone_by*/, uint32& /*uiDamage*/) OVERRIDE
+ void DamageTaken(Unit* /*pDone_by*/, uint32& /*uiDamage*/) override
{
DoCast(me, SPELL_DROP_CRATE, true);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (setCrateNumber)
{
@@ -479,7 +479,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_jennyAI(creature);
}
@@ -498,7 +498,7 @@ public:
{
npc_fezzix_geartwistAI(Creature* creature) : ScriptedAI(creature) { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
ScriptedAI::MoveInLineOfSight(who);
@@ -519,7 +519,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_fezzix_geartwistAI(creature);
}
@@ -573,7 +573,7 @@ public:
uint8 phase;
uint32 phaseTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetVisible(false);
phaseTimer = 2500;
@@ -581,11 +581,11 @@ public:
go_caribouGUID = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (GameObject* go_caribou = me->GetMap()->GetGameObject(go_caribouGUID))
go_caribou->SetLootState(GO_JUST_DEACTIVATED);
@@ -600,7 +600,7 @@ public:
go_caribou->SetGoState(GO_STATE_READY);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (phaseTimer <= diff)
{
@@ -664,7 +664,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_nesingwary_trapperAI(creature);
}
@@ -701,7 +701,7 @@ public:
uint32 IntroTimer;
uint32 IntroPhase;
- void Reset() OVERRIDE
+ void Reset() override
{
if (!HasEscortState(STATE_ESCORT_ESCORTING))
{
@@ -710,7 +710,7 @@ public:
}
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -725,7 +725,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (IntroPhase)
{
@@ -781,12 +781,12 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_lurgglbrAI(creature);
}
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_ESCAPE_WINTERFIN_CAVERNS)
{
@@ -849,18 +849,18 @@ public:
uint64 HarpoonerGUID;
bool WithRedDragonBlood;
- void Reset() OVERRIDE
+ void Reset() override
{
WithRedDragonBlood = false;
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (me->IsValidAttackTarget(who))
AttackStart(who);
}
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (spell->Id == SPELL_DRAKE_HARPOON && caster->GetTypeId() == TYPEID_PLAYER)
{
@@ -870,7 +870,7 @@ public:
WithRedDragonBlood = true;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
FollowerAI::MoveInLineOfSight(who);
@@ -894,7 +894,7 @@ public:
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (WithRedDragonBlood && HarpoonerGUID && !me->HasAura(SPELL_RED_DRAGONBLOOD))
{
@@ -924,7 +924,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_nexus_drake_hatchlingAI(creature);
}
@@ -998,7 +998,7 @@ public:
uint32 phase;
uint32 phaseTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
me->RestoreFaction();
me->RemoveStandFlags(UNIT_STAND_STATE_SIT);
@@ -1017,7 +1017,7 @@ public:
phaseTimer = 0;
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -1050,7 +1050,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
@@ -1071,8 +1071,8 @@ public:
if (phaseTimer <= diff)
{
- Creature* talbot = me->GetCreature(*me, talbotGUID);
- Creature* arthas = me->GetCreature(*me, arthasGUID);
+ Creature* talbot = ObjectAccessor::GetCreature(*me, talbotGUID);
+ Creature* arthas = ObjectAccessor::GetCreature(*me, arthasGUID);
switch (phase)
{
case 1:
@@ -1085,7 +1085,7 @@ public:
case 2:
if (talbot)
{
- talbot->UpdateEntry(NPC_PRINCE_VALANAR, ALLIANCE);
+ talbot->UpdateEntry(NPC_PRINCE_VALANAR);
talbot->setFaction(14);
talbot->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
talbot->SetReactState(REACT_PASSIVE);
@@ -1209,9 +1209,9 @@ public:
break;
case 17:
- if (Creature* leryssa = me->GetCreature(*me, leryssaGUID))
+ if (Creature* leryssa = ObjectAccessor::GetCreature(*me, leryssaGUID))
leryssa->RemoveFromWorld();
- if (Creature* arlos= me->GetCreature(*me, arlosGUID))
+ if (Creature* arlos= ObjectAccessor::GetCreature(*me, arlosGUID))
arlos->RemoveFromWorld();
if (talbot)
talbot->RemoveFromWorld();
@@ -1228,23 +1228,23 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
- if (Creature* talbot = me->GetCreature(*me, talbotGUID))
+ if (Creature* talbot = ObjectAccessor::GetCreature(*me, talbotGUID))
talbot->RemoveFromWorld();
- if (Creature* leryssa = me->GetCreature(*me, leryssaGUID))
+ if (Creature* leryssa = ObjectAccessor::GetCreature(*me, leryssaGUID))
leryssa->RemoveFromWorld();
- if (Creature* arlos = me->GetCreature(*me, arlosGUID))
+ if (Creature* arlos = ObjectAccessor::GetCreature(*me, arlosGUID))
arlos->RemoveFromWorld();
- if (Creature* arthas = me->GetCreature(*me, arthasGUID))
+ if (Creature* arthas = ObjectAccessor::GetCreature(*me, arthasGUID))
arthas->RemoveFromWorld();
}
};
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -1257,20 +1257,20 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
{
case GOSSIP_ACTION_INFO_DEF+1:
- CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
- CAST_AI(npc_escortAI, (creature->AI()))->SetMaxPlayerDistance(200.0f);
+ ENSURE_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
+ ENSURE_AI(npc_escortAI, (creature->AI()))->SetMaxPlayerDistance(200.0f);
break;
}
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_thassarianAI(creature);
}
@@ -1289,23 +1289,23 @@ public:
{
npc_image_lich_kingAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->RestoreFaction();
}
- void MovementInform(uint32 uiType, uint32 /*uiId*/) OVERRIDE
+ void MovementInform(uint32 uiType, uint32 /*uiId*/) override
{
if (uiType != POINT_MOTION_TYPE)
return;
if (me->IsSummon())
if (Unit* summoner = me->ToTempSummon()->GetSummoner())
- CAST_AI(npc_thassarian::npc_thassarianAI, summoner->ToCreature()->AI())->arthasInPosition = true;
+ ENSURE_AI(npc_thassarian::npc_thassarianAI, summoner->ToCreature()->AI())->arthasInPosition = true;
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_image_lich_kingAI(creature);
}
@@ -1324,7 +1324,7 @@ public:
{
npc_general_arlosAI(Creature* creature) : ScriptedAI(creature) { }
- void MovementInform(uint32 uiType, uint32 /*uiId*/) OVERRIDE
+ void MovementInform(uint32 uiType, uint32 /*uiId*/) override
{
if (uiType != POINT_MOTION_TYPE)
return;
@@ -1333,11 +1333,11 @@ public:
me->CastSpell(me, SPELL_STUN, true);
if (me->IsSummon())
if (Unit* summoner = me->ToTempSummon()->GetSummoner())
- CAST_AI(npc_thassarian::npc_thassarianAI, summoner->ToCreature()->AI())->arlosInPosition = true;
+ ENSURE_AI(npc_thassarian::npc_thassarianAI, summoner->ToCreature()->AI())->arlosInPosition = true;
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_general_arlosAI(creature);
}
@@ -1371,7 +1371,7 @@ public:
uint32 deflectionTimer;
uint32 soulBlastTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
leryssaGUID = 0;
arlosGUID = 0;
@@ -1380,17 +1380,17 @@ public:
deflectionTimer = urand(20000, 25000);
soulBlastTimer = urand(12000, 18000);
}
- void MovementInform(uint32 uiType, uint32 /*uiId*/) OVERRIDE
+ void MovementInform(uint32 uiType, uint32 /*uiId*/) override
{
if (uiType != POINT_MOTION_TYPE)
return;
if (me->IsSummon())
if (Unit* summoner = me->ToTempSummon()->GetSummoner())
- CAST_AI(npc_thassarian::npc_thassarianAI, summoner->ToCreature()->AI())->talbotInPosition = true;
+ ENSURE_AI(npc_thassarian::npc_thassarianAI, summoner->ToCreature()->AI())->talbotInPosition = true;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (bCheck)
{
@@ -1428,13 +1428,13 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
if (!leryssaGUID || !arlosGUID)
return;
- Creature* leryssa = Unit::GetCreature(*me, leryssaGUID);
- Creature* arlos = Unit::GetCreature(*me, arlosGUID);
+ Creature* leryssa = ObjectAccessor::GetCreature(*me, leryssaGUID);
+ Creature* arlos = ObjectAccessor::GetCreature(*me, arlosGUID);
if (!leryssa || !arlos)
return;
@@ -1452,7 +1452,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_counselor_talbotAI(creature);
}
@@ -1483,7 +1483,7 @@ public:
uint32 phase;
uint32 phaseTimer;
- void MovementInform(uint32 type, uint32 /*uiId*/) OVERRIDE
+ void MovementInform(uint32 type, uint32 /*uiId*/) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -1491,14 +1491,14 @@ public:
if (!bDone)
{
if (Creature* talbot = me->FindNearestCreature(NPC_PRINCE_VALANAR, 50.0f, true))
- CAST_AI(npc_counselor_talbot::npc_counselor_talbotAI, talbot->GetAI())->bCheck = true;
+ ENSURE_AI(npc_counselor_talbot::npc_counselor_talbotAI, talbot->GetAI())->bCheck = true;
me->AddUnitState(UNIT_STATE_STUNNED);
me->CastSpell(me, SPELL_STUN, true);
if (me->IsSummon())
if (Unit* summoner = me->ToTempSummon()->GetSummoner())
- CAST_AI(npc_thassarian::npc_thassarianAI, summoner->GetAI())->leryssaInPosition = true;
+ ENSURE_AI(npc_thassarian::npc_thassarianAI, summoner->GetAI())->leryssaInPosition = true;
bDone = true;
}
else
@@ -1512,7 +1512,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
ScriptedAI::UpdateAI(diff);
@@ -1566,7 +1566,7 @@ public:
if (Creature* thassarian = summoner->ToCreature())
{
thassarian->AI()->Talk(SAY_THASSARIAN_7);
- CAST_AI(npc_thassarian::npc_thassarianAI, thassarian->GetAI())->phase = 16;
+ ENSURE_AI(npc_thassarian::npc_thassarianAI, thassarian->GetAI())->phase = 16;
}
phaseTimer = 5000;
phase = 0;
@@ -1581,7 +1581,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_leryssaAI(creature);
}
@@ -1612,37 +1612,36 @@ public:
bool bEnslaved;
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetReactState(REACT_AGGRESSIVE);
bEnslaved = false;
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (me->IsValidAttackTarget(who))
AttackStart(who);
}
- void SpellHit(Unit* pCaster, const SpellInfo* pSpell) OVERRIDE
+ void SpellHit(Unit* pCaster, const SpellInfo* pSpell) override
{
if (pSpell->Id == SPELL_ARCANE_CHAINS && pCaster->GetTypeId() == TYPEID_PLAYER && !HealthAbovePct(50) && !bEnslaved)
{
EnterEvadeMode(); //We make sure that the npc is not attacking the player!
me->SetReactState(REACT_PASSIVE);
- StartFollow(pCaster->ToPlayer(), 0, NULL);
- me->UpdateEntry(NPC_CAPTURED_BERLY_SORCERER, TEAM_NEUTRAL);
+ StartFollow(pCaster->ToPlayer());
+ me->UpdateEntry(NPC_CAPTURED_BERLY_SORCERER);
DoCast(me, SPELL_COSMETIC_ENSLAVE_CHAINS_SELF, true);
if (Player* player = pCaster->ToPlayer())
- player->KilledMonsterCredit(NPC_CAPTURED_BERLY_SORCERER, 0);
+ player->KilledMonsterCredit(NPC_CAPTURED_BERLY_SORCERER);
bEnslaved = true;
}
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
-
+ void MoveInLineOfSight(Unit* who) override
{
FollowerAI::MoveInLineOfSight(who);
@@ -1653,7 +1652,7 @@ public:
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
return;
@@ -1662,7 +1661,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_beryl_sorcererAI(creature);
}
@@ -1697,7 +1696,7 @@ public:
uint32 rebuff;
- void Reset() OVERRIDE
+ void Reset() override
{
if (me->GetReactState() != REACT_PASSIVE)
me->SetReactState(REACT_PASSIVE);
@@ -1705,7 +1704,7 @@ public:
rebuff = 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
UpdateVictim();
@@ -1723,11 +1722,11 @@ public:
DoMeleeAttackIfReady();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void SpellHit(Unit* unit, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* unit, const SpellInfo* spell) override
{
if (spell->Id == SPELL_NEURAL_NEEDLE && unit->GetTypeId() == TYPEID_PLAYER)
{
@@ -1772,7 +1771,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_imprisoned_beryl_sorcererAI(creature);
}
@@ -1798,7 +1797,7 @@ class npc_mootoo_the_younger : public CreatureScript
public:
npc_mootoo_the_younger() : CreatureScript("npc_mootoo_the_younger") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_ESCAPING_THE_MIST)
{
@@ -1813,7 +1812,7 @@ public:
}
creature->SetStandState(UNIT_STAND_STATE_STAND);
creature->AI()->Talk(SAY_1);
- CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
+ ENSURE_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
}
return true;
}
@@ -1822,18 +1821,18 @@ public:
{
npc_mootoo_the_youngerAI(Creature* creature) : npc_escortAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
SetDespawnAtFar(false);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Player* player=GetPlayerForEscort())
player->FailQuest(QUEST_ESCAPING_THE_MIST);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -1864,7 +1863,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_mootoo_the_youngerAI(creature);
}
@@ -1888,13 +1887,13 @@ class npc_bonker_togglevolt : public CreatureScript
public:
npc_bonker_togglevolt() : CreatureScript("npc_bonker_togglevolt") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_GET_ME_OUTA_HERE)
{
creature->SetStandState(UNIT_STAND_STATE_STAND);
creature->AI()->Talk(SAY_BONKER_2, player);
- CAST_AI(npc_escortAI, (creature->AI()))->Start(true, true, player->GetGUID());
+ ENSURE_AI(npc_escortAI, (creature->AI()))->Start(true, true, player->GetGUID());
}
return true;
}
@@ -1904,19 +1903,19 @@ public:
npc_bonker_togglevoltAI(Creature* creature) : npc_escortAI(creature) { }
uint32 Bonker_agro;
- void Reset() OVERRIDE
+ void Reset() override
{
Bonker_agro=0;
SetDespawnAtFar(false);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Player* player = GetPlayerForEscort())
player->FailQuest(QUEST_GET_ME_OUTA_HERE);
}
- void UpdateEscortAI(const uint32 /*diff*/) OVERRIDE
+ void UpdateEscortAI(const uint32 /*diff*/) override
{
if (GetAttack() && UpdateVictim())
{
@@ -1930,7 +1929,7 @@ public:
else Bonker_agro=0;
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -1945,7 +1944,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_bonker_togglevoltAI(creature);
}
@@ -2004,7 +2003,7 @@ public:
uint32 uiTimer;
bool bStarted;
- void Reset() OVERRIDE
+ void Reset() override
{
uiTimer = 1500;
bStarted = false;
@@ -2021,14 +2020,13 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (bStarted)
{
if (uiTimer <= diff)
{
- Position pos;
- me->GetRandomNearPosition(pos, 10.0f);
+ Position pos = me->GetRandomNearPosition(10.0f);
me->GetMotionMaster()->MovePoint(0, pos);
bStarted = false;
}
@@ -2036,13 +2034,13 @@ public:
}
}
- void DoAction(int32 param) OVERRIDE
+ void DoAction(int32 param) override
{
if (param == 1)
bStarted = true;
}
- void MovementInform(uint32 uiType, uint32 /*uiId*/) OVERRIDE
+ void MovementInform(uint32 uiType, uint32 /*uiId*/) override
{
if (uiType != POINT_MOTION_TYPE)
return;
@@ -2062,7 +2060,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_trapped_mammoth_calfAI(creature);
}
@@ -2090,7 +2088,7 @@ public:
{
npc_magmoth_crusherAI(Creature* creature) : ScriptedAI(creature) { }
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
Player* player = killer->ToPlayer();
if (!player)
@@ -2107,7 +2105,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_magmoth_crusherAI(creature);
}
@@ -2138,12 +2136,12 @@ public:
uint32 uiExplosionTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiExplosionTimer = urand(5000, 10000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (uiExplosionTimer < diff)
{
@@ -2166,7 +2164,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_seaforium_depth_chargeAI(creature);
}
@@ -2193,12 +2191,12 @@ public:
uint32 uiTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiTimer = urand(13000, 18000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (uiTimer <= diff)
{
@@ -2217,7 +2215,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_valiance_keep_cannoneerAI(creature);
}
@@ -2251,16 +2249,16 @@ public:
uint32 m_uiTimer; //Timer until recast
- void Reset() OVERRIDE
+ void Reset() override
{
m_uiTimer = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
+ void AttackStart(Unit* /*who*/) override { }
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (m_uiTimer <= uiDiff)
{
@@ -2322,7 +2320,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_warmage_coldarraAI(creature);
}
@@ -2378,7 +2376,7 @@ public:
uint64 uiPlayerGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
if (uiEmoteState)
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, uiEmoteState);
@@ -2396,7 +2394,7 @@ public:
me->RestoreFaction();
}
- void DoAction(int32 /*iParam*/) OVERRIDE
+ void DoAction(int32 /*iParam*/) override
{
me->StopMoving();
me->SetUInt32Value(UNIT_NPC_FLAGS, 0);
@@ -2406,7 +2404,7 @@ public:
uiEventPhase = 1;
}
- void SetGUID(uint64 uiGuid, int32 /*iId*/) OVERRIDE
+ void SetGUID(uint64 uiGuid, int32 /*iId*/) override
{
uiPlayerGUID = uiGuid;
}
@@ -2418,7 +2416,7 @@ public:
AttackStart(player);
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (uiEventTimer && uiEventTimer <= uiDiff)
{
@@ -2479,12 +2477,12 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_hidden_cultistAI(creature);
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
uint32 uiGossipText = 0;
const char* charGossipItem;
@@ -2519,7 +2517,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
@@ -2559,13 +2557,13 @@ public:
caster->CastSpell(NULL, SPELL_WINDSOUL_CREDT);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectRemove += AuraEffectRemoveFn(spell_windsoul_totem_aura_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_windsoul_totem_aura_AuraScript();
}
diff --git a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp
index 9023f02111f..7d680ecd071 100644
--- a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp
+++ b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp
@@ -58,12 +58,12 @@ public:
uint64 targetGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
targetGUID = 0;
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (me->IsNonMeleeSpellCast(false))
return;
@@ -76,20 +76,18 @@ public:
GetCreatureListWithEntryInGrid(orbList, me, NPC_TRANSITUS_SHIELD_DUMMY, 32.0f);
if (!orbList.empty())
{
- for (std::list<Creature*>::const_iterator itr = orbList.begin(); itr != orbList.end(); ++itr)
+ for (Creature* orb : orbList)
{
- if (Creature* pOrb = *itr)
+ if (orb->GetPositionY() < 1000)
{
- if (pOrb->GetPositionY() < 1000)
- {
- targetGUID = pOrb->GetGUID();
- break;
- }
+ targetGUID = orb->GetGUID();
+ break;
}
}
}
}
- }else
+ }
+ else
{
if (!targetGUID)
if (Creature* pOrb = GetClosestCreatureWithEntry(me, NPC_TRANSITUS_SHIELD_DUMMY, 32.0f))
@@ -97,13 +95,13 @@ public:
}
- if (Creature* pOrb = me->GetCreature(*me, targetGUID))
+ if (Creature* pOrb = ObjectAccessor::GetCreature(*me, targetGUID))
DoCast(pOrb, SPELL_TRANSITUS_SHIELD_BEAM);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_warmage_violetstandAI(creature);
}
diff --git a/src/server/scripts/Northrend/zone_dalaran.cpp b/src/server/scripts/Northrend/zone_dalaran.cpp
index a9c89dbf3da..fb5e63a2301 100644
--- a/src/server/scripts/Northrend/zone_dalaran.cpp
+++ b/src/server/scripts/Northrend/zone_dalaran.cpp
@@ -66,14 +66,13 @@ public:
creature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
}
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
-
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void AttackStart(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* who) override
{
if (!who || !who->IsInWorld() || who->GetZoneId() != 4395)
return;
@@ -120,10 +119,10 @@ public:
return;
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_mageguard_dalaranAI(creature);
}
@@ -145,7 +144,7 @@ class npc_hira_snowdawn : public CreatureScript
public:
npc_hira_snowdawn() : CreatureScript("npc_hira_snowdawn") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (!creature->IsVendor() || !creature->IsTrainer())
return false;
@@ -160,7 +159,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_TRAIN)
@@ -173,8 +172,119 @@ public:
}
};
+enum MinigobData
+{
+ ZONE_DALARAN = 4395,
+
+ SPELL_MANABONKED = 61834,
+ SPELL_TELEPORT_VISUAL = 51347,
+ SPELL_IMPROVED_BLINK = 61995,
+
+ EVENT_SELECT_TARGET = 1,
+ EVENT_BLINK = 2,
+ EVENT_DESPAWN_VISUAL = 3,
+ EVENT_DESPAWN = 4,
+
+ MAIL_MINIGOB_ENTRY = 264,
+ MAIL_DELIVER_DELAY_MIN = 5*MINUTE,
+ MAIL_DELIVER_DELAY_MAX = 15*MINUTE
+};
+
+class npc_minigob_manabonk : public CreatureScript
+{
+ public:
+ npc_minigob_manabonk() : CreatureScript("npc_minigob_manabonk") {}
+
+ struct npc_minigob_manabonkAI : public ScriptedAI
+ {
+ npc_minigob_manabonkAI(Creature* creature) : ScriptedAI(creature)
+ {
+ me->setActive(true);
+ }
+
+ void Reset() override
+ {
+ me->SetVisible(false);
+ events.ScheduleEvent(EVENT_SELECT_TARGET, IN_MILLISECONDS);
+ }
+
+ Player* SelectTargetInDalaran()
+ {
+ std::list<Player*> PlayerInDalaranList;
+ PlayerInDalaranList.clear();
+
+ Map::PlayerList const &players = me->GetMap()->GetPlayers();
+ for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
+ if (Player* player = itr->GetSource()->ToPlayer())
+ if (player->GetZoneId() == ZONE_DALARAN && !player->IsFlying() && !player->IsMounted() && !player->IsGameMaster())
+ PlayerInDalaranList.push_back(player);
+
+ if (PlayerInDalaranList.empty())
+ return NULL;
+ return Trinity::Containers::SelectRandomContainerElement(PlayerInDalaranList);
+ }
+
+ void SendMailToPlayer(Player* player)
+ {
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
+ int16 deliverDelay = irand(MAIL_DELIVER_DELAY_MIN, MAIL_DELIVER_DELAY_MAX);
+ MailDraft(MAIL_MINIGOB_ENTRY, true).SendMailTo(trans, MailReceiver(player), MailSender(MAIL_CREATURE, me->GetEntry()), MAIL_CHECK_MASK_NONE, deliverDelay);
+ CharacterDatabase.CommitTransaction(trans);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ events.Update(diff);
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_SELECT_TARGET:
+ me->SetVisible(true);
+ DoCast(me, SPELL_TELEPORT_VISUAL);
+ if (Player* player = SelectTargetInDalaran())
+ {
+ me->NearTeleportTo(player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0.0f);
+ DoCast(player, SPELL_MANABONKED);
+ SendMailToPlayer(player);
+ }
+ events.ScheduleEvent(EVENT_BLINK, 3*IN_MILLISECONDS);
+ break;
+ case EVENT_BLINK:
+ {
+ DoCast(me, SPELL_IMPROVED_BLINK);
+ Position pos = me->GetRandomNearPosition(frand(15, 40));
+ me->GetMotionMaster()->MovePoint(0, pos.m_positionX, pos.m_positionY, pos.m_positionZ);
+ events.ScheduleEvent(EVENT_DESPAWN, 3 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_DESPAWN_VISUAL, 2.5*IN_MILLISECONDS);
+ break;
+ }
+ case EVENT_DESPAWN_VISUAL:
+ DoCast(me, SPELL_TELEPORT_VISUAL);
+ break;
+ case EVENT_DESPAWN:
+ me->DespawnOrUnsummon();
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ private:
+ EventMap events;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_minigob_manabonkAI(creature);
+ }
+};
+
void AddSC_dalaran()
{
new npc_mageguard_dalaran;
new npc_hira_snowdawn;
+ new npc_minigob_manabonk();
}
diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp
index a9c46d19138..80e496a6e13 100644
--- a/src/server/scripts/Northrend/zone_dragonblight.cpp
+++ b/src/server/scripts/Northrend/zone_dragonblight.cpp
@@ -155,7 +155,7 @@ class npc_commander_eligor_dawnbringer : public CreatureScript
talkWing = 0;
}
- void Reset() OVERRIDE
+ void Reset() override
{
talkWing = 0;
memset(audienceList, 0, sizeof(audienceList));
@@ -164,7 +164,7 @@ class npc_commander_eligor_dawnbringer : public CreatureScript
_events.ScheduleEvent(EVENT_START_RANDOM, 20000);
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == POINT_MOTION_TYPE)
{
@@ -246,13 +246,10 @@ class npc_commander_eligor_dawnbringer : public CreatureScript
{
std::list<Creature*> creatureList;
GetCreatureListWithEntryInGrid(creatureList, me, AudienceMobs[ii], 15.0f);
- for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
+ for (Creature* creature : creatureList)
{
- if (Creature* creatureList = *itr)
- {
- audienceList[creaturecount] = creatureList->GetGUID();
- ++creaturecount;
- }
+ audienceList[creaturecount] = creature->GetGUID();
+ ++creaturecount;
}
}
@@ -289,7 +286,7 @@ class npc_commander_eligor_dawnbringer : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
@@ -382,7 +379,7 @@ class npc_alexstrasza_wr_gate : public CreatureScript
public:
npc_alexstrasza_wr_gate() : CreatureScript("npc_alexstrasza_wr_gate") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -394,7 +391,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -436,7 +433,7 @@ public:
void HandleDummy(SpellEffIndex /*effIndex*/)
{
- uint32 roll = rand() % 2;
+ uint32 roll = rand32() % 2;
Creature* tree = GetHitCreature();
Player* player = GetCaster()->ToPlayer();
@@ -460,13 +457,13 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q12096_q12092_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12096_q12092_dummy_SpellScript();
}
@@ -492,13 +489,13 @@ public:
lothalor->DespawnOrUnsummon(4000);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q12096_q12092_bark_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12096_q12092_bark_SpellScript();
}
@@ -535,7 +532,7 @@ class npc_wyrmrest_defender : public CreatureScript
public:
npc_wyrmrest_defender() : CreatureScript("npc_wyrmrest_defender") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(QUEST_DEFENDING_WYRMREST_TEMPLE) == QUEST_STATUS_INCOMPLETE)
{
@@ -548,7 +545,7 @@ class npc_wyrmrest_defender : public CreatureScript
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -571,7 +568,7 @@ class npc_wyrmrest_defender : public CreatureScript
uint32 RenewRecoveryChecker;
- void Reset() OVERRIDE
+ void Reset() override
{
hpWarningReady = true;
renewRecoveryCanCheck = false;
@@ -579,7 +576,7 @@ class npc_wyrmrest_defender : public CreatureScript
RenewRecoveryChecker = 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// Check system for Health Warning should happen first time whenever get under 30%,
// after it should be able to happen only after recovery of last renew is fully done (20 sec),
@@ -601,7 +598,7 @@ class npc_wyrmrest_defender : public CreatureScript
}
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
switch (spell->Id)
{
@@ -625,7 +622,7 @@ class npc_wyrmrest_defender : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_wyrmrest_defenderAI(creature);
}
@@ -658,13 +655,13 @@ class npc_torturer_lecraft : public CreatureScript
_playerGUID = 0;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_textCounter = 1;
_playerGUID = 0;
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
_events.ScheduleEvent(EVENT_HEMORRHAGE, urand(5000, 8000));
_events.ScheduleEvent(EVENT_KIDNEY_SHOT, urand(12000, 15000));
@@ -673,7 +670,7 @@ class npc_torturer_lecraft : public CreatureScript
Talk (SAY_AGGRO, player);
}
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (spell->Id != SPELL_HIGH_EXECUTORS_BRANDING_IRON)
return;
@@ -698,7 +695,7 @@ class npc_torturer_lecraft : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
index 112d42441b9..6d41a2e9b21 100644
--- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp
+++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
@@ -64,7 +64,7 @@ public:
{
npc_emilyAI(Creature* creature) : npc_escortAI(creature) { }
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (Creature* Mrfloppy = GetClosestCreatureWithEntry(me, NPC_MRFLOPPY, 50.0f))
summoned->AI()->AttackStart(Mrfloppy);
@@ -72,7 +72,7 @@ public:
summoned->AI()->AttackStart(me->GetVictim());
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -85,18 +85,18 @@ public:
_mrfloppyGUID = Mrfloppy->GetGUID();
break;
case 10:
- if (Unit::GetCreature(*me, _mrfloppyGUID))
+ if (ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
{
Talk(SAY_WORGHAGGRO1);
me->SummonCreature(NPC_HUNGRY_WORG, me->GetPositionX()+5, me->GetPositionY()+2, me->GetPositionZ()+1, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000);
}
break;
case 11:
- if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID))
+ if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
break;
case 17:
- if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID))
+ if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
Mrfloppy->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
Talk(SAY_WORGRAGGRO3);
if (Creature* RWORG = me->SummonCreature(NPC_RAVENOUS_WORG, me->GetPositionX()+10, me->GetPositionY()+8, me->GetPositionZ()+2, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000))
@@ -106,31 +106,31 @@ public:
}
break;
case 18:
- if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID))
+ if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
{
- if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID))
+ if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
RWORG->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ());
DoCast(Mrfloppy, SPELL_MRFLOPPY);
}
break;
case 19:
- if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID))
+ if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
{
if (Mrfloppy->HasAura(SPELL_MRFLOPPY, 0))
{
- if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID))
+ if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
Mrfloppy->EnterVehicle(RWORG);
}
}
break;
case 20:
- if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID))
+ if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
RWORG->HandleEmoteCommand(34);
break;
case 21:
- if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID))
+ if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
{
- if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID))
+ if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
{
RWORG->Kill(Mrfloppy);
Mrfloppy->ExitVehicle();
@@ -141,11 +141,11 @@ public:
}
break;
case 22:
- if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID))
+ if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
{
if (Mrfloppy->isDead())
{
- if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID))
+ if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
RWORG->DisappearAndDie();
me->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ());
Mrfloppy->setDeathState(ALIVE);
@@ -167,18 +167,18 @@ public:
break;
case 27:
me->DisappearAndDie();
- if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID))
+ if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
Mrfloppy->DisappearAndDie();
break;
}
}
- void EnterCombat(Unit* /*Who*/) OVERRIDE
+ void EnterCombat(Unit* /*Who*/) override
{
Talk(SAY_RANDOMAGGRO);
}
- void Reset() OVERRIDE
+ void Reset() override
{
_mrfloppyGUID = 0;
_RavenousworgGUID = 0;
@@ -189,7 +189,7 @@ public:
uint64 _mrfloppyGUID;
};
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_PERILOUS_ADVENTURE)
{
@@ -203,7 +203,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_emilyAI(creature);
}
@@ -219,9 +219,9 @@ public:
{
npc_mrfloppyAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* Who) OVERRIDE
+ void EnterCombat(Unit* Who) override
{
if (Creature* Emily = GetClosestCreatureWithEntry(me, NPC_EMILY, 50.0f))
{
@@ -239,19 +239,19 @@ public:
}
}
- void EnterEvadeMode() OVERRIDE { }
+ void EnterEvadeMode() override { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
return;
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_mrfloppyAI(creature);
}
@@ -281,19 +281,19 @@ public:
{
npc_outhouse_bunnyAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_counter = 0;
_gender = 0;
}
- void SetData(uint32 Type, uint32 Data) OVERRIDE
+ void SetData(uint32 Type, uint32 Data) override
{
if (Type == 1)
_gender = Data;
}
- void SpellHit(Unit* Caster, const SpellInfo* Spell) OVERRIDE
+ void SpellHit(Unit* Caster, const SpellInfo* Spell) override
{
if (Spell->Id == SPELL_OUTHOUSE_GROANS)
{
@@ -320,7 +320,7 @@ public:
uint8 _gender;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_outhouse_bunnyAI(creature);
}
@@ -343,12 +343,12 @@ public:
{
npc_tallhorn_stagAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_phase = 1;
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (_phase == 1)
{
@@ -366,7 +366,7 @@ public:
uint8 _phase;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_tallhorn_stagAI(creature);
}
@@ -395,7 +395,7 @@ public:
{
npc_amberpine_woodsmanAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
if (me->FindNearestCreature(NPC_TALLHORN_STAG, 0.2f))
{
@@ -405,7 +405,7 @@ public:
_events.ScheduleEvent(EVENT_WOODSMAN_1, 0);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
@@ -431,7 +431,7 @@ public:
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_amberpine_woodsmanAI(creature);
}
@@ -461,19 +461,19 @@ public:
{
npc_wounded_skirmisherAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_despawnTimer = 5000;
_playerGUID = 0;
}
- void MovementInform(uint32, uint32 id) OVERRIDE
+ void MovementInform(uint32, uint32 id) override
{
if (id == 1)
me->DespawnOrUnsummon(_despawnTimer);
}
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (spell->Id == SPELL_RENEW_SKIRMISHER && caster->GetTypeId() == TYPEID_PLAYER
&& caster->ToPlayer()->GetQuestStatus(QUEST_OVERWHELMED) == QUEST_STATUS_INCOMPLETE)
@@ -490,7 +490,7 @@ public:
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
return;
@@ -502,7 +502,7 @@ public:
uint32 _despawnTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_wounded_skirmisherAI(creature);
}
@@ -540,7 +540,7 @@ public:
{
npc_venture_co_stragglerAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_playerGUID = 0;
@@ -548,7 +548,7 @@ public:
me->SetReactState(REACT_AGGRESSIVE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
@@ -590,7 +590,7 @@ public:
DoMeleeAttackIfReady();
}
- void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* caster, SpellInfo const* spell) override
{
if (spell->Id == SPELL_SMOKE_BOMB && caster->GetTypeId() == TYPEID_PLAYER)
{
@@ -607,7 +607,7 @@ public:
uint64 _playerGUID;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_venture_co_stragglerAI(creature);
}
@@ -655,7 +655,7 @@ public:
{
npc_lake_frogAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_following = false;
_runningScript = false;
@@ -663,7 +663,7 @@ public:
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_following)
if (!me->HasAura(SPELL_FROG_LOVE))
@@ -702,7 +702,7 @@ public:
}
}
- void ReceiveEmote(Player* player, uint32 emote) OVERRIDE
+ void ReceiveEmote(Player* player, uint32 emote) override
{
if (_following || _runningScript)
return;
@@ -718,7 +718,7 @@ public:
if (me->GetEntry() == NPC_LAKE_FROG)
{
me->AddAura(SPELL_FROG_LOVE, me);
- me->GetMotionMaster()->MoveFollow(player, 0.3f, frand(M_PI/2, M_PI + (M_PI/2)));
+ me->GetMotionMaster()->MoveFollow(player, 0.3f, frand(float(M_PI) / 2, float(M_PI) + (float(M_PI) / 2)));
_following = true;
}
else if (me->GetEntry() == NPC_LAKE_FROG_QUEST)
@@ -732,7 +732,7 @@ public:
}
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE
+ void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
{
DoCast(player, SPELL_SUMMON_ASHWOOD_BRAND);
}
@@ -743,7 +743,7 @@ public:
bool _runningScript;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_lake_frogAI(creature);
}
@@ -763,7 +763,7 @@ class spell_shredder_delivery : public SpellScriptLoader
{
PrepareSpellScript(spell_shredder_delivery_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
@@ -774,13 +774,13 @@ class spell_shredder_delivery : public SpellScriptLoader
GetCaster()->ToCreature()->DespawnOrUnsummon();
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_shredder_delivery_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_shredder_delivery_SpellScript();
}
diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp
index fd51237745e..96fdcbfe990 100644
--- a/src/server/scripts/Northrend/zone_howling_fjord.cpp
+++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp
@@ -54,7 +54,7 @@ class npc_apothecary_hanes : public CreatureScript
public:
npc_apothecary_hanes() : CreatureScript("npc_apothecary_hanes") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_TRAIL_OF_FIRE)
{
@@ -67,7 +67,7 @@ public:
creature->setFaction(FACTION_ESCORTEE_H);
break;
}
- CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
+ ENSURE_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
}
return true;
}
@@ -77,19 +77,19 @@ public:
npc_Apothecary_HanesAI(Creature* creature) : npc_escortAI(creature){ }
uint32 PotTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
SetDespawnAtFar(false);
PotTimer = 10000; //10 sec cooldown on potion
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Player* player = GetPlayerForEscort())
player->FailQuest(QUEST_TRAIL_OF_FIRE);
}
- void UpdateEscortAI(const uint32 diff) OVERRIDE
+ void UpdateEscortAI(const uint32 diff) override
{
if (HealthBelowPct(75))
{
@@ -103,7 +103,7 @@ public:
DoMeleeAttackIfReady();
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -153,7 +153,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_Apothecary_HanesAI(creature);
}
@@ -177,7 +177,7 @@ public:
{
npc_plaguehound_trackerAI(Creature* creature) : npc_escortAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
uint64 summonerGUID = 0;
@@ -193,7 +193,7 @@ public:
Start(false, false, summonerGUID);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
if (waypointId != 26)
return;
@@ -202,7 +202,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_plaguehound_trackerAI(creature);
}
@@ -231,7 +231,7 @@ class npc_razael_and_lyana : public CreatureScript
public:
npc_razael_and_lyana() : CreatureScript("npc_razael_and_lyana") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -260,7 +260,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -304,7 +304,7 @@ class npc_daegarn : public CreatureScript
public:
npc_daegarn() : CreatureScript("npc_daegarn") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
{
if (quest->GetQuestId() == QUEST_DEFEAT_AT_RING)
{
@@ -323,7 +323,7 @@ public:
bool bEventInProgress;
uint64 uiPlayerGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
bEventInProgress = false;
uiPlayerGUID = 0;
@@ -339,7 +339,7 @@ public:
SummonGladiator(NPC_FIRJUS);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (Player* player = ObjectAccessor::GetPlayer(*me, uiPlayerGUID))
{
@@ -360,7 +360,7 @@ public:
me->SummonCreature(uiEntry, afSummon[0], afSummon[1], afSummon[2], 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30*IN_MILLISECONDS);
}
- void SummonedCreatureDies(Creature* summoned, Unit* /*killer*/) OVERRIDE
+ void SummonedCreatureDies(Creature* summoned, Unit* /*killer*/) override
{
uint32 uiEntry = 0;
@@ -377,7 +377,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_daegarnAI(creature);
}
@@ -397,12 +397,12 @@ public:
{
npc_mindless_abominationAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
events.ScheduleEvent(EVENT_CHECK_CHARMED, 1000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -424,7 +424,7 @@ public:
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_mindless_abominationAI(creature);
}
@@ -445,7 +445,7 @@ class spell_mindless_abomination_explosion_fx_master : public SpellScriptLoader
{
PrepareSpellScript(spell_mindless_abomination_explosion_fx_master_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_RANDOM_CIRCUMFERENCE_POINT_POISON) || !sSpellMgr->GetSpellInfo(SPELL_COSMETIC_BLOOD_EXPLOSION_GREEN_LARGE))
return false;
@@ -466,13 +466,13 @@ class spell_mindless_abomination_explosion_fx_master : public SpellScriptLoader
caster->DespawnOrUnsummon(4000);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_mindless_abomination_explosion_fx_master_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_mindless_abomination_explosion_fx_master_SpellScript();
}
diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp
index 5284803c5f2..32b9805470e 100644
--- a/src/server/scripts/Northrend/zone_icecrown.cpp
+++ b/src/server/scripts/Northrend/zone_icecrown.cpp
@@ -46,7 +46,7 @@ class npc_squire_david : public CreatureScript
public:
npc_squire_david() : CreatureScript("npc_squire_david") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(QUEST_THE_ASPIRANT_S_CHALLENGE_H) == QUEST_STATUS_INCOMPLETE ||
player->GetQuestStatus(QUEST_THE_ASPIRANT_S_CHALLENGE_A) == QUEST_STATUS_INCOMPLETE)//We need more info about it.
@@ -59,7 +59,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -98,13 +98,13 @@ public:
uint32 uiChargeTimer;
uint32 uiShieldBreakerTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiChargeTimer = 7000;
uiShieldBreakerTimer = 10000;
}
- void MovementInform(uint32 uiType, uint32 /*uiId*/) OVERRIDE
+ void MovementInform(uint32 uiType, uint32 /*uiId*/) override
{
if (uiType != POINT_MOTION_TYPE)
return;
@@ -112,7 +112,7 @@ public:
me->setFaction(14);
}
- void DamageTaken(Unit* pDoneBy, uint32& uiDamage) OVERRIDE
+ void DamageTaken(Unit* pDoneBy, uint32& uiDamage) override
{
if (uiDamage > me->GetHealth() && pDoneBy->GetTypeId() == TYPEID_PLAYER)
{
@@ -125,7 +125,7 @@ public:
}
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
if (!UpdateVictim())
return;
@@ -146,7 +146,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_argent_valiantAI(creature);
}
@@ -177,7 +177,7 @@ public:
SetCombatMovement(false);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (me->GetAreaId() != AREA_SUNREAVER_PAVILION && me->GetAreaId() != AREA_SILVER_COVENANT_PAVILION)
@@ -197,7 +197,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_guardian_pavilionAI(creature);
}
@@ -223,7 +223,7 @@ public:
{
npc_vereth_the_cunningAI(Creature* creature) : ScriptedAI(creature) { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
ScriptedAI::MoveInLineOfSight(who);
@@ -243,7 +243,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_vereth_the_cunningAI(creature);
}
@@ -291,7 +291,7 @@ class npc_tournament_training_dummy : public CreatureScript
EventMap events;
bool isVulnerable;
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetControlled(true, UNIT_STATE_STUNNED);
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);
@@ -312,7 +312,7 @@ class npc_tournament_training_dummy : public CreatureScript
events.ScheduleEvent(EVENT_DUMMY_RECAST_DEFEND, 5000);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
if (!_EnterEvadeMode())
return;
@@ -320,13 +320,13 @@ class npc_tournament_training_dummy : public CreatureScript
Reset();
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
damage = 0;
events.RescheduleEvent(EVENT_DUMMY_RESET, 10000);
}
- void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* caster, SpellInfo const* spell) override
{
switch (me->GetEntry())
{
@@ -356,7 +356,7 @@ class npc_tournament_training_dummy : public CreatureScript
isVulnerable = true;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -398,11 +398,11 @@ class npc_tournament_training_dummy : public CreatureScript
me->SetControlled(true, UNIT_STATE_STUNNED);
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_tournament_training_dummyAI(creature);
}
@@ -523,7 +523,7 @@ public:
uint64 guidMason[3];
uint64 guidHalof;
- void Reset() OVERRIDE
+ void Reset() override
{
me->setRegeneratingHealth(false);
DoCast(SPELL_THREAT_PULSE);
@@ -531,23 +531,23 @@ public:
events.ScheduleEvent(EVENT_SPAWN, 3000);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void JustSummoned(Creature* Summoned) OVERRIDE
+ void JustSummoned(Creature* Summoned) override
{
Summons.Summon(Summoned);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Summons.DespawnAll();
me->DespawnOrUnsummon();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -595,14 +595,14 @@ public:
break;
case EVENT_INTRO_1:
{
- if (Creature* Dalfors = me->GetCreature(*me, guidDalfors))
+ if (Creature* Dalfors = ObjectAccessor::GetCreature(*me, guidDalfors))
Dalfors->AI()->Talk(DALFORS_SAY_PRE_1);
events.ScheduleEvent(EVENT_INTRO_2, 5000);
}
break;
case EVENT_INTRO_2:
{
- if (Creature* Dalfors = me->GetCreature(*me, guidDalfors))
+ if (Creature* Dalfors = ObjectAccessor::GetCreature(*me, guidDalfors))
{
Dalfors->SetFacingTo(6.215f);
Dalfors->AI()->Talk(DALFORS_SAY_PRE_2);
@@ -612,37 +612,37 @@ public:
break;
case EVENT_INTRO_3:
{
- if (Creature* Dalfors = me->GetCreature(*me, guidDalfors))
+ if (Creature* Dalfors = ObjectAccessor::GetCreature(*me, guidDalfors))
{
Dalfors->GetMotionMaster()->MovePoint(0, DalforsPos[2]);
Dalfors->SetHomePosition(DalforsPos[2]);
}
- if (Creature* Priest1 = me->GetCreature(*me, guidPriest[0]))
+ if (Creature* Priest1 = ObjectAccessor::GetCreature(*me, guidPriest[0]))
{
Priest1->SetFacingTo(5.7421f);
Priest1->SetHomePosition(Priest1Pos[1]);
}
- if (Creature* Priest2 = me->GetCreature(*me, guidPriest[1]))
+ if (Creature* Priest2 = ObjectAccessor::GetCreature(*me, guidPriest[1]))
{
Priest2->SetFacingTo(5.7421f);
Priest2->SetHomePosition(Priest2Pos[1]);
}
- if (Creature* Priest3 = me->GetCreature(*me, guidPriest[2]))
+ if (Creature* Priest3 = ObjectAccessor::GetCreature(*me, guidPriest[2]))
{
Priest3->SetFacingTo(5.7421f);
Priest3->SetHomePosition(Priest3Pos[1]);
}
- if (Creature* Mason1 = me->GetCreature(*me, guidMason[0]))
+ if (Creature* Mason1 = ObjectAccessor::GetCreature(*me, guidMason[0]))
{
Mason1->GetMotionMaster()->MovePoint(0, Mason1Pos[2]);
Mason1->SetHomePosition(Mason1Pos[2]);
}
- if (Creature* Mason2 = me->GetCreature(*me, guidMason[1]))
+ if (Creature* Mason2 = ObjectAccessor::GetCreature(*me, guidMason[1]))
{
Mason2->GetMotionMaster()->MovePoint(0, Mason2Pos[2]);
Mason2->SetHomePosition(Mason2Pos[2]);
}
- if (Creature* Mason3 = me->GetCreature(*me, guidMason[2]))
+ if (Creature* Mason3 = ObjectAccessor::GetCreature(*me, guidMason[2]))
{
Mason3->GetMotionMaster()->MovePoint(0, Mason3Pos[2]);
Mason3->SetHomePosition(Mason3Pos[2]);
@@ -653,17 +653,17 @@ public:
break;
case EVENT_MASON_ACTION:
{
- if (Creature* Mason1 = me->GetCreature(*me, guidMason[0]))
+ if (Creature* Mason1 = ObjectAccessor::GetCreature(*me, guidMason[0]))
{
Mason1->SetFacingTo(2.8972f);
Mason1->AI()->SetData(1, 1); // triggers SAI actions on npc
}
- if (Creature* Mason2 = me->GetCreature(*me, guidMason[1]))
+ if (Creature* Mason2 = ObjectAccessor::GetCreature(*me, guidMason[1]))
{
Mason2->SetFacingTo(3.1241f);
Mason2->AI()->SetData(1, 1); // triggers SAI actions on npc
}
- if (Creature* Mason3 = me->GetCreature(*me, guidMason[2]))
+ if (Creature* Mason3 = ObjectAccessor::GetCreature(*me, guidMason[2]))
{
Mason3->SetFacingTo(3.6651f);
Mason3->AI()->SetData(1, 1); // triggers SAI actions on npc
@@ -674,7 +674,7 @@ public:
{
if (Creature* LK = GetClosestCreatureWithEntry(me, NPC_LK, 100))
LK->AI()->Talk(LK_TALK_1);
- if (Creature* Dalfors = me->GetCreature(*me, guidDalfors))
+ if (Creature* Dalfors = ObjectAccessor::GetCreature(*me, guidDalfors))
Dalfors->AI()->Talk(DALFORS_SAY_START);
events.ScheduleEvent(EVENT_WAVE_SPAWN, 1000);
}
@@ -763,7 +763,7 @@ public:
}
if (PhaseCount == 8)
- if (Creature* Halof = me->GetCreature(*me, guidHalof))
+ if (Creature* Halof = ObjectAccessor::GetCreature(*me, guidHalof))
if (Halof->isDead())
{
DoCast(me, SPELL_CRUSADERS_SPIRE_VICTORY, true);
@@ -771,14 +771,14 @@ public:
Summons.DespawnEntry(NPC_REANIMATED_CAPTAIN);
Summons.DespawnEntry(NPC_SCOURGE_DRUDGE);
Summons.DespawnEntry(NPC_HALOF_THE_DEATHBRINGER);
- if (Creature* Dalfors = me->GetCreature(*me, guidDalfors))
+ if (Creature* Dalfors = ObjectAccessor::GetCreature(*me, guidDalfors))
Dalfors->AI()->Talk(DALFORS_YELL_FINISHED);
events.ScheduleEvent(EVENT_ENDED, 10000);
}
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_blessed_bannerAI(creature);
}
@@ -816,12 +816,12 @@ class npc_frostbrood_skytalon : public CreatureScript
EventMap events;
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
me->GetMotionMaster()->MovePoint(POINT_GRAB_DECOY, summoner->GetPositionX(), summoner->GetPositionY(), summoner->GetPositionZ());
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -832,7 +832,7 @@ class npc_frostbrood_skytalon : public CreatureScript
DoCast(summoner, SPELL_GRAB);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
VehicleAI::UpdateAI(diff);
events.Update(diff);
@@ -849,7 +849,7 @@ class npc_frostbrood_skytalon : public CreatureScript
}
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
switch (spell->Id)
{
@@ -864,7 +864,7 @@ class npc_frostbrood_skytalon : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_frostbrood_skytalonAI(creature);
}
@@ -914,7 +914,7 @@ class npc_margrave_dhakar : public CreatureScript
{
npc_margrave_dhakarAI(Creature* creature) : ScriptedAI(creature) , _summons(me), _lichKingGuid(0) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
@@ -923,7 +923,7 @@ class npc_margrave_dhakar : public CreatureScript
_summons.DespawnAll();
}
- void sGossipSelect(Player* player, uint32 sender, uint32 action) OVERRIDE
+ void sGossipSelect(Player* player, uint32 sender, uint32 action) override
{
if (player->GetQuestStatus(QUEST_FLESH_GIANT_CHAMPION) == QUEST_STATUS_INCOMPLETE && !player->IsInCombat())
{
@@ -935,7 +935,7 @@ class npc_margrave_dhakar : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
@@ -963,35 +963,35 @@ class npc_margrave_dhakar : public CreatureScript
}
case EVENT_LK_SAY_1:
{
- if (Creature* lichKing = Unit::GetCreature(*me, _lichKingGuid))
+ if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _lichKingGuid))
lichKing->AI()->Talk(SAY_LK_1);
_events.ScheduleEvent(EVENT_LK_SAY_2, 5000);
break;
}
case EVENT_LK_SAY_2:
{
- if (Creature* lichKing = Unit::GetCreature(*me, _lichKingGuid))
+ if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _lichKingGuid))
lichKing->AI()->Talk(SAY_LK_2);
_events.ScheduleEvent(EVENT_LK_SAY_3, 5000);
break;
}
case EVENT_LK_SAY_3:
{
- if (Creature* lichKing = Unit::GetCreature(*me, _lichKingGuid))
+ if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _lichKingGuid))
lichKing->AI()->Talk(SAY_LK_3);
_events.ScheduleEvent(EVENT_LK_SAY_4, 5000);
break;
}
case EVENT_LK_SAY_4:
{
- if (Creature* lichKing = Unit::GetCreature(*me, _lichKingGuid))
+ if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _lichKingGuid))
lichKing->AI()->Talk(SAY_LK_4);
_events.ScheduleEvent(EVENT_OUTRO, 12000);
break;
}
case EVENT_LK_SAY_5:
{
- if (Creature* lichKing = Unit::GetCreature(*me, _lichKingGuid))
+ if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _lichKingGuid))
lichKing->AI()->Talk(SAY_LK_5);
_events.ScheduleEvent(EVENT_OUTRO, 8000);
break;
@@ -1001,7 +1001,7 @@ class npc_margrave_dhakar : public CreatureScript
if (Creature* olakin = me->FindNearestCreature(NPC_OLAKIN, 50.0f, true))
olakin->AI()->Talk(SAY_OLAKIN_PAY);
- if (Creature* lichKing = Unit::GetCreature(*me, _lichKingGuid))
+ if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _lichKingGuid))
lichKing->DespawnOrUnsummon(0);
_events.ScheduleEvent(EVENT_START, 5000);
@@ -1029,7 +1029,7 @@ class npc_margrave_dhakar : public CreatureScript
uint64 _lichKingGuid;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_margrave_dhakarAI(creature);
}
@@ -1044,7 +1044,7 @@ class npc_morbidus : public CreatureScript
{
npc_morbidusAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
if (Creature* dhakar = me->FindNearestCreature(NPC_DHAKAR, 50.0f, true))
dhakar->AI()->Reset();
@@ -1056,7 +1056,7 @@ class npc_morbidus : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_morbidusAI(creature);
}
diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
index 6e39d341c58..a4d6ab31846 100644
--- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp
+++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
@@ -18,12 +18,11 @@
/* ScriptData
SDName: Sholazar_Basin
SD%Complete: 100
-SDComment: Quest support: 12570, 12573, 12621, 12726
+SDComment: Quest support: 12573, 12621, 12726
SDCategory: Sholazar_Basin
EndScriptData */
/* ContentData
-npc_injured_rainspeaker_oracle
npc_vekjik
avatar_of_freya
npc_haiphoon (Quest: "Song of Wind and Water")
@@ -40,141 +39,6 @@ EndContentData */
#include "Player.h"
/*######
-## npc_injured_rainspeaker_oracle
-######*/
-
-#define GOSSIP_ITEM1 "I am ready to travel to your village now."
-
-enum Rainspeaker
-{
- SAY_START_IRO = 0,
- SAY_QUEST_ACCEPT_IRO = 1,
- SAY_END_IRO = 2,
-
- QUEST_FORTUNATE_MISUNDERSTANDINGS = 12570,
- FACTION_ESCORTEE_A = 774,
- FACTION_ESCORTEE_H = 775
-};
-
-class npc_injured_rainspeaker_oracle : public CreatureScript
-{
-public:
- npc_injured_rainspeaker_oracle() : CreatureScript("npc_injured_rainspeaker_oracle") { }
-
- struct npc_injured_rainspeaker_oracleAI : public npc_escortAI
- {
- npc_injured_rainspeaker_oracleAI(Creature* creature) : npc_escortAI(creature) { c_guid = creature->GetGUID(); }
-
- uint64 c_guid;
-
- void Reset() OVERRIDE
- {
- me->RestoreFaction();
- // if we will have other way to assign this to only one npc remove this part
- if (GUID_LOPART(me->GetGUID()) != 101030)
- {
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- }
- }
-
- void WaypointReached(uint32 waypointId) OVERRIDE
- {
- Player* player = GetPlayerForEscort();
- if (!player)
- return;
-
- switch (waypointId)
- {
- case 1:
- SetRun();
- break;
- case 10:
- case 11:
- case 12:
- case 13:
- case 14:
- case 15:
- case 16:
- case 17:
- case 18:
- me->RemoveUnitMovementFlag(MOVEMENTFLAG_FALLING);
- me->SetSpeed(MOVE_SWIM, 0.85f, true);
- me->SetSwim(true);
- me->SetDisableGravity(true);
- break;
- case 19:
- me->GetMotionMaster()->MoveFall();
- break;
- case 28:
- player->GroupEventHappens(QUEST_FORTUNATE_MISUNDERSTANDINGS, me);
- // me->RestoreFaction();
- Talk(SAY_END_IRO);
- SetRun(false);
- break;
- }
- }
-
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- if (!HasEscortState(STATE_ESCORT_ESCORTING))
- return;
-
- if (Player* player = GetPlayerForEscort())
- {
- if (player->GetQuestStatus(QUEST_FORTUNATE_MISUNDERSTANDINGS) != QUEST_STATUS_COMPLETE)
- player->FailQuest(QUEST_FORTUNATE_MISUNDERSTANDINGS);
- }
- }
- };
-
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
- {
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
-
- if (player->GetQuestStatus(QUEST_FORTUNATE_MISUNDERSTANDINGS) == QUEST_STATUS_INCOMPLETE)
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
-
- player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
-
- return true;
- }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
- {
- player->PlayerTalkClass->ClearMenus();
- if (action == GOSSIP_ACTION_INFO_DEF+1)
- {
- CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
- CAST_AI(npc_escortAI, (creature->AI()))->SetMaxPlayerDistance(35.0f);
- creature->AI()->Talk(SAY_START_IRO);
-
- switch (player->GetTeam()){
- case ALLIANCE:
- creature->setFaction(FACTION_ESCORTEE_A);
- break;
- case HORDE:
- creature->setFaction(FACTION_ESCORTEE_H);
- break;
- }
- }
- return true;
- }
-
- bool OnQuestAccept(Player* /*player*/, Creature* creature, Quest const* /*_Quest*/) OVERRIDE
- {
- creature->AI()->Talk(SAY_QUEST_ACCEPT_IRO);
- return false;
- }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_injured_rainspeaker_oracleAI(creature);
- }
-};
-
-/*######
## npc_vekjik
######*/
@@ -198,7 +62,7 @@ class npc_vekjik : public CreatureScript
public:
npc_vekjik() : CreatureScript("npc_vekjik") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -214,7 +78,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -259,7 +123,7 @@ class npc_avatar_of_freya : public CreatureScript
public:
npc_avatar_of_freya() : CreatureScript("npc_avatar_of_freya") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -271,7 +135,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -308,7 +172,7 @@ public:
{
}
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
if (me->isDead())
return;
@@ -320,7 +184,7 @@ public:
Reset();
}
- void UpdateAI(uint32 /*uiDiff*/) OVERRIDE
+ void UpdateAI(uint32 /*uiDiff*/) override
{
if (!UpdateVictim())
return;
@@ -329,7 +193,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_bushwhackerAI(creature);
}
@@ -369,7 +233,7 @@ public:
uint32 m_uiChatTimer;
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
@@ -408,12 +272,12 @@ public:
}
}
- void Reset() OVERRIDE
+ void Reset() override
{
m_uiChatTimer = 4000;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (HasEscortState(STATE_ESCORT_ESCORTING))
{
@@ -422,7 +286,7 @@ public:
}
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
npc_escortAI::UpdateAI(uiDiff);
@@ -438,12 +302,12 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_engineer_heliceAI(creature);
}
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
{
if (quest->GetQuestId() == QUEST_DISASTER)
{
@@ -504,7 +368,7 @@ public:
{
npc_jungle_punch_targetAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
sayTimer = 3500;
sayStep = 0;
@@ -514,7 +378,7 @@ public:
orphanGUID = 0;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!phase && who && who->GetDistance2d(me) < 10.0f)
if (Player* player = who->ToPlayer())
@@ -546,7 +410,7 @@ public:
switch (phase)
{
case 1:
- orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + cos(me->GetOrientation()) * 5, me->GetPositionY() + sin(me->GetOrientation()) * 5, me->GetPositionZ());
+ orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + std::cos(me->GetOrientation()) * 5, me->GetPositionY() + std::sin(me->GetOrientation()) * 5, me->GetPositionZ());
orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_6);
timer = 5000;
break;
@@ -579,7 +443,7 @@ public:
timer -= diff;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (phase)
proceedCwEvent(diff);
@@ -600,7 +464,7 @@ public:
sayTimer -= diff;
}
- void SpellHit(Unit* caster, SpellInfo const* spellInfo) OVERRIDE
+ void SpellHit(Unit* caster, SpellInfo const* spellInfo) override
{
if (spellInfo->Id != SPELL_OFFER)
return;
@@ -641,7 +505,7 @@ public:
uint64 orphanGUID;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_jungle_punch_targetAI(creature);
}
@@ -686,12 +550,12 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_adventurous_dwarfAI(creature);
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(QUEST_12634) != QUEST_STATUS_INCOMPLETE)
return false;
@@ -709,7 +573,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
uint32 spellId = 0;
@@ -804,13 +668,13 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_q12620_the_lifewarden_wrath_SpellScript::HandleSendEvent, EFFECT_0, SPELL_EFFECT_SEND_EVENT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12620_the_lifewarden_wrath_SpellScript();
}
@@ -927,14 +791,14 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_q12589_shoot_rjr_SpellScript::CheckCast);
OnEffectHitTarget += SpellEffectFn(spell_q12589_shoot_rjr_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12589_shoot_rjr_SpellScript();
}
@@ -964,7 +828,7 @@ public:
{
npc_haiphoonAI(Creature* creature) : VehicleAI(creature) { }
- void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, SpellInfo const* spell) override
{
if (target == me)
return;
@@ -980,7 +844,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_haiphoonAI(creature);
}
@@ -1018,13 +882,20 @@ public:
{
npc_vics_flying_machineAI(Creature* creature) : VehicleAI(creature) { }
- void PassengerBoarded(Unit* passenger, int8 /*seatId*/, bool apply) OVERRIDE
+ void PassengerBoarded(Unit* passenger, int8 /*seatId*/, bool apply) override
{
if (apply && passenger->GetTypeId() == TYPEID_PLAYER)
+ {
+ /// @workaround - Because accessory gets unmounted when using vehicle_template_accessory.
+ /// When vehicle spawns accessory is mounted to seat 0,but when player mounts
+ /// he uses the same seat (instead of mounting to seat 1) kicking the accessory out.
+ passenger->ChangeSeat(1, false);
+ me->GetVehicleKit()->InstallAccessory(NPC_PILOT, 0, true, TEMPSUMMON_DEAD_DESPAWN, 0);
me->GetMotionMaster()->MovePath(NPC_PLANE, false);
+ }
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != WAYPOINT_MOTION_TYPE)
return;
@@ -1056,11 +927,12 @@ public:
case 25:
Talk(PLANE_EMOTE);
DoCast(SPELL_ENGINE);
+ me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FORCE_MOVEMENT);
break;
}
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_LAND)
{
@@ -1073,10 +945,10 @@ public:
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_vics_flying_machineAI(creature);
}
@@ -1121,13 +993,13 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_shango_tracks_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_shango_tracks_SpellScript();
}
@@ -1135,7 +1007,6 @@ public:
void AddSC_sholazar_basin()
{
- new npc_injured_rainspeaker_oracle();
new npc_vekjik();
new npc_avatar_of_freya();
new npc_bushwhacker();
diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp
index 838fa44ded4..cfee2e0f187 100644
--- a/src/server/scripts/Northrend/zone_storm_peaks.cpp
+++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp
@@ -48,7 +48,7 @@ public:
{
npc_injured_goblinAI(Creature* creature) : npc_escortAI(creature) { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -65,18 +65,18 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Player* player = GetPlayerForEscort();
if (HasEscortState(STATE_ESCORT_ESCORTING) && player)
player->FailQuest(QUEST_BITTER_DEPARTURE);
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
npc_escortAI::UpdateAI(uiDiff);
if (!UpdateVictim())
@@ -84,7 +84,7 @@ public:
DoMeleeAttackIfReady();
}
- void sGossipSelect(Player* player, uint32 sender, uint32 action) OVERRIDE
+ void sGossipSelect(Player* player, uint32 sender, uint32 action) override
{
if (sender == GOSSIP_ID && action == GOSSIP_OPTION_ID)
{
@@ -95,12 +95,12 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_injured_goblinAI(creature);
}
- bool OnQuestAccept(Player* /*player*/, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* /*player*/, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_BITTER_DEPARTURE)
creature->AI()->Talk(SAY_QUEST_ACCEPT);
@@ -124,7 +124,7 @@ class npc_roxi_ramrocket : public CreatureScript
public:
npc_roxi_ramrocket() : CreatureScript("npc_roxi_ramrocket") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
//Quest Menu
if (creature->IsQuestGiver())
@@ -143,7 +143,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -183,18 +183,18 @@ public:
bool freed;
- void Reset() OVERRIDE
+ void Reset() override
{
freed = false;
me->CastSpell(me, SPELL_ICE_PRISON, true);
}
- void JustRespawned() OVERRIDE
+ void JustRespawned() override
{
Reset();
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!freed)
return;
@@ -203,7 +203,7 @@ public:
me->DespawnOrUnsummon();
}
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (spell->Id != SPELL_ICE_LANCE)
return;
@@ -218,7 +218,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_brunnhildar_prisonerAI(creature);
}
@@ -255,12 +255,12 @@ public:
EventMap events;
- void Reset() OVERRIDE
+ void Reset() override
{
events.ScheduleEvent(EVENT_CHECK_AREA, 5000);
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != WAYPOINT_MOTION_TYPE)
return;
@@ -270,7 +270,7 @@ public:
events.ScheduleEvent(EVENT_REACHED_HOME, 2000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -312,7 +312,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_freed_protodrakeAI(creature);
}
@@ -327,11 +327,11 @@ public:
{
npc_icefangAI(Creature* creature) : npc_escortAI(creature) { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void EnterEvadeMode() OVERRIDE { }
+ void AttackStart(Unit* /*who*/) override { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void EnterEvadeMode() override { }
- void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) OVERRIDE
+ void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
{
@@ -340,11 +340,11 @@ public:
}
}
- void WaypointReached(uint32 /*waypointId*/) OVERRIDE { }
- void JustDied(Unit* /*killer*/) OVERRIDE { }
- void OnCharmed(bool /*apply*/) OVERRIDE { }
+ void WaypointReached(uint32 /*waypointId*/) override { }
+ void JustDied(Unit* /*killer*/) override { }
+ void OnCharmed(bool /*apply*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
@@ -353,7 +353,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_icefangAI(creature);
}
@@ -374,7 +374,7 @@ class npc_hyldsmeet_protodrake : public CreatureScript
public:
npc_hyldsmeet_protodrakeAI(Creature* creature) : CreatureAI(creature), _accessoryRespawnTimer(0), _vehicleKit(creature->GetVehicleKit()) { }
- void PassengerBoarded(Unit* who, int8 /*seat*/, bool apply) OVERRIDE
+ void PassengerBoarded(Unit* who, int8 /*seat*/, bool apply) override
{
if (apply)
return;
@@ -383,7 +383,7 @@ class npc_hyldsmeet_protodrake : public CreatureScript
_accessoryRespawnTimer = 5 * MINUTE * IN_MILLISECONDS;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//! We need to manually reinstall accessories because the vehicle itself is friendly to players,
//! so EnterEvadeMode is never triggered. The accessory on the other hand is hostile and killable.
@@ -401,7 +401,7 @@ class npc_hyldsmeet_protodrake : public CreatureScript
Vehicle* _vehicleKit;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_hyldsmeet_protodrakeAI(creature);
}
@@ -460,7 +460,7 @@ public:
objectCounter = 0;
}
- void Reset() OVERRIDE
+ void Reset() override
{
memset(&objectGUID, 0, sizeof(objectGUID));
playerGUID = 0;
@@ -468,14 +468,14 @@ public:
objectCounter = 0;
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE
+ void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
{
player->CLOSE_GOSSIP_MENU();
playerGUID = player->GetGUID();
events.ScheduleEvent(EVENT_SCRIPT_1, 100);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -589,7 +589,7 @@ public:
uint8 objectCounter;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_brann_bronzebeard_keystoneAI(creature);
}
@@ -647,15 +647,15 @@ public:
pathEnd = false;
}
- void Reset() OVERRIDE
+ void Reset() override
{
playerGUID = 0;
pathEnd = false;
}
- void OnCharmed(bool /*apply*/) OVERRIDE { }
+ void OnCharmed(bool /*apply*/) override { }
- void PassengerBoarded(Unit* who, int8 /*seat*/, bool apply) OVERRIDE
+ void PassengerBoarded(Unit* who, int8 /*seat*/, bool apply) override
{
if (apply)
{
@@ -667,7 +667,7 @@ public:
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != WAYPOINT_MOTION_TYPE)
return;
@@ -694,7 +694,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!pathEnd)
return;
@@ -720,7 +720,7 @@ public:
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_king_jokkum_vehicleAI(creature);
}
@@ -734,7 +734,7 @@ class spell_jokkum_scriptcast : public SpellScriptLoader
{
PrepareAuraScript(spell_jokkum_scriptcast_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_JOKKUM_SUMMON))
return false;
@@ -747,13 +747,13 @@ class spell_jokkum_scriptcast : public SpellScriptLoader
target->CastSpell(target, SPELL_JOKKUM_SUMMON, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_jokkum_scriptcast_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_jokkum_scriptcast_AuraScript();
}
@@ -767,7 +767,7 @@ class spell_veranus_summon : public SpellScriptLoader
{
PrepareAuraScript(spell_veranus_summon_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_VERANUS_AND_THORIM))
return false;
@@ -780,13 +780,13 @@ class spell_veranus_summon : public SpellScriptLoader
target->CastSpell(target, SPELL_SUMMON_VERANUS_AND_THORIM, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_veranus_summon_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_veranus_summon_AuraScript();
}
@@ -806,15 +806,15 @@ class spell_close_rift : public SpellScriptLoader
{
PrepareAuraScript(spell_close_rift_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_counter = 0;
return true;
}
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
- return sSpellMgr->GetSpellInfo(SPELL_DESPAWN_RIFT);
+ return sSpellMgr->GetSpellInfo(SPELL_DESPAWN_RIFT) != nullptr;
}
void HandlePeriodic(AuraEffect const* /* aurEff */)
@@ -823,7 +823,7 @@ class spell_close_rift : public SpellScriptLoader
GetTarget()->CastSpell((Unit*)NULL, SPELL_DESPAWN_RIFT, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_close_rift_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
@@ -833,7 +833,7 @@ class spell_close_rift : public SpellScriptLoader
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_close_rift_AuraScript();
}
diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp
index e218741649d..fe74997bb39 100644
--- a/src/server/scripts/Northrend/zone_wintergrasp.cpp
+++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp
@@ -115,7 +115,7 @@ class npc_wg_demolisher_engineer : public CreatureScript
public:
npc_wg_demolisher_engineer() : CreatureScript("npc_wg_demolisher_engineer") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -138,7 +138,7 @@ class npc_wg_demolisher_engineer : public CreatureScript
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->CLOSE_GOSSIP_MENU();
@@ -186,7 +186,7 @@ class npc_wg_spirit_guide : public CreatureScript
public:
npc_wg_spirit_guide() : CreatureScript("npc_wg_spirit_guide") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -204,7 +204,7 @@ class npc_wg_spirit_guide : public CreatureScript
return true;
}
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
{
player->CLOSE_GOSSIP_MENU();
@@ -224,14 +224,14 @@ class npc_wg_spirit_guide : public CreatureScript
{
npc_wg_spirit_guideAI(Creature* creature) : ScriptedAI(creature) { }
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!me->HasUnitState(UNIT_STATE_CASTING))
DoCast(me, SPELL_CHANNEL_SPIRIT_HEAL);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_wg_spirit_guideAI(creature);
}
@@ -256,14 +256,14 @@ class npc_wg_queue : public CreatureScript
uint32 FrostArmor_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
FrostArmor_Timer = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (FrostArmor_Timer <= diff)
{
@@ -276,12 +276,12 @@ class npc_wg_queue : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_wg_queueAI(creature);
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -310,7 +310,7 @@ class npc_wg_queue : public CreatureScript
return true;
}
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 /*action*/) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 /*action*/) override
{
player->CLOSE_GOSSIP_MENU();
@@ -339,7 +339,7 @@ class go_wg_vehicle_teleporter : public GameObjectScript
{
go_wg_vehicle_teleporterAI(GameObject* gameObject) : GameObjectAI(gameObject), _checkTimer(1000) { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_checkTimer <= diff)
{
@@ -360,7 +360,7 @@ class go_wg_vehicle_teleporter : public GameObjectScript
uint32 _checkTimer;
};
- GameObjectAI* GetAI(GameObject* go) const OVERRIDE
+ GameObjectAI* GetAI(GameObject* go) const override
{
return new go_wg_vehicle_teleporterAI(go);
}
@@ -371,7 +371,7 @@ class npc_wg_quest_giver : public CreatureScript
public:
npc_wg_quest_giver() : CreatureScript("npc_wg_quest_giver") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG);
if (!wintergrasp)
@@ -483,7 +483,7 @@ class spell_wintergrasp_force_building : public SpellScriptLoader
{
PrepareSpellScript(spell_wintergrasp_force_building_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_BUILD_CATAPULT_FORCE)
|| !sSpellMgr->GetSpellInfo(SPELL_BUILD_DEMOLISHER_FORCE)
@@ -499,13 +499,13 @@ class spell_wintergrasp_force_building : public SpellScriptLoader
GetHitUnit()->CastSpell(GetHitUnit(), GetEffectValue(), false);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_wintergrasp_force_building_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_wintergrasp_force_building_SpellScript();
}
@@ -526,13 +526,13 @@ class spell_wintergrasp_grab_passenger : public SpellScriptLoader
target->CastSpell(GetCaster(), SPELL_RIDE_WG_VEHICLE, false);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_wintergrasp_grab_passenger_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_wintergrasp_grab_passenger_SpellScript();
}
@@ -543,7 +543,7 @@ class achievement_wg_didnt_stand_a_chance : public AchievementCriteriaScript
public:
achievement_wg_didnt_stand_a_chance() : AchievementCriteriaScript("achievement_wg_didnt_stand_a_chance") { }
- bool OnCheck(Player* source, Unit* target) OVERRIDE
+ bool OnCheck(Player* source, Unit* target) override
{
if (!target)
return false;
@@ -586,13 +586,13 @@ public:
return SPELL_CAST_OK;
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_wintergrasp_defender_teleport_SpellScript::CheckCast);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_wintergrasp_defender_teleport_SpellScript();
}
@@ -611,19 +611,18 @@ public:
{
if (Unit* target = GetHitUnit())
{
- WorldLocation loc;
- target->GetPosition(&loc);
+ WorldLocation loc = target->GetWorldLocation();
SetExplTargetDest(loc);
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_wintergrasp_defender_teleport_trigger_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_wintergrasp_defender_teleport_trigger_SpellScript();
}
diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp
index 0f542b3aca7..2e75b10c0e8 100644
--- a/src/server/scripts/Northrend/zone_zuldrak.cpp
+++ b/src/server/scripts/Northrend/zone_zuldrak.cpp
@@ -49,7 +49,7 @@ public:
{
npc_drakuru_shacklesAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_rageclawGUID = 0;
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -85,13 +85,13 @@ public:
me->setDeathState(DEAD);
}
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (spell->Id == SPELL_UNLOCK_SHACKLE)
{
if (caster->ToPlayer()->GetQuestStatus(QUEST_TROLLS_IS_GONE_CRAZY) == QUEST_STATUS_INCOMPLETE)
{
- if (Creature* rageclaw = Unit::GetCreature(*me, _rageclawGUID))
+ if (Creature* rageclaw = ObjectAccessor::GetCreature(*me, _rageclawGUID))
{
UnlockRageclaw(caster, rageclaw);
caster->ToPlayer()->KilledMonster(rageclaw->GetCreatureTemplate(), _rageclawGUID);
@@ -107,7 +107,7 @@ public:
uint64 _rageclawGUID;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_drakuru_shacklesAI(creature);
}
@@ -133,22 +133,22 @@ public:
{
npc_captured_rageclawAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->setFaction(35);
DoCast(me, SPELL_KNEEL, true); // Little Hack for kneel - Thanks Illy :P
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
if (spell->Id == SPELL_FREE_RAGECLAW)
{
me->RemoveAurasDueToSpell(SPELL_LEFT_CHAIN);
me->RemoveAurasDueToSpell(SPELL_RIGHT_CHAIN);
me->RemoveAurasDueToSpell(SPELL_KNEEL);
- me->setFaction(me->GetCreatureTemplate()->faction_H);
+ me->setFaction(me->GetCreatureTemplate()->faction);
DoCast(me, SPELL_UNSHACKLED, true);
Talk(SAY_RAGECLAW);
me->GetMotionMaster()->MoveRandom(10);
@@ -157,7 +157,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_captured_rageclawAI(creature);
}
@@ -177,14 +177,14 @@ public:
{
npc_released_offspring_harkoaAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
float x, y, z;
me->GetClosePoint(x, y, z, me->GetObjectSize() / 3, 25.0f);
me->GetMotionMaster()->MovePoint(0, x, y, z);
}
- void MovementInform(uint32 Type, uint32 /*uiId*/) OVERRIDE
+ void MovementInform(uint32 Type, uint32 /*uiId*/) override
{
if (Type != POINT_MOTION_TYPE)
return;
@@ -192,7 +192,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_released_offspring_harkoaAI(creature);
}
@@ -224,14 +224,14 @@ public:
{
npc_crusade_recruitAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_COWER);
_heading = me->GetOrientation();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
@@ -247,7 +247,7 @@ public:
break;
case EVENT_RECRUIT_2:
me->SetWalk(true);
- me->GetMotionMaster()->MovePoint(0, me->GetPositionX() + (cos(_heading) * 10), me->GetPositionY() + (sin(_heading) * 10), me->GetPositionZ());
+ me->GetMotionMaster()->MovePoint(0, me->GetPositionX() + (std::cos(_heading) * 10), me->GetPositionY() + (std::sin(_heading) * 10), me->GetPositionZ());
me->DespawnOrUnsummon(5000);
break;
default:
@@ -259,7 +259,7 @@ public:
return;
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE
+ void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
{
_events.ScheduleEvent(EVENT_RECRUIT_1, 100);
player->CLOSE_GOSSIP_MENU();
@@ -272,7 +272,7 @@ public:
float _heading; // Store creature heading
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_crusade_recruitAI(creature);
}
@@ -295,7 +295,7 @@ class go_scourge_enclosure : public GameObjectScript
public:
go_scourge_enclosure() : GameObjectScript("go_scourge_enclosure") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->UseDoorOrButton();
if (player->GetQuestStatus(QUEST_OUR_ONLY_HOPE) == QUEST_STATUS_INCOMPLETE)
@@ -459,14 +459,14 @@ public:
_getingredienttry = 0;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_playerGUID = 0;
_getingredienttry = 0;
_events.ScheduleEvent(EVENT_TURN_TO_POT, urand(15000, 26000));
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
if (type == 1 && data == 1)
switch (_getingredienttry)
@@ -489,7 +489,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
@@ -545,7 +545,7 @@ public:
}
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE
+ void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
{
player->CLOSE_GOSSIP_MENU();
DoCast(player, SPELL_ALCHEMIST_APPRENTICE_INVISBUFF);
@@ -560,7 +560,7 @@ public:
uint8 _getingredienttry;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_alchemist_finklesteinAI(creature);
}
@@ -571,7 +571,7 @@ class go_finklesteins_cauldron : public GameObjectScript
public:
go_finklesteins_cauldron() : GameObjectScript("go_finklesteins_cauldron") { }
- bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* /*go*/) override
{
player->CastSpell(player, SPELL_POT_CHECK);
return true;
@@ -615,7 +615,7 @@ class spell_random_ingredient_aura : public SpellScriptLoader
{
PrepareAuraScript(spell_random_ingredient_aura_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_RANDOM_INGREDIENT_EASY) || !sSpellMgr->GetSpellInfo(SPELL_RANDOM_INGREDIENT_MEDIUM) || !sSpellMgr->GetSpellInfo(SPELL_RANDOM_INGREDIENT_HARD))
return false;
@@ -638,13 +638,13 @@ class spell_random_ingredient_aura : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_random_ingredient_aura_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_random_ingredient_aura_AuraScript();
}
@@ -662,7 +662,7 @@ class spell_random_ingredient : public SpellScriptLoader
{
PrepareSpellScript(spell_random_ingredient_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_KNOTROOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PICKLED_EAGLE_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPECKLED_GUANO) ||
!sSpellMgr->GetSpellInfo(SPELL_FETCH_WITHERED_BATWING) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SEASONED_SLIDER_CIDER) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH) ||
@@ -702,13 +702,13 @@ class spell_random_ingredient : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_random_ingredient_SpellScript();
}
@@ -726,7 +726,7 @@ class spell_pot_check : public SpellScriptLoader
{
PrepareSpellScript(spell_pot_check_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_KNOTROOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PICKLED_EAGLE_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPECKLED_GUANO) ||
!sSpellMgr->GetSpellInfo(SPELL_FETCH_WITHERED_BATWING) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SEASONED_SLIDER_CIDER) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH) ||
@@ -795,13 +795,13 @@ class spell_pot_check : public SpellScriptLoader
player->DestroyItemCount(FetchIngredients[i][2], 1, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_pot_check_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pot_check_SpellScript();
}
@@ -831,13 +831,13 @@ class spell_fetch_ingredient_aura : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectRemove += AuraEffectRemoveFn(spell_fetch_ingredient_aura_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_fetch_ingredient_aura_AuraScript();
}
@@ -861,17 +861,17 @@ public:
{
npc_storm_cloudAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->CastSpell(me, STORM_VISUAL, true);
}
- void JustRespawned() OVERRIDE
+ void JustRespawned() override
{
Reset();
}
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (spell->Id != GYMERS_GRAB)
return;
@@ -885,7 +885,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_storm_cloudAI(creature);
}
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp
index b8a28a3248a..4fb84fa0759 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp
@@ -24,8 +24,6 @@
#include "ObjectAccessor.h"
#include "OutdoorPvPMgr.h"
#include "Creature.h"
-#include "Language.h"
-#include "World.h"
#include "GossipDef.h"
OPvPCapturePointEP_EWT::OPvPCapturePointEP_EWT(OutdoorPvP* pvp)
@@ -38,16 +36,8 @@ OPvPCapturePointEP_EWT::OPvPCapturePointEP_EWT(OutdoorPvP* pvp)
void OPvPCapturePointEP_EWT::ChangeState()
{
// if changing from controlling alliance to horde or vice versa
- if ( m_OldState == OBJECTIVESTATE_ALLIANCE && m_OldState != m_State )
- {
- sWorld->SendZoneText(EP_GraveYardZone, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOSE_EWT_A));
+ if (m_OldState == OBJECTIVESTATE_ALLIANCE || m_OldState == OBJECTIVESTATE_HORDE)
((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_EWT, 0);
- }
- else if ( m_OldState == OBJECTIVESTATE_HORDE && m_OldState != m_State )
- {
- sWorld->SendZoneText(EP_GraveYardZone, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOSE_EWT_H));
- ((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_EWT, 0);
- }
uint32 artkit = 21;
@@ -58,14 +48,14 @@ void OPvPCapturePointEP_EWT::ChangeState()
artkit = 2;
SummonSupportUnitAtNorthpassTower(ALLIANCE);
((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_EWT, ALLIANCE);
- if (m_OldState != m_State) sWorld->SendZoneText(EP_GraveYardZone, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_EWT_A));
+ m_PvP->SendDefenseMessage(EP_GraveYardZone, TEXT_EASTWALL_TOWER_TAKEN_ALLIANCE);
break;
case OBJECTIVESTATE_HORDE:
m_TowerState = EP_TS_H;
artkit = 1;
SummonSupportUnitAtNorthpassTower(HORDE);
((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_EWT, HORDE);
- if (m_OldState != m_State) sWorld->SendZoneText(EP_GraveYardZone, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_EWT_H));
+ m_PvP->SendDefenseMessage(EP_GraveYardZone, TEXT_EASTWALL_TOWER_TAKEN_HORDE);
break;
case OBJECTIVESTATE_NEUTRAL:
m_TowerState = EP_TS_N;
@@ -98,52 +88,22 @@ void OPvPCapturePointEP_EWT::ChangeState()
SendObjectiveComplete(EP_EWT_CM, 0);
}
-void OPvPCapturePointEP_EWT::SendChangePhase()
-{
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 1);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_POS, phase);
- // send this too, sometimes it resets :S
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_neutralValuePct);
-}
-
void OPvPCapturePointEP_EWT::FillInitialWorldStates(WorldPacket &data)
{
- data << EP_EWT_A << uint32(bool(m_TowerState & EP_TS_A));
- data << EP_EWT_H << uint32(bool(m_TowerState & EP_TS_H));
- data << EP_EWT_N_A << uint32(bool(m_TowerState & EP_TS_N_A));
- data << EP_EWT_N_H << uint32(bool(m_TowerState & EP_TS_N_H));
- data << EP_EWT_N << uint32(bool(m_TowerState & EP_TS_N));
+ data << EP_EWT_A << uint32((m_TowerState & EP_TS_A) != 0);
+ data << EP_EWT_H << uint32((m_TowerState & EP_TS_H) != 0);
+ data << EP_EWT_N_A << uint32((m_TowerState & EP_TS_N_A) != 0);
+ data << EP_EWT_N_H << uint32((m_TowerState & EP_TS_N_H) != 0);
+ data << EP_EWT_N << uint32((m_TowerState & EP_TS_N) != 0);
}
void OPvPCapturePointEP_EWT::UpdateTowerState()
{
- m_PvP->SendUpdateWorldState(EP_EWT_A, bool(m_TowerState & EP_TS_A));
- m_PvP->SendUpdateWorldState(EP_EWT_H, bool(m_TowerState & EP_TS_H));
- m_PvP->SendUpdateWorldState(EP_EWT_N_A, bool(m_TowerState & EP_TS_N_A));
- m_PvP->SendUpdateWorldState(EP_EWT_N_H, bool(m_TowerState & EP_TS_N_H));
- m_PvP->SendUpdateWorldState(EP_EWT_N, bool(m_TowerState & EP_TS_N));
-}
-
-bool OPvPCapturePointEP_EWT::HandlePlayerEnter(Player* player)
-{
- if (OPvPCapturePoint::HandlePlayerEnter(player))
- {
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 1);
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_POS, phase);
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_neutralValuePct);
- return true;
- }
- return false;
-}
-
-void OPvPCapturePointEP_EWT::HandlePlayerLeave(Player* player)
-{
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 0);
- OPvPCapturePoint::HandlePlayerLeave(player);
+ m_PvP->SendUpdateWorldState(EP_EWT_A, (m_TowerState & EP_TS_A) != 0);
+ m_PvP->SendUpdateWorldState(EP_EWT_H, (m_TowerState & EP_TS_H) != 0);
+ m_PvP->SendUpdateWorldState(EP_EWT_N_A, (m_TowerState & EP_TS_N_A) != 0);
+ m_PvP->SendUpdateWorldState(EP_EWT_N_H, (m_TowerState & EP_TS_N_H) != 0);
+ m_PvP->SendUpdateWorldState(EP_EWT_N, (m_TowerState & EP_TS_N) != 0);
}
void OPvPCapturePointEP_EWT::SummonSupportUnitAtNorthpassTower(uint32 team)
@@ -151,16 +111,16 @@ void OPvPCapturePointEP_EWT::SummonSupportUnitAtNorthpassTower(uint32 team)
if (m_UnitsSummonedSide != team)
{
m_UnitsSummonedSide = team;
- const creature_type * ct = NULL;
+ creature_type const* ct = nullptr;
if (team == ALLIANCE)
- ct=EP_EWT_Summons_A;
+ ct = EP_EWT_Summons_A;
else
- ct=EP_EWT_Summons_H;
+ ct = EP_EWT_Summons_H;
for (uint8 i = 0; i < EP_EWT_NUM_CREATURES; ++i)
{
DelCreature(i);
- AddCreature(i, ct[i].entry, ct[i].teamval, ct[i].map, ct[i].x, ct[i].y, ct[i].z, ct[i].o, 1000000);
+ AddCreature(i, ct[i].entry, ct[i].map, ct[i].x, ct[i].y, ct[i].z, ct[i].o, OutdoorPvP::GetTeamIdByTeam(team), 1000000);
}
}
}
@@ -176,16 +136,8 @@ OPvPCapturePointEP_NPT::OPvPCapturePointEP_NPT(OutdoorPvP* pvp)
void OPvPCapturePointEP_NPT::ChangeState()
{
// if changing from controlling alliance to horde or vice versa
- if ( m_OldState == OBJECTIVESTATE_ALLIANCE && m_OldState != m_State )
- {
- sWorld->SendZoneText(EP_GraveYardZone, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOSE_NPT_A));
+ if (m_OldState == OBJECTIVESTATE_ALLIANCE || m_OldState == OBJECTIVESTATE_HORDE)
((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_NPT, 0);
- }
- else if ( m_OldState == OBJECTIVESTATE_HORDE && m_OldState != m_State )
- {
- sWorld->SendZoneText(EP_GraveYardZone, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOSE_NPT_H));
- ((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_NPT, 0);
- }
uint32 artkit = 21;
@@ -196,14 +148,14 @@ void OPvPCapturePointEP_NPT::ChangeState()
artkit = 2;
SummonGO(ALLIANCE);
((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_NPT, ALLIANCE);
- if (m_OldState != m_State) sWorld->SendZoneText(EP_GraveYardZone, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_NPT_A));
+ m_PvP->SendDefenseMessage(EP_GraveYardZone, TEXT_NORTHPASS_TOWER_TAKEN_ALLIANCE);
break;
case OBJECTIVESTATE_HORDE:
m_TowerState = EP_TS_H;
artkit = 1;
SummonGO(HORDE);
((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_NPT, HORDE);
- if (m_OldState != m_State) sWorld->SendZoneText(EP_GraveYardZone, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_NPT_H));
+ m_PvP->SendDefenseMessage(EP_GraveYardZone, TEXT_NORTHPASS_TOWER_TAKEN_HORDE);
break;
case OBJECTIVESTATE_NEUTRAL:
m_TowerState = EP_TS_N;
@@ -246,52 +198,22 @@ void OPvPCapturePointEP_NPT::ChangeState()
SendObjectiveComplete(EP_NPT_CM, 0);
}
-void OPvPCapturePointEP_NPT::SendChangePhase()
-{
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 1);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_POS, phase);
- // send this too, sometimes it resets :S
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_neutralValuePct);
-}
-
void OPvPCapturePointEP_NPT::FillInitialWorldStates(WorldPacket &data)
{
- data << EP_NPT_A << uint32(bool(m_TowerState & EP_TS_A));
- data << EP_NPT_H << uint32(bool(m_TowerState & EP_TS_H));
- data << EP_NPT_N_A << uint32(bool(m_TowerState & EP_TS_N_A));
- data << EP_NPT_N_H << uint32(bool(m_TowerState & EP_TS_N_H));
- data << EP_NPT_N << uint32(bool(m_TowerState & EP_TS_N));
+ data << EP_NPT_A << uint32((m_TowerState & EP_TS_A) != 0);
+ data << EP_NPT_H << uint32((m_TowerState & EP_TS_H) != 0);
+ data << EP_NPT_N_A << uint32((m_TowerState & EP_TS_N_A) != 0);
+ data << EP_NPT_N_H << uint32((m_TowerState & EP_TS_N_H) != 0);
+ data << EP_NPT_N << uint32((m_TowerState & EP_TS_N) != 0);
}
void OPvPCapturePointEP_NPT::UpdateTowerState()
{
- m_PvP->SendUpdateWorldState(EP_NPT_A, bool(m_TowerState & EP_TS_A));
- m_PvP->SendUpdateWorldState(EP_NPT_H, bool(m_TowerState & EP_TS_H));
- m_PvP->SendUpdateWorldState(EP_NPT_N_A, bool(m_TowerState & EP_TS_N_A));
- m_PvP->SendUpdateWorldState(EP_NPT_N_H, bool(m_TowerState & EP_TS_N_H));
- m_PvP->SendUpdateWorldState(EP_NPT_N, bool(m_TowerState & EP_TS_N));
-}
-
-bool OPvPCapturePointEP_NPT::HandlePlayerEnter(Player* player)
-{
- if (OPvPCapturePoint::HandlePlayerEnter(player))
- {
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 1);
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_POS, phase);
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_neutralValuePct);
- return true;
- }
- return false;
-}
-
-void OPvPCapturePointEP_NPT::HandlePlayerLeave(Player* player)
-{
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 0);
- OPvPCapturePoint::HandlePlayerLeave(player);
+ m_PvP->SendUpdateWorldState(EP_NPT_A, (m_TowerState & EP_TS_A) != 0);
+ m_PvP->SendUpdateWorldState(EP_NPT_H, (m_TowerState & EP_TS_H) != 0);
+ m_PvP->SendUpdateWorldState(EP_NPT_N_A, (m_TowerState & EP_TS_N_A) != 0);
+ m_PvP->SendUpdateWorldState(EP_NPT_N_H, (m_TowerState & EP_TS_N_H) != 0);
+ m_PvP->SendUpdateWorldState(EP_NPT_N, (m_TowerState & EP_TS_N) != 0);
}
void OPvPCapturePointEP_NPT::SummonGO(uint32 team)
@@ -318,16 +240,8 @@ OPvPCapturePointEP_CGT::OPvPCapturePointEP_CGT(OutdoorPvP* pvp)
void OPvPCapturePointEP_CGT::ChangeState()
{
// if changing from controlling alliance to horde or vice versa
- if ( m_OldState == OBJECTIVESTATE_ALLIANCE && m_OldState != m_State )
- {
- sWorld->SendZoneText(EP_GraveYardZone, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOSE_CGT_A));
- ((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_CGT, 0);
- }
- else if ( m_OldState == OBJECTIVESTATE_HORDE && m_OldState != m_State )
- {
- sWorld->SendZoneText(EP_GraveYardZone, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOSE_CGT_H));
+ if (m_OldState == OBJECTIVESTATE_ALLIANCE || m_OldState == OBJECTIVESTATE_HORDE)
((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_CGT, 0);
- }
uint32 artkit = 21;
@@ -338,14 +252,14 @@ void OPvPCapturePointEP_CGT::ChangeState()
artkit = 2;
LinkGraveYard(ALLIANCE);
((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_CGT, ALLIANCE);
- if (m_OldState != m_State) sWorld->SendZoneText(EP_GraveYardZone, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_CGT_A));
+ m_PvP->SendDefenseMessage(EP_GraveYardZone, TEXT_CROWN_GUARD_TOWER_TAKEN_ALLIANCE);
break;
case OBJECTIVESTATE_HORDE:
m_TowerState = EP_TS_H;
artkit = 1;
LinkGraveYard(HORDE);
((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_CGT, HORDE);
- if (m_OldState != m_State) sWorld->SendZoneText(EP_GraveYardZone, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_CGT_H));
+ m_PvP->SendDefenseMessage(EP_GraveYardZone, TEXT_CROWN_GUARD_TOWER_TAKEN_HORDE);
break;
case OBJECTIVESTATE_NEUTRAL:
m_TowerState = EP_TS_N;
@@ -378,52 +292,22 @@ void OPvPCapturePointEP_CGT::ChangeState()
SendObjectiveComplete(EP_CGT_CM, 0);
}
-void OPvPCapturePointEP_CGT::SendChangePhase()
-{
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 1);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_POS, phase);
- // send this too, sometimes it resets :S
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_neutralValuePct);
-}
-
void OPvPCapturePointEP_CGT::FillInitialWorldStates(WorldPacket &data)
{
- data << EP_CGT_A << uint32(bool(m_TowerState & EP_TS_A));
- data << EP_CGT_H << uint32(bool(m_TowerState & EP_TS_H));
- data << EP_CGT_N_A << uint32(bool(m_TowerState & EP_TS_N_A));
- data << EP_CGT_N_H << uint32(bool(m_TowerState & EP_TS_N_H));
- data << EP_CGT_N << uint32(bool(m_TowerState & EP_TS_N));
+ data << EP_CGT_A << uint32((m_TowerState & EP_TS_A) != 0);
+ data << EP_CGT_H << uint32((m_TowerState & EP_TS_H) != 0);
+ data << EP_CGT_N_A << uint32((m_TowerState & EP_TS_N_A) != 0);
+ data << EP_CGT_N_H << uint32((m_TowerState & EP_TS_N_H) != 0);
+ data << EP_CGT_N << uint32((m_TowerState & EP_TS_N) != 0);
}
void OPvPCapturePointEP_CGT::UpdateTowerState()
{
- m_PvP->SendUpdateWorldState(EP_CGT_A, bool(m_TowerState & EP_TS_A));
- m_PvP->SendUpdateWorldState(EP_CGT_H, bool(m_TowerState & EP_TS_H));
- m_PvP->SendUpdateWorldState(EP_CGT_N_A, bool(m_TowerState & EP_TS_N_A));
- m_PvP->SendUpdateWorldState(EP_CGT_N_H, bool(m_TowerState & EP_TS_N_H));
- m_PvP->SendUpdateWorldState(EP_CGT_N, bool(m_TowerState & EP_TS_N));
-}
-
-bool OPvPCapturePointEP_CGT::HandlePlayerEnter(Player* player)
-{
- if (OPvPCapturePoint::HandlePlayerEnter(player))
- {
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 1);
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_POS, phase);
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_neutralValuePct);
- return true;
- }
- return false;
-}
-
-void OPvPCapturePointEP_CGT::HandlePlayerLeave(Player* player)
-{
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 0);
- OPvPCapturePoint::HandlePlayerLeave(player);
+ m_PvP->SendUpdateWorldState(EP_CGT_A, (m_TowerState & EP_TS_A) != 0);
+ m_PvP->SendUpdateWorldState(EP_CGT_H, (m_TowerState & EP_TS_H) != 0);
+ m_PvP->SendUpdateWorldState(EP_CGT_N_A, (m_TowerState & EP_TS_N_A) != 0);
+ m_PvP->SendUpdateWorldState(EP_CGT_N_H, (m_TowerState & EP_TS_N_H) != 0);
+ m_PvP->SendUpdateWorldState(EP_CGT_N, (m_TowerState & EP_TS_N) != 0);
}
void OPvPCapturePointEP_CGT::LinkGraveYard(uint32 team)
@@ -447,16 +331,8 @@ OPvPCapturePointEP_PWT::OPvPCapturePointEP_PWT(OutdoorPvP* pvp)
void OPvPCapturePointEP_PWT::ChangeState()
{
// if changing from controlling alliance to horde or vice versa
- if ( m_OldState == OBJECTIVESTATE_ALLIANCE && m_OldState != m_State )
- {
- sWorld->SendZoneText(EP_GraveYardZone, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOSE_PWT_A));
+ if ( m_OldState == OBJECTIVESTATE_ALLIANCE || m_OldState == OBJECTIVESTATE_HORDE)
((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_PWT, 0);
- }
- else if ( m_OldState == OBJECTIVESTATE_HORDE && m_OldState != m_State )
- {
- sWorld->SendZoneText(EP_GraveYardZone, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_EP_LOSE_PWT_H));
- ((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_PWT, 0);
- }
uint32 artkit = 21;
@@ -467,14 +343,14 @@ void OPvPCapturePointEP_PWT::ChangeState()
SummonFlightMaster(ALLIANCE);
artkit = 2;
((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_PWT, ALLIANCE);
- if (m_OldState != m_State) sWorld->SendZoneText(EP_GraveYardZone, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_PWT_A));
+ m_PvP->SendDefenseMessage(EP_GraveYardZone, TEXT_PLAGUEWOOD_TOWER_TAKEN_ALLIANCE);
break;
case OBJECTIVESTATE_HORDE:
m_TowerState = EP_TS_H;
SummonFlightMaster(HORDE);
artkit = 1;
((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_PWT, HORDE);
- if (m_OldState != m_State) sWorld->SendZoneText(EP_GraveYardZone, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_EP_CAPTURE_PWT_H));
+ m_PvP->SendDefenseMessage(EP_GraveYardZone, TEXT_PLAGUEWOOD_TOWER_TAKEN_HORDE);
break;
case OBJECTIVESTATE_NEUTRAL:
m_TowerState = EP_TS_N;
@@ -517,52 +393,22 @@ void OPvPCapturePointEP_PWT::ChangeState()
SendObjectiveComplete(EP_PWT_CM, 0);
}
-void OPvPCapturePointEP_PWT::SendChangePhase()
-{
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 1);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_POS, phase);
- // send this too, sometimes it resets :S
- SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_neutralValuePct);
-}
-
void OPvPCapturePointEP_PWT::FillInitialWorldStates(WorldPacket &data)
{
- data << EP_PWT_A << uint32(bool(m_TowerState & EP_TS_A));
- data << EP_PWT_H << uint32(bool(m_TowerState & EP_TS_H));
- data << EP_PWT_N_A << uint32(bool(m_TowerState & EP_TS_N_A));
- data << EP_PWT_N_H << uint32(bool(m_TowerState & EP_TS_N_H));
- data << EP_PWT_N << uint32(bool(m_TowerState & EP_TS_N));
+ data << EP_PWT_A << uint32((m_TowerState & EP_TS_A) != 0);
+ data << EP_PWT_H << uint32((m_TowerState & EP_TS_H) != 0);
+ data << EP_PWT_N_A << uint32((m_TowerState & EP_TS_N_A) != 0);
+ data << EP_PWT_N_H << uint32((m_TowerState & EP_TS_N_H) != 0);
+ data << EP_PWT_N << uint32((m_TowerState & EP_TS_N) != 0);
}
void OPvPCapturePointEP_PWT::UpdateTowerState()
{
- m_PvP->SendUpdateWorldState(EP_PWT_A, bool(m_TowerState & EP_TS_A));
- m_PvP->SendUpdateWorldState(EP_PWT_H, bool(m_TowerState & EP_TS_H));
- m_PvP->SendUpdateWorldState(EP_PWT_N_A, bool(m_TowerState & EP_TS_N_A));
- m_PvP->SendUpdateWorldState(EP_PWT_N_H, bool(m_TowerState & EP_TS_N_H));
- m_PvP->SendUpdateWorldState(EP_PWT_N, bool(m_TowerState & EP_TS_N));
-}
-
-bool OPvPCapturePointEP_PWT::HandlePlayerEnter(Player* player)
-{
- if (OPvPCapturePoint::HandlePlayerEnter(player))
- {
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 1);
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_POS, phase);
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_neutralValuePct);
- return true;
- }
- return false;
-}
-
-void OPvPCapturePointEP_PWT::HandlePlayerLeave(Player* player)
-{
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 0);
- OPvPCapturePoint::HandlePlayerLeave(player);
+ m_PvP->SendUpdateWorldState(EP_PWT_A, (m_TowerState & EP_TS_A) != 0);
+ m_PvP->SendUpdateWorldState(EP_PWT_H, (m_TowerState & EP_TS_H) != 0);
+ m_PvP->SendUpdateWorldState(EP_PWT_N_A, (m_TowerState & EP_TS_N_A) != 0);
+ m_PvP->SendUpdateWorldState(EP_PWT_N_H, (m_TowerState & EP_TS_N_H) != 0);
+ m_PvP->SendUpdateWorldState(EP_PWT_N, (m_TowerState & EP_TS_N) != 0);
}
void OPvPCapturePointEP_PWT::SummonFlightMaster(uint32 team)
@@ -571,7 +417,7 @@ void OPvPCapturePointEP_PWT::SummonFlightMaster(uint32 team)
{
m_FlightMasterSpawned = team;
DelCreature(EP_PWT_FLIGHTMASTER);
- AddCreature(EP_PWT_FLIGHTMASTER, EP_PWT_FlightMaster.entry, team, EP_PWT_FlightMaster.map, EP_PWT_FlightMaster.x, EP_PWT_FlightMaster.y, EP_PWT_FlightMaster.z, EP_PWT_FlightMaster.o);
+ AddCreature(EP_PWT_FLIGHTMASTER, EP_PWT_FlightMaster.entry, EP_PWT_FlightMaster.map, EP_PWT_FlightMaster.x, EP_PWT_FlightMaster.y, EP_PWT_FlightMaster.z, EP_PWT_FlightMaster.o, OutdoorPvP::GetTeamIdByTeam(team));
/*
// sky - we need update gso code
@@ -722,22 +568,15 @@ void OutdoorPvPEP::FillInitialWorldStates(WorldPacket & data)
{
data << EP_UI_TOWER_COUNT_A << m_AllianceTowersControlled;
data << EP_UI_TOWER_COUNT_H << m_HordeTowersControlled;
- data << EP_UI_TOWER_SLIDER_DISPLAY << uint32(0);
- data << EP_UI_TOWER_SLIDER_POS << uint32(50);
- data << EP_UI_TOWER_SLIDER_N << uint32(100);
+
for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
- {
itr->second->FillInitialWorldStates(data);
- }
}
void OutdoorPvPEP::SendRemoveWorldStates(Player* player)
{
player->SendUpdateWorldState(EP_UI_TOWER_COUNT_A, 0);
player->SendUpdateWorldState(EP_UI_TOWER_COUNT_H, 0);
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 0);
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_POS, 0);
- player->SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, 0);
player->SendUpdateWorldState(EP_EWT_A, 0);
player->SendUpdateWorldState(EP_EWT_H, 0);
@@ -767,13 +606,9 @@ void OutdoorPvPEP::SendRemoveWorldStates(Player* player)
class OutdoorPvP_eastern_plaguelands : public OutdoorPvPScript
{
public:
+ OutdoorPvP_eastern_plaguelands() : OutdoorPvPScript("outdoorpvp_ep") { }
- OutdoorPvP_eastern_plaguelands()
- : OutdoorPvPScript("outdoorpvp_ep")
- {
- }
-
- OutdoorPvP* GetOutdoorPvP() const OVERRIDE
+ OutdoorPvP* GetOutdoorPvP() const override
{
return new OutdoorPvPEP();
}
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.h b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.h
index ecf9d80f071..f6a2354263d 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.h
@@ -18,9 +18,22 @@
#ifndef OUTDOOR_PVP_EP_
#define OUTDOOR_PVP_EP_
-#include "DBCStructure.h"
#include "OutdoorPvP.h"
+enum DefenseMessages
+{
+ TEXT_PLAGUEWOOD_TOWER_TAKEN_ALLIANCE = 13629, // '|cffffff00The Plaguewood Tower has been taken by the Alliance!|r'
+ TEXT_NORTHPASS_TOWER_TAKEN_ALLIANCE = 13630, // '|cffffff00Northpass Tower has been taken by the Alliance!|r'
+ TEXT_EASTWALL_TOWER_TAKEN_ALLIANCE = 13631, // '|cffffff00Eastwall Tower has been taken by the Alliance!|r'
+ TEXT_CROWN_GUARD_TOWER_TAKEN_ALLIANCE = 13632, // '|cffffff00Crown Guard Tower has been taken by the Alliance!|r'
+ TEXT_PLAGUEWOOD_TOWER_TAKEN_HORDE = 13634, // '|cffffff00The Plaguewood Tower has been taken by the Horde!|r'
+ TEXT_NORTHPASS_TOWER_TAKEN_HORDE = 13635, // '|cffffff00Northpass Tower has been taken by the Horde!|r'
+ TEXT_EASTWALL_TOWER_TAKEN_HORDE = 13636, // '|cffffff00Eastwall Tower has been taken by the Horde!|r'
+ TEXT_CROWN_GUARD_TOWER_TAKEN_HORDE = 13633, // '|cffffff00Crown Guard Tower has been taken by the Horde!|r'
+ TEXT_ALL_TOWERS_IN_CONTROL_ALLIANCE = 13638, // (NYI) '|cff33ccffAll four towers are now in control of the Alliance!|r'
+ TEXT_ALL_TOWERS_IN_CONTROL_HORDE = 13637, // (NYI) '|cffff0000All four towers are now in control of the Horde!|r'
+};
+
const uint32 EP_AllianceBuffs[4] = {11413, 11414, 11415, 1386};
const uint32 EP_HordeBuffs[4] = {30880, 30683, 30682, 29520};
@@ -84,10 +97,6 @@ enum EP_CrownGuardTowerWorldStates
enum EP_WorldStates
{
- EP_UI_TOWER_SLIDER_DISPLAY = 2426,
- EP_UI_TOWER_SLIDER_POS = 2427,
- EP_UI_TOWER_SLIDER_N = 2428,
-
EP_UI_TOWER_COUNT_A = 2327,
EP_UI_TOWER_COUNT_H = 2328
};
@@ -147,20 +156,20 @@ const uint8 EP_EWT_NUM_CREATURES = 5;
// should be spawned at EWT and follow a path, but trans-grid pathing isn't safe, so summon them directly at NPT
const creature_type EP_EWT_Summons_A[EP_EWT_NUM_CREATURES] =
{
- {17635, 469, 0, 3167.61f, -4352.09f, 138.20f, 4.5811f},
- {17647, 469, 0, 3172.74f, -4352.99f, 139.14f, 4.9873f},
- {17647, 469, 0, 3165.89f, -4354.46f, 138.67f, 3.7244f},
- {17647, 469, 0, 3164.65f, -4350.26f, 138.22f, 2.4794f},
- {17647, 469, 0, 3169.91f, -4349.68f, 138.37f, 0.7444f}
+ {17635, 0, 3167.61f, -4352.09f, 138.20f, 4.5811f},
+ {17647, 0, 3172.74f, -4352.99f, 139.14f, 4.9873f},
+ {17647, 0, 3165.89f, -4354.46f, 138.67f, 3.7244f},
+ {17647, 0, 3164.65f, -4350.26f, 138.22f, 2.4794f},
+ {17647, 0, 3169.91f, -4349.68f, 138.37f, 0.7444f}
};
const creature_type EP_EWT_Summons_H[EP_EWT_NUM_CREATURES] =
{
- {17995, 67, 0, 3167.61f, -4352.09f, 138.20f, 4.5811f},
- {17996, 67, 0, 3172.74f, -4352.99f, 139.14f, 4.9873f},
- {17996, 67, 0, 3165.89f, -4354.46f, 138.67f, 3.7244f},
- {17996, 67, 0, 3164.65f, -4350.26f, 138.22f, 2.4794f},
- {17996, 67, 0, 3169.91f, -4349.68f, 138.37f, 0.7444f}
+ {17995, 0, 3167.61f, -4352.09f, 138.20f, 4.5811f},
+ {17996, 0, 3172.74f, -4352.99f, 139.14f, 4.9873f},
+ {17996, 0, 3165.89f, -4354.46f, 138.67f, 3.7244f},
+ {17996, 0, 3164.65f, -4350.26f, 138.22f, 2.4794f},
+ {17996, 0, 3169.91f, -4349.68f, 138.37f, 0.7444f}
};
enum EP_TowerStates
@@ -175,7 +184,7 @@ enum EP_TowerStates
};
// when spawning, pay attention at setting the faction manually!
-const creature_type EP_PWT_FlightMaster = {17209, 0, 0, 2987.5f, -3049.11f, 120.126f, 5.75959f};
+const creature_type EP_PWT_FlightMaster = {17209, 0, 2987.5f, -3049.11f, 120.126f, 5.75959f};
// after spawning, modify the faction so that only the controller will be able to use it with SetUInt32Value(GAMEOBJECT_FACTION, faction_id);
const go_type EP_NPT_LordaeronShrine = {181682, 0, 3167.72f, -4355.91f, 138.785f, 1.69297f, 0.0f, 0.0f, 0.748956f, 0.66262f};
@@ -185,27 +194,18 @@ class OutdoorPvPEP;
class OPvPCapturePointEP_EWT : public OPvPCapturePoint
{
public:
-
OPvPCapturePointEP_EWT(OutdoorPvP* pvp);
void ChangeState();
- void SendChangePhase();
-
void FillInitialWorldStates(WorldPacket & data);
- // used when player is activated/inactivated in the area
- bool HandlePlayerEnter(Player* player);
- void HandlePlayerLeave(Player* player);
-
protected:
-
void SummonSupportUnitAtNorthpassTower(uint32 team);
void UpdateTowerState();
protected:
-
uint32 m_TowerState;
uint32 m_UnitsSummonedSide;
@@ -214,27 +214,18 @@ class OPvPCapturePointEP_EWT : public OPvPCapturePoint
class OPvPCapturePointEP_NPT : public OPvPCapturePoint
{
public:
-
OPvPCapturePointEP_NPT(OutdoorPvP* pvp);
void ChangeState();
- void SendChangePhase();
-
void FillInitialWorldStates(WorldPacket & data);
- // used when player is activated/inactivated in the area
- bool HandlePlayerEnter(Player* player);
- void HandlePlayerLeave(Player* player);
-
protected:
-
void SummonGO(uint32 team);
void UpdateTowerState();
protected:
-
uint32 m_TowerState;
uint32 m_SummonedGOSide;
@@ -243,27 +234,18 @@ class OPvPCapturePointEP_NPT : public OPvPCapturePoint
class OPvPCapturePointEP_CGT : public OPvPCapturePoint
{
public:
-
OPvPCapturePointEP_CGT(OutdoorPvP* pvp);
void ChangeState();
- void SendChangePhase();
-
void FillInitialWorldStates(WorldPacket & data);
- // used when player is activated/inactivated in the area
- bool HandlePlayerEnter(Player* player);
- void HandlePlayerLeave(Player* player);
-
protected:
-
void LinkGraveYard(uint32 team);
void UpdateTowerState();
protected:
-
uint32 m_TowerState;
uint32 m_GraveyardSide;
@@ -272,27 +254,18 @@ class OPvPCapturePointEP_CGT : public OPvPCapturePoint
class OPvPCapturePointEP_PWT : public OPvPCapturePoint
{
public:
-
OPvPCapturePointEP_PWT(OutdoorPvP* pvp);
void ChangeState();
- void SendChangePhase();
-
void FillInitialWorldStates(WorldPacket & data);
- // used when player is activated/inactivated in the area
- bool HandlePlayerEnter(Player* player);
- void HandlePlayerLeave(Player* player);
-
protected:
-
void SummonFlightMaster(uint32 team);
void UpdateTowerState();
protected:
-
uint32 m_FlightMasterSpawned;
uint32 m_TowerState;
@@ -301,7 +274,6 @@ class OPvPCapturePointEP_PWT : public OPvPCapturePoint
class OutdoorPvPEP : public OutdoorPvP
{
public:
-
OutdoorPvPEP();
bool SetupOutdoorPvP();
@@ -320,7 +292,6 @@ class OutdoorPvPEP : public OutdoorPvP
void SetControlledState(uint32 index, uint32 state);
private:
-
// how many towers are controlled
uint32 EP_Controls[EP_TOWER_NUM];
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp
index 5af51a5d07f..b3492b8334b 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp
@@ -20,18 +20,12 @@
#include "OutdoorPvP.h"
#include "OutdoorPvPMgr.h"
#include "Player.h"
-#include "WorldPacket.h"
-#include "World.h"
#include "ObjectMgr.h"
-#include "Language.h"
-
-const uint32 HP_LANG_LOSE_A[HP_TOWER_NUM] = {LANG_OPVP_HP_LOSE_BROKENHILL_A, LANG_OPVP_HP_LOSE_OVERLOOK_A, LANG_OPVP_HP_LOSE_STADIUM_A};
-
-const uint32 HP_LANG_LOSE_H[HP_TOWER_NUM] = {LANG_OPVP_HP_LOSE_BROKENHILL_H, LANG_OPVP_HP_LOSE_OVERLOOK_H, LANG_OPVP_HP_LOSE_STADIUM_H};
+#include "WorldPacket.h"
-const uint32 HP_LANG_CAPTURE_A[HP_TOWER_NUM] = {LANG_OPVP_HP_CAPTURE_BROKENHILL_A, LANG_OPVP_HP_CAPTURE_OVERLOOK_A, LANG_OPVP_HP_CAPTURE_STADIUM_A};
+const uint32 HP_LANG_CAPTURE_A[HP_TOWER_NUM] = { TEXT_BROKEN_HILL_TAKEN_ALLIANCE, TEXT_OVERLOOK_TAKEN_ALLIANCE, TEXT_STADIUM_TAKEN_ALLIANCE };
-const uint32 HP_LANG_CAPTURE_H[HP_TOWER_NUM] = {LANG_OPVP_HP_CAPTURE_BROKENHILL_H, LANG_OPVP_HP_CAPTURE_OVERLOOK_H, LANG_OPVP_HP_CAPTURE_STADIUM_H};
+const uint32 HP_LANG_CAPTURE_H[HP_TOWER_NUM] = { TEXT_BROKEN_HILL_TAKEN_HORDE, TEXT_OVERLOOK_TAKEN_HORDE, TEXT_STADIUM_TAKEN_HORDE };
OPvPCapturePointHP::OPvPCapturePointHP(OutdoorPvP* pvp, OutdoorPvPHPTowerType type)
: OPvPCapturePoint(pvp), m_TowerType(type)
@@ -139,9 +133,7 @@ void OutdoorPvPHP::SendRemoveWorldStates(Player* player)
player->SendUpdateWorldState(HP_UI_TOWER_DISPLAY_H, 0);
player->SendUpdateWorldState(HP_UI_TOWER_COUNT_H, 0);
player->SendUpdateWorldState(HP_UI_TOWER_COUNT_A, 0);
- player->SendUpdateWorldState(HP_UI_TOWER_SLIDER_N, 0);
- player->SendUpdateWorldState(HP_UI_TOWER_SLIDER_POS, 0);
- player->SendUpdateWorldState(HP_UI_TOWER_SLIDER_DISPLAY, 0);
+
for (int i = 0; i < HP_TOWER_NUM; ++i)
{
player->SendUpdateWorldState(HP_MAP_N[i], 0);
@@ -156,13 +148,9 @@ void OutdoorPvPHP::FillInitialWorldStates(WorldPacket &data)
data << uint32(HP_UI_TOWER_DISPLAY_H) << uint32(1);
data << uint32(HP_UI_TOWER_COUNT_A) << uint32(m_AllianceTowersControlled);
data << uint32(HP_UI_TOWER_COUNT_H) << uint32(m_HordeTowersControlled);
- data << uint32(HP_UI_TOWER_SLIDER_DISPLAY) << uint32(0);
- data << uint32(HP_UI_TOWER_SLIDER_POS) << uint32(50);
- data << uint32(HP_UI_TOWER_SLIDER_N) << uint32(100);
+
for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
- {
itr->second->FillInitialWorldStates(data);
- }
}
void OPvPCapturePointHP::ChangeState()
@@ -177,13 +165,11 @@ void OPvPCapturePointHP::ChangeState()
field = HP_MAP_A[m_TowerType];
if (uint32 alliance_towers = ((OutdoorPvPHP*)m_PvP)->GetAllianceTowersControlled())
((OutdoorPvPHP*)m_PvP)->SetAllianceTowersControlled(--alliance_towers);
- sWorld->SendZoneText(OutdoorPvPHPBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(HP_LANG_LOSE_A[m_TowerType]));
break;
case OBJECTIVESTATE_HORDE:
field = HP_MAP_H[m_TowerType];
if (uint32 horde_towers = ((OutdoorPvPHP*)m_PvP)->GetHordeTowersControlled())
((OutdoorPvPHP*)m_PvP)->SetHordeTowersControlled(--horde_towers);
- sWorld->SendZoneText(OutdoorPvPHPBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(HP_LANG_LOSE_H[m_TowerType]));
break;
case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
field = HP_MAP_N[m_TowerType];
@@ -220,7 +206,7 @@ void OPvPCapturePointHP::ChangeState()
uint32 alliance_towers = ((OutdoorPvPHP*)m_PvP)->GetAllianceTowersControlled();
if (alliance_towers < 3)
((OutdoorPvPHP*)m_PvP)->SetAllianceTowersControlled(++alliance_towers);
- sWorld->SendZoneText(OutdoorPvPHPBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(HP_LANG_CAPTURE_A[m_TowerType]));
+ m_PvP->SendDefenseMessage(OutdoorPvPHPBuffZones[0], HP_LANG_CAPTURE_A[m_TowerType]);
break;
}
case OBJECTIVESTATE_HORDE:
@@ -231,7 +217,7 @@ void OPvPCapturePointHP::ChangeState()
uint32 horde_towers = ((OutdoorPvPHP*)m_PvP)->GetHordeTowersControlled();
if (horde_towers < 3)
((OutdoorPvPHP*)m_PvP)->SetHordeTowersControlled(++horde_towers);
- sWorld->SendZoneText(OutdoorPvPHPBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(HP_LANG_CAPTURE_H[m_TowerType]));
+ m_PvP->SendDefenseMessage(OutdoorPvPHPBuffZones[0], HP_LANG_CAPTURE_H[m_TowerType]);
break;
}
case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
@@ -272,16 +258,6 @@ void OPvPCapturePointHP::ChangeState()
SendObjectiveComplete(HP_CREDITMARKER[m_TowerType], 0);
}
-void OPvPCapturePointHP::SendChangePhase()
-{
- SendUpdateWorldState(HP_UI_TOWER_SLIDER_N, m_neutralValuePct);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- SendUpdateWorldState(HP_UI_TOWER_SLIDER_POS, phase);
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(HP_UI_TOWER_SLIDER_DISPLAY, 1);
-}
-
void OPvPCapturePointHP::FillInitialWorldStates(WorldPacket &data)
{
switch (m_State)
@@ -309,25 +285,6 @@ void OPvPCapturePointHP::FillInitialWorldStates(WorldPacket &data)
}
}
-bool OPvPCapturePointHP::HandlePlayerEnter(Player* player)
-{
- if (OPvPCapturePoint::HandlePlayerEnter(player))
- {
- player->SendUpdateWorldState(HP_UI_TOWER_SLIDER_DISPLAY, 1);
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- player->SendUpdateWorldState(HP_UI_TOWER_SLIDER_POS, phase);
- player->SendUpdateWorldState(HP_UI_TOWER_SLIDER_N, m_neutralValuePct);
- return true;
- }
- return false;
-}
-
-void OPvPCapturePointHP::HandlePlayerLeave(Player* player)
-{
- player->SendUpdateWorldState(HP_UI_TOWER_SLIDER_DISPLAY, 0);
- OPvPCapturePoint::HandlePlayerLeave(player);
-}
-
void OutdoorPvPHP::HandleKillImpl(Player* player, Unit* killed)
{
if (killed->GetTypeId() != TYPEID_PLAYER)
@@ -362,13 +319,9 @@ void OutdoorPvPHP::SetHordeTowersControlled(uint32 count)
class OutdoorPvP_hellfire_peninsula : public OutdoorPvPScript
{
public:
+ OutdoorPvP_hellfire_peninsula() : OutdoorPvPScript("outdoorpvp_hp") { }
- OutdoorPvP_hellfire_peninsula()
- : OutdoorPvPScript("outdoorpvp_hp")
- {
- }
-
- OutdoorPvP* GetOutdoorPvP() const OVERRIDE
+ OutdoorPvP* GetOutdoorPvP() const override
{
return new OutdoorPvPHP();
}
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h
index fa78da4732d..5b81960b24f 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h
@@ -20,6 +20,16 @@
#include "OutdoorPvP.h"
+enum DefenseMessages
+{
+ TEXT_OVERLOOK_TAKEN_ALLIANCE = 14841, // '|cffffff00The Overlook has been taken by the Alliance!|r'
+ TEXT_OVERLOOK_TAKEN_HORDE = 14842, // '|cffffff00The Overlook has been taken by the Horde!|r'
+ TEXT_STADIUM_TAKEN_ALLIANCE = 14843, // '|cffffff00The Stadium has been taken by the Alliance!|r'
+ TEXT_STADIUM_TAKEN_HORDE = 14844, // '|cffffff00The Stadium has been taken by the Horde!|r'
+ TEXT_BROKEN_HILL_TAKEN_ALLIANCE = 14845, // '|cffffff00Broken Hill has been taken by the Alliance!|r'
+ TEXT_BROKEN_HILL_TAKEN_HORDE = 14846, // '|cffffff00Broken Hill has been taken by the Horde!|r'
+};
+
#define OutdoorPvPHPBuffZonesNum 6
// HP, citadel, ramparts, blood furnace, shattered halls, mag's lair
const uint32 OutdoorPvPHPBuffZones[OutdoorPvPHPBuffZonesNum] = { 3483, 3563, 3562, 3713, 3714, 3836 };
@@ -52,11 +62,7 @@ enum OutdoorPvPHPWorldStates
HP_UI_TOWER_DISPLAY_H = 0x9b9,
HP_UI_TOWER_COUNT_H = 0x9ae,
- HP_UI_TOWER_COUNT_A = 0x9ac,
-
- HP_UI_TOWER_SLIDER_N = 2475,
- HP_UI_TOWER_SLIDER_POS = 2474,
- HP_UI_TOWER_SLIDER_DISPLAY = 2473
+ HP_UI_TOWER_COUNT_A = 0x9ac
};
const uint32 HP_MAP_N[HP_TOWER_NUM] = {0x9b5, 0x9b2, 0x9a8};
@@ -88,28 +94,19 @@ const go_type HPTowerFlags[HP_TOWER_NUM] =
class OPvPCapturePointHP : public OPvPCapturePoint
{
public:
-
OPvPCapturePointHP(OutdoorPvP* pvp, OutdoorPvPHPTowerType type);
void ChangeState();
- void SendChangePhase();
-
void FillInitialWorldStates(WorldPacket & data);
- // used when player is activated/inactivated in the area
- bool HandlePlayerEnter(Player* player);
- void HandlePlayerLeave(Player* player);
-
private:
-
OutdoorPvPHPTowerType m_TowerType;
};
class OutdoorPvPHP : public OutdoorPvP
{
public:
-
OutdoorPvPHP();
bool SetupOutdoorPvP();
@@ -132,7 +129,6 @@ class OutdoorPvPHP : public OutdoorPvP
void SetHordeTowersControlled(uint32 count);
private:
-
// how many towers are controlled
uint32 m_AllianceTowersControlled;
uint32 m_HordeTowersControlled;
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp
index 41cd17e1afd..1b4828dec51 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp
@@ -21,8 +21,6 @@
#include "ObjectMgr.h"
#include "OutdoorPvPMgr.h"
#include "WorldPacket.h"
-#include "Language.h"
-#include "World.h"
OutdoorPvPNA::OutdoorPvPNA()
{
@@ -82,15 +80,15 @@ uint32 OPvPCapturePointNA::GetControllingFaction() const
void OPvPCapturePointNA::SpawnNPCsForTeam(uint32 team)
{
- const creature_type * creatures = NULL;
+ creature_type const* creatures = nullptr;
if (team == ALLIANCE)
- creatures=AllianceControlNPCs;
+ creatures = AllianceControlNPCs;
else if (team == HORDE)
- creatures=HordeControlNPCs;
+ creatures = HordeControlNPCs;
else
return;
for (int i = 0; i < NA_CONTROL_NPC_NUM; ++i)
- AddCreature(i, creatures[i].entry, creatures[i].teamval, creatures[i].map, creatures[i].x, creatures[i].y, creatures[i].z, creatures[i].o, 1000000);
+ AddCreature(i, creatures[i].entry, creatures[i].map, creatures[i].x, creatures[i].y, creatures[i].z, creatures[i].o, OutdoorPvP::GetTeamIdByTeam(team), 1000000);
}
void OPvPCapturePointNA::DeSpawnNPCs()
@@ -135,10 +133,6 @@ void OPvPCapturePointNA::FactionTakeOver(uint32 team)
{
if (m_ControllingFaction)
sObjectMgr->RemoveGraveYardLink(NA_HALAA_GRAVEYARD, NA_HALAA_GRAVEYARD_ZONE, m_ControllingFaction, false);
- if (m_ControllingFaction == ALLIANCE)
- sWorld->SendZoneText(NA_HALAA_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_NA_LOSE_A));
- else if (m_ControllingFaction == HORDE)
- sWorld->SendZoneText(NA_HALAA_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_NA_LOSE_H));
m_ControllingFaction = team;
if (m_ControllingFaction)
@@ -160,7 +154,7 @@ void OPvPCapturePointNA::FactionTakeOver(uint32 team)
m_PvP->SendUpdateWorldState(NA_UI_HORDE_GUARDS_SHOW, 0);
m_PvP->SendUpdateWorldState(NA_UI_ALLIANCE_GUARDS_SHOW, 1);
m_PvP->SendUpdateWorldState(NA_UI_GUARDS_LEFT, m_GuardsAlive);
- sWorld->SendZoneText(NA_HALAA_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_NA_CAPTURE_A));
+ m_PvP->SendDefenseMessage(NA_HALAA_GRAVEYARD_ZONE, TEXT_HALAA_TAKEN_ALLIANCE);
}
else
{
@@ -172,7 +166,7 @@ void OPvPCapturePointNA::FactionTakeOver(uint32 team)
m_PvP->SendUpdateWorldState(NA_UI_HORDE_GUARDS_SHOW, 1);
m_PvP->SendUpdateWorldState(NA_UI_ALLIANCE_GUARDS_SHOW, 0);
m_PvP->SendUpdateWorldState(NA_UI_GUARDS_LEFT, m_GuardsAlive);
- sWorld->SendZoneText(NA_HALAA_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_NA_CAPTURE_H));
+ m_PvP->SendDefenseMessage(NA_HALAA_GRAVEYARD_ZONE, TEXT_HALAA_TAKEN_HORDE);
}
UpdateWyvernRoostWorldState(NA_ROOST_S);
UpdateWyvernRoostWorldState(NA_ROOST_N);
@@ -180,25 +174,6 @@ void OPvPCapturePointNA::FactionTakeOver(uint32 team)
UpdateWyvernRoostWorldState(NA_ROOST_E);
}
-bool OPvPCapturePointNA::HandlePlayerEnter(Player* player)
-{
- if (OPvPCapturePoint::HandlePlayerEnter(player))
- {
- player->SendUpdateWorldState(NA_UI_TOWER_SLIDER_DISPLAY, 1);
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- player->SendUpdateWorldState(NA_UI_TOWER_SLIDER_POS, phase);
- player->SendUpdateWorldState(NA_UI_TOWER_SLIDER_N, m_neutralValuePct);
- return true;
- }
- return false;
-}
-
-void OPvPCapturePointNA::HandlePlayerLeave(Player* player)
-{
- player->SendUpdateWorldState(NA_UI_TOWER_SLIDER_DISPLAY, 0);
- OPvPCapturePoint::HandlePlayerLeave(player);
-}
-
OPvPCapturePointNA::OPvPCapturePointNA(OutdoorPvP* pvp) :
OPvPCapturePoint(pvp), m_capturable(true), m_GuardsAlive(0), m_ControllingFaction(0),
m_WyvernStateNorth(0), m_WyvernStateSouth(0), m_WyvernStateEast(0), m_WyvernStateWest(0),
@@ -261,35 +236,31 @@ void OPvPCapturePointNA::FillInitialWorldStates(WorldPacket &data)
data << NA_UI_GUARDS_MAX << NA_GUARDS_MAX;
data << NA_UI_GUARDS_LEFT << uint32(m_GuardsAlive);
- data << NA_UI_TOWER_SLIDER_DISPLAY << uint32(0);
- data << NA_UI_TOWER_SLIDER_POS << uint32(50);
- data << NA_UI_TOWER_SLIDER_N << uint32(100);
-
- data << NA_MAP_WYVERN_NORTH_NEU_H << uint32(bool(m_WyvernStateNorth & WYVERN_NEU_HORDE));
- data << NA_MAP_WYVERN_NORTH_NEU_A << uint32(bool(m_WyvernStateNorth & WYVERN_NEU_ALLIANCE));
- data << NA_MAP_WYVERN_NORTH_H << uint32(bool(m_WyvernStateNorth & WYVERN_HORDE));
- data << NA_MAP_WYVERN_NORTH_A << uint32(bool(m_WyvernStateNorth & WYVERN_ALLIANCE));
-
- data << NA_MAP_WYVERN_SOUTH_NEU_H << uint32(bool(m_WyvernStateSouth & WYVERN_NEU_HORDE));
- data << NA_MAP_WYVERN_SOUTH_NEU_A << uint32(bool(m_WyvernStateSouth & WYVERN_NEU_ALLIANCE));
- data << NA_MAP_WYVERN_SOUTH_H << uint32(bool(m_WyvernStateSouth & WYVERN_HORDE));
- data << NA_MAP_WYVERN_SOUTH_A << uint32(bool(m_WyvernStateSouth & WYVERN_ALLIANCE));
-
- data << NA_MAP_WYVERN_WEST_NEU_H << uint32(bool(m_WyvernStateWest & WYVERN_NEU_HORDE));
- data << NA_MAP_WYVERN_WEST_NEU_A << uint32(bool(m_WyvernStateWest & WYVERN_NEU_ALLIANCE));
- data << NA_MAP_WYVERN_WEST_H << uint32(bool(m_WyvernStateWest & WYVERN_HORDE));
- data << NA_MAP_WYVERN_WEST_A << uint32(bool(m_WyvernStateWest & WYVERN_ALLIANCE));
-
- data << NA_MAP_WYVERN_EAST_NEU_H << uint32(bool(m_WyvernStateEast & WYVERN_NEU_HORDE));
- data << NA_MAP_WYVERN_EAST_NEU_A << uint32(bool(m_WyvernStateEast & WYVERN_NEU_ALLIANCE));
- data << NA_MAP_WYVERN_EAST_H << uint32(bool(m_WyvernStateEast & WYVERN_HORDE));
- data << NA_MAP_WYVERN_EAST_A << uint32(bool(m_WyvernStateEast & WYVERN_ALLIANCE));
-
- data << NA_MAP_HALAA_NEUTRAL << uint32(bool(m_HalaaState & HALAA_N));
- data << NA_MAP_HALAA_NEU_A << uint32(bool(m_HalaaState & HALAA_N_A));
- data << NA_MAP_HALAA_NEU_H << uint32(bool(m_HalaaState & HALAA_N_H));
- data << NA_MAP_HALAA_HORDE << uint32(bool(m_HalaaState & HALAA_H));
- data << NA_MAP_HALAA_ALLIANCE << uint32(bool(m_HalaaState & HALAA_A));
+ data << NA_MAP_WYVERN_NORTH_NEU_H << uint32((m_WyvernStateNorth & WYVERN_NEU_HORDE) != 0);
+ data << NA_MAP_WYVERN_NORTH_NEU_A << uint32((m_WyvernStateNorth & WYVERN_NEU_ALLIANCE) != 0);
+ data << NA_MAP_WYVERN_NORTH_H << uint32((m_WyvernStateNorth & WYVERN_HORDE) != 0);
+ data << NA_MAP_WYVERN_NORTH_A << uint32((m_WyvernStateNorth & WYVERN_ALLIANCE) != 0);
+
+ data << NA_MAP_WYVERN_SOUTH_NEU_H << uint32((m_WyvernStateSouth & WYVERN_NEU_HORDE) != 0);
+ data << NA_MAP_WYVERN_SOUTH_NEU_A << uint32((m_WyvernStateSouth & WYVERN_NEU_ALLIANCE) != 0);
+ data << NA_MAP_WYVERN_SOUTH_H << uint32((m_WyvernStateSouth & WYVERN_HORDE) != 0);
+ data << NA_MAP_WYVERN_SOUTH_A << uint32((m_WyvernStateSouth & WYVERN_ALLIANCE) != 0);
+
+ data << NA_MAP_WYVERN_WEST_NEU_H << uint32((m_WyvernStateWest & WYVERN_NEU_HORDE) != 0);
+ data << NA_MAP_WYVERN_WEST_NEU_A << uint32((m_WyvernStateWest & WYVERN_NEU_ALLIANCE) != 0);
+ data << NA_MAP_WYVERN_WEST_H << uint32((m_WyvernStateWest & WYVERN_HORDE) != 0);
+ data << NA_MAP_WYVERN_WEST_A << uint32((m_WyvernStateWest & WYVERN_ALLIANCE) != 0);
+
+ data << NA_MAP_WYVERN_EAST_NEU_H << uint32((m_WyvernStateEast & WYVERN_NEU_HORDE) != 0);
+ data << NA_MAP_WYVERN_EAST_NEU_A << uint32((m_WyvernStateEast & WYVERN_NEU_ALLIANCE) != 0);
+ data << NA_MAP_WYVERN_EAST_H << uint32((m_WyvernStateEast & WYVERN_HORDE) != 0);
+ data << NA_MAP_WYVERN_EAST_A << uint32((m_WyvernStateEast & WYVERN_ALLIANCE) != 0);
+
+ data << NA_MAP_HALAA_NEUTRAL << uint32((m_HalaaState & HALAA_N) != 0);
+ data << NA_MAP_HALAA_NEU_A << uint32((m_HalaaState & HALAA_N_A) != 0);
+ data << NA_MAP_HALAA_NEU_H << uint32((m_HalaaState & HALAA_N_H) != 0);
+ data << NA_MAP_HALAA_HORDE << uint32((m_HalaaState & HALAA_H) != 0);
+ data << NA_MAP_HALAA_ALLIANCE << uint32((m_HalaaState & HALAA_A) != 0);
}
void OutdoorPvPNA::SendRemoveWorldStates(Player* player)
@@ -298,9 +269,6 @@ void OutdoorPvPNA::SendRemoveWorldStates(Player* player)
player->SendUpdateWorldState(NA_UI_ALLIANCE_GUARDS_SHOW, 0);
player->SendUpdateWorldState(NA_UI_GUARDS_MAX, 0);
player->SendUpdateWorldState(NA_UI_GUARDS_LEFT, 0);
- player->SendUpdateWorldState(NA_UI_TOWER_SLIDER_DISPLAY, 0);
- player->SendUpdateWorldState(NA_UI_TOWER_SLIDER_POS, 0);
- player->SendUpdateWorldState(NA_UI_TOWER_SLIDER_N, 0);
player->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_NEU_H, 0);
player->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_NEU_A, 0);
player->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_H, 0);
@@ -608,66 +576,52 @@ void OPvPCapturePointNA::ChangeState()
UpdateHalaaWorldState();
}
-void OPvPCapturePointNA::SendChangePhase()
-{
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(NA_UI_TOWER_SLIDER_DISPLAY, 1);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- SendUpdateWorldState(NA_UI_TOWER_SLIDER_POS, phase);
- SendUpdateWorldState(NA_UI_TOWER_SLIDER_N, m_neutralValuePct);
-}
-
void OPvPCapturePointNA::UpdateHalaaWorldState()
{
- m_PvP->SendUpdateWorldState(NA_MAP_HALAA_NEUTRAL, uint32(bool(m_HalaaState & HALAA_N)));
- m_PvP->SendUpdateWorldState(NA_MAP_HALAA_NEU_A, uint32(bool(m_HalaaState & HALAA_N_A)));
- m_PvP->SendUpdateWorldState(NA_MAP_HALAA_NEU_H, uint32(bool(m_HalaaState & HALAA_N_H)));
- m_PvP->SendUpdateWorldState(NA_MAP_HALAA_HORDE, uint32(bool(m_HalaaState & HALAA_H)));
- m_PvP->SendUpdateWorldState(NA_MAP_HALAA_ALLIANCE, uint32(bool(m_HalaaState & HALAA_A)));
+ m_PvP->SendUpdateWorldState(NA_MAP_HALAA_NEUTRAL, uint32((m_HalaaState & HALAA_N) != 0));
+ m_PvP->SendUpdateWorldState(NA_MAP_HALAA_NEU_A, uint32((m_HalaaState & HALAA_N_A) != 0));
+ m_PvP->SendUpdateWorldState(NA_MAP_HALAA_NEU_H, uint32((m_HalaaState & HALAA_N_H) != 0));
+ m_PvP->SendUpdateWorldState(NA_MAP_HALAA_HORDE, uint32((m_HalaaState & HALAA_H) != 0));
+ m_PvP->SendUpdateWorldState(NA_MAP_HALAA_ALLIANCE, uint32((m_HalaaState & HALAA_A) != 0));
}
void OPvPCapturePointNA::UpdateWyvernRoostWorldState(uint32 roost)
{
switch (roost)
{
- case NA_ROOST_S:
- m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_SOUTH_NEU_H, uint32(bool(m_WyvernStateSouth & WYVERN_NEU_HORDE)));
- m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_SOUTH_NEU_A, uint32(bool(m_WyvernStateSouth & WYVERN_NEU_ALLIANCE)));
- m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_SOUTH_H, uint32(bool(m_WyvernStateSouth & WYVERN_HORDE)));
- m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_SOUTH_A, uint32(bool(m_WyvernStateSouth & WYVERN_ALLIANCE)));
- break;
- case NA_ROOST_N:
- m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_NEU_H, uint32(bool(m_WyvernStateNorth & WYVERN_NEU_HORDE)));
- m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_NEU_A, uint32(bool(m_WyvernStateNorth & WYVERN_NEU_ALLIANCE)));
- m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_H, uint32(bool(m_WyvernStateNorth & WYVERN_HORDE)));
- m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_A, uint32(bool(m_WyvernStateNorth & WYVERN_ALLIANCE)));
- break;
- case NA_ROOST_W:
- m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_WEST_NEU_H, uint32(bool(m_WyvernStateWest & WYVERN_NEU_HORDE)));
- m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_WEST_NEU_A, uint32(bool(m_WyvernStateWest & WYVERN_NEU_ALLIANCE)));
- m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_WEST_H, uint32(bool(m_WyvernStateWest & WYVERN_HORDE)));
- m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_WEST_A, uint32(bool(m_WyvernStateWest & WYVERN_ALLIANCE)));
- break;
- case NA_ROOST_E:
- m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_EAST_NEU_H, uint32(bool(m_WyvernStateEast & WYVERN_NEU_HORDE)));
- m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_EAST_NEU_A, uint32(bool(m_WyvernStateEast & WYVERN_NEU_ALLIANCE)));
- m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_EAST_H, uint32(bool(m_WyvernStateEast & WYVERN_HORDE)));
- m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_EAST_A, uint32(bool(m_WyvernStateEast & WYVERN_ALLIANCE)));
- break;
+ case NA_ROOST_S:
+ m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_SOUTH_NEU_H, uint32((m_WyvernStateSouth & WYVERN_NEU_HORDE) != 0));
+ m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_SOUTH_NEU_A, uint32((m_WyvernStateSouth & WYVERN_NEU_ALLIANCE) != 0));
+ m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_SOUTH_H, uint32((m_WyvernStateSouth & WYVERN_HORDE) != 0));
+ m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_SOUTH_A, uint32((m_WyvernStateSouth & WYVERN_ALLIANCE) != 0));
+ break;
+ case NA_ROOST_N:
+ m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_NEU_H, uint32((m_WyvernStateNorth & WYVERN_NEU_HORDE) != 0));
+ m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_NEU_A, uint32((m_WyvernStateNorth & WYVERN_NEU_ALLIANCE) != 0));
+ m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_H, uint32((m_WyvernStateNorth & WYVERN_HORDE) != 0));
+ m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_A, uint32((m_WyvernStateNorth & WYVERN_ALLIANCE) != 0));
+ break;
+ case NA_ROOST_W:
+ m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_WEST_NEU_H, uint32((m_WyvernStateWest & WYVERN_NEU_HORDE) != 0));
+ m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_WEST_NEU_A, uint32((m_WyvernStateWest & WYVERN_NEU_ALLIANCE) != 0));
+ m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_WEST_H, uint32((m_WyvernStateWest & WYVERN_HORDE) != 0));
+ m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_WEST_A, uint32((m_WyvernStateWest & WYVERN_ALLIANCE) != 0));
+ break;
+ case NA_ROOST_E:
+ m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_EAST_NEU_H, uint32((m_WyvernStateEast & WYVERN_NEU_HORDE) != 0));
+ m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_EAST_NEU_A, uint32((m_WyvernStateEast & WYVERN_NEU_ALLIANCE) != 0));
+ m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_EAST_H, uint32((m_WyvernStateEast & WYVERN_HORDE) != 0));
+ m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_EAST_A, uint32((m_WyvernStateEast & WYVERN_ALLIANCE) != 0));
+ break;
}
}
class OutdoorPvP_nagrand : public OutdoorPvPScript
{
public:
+ OutdoorPvP_nagrand() : OutdoorPvPScript("outdoorpvp_na") { }
- OutdoorPvP_nagrand()
- : OutdoorPvPScript("outdoorpvp_na")
- {
- }
-
- OutdoorPvP* GetOutdoorPvP() const OVERRIDE
+ OutdoorPvP* GetOutdoorPvP() const override
{
return new OutdoorPvPNA();
}
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h
index cc32397741c..aa52c8135e7 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h
@@ -20,6 +20,16 @@
#include "OutdoorPvP.h"
+enum DefenseMessages
+{
+ TEXT_ALL_GUARDS_DEFEATED = 15017, // (NYI) '|cffffff00All the guards have been defeated!|r'
+ TEXT_HALAA_TAKEN_ALLIANCE = 15018, // '|cffffff00The Alliance has taken control of Halaa!|r'
+ TEXT_HALAA_TAKEN_HORDE = 15019, // '|cffffff00The Horde has taken control of Halaa!|r'
+ TEXT_HALAA_DEFENSELESS = 15020, // (NYI) '|cffffff00Halaa is defenseless!|r'
+ TEXT_HALAA_GAINING_CONTROL_HORDE = 15493, // (NYI) '|cffffff00The Horde is gaining control of Halaa!|r'
+ TEXT_HALAA_GAINING_CONTROL_ALLIANCE = 15494 // (NYI) '|cffffff00The Alliance is gaining control of Halaa!|r'
+};
+
/// @todo "sometimes" set to neutral
enum OutdoorPvPNASpells
@@ -51,10 +61,6 @@ enum OutdoorPvPNAWorldStates
NA_UI_GUARDS_MAX = 2493,
NA_UI_GUARDS_LEFT = 2491,
- NA_UI_TOWER_SLIDER_DISPLAY = 2495,
- NA_UI_TOWER_SLIDER_POS = 2494,
- NA_UI_TOWER_SLIDER_N = 2497,
-
NA_MAP_WYVERN_NORTH_NEU_H = 2762,
NA_MAP_WYVERN_NORTH_NEU_A = 2662,
NA_MAP_WYVERN_NORTH_H = 2663,
@@ -183,50 +189,50 @@ enum ControlNPCTypes
const creature_type HordeControlNPCs[NA_CONTROL_NPC_NUM] =
{
- {18816, 67, 530, -1523.92f, 7951.76f, -17.6942f, 3.51172f},
- {18821, 67, 530, -1527.75f, 7952.46f, -17.6948f, 3.99317f},
- {21474, 67, 530, -1520.14f, 7927.11f, -20.2527f, 3.39389f},
- {21484, 67, 530, -1524.84f, 7930.34f, -20.182f, 3.6405f},
- {21483, 67, 530, -1570.01f, 7993.8f, -22.4505f, 5.02655f},
- {18192, 67, 530, -1654.06f, 8000.46f, -26.59f, 3.37f},
- {18192, 67, 530, -1487.18f, 7899.1f, -19.53f, 0.954f},
- {18192, 67, 530, -1480.88f, 7908.79f, -19.19f, 4.485f},
- {18192, 67, 530, -1540.56f, 7995.44f, -20.45f, 0.947f},
- {18192, 67, 530, -1546.95f, 8000.85f, -20.72f, 6.035f},
- {18192, 67, 530, -1595.31f, 7860.53f, -21.51f, 3.747f},
- {18192, 67, 530, -1642.31f, 7995.59f, -25.8f, 3.317f},
- {18192, 67, 530, -1545.46f, 7995.35f, -20.63f, 1.094f},
- {18192, 67, 530, -1487.58f, 7907.99f, -19.27f, 5.567f},
- {18192, 67, 530, -1651.54f, 7988.56f, -26.5289f, 2.98451f},
- {18192, 67, 530, -1602.46f, 7866.43f, -22.1177f, 4.74729f},
- {18192, 67, 530, -1591.22f, 7875.29f, -22.3536f, 4.34587f},
- {18192, 67, 530, -1550.6f, 7944.45f, -21.63f, 3.559f},
- {18192, 67, 530, -1545.57f, 7935.83f, -21.13f, 3.448f},
- {18192, 67, 530, -1550.86f, 7937.56f, -21.7f, 3.801f}
+ {18816, 530, -1523.92f, 7951.76f, -17.6942f, 3.51172f},
+ {18821, 530, -1527.75f, 7952.46f, -17.6948f, 3.99317f},
+ {21474, 530, -1520.14f, 7927.11f, -20.2527f, 3.39389f},
+ {21484, 530, -1524.84f, 7930.34f, -20.182f, 3.6405f},
+ {21483, 530, -1570.01f, 7993.8f, -22.4505f, 5.02655f},
+ {18192, 530, -1654.06f, 8000.46f, -26.59f, 3.37f},
+ {18192, 530, -1487.18f, 7899.1f, -19.53f, 0.954f},
+ {18192, 530, -1480.88f, 7908.79f, -19.19f, 4.485f},
+ {18192, 530, -1540.56f, 7995.44f, -20.45f, 0.947f},
+ {18192, 530, -1546.95f, 8000.85f, -20.72f, 6.035f},
+ {18192, 530, -1595.31f, 7860.53f, -21.51f, 3.747f},
+ {18192, 530, -1642.31f, 7995.59f, -25.8f, 3.317f},
+ {18192, 530, -1545.46f, 7995.35f, -20.63f, 1.094f},
+ {18192, 530, -1487.58f, 7907.99f, -19.27f, 5.567f},
+ {18192, 530, -1651.54f, 7988.56f, -26.5289f, 2.98451f},
+ {18192, 530, -1602.46f, 7866.43f, -22.1177f, 4.74729f},
+ {18192, 530, -1591.22f, 7875.29f, -22.3536f, 4.34587f},
+ {18192, 530, -1550.6f, 7944.45f, -21.63f, 3.559f},
+ {18192, 530, -1545.57f, 7935.83f, -21.13f, 3.448f},
+ {18192, 530, -1550.86f, 7937.56f, -21.7f, 3.801f}
};
const creature_type AllianceControlNPCs[NA_CONTROL_NPC_NUM] =
{
- {18817, 469, 530, -1591.18f, 8020.39f, -22.2042f, 4.59022f},
- {18822, 469, 530, -1588.0f, 8019.0f, -22.2042f, 4.06662f},
- {21485, 469, 530, -1521.93f, 7927.37f, -20.2299f, 3.24631f},
- {21487, 469, 530, -1540.33f, 7971.95f, -20.7186f, 3.07178f},
- {21488, 469, 530, -1570.01f, 7993.8f, -22.4505f, 5.02655f},
- {18256, 469, 530, -1654.06f, 8000.46f, -26.59f, 3.37f},
- {18256, 469, 530, -1487.18f, 7899.1f, -19.53f, 0.954f},
- {18256, 469, 530, -1480.88f, 7908.79f, -19.19f, 4.485f},
- {18256, 469, 530, -1540.56f, 7995.44f, -20.45f, 0.947f},
- {18256, 469, 530, -1546.95f, 8000.85f, -20.72f, 6.035f},
- {18256, 469, 530, -1595.31f, 7860.53f, -21.51f, 3.747f},
- {18256, 469, 530, -1642.31f, 7995.59f, -25.8f, 3.317f},
- {18256, 469, 530, -1545.46f, 7995.35f, -20.63f, 1.094f},
- {18256, 469, 530, -1487.58f, 7907.99f, -19.27f, 5.567f},
- {18256, 469, 530, -1651.54f, 7988.56f, -26.5289f, 2.98451f},
- {18256, 469, 530, -1602.46f, 7866.43f, -22.1177f, 4.74729f},
- {18256, 469, 530, -1591.22f, 7875.29f, -22.3536f, 4.34587f},
- {18256, 469, 530, -1603.75f, 8000.36f, -24.18f, 4.516f},
- {18256, 469, 530, -1585.73f, 7994.68f, -23.29f, 4.439f},
- {18256, 469, 530, -1595.5f, 7991.27f, -23.53f, 4.738f}
+ {18817, 530, -1591.18f, 8020.39f, -22.2042f, 4.59022f},
+ {18822, 530, -1588.0f, 8019.0f, -22.2042f, 4.06662f},
+ {21485, 530, -1521.93f, 7927.37f, -20.2299f, 3.24631f},
+ {21487, 530, -1540.33f, 7971.95f, -20.7186f, 3.07178f},
+ {21488, 530, -1570.01f, 7993.8f, -22.4505f, 5.02655f},
+ {18256, 530, -1654.06f, 8000.46f, -26.59f, 3.37f},
+ {18256, 530, -1487.18f, 7899.1f, -19.53f, 0.954f},
+ {18256, 530, -1480.88f, 7908.79f, -19.19f, 4.485f},
+ {18256, 530, -1540.56f, 7995.44f, -20.45f, 0.947f},
+ {18256, 530, -1546.95f, 8000.85f, -20.72f, 6.035f},
+ {18256, 530, -1595.31f, 7860.53f, -21.51f, 3.747f},
+ {18256, 530, -1642.31f, 7995.59f, -25.8f, 3.317f},
+ {18256, 530, -1545.46f, 7995.35f, -20.63f, 1.094f},
+ {18256, 530, -1487.58f, 7907.99f, -19.27f, 5.567f},
+ {18256, 530, -1651.54f, 7988.56f, -26.5289f, 2.98451f},
+ {18256, 530, -1602.46f, 7866.43f, -22.1177f, 4.74729f},
+ {18256, 530, -1591.22f, 7875.29f, -22.3536f, 4.34587f},
+ {18256, 530, -1603.75f, 8000.36f, -24.18f, 4.516f},
+ {18256, 530, -1585.73f, 7994.68f, -23.29f, 4.439f},
+ {18256, 530, -1595.5f, 7991.27f, -23.53f, 4.738f}
};
enum WyvernStates
@@ -253,21 +259,14 @@ class OutdoorPvPNA;
class OPvPCapturePointNA : public OPvPCapturePoint
{
public:
-
OPvPCapturePointNA(OutdoorPvP* pvp);
bool Update(uint32 diff);
void ChangeState();
- void SendChangePhase();
-
void FillInitialWorldStates(WorldPacket & data);
- // used when player is activated/inactivated in the area
- bool HandlePlayerEnter(Player* player);
- void HandlePlayerLeave(Player* player);
-
bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go);
int32 HandleOpenGo(Player* player, uint64 guid);
@@ -276,7 +275,6 @@ class OPvPCapturePointNA : public OPvPCapturePoint
uint32 GetControllingFaction() const;
protected:
-
// called when a faction takes control
void FactionTakeOver(uint32 team);
@@ -290,7 +288,6 @@ class OPvPCapturePointNA : public OPvPCapturePoint
void UpdateHalaaWorldState();
private:
-
bool m_capturable;
uint32 m_GuardsAlive;
@@ -312,7 +309,6 @@ class OPvPCapturePointNA : public OPvPCapturePoint
class OutdoorPvPNA : public OutdoorPvP
{
public:
-
OutdoorPvPNA();
bool SetupOutdoorPvP();
@@ -329,7 +325,6 @@ class OutdoorPvPNA : public OutdoorPvP
void HandleKillImpl(Player* player, Unit* killed);
private:
-
OPvPCapturePointNA * m_obj;
};
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
index 30ca2e8cb3f..539f54ab421 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
@@ -95,6 +95,7 @@ bool OutdoorPvPSI::HandleAreaTrigger(Player* player, uint32 trigger)
if (m_Gathered_A >= SI_MAX_RESOURCES)
{
TeamApplyBuff(TEAM_ALLIANCE, SI_CENARION_FAVOR);
+ /// @todo: confirm this text
sWorld->SendZoneText(OutdoorPvPSIBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_SI_CAPTURE_A));
m_LastController = ALLIANCE;
m_Gathered_A = 0;
@@ -120,6 +121,7 @@ bool OutdoorPvPSI::HandleAreaTrigger(Player* player, uint32 trigger)
if (m_Gathered_H >= SI_MAX_RESOURCES)
{
TeamApplyBuff(TEAM_HORDE, SI_CENARION_FAVOR);
+ /// @todo: confirm this text
sWorld->SendZoneText(OutdoorPvPSIBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_SI_CAPTURE_H));
m_LastController = HORDE;
m_Gathered_A = 0;
@@ -238,13 +240,9 @@ bool OutdoorPvPSI::HandleCustomSpell(Player* player, uint32 spellId, GameObject*
class OutdoorPvP_silithus : public OutdoorPvPScript
{
public:
+ OutdoorPvP_silithus() : OutdoorPvPScript("outdoorpvp_si") { }
- OutdoorPvP_silithus()
- : OutdoorPvPScript("outdoorpvp_si")
- {
- }
-
- OutdoorPvP* GetOutdoorPvP() const OVERRIDE
+ OutdoorPvP* GetOutdoorPvP() const override
{
return new OutdoorPvPSI();
}
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h
index 050bd6e8889..fdab0a292bd 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h
@@ -54,7 +54,6 @@ enum SI_WorldStates
class OutdoorPvPSI : public OutdoorPvP
{
public:
-
OutdoorPvPSI();
bool SetupOutdoorPvP();
@@ -77,7 +76,6 @@ class OutdoorPvPSI : public OutdoorPvP
void UpdateWorldState();
private:
-
uint32 m_Gathered_A;
uint32 m_Gathered_H;
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp
index 2877c5c0dcc..e089dfdb7d5 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp
@@ -22,8 +22,6 @@
#include "WorldPacket.h"
#include "Player.h"
#include "ObjectMgr.h"
-#include "Language.h"
-#include "World.h"
OutdoorPvPTF::OutdoorPvPTF()
{
@@ -49,17 +47,13 @@ OPvPCapturePointTF::OPvPCapturePointTF(OutdoorPvP* pvp, OutdoorPvPTF_TowerType t
void OPvPCapturePointTF::FillInitialWorldStates(WorldPacket &data)
{
- data << uint32(TFTowerWorldStates[m_TowerType].n) << uint32(bool(m_TowerState & TF_TOWERSTATE_N));
- data << uint32(TFTowerWorldStates[m_TowerType].h) << uint32(bool(m_TowerState & TF_TOWERSTATE_H));
- data << uint32(TFTowerWorldStates[m_TowerType].a) << uint32(bool(m_TowerState & TF_TOWERSTATE_A));
+ data << uint32(TFTowerWorldStates[m_TowerType].n) << uint32((m_TowerState & TF_TOWERSTATE_N) != 0);
+ data << uint32(TFTowerWorldStates[m_TowerType].h) << uint32((m_TowerState & TF_TOWERSTATE_H) != 0);
+ data << uint32(TFTowerWorldStates[m_TowerType].a) << uint32((m_TowerState & TF_TOWERSTATE_A) != 0);
}
void OutdoorPvPTF::FillInitialWorldStates(WorldPacket &data)
{
- data << TF_UI_TOWER_SLIDER_POS << uint32(50);
- data << TF_UI_TOWER_SLIDER_N << uint32(100);
- data << TF_UI_TOWER_SLIDER_DISPLAY << uint32(0);
-
data << TF_UI_TOWER_COUNT_H << m_HordeTowersControlled;
data << TF_UI_TOWER_COUNT_A << m_AllianceTowersControlled;
data << TF_UI_TOWERS_CONTROLLED_DISPLAY << uint32(!m_IsLocked);
@@ -80,10 +74,6 @@ void OutdoorPvPTF::FillInitialWorldStates(WorldPacket &data)
void OutdoorPvPTF::SendRemoveWorldStates(Player* player)
{
- player->SendUpdateWorldState(TF_UI_TOWER_SLIDER_POS, uint32(0));
- player->SendUpdateWorldState(TF_UI_TOWER_SLIDER_N, uint32(0));
- player->SendUpdateWorldState(TF_UI_TOWER_SLIDER_DISPLAY, uint32(0));
-
player->SendUpdateWorldState(TF_UI_TOWER_COUNT_H, uint32(0));
player->SendUpdateWorldState(TF_UI_TOWER_COUNT_A, uint32(0));
player->SendUpdateWorldState(TF_UI_TOWERS_CONTROLLED_DISPLAY, uint32(0));
@@ -106,28 +96,9 @@ void OutdoorPvPTF::SendRemoveWorldStates(Player* player)
void OPvPCapturePointTF::UpdateTowerState()
{
- m_PvP->SendUpdateWorldState(uint32(TFTowerWorldStates[m_TowerType].n), uint32(bool(m_TowerState & TF_TOWERSTATE_N)));
- m_PvP->SendUpdateWorldState(uint32(TFTowerWorldStates[m_TowerType].h), uint32(bool(m_TowerState & TF_TOWERSTATE_H)));
- m_PvP->SendUpdateWorldState(uint32(TFTowerWorldStates[m_TowerType].a), uint32(bool(m_TowerState & TF_TOWERSTATE_A)));
-}
-
-bool OPvPCapturePointTF::HandlePlayerEnter(Player* player)
-{
- if (OPvPCapturePoint::HandlePlayerEnter(player))
- {
- player->SendUpdateWorldState(TF_UI_TOWER_SLIDER_DISPLAY, 1);
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- player->SendUpdateWorldState(TF_UI_TOWER_SLIDER_POS, phase);
- player->SendUpdateWorldState(TF_UI_TOWER_SLIDER_N, m_neutralValuePct);
- return true;
- }
- return false;
-}
-
-void OPvPCapturePointTF::HandlePlayerLeave(Player* player)
-{
- player->SendUpdateWorldState(TF_UI_TOWER_SLIDER_DISPLAY, 0);
- OPvPCapturePoint::HandlePlayerLeave(player);
+ m_PvP->SendUpdateWorldState(uint32(TFTowerWorldStates[m_TowerType].n), uint32((m_TowerState & TF_TOWERSTATE_N) != 0));
+ m_PvP->SendUpdateWorldState(uint32(TFTowerWorldStates[m_TowerType].h), uint32((m_TowerState & TF_TOWERSTATE_H) != 0));
+ m_PvP->SendUpdateWorldState(uint32(TFTowerWorldStates[m_TowerType].a), uint32((m_TowerState & TF_TOWERSTATE_A) != 0));
}
bool OutdoorPvPTF::Update(uint32 diff)
@@ -286,14 +257,14 @@ void OPvPCapturePointTF::ChangeState()
{
if (uint32 alliance_towers = ((OutdoorPvPTF*)m_PvP)->GetAllianceTowersControlled())
((OutdoorPvPTF*)m_PvP)->SetAllianceTowersControlled(--alliance_towers);
- sWorld->SendZoneText(OutdoorPvPTFBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_TF_LOSE_A));
+ m_PvP->SendDefenseMessage(OutdoorPvPTFBuffZones[0], TEXT_SPIRIT_TOWER_LOSE_ALLIANCE);
}
// if changing from controlling horde to alliance
else if (m_OldState == OBJECTIVESTATE_HORDE)
{
if (uint32 horde_towers = ((OutdoorPvPTF*)m_PvP)->GetHordeTowersControlled())
((OutdoorPvPTF*)m_PvP)->SetHordeTowersControlled(--horde_towers);
- sWorld->SendZoneText(OutdoorPvPTFBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_TF_LOSE_H));
+ m_PvP->SendDefenseMessage(OutdoorPvPTFBuffZones[0], TEXT_SPIRIT_TOWER_LOSE_HORDE);
}
uint32 artkit = 21;
@@ -308,7 +279,7 @@ void OPvPCapturePointTF::ChangeState()
if (alliance_towers < TF_TOWER_NUM)
((OutdoorPvPTF*)m_PvP)->SetAllianceTowersControlled(++alliance_towers);
- sWorld->SendZoneText(OutdoorPvPTFBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_TF_CAPTURE_A));
+ m_PvP->SendDefenseMessage(OutdoorPvPTFBuffZones[0], TEXT_SPIRIT_TOWER_TAKEN_ALLIANCE);
for (PlayerSet::iterator itr = m_activePlayers[0].begin(); itr != m_activePlayers[0].end(); ++itr)
if (Player* player = ObjectAccessor::FindPlayer(*itr))
@@ -323,7 +294,7 @@ void OPvPCapturePointTF::ChangeState()
if (horde_towers < TF_TOWER_NUM)
((OutdoorPvPTF*)m_PvP)->SetHordeTowersControlled(++horde_towers);
- sWorld->SendZoneText(OutdoorPvPTFBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_TF_CAPTURE_H));
+ m_PvP->SendDefenseMessage(OutdoorPvPTFBuffZones[0], TEXT_SPIRIT_TOWER_TAKEN_HORDE);
for (PlayerSet::iterator itr = m_activePlayers[1].begin(); itr != m_activePlayers[1].end(); ++itr)
if (Player* player = ObjectAccessor::FindPlayer(*itr))
@@ -346,27 +317,12 @@ void OPvPCapturePointTF::ChangeState()
UpdateTowerState();
}
-void OPvPCapturePointTF::SendChangePhase()
-{
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(TF_UI_TOWER_SLIDER_DISPLAY, 1);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- SendUpdateWorldState(TF_UI_TOWER_SLIDER_POS, phase);
- // send this too, sometimes it resets :S
- SendUpdateWorldState(TF_UI_TOWER_SLIDER_N, m_neutralValuePct);
-}
-
class OutdoorPvP_terokkar_forest : public OutdoorPvPScript
{
public:
+ OutdoorPvP_terokkar_forest() : OutdoorPvPScript("outdoorpvp_tf") { }
- OutdoorPvP_terokkar_forest()
- : OutdoorPvPScript("outdoorpvp_tf")
- {
- }
-
- OutdoorPvP* GetOutdoorPvP() const OVERRIDE
+ OutdoorPvP* GetOutdoorPvP() const override
{
return new OutdoorPvPTF();
}
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h
index 2c4ad0445be..ef400452e63 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h
@@ -20,6 +20,16 @@
#include "OutdoorPvP.h"
+enum DefenseMessages
+{
+ TEXT_BONE_WASTES_TAKEN_ALLIANCE = 16120, // (NYI) '|cffffff00The Alliance has taken control of The Bone Wastes!|r'
+ TEXT_BONE_WASTES_TAKEN_HORDE = 16119, // (NYI) '|cffffff00The Horde has taken control of The Bone Wastes!|r'
+ TEXT_SPIRIT_TOWER_TAKEN_ALLIANCE = 18285, // '|cffffff00The Alliance has taken control of a Spirit Tower!|r'
+ TEXT_SPIRIT_TOWER_TAKEN_HORDE = 18286, // '|cffffff00The Horde has taken control of a Spirit Tower!|r'
+ TEXT_SPIRIT_TOWER_LOSE_ALLIANCE = 18288, // '|cffffff00The Alliance has lost control of a Spirit Tower!|r'
+ TEXT_SPIRIT_TOWER_LOSE_HORDE = 18287 // '|cffffff00The Horde has lost control of a Spirit Tower!|r'
+};
+
const uint8 OutdoorPvPTFBuffZonesNum = 5;
const uint32 OutdoorPvPTFBuffZones[OutdoorPvPTFBuffZonesNum] =
@@ -98,10 +108,6 @@ const uint32 TFTowerPlayerLeaveEvents[TF_TOWER_NUM] =
enum TFWorldStates
{
- TF_UI_TOWER_SLIDER_POS = 0xa41,
- TF_UI_TOWER_SLIDER_N = 0xa40,
- TF_UI_TOWER_SLIDER_DISPLAY = 0xa3f,
-
TF_UI_TOWER_COUNT_H = 0xa3e,
TF_UI_TOWER_COUNT_A = 0xa3d,
TF_UI_TOWERS_CONTROLLED_DISPLAY = 0xa3c,
@@ -124,25 +130,17 @@ enum TFTowerStates
class OPvPCapturePointTF : public OPvPCapturePoint
{
public:
-
OPvPCapturePointTF(OutdoorPvP* pvp, OutdoorPvPTF_TowerType type);
bool Update(uint32 diff);
void ChangeState();
- void SendChangePhase();
-
void FillInitialWorldStates(WorldPacket & data);
- // used when player is activated/inactivated in the area
- bool HandlePlayerEnter(Player* player);
- void HandlePlayerLeave(Player* player);
-
void UpdateTowerState();
protected:
-
OutdoorPvPTF_TowerType m_TowerType;
uint32 m_TowerState;
@@ -151,7 +149,6 @@ class OPvPCapturePointTF : public OPvPCapturePoint
class OutdoorPvPTF : public OutdoorPvP
{
public:
-
OutdoorPvPTF();
bool SetupOutdoorPvP();
@@ -174,7 +171,6 @@ class OutdoorPvPTF : public OutdoorPvP
bool IsLocked() const;
private:
-
bool m_IsLocked;
uint32 m_LockTimer;
uint32 m_LockTimerUpdate;
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp
index df526ed068d..d6ee91ff2a9 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp
@@ -24,7 +24,6 @@
#include "ObjectAccessor.h"
#include "WorldPacket.h"
#include "GossipDef.h"
-#include "World.h"
OPvPCapturePointZM_Beacon::OPvPCapturePointZM_Beacon(OutdoorPvP* pvp, ZM_BeaconType type)
: OPvPCapturePoint(pvp), m_TowerType(type), m_TowerState(ZM_TOWERSTATE_N)
@@ -34,41 +33,22 @@ OPvPCapturePointZM_Beacon::OPvPCapturePointZM_Beacon(OutdoorPvP* pvp, ZM_BeaconT
void OPvPCapturePointZM_Beacon::FillInitialWorldStates(WorldPacket &data)
{
- data << uint32(ZMBeaconInfo[m_TowerType].ui_tower_n) << uint32(bool(m_TowerState & ZM_TOWERSTATE_N));
- data << uint32(ZMBeaconInfo[m_TowerType].map_tower_n) << uint32(bool(m_TowerState & ZM_TOWERSTATE_N));
- data << uint32(ZMBeaconInfo[m_TowerType].ui_tower_a) << uint32(bool(m_TowerState & ZM_TOWERSTATE_A));
- data << uint32(ZMBeaconInfo[m_TowerType].map_tower_a) << uint32(bool(m_TowerState & ZM_TOWERSTATE_A));
- data << uint32(ZMBeaconInfo[m_TowerType].ui_tower_h) << uint32(bool(m_TowerState & ZM_TOWERSTATE_H));
- data << uint32(ZMBeaconInfo[m_TowerType].map_tower_h) << uint32(bool(m_TowerState & ZM_TOWERSTATE_H));
+ data << uint32(ZMBeaconInfo[m_TowerType].ui_tower_n) << uint32((m_TowerState & ZM_TOWERSTATE_N) != 0);
+ data << uint32(ZMBeaconInfo[m_TowerType].map_tower_n) << uint32((m_TowerState & ZM_TOWERSTATE_N) != 0);
+ data << uint32(ZMBeaconInfo[m_TowerType].ui_tower_a) << uint32((m_TowerState & ZM_TOWERSTATE_A) != 0);
+ data << uint32(ZMBeaconInfo[m_TowerType].map_tower_a) << uint32((m_TowerState & ZM_TOWERSTATE_A) != 0);
+ data << uint32(ZMBeaconInfo[m_TowerType].ui_tower_h) << uint32((m_TowerState & ZM_TOWERSTATE_H) != 0);
+ data << uint32(ZMBeaconInfo[m_TowerType].map_tower_h) << uint32((m_TowerState & ZM_TOWERSTATE_H) != 0);
}
void OPvPCapturePointZM_Beacon::UpdateTowerState()
{
- m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].ui_tower_n), uint32(bool(m_TowerState & ZM_TOWERSTATE_N)));
- m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].map_tower_n), uint32(bool(m_TowerState & ZM_TOWERSTATE_N)));
- m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].ui_tower_a), uint32(bool(m_TowerState & ZM_TOWERSTATE_A)));
- m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].map_tower_a), uint32(bool(m_TowerState & ZM_TOWERSTATE_A)));
- m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].ui_tower_h), uint32(bool(m_TowerState & ZM_TOWERSTATE_H)));
- m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].map_tower_h), uint32(bool(m_TowerState & ZM_TOWERSTATE_H)));
-}
-
-bool OPvPCapturePointZM_Beacon::HandlePlayerEnter(Player* player)
-{
- if (OPvPCapturePoint::HandlePlayerEnter(player))
- {
- player->SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_disp, 1);
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- player->SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_pos, phase);
- player->SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_n, m_neutralValuePct);
- return true;
- }
- return false;
-}
-
-void OPvPCapturePointZM_Beacon::HandlePlayerLeave(Player* player)
-{
- player->SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_disp, 0);
- OPvPCapturePoint::HandlePlayerLeave(player);
+ m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].ui_tower_n), uint32((m_TowerState & ZM_TOWERSTATE_N) != 0));
+ m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].map_tower_n), uint32((m_TowerState & ZM_TOWERSTATE_N) != 0));
+ m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].ui_tower_a), uint32((m_TowerState & ZM_TOWERSTATE_A) != 0));
+ m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].map_tower_a), uint32((m_TowerState & ZM_TOWERSTATE_A) != 0));
+ m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].ui_tower_h), uint32((m_TowerState & ZM_TOWERSTATE_H) != 0));
+ m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].map_tower_h), uint32((m_TowerState & ZM_TOWERSTATE_H) != 0));
}
void OPvPCapturePointZM_Beacon::ChangeState()
@@ -78,14 +58,12 @@ void OPvPCapturePointZM_Beacon::ChangeState()
{
if (uint32 alliance_towers = ((OutdoorPvPZM*)m_PvP)->GetAllianceTowersControlled())
((OutdoorPvPZM*)m_PvP)->SetAllianceTowersControlled(--alliance_towers);
- sWorld->SendZoneText(ZM_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(ZMBeaconLoseA[m_TowerType]));
}
// if changing from controlling horde to alliance
else if (m_OldState == OBJECTIVESTATE_HORDE)
{
if (uint32 horde_towers = ((OutdoorPvPZM*)m_PvP)->GetHordeTowersControlled())
((OutdoorPvPZM*)m_PvP)->SetHordeTowersControlled(--horde_towers);
- sWorld->SendZoneText(ZM_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(ZMBeaconLoseH[m_TowerType]));
}
switch (m_State)
@@ -96,7 +74,7 @@ void OPvPCapturePointZM_Beacon::ChangeState()
uint32 alliance_towers = ((OutdoorPvPZM*)m_PvP)->GetAllianceTowersControlled();
if (alliance_towers < ZM_NUM_BEACONS)
((OutdoorPvPZM*)m_PvP)->SetAllianceTowersControlled(++alliance_towers);
- sWorld->SendZoneText(ZM_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(ZMBeaconCaptureA[m_TowerType]));
+ m_PvP->SendDefenseMessage(ZM_GRAVEYARD_ZONE, ZMBeaconCaptureA[m_TowerType]);
break;
}
case OBJECTIVESTATE_HORDE:
@@ -105,7 +83,7 @@ void OPvPCapturePointZM_Beacon::ChangeState()
uint32 horde_towers = ((OutdoorPvPZM*)m_PvP)->GetHordeTowersControlled();
if (horde_towers < ZM_NUM_BEACONS)
((OutdoorPvPZM*)m_PvP)->SetHordeTowersControlled(++horde_towers);
- sWorld->SendZoneText(ZM_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(ZMBeaconCaptureH[m_TowerType]));
+ m_PvP->SendDefenseMessage(ZM_GRAVEYARD_ZONE, ZMBeaconCaptureH[m_TowerType]);
break;
}
case OBJECTIVESTATE_NEUTRAL:
@@ -120,16 +98,6 @@ void OPvPCapturePointZM_Beacon::ChangeState()
UpdateTowerState();
}
-void OPvPCapturePointZM_Beacon::SendChangePhase()
-{
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_disp, 1);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_pos, phase);
- SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_n, m_neutralValuePct);
-}
-
bool OutdoorPvPZM::Update(uint32 diff)
{
bool changed = OutdoorPvP::Update(diff);
@@ -220,8 +188,6 @@ int32 OPvPCapturePointZM_GraveYard::HandleOpenGo(Player* player, uint64 guid)
{
if (player->HasAura(ZM_BATTLE_STANDARD_A) && m_GraveYardState != ZM_GRAVEYARD_A)
{
- if (m_GraveYardState == ZM_GRAVEYARD_H)
- sWorld->SendZoneText(ZM_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_ZM_LOSE_GY_H));
m_GraveYardState = ZM_GRAVEYARD_A;
DelObject(0); // only one gotype is used in the whole outdoor pvp, no need to call it a constant
AddObject(0, ZM_Banner_A.entry, ZM_Banner_A.map, ZM_Banner_A.x, ZM_Banner_A.y, ZM_Banner_A.z, ZM_Banner_A.o, ZM_Banner_A.rot0, ZM_Banner_A.rot1, ZM_Banner_A.rot2, ZM_Banner_A.rot3);
@@ -229,12 +195,10 @@ int32 OPvPCapturePointZM_GraveYard::HandleOpenGo(Player* player, uint64 guid)
sObjectMgr->AddGraveYardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, ALLIANCE, false); // add gy
m_PvP->TeamApplyBuff(TEAM_ALLIANCE, ZM_CAPTURE_BUFF);
player->RemoveAurasDueToSpell(ZM_BATTLE_STANDARD_A);
- sWorld->SendZoneText(ZM_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_ZM_CAPTURE_GY_A));
+ m_PvP->SendDefenseMessage(ZM_GRAVEYARD_ZONE, TEXT_TWIN_SPIRE_RUINS_TAKEN_ALLIANCE);
}
else if (player->HasAura(ZM_BATTLE_STANDARD_H) && m_GraveYardState != ZM_GRAVEYARD_H)
{
- if (m_GraveYardState == ZM_GRAVEYARD_A)
- sWorld->SendZoneText(ZM_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_ZM_LOSE_GY_A));
m_GraveYardState = ZM_GRAVEYARD_H;
DelObject(0); // only one gotype is used in the whole outdoor pvp, no need to call it a constant
AddObject(0, ZM_Banner_H.entry, ZM_Banner_H.map, ZM_Banner_H.x, ZM_Banner_H.y, ZM_Banner_H.z, ZM_Banner_H.o, ZM_Banner_H.rot0, ZM_Banner_H.rot1, ZM_Banner_H.rot2, ZM_Banner_H.rot3);
@@ -242,7 +206,7 @@ int32 OPvPCapturePointZM_GraveYard::HandleOpenGo(Player* player, uint64 guid)
sObjectMgr->AddGraveYardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, HORDE, false); // add gy
m_PvP->TeamApplyBuff(TEAM_HORDE, ZM_CAPTURE_BUFF);
player->RemoveAurasDueToSpell(ZM_BATTLE_STANDARD_H);
- sWorld->SendZoneText(ZM_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_ZM_CAPTURE_GY_H));
+ m_PvP->SendDefenseMessage(ZM_GRAVEYARD_ZONE, TEXT_TWIN_SPIRE_RUINS_TAKEN_HORDE);
}
UpdateTowerState();
}
@@ -256,17 +220,17 @@ OPvPCapturePointZM_GraveYard::OPvPCapturePointZM_GraveYard(OutdoorPvP* pvp)
m_GraveYardState = ZM_GRAVEYARD_N;
m_FlagCarrierGUID = 0;
// add field scouts here
- AddCreature(ZM_ALLIANCE_FIELD_SCOUT, ZM_AllianceFieldScout.entry, ZM_AllianceFieldScout.teamval, ZM_AllianceFieldScout.map, ZM_AllianceFieldScout.x, ZM_AllianceFieldScout.y, ZM_AllianceFieldScout.z, ZM_AllianceFieldScout.o);
- AddCreature(ZM_HORDE_FIELD_SCOUT, ZM_HordeFieldScout.entry, ZM_HordeFieldScout.teamval, ZM_HordeFieldScout.map, ZM_HordeFieldScout.x, ZM_HordeFieldScout.y, ZM_HordeFieldScout.z, ZM_HordeFieldScout.o);
+ AddCreature(ZM_ALLIANCE_FIELD_SCOUT, ZM_AllianceFieldScout.entry, ZM_AllianceFieldScout.map, ZM_AllianceFieldScout.x, ZM_AllianceFieldScout.y, ZM_AllianceFieldScout.z, ZM_AllianceFieldScout.o);
+ AddCreature(ZM_HORDE_FIELD_SCOUT, ZM_HordeFieldScout.entry, ZM_HordeFieldScout.map, ZM_HordeFieldScout.x, ZM_HordeFieldScout.y, ZM_HordeFieldScout.z, ZM_HordeFieldScout.o);
// add neutral banner
AddObject(0, ZM_Banner_N.entry, ZM_Banner_N.map, ZM_Banner_N.x, ZM_Banner_N.y, ZM_Banner_N.z, ZM_Banner_N.o, ZM_Banner_N.rot0, ZM_Banner_N.rot1, ZM_Banner_N.rot2, ZM_Banner_N.rot3);
}
void OPvPCapturePointZM_GraveYard::UpdateTowerState()
{
- m_PvP->SendUpdateWorldState(ZM_MAP_GRAVEYARD_N, uint32(bool(m_GraveYardState & ZM_GRAVEYARD_N)));
- m_PvP->SendUpdateWorldState(ZM_MAP_GRAVEYARD_H, uint32(bool(m_GraveYardState & ZM_GRAVEYARD_H)));
- m_PvP->SendUpdateWorldState(ZM_MAP_GRAVEYARD_A, uint32(bool(m_GraveYardState & ZM_GRAVEYARD_A)));
+ m_PvP->SendUpdateWorldState(ZM_MAP_GRAVEYARD_N, uint32((m_GraveYardState & ZM_GRAVEYARD_N) != 0));
+ m_PvP->SendUpdateWorldState(ZM_MAP_GRAVEYARD_H, uint32((m_GraveYardState & ZM_GRAVEYARD_H) != 0));
+ m_PvP->SendUpdateWorldState(ZM_MAP_GRAVEYARD_A, uint32((m_GraveYardState & ZM_GRAVEYARD_A) != 0));
m_PvP->SendUpdateWorldState(ZM_MAP_ALLIANCE_FLAG_READY, uint32(m_BothControllingFaction == ALLIANCE));
m_PvP->SendUpdateWorldState(ZM_MAP_ALLIANCE_FLAG_NOT_READY, uint32(m_BothControllingFaction != ALLIANCE));
@@ -276,9 +240,9 @@ void OPvPCapturePointZM_GraveYard::UpdateTowerState()
void OPvPCapturePointZM_GraveYard::FillInitialWorldStates(WorldPacket &data)
{
- data << ZM_MAP_GRAVEYARD_N << uint32(bool(m_GraveYardState & ZM_GRAVEYARD_N));
- data << ZM_MAP_GRAVEYARD_H << uint32(bool(m_GraveYardState & ZM_GRAVEYARD_H));
- data << ZM_MAP_GRAVEYARD_A << uint32(bool(m_GraveYardState & ZM_GRAVEYARD_A));
+ data << ZM_MAP_GRAVEYARD_N << uint32((m_GraveYardState & ZM_GRAVEYARD_N) != 0);
+ data << ZM_MAP_GRAVEYARD_H << uint32((m_GraveYardState & ZM_GRAVEYARD_H) != 0);
+ data << ZM_MAP_GRAVEYARD_A << uint32((m_GraveYardState & ZM_GRAVEYARD_A) != 0);
data << ZM_MAP_ALLIANCE_FLAG_READY << uint32(m_BothControllingFaction == ALLIANCE);
data << ZM_MAP_ALLIANCE_FLAG_NOT_READY << uint32(m_BothControllingFaction != ALLIANCE);
@@ -415,20 +379,13 @@ void OutdoorPvPZM::SetHordeTowersControlled(uint32 count)
void OutdoorPvPZM::FillInitialWorldStates(WorldPacket &data)
{
data << ZM_WORLDSTATE_UNK_1 << uint32(1);
+
for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
- {
itr->second->FillInitialWorldStates(data);
- }
}
void OutdoorPvPZM::SendRemoveWorldStates(Player* player)
{
- player->SendUpdateWorldState(ZM_UI_TOWER_SLIDER_N_W, 0);
- player->SendUpdateWorldState(ZM_UI_TOWER_SLIDER_POS_W, 0);
- player->SendUpdateWorldState(ZM_UI_TOWER_SLIDER_DISPLAY_W, 0);
- player->SendUpdateWorldState(ZM_UI_TOWER_SLIDER_N_E, 0);
- player->SendUpdateWorldState(ZM_UI_TOWER_SLIDER_POS_E, 0);
- player->SendUpdateWorldState(ZM_UI_TOWER_SLIDER_DISPLAY_E, 0);
player->SendUpdateWorldState(ZM_WORLDSTATE_UNK_1, 1);
player->SendUpdateWorldState(ZM_UI_TOWER_EAST_N, 0);
player->SendUpdateWorldState(ZM_UI_TOWER_EAST_H, 0);
@@ -454,13 +411,9 @@ void OutdoorPvPZM::SendRemoveWorldStates(Player* player)
class OutdoorPvP_zangarmarsh : public OutdoorPvPScript
{
public:
+ OutdoorPvP_zangarmarsh() : OutdoorPvPScript("outdoorpvp_zm") { }
- OutdoorPvP_zangarmarsh()
- : OutdoorPvPScript("outdoorpvp_zm")
- {
- }
-
- OutdoorPvP* GetOutdoorPvP() const OVERRIDE
+ OutdoorPvP* GetOutdoorPvP() const override
{
return new OutdoorPvPZM();
}
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h
index 4b810ddb15f..eef1ff9cc3b 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h
@@ -18,9 +18,22 @@
#ifndef OUTDOOR_PVP_ZM_
#define OUTDOOR_PVP_ZM_
-#include "Language.h"
#include "OutdoorPvP.h"
+enum DefenseMessages
+{
+ TEXT_WEST_BEACON_TAKEN_ALLIANCE = 15541, // '|cffffff00The Alliance has taken control of the West Beacon!|r'
+ TEXT_WEST_BEACON_TAKEN_HORDE = 15543, // '|cffffff00The Horde has taken control of the West Beacon!|r'
+ TEXT_EAST_BEACON_TAKEN_ALLIANCE = 15546, // '|cffffff00The Alliance has taken control of the East Beacon!|r'
+ TEXT_EAST_BEACON_TAKEN_HORDE = 15545, // '|cffffff00The Horde has taken control of the East Beacon!|r'
+ TEXT_TWIN_SPIRE_RUINS_TAKEN_ALLIANCE = 15591, // '|cffffff00The Alliance has taken control of Twin Spire Ruins!|r'
+ TEXT_TWIN_SPIRE_RUINS_TAKEN_HORDE = 15590, // '|cffffff00The Horde has taken control of Twin Spire Ruins!|r'
+ TEXT_BOTH_BEACONS_TAKEN_ALLIANCE = 16284, // (NYI) '|cffffff00The Alliance has taken control of both beacons!|r'
+ TEXT_BOTH_BEACONS_TAKEN_HORDE = 16285, // (NYI) '|cffffff00The Horde has taken control of both beacons!|r'
+ TEXT_BATTLE_STANDARDS_ALLIANCE = 16287, // (NYI) '|cffffff00The Alliance Field Scout is now issuing battle standards.|r'
+ TEXT_BATTLE_STANDARDS_HORDE = 16288 // (NYI) '|cffffff00The Horde Field Scout is now issuing battle standards.|r'
+};
+
const uint8 OutdoorPvPZMBuffZonesNum = 5;
// the buff is cast in these zones
@@ -52,10 +65,10 @@ const go_type ZM_Banner_H = { 182528, 530, 253.54f, 7083.81f, 36.7728f, -0.01745
const go_type ZM_Banner_N = { 182529, 530, 253.54f, 7083.81f, 36.7728f, -0.017453f, 0.0f, 0.0f, 0.008727f, -0.999962f };
// horde field scout spawn data
-const creature_type ZM_HordeFieldScout = {18564, 67, 530, 296.625f, 7818.4f, 42.6294f, 5.18363f};
+const creature_type ZM_HordeFieldScout = {18564, 530, 296.625f, 7818.4f, 42.6294f, 5.18363f};
// alliance field scout spawn data
-const creature_type ZM_AllianceFieldScout = {18581, 469, 530, 374.395f, 6230.08f, 22.8351f, 0.593412f};
+const creature_type ZM_AllianceFieldScout = {18581, 530, 374.395f, 6230.08f, 22.8351f, 0.593412f};
enum ZMCreatureTypes
{
@@ -66,9 +79,6 @@ enum ZMCreatureTypes
struct zm_beacon
{
- uint32 slider_disp;
- uint32 slider_n;
- uint32 slider_pos;
uint32 ui_tower_n;
uint32 ui_tower_h;
uint32 ui_tower_a;
@@ -88,32 +98,20 @@ enum ZM_BeaconType
const zm_beacon ZMBeaconInfo[ZM_NUM_BEACONS] =
{
- {2533, 2535, 2534, 2560, 2559, 2558, 2652, 2651, 2650, 11807, 11806},
- {2527, 2529, 2528, 2557, 2556, 2555, 2646, 2645, 2644, 11805, 11804}
+ {2560, 2559, 2558, 2652, 2651, 2650, 11807, 11806},
+ {2557, 2556, 2555, 2646, 2645, 2644, 11805, 11804}
};
const uint32 ZMBeaconCaptureA[ZM_NUM_BEACONS] =
{
- LANG_OPVP_ZM_CAPTURE_EAST_A,
- LANG_OPVP_ZM_CAPTURE_WEST_A
+ TEXT_EAST_BEACON_TAKEN_ALLIANCE,
+ TEXT_WEST_BEACON_TAKEN_ALLIANCE
};
const uint32 ZMBeaconCaptureH[ZM_NUM_BEACONS] =
{
- LANG_OPVP_ZM_CAPTURE_EAST_H,
- LANG_OPVP_ZM_CAPTURE_WEST_H
-};
-
-const uint32 ZMBeaconLoseA[ZM_NUM_BEACONS] =
-{
- LANG_OPVP_ZM_LOSE_EAST_A,
- LANG_OPVP_ZM_LOSE_WEST_A
-};
-
-const uint32 ZMBeaconLoseH[ZM_NUM_BEACONS] =
-{
- LANG_OPVP_ZM_LOSE_EAST_H,
- LANG_OPVP_ZM_LOSE_WEST_H
+ TEXT_EAST_BEACON_TAKEN_HORDE,
+ TEXT_WEST_BEACON_TAKEN_HORDE
};
const go_type ZMCapturePoints[ZM_NUM_BEACONS] =
@@ -124,14 +122,6 @@ const go_type ZMCapturePoints[ZM_NUM_BEACONS] =
enum OutdoorPvPZMWorldStates
{
- ZM_UI_TOWER_SLIDER_N_W = 2529,
- ZM_UI_TOWER_SLIDER_POS_W = 2528,
- ZM_UI_TOWER_SLIDER_DISPLAY_W = 2527,
-
- ZM_UI_TOWER_SLIDER_N_E = 2535,
- ZM_UI_TOWER_SLIDER_POS_E = 2534,
- ZM_UI_TOWER_SLIDER_DISPLAY_E = 2533,
-
ZM_WORLDSTATE_UNK_1 = 2653,
ZM_UI_TOWER_EAST_N = 2560,
@@ -169,23 +159,15 @@ class OutdoorPvPZM;
class OPvPCapturePointZM_Beacon : public OPvPCapturePoint
{
public:
-
OPvPCapturePointZM_Beacon(OutdoorPvP* pvp, ZM_BeaconType type);
void ChangeState();
- void SendChangePhase();
-
void FillInitialWorldStates(WorldPacket & data);
- // used when player is activated/inactivated in the area
- bool HandlePlayerEnter(Player* player);
- void HandlePlayerLeave(Player* player);
-
void UpdateTowerState();
protected:
-
ZM_BeaconType m_TowerType;
uint32 m_TowerState;
};
@@ -200,7 +182,6 @@ enum ZM_GraveYardState
class OPvPCapturePointZM_GraveYard : public OPvPCapturePoint
{
public:
-
OPvPCapturePointZM_GraveYard(OutdoorPvP* pvp);
bool Update(uint32 diff);
@@ -224,11 +205,9 @@ class OPvPCapturePointZM_GraveYard : public OPvPCapturePoint
uint32 GetGraveYardState() const;
private:
-
uint32 m_GraveYardState;
protected:
-
uint32 m_BothControllingFaction;
uint64 m_FlagCarrierGUID;
@@ -237,7 +216,6 @@ class OPvPCapturePointZM_GraveYard : public OPvPCapturePoint
class OutdoorPvPZM : public OutdoorPvP
{
public:
-
OutdoorPvPZM();
bool SetupOutdoorPvP();
@@ -260,7 +238,6 @@ class OutdoorPvPZM : public OutdoorPvP
void SetHordeTowersControlled(uint32 count);
private:
-
OPvPCapturePointZM_GraveYard * m_GraveYard;
uint32 m_AllianceTowersControlled;
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 c9d452bfada..7ba0a452941 100644
--- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp
+++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp
@@ -54,7 +54,7 @@ class npc_stolen_soul : public CreatureScript
public:
npc_stolen_soul() : CreatureScript("npc_stolen_soul") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_stolen_soulAI(creature);
}
@@ -70,13 +70,13 @@ public:
uint8 myClass;
uint32 Class_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
myClass = CLASS_NONE;
Class_Timer = 1000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{ }
void SetMyClass(uint8 myclass)
@@ -84,7 +84,7 @@ public:
myClass = myclass;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -161,7 +161,7 @@ class boss_exarch_maladaar : public CreatureScript
public:
boss_exarch_maladaar() : CreatureScript("boss_exarch_maladaar") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_exarch_maladaarAI(creature);
}
@@ -184,20 +184,20 @@ public:
bool HasTaunted;
bool Avatar_summoned;
- void Reset() OVERRIDE
+ void Reset() override
{
soulmodel = 0;
soulholder = 0;
soulclass = 0;
- Fear_timer = 15000 + rand()% 5000;
+ Fear_timer = 15000 + rand32() % 5000;
Ribbon_of_Souls_timer = 5000;
- StolenSoul_Timer = 25000 + rand()% 10000;
+ StolenSoul_Timer = 25000 + rand32() % 10000;
Avatar_summoned = false;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!HasTaunted && me->IsWithinDistInMap(who, 150.0f))
@@ -209,12 +209,12 @@ public:
ScriptedAI::MoveInLineOfSight(who);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned->GetEntry() == ENTRY_STOLEN_SOUL)
{
@@ -223,31 +223,30 @@ public:
summoned->SetDisplayId(soulmodel);
summoned->setFaction(me->getFaction());
- if (Unit* target = Unit::GetUnit(*me, soulholder))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, soulholder))
{
-
- CAST_AI(npc_stolen_soul::npc_stolen_soulAI, summoned->AI())->SetMyClass(soulclass);
- summoned->AI()->AttackStart(target);
+ ENSURE_AI(npc_stolen_soul::npc_stolen_soulAI, summoned->AI())->SetMyClass(soulclass);
+ summoned->AI()->AttackStart(target);
}
}
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
- if (rand()%2)
+ if (rand32() % 2)
return;
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
//When Exarch Maladar is defeated D'ore appear.
me->SummonCreature(19412, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 600000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -261,7 +260,7 @@ public:
DoCast(me, SPELL_SUMMON_AVATAR);
Avatar_summoned = true;
- StolenSoul_Timer = 15000 + rand()% 15000;
+ StolenSoul_Timer = 15000 + rand32() % 15000;
}
if (StolenSoul_Timer <= diff)
@@ -282,7 +281,7 @@ public:
DoCast(target, SPELL_STOLEN_SOUL);
me->SummonCreature(ENTRY_STOLEN_SOUL, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);
- StolenSoul_Timer = 20000 + rand()% 10000;
+ StolenSoul_Timer = 20000 + rand32() % 10000;
} else StolenSoul_Timer = 1000;
}
} else StolenSoul_Timer -= diff;
@@ -292,13 +291,13 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_RIBBON_OF_SOULS);
- Ribbon_of_Souls_timer = 5000 + (rand()%20 * 1000);
+ Ribbon_of_Souls_timer = 5000 + (rand32() % 20 * 1000);
} else Ribbon_of_Souls_timer -= diff;
if (Fear_timer <= diff)
{
DoCast(me, SPELL_SOUL_SCREAM);
- Fear_timer = 15000 + rand()% 15000;
+ Fear_timer = 15000 + rand32() % 15000;
} else Fear_timer -= diff;
DoMeleeAttackIfReady();
@@ -312,7 +311,7 @@ class npc_avatar_of_martyred : public CreatureScript
public:
npc_avatar_of_martyred() : CreatureScript("npc_avatar_of_martyred") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_avatar_of_martyredAI(creature);
}
@@ -323,16 +322,16 @@ public:
uint32 Mortal_Strike_timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Mortal_Strike_timer = 10000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp
index f73ff46908b..683b253d8a1 100644
--- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp
+++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp
@@ -53,7 +53,7 @@ class boss_shirrak_the_dead_watcher : public CreatureScript
public:
boss_shirrak_the_dead_watcher() : CreatureScript("boss_shirrak_the_dead_watcher") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_shirrak_the_dead_watcherAI(creature);
}
@@ -71,7 +71,7 @@ public:
uint64 FocusedTargetGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
Inhibitmagic_Timer = 0;
Attractmagic_Timer = 28000;
@@ -80,10 +80,10 @@ public:
FocusedTargetGUID = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{ }
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned && summoned->GetEntry() == NPC_FOCUS_FIRE)
{
@@ -92,12 +92,12 @@ public:
summoned->SetLevel(me->getLevel());
summoned->AddUnitState(UNIT_STATE_ROOT);
- if (Unit* pFocusedTarget = Unit::GetUnit(*me, FocusedTargetGUID))
+ if (Unit* pFocusedTarget = ObjectAccessor::GetUnit(*me, FocusedTargetGUID))
summoned->AI()->AttackStart(pFocusedTarget);
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Inhibitmagic_Timer
if (Inhibitmagic_Timer <= diff)
@@ -118,7 +118,7 @@ public:
if (dist < 15)
me->AddAura(SPELL_INHIBITMAGIC, i_pl);
}
- Inhibitmagic_Timer = 3000+(rand()%1000);
+ Inhibitmagic_Timer = 3000 + (rand32() % 1000);
} else Inhibitmagic_Timer -= diff;
//Return since we have no target
@@ -151,7 +151,7 @@ public:
me->SummonCreature(NPC_FOCUS_FIRE, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 5500);
Talk(EMOTE_FOCUSED, target);
}
- FocusFire_Timer = 15000+(rand()%5000);
+ FocusFire_Timer = 15000 + (rand32() % 5000);
} else FocusFire_Timer -= diff;
DoMeleeAttackIfReady();
@@ -165,7 +165,7 @@ class npc_focus_fire : public CreatureScript
public:
npc_focus_fire() : CreatureScript("npc_focus_fire") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_focus_fireAI(creature);
}
@@ -179,16 +179,16 @@ public:
uint32 FieryBlast_Timer;
bool fiery1, fiery2;
- void Reset() OVERRIDE
+ void Reset() override
{
- FieryBlast_Timer = 3000+(rand()%1000);
+ FieryBlast_Timer = 3000 + (rand32() % 1000);
fiery1 = fiery2 = true;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{ }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp
index b003039f484..4b8a764fa03 100644
--- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp
+++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp
@@ -32,7 +32,7 @@ class instance_auchenai_crypts : public InstanceMapScript
}
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_auchenai_crypts_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp
index 7ccf7a7f9b2..67cc6b99e93 100644
--- a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp
@@ -71,7 +71,7 @@ class boss_nexusprince_shaffar : public CreatureScript
public:
boss_nexusprince_shaffar() : CreatureScript("boss_nexusprince_shaffar") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_nexusprince_shaffarAI(creature);
}
@@ -91,7 +91,7 @@ public:
bool HasTaunted;
bool CanBlink;
- void Reset() OVERRIDE
+ void Reset() override
{
Blink_Timer = 1500;
Beacon_Timer = 10000;
@@ -110,13 +110,13 @@ public:
me->SummonCreature(NPC_BEACON, posX + dist, posY, posZ, angle, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 7200000);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
summons.DespawnAll();
ScriptedAI::EnterEvadeMode();
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!HasTaunted && who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 100.0f))
@@ -126,7 +126,7 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
@@ -134,7 +134,7 @@ public:
summons.DoZoneInCombat();
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned->GetEntry() == NPC_BEACON)
{
@@ -147,23 +147,23 @@ public:
summons.Summon(summoned);
}
- void SummonedCreatureDespawn(Creature* summon) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summon) override
{
summons.Despawn(summon);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEAD);
summons.DespawnAll();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -232,7 +232,7 @@ class npc_ethereal_beacon : public CreatureScript
public:
npc_ethereal_beacon() : CreatureScript("npc_ethereal_beacon") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ethereal_beaconAI(creature);
}
@@ -252,14 +252,14 @@ public:
me->Kill(me);
}
- void Reset() OVERRIDE
+ void Reset() override
{
Apprentice_Timer = DUNGEON_MODE(20000, 10000);
ArcaneBolt_Timer = 1000;
Check_Timer = 1000;
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
// Send Shaffar to fight
Creature* Shaffar = me->FindNearestCreature(NPC_SHAFFAR, 100);
@@ -272,12 +272,12 @@ public:
Shaffar->AI()->AttackStart(who);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->AI()->AttackStart(me->GetVictim());
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -324,7 +324,7 @@ class npc_ethereal_apprentice : public CreatureScript
public:
npc_ethereal_apprentice() : CreatureScript("npc_ethereal_apprentice") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ethereal_apprenticeAI(creature);
}
@@ -337,13 +337,13 @@ public:
bool isFireboltTurn;
- void Reset() OVERRIDE
+ void Reset() override
{
Cast_Timer = 3000;
isFireboltTurn = true;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -380,14 +380,14 @@ public:
{
npc_yorAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_DOUBLE_BREATH, urand(6000,9000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -414,7 +414,7 @@ public:
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_yorAI(creature);
}
diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp
index 267acbc95eb..b74c800c01b 100644
--- a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp
@@ -45,7 +45,7 @@ class boss_pandemonius : public CreatureScript
public:
boss_pandemonius() : CreatureScript("boss_pandemonius") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_pandemoniusAI(creature);
}
@@ -60,29 +60,29 @@ public:
uint32 DarkShell_Timer;
uint32 VoidBlast_Counter;
- void Reset() OVERRIDE
+ void Reset() override
{
- VoidBlast_Timer = 8000+rand()%15000;
+ VoidBlast_Timer = 8000 + rand32() % 15000;
DarkShell_Timer = 20000;
VoidBlast_Counter = 0;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_KILL);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -98,7 +98,7 @@ public:
if (VoidBlast_Counter == 5)
{
- VoidBlast_Timer = 15000+rand()%10000;
+ VoidBlast_Timer = 15000 + rand32() % 10000;
VoidBlast_Counter = 0;
}
} else VoidBlast_Timer -= diff;
diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp
index baf8d2b7d01..48bea45a95b 100644
--- a/src/server/scripts/Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp
@@ -32,7 +32,7 @@ class instance_mana_tombs : public InstanceMapScript
}
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_mana_tombs_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp
index d888121403f..1787933143c 100644
--- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp
+++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp
@@ -69,7 +69,7 @@ class boss_anzu : public CreatureScript
{
boss_anzuAI(Creature* creature) : BossAI(creature, DATA_ANZU) { }
- void Reset() OVERRIDE
+ void Reset() override
{
//_Reset();
events.Reset();
@@ -77,19 +77,19 @@ class boss_anzu : public CreatureScript
_under66Percent = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_PARALYZING_SCREECH, 14000);
events.ScheduleEvent(EVENT_CYCLONE_OF_FEATHERS, 5000);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void DamageTaken(Unit* /*killer*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*killer*/, uint32 &damage) override
{
if (me->HealthBelowPctDamaged(33, damage) && !_under33Percent)
{
@@ -106,7 +106,7 @@ class boss_anzu : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -157,7 +157,7 @@ class boss_anzu : public CreatureScript
bool _under66Percent;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetSethekkHallsAI<boss_anzuAI>(creature);
}
diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp
index 25fdf84e739..098d35a292e 100644
--- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp
+++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp
@@ -73,7 +73,7 @@ public:
{
boss_darkweaver_sythAI(Creature* creature) : BossAI(creature, DATA_DARKWEAVER_SYTH) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
summon90 = false;
@@ -81,7 +81,7 @@ public:
summon10 = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_FLAME_SHOCK, 2000);
@@ -93,19 +93,19 @@ public:
Talk(SAY_AGGRO);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
summoned->AI()->AttackStart(target);
@@ -124,7 +124,7 @@ public:
DoCast(me, SPELL_SUMMON_SYTH_SHADOW, true); //right
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -192,7 +192,7 @@ public:
bool summon10;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetSethekkHallsAI<boss_darkweaver_sythAI>(creature);
}
@@ -213,16 +213,16 @@ public:
uint32 flameshock_timer;
uint32 flamebuffet_timer;
- void Reset() OVERRIDE
+ void Reset() override
{
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true);
flameshock_timer = 2500;
flamebuffet_timer = 5000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -247,7 +247,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_syth_fireAI(creature);
}
@@ -258,7 +258,7 @@ class npc_syth_arcane : public CreatureScript
public:
npc_syth_arcane() : CreatureScript("npc_syth_arcane") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_syth_arcaneAI(creature);
}
@@ -272,16 +272,16 @@ public:
uint32 arcaneshock_timer;
uint32 arcanebuffet_timer;
- void Reset() OVERRIDE
+ void Reset() override
{
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, true);
arcaneshock_timer = 2500;
arcanebuffet_timer = 5000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -312,7 +312,7 @@ class npc_syth_frost : public CreatureScript
public:
npc_syth_frost() : CreatureScript("npc_syth_frost") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_syth_frostAI(creature);
}
@@ -326,16 +326,16 @@ public:
uint32 frostshock_timer;
uint32 frostbuffet_timer;
- void Reset() OVERRIDE
+ void Reset() override
{
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true);
frostshock_timer = 2500;
frostbuffet_timer = 5000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -367,7 +367,7 @@ class npc_syth_shadow : public CreatureScript
public:
npc_syth_shadow() : CreatureScript("npc_syth_shadow") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_syth_shadowAI(creature);
}
@@ -381,16 +381,16 @@ public:
uint32 shadowshock_timer;
uint32 shadowbuffet_timer;
- void Reset() OVERRIDE
+ void Reset() override
{
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, true);
shadowshock_timer = 2500;
shadowbuffet_timer = 5000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp
index e6c416a3b61..9cb7505c015 100644
--- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp
+++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp
@@ -60,19 +60,19 @@ public:
{
boss_talon_king_ikissAI(Creature* creature) : BossAI(creature, DATA_TALON_KING_IKISS) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
ArcaneVolley_Timer = 5000;
Sheep_Timer = 8000;
Blink_Timer = 35000;
- Slow_Timer = 15000+rand()%15000;
+ Slow_Timer = 15000 + rand32() % 15000;
Blink = false;
Intro = false;
ManaShield = false;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!me->GetVictim() && me->CanCreatureAttack(who))
{
@@ -94,25 +94,25 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -127,7 +127,7 @@ public:
if (ArcaneVolley_Timer <= diff)
{
DoCast(me, SPELL_ARCANE_VOLLEY);
- ArcaneVolley_Timer = 7000+rand()%5000;
+ ArcaneVolley_Timer = 7000 + rand32() % 5000;
} else ArcaneVolley_Timer -= diff;
if (Sheep_Timer <= diff)
@@ -142,7 +142,7 @@ public:
if (target)
DoCast(target, SPELL_POLYMORPH);
- Sheep_Timer = 15000+rand()%2500;
+ Sheep_Timer = 15000 + rand32() % 2500;
} else Sheep_Timer -= diff;
//may not be correct time to cast
@@ -157,7 +157,7 @@ public:
if (Slow_Timer <= diff)
{
DoCast(me, H_SPELL_SLOW);
- Slow_Timer = 15000+rand()%25000;
+ Slow_Timer = 15000 + rand32() % 25000;
} else Slow_Timer -= diff;
}
@@ -182,7 +182,7 @@ public:
DoCast(target, SPELL_BLINK_TELEPORT);
Blink = true;
}
- Blink_Timer = 35000+rand()%5000;
+ Blink_Timer = 35000 + rand32() % 5000;
} else Blink_Timer -= diff;
if (!Blink)
@@ -200,7 +200,7 @@ public:
bool Intro;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetSethekkHallsAI<boss_talon_king_ikissAI>(creature);
}
diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp
index d70cc5dd566..308e5e80105 100644
--- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp
+++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp
@@ -38,7 +38,7 @@ class instance_sethekk_halls : public InstanceMapScript
LoadDoorData(doorData);
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
if (creature->GetEntry() == NPC_ANZU)
{
@@ -49,19 +49,19 @@ class instance_sethekk_halls : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
if (go->GetEntry() == GO_IKISS_DOOR)
AddDoor(go, true);
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
if (go->GetEntry() == GO_IKISS_DOOR)
AddDoor(go, false);
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -72,7 +72,7 @@ class instance_sethekk_halls : public InstanceMapScript
return saveStream.str();
}
- void Load(char const* str) OVERRIDE
+ void Load(char const* str) override
{
if (!str)
{
@@ -105,7 +105,7 @@ class instance_sethekk_halls : public InstanceMapScript
}
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_sethekk_halls_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp
index e0f25bb18e2..a48f5245273 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp
@@ -65,7 +65,7 @@ class boss_ambassador_hellmaw : public CreatureScript
_intro = false;
}
- void Reset() OVERRIDE
+ void Reset() override
{
if (!me->IsAlive())
return;
@@ -81,7 +81,7 @@ class boss_ambassador_hellmaw : public CreatureScript
DoAction(ACTION_AMBASSADOR_HELLMAW_BANISH);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (me->HasAura(SPELL_BANISH))
return;
@@ -89,7 +89,7 @@ class boss_ambassador_hellmaw : public CreatureScript
npc_escortAI::MoveInLineOfSight(who);
}
- void WaypointReached(uint32 /*waypointId*/) OVERRIDE
+ void WaypointReached(uint32 /*waypointId*/) override
{
}
@@ -118,25 +118,25 @@ class boss_ambassador_hellmaw : public CreatureScript
Start(true, false, 0, NULL, false, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_instance->SetBossState(DATA_AMBASSADOR_HELLMAW, IN_PROGRESS);
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_instance->SetBossState(DATA_AMBASSADOR_HELLMAW, DONE);
Talk(SAY_DEATH);
}
- void UpdateEscortAI(uint32 const diff) OVERRIDE
+ void UpdateEscortAI(uint32 const diff) override
{
if (!UpdateVictim())
return;
@@ -181,7 +181,7 @@ class boss_ambassador_hellmaw : public CreatureScript
bool _intro;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetShadowLabyrinthAI<boss_ambassador_hellmawAI>(creature);
}
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
index d84181046de..2b7376a527b 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
@@ -64,12 +64,12 @@ class boss_blackheart_the_inciter : public CreatureScript
{
boss_blackheart_the_inciterAI(Creature* creature) : BossAI(creature, DATA_BLACKHEART_THE_INCITER) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_INCITE_CHAOS, 20000);
@@ -79,19 +79,19 @@ class boss_blackheart_the_inciter : public CreatureScript
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -137,7 +137,7 @@ class boss_blackheart_the_inciter : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetShadowLabyrinthAI<boss_blackheart_the_inciterAI>(creature);
}
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 2bdd86afe47..d454b646647 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
@@ -90,7 +90,7 @@ class boss_grandmaster_vorpil : public CreatureScript
_intro = false;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
_helpYell = false;
@@ -116,19 +116,19 @@ class boss_grandmaster_vorpil : public CreatureScript
}
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_SHADOWBOLT_VOLLEY, urand(7000, 14000));
@@ -141,7 +141,7 @@ class boss_grandmaster_vorpil : public CreatureScript
SummonPortals();
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
BossAI::MoveInLineOfSight(who);
@@ -152,7 +152,7 @@ class boss_grandmaster_vorpil : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -209,7 +209,7 @@ class boss_grandmaster_vorpil : public CreatureScript
bool _helpYell;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetShadowLabyrinthAI<boss_grandmaster_vorpilAI>(creature);
}
@@ -227,15 +227,15 @@ class npc_voidtraveler : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
_moveTimer = 0;
_sacrificed = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_moveTimer <= diff)
{
@@ -270,7 +270,7 @@ class npc_voidtraveler : public CreatureScript
bool _sacrificed;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetShadowLabyrinthAI<npc_voidtravelerAI>(creature);
}
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp
index 130cdf31d42..31adf1522d4 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp
@@ -64,7 +64,7 @@ class boss_murmur : public CreatureScript
SetCombatMovement(false);
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
events.ScheduleEvent(EVENT_SONIC_BOOM, 30000);
@@ -84,17 +84,17 @@ class boss_murmur : public CreatureScript
me->ResetPlayerDamageReq();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -167,7 +167,7 @@ class boss_murmur : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetShadowLabyrinthAI<boss_murmurAI>(creature);
}
@@ -183,7 +183,7 @@ class spell_murmur_sonic_boom : public SpellScriptLoader
{
PrepareSpellScript(spell_murmur_sonic_boom_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SONIC_BOOM_EFFECT))
return false;
@@ -195,13 +195,13 @@ class spell_murmur_sonic_boom : public SpellScriptLoader
GetCaster()->CastSpell((Unit*)NULL, SPELL_SONIC_BOOM_EFFECT, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_murmur_sonic_boom_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_murmur_sonic_boom_SpellScript();
}
@@ -223,13 +223,13 @@ class spell_murmur_sonic_boom_effect : public SpellScriptLoader
SetHitDamage(target->CountPctFromMaxHealth(80)); /// @todo: find correct value
}
- void Register() OVERRIDE
+ void Register() override
{
OnHit += SpellHitFn(spell_murmur_sonic_boom_effect_SpellScript::CalcDamage);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_murmur_sonic_boom_effect_SpellScript();
}
@@ -265,13 +265,13 @@ class spell_murmur_thundering_storm : public SpellScriptLoader
targets.remove_if(ThunderingStormCheck(GetCaster()));
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_murmur_thundering_storm_SpellScript::FilterTarget, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_murmur_thundering_storm_SpellScript();
}
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp
index 9e324d99879..4df80a0e15b 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp
@@ -44,7 +44,7 @@ class instance_shadow_labyrinth : public InstanceMapScript
FelOverseerCount = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -67,7 +67,7 @@ class instance_shadow_labyrinth : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -80,7 +80,7 @@ class instance_shadow_labyrinth : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -110,7 +110,7 @@ class instance_shadow_labyrinth : public InstanceMapScript
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -122,7 +122,7 @@ class instance_shadow_labyrinth : public InstanceMapScript
return 0;
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -134,7 +134,7 @@ class instance_shadow_labyrinth : public InstanceMapScript
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -145,7 +145,7 @@ class instance_shadow_labyrinth : public InstanceMapScript
return saveStream.str();
}
- void Load(char const* str) OVERRIDE
+ void Load(char const* str) override
{
if (!str)
{
@@ -183,7 +183,7 @@ class instance_shadow_labyrinth : public InstanceMapScript
uint32 FelOverseerCount;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_shadow_labyrinth_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.cpp b/src/server/scripts/Outland/BlackTemple/black_temple.cpp
index c45a1a4f391..3a33561e998 100644
--- a/src/server/scripts/Outland/BlackTemple/black_temple.cpp
+++ b/src/server/scripts/Outland/BlackTemple/black_temple.cpp
@@ -65,7 +65,7 @@ public:
{
npc_spirit_of_olumAI(Creature* creature) : ScriptedAI(creature) { }
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) OVERRIDE
+ void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) override
{
if (action == 1)
{
@@ -76,7 +76,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_spirit_of_olumAI(creature);
}
@@ -95,32 +95,34 @@ public:
{
npc_wrathbone_flayerAI(Creature* creature) : ScriptedAI(creature)
{
- instance = creature->GetInstanceScript();
+ _instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
- events.ScheduleEvent(EVENT_GET_CHANNELERS, 3000);
- enteredCombat = false;
+ _events.ScheduleEvent(EVENT_GET_CHANNELERS, 3000);
+ _enteredCombat = false;
+ _bloodmageList.clear();
+ _deathshaperList.clear();
}
- void JustDied(Unit* /*killer*/) OVERRIDE { }
+ void JustDied(Unit* /*killer*/) override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
- events.ScheduleEvent(EVENT_CLEAVE, 5000);
- events.ScheduleEvent(EVENT_IGNORED, 7000);
- enteredCombat = true;
+ _events.ScheduleEvent(EVENT_CLEAVE, 5000);
+ _events.ScheduleEvent(EVENT_IGNORED, 7000);
+ _enteredCombat = true;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
- if (!enteredCombat)
+ if (!_enteredCombat)
{
- events.Update(diff);
+ _events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
+ while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
@@ -132,7 +134,7 @@ public:
if (!BloodMageList.empty())
for (std::list<Creature*>::const_iterator itr = BloodMageList.begin(); itr != BloodMageList.end(); ++itr)
{
- bloodmage.push_back((*itr)->GetGUID());
+ _bloodmageList.push_back((*itr)->GetGUID());
if ((*itr)->isDead())
(*itr)->Respawn();
}
@@ -143,26 +145,26 @@ public:
if (!DeathShaperList.empty())
for (std::list<Creature*>::const_iterator itr = DeathShaperList.begin(); itr != DeathShaperList.end(); ++itr)
{
- deathshaper.push_back((*itr)->GetGUID());
+ _deathshaperList.push_back((*itr)->GetGUID());
if ((*itr)->isDead())
(*itr)->Respawn();
}
- events.ScheduleEvent(EVENT_SET_CHANNELERS, 3000);
+ _events.ScheduleEvent(EVENT_SET_CHANNELERS, 3000);
break;
}
case EVENT_SET_CHANNELERS:
{
- for (std::list<uint64>::const_iterator itr = bloodmage.begin(); itr != bloodmage.end(); ++itr)
- if (Creature* bloodmage = (Unit::GetCreature(*me, *itr)))
+ for (uint64 guid : _bloodmageList)
+ if (Creature* bloodmage = ObjectAccessor::GetCreature(*me, guid))
bloodmage->CastSpell((Unit*)NULL, SPELL_SUMMON_CHANNEL);
- for (std::list<uint64>::const_iterator itr = deathshaper.begin(); itr != deathshaper.end(); ++itr)
- if (Creature* deathshaper = (Unit::GetCreature(*me, *itr)))
+ for (uint64 guid : _deathshaperList)
+ if (Creature* deathshaper = ObjectAccessor::GetCreature(*me, guid))
deathshaper->CastSpell((Unit*)NULL, SPELL_SUMMON_CHANNEL);
- events.ScheduleEvent(EVENT_SET_CHANNELERS, 12000);
+ _events.ScheduleEvent(EVENT_SET_CHANNELERS, 12000);
break;
}
@@ -175,20 +177,20 @@ public:
if (!UpdateVictim())
return;
- events.Update(diff);
+ _events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
+ while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_CLEAVE:
DoCastVictim(SPELL_CLEAVE);
- events.ScheduleEvent(EVENT_CLEAVE, urand (1000, 2000));
+ _events.ScheduleEvent(EVENT_CLEAVE, urand (1000, 2000));
break;
case EVENT_IGNORED:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_IGNORED);
- events.ScheduleEvent(EVENT_IGNORED, 10000);
+ _events.ScheduleEvent(EVENT_IGNORED, 10000);
break;
default:
break;
@@ -198,14 +200,14 @@ public:
}
private:
- InstanceScript* instance;
- EventMap events;
- std::list<uint64> bloodmage;
- std::list<uint64> deathshaper;
- bool enteredCombat;
- };
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ InstanceScript* _instance;
+ EventMap _events;
+ std::list<uint64> _bloodmageList;
+ std::list<uint64> _deathshaperList;
+ bool _enteredCombat;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_wrathbone_flayerAI>(creature);
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp b/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp
index a6a16f83a26..f03caa37cb2 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp
@@ -17,14 +17,14 @@
*/
/* ScriptData
-SDName: Boss_Bloodboil
-SD%Complete: 80
-SDComment: Bloodboil not working correctly, missing enrage
-SDCategory: Black Temple
+Name: Boss_Bloodboil
+Complete: 80
+Category: Black Temple
EndScriptData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "SpellScript.h"
#include "black_temple.h"
enum Bloodboil
@@ -54,15 +54,12 @@ enum Bloodboil
SPELL_BERSERK = 45078
};
-
-//This is used to sort the players by distance in preparation for the Bloodboil cast.
-
class boss_gurtogg_bloodboil : public CreatureScript
{
public:
boss_gurtogg_bloodboil() : CreatureScript("boss_gurtogg_bloodboil") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_gurtogg_bloodboilAI>(creature);
}
@@ -93,7 +90,7 @@ public:
bool Phase1;
- void Reset() OVERRIDE
+ void Reset() override
{
instance->SetBossState(DATA_GURTOGG_BLOODBOIL, NOT_STARTED);
@@ -118,73 +115,28 @@ public:
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, false);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
Talk(SAY_AGGRO);
instance->SetBossState(DATA_GURTOGG_BLOODBOIL, IN_PROGRESS);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetBossState(DATA_GURTOGG_BLOODBOIL, DONE);
Talk(SAY_DEATH);
}
- // Note: This seems like a very complicated fix. The fix needs to be handled by the core, as implementation of limited-target AoE spells are still not limited.
- void CastBloodboil()
- {
- // Get the Threat List
- std::list<HostileReference*> m_threatlist = me->getThreatManager().getThreatList();
-
- if (m_threatlist.empty()) // He doesn't have anyone in his threatlist, useless to continue
- return;
-
- std::list<Unit*> targets;
- std::list<HostileReference*>::const_iterator itr = m_threatlist.begin();
- for (; itr!= m_threatlist.end(); ++itr) //store the threat list in a different container
- {
- Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid());
- //only on alive players
- if (target && target->IsAlive() && target->GetTypeId() == TYPEID_PLAYER)
- targets.push_back(target);
- }
-
- //Sort the list of players
- targets.sort(Trinity::ObjectDistanceOrderPred(me, false));
- //Resize so we only get top 5
- targets.resize(5);
-
- //Aura each player in the targets list with Bloodboil. Aura code copied+pasted from Aura command in Level3.cpp
- /*SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_BLOODBOIL);
- if (spellInfo)
- {
- for (std::list<Unit*>::const_iterator itr = targets.begin(); itr != targets.end(); ++itr)
- {
- Unit* target = *itr;
- if (!target) return;
- for (uint32 i = 0; i<3; ++i)
- {
- uint8 eff = spellInfo->Effect[i];
- if (eff >= TOTAL_SPELL_EFFECTS)
- continue;
-
- Aura* Aur = new Aura(spellInfo, i, target, target, target);
- target->AddAura(Aur);
- }
- }
- }*/
- }
-
void RevertThreatOnTarget(uint64 guid)
{
- if (Unit* unit = Unit::GetUnit(*me, guid))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, guid))
{
if (DoGetThreat(unit))
DoModifyThreatPercent(unit, -100);
@@ -193,7 +145,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -247,8 +199,7 @@ public:
{
if (BloodboilCount < 5) // Only cast it five times.
{
- //CastBloodboil(); // Causes issues on windows, so is commented out.
- DoCastVictim(SPELL_BLOODBOIL);
+ DoCastAOE(SPELL_BLOODBOIL);
++BloodboilCount;
BloodboilTimer = 10000*BloodboilCount;
}
@@ -274,7 +225,7 @@ public:
{
if (Phase1)
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
{
Phase1 = false;
@@ -327,7 +278,41 @@ public:
};
+// 42005 - Bloodboil
+class spell_gurtogg_bloodboil_bloodboil : public SpellScriptLoader
+{
+ public:
+ spell_gurtogg_bloodboil_bloodboil() : SpellScriptLoader("spell_gurtogg_bloodboil_bloodboil") { }
+
+ class spell_gurtogg_bloodboil_bloodboil_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_gurtogg_bloodboil_bloodboil_SpellScript);
+
+ void FilterTargets(std::list<WorldObject*>& targets)
+ {
+ if (targets.size() <= 5)
+ return;
+
+ // Sort the list of players
+ targets.sort(Trinity::ObjectDistanceOrderPred(GetCaster(), false));
+ // Resize so we only get top 5
+ targets.resize(5);
+ }
+
+ void Register() override
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_gurtogg_bloodboil_bloodboil_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_gurtogg_bloodboil_bloodboil_SpellScript();
+ }
+};
+
void AddSC_boss_gurtogg_bloodboil()
{
new boss_gurtogg_bloodboil();
+ new spell_gurtogg_bloodboil_bloodboil();
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
index d74aecb9b25..08fc588e923 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
@@ -379,14 +379,14 @@ public:
{
flame_of_azzinothAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
FlameBlastTimer = 15000;
CheckTimer = 5000;
GlaiveGUID = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
}
@@ -431,7 +431,7 @@ public:
GlaiveGUID = guid;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -460,7 +460,7 @@ public:
uint64 GlaiveGUID;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new flame_of_azzinothAI(creature);
}
@@ -481,11 +481,11 @@ public:
AkamaGUID = 0;
}
- void Reset() OVERRIDE;
+ void Reset() override;
- void JustSummoned(Creature* summon) OVERRIDE;
+ void JustSummoned(Creature* summon) override;
- void SummonedCreatureDespawn(Creature* summon) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summon) override
{
if (summon->GetCreatureTemplate()->Entry == FLAME_OF_AZZINOTH)
{
@@ -502,7 +502,7 @@ public:
Summons.Despawn(summon);
}
- void MovementInform(uint32 /*MovementType*/, uint32 /*Data*/) OVERRIDE
+ void MovementInform(uint32 /*MovementType*/, uint32 /*Data*/) override
{
if (FlightCount == 7) // change hover point
{
@@ -517,13 +517,13 @@ public:
Timer[EVENT_FLIGHT_SEQUENCE] = 1000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
me->setActive(true);
DoZoneInCombat();
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who || Phase >= PHASE_TALK_SEQUENCE)
return;
@@ -534,10 +534,10 @@ public:
ScriptedAI::AttackStart(who);
}
- void MoveInLineOfSight(Unit*) OVERRIDE { }
+ void MoveInLineOfSight(Unit*) override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -547,7 +547,7 @@ public:
instance->HandleGameObject(instance->GetData64(i), true);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -555,7 +555,7 @@ public:
Talk(SAY_ILLIDAN_KILL);
}
- void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* done_by, uint32 &damage) override
{
if (damage >= me->GetHealth() && done_by != me)
damage = 0;
@@ -563,7 +563,7 @@ public:
done_by->AddThreat(me, -(3*(float)damage)/4); // do not let maiev tank him
}
- void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
if (spell->Id == SPELL_GLAIVE_RETURNS) // Re-equip our warblades!
{
@@ -596,9 +596,9 @@ public:
if (Conversation[count].creature == ILLIDAN_STORMRAGE)
creature = me;
else if (Conversation[count].creature == AKAMA)
- creature = (Unit::GetCreature((*me), AkamaGUID));
+ creature = (ObjectAccessor::GetCreature((*me), AkamaGUID));
else if (Conversation[count].creature == MAIEV_SHADOWSONG)
- creature = (Unit::GetCreature((*me), MaievGUID));
+ creature = (ObjectAccessor::GetCreature((*me), MaievGUID));
if (creature)
{
@@ -637,7 +637,7 @@ public:
break;
case PHASE_FLIGHT:
Timer[EVENT_FIREBALL] = 1000;
- if (!(rand()%4))
+ if (!(rand32() % 4))
Timer[EVENT_DARK_BARRAGE] = 10000;
Timer[EVENT_EYE_BLAST] = urand(10, 25) * 1000;
Timer[EVENT_MOVE_POINT] = urand(20, 40) * 1000;
@@ -747,7 +747,7 @@ public:
flame->setFaction(me->getFaction()); // Just in case the database has it as a different faction
flame->SetMeleeDamageSchool(SPELL_SCHOOL_FIRE);
FlameGUID[i] = flame->GetGUID(); // Record GUID in order to check if they're dead later on to move to the next phase
- CAST_AI(npc_flame_of_azzinoth::flame_of_azzinothAI, flame->AI())->SetGlaiveGUID(GlaiveGUID[i]);
+ ENSURE_AI(npc_flame_of_azzinoth::flame_of_azzinothAI, flame->AI())->SetGlaiveGUID(GlaiveGUID[i]);
glaive->CastSpell(flame, SPELL_AZZINOTH_CHANNEL, false); // Glaives do some random Beam type channel on it.
}
}
@@ -831,7 +831,7 @@ public:
{
if (GlaiveGUID[i])
{
- Unit* Glaive = Unit::GetUnit(*me, GlaiveGUID[i]);
+ Unit* Glaive = ObjectAccessor::GetUnit(*me, GlaiveGUID[i]);
if (Glaive)
{
Glaive->CastSpell(me, SPELL_GLAIVE_RETURNS, false); // Make it look like the Glaive flies back up to us
@@ -917,7 +917,7 @@ public:
++TransformCount;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if ((!UpdateVictim()) && Phase < PHASE_TALK_SEQUENCE)
return;
@@ -993,7 +993,7 @@ public:
case EVENT_SHEAR:
// no longer exists in 3.0f.2
// DoCastVictim(SPELL_SHEAR);
- Timer[EVENT_SHEAR] = 25000 + (rand()%16 * 1000);
+ Timer[EVENT_SHEAR] = 25000 + (rand32() % 16 * 1000);
break;
case EVENT_FLAME_CRASH:
@@ -1062,7 +1062,7 @@ public:
case EVENT_MOVE_POINT:
Phase = PHASE_FLIGHT_SEQUENCE;
Timer[EVENT_FLIGHT_SEQUENCE] = 0; // do not start Event when changing hover point
- HoverPoint += (rand()%3 + 1);
+ HoverPoint += (rand32() % 3 + 1);
if (HoverPoint > 3)
HoverPoint -= 4;
me->GetMotionMaster()->MovePoint(0, HoverPosition[HoverPoint].x, HoverPosition[HoverPoint].y, HoverPosition[HoverPoint].z);
@@ -1121,7 +1121,7 @@ public:
SummonList Summons;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_illidan_stormrageAI>(creature);
}
@@ -1139,7 +1139,7 @@ public:
{
boss_maievAI(Creature* creature) : ScriptedAI(creature) { };
- void Reset() OVERRIDE
+ void Reset() override
{
MaxTimer = 0;
Phase = PHASE_NORMAL_MAIEV;
@@ -1151,17 +1151,17 @@ public:
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, 45738);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void EnterEvadeMode() OVERRIDE { }
+ void EnterEvadeMode() override { }
void GetIllidanGUID(uint64 guid)
{
IllidanGUID = guid;
}
- void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* done_by, uint32 &damage) override
{
if (done_by->GetGUID() != IllidanGUID)
damage = 0;
@@ -1176,7 +1176,7 @@ public:
}
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who || Timer[EVENT_MAIEV_STEALTH])
return;
@@ -1194,7 +1194,7 @@ public:
ScriptedAI::AttackStart(who);
}
- void DoAction(int32 param) OVERRIDE
+ void DoAction(int32 param) override
{
if (param > PHASE_ILLIDAN_NULL && param < PHASE_ILLIDAN_MAX)
EnterPhase(PhaseIllidan(param));
@@ -1254,7 +1254,7 @@ public:
if (!target || !me->IsWithinDistInMap(target, 80) || illidan->IsWithinDistInMap(target, 20))
{
- uint8 pos = rand()%4;
+ uint8 pos = rand32() % 4;
BlinkTo(HoverPosition[pos].x, HoverPosition[pos].y, HoverPosition[pos].z);
}
else
@@ -1266,7 +1266,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if ((!UpdateVictim())
&& !Timer[EVENT_MAIEV_STEALTH])
@@ -1325,7 +1325,7 @@ public:
me->SetVisible(false);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
if (Creature* illidan = ObjectAccessor::GetCreature(*me, IllidanGUID))
- CAST_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->DeleteFromThreatList(me->GetGUID());
+ ENSURE_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->DeleteFromThreatList(me->GetGUID());
me->AttackStop();
Timer[EVENT_MAIEV_STEALTH] = 60000; // reappear after 1 minute
MaxTimer = 1;
@@ -1343,7 +1343,7 @@ public:
uint32 MaxTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_maievAI(creature);
}
@@ -1362,7 +1362,7 @@ public:
JustCreated = true;
}
- void Reset() OVERRIDE
+ void Reset() override
{
WalkCount = 0;
instance->SetBossState(DATA_ILLIDAN_STORMRAGE, NOT_STARTED);
@@ -1408,24 +1408,24 @@ public:
}
// Do not call reset in Akama's evade mode, as this will stop him from summoning minions after he kills the first bit
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
me->RemoveAllAuras();
me->DeleteThreatList();
me->CombatStop(true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void MovementInform(uint32 MovementType, uint32 /*Data*/) OVERRIDE
+ void MovementInform(uint32 MovementType, uint32 /*Data*/) override
{
if (MovementType == POINT_MOTION_TYPE)
Timer = 1;
}
- void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* done_by, uint32 &damage) override
{
if (damage > me->GetHealth() || done_by->GetGUID() != IllidanGUID)
damage = 0;
@@ -1437,7 +1437,7 @@ public:
std::vector<Unit*> eliteList;
for (ThreatContainer::StorageType::const_iterator itr = threatList.begin(); itr != threatList.end(); ++itr)
{
- Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (unit && unit->GetEntry() == ILLIDARI_ELITE)
eliteList.push_back(unit);
}
@@ -1458,8 +1458,8 @@ public:
illidan->SetInFront(me);
me->GetMotionMaster()->MoveIdle();
illidan->GetMotionMaster()->MoveIdle();
- CAST_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->AkamaGUID = me->GetGUID();
- CAST_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->EnterPhase(PHASE_TALK_SEQUENCE);
+ ENSURE_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->AkamaGUID = me->GetGUID();
+ ENSURE_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->EnterPhase(PHASE_TALK_SEQUENCE);
}
}
@@ -1512,7 +1512,7 @@ public:
else if (Phase == PHASE_TALK)
{
if (Creature* illidan = ObjectAccessor::GetCreature(*me, IllidanGUID))
- CAST_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->DeleteFromThreatList(me->GetGUID());
+ ENSURE_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->DeleteFromThreatList(me->GetGUID());
EnterEvadeMode();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
++WalkCount;
@@ -1566,7 +1566,7 @@ public:
case 0:
if (Creature* illidan = ObjectAccessor::GetCreature(*me, IllidanGUID))
{
- CAST_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->Timer[EVENT_TAUNT] += 30000;
+ ENSURE_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->Timer[EVENT_TAUNT] += 30000;
illidan->AI()->Talk(SAY_ILLIDAN_MINION);
}
Timer = 8000;
@@ -1588,9 +1588,9 @@ public:
Unit* Spirit[2] = { NULL, NULL };
if (ChannelCount <= 5)
{
- Channel = Unit::GetUnit(*me, ChannelGUID);
- Spirit[0] = Unit::GetUnit(*me, SpiritGUID[0]);
- Spirit[1] = Unit::GetUnit(*me, SpiritGUID[1]);
+ Channel = ObjectAccessor::GetUnit(*me, ChannelGUID);
+ Spirit[0] = ObjectAccessor::GetUnit(*me, SpiritGUID[0]);
+ Spirit[1] = ObjectAccessor::GetUnit(*me, SpiritGUID[1]);
if (!Channel || !Spirit[0] || !Spirit[1])
return;
}
@@ -1666,7 +1666,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!me->IsVisible())
{
@@ -1720,7 +1720,7 @@ public:
{
float x, y, z;
me->GetPosition(x, y, z);
- Creature* Elite = me->SummonCreature(ILLIDARI_ELITE, x+rand()%10, y+rand()%10, z, 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 30000);
+ Creature* Elite = me->SummonCreature(ILLIDARI_ELITE, x + rand32() % 10, y + rand32() % 10, z, 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 30000);
// Creature* Elite = me->SummonCreature(ILLIDARI_ELITE, x, y, z, 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 30000);
if (Elite)
{
@@ -1749,7 +1749,7 @@ public:
DoMeleeAttackIfReady();
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE
+ void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
{
player->CLOSE_GOSSIP_MENU();
EnterPhase(PHASE_CHANNEL);
@@ -1772,7 +1772,7 @@ public:
uint32 Check_Timer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_akama_illidanAI>(creature);
}
@@ -1849,7 +1849,7 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::JustSummoned(Creature* su
summon->SetVisible(false); // Leave her invisible until she has to talk
summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
MaievGUID = summon->GetGUID();
- CAST_AI(boss_maiev_shadowsong::boss_maievAI, summon->AI())->GetIllidanGUID(me->GetGUID());
+ ENSURE_AI(boss_maiev_shadowsong::boss_maievAI, summon->AI())->GetIllidanGUID(me->GetGUID());
summon->AI()->DoAction(PHASE_TALK_SEQUENCE);
}
break;
@@ -1881,7 +1881,7 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::HandleTalkSequence()
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
me->AddThreat(akama, 100.0f);
- CAST_AI(npc_akama_illidan::npc_akama_illidanAI, akama->AI())->EnterPhase(PHASE_FIGHT_ILLIDAN);
+ ENSURE_AI(npc_akama_illidan::npc_akama_illidanAI, akama->AI())->EnterPhase(PHASE_FIGHT_ILLIDAN);
EnterPhase(PHASE_NORMAL);
}
break;
@@ -1957,7 +1957,7 @@ public:
{
cage_trap_triggerAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
IllidanGUID = 0;
@@ -1969,9 +1969,9 @@ public:
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!Active)
@@ -1996,7 +1996,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (DespawnTimer)
{
@@ -2007,7 +2007,7 @@ public:
// if (IllidanGUID && !SummonedBeams)
// {
- // if (Unit* Illidan = Unit::GetUnit(*me, IllidanGUID)
+ // if (Unit* Illidan = ObjectAccessor::GetUnit(*me, IllidanGUID)
// {
// /// @todo Find proper spells and properly apply 'caged' Illidan effect
// }
@@ -2022,7 +2022,7 @@ public:
bool SummonedBeams;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new cage_trap_triggerAI(creature);
}
@@ -2033,14 +2033,14 @@ class gameobject_cage_trap : public GameObjectScript
public:
gameobject_cage_trap() : GameObjectScript("gameobject_cage_trap") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
float x, y, z;
player->GetPosition(x, y, z);
// Grid search for nearest live Creature of entry 23304 within 10 yards
if (Creature* pTrigger = go->FindNearestCreature(23304, 10.0f))
- CAST_AI(npc_cage_trap_trigger::cage_trap_triggerAI, pTrigger->AI())->Active = true;
+ ENSURE_AI(npc_cage_trap_trigger::cage_trap_triggerAI, pTrigger->AI())->Active = true;
go->SetGoState(GO_STATE_ACTIVE);
return true;
}
@@ -2055,34 +2055,34 @@ public:
{
shadow_demonAI(Creature* creature) : ScriptedAI(creature) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
}
- void Reset() OVERRIDE
+ void Reset() override
{
TargetGUID = 0;
DoCast(me, SPELL_SHADOW_DEMON_PASSIVE, true);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
- if (Unit* target = Unit::GetUnit(*me, TargetGUID))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, TargetGUID))
target->RemoveAurasDueToSpell(SPELL_PARALYZE);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
- if (!UpdateVictim())
+ if (!UpdateVictim() || !me->GetVictim())
return;
- if (me->GetVictim()->GetTypeId() != TYPEID_PLAYER)
+ if (me->EnsureVictim()->GetTypeId() != TYPEID_PLAYER)
return; // Only cast the below on players.
- if (!me->GetVictim()->HasAura(SPELL_PARALYZE))
+ if (!me->EnsureVictim()->HasAura(SPELL_PARALYZE))
{
- TargetGUID = me->GetVictim()->GetGUID();
+ TargetGUID = me->EnsureVictim()->GetGUID();
me->AddThreat(me->GetVictim(), 10000000.0f);
DoCastVictim(SPELL_PURPLE_BEAM, true);
DoCastVictim(SPELL_PARALYZE, true);
@@ -2096,7 +2096,7 @@ public:
uint64 TargetGUID;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new shadow_demonAI(creature);
}
@@ -2111,14 +2111,14 @@ public:
{
blade_of_azzinothAI(Creature* creature) : NullCreatureAI(creature) { }
- void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
if (spell->Id == SPELL_THROW_GLAIVE2 || spell->Id == SPELL_THROW_GLAIVE)
me->SetDisplayId(MODEL_BLADE);// appear when hit by Illidan's glaive
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new blade_of_azzinothAI(creature);
}
@@ -2137,7 +2137,7 @@ public:
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
IllidanGUID = instance->GetData64(DATA_ILLIDAN_STORMRAGE);
@@ -2145,7 +2145,7 @@ public:
DoCast(me, SPELL_SHADOWFIEND_PASSIVE, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
}
@@ -2154,11 +2154,11 @@ public:
{
if (me->isAttackReady() && me->IsWithinMeleeRange(me->GetVictim()))
{
- if (!me->GetVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND)
- && !me->GetVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND2))
+ if (!me->EnsureVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND)
+ && !me->EnsureVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND2))
{
- if (Creature* illidan = Unit::GetCreature((*me), IllidanGUID))// summon only in 1. phase
- if (CAST_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->Phase == PHASE_NORMAL)
+ if (Creature* illidan = ObjectAccessor::GetCreature((*me), IllidanGUID))// summon only in 1. phase
+ if (ENSURE_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->Phase == PHASE_NORMAL)
me->CastSpell(me->GetVictim(), SPELL_PARASITIC_SHADOWFIEND2, true, 0, 0, IllidanGUID); // do not stack
}
me->AttackerStateUpdate(me->GetVictim());
@@ -2166,7 +2166,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!me->GetVictim())
{
@@ -2202,7 +2202,7 @@ public:
uint32 CheckTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_parasitic_shadowfiendAI>(creature);
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
index 7081607e755..3415451fef5 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
@@ -82,7 +82,7 @@ class boss_mother_shahraz : public CreatureScript
public:
boss_mother_shahraz() : CreatureScript("boss_mother_shahraz") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_shahrazAI>(creature);
}
@@ -111,7 +111,7 @@ public:
bool Enraged;
- void Reset() OVERRIDE
+ void Reset() override
{
instance->SetBossState(DATA_MOTHER_SHAHRAZ, NOT_STARTED);
@@ -133,7 +133,7 @@ public:
Enraged = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
instance->SetBossState(DATA_MOTHER_SHAHRAZ, IN_PROGRESS);
@@ -141,12 +141,12 @@ public:
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetBossState(DATA_MOTHER_SHAHRAZ, DONE);
@@ -155,7 +155,7 @@ public:
void TeleportPlayers()
{
- uint32 random = rand()%7;
+ uint32 random = rand32() % 7;
float X = TeleportPoint[random].x;
float Y = TeleportPoint[random].y;
float Z = TeleportPoint[random].z;
@@ -171,7 +171,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -211,14 +211,14 @@ public:
uint32 Beam = CurrentBeam;
if (BeamCount > 3)
while (CurrentBeam == Beam)
- CurrentBeam = rand()%3;
+ CurrentBeam = rand32() % 3;
} else BeamTimer -= diff;
// Random Prismatic Shield every 15 seconds.
if (PrismaticShieldTimer <= diff)
{
- uint32 random = rand()%6;
+ uint32 random = rand32() % 6;
if (PrismaticAuras[random])
DoCast(me, PrismaticAuras[random]);
PrismaticShieldTimer = 15000;
@@ -245,7 +245,7 @@ public:
{
if (TargetGUID[i])
{
- if (Unit* unit = Unit::GetUnit(*me, TargetGUID[i]))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, TargetGUID[i]))
unit->CastSpell(unit, SPELL_ATTRACTION, true);
TargetGUID[i] = 0;
}
@@ -264,13 +264,13 @@ public:
if (ShriekTimer <= diff)
{
DoCastVictim(SPELL_SILENCING_SHRIEK);
- ShriekTimer = 25000+rand()%10 * 1000;
+ ShriekTimer = 25000 + rand32() % 10 * 1000;
} else ShriekTimer -= diff;
if (SaberTimer <= diff)
{
DoCastVictim(SPELL_SABER_LASH);
- SaberTimer = 25000+rand()%10 * 1000;
+ SaberTimer = 25000 + rand32() % 10 * 1000;
} else SaberTimer -= diff;
//Enrage
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 d92d8aaf5db..f3c8af50328 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
@@ -104,7 +104,7 @@ class npc_enslaved_soul : public CreatureScript
public:
npc_enslaved_soul() : CreatureScript("npc_enslaved_soul") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_enslaved_soulAI(creature);
}
@@ -115,15 +115,15 @@ public:
uint64 ReliquaryGUID;
- void Reset() OVERRIDE { ReliquaryGUID = 0; }
+ void Reset() override { ReliquaryGUID = 0; }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoCast(me, ENSLAVED_SOUL_PASSIVE, true);
DoZoneInCombat();
}
- void JustDied(Unit* /*killer*/) OVERRIDE;
+ void JustDied(Unit* /*killer*/) override;
};
};
@@ -132,7 +132,7 @@ class boss_reliquary_of_souls : public CreatureScript
public:
boss_reliquary_of_souls() : CreatureScript("boss_reliquary_of_souls") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_reliquary_of_soulsAI>(creature);
}
@@ -156,7 +156,7 @@ public:
uint32 SoulCount;
uint32 SoulDeathCount;
- void Reset() OVERRIDE
+ void Reset() override
{
instance->SetBossState(DATA_RELIQUARY_OF_SOULS, NOT_STARTED);
@@ -175,7 +175,7 @@ public:
me->RemoveAurasDueToSpell(SPELL_SUBMERGE);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!who)
return;
@@ -192,7 +192,7 @@ public:
AttackStartNoMove(who);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
me->AddThreat(who, 10000.0f);
DoZoneInCombat();
@@ -205,7 +205,7 @@ public:
bool SummonSoul()
{
- uint32 random = rand()%6;
+ uint32 random = rand32() % 6;
float x = Coords[random].x;
float y = Coords[random].y;
@@ -215,7 +215,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
- CAST_AI(npc_enslaved_soul::npc_enslaved_soulAI, Soul->AI())->ReliquaryGUID = me->GetGUID();
+ ENSURE_AI(npc_enslaved_soul::npc_enslaved_soulAI, Soul->AI())->ReliquaryGUID = me->GetGUID();
Soul->AI()->AttackStart(target);
} else EnterEvadeMode();
return true;
@@ -229,7 +229,7 @@ public:
ThreatContainer::StorageType threatlist = target->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
{
- Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (unit)
{
DoModifyThreatPercent(unit, -100);
@@ -239,12 +239,12 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetBossState(DATA_RELIQUARY_OF_SOULS, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!Phase)
return;
@@ -258,7 +258,7 @@ public:
Creature* Essence = NULL;
if (EssenceGUID)
{
- Essence = Unit::GetCreature(*me, EssenceGUID);
+ Essence = ObjectAccessor::GetCreature(*me, EssenceGUID);
if (!Essence)
{
EnterEvadeMode();
@@ -378,8 +378,8 @@ public:
void npc_enslaved_soul::npc_enslaved_soulAI::JustDied(Unit* /*killer*/)
{
if (ReliquaryGUID)
- if (Creature* Reliquary = (Unit::GetCreature((*me), ReliquaryGUID)))
- ++(CAST_AI(boss_reliquary_of_souls::boss_reliquary_of_soulsAI, Reliquary->AI())->SoulDeathCount);
+ if (Creature* Reliquary = (ObjectAccessor::GetCreature((*me), ReliquaryGUID)))
+ ++(ENSURE_AI(boss_reliquary_of_souls::boss_reliquary_of_soulsAI, Reliquary->AI())->SoulDeathCount);
DoCast(me, SPELL_SOUL_RELEASE, true);
}
@@ -389,7 +389,7 @@ class boss_essence_of_suffering : public CreatureScript
public:
boss_essence_of_suffering() : CreatureScript("boss_essence_of_suffering") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_essence_of_sufferingAI(creature);
}
@@ -406,7 +406,7 @@ public:
uint32 SoulDrainTimer;
uint32 AuraTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
StatAuraGUID = 0;
@@ -417,7 +417,7 @@ public:
AuraTimer = 5000;
}
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
if (damage >= me->GetHealth())
{
@@ -428,7 +428,7 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (!me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
{
@@ -440,7 +440,7 @@ public:
}
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SUFF_SAY_SLAY);
}
@@ -454,7 +454,7 @@ public:
ThreatContainer::StorageType::const_iterator itr = threatlist.begin();
for (; itr != threatlist.end(); ++itr)
{
- Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (unit && unit->IsAlive() && (unit->GetTypeId() == TYPEID_PLAYER)) // Only alive players
targets.push_back(unit);
}
@@ -469,7 +469,7 @@ public:
me->AddThreat(target, 1000000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (me->IsInCombat())
{
@@ -478,7 +478,7 @@ public:
{
CastFixate();
FixateTimer = 5000;
- if (!(rand()%16))
+ if (!(rand32() % 16))
{
Talk(SUFF_SAY_AGGRO);
}
@@ -512,7 +512,7 @@ class boss_essence_of_desire : public CreatureScript
public:
boss_essence_of_desire() : CreatureScript("boss_essence_of_desire") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_essence_of_desireAI(creature);
}
@@ -525,7 +525,7 @@ public:
uint32 DeadenTimer;
uint32 SoulShockTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
RuneShieldTimer = 60000;
DeadenTimer = 30000;
@@ -533,7 +533,7 @@ public:
me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_CONFUSE, true);
}
- void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* done_by, uint32 &damage) override
{
if (done_by == me)
return;
@@ -552,7 +552,7 @@ public:
}
}
- void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
if (me->GetCurrentSpell(CURRENT_GENERIC_SPELL))
for (uint8 i = 0; i < 3; ++i)
@@ -562,19 +562,19 @@ public:
me->InterruptSpell(CURRENT_GENERIC_SPELL, false);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(DESI_SAY_FREED);
DoZoneInCombat();
DoCast(me, AURA_OF_DESIRE, true);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(DESI_SAY_SLAY);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -599,7 +599,7 @@ public:
me->InterruptNonMeleeSpells(false);
DoCastVictim(SPELL_DEADEN);
DeadenTimer = urand(25000, 35000);
- if (!(rand()%2))
+ if (!(rand32() % 2))
{
Talk(DESI_SAY_SPEC);
}
@@ -615,7 +615,7 @@ class boss_essence_of_anger : public CreatureScript
public:
boss_essence_of_anger() : CreatureScript("boss_essence_of_anger") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_essence_of_angerAI(creature);
}
@@ -634,7 +634,7 @@ public:
bool CheckedAggro;
- void Reset() OVERRIDE
+ void Reset() override
{
AggroTargetGUID = 0;
@@ -647,7 +647,7 @@ public:
CheckedAggro = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(ANGER_SAY_FREED);
@@ -655,35 +655,35 @@ public:
DoCast(me, AURA_OF_ANGER, true);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(ANGER_SAY_DEATH);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(ANGER_SAY_SLAY);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
- if (!UpdateVictim())
+ if (!UpdateVictim() || !me->GetVictim())
return;
if (!CheckedAggro)
{
- AggroTargetGUID = me->GetVictim()->GetGUID();
+ AggroTargetGUID = me->EnsureVictim()->GetGUID();
CheckedAggro = true;
}
if (CheckTankTimer <= diff)
{
- if (me->GetVictim()->GetGUID() != AggroTargetGUID)
+ if (me->EnsureVictim()->GetGUID() != AggroTargetGUID)
{
Talk(ANGER_SAY_BEFORE);
DoCast(me, SPELL_SELF_SEETHE, true);
- AggroTargetGUID = me->GetVictim()->GetGUID();
+ AggroTargetGUID = me->EnsureVictim()->GetGUID();
}
CheckTankTimer = 2000;
} else CheckTankTimer -= diff;
@@ -692,7 +692,7 @@ public:
{
DoCastVictim(SPELL_SOUL_SCREAM);
SoulScreamTimer = urand(9000, 11000);
- if (!(rand()%3))
+ if (!(rand32() % 3))
{
Talk(ANGER_SAY_SPEC);
}
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 48d1af27649..f1e170c0705 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
@@ -171,7 +171,7 @@ public:
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
- void Reset() OVERRIDE
+ void Reset() override
{
if (!HasKilledAkamaAndReseting)
{
@@ -196,14 +196,14 @@ public:
HasKilledAkamaAndReseting = false;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetBossState(DATA_SHADE_OF_AKAMA, DONE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
{
@@ -215,7 +215,7 @@ public:
ScriptedAI::AttackStart(who);
}
- void SetData(uint32 data, uint32 value) OVERRIDE
+ void SetData(uint32 data, uint32 value) override
{
if (data == SETDATA_DATA && value == SETDATA_CHANNELER_DIED)
me->RemoveAuraFromStack(SPELL_SHADE_SOUL_CHANNEL_2);
@@ -223,7 +223,7 @@ public:
UpdateSpeed();
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_AKAMA_SOUL_CHANNEL)
{
@@ -244,8 +244,8 @@ public:
if (me->GetAuraCount(SPELL_SHADE_SOUL_CHANNEL_2) <= 3)
{
- moveSpeed = (2.0 - (0.6 * me->GetAuraCount(SPELL_SHADE_SOUL_CHANNEL_2)));
- me->SetSpeed(MOVE_WALK, moveSpeed / 2.5);
+ moveSpeed = (2.0f - (0.6f * me->GetAuraCount(SPELL_SHADE_SOUL_CHANNEL_2)));
+ me->SetSpeed(MOVE_WALK, moveSpeed / 2.5f);
me->SetSpeed(MOVE_RUN, (moveSpeed * 2) / 7);
me->ClearUnitState(UNIT_STATE_ROOT);
}
@@ -253,7 +253,7 @@ public:
me->AddUnitState(UNIT_STATE_ROOT);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (HasKilledAkamaAndReseting)
return;
@@ -402,7 +402,7 @@ public:
bool HasKilledAkamaAndReseting;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_shade_of_akamaAI>(creature);
}
@@ -424,7 +424,7 @@ public:
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->setFaction(FACTION_FRIENDLY);
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
@@ -435,16 +435,16 @@ public:
ShadeHasDied = false;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* Shade = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADE_OF_AKAMA)))
if (Shade->IsAlive())
- CAST_AI(boss_shade_of_akama::boss_shade_of_akamaAI, Shade->AI())->HasKilledAkama = true;
+ ENSURE_AI(boss_shade_of_akama::boss_shade_of_akamaAI, Shade->AI())->HasKilledAkama = true;
me->GetMotionMaster()->Clear(true);
me->GetMotionMaster()->MoveIdle();
}
- void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_THREAT && !StartCombat)
{
@@ -457,13 +457,13 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 2000);
events.ScheduleEvent(EVENT_DESTRUCTIVE_POISON, 5000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (StartChannel)
{
@@ -524,7 +524,7 @@ public:
DoMeleeAttackIfReady();
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) OVERRIDE
+ void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) override
{
if (action == 0)
{
@@ -544,7 +544,7 @@ public:
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_akamaAI>(creature);
}
@@ -566,7 +566,7 @@ public:
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true);
@@ -575,16 +575,16 @@ public:
events.ScheduleEvent(EVENT_CHANNEL, 2000);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* Shade = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADE_OF_AKAMA)))
Shade->AI()->SetData(SETDATA_DATA, SETDATA_CHANNELER_DIED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void AttackStart(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -616,7 +616,7 @@ public:
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ashtongue_channelerAI>(creature);
}
@@ -638,7 +638,7 @@ public:
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
Summons.DespawnAll();
@@ -649,12 +649,12 @@ public:
leftSide = true;
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
Summons.Summon(summon);
}
- void SetData(uint32 data, uint32 value) OVERRIDE
+ void SetData(uint32 data, uint32 value) override
{
if (data == SETDATA_DATA)
{
@@ -687,7 +687,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (doSpawning)
{
@@ -724,7 +724,7 @@ public:
bool doSpawning;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_creature_generator_akamaAI>(creature);
}
@@ -747,7 +747,7 @@ public:
startedBanishing = false;
}
- void Reset() OVERRIDE
+ void Reset() override
{
if (!startedBanishing)
{
@@ -768,29 +768,29 @@ public:
switchToCombat = false;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* Shade = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADE_OF_AKAMA)))
Shade->AI()->SetData(SETDATA_DATA, SETDATA_CHANNELER_DIED);
me->DespawnOrUnsummon(5000);
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
- if (Creature* summoner = (Unit::GetCreature((*me), summonerGuid)))
- CAST_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
+ if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid)))
+ ENSURE_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!switchToCombat)
return;
ScriptedAI::AttackStart(who);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -846,7 +846,7 @@ public:
bool switchToCombat;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ashtongue_sorcererAI>(creature);
}
@@ -868,7 +868,7 @@ public:
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
summonerGuid = 0;
@@ -876,18 +876,18 @@ public:
AttackStart(target);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->DespawnOrUnsummon(5000);
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
- if (Creature* summoner = (Unit::GetCreature((*me), summonerGuid)))
- CAST_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
+ if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid)))
+ ENSURE_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_HEROIC_STRIKE, 5000);
events.ScheduleEvent(EVENT_SHIELD_BASH, urand(10000, 16000));
@@ -895,7 +895,7 @@ public:
events.ScheduleEvent(EVENT_WINDFURY, urand(8000, 12000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -936,7 +936,7 @@ public:
uint64 summonerGuid;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ashtongue_defenderAI>(creature);
}
@@ -958,7 +958,7 @@ public:
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
summonerGuid = 0;
@@ -966,24 +966,24 @@ public:
AttackStart(target);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->DespawnOrUnsummon(5000);
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
- if (Creature* summoner = (Unit::GetCreature((*me), summonerGuid)))
- CAST_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
+ if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid)))
+ ENSURE_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_DEBILITATING_POISON, urand(500, 2000));
events.ScheduleEvent(EVENT_EVISCERATE, urand(2000, 5000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1016,7 +1016,7 @@ public:
uint64 summonerGuid;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ashtongue_rogueAI>(creature);
}
@@ -1038,7 +1038,7 @@ public:
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
summonerGuid = 0;
@@ -1046,24 +1046,24 @@ public:
AttackStart(target);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->DespawnOrUnsummon(5000);
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
- if (Creature* summoner = (Unit::GetCreature((*me), summonerGuid)))
- CAST_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
+ if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid)))
+ ENSURE_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_RAIN_OF_FIRE, 18000);
events.ScheduleEvent(EVENT_LIGHTNING_BOLT, 6000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1096,7 +1096,7 @@ public:
uint64 summonerGuid;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ashtongue_elementalistAI>(creature);
}
@@ -1118,7 +1118,7 @@ public:
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
spiritMend = false;
chainHeal = false;
@@ -1128,23 +1128,23 @@ public:
AttackStart(target);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->DespawnOrUnsummon(5000);
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
- if (Creature* summoner = (Unit::GetCreature((*me), summonerGuid)))
- CAST_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
+ if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid)))
+ ENSURE_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_SPIRIT_HEAL, urand (5000, 6000));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -1193,7 +1193,7 @@ public:
bool chainHeal;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ashtongue_spiritbinderAI>(creature);
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
index 551213b8b2c..a705659337f 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
@@ -63,7 +63,7 @@ class molten_flame : public CreatureScript
public:
molten_flame() : CreatureScript("molten_flame") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new molten_flameAI(creature);
}
@@ -72,7 +72,7 @@ public:
{
molten_flameAI(Creature* creature) : NullCreatureAI(creature) { }
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
float x, y, z;
me->GetNearPoint(me, x, y, z, 1, 100, float(M_PI*2*rand_norm()));
@@ -88,7 +88,7 @@ class boss_supremus : public CreatureScript
public:
boss_supremus() : CreatureScript("boss_supremus") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_supremusAI>(creature);
}
@@ -105,7 +105,7 @@ public:
SummonList summons;
uint32 phase;
- void Reset() OVERRIDE
+ void Reset() override
{
if (me->IsAlive())
instance->SetBossState(DATA_SUPREMUS, NOT_STARTED);
@@ -116,7 +116,7 @@ public:
summons.DespawnAll();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
instance->SetBossState(DATA_SUPREMUS, IN_PROGRESS);
@@ -152,19 +152,19 @@ public:
events.ScheduleEvent(EVENT_SWITCH_PHASE, 60000, GCD_CAST);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetBossState(DATA_SUPREMUS, DONE);
summons.DespawnAll();
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summons.Summon(summon);
}
- void SummonedCreatureDespawn(Creature* summon) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summon) override
{
summons.Despawn(summon);
}
@@ -178,7 +178,7 @@ public:
ThreatContainer::StorageType::const_iterator i = threatlist.begin();
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && me->IsWithinMeleeRange(unit))
{
if (unit->GetHealth() > health)
@@ -192,7 +192,7 @@ public:
return target;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -256,7 +256,7 @@ class npc_volcano : public CreatureScript
public:
npc_volcano() : CreatureScript("npc_volcano") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_volcanoAI(creature);
}
@@ -268,7 +268,7 @@ public:
SetCombatMovement(false);
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -278,17 +278,17 @@ public:
}
uint32 wait;
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void DoAction(int32 /*info*/) OVERRIDE
+ void DoAction(int32 /*info*/) override
{
me->RemoveAura(SPELL_VOLCANIC_ERUPTION);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (wait <= diff)//wait 3secs before casting
{
diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
index b95af29a43e..0bbf2cb2a96 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
@@ -56,7 +56,7 @@ class npc_doom_blossom : public CreatureScript
public:
npc_doom_blossom() : CreatureScript("npc_doom_blossom") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_doom_blossomAI(creature);
}
@@ -69,16 +69,16 @@ public:
uint32 ShadowBoltTimer;
uint64 TeronGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
CheckTeronTimer = 5000;
ShadowBoltTimer = 12000;
TeronGUID = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void AttackStart(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
void Despawn()
@@ -87,7 +87,7 @@ public:
me->RemoveCorpse();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (CheckTeronTimer <= diff)
{
@@ -95,7 +95,7 @@ public:
{
DoZoneInCombat();
- Creature* Teron = (Unit::GetCreature((*me), TeronGUID));
+ Creature* Teron = (ObjectAccessor::GetCreature((*me), TeronGUID));
if ((Teron) && (!Teron->IsAlive() || Teron->IsInEvadeMode()))
Despawn();
}
@@ -125,7 +125,7 @@ class npc_shadowy_construct : public CreatureScript
public:
npc_shadowy_construct() : CreatureScript("npc_shadowy_construct") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_shadowy_constructAI(creature);
}
@@ -140,7 +140,7 @@ public:
uint32 CheckPlayerTimer;
uint32 CheckTeronTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
GhostGUID = 0;
TeronGUID = 0;
@@ -149,9 +149,9 @@ public:
CheckTeronTimer = 5000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!who || (!who->IsAlive()) || (who->GetGUID() == GhostGUID))
@@ -161,7 +161,7 @@ public:
}
/* Comment it out for now. NOTE TO FUTURE DEV: UNCOMMENT THIS OUT ONLY AFTER MIND CONTROL IS IMPLEMENTED
- void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* done_by, uint32 &damage) override
{
if (done_by->GetGUID() != GhostGUID)
damage = 0; // Only the ghost can deal damage.
@@ -177,7 +177,7 @@ public:
std::list<Unit*> targets;
for (; itr != threatlist.end(); ++itr)
{
- Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (unit && unit->IsAlive())
targets.push_back(unit);
}
@@ -190,7 +190,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (CheckPlayerTimer <= diff)
{
@@ -200,7 +200,7 @@ public:
if (CheckTeronTimer <= diff)
{
- Creature* Teron = (Unit::GetCreature((*me), TeronGUID));
+ Creature* Teron = (ObjectAccessor::GetCreature((*me), TeronGUID));
if (!Teron || !Teron->IsAlive() || Teron->IsInEvadeMode())
me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
@@ -215,7 +215,7 @@ class boss_teron_gorefiend : public CreatureScript
public:
boss_teron_gorefiend() : CreatureScript("boss_teron_gorefiend") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_teron_gorefiendAI>(creature);
}
@@ -244,7 +244,7 @@ public:
bool Intro;
bool Done;
- void Reset() OVERRIDE
+ void Reset() override
{
instance->SetBossState(DATA_TERON_GOREFIEND, NOT_STARTED);
@@ -265,9 +265,9 @@ public:
Done = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!Intro && who->GetTypeId() == TYPEID_PLAYER && me->CanCreatureAttack(who))
@@ -288,12 +288,12 @@ public:
ScriptedAI::MoveInLineOfSight(who);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetBossState(DATA_TERON_GOREFIEND, DONE);
@@ -306,10 +306,10 @@ public:
switch (urand(0, 1))
{
case 0:
- coord += rand()%radius;
+ coord += rand32() % radius;
break;
case 1:
- coord -= rand()%radius;
+ coord -= rand32() % radius;
break;
}
return coord;
@@ -324,7 +324,7 @@ public:
ThreatContainer::StorageType::const_iterator i = threatlist.begin();
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && unit->IsAlive())
{
float threat = DoGetThreat(unit);
@@ -344,7 +344,7 @@ public:
Unit* ghost = NULL;
if (GhostGUID)
- ghost = Unit::GetUnit(*me, GhostGUID);
+ ghost = ObjectAccessor::GetUnit(*me, GhostGUID);
if (ghost && ghost->IsAlive() && ghost->HasAura(SPELL_SHADOW_OF_DEATH))
{
/*float x, y, z;
@@ -366,7 +366,7 @@ public:
{
Construct->CastSpell(Construct, SPELL_PASSIVE_SHADOWFORM, true);
SetThreatList(Construct); // Use same function as Doom Blossom to set Threat List.
- CAST_AI(npc_shadowy_construct::npc_shadowy_constructAI, Construct->AI())->GhostGUID = GhostGUID;
+ ENSURE_AI(npc_shadowy_construct::npc_shadowy_constructAI, Construct->AI())->GhostGUID = GhostGUID;
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1);
if (!target) // someone's trying to solo.
target = me->GetVictim();
@@ -378,7 +378,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (Intro && !Done)
{
@@ -391,7 +391,7 @@ public:
Done = true;
if (AggroTargetGUID)
{
- Unit* unit = Unit::GetUnit(*me, AggroTargetGUID);
+ Unit* unit = ObjectAccessor::GetUnit(*me, AggroTargetGUID);
if (unit)
AttackStart(unit);
@@ -444,7 +444,7 @@ public:
DoomBlossom->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
DoomBlossom->setFaction(me->getFaction());
DoomBlossom->AddThreat(target, 1.0f);
- CAST_AI(npc_doom_blossom::npc_doom_blossomAI, DoomBlossom->AI())->SetTeronGUID(me->GetGUID());
+ ENSURE_AI(npc_doom_blossom::npc_doom_blossomAI, DoomBlossom->AI())->SetTeronGUID(me->GetGUID());
target->CombatStart(DoomBlossom);
SetThreatList(DoomBlossom);
SummonDoomBlossomTimer = 35000;
diff --git a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
index 39fcbc16297..64a6add9801 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
@@ -76,7 +76,7 @@ class boss_najentus : public CreatureScript
public:
boss_najentus() : CreatureScript("boss_najentus") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_najentusAI>(creature);
}
@@ -93,7 +93,7 @@ public:
uint64 SpineTargetGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
events.Reset();
@@ -102,20 +102,20 @@ public:
instance->SetBossState(DATA_HIGH_WARLORD_NAJENTUS, NOT_STARTED);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
events.DelayEvents(5000, GCD_YELL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetBossState(DATA_HIGH_WARLORD_NAJENTUS, DONE);
Talk(SAY_DEATH);
}
- void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
if (spell->Id == SPELL_HURL_SPINE && me->HasAura(SPELL_TIDAL_SHIELD))
{
@@ -125,14 +125,14 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
instance->SetBossState(DATA_HIGH_WARLORD_NAJENTUS, IN_PROGRESS);
Talk(SAY_AGGRO);
DoZoneInCombat();
events.ScheduleEvent(EVENT_BERSERK, 480000, GCD_CAST);
- events.ScheduleEvent(EVENT_YELL, 45000 + (rand()%76)*1000, GCD_YELL);
+ events.ScheduleEvent(EVENT_YELL, 45000 + (rand32() % 76) * 1000, GCD_YELL);
ResetTimer();
}
@@ -141,7 +141,7 @@ public:
if (!SpineTargetGUID)
return false;
- Unit* target = Unit::GetUnit(*me, SpineTargetGUID);
+ Unit* target = ObjectAccessor::GetUnit(*me, SpineTargetGUID);
if (target && target->HasAura(SPELL_IMPALING_SPINE))
target->RemoveAurasDueToSpell(SPELL_IMPALING_SPINE);
SpineTargetGUID=0;
@@ -155,7 +155,7 @@ public:
events.RescheduleEvent(EVENT_SHIELD, 60000 + inc);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -222,11 +222,11 @@ class go_najentus_spine : public GameObjectScript
public:
go_najentus_spine() : GameObjectScript("go_najentus_spine") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (InstanceScript* instance = go->GetInstanceScript())
if (Creature* Najentus = ObjectAccessor::GetCreature(*go, instance->GetData64(DATA_HIGH_WARLORD_NAJENTUS)))
- if (CAST_AI(boss_najentus::boss_najentusAI, Najentus->AI())->RemoveImpalingSpine())
+ if (ENSURE_AI(boss_najentus::boss_najentusAI, Najentus->AI())->RemoveImpalingSpine())
{
player->CastSpell(player, SPELL_CREATE_NAJENTUS_SPINE, true);
go->Delete();
diff --git a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp
index 2db95b6ea53..2c6bac4c9d9 100644
--- a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp
+++ b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp
@@ -120,7 +120,7 @@ class npc_blood_elf_council_voice_trigger : public CreatureScript
public:
npc_blood_elf_council_voice_trigger() : CreatureScript("npc_blood_elf_council_voice_trigger") { }
- CreatureAI* GetAI(Creature* c) const OVERRIDE
+ CreatureAI* GetAI(Creature* c) const override
{
return new npc_blood_elf_council_voice_triggerAI(c);
}
@@ -142,7 +142,7 @@ public:
bool EventStarted;
- void Reset() OVERRIDE
+ void Reset() override
{
EnrageTimer = 900000; // 15 minutes
AggroYellTimer = 500;
@@ -164,13 +164,13 @@ public:
} else TC_LOG_ERROR("scripts", ERROR_INST_DATA);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void AttackStart(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!EventStarted)
return;
@@ -182,7 +182,7 @@ public:
{
if (AggroYellTimer <= diff)
{
- if (Creature* pMember = Creature::GetCreature(*me, Council[YellCounter]))
+ if (Creature* pMember = ObjectAccessor::GetCreature(*me, Council[YellCounter]))
{
pMember->AI()->Talk(CouncilAggro[YellCounter].entry);
AggroYellTimer = CouncilAggro[YellCounter].timer;
@@ -197,7 +197,7 @@ public:
{
if (EnrageTimer <= diff)
{
- if (Creature* pMember = Creature::GetCreature(*me, Council[YellCounter]))
+ if (Creature* pMember = ObjectAccessor::GetCreature(*me, Council[YellCounter]))
{
pMember->CastSpell(pMember, SPELL_BERSERK, true);
pMember->AI()->Talk(CouncilEnrage[YellCounter].entry);
@@ -216,7 +216,7 @@ class npc_illidari_council : public CreatureScript
public:
npc_illidari_council() : CreatureScript("npc_illidari_council") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_illidari_councilAI>(creature);
}
@@ -241,7 +241,7 @@ public:
bool EventBegun;
- void Reset() OVERRIDE
+ void Reset() override
{
CheckTimer = 2000;
EndEventTimer = 0;
@@ -251,7 +251,7 @@ public:
Creature* pMember = NULL;
for (uint8 i = 0; i < 4; ++i)
{
- pMember = Unit::GetCreature((*me), Council[i]);
+ pMember = ObjectAccessor::GetCreature((*me), Council[i]);
if (!pMember)
continue;
@@ -274,9 +274,9 @@ public:
me->SetDisplayId(11686);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void AttackStart(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
void StartEvent(Unit* target)
@@ -291,8 +291,8 @@ public:
// Start the event for the Voice Trigger
if (Creature* VoiceTrigger = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BLOOD_ELF_COUNCIL_VOICE)))
{
- CAST_AI(npc_blood_elf_council_voice_trigger::npc_blood_elf_council_voice_triggerAI, VoiceTrigger->AI())->LoadCouncilGUIDs();
- CAST_AI(npc_blood_elf_council_voice_trigger::npc_blood_elf_council_voice_triggerAI, VoiceTrigger->AI())->EventStarted = true;
+ ENSURE_AI(npc_blood_elf_council_voice_trigger::npc_blood_elf_council_voice_triggerAI, VoiceTrigger->AI())->LoadCouncilGUIDs();
+ ENSURE_AI(npc_blood_elf_council_voice_trigger::npc_blood_elf_council_voice_triggerAI, VoiceTrigger->AI())->EventStarted = true;
}
for (uint8 i = 0; i < 4; ++i)
@@ -311,7 +311,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!EventBegun)
return;
@@ -330,7 +330,7 @@ public:
return;
}
- Creature* pMember = (Unit::GetCreature(*me, Council[DeathCount]));
+ Creature* pMember = (ObjectAccessor::GetCreature(*me, Council[DeathCount]));
if (pMember && pMember->IsAlive())
pMember->DealDamage(pMember, pMember->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
++DeathCount;
@@ -347,7 +347,7 @@ public:
{
if (Council[i])
{
- if (Creature* Member = (Unit::GetCreature((*me), Council[i])))
+ if (Creature* Member = (ObjectAccessor::GetCreature((*me), Council[i])))
{
// This is the evade/death check.
if (Member->IsAlive() && !Member->GetVictim())
@@ -390,10 +390,10 @@ struct boss_illidari_councilAI : public ScriptedAI
bool LoadedGUIDs;
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ILLIDARI_COUNCIL)))
- CAST_AI(npc_illidari_council::npc_illidari_councilAI, controller->AI())->StartEvent(who);
+ ENSURE_AI(npc_illidari_council::npc_illidari_councilAI, controller->AI())->StartEvent(who);
DoZoneInCombat();
// Load GUIDs on first aggro because the Creature guids are only set as the creatures are created in world-
// this means that for each creature, it will attempt to LoadGUIDs even though some of the other creatures are
@@ -403,11 +403,11 @@ struct boss_illidari_councilAI : public ScriptedAI
LoadGUIDs();
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
for (uint8 i = 0; i < 4; ++i)
{
- if (Unit* unit = Unit::GetUnit(*me, Council[i]))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, Council[i]))
if (unit != me && unit->GetVictim())
{
AttackStart(unit->GetVictim());
@@ -417,7 +417,7 @@ struct boss_illidari_councilAI : public ScriptedAI
ScriptedAI::EnterEvadeMode();
}
- void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* done_by, uint32 &damage) override
{
if (done_by == me)
return;
@@ -425,7 +425,7 @@ struct boss_illidari_councilAI : public ScriptedAI
damage /= 4;
for (uint8 i = 0; i < 4; ++i)
{
- if (Creature* unit = Unit::GetCreature(*me, Council[i]))
+ if (Creature* unit = ObjectAccessor::GetCreature(*me, Council[i]))
if (unit != me && damage < unit->GetHealth())
{
unit->ModifyHealth(-int32(damage));
@@ -450,7 +450,7 @@ class boss_gathios_the_shatterer : public CreatureScript
public:
boss_gathios_the_shatterer() : CreatureScript("boss_gathios_the_shatterer") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_gathios_the_shattererAI>(creature);
}
@@ -465,7 +465,7 @@ public:
uint32 AuraTimer;
uint32 BlessingTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
ConsecrationTimer = 40000;
HammerOfJusticeTimer = 10000;
@@ -474,12 +474,12 @@ public:
BlessingTimer = 60000;
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_GATH_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_GATH_DEATH);
}
@@ -489,11 +489,11 @@ public:
Unit* unit = me;
uint32 member = 0; // He chooses Lady Malande most often
- if (rand()%10 == 0) // But there is a chance he picks someone else.
+ if (rand32() % 10 == 0) // But there is a chance he picks someone else.
member = urand(1, 3);
if (member != 2) // No need to create another pointer to us using Unit::GetUnit
- unit = Unit::GetUnit(*me, Council[member]);
+ unit = ObjectAccessor::GetUnit(*me, Council[member]);
return unit;
}
@@ -507,13 +507,13 @@ public:
}
for (uint8 i = 0; i < 4; ++i)
{
- Unit* unit = Unit::GetUnit(*me, Council[i]);
+ Unit* unit = ObjectAccessor::GetUnit(*me, Council[i]);
if (unit)
unit->CastSpell(unit, spellid, true, 0, 0, me->GetGUID());
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -582,7 +582,7 @@ class boss_high_nethermancer_zerevor : public CreatureScript
public:
boss_high_nethermancer_zerevor() : CreatureScript("boss_high_nethermancer_zerevor") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_high_nethermancer_zerevorAI>(creature);
}
@@ -598,7 +598,7 @@ public:
uint32 Cooldown;
uint32 ArcaneExplosionTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
BlizzardTimer = urand(30, 91) * 1000;
FlamestrikeTimer = urand(30, 91) * 1000;
@@ -608,17 +608,17 @@ public:
Cooldown = 0;
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_ZERE_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_ZERE_DEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -686,7 +686,7 @@ class boss_lady_malande : public CreatureScript
public:
boss_lady_malande() : CreatureScript("boss_lady_malande") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_lady_malandeAI>(creature);
}
@@ -700,7 +700,7 @@ public:
uint32 DivineWrathTimer;
uint32 ReflectiveShieldTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
EmpoweredSmiteTimer = 38000;
CircleOfHealingTimer = 20000;
@@ -708,17 +708,17 @@ public:
ReflectiveShieldTimer = 0;
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_MALA_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_MALA_DEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -764,7 +764,7 @@ class boss_veras_darkshadow : public CreatureScript
public:
boss_veras_darkshadow() : CreatureScript("boss_veras_darkshadow") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_veras_darkshadowAI>(creature);
}
@@ -781,7 +781,7 @@ public:
bool HasVanished;
- void Reset() OVERRIDE
+ void Reset() override
{
EnvenomTargetGUID = 0;
@@ -794,17 +794,17 @@ public:
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_VERA_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_VERA_DEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -878,9 +878,9 @@ public:
{
PrepareAuraScript(spell_boss_lady_malande_shield_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
- return sSpellMgr->GetSpellInfo(SPELL_REFLECTIVE_SHIELD_T);
+ return sSpellMgr->GetSpellInfo(SPELL_REFLECTIVE_SHIELD_T) != nullptr;
}
void Trigger(AuraEffect* aurEff, DamageInfo & dmgInfo, uint32 & absorbAmount)
@@ -892,13 +892,13 @@ public:
target->CastCustomSpell(dmgInfo.GetAttacker(), SPELL_REFLECTIVE_SHIELD_T, &bp, NULL, NULL, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectAbsorb += AuraEffectAbsorbFn(spell_boss_lady_malande_shield_AuraScript::Trigger, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_boss_lady_malande_shield_AuraScript();
}
diff --git a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
index 91ee58ea286..5b91367a9c9 100644
--- a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
+++ b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
@@ -65,7 +65,7 @@ class instance_black_temple : public InstanceMapScript
memset(IllidanDoorGUIDs, 0, 2 * sizeof(uint64));
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -110,7 +110,7 @@ class instance_black_temple : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -140,7 +140,7 @@ class instance_black_temple : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -161,7 +161,7 @@ class instance_black_temple : public InstanceMapScript
}
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -202,7 +202,7 @@ class instance_black_temple : public InstanceMapScript
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -213,7 +213,7 @@ class instance_black_temple : public InstanceMapScript
return saveStream.str();
}
- void Load(char const* str) OVERRIDE
+ void Load(char const* str) override
{
if (!str)
{
@@ -266,7 +266,7 @@ class instance_black_temple : public InstanceMapScript
uint64 IllidanDoorGUIDs[2];
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_black_temple_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Outland/CMakeLists.txt b/src/server/scripts/Outland/CMakeLists.txt
index 414a3bce14a..0c69a236ef8 100644
--- a/src/server/scripts/Outland/CMakeLists.txt
+++ b/src/server/scripts/Outland/CMakeLists.txt
@@ -112,7 +112,7 @@ set(scripts_STAT_SRCS
Outland/BlackTemple/instance_black_temple.cpp
Outland/BlackTemple/boss_reliquary_of_souls.cpp
Outland/BlackTemple/boss_warlord_najentus.cpp
- Outland/BlackTemple/boss_bloodboil.cpp
+ Outland/BlackTemple/boss_gurtogg_bloodboil.cpp
Outland/BlackTemple/boss_illidan.cpp
Outland/zone_shadowmoon_valley.cpp
Outland/zone_blades_edge_mountains.cpp
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 9055bb1862d..7e24f4b54b2 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp
@@ -102,7 +102,7 @@ class boss_fathomlord_karathress : public CreatureScript
public:
boss_fathomlord_karathress() : CreatureScript("boss_fathomlord_karathress") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_fathomlord_karathressAI>(creature);
}
@@ -127,11 +127,11 @@ public:
uint64 Advisors[MAX_ADVISORS];
- void Reset() OVERRIDE
+ void Reset() override
{
CataclysmicBolt_Timer = 10000;
Enrage_Timer = 600000; //10 minutes
- SearNova_Timer = 20000+rand()%40000; // 20 - 60 seconds
+ SearNova_Timer = 20000 + rand32() % 40000; // 20 - 60 seconds
BlessingOfTides = false;
@@ -191,12 +191,12 @@ public:
instance->SetData(DATA_KARATHRESSEVENT, IN_PROGRESS);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -206,17 +206,17 @@ public:
me->SummonCreature(SEER_OLUM, OLUM_X, OLUM_Y, OLUM_Z, OLUM_O, TEMPSUMMON_TIMED_DESPAWN, 3600000);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
StartEvent(who);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Only if not incombat check if the event is started
if (!me->IsInCombat() && instance->GetData(DATA_KARATHRESSEVENT))
{
- if (Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER)))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER)))
{
AttackStart(target);
GetAdvisors();
@@ -253,7 +253,7 @@ public:
if (SearNova_Timer <= diff)
{
DoCastVictim(SPELL_SEAR_NOVA);
- SearNova_Timer = 20000+rand()%40000;
+ SearNova_Timer = 20000 + rand32() % 40000;
} else SearNova_Timer -= diff;
//Enrage_Timer
@@ -298,7 +298,7 @@ class boss_fathomguard_sharkkis : public CreatureScript
public:
boss_fathomguard_sharkkis() : CreatureScript("boss_fathomguard_sharkkis") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_fathomguard_sharkkisAI>(creature);
}
@@ -322,7 +322,7 @@ public:
uint64 SummonedPet;
- void Reset() OVERRIDE
+ void Reset() override
{
LeechingThrow_Timer = 20000;
TheBeastWithin_Timer = 30000;
@@ -340,24 +340,24 @@ public:
instance->SetData(DATA_KARATHRESSEVENT, NOT_STARTED);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* Karathress = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KARATHRESS)))
- CAST_AI(boss_fathomlord_karathress::boss_fathomlord_karathressAI, Karathress->AI())->EventSharkkisDeath();
+ ENSURE_AI(boss_fathomlord_karathress::boss_fathomlord_karathressAI, Karathress->AI())->EventSharkkisDeath();
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
instance->SetData64(DATA_KARATHRESSEVENT_STARTER, who->GetGUID());
instance->SetData(DATA_KARATHRESSEVENT, IN_PROGRESS);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Only if not incombat check if the event is started
if (!me->IsInCombat() && instance->GetData(DATA_KARATHRESSEVENT))
{
- if (Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER)))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER)))
AttackStart(target);
}
@@ -437,7 +437,7 @@ class boss_fathomguard_tidalvess : public CreatureScript
public:
boss_fathomguard_tidalvess() : CreatureScript("boss_fathomguard_tidalvess") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_fathomguard_tidalvessAI>(creature);
}
@@ -456,7 +456,7 @@ public:
uint32 PoisonCleansing_Timer;
uint32 Earthbind_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
FrostShock_Timer = 25000;
Spitfire_Timer = 60000;
@@ -466,25 +466,25 @@ public:
instance->SetData(DATA_KARATHRESSEVENT, NOT_STARTED);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* Karathress = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KARATHRESS)))
- CAST_AI(boss_fathomlord_karathress::boss_fathomlord_karathressAI, Karathress->AI())->EventTidalvessDeath();
+ ENSURE_AI(boss_fathomlord_karathress::boss_fathomlord_karathressAI, Karathress->AI())->EventTidalvessDeath();
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
instance->SetData64(DATA_KARATHRESSEVENT_STARTER, who->GetGUID());
instance->SetData(DATA_KARATHRESSEVENT, IN_PROGRESS);
DoCast(me, SPELL_WINDFURY_WEAPON);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Only if not incombat check if the event is started
if (!me->IsInCombat() && instance->GetData(DATA_KARATHRESSEVENT))
{
- if (Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER)))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER)))
AttackStart(target);
}
@@ -508,14 +508,14 @@ public:
if (FrostShock_Timer <= diff)
{
DoCastVictim(SPELL_FROST_SHOCK);
- FrostShock_Timer = 25000+rand()%5000;
+ FrostShock_Timer = 25000 + rand32() % 5000;
} else FrostShock_Timer -= diff;
//Spitfire_Timer
if (Spitfire_Timer <= diff)
{
DoCast(me, SPELL_SPITFIRE_TOTEM);
- if (Unit* SpitfireTotem = Unit::GetUnit(*me, CREATURE_SPITFIRE_TOTEM))
+ if (Unit* SpitfireTotem = ObjectAccessor::GetUnit(*me, CREATURE_SPITFIRE_TOTEM))
SpitfireTotem->ToCreature()->AI()->AttackStart(me->GetVictim());
Spitfire_Timer = 60000;
@@ -553,7 +553,7 @@ class boss_fathomguard_caribdis : public CreatureScript
public:
boss_fathomguard_caribdis() : CreatureScript("boss_fathomguard_caribdis") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_fathomguard_caribdisAI>(creature);
}
@@ -572,34 +572,34 @@ public:
uint32 Heal_Timer;
uint32 Cyclone_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
WaterBoltVolley_Timer = 35000;
- TidalSurge_Timer = 15000+rand()%5000;
+ TidalSurge_Timer = 15000 + rand32() % 5000;
Heal_Timer = 55000;
- Cyclone_Timer = 30000+rand()%10000;
+ Cyclone_Timer = 30000 + rand32() % 10000;
instance->SetData(DATA_KARATHRESSEVENT, NOT_STARTED);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* Karathress = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KARATHRESS)))
- CAST_AI(boss_fathomlord_karathress::boss_fathomlord_karathressAI, Karathress->AI())->EventCaribdisDeath();
+ ENSURE_AI(boss_fathomlord_karathress::boss_fathomlord_karathressAI, Karathress->AI())->EventCaribdisDeath();
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
instance->SetData64(DATA_KARATHRESSEVENT_STARTER, who->GetGUID());
instance->SetData(DATA_KARATHRESSEVENT, IN_PROGRESS);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Only if not incombat check if the event is started
if (!me->IsInCombat() && instance->GetData(DATA_KARATHRESSEVENT))
{
- if (Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER)))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER)))
AttackStart(target);
}
@@ -626,17 +626,18 @@ public:
{
DoCastVictim(SPELL_TIDAL_SURGE);
// Hacky way to do it - won't trigger elseways
- me->GetVictim()->CastSpell(me->GetVictim(), SPELL_TIDAL_SURGE_FREEZE, true);
- TidalSurge_Timer = 15000+rand()%5000;
+ if (me->GetVictim())
+ me->EnsureVictim()->CastSpell(me->GetVictim(), SPELL_TIDAL_SURGE_FREEZE, true);
+ TidalSurge_Timer = 15000 + rand32() % 5000;
} else TidalSurge_Timer -= diff;
//Cyclone_Timer
if (Cyclone_Timer <= diff)
{
//DoCast(me, SPELL_SUMMON_CYCLONE); // Doesn't work
- Cyclone_Timer = 30000+rand()%10000;
+ Cyclone_Timer = 30000 + rand32() % 10000;
- if (Creature* Cyclone = me->SummonCreature(CREATURE_CYCLONE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), float(rand()%5), TEMPSUMMON_TIMED_DESPAWN, 15000))
+ if (Creature* Cyclone = me->SummonCreature(CREATURE_CYCLONE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), float(rand32() % 5), TEMPSUMMON_TIMED_DESPAWN, 15000))
{
Cyclone->SetObjectScale(3.0f);
Cyclone->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -671,16 +672,16 @@ public:
Unit* selectAdvisorUnit()
{
Unit* unit = NULL;
- switch (rand()%4)
+ switch (rand32() % 4)
{
case 0:
- unit = Unit::GetUnit(*me, instance->GetData64(DATA_KARATHRESS));
+ unit = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_KARATHRESS));
break;
case 1:
- unit = Unit::GetUnit(*me, instance->GetData64(DATA_SHARKKIS));
+ unit = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_SHARKKIS));
break;
case 2:
- unit = Unit::GetUnit(*me, instance->GetData64(DATA_TIDALVESS));
+ unit = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_TIDALVESS));
break;
case 3:
unit = me;
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp
index 56055d8a5b4..bcde75584fb 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp
@@ -84,7 +84,7 @@ class boss_hydross_the_unstable : public CreatureScript
public:
boss_hydross_the_unstable() : CreatureScript("boss_hydross_the_unstable") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_hydross_the_unstableAI>(creature);
}
@@ -113,7 +113,7 @@ public:
bool beam;
SummonList Summons;
- void Reset() OVERRIDE
+ void Reset() override
{
DeSummonBeams();
beams[0] = 0;
@@ -162,26 +162,26 @@ public:
{
for (uint8 i = 0; i < 2; ++i)
{
- if (Creature* mob = Unit::GetCreature(*me, beams[i]))
+ if (Creature* mob = ObjectAccessor::GetCreature(*me, beams[i]))
{
mob->setDeathState(DEAD);
mob->RemoveCorpse();
}
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, IN_PROGRESS);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(CorruptedForm ? SAY_CORRUPT_SLAY : SAY_CLEAN_SLAY);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned->GetEntry() == ENTRY_PURE_SPAWN)
{
@@ -197,12 +197,12 @@ public:
}
}
- void SummonedCreatureDespawn(Creature* summon) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summon) override
{
Summons.Despawn(summon);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(CorruptedForm ? SAY_CORRUPT_DEATH : SAY_CLEAN_DEATH);
@@ -210,7 +210,7 @@ public:
Summons.DespawnAll();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!beam)
{
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 8d6eb064194..a241f2bea37 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
@@ -138,7 +138,7 @@ class boss_lady_vashj : public CreatureScript
public:
boss_lady_vashj() : CreatureScript("boss_lady_vashj") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_lady_vashjAI>(creature);
}
@@ -179,18 +179,18 @@ public:
bool CanAttack;
bool JustCreated;
- void Reset() OVERRIDE
+ void Reset() override
{
AggroTimer = 19000;
- ShockBlastTimer = 1+rand()%60000;
+ ShockBlastTimer = 1 + rand32() % 60000;
EntangleTimer = 30000;
- StaticChargeTimer = 10000+rand()%15000;
+ StaticChargeTimer = 10000 + rand32() % 15000;
ForkedLightningTimer = 2000;
CheckTimer = 15000;
EnchantedElementalTimer = 5000;
TaintedElementalTimer = 50000;
- CoilfangEliteTimer = 45000+rand()%5000;
- CoilfangStriderTimer = 60000+rand()%10000;
+ CoilfangEliteTimer = 45000 + rand32() % 5000;
+ CoilfangStriderTimer = 60000 + rand32() % 10000;
SummonSporebatTimer = 10000;
SummonSporebatStaticTimer = 30000;
EnchantedElementalPos = 0;
@@ -207,7 +207,7 @@ public:
{
if (ShieldGeneratorChannel[i])
{
- if (Unit* remo = Unit::GetUnit(*me, ShieldGeneratorChannel[i]))
+ if (Unit* remo = ObjectAccessor::GetUnit(*me, ShieldGeneratorChannel[i]))
{
remo->setDeathState(JUST_DIED);
ShieldGeneratorChannel[i] = 0;
@@ -227,12 +227,12 @@ public:
if (TaintedElementalTimer > 50000)
TaintedElementalTimer = 50000;
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -248,7 +248,7 @@ public:
instance->SetData(DATA_LADYVASHJEVENT, IN_PROGRESS);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
// remove old tainted cores to prevent cheating in phase 2
Map* map = me->GetMap();
@@ -262,7 +262,7 @@ public:
AttackStart(who);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!Intro)
@@ -304,13 +304,13 @@ public:
DoCastVictim(SPELL_MULTI_SHOT);
break;
}
- if (rand()%3)
+ if (rand32() % 3)
{
Talk(SAY_BOWSHOT);
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!CanAttack && Intro)
{
@@ -346,7 +346,7 @@ public:
DoCastVictim(SPELL_SHOCK_BLAST);
me->TauntApply(me->GetVictim());
- ShockBlastTimer = 1000+rand()%14000; // random cooldown
+ ShockBlastTimer = 1000 + rand32() % 14000; // random cooldown
} else ShockBlastTimer -= diff;
// StaticChargeTimer
@@ -358,7 +358,7 @@ public:
if (target && !target->HasAura(SPELL_STATIC_CHARGE_TRIGGER))
DoCast(target, SPELL_STATIC_CHARGE_TRIGGER); // cast Static Charge every 2 seconds for 20 seconds
- StaticChargeTimer = 10000+rand()%20000;
+ StaticChargeTimer = 10000 + rand32() % 20000;
} else StaticChargeTimer -= diff;
// EntangleTimer
@@ -376,7 +376,7 @@ public:
{
CastShootOrMultishot();
Entangle = false;
- EntangleTimer = 20000+rand()%5000;
+ EntangleTimer = 20000 + rand32() % 5000;
}
} else EntangleTimer -= diff;
@@ -431,7 +431,7 @@ public:
std::list<HostileReference*> t_list = me->getThreatManager().getThreatList();
for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)
{
- Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (target && target->IsWithinDistInMap(me, 5)) // if in melee range
{
inMeleeRange = true;
@@ -461,7 +461,7 @@ public:
DoCast(target, SPELL_FORKED_LIGHTNING);
- ForkedLightningTimer = 2000+rand()%6000;
+ ForkedLightningTimer = 2000 + rand32() % 6000;
} else ForkedLightningTimer -= diff;
// EnchantedElementalTimer
@@ -474,13 +474,13 @@ public:
else
++EnchantedElementalPos;
- EnchantedElementalTimer = 10000+rand()%5000;
+ EnchantedElementalTimer = 10000 + rand32() % 5000;
} else EnchantedElementalTimer -= diff;
// TaintedElementalTimer
if (TaintedElementalTimer <= diff)
{
- uint32 pos = rand()%8;
+ uint32 pos = rand32() % 8;
me->SummonCreature(TAINTED_ELEMENTAL, ElementPos[pos][0], ElementPos[pos][1], ElementPos[pos][2], ElementPos[pos][3], TEMPSUMMON_DEAD_DESPAWN, 0);
TaintedElementalTimer = 120000;
@@ -489,7 +489,7 @@ public:
// CoilfangEliteTimer
if (CoilfangEliteTimer <= diff)
{
- uint32 pos = rand()%3;
+ uint32 pos = rand32() % 3;
Creature* coilfangElite = me->SummonCreature(COILFANG_ELITE, CoilfangElitePos[pos][0], CoilfangElitePos[pos][1], CoilfangElitePos[pos][2], CoilfangElitePos[pos][3], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
if (coilfangElite)
{
@@ -498,13 +498,13 @@ public:
else if (me->GetVictim())
coilfangElite->AI()->AttackStart(me->GetVictim());
}
- CoilfangEliteTimer = 45000+rand()%5000;
+ CoilfangEliteTimer = 45000 + rand32() % 5000;
} else CoilfangEliteTimer -= diff;
// CoilfangStriderTimer
if (CoilfangStriderTimer <= diff)
{
- uint32 pos = rand()%3;
+ uint32 pos = rand32() % 3;
if (Creature* CoilfangStrider = me->SummonCreature(COILFANG_STRIDER, CoilfangStriderPos[pos][0], CoilfangStriderPos[pos][1], CoilfangStriderPos[pos][2], CoilfangStriderPos[pos][3], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000))
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
@@ -512,7 +512,7 @@ public:
else if (me->GetVictim())
CoilfangStrider->AI()->AttackStart(me->GetVictim());
}
- CoilfangStriderTimer = 60000+rand()%10000;
+ CoilfangStriderTimer = 60000 + rand32() % 10000;
} else CoilfangStriderTimer -= diff;
// CheckTimer
@@ -548,7 +548,7 @@ class npc_enchanted_elemental : public CreatureScript
public:
npc_enchanted_elemental() : CreatureScript("npc_enchanted_elemental") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_enchanted_elementalAI>(creature);
}
@@ -567,7 +567,7 @@ public:
uint64 VashjGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetSpeed(MOVE_WALK, 0.6f); // walk
me->SetSpeed(MOVE_RUN, 0.6f); // run
@@ -592,12 +592,12 @@ public:
VashjGUID = instance->GetData64(DATA_LADYVASHJ);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!VashjGUID)
return;
@@ -620,8 +620,8 @@ public:
if (me->IsWithinDist3d(MIDDLE_X, MIDDLE_Y, MIDDLE_Z, 3))
DoCast(me, SPELL_SURGE);
}
- if (Creature* vashj = Unit::GetCreature(*me, VashjGUID))
- if (!vashj->IsInCombat() || CAST_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->Phase != 2 || vashj->isDead())
+ if (Creature* vashj = ObjectAccessor::GetCreature(*me, VashjGUID))
+ if (!vashj->IsInCombat() || ENSURE_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->Phase != 2 || vashj->isDead())
me->Kill(me);
Move = 1000;
} else Move -= diff;
@@ -637,7 +637,7 @@ class npc_tainted_elemental : public CreatureScript
public:
npc_tainted_elemental() : CreatureScript("npc_tainted_elemental") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_tainted_elementalAI>(creature);
}
@@ -654,24 +654,24 @@ public:
uint32 PoisonBoltTimer;
uint32 DespawnTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
- PoisonBoltTimer = 5000+rand()%5000;
+ PoisonBoltTimer = 5000 + rand32() % 5000;
DespawnTimer = 30000;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
- if (Creature* vashj = Unit::GetCreature((*me), instance->GetData64(DATA_LADYVASHJ)))
- CAST_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->EventTaintedElementalDeath();
+ if (Creature* vashj = ObjectAccessor::GetCreature((*me), instance->GetData64(DATA_LADYVASHJ)))
+ ENSURE_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->EventTaintedElementalDeath();
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
me->AddThreat(who, 0.1f);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// PoisonBoltTimer
if (PoisonBoltTimer <= diff)
@@ -681,7 +681,7 @@ public:
if (target && target->IsWithinDistInMap(me, 30))
DoCast(target, SPELL_POISON_BOLT);
- PoisonBoltTimer = 5000+rand()%5000;
+ PoisonBoltTimer = 5000 + rand32() % 5000;
} else PoisonBoltTimer -= diff;
// DespawnTimer
@@ -705,7 +705,7 @@ class npc_toxic_sporebat : public CreatureScript
public:
npc_toxic_sporebat() : CreatureScript("npc_toxic_sporebat") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_toxic_sporebatAI>(creature);
}
@@ -725,7 +725,7 @@ public:
uint32 BoltTimer;
uint32 CheckTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetDisableGravity(true);
me->setFaction(14);
@@ -735,12 +735,12 @@ public:
CheckTimer = 1000;
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE
+ void MoveInLineOfSight(Unit* /*who*/) override
{
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -749,12 +749,12 @@ public:
MovementTimer = 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// Random movement
if (MovementTimer <= diff)
{
- uint32 rndpos = rand()%8;
+ uint32 rndpos = rand32() % 8;
me->GetMotionMaster()->MovePoint(1, SporebatWPPos[rndpos][0], SporebatWPPos[rndpos][1], SporebatWPPos[rndpos][2]);
MovementTimer = 6000;
} else MovementTimer -= diff;
@@ -770,7 +770,7 @@ public:
trig->CastSpell(trig, SPELL_TOXIC_SPORES, true);
}
}
- BoltTimer = 10000+rand()%5000;
+ BoltTimer = 10000 + rand32() % 5000;
}
else BoltTimer -= diff;
@@ -778,8 +778,8 @@ public:
if (CheckTimer <= diff)
{
// check if vashj is death
- Unit* Vashj = Unit::GetUnit(*me, instance->GetData64(DATA_LADYVASHJ));
- if (!Vashj || !Vashj->IsAlive() || CAST_AI(boss_lady_vashj::boss_lady_vashjAI, Vashj->ToCreature()->AI())->Phase != 3)
+ Unit* Vashj = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_LADYVASHJ));
+ if (!Vashj || !Vashj->IsAlive() || ENSURE_AI(boss_lady_vashj::boss_lady_vashjAI, Vashj->ToCreature()->AI())->Phase != 3)
{
// remove
me->setDeathState(DEAD);
@@ -801,7 +801,7 @@ class npc_shield_generator_channel : public CreatureScript
public:
npc_shield_generator_channel() : CreatureScript("npc_shield_generator_channel") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_shield_generator_channelAI>(creature);
}
@@ -817,7 +817,7 @@ public:
uint32 CheckTimer;
bool Cast;
- void Reset() OVERRIDE
+ void Reset() override
{
CheckTimer = 0;
Cast = false;
@@ -826,14 +826,14 @@ public:
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (CheckTimer <= diff)
{
- Unit* vashj = Unit::GetUnit(*me, instance->GetData64(DATA_LADYVASHJ));
+ Unit* vashj = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_LADYVASHJ));
if (vashj && vashj->IsAlive())
{
@@ -856,7 +856,7 @@ class item_tainted_core : public ItemScript
public:
item_tainted_core() : ItemScript("item_tainted_core") { }
- bool OnUse(Player* player, Item* /*item*/, SpellCastTargets const& targets) OVERRIDE
+ bool OnUse(Player* player, Item* /*item*/, SpellCastTargets const& targets) override
{
InstanceScript* instance = player->GetInstanceScript();
if (!instance)
@@ -865,8 +865,8 @@ public:
return true;
}
- Creature* vashj = Unit::GetCreature((*player), instance->GetData64(DATA_LADYVASHJ));
- if (vashj && (CAST_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->Phase == 2))
+ Creature* vashj = ObjectAccessor::GetCreature((*player), instance->GetData64(DATA_LADYVASHJ));
+ if (vashj && (ENSURE_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->Phase == 2))
{
if (GameObject* gObj = targets.GetGOTarget())
{
@@ -901,7 +901,7 @@ public:
}
// get and remove channel
- if (Unit* channel = Unit::GetCreature(*vashj, CAST_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->ShieldGeneratorChannel[channelIdentifier]))
+ if (Unit* channel = ObjectAccessor::GetCreature(*vashj, ENSURE_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->ShieldGeneratorChannel[channelIdentifier]))
channel->setDeathState(JUST_DIED); // call Unsummon()
instance->SetData(identifier, 1);
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
index f9370b44c20..fb5b4579942 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
@@ -74,7 +74,7 @@ class npc_inner_demon : public CreatureScript
public:
npc_inner_demon() : CreatureScript("npc_inner_demon") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_inner_demonAI(creature);
}
@@ -91,33 +91,33 @@ public:
uint32 Link_Timer;
uint64 victimGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
ShadowBolt_Timer = 10000;
Link_Timer = 1000;
}
- void SetGUID(uint64 guid, int32 id/* = 0 */) OVERRIDE
+ void SetGUID(uint64 guid, int32 id/* = 0 */) override
{
if (id == INNER_DEMON_VICTIM)
victimGUID = guid;
}
- uint64 GetGUID(int32 id/* = 0 */) const OVERRIDE
+ uint64 GetGUID(int32 id/* = 0 */) const override
{
if (id == INNER_DEMON_VICTIM)
return victimGUID;
return 0;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
- Unit* unit = Unit::GetUnit(*me, victimGUID);
+ Unit* unit = ObjectAccessor::GetUnit(*me, victimGUID);
if (unit && unit->HasAura(SPELL_INSIDIOUS_WHISPER))
unit->RemoveAurasDueToSpell(SPELL_INSIDIOUS_WHISPER);
}
- void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* done_by, uint32 &damage) override
{
if (done_by->GetGUID() != victimGUID && done_by->GetGUID() != me->GetGUID())
{
@@ -126,22 +126,22 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (!victimGUID)
return;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
- if (!UpdateVictim())
+ if (!UpdateVictim() || !me->GetVictim())
return;
- if (me->GetVictim()->GetGUID() != victimGUID)
+ if (me->EnsureVictim()->GetGUID() != victimGUID)
{
DoModifyThreatPercent(me->GetVictim(), -100);
- Unit* owner = Unit::GetUnit(*me, victimGUID);
+ Unit* owner = ObjectAccessor::GetUnit(*me, victimGUID);
if (owner && owner->IsAlive())
{
me->AddThreat(owner, 999999);
@@ -179,7 +179,7 @@ class boss_leotheras_the_blind : public CreatureScript
public:
boss_leotheras_the_blind() : CreatureScript("boss_leotheras_the_blind") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_leotheras_the_blindAI>(creature);
}
@@ -218,7 +218,7 @@ public:
uint64 Demon;
uint64 SpellBinderGUID[3];
- void Reset() OVERRIDE
+ void Reset() override
{
CheckChannelers();
BanishTimer = 1000;
@@ -249,7 +249,7 @@ public:
{
for (uint8 i = 0; i < 3; ++i)
{
- if (Creature* add = Unit::GetCreature(*me, SpellBinderGUID[i]))
+ if (Creature* add = ObjectAccessor::GetCreature(*me, SpellBinderGUID[i]))
add->DisappearAndDie();
float nx = x;
@@ -263,7 +263,7 @@ public:
SpellBinderGUID[i] = binder->GetGUID();
}
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (me->HasAura(AURA_BANISH))
@@ -278,7 +278,7 @@ public:
if (me->IsWithinDistInMap(who, attackRadius))
{
// Check first that object is in an angle in front of this one before LoS check
- if (me->HasInArc(M_PI/2.0f, who) && me->IsWithinLOSInMap(who))
+ if (me->HasInArc(float(M_PI) / 2.0f, who) && me->IsWithinLOSInMap(who))
{
AttackStart(who);
}
@@ -297,7 +297,7 @@ public:
uint8 AliveChannelers = 0;
for (uint8 i = 0; i < 3; ++i)
{
- Unit* add = Unit::GetUnit(*me, SpellBinderGUID[i]);
+ Unit* add = ObjectAccessor::GetUnit(*me, SpellBinderGUID[i]);
if (add && add->IsAlive())
++AliveChannelers;
}
@@ -350,7 +350,7 @@ public:
if (InnderDemon[i])
{
//delete creature
- Creature* creature = Unit::GetCreature((*me), InnderDemon[i]);
+ Creature* creature = ObjectAccessor::GetCreature((*me), InnderDemon[i]);
if (creature && creature->IsAlive())
{
creature->DespawnOrUnsummon();
@@ -368,10 +368,10 @@ public:
{
if (InnderDemon[i] > 0)
{
- Creature* unit = Unit::GetCreature((*me), InnderDemon[i]);
+ Creature* unit = ObjectAccessor::GetCreature((*me), InnderDemon[i]);
if (unit && unit->IsAlive())
{
- Unit* unit_target = Unit::GetUnit(*unit, unit->AI()->GetGUID(INNER_DEMON_VICTIM));
+ Unit* unit_target = ObjectAccessor::GetUnit(*unit, unit->AI()->GetGUID(INNER_DEMON_VICTIM));
if (unit_target && unit_target->IsAlive())
{
unit->CastSpell(unit_target, SPELL_CONSUMING_MADNESS, true);
@@ -382,7 +382,7 @@ public:
}
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -390,20 +390,20 @@ public:
Talk(DemonForm ? SAY_DEMON_SLAY : SAY_NIGHTELF_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
//despawn copy
if (Demon)
{
- if (Creature* pDemon = Unit::GetCreature(*me, Demon))
+ if (Creature* pDemon = ObjectAccessor::GetCreature(*me, Demon))
pDemon->DespawnOrUnsummon();
}
instance->SetData(DATA_LEOTHERASTHEBLINDEVENT, DONE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (me->HasAura(AURA_BANISH))
return;
@@ -411,7 +411,7 @@ public:
me->LoadEquipment();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (me->HasAura(AURA_BANISH) || !UpdateVictim())
@@ -518,8 +518,8 @@ public:
std::vector<Unit*> TargetList;
for (ThreatContainer::StorageType::const_iterator itr = ThreatList.begin(); itr != ThreatList.end(); ++itr)
{
- Unit* tempTarget = Unit::GetUnit(*me, (*itr)->getUnitGuid());
- if (tempTarget && tempTarget->GetTypeId() == TYPEID_PLAYER && tempTarget->GetGUID() != me->GetVictim()->GetGUID() && TargetList.size()<5)
+ Unit* tempTarget = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
+ if (tempTarget && tempTarget->GetTypeId() == TYPEID_PLAYER && tempTarget->GetGUID() != me->EnsureVictim()->GetGUID() && TargetList.size()<5)
TargetList.push_back(tempTarget);
}
//SpellInfo* spell = GET_SPELL(SPELL_INSIDIOUS_WHISPER);
@@ -599,7 +599,7 @@ class boss_leotheras_the_blind_demonform : public CreatureScript
public:
boss_leotheras_the_blind_demonform() : CreatureScript("boss_leotheras_the_blind_demonform") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_leotheras_the_blind_demonformAI(creature);
}
@@ -611,7 +611,7 @@ public:
uint32 ChaosBlast_Timer;
bool DealDamage;
- void Reset() OVERRIDE
+ void Reset() override
{
ChaosBlast_Timer = 1000;
DealDamage = true;
@@ -622,7 +622,7 @@ public:
Talk(SAY_FREE);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
@@ -630,18 +630,18 @@ public:
Talk(SAY_DEMON_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
//invisibility (blizzlike, at the end of the fight he doesn't die, he disappears)
DoCast(me, 8149, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
StartEvent();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -672,7 +672,7 @@ class npc_greyheart_spellbinder : public CreatureScript
public:
npc_greyheart_spellbinder() : CreatureScript("npc_greyheart_spellbinder") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_greyheart_spellbinderAI>(creature);
}
@@ -695,24 +695,24 @@ public:
bool AddedBanish;
- void Reset() OVERRIDE
+ void Reset() override
{
Mindblast_Timer = urand(3000, 8000);
Earthshock_Timer = urand(5000, 10000);
instance->SetData64(DATA_LEOTHERAS_EVENT_STARTER, 0);
- Creature* leotheras = Unit::GetCreature(*me, leotherasGUID);
+ Creature* leotheras = ObjectAccessor::GetCreature(*me, leotherasGUID);
if (leotheras && leotheras->IsAlive())
- CAST_AI(boss_leotheras_the_blind::boss_leotheras_the_blindAI, leotheras->AI())->CheckChannelers(/*false*/);
+ ENSURE_AI(boss_leotheras_the_blind::boss_leotheras_the_blindAI, leotheras->AI())->CheckChannelers(/*false*/);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
me->InterruptNonMeleeSpells(false);
instance->SetData64(DATA_LEOTHERAS_EVENT_STARTER, who->GetGUID());
}
- void JustRespawned() OVERRIDE
+ void JustRespawned() override
{
AddedBanish = false;
Reset();
@@ -724,14 +724,14 @@ public:
{
if (leotherasGUID)
{
- Creature* leotheras = Unit::GetCreature(*me, leotherasGUID);
+ Creature* leotheras = ObjectAccessor::GetCreature(*me, leotherasGUID);
if (leotheras && leotheras->IsAlive())
DoCast(leotheras, BANISH_BEAM);
}
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!leotherasGUID)
leotherasGUID = instance->GetData64(DATA_LEOTHERAS);
@@ -739,7 +739,7 @@ public:
if (!me->IsInCombat() && instance->GetData64(DATA_LEOTHERAS_EVENT_STARTER))
{
Unit* victim = NULL;
- victim = Unit::GetUnit(*me, instance->GetData64(DATA_LEOTHERAS_EVENT_STARTER));
+ victim = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_LEOTHERAS_EVENT_STARTER));
if (victim)
AttackStart(victim);
}
@@ -791,7 +791,7 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE { }
+ void JustDied(Unit* /*killer*/) override { }
};
};
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 718c32cd8ae..a0ff469733c 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
@@ -79,7 +79,7 @@ class boss_the_lurker_below : public CreatureScript
public:
boss_the_lurker_below() : CreatureScript("boss_the_lurker_below") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_the_lurker_belowAI>(creature);
}
@@ -117,7 +117,7 @@ public:
return true;
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetSwim(true);
me->SetDisableGravity(true);
@@ -127,7 +127,7 @@ public:
SpoutTimer = 45000;
WhirlTimer = 18000; // after avery spout
PhaseTimer = 120000;
- GeyserTimer = rand()%5000 + 15000;
+ GeyserTimer = rand32() % 5000 + 15000;
CheckTimer = 15000; // give time to get in range when fight starts
WaitTimer = 60000; // never reached
WaitTimer2 = 60000; // never reached
@@ -147,7 +147,7 @@ public:
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_THELURKERBELOWEVENT, DONE);
instance->SetData(DATA_STRANGE_POOL, IN_PROGRESS);
@@ -155,12 +155,12 @@ public:
Summons.DespawnAll();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
instance->SetData(DATA_THELURKERBELOWEVENT, IN_PROGRESS);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!CanStartEvent) // boss is invisible, don't attack
@@ -173,13 +173,13 @@ public:
}
}
- void MovementInform(uint32 type, uint32 /*id*/) OVERRIDE
+ void MovementInform(uint32 type, uint32 /*id*/) override
{
if (type == ROTATE_MOTION_TYPE)
me->SetReactState(REACT_AGGRESSIVE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!CanStartEvent) // boss is invisible, don't attack
{
@@ -299,7 +299,7 @@ public:
target = me->GetVictim();
if (target)
DoCast(target, SPELL_GEYSER, true);
- GeyserTimer = rand()%5000 + 15000;
+ GeyserTimer = rand32() % 5000 + 15000;
} else GeyserTimer -= diff;
if (!InRange) // if on players in melee range cast Waterbolt
@@ -365,7 +365,7 @@ class npc_coilfang_ambusher : public CreatureScript
public:
npc_coilfang_ambusher() : CreatureScript("npc_coilfang_ambusher") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_coilfang_ambusherAI(creature);
}
@@ -380,13 +380,13 @@ public:
uint32 MultiShotTimer;
uint32 ShootBowTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
MultiShotTimer = 10000;
ShootBowTimer = 4000;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!who || me->GetVictim())
@@ -396,14 +396,14 @@ public:
AttackStart(who);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (MultiShotTimer <= diff)
{
if (me->GetVictim())
DoCastVictim(SPELL_SPREAD_SHOT, true);
- MultiShotTimer = 10000+rand()%10000;
+ MultiShotTimer = 10000 + rand32() % 10000;
ShootBowTimer += 1500; // add global cooldown
} else MultiShotTimer -= diff;
@@ -412,7 +412,7 @@ public:
int bp0 = 1100;
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
me->CastCustomSpell(target, SPELL_SHOOT, &bp0, NULL, NULL, true);
- ShootBowTimer = 4000+rand()%5000;
+ ShootBowTimer = 4000 + rand32() % 5000;
MultiShotTimer += 1500; // add global cooldown
} else ShootBowTimer -= diff;
}
@@ -425,7 +425,7 @@ class go_strange_pool : public GameObjectScript
public:
go_strange_pool() : GameObjectScript("go_strange_pool") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
// 25%
if (InstanceScript* instanceScript = go->GetInstanceScript())
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp
index 77fd36f2f5e..d501b919614 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp
@@ -89,7 +89,7 @@ class boss_morogrim_tidewalker : public CreatureScript
public:
boss_morogrim_tidewalker() : CreatureScript("boss_morogrim_tidewalker") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_morogrim_tidewalkerAI>(creature);
}
@@ -116,7 +116,7 @@ public:
bool Earthquake;
bool Phase2;
- void Reset() OVERRIDE
+ void Reset() override
{
TidalWave_Timer = 10000;
WateryGrave_Timer = 30000;
@@ -140,19 +140,19 @@ public:
instance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, IN_PROGRESS);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, DONE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
PlayerList = &me->GetMap()->GetPlayers();
Playercount = PlayerList->getSize();
@@ -170,7 +170,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -197,7 +197,7 @@ public:
}
Talk(EMOTE_EARTHQUAKE);
Earthquake = false;
- Earthquake_Timer = 40000+rand()%5000;
+ Earthquake_Timer = 40000 + rand32() % 5000;
}
} else Earthquake_Timer -= diff;
@@ -289,7 +289,7 @@ class npc_water_globule : public CreatureScript
public:
npc_water_globule() : CreatureScript("npc_water_globule") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_water_globuleAI(creature);
}
@@ -300,7 +300,7 @@ public:
uint32 Check_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Check_Timer = 1000;
@@ -309,9 +309,9 @@ public:
me->setFaction(14);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!who || me->GetVictim())
@@ -325,7 +325,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
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 528726723ed..bc557d97ef5 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp
@@ -64,7 +64,7 @@ class go_bridge_console : public GameObjectScript
public:
go_bridge_console() : GameObjectScript("go_bridge_console") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
InstanceScript* instance = go->GetInstanceScript();
@@ -89,7 +89,7 @@ class instance_serpent_shrine : public InstanceMapScript
{
}
- void Initialize() OVERRIDE
+ void Initialize() override
{
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
@@ -122,7 +122,7 @@ class instance_serpent_shrine : public InstanceMapScript
}
- bool IsEncounterInProgress() const OVERRIDE
+ bool IsEncounterInProgress() const override
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
@@ -131,7 +131,7 @@ class instance_serpent_shrine : public InstanceMapScript
return false;
}
- void Update(uint32 diff) OVERRIDE
+ void Update(uint32 diff) override
{
//Water checks
if (WaterCheckTimer <= diff)
@@ -191,7 +191,7 @@ class instance_serpent_shrine : public InstanceMapScript
FrenzySpawnTimer -= diff;
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -216,7 +216,7 @@ class instance_serpent_shrine : public InstanceMapScript
}
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -246,7 +246,7 @@ class instance_serpent_shrine : public InstanceMapScript
}
}
- void SetData64(uint32 type, uint64 data) OVERRIDE
+ void SetData64(uint32 type, uint64 data) override
{
if (type == DATA_KARATHRESSEVENT_STARTER)
KarathressEvent_Starter = data;
@@ -254,7 +254,7 @@ class instance_serpent_shrine : public InstanceMapScript
LeotherasEventStarter = data;
}
- uint64 GetData64(uint32 identifier) const OVERRIDE
+ uint64 GetData64(uint32 identifier) const override
{
switch (identifier)
{
@@ -282,7 +282,7 @@ class instance_serpent_shrine : public InstanceMapScript
return 0;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -352,7 +352,7 @@ class instance_serpent_shrine : public InstanceMapScript
SaveToDB();
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -392,7 +392,7 @@ class instance_serpent_shrine : public InstanceMapScript
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
std::ostringstream stream;
@@ -402,7 +402,7 @@ class instance_serpent_shrine : public InstanceMapScript
return stream.str();
}
- void Load(const char* in) OVERRIDE
+ void Load(const char* in) override
{
if (!in)
{
@@ -447,7 +447,7 @@ class instance_serpent_shrine : public InstanceMapScript
bool DoSpawnFrenzy;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_serpentshrine_cavern_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp
index 70b36e31713..d4fdb262c8e 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp
@@ -19,156 +19,169 @@
#include "ScriptedCreature.h"
#include "steam_vault.h"
-enum HydromancerThespia
+enum Yells
{
SAY_SUMMON = 0,
SAY_AGGRO = 1,
SAY_SLAY = 2,
SAY_DEAD = 3,
+};
+enum Spells
+{
SPELL_LIGHTNING_CLOUD = 25033,
SPELL_LUNG_BURST = 31481,
- SPELL_ENVELOPING_WINDS = 31718,
+ SPELL_ENVELOPING_WINDS = 31718
+};
- SPELL_WATER_BOLT_VOLLEY = 34449,
- H_SPELL_WATER_BOLT_VOLLEY = 37924
+enum Events
+{
+ EVENT_LIGHTNING_CLOUD = 1,
+ EVENT_LUNG_BURST,
+ EVENT_ENVELOPING_WINDS
};
class boss_hydromancer_thespia : public CreatureScript
{
-public:
- boss_hydromancer_thespia() : CreatureScript("boss_hydromancer_thespia") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return GetInstanceAI<boss_thespiaAI>(creature);
- }
-
- struct boss_thespiaAI : public ScriptedAI
- {
- boss_thespiaAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = creature->GetInstanceScript();
- }
-
- InstanceScript* instance;
-
- uint32 LightningCloud_Timer;
- uint32 LungBurst_Timer;
- uint32 EnvelopingWinds_Timer;
-
- void Reset() OVERRIDE
- {
- LightningCloud_Timer = 15000;
- LungBurst_Timer = 7000;
- EnvelopingWinds_Timer = 9000;
-
- instance->SetBossState(DATA_HYDROMANCER_THESPIA, NOT_STARTED);
- }
-
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- Talk(SAY_DEAD);
-
- instance->SetBossState(DATA_HYDROMANCER_THESPIA, DONE);
- }
-
- void KilledUnit(Unit* /*victim*/) OVERRIDE
- {
- Talk(SAY_SLAY);
- }
+ public:
+ boss_hydromancer_thespia() : CreatureScript("boss_hydromancer_thespia") { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ struct boss_thespiaAI : public BossAI
{
- Talk(SAY_AGGRO);
+ boss_thespiaAI(Creature* creature) : BossAI(creature, DATA_HYDROMANCER_THESPIA) { }
- instance->SetBossState(DATA_HYDROMANCER_THESPIA, IN_PROGRESS);
- }
+ void Reset() override
+ {
+ _Reset();
+ }
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (!UpdateVictim())
- return;
+ void JustDied(Unit* /*killer*/) override
+ {
+ Talk(SAY_DEAD);
+ _JustDied();
+ }
- //LightningCloud_Timer
- if (LightningCloud_Timer <= diff)
+ void KilledUnit(Unit* who) override
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_LIGHTNING_CLOUD);
+ if (who->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_SLAY);
+ }
- //cast twice in Heroic mode
- if (IsHeroic())
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_LIGHTNING_CLOUD);
+ void EnterCombat(Unit* /*who*/) override
+ {
+ Talk(SAY_AGGRO);
+ _EnterCombat();
- LightningCloud_Timer = 15000+rand()%10000;
- } else LightningCloud_Timer -=diff;
+ events.ScheduleEvent(EVENT_LIGHTNING_CLOUD, 15000);
+ events.ScheduleEvent(EVENT_LUNG_BURST, 7000);
+ events.ScheduleEvent(EVENT_ENVELOPING_WINDS, 9000);
+ }
- //LungBurst_Timer
- if (LungBurst_Timer <= diff)
+ void ExecuteEvent(uint32 eventId) override
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_LUNG_BURST);
- LungBurst_Timer = 7000+rand()%5000;
- } else LungBurst_Timer -=diff;
-
- //EnvelopingWinds_Timer
- if (EnvelopingWinds_Timer <= diff)
+ switch (eventId)
+ {
+ case EVENT_LIGHTNING_CLOUD:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true))
+ DoCast(target, SPELL_LIGHTNING_CLOUD);
+ // cast twice in Heroic mode
+ if (IsHeroic())
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true))
+ DoCast(target, SPELL_LIGHTNING_CLOUD);
+
+ events.ScheduleEvent(EVENT_LIGHTNING_CLOUD, urand(15000, 25000));
+ break;
+ case EVENT_LUNG_BURST:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true))
+ DoCast(target, SPELL_LUNG_BURST);
+ events.ScheduleEvent(EVENT_LUNG_BURST, urand(7000, 12000));
+ break;
+ case EVENT_ENVELOPING_WINDS:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 35.0f, true))
+ DoCast(target, SPELL_ENVELOPING_WINDS);
+ // cast twice in Heroic mode
+ if (IsHeroic())
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 35.0f, true))
+ DoCast(target, SPELL_ENVELOPING_WINDS);
+
+ events.ScheduleEvent(EVENT_ENVELOPING_WINDS, urand(10000, 15000));
+ break;
+ default:
+ break;
+ }
+ }
+
+ void UpdateAI(uint32 diff) override
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_ENVELOPING_WINDS);
-
- //cast twice in Heroic mode
- if (IsHeroic())
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_ENVELOPING_WINDS);
- EnvelopingWinds_Timer = 10000+rand()%5000;
- } else EnvelopingWinds_Timer -=diff;
+ BossAI::UpdateAI(diff);
+ }
+ };
- DoMeleeAttackIfReady();
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_thespiaAI>(creature);
}
- };
+};
+enum CoilfangWaterElemental
+{
+ EVENT_WATER_BOLT_VOLLEY = 1,
+ SPELL_WATER_BOLT_VOLLEY = 34449
};
class npc_coilfang_waterelemental : public CreatureScript
{
-public:
- npc_coilfang_waterelemental() : CreatureScript("npc_coilfang_waterelemental") { }
+ public:
+ npc_coilfang_waterelemental() : CreatureScript("npc_coilfang_waterelemental") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_coilfang_waterelementalAI(creature);
- }
-
- struct npc_coilfang_waterelementalAI : public ScriptedAI
- {
- npc_coilfang_waterelementalAI(Creature* creature) : ScriptedAI(creature) { }
-
- uint32 WaterBoltVolley_Timer;
-
- void Reset() OVERRIDE
+ struct npc_coilfang_waterelementalAI : public ScriptedAI
{
- WaterBoltVolley_Timer = 3000+rand()%3000;
- }
-
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ npc_coilfang_waterelementalAI(Creature* creature) : ScriptedAI(creature) { }
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (!UpdateVictim())
- return;
+ void Reset() override
+ {
+ _events.Reset();
+ }
- if (WaterBoltVolley_Timer <= diff)
+ void EnterCombat(Unit* /*who*/) override
{
- DoCast(me, SPELL_WATER_BOLT_VOLLEY);
- WaterBoltVolley_Timer = 7000+rand()%5000;
- } else WaterBoltVolley_Timer -= diff;
+ _events.ScheduleEvent(EVENT_WATER_BOLT_VOLLEY, urand(3000, 6000));
+ }
- DoMeleeAttackIfReady();
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ _events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_WATER_BOLT_VOLLEY:
+ DoCast(me, SPELL_WATER_BOLT_VOLLEY);
+ _events.ScheduleEvent(EVENT_WATER_BOLT_VOLLEY, urand(7000, 12000));
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
+ }
+
+ private:
+ EventMap _events;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_coilfang_waterelementalAI(creature);
}
- };
-
};
void AddSC_boss_hydromancer_thespia()
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp
index 3661ebc8cc3..78a14539e25 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp
@@ -55,7 +55,7 @@ class boss_mekgineer_steamrigger : public CreatureScript
public:
boss_mekgineer_steamrigger() : CreatureScript("boss_mekgineer_steamrigger") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_mekgineer_steamriggerAI>(creature);
}
@@ -76,7 +76,7 @@ public:
bool Summon50;
bool Summon25;
- void Reset() OVERRIDE
+ void Reset() override
{
Shrink_Timer = 20000;
Saw_Blade_Timer = 15000;
@@ -89,19 +89,19 @@ public:
instance->SetBossState(DATA_MEKGINEER_STEAMRIGGER, NOT_STARTED);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetBossState(DATA_MEKGINEER_STEAMRIGGER, DONE);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
@@ -117,13 +117,13 @@ public:
DoSpawnCreature(NPC_STREAMRIGGER_MECHANIC, -5, 5, 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 240000);
DoSpawnCreature(NPC_STREAMRIGGER_MECHANIC, -5, -5, 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 240000);
- if (rand()%2)
+ if (rand32() % 2)
DoSpawnCreature(NPC_STREAMRIGGER_MECHANIC, 5, -7, 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 240000);
- if (rand()%2)
+ if (rand32() % 2)
DoSpawnCreature(NPC_STREAMRIGGER_MECHANIC, 7, -5, 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 240000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -192,7 +192,7 @@ class npc_steamrigger_mechanic : public CreatureScript
public:
npc_steamrigger_mechanic() : CreatureScript("npc_steamrigger_mechanic") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_steamrigger_mechanicAI>(creature);
}
@@ -208,19 +208,19 @@ public:
uint32 Repair_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Repair_Timer = 2000;
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE
+ void MoveInLineOfSight(Unit* /*who*/) override
{
//react only if attacked
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (Repair_Timer <= diff)
{
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp
index fe035fc1dec..8024d5138eb 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp
@@ -48,7 +48,7 @@ class npc_naga_distiller : public CreatureScript
public:
npc_naga_distiller() : CreatureScript("npc_naga_distiller") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_naga_distillerAI>(creature);
}
@@ -62,7 +62,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -75,7 +75,7 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
void StartRageGen(Unit* /*caster*/)
{
@@ -87,7 +87,7 @@ public:
instance->SetData(DATA_DISTILLER, IN_PROGRESS);
}
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
if (me->GetHealth() <= damage)
instance->SetData(DATA_DISTILLER, DONE);
@@ -101,7 +101,7 @@ class boss_warlord_kalithresh : public CreatureScript
public:
boss_warlord_kalithresh() : CreatureScript("boss_warlord_kalithresh") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_warlord_kalithreshAI>(creature);
}
@@ -120,29 +120,29 @@ public:
uint32 Rage_Timer;
bool CanRage;
- void Reset() OVERRIDE
+ void Reset() override
{
Reflection_Timer = 10000;
- Impale_Timer = 7000+rand()%7000;
+ Impale_Timer = 7000 + rand32() % 7000;
Rage_Timer = 45000;
CanRage = false;
instance->SetBossState(DATA_WARLORD_KALITHRESH, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetBossState(DATA_WARLORD_KALITHRESH, IN_PROGRESS);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
//hack :(
if (spell->Id == SPELL_WARLORDS_RAGE_PROC)
@@ -150,14 +150,14 @@ public:
me->RemoveAurasDueToSpell(SPELL_WARLORDS_RAGE_PROC);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetBossState(DATA_WARLORD_KALITHRESH, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -168,16 +168,16 @@ public:
{
Talk(SAY_REGEN);
DoCast(me, SPELL_WARLORDS_RAGE);
- CAST_AI(npc_naga_distiller::npc_naga_distillerAI, distiller->AI())->StartRageGen(me);
+ ENSURE_AI(npc_naga_distiller::npc_naga_distillerAI, distiller->AI())->StartRageGen(me);
}
- Rage_Timer = 3000+rand()%15000;
+ Rage_Timer = 3000 + rand32() % 15000;
} else Rage_Timer -= diff;
//Reflection_Timer
if (Reflection_Timer <= diff)
{
DoCast(me, SPELL_SPELL_REFLECTION);
- Reflection_Timer = 15000+rand()%10000;
+ Reflection_Timer = 15000 + rand32() % 10000;
} else Reflection_Timer -= diff;
//Impale_Timer
@@ -186,7 +186,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_IMPALE);
- Impale_Timer = 7500+rand()%5000;
+ Impale_Timer = 7500 + rand32() % 5000;
} else Impale_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp
index bd2d4d5f416..19e8c5187ba 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp
@@ -24,7 +24,7 @@ class go_main_chambers_access_panel : public GameObjectScript
public:
go_main_chambers_access_panel() : GameObjectScript("go_main_chambers_access_panel") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
InstanceScript* instance = go->GetInstanceScript();
if (!instance)
@@ -65,7 +65,7 @@ class instance_steam_vault : public InstanceMapScript
DistillerState = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -83,7 +83,7 @@ class instance_steam_vault : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -95,7 +95,7 @@ class instance_steam_vault : public InstanceMapScript
}
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -111,20 +111,20 @@ class instance_steam_vault : public InstanceMapScript
return 0;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
if (type == DATA_DISTILLER)
DistillerState = data;
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_DISTILLER)
return DistillerState;
return 0;
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -156,7 +156,7 @@ class instance_steam_vault : public InstanceMapScript
return true;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -167,7 +167,7 @@ class instance_steam_vault : public InstanceMapScript
return saveStream.str();
}
- void Load(char const* str) OVERRIDE
+ void Load(char const* str) override
{
if (!str)
{
@@ -208,7 +208,7 @@ class instance_steam_vault : public InstanceMapScript
uint8 DistillerState;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_steam_vault_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp
index 7243b6e6738..1037f92cc42 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp
@@ -60,18 +60,18 @@ class boss_mennu_the_betrayer : public CreatureScript
{
boss_mennu_the_betrayerAI(Creature* creature) : BossAI(creature, DATA_MENNU_THE_BETRAYER) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_TAINTED_STONESKIN_TOTEM, 30000);
@@ -82,12 +82,12 @@ class boss_mennu_the_betrayer : public CreatureScript
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -129,7 +129,7 @@ class boss_mennu_the_betrayer : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_mennu_the_betrayerAI(creature);
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp
index 856e90405cb..a71c9660623 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp
@@ -51,17 +51,17 @@ class boss_quagmirran : public CreatureScript
{
boss_quagmirranAI(Creature* creature) : BossAI(creature, DATA_QUAGMIRRAN) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_ACID_SPRAY, 25000);
@@ -70,9 +70,9 @@ class boss_quagmirran : public CreatureScript
events.ScheduleEvent(EVENT_POISON_BOLT_VOLLEY, 31000);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE { }
+ void KilledUnit(Unit* /*victim*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -112,7 +112,7 @@ class boss_quagmirran : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_quagmirranAI(creature);
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp
index a819b59d359..6fb41f2eab5 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp
@@ -50,18 +50,18 @@ class boss_rokmar_the_crackler : public CreatureScript
{
boss_rokmar_the_cracklerAI(Creature* creature) : BossAI(creature, DATA_MENNU_THE_BETRAYER) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
rokmarFrenzy = false;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_GRIEVOUS_WOUND, 10000);
@@ -69,9 +69,9 @@ class boss_rokmar_the_crackler : public CreatureScript
events.ScheduleEvent(EVENT_WATER_SPIT, 14000);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE { }
+ void KilledUnit(Unit* /*victim*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -115,7 +115,7 @@ class boss_rokmar_the_crackler : public CreatureScript
bool rokmarFrenzy;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_rokmar_the_cracklerAI(creature);
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp
index e942d0987fc..b6860d3e74c 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp
@@ -31,7 +31,7 @@ class instance_the_slave_pens : public InstanceMapScript
public:
instance_the_slave_pens() : InstanceMapScript(SPScriptName, 547) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_the_slave_pens_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp
index 1ea58bce0ca..90853138448 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp
@@ -41,7 +41,7 @@ class boss_hungarfen : public CreatureScript
public:
boss_hungarfen() : CreatureScript("boss_hungarfen") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_hungarfenAI(creature);
}
@@ -56,18 +56,18 @@ public:
uint32 Mushroom_Timer;
uint32 AcidGeyser_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Root = false;
Mushroom_Timer = 5000; // 1 mushroom after 5s, then one per 10s. This should be different in heroic mode
AcidGeyser_Timer = 10000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -84,9 +84,9 @@ public:
if (Mushroom_Timer <= diff)
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- me->SummonCreature(17990, target->GetPositionX()+(rand()%8), target->GetPositionY()+(rand()%8), target->GetPositionZ(), float(rand()%5), TEMPSUMMON_TIMED_DESPAWN, 22000);
+ me->SummonCreature(17990, target->GetPositionX() + (rand32() % 8), target->GetPositionY() + (rand32() % 8), target->GetPositionZ(), float(rand32() % 5), TEMPSUMMON_TIMED_DESPAWN, 22000);
else
- me->SummonCreature(17990, me->GetPositionX()+(rand()%8), me->GetPositionY()+(rand()%8), me->GetPositionZ(), float(rand()%5), TEMPSUMMON_TIMED_DESPAWN, 22000);
+ me->SummonCreature(17990, me->GetPositionX() + (rand32() % 8), me->GetPositionY() + (rand32() % 8), me->GetPositionZ(), float(rand32() % 5), TEMPSUMMON_TIMED_DESPAWN, 22000);
Mushroom_Timer = 10000;
} else Mushroom_Timer -= diff;
@@ -95,7 +95,7 @@ public:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_ACID_GEYSER);
- AcidGeyser_Timer = 10000+rand()%7500;
+ AcidGeyser_Timer = 10000 + rand32() % 7500;
} else AcidGeyser_Timer -= diff;
DoMeleeAttackIfReady();
@@ -109,7 +109,7 @@ class npc_underbog_mushroom : public CreatureScript
public:
npc_underbog_mushroom() : CreatureScript("npc_underbog_mushroom") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_underbog_mushroomAI(creature);
}
@@ -122,7 +122,7 @@ public:
uint32 Grow_Timer;
uint32 Shrink_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Stop = false;
Grow_Timer = 0;
@@ -132,14 +132,14 @@ public:
DoCast(me, SPELL_SPORE_CLOUD, true);
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
+ void AttackStart(Unit* /*who*/) override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (Stop)
return;
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp
index 13ebf22436c..7090a693876 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp
@@ -47,7 +47,7 @@ class boss_the_black_stalker : public CreatureScript
public:
boss_the_black_stalker() : CreatureScript("boss_the_black_stalker") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_the_black_stalkerAI(creature);
}
@@ -68,21 +68,21 @@ public:
uint32 check_Timer;
std::list<uint64> Striders;
- void Reset() OVERRIDE
+ void Reset() override
{
Levitate_Timer = 12000;
ChainLightning_Timer = 6000;
StaticCharge_Timer = 10000;
- SporeStriders_Timer = 10000+rand()%5000;
+ SporeStriders_Timer = 10000 + rand32() % 5000;
check_Timer = 5000;
LevitatedTarget = 0;
LevitatedTarget_Timer = 0;
Striders.clear();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (summon && summon->GetEntry() == ENTRY_SPORE_STRIDER)
{
@@ -95,14 +95,14 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
for (std::list<uint64>::const_iterator i = Striders.begin(); i != Striders.end(); ++i)
- if (Creature* strider = Unit::GetCreature(*me, *i))
+ if (Creature* strider = ObjectAccessor::GetCreature(*me, *i))
strider->DisappearAndDie();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -124,7 +124,7 @@ public:
if (IsHeroic() && SporeStriders_Timer <= diff)
{
DoCast(me, SPELL_SUMMON_SPORE_STRIDER);
- SporeStriders_Timer = 10000+rand()%5000;
+ SporeStriders_Timer = 10000 + rand32() % 5000;
} else SporeStriders_Timer -= diff;
// Levitate
@@ -132,7 +132,7 @@ public:
{
if (LevitatedTarget_Timer <= diff)
{
- if (Unit* target = Unit::GetUnit(*me, LevitatedTarget))
+ if (Unit* target = ObjectAccessor::GetUnit(*me, LevitatedTarget))
{
if (!target->HasAura(SPELL_LEVITATE))
{
@@ -164,7 +164,7 @@ public:
LevitatedTarget_Timer = 2000;
InAir = false;
}
- Levitate_Timer = 12000+rand()%3000;
+ Levitate_Timer = 12000 + rand32() % 3000;
} else Levitate_Timer -= diff;
// Chain Lightning
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp
index 9249cadbe49..f950a61133e 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp
@@ -30,7 +30,7 @@ class instance_the_underbog : public InstanceMapScript
public:
instance_the_underbog() : InstanceMapScript("instance_the_underbog", 546) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_the_underbog_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
index 917dda1389a..592ffc1f69e 100644
--- a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
+++ b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
@@ -83,7 +83,7 @@ class boss_gruul : public CreatureScript
bool m_bPerformingGroundSlam;
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
m_uiGrowth_Timer= 30000;
@@ -95,25 +95,25 @@ class boss_gruul : public CreatureScript
m_uiReverberation_Timer= 60000+45000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void SpellHitTarget(Unit* target, const SpellInfo* pSpell) OVERRIDE
+ void SpellHitTarget(Unit* target, const SpellInfo* pSpell) override
{
//This to emulate effect1 (77) of SPELL_GROUND_SLAM, knock back to any direction
//It's initially wrong, since this will cause fall damage, which is by comments, not intended.
@@ -153,7 +153,7 @@ class boss_gruul : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -250,7 +250,7 @@ class boss_gruul : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetGruulsLairAI<boss_gruulAI>(creature);
}
@@ -265,7 +265,7 @@ class spell_gruul_shatter : public SpellScriptLoader
{
PrepareSpellScript(spell_gruul_shatter_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_STONED))
return false;
@@ -283,13 +283,13 @@ class spell_gruul_shatter : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gruul_shatter_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gruul_shatter_SpellScript();
}
@@ -318,13 +318,13 @@ class spell_gruul_shatter_effect : public SpellScriptLoader
SetHitDamage(int32(GetHitDamage() * ((radius - distance) / radius)));
}
- void Register() OVERRIDE
+ void Register() override
{
OnHit += SpellHitFn(spell_gruul_shatter_effect_SpellScript::CalculateDamage);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gruul_shatter_effect_SpellScript();
}
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 f14e6badc35..3b7bb0c4312 100644
--- a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp
+++ b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp
@@ -90,7 +90,7 @@ public:
bool Phase2;
- void Reset() OVERRIDE
+ void Reset() override
{
ArcingSmash_Timer = 10000;
MightyBlow_Timer = 40000;
@@ -105,12 +105,12 @@ public:
instance->SetBossState(DATA_MAULGAR, NOT_STARTED);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -123,14 +123,14 @@ public:
Talk(SAY_OGRE_DEATH);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
instance->SetBossState(DATA_MAULGAR, IN_PROGRESS);
Talk(SAY_AGGRO);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -153,7 +153,7 @@ public:
if (MightyBlow_Timer <= diff)
{
DoCastVictim(SPELL_MIGHTY_BLOW);
- MightyBlow_Timer = 30000+rand()%10000;
+ MightyBlow_Timer = 30000 + rand32() % 10000;
} else MightyBlow_Timer -= diff;
//Entering Phase 2
@@ -186,7 +186,7 @@ public:
if (Roar_Timer <= diff)
{
DoCast(me, SPELL_ROAR);
- Roar_Timer = 40000+(rand()%10000);
+ Roar_Timer = 40000 + (rand32() % 10000);
} else Roar_Timer -= diff;
}
@@ -194,7 +194,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetGruulsLairAI<boss_high_king_maulgarAI>(creature);
}
@@ -218,7 +218,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
DarkDecay_Timer = 10000;
Summon_Timer = 15000;
@@ -227,7 +227,7 @@ public:
instance->SetBossState(DATA_MAULGAR, NOT_STARTED);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who)
return;
@@ -242,13 +242,13 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
instance->SetBossState(DATA_MAULGAR, IN_PROGRESS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* maulgar = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MAULGAR)))
maulgar->AI()->DoAction(ACTION_ADD_DEATH);
@@ -256,7 +256,7 @@ public:
instance->SetBossState(DATA_MAULGAR, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -289,7 +289,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetGruulsLairAI<boss_olm_the_summonerAI>(creature);
}
@@ -315,7 +315,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
GreaterPolymorph_Timer = 5000;
LightningBolt_Timer = 10000;
@@ -325,13 +325,13 @@ public:
instance->SetBossState(DATA_MAULGAR, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
instance->SetBossState(DATA_MAULGAR, IN_PROGRESS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* maulgar = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MAULGAR)))
maulgar->AI()->DoAction(ACTION_ADD_DEATH);
@@ -339,7 +339,7 @@ public:
instance->SetBossState(DATA_MAULGAR, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -378,7 +378,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetGruulsLairAI<boss_kiggler_the_crazedAI>(creature);
}
@@ -402,7 +402,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
GreaterPowerWordShield_Timer = 5000;
Heal_Timer = urand(25000, 40000);
@@ -411,13 +411,13 @@ public:
instance->SetBossState(DATA_MAULGAR, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
instance->SetBossState(DATA_MAULGAR, IN_PROGRESS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* maulgar = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MAULGAR)))
maulgar->AI()->DoAction(ACTION_ADD_DEATH);
@@ -425,7 +425,7 @@ public:
instance->SetBossState(DATA_MAULGAR, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -455,7 +455,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetGruulsLairAI<boss_blindeye_the_seerAI>(creature);
}
@@ -479,7 +479,7 @@ public:
InstanceScript* instance;
- void Reset() OVERRIDE
+ void Reset() override
{
GreaterFireball_Timer = 1000;
SpellShield_Timer = 5000;
@@ -488,13 +488,13 @@ public:
instance->SetBossState(DATA_MAULGAR, NOT_STARTED);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
instance->SetBossState(DATA_MAULGAR, IN_PROGRESS);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Creature* maulgar = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MAULGAR)))
maulgar->AI()->DoAction(ACTION_ADD_DEATH);
@@ -502,7 +502,7 @@ public:
instance->SetBossState(DATA_MAULGAR, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -530,14 +530,14 @@ public:
std::vector<Unit*> target_list;
for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)
{
- target = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
//15 yard radius minimum
if (target && target->IsWithinDist(me, 15, false))
target_list.push_back(target);
target = NULL;
}
if (!target_list.empty())
- target = *(target_list.begin()+rand()%target_list.size());
+ target = *(target_list.begin() + rand32() % target_list.size());
me->InterruptNonMeleeSpells(false);
DoCast(target, SPELL_BLAST_WAVE);
@@ -546,7 +546,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetGruulsLairAI<boss_krosh_firehandAI>(creature);
}
diff --git a/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp b/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp
index caba33e1513..ae3971a943e 100644
--- a/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp
+++ b/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp
@@ -51,7 +51,7 @@ class instance_gruuls_lair : public InstanceMapScript
MaulgarGUID = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -69,7 +69,7 @@ class instance_gruuls_lair : public InstanceMapScript
}
}
- void OnCreatureRemove(Creature* creature) OVERRIDE
+ void OnCreatureRemove(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -85,7 +85,7 @@ class instance_gruuls_lair : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -98,7 +98,7 @@ class instance_gruuls_lair : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -111,7 +111,7 @@ class instance_gruuls_lair : public InstanceMapScript
}
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -123,7 +123,7 @@ class instance_gruuls_lair : public InstanceMapScript
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -134,7 +134,7 @@ class instance_gruuls_lair : public InstanceMapScript
return saveStream.str();
}
- void Load(char const* str) OVERRIDE
+ void Load(char const* str) override
{
if (!str)
{
@@ -170,7 +170,7 @@ class instance_gruuls_lair : public InstanceMapScript
uint64 MaulgarGUID;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_gruuls_lair_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
index f610d6dd7e0..55e9801320f 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
@@ -57,7 +57,7 @@ class boss_broggok : public CreatureScript
uint32 PoisonBolt_Timer;
bool canAttack;
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
AcidSpray_Timer = 10000;
@@ -66,13 +66,13 @@ class boss_broggok : public CreatureScript
DoAction(ACTION_RESET_BROGGOK);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -83,7 +83,7 @@ class boss_broggok : public CreatureScript
if (AcidSpray_Timer <= diff)
{
DoCastVictim(SPELL_SLIME_SPRAY);
- AcidSpray_Timer = 4000+rand()%8000;
+ AcidSpray_Timer = 4000 + rand32() % 8000;
}
else
AcidSpray_Timer -=diff;
@@ -91,7 +91,7 @@ class boss_broggok : public CreatureScript
if (PoisonBolt_Timer <= diff)
{
DoCastVictim(SPELL_POISON_BOLT);
- PoisonBolt_Timer = 4000+rand()%8000;
+ PoisonBolt_Timer = 4000 + rand32() % 8000;
}
else
PoisonBolt_Timer -=diff;
@@ -107,12 +107,12 @@ class boss_broggok : public CreatureScript
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -134,7 +134,7 @@ class boss_broggok : public CreatureScript
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetBloodFurnaceAI<boss_broggokAI>(creature);
}
@@ -153,15 +153,15 @@ class npc_broggok_poison_cloud : public CreatureScript
creature->SetReactState(REACT_PASSIVE);
}
- void IsSummonedBy(Unit* /*summoner*/) OVERRIDE
+ void IsSummonedBy(Unit* /*summoner*/) override
{
DoCast(me, SPELL_POISON_CLOUD_PASSIVE, true);
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_broggok_poison_cloudAI(creature);
}
@@ -172,7 +172,7 @@ class go_broggok_lever : public GameObjectScript
public:
go_broggok_lever() : GameObjectScript("go_broggok_lever") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
if (InstanceScript* instance = go->GetInstanceScript())
if (instance->GetBossState(DATA_BROGGOK) != DONE && instance->GetBossState(DATA_BROGGOK) != IN_PROGRESS)
@@ -197,7 +197,7 @@ class spell_broggok_poison_cloud : public SpellScriptLoader
{
PrepareAuraScript(spell_broggok_poison_cloud_AuraScript);
- bool Validate(SpellInfo const* spellInfo) OVERRIDE
+ bool Validate(SpellInfo const* spellInfo) override
{
if (!sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_0].TriggerSpell))
return false;
@@ -213,13 +213,13 @@ class spell_broggok_poison_cloud : public SpellScriptLoader
GetTarget()->CastCustomSpell(triggerSpell, SPELLVALUE_RADIUS_MOD, mod, (Unit*)NULL, TRIGGERED_FULL_MASK, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_broggok_poison_cloud_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_broggok_poison_cloud_AuraScript();
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp
index e9a8a68b116..b2f199008d0 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp
@@ -78,7 +78,7 @@ class boss_kelidan_the_breaker : public CreatureScript
bool addYell;
uint64 Channelers[5];
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
ShadowVolley_Timer = 1000;
@@ -92,7 +92,7 @@ class boss_kelidan_the_breaker : public CreatureScript
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
_EnterCombat();
Talk(SAY_WAKE);
@@ -101,9 +101,9 @@ class boss_kelidan_the_breaker : public CreatureScript
DoStartMovement(who);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
- if (rand()%2)
+ if (rand32() % 2)
return;
Talk(SAY_KILL);
@@ -118,7 +118,7 @@ class boss_kelidan_the_breaker : public CreatureScript
}
for (uint8 i=0; i<5; ++i)
{
- Creature* channeler = Unit::GetCreature(*me, Channelers[i]);
+ Creature* channeler = ObjectAccessor::GetCreature(*me, Channelers[i]);
if (who && channeler && !channeler->IsInCombat())
channeler->AI()->AttackStart(who);
}
@@ -128,7 +128,7 @@ class boss_kelidan_the_breaker : public CreatureScript
{
for (uint8 i=0; i<5; ++i)
{
- Creature* channeler = Unit::GetCreature(*me, Channelers[i]);
+ Creature* channeler = ObjectAccessor::GetCreature(*me, Channelers[i]);
if (channeler && channeler->IsAlive())
return;
}
@@ -147,7 +147,7 @@ class boss_kelidan_the_breaker : public CreatureScript
uint8 i;
for (i=0; i<5; ++i)
{
- Creature* channeler = Unit::GetCreature(*me, Channelers[i]);
+ Creature* channeler = ObjectAccessor::GetCreature(*me, Channelers[i]);
if (channeler && channeler->GetGUID() == channeler1->GetGUID())
break;
}
@@ -158,7 +158,7 @@ class boss_kelidan_the_breaker : public CreatureScript
{
for (uint8 i=0; i<5; ++i)
{
- Creature* channeler = Unit::GetCreature(*me, Channelers[i]);
+ Creature* channeler = ObjectAccessor::GetCreature(*me, Channelers[i]);
if (!channeler || channeler->isDead())
channeler = me->SummonCreature(ENTRY_CHANNELER, ShadowmoonChannelers[i][0], ShadowmoonChannelers[i][1], ShadowmoonChannelers[i][2], ShadowmoonChannelers[i][3], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000);
if (channeler)
@@ -168,13 +168,13 @@ class boss_kelidan_the_breaker : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DIE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
{
@@ -206,7 +206,7 @@ class boss_kelidan_the_breaker : public CreatureScript
if (ShadowVolley_Timer <= diff)
{
DoCast(me, SPELL_SHADOW_BOLT_VOLLEY);
- ShadowVolley_Timer = 5000+rand()%8000;
+ ShadowVolley_Timer = 5000 + rand32() % 8000;
}
else
ShadowVolley_Timer -=diff;
@@ -214,7 +214,7 @@ class boss_kelidan_the_breaker : public CreatureScript
if (Corruption_Timer <= diff)
{
DoCast(me, SPELL_CORRUPTION);
- Corruption_Timer = 30000+rand()%20000;
+ Corruption_Timer = 30000 + rand32() % 20000;
}
else
Corruption_Timer -=diff;
@@ -235,7 +235,7 @@ class boss_kelidan_the_breaker : public CreatureScript
if (IsHeroic())
DoTeleportAll(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
- BurningNova_Timer = 20000+rand()%8000;
+ BurningNova_Timer = 20000 + rand32() % 8000;
Firenova_Timer= 5000;
Firenova = true;
}
@@ -246,7 +246,7 @@ class boss_kelidan_the_breaker : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetBloodFurnaceAI<boss_kelidan_the_breakerAI>(creature);
}
@@ -279,31 +279,31 @@ class npc_shadowmoon_channeler : public CreatureScript
uint32 MarkOfShadow_Timer;
uint32 check_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
- ShadowBolt_Timer = 1000+rand()%1000;
- MarkOfShadow_Timer = 5000+rand()%2000;
+ ShadowBolt_Timer = 1000 + rand32() % 1000;
+ MarkOfShadow_Timer = 5000 + rand32() % 2000;
check_Timer = 0;
if (me->IsNonMeleeSpellCast(false))
me->InterruptNonMeleeSpells(true);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (Creature* Kelidan = me->FindNearestCreature(ENTRY_KELIDAN, 100))
- CAST_AI(boss_kelidan_the_breaker::boss_kelidan_the_breakerAI, Kelidan->AI())->ChannelerEngaged(who);
+ ENSURE_AI(boss_kelidan_the_breaker::boss_kelidan_the_breakerAI, Kelidan->AI())->ChannelerEngaged(who);
if (me->IsNonMeleeSpellCast(false))
me->InterruptNonMeleeSpells(true);
DoStartMovement(who);
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
if (Creature* Kelidan = me->FindNearestCreature(ENTRY_KELIDAN, 100))
- CAST_AI(boss_kelidan_the_breaker::boss_kelidan_the_breakerAI, Kelidan->AI())->ChannelerDied(killer);
+ ENSURE_AI(boss_kelidan_the_breaker::boss_kelidan_the_breakerAI, Kelidan->AI())->ChannelerDied(killer);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
{
@@ -312,8 +312,8 @@ class npc_shadowmoon_channeler : public CreatureScript
if (!me->IsNonMeleeSpellCast(false))
if (Creature* Kelidan = me->FindNearestCreature(ENTRY_KELIDAN, 100))
{
- uint64 channeler = CAST_AI(boss_kelidan_the_breaker::boss_kelidan_the_breakerAI, Kelidan->AI())->GetChanneled(me);
- if (Unit* channeled = Unit::GetUnit(*me, channeler))
+ uint64 channeler = ENSURE_AI(boss_kelidan_the_breaker::boss_kelidan_the_breakerAI, Kelidan->AI())->GetChanneled(me);
+ if (Unit* channeled = ObjectAccessor::GetUnit(*me, channeler))
DoCast(channeled, SPELL_CHANNELING);
}
check_Timer = 5000;
@@ -327,7 +327,7 @@ class npc_shadowmoon_channeler : public CreatureScript
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_MARK_OF_SHADOW);
- MarkOfShadow_Timer = 15000+rand()%5000;
+ MarkOfShadow_Timer = 15000 + rand32() % 5000;
}
else
MarkOfShadow_Timer -=diff;
@@ -335,7 +335,7 @@ class npc_shadowmoon_channeler : public CreatureScript
if (ShadowBolt_Timer <= diff)
{
DoCastVictim(SPELL_SHADOW_BOLT);
- ShadowBolt_Timer = 5000+rand()%1000;
+ ShadowBolt_Timer = 5000 + rand32() % 1000;
}
else
ShadowBolt_Timer -=diff;
@@ -344,7 +344,7 @@ class npc_shadowmoon_channeler : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetBloodFurnaceAI<npc_shadowmoon_channelerAI>(creature);
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp
index 6ab356bfa4a..53680739e55 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp
@@ -56,7 +56,7 @@ class boss_the_maker : public CreatureScript
uint32 Domination_Timer;
uint32 Knockdown_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
AcidSpray_Timer = 15000;
@@ -65,25 +65,25 @@ class boss_the_maker : public CreatureScript
Knockdown_Timer = 10000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DIE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -91,7 +91,7 @@ class boss_the_maker : public CreatureScript
if (AcidSpray_Timer <= diff)
{
DoCastVictim(SPELL_ACID_SPRAY);
- AcidSpray_Timer = 15000+rand()%8000;
+ AcidSpray_Timer = 15000 + rand32() % 8000;
}
else
AcidSpray_Timer -=diff;
@@ -100,7 +100,7 @@ class boss_the_maker : public CreatureScript
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_EXPLODING_BREAKER);
- ExplodingBreaker_Timer = 4000+rand()%8000;
+ ExplodingBreaker_Timer = 4000 + rand32() % 8000;
}
else
ExplodingBreaker_Timer -=diff;
@@ -120,7 +120,7 @@ class boss_the_maker : public CreatureScript
if (Knockdown_Timer <= diff)
{
DoCastVictim(SPELL_KNOCKDOWN);
- Knockdown_Timer = 4000+rand()%8000;
+ Knockdown_Timer = 4000 + rand32() % 8000;
}
else
Knockdown_Timer -=diff;
@@ -129,7 +129,7 @@ class boss_the_maker : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetBloodFurnaceAI<boss_the_makerAI>(creature);
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp
index bc399e4b43f..4f1200be37b 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp
@@ -63,7 +63,7 @@ class instance_blood_furnace : public InstanceMapScript
PrisonerCounter8 = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -84,13 +84,13 @@ class instance_blood_furnace : public InstanceMapScript
}
}
- void OnUnitDeath(Unit* unit) OVERRIDE
+ void OnUnitDeath(Unit* unit) override
{
if (unit->GetTypeId() == TYPEID_UNIT && unit->GetEntry() == NPC_PRISONER)
PrisonerDied(unit->GetGUID());
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -136,7 +136,7 @@ class instance_blood_furnace : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -153,7 +153,7 @@ class instance_blood_furnace : public InstanceMapScript
}
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -170,7 +170,7 @@ class instance_blood_furnace : public InstanceMapScript
return 0;
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -322,7 +322,7 @@ class instance_blood_furnace : public InstanceMapScript
}
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -333,7 +333,7 @@ class instance_blood_furnace : public InstanceMapScript
return saveStream.str();
}
- void Load(char const* str) OVERRIDE
+ void Load(char const* str) override
{
if (!str)
{
@@ -386,7 +386,7 @@ class instance_blood_furnace : public InstanceMapScript
uint8 PrisonerCounter8;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_blood_furnace_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp
index a68b3181e6f..237aa506589 100644
--- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp
@@ -63,7 +63,7 @@ class boss_omor_the_unscarred : public CreatureScript
SetCombatMovement(false);
}
- void Reset() OVERRIDE
+ void Reset() override
{
Talk(SAY_WIPE);
@@ -80,21 +80,21 @@ class boss_omor_the_unscarred : public CreatureScript
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
- if (rand()%2)
+ if (rand32() % 2)
return;
Talk(SAY_KILL_1);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
Talk(SAY_SUMMON);
@@ -104,13 +104,13 @@ class boss_omor_the_unscarred : public CreatureScript
++SummonedCount;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DIE);
_JustDied();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -122,7 +122,7 @@ class boss_omor_the_unscarred : public CreatureScript
{
me->InterruptNonMeleeSpells(false);
DoCast(me, SPELL_SUMMON_FIENDISH_HOUND);
- Summon_Timer = 15000+rand()%15000;
+ Summon_Timer = 15000 + rand32() % 15000;
}
else
Summon_Timer -= diff;
@@ -159,7 +159,7 @@ class boss_omor_the_unscarred : public CreatureScript
if (temp && temp->GetTypeId() == TYPEID_PLAYER)
{
DoCast(temp, SPELL_ORBITAL_STRIKE);
- OrbitalStrike_Timer = 14000+rand()%2000;
+ OrbitalStrike_Timer = 14000 + rand32() % 2000;
PlayerGUID = temp->GetGUID();
if (PlayerGUID)
@@ -187,7 +187,7 @@ class boss_omor_the_unscarred : public CreatureScript
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
DoCast(target, SPELL_TREACHEROUS_AURA);
- Aura_Timer = 8000+rand()%8000;
+ Aura_Timer = 8000 + rand32() % 8000;
}
}
else
@@ -201,7 +201,7 @@ class boss_omor_the_unscarred : public CreatureScript
target = me->GetVictim();
DoCast(target, SPELL_SHADOW_BOLT);
- Shadowbolt_Timer = 4000+rand()%2500;
+ Shadowbolt_Timer = 4000 + rand32() % 2500;
}
}
else
@@ -222,7 +222,7 @@ class boss_omor_the_unscarred : public CreatureScript
bool CanPullBack;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_omor_the_unscarredAI>(creature);
}
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 205158f606e..839dd800721 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
@@ -76,22 +76,22 @@ class boss_nazan : public CreatureScript
flight = true;
}
- void Reset() OVERRIDE
+ void Reset() override
{
Fireball_Timer = 4000;
Fly_Timer = 45000;
Turn_Timer = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
if (summoner->GetEntry() == NPC_VAZRUDEN_HERALD)
VazrudenGUID = summoner->GetGUID();
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned && summoned->GetEntry() == NPC_LIQUID_FIRE)
{
@@ -102,13 +102,13 @@ class boss_nazan : public CreatureScript
}
}
- void SpellHitTarget(Unit* target, const SpellInfo* entry) OVERRIDE
+ void SpellHitTarget(Unit* target, const SpellInfo* entry) override
{
if (target && entry->Id == uint32(SPELL_FIREBALL))
me->SummonCreature(NPC_LIQUID_FIRE, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), target->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, 30000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -124,7 +124,7 @@ class boss_nazan : public CreatureScript
if (flight) // phase 1 - the flight
{
- Creature* Vazruden = Unit::GetCreature(*me, VazrudenGUID);
+ Creature* Vazruden = ObjectAccessor::GetCreature(*me, VazrudenGUID);
if (Fly_Timer < diff || !(Vazruden && Vazruden->IsAlive() && Vazruden->HealthAbovePct(20)))
{
flight = false;
@@ -188,7 +188,7 @@ class boss_nazan : public CreatureScript
uint64 VazrudenGUID;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_nazanAI(creature);
}
@@ -203,7 +203,7 @@ class boss_vazruden : public CreatureScript
{
boss_vazrudenAI(Creature* creature) : BossAI(creature, DATA_VAZRUDEN) { }
- void Reset() OVERRIDE
+ void Reset() override
{
Revenge_Timer = 4000;
UnsummonCheck = 2000;
@@ -211,26 +211,26 @@ class boss_vazruden : public CreatureScript
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
_EnterCombat();
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who && who->GetEntry() != NPC_VAZRUDEN)
Talk(SAY_KILL);
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
if (killer && killer != me)
Talk(SAY_DIE);
_JustDied();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
{
@@ -266,7 +266,7 @@ class boss_vazruden : public CreatureScript
uint32 UnsummonCheck;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_vazrudenAI(creature);
}
@@ -288,7 +288,7 @@ class boss_vazruden_the_herald : public CreatureScript
VazrudenGUID = 0;
}
- void Reset() OVERRIDE
+ void Reset() override
{
phase = 0;
waypoint = 0;
@@ -300,7 +300,7 @@ class boss_vazruden_the_herald : public CreatureScript
{
if (summoned)
{
- Creature* Nazan = Unit::GetCreature(*me, NazanGUID);
+ Creature* Nazan = ObjectAccessor::GetCreature(*me, NazanGUID);
if (!Nazan)
Nazan = me->FindNearestCreature(NPC_NAZAN, 5000);
if (Nazan)
@@ -309,7 +309,7 @@ class boss_vazruden_the_herald : public CreatureScript
NazanGUID = 0;
}
- Creature* Vazruden = Unit::GetCreature(*me, VazrudenGUID);
+ Creature* Vazruden = ObjectAccessor::GetCreature(*me, VazrudenGUID);
if (!Vazruden)
Vazruden = me->FindNearestCreature(NPC_VAZRUDEN, 5000);
if (Vazruden)
@@ -337,7 +337,7 @@ class boss_vazruden_the_herald : public CreatureScript
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (phase == 0)
{
@@ -347,7 +347,7 @@ class boss_vazruden_the_herald : public CreatureScript
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (!summoned)
return;
@@ -375,7 +375,7 @@ class boss_vazruden_the_herald : public CreatureScript
sentryDown = true;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
switch (phase)
{
@@ -404,8 +404,8 @@ class boss_vazruden_the_herald : public CreatureScript
default: // adds do the job now
if (check <= diff)
{
- Creature* Nazan = Unit::GetCreature(*me, NazanGUID);
- Creature* Vazruden = Unit::GetCreature(*me, VazrudenGUID);
+ Creature* Nazan = ObjectAccessor::GetCreature(*me, NazanGUID);
+ Creature* Vazruden = ObjectAccessor::GetCreature(*me, VazrudenGUID);
if ((Nazan && Nazan->IsAlive()) || (Vazruden && Vazruden->IsAlive()))
{
if ((Nazan && Nazan->GetVictim()) || (Vazruden && Vazruden->GetVictim()))
@@ -443,7 +443,7 @@ class boss_vazruden_the_herald : public CreatureScript
bool lootSpawned;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_vazruden_the_heraldAI(creature);
}
@@ -458,20 +458,20 @@ class npc_hellfire_sentry : public CreatureScript
{
npc_hellfire_sentryAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
KidneyShot_Timer = urand(3000, 7000);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
if (Creature* herald = me->FindNearestCreature(NPC_VAZRUDEN_HERALD, 150))
- CAST_AI(boss_vazruden_the_herald::boss_vazruden_the_heraldAI, herald->AI())->SentryDownBy(killer);
+ ENSURE_AI(boss_vazruden_the_herald::boss_vazruden_the_heraldAI, herald->AI())->SentryDownBy(killer);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -492,7 +492,7 @@ class npc_hellfire_sentry : public CreatureScript
uint32 KidneyShot_Timer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_hellfire_sentryAI(creature);
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp
index f1bf63397bf..82f101980fe 100644
--- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp
@@ -61,7 +61,7 @@ class boss_watchkeeper_gargolmar : public CreatureScript
{
boss_watchkeeper_gargolmarAI(Creature* creature) : BossAI(creature, DATA_WATCHKEEPER_GARGOLMAR) { }
- void Reset() OVERRIDE
+ void Reset() override
{
hasTaunted = false;
yelledForHeal = false;
@@ -69,7 +69,7 @@ class boss_watchkeeper_gargolmar : public CreatureScript
_Reset();
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
events.ScheduleEvent(EVENT_MORTAL_WOUND, 5000);
@@ -77,7 +77,7 @@ class boss_watchkeeper_gargolmar : public CreatureScript
_EnterCombat();
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!me->GetVictim() && me->CanCreatureAttack(who))
@@ -99,18 +99,18 @@ class boss_watchkeeper_gargolmar : public CreatureScript
}
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DIE);
_JustDied();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -167,7 +167,7 @@ class boss_watchkeeper_gargolmar : public CreatureScript
bool retaliation;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_watchkeeper_gargolmarAI(creature);
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp
index a8fd639de6d..9a0e7c22308 100644
--- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp
@@ -36,13 +36,13 @@ class instance_ramparts : public InstanceMapScript
{
instance_ramparts_InstanceMapScript(Map* map) : InstanceScript(map) { }
- void Initialize() OVERRIDE
+ void Initialize() override
{
SetBossNumber(EncounterCount);
felIronChestGUID = 0;
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -53,7 +53,7 @@ class instance_ramparts : public InstanceMapScript
}
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -72,7 +72,7 @@ class instance_ramparts : public InstanceMapScript
return true;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -83,7 +83,7 @@ class instance_ramparts : public InstanceMapScript
return saveStream.str();
}
- void Load(const char* strIn) OVERRIDE
+ void Load(const char* strIn) override
{
if (!strIn)
{
@@ -121,7 +121,7 @@ class instance_ramparts : public InstanceMapScript
bool spawned;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_ramparts_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
index e1d83931166..8a5d6e41780 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
@@ -108,12 +108,12 @@ class npc_abyssal : public CreatureScript
uint32 Despawn_Timer;
uint32 trigger;
- void Reset() OVERRIDE
+ void Reset() override
{
FireBlast_Timer = 6000;
}
- void SpellHit(Unit*, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit*, const SpellInfo* spell) override
{
if (trigger == 2 && spell->Id == SPELL_BLAZE_TARGET)
{
@@ -136,23 +136,23 @@ class npc_abyssal : public CreatureScript
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!trigger)
ScriptedAI::AttackStart(who);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!trigger)
ScriptedAI::MoveInLineOfSight(who);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (trigger)
{
@@ -180,7 +180,7 @@ class npc_abyssal : public CreatureScript
if (FireBlast_Timer <= diff)
{
DoCastVictim(SPELL_FIRE_BLAST);
- FireBlast_Timer = 5000+rand()%10000;
+ FireBlast_Timer = 5000 + rand32() % 10000;
}
else FireBlast_Timer -= diff;
@@ -188,7 +188,7 @@ class npc_abyssal : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_abyssalAI(creature);
}
@@ -227,12 +227,12 @@ class boss_magtheridon : public CreatureScript
bool Phase3;
bool NeedCheckCube;
- void Reset() OVERRIDE
+ void Reset() override
{
Berserk_Timer = 1320000;
Quake_Timer = 40000;
Debris_Timer = 10000;
- Blaze_Timer = 10000+rand()%20000;
+ Blaze_Timer = 10000 + rand32() % 20000;
BlastNova_Timer = 60000;
Cleave_Timer = 15000;
RandChat_Timer = 90000;
@@ -247,7 +247,7 @@ class boss_magtheridon : public CreatureScript
DoCast(me, SPELL_SHADOW_CAGE_C, true);
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
instance->SetData(DATA_MAGTHERIDON_EVENT, NOT_STARTED);
instance->SetData(DATA_COLLAPSE, false);
@@ -257,7 +257,7 @@ class boss_magtheridon : public CreatureScript
{
// to avoid multiclicks from 1 cube
if (uint64 guid = Cube[cubeGUID])
- DebuffClicker(Unit::GetUnit(*me, guid));
+ DebuffClicker(ObjectAccessor::GetUnit(*me, guid));
Cube[cubeGUID] = clickerGUID;
NeedCheckCube = true;
}
@@ -280,7 +280,7 @@ class boss_magtheridon : public CreatureScript
// if not - apply mind exhaustion and delete from clicker's list
for (CubeMap::iterator i = Cube.begin(); i != Cube.end(); ++i)
{
- Unit* clicker = Unit::GetUnit(*me, (*i).second);
+ Unit* clicker = ObjectAccessor::GetUnit(*me, (*i).second);
if (!clicker || !clicker->HasAura(SPELL_SHADOW_GRASP))
{
DebuffClicker(clicker);
@@ -304,28 +304,28 @@ class boss_magtheridon : public CreatureScript
NeedCheckCube = false;
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_PLAYER_KILLED);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_MAGTHERIDON_EVENT, DONE);
Talk(SAY_DEATH);
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!me->HasUnitState(UNIT_STATE_STUNNED))
ScriptedAI::AttackStart(who);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
instance->SetData(DATA_MAGTHERIDON_EVENT, IN_PROGRESS);
DoZoneInCombat();
@@ -336,7 +336,7 @@ class boss_magtheridon : public CreatureScript
Talk(SAY_FREED);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!me->IsInCombat())
{
@@ -405,7 +405,7 @@ class boss_magtheridon : public CreatureScript
Creature* summon = me->SummonCreature(NPC_ABYSSAL, x, y, z, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
if (summon)
{
- CAST_AI(npc_abyssal::npc_abyssalAI, summon->AI())->SetTrigger(2);
+ ENSURE_AI(npc_abyssal::npc_abyssalAI, summon->AI())->SetTrigger(2);
DoCast(summon, SPELL_BLAZE_TARGET, true);
summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
@@ -437,7 +437,7 @@ class boss_magtheridon : public CreatureScript
target->GetPosition(x, y, z);
Creature* summon = me->SummonCreature(NPC_ABYSSAL, x, y, z, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
if (summon)
- CAST_AI(npc_abyssal::npc_abyssalAI, summon->AI())->SetTrigger(1);
+ ENSURE_AI(npc_abyssal::npc_abyssalAI, summon->AI())->SetTrigger(1);
}
Debris_Timer = 10000;
}
@@ -449,7 +449,7 @@ class boss_magtheridon : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_magtheridonAI>(creature);
}
@@ -480,7 +480,7 @@ class npc_hellfire_channeler : public CreatureScript
uint32 Check_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
ShadowBoltVolley_Timer = urand(8000, 10000);
DarkMending_Timer = 10000;
@@ -490,7 +490,7 @@ class npc_hellfire_channeler : public CreatureScript
Check_Timer = 5000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
instance->SetData(DATA_CHANNELER_EVENT, IN_PROGRESS);
@@ -498,30 +498,30 @@ class npc_hellfire_channeler : public CreatureScript
DoZoneInCombat();
}
- void JustReachedHome() OVERRIDE
+ void JustReachedHome() override
{
instance->SetData(DATA_CHANNELER_EVENT, NOT_STARTED);
DoCast(me, SPELL_SHADOW_GRASP_C, false);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summon->AI()->AttackStart(me->GetVictim());
}
- void DamageTaken(Unit*, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit*, uint32 &damage) override
{
if (damage >= me->GetHealth())
DoCast(me, SPELL_SOUL_TRANSFER, true);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_CHANNELER_EVENT, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -538,7 +538,7 @@ class npc_hellfire_channeler : public CreatureScript
{
if (HealthBelowPct(50))
DoCast(me, SPELL_DARK_MENDING);
- DarkMending_Timer = 10000 +(rand() % 10000);
+ DarkMending_Timer = 10000 + (rand32() % 10000);
}
else
DarkMending_Timer -= diff;
@@ -565,7 +565,7 @@ class npc_hellfire_channeler : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_hellfire_channelerAI>(creature);
}
@@ -579,7 +579,7 @@ public:
{
}
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
InstanceScript* instance = go->GetInstanceScript();
@@ -588,7 +588,7 @@ public:
if (instance->GetData(DATA_MAGTHERIDON_EVENT) != IN_PROGRESS)
return true;
- Creature* Magtheridon =Unit::GetCreature(*go, instance->GetData64(DATA_MAGTHERIDON));
+ Creature* Magtheridon =ObjectAccessor::GetCreature(*go, instance->GetData64(DATA_MAGTHERIDON));
if (!Magtheridon || !Magtheridon->IsAlive())
return true;
@@ -599,7 +599,7 @@ public:
player->InterruptNonMeleeSpells(false);
player->CastSpell(player, SPELL_SHADOW_GRASP, true);
player->CastSpell(player, SPELL_SHADOW_GRASP_VISUAL, false);
- CAST_AI(boss_magtheridon::boss_magtheridonAI, Magtheridon->AI())->SetClicker(go->GetGUID(), player->GetGUID());
+ ENSURE_AI(boss_magtheridon::boss_magtheridonAI, Magtheridon->AI())->SetClicker(go->GetGUID(), player->GetGUID());
return true;
}
};
diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp
index 73f741fade1..71d9203fcac 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp
@@ -66,7 +66,7 @@ class instance_magtheridons_lair : public InstanceMapScript
uint32 CageTimer;
uint32 RespawnTimer;
- void Initialize() OVERRIDE
+ void Initialize() override
{
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
@@ -79,7 +79,7 @@ class instance_magtheridons_lair : public InstanceMapScript
RespawnTimer = 0;
}
- bool IsEncounterInProgress() const OVERRIDE
+ bool IsEncounterInProgress() const override
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
@@ -88,7 +88,7 @@ class instance_magtheridons_lair : public InstanceMapScript
return false;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -101,7 +101,7 @@ class instance_magtheridons_lair : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -123,7 +123,7 @@ class instance_magtheridons_lair : public InstanceMapScript
}
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -133,7 +133,7 @@ class instance_magtheridons_lair : public InstanceMapScript
return 0;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -211,14 +211,14 @@ class instance_magtheridons_lair : public InstanceMapScript
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
if (type == DATA_MAGTHERIDON_EVENT)
return m_auiEncounter[0];
return 0;
}
- void Update(uint32 diff) OVERRIDE
+ void Update(uint32 diff) override
{
if (CageTimer)
{
@@ -254,7 +254,7 @@ class instance_magtheridons_lair : public InstanceMapScript
}
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_magtheridons_lair_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp
index 69906880705..9a8f83fa1c2 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp
@@ -85,7 +85,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript
{
boss_grand_warlock_nethekurseAI(Creature* creature) : BossAI(creature, DATA_NETHEKURSE) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -105,14 +105,14 @@ class boss_grand_warlock_nethekurse : public CreatureScript
Cleave_Timer = 5000;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DIE);
instance->SetBossState(DATA_NETHEKURSE, DONE);
}
- void SetData(uint32 data, uint32 value) OVERRIDE
+ void SetData(uint32 data, uint32 value) override
{
if (data != SETDATA_DATA)
return;
@@ -157,7 +157,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (IsIntroEvent || !IsMainEvent)
return;
@@ -171,7 +171,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript
}
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!IntroOnce && me->IsWithinDistInMap(who, 30.0f))
@@ -192,12 +192,12 @@ class boss_grand_warlock_nethekurse : public CreatureScript
ScriptedAI::MoveInLineOfSight(who);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->setFaction(16);
summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -208,12 +208,12 @@ class boss_grand_warlock_nethekurse : public CreatureScript
summoned->CastSpell(summoned, SPELL_CONSUMPTION, false, 0, 0, me->GetGUID());
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (IsIntroEvent)
{
@@ -243,7 +243,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript
if (Cleave_Timer <= diff)
{
DoCastVictim(SPELL_SHADOW_CLEAVE);
- Cleave_Timer = 6000+rand()%2500;
+ Cleave_Timer = 6000 + rand32() % 2500;
}
else
Cleave_Timer -= diff;
@@ -290,7 +290,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript
bool Phase;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_grand_warlock_nethekurseAI>(creature);
}
@@ -312,32 +312,32 @@ class npc_fel_orc_convert : public CreatureScript
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetNoCallAssistance(true); //we don't want any assistance (WE R HEROZ!)
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_HEMORRHAGE, 3000);
- if (Creature* Kurse = Unit::GetCreature(*me, instance->GetData64(NPC_GRAND_WARLOCK_NETHEKURSE)))
+ if (Creature* Kurse = ObjectAccessor::GetCreature(*me, instance->GetData64(NPC_GRAND_WARLOCK_NETHEKURSE)))
if (me->IsWithinDist(Kurse, 45.0f))
Kurse->AI()->SetData(SETDATA_DATA, SETDATA_PEON_AGGRO);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (instance->GetBossState(DATA_NETHEKURSE) != IN_PROGRESS)
return;
- if (Creature* Kurse = Unit::GetCreature(*me, instance->GetData64(NPC_GRAND_WARLOCK_NETHEKURSE)))
+ if (Creature* Kurse = ObjectAccessor::GetCreature(*me, instance->GetData64(NPC_GRAND_WARLOCK_NETHEKURSE)))
Kurse->AI()->SetData(SETDATA_DATA, SETDATA_PEON_DEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -358,7 +358,7 @@ class npc_fel_orc_convert : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_fel_orc_convertAI>(creature);
}
@@ -377,13 +377,13 @@ class npc_lesser_shadow_fissure : public CreatureScript
{
npc_lesser_shadow_fissureAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void Reset() override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
+ void AttackStart(Unit* /*who*/) override { }
+ void EnterCombat(Unit* /*who*/) override { }
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_lesser_shadow_fissureAI(creature);
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp
index 2ed70ded6ef..d61c40f8e3b 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp
@@ -140,15 +140,15 @@ class boss_warbringer_omrogg : public CreatureScript
RightHeadGUID = 0;
}
- void Reset() OVERRIDE
+ void Reset() override
{
- if (Unit* LeftHead = Unit::GetUnit(*me, LeftHeadGUID))
+ if (Unit* LeftHead = ObjectAccessor::GetUnit(*me, LeftHeadGUID))
{
LeftHead->setDeathState(JUST_DIED);
LeftHeadGUID = 0;
}
- if (Unit* RightHead = Unit::GetUnit(*me, RightHeadGUID))
+ if (Unit* RightHead = ObjectAccessor::GetUnit(*me, RightHeadGUID))
{
RightHead->setDeathState(JUST_DIED);
RightHeadGUID = 0;
@@ -172,13 +172,13 @@ class boss_warbringer_omrogg : public CreatureScript
void DoYellForThreat()
{
- Creature* LeftHead = Creature::GetCreature(*me, LeftHeadGUID);
- Creature* RightHead = Unit::GetCreature(*me, RightHeadGUID);
+ Creature* LeftHead = ObjectAccessor::GetCreature(*me, LeftHeadGUID);
+ Creature* RightHead = ObjectAccessor::GetCreature(*me, RightHeadGUID);
if (!LeftHead || !RightHead)
return;
- ithreat = rand()%4;
+ ithreat = rand32() % 4;
Creature* source = (LeftHead->GetEntry() == Threat[ithreat].creature ? LeftHead : RightHead);
@@ -188,14 +188,14 @@ class boss_warbringer_omrogg : public CreatureScript
ThreatYell = true;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
me->SummonCreature(NPC_LEFT_HEAD, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_DEAD_DESPAWN, 0);
me->SummonCreature(NPC_RIGHT_HEAD, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_DEAD_DESPAWN, 0);
- if (Creature* LeftHead = Creature::GetCreature(*me, LeftHeadGUID))
+ if (Creature* LeftHead = ObjectAccessor::GetCreature(*me, LeftHeadGUID))
{
- iaggro = rand()%3;
+ iaggro = rand32() % 3;
LeftHead->AI()->Talk(GoCombat[iaggro].id);
@@ -206,7 +206,7 @@ class boss_warbringer_omrogg : public CreatureScript
instance->SetBossState(DATA_OMROGG, IN_PROGRESS);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned->GetEntry() == NPC_LEFT_HEAD)
LeftHeadGUID = summoned->GetGUID();
@@ -219,15 +219,15 @@ class boss_warbringer_omrogg : public CreatureScript
summoned->SetVisible(false);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
- Creature* LeftHead = Creature::GetCreature(*me, LeftHeadGUID);
- Creature* RightHead = Creature::GetCreature(*me, RightHeadGUID);
+ Creature* LeftHead = ObjectAccessor::GetCreature(*me, LeftHeadGUID);
+ Creature* RightHead = ObjectAccessor::GetCreature(*me, RightHeadGUID);
if (!LeftHead || !RightHead)
return;
- ikilling = rand()%2;
+ ikilling = rand32() % 2;
Creature* source = (LeftHead->GetEntry() == Killing[ikilling].creature ? LeftHead : RightHead);
@@ -245,10 +245,10 @@ class boss_warbringer_omrogg : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
- Creature* LeftHead = Creature::GetCreature(*me, LeftHeadGUID);
- Creature* RightHead = Creature::GetCreature(*me, RightHeadGUID);
+ Creature* LeftHead = ObjectAccessor::GetCreature(*me, LeftHeadGUID);
+ Creature* RightHead = ObjectAccessor::GetCreature(*me, RightHeadGUID);
if (!LeftHead || !RightHead)
return;
@@ -260,14 +260,14 @@ class boss_warbringer_omrogg : public CreatureScript
instance->SetBossState(DATA_OMROGG, DONE);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (Delay_Timer <= diff)
{
Delay_Timer = 3500;
- Creature* LeftHead = Creature::GetCreature(*me, LeftHeadGUID);
- Creature* RightHead = Creature::GetCreature(*me, RightHeadGUID);
+ Creature* LeftHead = ObjectAccessor::GetCreature(*me, LeftHeadGUID);
+ Creature* RightHead = ObjectAccessor::GetCreature(*me, RightHeadGUID);
if (!LeftHead || !RightHead)
return;
@@ -338,7 +338,7 @@ class boss_warbringer_omrogg : public CreatureScript
DoResetThreat();
me->AddThreat(target, 0.0f);
}
- ResetThreat_Timer = 25000+rand()%15000;
+ ResetThreat_Timer = 25000 + rand32() % 15000;
}
else
ResetThreat_Timer -= diff;
@@ -346,7 +346,7 @@ class boss_warbringer_omrogg : public CreatureScript
if (Fear_Timer <= diff)
{
DoCast(me, SPELL_FEAR);
- Fear_Timer = 15000+rand()%20000;
+ Fear_Timer = 15000 + rand32() % 20000;
}
else
Fear_Timer -= diff;
@@ -354,7 +354,7 @@ class boss_warbringer_omrogg : public CreatureScript
if (ThunderClap_Timer <= diff)
{
DoCast(me, SPELL_THUNDERCLAP);
- ThunderClap_Timer = 15000+rand()%15000;
+ ThunderClap_Timer = 15000 + rand32() % 15000;
}
else
ThunderClap_Timer -= diff;
@@ -383,7 +383,7 @@ class boss_warbringer_omrogg : public CreatureScript
uint32 ResetThreat_Timer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_warbringer_omroggAI>(creature);
}
@@ -405,9 +405,9 @@ class npc_omrogg_heads : public CreatureScript
instance = creature->GetInstanceScript();
}
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
void SetData(uint32 data, uint32 value)
{
@@ -417,7 +417,7 @@ class npc_omrogg_heads : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
events.Update(diff);
@@ -433,7 +433,7 @@ class npc_omrogg_heads : public CreatureScript
EventMap events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_omrogg_headsAI>(creature);
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp
index bdb109910a8..f1dfcc2b391 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp
@@ -67,7 +67,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript
{
boss_warchief_kargath_bladefistAI(Creature* creature) : BossAI(creature, DATA_KARGATH) { }
- void Reset() OVERRIDE
+ void Reset() override
{
removeAdds();
@@ -85,7 +85,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript
resetcheck_timer = 5000;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
removeAdds();
@@ -93,12 +93,12 @@ class boss_warchief_kargath_bladefist : public CreatureScript
instance->SetBossState(DATA_KARGATH, DONE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
switch (summoned->GetEntry())
{
@@ -114,7 +114,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript
}
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
{
@@ -122,7 +122,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (InBlade)
{
@@ -145,7 +145,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript
{
for (std::vector<uint64>::const_iterator itr = adds.begin(); itr!= adds.end(); ++itr)
{
- Creature* creature = Unit::GetCreature(*me, *itr);
+ Creature* creature = ObjectAccessor::GetCreature(*me, *itr);
if (creature && creature->IsAlive())
{
creature->GetMotionMaster()->Clear(true);
@@ -157,7 +157,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript
for (std::vector<uint64>::const_iterator itr = assassins.begin(); itr!= assassins.end(); ++itr)
{
- Creature* creature = Unit::GetCreature(*me, *itr);
+ Creature* creature = ObjectAccessor::GetCreature(*me, *itr);
if (creature && creature->IsAlive())
{
creature->GetMotionMaster()->Clear(true);
@@ -175,7 +175,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript
me->SummonCreature(NPC_SHATTERED_ASSASSIN, AssassExit[0], AssassExit[1]-8, AssassExit[2], 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Return since we have no target
if (!UpdateVictim())
@@ -213,8 +213,8 @@ class boss_warchief_kargath_bladefist : public CreatureScript
{
//move in bladedance
float x, y, randx, randy;
- randx = 0.0f + rand()%40;
- randy = 0.0f + rand()%40;
+ randx = 0.0f + rand32() % 40;
+ randy = 0.0f + rand32() % 40;
x = 210+ randx;
y = -60- randy;
me->GetMotionMaster()->MovePoint(1, x, y, me->GetPositionZ());
@@ -308,7 +308,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript
bool InBlade;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_warchief_kargath_bladefistAI>(creature);
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp
index 25ecf5331ad..a220f26e18b 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp
@@ -32,7 +32,7 @@ class instance_shattered_halls : public InstanceMapScript
public:
instance_shattered_halls() : InstanceMapScript("instance_shattered_halls", 540) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_shattered_halls_InstanceMapScript(map);
}
@@ -41,7 +41,7 @@ class instance_shattered_halls : public InstanceMapScript
{
instance_shattered_halls_InstanceMapScript(Map* map) : InstanceScript(map) { }
- void Initialize() OVERRIDE
+ void Initialize() override
{
SetBossNumber(EncounterCount);
nethekurseGUID = 0;
@@ -49,7 +49,7 @@ class instance_shattered_halls : public InstanceMapScript
nethekurseDoor2GUID = 0;
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -62,7 +62,7 @@ class instance_shattered_halls : public InstanceMapScript
}
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -72,7 +72,7 @@ class instance_shattered_halls : public InstanceMapScript
}
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -97,7 +97,7 @@ class instance_shattered_halls : public InstanceMapScript
return true;
}
- uint64 GetData64(uint32 data) const OVERRIDE
+ uint64 GetData64(uint32 data) const override
{
switch (data)
{
@@ -114,7 +114,7 @@ class instance_shattered_halls : public InstanceMapScript
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -125,7 +125,7 @@ class instance_shattered_halls : public InstanceMapScript
return saveStream.str();
}
- void Load(const char* strIn) OVERRIDE
+ void Load(const char* strIn) override
{
if (!strIn)
{
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
index 00c4577dab6..09cb72f1a47 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
@@ -107,7 +107,7 @@ class boss_alar : public CreatureScript
int8 cur_wp;
- void Reset() OVERRIDE
+ void Reset() override
{
instance->SetData(DATA_ALAREVENT, NOT_STARTED);
@@ -133,7 +133,7 @@ class boss_alar : public CreatureScript
me->setActive(false);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
instance->SetData(DATA_ALAREVENT, IN_PROGRESS);
@@ -142,21 +142,21 @@ class boss_alar : public CreatureScript
me->setActive(true);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_ALAREVENT, DONE);
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() == CREATURE_EMBER_OF_ALAR)
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
summon->AI()->AttackStart(target);
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (Phase1)
AttackStartNoMove(who);
@@ -164,7 +164,7 @@ class boss_alar : public CreatureScript
ScriptedAI::AttackStart(who);
}
- void DamageTaken(Unit* /*killer*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*killer*/, uint32 &damage) override
{
if (damage >= me->GetHealth() && Phase1)
{
@@ -186,7 +186,7 @@ class boss_alar : public CreatureScript
}
}
- void SpellHit(Unit*, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit*, const SpellInfo* spell) override
{
if (spell->Id == SPELL_DIVE_BOMB_VISUAL)
{
@@ -196,7 +196,7 @@ class boss_alar : public CreatureScript
}
}
- void MovementInform(uint32 type, uint32 /*id*/) OVERRIDE
+ void MovementInform(uint32 type, uint32 /*id*/) override
{
if (type == POINT_MOTION_TYPE)
{
@@ -206,7 +206,7 @@ class boss_alar : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!me->IsInCombat()) // sometimes IsInCombat but !incombat, faction bug?
return;
@@ -245,7 +245,7 @@ class boss_alar : public CreatureScript
switch (WaitEvent)
{
case WE_PLATFORM:
- Platforms_Move_Timer = 30000+rand()%5000;
+ Platforms_Move_Timer = 30000 + rand32() % 5000;
break;
case WE_QUILL:
DoCast(me, SPELL_FLAME_QUILLS, true);
@@ -268,7 +268,7 @@ class boss_alar : public CreatureScript
DoCast(me, SPELL_REBIRTH, true);
MeltArmor_Timer = 60000;
Charge_Timer = 7000;
- DiveBomb_Timer = 40000+rand()%5000;
+ DiveBomb_Timer = 40000 + rand32() % 5000;
FlamePatch_Timer = 30000;
Phase1 = false;
break;
@@ -391,7 +391,7 @@ class boss_alar : public CreatureScript
me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 50);
WaitEvent = WE_METEOR;
WaitTimer = 0;
- DiveBomb_Timer = 40000+rand()%5000;
+ DiveBomb_Timer = 40000 + rand32() % 5000;
return;
}
else
@@ -446,7 +446,7 @@ class boss_alar : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_alarAI>(creature);
}
@@ -469,22 +469,22 @@ class npc_ember_of_alar : public CreatureScript
InstanceScript* instance;
bool toDie;
- void Reset() OVERRIDE
+ void Reset() override
{
toDie = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
me->setDeathState(JUST_DIED);
}
- void DamageTaken(Unit* killer, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* killer, uint32& damage) override
{
if (damage >= me->GetHealth() && killer != me && !toDie)
{
@@ -494,7 +494,7 @@ class npc_ember_of_alar : public CreatureScript
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
if (instance->GetData(DATA_ALAREVENT) == 2)
{
- if (Unit* Alar = Unit::GetUnit(*me, instance->GetData64(DATA_ALAR)))
+ if (Unit* Alar = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_ALAR)))
{
int32 AlarHealth = int32(Alar->GetHealth()) - int32(Alar->CountPctFromMaxHealth(3));
if (AlarHealth > 0)
@@ -507,7 +507,7 @@ class npc_ember_of_alar : public CreatureScript
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
return;
@@ -523,7 +523,7 @@ class npc_ember_of_alar : public CreatureScript
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ember_of_alarAI>(creature);
}
@@ -537,15 +537,15 @@ class npc_flame_patch_alar : public CreatureScript
struct npc_flame_patch_alarAI : public ScriptedAI
{
npc_flame_patch_alarAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void Reset() override { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void AttackStart(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_flame_patch_alarAI(creature);
}
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
index 7caf1fd1771..63c01540af2 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
@@ -130,7 +130,7 @@ class boss_high_astromancer_solarian : public CreatureScript
bool AppearDelay;
bool BlindingLight;
- void Reset() OVERRIDE
+ void Reset() override
{
ArcaneMissiles_Timer = 2000;
m_uiWrathOfTheAstromancer_Timer = 15000;
@@ -143,7 +143,7 @@ class boss_high_astromancer_solarian : public CreatureScript
AppearDelay_Timer = 2000;
BlindingLight = false;
AppearDelay = false;
- Wrath_Timer = 20000+rand()%5000;//twice in phase one
+ Wrath_Timer = 20000 + rand32() % 5000;//twice in phase one
Phase = 1;
instance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, NOT_STARTED);
@@ -157,12 +157,12 @@ class boss_high_astromancer_solarian : public CreatureScript
Summons.DespawnAll();
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->SetObjectScale(defaultsize);
me->SetDisplayId(MODEL_HUMAN);
@@ -170,7 +170,7 @@ class boss_high_astromancer_solarian : public CreatureScript
instance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, DONE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
DoZoneInCombat();
@@ -195,17 +195,17 @@ class boss_high_astromancer_solarian : public CreatureScript
if (urand(0, 1))
radius = -radius;
- return radius * (float)(rand()%100)/100.0f + CENTER_X;
+ return radius * (float)(rand32() % 100) / 100.0f + CENTER_X;
}
float Portal_Y(float x, float radius)
{
float z = RAND(1.0f, -1.0f);
- return (z*sqrt(radius*radius - (x - CENTER_X)*(x - CENTER_X)) + CENTER_Y);
+ return (z*std::sqrt(radius*radius - (x - CENTER_X)*(x - CENTER_X)) + CENTER_Y);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -241,7 +241,7 @@ class boss_high_astromancer_solarian : public CreatureScript
me->InterruptNonMeleeSpells(false);
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true))
DoCast(target, SPELL_WRATH_OF_THE_ASTROMANCER, true);
- Wrath_Timer = 20000+rand()%5000;
+ Wrath_Timer = 20000 + rand32() % 5000;
}
else
Wrath_Timer -= diff;
@@ -359,7 +359,7 @@ class boss_high_astromancer_solarian : public CreatureScript
{
Phase = 1;
//15 seconds later Solarian reappears out of one of the 3 portals. Simultaneously, 2 healers appear in the two other portals.
- int i = rand()%3;
+ int i = rand32() % 3;
me->GetMotionMaster()->Clear();
me->SetPosition(Portals[i][0], Portals[i][1], Portals[i][2], CENTER_O);
@@ -414,7 +414,7 @@ class boss_high_astromancer_solarian : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_high_astromancer_solarianAI>(creature);
}
@@ -442,18 +442,18 @@ class npc_solarium_priest : public CreatureScript
uint32 holysmiteTimer;
uint32 aoesilenceTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
healTimer = 9000;
holysmiteTimer = 1;
aoesilenceTimer = 15000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -464,7 +464,7 @@ class npc_solarium_priest : public CreatureScript
switch (urand(0, 1))
{
case 0:
- target = Unit::GetUnit(*me, instance->GetData64(DATA_ASTROMANCER));
+ target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_ASTROMANCER));
break;
case 1:
target = me;
@@ -500,7 +500,7 @@ class npc_solarium_priest : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_solarium_priestAI>(creature);
}
@@ -515,7 +515,7 @@ class spell_astromancer_wrath_of_the_astromancer : public SpellScriptLoader
{
PrepareAuraScript(spell_astromancer_wrath_of_the_astromancer_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WRATH_OF_THE_ASTROMANCER_DOT))
return false;
@@ -532,13 +532,13 @@ class spell_astromancer_wrath_of_the_astromancer : public SpellScriptLoader
target->CastSpell(target, GetSpellInfo()->Effects[EFFECT_1].CalcValue(), false);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_astromancer_wrath_of_the_astromancer_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_astromancer_wrath_of_the_astromancer_AuraScript();
}
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
index 077539b6b88..64deebce8b8 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
@@ -143,7 +143,7 @@ uint32 m_auiSpellSummonWeapon[]=
};
const float CAPERNIAN_DISTANCE = 20.0f; //she casts away from the target
-const float KAEL_VISIBLE_RANGE = 50.0f;
+//const float KAEL_VISIBLE_RANGE = 50.0f;
const float afGravityPos[3] = {795.0f, 0.0f, 70.0f};
@@ -165,7 +165,7 @@ struct advisorbase_ai : public ScriptedAI
uint32 DelayRes_Timer;
uint64 DelayRes_Target;
- void Reset() OVERRIDE
+ void Reset() override
{
if (m_bDoubled_Health)
{
@@ -183,11 +183,11 @@ struct advisorbase_ai : public ScriptedAI
//reset encounter
if (instance->GetData(DATA_KAELTHASEVENT) == 1 || instance->GetData(DATA_KAELTHASEVENT) == 3)
- if (Creature* Kaelthas = Unit::GetCreature(*me, instance->GetData64(DATA_KAELTHAS)))
+ if (Creature* Kaelthas = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KAELTHAS)))
Kaelthas->AI()->EnterEvadeMode();
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!who || FakeDeath || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
@@ -196,7 +196,7 @@ struct advisorbase_ai : public ScriptedAI
ScriptedAI::MoveInLineOfSight(who);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who || FakeDeath || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -217,7 +217,7 @@ struct advisorbase_ai : public ScriptedAI
DelayRes_Timer = 2000;
}
- void DamageTaken(Unit* killer, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* killer, uint32 &damage) override
{
if (damage < me->GetHealth())
return;
@@ -253,7 +253,7 @@ struct advisorbase_ai : public ScriptedAI
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (DelayRes_Timer)
{
@@ -262,7 +262,7 @@ struct advisorbase_ai : public ScriptedAI
DelayRes_Timer = 0;
FakeDeath = false;
- Unit* Target = Unit::GetUnit(*me, DelayRes_Target);
+ Unit* Target = ObjectAccessor::GetUnit(*me, DelayRes_Target);
if (!Target)
Target = me->GetVictim();
@@ -318,9 +318,9 @@ class boss_kaelthas : public CreatureScript
uint64 m_auiAdvisorGuid[MAX_ADVISORS];
- void Reset() OVERRIDE
+ void Reset() override
{
- Fireball_Timer = 5000+rand()%10000;
+ Fireball_Timer = 5000 + rand32() % 10000;
ArcaneDisruption_Timer = 45000;
MindControl_Timer = 40000;
Phoenix_Timer = 50000;
@@ -351,7 +351,7 @@ class boss_kaelthas : public CreatureScript
{
for (uint8 i = 0; i < MAX_ADVISORS; ++i)
{
- if (Creature* creature = Unit::GetCreature(*me, m_auiAdvisorGuid[i]))
+ if (Creature* creature = ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[i]))
{
creature->Respawn();
creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -399,7 +399,7 @@ class boss_kaelthas : public CreatureScript
}
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!me->HasUnitState(UNIT_STATE_STUNNED) && me->CanCreatureAttack(who))
@@ -427,18 +427,18 @@ class boss_kaelthas : public CreatureScript
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (!instance->GetData(DATA_KAELTHASEVENT) && !Phase)
StartEvent();
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
// if not phoenix, then it's one of the 7 weapons
if (summoned->GetEntry() != NPC_PHOENIX)
@@ -450,12 +450,12 @@ class boss_kaelthas : public CreatureScript
}
}
- void SummonedCreatureDespawn(Creature* summon) OVERRIDE
+ void SummonedCreatureDespawn(Creature* summon) override
{
summons.Despawn(summon);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -468,12 +468,12 @@ class boss_kaelthas : public CreatureScript
for (uint8 i = 0; i < MAX_ADVISORS; ++i)
{
- if (Unit* pAdvisor = Unit::GetUnit(*me, m_auiAdvisorGuid[i]))
+ if (Unit* pAdvisor = ObjectAccessor::GetUnit(*me, m_auiAdvisorGuid[i]))
pAdvisor->Kill(pAdvisor);
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Phase 1
switch (Phase)
@@ -502,7 +502,7 @@ class boss_kaelthas : public CreatureScript
case 1:
if (Phase_Timer <= diff)
{
- Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[0]));
+ Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[0]));
if (Advisor)
{
@@ -520,7 +520,7 @@ class boss_kaelthas : public CreatureScript
//Subphase 2 - Start
case 2:
- Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[0]));
+ Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[0]));
if (Advisor && (Advisor->getStandState() == UNIT_STAND_STATE_DEAD))
{
@@ -536,7 +536,7 @@ class boss_kaelthas : public CreatureScript
case 3:
if (Phase_Timer <= diff)
{
- Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[1]));
+ Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[1]));
if (Advisor)
{
@@ -554,7 +554,7 @@ class boss_kaelthas : public CreatureScript
//Subphase 3 - Start
case 4:
- Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[1]));
+ Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[1]));
if (Advisor && (Advisor->getStandState() == UNIT_STAND_STATE_DEAD))
{
@@ -570,7 +570,7 @@ class boss_kaelthas : public CreatureScript
case 5:
if (Phase_Timer <= diff)
{
- Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[2]));
+ Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[2]));
if (Advisor)
{
@@ -588,7 +588,7 @@ class boss_kaelthas : public CreatureScript
//Subphase 4 - Start
case 6:
- Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[2]));
+ Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[2]));
if (Advisor && (Advisor->getStandState() == UNIT_STAND_STATE_DEAD))
{
@@ -604,7 +604,7 @@ class boss_kaelthas : public CreatureScript
case 7:
if (Phase_Timer <= diff)
{
- Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[3]));
+ Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[3]));
if (Advisor)
{
@@ -623,7 +623,7 @@ class boss_kaelthas : public CreatureScript
//End of phase 1
case 8:
- Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[3]));
+ Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[3]));
if (Advisor && (Advisor->getStandState() == UNIT_STAND_STATE_DEAD))
{
@@ -692,12 +692,12 @@ class boss_kaelthas : public CreatureScript
Creature* Advisor;
for (uint8 i = 0; i < MAX_ADVISORS; ++i)
{
- Advisor = Unit::GetCreature(*me, m_auiAdvisorGuid[i]);
+ Advisor = ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[i]);
if (!Advisor)
TC_LOG_ERROR("scripts", "SD2: Kael'Thas Advisor %u does not exist. Possibly despawned? Incorrectly Killed?", i);
else
- CAST_AI(advisorbase_ai, Advisor->AI())->Revive(target);
+ ENSURE_AI(advisorbase_ai, Advisor->AI())->Revive(target);
}
PhaseSubphase = 1;
@@ -746,7 +746,7 @@ class boss_kaelthas : public CreatureScript
{
//interruptable
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, false);
- int32 dmg = 20000+rand()%5000;
+ int32 dmg = 20000 + rand32() % 5000;
me->CastCustomSpell(me->GetVictim(), SPELL_FIREBALL, &dmg, 0, 0, false);
IsCastingFireball = true;
Fireball_Timer = 2500;
@@ -757,7 +757,7 @@ class boss_kaelthas : public CreatureScript
//apply resistance
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, true);
IsCastingFireball = false;
- Fireball_Timer = 5000+rand()%10000;
+ Fireball_Timer = 5000 + rand32() % 10000;
}
}
else
@@ -896,7 +896,7 @@ class boss_kaelthas : public CreatureScript
// 1) Kael'thas will portal the whole raid right into his body
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && (unit->GetTypeId() == TYPEID_PLAYER))
{
//Use work around packet to prevent player from being dropped from combat
@@ -917,7 +917,7 @@ class boss_kaelthas : public CreatureScript
// 2) At that point he will put a Gravity Lapse debuff on everyone
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- if (Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid()))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()))
{
DoCast(unit, SPELL_KNOCKBACK, true);
//Gravity lapse - needs an exception in Spell system to work
@@ -949,7 +949,7 @@ class boss_kaelthas : public CreatureScript
//Remove flight
for (i = threatlist.begin(); i != threatlist.end(); ++i)
{
- if (Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid()))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()))
{
//Using packet workaround
WorldPacket data(SMSG_MOVE_UNSET_CAN_FLY, 12);
@@ -1000,7 +1000,7 @@ class boss_kaelthas : public CreatureScript
}
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_kaelthasAI>(creature);
}
@@ -1023,7 +1023,7 @@ class boss_thaladred_the_darkener : public CreatureScript
uint32 Silence_Timer;
uint32 PsychicBlow_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Gaze_Timer = 100;
Silence_Timer = 20000;
@@ -1032,7 +1032,7 @@ class boss_thaladred_the_darkener : public CreatureScript
advisorbase_ai::Reset();
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -1044,13 +1044,13 @@ class boss_thaladred_the_darkener : public CreatureScript
me->AddThreat(who, 5000000.0f);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (instance->GetData(DATA_KAELTHASEVENT) == 3)
Talk(SAY_THALADRED_DEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
advisorbase_ai::UpdateAI(diff);
@@ -1089,7 +1089,7 @@ class boss_thaladred_the_darkener : public CreatureScript
if (PsychicBlow_Timer <= diff)
{
DoCastVictim(SPELL_PSYCHIC_BLOW);
- PsychicBlow_Timer = 20000+rand()%5000;
+ PsychicBlow_Timer = 20000 + rand32() % 5000;
}
else
PsychicBlow_Timer -= diff;
@@ -1098,7 +1098,7 @@ class boss_thaladred_the_darkener : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_thaladred_the_darkenerAI>(creature);
}
@@ -1119,13 +1119,13 @@ class boss_lord_sanguinar : public CreatureScript
uint32 Fear_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Fear_Timer = 20000;
advisorbase_ai::Reset();
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -1136,13 +1136,13 @@ class boss_lord_sanguinar : public CreatureScript
Talk(SAY_SANGUINAR_AGGRO);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (instance->GetData(DATA_KAELTHASEVENT) == 3)
Talk(SAY_SANGUINAR_DEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
advisorbase_ai::UpdateAI(diff);
@@ -1158,7 +1158,7 @@ class boss_lord_sanguinar : public CreatureScript
if (Fear_Timer <= diff)
{
DoCastVictim(SPELL_BELLOWING_ROAR);
- Fear_Timer = 25000+rand()%10000; //approximately every 30 seconds
+ Fear_Timer = 25000 + rand32() % 10000; //approximately every 30 seconds
}
else
Fear_Timer -= diff;
@@ -1166,7 +1166,7 @@ class boss_lord_sanguinar : public CreatureScript
DoMeleeAttackIfReady();
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_lord_sanguinarAI>(creature);
}
@@ -1190,7 +1190,7 @@ class boss_grand_astromancer_capernian : public CreatureScript
uint32 Yell_Timer;
bool Yell;
- void Reset() OVERRIDE
+ void Reset() override
{
Fireball_Timer = 2000;
Conflagration_Timer = 20000;
@@ -1201,13 +1201,13 @@ class boss_grand_astromancer_capernian : public CreatureScript
advisorbase_ai::Reset();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (instance->GetData(DATA_KAELTHASEVENT) == 3)
Talk(SAY_CAPERNIAN_DEATH);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (!who || FakeDeath || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -1222,7 +1222,7 @@ class boss_grand_astromancer_capernian : public CreatureScript
}
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -1231,7 +1231,7 @@ class boss_grand_astromancer_capernian : public CreatureScript
return;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
advisorbase_ai::UpdateAI(diff);
@@ -1275,7 +1275,7 @@ class boss_grand_astromancer_capernian : public CreatureScript
else
DoCastVictim(SPELL_CONFLAGRATION);
- Conflagration_Timer = 10000+rand()%5000;
+ Conflagration_Timer = 10000 + rand32() % 5000;
}
else
Conflagration_Timer -= diff;
@@ -1288,7 +1288,7 @@ class boss_grand_astromancer_capernian : public CreatureScript
ThreatContainer::StorageType const &threatlist = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator i = threatlist.begin(); i!= threatlist.end(); ++i)
{
- Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());
+ Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
//if in melee range
if (unit && unit->IsWithinDistInMap(me, 5))
{
@@ -1301,7 +1301,7 @@ class boss_grand_astromancer_capernian : public CreatureScript
if (InMeleeRange)
DoCast(target, SPELL_ARCANE_EXPLOSION);
- ArcaneExplosion_Timer = 4000+rand()%2000;
+ ArcaneExplosion_Timer = 4000 + rand32() % 2000;
}
else
ArcaneExplosion_Timer -= diff;
@@ -1310,7 +1310,7 @@ class boss_grand_astromancer_capernian : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_grand_astromancer_capernianAI>(creature);
}
@@ -1332,7 +1332,7 @@ class boss_master_engineer_telonicus : public CreatureScript
uint32 Bomb_Timer;
uint32 RemoteToy_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Bomb_Timer = 10000;
RemoteToy_Timer = 5000;
@@ -1340,13 +1340,13 @@ class boss_master_engineer_telonicus : public CreatureScript
advisorbase_ai::Reset();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (instance->GetData(DATA_KAELTHASEVENT) == 3)
Talk(SAY_TELONICUS_DEATH);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -1357,7 +1357,7 @@ class boss_master_engineer_telonicus : public CreatureScript
Talk(SAY_TELONICUS_AGGRO);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
advisorbase_ai::UpdateAI(diff);
@@ -1384,7 +1384,7 @@ class boss_master_engineer_telonicus : public CreatureScript
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_REMOTE_TOY);
- RemoteToy_Timer = 10000+rand()%5000;
+ RemoteToy_Timer = 10000 + rand32() % 5000;
}
else
RemoteToy_Timer -= diff;
@@ -1393,7 +1393,7 @@ class boss_master_engineer_telonicus : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_master_engineer_telonicusAI>(creature);
}
@@ -1419,7 +1419,7 @@ class npc_kael_flamestrike : public CreatureScript
bool Casting;
bool KillSelf;
- void Reset() OVERRIDE
+ void Reset() override
{
Timer = 5000;
Casting = false;
@@ -1429,12 +1429,12 @@ class npc_kael_flamestrike : public CreatureScript
me->setFaction(14);
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!Casting)
{
@@ -1461,7 +1461,7 @@ class npc_kael_flamestrike : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_kael_flamestrikeAI(creature);
}
@@ -1482,20 +1482,20 @@ class npc_phoenix_tk : public CreatureScript
uint32 Cycle_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Cycle_Timer = 2000;
DoCast(me, SPELL_BURN, true);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
//is this spell in use anylonger?
//DoCast(me, SPELL_EMBER_BLAST, true);
me->SummonCreature(NPC_PHOENIX_EGG, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, 16000);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1515,7 +1515,7 @@ class npc_phoenix_tk : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_phoenix_tkAI(creature);
}
@@ -1536,16 +1536,16 @@ class npc_phoenix_egg_tk : public CreatureScript
uint32 Rebirth_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Rebirth_Timer = 15000;
}
//ignore any
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (me->Attack(who, false))
{
@@ -1556,13 +1556,13 @@ class npc_phoenix_egg_tk : public CreatureScript
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->AddThreat(me->GetVictim(), 0.0f);
summoned->CastSpell(summoned, SPELL_REBIRTH, false);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!Rebirth_Timer)
return;
@@ -1577,7 +1577,7 @@ class npc_phoenix_egg_tk : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_phoenix_egg_tkAI(creature);
}
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
index 1a972f65360..6b78706b437 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
@@ -68,7 +68,7 @@ class boss_void_reaver : public CreatureScript
bool Enraged;
- void Reset() OVERRIDE
+ void Reset() override
{
Pounding_Timer = 15000;
ArcaneOrb_Timer = 3000;
@@ -81,12 +81,12 @@ class boss_void_reaver : public CreatureScript
instance->SetData(DATA_VOIDREAVEREVENT, NOT_STARTED);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
DoZoneInCombat();
@@ -94,14 +94,14 @@ class boss_void_reaver : public CreatureScript
instance->SetData(DATA_VOIDREAVEREVENT, DONE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetData(DATA_VOIDREAVEREVENT, IN_PROGRESS);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -122,7 +122,7 @@ class boss_void_reaver : public CreatureScript
std::vector<Unit*> target_list;
for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)
{
- target = Unit::GetUnit(*me, (*itr)->getUnitGuid());
+ target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (!target)
continue;
// exclude pets & totems, 18 yard radius minimum
@@ -132,7 +132,7 @@ class boss_void_reaver : public CreatureScript
}
if (!target_list.empty())
- target = *(target_list.begin()+rand()%target_list.size());
+ target = *(target_list.begin() + rand32() % target_list.size());
else
target = me->GetVictim();
@@ -168,7 +168,7 @@ class boss_void_reaver : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_void_reaverAI>(creature);
}
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp b/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp
index fcace2a3ab4..0da16967a49 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp
@@ -60,7 +60,7 @@ class instance_the_eye : public InstanceMapScript
uint32 m_auiEncounter[MAX_ENCOUNTER];
- void Initialize() OVERRIDE
+ void Initialize() override
{
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
@@ -76,7 +76,7 @@ class instance_the_eye : public InstanceMapScript
AlarEventPhase = 0;
}
- bool IsEncounterInProgress() const OVERRIDE
+ bool IsEncounterInProgress() const override
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
@@ -85,7 +85,7 @@ class instance_the_eye : public InstanceMapScript
return false;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -113,7 +113,7 @@ class instance_the_eye : public InstanceMapScript
}
}
- uint64 GetData64(uint32 identifier) const OVERRIDE
+ uint64 GetData64(uint32 identifier) const override
{
switch (identifier)
{
@@ -128,7 +128,7 @@ class instance_the_eye : public InstanceMapScript
return 0;
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -151,7 +151,7 @@ class instance_the_eye : public InstanceMapScript
SaveToDB();
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -163,7 +163,7 @@ class instance_the_eye : public InstanceMapScript
return 0;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -174,7 +174,7 @@ class instance_the_eye : public InstanceMapScript
return stream.str();
}
- void Load(const char* in) OVERRIDE
+ void Load(const char* in) override
{
if (!in)
{
@@ -192,7 +192,7 @@ class instance_the_eye : public InstanceMapScript
}
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_the_eye_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp
index a09dd4c756e..32af9f647ad 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp
@@ -52,17 +52,17 @@ class npc_crystalcore_devastator : public CreatureScript
uint32 Knockaway_Timer;
uint32 Countercharge_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Countercharge_Timer = 9000;
Knockaway_Timer = 25000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -100,7 +100,7 @@ class npc_crystalcore_devastator : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_crystalcore_devastatorAI(creature);
}
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp
index 05050b4be2e..a60609e0656 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp
@@ -59,13 +59,13 @@ class boss_gatewatcher_gyrokill : public CreatureScript
{
boss_gatewatcher_gyrokillAI(Creature* creature) : BossAI(creature, DATA_GATEWATCHER_GYROKILL) { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_STREAM_OF_MACHINE_FLUID, 10000);
@@ -74,12 +74,12 @@ class boss_gatewatcher_gyrokill : public CreatureScript
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -115,7 +115,7 @@ class boss_gatewatcher_gyrokill : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_gatewatcher_gyrokillAI(creature);
}
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp
index 09eb261282f..151244f86c9 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp
@@ -62,7 +62,7 @@ class boss_gatewatcher_iron_hand : public CreatureScript
{
boss_gatewatcher_iron_handAI(Creature* creature) : BossAI(creature, DATA_GATEWATCHER_IRON_HAND) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_STREAM_OF_MACHINE_FLUID, 55000);
@@ -71,19 +71,19 @@ class boss_gatewatcher_iron_hand : public CreatureScript
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
if (roll_chance_i(50))
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -122,7 +122,7 @@ class boss_gatewatcher_iron_hand : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_gatewatcher_iron_handAI(creature);
}
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp
index 1135a95e92b..f8861d1fa7f 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp
@@ -75,7 +75,7 @@ class boss_mechano_lord_capacitus : public CreatureScript
{
boss_mechano_lord_capacitusAI(Creature* creature) : BossAI(creature, DATA_MECHANOLORD_CAPACITUS) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(YELL_AGGRO);
@@ -88,18 +88,18 @@ class boss_mechano_lord_capacitus : public CreatureScript
events.ScheduleEvent(EVENT_POSITIVE_SHIFT, 15 * IN_MILLISECONDS);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(YELL_KILL);
}
- void JustDied(Unit* /*victim*/) OVERRIDE
+ void JustDied(Unit* /*victim*/) override
{
_JustDied();
Talk(YELL_DEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -133,8 +133,7 @@ class boss_mechano_lord_capacitus : public CreatureScript
break;
case EVENT_SUMMON_NETHER_CHARGE:
{
- Position pos;
- me->GetRandomNearPosition(pos, 5.0f);
+ Position pos = me->GetRandomNearPosition(5.0f);
me->SummonCreature(NPC_NETHER_CHARGE, pos, TEMPSUMMON_TIMED_DESPAWN, 18000);
events.ScheduleEvent(EVENT_SUMMON_NETHER_CHARGE, 10 * IN_MILLISECONDS);
break;
@@ -151,7 +150,7 @@ class boss_mechano_lord_capacitus : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_mechano_lord_capacitusAI(creature);
}
@@ -166,7 +165,7 @@ class spell_capacitus_polarity_charge : public SpellScriptLoader
{
PrepareSpellScript(spell_capacitus_polarity_charge_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE))
return false;
@@ -212,14 +211,14 @@ class spell_capacitus_polarity_charge : public SpellScriptLoader
SetHitDamage(0);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_capacitus_polarity_charge_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_capacitus_polarity_charge_SpellScript::HandleTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_capacitus_polarity_charge_SpellScript();
}
@@ -234,7 +233,7 @@ class spell_capacitus_polarity_shift : public SpellScriptLoader
{
PrepareSpellScript(spell_capacitus_polarity_shift_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_POSITIVE_POLARITY) || !sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_POLARITY))
return false;
@@ -249,13 +248,13 @@ class spell_capacitus_polarity_shift : public SpellScriptLoader
target->CastSpell(target, roll_chance_i(50) ? SPELL_POSITIVE_POLARITY : SPELL_NEGATIVE_POLARITY, true, NULL, NULL, caster->GetGUID());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_capacitus_polarity_shift_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_capacitus_polarity_shift_SpellScript();
}
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp
index d7e8eabd32f..3e4e6a213bd 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp
@@ -67,7 +67,7 @@ class boss_nethermancer_sepethrea : public CreatureScript
{
boss_nethermancer_sepethreaAI(Creature* creature) : BossAI(creature, DATA_NETHERMANCER_SEPRETHREA) { }
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_FROST_ATTACK, urand(7000, 10000));
@@ -80,18 +80,18 @@ class boss_nethermancer_sepethrea : public CreatureScript
Talk(SAY_SUMMON);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -136,7 +136,7 @@ class boss_nethermancer_sepethrea : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_nethermancer_sepethreaAI(creature);
}
@@ -162,7 +162,7 @@ class npc_ragin_flames : public CreatureScript
bool onlyonce;
- void Reset() OVERRIDE
+ void Reset() override
{
inferno_Timer = 10000;
flame_timer = 500;
@@ -173,11 +173,11 @@ class npc_ragin_flames : public CreatureScript
me->SetSpeed(MOVE_RUN, DUNGEON_MODE(0.5f, 0.7f));
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Check_Timer
if (Check_Timer <= diff)
@@ -218,7 +218,7 @@ class npc_ragin_flames : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ragin_flamesAI>(creature);
}
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp
index 8d6dde82770..3c6fe2040fc 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp
@@ -75,7 +75,7 @@ class boss_pathaleon_the_calculator : public CreatureScript
{
boss_pathaleon_the_calculatorAI(Creature* creature) : BossAI(creature, DATA_PATHALEON_THE_CALCULATOR) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_SUMMON, 30000);
@@ -86,18 +86,18 @@ class boss_pathaleon_the_calculator : public CreatureScript
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if (me->HealthBelowPctDamaged(20, damage) && !me->HasAura(SPELL_FRENZY))
{
@@ -106,7 +106,7 @@ class boss_pathaleon_the_calculator : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -158,7 +158,7 @@ class boss_pathaleon_the_calculator : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_pathaleon_the_calculatorAI(creature);
}
@@ -179,7 +179,7 @@ class npc_nether_wraith : public CreatureScript
uint32 Die_Timer;
bool Detonation;
- void Reset() OVERRIDE
+ void Reset() override
{
ArcaneMissiles_Timer = urand(1000, 4000);
Detonation_Timer = 20000;
@@ -187,9 +187,9 @@ class npc_nether_wraith : public CreatureScript
Detonation = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -230,7 +230,7 @@ class npc_nether_wraith : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_nether_wraithAI(creature);
}
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp
index 9d2556d809b..4dddee83459 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp
@@ -55,7 +55,7 @@ class instance_mechanar : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* gameObject) OVERRIDE
+ void OnGameObjectRemove(GameObject* gameObject) override
{
switch (gameObject->GetEntry())
{
@@ -69,7 +69,7 @@ class instance_mechanar : public InstanceMapScript
}
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -89,7 +89,7 @@ class instance_mechanar : public InstanceMapScript
return true;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -100,7 +100,7 @@ class instance_mechanar : public InstanceMapScript
return saveStream.str();
}
- void Load(const char* str) OVERRIDE
+ void Load(const char* str) override
{
if (!str)
{
@@ -133,7 +133,7 @@ class instance_mechanar : public InstanceMapScript
}
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_mechanar_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
index 3cc2e5dcc89..3befc3742ff 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
@@ -88,7 +88,7 @@ class npc_millhouse_manastorm : public CreatureScript
uint32 Pyroblast_Timer;
uint32 Fireball_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
EventProgress_Timer = 2000;
LowHp = false;
@@ -105,7 +105,7 @@ class npc_millhouse_manastorm : public CreatureScript
Talk(SAY_COMPLETE);
}
- void AttackStart(Unit* who) OVERRIDE
+ void AttackStart(Unit* who) override
{
if (me->Attack(who, true))
{
@@ -116,13 +116,13 @@ class npc_millhouse_manastorm : public CreatureScript
}
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
@@ -131,7 +131,7 @@ class npc_millhouse_manastorm : public CreatureScript
->FailQuest();*/
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!Init)
{
@@ -213,7 +213,7 @@ class npc_millhouse_manastorm : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetArcatrazAI<npc_millhouse_manastormAI>(creature);
}
@@ -282,7 +282,7 @@ class npc_warden_mellichar : public CreatureScript
uint32 EventProgress_Timer;
uint32 Phase;
- void Reset() OVERRIDE
+ void Reset() override
{
IsRunning = false;
CanSpawn = false;
@@ -296,9 +296,9 @@ class npc_warden_mellichar : public CreatureScript
instance->SetBossState(DATA_HARBINGER_SKYRISS, NOT_STARTED);
}
- void AttackStart(Unit* /*who*/) OVERRIDE { }
+ void AttackStart(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (IsRunning)
return;
@@ -316,7 +316,7 @@ class npc_warden_mellichar : public CreatureScript
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(YELL_INTRO1);
DoCast(me, SPELL_BUBBLE_VISUAL);
@@ -377,7 +377,7 @@ class npc_warden_mellichar : public CreatureScript
CanSpawn = true;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!IsRunning)
return;
@@ -490,7 +490,7 @@ class npc_warden_mellichar : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetArcatrazAI<npc_warden_mellicharAI>(creature);
}
@@ -516,7 +516,7 @@ class npc_zerekethvoidzone : public CreatureScript
{
npc_zerekethvoidzoneAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetUInt32Value(UNIT_NPC_FLAGS, 0);
me->setFaction(16);
@@ -525,10 +525,10 @@ class npc_zerekethvoidzone : public CreatureScript
DoCast(me, SPELL_VOID_ZONE_DAMAGE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_zerekethvoidzoneAI(creature);
}
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp
index 18388341a36..41bc93cfdfe 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp
@@ -65,14 +65,14 @@ class boss_dalliah_the_doomsayer : public CreatureScript
soccothratesDeath = false;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
soccothratesTaunt = false;
soccothratesDeath = false;
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
@@ -82,7 +82,7 @@ class boss_dalliah_the_doomsayer : public CreatureScript
soccothrates->AI()->SetData(1, 1);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_GIFT_OF_THE_DOOMSAYER, urand(1000, 4000));
@@ -93,12 +93,12 @@ class boss_dalliah_the_doomsayer : public CreatureScript
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void SetData(uint32 /*type*/, uint32 data) OVERRIDE
+ void SetData(uint32 /*type*/, uint32 data) override
{
switch (data)
{
@@ -111,7 +111,7 @@ class boss_dalliah_the_doomsayer : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
{
@@ -187,7 +187,7 @@ class boss_dalliah_the_doomsayer : public CreatureScript
bool soccothratesDeath;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetArcatrazAI<boss_dalliah_the_doomsayerAI>(creature);
}
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
index e94de3af56e..7563ecb40db 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
@@ -81,7 +81,7 @@ class boss_harbinger_skyriss : public CreatureScript
uint32 Domination_Timer;
uint32 ManaBurn_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
if (!Intro)
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
@@ -97,7 +97,7 @@ class boss_harbinger_skyriss : public CreatureScript
ManaBurn_Timer = 25000;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!Intro)
return;
@@ -105,15 +105,15 @@ class boss_harbinger_skyriss : public CreatureScript
ScriptedAI::MoveInLineOfSight(who);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
_JustDied();
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (!summon)
return;
@@ -126,7 +126,7 @@ class boss_harbinger_skyriss : public CreatureScript
summon->AI()->AttackStart(target);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
//won't yell killing pet/other unit
if (victim->GetEntry() == NPC_ALPHA_POD_TARGET)
@@ -148,7 +148,7 @@ class boss_harbinger_skyriss : public CreatureScript
DoCast(me, SPELL_33_ILLUSION);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!Intro)
{
@@ -238,7 +238,7 @@ class boss_harbinger_skyriss : public CreatureScript
else
DoCastVictim(SPELL_DOMINATION);
- Domination_Timer = 16000+rand()%16000;
+ Domination_Timer = 16000 + rand32() % 16000;
}
else
Domination_Timer -=diff;
@@ -253,7 +253,7 @@ class boss_harbinger_skyriss : public CreatureScript
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1))
DoCast(target, H_SPELL_MANA_BURN);
- ManaBurn_Timer = 16000+rand()%16000;
+ ManaBurn_Timer = 16000 + rand32() % 16000;
}
else
ManaBurn_Timer -=diff;
@@ -262,7 +262,7 @@ class boss_harbinger_skyriss : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetArcatrazAI<boss_harbinger_skyrissAI>(creature);
}
@@ -277,12 +277,12 @@ class boss_harbinger_skyriss_illusion : public CreatureScript
{
boss_harbinger_skyriss_illusionAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_harbinger_skyriss_illusionAI(creature);
}
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 6c96708c69d..a519ec7207c 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
@@ -89,7 +89,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript
dalliahDeath = false;
}
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
preFight = false;
@@ -98,7 +98,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript
DoCast(me, SPELL_FEL_IMMOLATION);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
@@ -108,7 +108,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript
dalliah->AI()->SetData(1, 1);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_FELFIRE_SHOCK, urand(12000, 14000));
@@ -118,12 +118,12 @@ class boss_wrath_scryer_soccothrates : public CreatureScript
preFight = false;
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (instance->GetData(DATA_CONVERSATION) == NOT_STARTED && who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 70.0f))
{
@@ -135,7 +135,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript
}
}
- void SetData(uint32 /*type*/, uint32 data) OVERRIDE
+ void SetData(uint32 /*type*/, uint32 data) override
{
switch (data)
{
@@ -148,7 +148,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
{
@@ -276,7 +276,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript
bool dalliahDeath;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return GetArcatrazAI<boss_wrath_scryer_soccothratesAI>(creature);
}
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp
index 54246453100..4b43edef2e0 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp
@@ -50,18 +50,18 @@ class boss_zereketh_the_unbound : public CreatureScript
{
boss_zereketh_the_unboundAI(Creature* creature) : BossAI(creature, DATA_ZEREKETH) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_VOID_ZONE, urand (6000, 10000));
@@ -70,12 +70,12 @@ class boss_zereketh_the_unbound : public CreatureScript
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -113,7 +113,7 @@ class boss_zereketh_the_unbound : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_zereketh_the_unboundAI(creature);
}
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp
index 90feaa8d091..a6d0b348984 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp
@@ -49,7 +49,7 @@ class instance_arcatraz : public InstanceMapScript
memset(StasisPodStates, NOT_STARTED, 5 * sizeof(uint8));
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -67,7 +67,7 @@ class instance_arcatraz : public InstanceMapScript
}
}
- void OnGameObjectCreate(GameObject* go) OVERRIDE
+ void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -98,7 +98,7 @@ class instance_arcatraz : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* go) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
@@ -111,7 +111,7 @@ class instance_arcatraz : public InstanceMapScript
}
}
- void SetData(uint32 type, uint32 data) OVERRIDE
+ void SetData(uint32 type, uint32 data) override
{
switch (type)
{
@@ -132,7 +132,7 @@ class instance_arcatraz : public InstanceMapScript
}
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
switch (type)
{
@@ -150,7 +150,7 @@ class instance_arcatraz : public InstanceMapScript
return 0;
}
- uint64 GetData64(uint32 data) const OVERRIDE
+ uint64 GetData64(uint32 data) const override
{
switch (data)
{
@@ -168,7 +168,7 @@ class instance_arcatraz : public InstanceMapScript
return 0;
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -191,7 +191,7 @@ class instance_arcatraz : public InstanceMapScript
return true;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -202,7 +202,7 @@ class instance_arcatraz : public InstanceMapScript
return saveStream.str();
}
- void Load(char const* str) OVERRIDE
+ void Load(char const* str) override
{
if (!str)
{
@@ -245,7 +245,7 @@ class instance_arcatraz : public InstanceMapScript
uint8 StasisPodStates[5];
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_arcatraz_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp
index fefb791715f..7b831e82a75 100644
--- a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp
+++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp
@@ -52,13 +52,13 @@ class boss_commander_sarannis : public CreatureScript
{
boss_commander_sarannisAI(Creature* creature) : BossAI(creature, DATA_COMMANDER_SARANNIS) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
_phase = true;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -66,18 +66,18 @@ class boss_commander_sarannis : public CreatureScript
events.ScheduleEvent(EVENT_ARCANE_DEVASTATION, 15200);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void DamageTaken(Unit* /*killer*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*killer*/, uint32 &damage) override
{
if (me->HealthBelowPctDamaged(50, damage) && _phase)
{
@@ -88,12 +88,12 @@ class boss_commander_sarannis : public CreatureScript
}
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
BossAI::JustSummoned(summon);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -129,7 +129,7 @@ class boss_commander_sarannis : public CreatureScript
bool _phase;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_commander_sarannisAI(creature);
}
@@ -167,13 +167,13 @@ class spell_commander_sarannis_summon_reinforcements : public SpellScriptLoader
GetCaster()->SummonCreature(NPC_SUMMONED_BLOODWARDER_RESERVIST, PosSummonReinforcements[3], TEMPSUMMON_CORPSE_DESPAWN);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_commander_sarannis_summon_reinforcements_SpellScript::HandleCast, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_commander_sarannis_summon_reinforcements_SpellScript();
}
diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp
index db62a0e91b3..0c322877808 100644
--- a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp
+++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp
@@ -74,7 +74,7 @@ class boss_high_botanist_freywinn : public CreatureScript
uint32 DeadAddsCount;
bool MoveFree;
- void Reset() OVERRIDE
+ void Reset() override
{
Adds_List.clear();
@@ -85,12 +85,12 @@ class boss_high_botanist_freywinn : public CreatureScript
MoveFree = true;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned->GetEntry() == NPC_FRAYER)
Adds_List.push_back(summoned->GetGUID());
@@ -98,7 +98,7 @@ class boss_high_botanist_freywinn : public CreatureScript
void DoSummonSeedling()
{
- switch (rand()%4)
+ switch (rand32() % 4)
{
case 0: DoCast(me, SPELL_PLANT_WHITE); break;
case 1: DoCast(me, SPELL_PLANT_GREEN); break;
@@ -107,17 +107,17 @@ class boss_high_botanist_freywinn : public CreatureScript
}
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -151,7 +151,7 @@ class boss_high_botanist_freywinn : public CreatureScript
{
for (std::list<uint64>::iterator itr = Adds_List.begin(); itr != Adds_List.end(); ++itr)
{
- if (Unit* temp = Unit::GetUnit(*me, *itr))
+ if (Unit* temp = ObjectAccessor::GetUnit(*me, *itr))
{
if (!temp->IsAlive())
{
@@ -200,7 +200,7 @@ class boss_high_botanist_freywinn : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_high_botanist_freywinnAI(creature);
}
diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp
index 839b452e631..768c9b5b8f1 100644
--- a/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp
+++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp
@@ -70,7 +70,7 @@ class boss_laj : public CreatureScript
uint32 Transform_Timer;
uint32 Allergic_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetDisplayId(MODEL_DEFAULT);
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, true);
@@ -88,7 +88,7 @@ class boss_laj : public CreatureScript
void DoTransform()
{
- switch (rand()%5)
+ switch (rand32() % 5)
{
case 0:
me->SetDisplayId(MODEL_DEFAULT);
@@ -135,7 +135,7 @@ class boss_laj : public CreatureScript
void DoSummons()
{
- switch (rand()%4)
+ switch (rand32() % 4)
{
case 0:
DoCast(me, SPELL_SUMMON_LASHER_1, true);
@@ -157,17 +157,17 @@ class boss_laj : public CreatureScript
CanSummon = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
if (summon && me->GetVictim())
summon->AI()->AttackStart(SelectTarget(SELECT_TARGET_RANDOM, 0));
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -187,7 +187,7 @@ class boss_laj : public CreatureScript
if (Allergic_Timer <= diff)
{
DoCastVictim(SPELL_ALLERGIC_REACTION);
- Allergic_Timer = 25000+rand()%15000;
+ Allergic_Timer = 25000 + rand32() % 15000;
}
else
Allergic_Timer -= diff;
@@ -195,7 +195,7 @@ class boss_laj : public CreatureScript
if (Teleport_Timer <= diff)
{
DoCast(me, SPELL_TELEPORT_SELF);
- Teleport_Timer = 30000+rand()%10000;
+ Teleport_Timer = 30000 + rand32() % 10000;
CanSummon = true;
}
else
@@ -204,7 +204,7 @@ class boss_laj : public CreatureScript
if (Transform_Timer <= diff)
{
DoTransform();
- Transform_Timer = 25000+rand()%15000;
+ Transform_Timer = 25000 + rand32() % 15000;
}
else
Transform_Timer -= diff;
@@ -213,7 +213,7 @@ class boss_laj : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_lajAI(creature);
}
diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp
index cc3ffc26edf..d2a1d101ae4 100644
--- a/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp
+++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp
@@ -54,14 +54,14 @@ class boss_thorngrin_the_tender : public CreatureScript
{
boss_thorngrin_the_tenderAI(Creature* creature) : BossAI(creature, DATA_THORNGRIN_THE_TENDER) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_Reset();
_phase1 = true;
_phase2 = true;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
@@ -70,18 +70,18 @@ class boss_thorngrin_the_tender : public CreatureScript
events.ScheduleEvent(EVENT_ENRAGE, 12000);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
- void DamageTaken(Unit* /*killer*/, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* /*killer*/, uint32 &damage) override
{
if (me->HealthBelowPctDamaged(50, damage) && _phase1)
{
@@ -95,7 +95,7 @@ class boss_thorngrin_the_tender : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -140,7 +140,7 @@ class boss_thorngrin_the_tender : public CreatureScript
bool _phase2;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_thorngrin_the_tenderAI(creature);
}
diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
index 7b83fa7009d..bbb384ed0f8 100644
--- a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
+++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
@@ -81,23 +81,23 @@ class npc_warp_splinter_treant : public CreatureScript
uint64 WarpGuid;
uint32 check_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
check_Timer = 0;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
- if (!UpdateVictim())
+ if (!UpdateVictim() || !me->GetVictim())
{
if (WarpGuid && check_Timer <= diff)
{
- if (Unit* Warp = Unit::GetUnit(*me, WarpGuid))
+ if (Unit* Warp = ObjectAccessor::GetUnit(*me, WarpGuid))
{
if (me->IsWithinMeleeRange(Warp, 2.5f))
{
@@ -115,11 +115,11 @@ class npc_warp_splinter_treant : public CreatureScript
return;
}
- if (me->GetVictim()->GetGUID() != WarpGuid)
+ if (me->EnsureVictim()->GetGUID() != WarpGuid)
DoMeleeAttackIfReady();
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_warp_splinter_treantAI(creature);
}
@@ -151,7 +151,7 @@ class boss_warp_splinter : public CreatureScript
float Treant_Spawn_Pos_X;
float Treant_Spawn_Pos_Y;
- void Reset() OVERRIDE
+ void Reset() override
{
War_Stomp_Timer = urand(25000, 40000);
Summon_Treants_Timer = 45000;
@@ -160,17 +160,17 @@ class boss_warp_splinter : public CreatureScript
me->SetSpeed(MOVE_RUN, 0.7f, true);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
}
@@ -179,19 +179,19 @@ class boss_warp_splinter : public CreatureScript
{
for (uint8 i = 0; i < 6; ++i)
{
- float angle = (M_PI / 3) * i;
+ float angle = (float(M_PI) / 3) * i;
float X = Treant_Spawn_Pos_X + TREANT_SPAWN_DIST * std::cos(angle);
float Y = Treant_Spawn_Pos_Y + TREANT_SPAWN_DIST * std::sin(angle);
float O = - me->GetAngle(X, Y);
if (Creature* pTreant = me->SummonCreature(CREATURE_TREANT, treant_pos[i][0], treant_pos[i][1], treant_pos[i][2], O, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 25000))
- CAST_AI(npc_warp_splinter_treant::npc_warp_splinter_treantAI, pTreant->AI())->WarpGuid = me->GetGUID();
+ ENSURE_AI(npc_warp_splinter_treant::npc_warp_splinter_treantAI, pTreant->AI())->WarpGuid = me->GetGUID();
}
Talk(SAY_SUMMON);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -227,7 +227,7 @@ class boss_warp_splinter : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_warp_splinterAI(creature);
}
diff --git a/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp b/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp
index 72202c5d896..f8929f7e42a 100644
--- a/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp
+++ b/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp
@@ -35,7 +35,7 @@ class instance_the_botanica : public InstanceMapScript
WarpSplinterGUID = 0;
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
@@ -59,7 +59,7 @@ class instance_the_botanica : public InstanceMapScript
}
}
- uint64 GetData64(uint32 type) const OVERRIDE
+ uint64 GetData64(uint32 type) const override
{
switch (type)
{
@@ -80,7 +80,7 @@ class instance_the_botanica : public InstanceMapScript
return 0;
}
- bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
@@ -100,7 +100,7 @@ class instance_the_botanica : public InstanceMapScript
return true;
}
- std::string GetSaveData() OVERRIDE
+ std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
@@ -111,7 +111,7 @@ class instance_the_botanica : public InstanceMapScript
return saveStream.str();
}
- void Load(char const* str) OVERRIDE
+ void Load(char const* str) override
{
if (!str)
{
@@ -152,7 +152,7 @@ class instance_the_botanica : public InstanceMapScript
uint64 WarpSplinterGUID;
};
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_the_botanica_InstanceMapScript(map);
}
diff --git a/src/server/scripts/Outland/boss_doomlord_kazzak.cpp b/src/server/scripts/Outland/boss_doomlord_kazzak.cpp
index 3da0ee61aa3..eea03aae343 100644
--- a/src/server/scripts/Outland/boss_doomlord_kazzak.cpp
+++ b/src/server/scripts/Outland/boss_doomlord_kazzak.cpp
@@ -69,7 +69,7 @@ class boss_doomlord_kazzak : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_SHADOW_VOLLEY, urand(6000, 10000));
@@ -82,17 +82,17 @@ class boss_doomlord_kazzak : public CreatureScript
_events.ScheduleEvent(EVENT_BERSERK, 180000);
}
- void JustRespawned() OVERRIDE
+ void JustRespawned() override
{
Talk(SAY_INTRO);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
// When Kazzak kills a player (not pets/totems), he regens some health
if (victim->GetTypeId() != TYPEID_PLAYER)
@@ -103,12 +103,12 @@ class boss_doomlord_kazzak : public CreatureScript
Talk(SAY_KILL);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// Return since we have no target
if (!UpdateVictim())
@@ -169,7 +169,7 @@ class boss_doomlord_kazzak : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_doomlordkazzakAI(creature);
}
@@ -184,7 +184,7 @@ class spell_mark_of_kazzak : public SpellScriptLoader
{
PrepareAuraScript(spell_mark_of_kazzak_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MARK_OF_KAZZAK_DAMAGE))
return false;
@@ -209,14 +209,14 @@ class spell_mark_of_kazzak : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mark_of_kazzak_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_MANA_LEECH);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_mark_of_kazzak_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_MANA_LEECH);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_mark_of_kazzak_AuraScript();
}
diff --git a/src/server/scripts/Outland/boss_doomwalker.cpp b/src/server/scripts/Outland/boss_doomwalker.cpp
index 46777abce6a..a193e8ff880 100644
--- a/src/server/scripts/Outland/boss_doomwalker.cpp
+++ b/src/server/scripts/Outland/boss_doomwalker.cpp
@@ -59,7 +59,7 @@ class boss_doomwalker : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_ENRAGE, 0);
@@ -70,7 +70,7 @@ class boss_doomwalker : public CreatureScript
_inEnrage = false;
}
- void KilledUnit(Unit* victim) OVERRIDE
+ void KilledUnit(Unit* victim) override
{
victim->CastSpell(victim, SPELL_MARK_DEATH, 0);
@@ -80,17 +80,17 @@ class boss_doomwalker : public CreatureScript
Talk(SAY_SLAY);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (who && who->GetTypeId() == TYPEID_PLAYER && me->IsValidAttackTarget(who))
@@ -98,7 +98,7 @@ class boss_doomwalker : public CreatureScript
who->CastSpell(who, SPELL_AURA_DEATH, 1);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -159,7 +159,7 @@ class boss_doomwalker : public CreatureScript
bool _inEnrage;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_doomwalkerAI(creature);
}
diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
index fdeaa1c2520..d54eb6fff8c 100644
--- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
+++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
@@ -75,15 +75,15 @@ public:
uint64 OgreGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
OgreGUID = 0;
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void UpdateAI(uint32 /*diff*/) override { }
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_bloodmaul_brutebaneAI(creature);
}
@@ -119,13 +119,13 @@ public:
hp30 = false;
}
- void Reset() OVERRIDE
+ void Reset() override
{
PlayerGUID = 0;
hp30 = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (urand (0, 100) < 35)
Talk(SAY_AGGRO);
@@ -134,14 +134,14 @@ public:
events.ScheduleEvent(EVENT_DEBILITATING_STRIKE, 15000);
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
if (killer->GetTypeId() == TYPEID_PLAYER)
if (killer->ToPlayer()->GetQuestRewardStatus(QUEST_INTO_THE_SOULGRINDER))
Talk(SAY_DEATH);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!who || (!who->IsAlive()))
return;
@@ -155,7 +155,7 @@ public:
}
}
- void MovementInform(uint32 /*type*/, uint32 id) OVERRIDE
+ void MovementInform(uint32 /*type*/, uint32 id) override
{
if (id == 1)
{
@@ -173,7 +173,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -211,7 +211,7 @@ public:
bool hp30;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_bloodmaul_bruteAI(creature);
}
@@ -260,7 +260,7 @@ public:
uint32 ManaBurn_Timer;
uint32 IntangiblePresence_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
IsNihil = false;
NihilSpeech_Timer = 3000;
@@ -271,9 +271,9 @@ public:
IntangiblePresence_Timer = 15000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
@@ -283,7 +283,7 @@ public:
}
//in case Creature was not summoned (not expected)
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -296,12 +296,12 @@ public:
}
}
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (spell->Id == SPELL_T_PHASE_MODULATOR && caster->GetTypeId() == TYPEID_PLAYER)
{
const uint32 entry_list[4] = {ENTRY_PROTO, ENTRY_ADOLE, ENTRY_MATUR, ENTRY_NIHIL};
- int cid = rand()%(4-1);
+ int cid = rand32() % (4 - 1);
if (entry_list[cid] == me->GetEntry())
++cid;
@@ -327,7 +327,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (IsNihil)
{
@@ -371,7 +371,7 @@ public:
if (IntangiblePresence_Timer <= diff)
{
DoCastVictim(SPELL_INTANGIBLE_PRESENCE);
- IntangiblePresence_Timer = 15000+rand()%15000;
+ IntangiblePresence_Timer = 15000 + rand32() % 15000;
} else IntangiblePresence_Timer -= diff;
if (ManaBurn_Timer <= diff)
@@ -379,20 +379,20 @@ public:
Unit* target = me->GetVictim();
if (target && target->getPowerType() == POWER_MANA)
DoCast(target, SPELL_MANA_BURN);
- ManaBurn_Timer = 8000+rand()%8000;
+ ManaBurn_Timer = 8000 + rand32() % 8000;
} else ManaBurn_Timer -= diff;
if (ArcaneBlast_Timer <= diff)
{
DoCastVictim(SPELL_ARCANE_BLAST);
- ArcaneBlast_Timer = 2500+rand()%5000;
+ ArcaneBlast_Timer = 2500 + rand32() % 5000;
} else ArcaneBlast_Timer -= diff;
DoMeleeAttackIfReady();
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_nether_drakeAI(creature);
}
@@ -418,11 +418,11 @@ public:
{
npc_daranelleAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
@@ -439,7 +439,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_daranelleAI(creature);
}
@@ -468,7 +468,7 @@ class go_legion_obelisk : public GameObjectScript
public:
go_legion_obelisk() : GameObjectScript("go_legion_obelisk") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (player->GetQuestStatus(QUEST_YOURE_FIRED) == QUEST_STATUS_INCOMPLETE)
{
@@ -522,7 +522,7 @@ class go_thunderspike : public GameObjectScript
public:
go_thunderspike() : GameObjectScript("go_thunderspike") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (player->GetQuestStatus(QUEST_THUNDERSPIKE) == QUEST_STATUS_INCOMPLETE && !go->FindNearestCreature(NPC_GOR_GRIMGUT, 25.0f, true))
if (Creature* gorGrimgut = go->SummonCreature(NPC_GOR_GRIMGUT, -2413.4f, 6914.48f, 25.01f, 3.67f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 300000))
@@ -624,7 +624,7 @@ class npc_simon_bunny : public CreatureScript
EventMap _events;
std::list<uint8> colorSequence, playableSequence, playerSequence;
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
_events.Update(diff);
@@ -678,7 +678,7 @@ class npc_simon_bunny : public CreatureScript
}
}
- void DoAction(int32 action) OVERRIDE
+ void DoAction(int32 action) override
{
switch (action)
{
@@ -704,7 +704,7 @@ class npc_simon_bunny : public CreatureScript
}
// Called by color clusters script (go_simon_cluster) and used for knowing the button pressed by player
- void SetData(uint32 type, uint32 /*data*/) OVERRIDE
+ void SetData(uint32 type, uint32 /*data*/) override
{
if (!listening)
return;
@@ -727,11 +727,11 @@ class npc_simon_bunny : public CreatureScript
}
// Used for getting involved player guid. Parameter id is used for defining if is a large(Monument) or small(Relic) node
- void SetGUID(uint64 guid, int32 id) OVERRIDE
+ void SetGUID(uint64 guid, int32 id) override
{
me->SetCanFly(true);
- large = (bool)id;
+ large = id != 0;
playerGUID = guid;
StartGame();
}
@@ -1017,7 +1017,7 @@ class npc_simon_bunny : public CreatureScript
}
}
- void SpellHitTarget(Unit* target, const SpellInfo* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, const SpellInfo* spell) override
{
// Cast SPELL_BAD_PRESS_DAMAGE with scaled basepoints when the visual hits the target.
// Need Fix: When SPELL_BAD_PRESS_TRIGGER hits target it triggers spell SPELL_BAD_PRESS_DAMAGE by itself
@@ -1049,7 +1049,7 @@ class npc_simon_bunny : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_simon_bunnyAI(creature);
}
@@ -1060,7 +1060,7 @@ class go_simon_cluster : public GameObjectScript
public:
go_simon_cluster() : GameObjectScript("go_simon_cluster") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (Creature* bunny = go->FindNearestCreature(NPC_SIMON_BUNNY, 12.0f, true))
bunny->AI()->SetData(go->GetEntry(), 0);
@@ -1086,14 +1086,14 @@ class go_apexis_relic : public GameObjectScript
public:
go_apexis_relic() : GameObjectScript("go_apexis_relic") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
player->PrepareGossipMenu(go, go->GetGOInfo()->questgiver.gossipID);
player->SendPreparedGossip(go);
return true;
}
- bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 /*action*/) OVERRIDE
+ bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 /*action*/) override
{
player->CLOSE_GOSSIP_MENU();
@@ -1135,7 +1135,7 @@ public:
timer = 500;
}
- void Reset() OVERRIDE
+ void Reset() override
{
if (GetClosestCreatureWithEntry(me, NPC_OSCILLATING_FREQUENCY_SCANNER_TOP_BUNNY, 25.0f))
me->DespawnOrUnsummon();
@@ -1150,13 +1150,13 @@ public:
timer = 500;
}
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
if (summoner->isType(TYPEMASK_PLAYER))
playerGuid = summoner->GetGUID();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (timer <= diff)
{
@@ -1174,7 +1174,7 @@ public:
uint32 timer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_oscillating_frequency_scanner_master_bunnyAI(creature);
}
@@ -1196,13 +1196,13 @@ class spell_oscillating_field : public SpellScriptLoader
player->CompleteQuest(QUEST_GAUGING_THE_RESONANT_FREQUENCY);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_oscillating_field_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_oscillating_field_SpellScript();
}
diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
index 3736994e9a3..0da70207a04 100644
--- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
+++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
@@ -60,7 +60,7 @@ public:
{
npc_aeranasAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
faction_Timer = 8000;
envelopingWinds_Timer = 9000;
@@ -72,7 +72,7 @@ public:
Talk(SAY_SUMMON);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (faction_Timer)
{
@@ -118,7 +118,7 @@ public:
uint32 shock_Timer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_aeranasAI(creature);
}
@@ -155,13 +155,13 @@ public:
Reset();
}
- void Reset() OVERRIDE
+ void Reset() override
{
ryga = NULL;
DoCast(me, SPELL_ANCESTRAL_WOLF_BUFF, true);
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!ryga && who->GetEntry() == NPC_RYGA && me->IsWithinDistInMap(who, 15.0f))
@@ -171,7 +171,7 @@ public:
npc_escortAI::MoveInLineOfSight(who);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -192,7 +192,7 @@ public:
Creature* ryga;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ancestral_wolfAI(creature);
}
@@ -225,15 +225,15 @@ public:
{
npc_wounded_blood_elfAI(Creature* creature) : npc_escortAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
if (HasEscortState(STATE_ESCORT_ESCORTING))
Talk(SAY_ELF_AGGRO);
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->AI()->AttackStart(me);
}
@@ -247,7 +247,7 @@ public:
}
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -282,7 +282,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_wounded_blood_elfAI(creature);
}
@@ -307,18 +307,18 @@ public:
{
npc_fel_guard_houndAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
checkTimer = 5000; //check for creature every 5 sec
helboarGUID = 0;
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE || id != 1)
return;
- if (Creature* helboar = me->GetCreature(*me, helboarGUID))
+ if (Creature* helboar = ObjectAccessor::GetCreature(*me, helboarGUID))
{
helboar->RemoveCorpse();
DoCast(SPELL_SUMMON_POO);
@@ -328,7 +328,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (checkTimer <= diff)
{
@@ -355,7 +355,7 @@ public:
uint64 helboarGUID;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_fel_guard_houndAI(creature);
}
diff --git a/src/server/scripts/Outland/zone_nagrand.cpp b/src/server/scripts/Outland/zone_nagrand.cpp
index 9b7a3f8aa2a..f32d2516ee0 100644
--- a/src/server/scripts/Outland/zone_nagrand.cpp
+++ b/src/server/scripts/Outland/zone_nagrand.cpp
@@ -60,7 +60,7 @@ class npc_greatmother_geyah : public CreatureScript
public:
npc_greatmother_geyah() : CreatureScript("npc_greatmother_geyah") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -121,7 +121,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -178,7 +178,7 @@ class npc_maghar_captive : public CreatureScript
public:
npc_maghar_captive() : CreatureScript("npc_maghar_captive") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
{
if (quest->GetQuestId() == QUEST_TOTEM_KARDASH_H)
{
@@ -197,7 +197,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_maghar_captiveAI(creature);
}
@@ -210,19 +210,19 @@ public:
uint32 HealTimer;
uint32 FrostShockTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
ChainLightningTimer = 1000;
HealTimer = 0;
FrostShockTimer = 6000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoCast(me, SPELL_EARTHBIND_TOTEM, false);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (!HasEscortState(STATE_ESCORT_ESCORTING))
return;
@@ -234,7 +234,7 @@ public:
}
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -259,7 +259,7 @@ public:
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned->GetEntry() == NPC_MURK_BRUTE)
summoned->AI()->Talk(SAY_MAG_NO_ESCAPE);
@@ -273,18 +273,18 @@ public:
}
- void SpellHitTarget(Unit* /*target*/, const SpellInfo* spell) OVERRIDE
+ void SpellHitTarget(Unit* /*target*/, const SpellInfo* spell) override
{
if (spell->Id == SPELL_CHAIN_LIGHTNING)
{
- if (rand()%10)
+ if (rand32() % 10)
return;
Talk(SAY_MAG_LIGHTNING);
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
@@ -335,7 +335,7 @@ class npc_creditmarker_visit_with_ancestors : public CreatureScript
public:
npc_creditmarker_visit_with_ancestors() : CreatureScript("npc_creditmarker_visit_with_ancestors") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_creditmarker_visit_with_ancestorsAI(creature);
}
@@ -344,11 +344,11 @@ public:
{
npc_creditmarker_visit_with_ancestorsAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!who)
@@ -399,7 +399,7 @@ class go_corkis_prison : public GameObjectScript
public:
go_corkis_prison() : GameObjectScript("go_corkis_prison") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->SetGoState(GO_STATE_READY);
if (go->GetEntry() == GO_CORKIS_PRISON)
@@ -440,7 +440,7 @@ class npc_corki : public CreatureScript
public:
npc_corki() : CreatureScript("npc_corki") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_corkiAI(creature);
}
@@ -452,13 +452,13 @@ public:
uint32 Say_Timer;
bool ReleasedFromCage;
- void Reset() OVERRIDE
+ void Reset() override
{
Say_Timer = 5000;
ReleasedFromCage = false;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (ReleasedFromCage)
{
@@ -472,7 +472,7 @@ public:
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type == POINT_MOTION_TYPE && id == 1)
{
@@ -524,7 +524,7 @@ class npc_kurenai_captive : public CreatureScript
public:
npc_kurenai_captive() : CreatureScript("npc_kurenai_captive") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
{
if (quest->GetQuestId() == QUEST_TOTEM_KARDASH_A)
{
@@ -543,7 +543,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_kurenai_captiveAI(creature);
}
@@ -556,19 +556,19 @@ public:
uint32 HealTimer;
uint32 FrostShockTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
ChainLightningTimer = 1000;
HealTimer = 0;
FrostShockTimer = 6000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
DoCast(me, SPELL_KUR_EARTHBIND_TOTEM, false);
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (!HasEscortState(STATE_ESCORT_ESCORTING))
return;
@@ -580,7 +580,7 @@ public:
}
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
switch (waypointId)
{
@@ -609,7 +609,7 @@ public:
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned->GetEntry() == NPC_KUR_MURK_BRUTE)
Talk(SAY_KUR_NO_ESCAPE);
@@ -623,11 +623,11 @@ public:
summoned->AI()->AttackStart(me);
}
- void SpellHitTarget(Unit* /*target*/, const SpellInfo* spell) OVERRIDE
+ void SpellHitTarget(Unit* /*target*/, const SpellInfo* spell) override
{
if (spell->Id == SPELL_KUR_CHAIN_LIGHTNING)
{
- if (rand()%30)
+ if (rand32() % 30)
return;
Talk(SAY_KUR_LIGHTNING);
@@ -635,14 +635,14 @@ public:
if (spell->Id == SPELL_KUR_FROST_SHOCK)
{
- if (rand()%30)
+ if (rand32() % 30)
return;
Talk(SAY_KUR_SHOCK);
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
@@ -695,7 +695,7 @@ class go_warmaul_prison : public GameObjectScript
public:
go_warmaul_prison() : GameObjectScript("go_warmaul_prison") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->UseDoorOrButton();
if (player->GetQuestStatus(QUEST_FINDING_THE_SURVIVORS) != QUEST_STATUS_INCOMPLETE)
diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp
index 8542b32d631..f82c1f5fb58 100644
--- a/src/server/scripts/Outland/zone_netherstorm.cpp
+++ b/src/server/scripts/Outland/zone_netherstorm.cpp
@@ -19,13 +19,11 @@
/* ScriptData
SDName: Netherstorm
SD%Complete: 80
-SDComment: Quest support: 10337, 10438, 10652 (special flight paths), 10299, 10321, 10322, 10323, 10329, 10330, 10338, 10365(Shutting Down Manaforge), 10198, 10191
+SDComment: Quest support: 10337, 10438, 10652 (special flight paths), 10198, 10191
SDCategory: Netherstorm
EndScriptData */
/* ContentData
-npc_manaforge_control_console
-go_manaforge_control_console
npc_commander_dawnforge
npc_bessy
npc_maxx_a_million
@@ -39,323 +37,6 @@ EndContentData */
#include "Player.h"
/*######
-## npc_manaforge_control_console
-######*/
-
-//used by 20209, 20417, 20418, 20440, signed for 20209
-enum ManaforgeConsoleData
-{
- EMOTE_START = 0,
- EMOTE_60 = 1,
- EMOTE_30 = 2,
- EMOTE_10 = 3,
- EMOTE_COMPLETE = 4,
- EMOTE_ABORT = 5,
-
- ENTRY_BNAAR_C_CONSOLE = 20209,
- ENTRY_CORUU_C_CONSOLE = 20417,
- ENTRY_DURO_C_CONSOLE = 20418,
- ENTRY_ARA_C_CONSOLE = 20440,
-
- ENTRY_SUNFURY_TECH = 20218,
- ENTRY_SUNFURY_PROT = 20436,
-
- ENTRY_ARA_TECH = 20438,
- ENTRY_ARA_ENGI = 20439,
- ENTRY_ARA_GORKLONN = 20460,
-
- SPELL_DISABLE_VISUAL = 35031,
- SPELL_INTERRUPT_1 = 35016, //ACID mobs should cast this
- SPELL_INTERRUPT_2 = 35176, //ACID mobs should cast this (Manaforge Ara-version)
-};
-
-class npc_manaforge_control_console : public CreatureScript
-{
-public:
- npc_manaforge_control_console() : CreatureScript("npc_manaforge_control_console") { }
-
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_manaforge_control_consoleAI(creature);
- }
-
- struct npc_manaforge_control_consoleAI : public ScriptedAI
- {
- npc_manaforge_control_consoleAI(Creature* creature) : ScriptedAI(creature) { }
-
- uint32 Event_Timer;
- uint32 Wave_Timer;
- uint32 Phase;
- bool Wave;
- uint64 someplayer;
- uint64 goConsole;
- Creature* add;
-
- void Reset() OVERRIDE
- {
- Event_Timer = 3000;
- Wave_Timer = 0;
- Phase = 1;
- Wave = false;
- someplayer = 0;
- goConsole = 0;
- add = NULL;
- }
-
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
-
- /*void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
- {
- //we have no way of telling the Creature was hit by spell -> got aura applied after 10-12 seconds
- //then no way for the mobs to actually stop the shutdown as intended.
- if (spell->Id == SPELL_INTERRUPT_1)
- DoSay("Silence! I kill you!", LANG_UNIVERSAL, NULL);
- }*/
-
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- Talk(EMOTE_ABORT);
-
- if (someplayer)
- {
- if (Player* player = ObjectAccessor::GetPlayer(*me, someplayer))
- {
- switch (me->GetEntry())
- {
- case ENTRY_BNAAR_C_CONSOLE:
- player->FailQuest(10299);
- player->FailQuest(10329);
- break;
- case ENTRY_CORUU_C_CONSOLE:
- player->FailQuest(10321);
- player->FailQuest(10330);
- break;
- case ENTRY_DURO_C_CONSOLE:
- player->FailQuest(10322);
- player->FailQuest(10338);
- break;
- case ENTRY_ARA_C_CONSOLE:
- player->FailQuest(10323);
- player->FailQuest(10365);
- break;
- }
- }
- }
-
- if (goConsole)
- if (GameObject* go = GameObject::GetGameObject(*me, goConsole))
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
- }
-
- void DoWaveSpawnForCreature(Creature* creature)
- {
- switch (creature->GetEntry())
- {
- case ENTRY_BNAAR_C_CONSOLE:
- if (rand()%2)
- {
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2933.68f, 4162.55f, 164.00f, 1.60f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2927.36f, 4212.97f, 164.00f);
- }
- else
- {
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2927.36f, 4212.97f, 164.00f, 4.94f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2933.68f, 4162.55f, 164.00f);
- }
- Wave_Timer = 30000;
- break;
- case ENTRY_CORUU_C_CONSOLE:
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2445.21f, 2765.26f, 134.49f, 3.93f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2424.21f, 2740.15f, 133.81f);
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2429.86f, 2731.85f, 134.53f, 1.31f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2435.37f, 2766.04f, 133.81f);
- Wave_Timer = 20000;
- break;
- case ENTRY_DURO_C_CONSOLE:
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2986.80f, 2205.36f, 165.37f, 3.74f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2985.15f, 2197.32f, 164.79f);
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2952.91f, 2191.20f, 165.32f, 0.22f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2060.01f, 2185.27f, 164.67f);
- Wave_Timer = 15000;
- break;
- case ENTRY_ARA_C_CONSOLE:
- if (rand()%2)
- {
- add = me->SummonCreature(ENTRY_ARA_TECH, 4035.11f, 4038.97f, 194.27f, 2.57f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 4003.42f, 4040.19f, 193.49f);
- add = me->SummonCreature(ENTRY_ARA_TECH, 4033.66f, 4036.79f, 194.28f, 2.57f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 4003.42f, 4040.19f, 193.49f);
- add = me->SummonCreature(ENTRY_ARA_TECH, 4037.13f, 4037.30f, 194.23f, 2.57f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 4003.42f, 4040.19f, 193.49f);
- }
- else
- {
- add = me->SummonCreature(ENTRY_ARA_TECH, 3099.59f, 4049.30f, 194.22f, 0.05f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 4028.01f, 4035.17f, 193.59f);
- add = me->SummonCreature(ENTRY_ARA_TECH, 3999.72f, 4046.75f, 194.22f, 0.05f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 4028.01f, 4035.17f, 193.59f);
- add = me->SummonCreature(ENTRY_ARA_TECH, 3996.81f, 4048.26f, 194.22f, 0.05f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 4028.01f, 4035.17f, 193.59f);
- }
- Wave_Timer = 15000;
- break;
- }
- }
- void DoFinalSpawnForCreature(Creature* creature)
- {
- switch (creature->GetEntry())
- {
- case ENTRY_BNAAR_C_CONSOLE:
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2946.52f, 4201.42f, 163.47f, 3.54f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2927.49f, 4192.81f, 163.00f);
- break;
- case ENTRY_CORUU_C_CONSOLE:
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2453.88f, 2737.85f, 133.27f, 2.59f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2433.96f, 2751.53f, 133.85f);
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2441.62f, 2735.32f, 134.49f, 1.97f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2433.96f, 2751.53f, 133.85f);
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2450.73f, 2754.50f, 134.49f, 3.29f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2433.96f, 2751.53f, 133.85f);
- break;
- case ENTRY_DURO_C_CONSOLE:
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2956.18f, 2202.85f, 165.32f, 5.45f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2972.27f, 2193.22f, 164.48f);
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2975.30f, 2211.50f, 165.32f, 4.55f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2972.27f, 2193.22f, 164.48f);
- add = me->SummonCreature(ENTRY_SUNFURY_PROT, 2965.02f, 2217.45f, 164.16f, 4.96f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2972.27f, 2193.22f, 164.48f);
- break;
- case ENTRY_ARA_C_CONSOLE:
- add = me->SummonCreature(ENTRY_ARA_ENGI, 3994.51f, 4020.46f, 192.18f, 0.91f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 4008.35f, 4035.04f, 192.70f);
- add = me->SummonCreature(ENTRY_ARA_GORKLONN, 4021.56f, 4059.35f, 193.59f, 4.44f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 4016.62f, 4039.89f, 193.46f);
- break;
- }
- }
-
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (Event_Timer <= diff)
- {
- switch (Phase)
- {
- case 1:
- if (someplayer)
- {
- Unit* u = Unit::GetUnit(*me, someplayer);
- if (u && u->GetTypeId() == TYPEID_PLAYER)
- Talk(EMOTE_START, u);
- }
- Event_Timer = 60000;
- Wave = true;
- ++Phase;
- break;
- case 2:
- Talk(EMOTE_60);
- Event_Timer = 30000;
- ++Phase;
- break;
- case 3:
- Talk(EMOTE_30);
- Event_Timer = 20000;
- DoFinalSpawnForCreature(me);
- ++Phase;
- break;
- case 4:
- Talk(EMOTE_10);
- Event_Timer = 10000;
- Wave = false;
- ++Phase;
- break;
- case 5:
- Talk(EMOTE_COMPLETE);
- if (someplayer)
- {
- if (Player* player = ObjectAccessor::GetPlayer(*me, someplayer))
- player->KilledMonsterCredit(me->GetEntry(), me->GetGUID());
- DoCast(me, SPELL_DISABLE_VISUAL);
- }
-
- if (goConsole)
- if (GameObject* go = GameObject::GetGameObject(*me, goConsole))
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
-
- ++Phase;
- break;
- }
- }
- else
- Event_Timer -= diff;
-
- if (Wave)
- {
- if (Wave_Timer <= diff)
- {
- DoWaveSpawnForCreature(me);
- }
- else
- Wave_Timer -= diff;
- }
- }
- };
-};
-
-/*######
-## go_manaforge_control_console
-######*/
-
-/// @todo clean up this workaround when Trinity adds support to do it properly (with gossip selections instead of instant summon)
-class go_manaforge_control_console : public GameObjectScript
-{
-public:
- go_manaforge_control_console() : GameObjectScript("go_manaforge_control_console") { }
-
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
- {
- if (go->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER)
- {
- player->PrepareQuestMenu(go->GetGUID());
- player->SendPreparedQuest(go->GetGUID());
- }
-
- Creature* manaforge = NULL;
-
- switch (go->GetAreaId())
- {
- case 3726: //b'naar
- if ((player->GetQuestStatus(10299) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(10329) == QUEST_STATUS_INCOMPLETE) &&
- player->HasItemCount(29366))
- manaforge = player->SummonCreature(ENTRY_BNAAR_C_CONSOLE, 2918.95f, 4189.98f, 161.88f, 0.34f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 125000);
- break;
- case 3730: //coruu
- if ((player->GetQuestStatus(10321) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(10330) == QUEST_STATUS_INCOMPLETE) &&
- player->HasItemCount(29396))
- manaforge = player->SummonCreature(ENTRY_CORUU_C_CONSOLE, 2426.77f, 2750.38f, 133.24f, 2.14f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 125000);
- break;
- case 3734: //duro
- if ((player->GetQuestStatus(10322) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(10338) == QUEST_STATUS_INCOMPLETE) &&
- player->HasItemCount(29397))
- manaforge = player->SummonCreature(ENTRY_DURO_C_CONSOLE, 2976.48f, 2183.29f, 163.20f, 1.85f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 125000);
- break;
- case 3722: //ara
- if ((player->GetQuestStatus(10323) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(10365) == QUEST_STATUS_INCOMPLETE) &&
- player->HasItemCount(29411))
- manaforge = player->SummonCreature(ENTRY_ARA_C_CONSOLE, 4013.71f, 4028.76f, 192.10f, 1.25f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 125000);
- break;
- }
-
- if (manaforge)
- {
- CAST_AI(npc_manaforge_control_console::npc_manaforge_control_consoleAI, manaforge->AI())->someplayer = player->GetGUID();
- CAST_AI(npc_manaforge_control_console::npc_manaforge_control_consoleAI, manaforge->AI())->goConsole = go->GetGUID();
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
- }
- return true;
- }
-};
-
-/*######
## npc_commander_dawnforge
######*/
@@ -393,7 +74,7 @@ class npc_commander_dawnforge : public CreatureScript
public:
npc_commander_dawnforge() : CreatureScript("npc_commander_dawnforge") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_commander_dawnforgeAI(creature);
}
@@ -411,7 +92,7 @@ public:
uint32 Phase_Timer;
bool isEvent;
- void Reset() OVERRIDE
+ void Reset() override
{
PlayerGUID = 0;
ardonisGUID = 0;
@@ -423,9 +104,9 @@ public:
isEvent = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
pathaleonGUID = summoned->GetGUID();
}
@@ -488,7 +169,7 @@ public:
return false;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Is event even running?
if (!isEvent)
@@ -626,7 +307,7 @@ class at_commander_dawnforge : public AreaTriggerScript
public:
at_commander_dawnforge() : AreaTriggerScript("at_commander_dawnforge") { }
- bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE
+ bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override
{
//if player lost aura or not have at all, we should not try start event.
if (!player->HasAura(SPELL_SUNFURY_DISGUISE))
@@ -638,7 +319,7 @@ public:
if (!Dawnforge)
return false;
- if (CAST_AI(npc_commander_dawnforge::npc_commander_dawnforgeAI, Dawnforge->AI())->CanStartEvent(player))
+ if (ENSURE_AI(npc_commander_dawnforge::npc_commander_dawnforgeAI, Dawnforge->AI())->CanStartEvent(player))
return true;
}
return false;
@@ -669,7 +350,7 @@ public:
//if (quest->GetQuestId() == QUEST_DIMENSIUS)
//creature->AI()->Talk(WHISPER_DABIRI, player);
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -681,7 +362,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -721,7 +402,7 @@ class npc_phase_hunter : public CreatureScript
public:
npc_phase_hunter() : CreatureScript("npc_phase_hunter") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_phase_hunterAI(creature);
}
@@ -747,33 +428,33 @@ public:
uint32 ManaBurnTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
Weak = false;
Materialize = false;
Drained = false;
- WeakPercent = 25 + (rand() % 16); // 25-40
+ WeakPercent = 25 + (rand32() % 16); // 25-40
PlayerGUID = 0;
- ManaBurnTimer = 5000 + (rand() % 3 * 1000); // 5-8 sec cd
+ ManaBurnTimer = 5000 + (rand32() % 3 * 1000); // 5-8 sec cd
if (me->GetEntry() == NPC_DRAINED_PHASE_HUNTER_ENTRY)
me->UpdateEntry(NPC_PHASE_HUNTER_ENTRY);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
PlayerGUID = who->GetGUID();
}
- //void SpellHit(Unit* /*caster*/, const SpellInfo* /*spell*/) OVERRIDE
+ //void SpellHit(Unit* /*caster*/, const SpellInfo* /*spell*/) override
//{
// DoCast(me, SPELL_DE_MATERIALIZE);
//}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!Materialize)
{
@@ -795,7 +476,7 @@ public:
for (std::list<HostileReference*>::const_iterator itr = AggroList.begin(); itr != AggroList.end(); ++itr)
{
- if (Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid()))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()))
{
if (unit->GetCreateMana() > 0)
UnitsWithMana.push_back(unit);
@@ -804,7 +485,7 @@ public:
if (!UnitsWithMana.empty())
{
DoCast(Trinity::Containers::SelectRandomContainerElement(UnitsWithMana), SPELL_MANA_BURN);
- ManaBurnTimer = 8000 + (rand() % 10 * 1000); // 8-18 sec cd
+ ManaBurnTimer = 8000 + (rand32() % 10 * 1000); // 8-18 sec cd
}
else
ManaBurnTimer = 3500;
@@ -854,18 +535,18 @@ class npc_bessy : public CreatureScript
public:
npc_bessy() : CreatureScript("npc_bessy") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == Q_ALMABTRIEB)
{
creature->setFaction(113);
creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
+ ENSURE_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
}
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_bessyAI(creature);
}
@@ -874,13 +555,13 @@ public:
{
npc_bessyAI(Creature* creature) : npc_escortAI(creature) { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Player* player = GetPlayerForEscort())
player->FailQuest(Q_ALMABTRIEB);
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -909,12 +590,12 @@ public:
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
summoned->AI()->AttackStart(me);
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->RestoreFaction();
}
@@ -936,7 +617,7 @@ class npc_maxx_a_million_escort : public CreatureScript
public:
npc_maxx_a_million_escort() : CreatureScript("npc_maxx_a_million_escort") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_maxx_a_million_escortAI(creature);
}
@@ -948,13 +629,13 @@ public:
bool bTake;
uint32 uiTakeTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
bTake=false;
uiTakeTimer=3000;
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -980,13 +661,13 @@ public:
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Player* player = GetPlayerForEscort())
player->FailQuest(QUEST_MARK_V_IS_ALIVE);
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
npc_escortAI::UpdateAI(uiDiff);
@@ -1010,7 +691,7 @@ public:
}
};
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
{
if (quest->GetQuestId() == QUEST_MARK_V_IS_ALIVE)
{
@@ -1039,7 +720,7 @@ class go_captain_tyralius_prison : public GameObjectScript
public:
go_captain_tyralius_prison() : GameObjectScript("go_captain_tyralius_prison") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->UseDoorOrButton();
if (Creature* tyralius = go->FindNearestCreature(NPC_CAPTAIN_TYRALIUS, 1.0f))
@@ -1054,8 +735,6 @@ class go_captain_tyralius_prison : public GameObjectScript
void AddSC_netherstorm()
{
- new go_manaforge_control_console();
- new npc_manaforge_control_console();
new npc_commander_dawnforge();
new at_commander_dawnforge();
new npc_professor_dabiri();
diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
index f0defe88083..b9b87fd5d6a 100644
--- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
+++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
@@ -72,7 +72,7 @@ class npc_mature_netherwing_drake : public CreatureScript
public:
npc_mature_netherwing_drake() : CreatureScript("npc_mature_netherwing_drake") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_mature_netherwing_drakeAI(creature);
}
@@ -89,7 +89,7 @@ public:
uint32 EatTimer;
uint32 CastTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
uiPlayerGUID = 0;
@@ -100,7 +100,7 @@ public:
CastTimer = 5000;
}
- void SpellHit(Unit* pCaster, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* pCaster, SpellInfo const* spell) override
{
if (bCanEat || bIsEating)
return;
@@ -112,7 +112,7 @@ public:
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -125,7 +125,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (bCanEat || bIsEating)
{
@@ -133,7 +133,7 @@ public:
{
if (bCanEat && !bIsEating)
{
- if (Unit* unit = Unit::GetUnit(*me, uiPlayerGUID))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, uiPlayerGUID))
{
if (GameObject* go = unit->FindNearestGameObject(GO_CARCASS, 10))
{
@@ -210,7 +210,7 @@ class npc_enslaved_netherwing_drake : public CreatureScript
public:
npc_enslaved_netherwing_drake() : CreatureScript("npc_enslaved_netherwing_drake") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_enslaved_netherwing_drakeAI(creature);
}
@@ -228,7 +228,7 @@ public:
uint32 FlyTimer;
bool Tapped;
- void Reset() OVERRIDE
+ void Reset() override
{
if (!Tapped)
me->setFaction(FACTION_DEFAULT);
@@ -238,7 +238,7 @@ public:
me->SetVisible(true);
}
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (!caster)
return;
@@ -264,7 +264,7 @@ public:
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -273,7 +273,7 @@ public:
{
if (PlayerGUID)
{
- Unit* player = Unit::GetUnit(*me, PlayerGUID);
+ Unit* player = ObjectAccessor::GetUnit(*me, PlayerGUID);
if (player)
DoCast(player, SPELL_FORCE_OF_NELTHARAKU, true);
@@ -286,7 +286,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
{
@@ -311,10 +311,10 @@ public:
Position pos;
if (Unit* EscapeDummy = me->FindNearestCreature(NPC_ESCAPE_DUMMY, 30))
- EscapeDummy->GetPosition(&pos);
+ pos = EscapeDummy->GetPosition();
else
{
- me->GetRandomNearPosition(pos, 20);
+ pos = me->GetRandomNearPosition(20);
pos.m_positionZ += 25;
}
@@ -341,7 +341,7 @@ class npc_dragonmaw_peon : public CreatureScript
public:
npc_dragonmaw_peon() : CreatureScript("npc_dragonmaw_peon") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_dragonmaw_peonAI(creature);
}
@@ -354,14 +354,14 @@ public:
bool Tapped;
uint32 PoisonTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
PlayerGUID = 0;
Tapped = false;
PoisonTimer = 0;
}
- void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (!caster)
return;
@@ -379,7 +379,7 @@ public:
}
}
- void MovementInform(uint32 type, uint32 id) OVERRIDE
+ void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
@@ -391,7 +391,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (PoisonTimer)
{
@@ -420,7 +420,7 @@ class npc_drake_dealer_hurlunk : public CreatureScript
public:
npc_drake_dealer_hurlunk() : CreatureScript("npc_drake_dealer_hurlunk") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_TRADE)
@@ -429,7 +429,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsVendor() && player->GetReputationRank(1015) == REP_EXALTED)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
@@ -452,7 +452,7 @@ class npcs_flanis_swiftwing_and_kagrosh : public CreatureScript
public:
npcs_flanis_swiftwing_and_kagrosh() : CreatureScript("npcs_flanis_swiftwing_and_kagrosh") { }
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -478,7 +478,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(10583) == QUEST_STATUS_INCOMPLETE && !player->HasItemCount(30658, 1, true))
player->ADD_GOSSIP_ITEM(0, GOSSIP_HSK1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
@@ -508,7 +508,7 @@ class npc_oronok_tornheart : public CreatureScript
public:
npc_oronok_tornheart() : CreatureScript("npc_oronok_tornheart") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -548,7 +548,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -585,7 +585,7 @@ class npc_karynaku : public CreatureScript
public:
npc_karynaku() : CreatureScript("npc_karynaku") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_ALLY_OF_NETHER)
player->ActivateTaxiPathTo(TAXI_PATH_ID);
@@ -639,18 +639,18 @@ class npc_overlord_morghor : public CreatureScript
public:
npc_overlord_morghor() : CreatureScript("npc_overlord_morghor") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest *_Quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest *_Quest) override
{
if (_Quest->GetQuestId() == QUEST_LORD_ILLIDAN_STORMRAGE)
{
- CAST_AI(npc_overlord_morghor::npc_overlord_morghorAI, creature->AI())->PlayerGUID = player->GetGUID();
- CAST_AI(npc_overlord_morghor::npc_overlord_morghorAI, creature->AI())->StartEvent();
+ ENSURE_AI(npc_overlord_morghor::npc_overlord_morghorAI, creature->AI())->PlayerGUID = player->GetGUID();
+ ENSURE_AI(npc_overlord_morghor::npc_overlord_morghorAI, creature->AI())->StartEvent();
return true;
}
return false;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_overlord_morghorAI(creature);
}
@@ -667,7 +667,7 @@ public:
bool Event;
- void Reset() OVERRIDE
+ void Reset() override
{
PlayerGUID = 0;
IllidanGUID = 0;
@@ -900,7 +900,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!ConversationTimer)
return;
@@ -943,7 +943,7 @@ class npc_earthmender_wilda : public CreatureScript
public:
npc_earthmender_wilda() : CreatureScript("npc_earthmender_wilda") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
{
if (quest->GetQuestId() == QUEST_ESCAPE_COILSCAR)
{
@@ -956,7 +956,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_earthmender_wildaAI(creature);
}
@@ -967,12 +967,12 @@ public:
uint32 m_uiHealingTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
m_uiHealingTimer = 0;
}
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -1030,7 +1030,7 @@ public:
}
}
- void JustSummoned(Creature* summoned) OVERRIDE
+ void JustSummoned(Creature* summoned) override
{
if (summoned->GetEntry() == NPC_COILSKAR_ASSASSIN)
summoned->AI()->AttackStart(me);
@@ -1048,10 +1048,10 @@ public:
DoSummon(NPC_COILSKAR_ASSASSIN, me, 15.0f, 5000, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
//don't always use
- if (rand()%5)
+ if (rand32() % 5)
return;
//only aggro text if not player
@@ -1063,7 +1063,7 @@ public:
}
}
- void UpdateAI(uint32 uiDiff) OVERRIDE
+ void UpdateAI(uint32 uiDiff) override
{
npc_escortAI::UpdateAI(uiDiff);
@@ -1186,7 +1186,7 @@ class npc_torloth_the_magnificent : public CreatureScript
public:
npc_torloth_the_magnificent() : CreatureScript("npc_torloth_the_magnificent") { }
- CreatureAI* GetAI(Creature* c) const OVERRIDE
+ CreatureAI* GetAI(Creature* c) const override
{
return new npc_torloth_the_magnificentAI(c);
}
@@ -1204,7 +1204,7 @@ public:
bool Timers;
- void Reset() OVERRIDE
+ void Reset() override
{
AnimationTimer = 4000;
AnimationCount = 0;
@@ -1217,7 +1217,7 @@ public:
me->SetTarget(0);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
void HandleAnimation()
{
@@ -1225,7 +1225,7 @@ public:
if (TorlothAnim[AnimationCount].creature == 1)
{
- creature = (Unit::GetCreature(*me, LordIllidanGUID));
+ creature = (ObjectAccessor::GetCreature(*me, LordIllidanGUID));
if (!creature)
return;
@@ -1264,7 +1264,7 @@ public:
++AnimationCount;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (AnimationTimer)
{
@@ -1290,26 +1290,26 @@ public:
if (SpellTimer1 <= diff)
{
DoCastVictim(SpawnCast[6].SpellId);//Cleave
- SpellTimer1 = SpawnCast[6].Timer2 + (rand()%10 * 1000);
+ SpellTimer1 = SpawnCast[6].Timer2 + (rand32() % 10 * 1000);
} else SpellTimer1 -= diff;
if (SpellTimer2 <= diff)
{
DoCastVictim(SpawnCast[7].SpellId);//Shadowfury
- SpellTimer2 = SpawnCast[7].Timer2 + (rand()%5 * 1000);
+ SpellTimer2 = SpawnCast[7].Timer2 + (rand32() % 5 * 1000);
} else SpellTimer2 -= diff;
if (SpellTimer3 <= diff)
{
DoCast(me, SpawnCast[8].SpellId);
- SpellTimer3 = SpawnCast[8].Timer2 + (rand()%7 * 1000);//Spell Reflection
+ SpellTimer3 = SpawnCast[8].Timer2 + (rand32() % 7 * 1000);//Spell Reflection
} else SpellTimer3 -= diff;
}
DoMeleeAttackIfReady();
}
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
switch (killer->GetTypeId())
{
@@ -1326,7 +1326,7 @@ public:
break;
}
- if (Creature* LordIllidan = (Unit::GetCreature(*me, LordIllidanGUID)))
+ if (Creature* LordIllidan = (ObjectAccessor::GetCreature(*me, LordIllidanGUID)))
LordIllidan->AI()->EnterEvadeMode();
}
};
@@ -1341,7 +1341,7 @@ class npc_lord_illidan_stormrage : public CreatureScript
public:
npc_lord_illidan_stormrage() : CreatureScript("npc_lord_illidan_stormrage") { }
- CreatureAI* GetAI(Creature* c) const OVERRIDE
+ CreatureAI* GetAI(Creature* c) const override
{
return new npc_lord_illidan_stormrageAI(c);
}
@@ -1362,7 +1362,7 @@ public:
bool Announced;
bool Failed;
- void Reset() OVERRIDE
+ void Reset() override
{
PlayerGUID = 0;
@@ -1378,10 +1378,10 @@ public:
me->SetVisible(false);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
+ void AttackStart(Unit* /*who*/) override { }
void SummonNextWave();
@@ -1445,7 +1445,7 @@ public:
Announced = false;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!PlayerGUID || !EventStarted)
return;
@@ -1483,7 +1483,7 @@ class npc_illidari_spawn : public CreatureScript
public:
npc_illidari_spawn() : CreatureScript("npc_illidari_spawn") { }
- CreatureAI* GetAI(Creature* c) const OVERRIDE
+ CreatureAI* GetAI(Creature* c) const override
{
return new npc_illidari_spawnAI(c);
}
@@ -1496,23 +1496,23 @@ public:
uint32 SpellTimer1, SpellTimer2, SpellTimer3;
bool Timers;
- void Reset() OVERRIDE
+ void Reset() override
{
LordIllidanGUID = 0;
Timers = false;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
me->RemoveCorpse();
- if (Creature* LordIllidan = (Unit::GetCreature(*me, LordIllidanGUID)))
+ if (Creature* LordIllidan = (ObjectAccessor::GetCreature(*me, LordIllidanGUID)))
if (LordIllidan)
- CAST_AI(npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI, LordIllidan->AI())->LiveCounter();
+ ENSURE_AI(npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI, LordIllidan->AI())->LiveCounter();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -1521,18 +1521,18 @@ public:
{
if (me->GetEntry() == 22075)//Illidari Soldier
{
- SpellTimer1 = SpawnCast[0].Timer1 + (rand()%4 * 1000);
+ SpellTimer1 = SpawnCast[0].Timer1 + (rand32() % 4 * 1000);
}
if (me->GetEntry() == 22074)//Illidari Mind Breaker
{
- SpellTimer1 = SpawnCast[1].Timer1 + (rand()%10 * 1000);
- SpellTimer2 = SpawnCast[2].Timer1 + (rand()%4 * 1000);
- SpellTimer3 = SpawnCast[3].Timer1 + (rand()%4 * 1000);
+ SpellTimer1 = SpawnCast[1].Timer1 + (rand32() % 10 * 1000);
+ SpellTimer2 = SpawnCast[2].Timer1 + (rand32() % 4 * 1000);
+ SpellTimer3 = SpawnCast[3].Timer1 + (rand32() % 4 * 1000);
}
if (me->GetEntry() == 19797)// Illidari Highlord
{
- SpellTimer1 = SpawnCast[4].Timer1 + (rand()%4 * 1000);
- SpellTimer2 = SpawnCast[5].Timer1 + (rand()%4 * 1000);
+ SpellTimer1 = SpawnCast[4].Timer1 + (rand32() % 4 * 1000);
+ SpellTimer2 = SpawnCast[5].Timer1 + (rand32() % 4 * 1000);
}
Timers = true;
}
@@ -1542,7 +1542,7 @@ public:
if (SpellTimer1 <= diff)
{
DoCastVictim(SpawnCast[0].SpellId);//Spellbreaker
- SpellTimer1 = SpawnCast[0].Timer2 + (rand()%5 * 1000);
+ SpellTimer1 = SpawnCast[0].Timer2 + (rand32() % 5 * 1000);
} else SpellTimer1 -= diff;
}
//Illidari Mind Breaker
@@ -1555,7 +1555,7 @@ public:
if (target->GetTypeId() == TYPEID_PLAYER)
{
DoCast(target, SpawnCast[1].SpellId); //Focused Bursts
- SpellTimer1 = SpawnCast[1].Timer2 + (rand()%5 * 1000);
+ SpellTimer1 = SpawnCast[1].Timer2 + (rand32() % 5 * 1000);
} else SpellTimer1 = 2000;
}
} else SpellTimer1 -= diff;
@@ -1563,13 +1563,13 @@ public:
if (SpellTimer2 <= diff)
{
DoCastVictim(SpawnCast[2].SpellId);//Psychic Scream
- SpellTimer2 = SpawnCast[2].Timer2 + (rand()%13 * 1000);
+ SpellTimer2 = SpawnCast[2].Timer2 + (rand32() % 13 * 1000);
} else SpellTimer2 -= diff;
if (SpellTimer3 <= diff)
{
DoCastVictim(SpawnCast[3].SpellId);//Mind Blast
- SpellTimer3 = SpawnCast[3].Timer2 + (rand()%8 * 1000);
+ SpellTimer3 = SpawnCast[3].Timer2 + (rand32() % 8 * 1000);
} else SpellTimer3 -= diff;
}
//Illidari Highlord
@@ -1578,13 +1578,13 @@ public:
if (SpellTimer1 <= diff)
{
DoCastVictim(SpawnCast[4].SpellId);//Curse Of Flames
- SpellTimer1 = SpawnCast[4].Timer2 + (rand()%10 * 1000);
+ SpellTimer1 = SpawnCast[4].Timer2 + (rand32() % 10 * 1000);
} else SpellTimer1 -= diff;
if (SpellTimer2 <= diff)
{
DoCastVictim(SpawnCast[5].SpellId);//Flamestrike
- SpellTimer2 = SpawnCast[5].Timer2 + (rand()%7 * 13000);
+ SpellTimer2 = SpawnCast[5].Timer2 + (rand32() % 7 * 13000);
} else SpellTimer2 -= diff;
}
@@ -1616,7 +1616,7 @@ void npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI::SummonNextWave()
if (WaveCount == 0)//1 Wave
{
- if (rand()%3 == 1 && FelguardCount<2)
+ if (rand32() % 3 == 1 && FelguardCount<2)
{
Spawn->SetDisplayId(18654);
++FelguardCount;
@@ -1644,14 +1644,14 @@ void npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI::SummonNextWave()
Spawn->GetMotionMaster()->MovePoint(0, x, y, z);
}
}
- CAST_AI(npc_illidari_spawn::npc_illidari_spawnAI, Spawn->AI())->LordIllidanGUID = me->GetGUID();
+ ENSURE_AI(npc_illidari_spawn::npc_illidari_spawnAI, Spawn->AI())->LordIllidanGUID = me->GetGUID();
}
if (WavesInfo[WaveCount].CreatureId == 22076) // Torloth
{
- CAST_AI(npc_torloth_the_magnificent::npc_torloth_the_magnificentAI, Spawn->AI())->LordIllidanGUID = me->GetGUID();
+ ENSURE_AI(npc_torloth_the_magnificent::npc_torloth_the_magnificentAI, Spawn->AI())->LordIllidanGUID = me->GetGUID();
if (PlayerGUID)
- CAST_AI(npc_torloth_the_magnificent::npc_torloth_the_magnificentAI, Spawn->AI())->AggroTargetGUID = PlayerGUID;
+ ENSURE_AI(npc_torloth_the_magnificent::npc_torloth_the_magnificentAI, Spawn->AI())->AggroTargetGUID = PlayerGUID;
}
}
}
@@ -1669,17 +1669,17 @@ class go_crystal_prison : public GameObjectScript
public:
go_crystal_prison() : GameObjectScript("go_crystal_prison") { }
- bool OnQuestAccept(Player* player, GameObject* /*go*/, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, GameObject* /*go*/, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_BATTLE_OF_THE_CRIMSON_WATCH)
{
Creature* Illidan = player->FindNearestCreature(22083, 50);
- if (Illidan && !CAST_AI(npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI, Illidan->AI())->EventStarted)
+ if (Illidan && !ENSURE_AI(npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI, Illidan->AI())->EventStarted)
{
- CAST_AI(npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI, Illidan->AI())->PlayerGUID = player->GetGUID();
- CAST_AI(npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI, Illidan->AI())->LiveCount = 0;
- CAST_AI(npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI, Illidan->AI())->EventStarted=true;
+ ENSURE_AI(npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI, Illidan->AI())->PlayerGUID = player->GetGUID();
+ ENSURE_AI(npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI, Illidan->AI())->LiveCount = 0;
+ ENSURE_AI(npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI, Illidan->AI())->EventStarted = true;
}
}
return true;
@@ -1738,7 +1738,7 @@ class npc_enraged_spirit : public CreatureScript
public:
npc_enraged_spirit() : CreatureScript("npc_enraged_spirit") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_enraged_spiritAI(creature);
}
@@ -1747,11 +1747,11 @@ public:
{
npc_enraged_spiritAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
// always spawn spirit on death
// if totem around
@@ -1813,7 +1813,6 @@ public:
enum ZuluhedChains
{
- QUEST_ZULUHED = 10866,
NPC_KARYNAKU = 22112,
};
@@ -1828,18 +1827,18 @@ class spell_unlocking_zuluheds_chains : public SpellScriptLoader
void HandleAfterHit()
{
- if (GetCaster()->GetTypeId() == TYPEID_PLAYER)
- if (Creature* karynaku = GetCaster()->FindNearestCreature(NPC_KARYNAKU, 15.0f))
- GetCaster()->ToPlayer()->KilledMonsterCredit(NPC_KARYNAKU, karynaku->GetGUID());
+ if (Player* caster = GetCaster()->ToPlayer())
+ if (Creature* karynaku = caster->FindNearestCreature(NPC_KARYNAKU, 15.0f))
+ caster->KilledMonsterCredit(NPC_KARYNAKU, karynaku->GetGUID());
}
- void Register() OVERRIDE
+ void Register() override
{
AfterHit += SpellHitFn(spell_unlocking_zuluheds_chains_SpellScript::HandleAfterHit);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_unlocking_zuluheds_chains_SpellScript();
}
@@ -1867,14 +1866,7 @@ public:
{
npc_shadowmoon_tuber_nodeAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
- {
- tapped = false;
- tuberGUID = 0;
- resetTimer = 60000;
- }
-
- void SetData(uint32 id, uint32 data) OVERRIDE
+ void SetData(uint32 id, uint32 data) override
{
if (id == TYPE_BOAR && data == DATA_BOAR)
{
@@ -1884,52 +1876,26 @@ public:
// Despawn the tuber
if (GameObject* tuber = me->FindNearestGameObject(GO_SHADOWMOON_TUBER_MOUND, 5.0f))
{
- tuberGUID = tuber->GetGUID();
- // @Workaround: find how to properly despawn the GO
- tuber->SetPhaseMask(2, true);
+ tuber->SetLootState(GO_JUST_DEACTIVATED);
+ me->DespawnOrUnsummon();
}
}
}
- void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
{
- if (!tapped && spell->Id == SPELL_WHISTLE)
+ if (spell->Id == SPELL_WHISTLE)
{
if (Creature* boar = me->FindNearestCreature(NPC_BOAR_ENTRY, 30.0f))
{
- // Disable trigger and force nearest boar to walk to him
- tapped = true;
boar->SetWalk(false);
boar->GetMotionMaster()->MovePoint(POINT_TUBER, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
}
}
}
-
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (tapped)
- {
- if (resetTimer <= diff)
- {
- // Respawn the tuber
- if (tuberGUID)
- if (GameObject* tuber = GameObject::GetGameObject(*me, tuberGUID))
- // @Workaround: find how to properly respawn the GO
- tuber->SetPhaseMask(1, true);
-
- Reset();
- }
- else
- resetTimer -= diff;
- }
- }
- private:
- bool tapped;
- uint64 tuberGUID;
- uint32 resetTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_shadowmoon_tuber_nodeAI(creature);
}
diff --git a/src/server/scripts/Outland/zone_shattrath_city.cpp b/src/server/scripts/Outland/zone_shattrath_city.cpp
index a5cdb600311..9a62cde005c 100644
--- a/src/server/scripts/Outland/zone_shattrath_city.cpp
+++ b/src/server/scripts/Outland/zone_shattrath_city.cpp
@@ -58,7 +58,7 @@ class npc_raliq_the_drunk : public CreatureScript
public:
npc_raliq_the_drunk() : CreatureScript("npc_raliq_the_drunk") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -70,7 +70,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(QUEST_CRACK_SKULLS) == QUEST_STATUS_INCOMPLETE)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_RALIQ, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
@@ -79,7 +79,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_raliq_the_drunkAI(creature);
}
@@ -94,13 +94,13 @@ public:
uint32 m_uiNormFaction;
uint32 Uppercut_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Uppercut_Timer = 5000;
me->RestoreFaction();
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -139,7 +139,7 @@ class npc_salsalabim : public CreatureScript
public:
npc_salsalabim() : CreatureScript("npc_salsalabim") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(QUEST_10004) == QUEST_STATUS_INCOMPLETE)
{
@@ -155,7 +155,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_salsalabimAI(creature);
}
@@ -166,13 +166,13 @@ public:
uint32 MagneticPull_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
MagneticPull_Timer = 15000;
me->RestoreFaction();
}
- void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* done_by, uint32 &damage) override
{
if (done_by->GetTypeId() == TYPEID_PLAYER && me->HealthBelowPctDamaged(20, damage))
{
@@ -182,7 +182,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -214,7 +214,7 @@ class npc_shattrathflaskvendors : public CreatureScript
public:
npc_shattrathflaskvendors() : CreatureScript("npc_shattrathflaskvendors") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_TRADE)
@@ -223,7 +223,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->GetEntry() == 23484)
{
@@ -268,7 +268,7 @@ class npc_zephyr : public CreatureScript
public:
npc_zephyr() : CreatureScript("npc_zephyr") { }
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -277,7 +277,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetReputationRank(989) >= REP_REVERED)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HZ, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
@@ -323,7 +323,7 @@ class npc_kservant : public CreatureScript
public:
npc_kservant() : CreatureScript("npc_kservant") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_kservantAI(creature);
}
@@ -333,7 +333,7 @@ public:
public:
npc_kservantAI(Creature* creature) : npc_escortAI(creature) { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -411,7 +411,7 @@ public:
}
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (HasEscortState(STATE_ESCORT_ESCORTING))
@@ -428,7 +428,7 @@ public:
}
}
- void Reset() OVERRIDE { }
+ void Reset() override { }
};
};
@@ -444,7 +444,7 @@ class npc_ishanah : public CreatureScript
public:
npc_ishanah() : CreatureScript("npc_ishanah") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -455,7 +455,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -485,7 +485,7 @@ class npc_khadgar : public CreatureScript
public:
npc_khadgar() : CreatureScript("npc_khadgar") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -522,7 +522,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
diff --git a/src/server/scripts/Outland/zone_terokkar_forest.cpp b/src/server/scripts/Outland/zone_terokkar_forest.cpp
index 3fb106e8cd8..da7ae03a8ee 100644
--- a/src/server/scripts/Outland/zone_terokkar_forest.cpp
+++ b/src/server/scripts/Outland/zone_terokkar_forest.cpp
@@ -61,7 +61,7 @@ class npc_unkor_the_ruthless : public CreatureScript
public:
npc_unkor_the_ruthless() : CreatureScript("npc_unkor_the_ruthless") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_unkor_the_ruthlessAI(creature);
}
@@ -74,7 +74,7 @@ public:
uint32 UnkorUnfriendly_Timer;
uint32 Pulverize_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
CanDoQuest = false;
UnkorUnfriendly_Timer = 0;
@@ -83,7 +83,7 @@ public:
me->setFaction(FACTION_HOSTILE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
void DoNice()
{
@@ -96,7 +96,7 @@ public:
UnkorUnfriendly_Timer = 60000;
}
- void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* done_by, uint32 &damage) override
{
Player* player = done_by->ToPlayer();
@@ -126,7 +126,7 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (CanDoQuest)
{
@@ -168,7 +168,7 @@ class npc_infested_root_walker : public CreatureScript
public:
npc_infested_root_walker() : CreatureScript("npc_infested_root_walker") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_infested_root_walkerAI(creature);
}
@@ -177,14 +177,14 @@ public:
{
npc_infested_root_walkerAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void Reset() override { }
+ void EnterCombat(Unit* /*who*/) override { }
- void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* done_by, uint32 &damage) override
{
if (done_by && done_by->GetTypeId() == TYPEID_PLAYER)
if (me->GetHealth() <= damage)
- if (rand()%100 < 75)
+ if (rand32() % 100 < 75)
//Summon Wood Mites
DoCast(me, 39130, true);
}
@@ -199,7 +199,7 @@ class npc_skywing : public CreatureScript
public:
npc_skywing() : CreatureScript("npc_skywing") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_skywingAI(creature);
}
@@ -209,7 +209,7 @@ public:
public:
npc_skywingAI(Creature* creature) : npc_escortAI(creature) { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -223,9 +223,9 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (HasEscortState(STATE_ESCORT_ESCORTING))
@@ -237,9 +237,9 @@ public:
Start(false, false, who->GetGUID());
}
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
npc_escortAI::UpdateAI(diff);
}
@@ -255,7 +255,7 @@ class npc_rotting_forest_rager : public CreatureScript
public:
npc_rotting_forest_rager() : CreatureScript("npc_rotting_forest_rager") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_rotting_forest_ragerAI(creature);
}
@@ -264,14 +264,14 @@ public:
{
npc_rotting_forest_ragerAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void Reset() override { }
+ void EnterCombat(Unit* /*who*/) override { }
- void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE
+ void DamageTaken(Unit* done_by, uint32 &damage) override
{
if (done_by->GetTypeId() == TYPEID_PLAYER)
if (me->GetHealth() <= damage)
- if (rand()%100 < 75)
+ if (rand32() % 100 < 75)
//Summon Lots of Wood Mights
DoCast(me, 39134, true);
}
@@ -298,7 +298,7 @@ class npc_netherweb_victim : public CreatureScript
public:
npc_netherweb_victim() : CreatureScript("npc_netherweb_victim") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_netherweb_victimAI(creature);
}
@@ -307,12 +307,12 @@ public:
{
npc_netherweb_victimAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void Reset() override { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
Player* player = killer->ToPlayer();
if (!player)
@@ -320,18 +320,18 @@ public:
if (player->GetQuestStatus(10873) == QUEST_STATUS_INCOMPLETE)
{
- if (rand()%100 < 25)
+ if (rand32() % 100 < 25)
{
me->SummonCreature(QUEST_TARGET, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000);
player->KilledMonsterCredit(QUEST_TARGET, 0);
}
else
- me->SummonCreature(netherwebVictims[rand()%6], 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000);
+ me->SummonCreature(netherwebVictims[rand32() % 6], 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000);
- if (rand()%100 < 75)
- me->SummonCreature(netherwebVictims[rand()%6], 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000);
+ if (rand32() % 100 < 75)
+ me->SummonCreature(netherwebVictims[rand32() % 6], 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000);
- me->SummonCreature(netherwebVictims[rand()%6], 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000);
+ me->SummonCreature(netherwebVictims[rand32() % 6], 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000);
}
}
};
@@ -361,7 +361,7 @@ class npc_floon : public CreatureScript
public:
npc_floon() : CreatureScript("npc_floon") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF)
@@ -379,7 +379,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(QUEST_CRACK_SKULLS) == QUEST_STATUS_INCOMPLETE)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_FLOON1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
@@ -388,7 +388,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_floonAI(creature);
}
@@ -405,7 +405,7 @@ public:
uint32 Frostbolt_Timer;
uint32 FrostNova_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
Silence_Timer = 2000;
Frostbolt_Timer = 4000;
@@ -414,9 +414,9 @@ public:
me->setFaction(m_uiNormFaction);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -469,7 +469,7 @@ public:
{
npc_isla_starmaneAI(Creature* creature) : npc_escortAI(creature) { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -508,12 +508,12 @@ public:
}
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->RestoreFaction();
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (Player* player = GetPlayerForEscort())
{
@@ -525,17 +525,17 @@ public:
}
};
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_EFTW_H || quest->GetQuestId() == QUEST_EFTW_A)
{
- CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
+ ENSURE_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
creature->setFaction(113);
}
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_isla_starmaneAI(creature);
}
@@ -554,7 +554,7 @@ class go_skull_pile : public GameObjectScript
public:
go_skull_pile() : GameObjectScript("go_skull_pile") { }
- bool OnGossipSelect(Player* player, GameObject* go, uint32 sender, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, GameObject* go, uint32 sender, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (sender)
@@ -564,7 +564,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if ((player->GetQuestStatus(11885) == QUEST_STATUS_INCOMPLETE) || player->GetQuestRewardStatus(11885))
{
@@ -612,7 +612,7 @@ class npc_slim : public CreatureScript
public:
npc_slim() : CreatureScript("npc_slim") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_TRADE)
@@ -621,7 +621,7 @@ public:
return true;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsVendor() && player->GetReputationRank(FACTION_CONSORTIUM) >= REP_FRIENDLY)
{
@@ -650,7 +650,7 @@ class npc_akuno : public CreatureScript
public:
npc_akuno() : CreatureScript("npc_akuno") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_ESCAPING_THE_TOMB)
{
@@ -665,7 +665,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_akunoAI(creature);
}
@@ -674,7 +674,7 @@ public:
{
npc_akunoAI(Creature* creature) : npc_escortAI(creature) { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -693,7 +693,7 @@ public:
}
}
- void JustSummoned(Creature* summon) OVERRIDE
+ void JustSummoned(Creature* summon) override
{
summon->AI()->AttackStart(me);
}
diff --git a/src/server/scripts/Outland/zone_zangarmarsh.cpp b/src/server/scripts/Outland/zone_zangarmarsh.cpp
index f8ef3d7c3bd..b9736c523c3 100644
--- a/src/server/scripts/Outland/zone_zangarmarsh.cpp
+++ b/src/server/scripts/Outland/zone_zangarmarsh.cpp
@@ -69,7 +69,7 @@ class npcs_ashyen_and_keleth : public CreatureScript
public:
npcs_ashyen_and_keleth() : CreatureScript("npcs_ashyen_and_keleth") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetReputationRank(942) > REP_NEUTRAL)
{
@@ -84,7 +84,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF+1)
@@ -183,16 +183,16 @@ public:
uint32 m_uiNormFaction;
uint32 LightningBolt_Timer;
- void Reset() OVERRIDE
+ void Reset() override
{
LightningBolt_Timer = 2000;
if (me->getFaction() != m_uiNormFaction)
me->setFaction(m_uiNormFaction);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -207,12 +207,12 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_cooshcooshAI(creature);
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(QUEST_CRACK_SKULLS) == QUEST_STATUS_INCOMPLETE)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_COOSH, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
@@ -221,7 +221,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF)
@@ -247,7 +247,7 @@ class npc_elder_kuruti : public CreatureScript
public:
npc_elder_kuruti() : CreatureScript("npc_elder_kuruti") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(9803) == QUEST_STATUS_INCOMPLETE)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_KUR1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
@@ -257,7 +257,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -300,7 +300,7 @@ class npc_mortog_steamhead : public CreatureScript
public:
npc_mortog_steamhead() : CreatureScript("npc_mortog_steamhead") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsVendor() && player->GetReputationRank(942) == REP_EXALTED)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
@@ -310,7 +310,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_TRADE)
@@ -344,9 +344,9 @@ public:
{
npc_kayra_longmaneAI(Creature* creature) : npc_escortAI(creature) { }
- void Reset() OVERRIDE { }
+ void Reset() override { }
- void WaypointReached(uint32 waypointId) OVERRIDE
+ void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
if (!player)
@@ -379,7 +379,7 @@ public:
}
};
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_ESCAPE_FROM)
{
@@ -391,7 +391,7 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_kayra_longmaneAI(creature);
}
@@ -414,7 +414,7 @@ class npc_timothy_daniels : public CreatureScript
public:
npc_timothy_daniels() : CreatureScript("npc_timothy_daniels") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -427,7 +427,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
diff --git a/src/server/scripts/Pet/pet_dk.cpp b/src/server/scripts/Pet/pet_dk.cpp
index 61c3de0e6b1..34da2a242f4 100644
--- a/src/server/scripts/Pet/pet_dk.cpp
+++ b/src/server/scripts/Pet/pet_dk.cpp
@@ -45,7 +45,7 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript
{
npc_pet_dk_ebon_gargoyleAI(Creature* creature) : CasterAI(creature) { }
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
// Not needed to be despawned now
_despawnTimer = 0;
@@ -68,7 +68,7 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
// Stop Feeding Gargoyle when it dies
if (Unit* owner = me->GetOwner())
@@ -76,7 +76,7 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript
}
// Fly away when dismissed
- void SpellHit(Unit* source, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* source, SpellInfo const* spell) override
{
if (spell->Id != SPELL_DK_DISMISS_GARGOYLE || !me->IsAlive())
return;
@@ -107,7 +107,7 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript
_despawnTimer = 4 * IN_MILLISECONDS;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (_despawnTimer > 0)
{
@@ -125,7 +125,7 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript
uint32 _despawnTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_pet_dk_ebon_gargoyleAI(creature);
}
diff --git a/src/server/scripts/Pet/pet_generic.cpp b/src/server/scripts/Pet/pet_generic.cpp
index 2a41b293967..cfb4820c040 100644
--- a/src/server/scripts/Pet/pet_generic.cpp
+++ b/src/server/scripts/Pet/pet_generic.cpp
@@ -41,7 +41,7 @@ class npc_pet_gen_mojo : public CreatureScript
{
npc_pet_gen_mojoAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_victimGUID = 0;
@@ -49,10 +49,10 @@ class npc_pet_gen_mojo : public CreatureScript
me->GetMotionMaster()->MoveFollow(owner, 0.0f, 0.0f);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void UpdateAI(uint32 /*diff*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void UpdateAI(uint32 /*diff*/) override { }
- void ReceiveEmote(Player* player, uint32 emote) OVERRIDE
+ void ReceiveEmote(Player* player, uint32 emote) override
{
me->HandleEmoteCommand(emote);
Unit* owner = me->GetOwner();
@@ -79,7 +79,7 @@ class npc_pet_gen_mojo : public CreatureScript
uint64 _victimGUID;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_pet_gen_mojoAI(creature);
}
diff --git a/src/server/scripts/Pet/pet_hunter.cpp b/src/server/scripts/Pet/pet_hunter.cpp
index 8a0b78b5478..8fd6cb54b0e 100644
--- a/src/server/scripts/Pet/pet_hunter.cpp
+++ b/src/server/scripts/Pet/pet_hunter.cpp
@@ -44,9 +44,9 @@ class npc_pet_hunter_snake_trap : public CreatureScript
{
npc_pet_hunter_snake_trapAI(Creature* creature) : ScriptedAI(creature) { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void Reset() OVERRIDE
+ void Reset() override
{
_spellTimer = 0;
@@ -56,8 +56,8 @@ class npc_pet_hunter_snake_trap : public CreatureScript
me->SetMaxHealth(uint32(107 * (me->getLevel() - 40) * 0.025f));
// Add delta to make them not all hit the same time
- uint32 delta = (rand() % 7) * 100;
- me->SetAttackTime(BASE_ATTACK, Info->baseattacktime + delta);
+ uint32 delta = (rand32() % 7) * 100;
+ me->SetAttackTime(BASE_ATTACK, Info->BaseAttackTime + delta);
//me->SetStatFloatValue(UNIT_FIELD_RANGED_ATTACK_POWER, float(Info->attackpower));
// Start attacking attacker of owner on first ai update after spawn - move in line of sight may choose better target
@@ -71,7 +71,7 @@ class npc_pet_hunter_snake_trap : public CreatureScript
}
// Redefined for random target selection:
- void MoveInLineOfSight(Unit* who) OVERRIDE
+ void MoveInLineOfSight(Unit* who) override
{
if (!me->GetVictim() && me->CanCreatureAttack(who))
{
@@ -81,22 +81,22 @@ class npc_pet_hunter_snake_trap : public CreatureScript
float attackRadius = me->GetAttackDistance(who);
if (me->IsWithinDistInMap(who, attackRadius) && me->IsWithinLOSInMap(who))
{
- if (!(rand() % 5))
+ if (!(rand32() % 5))
{
- me->setAttackTimer(BASE_ATTACK, (rand() % 10) * 100);
- _spellTimer = (rand() % 10) * 100;
+ me->setAttackTimer(BASE_ATTACK, (rand32() % 10) * 100);
+ _spellTimer = (rand32() % 10) * 100;
AttackStart(who);
}
}
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
- if (!UpdateVictim())
+ if (!UpdateVictim() || !me->GetVictim())
return;
- if (me->GetVictim()->HasBreakableByDamageCrowdControlAura(me))
+ if (me->EnsureVictim()->HasBreakableByDamageCrowdControlAura(me))
{
me->InterruptNonMeleeSpells(false);
return;
@@ -124,7 +124,7 @@ class npc_pet_hunter_snake_trap : public CreatureScript
uint32 _spellTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_pet_hunter_snake_trapAI(creature);
}
diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp
index 69e924c0d43..260784fd26a 100644
--- a/src/server/scripts/Pet/pet_mage.cpp
+++ b/src/server/scripts/Pet/pet_mage.cpp
@@ -40,7 +40,7 @@ class npc_pet_mage_mirror_image : public CreatureScript
{
npc_pet_mage_mirror_imageAI(Creature* creature) : CasterAI(creature) { }
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
CasterAI::InitializeAI();
Unit* owner = me->GetOwner();
@@ -55,7 +55,7 @@ class npc_pet_mage_mirror_image : public CreatureScript
}
// Do not reload Creature templates on evade mode enter - prevent visual lost
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
if (me->IsInEvadeMode() || !me->IsAlive())
return;
@@ -71,7 +71,7 @@ class npc_pet_mage_mirror_image : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_pet_mage_mirror_imageAI(creature);
}
diff --git a/src/server/scripts/Pet/pet_priest.cpp b/src/server/scripts/Pet/pet_priest.cpp
index fc106a2a786..4a6d147615e 100644
--- a/src/server/scripts/Pet/pet_priest.cpp
+++ b/src/server/scripts/Pet/pet_priest.cpp
@@ -44,7 +44,7 @@ class npc_pet_pri_lightwell : public CreatureScript
DoCast(me, SPELL_PRIEST_LIGHTWELL_CHARGES, false);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
if (!me->IsAlive())
return;
@@ -55,7 +55,7 @@ class npc_pet_pri_lightwell : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_pet_pri_lightwellAI(creature);
}
@@ -70,7 +70,7 @@ class npc_pet_pri_shadowfiend : public CreatureScript
{
npc_pet_pri_shadowfiendAI(Creature* creature) : PetAI(creature) { }
- void JustDied(Unit* /*killer*/) OVERRIDE
+ void JustDied(Unit* /*killer*/) override
{
if (me->IsSummon())
if (Unit* owner = me->ToTempSummon()->GetSummoner())
@@ -79,7 +79,7 @@ class npc_pet_pri_shadowfiend : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_pet_pri_shadowfiendAI(creature);
}
diff --git a/src/server/scripts/Pet/pet_shaman.cpp b/src/server/scripts/Pet/pet_shaman.cpp
index 03e6c55b109..b9b89d92784 100644
--- a/src/server/scripts/Pet/pet_shaman.cpp
+++ b/src/server/scripts/Pet/pet_shaman.cpp
@@ -51,14 +51,14 @@ class npc_pet_shaman_earth_elemental : public CreatureScript
npc_pet_shaman_earth_elementalAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_SHAMAN_ANGEREDEARTH, 0);
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -78,7 +78,7 @@ class npc_pet_shaman_earth_elemental : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_pet_shaman_earth_elementalAI(creature);
}
@@ -93,7 +93,7 @@ class npc_pet_shaman_fire_elemental : public CreatureScript
{
npc_pet_shaman_fire_elementalAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_SHAMAN_FIRENOVA, urand(5000, 20000));
@@ -102,7 +102,7 @@ class npc_pet_shaman_fire_elemental : public CreatureScript
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -140,7 +140,7 @@ class npc_pet_shaman_fire_elemental : public CreatureScript
EventMap _events;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_pet_shaman_fire_elementalAI(creature);
}
diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp
index c100630a452..681a659ae71 100644
--- a/src/server/scripts/Spells/spell_dk.cpp
+++ b/src/server/scripts/Spells/spell_dk.cpp
@@ -36,12 +36,15 @@ enum DeathKnightSpells
SPELL_DK_BLOOD_PRESENCE = 48266,
SPELL_DK_CORPSE_EXPLOSION_TRIGGERED = 43999,
SPELL_DK_CORPSE_EXPLOSION_VISUAL = 51270,
+ SPELL_DK_DEATH_AND_DECAY_DAMAGE = 52212,
SPELL_DK_DEATH_COIL_DAMAGE = 47632,
SPELL_DK_DEATH_COIL_HEAL = 47633,
SPELL_DK_DEATH_STRIKE_HEAL = 45470,
+ SPELL_DK_FROST_FEVER = 55095,
SPELL_DK_FROST_PRESENCE = 48263,
SPELL_DK_FROST_PRESENCE_TRIGGERED = 61261,
SPELL_DK_GHOUL_EXPLODE = 47496,
+ SPELL_DK_GLYPH_OF_DISEASE = 63334,
SPELL_DK_GLYPH_OF_ICEBOUND_FORTITUDE = 58625,
SPELL_DK_IMPROVED_BLOOD_PRESENCE_R1 = 50365,
SPELL_DK_IMPROVED_FROST_PRESENCE_R1 = 50384,
@@ -51,6 +54,7 @@ enum DeathKnightSpells
SPELL_DK_ITEM_SIGIL_VENGEFUL_HEART = 64962,
SPELL_DK_ITEM_T8_MELEE_4P_BONUS = 64736,
SPELL_DK_MASTER_OF_GHOULS = 52143,
+ SPELL_DK_BLOOD_PLAGUE = 55078,
SPELL_DK_RAISE_DEAD_USE_REAGENT = 48289,
SPELL_DK_RUNIC_POWER_ENERGIZE = 49088,
SPELL_DK_SCENT_OF_BLOOD = 50422,
@@ -83,7 +87,7 @@ class spell_dk_anti_magic_shell_raid : public SpellScriptLoader
uint32 absorbPct;
- bool Load() OVERRIDE
+ bool Load() override
{
absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(GetCaster());
return true;
@@ -100,14 +104,14 @@ class spell_dk_anti_magic_shell_raid : public SpellScriptLoader
absorbAmount = CalculatePct(dmgInfo.GetDamage(), absorbPct);
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_anti_magic_shell_raid_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_dk_anti_magic_shell_raid_AuraScript::Absorb, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dk_anti_magic_shell_raid_AuraScript();
}
@@ -124,14 +128,14 @@ class spell_dk_anti_magic_shell_self : public SpellScriptLoader
PrepareAuraScript(spell_dk_anti_magic_shell_self_AuraScript);
uint32 absorbPct, hpPct;
- bool Load() OVERRIDE
+ bool Load() override
{
absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(GetCaster());
hpPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue(GetCaster());
return true;
}
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DK_RUNIC_POWER_ENERGIZE))
return false;
@@ -156,7 +160,7 @@ class spell_dk_anti_magic_shell_self : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_DK_RUNIC_POWER_ENERGIZE, SPELLVALUE_BASE_POINT0, bp, GetTarget(), true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_anti_magic_shell_self_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_dk_anti_magic_shell_self_AuraScript::Absorb, EFFECT_0);
@@ -164,7 +168,7 @@ class spell_dk_anti_magic_shell_self : public SpellScriptLoader
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dk_anti_magic_shell_self_AuraScript();
}
@@ -182,13 +186,13 @@ class spell_dk_anti_magic_zone : public SpellScriptLoader
uint32 absorbPct;
- bool Load() OVERRIDE
+ bool Load() override
{
absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(GetCaster());
return true;
}
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DK_ANTI_MAGIC_SHELL_TALENT))
return false;
@@ -208,14 +212,14 @@ class spell_dk_anti_magic_zone : public SpellScriptLoader
absorbAmount = CalculatePct(dmgInfo.GetDamage(), absorbPct);
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_anti_magic_zone_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_dk_anti_magic_zone_AuraScript::Absorb, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dk_anti_magic_zone_AuraScript();
}
@@ -231,14 +235,14 @@ class spell_dk_blood_boil : public SpellScriptLoader
{
PrepareSpellScript(spell_dk_blood_boil_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_BOIL_TRIGGERED))
return false;
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
_executed = false;
return GetCaster()->GetTypeId() == TYPEID_PLAYER && GetCaster()->getClass() == CLASS_DEATH_KNIGHT;
@@ -253,7 +257,7 @@ class spell_dk_blood_boil : public SpellScriptLoader
GetCaster()->CastSpell(GetCaster(), SPELL_DK_BLOOD_BOIL_TRIGGERED, true);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterHit += SpellHitFn(spell_dk_blood_boil_SpellScript::HandleAfterHit);
}
@@ -261,7 +265,7 @@ class spell_dk_blood_boil : public SpellScriptLoader
bool _executed;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dk_blood_boil_SpellScript();
}
@@ -277,14 +281,14 @@ class spell_dk_blood_gorged : public SpellScriptLoader
{
PrepareAuraScript(spell_dk_blood_gorged_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_GORGED_HEAL))
return false;
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
_procTarget = NULL;
return true;
@@ -293,7 +297,7 @@ class spell_dk_blood_gorged : public SpellScriptLoader
bool CheckProc(ProcEventInfo& /*eventInfo*/)
{
_procTarget = GetTarget()->GetOwner();
- return _procTarget;
+ return _procTarget != nullptr;
}
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
@@ -303,7 +307,7 @@ class spell_dk_blood_gorged : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_DK_BLOOD_GORGED_HEAL, SPELLVALUE_BASE_POINT0, bp, _procTarget, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_dk_blood_gorged_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_dk_blood_gorged_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
@@ -313,22 +317,50 @@ class spell_dk_blood_gorged : public SpellScriptLoader
Unit* _procTarget;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dk_blood_gorged_AuraScript();
}
};
+// -49027 - Bloodworms
+class spell_dk_bloodworms : public SpellScriptLoader
+{
+ public:
+ spell_dk_bloodworms() : SpellScriptLoader("spell_dk_bloodworms") { }
+
+ class spell_dk_bloodworms_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_dk_bloodworms_AuraScript);
+
+ void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
+ {
+ aurEff->GetBase()->RecalculateAmountOfEffects();
+ }
+
+ void Register() override
+ {
+ OnEffectProc += AuraEffectProcFn(spell_dk_bloodworms_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_dk_bloodworms_AuraScript();
+ }
+};
+
class CorpseExplosionCheck
{
public:
- explicit CorpseExplosionCheck(uint64 casterGUID) : _casterGUID(casterGUID) { }
+ explicit CorpseExplosionCheck(uint64 casterGUID, bool allowGhoul) : _casterGUID(casterGUID),
+ _allowGhoul(allowGhoul) { }
bool operator()(WorldObject* obj) const
{
if (Unit* target = obj->ToUnit())
{
- if ((target->isDead() || (target->GetEntry() == NPC_DK_GHOUL && target->GetOwnerGUID() == _casterGUID))
+ if ((target->isDead() || (_allowGhoul && target->GetEntry() == NPC_DK_GHOUL && target->GetOwnerGUID() == _casterGUID))
&& !(target->GetCreatureTypeMask() & CREATURE_TYPEMASK_MECHANICAL_OR_ELEMENTAL)
&& target->GetDisplayId() == target->GetNativeDisplayId())
return false;
@@ -339,6 +371,7 @@ public:
private:
uint64 _casterGUID;
+ bool _allowGhoul;
};
// 49158 - Corpse Explosion (51325, 51326, 51327, 51328)
@@ -351,7 +384,7 @@ class spell_dk_corpse_explosion : public SpellScriptLoader
{
PrepareSpellScript(spell_dk_corpse_explosion_SpellScript);
- bool Validate(SpellInfo const* spellInfo) OVERRIDE
+ bool Validate(SpellInfo const* spellInfo) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DK_CORPSE_EXPLOSION_TRIGGERED)
|| !sSpellMgr->GetSpellInfo(SPELL_DK_GHOUL_EXPLODE)
@@ -361,7 +394,7 @@ class spell_dk_corpse_explosion : public SpellScriptLoader
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
_target = NULL;
return true;
@@ -369,7 +402,7 @@ class spell_dk_corpse_explosion : public SpellScriptLoader
void CheckTarget(WorldObject*& target)
{
- if (CorpseExplosionCheck(GetCaster()->GetGUID())(target))
+ if (CorpseExplosionCheck(GetCaster()->GetGUID(), true)(target))
target = NULL;
_target = target;
@@ -380,7 +413,7 @@ class spell_dk_corpse_explosion : public SpellScriptLoader
WorldObject* target = _target;
if (!target)
{
- targets.remove_if(CorpseExplosionCheck(GetCaster()->GetGUID()));
+ targets.remove_if(CorpseExplosionCheck(GetCaster()->GetGUID(), false));
if (targets.empty())
{
FinishCast(SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW);
@@ -422,7 +455,7 @@ class spell_dk_corpse_explosion : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_dk_corpse_explosion_SpellScript::CheckTarget, EFFECT_0, TARGET_UNIT_TARGET_ANY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dk_corpse_explosion_SpellScript::CheckTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENTRY);
@@ -434,12 +467,39 @@ class spell_dk_corpse_explosion : public SpellScriptLoader
WorldObject* _target;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dk_corpse_explosion_SpellScript();
}
};
+class spell_dk_death_and_decay : public SpellScriptLoader
+{
+ public:
+ spell_dk_death_and_decay() : SpellScriptLoader("spell_dk_death_and_decay") { }
+
+ class spell_dk_death_and_decay_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_dk_death_and_decay_AuraScript);
+
+ void HandleDummyTick(AuraEffect const* aurEff)
+ {
+ if (Unit* caster = GetCaster())
+ caster->CastCustomSpell(SPELL_DK_DEATH_AND_DECAY_DAMAGE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, NULL, aurEff);
+ }
+
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_dk_death_and_decay_AuraScript::HandleDummyTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_dk_death_and_decay_AuraScript();
+ }
+};
+
// -47541, 52375, 59134, -62900 - Death Coil
class spell_dk_death_coil : public SpellScriptLoader
{
@@ -450,7 +510,7 @@ class spell_dk_death_coil : public SpellScriptLoader
{
PrepareSpellScript(spell_dk_death_coil_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DK_DEATH_COIL_DAMAGE) || !sSpellMgr->GetSpellInfo(SPELL_DK_DEATH_COIL_HEAL))
return false;
@@ -494,14 +554,14 @@ class spell_dk_death_coil : public SpellScriptLoader
return SPELL_CAST_OK;
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_dk_death_coil_SpellScript::CheckCast);
OnEffectHitTarget += SpellEffectFn(spell_dk_death_coil_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dk_death_coil_SpellScript();
}
@@ -535,14 +595,14 @@ class spell_dk_death_gate : public SpellScriptLoader
target->CastSpell(target, GetEffectValue(), false);
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_dk_death_gate_SpellScript::CheckClass);
OnEffectHitTarget += SpellEffectFn(spell_dk_death_gate_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dk_death_gate_SpellScript();
}
@@ -569,14 +629,14 @@ class spell_dk_death_grip : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_dk_death_grip_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dk_death_grip_SpellScript();
}
@@ -625,14 +685,14 @@ class spell_dk_death_pact : public SpellScriptLoader
targetList.push_back(target);
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_dk_death_pact_SpellScript::CheckCast);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dk_death_pact_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ALLY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dk_death_pact_SpellScript();
}
@@ -648,7 +708,7 @@ class spell_dk_death_strike : public SpellScriptLoader
{
PrepareSpellScript(spell_dk_death_strike_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DK_DEATH_STRIKE_HEAL))
return false;
@@ -669,14 +729,14 @@ class spell_dk_death_strike : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_dk_death_strike_SpellScript::HandleDummy, EFFECT_2, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dk_death_strike_SpellScript();
}
@@ -692,7 +752,7 @@ class spell_dk_ghoul_explode : public SpellScriptLoader
{
PrepareSpellScript(spell_dk_ghoul_explode_SpellScript);
- bool Validate(SpellInfo const* spellInfo) OVERRIDE
+ bool Validate(SpellInfo const* spellInfo) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DK_CORPSE_EXPLOSION_TRIGGERED)
|| spellInfo->Effects[EFFECT_2].CalcValue() <= 0)
@@ -717,14 +777,14 @@ class spell_dk_ghoul_explode : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectLaunchTarget += SpellEffectFn(spell_dk_ghoul_explode_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
OnEffectHitTarget += SpellEffectFn(spell_dk_ghoul_explode_SpellScript::Suicide, EFFECT_1, SPELL_EFFECT_SCHOOL_DAMAGE);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dk_ghoul_explode_SpellScript();
}
@@ -740,7 +800,7 @@ class spell_dk_icebound_fortitude : public SpellScriptLoader
{
PrepareAuraScript(spell_dk_icebound_fortitude_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
Unit* caster = GetCaster();
return caster && caster->GetTypeId() == TYPEID_PLAYER;
@@ -767,13 +827,13 @@ class spell_dk_icebound_fortitude : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_icebound_fortitude_AuraScript::CalculateAmount, EFFECT_2, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dk_icebound_fortitude_AuraScript();
}
@@ -789,7 +849,7 @@ class spell_dk_improved_blood_presence : public SpellScriptLoader
{
PrepareAuraScript(spell_dk_improved_blood_presence_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_PRESENCE)
|| !sSpellMgr->GetSpellInfo(SPELL_DK_FROST_PRESENCE)
@@ -813,14 +873,14 @@ class spell_dk_improved_blood_presence : public SpellScriptLoader
target->RemoveAura(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_dk_improved_blood_presence_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_dk_improved_blood_presence_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dk_improved_blood_presence_AuraScript();
}
@@ -836,7 +896,7 @@ class spell_dk_improved_frost_presence : public SpellScriptLoader
{
PrepareAuraScript(spell_dk_improved_frost_presence_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_PRESENCE)
|| !sSpellMgr->GetSpellInfo(SPELL_DK_FROST_PRESENCE)
@@ -860,14 +920,14 @@ class spell_dk_improved_frost_presence : public SpellScriptLoader
target->RemoveAura(SPELL_DK_FROST_PRESENCE_TRIGGERED);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_dk_improved_frost_presence_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_dk_improved_frost_presence_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dk_improved_frost_presence_AuraScript();
}
@@ -883,7 +943,7 @@ class spell_dk_improved_unholy_presence : public SpellScriptLoader
{
PrepareAuraScript(spell_dk_improved_unholy_presence_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_PRESENCE)
|| !sSpellMgr->GetSpellInfo(SPELL_DK_FROST_PRESENCE)
@@ -918,19 +978,104 @@ class spell_dk_improved_unholy_presence : public SpellScriptLoader
target->RemoveAura(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_dk_improved_unholy_presence_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_dk_improved_unholy_presence_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dk_improved_unholy_presence_AuraScript();
}
};
+// ID - 50842 Pestilence
+class spell_dk_pestilence : public SpellScriptLoader
+{
+ public:
+ spell_dk_pestilence() : SpellScriptLoader("spell_dk_pestilence") { }
+
+ class spell_dk_pestilence_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_dk_pestilence_SpellScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_DK_GLYPH_OF_DISEASE)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_PLAGUE)
+ || !sSpellMgr->GetSpellInfo(SPELL_DK_FROST_FEVER))
+ return false;
+ return true;
+ }
+
+ void OnHit(SpellEffIndex /*effIndex*/)
+ {
+ Unit* caster = GetCaster();
+ Unit* hitUnit = GetHitUnit();
+ Unit* victim = GetExplTargetUnit();
+
+ if (!victim)
+ return;
+
+ if (victim != hitUnit || caster->HasAura(SPELL_DK_GLYPH_OF_DISEASE))
+ {
+ if (Aura* aurOld = victim->GetAura(SPELL_DK_BLOOD_PLAGUE, caster->GetGUID())) // Check Blood Plague application on victim.
+ {
+ if (AuraEffect* aurEffOld = aurOld->GetEffect(EFFECT_0))
+ {
+ float donePct = aurEffOld->GetDonePct();
+ float critChance = aurEffOld->GetCritChance();
+
+ caster->CastSpell(hitUnit, SPELL_DK_BLOOD_PLAGUE, true); // Spread the disease to hitUnit.
+
+ if (Aura* aurNew = hitUnit->GetAura(SPELL_DK_BLOOD_PLAGUE, caster->GetGUID())) // Check Blood Plague application on hitUnit.
+ {
+ if (AuraEffect* aurEffNew = aurNew->GetEffect(EFFECT_0))
+ {
+ aurEffNew->SetCritChance(critChance); // Blood Plague can crit if caster has T9.
+ aurEffNew->SetDonePct(donePct);
+ aurEffNew->SetDamage(caster->SpellDamageBonusDone(hitUnit, aurEffNew->GetSpellInfo(), std::max(aurEffNew->GetAmount(), 0), DOT) * donePct);
+ }
+ }
+ }
+ }
+
+ if (Aura* aurOld = victim->GetAura(SPELL_DK_FROST_FEVER, caster->GetGUID())) // Check Frost Fever application on victim.
+ {
+ if (AuraEffect* aurEffOld = aurOld->GetEffect(EFFECT_0))
+ {
+ float donePct = aurEffOld->GetDonePct();
+
+ caster->CastSpell(hitUnit, SPELL_DK_FROST_FEVER, true); // Spread the disease to hitUnit.
+
+ if (Aura* aurNew = hitUnit->GetAura(SPELL_DK_FROST_FEVER, caster->GetGUID())) // Check Frost Fever application on hitUnit.
+ {
+ if (AuraEffect* aurEffNew = aurNew->GetEffect(EFFECT_0))
+ {
+ aurEffNew->SetDonePct(donePct);
+ aurEffNew->SetDamage(caster->SpellDamageBonusDone(hitUnit, aurEffNew->GetSpellInfo(), std::max(aurEffNew->GetAmount(), 0), DOT) * donePct);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_dk_pestilence_SpellScript::OnHit, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_dk_pestilence_SpellScript();
+ }
+};
+
+
// 48266 - Blood Presence
// 48263 - Frost Presence
// 48265 - Unholy Presence
@@ -943,7 +1088,7 @@ class spell_dk_presence : public SpellScriptLoader
{
PrepareAuraScript(spell_dk_presence_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_PRESENCE)
|| !sSpellMgr->GetSpellInfo(SPELL_DK_FROST_PRESENCE)
@@ -1011,7 +1156,7 @@ class spell_dk_presence : public SpellScriptLoader
target->RemoveAura(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_dk_presence_AuraScript::HandleImprovedBloodPresence, EFFECT_0, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
AfterEffectApply += AuraEffectApplyFn(spell_dk_presence_AuraScript::HandleImprovedFrostPresence, EFFECT_0, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
@@ -1020,7 +1165,7 @@ class spell_dk_presence : public SpellScriptLoader
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dk_presence_AuraScript();
}
@@ -1059,7 +1204,7 @@ class spell_dk_raise_dead : public SpellScriptLoader
{
PrepareSpellScript(spell_dk_raise_dead_SpellScript);
- bool Validate(SpellInfo const* spellInfo) OVERRIDE
+ bool Validate(SpellInfo const* spellInfo) override
{
if (!sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_1].CalcValue())
|| !sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_2].CalcValue())
@@ -1069,7 +1214,7 @@ class spell_dk_raise_dead : public SpellScriptLoader
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
_result = SPELL_CAST_OK;
_corpse = false;
@@ -1161,7 +1306,7 @@ class spell_dk_raise_dead : public SpellScriptLoader
GetCaster()->CastSpell(targets, spellInfo, NULL, TRIGGERED_FULL_MASK);
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_dk_raise_dead_SpellScript::CheckCast);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dk_raise_dead_SpellScript::CheckTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENTRY);
@@ -1176,7 +1321,7 @@ class spell_dk_raise_dead : public SpellScriptLoader
bool _corpse;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dk_raise_dead_SpellScript();
}
@@ -1197,13 +1342,13 @@ class spell_dk_rune_tap_party : public SpellScriptLoader
targets.remove(GetCaster());
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dk_rune_tap_party_SpellScript::CheckTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_PARTY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dk_rune_tap_party_SpellScript();
}
@@ -1219,7 +1364,7 @@ class spell_dk_scent_of_blood : public SpellScriptLoader
{
PrepareAuraScript(spell_dk_scent_of_blood_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DK_SCENT_OF_BLOOD))
return false;
@@ -1233,13 +1378,13 @@ class spell_dk_scent_of_blood : public SpellScriptLoader
GetTarget()->RemoveAuraFromStack(GetSpellInfo()->Id);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_dk_scent_of_blood_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dk_scent_of_blood_AuraScript();
}
@@ -1256,13 +1401,13 @@ class spell_dk_scourge_strike : public SpellScriptLoader
PrepareSpellScript(spell_dk_scourge_strike_SpellScript);
float multiplier;
- bool Load() OVERRIDE
+ bool Load() override
{
multiplier = 1.0f;
return true;
}
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DK_SCOURGE_STRIKE_TRIGGERED))
return false;
@@ -1295,14 +1440,14 @@ class spell_dk_scourge_strike : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_dk_scourge_strike_SpellScript::HandleDummy, EFFECT_2, SPELL_EFFECT_DUMMY);
AfterHit += SpellHitFn(spell_dk_scourge_strike_SpellScript::HandleAfterHit);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dk_scourge_strike_SpellScript();
}
@@ -1320,7 +1465,7 @@ class spell_dk_spell_deflection : public SpellScriptLoader
uint32 absorbPct;
- bool Load() OVERRIDE
+ bool Load() override
{
absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(GetCaster());
return true;
@@ -1339,14 +1484,14 @@ class spell_dk_spell_deflection : public SpellScriptLoader
absorbAmount = CalculatePct(dmgInfo.GetDamage(), absorbPct);
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_spell_deflection_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_dk_spell_deflection_AuraScript::Absorb, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dk_spell_deflection_AuraScript();
}
@@ -1367,13 +1512,13 @@ class spell_dk_vampiric_blood : public SpellScriptLoader
amount = GetUnitOwner()->CountPctFromMaxHealth(amount);
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_vampiric_blood_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_INCREASE_HEALTH);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dk_vampiric_blood_AuraScript();
}
@@ -1389,7 +1534,7 @@ class spell_dk_will_of_the_necropolis : public SpellScriptLoader
{
PrepareAuraScript(spell_dk_will_of_the_necropolis_AuraScript);
- bool Validate(SpellInfo const* spellInfo) OVERRIDE
+ bool Validate(SpellInfo const* spellInfo) override
{
SpellInfo const* firstRankSpellInfo = sSpellMgr->GetSpellInfo(SPELL_DK_WILL_OF_THE_NECROPOLIS_AURA_R1);
if (!firstRankSpellInfo)
@@ -1408,7 +1553,7 @@ class spell_dk_will_of_the_necropolis : public SpellScriptLoader
uint32 absorbPct;
- bool Load() OVERRIDE
+ bool Load() override
{
absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(GetCaster());
return true;
@@ -1434,14 +1579,14 @@ class spell_dk_will_of_the_necropolis : public SpellScriptLoader
absorbAmount = CalculatePct(dmgInfo.GetDamage(), absorbPct);
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_will_of_the_necropolis_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_dk_will_of_the_necropolis_AuraScript::Absorb, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dk_will_of_the_necropolis_AuraScript();
}
@@ -1454,7 +1599,9 @@ void AddSC_deathknight_spell_scripts()
new spell_dk_anti_magic_zone();
new spell_dk_blood_boil();
new spell_dk_blood_gorged();
+ new spell_dk_bloodworms();
new spell_dk_corpse_explosion();
+ new spell_dk_death_and_decay();
new spell_dk_death_coil();
new spell_dk_death_gate();
new spell_dk_death_grip();
@@ -1465,6 +1612,7 @@ void AddSC_deathknight_spell_scripts()
new spell_dk_improved_blood_presence();
new spell_dk_improved_frost_presence();
new spell_dk_improved_unholy_presence();
+ new spell_dk_pestilence();
new spell_dk_presence();
new spell_dk_raise_dead();
new spell_dk_rune_tap_party();
diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp
index 5e56d4b8d92..5f432bb8b61 100644
--- a/src/server/scripts/Spells/spell_druid.cpp
+++ b/src/server/scripts/Spells/spell_druid.cpp
@@ -63,13 +63,13 @@ class spell_dru_dash : public SpellScriptLoader
amount = 0;
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_dash_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_INCREASE_SPEED);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dru_dash_AuraScript();
}
@@ -85,7 +85,7 @@ class spell_dru_enrage : public SpellScriptLoader
{
PrepareSpellScript(spell_dru_enrage_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_KING_OF_THE_JUNGLE)
|| !sSpellMgr->GetSpellInfo(SPELL_DRUID_ENRAGE_MOD_DAMAGE))
@@ -99,13 +99,13 @@ class spell_dru_enrage : public SpellScriptLoader
GetHitUnit()->CastCustomSpell(SPELL_DRUID_ENRAGE_MOD_DAMAGE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterHit += SpellHitFn(spell_dru_enrage_SpellScript::OnHit);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dru_enrage_SpellScript();
}
@@ -121,7 +121,7 @@ class spell_dru_glyph_of_starfire : public SpellScriptLoader
{
PrepareSpellScript(spell_dru_glyph_of_starfire_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_INCREASED_MOONFIRE_DURATION) || !sSpellMgr->GetSpellInfo(SPELL_DRUID_NATURES_SPLENDOR))
return false;
@@ -151,13 +151,13 @@ class spell_dru_glyph_of_starfire : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_dru_glyph_of_starfire_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dru_glyph_of_starfire_SpellScript();
}
@@ -187,13 +187,13 @@ class spell_dru_idol_lifebloom : public SpellScriptLoader
spellMod->value = aurEff->GetAmount() / 7;
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_dru_idol_lifebloom_AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dru_idol_lifebloom_AuraScript();
}
@@ -214,13 +214,13 @@ class spell_dru_innervate : public SpellScriptLoader
amount = CalculatePct(int32(GetUnitOwner()->GetCreatePowers(POWER_MANA) / aurEff->GetTotalTicks()), amount);
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_innervate_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_ENERGIZE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dru_innervate_AuraScript();
}
@@ -243,13 +243,13 @@ class spell_dru_insect_swarm : public SpellScriptLoader
amount += relicAurEff->GetAmount() / aurEff->GetTotalTicks();
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_insect_swarm_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dru_insect_swarm_AuraScript();
}
@@ -265,7 +265,7 @@ class spell_dru_lifebloom : public SpellScriptLoader
{
PrepareAuraScript(spell_dru_lifebloom_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIFEBLOOM_FINAL_HEAL))
return false;
@@ -324,14 +324,14 @@ class spell_dru_lifebloom : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_dru_lifebloom_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
AfterDispel += AuraDispelFn(spell_dru_lifebloom_AuraScript::HandleDispel);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dru_lifebloom_AuraScript();
}
@@ -347,7 +347,7 @@ class spell_dru_living_seed : public SpellScriptLoader
{
PrepareAuraScript(spell_dru_living_seed_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIVING_SEED_PROC))
return false;
@@ -361,13 +361,13 @@ class spell_dru_living_seed : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_DRUID_LIVING_SEED_PROC, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_dru_living_seed_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dru_living_seed_AuraScript();
}
@@ -383,7 +383,7 @@ class spell_dru_living_seed_proc : public SpellScriptLoader
{
PrepareAuraScript(spell_dru_living_seed_proc_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIVING_SEED_HEAL))
return false;
@@ -396,13 +396,13 @@ class spell_dru_living_seed_proc : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_DRUID_LIVING_SEED_HEAL, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_dru_living_seed_proc_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dru_living_seed_proc_AuraScript();
}
@@ -420,7 +420,7 @@ class spell_dru_moonkin_form_passive : public SpellScriptLoader
uint32 absorbPct;
- bool Load() OVERRIDE
+ bool Load() override
{
absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(GetCaster());
return true;
@@ -439,14 +439,14 @@ class spell_dru_moonkin_form_passive : public SpellScriptLoader
absorbAmount = CalculatePct(dmgInfo.GetDamage(), absorbPct);
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_moonkin_form_passive_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_dru_moonkin_form_passive_AuraScript::Absorb, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dru_moonkin_form_passive_AuraScript();
}
@@ -467,13 +467,13 @@ class spell_dru_owlkin_frenzy : public SpellScriptLoader
amount = CalculatePct(GetUnitOwner()->GetCreatePowers(POWER_MANA), amount);
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_owlkin_frenzy_AuraScript::CalculateAmount, EFFECT_2, SPELL_AURA_PERIODIC_ENERGIZE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dru_owlkin_frenzy_AuraScript();
}
@@ -495,14 +495,14 @@ class spell_dru_predatory_strikes : public SpellScriptLoader
target->UpdateAttackPowerAndDamage();
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_dru_predatory_strikes_AuraScript::UpdateAmount, EFFECT_ALL, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
AfterEffectRemove += AuraEffectRemoveFn(spell_dru_predatory_strikes_AuraScript::UpdateAmount, EFFECT_ALL, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dru_predatory_strikes_AuraScript();
}
@@ -520,7 +520,7 @@ class spell_dru_primal_tenacity : public SpellScriptLoader
uint32 absorbPct;
- bool Load() OVERRIDE
+ bool Load() override
{
absorbPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue(GetCaster());
return true;
@@ -539,14 +539,14 @@ class spell_dru_primal_tenacity : public SpellScriptLoader
absorbAmount = CalculatePct(dmgInfo.GetDamage(), absorbPct);
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_primal_tenacity_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_dru_primal_tenacity_AuraScript::Absorb, EFFECT_1);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dru_primal_tenacity_AuraScript();
}
@@ -562,7 +562,7 @@ class spell_dru_rip : public SpellScriptLoader
{
PrepareAuraScript(spell_dru_rip_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
Unit* caster = GetCaster();
return caster && caster->GetTypeId() == TYPEID_PLAYER;
@@ -578,23 +578,23 @@ class spell_dru_rip : public SpellScriptLoader
uint8 cp = caster->ToPlayer()->GetComboPoints();
// Idol of Feral Shadows. Can't be handled as SpellMod due its dependency from CPs
- if (AuraEffect const* idol = caster->GetAuraEffect(SPELL_DRUID_IDOL_OF_FERAL_SHADOWS, EFFECT_0))
- amount += cp * idol->GetAmount();
+ if (AuraEffect const* auraEffIdolOfFeralShadows = caster->GetAuraEffect(SPELL_DRUID_IDOL_OF_FERAL_SHADOWS, EFFECT_0))
+ amount += cp * auraEffIdolOfFeralShadows->GetAmount();
// Idol of Worship. Can't be handled as SpellMod due its dependency from CPs
- else if (AuraEffect const* idol = caster->GetAuraEffect(SPELL_DRUID_IDOL_OF_WORSHIP, EFFECT_0))
- amount += cp * idol->GetAmount();
+ else if (AuraEffect const* auraEffIdolOfWorship = caster->GetAuraEffect(SPELL_DRUID_IDOL_OF_WORSHIP, EFFECT_0))
+ amount += cp * auraEffIdolOfWorship->GetAmount();
amount += int32(CalculatePct(caster->GetTotalAttackPowerValue(BASE_ATTACK), cp));
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_rip_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dru_rip_AuraScript();
}
@@ -612,7 +612,7 @@ class spell_dru_savage_defense : public SpellScriptLoader
uint32 absorbPct;
- bool Load() OVERRIDE
+ bool Load() override
{
absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(GetCaster());
return true;
@@ -630,14 +630,14 @@ class spell_dru_savage_defense : public SpellScriptLoader
aurEff->SetAmount(0);
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_savage_defense_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_dru_savage_defense_AuraScript::Absorb, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dru_savage_defense_AuraScript();
}
@@ -662,7 +662,7 @@ class spell_dru_savage_roar : public SpellScriptLoader
return SPELL_CAST_OK;
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_dru_savage_roar_SpellScript::CheckCast);
}
@@ -672,7 +672,7 @@ class spell_dru_savage_roar : public SpellScriptLoader
{
PrepareAuraScript(spell_dru_savage_roar_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_SAVAGE_ROAR))
return false;
@@ -690,19 +690,19 @@ class spell_dru_savage_roar : public SpellScriptLoader
GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_SAVAGE_ROAR);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_dru_savage_roar_AuraScript::AfterApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_dru_savage_roar_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dru_savage_roar_SpellScript();
}
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dru_savage_roar_AuraScript();
}
@@ -723,13 +723,13 @@ class spell_dru_starfall_aoe : public SpellScriptLoader
targets.remove(GetExplTargetUnit());
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_starfall_aoe_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dru_starfall_aoe_SpellScript();
}
@@ -768,14 +768,14 @@ class spell_dru_starfall_dummy : public SpellScriptLoader
caster->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_starfall_dummy_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnEffectHitTarget += SpellEffectFn(spell_dru_starfall_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dru_starfall_dummy_SpellScript();
}
@@ -800,7 +800,7 @@ class spell_dru_survival_instincts : public SpellScriptLoader
return SPELL_CAST_OK;
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_dru_survival_instincts_SpellScript::CheckCast);
}
@@ -810,7 +810,7 @@ class spell_dru_survival_instincts : public SpellScriptLoader
{
PrepareAuraScript(spell_dru_survival_instincts_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_SURVIVAL_INSTINCTS))
return false;
@@ -829,19 +829,19 @@ class spell_dru_survival_instincts : public SpellScriptLoader
GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_SURVIVAL_INSTINCTS);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_dru_survival_instincts_AuraScript::AfterApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
AfterEffectRemove += AuraEffectRemoveFn(spell_dru_survival_instincts_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dru_survival_instincts_SpellScript();
}
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dru_survival_instincts_AuraScript();
}
@@ -857,7 +857,7 @@ class spell_dru_swift_flight_passive : public SpellScriptLoader
{
PrepareAuraScript(spell_dru_swift_flight_passive_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -869,13 +869,13 @@ class spell_dru_swift_flight_passive : public SpellScriptLoader
amount = 310;
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_swift_flight_passive_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_INCREASE_VEHICLE_FLIGHT_SPEED);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dru_swift_flight_passive_AuraScript();
}
@@ -897,13 +897,13 @@ class spell_dru_tiger_s_fury : public SpellScriptLoader
GetHitUnit()->CastCustomSpell(SPELL_DRUID_TIGER_S_FURY_ENERGIZE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterHit += SpellHitFn(spell_dru_tiger_s_fury_SpellScript::OnHit);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dru_tiger_s_fury_SpellScript();
}
@@ -926,13 +926,13 @@ class spell_dru_typhoon : public SpellScriptLoader
PreventHitDefaultEffect(effIndex);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_dru_typhoon_SpellScript::HandleKnockBack, EFFECT_0, SPELL_EFFECT_KNOCK_BACK);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dru_typhoon_SpellScript();
}
@@ -948,7 +948,7 @@ class spell_dru_t10_restoration_4p_bonus : public SpellScriptLoader
{
PrepareSpellScript(spell_dru_t10_restoration_4p_bonus_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -981,13 +981,13 @@ class spell_dru_t10_restoration_4p_bonus : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_t10_restoration_4p_bonus_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dru_t10_restoration_4p_bonus_SpellScript();
}
@@ -1020,7 +1020,7 @@ class spell_dru_wild_growth : public SpellScriptLoader
{
PrepareSpellScript(spell_dru_wild_growth_SpellScript);
- bool Validate(SpellInfo const* spellInfo) OVERRIDE
+ bool Validate(SpellInfo const* spellInfo) override
{
if (spellInfo->Effects[EFFECT_2].IsEffect() || spellInfo->Effects[EFFECT_2].CalcValue() <= 0)
return false;
@@ -1047,7 +1047,7 @@ class spell_dru_wild_growth : public SpellScriptLoader
targets = _targets;
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_wild_growth_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_wild_growth_SpellScript::SetTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ALLY);
@@ -1057,7 +1057,7 @@ class spell_dru_wild_growth : public SpellScriptLoader
std::list<WorldObject*> _targets;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dru_wild_growth_SpellScript();
}
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 65aa22c776d..86ef8bdc8cc 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -49,7 +49,7 @@ class spell_gen_absorb0_hitlimit1 : public SpellScriptLoader
uint32 limit;
- bool Load() OVERRIDE
+ bool Load() override
{
// Max absorb stored in 1 dummy effect
limit = GetSpellInfo()->Effects[EFFECT_1].CalcValue();
@@ -61,13 +61,13 @@ class spell_gen_absorb0_hitlimit1 : public SpellScriptLoader
absorbAmount = std::min(limit, absorbAmount);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectAbsorb += AuraEffectAbsorbFn(spell_gen_absorb0_hitlimit1_AuraScript::Absorb, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_absorb0_hitlimit1_AuraScript();
}
@@ -92,7 +92,7 @@ class spell_gen_adaptive_warding : public SpellScriptLoader
{
PrepareAuraScript(spell_gen_adaptive_warding_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_GEN_ADAPTIVE_WARDING_FIRE) ||
!sSpellMgr->GetSpellInfo(SPELL_GEN_ADAPTIVE_WARDING_NATURE) ||
@@ -151,14 +151,14 @@ class spell_gen_adaptive_warding : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), spellId, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_gen_adaptive_warding_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_gen_adaptive_warding_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_adaptive_warding_AuraScript();
}
@@ -180,13 +180,13 @@ class spell_gen_allow_cast_from_item_only : public SpellScriptLoader
return SPELL_CAST_OK;
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_gen_allow_cast_from_item_only_SpellScript::CheckRequirement);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_allow_cast_from_item_only_SpellScript();
}
@@ -207,7 +207,7 @@ class spell_gen_animal_blood : public SpellScriptLoader
{
PrepareAuraScript(spell_gen_animal_blood_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SPAWN_BLOOD_POOL))
return false;
@@ -228,14 +228,14 @@ class spell_gen_animal_blood : public SpellScriptLoader
owner->CastSpell(owner, SPELL_SPAWN_BLOOD_POOL, true);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectRemoveFn(spell_gen_animal_blood_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_gen_animal_blood_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_animal_blood_AuraScript();
}
@@ -258,13 +258,13 @@ class spell_gen_aura_of_anger : public SpellScriptLoader
aurEff->SetAmount(100 * aurEff->GetTickNumber());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_gen_aura_of_anger_AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_aura_of_anger_AuraScript();
}
@@ -289,7 +289,7 @@ class spell_gen_aura_service_uniform : public SpellScriptLoader
{
PrepareAuraScript(spell_gen_aura_service_uniform_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SERVICE_UNIFORM))
return false;
@@ -316,14 +316,14 @@ class spell_gen_aura_service_uniform : public SpellScriptLoader
target->RestoreDisplayId();
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectRemoveFn(spell_gen_aura_service_uniform_AuraScript::OnApply, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_gen_aura_service_uniform_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_aura_service_uniform_AuraScript();
}
@@ -360,13 +360,13 @@ class spell_gen_av_drekthar_presence : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_gen_av_drekthar_presence_AuraScript::CheckAreaTarget);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_av_drekthar_presence_AuraScript();
}
@@ -386,7 +386,7 @@ class spell_gen_bandage : public SpellScriptLoader
{
PrepareSpellScript(spell_gen_bandage_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_RECENTLY_BANDAGED))
return false;
@@ -409,14 +409,14 @@ class spell_gen_bandage : public SpellScriptLoader
GetCaster()->CastSpell(target, SPELL_RECENTLY_BANDAGED, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_gen_bandage_SpellScript::CheckCast);
AfterHit += SpellHitFn(spell_gen_bandage_SpellScript::HandleScript);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_bandage_SpellScript();
}
@@ -449,21 +449,21 @@ class spell_gen_bonked : public SpellScriptLoader
target->CastSpell(target, SPELL_FOAM_SWORD_DEFEAT, true);
target->RemoveAurasDueToSpell(SPELL_BONKED);
- if (Aura const* aura = target->GetAura(SPELL_ON_GUARD))
+ if (Aura const* auraOnGuard = target->GetAura(SPELL_ON_GUARD))
{
- if (Item* item = target->GetItemByGuid(aura->GetCastItemGUID()))
+ if (Item* item = target->GetItemByGuid(auraOnGuard->GetCastItemGUID()))
target->DestroyItemCount(item->GetEntry(), 1, true);
}
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_bonked_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_bonked_SpellScript();
}
@@ -509,7 +509,7 @@ class spell_gen_break_shield: public SpellScriptLoader
class spell_gen_break_shield_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_break_shield_SpellScript)
+ PrepareSpellScript(spell_gen_break_shield_SpellScript);
void HandleScriptEffect(SpellEffIndex effIndex)
{
@@ -566,13 +566,13 @@ class spell_gen_break_shield: public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_break_shield_SpellScript::HandleScriptEffect, EFFECT_FIRST_FOUND, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_break_shield_SpellScript();
}
@@ -594,13 +594,13 @@ class spell_gen_burn_brutallus : public SpellScriptLoader
aurEff->SetAmount(aurEff->GetAmount() * 2);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_gen_burn_brutallus_AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_burn_brutallus_AuraScript();
}
@@ -620,7 +620,7 @@ class spell_gen_cannibalize : public SpellScriptLoader
{
PrepareSpellScript(spell_gen_cannibalize_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_CANNIBALIZE_TRIGGERED))
return false;
@@ -646,14 +646,14 @@ class spell_gen_cannibalize : public SpellScriptLoader
GetCaster()->CastSpell(GetCaster(), SPELL_CANNIBALIZE_TRIGGERED, false);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_gen_cannibalize_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
OnCheckCast += SpellCheckCastFn(spell_gen_cannibalize_SpellScript::CheckIfCorpseNear);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_cannibalize_SpellScript();
}
@@ -671,9 +671,9 @@ class spell_gen_chaos_blast : public SpellScriptLoader
class spell_gen_chaos_blast_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_chaos_blast_SpellScript)
+ PrepareSpellScript(spell_gen_chaos_blast_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_CHAOS_BLAST))
return false;
@@ -687,13 +687,13 @@ class spell_gen_chaos_blast : public SpellScriptLoader
caster->CastCustomSpell(target, SPELL_CHAOS_BLAST, &basepoints0, NULL, NULL, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_chaos_blast_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_chaos_blast_SpellScript();
}
@@ -714,14 +714,14 @@ class spell_gen_clone : public SpellScriptLoader
GetHitUnit()->CastSpell(GetCaster(), uint32(GetEffectValue()), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_clone_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
OnEffectHitTarget += SpellEffectFn(spell_gen_clone_SpellScript::HandleScriptEffect, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_clone_SpellScript();
}
@@ -754,13 +754,13 @@ class spell_gen_clone_weapon : public SpellScriptLoader
GetHitUnit()->CastSpell(GetCaster(), uint32(GetEffectValue()), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_clone_weapon_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_clone_weapon_SpellScript();
}
@@ -775,7 +775,7 @@ class spell_gen_clone_weapon_aura : public SpellScriptLoader
{
PrepareAuraScript(spell_gen_clone_weapon_auraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_COPY_WEAPON_AURA) ||
!sSpellMgr->GetSpellInfo(SPELL_COPY_WEAPON_2_AURA) ||
@@ -787,7 +787,7 @@ class spell_gen_clone_weapon_aura : public SpellScriptLoader
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
prevItem = 0;
return true;
@@ -872,7 +872,7 @@ class spell_gen_clone_weapon_aura : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_gen_clone_weapon_auraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
OnEffectRemove += AuraEffectRemoveFn(spell_gen_clone_weapon_auraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
@@ -882,7 +882,7 @@ class spell_gen_clone_weapon_aura : public SpellScriptLoader
uint32 prevItem;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_clone_weapon_auraScript();
}
@@ -895,7 +895,7 @@ class spell_gen_count_pct_from_max_hp : public SpellScriptLoader
class spell_gen_count_pct_from_max_hp_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_count_pct_from_max_hp_SpellScript)
+ PrepareSpellScript(spell_gen_count_pct_from_max_hp_SpellScript);
public:
spell_gen_count_pct_from_max_hp_SpellScript(int32 damagePct) : SpellScript(), _damagePct(damagePct) { }
@@ -908,7 +908,7 @@ class spell_gen_count_pct_from_max_hp : public SpellScriptLoader
SetHitDamage(GetHitUnit()->CountPctFromMaxHealth(_damagePct));
}
- void Register() OVERRIDE
+ void Register() override
{
OnHit += SpellHitFn(spell_gen_count_pct_from_max_hp_SpellScript::RecalculateDamage);
}
@@ -917,7 +917,7 @@ class spell_gen_count_pct_from_max_hp : public SpellScriptLoader
int32 _damagePct;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_count_pct_from_max_hp_SpellScript(_damagePct);
}
@@ -942,7 +942,7 @@ class spell_gen_create_lance : public SpellScriptLoader
{
PrepareSpellScript(spell_gen_create_lance_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_CREATE_LANCE_ALLIANCE) ||
!sSpellMgr->GetSpellInfo(SPELL_CREATE_LANCE_HORDE))
@@ -963,13 +963,13 @@ class spell_gen_create_lance : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_create_lance_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_create_lance_SpellScript();
}
@@ -994,13 +994,13 @@ class spell_gen_creature_permanent_feign_death : public SpellScriptLoader
target->ToCreature()->SetReactState(REACT_PASSIVE);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_gen_creature_permanent_feign_death_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_creature_permanent_feign_death_AuraScript();
}
@@ -1026,7 +1026,7 @@ class spell_gen_dalaran_disguise : public SpellScriptLoader
{
PrepareSpellScript(spell_gen_dalaran_disguise_SpellScript);
- bool Validate(SpellInfo const* spellInfo) OVERRIDE
+ bool Validate(SpellInfo const* spellInfo) override
{
switch (spellInfo->Id)
{
@@ -1068,13 +1068,13 @@ class spell_gen_dalaran_disguise : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_dalaran_disguise_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_dalaran_disguise_SpellScript();
}
@@ -1098,7 +1098,7 @@ class spell_gen_damage_reduction_aura : public SpellScriptLoader
{
PrepareAuraScript(spell_gen_damage_reduction_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DAMAGE_REDUCTION_AURA))
return false;
@@ -1123,7 +1123,7 @@ class spell_gen_damage_reduction_aura : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_gen_damage_reduction_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
OnEffectRemove += AuraEffectRemoveFn(spell_gen_damage_reduction_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
@@ -1131,7 +1131,7 @@ class spell_gen_damage_reduction_aura : public SpellScriptLoader
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_damage_reduction_AuraScript();
}
@@ -1153,7 +1153,7 @@ class spell_gen_defend : public SpellScriptLoader
{
PrepareAuraScript(spell_gen_defend_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_VISUAL_SHIELD_1))
return false;
@@ -1193,7 +1193,7 @@ class spell_gen_defend : public SpellScriptLoader
rider->RemoveAurasDueToSpell(GetId());
}
- void Register() OVERRIDE
+ void Register() override
{
SpellInfo const* spell = sSpellMgr->EnsureSpellInfo(m_scriptSpellId);
@@ -1217,7 +1217,7 @@ class spell_gen_defend : public SpellScriptLoader
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_defend_AuraScript();
}
@@ -1232,7 +1232,7 @@ class spell_gen_despawn_self : public SpellScriptLoader
{
PrepareSpellScript(spell_gen_despawn_self_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
@@ -1243,13 +1243,13 @@ class spell_gen_despawn_self : public SpellScriptLoader
GetCaster()->ToCreature()->DespawnOrUnsummon();
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_despawn_self_SpellScript::HandleDummy, EFFECT_ALL, SPELL_EFFECT_ANY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_despawn_self_SpellScript();
}
@@ -1270,12 +1270,12 @@ class spell_gen_divine_storm_cd_reset : public SpellScriptLoader
{
PrepareSpellScript(spell_gen_divine_storm_cd_reset_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DIVINE_STORM))
return false;
@@ -1289,13 +1289,13 @@ class spell_gen_divine_storm_cd_reset : public SpellScriptLoader
caster->RemoveSpellCooldown(SPELL_DIVINE_STORM, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_divine_storm_cd_reset_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_divine_storm_cd_reset_SpellScript();
}
@@ -1326,13 +1326,13 @@ class spell_gen_ds_flush_knockback : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_ds_flush_knockback_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_ds_flush_knockback_SpellScript();
}
@@ -1353,7 +1353,7 @@ class spell_gen_dummy_trigger : public SpellScriptLoader
{
PrepareSpellScript(spell_gen_dummy_trigger_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PERSISTANT_SHIELD_TRIGGERED) ||
!sSpellMgr->GetSpellInfo(SPELL_PERSISTANT_SHIELD))
@@ -1371,13 +1371,13 @@ class spell_gen_dummy_trigger : public SpellScriptLoader
caster->CastCustomSpell(target, SPELL_PERSISTANT_SHIELD_TRIGGERED, &damage, NULL, NULL, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_dummy_trigger_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_dummy_trigger_SpellScript();
}
@@ -1392,7 +1392,7 @@ class spell_gen_dungeon_credit : public SpellScriptLoader
{
PrepareSpellScript(spell_gen_dungeon_credit_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_handled = false;
return GetCaster()->GetTypeId() == TYPEID_UNIT;
@@ -1410,7 +1410,7 @@ class spell_gen_dungeon_credit : public SpellScriptLoader
instance->UpdateEncounterState(ENCOUNTER_CREDIT_CAST_SPELL, GetSpellInfo()->Id, caster);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterHit += SpellHitFn(spell_gen_dungeon_credit_SpellScript::CreditEncounter);
}
@@ -1419,7 +1419,7 @@ class spell_gen_dungeon_credit : public SpellScriptLoader
bool _handled;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_dungeon_credit_SpellScript();
}
@@ -1446,7 +1446,8 @@ class spell_gen_elune_candle : public SpellScriptLoader
class spell_gen_elune_candle_SpellScript : public SpellScript
{
PrepareSpellScript(spell_gen_elune_candle_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ELUNE_CANDLE_OMEN_HEAD) ||
!sSpellMgr->GetSpellInfo(SPELL_ELUNE_CANDLE_OMEN_CHEST) ||
@@ -1485,13 +1486,13 @@ class spell_gen_elune_candle : public SpellScriptLoader
GetCaster()->CastSpell(GetHitUnit(), spellId, true, NULL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_elune_candle_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_elune_candle_SpellScript();
}
@@ -1511,9 +1512,9 @@ class spell_gen_gadgetzan_transporter_backfire : public SpellScriptLoader
class spell_gen_gadgetzan_transporter_backfire_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_gadgetzan_transporter_backfire_SpellScript)
+ PrepareSpellScript(spell_gen_gadgetzan_transporter_backfire_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TRANSPORTER_MALFUNCTION_POLYMORPH) ||
!sSpellMgr->GetSpellInfo(SPELL_TRANSPORTER_EVIL_TWIN) ||
@@ -1534,13 +1535,13 @@ class spell_gen_gadgetzan_transporter_backfire : public SpellScriptLoader
caster->CastSpell(caster, SPELL_TRANSPORTER_MALFUNCTION_MISS, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_gadgetzan_transporter_backfire_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_gadgetzan_transporter_backfire_SpellScript();
}
@@ -1583,17 +1584,17 @@ class spell_gen_gift_of_naaru : public SpellScriptLoader
break;
}
- int32 healTick = floor(heal / aurEff->GetTotalTicks());
+ int32 healTick = std::floor(heal / aurEff->GetTotalTicks());
amount += int32(std::max(healTick, 0));
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_gift_of_naaru_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_gift_of_naaru_AuraScript();
}
@@ -1612,9 +1613,9 @@ class spell_gen_gnomish_transporter : public SpellScriptLoader
class spell_gen_gnomish_transporter_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_gnomish_transporter_SpellScript)
+ PrepareSpellScript(spell_gen_gnomish_transporter_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TRANSPORTER_SUCCESS) ||
!sSpellMgr->GetSpellInfo(SPELL_TRANSPORTER_FAILURE))
@@ -1627,105 +1628,18 @@ class spell_gen_gnomish_transporter : public SpellScriptLoader
GetCaster()->CastSpell(GetCaster(), roll_chance_i(50) ? SPELL_TRANSPORTER_SUCCESS : SPELL_TRANSPORTER_FAILURE, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_gnomish_transporter_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_gnomish_transporter_SpellScript();
}
};
-class spell_gen_gunship_portal : public SpellScriptLoader
-{
- public:
- spell_gen_gunship_portal() : SpellScriptLoader("spell_gen_gunship_portal") { }
-
- class spell_gen_gunship_portal_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_gen_gunship_portal_SpellScript);
-
- bool Load() OVERRIDE
- {
- return GetCaster()->GetTypeId() == TYPEID_PLAYER;
- }
-
- void HandleScript(SpellEffIndex /*effIndex*/)
- {
- Player* caster = GetCaster()->ToPlayer();
- if (Battleground* bg = caster->GetBattleground())
- if (bg->GetTypeID(true) == BATTLEGROUND_IC)
- bg->DoAction(1, caster->GetGUID());
- }
-
- void Register() OVERRIDE
- {
- OnEffectHitTarget += SpellEffectFn(spell_gen_gunship_portal_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
-
- SpellScript* GetSpellScript() const OVERRIDE
- {
- return new spell_gen_gunship_portal_SpellScript();
- }
-};
-
-enum Launch
-{
- SPELL_LAUNCH_NO_FALLING_DAMAGE = 66251
-};
-
-class spell_gen_launch : public SpellScriptLoader
-{
- public:
- spell_gen_launch() : SpellScriptLoader("spell_gen_launch") { }
-
- class spell_gen_launch_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_gen_launch_SpellScript);
-
- void HandleScript(SpellEffIndex /*effIndex*/)
- {
- if (Player* player = GetHitPlayer())
- player->AddAura(SPELL_LAUNCH_NO_FALLING_DAMAGE, player); // prevents falling damage
- }
-
- void Launch()
- {
- WorldLocation const* const position = GetExplTargetDest();
-
- if (Player* player = GetHitPlayer())
- {
- player->ExitVehicle();
-
- // A better research is needed
- // There is no spell for this, the following calculation was based on void Spell::CalculateJumpSpeeds
-
- float speedZ = 10.0f;
- float dist = position->GetExactDist2d(player->GetPositionX(), player->GetPositionY());
- float speedXY = dist;
-
- player->GetMotionMaster()->MoveJump(position->GetPositionX(), position->GetPositionY(), position->GetPositionZ(), speedXY, speedZ);
- }
- }
-
- void Register() OVERRIDE
- {
- OnEffectHitTarget += SpellEffectFn(spell_gen_launch_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_FORCE_CAST);
- AfterHit += SpellHitFn(spell_gen_launch_SpellScript::Launch);
- }
- };
-
- SpellScript* GetSpellScript() const OVERRIDE
- {
- return new spell_gen_launch_SpellScript();
- }
-};
-
-
class spell_gen_lifeblood : public SpellScriptLoader
{
public:
@@ -1741,13 +1655,13 @@ class spell_gen_lifeblood : public SpellScriptLoader
amount += int32(CalculatePct(owner->GetMaxHealth(), 1.5f / aurEff->GetTotalTicks()));
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_lifeblood_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_lifeblood_AuraScript();
}
@@ -1774,7 +1688,7 @@ class spell_gen_lifebloom : public SpellScriptLoader
public:
spell_gen_lifebloom_AuraScript(uint32 spellId) : AuraScript(), _spellId(spellId) { }
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(_spellId))
return false;
@@ -1791,7 +1705,7 @@ class spell_gen_lifebloom : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), _spellId, true, NULL, aurEff, GetCasterGUID());
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_gen_lifebloom_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_PERIODIC_HEAL, AURA_EFFECT_HANDLE_REAL);
}
@@ -1800,7 +1714,7 @@ class spell_gen_lifebloom : public SpellScriptLoader
uint32 _spellId;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_lifebloom_AuraScript(_spellId);
}
@@ -1852,13 +1766,13 @@ class spell_gen_magic_rooster : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_magic_rooster_SpellScript::HandleScript, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_magic_rooster_SpellScript();
}
@@ -1928,7 +1842,7 @@ class spell_gen_mount : public SpellScriptLoader
spell_gen_mount_SpellScript(uint32 mount0, uint32 mount60, uint32 mount100, uint32 mount150, uint32 mount280, uint32 mount310) : SpellScript(),
_mount0(mount0), _mount60(mount60), _mount100(mount100), _mount150(mount150), _mount280(mount280), _mount310(mount310) { }
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (_mount0 && !sSpellMgr->GetSpellInfo(_mount0))
return false;
@@ -2008,7 +1922,7 @@ class spell_gen_mount : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_mount_SpellScript::HandleMount, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
}
@@ -2022,7 +1936,7 @@ class spell_gen_mount : public SpellScriptLoader
uint32 _mount310;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_mount_SpellScript(_mount0, _mount60, _mount100, _mount150, _mount280, _mount310);
}
@@ -2093,7 +2007,7 @@ class spell_gen_mounted_charge: public SpellScriptLoader
class spell_gen_mounted_charge_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_mounted_charge_SpellScript)
+ PrepareSpellScript(spell_gen_mounted_charge_SpellScript);
void HandleScriptEffect(SpellEffIndex effIndex)
{
@@ -2179,7 +2093,7 @@ class spell_gen_mounted_charge: public SpellScriptLoader
GetCaster()->CastSpell(GetHitUnit(), spellId, false);
}
- void Register() OVERRIDE
+ void Register() override
{
SpellInfo const* spell = sSpellMgr->EnsureSpellInfo(m_scriptSpellId);
@@ -2191,7 +2105,7 @@ class spell_gen_mounted_charge: public SpellScriptLoader
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_mounted_charge_SpellScript();
}
@@ -2212,7 +2126,7 @@ class spell_gen_netherbloom : public SpellScriptLoader
{
PrepareSpellScript(spell_gen_netherbloom_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
for (uint8 i = 0; i < 5; ++i)
if (!sSpellMgr->GetSpellInfo(SPELL_NETHERBLOOM_POLLEN_1 + i))
@@ -2243,13 +2157,13 @@ class spell_gen_netherbloom : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_netherbloom_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_netherbloom_SpellScript();
}
@@ -2270,7 +2184,7 @@ class spell_gen_nightmare_vine : public SpellScriptLoader
{
PrepareSpellScript(spell_gen_nightmare_vine_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_NIGHTMARE_POLLEN))
return false;
@@ -2289,13 +2203,13 @@ class spell_gen_nightmare_vine : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_nightmare_vine_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_nightmare_vine_SpellScript();
}
@@ -2321,7 +2235,7 @@ class spell_gen_obsidian_armor : public SpellScriptLoader
{
PrepareAuraScript(spell_gen_obsidian_armor_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_HOLY) ||
!sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_FIRE) ||
@@ -2375,14 +2289,14 @@ class spell_gen_obsidian_armor : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), spellId, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_gen_obsidian_armor_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_gen_obsidian_armor_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_obsidian_armor_AuraScript();
}
@@ -2494,7 +2408,7 @@ class spell_gen_on_tournament_mount : public SpellScriptLoader
uint32 _pennantSpellId;
- bool Load() OVERRIDE
+ bool Load() override
{
_pennantSpellId = 0;
return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER;
@@ -2628,14 +2542,14 @@ class spell_gen_on_tournament_mount : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_gen_on_tournament_mount_AuraScript::HandleApplyEffect, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
OnEffectRemove += AuraEffectRemoveFn(spell_gen_on_tournament_mount_AuraScript::HandleRemoveEffect, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_on_tournament_mount_AuraScript();
}
@@ -2650,7 +2564,7 @@ class spell_gen_oracle_wolvar_reputation : public SpellScriptLoader
{
PrepareSpellScript(spell_gen_oracle_wolvar_reputation_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -2674,13 +2588,13 @@ class spell_gen_oracle_wolvar_reputation : public SpellScriptLoader
// EFFECT_INDEX_2 most likely update at war state, we already handle this in SetReputation
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_gen_oracle_wolvar_reputation_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_oracle_wolvar_reputation_SpellScript();
}
@@ -2702,7 +2616,7 @@ class spell_gen_orc_disguise : public SpellScriptLoader
{
PrepareSpellScript(spell_gen_orc_disguise_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ORC_DISGUISE_TRIGGER) ||
!sSpellMgr->GetSpellInfo(SPELL_ORC_DISGUISE_MALE) ||
@@ -2724,13 +2638,13 @@ class spell_gen_orc_disguise : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_orc_disguise_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_orc_disguise_SpellScript();
}
@@ -2752,7 +2666,7 @@ class spell_gen_parachute : public SpellScriptLoader
{
PrepareAuraScript(spell_gen_parachute_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PARACHUTE) ||
!sSpellMgr->GetSpellInfo(SPELL_PARACHUTE_BUFF))
@@ -2770,51 +2684,18 @@ class spell_gen_parachute : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_parachute_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_parachute_AuraScript();
}
};
-enum ParachuteIC
-{
- SPELL_PARACHUTE_IC = 66657
-};
-
-class spell_gen_parachute_ic : public SpellScriptLoader
-{
- public:
- spell_gen_parachute_ic() : SpellScriptLoader("spell_gen_parachute_ic") { }
-
- class spell_gen_parachute_ic_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_gen_parachute_ic_AuraScript)
-
- void HandleTriggerSpell(AuraEffect const* /*aurEff*/)
- {
- if (Player* target = GetTarget()->ToPlayer())
- if (target->m_movementInfo.fallTime > 2000)
- target->CastSpell(target, SPELL_PARACHUTE_IC, true);
- }
-
- void Register() OVERRIDE
- {
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_parachute_ic_AuraScript::HandleTriggerSpell, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
- }
- };
-
- AuraScript* GetAuraScript() const OVERRIDE
- {
- return new spell_gen_parachute_ic_AuraScript();
- }
-};
-
enum PetSummoned
{
NPC_DOOMGUARD = 11859,
@@ -2831,7 +2712,7 @@ class spell_gen_pet_summoned : public SpellScriptLoader
{
PrepareSpellScript(spell_gen_pet_summoned_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -2842,40 +2723,38 @@ class spell_gen_pet_summoned : public SpellScriptLoader
if (player->GetLastPetNumber())
{
PetType newPetType = (player->getClass() == CLASS_HUNTER) ? HUNTER_PET : SUMMON_PET;
- if (Pet* newPet = new Pet(player, newPetType))
+ Pet* newPet = new Pet(player, newPetType);
+ if (newPet->LoadPetFromDB(player, 0, player->GetLastPetNumber(), true))
{
- if (newPet->LoadPetFromDB(player, 0, player->GetLastPetNumber(), true))
- {
- // revive the pet if it is dead
- if (newPet->getDeathState() == DEAD)
- newPet->setDeathState(ALIVE);
+ // revive the pet if it is dead
+ if (newPet->getDeathState() == DEAD)
+ newPet->setDeathState(ALIVE);
- newPet->SetFullHealth();
- newPet->SetPower(newPet->getPowerType(), newPet->GetMaxPower(newPet->getPowerType()));
+ newPet->SetFullHealth();
+ newPet->SetPower(newPet->getPowerType(), newPet->GetMaxPower(newPet->getPowerType()));
- switch (newPet->GetEntry())
- {
- case NPC_DOOMGUARD:
- case NPC_INFERNAL:
- newPet->SetEntry(NPC_IMP);
- break;
- default:
- break;
- }
+ switch (newPet->GetEntry())
+ {
+ case NPC_DOOMGUARD:
+ case NPC_INFERNAL:
+ newPet->SetEntry(NPC_IMP);
+ break;
+ default:
+ break;
}
- else
- delete newPet;
}
+ else
+ delete newPet;
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_pet_summoned_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_pet_summoned_SpellScript();
}
@@ -2890,7 +2769,7 @@ class spell_gen_profession_research : public SpellScriptLoader
{
PrepareSpellScript(spell_gen_profession_research_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -2913,19 +2792,19 @@ class spell_gen_profession_research : public SpellScriptLoader
// learn random explicit discovery recipe (if any)
if (uint32 discoveredSpellId = GetExplicitDiscoverySpell(spellId, caster))
- caster->learnSpell(discoveredSpellId, false);
+ caster->LearnSpell(discoveredSpellId, false);
caster->UpdateCraftSkill(spellId);
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_gen_profession_research_SpellScript::CheckRequirement);
OnEffectHitTarget += SpellEffectFn(spell_gen_profession_research_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_profession_research_SpellScript();
}
@@ -2949,13 +2828,13 @@ class spell_gen_remove_flight_auras : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_remove_flight_auras_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_remove_flight_auras_SpellScript();
}
@@ -3012,13 +2891,13 @@ class spell_gen_replenishment : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_gen_replenishment_SpellScript::RemoveInvalidTargets, EFFECT_ALL, TARGET_UNIT_CASTER_AREA_RAID);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_replenishment_SpellScript();
}
@@ -3027,9 +2906,9 @@ class spell_gen_replenishment : public SpellScriptLoader
{
PrepareAuraScript(spell_gen_replenishment_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
- return GetUnitOwner()->GetPower(POWER_MANA);
+ return GetUnitOwner()->getPowerType() == POWER_MANA;
}
void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
@@ -3047,13 +2926,13 @@ class spell_gen_replenishment : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_replenishment_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_ENERGIZE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_replenishment_AuraScript();
}
@@ -3073,14 +2952,14 @@ class spell_gen_seaforium_blast : public SpellScriptLoader
{
PrepareSpellScript(spell_gen_seaforium_blast_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PLANT_CHARGES_CREDIT_ACHIEVEMENT))
return false;
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
// OriginalCaster is always available in Spell::prepare
return GetOriginalCaster()->GetTypeId() == TYPEID_PLAYER;
@@ -3095,13 +2974,13 @@ class spell_gen_seaforium_blast : public SpellScriptLoader
originalCaster->CastSpell(originalCaster, SPELL_PLANT_CHARGES_CREDIT_ACHIEVEMENT, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_seaforium_blast_SpellScript::AchievementCredit, EFFECT_1, SPELL_EFFECT_GAMEOBJECT_DAMAGE);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_seaforium_blast_SpellScript();
}
@@ -3123,20 +3002,20 @@ class spell_gen_spectator_cheer_trigger : public SpellScriptLoader
class spell_gen_spectator_cheer_trigger_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_spectator_cheer_trigger_SpellScript)
+ PrepareSpellScript(spell_gen_spectator_cheer_trigger_SpellScript);
void HandleDummy(SpellEffIndex /*effIndex*/)
{
GetCaster()->HandleEmoteCommand(EmoteArray[urand(0, 2)]);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_spectator_cheer_trigger_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_spectator_cheer_trigger_SpellScript();
}
@@ -3151,7 +3030,7 @@ class spell_gen_spirit_healer_res : public SpellScriptLoader
{
PrepareSpellScript(spell_gen_spirit_healer_res_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetOriginalCaster() && GetOriginalCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -3167,13 +3046,13 @@ class spell_gen_spirit_healer_res : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_spirit_healer_res_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_spirit_healer_res_SpellScript();
}
@@ -3197,7 +3076,7 @@ class spell_gen_summon_elemental : public SpellScriptLoader
public:
spell_gen_summon_elemental_AuraScript(uint32 spellId) : AuraScript(), _spellId(spellId) { }
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(_spellId))
return false;
@@ -3219,7 +3098,7 @@ class spell_gen_summon_elemental : public SpellScriptLoader
owner->ToPlayer()->RemovePet(NULL, PET_SAVE_NOT_IN_SLOT, true);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_gen_summon_elemental_AuraScript::AfterApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_gen_summon_elemental_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
@@ -3229,7 +3108,7 @@ class spell_gen_summon_elemental : public SpellScriptLoader
uint32 _spellId;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_summon_elemental_AuraScript(_spellId);
}
@@ -3252,7 +3131,7 @@ class spell_gen_summon_tournament_mount : public SpellScriptLoader
{
PrepareSpellScript(spell_gen_summon_tournament_mount_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_LANCE_EQUIPPED))
return false;
@@ -3273,13 +3152,13 @@ class spell_gen_summon_tournament_mount : public SpellScriptLoader
return SPELL_CAST_OK;
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_gen_summon_tournament_mount_SpellScript::CheckIfLanceEquiped);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_summon_tournament_mount_SpellScript();
}
@@ -3301,13 +3180,13 @@ class spell_gen_throw_shield : public SpellScriptLoader
GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_throw_shield_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_throw_shield_SpellScript();
}
@@ -3328,7 +3207,7 @@ class spell_gen_tournament_duel : public SpellScriptLoader
{
PrepareSpellScript(spell_gen_tournament_duel_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ON_TOURNAMENT_MOUNT) ||
!sSpellMgr->GetSpellInfo(SPELL_MOUNTED_DUEL))
@@ -3353,13 +3232,13 @@ class spell_gen_tournament_duel : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_tournament_duel_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_tournament_duel_SpellScript();
}
@@ -3374,7 +3253,7 @@ class spell_gen_tournament_pennant : public SpellScriptLoader
{
PrepareAuraScript(spell_gen_tournament_pennant_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -3386,13 +3265,13 @@ class spell_gen_tournament_pennant : public SpellScriptLoader
caster->RemoveAurasDueToSpell(GetId());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_gen_tournament_pennant_AuraScript::HandleApplyEffect, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_tournament_pennant_AuraScript();
}
@@ -3415,12 +3294,12 @@ class spell_pvp_trinket_wotf_shared_cd : public SpellScriptLoader
{
PrepareSpellScript(spell_pvp_trinket_wotf_shared_cd_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WILL_OF_THE_FORSAKEN_COOLDOWN_TRIGGER) ||
!sSpellMgr->GetSpellInfo(SPELL_WILL_OF_THE_FORSAKEN_COOLDOWN_TRIGGER_WOTF))
@@ -3435,13 +3314,13 @@ class spell_pvp_trinket_wotf_shared_cd : public SpellScriptLoader
GetCaster()->ToPlayer()->AddSpellAndCategoryCooldowns(GetSpellInfo(), GetCastItem() ? GetCastItem()->GetEntry() : 0, GetSpell());
}
- void Register() OVERRIDE
+ void Register() override
{
AfterCast += SpellCastFn(spell_pvp_trinket_wotf_shared_cd_SpellScript::HandleScript);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pvp_trinket_wotf_shared_cd_SpellScript();
}
@@ -3482,7 +3361,7 @@ class spell_gen_turkey_marker : public SpellScriptLoader
ModStackAmount(-1, AURA_REMOVE_BY_EXPIRE);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_gen_turkey_marker_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_turkey_marker_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
@@ -3491,7 +3370,7 @@ class spell_gen_turkey_marker : public SpellScriptLoader
std::list<uint32> _applyTimes;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_turkey_marker_AuraScript();
}
@@ -3531,13 +3410,13 @@ class spell_gen_upper_deck_create_foam_sword : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_upper_deck_create_foam_sword_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_upper_deck_create_foam_sword_SpellScript();
}
@@ -3557,7 +3436,7 @@ class spell_gen_vehicle_scaling : public SpellScriptLoader
{
PrepareAuraScript(spell_gen_vehicle_scaling_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -3588,7 +3467,7 @@ class spell_gen_vehicle_scaling : public SpellScriptLoader
amount = uint16((avgILvl - baseItemLevel) * factor);
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_vehicle_scaling_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_HEALING_PCT);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_vehicle_scaling_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
@@ -3596,7 +3475,7 @@ class spell_gen_vehicle_scaling : public SpellScriptLoader
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_vehicle_scaling_AuraScript();
}
@@ -3615,7 +3494,7 @@ class spell_gen_vendor_bark_trigger : public SpellScriptLoader
class spell_gen_vendor_bark_trigger_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_vendor_bark_trigger_SpellScript)
+ PrepareSpellScript(spell_gen_vendor_bark_trigger_SpellScript);
void HandleDummy(SpellEffIndex /* effIndex */)
{
@@ -3624,13 +3503,13 @@ class spell_gen_vendor_bark_trigger : public SpellScriptLoader
vendor->AI()->Talk(SAY_AMPHITHEATER_VENDOR);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_gen_vendor_bark_trigger_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_vendor_bark_trigger_SpellScript();
}
@@ -3653,13 +3532,13 @@ class spell_gen_wg_water : public SpellScriptLoader
return SPELL_CAST_OK;
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_gen_wg_water_SpellScript::CheckCast);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_wg_water_SpellScript();
}
@@ -3679,7 +3558,7 @@ class spell_gen_whisper_gulch_yogg_saron_whisper : public SpellScriptLoader
{
PrepareAuraScript(spell_gen_whisper_gulch_yogg_saron_whisper_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_YOGG_SARON_WHISPER_DUMMY))
return false;
@@ -3692,13 +3571,13 @@ class spell_gen_whisper_gulch_yogg_saron_whisper : public SpellScriptLoader
GetTarget()->CastSpell((Unit*)NULL, SPELL_YOGG_SARON_WHISPER_DUMMY, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_whisper_gulch_yogg_saron_whisper_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_whisper_gulch_yogg_saron_whisper_AuraScript();
}
@@ -3719,13 +3598,13 @@ class spell_gen_eject_all_passengers : public SpellScriptLoader
vehicle->RemoveAllPassengers();
}
- void Register() OVERRIDE
+ void Register() override
{
AfterHit += SpellHitFn(spell_gen_eject_all_passengers_SpellScript::RemoveVehicleAuras);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_gen_eject_all_passengers_SpellScript();
}
@@ -3767,8 +3646,6 @@ void AddSC_generic_spell_scripts()
new spell_gen_gadgetzan_transporter_backfire();
new spell_gen_gift_of_naaru();
new spell_gen_gnomish_transporter();
- new spell_gen_gunship_portal();
- new spell_gen_launch();
new spell_gen_lifeblood();
new spell_gen_lifebloom("spell_hexlord_lifebloom", SPELL_HEXLORD_MALACRASS_LIFEBLOOM_FINAL_HEAL);
new spell_gen_lifebloom("spell_tur_ragepaw_lifebloom", SPELL_TUR_RAGEPAW_LIFEBLOOM_FINAL_HEAL);
@@ -3792,7 +3669,6 @@ void AddSC_generic_spell_scripts()
new spell_gen_oracle_wolvar_reputation();
new spell_gen_orc_disguise();
new spell_gen_parachute();
- new spell_gen_parachute_ic();
new spell_gen_pet_summoned();
new spell_gen_profession_research();
new spell_gen_remove_flight_auras();
diff --git a/src/server/scripts/Spells/spell_holiday.cpp b/src/server/scripts/Spells/spell_holiday.cpp
index 07d95aa63f5..85bf85fa2d2 100644
--- a/src/server/scripts/Spells/spell_holiday.cpp
+++ b/src/server/scripts/Spells/spell_holiday.cpp
@@ -99,14 +99,14 @@ class spell_love_is_in_the_air_romantic_picnic : public SpellScriptLoader
target->RemoveAura(SPELL_ROMANTIC_PICNIC_ACHIEV);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_love_is_in_the_air_romantic_picnic_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_love_is_in_the_air_romantic_picnic_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_love_is_in_the_air_romantic_picnic_AuraScript();
}
@@ -136,7 +136,7 @@ class spell_hallow_end_trick : public SpellScriptLoader
{
PrepareSpellScript(spell_hallow_end_trick_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PIRATE_COSTUME_MALE) || !sSpellMgr->GetSpellInfo(SPELL_PIRATE_COSTUME_FEMALE) || !sSpellMgr->GetSpellInfo(SPELL_NINJA_COSTUME_MALE)
|| !sSpellMgr->GetSpellInfo(SPELL_NINJA_COSTUME_FEMALE) || !sSpellMgr->GetSpellInfo(SPELL_LEPER_GNOME_COSTUME_MALE) || !sSpellMgr->GetSpellInfo(SPELL_LEPER_GNOME_COSTUME_FEMALE)
@@ -177,13 +177,13 @@ class spell_hallow_end_trick : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_hallow_end_trick_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_hallow_end_trick_SpellScript();
}
@@ -209,7 +209,7 @@ class spell_hallow_end_trick_or_treat : public SpellScriptLoader
{
PrepareSpellScript(spell_hallow_end_trick_or_treat_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TRICK) || !sSpellMgr->GetSpellInfo(SPELL_TREAT) || !sSpellMgr->GetSpellInfo(SPELL_TRICKED_OR_TREATED))
return false;
@@ -226,13 +226,13 @@ class spell_hallow_end_trick_or_treat : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_hallow_end_trick_or_treat_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_hallow_end_trick_or_treat_SpellScript();
}
@@ -247,7 +247,7 @@ class spell_hallow_end_tricky_treat : public SpellScriptLoader
{
PrepareSpellScript(spell_hallow_end_tricky_treat_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TRICKY_TREAT_SPEED))
return false;
@@ -265,13 +265,13 @@ class spell_hallow_end_tricky_treat : public SpellScriptLoader
caster->CastSpell(caster, SPELL_UPSET_TUMMY, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_hallow_end_tricky_treat_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_hallow_end_tricky_treat_SpellScript();
}
@@ -296,14 +296,14 @@ class spell_pilgrims_bounty_buff_food : public SpellScriptLoader
class spell_pilgrims_bounty_buff_food_AuraScript : public AuraScript
{
- PrepareAuraScript(spell_pilgrims_bounty_buff_food_AuraScript)
+ PrepareAuraScript(spell_pilgrims_bounty_buff_food_AuraScript);
private:
uint32 const _triggeredSpellId;
public:
spell_pilgrims_bounty_buff_food_AuraScript(uint32 triggeredSpellId) : AuraScript(), _triggeredSpellId(triggeredSpellId) { }
- bool Load() OVERRIDE
+ bool Load() override
{
_handled = false;
return true;
@@ -319,7 +319,7 @@ class spell_pilgrims_bounty_buff_food : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), _triggeredSpellId, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_pilgrims_bounty_buff_food_AuraScript::HandleTriggerSpell, EFFECT_2, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
@@ -327,7 +327,7 @@ class spell_pilgrims_bounty_buff_food : public SpellScriptLoader
bool _handled;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pilgrims_bounty_buff_food_AuraScript(_triggeredSpellId);
}
@@ -349,7 +349,7 @@ class spell_winter_veil_mistletoe : public SpellScriptLoader
{
PrepareSpellScript(spell_winter_veil_mistletoe_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_CREATE_MISTLETOE) ||
!sSpellMgr->GetSpellInfo(SPELL_CREATE_HOLLY) ||
@@ -367,13 +367,13 @@ class spell_winter_veil_mistletoe : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_winter_veil_mistletoe_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_winter_veil_mistletoe_SpellScript();
}
@@ -397,7 +397,7 @@ class spell_winter_veil_px_238_winter_wondervolt : public SpellScriptLoader
{
PrepareSpellScript(spell_winter_veil_px_238_winter_wondervolt_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PX_238_WINTER_WONDERVOLT_TRANSFORM_1) ||
!sSpellMgr->GetSpellInfo(SPELL_PX_238_WINTER_WONDERVOLT_TRANSFORM_2) ||
@@ -429,7 +429,7 @@ class spell_winter_veil_px_238_winter_wondervolt : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_winter_veil_px_238_winter_wondervolt_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
@@ -438,7 +438,7 @@ class spell_winter_veil_px_238_winter_wondervolt : public SpellScriptLoader
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_winter_veil_px_238_winter_wondervolt_SpellScript();
}
diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp
index 2f8a5daae84..22968d70ff1 100644
--- a/src/server/scripts/Spells/spell_hunter.cpp
+++ b/src/server/scripts/Spells/spell_hunter.cpp
@@ -67,12 +67,12 @@ class spell_hun_aspect_of_the_beast : public SpellScriptLoader
{
PrepareAuraScript(spell_hun_aspect_of_the_beast_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_ASPECT_OF_THE_BEAST_PET))
return false;
@@ -93,14 +93,14 @@ class spell_hun_aspect_of_the_beast : public SpellScriptLoader
caster->CastSpell(caster, SPELL_HUNTER_ASPECT_OF_THE_BEAST_PET, true);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_hun_aspect_of_the_beast_AuraScript::OnApply, EFFECT_0, SPELL_AURA_UNTRACKABLE, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_hun_aspect_of_the_beast_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_UNTRACKABLE, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_hun_aspect_of_the_beast_AuraScript();
}
@@ -116,7 +116,7 @@ class spell_hun_ascpect_of_the_viper : public SpellScriptLoader
{
PrepareAuraScript(spell_hun_ascpect_of_the_viper_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_ASPECT_OF_THE_VIPER_ENERGIZE) ||
!sSpellMgr->GetSpellInfo(SPELL_HUNTER_GLYPH_OF_ASPECT_OF_THE_VIPER) ||
@@ -153,7 +153,7 @@ class spell_hun_ascpect_of_the_viper : public SpellScriptLoader
GetTarget()->RemoveAurasDueToSpell(SPELL_HUNTER_VICIOUS_VIPER);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_hun_ascpect_of_the_viper_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_OBS_MOD_POWER);
AfterEffectApply += AuraEffectApplyFn(spell_hun_ascpect_of_the_viper_AuraScript::OnApply, EFFECT_0, SPELL_AURA_OBS_MOD_POWER, AURA_EFFECT_HANDLE_REAL);
@@ -161,7 +161,7 @@ class spell_hun_ascpect_of_the_viper : public SpellScriptLoader
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_hun_ascpect_of_the_viper_AuraScript();
}
@@ -177,7 +177,7 @@ class spell_hun_chimera_shot : public SpellScriptLoader
{
PrepareSpellScript(spell_hun_chimera_shot_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_CHIMERA_SHOT_SERPENT) || !sSpellMgr->GetSpellInfo(SPELL_HUNTER_CHIMERA_SHOT_VIPER) || !sSpellMgr->GetSpellInfo(SPELL_HUNTER_CHIMERA_SHOT_SCORPID))
return false;
@@ -202,16 +202,21 @@ class spell_hun_chimera_shot : public SpellScriptLoader
flag96 familyFlag = aura->GetSpellInfo()->SpellFamilyFlags;
if (!(familyFlag[1] & 0x00000080 || familyFlag[0] & 0x0000C000))
continue;
- if (AuraEffect const* aurEff = aura->GetEffect(0))
+ if (AuraEffect* aurEff = aura->GetEffect(0))
{
// Serpent Sting - Instantly deals 40% of the damage done by your Serpent Sting.
if (familyFlag[0] & 0x4000)
{
int32 TickCount = aurEff->GetTotalTicks();
spellId = SPELL_HUNTER_CHIMERA_SHOT_SERPENT;
- basePoint = caster->SpellDamageBonusDone(unitTarget, aura->GetSpellInfo(), aurEff->GetAmount(), DOT, aura->GetStackAmount());
+ basePoint = aurEff->GetDamage();
ApplyPct(basePoint, TickCount * 40);
basePoint = unitTarget->SpellDamageBonusTaken(caster, aura->GetSpellInfo(), basePoint, DOT, aura->GetStackAmount());
+
+ // Recalculate bonus damage on roll.
+ uint32 damage = std::max(aurEff->GetAmount(), 0);
+ sScriptMgr->ModifyPeriodicDamageAurasTick(unitTarget, caster, damage);
+ aurEff->SetDamage(caster->SpellDamageBonusDone(unitTarget, aurEff->GetSpellInfo(), damage, DOT) * aurEff->GetDonePct());
}
// Viper Sting - Instantly restores mana to you equal to 60% of the total amount drained by your Viper Sting.
else if (familyFlag[1] & 0x00000080)
@@ -248,13 +253,13 @@ class spell_hun_chimera_shot : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_hun_chimera_shot_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_hun_chimera_shot_SpellScript();
}
@@ -279,13 +284,13 @@ class spell_hun_disengage : public SpellScriptLoader
return SPELL_CAST_OK;
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_hun_disengage_SpellScript::CheckCast);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_hun_disengage_SpellScript();
}
@@ -301,7 +306,7 @@ class spell_hun_improved_mend_pet : public SpellScriptLoader
{
PrepareAuraScript(spell_hun_improved_mend_pet_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_IMPROVED_MEND_PET))
return false;
@@ -319,14 +324,14 @@ class spell_hun_improved_mend_pet : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_IMPROVED_MEND_PET, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_hun_improved_mend_pet_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_hun_improved_mend_pet_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_hun_improved_mend_pet_AuraScript();
}
@@ -341,7 +346,7 @@ class spell_hun_invigoration : public SpellScriptLoader
{
PrepareSpellScript(spell_hun_invigoration_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_INVIGORATION_TRIGGERED))
return false;
@@ -356,13 +361,13 @@ class spell_hun_invigoration : public SpellScriptLoader
unitTarget->CastSpell(unitTarget, SPELL_HUNTER_INVIGORATION_TRIGGERED, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_hun_invigoration_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_hun_invigoration_SpellScript();
}
@@ -378,7 +383,7 @@ class spell_hun_last_stand_pet : public SpellScriptLoader
{
PrepareSpellScript(spell_hun_last_stand_pet_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_PET_LAST_STAND_TRIGGERED))
return false;
@@ -392,13 +397,13 @@ class spell_hun_last_stand_pet : public SpellScriptLoader
caster->CastCustomSpell(caster, SPELL_HUNTER_PET_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, NULL, NULL, true, NULL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_hun_last_stand_pet_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_hun_last_stand_pet_SpellScript();
}
@@ -414,7 +419,7 @@ class spell_hun_masters_call : public SpellScriptLoader
{
PrepareSpellScript(spell_hun_masters_call_SpellScript);
- bool Validate(SpellInfo const* spellInfo) OVERRIDE
+ bool Validate(SpellInfo const* spellInfo) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_MASTERS_CALL_TRIGGERED) || !sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_0].CalcValue()) || !sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_1].CalcValue()))
return false;
@@ -443,14 +448,14 @@ class spell_hun_masters_call : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_hun_masters_call_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
OnEffectHitTarget += SpellEffectFn(spell_hun_masters_call_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_hun_masters_call_SpellScript();
}
@@ -466,7 +471,7 @@ class spell_hun_misdirection : public SpellScriptLoader
{
PrepareAuraScript(spell_hun_misdirection_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_MISDIRECTION_PROC))
return false;
@@ -481,7 +486,7 @@ class spell_hun_misdirection : public SpellScriptLoader
bool CheckProc(ProcEventInfo& /*eventInfo*/)
{
- return GetTarget()->GetRedirectThreatTarget();
+ return GetTarget()->GetRedirectThreatTarget() != nullptr;
}
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
@@ -490,7 +495,7 @@ class spell_hun_misdirection : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_MISDIRECTION_PROC, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_hun_misdirection_AuraScript::OnRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
DoCheckProc += AuraCheckProcFn(spell_hun_misdirection_AuraScript::CheckProc);
@@ -498,7 +503,7 @@ class spell_hun_misdirection : public SpellScriptLoader
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_hun_misdirection_AuraScript();
}
@@ -519,13 +524,13 @@ class spell_hun_misdirection_proc : public SpellScriptLoader
GetTarget()->ResetRedirectThreat();
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_hun_misdirection_proc_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_hun_misdirection_proc_AuraScript();
}
@@ -541,14 +546,14 @@ class spell_hun_pet_carrion_feeder : public SpellScriptLoader
{
PrepareSpellScript(spell_hun_pet_carrion_feeder_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster()->IsPet())
return false;
return true;
}
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_PET_CARRION_FEEDER_TRIGGERED))
return false;
@@ -575,14 +580,14 @@ class spell_hun_pet_carrion_feeder : public SpellScriptLoader
caster->CastSpell(caster, SPELL_HUNTER_PET_CARRION_FEEDER_TRIGGERED, false);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_hun_pet_carrion_feeder_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
OnCheckCast += SpellCheckCastFn(spell_hun_pet_carrion_feeder_SpellScript::CheckIfCorpseNear);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_hun_pet_carrion_feeder_SpellScript();
}
@@ -598,14 +603,14 @@ class spell_hun_pet_heart_of_the_phoenix : public SpellScriptLoader
{
PrepareSpellScript(spell_hun_pet_heart_of_the_phoenix_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster()->IsPet())
return false;
return true;
}
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED) || !sSpellMgr->GetSpellInfo(SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF))
return false;
@@ -623,13 +628,13 @@ class spell_hun_pet_heart_of_the_phoenix : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_hun_pet_heart_of_the_phoenix_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_hun_pet_heart_of_the_phoenix_SpellScript();
}
@@ -645,7 +650,7 @@ class spell_hun_readiness : public SpellScriptLoader
{
PrepareSpellScript(spell_hun_readiness_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -672,13 +677,13 @@ class spell_hun_readiness : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_hun_readiness_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_hun_readiness_SpellScript();
}
@@ -694,7 +699,7 @@ class spell_hun_scatter_shot : public SpellScriptLoader
{
PrepareSpellScript(spell_hun_scatter_shot_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -708,13 +713,13 @@ class spell_hun_scatter_shot : public SpellScriptLoader
caster->SendAttackSwingCancelAttack();
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_hun_scatter_shot_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_hun_scatter_shot_SpellScript();
}
@@ -730,7 +735,7 @@ class spell_hun_sniper_training : public SpellScriptLoader
{
PrepareAuraScript(spell_hun_sniper_training_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_SNIPER_TRAINING_R1) || !sSpellMgr->GetSpellInfo(SPELL_HUNTER_SNIPER_TRAINING_BUFF_R1))
return false;
@@ -744,8 +749,13 @@ class spell_hun_sniper_training : public SpellScriptLoader
{
Unit* target = GetTarget();
uint32 spellId = SPELL_HUNTER_SNIPER_TRAINING_BUFF_R1 + GetId() - SPELL_HUNTER_SNIPER_TRAINING_R1;
- if (!target->HasAura(spellId))
- target->CastSpell(target, spellId, true, 0, aurEff);
+ target->CastSpell(target, spellId, true, 0, aurEff);
+ if (Player* playerTarget = GetUnitOwner()->ToPlayer())
+ {
+ int32 baseAmount = aurEff->GetBaseAmount();
+ int32 amount = playerTarget->CalculateSpellDamage(playerTarget, GetSpellInfo(), aurEff->GetEffIndex(), &baseAmount);
+ GetEffect(EFFECT_0)->SetAmount(amount);
+ }
}
}
@@ -761,14 +771,14 @@ class spell_hun_sniper_training : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_hun_sniper_training_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_hun_sniper_training_AuraScript::HandleUpdatePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_hun_sniper_training_AuraScript();
}
@@ -814,13 +824,13 @@ class spell_hun_tame_beast : public SpellScriptLoader
return SPELL_CAST_OK;
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_hun_tame_beast_SpellScript::CheckCast);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_hun_tame_beast_SpellScript();
}
@@ -845,14 +855,14 @@ class spell_hun_target_only_pet_and_owner : public SpellScriptLoader
targets.push_back(owner);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_hun_target_only_pet_and_owner_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_PARTY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_hun_target_only_pet_and_owner_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_CASTER_AREA_PARTY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_hun_target_only_pet_and_owner_SpellScript();
}
@@ -868,7 +878,7 @@ class spell_hun_viper_attack_speed : public SpellScriptLoader
{
PrepareAuraScript(spell_hun_viper_attack_speed_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_ASPECT_OF_THE_VIPER) ||
!sSpellMgr->GetSpellInfo(SPELL_HUNTER_VICIOUS_VIPER))
@@ -888,14 +898,14 @@ class spell_hun_viper_attack_speed : public SpellScriptLoader
GetTarget()->RemoveAurasDueToSpell(SPELL_HUNTER_VICIOUS_VIPER);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_hun_viper_attack_speed_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_hun_viper_attack_speed_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_hun_viper_attack_speed_AuraScript();
}
diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp
index 837023f3bdd..41239b12921 100644
--- a/src/server/scripts/Spells/spell_item.cpp
+++ b/src/server/scripts/Spells/spell_item.cpp
@@ -47,7 +47,7 @@ class spell_item_trigger_spell : public SpellScriptLoader
public:
spell_item_trigger_spell_SpellScript(uint32 triggeredSpellId) : SpellScript(), _triggeredSpellId(triggeredSpellId) { }
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(_triggeredSpellId))
return false;
@@ -61,13 +61,13 @@ class spell_item_trigger_spell : public SpellScriptLoader
caster->CastSpell(caster, _triggeredSpellId, true, item);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_item_trigger_spell_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_trigger_spell_SpellScript(_triggeredSpellId);
}
@@ -88,7 +88,7 @@ class spell_item_aegis_of_preservation : public SpellScriptLoader
{
PrepareAuraScript(spell_item_aegis_of_preservation_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_AEGIS_HEAL))
return false;
@@ -101,13 +101,13 @@ class spell_item_aegis_of_preservation : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), SPELL_AEGIS_HEAL, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_item_aegis_of_preservation_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_PROC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_item_aegis_of_preservation_AuraScript();
}
@@ -130,13 +130,13 @@ class spell_item_arcane_shroud : public SpellScriptLoader
amount += 2 * diff;
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_item_arcane_shroud_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_THREAT);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_item_arcane_shroud_AuraScript();
}
@@ -157,7 +157,7 @@ class spell_item_blessing_of_ancient_kings : public SpellScriptLoader
{
PrepareAuraScript(spell_item_blessing_of_ancient_kings_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PROTECTION_OF_ANCIENT_KINGS))
return false;
@@ -166,7 +166,7 @@ class spell_item_blessing_of_ancient_kings : public SpellScriptLoader
bool CheckProc(ProcEventInfo& eventInfo)
{
- return eventInfo.GetProcTarget();
+ return eventInfo.GetProcTarget() != nullptr;
}
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
@@ -186,14 +186,14 @@ class spell_item_blessing_of_ancient_kings : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_PROTECTION_OF_ANCIENT_KINGS, SPELLVALUE_BASE_POINT0, absorb, eventInfo.GetProcTarget(), true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_item_blessing_of_ancient_kings_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_item_blessing_of_ancient_kings_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_item_blessing_of_ancient_kings_AuraScript();
}
@@ -220,7 +220,7 @@ class spell_item_defibrillate : public SpellScriptLoader
public:
spell_item_defibrillate_SpellScript(uint8 chance, uint32 failSpell) : SpellScript(), _chance(chance), _failSpell(failSpell) { }
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (_failSpell && !sSpellMgr->GetSpellInfo(_failSpell))
return false;
@@ -237,7 +237,7 @@ class spell_item_defibrillate : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_defibrillate_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_RESURRECT);
}
@@ -247,7 +247,7 @@ class spell_item_defibrillate : public SpellScriptLoader
uint32 _failSpell;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_defibrillate_SpellScript(_chance, _failSpell);
}
@@ -272,7 +272,7 @@ class spell_item_desperate_defense : public SpellScriptLoader
{
PrepareAuraScript(spell_item_desperate_defense_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_DESPERATE_RAGE))
return false;
@@ -285,13 +285,13 @@ class spell_item_desperate_defense : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), SPELL_DESPERATE_RAGE, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_item_desperate_defense_AuraScript::HandleProc, EFFECT_2, SPELL_AURA_PROC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_item_desperate_defense_AuraScript();
}
@@ -317,12 +317,12 @@ class spell_item_deviate_fish : public SpellScriptLoader
{
PrepareSpellScript(spell_item_deviate_fish_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
for (uint32 spellId = SPELL_SLEEPY; spellId <= SPELL_HEALTHY_SPIRIT; ++spellId)
if (!sSpellMgr->GetSpellInfo(spellId))
@@ -337,13 +337,13 @@ class spell_item_deviate_fish : public SpellScriptLoader
caster->CastSpell(caster, spellId, true, NULL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_item_deviate_fish_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_deviate_fish_SpellScript();
}
@@ -371,18 +371,57 @@ class spell_item_echoes_of_light : public SpellScriptLoader
targets.push_back(target);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_item_echoes_of_light_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_echoes_of_light_SpellScript();
}
};
+// 7434 - Fate Rune of Unsurpassed Vigor
+enum FateRuneOfUnsurpassedVigor
+{
+ SPELL_UNSURPASSED_VIGOR = 25733
+};
+
+class spell_item_fate_rune_of_unsurpassed_vigor : public SpellScriptLoader
+{
+ public:
+ spell_item_fate_rune_of_unsurpassed_vigor() : SpellScriptLoader("spell_item_fate_rune_of_unsurpassed_vigor") { }
+
+ class spell_item_fate_rune_of_unsurpassed_vigor_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_item_fate_rune_of_unsurpassed_vigor_AuraScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_UNSURPASSED_VIGOR))
+ return false;
+ return true;
+ }
+
+ void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/)
+ {
+ GetTarget()->CastSpell(GetTarget(), SPELL_UNSURPASSED_VIGOR, true);
+ }
+
+ void Register() override
+ {
+ OnEffectProc += AuraEffectProcFn(spell_item_fate_rune_of_unsurpassed_vigor_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_item_fate_rune_of_unsurpassed_vigor_AuraScript();
+ }
+};
+
// http://www.wowhead.com/item=47499 Flask of the North
// 67019 Flask of the North
enum FlaskOfTheNorthSpells
@@ -401,7 +440,7 @@ class spell_item_flask_of_the_north : public SpellScriptLoader
{
PrepareSpellScript(spell_item_flask_of_the_north_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_FLASK_OF_THE_NORTH_SP) || !sSpellMgr->GetSpellInfo(SPELL_FLASK_OF_THE_NORTH_AP) || !sSpellMgr->GetSpellInfo(SPELL_FLASK_OF_THE_NORTH_STR))
return false;
@@ -441,13 +480,13 @@ class spell_item_flask_of_the_north : public SpellScriptLoader
caster->CastSpell(caster, possibleSpells[irand(0, (possibleSpells.size() - 1))], true, NULL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_item_flask_of_the_north_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_flask_of_the_north_SpellScript();
}
@@ -470,7 +509,7 @@ class spell_item_gnomish_death_ray : public SpellScriptLoader
{
PrepareSpellScript(spell_item_gnomish_death_ray_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_GNOMISH_DEATH_RAY_SELF) || !sSpellMgr->GetSpellInfo(SPELL_GNOMISH_DEATH_RAY_TARGET))
return false;
@@ -489,13 +528,13 @@ class spell_item_gnomish_death_ray : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_gnomish_death_ray_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_gnomish_death_ray_SpellScript();
}
@@ -521,12 +560,12 @@ class spell_item_make_a_wish : public SpellScriptLoader
{
PrepareSpellScript(spell_item_make_a_wish_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MR_PINCHYS_BLESSING) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_MIGHTY_MR_PINCHY) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_FURIOUS_MR_PINCHY) || !sSpellMgr->GetSpellInfo(SPELL_TINY_MAGICAL_CRAWDAD) || !sSpellMgr->GetSpellInfo(SPELL_MR_PINCHYS_GIFT))
return false;
@@ -547,13 +586,13 @@ class spell_item_make_a_wish : public SpellScriptLoader
caster->CastSpell(caster, spellId, true, NULL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_item_make_a_wish_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_make_a_wish_SpellScript();
}
@@ -603,13 +642,13 @@ class spell_item_mingos_fortune_generator : public SpellScriptLoader
CreateItem(effIndex, newitemid);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_item_mingos_fortune_generator_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_mingos_fortune_generator_SpellScript();
}
@@ -630,7 +669,7 @@ class spell_item_necrotic_touch : public SpellScriptLoader
{
PrepareAuraScript(spell_item_necrotic_touch_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ITEM_NECROTIC_TOUCH_PROC))
return false;
@@ -649,14 +688,14 @@ class spell_item_necrotic_touch : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_ITEM_NECROTIC_TOUCH_PROC, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetProcTarget(), true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_item_necrotic_touch_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_item_necrotic_touch_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_item_necrotic_touch_AuraScript();
}
@@ -680,7 +719,7 @@ class spell_item_net_o_matic : public SpellScriptLoader
{
PrepareSpellScript(spell_item_net_o_matic_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_NET_O_MATIC_TRIGGERED1) || !sSpellMgr->GetSpellInfo(SPELL_NET_O_MATIC_TRIGGERED2) || !sSpellMgr->GetSpellInfo(SPELL_NET_O_MATIC_TRIGGERED3))
return false;
@@ -702,13 +741,13 @@ class spell_item_net_o_matic : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_net_o_matic_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_net_o_matic_SpellScript();
}
@@ -732,12 +771,12 @@ class spell_item_noggenfogger_elixir : public SpellScriptLoader
{
PrepareSpellScript(spell_item_noggenfogger_elixir_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_NOGGENFOGGER_ELIXIR_TRIGGERED1) || !sSpellMgr->GetSpellInfo(SPELL_NOGGENFOGGER_ELIXIR_TRIGGERED2) || !sSpellMgr->GetSpellInfo(SPELL_NOGGENFOGGER_ELIXIR_TRIGGERED3))
return false;
@@ -757,13 +796,13 @@ class spell_item_noggenfogger_elixir : public SpellScriptLoader
caster->CastSpell(caster, spellId, true, NULL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_item_noggenfogger_elixir_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_noggenfogger_elixir_SpellScript();
}
@@ -786,13 +825,13 @@ class spell_item_piccolo_of_the_flaming_fire : public SpellScriptLoader
target->HandleEmoteCommand(EMOTE_STATE_DANCE);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_piccolo_of_the_flaming_fire_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_piccolo_of_the_flaming_fire_SpellScript();
}
@@ -817,12 +856,12 @@ class spell_item_savory_deviate_delight : public SpellScriptLoader
{
PrepareSpellScript(spell_item_savory_deviate_delight_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
for (uint32 spellId = SPELL_FLIP_OUT_MALE; spellId <= SPELL_YAAARRRR_FEMALE; ++spellId)
if (!sSpellMgr->GetSpellInfo(spellId))
@@ -844,13 +883,13 @@ class spell_item_savory_deviate_delight : public SpellScriptLoader
caster->CastSpell(caster, spellId, true, NULL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_item_savory_deviate_delight_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_savory_deviate_delight_SpellScript();
}
@@ -878,7 +917,7 @@ class spell_item_scroll_of_recall : public SpellScriptLoader
{
PrepareSpellScript(spell_item_scroll_of_recall_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -917,13 +956,13 @@ class spell_item_scroll_of_recall : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_scroll_of_recall_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_TELEPORT_UNITS);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_scroll_of_recall_SpellScript();
}
@@ -952,19 +991,19 @@ class spell_item_unsated_craving : public SpellScriptLoader
return false;
Unit* target = procInfo.GetActionTarget();
- if (!target || target->GetTypeId() != TYPEID_UNIT || target->GetCreatureType() == CREATURE_TYPE_CRITTER || (target->GetEntry() != NPC_SINDRAGOSA && target->IsSummon()))
+ if (!target || target->GetTypeId() != TYPEID_UNIT || target->IsCritter() || (target->GetEntry() != NPC_SINDRAGOSA && target->IsSummon()))
return false;
return true;
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_item_unsated_craving_AuraScript::CheckProc);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_item_unsated_craving_AuraScript();
}
@@ -989,13 +1028,13 @@ class spell_item_shadows_fate : public SpellScriptLoader
caster->CastSpell(target, SPELL_SOUL_FEAST, TRIGGERED_FULL_MASK);
}
- void Register() OVERRIDE
+ void Register() override
{
OnProc += AuraProcFn(spell_item_shadows_fate_AuraScript::HandleProc);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_item_shadows_fate_AuraScript();
}
@@ -1020,7 +1059,7 @@ class spell_item_shadowmourne : public SpellScriptLoader
{
PrepareAuraScript(spell_item_shadowmourne_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_CHAOS_BANE_DAMAGE))
return false;
@@ -1054,14 +1093,14 @@ class spell_item_shadowmourne : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_item_shadowmourne_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_item_shadowmourne_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_item_shadowmourne_AuraScript();
}
@@ -1077,7 +1116,7 @@ class spell_item_shadowmourne_soul_fragment : public SpellScriptLoader
{
PrepareAuraScript(spell_item_shadowmourne_soul_fragment_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_VISUAL_LOW) || !sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_VISUAL_HIGH) || !sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_CHAOS_BANE_BUFF))
return false;
@@ -1112,14 +1151,14 @@ class spell_item_shadowmourne_soul_fragment : public SpellScriptLoader
target->RemoveAurasDueToSpell(SPELL_SHADOWMOURNE_VISUAL_HIGH);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_item_shadowmourne_soul_fragment_AuraScript::OnStackChange, EFFECT_0, SPELL_AURA_MOD_STAT, AuraEffectHandleModes(AURA_EFFECT_HANDLE_REAL | AURA_EFFECT_HANDLE_REAPPLY));
AfterEffectRemove += AuraEffectRemoveFn(spell_item_shadowmourne_soul_fragment_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_item_shadowmourne_soul_fragment_AuraScript();
}
@@ -1146,7 +1185,7 @@ class spell_item_six_demon_bag : public SpellScriptLoader
{
PrepareSpellScript(spell_item_six_demon_bag_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_FROSTBOLT) || !sSpellMgr->GetSpellInfo(SPELL_POLYMORPH) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_FELHOUND_MINION) || !sSpellMgr->GetSpellInfo(SPELL_FIREBALL) || !sSpellMgr->GetSpellInfo(SPELL_CHAIN_LIGHTNING) || !sSpellMgr->GetSpellInfo(SPELL_ENVELOPING_WINDS))
return false;
@@ -1184,13 +1223,13 @@ class spell_item_six_demon_bag : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_six_demon_bag_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_six_demon_bag_SpellScript();
}
@@ -1213,13 +1252,13 @@ class spell_item_the_eye_of_diminution : public SpellScriptLoader
amount += diff;
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_item_the_eye_of_diminution_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_THREAT);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_item_the_eye_of_diminution_AuraScript();
}
@@ -1243,11 +1282,11 @@ class spell_item_underbelly_elixir : public SpellScriptLoader
{
PrepareSpellScript(spell_item_underbelly_elixir_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_UNDERBELLY_ELIXIR_TRIGGERED1) || !sSpellMgr->GetSpellInfo(SPELL_UNDERBELLY_ELIXIR_TRIGGERED2) || !sSpellMgr->GetSpellInfo(SPELL_UNDERBELLY_ELIXIR_TRIGGERED3))
return false;
@@ -1266,13 +1305,13 @@ class spell_item_underbelly_elixir : public SpellScriptLoader
caster->CastSpell(caster, spellId, true, NULL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_item_underbelly_elixir_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_underbelly_elixir_SpellScript();
}
@@ -1294,7 +1333,7 @@ class spell_item_red_rider_air_rifle : public SpellScriptLoader
{
PrepareSpellScript(spell_item_red_rider_air_rifle_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_AIR_RIFLE_HOLD_VISUAL) || !sSpellMgr->GetSpellInfo(SPELL_AIR_RIFLE_SHOOT) || !sSpellMgr->GetSpellInfo(SPELL_AIR_RIFLE_SHOOT_SELF))
return false;
@@ -1318,13 +1357,13 @@ class spell_item_red_rider_air_rifle : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_red_rider_air_rifle_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_red_rider_air_rifle_SpellScript();
}
@@ -1369,13 +1408,13 @@ class spell_item_create_heart_candy : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_create_heart_candy_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_create_heart_candy_SpellScript();
}
@@ -1390,7 +1429,7 @@ class spell_item_book_of_glyph_mastery : public SpellScriptLoader
{
PrepareSpellScript(spell_item_book_of_glyph_mastery_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -1413,17 +1452,17 @@ class spell_item_book_of_glyph_mastery : public SpellScriptLoader
// learn random explicit discovery recipe (if any)
if (uint32 discoveredSpellId = GetExplicitDiscoverySpell(spellId, caster))
- caster->learnSpell(discoveredSpellId, false);
+ caster->LearnSpell(discoveredSpellId, false);
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_item_book_of_glyph_mastery_SpellScript::CheckRequirement);
OnEffectHitTarget += SpellEffectFn(spell_item_book_of_glyph_mastery_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_book_of_glyph_mastery_SpellScript();
}
@@ -1457,13 +1496,13 @@ class spell_item_gift_of_the_harvester : public SpellScriptLoader
return SPELL_CAST_OK;
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_item_gift_of_the_harvester_SpellScript::CheckRequirement);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_gift_of_the_harvester_SpellScript();
}
@@ -1497,13 +1536,13 @@ class spell_item_map_of_the_geyser_fields : public SpellScriptLoader
return SPELL_FAILED_CUSTOM_ERROR;
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_item_map_of_the_geyser_fields_SpellScript::CheckSinkholes);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_map_of_the_geyser_fields_SpellScript();
}
@@ -1525,7 +1564,7 @@ class spell_item_vanquished_clutches : public SpellScriptLoader
{
PrepareSpellScript(spell_item_vanquished_clutches_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_CRUSHER) || !sSpellMgr->GetSpellInfo(SPELL_CONSTRICTOR) || !sSpellMgr->GetSpellInfo(SPELL_CORRUPTOR))
return false;
@@ -1539,13 +1578,13 @@ class spell_item_vanquished_clutches : public SpellScriptLoader
caster->CastSpell(caster, spellId, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_item_vanquished_clutches_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_vanquished_clutches_SpellScript();
}
@@ -1576,7 +1615,7 @@ class spell_item_ashbringer : public SpellScriptLoader
{
PrepareSpellScript(spell_item_ashbringer_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -1594,13 +1633,13 @@ class spell_item_ashbringer : public SpellScriptLoader
player->PlayDirectSound(sound_id, player);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_item_ashbringer_SpellScript::OnDummyEffect, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_ashbringer_SpellScript();
}
@@ -1652,13 +1691,13 @@ class spell_magic_eater_food : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_magic_eater_food_AuraScript::HandleTriggerSpell, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_magic_eater_food_AuraScript();
}
@@ -1679,13 +1718,13 @@ class spell_item_shimmering_vessel : public SpellScriptLoader
target->setDeathState(JUST_RESPAWNED);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_shimmering_vessel_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_shimmering_vessel_SpellScript();
}
@@ -1706,12 +1745,12 @@ class spell_item_purify_helboar_meat : public SpellScriptLoader
{
PrepareSpellScript(spell_item_purify_helboar_meat_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_PURIFIED_HELBOAR_MEAT) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_TOXIC_HELBOAR_MEAT))
return false;
@@ -1724,13 +1763,13 @@ class spell_item_purify_helboar_meat : public SpellScriptLoader
caster->CastSpell(caster, roll_chance_i(50) ? SPELL_SUMMON_PURIFIED_HELBOAR_MEAT : SPELL_SUMMON_TOXIC_HELBOAR_MEAT, true, NULL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_purify_helboar_meat_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_purify_helboar_meat_SpellScript();
}
@@ -1750,7 +1789,7 @@ class spell_item_crystal_prison_dummy_dnd : public SpellScriptLoader
{
PrepareSpellScript(spell_item_crystal_prison_dummy_dnd_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sObjectMgr->GetGameObjectTemplate(OBJECT_IMPRISONED_DOOMGUARD))
return false;
@@ -1767,13 +1806,13 @@ class spell_item_crystal_prison_dummy_dnd : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_crystal_prison_dummy_dnd_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_crystal_prison_dummy_dnd_SpellScript();
}
@@ -1797,7 +1836,7 @@ class spell_item_reindeer_transformation : public SpellScriptLoader
{
PrepareSpellScript(spell_item_reindeer_transformation_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_FLYING_REINDEER_310) || !sSpellMgr->GetSpellInfo(SPELL_FLYING_REINDEER_280)
|| !sSpellMgr->GetSpellInfo(SPELL_FLYING_REINDEER_60) || !sSpellMgr->GetSpellInfo(SPELL_REINDEER_100)
@@ -1835,13 +1874,13 @@ class spell_item_reindeer_transformation : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_reindeer_transformation_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_reindeer_transformation_SpellScript();
}
@@ -1862,7 +1901,7 @@ class spell_item_nigh_invulnerability : public SpellScriptLoader
{
PrepareSpellScript(spell_item_nigh_invulnerability_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_NIGH_INVULNERABILITY) || !sSpellMgr->GetSpellInfo(SPELL_COMPLETE_VULNERABILITY))
return false;
@@ -1881,13 +1920,13 @@ class spell_item_nigh_invulnerability : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_nigh_invulnerability_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_nigh_invulnerability_SpellScript();
}
@@ -1908,7 +1947,7 @@ class spell_item_poultryizer : public SpellScriptLoader
{
PrepareSpellScript(spell_item_poultryizer_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_POULTRYIZER_SUCCESS) || !sSpellMgr->GetSpellInfo(SPELL_POULTRYIZER_BACKFIRE))
return false;
@@ -1921,13 +1960,13 @@ class spell_item_poultryizer : public SpellScriptLoader
GetCaster()->CastSpell(GetHitUnit(), roll_chance_i(80) ? SPELL_POULTRYIZER_SUCCESS : SPELL_POULTRYIZER_BACKFIRE, true, GetCastItem());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_poultryizer_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_poultryizer_SpellScript();
}
@@ -1948,11 +1987,11 @@ class spell_item_socrethars_stone : public SpellScriptLoader
{
PrepareSpellScript(spell_item_socrethars_stone_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return (GetCaster()->GetAreaId() == 3900 || GetCaster()->GetAreaId() == 3742);
}
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SOCRETHAR_TO_SEAT) || !sSpellMgr->GetSpellInfo(SPELL_SOCRETHAR_FROM_SEAT))
return false;
@@ -1975,13 +2014,13 @@ class spell_item_socrethars_stone : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_socrethars_stone_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_socrethars_stone_SpellScript();
}
@@ -2003,14 +2042,14 @@ class spell_item_demon_broiled_surprise : public SpellScriptLoader
{
PrepareSpellScript(spell_item_demon_broiled_surprise_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_CREATE_DEMON_BROILED_SURPRISE) || !sObjectMgr->GetCreatureTemplate(NPC_ABYSSAL_FLAMEBRINGER) || !sObjectMgr->GetQuestTemplate(QUEST_SUPER_HOT_STEW))
return false;
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -2033,14 +2072,14 @@ class spell_item_demon_broiled_surprise : public SpellScriptLoader
return SPELL_FAILED_NOT_HERE;
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_demon_broiled_surprise_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY);
OnCheckCast += SpellCheckCastFn(spell_item_demon_broiled_surprise_SpellScript::CheckRequirement);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_demon_broiled_surprise_SpellScript();
}
@@ -2060,7 +2099,7 @@ class spell_item_complete_raptor_capture : public SpellScriptLoader
{
PrepareSpellScript(spell_item_complete_raptor_capture_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_RAPTOR_CAPTURE_CREDIT))
return false;
@@ -2079,13 +2118,13 @@ class spell_item_complete_raptor_capture : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_complete_raptor_capture_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_complete_raptor_capture_SpellScript();
}
@@ -2094,7 +2133,7 @@ class spell_item_complete_raptor_capture : public SpellScriptLoader
enum ImpaleLeviroth
{
NPC_LEVIROTH = 26452,
- SPELL_LEVIROTH_SELF_IMPALE = 49882,
+ SPELL_LEVIROTH_SELF_IMPALE = 49882
};
class spell_item_impale_leviroth : public SpellScriptLoader
@@ -2106,27 +2145,30 @@ class spell_item_impale_leviroth : public SpellScriptLoader
{
PrepareSpellScript(spell_item_impale_leviroth_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sObjectMgr->GetCreatureTemplate(NPC_LEVIROTH))
return false;
return true;
}
- void HandleDummy(SpellEffIndex /* effIndex */)
+ void HandleDummy(SpellEffIndex /*effIndex*/)
{
- if (Unit* target = GetHitCreature())
+ if (Creature* target = GetHitCreature())
if (target->GetEntry() == NPC_LEVIROTH && !target->HealthBelowPct(95))
+ {
target->CastSpell(target, SPELL_LEVIROTH_SELF_IMPALE, true);
+ target->ResetPlayerDamageReq();
+ }
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_impale_leviroth_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_impale_leviroth_SpellScript();
}
@@ -2151,7 +2193,7 @@ class spell_item_brewfest_mount_transformation : public SpellScriptLoader
{
PrepareSpellScript(spell_item_brewfest_mount_transformation_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MOUNT_RAM_100) || !sSpellMgr->GetSpellInfo(SPELL_MOUNT_RAM_60) || !sSpellMgr->GetSpellInfo(SPELL_MOUNT_KODO_100) || !sSpellMgr->GetSpellInfo(SPELL_MOUNT_KODO_60))
return false;
@@ -2187,13 +2229,13 @@ class spell_item_brewfest_mount_transformation : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_brewfest_mount_transformation_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_brewfest_mount_transformation_SpellScript();
}
@@ -2214,14 +2256,14 @@ class spell_item_nitro_boots : public SpellScriptLoader
{
PrepareSpellScript(spell_item_nitro_boots_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCastItem())
return false;
return true;
}
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_NITRO_BOOTS_SUCCESS) || !sSpellMgr->GetSpellInfo(SPELL_NITRO_BOOTS_BACKFIRE))
return false;
@@ -2231,16 +2273,17 @@ class spell_item_nitro_boots : public SpellScriptLoader
void HandleDummy(SpellEffIndex /* effIndex */)
{
Unit* caster = GetCaster();
- caster->CastSpell(caster, roll_chance_i(95) ? SPELL_NITRO_BOOTS_SUCCESS : SPELL_NITRO_BOOTS_BACKFIRE, true, GetCastItem());
+ bool success = caster->GetMap()->IsDungeon() || roll_chance_i(95);
+ caster->CastSpell(caster, success ? SPELL_NITRO_BOOTS_SUCCESS : SPELL_NITRO_BOOTS_BACKFIRE, true, GetCastItem());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_nitro_boots_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_nitro_boots_SpellScript();
}
@@ -2261,12 +2304,12 @@ class spell_item_teach_language : public SpellScriptLoader
{
PrepareSpellScript(spell_item_teach_language_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_LEARN_GNOMISH_BINARY) || !sSpellMgr->GetSpellInfo(SPELL_LEARN_GOBLIN_BINARY))
return false;
@@ -2281,13 +2324,13 @@ class spell_item_teach_language : public SpellScriptLoader
caster->CastSpell(caster, caster->GetTeam() == ALLIANCE ? SPELL_LEARN_GNOMISH_BINARY : SPELL_LEARN_GOBLIN_BINARY, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_teach_language_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_teach_language_SpellScript();
}
@@ -2307,12 +2350,12 @@ class spell_item_rocket_boots : public SpellScriptLoader
{
PrepareSpellScript(spell_item_rocket_boots_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ROCKET_BOOTS_PROC))
return false;
@@ -2336,14 +2379,14 @@ class spell_item_rocket_boots : public SpellScriptLoader
return SPELL_CAST_OK;
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_item_rocket_boots_SpellScript::CheckCast);
OnEffectHitTarget += SpellEffectFn(spell_item_rocket_boots_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_rocket_boots_SpellScript();
}
@@ -2364,7 +2407,7 @@ class spell_item_pygmy_oil : public SpellScriptLoader
{
PrepareSpellScript(spell_item_pygmy_oil_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PYGMY_OIL_PYGMY_AURA) || !sSpellMgr->GetSpellInfo(SPELL_PYGMY_OIL_SMALLER_AURA))
return false;
@@ -2389,13 +2432,13 @@ class spell_item_pygmy_oil : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_pygmy_oil_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_pygmy_oil_SpellScript();
}
@@ -2413,16 +2456,16 @@ class spell_item_unusual_compass : public SpellScriptLoader
void HandleDummy(SpellEffIndex /* effIndex */)
{
Unit* caster = GetCaster();
- caster->SetFacingTo(frand(0.0f, 2.0f * M_PI));
+ caster->SetFacingTo(frand(0.0f, 2.0f * float(M_PI)));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_unusual_compass_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_unusual_compass_SpellScript();
}
@@ -2445,12 +2488,12 @@ class spell_item_chicken_cover : public SpellScriptLoader
{
PrepareSpellScript(spell_item_chicken_cover_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_CHICKEN_NET) || !sSpellMgr->GetSpellInfo(SPELL_CAPTURE_CHICKEN_ESCAPE) || !sObjectMgr->GetQuestTemplate(QUEST_CHICKEN_PARTY) || !sObjectMgr->GetQuestTemplate(QUEST_FLOWN_THE_COOP))
return false;
@@ -2470,13 +2513,13 @@ class spell_item_chicken_cover : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_chicken_cover_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_chicken_cover_SpellScript();
}
@@ -2515,13 +2558,13 @@ class spell_item_refocus : public SpellScriptLoader
caster->RemoveSpellCooldown(SPELL_VOLLEY, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_refocus_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_refocus_SpellScript();
}
@@ -2543,13 +2586,13 @@ class spell_item_muisek_vessel : public SpellScriptLoader
target->DespawnOrUnsummon();
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_muisek_vessel_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_muisek_vessel_SpellScript();
}
@@ -2574,13 +2617,13 @@ public:
GetCaster()->CastSpell(GetCaster(), SPELL_FORCE_CAST_SUMMON_GNOME_SOUL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_item_greatmothers_soulcatcher_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_item_greatmothers_soulcatcher_SpellScript();
}
@@ -2606,6 +2649,7 @@ void AddSC_item_spell_scripts()
new spell_item_desperate_defense();
new spell_item_deviate_fish();
new spell_item_echoes_of_light();
+ new spell_item_fate_rune_of_unsurpassed_vigor();
new spell_item_flask_of_the_north();
new spell_item_gnomish_death_ray();
new spell_item_make_a_wish();
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp
index 5f03c64eaf1..a19a24d47e9 100644
--- a/src/server/scripts/Spells/spell_mage.cpp
+++ b/src/server/scripts/Spells/spell_mage.cpp
@@ -53,7 +53,7 @@ enum MageSpells
class spell_mage_incanters_absorbtion_base_AuraScript : public AuraScript
{
public:
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED))
return false;
@@ -84,7 +84,7 @@ class spell_mage_blast_wave : public SpellScriptLoader
{
PrepareSpellScript(spell_mage_blast_wave_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_GLYPH_OF_BLAST_WAVE))
return false;
@@ -97,13 +97,13 @@ class spell_mage_blast_wave : public SpellScriptLoader
PreventHitDefaultEffect(effIndex);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_mage_blast_wave_SpellScript::HandleKnockBack, EFFECT_2, SPELL_EFFECT_KNOCK_BACK);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_mage_blast_wave_SpellScript();
}
@@ -119,7 +119,7 @@ class spell_mage_burnout : public SpellScriptLoader
{
PrepareAuraScript(spell_mage_burnout_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_BURNOUT))
return false;
@@ -128,7 +128,7 @@ class spell_mage_burnout : public SpellScriptLoader
bool CheckProc(ProcEventInfo& eventInfo)
{
- return eventInfo.GetDamageInfo()->GetSpellInfo(); // eventInfo.GetSpellInfo()
+ return eventInfo.GetDamageInfo()->GetSpellInfo() != nullptr;
}
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
@@ -141,14 +141,14 @@ class spell_mage_burnout : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_MAGE_BURNOUT, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_mage_burnout_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_mage_burnout_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_mage_burnout_AuraScript();
}
@@ -164,7 +164,7 @@ class spell_mage_cold_snap : public SpellScriptLoader
{
PrepareSpellScript(spell_mage_cold_snap_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -189,13 +189,13 @@ class spell_mage_cold_snap : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_mage_cold_snap_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_mage_cold_snap_SpellScript();
}
@@ -212,7 +212,7 @@ class spell_mage_fire_frost_ward : public SpellScriptLoader
{
PrepareAuraScript(spell_mage_fire_frost_ward_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_FROST_WARDING_TRIGGERED))
return false;
@@ -254,7 +254,7 @@ class spell_mage_fire_frost_ward : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_fire_frost_ward_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_mage_fire_frost_ward_AuraScript::Absorb, EFFECT_0);
@@ -262,7 +262,7 @@ class spell_mage_fire_frost_ward : public SpellScriptLoader
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_mage_fire_frost_ward_AuraScript();
}
@@ -278,14 +278,14 @@ class spell_mage_focus_magic : public SpellScriptLoader
{
PrepareAuraScript(spell_mage_focus_magic_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_FOCUS_MAGIC_PROC))
return false;
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
_procTarget = NULL;
return true;
@@ -303,7 +303,7 @@ class spell_mage_focus_magic : public SpellScriptLoader
GetTarget()->CastSpell(_procTarget, SPELL_MAGE_FOCUS_MAGIC_PROC, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_mage_focus_magic_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_mage_focus_magic_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_MOD_SPELL_CRIT_CHANCE);
@@ -313,7 +313,7 @@ class spell_mage_focus_magic : public SpellScriptLoader
Unit* _procTarget;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_mage_focus_magic_AuraScript();
}
@@ -349,14 +349,14 @@ class spell_mage_ice_barrier : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_ice_barrier_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
AfterEffectAbsorb += AuraEffectAbsorbFn(spell_mage_ice_barrier_AuraScript::Trigger, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_mage_ice_barrier_AuraScript();
}
@@ -372,7 +372,7 @@ class spell_mage_ignite : public SpellScriptLoader
{
PrepareAuraScript(spell_mage_ignite_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_IGNITE))
return false;
@@ -381,7 +381,7 @@ class spell_mage_ignite : public SpellScriptLoader
bool CheckProc(ProcEventInfo& eventInfo)
{
- return eventInfo.GetProcTarget();
+ return eventInfo.GetProcTarget() != nullptr;
}
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
@@ -396,14 +396,14 @@ class spell_mage_ignite : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_MAGE_IGNITE, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_mage_ignite_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_mage_ignite_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_mage_ignite_AuraScript();
}
@@ -419,7 +419,7 @@ class spell_mage_living_bomb : public SpellScriptLoader
{
PrepareAuraScript(spell_mage_living_bomb_AuraScript);
- bool Validate(SpellInfo const* spell) OVERRIDE
+ bool Validate(SpellInfo const* spell) override
{
if (!sSpellMgr->GetSpellInfo(uint32(spell->Effects[EFFECT_1].CalcValue())))
return false;
@@ -436,13 +436,13 @@ class spell_mage_living_bomb : public SpellScriptLoader
caster->CastSpell(GetTarget(), uint32(aurEff->GetAmount()), true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_mage_living_bomb_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_mage_living_bomb_AuraScript();
}
@@ -473,14 +473,14 @@ class spell_mage_mana_shield : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_mana_shield_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MANA_SHIELD);
AfterEffectManaShield += AuraEffectManaShieldFn(spell_mage_mana_shield_AuraScript::Trigger, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_mage_mana_shield_AuraScript();
}
@@ -496,7 +496,7 @@ class spell_mage_master_of_elements : public SpellScriptLoader
{
PrepareAuraScript(spell_mage_master_of_elements_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE))
return false;
@@ -505,7 +505,7 @@ class spell_mage_master_of_elements : public SpellScriptLoader
bool CheckProc(ProcEventInfo& eventInfo)
{
- return eventInfo.GetDamageInfo()->GetSpellInfo(); // eventInfo.GetSpellInfo()
+ return eventInfo.GetDamageInfo()->GetSpellInfo() != nullptr;
}
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
@@ -519,14 +519,14 @@ class spell_mage_master_of_elements : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_mage_master_of_elements_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_mage_master_of_elements_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_mage_master_of_elements_AuraScript();
}
@@ -550,7 +550,7 @@ class spell_mage_polymorph_cast_visual : public SpellScriptLoader
static const uint32 PolymorhForms[6];
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
// check if spell ids exist in dbc
for (uint32 i = 0; i < 6; ++i)
@@ -566,13 +566,13 @@ class spell_mage_polymorph_cast_visual : public SpellScriptLoader
target->CastSpell(target, PolymorhForms[urand(0, 5)], true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_mage_polymorph_cast_visual_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_mage_polymorph_cast_visual_SpellScript();
}
@@ -598,7 +598,7 @@ class spell_mage_summon_water_elemental : public SpellScriptLoader
{
PrepareSpellScript(spell_mage_summon_water_elemental_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_GLYPH_OF_ETERNAL_WATER) || !sSpellMgr->GetSpellInfo(SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY) || !sSpellMgr->GetSpellInfo(SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT))
return false;
@@ -615,13 +615,13 @@ class spell_mage_summon_water_elemental : public SpellScriptLoader
caster->CastSpell(caster, SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_mage_summon_water_elemental_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_mage_summon_water_elemental_SpellScript();
}
diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp
index 2b1cafbdd26..2d32341757f 100644
--- a/src/server/scripts/Spells/spell_paladin.cpp
+++ b/src/server/scripts/Spells/spell_paladin.cpp
@@ -106,7 +106,7 @@ class spell_pal_ardent_defender : public SpellScriptLoader
PAL_SPELL_ARDENT_DEFENDER_HEAL = 66235,
};
- bool Load() OVERRIDE
+ bool Load() override
{
healPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue();
absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue();
@@ -152,14 +152,14 @@ class spell_pal_ardent_defender : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pal_ardent_defender_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_pal_ardent_defender_AuraScript::Absorb, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pal_ardent_defender_AuraScript();
}
@@ -175,7 +175,7 @@ class spell_pal_aura_mastery : public SpellScriptLoader
{
PrepareAuraScript(spell_pal_aura_mastery_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_AURA_MASTERY_IMMUNE))
return false;
@@ -192,14 +192,14 @@ class spell_pal_aura_mastery : public SpellScriptLoader
GetTarget()->RemoveOwnedAura(SPELL_PALADIN_AURA_MASTERY_IMMUNE, GetCasterGUID());
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_pal_aura_mastery_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_ADD_PCT_MODIFIER, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_pal_aura_mastery_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_ADD_PCT_MODIFIER, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pal_aura_mastery_AuraScript();
}
@@ -215,7 +215,7 @@ class spell_pal_aura_mastery_immune : public SpellScriptLoader
{
PrepareAuraScript(spell_pal_aura_mastery_immune_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_CONCENTRACTION_AURA))
return false;
@@ -227,13 +227,13 @@ class spell_pal_aura_mastery_immune : public SpellScriptLoader
return target->HasAura(SPELL_PALADIN_CONCENTRACTION_AURA, GetCasterGUID());
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_pal_aura_mastery_immune_AuraScript::CheckAreaTarget);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pal_aura_mastery_immune_AuraScript();
}
@@ -249,7 +249,7 @@ class spell_pal_avenging_wrath : public SpellScriptLoader
{
PrepareAuraScript(spell_pal_avenging_wrath_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_SANCTIFIED_WRATH)
|| !sSpellMgr->GetSpellInfo(SPELL_PALADIN_SANCTIFIED_WRATH_TALENT_R1))
@@ -272,14 +272,14 @@ class spell_pal_avenging_wrath : public SpellScriptLoader
GetTarget()->RemoveAurasDueToSpell(SPELL_PALADIN_SANCTIFIED_WRATH);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_pal_avenging_wrath_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_pal_avenging_wrath_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pal_avenging_wrath_AuraScript();
}
@@ -295,7 +295,7 @@ class spell_pal_blessing_of_faith : public SpellScriptLoader
{
PrepareSpellScript(spell_pal_blessing_of_faith_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_LOWER_CITY_DRUID) || !sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_LOWER_CITY_PALADIN) || !sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_LOWER_CITY_PRIEST) || !sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_LOWER_CITY_SHAMAN))
return false;
@@ -329,13 +329,13 @@ class spell_pal_blessing_of_faith : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_pal_blessing_of_faith_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pal_blessing_of_faith_SpellScript();
}
@@ -352,7 +352,7 @@ class spell_pal_blessing_of_sanctuary : public SpellScriptLoader
{
PrepareAuraScript(spell_pal_blessing_of_sanctuary_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_SANCTUARY_BUFF))
return false;
@@ -385,7 +385,7 @@ class spell_pal_blessing_of_sanctuary : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_BLESSING_OF_SANCTUARY_ENERGIZE, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_pal_blessing_of_sanctuary_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
AfterEffectRemove += AuraEffectRemoveFn(spell_pal_blessing_of_sanctuary_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
@@ -394,7 +394,7 @@ class spell_pal_blessing_of_sanctuary : public SpellScriptLoader
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pal_blessing_of_sanctuary_AuraScript();
}
@@ -413,7 +413,7 @@ class spell_pal_divine_sacrifice : public SpellScriptLoader
uint32 groupSize, minHpPct;
int32 remainingAmount;
- bool Load() OVERRIDE
+ bool Load() override
{
if (Unit* caster = GetCaster())
{
@@ -443,13 +443,13 @@ class spell_pal_divine_sacrifice : public SpellScriptLoader
caster->RemoveAura(SPELL_PALADIN_DIVINE_SACRIFICE);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectSplit += AuraEffectSplitFn(spell_pal_divine_sacrifice_AuraScript::Split, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pal_divine_sacrifice_AuraScript();
}
@@ -467,14 +467,14 @@ class spell_pal_divine_storm : public SpellScriptLoader
uint32 healPct;
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_DIVINE_STORM_DUMMY))
return false;
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
healPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue(GetCaster());
return true;
@@ -486,13 +486,13 @@ class spell_pal_divine_storm : public SpellScriptLoader
caster->CastCustomSpell(SPELL_PALADIN_DIVINE_STORM_DUMMY, SPELLVALUE_BASE_POINT0, (GetHitDamage() * healPct) / 100, caster, true);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterHit += SpellHitFn(spell_pal_divine_storm_SpellScript::TriggerHeal);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pal_divine_storm_SpellScript();
}
@@ -508,7 +508,7 @@ class spell_pal_divine_storm_dummy : public SpellScriptLoader
{
PrepareSpellScript(spell_pal_divine_storm_dummy_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_DIVINE_STORM_HEAL))
return false;
@@ -531,14 +531,14 @@ class spell_pal_divine_storm_dummy : public SpellScriptLoader
private:
uint32 _targetCount;
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_pal_divine_storm_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pal_divine_storm_dummy_SpellScript::CountTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_RAID);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pal_divine_storm_dummy_SpellScript();
}
@@ -568,13 +568,13 @@ class spell_pal_exorcism_and_holy_wrath_damage : public SpellScriptLoader
spellMod->value = aurEff->GetAmount();
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_pal_exorcism_and_holy_wrath_damage_AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pal_exorcism_and_holy_wrath_damage_AuraScript();
}
@@ -590,7 +590,7 @@ class spell_pal_eye_for_an_eye : public SpellScriptLoader
{
PrepareAuraScript(spell_pal_eye_for_an_eye_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_EYE_FOR_AN_EYE_DAMAGE))
return false;
@@ -605,13 +605,13 @@ class spell_pal_eye_for_an_eye : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_PALADIN_EYE_FOR_AN_EYE_DAMAGE, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetProcTarget(), true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_pal_eye_for_an_eye_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pal_eye_for_an_eye_AuraScript();
}
@@ -638,13 +638,13 @@ class spell_pal_glyph_of_holy_light : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pal_glyph_of_holy_light_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pal_glyph_of_holy_light_SpellScript();
}
@@ -660,7 +660,7 @@ class spell_pal_guarded_by_the_light : public SpellScriptLoader
{
PrepareSpellScript(spell_pal_guarded_by_the_light_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_DIVINE_PLEA))
return false;
@@ -674,13 +674,13 @@ class spell_pal_guarded_by_the_light : public SpellScriptLoader
aura->RefreshDuration();
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_pal_guarded_by_the_light_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pal_guarded_by_the_light_SpellScript();
}
@@ -698,7 +698,7 @@ class spell_pal_hand_of_sacrifice : public SpellScriptLoader
int32 remainingAmount;
- bool Load() OVERRIDE
+ bool Load() override
{
if (Unit* caster = GetCaster())
{
@@ -718,13 +718,13 @@ class spell_pal_hand_of_sacrifice : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectSplit += AuraEffectSplitFn(spell_pal_hand_of_sacrifice_AuraScript::Split, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pal_hand_of_sacrifice_AuraScript();
}
@@ -751,13 +751,13 @@ class spell_pal_hand_of_salvation : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pal_hand_of_salvation_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pal_hand_of_salvation_AuraScript();
}
@@ -773,7 +773,7 @@ class spell_pal_holy_shock : public SpellScriptLoader
{
PrepareSpellScript(spell_pal_holy_shock_SpellScript);
- bool Validate(SpellInfo const* spellInfo) OVERRIDE
+ bool Validate(SpellInfo const* spellInfo) override
{
SpellInfo const* firstRankSpellInfo = sSpellMgr->GetSpellInfo(SPELL_PALADIN_HOLY_SHOCK_R1);
if (!firstRankSpellInfo)
@@ -822,14 +822,14 @@ class spell_pal_holy_shock : public SpellScriptLoader
return SPELL_CAST_OK;
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_pal_holy_shock_SpellScript::CheckCast);
OnEffectHitTarget += SpellEffectFn(spell_pal_holy_shock_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pal_holy_shock_SpellScript();
}
@@ -854,7 +854,7 @@ class spell_pal_improved_aura : public SpellScriptLoader
public:
spell_pal_improved_aura_AuraScript(uint32 spellId) : AuraScript(), _spellId(spellId) { }
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(_spellId)
|| !sSpellMgr->GetSpellInfo(SPELL_PALADIN_SANCTIFIED_RETRIBUTION_R1)
@@ -866,8 +866,8 @@ class spell_pal_improved_aura : public SpellScriptLoader
void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
Unit* target = GetTarget();
- if (!target->GetOwnedAura(_spellId))
- target->CastSpell(target, _spellId, true);
+ GetTarget()->RemoveOwnedAura(_spellId, GetCasterGUID()); // need to remove to reapply spellmods
+ target->CastSpell(target, _spellId, true);
}
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -881,7 +881,7 @@ class spell_pal_improved_aura : public SpellScriptLoader
GetTarget()->RemoveOwnedAura(_spellId, GetCasterGUID());
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_pal_improved_aura_AuraScript::HandleEffectApply, EFFECT_FIRST_FOUND, SPELL_AURA_ADD_FLAT_MODIFIER, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_pal_improved_aura_AuraScript::HandleEffectRemove, EFFECT_FIRST_FOUND, SPELL_AURA_ADD_FLAT_MODIFIER, AURA_EFFECT_HANDLE_REAL);
@@ -891,7 +891,7 @@ class spell_pal_improved_aura : public SpellScriptLoader
uint32 _spellId;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pal_improved_aura_AuraScript(_spellId);
}
@@ -930,13 +930,13 @@ class spell_pal_improved_aura_effect : public SpellScriptLoader
return false;
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_pal_improved_aura_effect_AuraScript::CheckAreaTarget);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pal_improved_aura_effect_AuraScript();
}
@@ -952,7 +952,7 @@ class spell_pal_item_healing_discount : public SpellScriptLoader
{
PrepareAuraScript(spell_pal_item_healing_discount_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_ITEM_HEALING_TRANCE))
return false;
@@ -965,13 +965,13 @@ class spell_pal_item_healing_discount : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_ITEM_HEALING_TRANCE, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_pal_item_healing_discount_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pal_item_healing_discount_AuraScript();
}
@@ -992,7 +992,7 @@ class spell_pal_judgement : public SpellScriptLoader
public:
spell_pal_judgement_SpellScript(uint32 spellId) : SpellScript(), _spellId(spellId) { }
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_JUDGEMENT_DAMAGE)
|| !sSpellMgr->GetSpellInfo(_spellId))
@@ -1020,7 +1020,7 @@ class spell_pal_judgement : public SpellScriptLoader
GetCaster()->CastSpell(GetHitUnit(), spellId2, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_pal_judgement_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
@@ -1029,7 +1029,7 @@ class spell_pal_judgement : public SpellScriptLoader
uint32 const _spellId;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pal_judgement_SpellScript(_spellId);
}
@@ -1055,13 +1055,13 @@ class spell_pal_judgement_of_command : public SpellScriptLoader
GetCaster()->CastSpell(unitTarget, spell_proto, true, NULL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_pal_judgement_of_command_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pal_judgement_of_command_SpellScript();
}
@@ -1077,7 +1077,7 @@ class spell_pal_lay_on_hands : public SpellScriptLoader
{
PrepareSpellScript(spell_pal_lay_on_hands_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_FORBEARANCE))
return false;
@@ -1110,14 +1110,14 @@ class spell_pal_lay_on_hands : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_pal_lay_on_hands_SpellScript::CheckCast);
AfterHit += SpellHitFn(spell_pal_lay_on_hands_SpellScript::HandleScript);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pal_lay_on_hands_SpellScript();
}
@@ -1133,7 +1133,7 @@ class spell_pal_righteous_defense : public SpellScriptLoader
{
PrepareSpellScript(spell_pal_righteous_defense_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_RIGHTEOUS_DEFENSE_TAUNT))
return false;
@@ -1169,7 +1169,7 @@ class spell_pal_righteous_defense : public SpellScriptLoader
GetCaster()->CastSpell(target, SPELL_PALADIN_RIGHTEOUS_DEFENSE_TAUNT, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_pal_righteous_defense_SpellScript::CheckCast);
//! WORKAROUND
@@ -1181,7 +1181,7 @@ class spell_pal_righteous_defense : public SpellScriptLoader
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pal_righteous_defense_SpellScript();
}
@@ -1211,21 +1211,21 @@ class spell_pal_sacred_shield : public SpellScriptLoader
amount += int32(bonus);
// Arena - Dampening
- if (AuraEffect const* dampening = caster->GetAuraEffect(SPELL_GENERIC_ARENA_DAMPENING, EFFECT_0))
- AddPct(amount, dampening->GetAmount());
+ if (AuraEffect const* auraEffArenaDampening = caster->GetAuraEffect(SPELL_GENERIC_ARENA_DAMPENING, EFFECT_0))
+ AddPct(amount, auraEffArenaDampening->GetAmount());
// Battleground - Dampening
- else if (AuraEffect const* dampening = caster->GetAuraEffect(SPELL_GENERIC_BATTLEGROUND_DAMPENING, EFFECT_0))
- AddPct(amount, dampening->GetAmount());
+ else if (AuraEffect const* auraEffBattlegroudDampening = caster->GetAuraEffect(SPELL_GENERIC_BATTLEGROUND_DAMPENING, EFFECT_0))
+ AddPct(amount, auraEffBattlegroudDampening->GetAmount());
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pal_sacred_shield_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pal_sacred_shield_AuraScript();
}
@@ -1241,7 +1241,7 @@ class spell_pal_seal_of_righteousness : public SpellScriptLoader
{
PrepareAuraScript(spell_pal_seal_of_righteousness_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS))
return false;
@@ -1250,7 +1250,7 @@ class spell_pal_seal_of_righteousness : public SpellScriptLoader
bool CheckProc(ProcEventInfo& eventInfo)
{
- return eventInfo.GetProcTarget();
+ return eventInfo.GetProcTarget() != nullptr;
}
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
@@ -1264,14 +1264,14 @@ class spell_pal_seal_of_righteousness : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetProcTarget(), true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_pal_seal_of_righteousness_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_pal_seal_of_righteousness_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pal_seal_of_righteousness_AuraScript();
}
diff --git a/src/server/scripts/Spells/spell_pet.cpp b/src/server/scripts/Spells/spell_pet.cpp
index 491bb7100b2..775f9f505f9 100644
--- a/src/server/scripts/Spells/spell_pet.cpp
+++ b/src/server/scripts/Spells/spell_pet.cpp
@@ -95,7 +95,7 @@ class spell_gen_pet_calculate : public SpellScriptLoader
{
PrepareAuraScript(spell_gen_pet_calculate_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -185,7 +185,7 @@ class spell_gen_pet_calculate : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
switch (m_scriptSpellId)
{
@@ -214,7 +214,7 @@ class spell_gen_pet_calculate : public SpellScriptLoader
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_gen_pet_calculate_AuraScript();
}
@@ -229,7 +229,7 @@ public:
{
PrepareAuraScript(spell_warl_pet_scaling_01_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -338,7 +338,7 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectRemove += AuraEffectRemoveFn(spell_warl_pet_scaling_01_AuraScript::RemoveEffect, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
AfterEffectApply += AuraEffectApplyFn(spell_warl_pet_scaling_01_AuraScript::ApplyEffect, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
@@ -351,7 +351,7 @@ public:
uint32 _tempBonus;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warl_pet_scaling_01_AuraScript();
}
@@ -366,7 +366,7 @@ public:
{
PrepareAuraScript(spell_warl_pet_scaling_02_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -451,7 +451,7 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectRemove += AuraEffectRemoveFn(spell_warl_pet_scaling_02_AuraScript::RemoveEffect, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
AfterEffectApply += AuraEffectApplyFn(spell_warl_pet_scaling_02_AuraScript::ApplyEffect, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
@@ -464,7 +464,7 @@ public:
uint32 _tempBonus;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warl_pet_scaling_02_AuraScript();
}
@@ -479,7 +479,7 @@ public:
{
PrepareAuraScript(spell_warl_pet_scaling_03_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -522,7 +522,7 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_03_AuraScript::CalculateFrostResistanceAmount, EFFECT_0, SPELL_AURA_MOD_RESISTANCE);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_03_AuraScript::CalculateArcaneResistanceAmount, EFFECT_1, SPELL_AURA_MOD_RESISTANCE);
@@ -530,7 +530,7 @@ public:
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warl_pet_scaling_03_AuraScript();
}
@@ -546,7 +546,7 @@ public:
{
PrepareAuraScript(spell_warl_pet_scaling_04_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -565,13 +565,13 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_04_AuraScript::CalculateShadowResistanceAmount, EFFECT_0, SPELL_AURA_MOD_RESISTANCE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warl_pet_scaling_04_AuraScript();
}
@@ -586,7 +586,7 @@ public:
{
PrepareAuraScript(spell_warl_pet_scaling_05_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -638,7 +638,7 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_05_AuraScript::CalculateAmountMeleeHit, EFFECT_0, SPELL_AURA_MOD_HIT_CHANCE);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_05_AuraScript::CalculateAmountSpellHit, EFFECT_1, SPELL_AURA_MOD_SPELL_HIT_CHANCE);
@@ -646,7 +646,7 @@ public:
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warl_pet_scaling_05_AuraScript();
}
@@ -661,7 +661,7 @@ public:
{
PrepareAuraScript(spell_warl_pet_passive_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -712,14 +712,14 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_passive_AuraScript::CalculateAmountCritSpell, EFFECT_0, SPELL_AURA_MOD_SPELL_CRIT_CHANCE);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_passive_AuraScript::CalculateAmountCritMelee, EFFECT_1, SPELL_AURA_MOD_WEAPON_CRIT_PERCENT);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warl_pet_passive_AuraScript();
}
@@ -734,7 +734,7 @@ public:
{
PrepareAuraScript(spell_warl_pet_passive_damage_done_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -763,14 +763,14 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_passive_damage_done_AuraScript::CalculateAmountDamageDone, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_passive_damage_done_AuraScript::CalculateAmountDamageDone, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warl_pet_passive_damage_done_AuraScript();
}
@@ -785,7 +785,7 @@ public:
{
PrepareAuraScript(spell_warl_pet_passive_voidwalker_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -801,13 +801,13 @@ public:
amount += /* aurEff */ect->GetAmount();
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_passive_voidwalker_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warl_pet_passive_voidwalker_AuraScript();
}
@@ -823,7 +823,7 @@ public:
{
PrepareAuraScript(spell_sha_pet_scaling_04_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -860,14 +860,14 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_sha_pet_scaling_04_AuraScript::CalculateAmountMeleeHit, EFFECT_0, SPELL_AURA_MOD_HIT_CHANCE);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_sha_pet_scaling_04_AuraScript::CalculateAmountSpellHit, EFFECT_1, SPELL_AURA_MOD_SPELL_HIT_CHANCE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_sha_pet_scaling_04_AuraScript();
}
@@ -980,7 +980,7 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectRemove += AuraEffectRemoveFn(spell_hun_pet_scaling_01_AuraScript::RemoveEffect, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
AfterEffectApply += AuraEffectApplyFn(spell_hun_pet_scaling_01_AuraScript::ApplyEffect, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
@@ -993,7 +993,7 @@ public:
uint32 _tempHealth;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_hun_pet_scaling_01_AuraScript();
}
@@ -1008,7 +1008,7 @@ public:
{
PrepareAuraScript(spell_hun_pet_scaling_02_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -1072,7 +1072,7 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_02_AuraScript::CalculateFrostResistanceAmount, EFFECT_1, SPELL_AURA_MOD_RESISTANCE);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_02_AuraScript::CalculateFireResistanceAmount, EFFECT_0, SPELL_AURA_MOD_RESISTANCE);
@@ -1080,7 +1080,7 @@ public:
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_hun_pet_scaling_02_AuraScript();
}
@@ -1095,7 +1095,7 @@ public:
{
PrepareAuraScript(spell_hun_pet_scaling_03_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -1159,7 +1159,7 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_03_AuraScript::CalculateShadowResistanceAmount, EFFECT_0, SPELL_AURA_MOD_RESISTANCE);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_03_AuraScript::CalculateArcaneResistanceAmount, EFFECT_1, SPELL_AURA_MOD_RESISTANCE);
@@ -1167,7 +1167,7 @@ public:
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_hun_pet_scaling_03_AuraScript();
}
@@ -1182,7 +1182,7 @@ public:
{
PrepareAuraScript(spell_hun_pet_scaling_04_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -1240,7 +1240,7 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_04_AuraScript::CalculateAmountMeleeHit, EFFECT_0, SPELL_AURA_MOD_HIT_CHANCE);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_04_AuraScript::CalculateAmountSpellHit, EFFECT_1, SPELL_AURA_MOD_SPELL_HIT_CHANCE);
@@ -1248,7 +1248,7 @@ public:
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_hun_pet_scaling_04_AuraScript();
}
@@ -1263,7 +1263,7 @@ public:
{
PrepareAuraScript(spell_hun_pet_passive_crit_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -1312,14 +1312,14 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_passive_crit_AuraScript::CalculateAmountCritSpell, EFFECT_1, SPELL_AURA_MOD_SPELL_CRIT_CHANCE);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_passive_crit_AuraScript::CalculateAmountCritMelee, EFFECT_0, SPELL_AURA_MOD_WEAPON_CRIT_PERCENT);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_hun_pet_passive_crit_AuraScript();
}
@@ -1334,7 +1334,7 @@ public:
{
PrepareAuraScript(spell_hun_pet_passive_damage_done_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -1371,13 +1371,13 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_passive_damage_done_AuraScript::CalculateAmountDamageDone, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_hun_pet_passive_damage_done_AuraScript();
}
@@ -1392,7 +1392,7 @@ public:
{
PrepareAuraScript(spell_hun_animal_handler_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -1412,13 +1412,13 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_animal_handler_AuraScript::CalculateAmountDamageDone, EFFECT_0, SPELL_AURA_MOD_ATTACK_POWER_PCT);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_hun_animal_handler_AuraScript();
}
@@ -1434,7 +1434,7 @@ public:
{
PrepareAuraScript(spell_dk_avoidance_passive_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -1457,13 +1457,13 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_avoidance_passive_AuraScript::CalculateAvoidanceAmount, EFFECT_0, SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dk_avoidance_passive_AuraScript();
}
@@ -1478,7 +1478,7 @@ public:
{
PrepareAuraScript(spell_dk_pet_scaling_01_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -1554,7 +1554,7 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectRemove += AuraEffectRemoveFn(spell_dk_pet_scaling_01_AuraScript::RemoveEffect, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
AfterEffectApply += AuraEffectApplyFn(spell_dk_pet_scaling_01_AuraScript::ApplyEffect, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
@@ -1566,7 +1566,7 @@ public:
uint32 _tempHealth;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dk_pet_scaling_01_AuraScript();
}
@@ -1581,7 +1581,7 @@ public:
{
PrepareAuraScript(spell_dk_pet_scaling_02_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -1603,13 +1603,13 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_pet_scaling_02_AuraScript::CalculateAmountMeleeHaste, EFFECT_1, SPELL_AURA_MELEE_SLOW);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dk_pet_scaling_02_AuraScript();
}
@@ -1624,7 +1624,7 @@ public:
{
PrepareAuraScript(spell_dk_pet_scaling_03_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -1665,14 +1665,14 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_pet_scaling_03_AuraScript::CalculateAmountMeleeHit, EFFECT_0, SPELL_AURA_MOD_HIT_CHANCE);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_pet_scaling_03_AuraScript::CalculateAmountSpellHit, EFFECT_1, SPELL_AURA_MOD_SPELL_HIT_CHANCE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dk_pet_scaling_03_AuraScript();
}
@@ -1687,7 +1687,7 @@ public:
{
PrepareAuraScript(spell_dk_rune_weapon_scaling_02_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
return false;
@@ -1724,14 +1724,14 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_rune_weapon_scaling_02_AuraScript::CalculateDamageDoneAmount, EFFECT_0, SPELL_AURA_MOD_DAMAGE_DONE);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_rune_weapon_scaling_02_AuraScript::CalculateAmountMeleeHaste, EFFECT_1, SPELL_AURA_MELEE_SLOW);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_dk_rune_weapon_scaling_02_AuraScript();
}
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index f12a57aa2ec..a128c30ad50 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -98,7 +98,7 @@ class spell_pri_circle_of_healing : public SpellScriptLoader
{
PrepareSpellScript(spell_pri_circle_of_healing_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_GLYPH_OF_CIRCLE_OF_HEALING))
return false;
@@ -118,13 +118,13 @@ class spell_pri_circle_of_healing : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_circle_of_healing_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pri_circle_of_healing_SpellScript();
}
@@ -140,7 +140,7 @@ class spell_pri_divine_aegis : public SpellScriptLoader
{
PrepareAuraScript(spell_pri_divine_aegis_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_DIVINE_AEGIS))
return false;
@@ -149,7 +149,7 @@ class spell_pri_divine_aegis : public SpellScriptLoader
bool CheckProc(ProcEventInfo& eventInfo)
{
- return eventInfo.GetProcTarget();
+ return eventInfo.GetProcTarget() != nullptr;
}
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
@@ -167,14 +167,14 @@ class spell_pri_divine_aegis : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_PRIEST_DIVINE_AEGIS, SPELLVALUE_BASE_POINT0, absorb, eventInfo.GetProcTarget(), true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_pri_divine_aegis_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_pri_divine_aegis_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pri_divine_aegis_AuraScript();
}
@@ -203,13 +203,13 @@ class spell_pri_divine_hymn : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_divine_hymn_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_divine_hymn_SpellScript::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ALLY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pri_divine_hymn_SpellScript();
}
@@ -225,7 +225,7 @@ class spell_pri_glyph_of_prayer_of_healing : public SpellScriptLoader
{
PrepareAuraScript(spell_pri_glyph_of_prayer_of_healing_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL))
return false;
@@ -241,13 +241,13 @@ class spell_pri_glyph_of_prayer_of_healing : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL, SPELLVALUE_BASE_POINT0, heal, eventInfo.GetProcTarget(), true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_pri_glyph_of_prayer_of_healing_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pri_glyph_of_prayer_of_healing_AuraScript();
}
@@ -265,14 +265,14 @@ class spell_pri_guardian_spirit : public SpellScriptLoader
uint32 healPct;
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL))
return false;
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
healPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue();
return true;
@@ -297,14 +297,14 @@ class spell_pri_guardian_spirit : public SpellScriptLoader
absorbAmount = dmgInfo.GetDamage();
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pri_guardian_spirit_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_pri_guardian_spirit_AuraScript::Absorb, EFFECT_1);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pri_guardian_spirit_AuraScript();
}
@@ -334,13 +334,13 @@ class spell_pri_hymn_of_hope : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_hymn_of_hope_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_hymn_of_hope_SpellScript::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ALLY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pri_hymn_of_hope_SpellScript();
}
@@ -356,7 +356,7 @@ class spell_pri_item_greater_heal_refund : public SpellScriptLoader
{
PrepareAuraScript(spell_pri_item_greater_heal_refund_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_ITEM_EFFICIENCY))
return false;
@@ -369,13 +369,13 @@ class spell_pri_item_greater_heal_refund : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), SPELL_PRIEST_ITEM_EFFICIENCY, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_pri_item_greater_heal_refund_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pri_item_greater_heal_refund_AuraScript();
}
@@ -401,13 +401,13 @@ class spell_pri_lightwell_renew : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pri_lightwell_renew_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pri_lightwell_renew_AuraScript();
}
@@ -429,13 +429,13 @@ class spell_pri_mana_burn : public SpellScriptLoader
unitTarget->RemoveAurasWithMechanic((1 << MECHANIC_FEAR) | (1 << MECHANIC_POLYMORPH));
}
- void Register() OVERRIDE
+ void Register() override
{
AfterHit += SpellHitFn(spell_pri_mana_burn_SpellScript::HandleAfterHit);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pri_mana_burn_SpellScript;
}
@@ -451,14 +451,14 @@ class spell_pri_mana_leech : public SpellScriptLoader
{
PrepareAuraScript(spell_pri_mana_leech_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_MANA_LEECH_PROC))
return false;
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
_procTarget = NULL;
return true;
@@ -467,7 +467,7 @@ class spell_pri_mana_leech : public SpellScriptLoader
bool CheckProc(ProcEventInfo& /*eventInfo*/)
{
_procTarget = GetTarget()->GetOwner();
- return _procTarget;
+ return _procTarget != nullptr;
}
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
@@ -476,7 +476,7 @@ class spell_pri_mana_leech : public SpellScriptLoader
GetTarget()->CastSpell(_procTarget, SPELL_PRIEST_MANA_LEECH_PROC, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_pri_mana_leech_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_pri_mana_leech_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
@@ -486,7 +486,7 @@ class spell_pri_mana_leech : public SpellScriptLoader
Unit* _procTarget;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pri_mana_leech_AuraScript();
}
@@ -507,13 +507,13 @@ class spell_pri_mind_sear : public SpellScriptLoader
unitList.remove_if(Trinity::ObjectGUIDCheck(GetCaster()->GetUInt64Value(UNIT_FIELD_CHANNEL_OBJECT)));
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_mind_sear_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pri_mind_sear_SpellScript();
}
@@ -531,19 +531,26 @@ class spell_pri_pain_and_suffering_proc : public SpellScriptLoader
void HandleEffectScriptEffect(SpellEffIndex /*effIndex*/)
{
+ Unit* caster = GetCaster();
// Refresh Shadow Word: Pain on target
- if (Unit* unitTarget = GetHitUnit())
- if (AuraEffect* aur = unitTarget->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_PRIEST, 0x8000, 0, 0, GetCaster()->GetGUID()))
+ if (Unit* target = GetHitUnit())
+ if (AuraEffect* aur = target->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_PRIEST, 0x8000, 0, 0, caster->GetGUID()))
+ {
+ uint32 damage = std::max(aur->GetAmount(), 0);
+ sScriptMgr->ModifyPeriodicDamageAurasTick(target, caster, damage);
+ aur->SetDamage(caster->SpellDamageBonusDone(target, aur->GetSpellInfo(), damage, DOT) * aur->GetDonePct());
+ aur->CalculatePeriodic(caster, false, false);
aur->GetBase()->RefreshDuration();
+ }
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_pri_pain_and_suffering_proc_SpellScript::HandleEffectScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pri_pain_and_suffering_proc_SpellScript;
}
@@ -559,12 +566,12 @@ class spell_pri_penance : public SpellScriptLoader
{
PrepareSpellScript(spell_pri_penance_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* spellInfo) OVERRIDE
+ bool Validate(SpellInfo const* spellInfo) override
{
SpellInfo const* firstRankSpellInfo = sSpellMgr->GetSpellInfo(SPELL_PRIEST_PENANCE_R1);
if (!firstRankSpellInfo)
@@ -609,14 +616,14 @@ class spell_pri_penance : public SpellScriptLoader
return SPELL_CAST_OK;
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_pri_penance_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
OnCheckCast += SpellCheckCastFn(spell_pri_penance_SpellScript::CheckCast);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pri_penance_SpellScript;
}
@@ -632,7 +639,7 @@ class spell_pri_power_word_shield : public SpellScriptLoader
{
PrepareAuraScript(spell_pri_power_word_shield_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED))
return false;
@@ -684,14 +691,14 @@ class spell_pri_power_word_shield : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pri_power_word_shield_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
AfterEffectAbsorb += AuraEffectAbsorbFn(spell_pri_power_word_shield_AuraScript::ReflectDamage, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pri_power_word_shield_AuraScript();
}
@@ -720,13 +727,13 @@ class spell_pri_prayer_of_mending_heal : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_pri_prayer_of_mending_heal_SpellScript::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pri_prayer_of_mending_heal_SpellScript();
}
@@ -742,7 +749,7 @@ class spell_pri_renew : public SpellScriptLoader
{
PrepareAuraScript(spell_pri_renew_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -763,13 +770,13 @@ class spell_pri_renew : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_pri_renew_AuraScript::HandleApplyEffect, EFFECT_0, SPELL_AURA_PERIODIC_HEAL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pri_renew_AuraScript();
}
@@ -793,16 +800,16 @@ class spell_pri_shadow_word_death : public SpellScriptLoader
if (AuraEffect* aurEff = GetCaster()->GetDummyAuraEffect(SPELLFAMILY_PRIEST, PRIEST_ICON_ID_PAIN_AND_SUFFERING, EFFECT_1))
AddPct(damage, aurEff->GetAmount());
- GetCaster()->CastCustomSpell(GetCaster(), SPELL_PRIEST_SHADOW_WORD_DEATH, &damage, 0, 0, true);
+ GetCaster()->CastCustomSpell(GetCaster(), SPELL_PRIEST_SHADOW_WORD_DEATH, &damage, nullptr, nullptr, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnHit += SpellHitFn(spell_pri_shadow_word_death_SpellScript::HandleDamage);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_pri_shadow_word_death_SpellScript();
}
@@ -818,7 +825,7 @@ class spell_pri_vampiric_touch : public SpellScriptLoader
{
PrepareAuraScript(spell_pri_vampiric_touch_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL))
return false;
@@ -837,13 +844,13 @@ class spell_pri_vampiric_touch : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
AfterDispel += AuraDispelFn(spell_pri_vampiric_touch_AuraScript::HandleDispel);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_pri_vampiric_touch_AuraScript();
}
diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp
index b9fd07293cd..173e03fef7c 100644
--- a/src/server/scripts/Spells/spell_quest.cpp
+++ b/src/server/scripts/Spells/spell_quest.cpp
@@ -61,7 +61,7 @@ class spell_generic_quest_update_entry_SpellScript : public SpellScript
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_generic_quest_update_entry_SpellScript::HandleDummy, _effIndex, _spellEffect);
}
@@ -80,7 +80,7 @@ class spell_q55_sacred_cleansing : public SpellScriptLoader
public:
spell_q55_sacred_cleansing() : SpellScriptLoader("spell_q55_sacred_cleansing") { }
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_generic_quest_update_entry_SpellScript(SPELL_EFFECT_DUMMY, EFFECT_1, NPC_MORBENT, NPC_WEAKENED_MORBENT, true);
}
@@ -101,7 +101,7 @@ class spell_q2203_thaumaturgy_channel : public SpellScriptLoader
{
PrepareAuraScript(spell_q2203_thaumaturgy_channel_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_THAUMATURGY_CHANNEL))
return false;
@@ -115,13 +115,13 @@ class spell_q2203_thaumaturgy_channel : public SpellScriptLoader
caster->CastSpell(caster, SPELL_THAUMATURGY_CHANNEL, false);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_q2203_thaumaturgy_channel_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_q2203_thaumaturgy_channel_AuraScript();
}
@@ -144,12 +144,12 @@ class spell_q5206_test_fetid_skull : public SpellScriptLoader
{
PrepareSpellScript(spell_q5206_test_fetid_skull_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellEntry*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_CREATE_RESONATING_SKULL) || !sSpellMgr->GetSpellInfo(SPELL_CREATE_BONE_DUST))
return false;
@@ -163,13 +163,13 @@ class spell_q5206_test_fetid_skull : public SpellScriptLoader
caster->CastSpell(caster, spellId, true, NULL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_q5206_test_fetid_skull_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q5206_test_fetid_skull_SpellScript();
}
@@ -196,7 +196,7 @@ class spell_q6124_6129_apply_salve : public SpellScriptLoader
{
PrepareSpellScript(spell_q6124_6129_apply_salve_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -227,13 +227,13 @@ class spell_q6124_6129_apply_salve : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q6124_6129_apply_salve_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q6124_6129_apply_salve_SpellScript();
}
@@ -252,7 +252,7 @@ class spell_q10255_administer_antidote : public SpellScriptLoader
public:
spell_q10255_administer_antidote() : SpellScriptLoader("spell_q10255_administer_antidote") { }
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_generic_quest_update_entry_SpellScript(SPELL_EFFECT_DUMMY, EFFECT_0, NPC_HELBOAR, NPC_DREADTUSK, true);
}
@@ -288,7 +288,7 @@ class spell_q11396_11399_force_shield_arcane_purple_x3 : public SpellScriptLoade
GetTarget()->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_q11396_11399_force_shield_arcane_purple_x3_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_q11396_11399_force_shield_arcane_purple_x3_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
@@ -296,7 +296,7 @@ class spell_q11396_11399_force_shield_arcane_purple_x3 : public SpellScriptLoade
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_q11396_11399_force_shield_arcane_purple_x3_AuraScript();
}
@@ -312,7 +312,7 @@ class spell_q11396_11399_scourging_crystal_controller : public SpellScriptLoader
{
PrepareSpellScript(spell_q11396_11399_scourging_crystal_controller_SpellScript);
- bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellEntry*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_FORCE_SHIELD_ARCANE_PURPLE_X3) || !sSpellMgr->GetSpellInfo(SPELL_SCOURGING_CRYSTAL_CONTROLLER))
return false;
@@ -328,13 +328,13 @@ class spell_q11396_11399_scourging_crystal_controller : public SpellScriptLoader
GetCaster()->CastSpell(target, SPELL_SCOURGING_CRYSTAL_CONTROLLER, true, GetCastItem());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q11396_11399_scourging_crystal_controller_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q11396_11399_scourging_crystal_controller_SpellScript();
};
@@ -350,7 +350,7 @@ class spell_q11396_11399_scourging_crystal_controller_dummy : public SpellScript
{
PrepareSpellScript(spell_q11396_11399_scourging_crystal_controller_dummy_SpellScript);
- bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellEntry*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_FORCE_SHIELD_ARCANE_PURPLE_X3))
return false;
@@ -364,13 +364,13 @@ class spell_q11396_11399_scourging_crystal_controller_dummy : public SpellScript
target->RemoveAurasDueToSpell(SPELL_FORCE_SHIELD_ARCANE_PURPLE_X3);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q11396_11399_scourging_crystal_controller_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q11396_11399_scourging_crystal_controller_dummy_SpellScript();
};
@@ -389,7 +389,7 @@ class spell_q11515_fel_siphon_dummy : public SpellScriptLoader
public:
spell_q11515_fel_siphon_dummy() : SpellScriptLoader("spell_q11515_fel_siphon_dummy") { }
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_generic_quest_update_entry_SpellScript(SPELL_EFFECT_DUMMY, EFFECT_0, NPC_FELBLOOD_INITIATE, NPC_EMACIATED_FELBLOOD, true);
}
@@ -413,7 +413,7 @@ class spell_q11587_arcane_prisoner_rescue : public SpellScriptLoader
{
PrepareSpellScript(spell_q11587_arcane_prisoner_rescue_SpellScript);
- bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellEntry*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_ARCANE_PRISONER_MALE) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_ARCANE_PRISONER_FEMALE) || !sSpellMgr->GetSpellInfo(SPELL_ARCANE_PRISONER_KILL_CREDIT))
return false;
@@ -426,20 +426,20 @@ class spell_q11587_arcane_prisoner_rescue : public SpellScriptLoader
if (Unit* unitTarget = GetHitUnit())
{
uint32 spellId = SPELL_SUMMON_ARCANE_PRISONER_MALE;
- if (rand() % 2)
+ if (rand32() % 2)
spellId = SPELL_SUMMON_ARCANE_PRISONER_FEMALE;
caster->CastSpell(caster, spellId, true);
unitTarget->CastSpell(caster, SPELL_ARCANE_PRISONER_KILL_CREDIT, true);
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q11587_arcane_prisoner_rescue_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q11587_arcane_prisoner_rescue_SpellScript();
}
@@ -471,12 +471,12 @@ class spell_q11730_ultrasonic_screwdriver : public SpellScriptLoader
{
PrepareSpellScript(spell_q11730_ultrasonic_screwdriver_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER && GetCastItem();
}
- bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellEntry*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_SCAVENGEBOT_004A8) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_SENTRYBOT_57K) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_DEFENDOTANK_66D) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_SCAVENGEBOT_005B6) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_55D_COLLECTATRON) || !sSpellMgr->GetSpellInfo(SPELL_ROBOT_KILL_CREDIT))
return false;
@@ -506,13 +506,13 @@ class spell_q11730_ultrasonic_screwdriver : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q11730_ultrasonic_screwdriver_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q11730_ultrasonic_screwdriver_SpellScript();
}
@@ -557,13 +557,13 @@ class spell_q12459_seeds_of_natures_wrath : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q12459_seeds_of_natures_wrath_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12459_seeds_of_natures_wrath_SpellScript();
}
@@ -588,7 +588,7 @@ class spell_q12634_despawn_fruit_tosser : public SpellScriptLoader
{
PrepareSpellScript(spell_q12634_despawn_fruit_tosser_SpellScript);
- bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellEntry*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_BANANAS_FALL_TO_GROUND) || !sSpellMgr->GetSpellInfo(SPELL_ORANGE_FALLS_TO_GROUND) || !sSpellMgr->GetSpellInfo(SPELL_PAPAYA_FALLS_TO_GROUND) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_ADVENTUROUS_DWARF))
return false;
@@ -609,13 +609,13 @@ class spell_q12634_despawn_fruit_tosser : public SpellScriptLoader
GetCaster()->CastSpell(GetCaster(), spellId, true, NULL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_q12634_despawn_fruit_tosser_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12634_despawn_fruit_tosser_SpellScript();
}
@@ -644,13 +644,13 @@ class spell_q12683_take_sputum_sample : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_q12683_take_sputum_sample_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12683_take_sputum_sample_SpellScript();
}
@@ -705,14 +705,14 @@ class spell_q12851_going_bearback : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_q12851_going_bearback_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_q12851_going_bearback_AuraScript();
}
@@ -735,12 +735,12 @@ class spell_q12937_relief_for_the_fallen : public SpellScriptLoader
{
PrepareSpellScript(spell_q12937_relief_for_the_fallen_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellEntry*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGER_AID_OF_THE_EARTHEN))
return false;
@@ -758,13 +758,13 @@ class spell_q12937_relief_for_the_fallen : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q12937_relief_for_the_fallen_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12937_relief_for_the_fallen_SpellScript();
}
@@ -786,7 +786,7 @@ class spell_q10041_q10040_who_are_they : public SpellScriptLoader
{
PrepareSpellScript(spell_q10041_q10040_who_are_they_SpellScript);
- bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellEntry*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MALE_DISGUISE) || !sSpellMgr->GetSpellInfo(SPELL_FEMALE_DISGUISE) || !sSpellMgr->GetSpellInfo(SPELL_GENERIC_DISGUISE))
return false;
@@ -803,13 +803,13 @@ class spell_q10041_q10040_who_are_they : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q10041_q10040_who_are_they_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q10041_q10040_who_are_they_SpellScript();
}
@@ -845,13 +845,13 @@ class spell_symbol_of_life_dummy : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_symbol_of_life_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_symbol_of_life_dummy_SpellScript();
};
@@ -873,7 +873,7 @@ class spell_q12659_ahunaes_knife : public SpellScriptLoader
{
PrepareSpellScript(spell_q12659_ahunaes_knife_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -888,13 +888,13 @@ class spell_q12659_ahunaes_knife : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q12659_ahunaes_knife_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12659_ahunaes_knife_SpellScript();
};
@@ -917,7 +917,7 @@ class spell_q9874_liquid_fire : public SpellScriptLoader
{
PrepareSpellScript(spell_q9874_liquid_fire_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -934,13 +934,13 @@ class spell_q9874_liquid_fire : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q9874_liquid_fire_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q9874_liquid_fire_SpellScript();
};
@@ -962,7 +962,7 @@ class spell_q12805_lifeblood_dummy : public SpellScriptLoader
{
PrepareSpellScript(spell_q12805_lifeblood_dummy_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -978,13 +978,13 @@ class spell_q12805_lifeblood_dummy : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q12805_lifeblood_dummy_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12805_lifeblood_dummy_SpellScript();
};
@@ -1018,13 +1018,13 @@ class spell_q13280_13283_plant_battle_standard: public SpellScriptLoader
player->ToPlayer()->KilledMonsterCredit(NPC_KING_OF_THE_MOUNTAINT_KC, 0);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_q13280_13283_plant_battle_standard_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q13280_13283_plant_battle_standard_SpellScript();
}
@@ -1047,7 +1047,7 @@ class spell_q14112_14145_chum_the_water: public SpellScriptLoader
{
PrepareSpellScript(spell_q14112_14145_chum_the_water_SpellScript);
- bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellEntry*/) override
{
if (!sSpellMgr->GetSpellInfo(SUMMON_ANGRY_KVALDIR) || !sSpellMgr->GetSpellInfo(SUMMON_NORTH_SEA_MAKO) || !sSpellMgr->GetSpellInfo(SUMMON_NORTH_SEA_THRESHER) || !sSpellMgr->GetSpellInfo(SUMMON_NORTH_SEA_BLUE_SHARK))
return false;
@@ -1060,13 +1060,13 @@ class spell_q14112_14145_chum_the_water: public SpellScriptLoader
caster->CastSpell(caster, RAND(SUMMON_ANGRY_KVALDIR, SUMMON_NORTH_SEA_MAKO, SUMMON_NORTH_SEA_THRESHER, SUMMON_NORTH_SEA_BLUE_SHARK));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q14112_14145_chum_the_water_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q14112_14145_chum_the_water_SpellScript();
}
@@ -1089,7 +1089,7 @@ class spell_q9452_cast_net: public SpellScriptLoader
{
PrepareSpellScript(spell_q9452_cast_net_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -1103,13 +1103,13 @@ class spell_q9452_cast_net: public SpellScriptLoader
caster->CastSpell(caster, SPELL_NEW_SUMMON_TEST, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_q9452_cast_net_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q9452_cast_net_SpellScript();
}
@@ -1143,13 +1143,13 @@ public:
}
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_q12987_read_pronouncement_AuraScript::OnApply, EFFECT_0, SPELL_AURA_NONE, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_q12987_read_pronouncement_AuraScript();
}
@@ -1200,13 +1200,13 @@ class spell_q12277_wintergarde_mine_explosion : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q12277_wintergarde_mine_explosion_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12277_wintergarde_mine_explosion_SpellScript();
}
@@ -1232,13 +1232,13 @@ public:
target->CastSpell(GetCaster(), SPELL_BUNNY_CREDIT_BEAM, false);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q12066_bunny_kill_credit_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12066_bunny_kill_credit_SpellScript();
}
@@ -1283,13 +1283,13 @@ class spell_q12735_song_of_cleansing : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q12735_song_of_cleansing_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12735_song_of_cleansing_SpellScript();
}
@@ -1314,13 +1314,13 @@ class spell_q12372_cast_from_gossip_trigger : public SpellScriptLoader
GetCaster()->CastSpell(GetCaster(), SPELL_SUMMON_WYRMREST_DEFENDER, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q12372_cast_from_gossip_trigger_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12372_cast_from_gossip_trigger_SpellScript();
}
@@ -1355,13 +1355,13 @@ class spell_q12372_destabilize_azure_dragonshrine_dummy : public SpellScriptLoad
player->KilledMonsterCredit(NPC_WYRMREST_TEMPLE_CREDIT, 0);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q12372_destabilize_azure_dragonshrine_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12372_destabilize_azure_dragonshrine_dummy_SpellScript();
}
@@ -1383,13 +1383,13 @@ class spell_q12372_azure_on_death_force_whisper : public SpellScriptLoader
defender->AI()->Talk(WHISPER_ON_HIT_BY_FORCE_WHISPER, defender->GetCharmerOrOwner());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q12372_azure_on_death_force_whisper_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12372_azure_on_death_force_whisper_SpellScript();
}
@@ -1423,13 +1423,13 @@ class spell_q11010_q11102_q11023_aggro_check_aura : public SpellScriptLoader
target->CastSpell(target, SPELL_AGGRO_CHECK);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_q11010_q11102_q11023_aggro_check_aura_AuraScript::HandleTriggerSpell, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_q11010_q11102_q11023_aggro_check_aura_AuraScript();
}
@@ -1453,13 +1453,13 @@ class spell_q11010_q11102_q11023_aggro_check : public SpellScriptLoader
playerTarget->CastSpell(playerTarget, SPELL_FLAK_CANNON_TRIGGER, TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q11010_q11102_q11023_aggro_check_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q11010_q11102_q11023_aggro_check_SpellScript();
}
@@ -1482,13 +1482,13 @@ class spell_q11010_q11102_q11023_aggro_burst : public SpellScriptLoader
target->CastSpell(target, SPELL_CHOOSE_LOC);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_q11010_q11102_q11023_aggro_burst_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_q11010_q11102_q11023_aggro_burst_AuraScript();
}
@@ -1519,13 +1519,13 @@ class spell_q11010_q11102_q11023_choose_loc : public SpellScriptLoader
caster->SummonCreature(NPC_FEL_CANNON2, (*itr)->GetPositionX(), (*itr)->GetPositionY(), (*itr)->GetPositionZ());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_q11010_q11102_q11023_choose_loc_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q11010_q11102_q11023_choose_loc_SpellScript();
}
@@ -1551,13 +1551,13 @@ class spell_q11010_q11102_q11023_q11008_check_fly_mount : public SpellScriptLoad
return SPELL_CAST_OK;
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_q11010_q11102_q11023_q11008_check_fly_mount_SpellScript::CheckRequirement);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q11010_q11102_q11023_q11008_check_fly_mount_SpellScript();
}
@@ -1577,7 +1577,7 @@ class spell_q12527_zuldrak_rat : public SpellScriptLoader
{
PrepareSpellScript(spell_q12527_zuldrak_rat_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_GORGED_LURKING_BASILISK))
return false;
@@ -1594,13 +1594,13 @@ class spell_q12527_zuldrak_rat : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q12527_zuldrak_rat_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12527_zuldrak_rat_SpellScript();
}
@@ -1623,13 +1623,13 @@ class spell_q12661_q12669_q12676_q12677_q12713_summon_stefan : public SpellScrip
dest.RelocateOffset(offset);
}
- void Register() OVERRIDE
+ void Register() override
{
OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_q12661_q12669_q12676_q12677_q12713_summon_stefan_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER_BACK);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12661_q12669_q12676_q12677_q12713_summon_stefan_SpellScript();
}
@@ -1649,7 +1649,7 @@ class spell_q12730_quenching_mist : public SpellScriptLoader
{
PrepareAuraScript(spell_q12730_quenching_mist_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_FLICKERING_FLAMES))
return false;
@@ -1661,13 +1661,13 @@ class spell_q12730_quenching_mist : public SpellScriptLoader
GetTarget()->RemoveAurasDueToSpell(SPELL_FLICKERING_FLAMES);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_q12730_quenching_mist_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_HEAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_q12730_quenching_mist_AuraScript();
}
@@ -1692,7 +1692,7 @@ class spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy : public
{
PrepareSpellScript(spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_RIDE))
return false;
@@ -1709,13 +1709,13 @@ class spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy : public
GetHitCreature()->CastSpell(GetCaster(), SPELL_RIDE, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy_SpellScript();
}
@@ -1738,13 +1738,13 @@ class spell_q13291_q13292_q13239_q13261_armored_decoy_summon_skytalon : public S
dest.RelocateOffset(offset);
}
- void Register() OVERRIDE
+ void Register() override
{
OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_q13291_q13292_q13239_q13261_armored_decoy_summon_skytalon_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER_BACK);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q13291_q13292_q13239_q13261_armored_decoy_summon_skytalon_SpellScript();
}
@@ -1767,13 +1767,13 @@ class spell_q12847_summon_soul_moveto_bunny : public SpellScriptLoader
dest.RelocateOffset(offset);
}
- void Register() OVERRIDE
+ void Register() override
{
OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_q12847_summon_soul_moveto_bunny_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER);
}
};
- SpellScript *GetSpellScript() const
+ SpellScript *GetSpellScript() const override
{
return new spell_q12847_summon_soul_moveto_bunny_SpellScript();
}
@@ -1795,7 +1795,7 @@ class spell_q13011_bear_flank_master : public SpellScriptLoader
{
PrepareSpellScript(spell_q13011_bear_flank_master_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_BEAR_FLANK_MASTER) ||
!sSpellMgr->GetSpellInfo(SPELL_CREATE_BEAR_FLANK))
@@ -1803,19 +1803,18 @@ class spell_q13011_bear_flank_master : public SpellScriptLoader
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
void HandleScript(SpellEffIndex /*effIndex*/)
{
- bool failed = RAND(0, 1); // 50% chance
- Creature* creature = GetCaster()->ToCreature();
if (Player* player = GetHitPlayer())
{
- if (failed)
+ if (roll_chance_i(50))
{
+ Creature* creature = GetCaster()->ToCreature();
player->CastSpell(creature, SPELL_BEAR_FLANK_FAIL);
creature->AI()->Talk(0, player);
}
@@ -1824,13 +1823,13 @@ class spell_q13011_bear_flank_master : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q13011_bear_flank_master_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q13011_bear_flank_master_SpellScript();
}
@@ -1845,7 +1844,7 @@ class spell_q13086_cannons_target : public SpellScriptLoader
{
PrepareSpellScript(spell_q13086_cannons_target_SpellScript);
- bool Validate(SpellInfo const* spellInfo) OVERRIDE
+ bool Validate(SpellInfo const* spellInfo) override
{
if (!sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_0].CalcValue()))
return false;
@@ -1858,13 +1857,13 @@ class spell_q13086_cannons_target : public SpellScriptLoader
GetCaster()->CastSpell(pos->GetPositionX(), pos->GetPositionY(), pos->GetPositionZ(), GetEffectValue(), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_q13086_cannons_target_SpellScript::HandleEffectDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q13086_cannons_target_SpellScript();
}
@@ -1896,7 +1895,7 @@ class spell_q12690_burst_at_the_seams : public SpellScriptLoader
{
PrepareSpellScript(spell_q12690_burst_at_the_seams_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_BURST_AT_THE_SEAMS)
|| !sSpellMgr->GetSpellInfo(SPELL_BURST_AT_THE_SEAMS_DMG)
@@ -1908,7 +1907,7 @@ class spell_q12690_burst_at_the_seams : public SpellScriptLoader
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
@@ -1944,14 +1943,14 @@ class spell_q12690_burst_at_the_seams : public SpellScriptLoader
GetCaster()->ToCreature()->DespawnOrUnsummon(2 * IN_MILLISECONDS);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q12690_burst_at_the_seams_SpellScript::HandleKnockBack, EFFECT_1, SPELL_EFFECT_KNOCK_BACK);
OnEffectHitTarget += SpellEffectFn(spell_q12690_burst_at_the_seams_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12690_burst_at_the_seams_SpellScript();
}
@@ -1972,7 +1971,7 @@ class spell_q12308_escape_from_silverbrook : public SpellScriptLoader
{
PrepareSpellScript(spell_q12308_escape_from_silverbrook_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_WORGEN))
return false;
@@ -1984,13 +1983,13 @@ class spell_q12308_escape_from_silverbrook : public SpellScriptLoader
GetCaster()->CastSpell(GetCaster(), SPELL_SUMMON_WORGEN, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_q12308_escape_from_silverbrook_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12308_escape_from_silverbrook_SpellScript();
}
@@ -2009,20 +2008,19 @@ class spell_q12308_escape_from_silverbrook_summon_worgen : public SpellScriptLoa
void ModDest(SpellDestination& dest)
{
float dist = GetSpellInfo()->Effects[EFFECT_0].CalcRadius(GetCaster());
- float angle = frand(0.75f, 1.25f) * M_PI;
+ float angle = frand(0.75f, 1.25f) * float(M_PI);
- Position pos;
- GetCaster()->GetNearPosition(pos, dist, angle);
+ Position pos = GetCaster()->GetNearPosition(dist, angle);
dest.Relocate(pos);
}
- void Register() OVERRIDE
+ void Register() override
{
OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_q12308_escape_from_silverbrook_summon_worgen_SpellScript::ModDest, EFFECT_0, TARGET_DEST_CASTER_SUMMON);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12308_escape_from_silverbrook_summon_worgen_SpellScript();
}
@@ -2052,7 +2050,7 @@ class spell_q12641_death_comes_from_on_high : public SpellScriptLoader
{
PrepareSpellScript(spell_q12641_death_comes_from_on_high_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_FORGE_CREDIT) ||
!sSpellMgr->GetSpellInfo(SPELL_TOWN_HALL_CREDIT) ||
@@ -2087,13 +2085,13 @@ class spell_q12641_death_comes_from_on_high : public SpellScriptLoader
GetCaster()->CastSpell((Unit*)NULL, spellId, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q12641_death_comes_from_on_high_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12641_death_comes_from_on_high_SpellScript();
}
@@ -2116,13 +2114,13 @@ class spell_q12619_emblazon_runeblade : public SpellScriptLoader
caster->CastSpell(caster, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_q12619_emblazon_runeblade_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_q12619_emblazon_runeblade_AuraScript();
}
@@ -2143,13 +2141,13 @@ class spell_q12619_emblazon_runeblade_effect : public SpellScriptLoader
GetCaster()->CastSpell(GetCaster(), uint32(GetEffectValue()), false);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_q12619_emblazon_runeblade_effect_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12619_emblazon_runeblade_effect_SpellScript();
}
@@ -2170,7 +2168,7 @@ class spell_q12919_gymers_grab : public SpellScriptLoader
{
PrepareSpellScript(spell_q12919_gymers_grab_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_RIDE_GYMER))
return false;
@@ -2186,13 +2184,13 @@ class spell_q12919_gymers_grab : public SpellScriptLoader
GetHitCreature()->CastSpell(GetHitCreature(), SPELL_GRABBED, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q12919_gymers_grab_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12919_gymers_grab_SpellScript();
}
@@ -2223,13 +2221,13 @@ class spell_q12919_gymers_throw : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q12919_gymers_throw_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q12919_gymers_throw_SpellScript();
}
@@ -2249,7 +2247,7 @@ class spell_q13400_illidan_kill_master : public SpellScriptLoader
{
PrepareSpellScript(spell_q13400_illidan_kill_master_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ILLIDAN_KILL_CREDIT))
return false;
@@ -2264,13 +2262,13 @@ class spell_q13400_illidan_kill_master : public SpellScriptLoader
passenger->CastSpell(passenger, SPELL_ILLIDAN_KILL_CREDIT, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q13400_illidan_kill_master_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q13400_illidan_kill_master_SpellScript();
}
@@ -2291,7 +2289,7 @@ class spell_q14100_q14111_make_player_destroy_totems : public SpellScriptLoader
{
PrepareSpellScript(spell_q14100_q14111_make_player_destroy_totems_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TOTEM_OF_THE_EARTHEN_RING))
return false;
@@ -2304,13 +2302,13 @@ class spell_q14100_q14111_make_player_destroy_totems : public SpellScriptLoader
player->CastSpell(player, SPELL_TOTEM_OF_THE_EARTHEN_RING, TRIGGERED_FULL_MASK); // ignore reagent cost, consumed by quest
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q14100_q14111_make_player_destroy_totems_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_q14100_q14111_make_player_destroy_totems_SpellScript();
}
diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp
index 4c1a4d096b9..a04fdba57b9 100644
--- a/src/server/scripts/Spells/spell_rogue.cpp
+++ b/src/server/scripts/Spells/spell_rogue.cpp
@@ -52,14 +52,14 @@ class spell_rog_blade_flurry : public SpellScriptLoader
{
PrepareAuraScript(spell_rog_blade_flurry_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK))
return false;
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
_procTarget = NULL;
return true;
@@ -68,7 +68,7 @@ class spell_rog_blade_flurry : public SpellScriptLoader
bool CheckProc(ProcEventInfo& eventInfo)
{
_procTarget = eventInfo.GetActor()->SelectNearbyTarget(eventInfo.GetProcTarget());
- return _procTarget;
+ return _procTarget != nullptr;
}
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
@@ -81,7 +81,7 @@ class spell_rog_blade_flurry : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_rog_blade_flurry_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_rog_blade_flurry_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_MOD_MELEE_HASTE);
@@ -91,7 +91,7 @@ class spell_rog_blade_flurry : public SpellScriptLoader
Unit* _procTarget;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_rog_blade_flurry_AuraScript();
}
@@ -109,17 +109,17 @@ class spell_rog_cheat_death : public SpellScriptLoader
uint32 absorbChance;
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_CHEAT_DEATH_COOLDOWN))
return false;
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
absorbChance = GetSpellInfo()->Effects[EFFECT_0].CalcValue();
- return GetUnitOwner()->ToPlayer();
+ return GetUnitOwner()->GetTypeId() == TYPEID_PLAYER;
}
void CalculateAmount(AuraEffect const* /*aurEff*/, int32 & amount, bool & /*canBeRecalculated*/)
@@ -147,14 +147,14 @@ class spell_rog_cheat_death : public SpellScriptLoader
absorbAmount = dmgInfo.GetDamage();
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_rog_cheat_death_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_rog_cheat_death_AuraScript::Absorb, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_rog_cheat_death_AuraScript();
}
@@ -170,7 +170,7 @@ class spell_rog_deadly_poison : public SpellScriptLoader
{
PrepareSpellScript(spell_rog_deadly_poison_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_stackAmount = 0;
// at this point CastItem must already be initialized
@@ -239,7 +239,7 @@ class spell_rog_deadly_poison : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
BeforeHit += SpellHitFn(spell_rog_deadly_poison_SpellScript::HandleBeforeHit);
AfterHit += SpellHitFn(spell_rog_deadly_poison_SpellScript::HandleAfterHit);
@@ -248,7 +248,7 @@ class spell_rog_deadly_poison : public SpellScriptLoader
uint8 _stackAmount;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_rog_deadly_poison_SpellScript();
}
@@ -280,14 +280,14 @@ class spell_rog_killing_spree : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rog_killing_spree_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENEMY);
OnEffectHitTarget += SpellEffectFn(spell_rog_killing_spree_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_rog_killing_spree_SpellScript();
}
@@ -296,7 +296,7 @@ class spell_rog_killing_spree : public SpellScriptLoader
{
PrepareAuraScript(spell_rog_killing_spree_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_KILLING_SPREE_TELEPORT)
|| !sSpellMgr->GetSpellInfo(SPELL_ROGUE_KILLING_SPREE_WEAPON_DMG)
@@ -331,7 +331,7 @@ class spell_rog_killing_spree : public SpellScriptLoader
GetTarget()->RemoveAurasDueToSpell(SPELL_ROGUE_KILLING_SPREE_DMG_BUFF);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_rog_killing_spree_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_rog_killing_spree_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
@@ -348,7 +348,7 @@ class spell_rog_killing_spree : public SpellScriptLoader
std::list<uint64> _targets;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_rog_killing_spree_AuraScript();
}
@@ -366,7 +366,7 @@ class spell_rog_nerves_of_steel : public SpellScriptLoader
uint32 absorbPct;
- bool Load() OVERRIDE
+ bool Load() override
{
absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(GetCaster());
return true;
@@ -385,14 +385,14 @@ class spell_rog_nerves_of_steel : public SpellScriptLoader
absorbAmount = CalculatePct(dmgInfo.GetDamage(), absorbPct);
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_rog_nerves_of_steel_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_rog_nerves_of_steel_AuraScript::Absorb, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_rog_nerves_of_steel_AuraScript();
}
@@ -408,12 +408,12 @@ class spell_rog_preparation : public SpellScriptLoader
{
PrepareSpellScript(spell_rog_preparation_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_GLYPH_OF_PREPARATION))
return false;
@@ -453,13 +453,13 @@ class spell_rog_preparation : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_rog_preparation_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_rog_preparation_SpellScript();
}
@@ -475,7 +475,7 @@ class spell_rog_prey_on_the_weak : public SpellScriptLoader
{
PrepareAuraScript(spell_rog_prey_on_the_weak_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_PREY_ON_THE_WEAK))
return false;
@@ -491,20 +491,20 @@ class spell_rog_prey_on_the_weak : public SpellScriptLoader
if (!target->HasAura(SPELL_ROGUE_PREY_ON_THE_WEAK))
{
int32 bp = GetSpellInfo()->Effects[EFFECT_0].CalcValue();
- target->CastCustomSpell(target, SPELL_ROGUE_PREY_ON_THE_WEAK, &bp, 0, 0, true);
+ target->CastCustomSpell(target, SPELL_ROGUE_PREY_ON_THE_WEAK, &bp, nullptr, nullptr, true);
}
}
else
target->RemoveAurasDueToSpell(SPELL_ROGUE_PREY_ON_THE_WEAK);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_rog_prey_on_the_weak_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_rog_prey_on_the_weak_AuraScript();
}
@@ -520,7 +520,7 @@ class spell_rog_rupture : public SpellScriptLoader
{
PrepareAuraScript(spell_rog_rupture_AuraScript);
- bool Load() OVERRIDE
+ bool Load() override
{
Unit* caster = GetCaster();
return caster && caster->GetTypeId() == TYPEID_PLAYER;
@@ -550,13 +550,13 @@ class spell_rog_rupture : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_rog_rupture_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_rog_rupture_AuraScript();
}
@@ -572,12 +572,12 @@ class spell_rog_shiv : public SpellScriptLoader
{
PrepareSpellScript(spell_rog_shiv_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_SHIV_TRIGGERED))
return false;
@@ -591,13 +591,13 @@ class spell_rog_shiv : public SpellScriptLoader
caster->CastSpell(unitTarget, SPELL_ROGUE_SHIV_TRIGGERED, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_rog_shiv_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_rog_shiv_SpellScript();
}
@@ -613,7 +613,7 @@ class spell_rog_tricks_of_the_trade : public SpellScriptLoader
{
PrepareAuraScript(spell_rog_tricks_of_the_trade_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_TRICKS_OF_THE_TRADE_DMG_BOOST))
return false;
@@ -622,7 +622,7 @@ class spell_rog_tricks_of_the_trade : public SpellScriptLoader
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
_redirectTarget = NULL;
return true;
@@ -637,7 +637,7 @@ class spell_rog_tricks_of_the_trade : public SpellScriptLoader
bool CheckProc(ProcEventInfo& /*eventInfo*/)
{
_redirectTarget = GetTarget()->GetRedirectThreatTarget();
- return _redirectTarget;
+ return _redirectTarget != nullptr;
}
void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/)
@@ -650,7 +650,7 @@ class spell_rog_tricks_of_the_trade : public SpellScriptLoader
Remove(AURA_REMOVE_BY_DEFAULT); // maybe handle by proc charges
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_rog_tricks_of_the_trade_AuraScript::OnRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
DoCheckProc += AuraCheckProcFn(spell_rog_tricks_of_the_trade_AuraScript::CheckProc);
@@ -661,7 +661,7 @@ class spell_rog_tricks_of_the_trade : public SpellScriptLoader
Unit* _redirectTarget;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_rog_tricks_of_the_trade_AuraScript();
}
@@ -682,13 +682,13 @@ class spell_rog_tricks_of_the_trade_proc : public SpellScriptLoader
GetTarget()->ResetRedirectThreat();
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_rog_tricks_of_the_trade_proc_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_rog_tricks_of_the_trade_proc_AuraScript();
}
diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp
index a199569401d..593ce9a54de 100644
--- a/src/server/scripts/Spells/spell_shaman.cpp
+++ b/src/server/scripts/Spells/spell_shaman.cpp
@@ -34,6 +34,7 @@ enum ShamanSpells
SPELL_SHAMAN_BIND_SIGHT = 6277,
SPELL_SHAMAN_CLEANSING_TOTEM_EFFECT = 52025,
SPELL_SHAMAN_EARTH_SHIELD_HEAL = 379,
+ SPELL_SHAMAN_ELEMENTAL_MASTERY = 16166,
SPELL_SHAMAN_EXHAUSTION = 57723,
SPELL_SHAMAN_FIRE_NOVA_R1 = 1535,
SPELL_SHAMAN_FIRE_NOVA_TRIGGERED_R1 = 8349,
@@ -72,7 +73,7 @@ class spell_sha_ancestral_awakening_proc : public SpellScriptLoader
{
PrepareSpellScript(spell_sha_ancestral_awakening_proc_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC))
return false;
@@ -98,14 +99,14 @@ class spell_sha_ancestral_awakening_proc : public SpellScriptLoader
GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC, &damage, NULL, NULL, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_ancestral_awakening_proc_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_RAID);
OnEffectHitTarget += SpellEffectFn(spell_sha_ancestral_awakening_proc_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_sha_ancestral_awakening_proc_SpellScript();
}
@@ -123,7 +124,7 @@ class spell_sha_astral_shift : public SpellScriptLoader
uint32 absorbPct;
- bool Load() OVERRIDE
+ bool Load() override
{
absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(GetCaster());
return true;
@@ -142,14 +143,14 @@ class spell_sha_astral_shift : public SpellScriptLoader
absorbAmount = CalculatePct(dmgInfo.GetDamage(), absorbPct);
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_sha_astral_shift_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_sha_astral_shift_AuraScript::Absorb, EFFECT_0);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_sha_astral_shift_AuraScript();
}
@@ -165,7 +166,7 @@ class spell_sha_bloodlust : public SpellScriptLoader
{
PrepareSpellScript(spell_sha_bloodlust_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_SATED))
return false;
@@ -183,7 +184,7 @@ class spell_sha_bloodlust : public SpellScriptLoader
target->CastSpell(target, SPELL_SHAMAN_SATED, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_bloodlust_SpellScript::RemoveInvalidTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_RAID);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_bloodlust_SpellScript::RemoveInvalidTargets, EFFECT_1, TARGET_UNIT_CASTER_AREA_RAID);
@@ -192,7 +193,7 @@ class spell_sha_bloodlust : public SpellScriptLoader
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_sha_bloodlust_SpellScript();
}
@@ -208,7 +209,7 @@ class spell_sha_chain_heal : public SpellScriptLoader
{
PrepareSpellScript(spell_sha_chain_heal_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
firstHeal = true;
riptide = false;
@@ -233,7 +234,7 @@ class spell_sha_chain_heal : public SpellScriptLoader
SetHitHeal(GetHitHeal() * 1.25f);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_sha_chain_heal_SpellScript::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL);
}
@@ -242,7 +243,7 @@ class spell_sha_chain_heal : public SpellScriptLoader
bool riptide;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_sha_chain_heal_SpellScript();
}
@@ -258,7 +259,7 @@ class spell_sha_cleansing_totem_pulse : public SpellScriptLoader
{
PrepareSpellScript(spell_sha_cleansing_totem_pulse_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_CLEANSING_TOTEM_EFFECT))
return false;
@@ -272,13 +273,13 @@ class spell_sha_cleansing_totem_pulse : public SpellScriptLoader
GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_SHAMAN_CLEANSING_TOTEM_EFFECT, NULL, &bp, NULL, true, NULL, NULL, GetOriginalCaster()->GetGUID());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_sha_cleansing_totem_pulse_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_sha_cleansing_totem_pulse_SpellScript();
}
@@ -294,7 +295,7 @@ class spell_sha_earth_shield : public SpellScriptLoader
{
PrepareAuraScript(spell_sha_earth_shield_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_EARTH_SHIELD_HEAL))
return false;
@@ -310,6 +311,7 @@ class spell_sha_earth_shield : public SpellScriptLoader
amount = caster->SpellHealingBonusDone(GetUnitOwner(), GetSpellInfo(), amount, HEAL);
amount = GetUnitOwner()->SpellHealingBonusTaken(caster, GetSpellInfo(), amount, HEAL);
+ //! WORKAROUND
// If target is affected by healing reduction, modifier is guaranteed to be negative
// value (e.g. -50). To revert the effect, multiply amount with reciprocal of relative value:
// (100 / ((-1) * modifier)) * 100 = (-1) * 100 * 100 / modifier = -10000 / modifier
@@ -344,7 +346,7 @@ class spell_sha_earth_shield : public SpellScriptLoader
player->AddSpellCooldown(SPELL_SHAMAN_EARTH_SHIELD_HEAL, 0, time(NULL) + 3);
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_sha_earth_shield_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_DUMMY);
DoCheckProc += AuraCheckProcFn(spell_sha_earth_shield_AuraScript::CheckProc);
@@ -352,7 +354,7 @@ class spell_sha_earth_shield : public SpellScriptLoader
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_sha_earth_shield_AuraScript();
}
@@ -368,7 +370,7 @@ class spell_sha_earthbind_totem : public SpellScriptLoader
{
PrepareAuraScript(spell_sha_earthbind_totem_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_TOTEM_EARTHBIND_TOTEM) || !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_TOTEM_EARTHEN_POWER))
return false;
@@ -400,14 +402,14 @@ class spell_sha_earthbind_totem : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_sha_earthbind_totem_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
OnEffectApply += AuraEffectApplyFn(spell_sha_earthbind_totem_AuraScript::Apply, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_sha_earthbind_totem_AuraScript();
}
@@ -445,13 +447,13 @@ class spell_sha_earthen_power : public SpellScriptLoader
unitList.remove_if(EarthenPowerTargetSelector());
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_earthen_power_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_sha_earthen_power_SpellScript();
}
@@ -467,7 +469,7 @@ class spell_sha_fire_nova : public SpellScriptLoader
{
PrepareSpellScript(spell_sha_fire_nova_SpellScript);
- bool Validate(SpellInfo const* spellInfo) OVERRIDE
+ bool Validate(SpellInfo const* spellInfo) override
{
SpellInfo const* firstRankSpellInfo = sSpellMgr->GetSpellInfo(SPELL_SHAMAN_FIRE_NOVA_R1);
if (!firstRankSpellInfo || !spellInfo->IsRankOf(firstRankSpellInfo))
@@ -502,14 +504,14 @@ class spell_sha_fire_nova : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_sha_fire_nova_SpellScript::CheckFireTotem);
OnEffectHitTarget += SpellEffectFn(spell_sha_fire_nova_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_sha_fire_nova_SpellScript();
}
@@ -525,7 +527,7 @@ class spell_sha_flame_shock : public SpellScriptLoader
{
PrepareAuraScript(spell_sha_flame_shock_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_LAVA_FLOWS_R1))
return false;
@@ -549,13 +551,13 @@ class spell_sha_flame_shock : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
AfterDispel += AuraDispelFn(spell_sha_flame_shock_AuraScript::HandleDispel);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_sha_flame_shock_AuraScript();
}
@@ -571,7 +573,7 @@ class spell_sha_healing_stream_totem : public SpellScriptLoader
{
PrepareSpellScript(spell_sha_healing_stream_totem_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_GLYPH_OF_HEALING_STREAM_TOTEM) || !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_TOTEM_HEALING_STREAM_HEAL))
return false;
@@ -604,13 +606,13 @@ class spell_sha_healing_stream_totem : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_sha_healing_stream_totem_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_sha_healing_stream_totem_SpellScript();
}
@@ -626,7 +628,7 @@ class spell_sha_heroism : public SpellScriptLoader
{
PrepareSpellScript(spell_sha_heroism_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_EXHAUSTION))
return false;
@@ -644,7 +646,7 @@ class spell_sha_heroism : public SpellScriptLoader
target->CastSpell(target, SPELL_SHAMAN_EXHAUSTION, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_heroism_SpellScript::RemoveInvalidTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_RAID);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_heroism_SpellScript::RemoveInvalidTargets, EFFECT_1, TARGET_UNIT_CASTER_AREA_RAID);
@@ -653,7 +655,7 @@ class spell_sha_heroism : public SpellScriptLoader
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_sha_heroism_SpellScript();
}
@@ -669,7 +671,7 @@ class spell_sha_item_lightning_shield : public SpellScriptLoader
{
PrepareAuraScript(spell_sha_item_lightning_shield_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD))
return false;
@@ -682,13 +684,13 @@ class spell_sha_item_lightning_shield : public SpellScriptLoader
GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_sha_item_lightning_shield_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_sha_item_lightning_shield_AuraScript();
}
@@ -704,7 +706,7 @@ class spell_sha_item_lightning_shield_trigger : public SpellScriptLoader
{
PrepareAuraScript(spell_sha_item_lightning_shield_trigger_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ITEM_MANA_SURGE))
return false;
@@ -717,13 +719,13 @@ class spell_sha_item_lightning_shield_trigger : public SpellScriptLoader
GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_sha_item_lightning_shield_trigger_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_sha_item_lightning_shield_trigger_AuraScript();
}
@@ -739,7 +741,7 @@ class spell_sha_item_mana_surge : public SpellScriptLoader
{
PrepareAuraScript(spell_sha_item_mana_surge_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE))
return false;
@@ -748,7 +750,7 @@ class spell_sha_item_mana_surge : public SpellScriptLoader
bool CheckProc(ProcEventInfo& eventInfo)
{
- return eventInfo.GetDamageInfo()->GetSpellInfo();
+ return eventInfo.GetDamageInfo()->GetSpellInfo() != nullptr;
}
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
@@ -760,19 +762,55 @@ class spell_sha_item_mana_surge : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_SHAMAN_ITEM_MANA_SURGE, SPELLVALUE_BASE_POINT0, damage, GetTarget(), true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_sha_item_mana_surge_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_sha_item_mana_surge_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_sha_item_mana_surge_AuraScript();
}
};
+// 70811 - Item - Shaman T10 Elemental 2P Bonus
+class spell_sha_item_t10_elemental_2p_bonus : public SpellScriptLoader
+{
+ public:
+ spell_sha_item_t10_elemental_2p_bonus() : SpellScriptLoader("spell_sha_item_t10_elemental_2p_bonus") { }
+
+ class spell_sha_item_t10_elemental_2p_bonus_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_sha_item_t10_elemental_2p_bonus_AuraScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ELEMENTAL_MASTERY))
+ return false;
+ return true;
+ }
+
+ void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
+ {
+ PreventDefaultAction();
+ if (Player* target = GetTarget()->ToPlayer())
+ target->ModifySpellCooldown(SPELL_SHAMAN_ELEMENTAL_MASTERY, -aurEff->GetAmount());
+ }
+
+ void Register() override
+ {
+ OnEffectProc += AuraEffectProcFn(spell_sha_item_t10_elemental_2p_bonus_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_sha_item_t10_elemental_2p_bonus_AuraScript();
+ }
+};
+
// 60103 - Lava Lash
class spell_sha_lava_lash : public SpellScriptLoader
{
@@ -781,9 +819,9 @@ class spell_sha_lava_lash : public SpellScriptLoader
class spell_sha_lava_lash_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_sha_lava_lash_SpellScript)
+ PrepareSpellScript(spell_sha_lava_lash_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -804,14 +842,14 @@ class spell_sha_lava_lash : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_sha_lava_lash_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_sha_lava_lash_SpellScript();
}
@@ -827,7 +865,7 @@ class spell_sha_mana_spring_totem : public SpellScriptLoader
{
PrepareSpellScript(spell_sha_mana_spring_totem_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_MANA_SPRING_TOTEM_ENERGIZE))
return false;
@@ -840,17 +878,17 @@ class spell_sha_mana_spring_totem : public SpellScriptLoader
if (Unit* target = GetHitUnit())
if (Unit* caster = GetCaster())
if (target->getPowerType() == POWER_MANA)
- caster->CastCustomSpell(target, SPELL_SHAMAN_MANA_SPRING_TOTEM_ENERGIZE, &damage, 0, 0, true, 0, 0, GetOriginalCaster()->GetGUID());
+ caster->CastCustomSpell(target, SPELL_SHAMAN_MANA_SPRING_TOTEM_ENERGIZE, &damage, nullptr, nullptr, true, nullptr, nullptr, GetOriginalCaster()->GetGUID());
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_sha_mana_spring_totem_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_sha_mana_spring_totem_SpellScript();
}
@@ -866,7 +904,7 @@ class spell_sha_mana_tide_totem : public SpellScriptLoader
{
PrepareSpellScript(spell_sha_mana_tide_totem_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_GLYPH_OF_MANA_TIDE) || !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_MANA_TIDE_TOTEM))
return false;
@@ -892,13 +930,13 @@ class spell_sha_mana_tide_totem : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_sha_mana_tide_totem_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_sha_mana_tide_totem_SpellScript();
}
@@ -914,7 +952,7 @@ class spell_sha_sentry_totem : public SpellScriptLoader
{
PrepareAuraScript(spell_sha_sentry_totem_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_BIND_SIGHT))
return false;
@@ -936,14 +974,14 @@ class spell_sha_sentry_totem : public SpellScriptLoader
caster->ToPlayer()->StopCastingBindSight();
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_sha_sentry_totem_AuraScript::AfterApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_sha_sentry_totem_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_sha_sentry_totem_AuraScript();
}
@@ -966,13 +1004,13 @@ class spell_sha_thunderstorm : public SpellScriptLoader
PreventHitDefaultEffect(effIndex);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_sha_thunderstorm_SpellScript::HandleKnockBack, EFFECT_2, SPELL_EFFECT_KNOCK_BACK);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_sha_thunderstorm_SpellScript();
}
@@ -995,6 +1033,7 @@ void AddSC_shaman_spell_scripts()
new spell_sha_item_lightning_shield();
new spell_sha_item_lightning_shield_trigger();
new spell_sha_item_mana_surge();
+ new spell_sha_item_t10_elemental_2p_bonus();
new spell_sha_lava_lash();
new spell_sha_mana_spring_totem();
new spell_sha_mana_tide_totem();
diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp
index 0e3ada5d119..4571798506e 100644
--- a/src/server/scripts/Spells/spell_warlock.cpp
+++ b/src/server/scripts/Spells/spell_warlock.cpp
@@ -71,7 +71,7 @@ class spell_warl_banish : public SpellScriptLoader
{
PrepareSpellScript(spell_warl_banish_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
_removed = false;
return true;
@@ -98,7 +98,7 @@ class spell_warl_banish : public SpellScriptLoader
PreventHitAura();
}
- void Register() OVERRIDE
+ void Register() override
{
BeforeHit += SpellHitFn(spell_warl_banish_SpellScript::HandleBanish);
AfterHit += SpellHitFn(spell_warl_banish_SpellScript::RemoveAura);
@@ -107,7 +107,7 @@ class spell_warl_banish : public SpellScriptLoader
bool _removed;
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warl_banish_SpellScript();
}
@@ -125,7 +125,7 @@ class spell_warl_create_healthstone : public SpellScriptLoader
static uint32 const iTypes[8][3];
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R1) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R2))
return false;
@@ -172,14 +172,14 @@ class spell_warl_create_healthstone : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_warl_create_healthstone_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
OnCheckCast += SpellCheckCastFn(spell_warl_create_healthstone_SpellScript::CheckCast);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warl_create_healthstone_SpellScript();
}
@@ -206,14 +206,14 @@ class spell_warl_curse_of_doom : public SpellScriptLoader
{
PrepareAuraScript(spell_warl_curse_of_doom_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_CURSE_OF_DOOM_EFFECT))
return false;
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
@@ -231,13 +231,13 @@ class spell_warl_curse_of_doom : public SpellScriptLoader
GetCaster()->CastSpell(GetTarget(), SPELL_WARLOCK_CURSE_OF_DOOM_EFFECT, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_warl_curse_of_doom_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warl_curse_of_doom_AuraScript();
}
@@ -282,14 +282,14 @@ class spell_warl_demonic_circle_summon : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectRemove += AuraEffectApplyFn(spell_warl_demonic_circle_summon_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_warl_demonic_circle_summon_AuraScript::HandleDummyTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warl_demonic_circle_summon_AuraScript();
}
@@ -317,13 +317,13 @@ class spell_warl_demonic_circle_teleport : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_warl_demonic_circle_teleport_AuraScript::HandleTeleport, EFFECT_0, SPELL_AURA_MECHANIC_IMMUNITY, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warl_demonic_circle_teleport_AuraScript();
}
@@ -339,7 +339,7 @@ class spell_warl_demonic_empowerment : public SpellScriptLoader
{
PrepareSpellScript(spell_warl_demonic_empowerment_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_SUCCUBUS) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_FELGUARD) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_FELHUNTER) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_IMP))
return false;
@@ -381,13 +381,13 @@ class spell_warl_demonic_empowerment : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_warl_demonic_empowerment_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warl_demonic_empowerment_SpellScript();
}
@@ -405,19 +405,26 @@ class spell_warl_everlasting_affliction : public SpellScriptLoader
void HandleScriptEffect(SpellEffIndex /*effIndex*/)
{
- if (Unit* unitTarget = GetHitUnit())
+ Unit* caster = GetCaster();
+ if (Unit* target = GetHitUnit())
// Refresh corruption on target
- if (AuraEffect* aur = unitTarget->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_WARLOCK, 0x2, 0, 0, GetCaster()->GetGUID()))
- aur->GetBase()->RefreshDuration();
+ if (AuraEffect* aur = target->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_WARLOCK, 0x2, 0, 0, caster->GetGUID()))
+ {
+ uint32 damage = std::max(aur->GetAmount(), 0);
+ sScriptMgr->ModifyPeriodicDamageAurasTick(target, caster, damage);
+ aur->SetDamage(caster->SpellDamageBonusDone(target, aur->GetSpellInfo(), damage, DOT) * aur->GetDonePct());
+ aur->CalculatePeriodic(caster, false, false);
+ aur->GetBase()->RefreshDuration(true);
+ }
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_warl_everlasting_affliction_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warl_everlasting_affliction_SpellScript();
}
@@ -433,7 +440,7 @@ class spell_warl_fel_synergy : public SpellScriptLoader
{
PrepareAuraScript(spell_warl_fel_synergy_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_FEL_SYNERGY_HEAL))
return false;
@@ -453,14 +460,14 @@ class spell_warl_fel_synergy : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_WARLOCK_FEL_SYNERGY_HEAL, SPELLVALUE_BASE_POINT0, heal, (Unit*)NULL, true, NULL, aurEff); // TARGET_UNIT_PET
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_warl_fel_synergy_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_warl_fel_synergy_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warl_fel_synergy_AuraScript();
}
@@ -476,7 +483,7 @@ class spell_warl_glyph_of_shadowflame : public SpellScriptLoader
{
PrepareAuraScript(spell_warl_glyph_of_shadowflame_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_GLYPH_OF_SHADOWFLAME))
return false;
@@ -489,13 +496,13 @@ class spell_warl_glyph_of_shadowflame : public SpellScriptLoader
GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARLOCK_GLYPH_OF_SHADOWFLAME, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_warl_glyph_of_shadowflame_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warl_glyph_of_shadowflame_AuraScript();
}
@@ -511,16 +518,16 @@ class spell_warl_haunt : public SpellScriptLoader
{
PrepareSpellScript(spell_warl_haunt_SpellScript);
- void HandleOnHit()
+ void HandleAfterHit()
{
if (Aura* aura = GetHitAura())
if (AuraEffect* aurEff = aura->GetEffect(EFFECT_1))
aurEff->SetAmount(CalculatePct(aurEff->GetAmount(), GetHitDamage()));
}
- void Register() OVERRIDE
+ void Register() override
{
- OnHit += SpellHitFn(spell_warl_haunt_SpellScript::HandleOnHit);
+ AfterHit += SpellHitFn(spell_warl_haunt_SpellScript::HandleAfterHit);
}
};
@@ -528,7 +535,7 @@ class spell_warl_haunt : public SpellScriptLoader
{
PrepareAuraScript(spell_warl_haunt_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_HAUNT_HEAL))
return false;
@@ -544,18 +551,18 @@ class spell_warl_haunt : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectRemove += AuraEffectApplyFn(spell_warl_haunt_AuraScript::HandleRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warl_haunt_SpellScript();
}
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warl_haunt_AuraScript();
}
@@ -591,14 +598,14 @@ class spell_warl_health_funnel : public SpellScriptLoader
target->RemoveAurasDueToSpell(SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R2);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectRemove += AuraEffectRemoveFn(spell_warl_health_funnel_AuraScript::RemoveEffect, EFFECT_0, SPELL_AURA_PERIODIC_HEAL, AURA_EFFECT_HANDLE_REAL);
OnEffectApply += AuraEffectApplyFn(spell_warl_health_funnel_AuraScript::ApplyEffect, EFFECT_0, SPELL_AURA_PERIODIC_HEAL, AURA_EFFECT_HANDLE_REAL);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warl_health_funnel_AuraScript();
}
@@ -614,12 +621,12 @@ class spell_warl_life_tap : public SpellScriptLoader
{
PrepareSpellScript(spell_warl_life_tap_SpellScript);
- bool Load() OVERRIDE
+ bool Load() override
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spell*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_LIFE_TAP_ENERGIZE) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_LIFE_TAP_ENERGIZE_2))
return false;
@@ -663,14 +670,14 @@ class spell_warl_life_tap : public SpellScriptLoader
return SPELL_FAILED_FIZZLE;
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_warl_life_tap_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
OnCheckCast += SpellCheckCastFn(spell_warl_life_tap_SpellScript::CheckCast);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warl_life_tap_SpellScript();
}
@@ -692,13 +699,13 @@ class spell_warl_ritual_of_doom_effect : public SpellScriptLoader
caster->CastSpell(caster, GetEffectValue(), true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_warl_ritual_of_doom_effect_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warl_ritual_of_doom_effect_SpellScript();
}
@@ -720,13 +727,13 @@ class spell_warl_seed_of_corruption : public SpellScriptLoader
targets.remove(GetExplTargetUnit());
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warl_seed_of_corruption_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warl_seed_of_corruption_SpellScript();
}
@@ -757,13 +764,13 @@ class spell_warl_shadow_ward : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_shadow_ward_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warl_shadow_ward_AuraScript();
}
@@ -779,7 +786,7 @@ class spell_warl_siphon_life : public SpellScriptLoader
{
PrepareAuraScript(spell_warl_siphon_life_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_SIPHON_LIFE_HEAL))
return false;
@@ -805,14 +812,14 @@ class spell_warl_siphon_life : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_WARLOCK_SIPHON_LIFE_HEAL, SPELLVALUE_BASE_POINT0, amount, GetTarget(), true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_warl_siphon_life_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_warl_siphon_life_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warl_siphon_life_AuraScript();
}
@@ -828,7 +835,7 @@ class spell_warl_soulshatter : public SpellScriptLoader
{
PrepareSpellScript(spell_warl_soulshatter_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_SOULSHATTER))
return false;
@@ -845,13 +852,13 @@ class spell_warl_soulshatter : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_warl_soulshatter_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warl_soulshatter_SpellScript();
}
@@ -867,7 +874,7 @@ class spell_warl_unstable_affliction : public SpellScriptLoader
{
PrepareAuraScript(spell_warl_unstable_affliction_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL))
return false;
@@ -885,13 +892,13 @@ class spell_warl_unstable_affliction : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
AfterDispel += AuraDispelFn(spell_warl_unstable_affliction_AuraScript::HandleDispel);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warl_unstable_affliction_AuraScript();
}
diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp
index e48f16d6558..58820b1e215 100644
--- a/src/server/scripts/Spells/spell_warrior.cpp
+++ b/src/server/scripts/Spells/spell_warrior.cpp
@@ -36,7 +36,7 @@ enum WarriorSpells
SPELL_WARRIOR_DEEP_WOUNDS_RANK_1 = 12162,
SPELL_WARRIOR_DEEP_WOUNDS_RANK_2 = 12850,
SPELL_WARRIOR_DEEP_WOUNDS_RANK_3 = 12868,
- SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC = 12721,
+ SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC = 12721,
SPELL_WARRIOR_EXECUTE = 20647,
SPELL_WARRIOR_GLYPH_OF_EXECUTION = 58367,
SPELL_WARRIOR_GLYPH_OF_VIGILANCE = 63326,
@@ -99,14 +99,14 @@ class spell_warr_bloodthirst : public SpellScriptLoader
GetCaster()->CastCustomSpell(GetCaster(), SPELL_WARRIOR_BLOODTHIRST, &damage, NULL, NULL, true, NULL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_warr_bloodthirst_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
OnEffectHit += SpellEffectFn(spell_warr_bloodthirst_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warr_bloodthirst_SpellScript();
}
@@ -128,13 +128,13 @@ class spell_warr_bloodthirst_heal : public SpellScriptLoader
SetHitHeal(GetCaster()->CountPctFromMaxHealth(spellInfo->Effects[EFFECT_1].CalcValue(GetCaster())));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_warr_bloodthirst_heal_SpellScript::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warr_bloodthirst_heal_SpellScript();
}
@@ -150,7 +150,7 @@ class spell_warr_charge : public SpellScriptLoader
{
PrepareSpellScript(spell_warr_charge_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_BUFF) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_CHARGE))
return false;
@@ -168,13 +168,13 @@ class spell_warr_charge : public SpellScriptLoader
caster->CastSpell(caster, SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_BUFF, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_warr_charge_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warr_charge_SpellScript();
}
@@ -195,13 +195,13 @@ class spell_warr_concussion_blow : public SpellScriptLoader
SetHitDamage(CalculatePct(GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK), GetEffectValue()));
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_warr_concussion_blow_SpellScript::HandleDummy, EFFECT_2, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warr_concussion_blow_SpellScript();
}
@@ -217,7 +217,7 @@ class spell_warr_damage_shield : public SpellScriptLoader
{
PrepareAuraScript(spell_warr_damage_shield_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DAMAGE_SHIELD_DAMAGE))
return false;
@@ -233,13 +233,13 @@ class spell_warr_damage_shield : public SpellScriptLoader
GetTarget()->CastCustomSpell(SPELL_WARRIOR_DAMAGE_SHIELD_DAMAGE, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetProcTarget(), true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_warr_damage_shield_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warr_damage_shield_AuraScript();
}
@@ -255,7 +255,7 @@ class spell_warr_deep_wounds : public SpellScriptLoader
{
PrepareSpellScript(spell_warr_deep_wounds_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_1) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_2) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_3))
return false;
@@ -268,33 +268,28 @@ class spell_warr_deep_wounds : public SpellScriptLoader
Unit* caster = GetCaster();
if (Unit* target = GetHitUnit())
{
- // apply percent damage mods
- damage = caster->SpellDamageBonusDone(target, GetSpellInfo(), damage, SPELL_DIRECT_DAMAGE);
-
ApplyPct(damage, 16 * GetSpellInfo()->GetRank());
- damage = target->SpellDamageBonusTaken(caster, GetSpellInfo(), damage, SPELL_DIRECT_DAMAGE);
-
- SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC);
+ SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC);
uint32 ticks = spellInfo->GetDuration() / spellInfo->Effects[EFFECT_0].Amplitude;
// Add remaining ticks to damage done
- if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC, EFFECT_0, caster->GetGUID()))
- damage += aurEff->GetAmount() * (ticks - aurEff->GetTickNumber());
+ if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC, EFFECT_0, caster->GetGUID()))
+ damage += aurEff->GetDamage() * (ticks - aurEff->GetTickNumber());
damage /= ticks;
- caster->CastCustomSpell(target, SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC, &damage, NULL, NULL, true);
+ caster->CastCustomSpell(target, SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC, &damage, NULL, NULL, true);
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_warr_deep_wounds_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warr_deep_wounds_SpellScript();
}
@@ -310,7 +305,7 @@ class spell_warr_execute : public SpellScriptLoader
{
PrepareSpellScript(spell_warr_execute_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_EXECUTE) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_GLYPH_OF_EXECUTION))
return false;
@@ -344,13 +339,13 @@ class spell_warr_execute : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_warr_execute_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warr_execute_SpellScript();
}
@@ -380,13 +375,13 @@ class spell_warr_glyph_of_sunder_armor : public SpellScriptLoader
spellMod->value = aurEff->GetAmount();
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_warr_glyph_of_sunder_armor_AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warr_glyph_of_sunder_armor_AuraScript();
}
@@ -408,13 +403,13 @@ class spell_warr_improved_spell_reflection : public SpellScriptLoader
unitList.remove(GetCaster());
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warr_improved_spell_reflection_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_PARTY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warr_improved_spell_reflection_SpellScript();
}
@@ -435,14 +430,14 @@ class spell_warr_intimidating_shout : public SpellScriptLoader
unitList.remove(GetExplTargetWorldObject());
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warr_intimidating_shout_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warr_intimidating_shout_SpellScript::FilterTargets, EFFECT_2, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warr_intimidating_shout_SpellScript();
}
@@ -458,7 +453,7 @@ class spell_warr_last_stand : public SpellScriptLoader
{
PrepareSpellScript(spell_warr_last_stand_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_LAST_STAND_TRIGGERED))
return false;
@@ -472,13 +467,13 @@ class spell_warr_last_stand : public SpellScriptLoader
caster->CastCustomSpell(caster, SPELL_WARRIOR_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, NULL, NULL, true, NULL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHit += SpellEffectFn(spell_warr_last_stand_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warr_last_stand_SpellScript();
}
@@ -506,17 +501,17 @@ class spell_warr_overpower : public SpellScriptLoader
return;
if (Player* target = GetHitPlayer())
- if (target->HasUnitState(UNIT_STATE_CASTING))
+ if (target->IsNonMeleeSpellCast(false, false, true)) // UNIT_STATE_CASTING should not be used here, it's present during a tick for instant casts
target->CastSpell(target, spellId, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_warr_overpower_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_ANY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warr_overpower_SpellScript();
}
@@ -556,13 +551,13 @@ class spell_warr_rend : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warr_rend_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warr_rend_AuraScript();
}
@@ -578,7 +573,7 @@ class spell_warr_retaliation : public SpellScriptLoader
{
PrepareAuraScript(spell_warr_retaliation_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_RETALIATION_DAMAGE))
return false;
@@ -588,7 +583,7 @@ class spell_warr_retaliation : public SpellScriptLoader
bool CheckProc(ProcEventInfo& eventInfo)
{
// check attack comes not from behind and warrior is not stunned
- return GetTarget()->isInFront(eventInfo.GetActor(), M_PI) && !GetTarget()->HasUnitState(UNIT_STATE_STUNNED);
+ return GetTarget()->isInFront(eventInfo.GetActor(), float(M_PI)) && !GetTarget()->HasUnitState(UNIT_STATE_STUNNED);
}
void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
@@ -597,14 +592,14 @@ class spell_warr_retaliation : public SpellScriptLoader
GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARRIOR_RETALIATION_DAMAGE, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_warr_retaliation_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_warr_retaliation_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warr_retaliation_AuraScript();
}
@@ -629,13 +624,13 @@ class spell_warr_shattering_throw : public SpellScriptLoader
target->RemoveAurasWithMechanic(1 << MECHANIC_IMMUNE_SHIELD, AURA_REMOVE_BY_ENEMY_SPELL);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_warr_shattering_throw_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warr_shattering_throw_SpellScript();
}
@@ -651,7 +646,7 @@ class spell_warr_slam : public SpellScriptLoader
{
PrepareSpellScript(spell_warr_slam_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SLAM))
return false;
@@ -664,13 +659,13 @@ class spell_warr_slam : public SpellScriptLoader
GetCaster()->CastCustomSpell(SPELL_WARRIOR_SLAM, SPELLVALUE_BASE_POINT0, GetEffectValue(), GetHitUnit(), TRIGGERED_FULL_MASK);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_warr_slam_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warr_slam_SpellScript();
}
@@ -686,14 +681,14 @@ class spell_warr_sweeping_strikes : public SpellScriptLoader
{
PrepareAuraScript(spell_warr_sweeping_strikes_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_1) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_2))
return false;
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
_procTarget = NULL;
return true;
@@ -702,7 +697,7 @@ class spell_warr_sweeping_strikes : public SpellScriptLoader
bool CheckProc(ProcEventInfo& eventInfo)
{
_procTarget = eventInfo.GetActor()->SelectNearbyTarget(eventInfo.GetProcTarget());
- return _procTarget;
+ return _procTarget != nullptr;
}
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
@@ -724,7 +719,7 @@ class spell_warr_sweeping_strikes : public SpellScriptLoader
}
}
- void Register() OVERRIDE
+ void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_warr_sweeping_strikes_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_warr_sweeping_strikes_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
@@ -734,7 +729,7 @@ class spell_warr_sweeping_strikes : public SpellScriptLoader
Unit* _procTarget;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warr_sweeping_strikes_AuraScript();
}
@@ -750,7 +745,7 @@ class spell_warr_vigilance : public SpellScriptLoader
{
PrepareAuraScript(spell_warr_vigilance_AuraScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_GLYPH_OF_VIGILANCE))
return false;
@@ -763,7 +758,7 @@ class spell_warr_vigilance : public SpellScriptLoader
return true;
}
- bool Load() OVERRIDE
+ bool Load() override
{
_procTarget = NULL;
return true;
@@ -806,7 +801,7 @@ class spell_warr_vigilance : public SpellScriptLoader
bool CheckProc(ProcEventInfo& /*eventInfo*/)
{
_procTarget = GetCaster();
- return _procTarget;
+ return _procTarget != nullptr;
}
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
@@ -815,7 +810,7 @@ class spell_warr_vigilance : public SpellScriptLoader
GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_VIGILANCE_PROC, true, NULL, aurEff);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_warr_vigilance_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
AfterEffectApply += AuraEffectApplyFn(spell_warr_vigilance_AuraScript::HandleAfterApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
@@ -828,7 +823,7 @@ class spell_warr_vigilance : public SpellScriptLoader
Unit* _procTarget;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ AuraScript* GetAuraScript() const override
{
return new spell_warr_vigilance_AuraScript();
}
@@ -853,13 +848,13 @@ class spell_warr_vigilance_trigger : public SpellScriptLoader
target->RemoveSpellCooldown(SPELL_WARRIOR_TAUNT, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_warr_vigilance_trigger_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_warr_vigilance_trigger_SpellScript();
}
diff --git a/src/server/scripts/World/CMakeLists.txt b/src/server/scripts/World/CMakeLists.txt
index 7d1b46732cf..56a0a1eb4c7 100644
--- a/src/server/scripts/World/CMakeLists.txt
+++ b/src/server/scripts/World/CMakeLists.txt
@@ -8,20 +8,11 @@
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+file(GLOB_RECURSE sources_World World/*.cpp World/*.h)
+
set(scripts_STAT_SRCS
${scripts_STAT_SRCS}
- World/achievement_scripts.cpp
- World/areatrigger_scripts.cpp
- World/boss_emerald_dragons.cpp
- World/chat_log.cpp
- World/go_scripts.cpp
- World/guards.cpp
- World/item_scripts.cpp
- World/mob_generic_creature.cpp
- World/npc_innkeeper.cpp
- World/npc_professions.cpp
- World/npc_taxi.cpp
- World/npcs_special.cpp
+ ${sources_World}
)
message(" -> Prepared: World")
diff --git a/src/server/scripts/World/achievement_scripts.cpp b/src/server/scripts/World/achievement_scripts.cpp
index 8ddfb0e9335..52d99ba0746 100644
--- a/src/server/scripts/World/achievement_scripts.cpp
+++ b/src/server/scripts/World/achievement_scripts.cpp
@@ -27,7 +27,7 @@ class achievement_resilient_victory : public AchievementCriteriaScript
public:
achievement_resilient_victory() : AchievementCriteriaScript("achievement_resilient_victory") { }
- bool OnCheck(Player* source, Unit* target) OVERRIDE
+ bool OnCheck(Player* source, Unit* target) override
{
if (Battleground* bg = source->GetBattleground())
return bg->CheckAchievementCriteriaMeet(BG_CRITERIA_CHECK_RESILIENT_VICTORY, source, target);
@@ -41,7 +41,7 @@ class achievement_bg_control_all_nodes : public AchievementCriteriaScript
public:
achievement_bg_control_all_nodes() : AchievementCriteriaScript("achievement_bg_control_all_nodes") { }
- bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE
+ bool OnCheck(Player* source, Unit* /*target*/) override
{
if (Battleground* bg = source->GetBattleground())
return bg->IsAllNodesControlledByTeam(source->GetTeam());
@@ -55,7 +55,7 @@ class achievement_save_the_day : public AchievementCriteriaScript
public:
achievement_save_the_day() : AchievementCriteriaScript("achievement_save_the_day") { }
- bool OnCheck(Player* source, Unit* target) OVERRIDE
+ bool OnCheck(Player* source, Unit* target) override
{
if (Battleground* bg = source->GetBattleground())
return bg->CheckAchievementCriteriaMeet(BG_CRITERIA_CHECK_SAVE_THE_DAY, source, target);
@@ -69,7 +69,7 @@ class achievement_bg_ic_resource_glut : public AchievementCriteriaScript
public:
achievement_bg_ic_resource_glut() : AchievementCriteriaScript("achievement_bg_ic_resource_glut") { }
- bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE
+ bool OnCheck(Player* source, Unit* /*target*/) override
{
if (source->HasAura(SPELL_OIL_REFINERY) && source->HasAura(SPELL_QUARRY))
return true;
@@ -83,7 +83,7 @@ class achievement_bg_ic_glaive_grave : public AchievementCriteriaScript
public:
achievement_bg_ic_glaive_grave() : AchievementCriteriaScript("achievement_bg_ic_glaive_grave") { }
- bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE
+ bool OnCheck(Player* source, Unit* /*target*/) override
{
if (Creature* vehicle = source->GetVehicleCreatureBase())
{
@@ -100,7 +100,7 @@ class achievement_bg_ic_mowed_down : public AchievementCriteriaScript
public:
achievement_bg_ic_mowed_down() : AchievementCriteriaScript("achievement_bg_ic_mowed_down") { }
- bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE
+ bool OnCheck(Player* source, Unit* /*target*/) override
{
if (Creature* vehicle = source->GetVehicleCreatureBase())
{
@@ -117,7 +117,7 @@ class achievement_bg_sa_artillery : public AchievementCriteriaScript
public:
achievement_bg_sa_artillery() : AchievementCriteriaScript("achievement_bg_sa_artillery") { }
- bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE
+ bool OnCheck(Player* source, Unit* /*target*/) override
{
if (Creature* vehicle = source->GetVehicleCreatureBase())
{
@@ -137,7 +137,7 @@ class achievement_arena_kills : public AchievementCriteriaScript
{
}
- bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE
+ bool OnCheck(Player* source, Unit* /*target*/) override
{
// this checks GetBattleground() for NULL already
if (!source->InArena())
@@ -155,7 +155,7 @@ class achievement_sickly_gazelle : public AchievementCriteriaScript
public:
achievement_sickly_gazelle() : AchievementCriteriaScript("achievement_sickly_gazelle") { }
- bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE
+ bool OnCheck(Player* /*source*/, Unit* target) override
{
if (!target)
return false;
@@ -173,7 +173,7 @@ class achievement_everything_counts : public AchievementCriteriaScript
public:
achievement_everything_counts() : AchievementCriteriaScript("achievement_everything_counts") { }
- bool OnCheck(Player* source, Unit* target) OVERRIDE
+ bool OnCheck(Player* source, Unit* target) override
{
if (Battleground* bg = source->GetBattleground())
return bg->CheckAchievementCriteriaMeet(BG_CRITERIA_CHECK_EVERYTHING_COUNTS, source, target);
@@ -187,7 +187,7 @@ class achievement_bg_av_perfection : public AchievementCriteriaScript
public:
achievement_bg_av_perfection() : AchievementCriteriaScript("achievement_bg_av_perfection") { }
- bool OnCheck(Player* source, Unit* target) OVERRIDE
+ bool OnCheck(Player* source, Unit* target) override
{
if (Battleground* bg = source->GetBattleground())
return bg->CheckAchievementCriteriaMeet(BG_CRITERIA_CHECK_AV_PERFECTION, source, target);
@@ -201,7 +201,7 @@ class achievement_bg_sa_defense_of_ancients : public AchievementCriteriaScript
public:
achievement_bg_sa_defense_of_ancients() : AchievementCriteriaScript("achievement_bg_sa_defense_of_ancients") { }
- bool OnCheck(Player* source, Unit* target) OVERRIDE
+ bool OnCheck(Player* source, Unit* target) override
{
if (Battleground* bg = source->GetBattleground())
return bg->CheckAchievementCriteriaMeet(BG_CRITERIA_CHECK_DEFENSE_OF_THE_ANCIENTS, source, target);
@@ -225,7 +225,7 @@ class achievement_tilted : public AchievementCriteriaScript
public:
achievement_tilted() : AchievementCriteriaScript("achievement_tilted") { }
- bool OnCheck(Player* player, Unit* /*target*/) OVERRIDE
+ bool OnCheck(Player* player, Unit* /*target*/) override
{
if (!player)
return false;
@@ -246,7 +246,7 @@ class achievement_not_even_a_scratch : public AchievementCriteriaScript
public:
achievement_not_even_a_scratch() : AchievementCriteriaScript("achievement_not_even_a_scratch") { }
- bool OnCheck(Player* source, Unit* target) OVERRIDE
+ bool OnCheck(Player* source, Unit* target) override
{
if (Battleground* bg = source->GetBattleground())
return bg->CheckAchievementCriteriaMeet(BG_CRITERIA_CHECK_NOT_EVEN_A_SCRATCH, source, target);
@@ -267,7 +267,7 @@ class achievement_flirt_with_disaster_perf_check : public AchievementCriteriaScr
public:
achievement_flirt_with_disaster_perf_check() : AchievementCriteriaScript("achievement_flirt_with_disaster_perf_check") { }
- bool OnCheck(Player* player, Unit* /*target*/) OVERRIDE
+ bool OnCheck(Player* player, Unit* /*target*/) override
{
if (!player)
return false;
@@ -284,7 +284,7 @@ class achievement_killed_exp_or_honor_target : public AchievementCriteriaScript
public:
achievement_killed_exp_or_honor_target() : AchievementCriteriaScript("achievement_killed_exp_or_honor_target") { }
- bool OnCheck(Player* player, Unit* target) OVERRIDE
+ bool OnCheck(Player* player, Unit* target) override
{
return target && player->isHonorOrXPTarget(target);
}
diff --git a/src/server/scripts/World/action_ip_logger.cpp b/src/server/scripts/World/action_ip_logger.cpp
new file mode 100644
index 00000000000..057f3d6ee36
--- /dev/null
+++ b/src/server/scripts/World/action_ip_logger.cpp
@@ -0,0 +1,315 @@
+/*
+ * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "ScriptMgr.h"
+#include "Channel.h"
+#include "Guild.h"
+#include "Group.h"
+
+enum IPLoggingTypes
+{
+
+ // AccountActionIpLogger();
+ ACCOUNT_LOGIN = 0,
+ ACCOUNT_FAIL_LOGIN = 1,
+ ACCOUNT_CHANGE_PW = 2,
+ ACCOUNT_CHANGE_PW_FAIL = 3, // Only two types of account changes exist...
+ ACCOUNT_CHANGE_EMAIL = 4,
+ ACCOUNT_CHANGE_EMAIL_FAIL = 5, // ...so we log them individually
+ // OBSOLETE - ACCOUNT_LOGOUT = 6, /* Can not be logged. We still keep the type however */
+ // CharacterActionIpLogger();
+ CHARACTER_CREATE = 7,
+ CHARACTER_LOGIN = 8,
+ CHARACTER_LOGOUT = 9,
+ // CharacterDeleteActionIpLogger();
+ CHARACTER_DELETE = 10,
+ CHARACTER_FAILED_DELETE = 11,
+ // AccountActionIpLogger(), CharacterActionIpLogger(), CharacterActionIpLogger();
+ UNKNOWN_ACTION = 12
+};
+
+class AccountActionIpLogger : public AccountScript
+{
+ public:
+ AccountActionIpLogger() : AccountScript("AccountActionIpLogger") { }
+
+ // We log last_ip instead of last_attempt_ip, as login was successful
+ // ACCOUNT_LOGIN = 0
+ void OnAccountLogin(uint32 accountId) override
+ {
+ AccountIPLogAction(accountId, ACCOUNT_LOGIN);
+ }
+
+ // We log last_attempt_ip instead of last_ip, as failed login doesn't necessarily mean approperiate user
+ // ACCOUNT_FAIL_LOGIN = 1
+ void OnFailedAccountLogin(uint32 accountId) override
+ {
+ AccountIPLogAction(accountId, ACCOUNT_FAIL_LOGIN);
+ }
+
+ // ACCOUNT_CHANGE_PW = 2
+ void OnPasswordChange(uint32 accountId) override
+ {
+ AccountIPLogAction(accountId, ACCOUNT_CHANGE_PW);
+ }
+
+ // ACCOUNT_CHANGE_PW_FAIL = 3
+ void OnFailedPasswordChange(uint32 accountId) override
+ {
+ AccountIPLogAction(accountId, ACCOUNT_CHANGE_PW_FAIL);
+ }
+
+ // Registration Email can NOT be changed apart from GM level users. Thus, we do not require to log them...
+ // ACCOUNT_CHANGE_EMAIL = 4
+ void OnEmailChange(uint32 accountId) override
+ {
+ AccountIPLogAction(accountId, ACCOUNT_CHANGE_EMAIL); // ... they get logged by gm command logger anyway
+ }
+
+ // ACCOUNT_CHANGE_EMAIL_FAIL = 5
+ void OnFailedEmailChange(uint32 accountId) override
+ {
+ AccountIPLogAction(accountId, ACCOUNT_CHANGE_EMAIL_FAIL);
+ }
+
+ /* It's impossible to log the account logout process out of character selection - shouldn't matter anyway,
+ * as ip doesn't change through playing (obviously).*/
+ // ACCOUNT_LOGOUT = 6
+ void AccountIPLogAction(uint32 accountId, IPLoggingTypes aType)
+ {
+ // Action IP Logger is only intialized if config is set up
+ // Else, this script isn't loaded in the first place: We require no config check.
+
+ // We declare all the required variables
+ uint32 playerGuid = accountId;
+ uint32 characterGuid = 0;
+ std::string systemNote = "ERROR"; // "ERROR" is a placeholder here. We change it later.
+
+ // With this switch, we change systemNote so that we have a more accurate phrasing of what type it is.
+ // Avoids Magicnumbers in SQL table
+ switch (aType)
+ {
+ case ACCOUNT_LOGIN:
+ systemNote = "Logged on Successful AccountLogin";
+ break;
+ case ACCOUNT_FAIL_LOGIN:
+ systemNote = "Logged on Failed AccountLogin";
+ break;
+ case ACCOUNT_CHANGE_PW:
+ systemNote = "Logged on Successful Account Password Change";
+ break;
+ case ACCOUNT_CHANGE_PW_FAIL:
+ systemNote = "Logged on Failed Account Password Change";
+ break;
+ case ACCOUNT_CHANGE_EMAIL:
+ systemNote = "Logged on Successful Account Email Change";
+ break;
+ case ACCOUNT_CHANGE_EMAIL_FAIL:
+ systemNote = "Logged on Failed Account Email Change";
+ break;
+ /*case ACCOUNT_LOGOUT:
+ systemNote = "Logged on AccountLogout"; //Can not be logged
+ break;*/
+ // Neither should happen. Ever. Period. If it does, call Ghostbusters and all your local software defences to investigate.
+ case UNKNOWN_ACTION:
+ default:
+ systemNote = "ERROR! Unknown action!";
+ break;
+ }
+
+ // Once we have done everything, we can insert the new log.
+ // Seeing as the time differences should be minimal, we do not get unixtime and the timestamp right now;
+ // Rather, we let it be added with the SQL query.
+ if (aType != ACCOUNT_FAIL_LOGIN)
+ {
+ // As we can assume most account actions are NOT failed login, so this is the more accurate check.
+ // For those, we need last_ip...
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_ALDL_IP_LOGGING);
+
+ stmt->setUInt32(0, playerGuid);
+ stmt->setUInt32(1, characterGuid);
+ stmt->setUInt8(2, aType);
+ stmt->setUInt32(3, playerGuid);
+ stmt->setString(4, systemNote.c_str());
+ LoginDatabase.Execute(stmt);
+ }
+ else // ... but for failed login, we query last_attempt_ip from account table. Which we do with an unique query
+ {
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_FACL_IP_LOGGING);
+
+ stmt->setUInt32(0, playerGuid);
+ stmt->setUInt32(1, characterGuid);
+ stmt->setUInt8(2, aType);
+ stmt->setUInt32(3, playerGuid);
+ stmt->setString(4, systemNote.c_str());
+ LoginDatabase.Execute(stmt);
+ }
+ return;
+ }
+};
+
+class CharacterActionIpLogger : public PlayerScript
+{
+ public:
+ CharacterActionIpLogger() : PlayerScript("CharacterActionIpLogger") { }
+
+ // CHARACTER_CREATE = 7
+ void OnCreate(Player* player) override
+ {
+ CharacterIPLogAction(player, CHARACTER_CREATE);
+ }
+
+ // CHARACTER_LOGIN = 8
+ void OnLogin(Player* player, bool /*firstLogin*/) override
+ {
+ CharacterIPLogAction(player, CHARACTER_LOGIN);
+ }
+
+ // CHARACTER_LOGOUT = 9
+ void OnLogout(Player* player) override
+ {
+ CharacterIPLogAction(player, CHARACTER_LOGOUT);
+ }
+
+ // CHARACTER_DELETE = 10
+ // CHARACTER_FAILED_DELETE = 11
+ // We don't log either here - they require a guid
+
+ // UNKNOWN_ACTION = 12
+ // There is no real hook we could use for that.
+ // Shouldn't happen anyway, should it ? Nothing to see here.
+
+ /// Logs a number of actions done by players with an IP
+ void CharacterIPLogAction(Player* player, IPLoggingTypes aType)
+ {
+ // Action IP Logger is only intialized if config is set up
+ // Else, this script isn't loaded in the first place: We require no config check.
+
+ // We declare all the required variables
+ uint32 playerGuid = player->GetSession()->GetAccountId();
+ uint32 characterGuid = player->GetGUIDLow();
+ const std::string currentIp = player->GetSession()->GetRemoteAddress();
+ std::string systemNote = "ERROR"; // "ERROR" is a placeholder here. We change it...
+
+ // ... with this switch, so that we have a more accurate phrasing of what type it is
+ switch (aType)
+ {
+ case CHARACTER_CREATE:
+ systemNote = "Logged on CharacterCreate";
+ break;
+ case CHARACTER_LOGIN:
+ systemNote = "Logged on CharacterLogin";
+ break;
+ case CHARACTER_LOGOUT:
+ systemNote = "Logged on CharacterLogout";
+ break;
+ case CHARACTER_DELETE:
+ systemNote = "Logged on CharacterDelete";
+ break;
+ case CHARACTER_FAILED_DELETE:
+ systemNote = "Logged on Failed CharacterDelete";
+ break;
+ // Neither should happen. Ever. Period. If it does, call Mythbusters.
+ case UNKNOWN_ACTION:
+ default:
+ systemNote = "ERROR! Unknown action!";
+ break;
+ }
+
+ // Once we have done everything, we can insert the new log.
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_CHAR_IP_LOGGING);
+
+ stmt->setUInt32(0, playerGuid);
+ stmt->setUInt32(1, characterGuid);
+ stmt->setUInt8(2, aType);
+ stmt->setString(3, currentIp.c_str()); // We query the ip here.
+ stmt->setString(4, systemNote.c_str());
+ // Seeing as the time differences should be minimal, we do not get unixtime and the timestamp right now;
+ // Rather, we let it be added with the SQL query.
+
+ LoginDatabase.Execute(stmt);
+ return;
+ }
+};
+
+class CharacterDeleteActionIpLogger : public PlayerScript
+{
+public:
+ CharacterDeleteActionIpLogger() : PlayerScript("CharacterDeleteActionIpLogger") { }
+
+ // CHARACTER_DELETE = 10
+ void OnDelete(uint64 guid, uint32 accountId) override
+ {
+ DeleteIPLogAction(guid, accountId, CHARACTER_DELETE);
+ }
+
+ // CHARACTER_FAILED_DELETE = 11
+ void OnFailedDelete(uint64 guid, uint32 accountId) override
+ {
+ DeleteIPLogAction(guid, accountId, CHARACTER_FAILED_DELETE);
+ }
+
+ void DeleteIPLogAction(uint64 guid, uint32 playerGuid, IPLoggingTypes aType)
+ {
+ // Action IP Logger is only intialized if config is set up
+ // Else, this script isn't loaded in the first place: We require no config check.
+
+ // We declare all the required variables
+ uint32 characterGuid = GUID_LOPART(guid); // We have no access to any member function of Player* or WorldSession*. So use old-fashioned way.
+ // Query playerGuid/accountId, as we only have characterGuid
+ std::string systemNote = "ERROR"; // "ERROR" is a placeholder here. We change it later.
+
+ // With this switch, we change systemNote so that we have a more accurate phrasing of what type it is.
+ // Avoids Magicnumbers in SQL table
+ switch (aType)
+ {
+ case CHARACTER_DELETE:
+ systemNote = "Logged on CharacterDelete";
+ break;
+ case CHARACTER_FAILED_DELETE:
+ systemNote = "Logged on Failed CharacterDelete";
+ break;
+ // Neither should happen. Ever. Period. If it does, call to whatever god you have for mercy and guidance.
+ case UNKNOWN_ACTION:
+ default:
+ systemNote = "ERROR! Unknown action!";
+ break;
+ }
+
+ // Once we have done everything, we can insert the new log.
+ PreparedStatement* stmt2 = LoginDatabase.GetPreparedStatement(LOGIN_INS_ALDL_IP_LOGGING);
+
+ stmt2->setUInt32(0, playerGuid);
+ stmt2->setUInt32(1, characterGuid);
+ stmt2->setUInt8(2, aType);
+ stmt2->setUInt32(3, playerGuid);
+ stmt2->setString(4, systemNote.c_str());
+ // Seeing as the time differences should be minimal, we do not get unixtime and the timestamp right now;
+ // Rather, we let it be added with the SQL query.
+
+ LoginDatabase.Execute(stmt2);
+ return;
+ }
+};
+
+
+void AddSC_action_ip_logger()
+{
+ new AccountActionIpLogger();
+ new CharacterActionIpLogger();
+ new CharacterDeleteActionIpLogger();
+}
diff --git a/src/server/scripts/World/areatrigger_scripts.cpp b/src/server/scripts/World/areatrigger_scripts.cpp
index d95c4f878fa..dcba4cf9573 100644
--- a/src/server/scripts/World/areatrigger_scripts.cpp
+++ b/src/server/scripts/World/areatrigger_scripts.cpp
@@ -51,13 +51,9 @@ enum CoilfangGOs
class AreaTrigger_at_coilfang_waterfall : public AreaTriggerScript
{
public:
+ AreaTrigger_at_coilfang_waterfall() : AreaTriggerScript("at_coilfang_waterfall") { }
- AreaTrigger_at_coilfang_waterfall()
- : AreaTriggerScript("at_coilfang_waterfall")
- {
- }
-
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override
{
if (GameObject* go = GetClosestGameObjectWithEntry(player, GO_COILFANG_WATERFALL, 35.0f))
if (go->getLootState() == GO_READY)
@@ -83,13 +79,9 @@ enum LegionTeleporter
class AreaTrigger_at_legion_teleporter : public AreaTriggerScript
{
public:
+ AreaTrigger_at_legion_teleporter() : AreaTriggerScript("at_legion_teleporter") { }
- AreaTrigger_at_legion_teleporter()
- : AreaTriggerScript("at_legion_teleporter")
- {
- }
-
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override
{
if (player->IsAlive() && !player->IsInCombat())
{
@@ -125,13 +117,9 @@ enum StormwrightShelf
class AreaTrigger_at_stormwright_shelf : public AreaTriggerScript
{
public:
+ AreaTrigger_at_stormwright_shelf() : AreaTriggerScript("at_stormwright_shelf") { }
- AreaTrigger_at_stormwright_shelf()
- : AreaTriggerScript("at_stormwright_shelf")
- {
- }
-
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override
{
if (!player->isDead() && player->GetQuestStatus(QUEST_STRENGTH_OF_THE_TEMPEST) == QUEST_STATUS_INCOMPLETE)
player->CastSpell(player, SPELL_CREATE_TRUE_POWER_OF_THE_TEMPEST, false);
@@ -153,13 +141,9 @@ enum ScentLarkorwi
class AreaTrigger_at_scent_larkorwi : public AreaTriggerScript
{
public:
+ AreaTrigger_at_scent_larkorwi() : AreaTriggerScript("at_scent_larkorwi") { }
- AreaTrigger_at_scent_larkorwi()
- : AreaTriggerScript("at_scent_larkorwi")
- {
- }
-
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override
{
if (!player->isDead() && player->GetQuestStatus(QUEST_SCENT_OF_LARKORWI) == QUEST_STATUS_INCOMPLETE)
{
@@ -184,13 +168,9 @@ enum AtLastRites
class AreaTrigger_at_last_rites : public AreaTriggerScript
{
public:
+ AreaTrigger_at_last_rites() : AreaTriggerScript("at_last_rites") { }
- AreaTrigger_at_last_rites()
- : AreaTriggerScript("at_last_rites")
- {
- }
-
- bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) override
{
if (!(player->GetQuestStatus(QUEST_LAST_RITES) == QUEST_STATUS_INCOMPLETE ||
player->GetQuestStatus(QUEST_LAST_RITES) == QUEST_STATUS_COMPLETE ||
@@ -246,10 +226,9 @@ enum Waygate
class AreaTrigger_at_sholazar_waygate : public AreaTriggerScript
{
public:
-
AreaTrigger_at_sholazar_waygate() : AreaTriggerScript("at_sholazar_waygate") { }
- bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) override
{
if (!player->isDead() && (player->GetQuestStatus(QUEST_MEETING_A_GREAT_ONE) != QUEST_STATUS_NONE ||
(player->GetQuestStatus(QUEST_THE_MAKERS_OVERLOOK) == QUEST_STATUS_REWARDED && player->GetQuestStatus(QUEST_THE_MAKERS_PERCH) == QUEST_STATUS_REWARDED)))
@@ -257,11 +236,11 @@ class AreaTrigger_at_sholazar_waygate : public AreaTriggerScript
switch (trigger->id)
{
case AT_SHOLAZAR:
- player->CastSpell(player, SPELL_SHOLAZAR_TO_UNGORO_TELEPORT, false);
+ player->CastSpell(player, SPELL_SHOLAZAR_TO_UNGORO_TELEPORT, true);
break;
case AT_UNGORO:
- player->CastSpell(player, SPELL_UNGORO_TO_SHOLAZAR_TELEPORT, false);
+ player->CastSpell(player, SPELL_UNGORO_TO_SHOLAZAR_TELEPORT, true);
break;
}
}
@@ -286,7 +265,7 @@ class AreaTrigger_at_nats_landing : public AreaTriggerScript
public:
AreaTrigger_at_nats_landing() : AreaTriggerScript("at_nats_landing") { }
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override
{
if (!player->IsAlive() || !player->HasAura(SPELL_FISH_PASTE))
return false;
@@ -331,7 +310,7 @@ class AreaTrigger_at_brewfest : public AreaTriggerScript
_triggerTimes[AT_BREWFEST_DUROTAR] = _triggerTimes[AT_BREWFEST_DUN_MOROGH] = 0;
}
- bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) override
{
uint32 triggerId = trigger->id;
// Second trigger happened too early after first, skip for now
@@ -384,7 +363,7 @@ class AreaTrigger_at_area_52_entrance : public AreaTriggerScript
_triggerTimes[AT_AREA_52_SOUTH] = _triggerTimes[AT_AREA_52_NORTH] = _triggerTimes[AT_AREA_52_WEST] = _triggerTimes[AT_AREA_52_EAST] = 0;
}
- bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) override
{
float x = 0.0f, y = 0.0f, z = 0.0f;
@@ -456,16 +435,16 @@ public:
stormforgedEradictorGUID = 0;
}
- bool OnTrigger(Player* player, AreaTriggerEntry const* /* trigger */) OVERRIDE
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /* trigger */) override
{
if (player->GetQuestStatus(QUEST_THE_LONESOME_WATCHER) != QUEST_STATUS_INCOMPLETE)
return false;
- Creature* stormforgedMonitor = Creature::GetCreature(*player, stormforgedMonitorGUID);
+ Creature* stormforgedMonitor = ObjectAccessor::GetCreature(*player, stormforgedMonitorGUID);
if (stormforgedMonitor)
return false;
- Creature* stormforgedEradictor = Creature::GetCreature(*player, stormforgedEradictorGUID);
+ Creature* stormforgedEradictor = ObjectAccessor::GetCreature(*player, stormforgedEradictorGUID);
if (stormforgedEradictor)
return false;
diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp
index c74405628b5..950b4cd10e9 100644
--- a/src/server/scripts/World/boss_emerald_dragons.cpp
+++ b/src/server/scripts/World/boss_emerald_dragons.cpp
@@ -94,7 +94,7 @@ struct emerald_dragonAI : public WorldBossAI
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
WorldBossAI::Reset();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
@@ -106,14 +106,14 @@ struct emerald_dragonAI : public WorldBossAI
}
// Target killed during encounter, mark them as suspectible for Aura Of Nature
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
who->CastSpell(who, SPELL_MARK_OF_NATURE, true);
}
// Execute and reschedule base events shared between all Emerald Dragons
- void ExecuteEvent(uint32 eventId) OVERRIDE
+ void ExecuteEvent(uint32 eventId) override
{
switch (eventId)
{
@@ -137,7 +137,7 @@ struct emerald_dragonAI : public WorldBossAI
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -172,12 +172,12 @@ class npc_dream_fog : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_roamTimer = 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -209,7 +209,7 @@ class npc_dream_fog : public CreatureScript
uint32 _roamTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_dream_fogAI(creature);
}
@@ -249,21 +249,21 @@ class boss_ysondre : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_stage = 1;
emerald_dragonAI::Reset();
events.ScheduleEvent(EVENT_LIGHTNING_WAVE, 12000);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
Talk(SAY_YSONDRE_AGGRO);
WorldBossAI::EnterCombat(who);
}
// Summon druid spirits on 75%, 50% and 25% health
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
if (!HealthAbovePct(100 - 25 * _stage))
{
@@ -275,7 +275,7 @@ class boss_ysondre : public CreatureScript
}
}
- void ExecuteEvent(uint32 eventId) OVERRIDE
+ void ExecuteEvent(uint32 eventId) override
{
switch (eventId)
{
@@ -293,7 +293,7 @@ class boss_ysondre : public CreatureScript
uint8 _stage;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_ysondreAI(creature);
}
@@ -337,20 +337,20 @@ class boss_lethon : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_stage = 1;
emerald_dragonAI::Reset();
events.ScheduleEvent(EVENT_SHADOW_BOLT_WHIRL, 10000);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
Talk(SAY_LETHON_AGGRO);
WorldBossAI::EnterCombat(who);
}
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
if (!HealthAbovePct(100 - 25 * _stage))
{
@@ -360,17 +360,16 @@ class boss_lethon : public CreatureScript
}
}
- void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE
+ void SpellHitTarget(Unit* target, SpellInfo const* spell) override
{
if (spell->Id == SPELL_DRAW_SPIRIT && target->GetTypeId() == TYPEID_PLAYER)
{
- Position targetPos;
- target->GetPosition(&targetPos);
+ Position targetPos = target->GetPosition();
me->SummonCreature(NPC_SPIRIT_SHADE, targetPos, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 50000);
}
}
- void ExecuteEvent(uint32 eventId) OVERRIDE
+ void ExecuteEvent(uint32 eventId) override
{
switch (eventId)
{
@@ -388,7 +387,7 @@ class boss_lethon : public CreatureScript
uint8 _stage;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_lethonAI(creature);
}
@@ -405,13 +404,13 @@ class npc_spirit_shade : public CreatureScript
{
}
- void IsSummonedBy(Unit* summoner) OVERRIDE
+ void IsSummonedBy(Unit* summoner) override
{
_summonerGuid = summoner->GetGUID();
me->GetMotionMaster()->MoveFollow(summoner, 0.0f, 0.0f);
}
- void MovementInform(uint32 moveType, uint32 data) OVERRIDE
+ void MovementInform(uint32 moveType, uint32 data) override
{
if (moveType == FOLLOW_MOTION_TYPE && data == _summonerGuid)
{
@@ -424,7 +423,7 @@ class npc_spirit_shade : public CreatureScript
uint64 _summonerGuid;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_spirit_shadeAI(creature);
}
@@ -460,27 +459,27 @@ class boss_emeriss : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
_stage = 1;
emerald_dragonAI::Reset();
events.ScheduleEvent(EVENT_VOLATILE_INFECTION, 12000);
}
- void KilledUnit(Unit* who) OVERRIDE
+ void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
DoCast(who, SPELL_PUTRID_MUSHROOM, true);
emerald_dragonAI::KilledUnit(who);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
Talk(SAY_EMERISS_AGGRO);
WorldBossAI::EnterCombat(who);
}
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
if (!HealthAbovePct(100 - 25 * _stage))
{
@@ -490,7 +489,7 @@ class boss_emeriss : public CreatureScript
}
}
- void ExecuteEvent(uint32 eventId) OVERRIDE
+ void ExecuteEvent(uint32 eventId) override
{
switch (eventId)
{
@@ -508,7 +507,7 @@ class boss_emeriss : public CreatureScript
uint8 _stage;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_emerissAI(creature);
}
@@ -552,7 +551,7 @@ class boss_taerar : public CreatureScript
{
}
- void Reset() OVERRIDE
+ void Reset() override
{
me->RemoveAurasDueToSpell(SPELL_SHADE);
_stage = 1;
@@ -566,18 +565,18 @@ class boss_taerar : public CreatureScript
events.ScheduleEvent(EVENT_BELLOWING_ROAR, 30000);
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
Talk(SAY_TAERAR_AGGRO);
emerald_dragonAI::EnterCombat(who);
}
- void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) OVERRIDE
+ void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) override
{
--_shades;
}
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
// At 75, 50 or 25 percent health, we need to activate the shades and go "banished"
// Note: _stage holds the amount of times they have been summoned
@@ -604,7 +603,7 @@ class boss_taerar : public CreatureScript
}
}
- void ExecuteEvent(uint32 eventId) OVERRIDE
+ void ExecuteEvent(uint32 eventId) override
{
switch (eventId)
{
@@ -622,7 +621,7 @@ class boss_taerar : public CreatureScript
}
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!me->IsInCombat())
return;
@@ -658,7 +657,7 @@ class boss_taerar : public CreatureScript
uint8 _stage; // check which "shade phase" we're at (75-50-25 percentage counters)
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new boss_taerarAI(creature);
}
@@ -695,13 +694,13 @@ class spell_dream_fog_sleep : public SpellScriptLoader
targets.remove_if(DreamFogTargetSelector());
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dream_fog_sleep_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_dream_fog_sleep_SpellScript();
}
@@ -734,7 +733,7 @@ class spell_mark_of_nature : public SpellScriptLoader
{
PrepareSpellScript(spell_mark_of_nature_SpellScript);
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_MARK_OF_NATURE))
return false;
@@ -754,14 +753,14 @@ class spell_mark_of_nature : public SpellScriptLoader
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_AURA_OF_NATURE, true);
}
- void Register() OVERRIDE
+ void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mark_of_nature_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnEffectHitTarget += SpellEffectFn(spell_mark_of_nature_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ SpellScript* GetSpellScript() const override
{
return new spell_mark_of_nature_SpellScript();
}
@@ -782,4 +781,4 @@ void AddSC_emerald_dragons()
// dragon spellscripts
new spell_dream_fog_sleep();
new spell_mark_of_nature();
-};
+}
diff --git a/src/server/scripts/World/chat_log.cpp b/src/server/scripts/World/chat_log.cpp
index 7074de3ed48..ac0f4478571 100644
--- a/src/server/scripts/World/chat_log.cpp
+++ b/src/server/scripts/World/chat_log.cpp
@@ -25,7 +25,7 @@ class ChatLogScript : public PlayerScript
public:
ChatLogScript() : PlayerScript("ChatLogScript") { }
- void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg) OVERRIDE
+ void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg) override
{
switch (type)
{
@@ -46,7 +46,7 @@ class ChatLogScript : public PlayerScript
}
}
- void OnChat(Player* player, uint32 /*type*/, uint32 lang, std::string& msg, Player* receiver) OVERRIDE
+ void OnChat(Player* player, uint32 /*type*/, uint32 lang, std::string& msg, Player* receiver) override
{
if (lang != LANG_ADDON)
TC_LOG_DEBUG("chat.log.whisper", "Player %s tells %s: %s",
@@ -56,7 +56,7 @@ class ChatLogScript : public PlayerScript
player->GetName().c_str(), receiver ? receiver->GetName().c_str() : "<unknown>", msg.c_str());
}
- void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Group* group) OVERRIDE
+ void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Group* group) override
{
//! NOTE:
//! LANG_ADDON can only be sent by client in "PARTY", "RAID", "GUILD", "BATTLEGROUND", "WHISPER"
@@ -111,7 +111,7 @@ class ChatLogScript : public PlayerScript
}
}
- void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Guild* guild) OVERRIDE
+ void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Guild* guild) override
{
switch (type)
{
@@ -131,7 +131,7 @@ class ChatLogScript : public PlayerScript
}
}
- void OnChat(Player* player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Channel* channel) OVERRIDE
+ void OnChat(Player* player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Channel* channel) override
{
bool isSystem = channel &&
(channel->HasFlag(CHANNEL_FLAG_TRADE) ||
diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp
index ddb4cc4c8d1..3c3f0c2c26b 100644
--- a/src/server/scripts/World/go_scripts.cpp
+++ b/src/server/scripts/World/go_scripts.cpp
@@ -69,7 +69,7 @@ class go_cat_figurine : public GameObjectScript
public:
go_cat_figurine() : GameObjectScript("go_cat_figurine") { }
- bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* /*go*/) override
{
player->CastSpell(player, SPELL_SUMMON_GHOST_SABER, true);
return false;
@@ -85,7 +85,7 @@ class go_barov_journal : public GameObjectScript
public:
go_barov_journal() : GameObjectScript("go_barov_journal") { }
- bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* /*go*/) override
{
if (player->HasSkill(SKILL_TAILORING) && player->GetBaseSkillValue(SKILL_TAILORING) >= 280 && !player->HasSpell(26086))
player->CastSpell(player, 26095, false);
@@ -103,7 +103,7 @@ class go_field_repair_bot_74A : public GameObjectScript
public:
go_field_repair_bot_74A() : GameObjectScript("go_field_repair_bot_74A") { }
- bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* /*go*/) override
{
if (player->HasSkill(SKILL_ENGINEERING) && player->GetBaseSkillValue(SKILL_ENGINEERING) >= 300 && !player->HasSpell(22704))
player->CastSpell(player, 22864, false);
@@ -118,7 +118,8 @@ public:
enum GildedBrazier
{
- NPC_STILLBLADE = 17716,
+ NPC_STILLBLADE = 17716,
+ QUEST_THE_FIRST_TRIAL = 9678
};
class go_gilded_brazier : public GameObjectScript
@@ -126,11 +127,11 @@ class go_gilded_brazier : public GameObjectScript
public:
go_gilded_brazier() : GameObjectScript("go_gilded_brazier") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (go->GetGoType() == GAMEOBJECT_TYPE_GOOBER)
{
- if (player->GetQuestStatus(9678) == QUEST_STATUS_INCOMPLETE)
+ if (player->GetQuestStatus(QUEST_THE_FIRST_TRIAL) == QUEST_STATUS_INCOMPLETE)
{
if (Creature* Stillblade = player->SummonCreature(NPC_STILLBLADE, 8106.11f, -7542.06f, 151.775f, 3.02598f, TEMPSUMMON_DEAD_DESPAWN, 60000))
Stillblade->AI()->AttackStart(player);
@@ -149,7 +150,7 @@ class go_orb_of_command : public GameObjectScript
public:
go_orb_of_command() : GameObjectScript("go_orb_of_command") { }
- bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* /*go*/) override
{
if (player->GetQuestRewardStatus(7761))
player->CastSpell(player, 23460, true);
@@ -167,7 +168,7 @@ class go_tablet_of_madness : public GameObjectScript
public:
go_tablet_of_madness() : GameObjectScript("go_tablet_of_madness") { }
- bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* /*go*/) override
{
if (player->HasSkill(SKILL_ALCHEMY) && player->GetSkillValue(SKILL_ALCHEMY) >= 300 && !player->HasSpell(24266))
player->CastSpell(player, 24267, false);
@@ -186,7 +187,7 @@ public:
go_tablet_of_the_seven() : GameObjectScript("go_tablet_of_the_seven") { }
/// @todo use gossip option ("Transcript the Tablet") instead, if Trinity adds support.
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (go->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER)
return true;
@@ -207,7 +208,7 @@ class go_jump_a_tron : public GameObjectScript
public:
go_jump_a_tron() : GameObjectScript("go_jump_a_tron") { }
- bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* /*go*/) override
{
if (player->GetQuestStatus(10111) == QUEST_STATUS_INCOMPLETE)
player->CastSpell(player, 33382, true);
@@ -241,10 +242,10 @@ class go_ethereum_prison : public GameObjectScript
public:
go_ethereum_prison() : GameObjectScript("go_ethereum_prison") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->UseDoorOrButton();
- int Random = rand() % (sizeof(NpcPrisonEntry) / sizeof(uint32));
+ int Random = rand32() % (sizeof(NpcPrisonEntry) / sizeof(uint32));
if (Creature* creature = player->SummonCreature(NpcPrisonEntry[Random], go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), go->GetAngle(player),
TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000))
@@ -291,10 +292,10 @@ class go_ethereum_stasis : public GameObjectScript
public:
go_ethereum_stasis() : GameObjectScript("go_ethereum_stasis") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->UseDoorOrButton();
- int Random = rand() % (sizeof(NpcStasisEntry) / sizeof(uint32));
+ int Random = rand32() % (sizeof(NpcStasisEntry) / sizeof(uint32));
player->SummonCreature(NpcStasisEntry[Random], go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), go->GetAngle(player),
TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
@@ -317,7 +318,7 @@ class go_resonite_cask : public GameObjectScript
public:
go_resonite_cask() : GameObjectScript("go_resonite_cask") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
if (go->GetGoType() == GAMEOBJECT_TYPE_GOOBER)
go->SummonCreature(NPC_GOGGEROC, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 300000);
@@ -340,7 +341,7 @@ class go_sacred_fire_of_life : public GameObjectScript
public:
go_sacred_fire_of_life() : GameObjectScript("go_sacred_fire_of_life") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (go->GetGoType() == GAMEOBJECT_TYPE_GOOBER)
player->SummonCreature(NPC_ARIKARA, -5008.338f, -2118.894f, 83.657f, 0.874f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
@@ -368,7 +369,7 @@ class go_shrine_of_the_birds : public GameObjectScript
public:
go_shrine_of_the_birds() : GameObjectScript("go_shrine_of_the_birds") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
uint32 BirdEntry = 0;
@@ -411,7 +412,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);
@@ -440,7 +441,7 @@ class go_tele_to_dalaran_crystal : public GameObjectScript
public:
go_tele_to_dalaran_crystal() : GameObjectScript("go_tele_to_dalaran_crystal") { }
- bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* /*go*/) override
{
if (player->GetQuestRewardStatus(QUEST_TELE_CRYSTAL_FLAG))
return false;
@@ -460,7 +461,7 @@ class go_tele_to_violet_stand : public GameObjectScript
public:
go_tele_to_violet_stand() : GameObjectScript("go_tele_to_violet_stand") { }
- bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* /*go*/) override
{
if (player->GetQuestRewardStatus(QUEST_LEARN_LEAVE_RETURN) || player->GetQuestStatus(QUEST_LEARN_LEAVE_RETURN) == QUEST_STATUS_INCOMPLETE)
return false;
@@ -490,7 +491,7 @@ class go_fel_crystalforge : public GameObjectScript
public:
go_fel_crystalforge() : GameObjectScript("go_fel_crystalforge") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (go->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) /* != GAMEOBJECT_TYPE_QUESTGIVER) */
player->PrepareQuestMenu(go->GetGUID()); /* return true*/
@@ -503,7 +504,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -549,7 +550,7 @@ class go_bashir_crystalforge : public GameObjectScript
public:
go_bashir_crystalforge() : GameObjectScript("go_bashir_crystalforge") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (go->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) /* != GAMEOBJECT_TYPE_QUESTGIVER) */
player->PrepareQuestMenu(go->GetGUID()); /* return true*/
@@ -562,7 +563,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -613,7 +614,7 @@ class go_matrix_punchograph : public GameObjectScript
public:
go_matrix_punchograph() : GameObjectScript("go_matrix_punchograph") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
switch (go->GetEntry())
{
@@ -666,7 +667,7 @@ class go_scourge_cage : public GameObjectScript
public:
go_scourge_cage() : GameObjectScript("go_scourge_cage") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->UseDoorOrButton();
if (Creature* pNearestPrisoner = go->FindNearestCreature(NPC_SCOURGE_PRISONER, 5.0f, true))
@@ -694,7 +695,7 @@ class go_arcane_prison : public GameObjectScript
public:
go_arcane_prison() : GameObjectScript("go_arcane_prison") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (player->GetQuestStatus(QUEST_PRISON_BREAK) == QUEST_STATUS_INCOMPLETE)
{
@@ -721,7 +722,7 @@ class go_blood_filled_orb : public GameObjectScript
public:
go_blood_filled_orb() : GameObjectScript("go_blood_filled_orb") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (go->GetGoType() == GAMEOBJECT_TYPE_GOOBER)
player->SummonCreature(NPC_ZELEMAR, -369.746f, 166.759f, -21.50f, 5.235f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
@@ -752,7 +753,7 @@ class go_jotunheim_cage : public GameObjectScript
public:
go_jotunheim_cage() : GameObjectScript("go_jotunheim_cage") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->UseDoorOrButton();
Creature* pPrisoner = go->FindNearestCreature(NPC_EBON_BLADE_PRISONER_HUMAN, 5.0f, true);
@@ -802,7 +803,7 @@ class go_table_theka : public GameObjectScript
public:
go_table_theka() : GameObjectScript("go_table_theka") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (player->GetQuestStatus(QUEST_SPIDER_GOLD) == QUEST_STATUS_INCOMPLETE)
player->AreaExploredOrEventHappens(QUEST_SPIDER_GOLD);
@@ -828,7 +829,7 @@ class go_inconspicuous_landmark : public GameObjectScript
public:
go_inconspicuous_landmark() : GameObjectScript("go_inconspicuous_landmark") { }
- bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* /*go*/) override
{
if (player->HasItemCount(ITEM_CUERGOS_KEY))
return false;
@@ -854,7 +855,7 @@ class go_ethereal_teleport_pad : public GameObjectScript
public:
go_ethereal_teleport_pad() : GameObjectScript("go_ethereal_teleport_pad") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
if (!player->HasItemCount(ITEM_TELEPORTER_POWER_PACK))
return false;
@@ -934,7 +935,7 @@ class go_soulwell : public GameObjectScript
/// _and_ CMSG_GAMEOBJECT_REPORT_USE, this GossipHello hook is called
/// twice. The script's handling is fine as it won't remove two charges
/// on the well. We have to find how to segregate REPORT_USE and USE.
- bool GossipHello(Player* player) OVERRIDE
+ bool GossipHello(Player* player) override
{
Unit* owner = go->GetOwner();
if (_stoneSpell == 0 || _stoneId == 0)
@@ -964,7 +965,7 @@ class go_soulwell : public GameObjectScript
uint32 _stoneId;
};
- GameObjectAI* GetAI(GameObject* go) const OVERRIDE
+ GameObjectAI* GetAI(GameObject* go) const override
{
return new go_soulwellAI(go);
}
@@ -989,7 +990,7 @@ class go_dragonflayer_cage : public GameObjectScript
public:
go_dragonflayer_cage() : GameObjectScript("go_dragonflayer_cage") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->UseDoorOrButton();
if (player->GetQuestStatus(QUEST_PRISONERS_OF_WYRMSKULL) != QUEST_STATUS_INCOMPLETE)
@@ -1037,7 +1038,7 @@ class go_tadpole_cage : public GameObjectScript
public:
go_tadpole_cage() : GameObjectScript("go_tadpole_cage") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->UseDoorOrButton();
if (player->GetQuestStatus(QUEST_OH_NOES_THE_TADPOLES) == QUEST_STATUS_INCOMPLETE)
@@ -1078,7 +1079,7 @@ class go_amberpine_outhouse : public GameObjectScript
public:
go_amberpine_outhouse() : GameObjectScript("go_amberpine_outhouse") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
QuestStatus status = player->GetQuestStatus(QUEST_DOING_YOUR_DUTY);
if (status == QUEST_STATUS_INCOMPLETE || status == QUEST_STATUS_COMPLETE || status == QUEST_STATUS_REWARDED)
@@ -1092,7 +1093,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF +1)
@@ -1134,7 +1135,7 @@ class go_hive_pod : public GameObjectScript
public:
go_hive_pod() : GameObjectScript("go_hive_pod") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
player->SendLoot(go->GetGUID(), LOOT_CORPSE);
go->SummonCreature(NPC_HIVE_AMBUSHER, go->GetPositionX()+1, go->GetPositionY(), go->GetPositionZ(), go->GetAngle(player), TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000);
@@ -1148,7 +1149,7 @@ class go_massive_seaforium_charge : public GameObjectScript
public:
go_massive_seaforium_charge() : GameObjectScript("go_massive_seaforium_charge") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
go->SetLootState(GO_JUST_DEACTIVATED);
return true;
@@ -1172,7 +1173,7 @@ class go_gjalerbron_cage : public GameObjectScript
public:
go_gjalerbron_cage() : GameObjectScript("go_gjalerbron_cage") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->UseDoorOrButton();
if ((player->GetTeamId() == TEAM_ALLIANCE && player->GetQuestStatus(QUEST_ALLIANCE_OF_KEYS_AND_CAGES) == QUEST_STATUS_INCOMPLETE) ||
@@ -1199,7 +1200,7 @@ class go_large_gjalerbron_cage : public GameObjectScript
public:
go_large_gjalerbron_cage() : GameObjectScript("go_large_gjalerbron_cage") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->UseDoorOrButton();
if ((player->GetTeamId() == TEAM_ALLIANCE && player->GetQuestStatus(QUEST_ALLIANCE_OF_KEYS_AND_CAGES) == QUEST_STATUS_INCOMPLETE) ||
@@ -1234,7 +1235,7 @@ class go_veil_skith_cage : public GameObjectScript
public:
go_veil_skith_cage() : GameObjectScript("go_veil_skith_cage") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->UseDoorOrButton();
if (player->GetQuestStatus(QUEST_MISSING_FRIENDS) == QUEST_STATUS_INCOMPLETE)
@@ -1271,7 +1272,7 @@ class go_frostblade_shrine : public GameObjectScript
public:
go_frostblade_shrine() : GameObjectScript("go_frostblade_shrine") { }
- bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
+ bool OnGossipHello(Player* player, GameObject* go) override
{
go->UseDoorOrButton(10);
if (!player->HasAura(SPELL_RECENT_MEDITATION))
@@ -1298,7 +1299,7 @@ class go_midsummer_bonfire : public GameObjectScript
public:
go_midsummer_bonfire() : GameObjectScript("go_midsummer_bonfire") { }
- bool OnGossipSelect(Player* player, GameObject* /*go*/, uint32 /*sender*/, uint32 /*action*/) OVERRIDE
+ bool OnGossipSelect(Player* player, GameObject* /*go*/, uint32 /*sender*/, uint32 /*action*/) override
{
player->CastSpell(player, STAMP_OUT_BONFIRE_QUEST_COMPLETE, true);
player->CLOSE_GOSSIP_MENU();
diff --git a/src/server/scripts/World/guards.cpp b/src/server/scripts/World/guards.cpp
index 676eb7bd64f..a156a41fcef 100644
--- a/src/server/scripts/World/guards.cpp
+++ b/src/server/scripts/World/guards.cpp
@@ -56,13 +56,13 @@ public:
{
guard_genericAI(Creature* creature) : GuardAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
globalCooldown = 0;
buffTimer = 0;
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (me->GetEntry() == NPC_CENARION_HOLD_INFANTRY)
Talk(SAY_GUARD_SIL_AGGRO, who);
@@ -70,7 +70,7 @@ public:
DoCast(who, spell->Id);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Always decrease our global cooldown first
if (globalCooldown > diff)
@@ -219,7 +219,7 @@ public:
}
}
- void ReceiveEmote(Player* player, uint32 textEmote) OVERRIDE
+ void ReceiveEmote(Player* player, uint32 textEmote) override
{
switch (me->GetEntry())
{
@@ -242,7 +242,7 @@ public:
uint32 buffTimer;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new guard_genericAI(creature);
}
@@ -265,7 +265,7 @@ public:
{
guard_shattrath_scryerAI(Creature* creature) : GuardAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
banishTimer = 5000;
exileTimer = 8500;
@@ -273,7 +273,7 @@ public:
canTeleport = false;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -282,7 +282,7 @@ public:
{
if (exileTimer <= diff)
{
- if (Unit* temp = Unit::GetUnit(*me, playerGUID))
+ if (Unit* temp = ObjectAccessor::GetUnit(*me, playerGUID))
{
temp->CastSpell(temp, SPELL_EXILE, true);
temp->CastSpell(temp, SPELL_BANISH_TELEPORT, true);
@@ -315,7 +315,7 @@ public:
bool canTeleport;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new guard_shattrath_scryerAI(creature);
}
@@ -330,7 +330,7 @@ public:
{
guard_shattrath_aldorAI(Creature* creature) : GuardAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
banishTimer = 5000;
exileTimer = 8500;
@@ -338,7 +338,7 @@ public:
canTeleport = false;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
@@ -347,7 +347,7 @@ public:
{
if (exileTimer <= diff)
{
- if (Unit* temp = Unit::GetUnit(*me, playerGUID))
+ if (Unit* temp = ObjectAccessor::GetUnit(*me, playerGUID))
{
temp->CastSpell(temp, SPELL_EXILE, true);
temp->CastSpell(temp, SPELL_BANISH_TELEPORT, true);
@@ -379,7 +379,7 @@ public:
bool canTeleport;
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new guard_shattrath_aldorAI(creature);
}
@@ -387,7 +387,7 @@ public:
void AddSC_guards()
{
- new guard_generic;
- new guard_shattrath_aldor;
- new guard_shattrath_scryer;
+ new guard_generic();
+ new guard_shattrath_aldor();
+ new guard_shattrath_scryer();
}
diff --git a/src/server/scripts/World/item_scripts.cpp b/src/server/scripts/World/item_scripts.cpp
index 545ee9f4b43..4cf2ef971eb 100644
--- a/src/server/scripts/World/item_scripts.cpp
+++ b/src/server/scripts/World/item_scripts.cpp
@@ -49,7 +49,7 @@ class item_only_for_flight : public ItemScript
public:
item_only_for_flight() : ItemScript("item_only_for_flight") { }
- bool OnUse(Player* player, Item* item, SpellCastTargets const& /*targets*/) OVERRIDE
+ bool OnUse(Player* player, Item* item, SpellCastTargets const& /*targets*/) override
{
uint32 itemId = item->GetEntry();
bool disabled = false;
@@ -90,7 +90,7 @@ class item_nether_wraith_beacon : public ItemScript
public:
item_nether_wraith_beacon() : ItemScript("item_nether_wraith_beacon") { }
- bool OnUse(Player* player, Item* /*item*/, SpellCastTargets const& /*targets*/) OVERRIDE
+ bool OnUse(Player* player, Item* /*item*/, SpellCastTargets const& /*targets*/) override
{
if (player->GetQuestStatus(10832) == QUEST_STATUS_INCOMPLETE)
{
@@ -113,7 +113,7 @@ class item_gor_dreks_ointment : public ItemScript
public:
item_gor_dreks_ointment() : ItemScript("item_gor_dreks_ointment") { }
- bool OnUse(Player* player, Item* item, SpellCastTargets const& targets) OVERRIDE
+ bool OnUse(Player* player, Item* item, SpellCastTargets const& targets) override
{
if (targets.GetUnitTarget() && targets.GetUnitTarget()->GetTypeId() == TYPEID_UNIT &&
targets.GetUnitTarget()->GetEntry() == 20748 && !targets.GetUnitTarget()->HasAura(32578))
@@ -133,7 +133,7 @@ class item_incendiary_explosives : public ItemScript
public:
item_incendiary_explosives() : ItemScript("item_incendiary_explosives") { }
- bool OnUse(Player* player, Item* item, SpellCastTargets const & /*targets*/) OVERRIDE
+ bool OnUse(Player* player, Item* item, SpellCastTargets const & /*targets*/) override
{
if (player->FindNearestCreature(26248, 15) || player->FindNearestCreature(26249, 15))
return false;
@@ -154,7 +154,7 @@ class item_mysterious_egg : public ItemScript
public:
item_mysterious_egg() : ItemScript("item_mysterious_egg") { }
- bool OnExpire(Player* player, ItemTemplate const* /*pItemProto*/) OVERRIDE
+ bool OnExpire(Player* player, ItemTemplate const* /*pItemProto*/) override
{
ItemPosCountVec dest;
uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, 39883, 1); // Cracked Egg
@@ -174,7 +174,7 @@ class item_disgusting_jar : public ItemScript
public:
item_disgusting_jar() : ItemScript("item_disgusting_jar") { }
- bool OnExpire(Player* player, ItemTemplate const* /*pItemProto*/) OVERRIDE
+ bool OnExpire(Player* player, ItemTemplate const* /*pItemProto*/) override
{
ItemPosCountVec dest;
uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, 44718, 1); // Ripe Disgusting Jar
@@ -223,7 +223,7 @@ class item_pile_fake_furs : public ItemScript
public:
item_pile_fake_furs() : ItemScript("item_pile_fake_furs") { }
- bool OnUse(Player* player, Item* /*item*/, SpellCastTargets const & /*targets*/) OVERRIDE
+ bool OnUse(Player* player, Item* /*item*/, SpellCastTargets const & /*targets*/) override
{
GameObject* go = NULL;
for (uint8 i = 0; i < CaribouTrapsNum; ++i)
@@ -268,7 +268,7 @@ class item_petrov_cluster_bombs : public ItemScript
public:
item_petrov_cluster_bombs() : ItemScript("item_petrov_cluster_bombs") { }
- bool OnUse(Player* player, Item* item, const SpellCastTargets & /*targets*/) OVERRIDE
+ bool OnUse(Player* player, Item* item, const SpellCastTargets & /*targets*/) override
{
if (player->GetZoneId() != ZONE_ID_HOWLING)
return false;
@@ -334,7 +334,7 @@ class item_dehta_trap_smasher : public ItemScript
public:
item_dehta_trap_smasher() : ItemScript("item_dehta_trap_smasher") { }
- bool OnUse(Player* player, Item* /*item*/, const SpellCastTargets & /*targets*/) OVERRIDE
+ bool OnUse(Player* player, Item* /*item*/, const SpellCastTargets & /*targets*/) override
{
if (player->GetQuestStatus(QUEST_CANNOT_HELP_THEMSELVES) != QUEST_STATUS_INCOMPLETE)
return false;
@@ -370,7 +370,7 @@ class item_trident_of_nazjan : public ItemScript
public:
item_trident_of_nazjan() : ItemScript("item_Trident_of_Nazjan") { }
- bool OnUse(Player* player, Item* item, const SpellCastTargets & /*targets*/) OVERRIDE
+ bool OnUse(Player* player, Item* item, const SpellCastTargets & /*targets*/) override
{
if (player->GetQuestStatus(QUEST_THE_EMISSARY) == QUEST_STATUS_INCOMPLETE)
{
@@ -397,7 +397,7 @@ class item_captured_frog : public ItemScript
public:
item_captured_frog() : ItemScript("item_captured_frog") { }
- bool OnUse(Player* player, Item* item, SpellCastTargets const& /*targets*/) OVERRIDE
+ bool OnUse(Player* player, Item* item, SpellCastTargets const& /*targets*/) override
{
if (player->GetQuestStatus(QUEST_THE_PERFECT_SPIES) == QUEST_STATUS_INCOMPLETE)
{
diff --git a/src/server/scripts/World/mob_generic_creature.cpp b/src/server/scripts/World/mob_generic_creature.cpp
index 19ea4f9b60b..a27a78a5338 100644
--- a/src/server/scripts/World/mob_generic_creature.cpp
+++ b/src/server/scripts/World/mob_generic_creature.cpp
@@ -42,20 +42,20 @@ public:
uint32 BuffTimer; //This variable keeps track of buffs
bool IsSelfRooted;
- void Reset() OVERRIDE
+ void Reset() override
{
GlobalCooldown = 0;
BuffTimer = 0; //Rebuff as soon as we can
IsSelfRooted = false;
}
- void EnterCombat(Unit* who) OVERRIDE
+ void EnterCombat(Unit* who) override
{
if (!me->IsWithinMeleeRange(who))
IsSelfRooted = true;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
//Always decrease our global cooldown first
if (GlobalCooldown > diff)
@@ -107,7 +107,7 @@ public:
else info = SelectSpell(me->GetVictim(), 0, 0, SELECT_TARGET_ANY_ENEMY, 0, 0, 0, 0, SELECT_EFFECT_DONTCARE);
//50% chance if elite or higher, 20% chance if not, to replace our white hit with a spell
- if (info && (rand() % (me->GetCreatureTemplate()->rank > 1 ? 2 : 5) == 0) && !GlobalCooldown)
+ if (info && (rand32() % (me->GetCreatureTemplate()->rank > 1 ? 2 : 5) == 0) && !GlobalCooldown)
{
//Cast the spell
if (Healing)DoCastSpell(me, info);
@@ -130,7 +130,7 @@ public:
SpellInfo const* info = NULL;
//Select a healing spell if less than 30% hp ONLY 33% of the time
- if (HealthBelowPct(30) && rand() % 3 == 0)
+ if (HealthBelowPct(30) && rand32() % 3 == 0)
info = SelectSpell(me, 0, 0, SELECT_TARGET_ANY_FRIEND, 0, 0, 0, 0, SELECT_EFFECT_HEALING);
//No healing spell available, See if we can cast a ranged spell (Range must be greater than ATTACK_DISTANCE)
@@ -163,7 +163,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new generic_creatureAI(creature);
}
@@ -186,7 +186,7 @@ public:
uint32 timer, interval;
const SpellInfo* spell;
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (timer <= diff)
{
@@ -199,7 +199,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new trigger_periodicAI(creature);
}
@@ -213,14 +213,14 @@ public:
struct trigger_deathAI : public NullCreatureAI
{
trigger_deathAI(Creature* creature) : NullCreatureAI(creature) { }
- void JustDied(Unit* killer) OVERRIDE
+ void JustDied(Unit* killer) override
{
if (me->m_spells[0])
me->CastSpell(killer, me->m_spells[0], true);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new trigger_deathAI(creature);
}
@@ -229,6 +229,6 @@ public:
void AddSC_generic_creature()
{
//new generic_creature;
- new trigger_periodic;
+ new trigger_periodic();
//new trigger_death;
}
diff --git a/src/server/scripts/World/npc_innkeeper.cpp b/src/server/scripts/World/npc_innkeeper.cpp
index 7a766fb9eb1..be56e57cc9d 100644
--- a/src/server/scripts/World/npc_innkeeper.cpp
+++ b/src/server/scripts/World/npc_innkeeper.cpp
@@ -49,7 +49,7 @@ class npc_innkeeper : public CreatureScript
public:
npc_innkeeper() : CreatureScript("npc_innkeeper") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (IsHolidayActive(HOLIDAY_HALLOWS_END) && !player->HasAura(SPELL_TRICK_OR_TREATED))
{
@@ -86,7 +86,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF + 1 && IsHolidayActive(HOLIDAY_HALLOWS_END) && !player->HasAura(SPELL_TRICK_OR_TREATED))
@@ -134,6 +134,6 @@ public:
void AddSC_npc_innkeeper()
{
- new npc_innkeeper;
+ new npc_innkeeper();
}
diff --git a/src/server/scripts/World/npc_professions.cpp b/src/server/scripts/World/npc_professions.cpp
index 5cbc54923e0..083105b6aa4 100644
--- a/src/server/scripts/World/npc_professions.cpp
+++ b/src/server/scripts/World/npc_professions.cpp
@@ -260,90 +260,90 @@ void ProfessionUnlearnSpells(Player* player, uint32 type)
switch (type)
{
case S_UNLEARN_WEAPON: // S_UNLEARN_WEAPON
- player->removeSpell(36125); // Light Earthforged Blade
- player->removeSpell(36128); // Light Emberforged Hammer
- player->removeSpell(36126); // Light Skyforged Axe
+ player->RemoveSpell(36125); // Light Earthforged Blade
+ player->RemoveSpell(36128); // Light Emberforged Hammer
+ player->RemoveSpell(36126); // Light Skyforged Axe
break;
case S_UNLEARN_ARMOR: // S_UNLEARN_ARMOR
- player->removeSpell(36122); // Earthforged Leggings
- player->removeSpell(36129); // Heavy Earthforged Breastplate
- player->removeSpell(36130); // Stormforged Hauberk
- player->removeSpell(34533); // Breastplate of Kings
- player->removeSpell(34529); // Nether Chain Shirt
- player->removeSpell(34534); // Bulwark of Kings
- player->removeSpell(36257); // Bulwark of the Ancient Kings
- player->removeSpell(36256); // Embrace of the Twisting Nether
- player->removeSpell(34530); // Twisting Nether Chain Shirt
- player->removeSpell(36124); // Windforged Leggings
+ player->RemoveSpell(36122); // Earthforged Leggings
+ player->RemoveSpell(36129); // Heavy Earthforged Breastplate
+ player->RemoveSpell(36130); // Stormforged Hauberk
+ player->RemoveSpell(34533); // Breastplate of Kings
+ player->RemoveSpell(34529); // Nether Chain Shirt
+ player->RemoveSpell(34534); // Bulwark of Kings
+ player->RemoveSpell(36257); // Bulwark of the Ancient Kings
+ player->RemoveSpell(36256); // Embrace of the Twisting Nether
+ player->RemoveSpell(34530); // Twisting Nether Chain Shirt
+ player->RemoveSpell(36124); // Windforged Leggings
break;
case S_UNLEARN_HAMMER: // S_UNLEARN_HAMMER
- player->removeSpell(36262); // Dragonstrike
- player->removeSpell(34546); // Dragonmaw
- player->removeSpell(34545); // Drakefist Hammer
- player->removeSpell(36136); // Lavaforged Warhammer
- player->removeSpell(34547); // Thunder
- player->removeSpell(34567); // Deep Thunder
- player->removeSpell(36263); // Stormherald
- player->removeSpell(36137); // Great Earthforged Hammer
+ player->RemoveSpell(36262); // Dragonstrike
+ player->RemoveSpell(34546); // Dragonmaw
+ player->RemoveSpell(34545); // Drakefist Hammer
+ player->RemoveSpell(36136); // Lavaforged Warhammer
+ player->RemoveSpell(34547); // Thunder
+ player->RemoveSpell(34567); // Deep Thunder
+ player->RemoveSpell(36263); // Stormherald
+ player->RemoveSpell(36137); // Great Earthforged Hammer
break;
case S_UNLEARN_AXE: // S_UNLEARN_AXE
- player->removeSpell(36260); // Wicked Edge of the Planes
- player->removeSpell(34562); // Black Planar Edge
- player->removeSpell(34541); // The Planar Edge
- player->removeSpell(36134); // Stormforged Axe
- player->removeSpell(36135); // Skyforged Great Axe
- player->removeSpell(36261); // Bloodmoon
- player->removeSpell(34543); // Lunar Crescent
- player->removeSpell(34544); // Mooncleaver
+ player->RemoveSpell(36260); // Wicked Edge of the Planes
+ player->RemoveSpell(34562); // Black Planar Edge
+ player->RemoveSpell(34541); // The Planar Edge
+ player->RemoveSpell(36134); // Stormforged Axe
+ player->RemoveSpell(36135); // Skyforged Great Axe
+ player->RemoveSpell(36261); // Bloodmoon
+ player->RemoveSpell(34543); // Lunar Crescent
+ player->RemoveSpell(34544); // Mooncleaver
break;
case S_UNLEARN_SWORD: // S_UNLEARN_SWORD
- player->removeSpell(36258); // Blazefury
- player->removeSpell(34537); // Blazeguard
- player->removeSpell(34535); // Fireguard
- player->removeSpell(36131); // Windforged Rapier
- player->removeSpell(36133); // Stoneforged Claymore
- player->removeSpell(34538); // Lionheart Blade
- player->removeSpell(34540); // Lionheart Champion
- player->removeSpell(36259); // Lionheart Executioner
+ player->RemoveSpell(36258); // Blazefury
+ player->RemoveSpell(34537); // Blazeguard
+ player->RemoveSpell(34535); // Fireguard
+ player->RemoveSpell(36131); // Windforged Rapier
+ player->RemoveSpell(36133); // Stoneforged Claymore
+ player->RemoveSpell(34538); // Lionheart Blade
+ player->RemoveSpell(34540); // Lionheart Champion
+ player->RemoveSpell(36259); // Lionheart Executioner
break;
case S_UNLEARN_DRAGON: // S_UNLEARN_DRAGON
- player->removeSpell(36076); // Dragonstrike Leggings
- player->removeSpell(36079); // Golden Dragonstrike Breastplate
- player->removeSpell(35576); // Ebon Netherscale Belt
- player->removeSpell(35577); // Ebon Netherscale Bracers
- player->removeSpell(35575); // Ebon Netherscale Breastplate
- player->removeSpell(35582); // Netherstrike Belt
- player->removeSpell(35584); // Netherstrike Bracers
- player->removeSpell(35580); // Netherstrike Breastplate
+ player->RemoveSpell(36076); // Dragonstrike Leggings
+ player->RemoveSpell(36079); // Golden Dragonstrike Breastplate
+ player->RemoveSpell(35576); // Ebon Netherscale Belt
+ player->RemoveSpell(35577); // Ebon Netherscale Bracers
+ player->RemoveSpell(35575); // Ebon Netherscale Breastplate
+ player->RemoveSpell(35582); // Netherstrike Belt
+ player->RemoveSpell(35584); // Netherstrike Bracers
+ player->RemoveSpell(35580); // Netherstrike Breastplate
break;
case S_UNLEARN_ELEMENTAL: // S_UNLEARN_ELEMENTAL
- player->removeSpell(36074); // Blackstorm Leggings
- player->removeSpell(36077); // Primalstorm Breastplate
- player->removeSpell(35590); // Primalstrike Belt
- player->removeSpell(35591); // Primalstrike Bracers
- player->removeSpell(35589); // Primalstrike Vest
+ player->RemoveSpell(36074); // Blackstorm Leggings
+ player->RemoveSpell(36077); // Primalstorm Breastplate
+ player->RemoveSpell(35590); // Primalstrike Belt
+ player->RemoveSpell(35591); // Primalstrike Bracers
+ player->RemoveSpell(35589); // Primalstrike Vest
break;
case S_UNLEARN_TRIBAL: // S_UNLEARN_TRIBAL
- player->removeSpell(35585); // Windhawk Hauberk
- player->removeSpell(35587); // Windhawk Belt
- player->removeSpell(35588); // Windhawk Bracers
- player->removeSpell(36075); // Wildfeather Leggings
- player->removeSpell(36078); // Living Crystal Breastplate
+ player->RemoveSpell(35585); // Windhawk Hauberk
+ player->RemoveSpell(35587); // Windhawk Belt
+ player->RemoveSpell(35588); // Windhawk Bracers
+ player->RemoveSpell(36075); // Wildfeather Leggings
+ player->RemoveSpell(36078); // Living Crystal Breastplate
break;
case S_UNLEARN_SPELLFIRE: // S_UNLEARN_SPELLFIRE
- player->removeSpell(26752); // Spellfire Belt
- player->removeSpell(26753); // Spellfire Gloves
- player->removeSpell(26754); // Spellfire Robe
+ player->RemoveSpell(26752); // Spellfire Belt
+ player->RemoveSpell(26753); // Spellfire Gloves
+ player->RemoveSpell(26754); // Spellfire Robe
break;
case S_UNLEARN_MOONCLOTH: // S_UNLEARN_MOONCLOTH
- player->removeSpell(26760); // Primal Mooncloth Belt
- player->removeSpell(26761); // Primal Mooncloth Shoulders
- player->removeSpell(26762); // Primal Mooncloth Robe
+ player->RemoveSpell(26760); // Primal Mooncloth Belt
+ player->RemoveSpell(26761); // Primal Mooncloth Shoulders
+ player->RemoveSpell(26762); // Primal Mooncloth Robe
break;
case S_UNLEARN_SHADOWEAVE: // S_UNLEARN_SHADOWEAVE
- player->removeSpell(26756); // Frozen Shadoweave Shoulders
- player->removeSpell(26757); // Frozen Shadoweave Boots
- player->removeSpell(26758); // Frozen Shadoweave Robe
+ player->RemoveSpell(26756); // Frozen Shadoweave Shoulders
+ player->RemoveSpell(26757); // Frozen Shadoweave Boots
+ player->RemoveSpell(26758); // Frozen Shadoweave Robe
break;
}
}
@@ -382,7 +382,7 @@ public:
return (player->HasSpell(S_TRANSMUTE) || player->HasSpell(S_ELIXIR) || player->HasSpell(S_POTION));
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -508,7 +508,7 @@ public:
}
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (sender)
@@ -547,7 +547,7 @@ public:
return (player->HasSpell(S_HAMMER) || player->HasSpell(S_AXE) || player->HasSpell(S_SWORD));
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -738,7 +738,7 @@ public:
}
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (sender)
@@ -808,7 +808,7 @@ public:
return res;
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
uint32 npcTextId = 0;
std::string gossipItem;
@@ -848,7 +848,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF + 1)
@@ -886,7 +886,7 @@ class npc_prof_leather : public CreatureScript
public:
npc_prof_leather() : CreatureScript("npc_prof_leather") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -974,7 +974,7 @@ public:
}
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (sender)
@@ -1009,7 +1009,7 @@ public:
return (player->HasSpell(S_MOONCLOTH) || player->HasSpell(S_SHADOWEAVE) || player->HasSpell(S_SPELLFIRE));
}
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -1136,7 +1136,7 @@ public:
}
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (sender)
diff --git a/src/server/scripts/World/npc_taxi.cpp b/src/server/scripts/World/npc_taxi.cpp
index 31617e0ef71..5abc021e283 100644
--- a/src/server/scripts/World/npc_taxi.cpp
+++ b/src/server/scripts/World/npc_taxi.cpp
@@ -63,7 +63,7 @@ class npc_taxi : public CreatureScript
public:
npc_taxi() : CreatureScript("npc_taxi") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -172,7 +172,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp
index ac30f6f1e80..e8a4a78e1bb 100644
--- a/src/server/scripts/World/npcs_special.cpp
+++ b/src/server/scripts/World/npcs_special.cpp
@@ -56,6 +56,7 @@ EndContentData */
#include "CellImpl.h"
#include "SpellAuras.h"
#include "Pet.h"
+#include "CreatureTextMgr.h"
/*########
# npc_air_force_bots
@@ -156,7 +157,7 @@ public:
SpawnAssociation* SpawnAssoc;
uint64 SpawnedGUID;
- void Reset() OVERRIDE { }
+ void Reset() override { }
Creature* SummonGuard()
{
@@ -175,7 +176,7 @@ public:
Creature* GetSummonedGuard()
{
- Creature* creature = Unit::GetCreature(*me, SpawnedGUID);
+ Creature* creature = ObjectAccessor::GetCreature(*me, SpawnedGUID);
if (creature && creature->IsAlive())
return creature;
@@ -183,8 +184,7 @@ public:
return NULL;
}
- void MoveInLineOfSight(Unit* who) OVERRIDE
-
+ void MoveInLineOfSight(Unit* who) override
{
if (!SpawnAssoc)
return;
@@ -260,7 +260,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_air_force_botsAI(creature);
}
@@ -286,7 +286,7 @@ class npc_lunaclaw_spirit : public CreatureScript
public:
npc_lunaclaw_spirit() : CreatureScript("npc_lunaclaw_spirit") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->GetQuestStatus(QUEST_BODY_HEART_A) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(QUEST_BODY_HEART_H) == QUEST_STATUS_INCOMPLETE)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_GRANT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
@@ -295,7 +295,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_INFO_DEF + 1)
@@ -333,16 +333,16 @@ public:
uint32 ResetFlagTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
ResetFlagTimer = 120000;
me->setFaction(FACTION_CHICKEN);
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
// Reset flags after a certain time has passed so that the next player has to start the 'event' again
if (me->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER))
@@ -360,12 +360,12 @@ public:
DoMeleeAttackIfReady();
}
- void ReceiveEmote(Player* player, uint32 emote) OVERRIDE
+ void ReceiveEmote(Player* player, uint32 emote) override
{
switch (emote)
{
case TEXT_EMOTE_CHICKEN:
- if (player->GetQuestStatus(QUEST_CLUCK) == QUEST_STATUS_NONE && rand() % 30 == 1)
+ if (player->GetQuestStatus(QUEST_CLUCK) == QUEST_STATUS_NONE && rand32() % 30 == 1)
{
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
me->setFaction(FACTION_FRIENDLY);
@@ -384,23 +384,23 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_chicken_cluckAI(creature);
}
- bool OnQuestAccept(Player* /*player*/, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* /*player*/, Creature* creature, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_CLUCK)
- CAST_AI(npc_chicken_cluck::npc_chicken_cluckAI, creature->AI())->Reset();
+ ENSURE_AI(npc_chicken_cluck::npc_chicken_cluckAI, creature->AI())->Reset();
return true;
}
- bool OnQuestComplete(Player* /*player*/, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestReward(Player* /*player*/, Creature* creature, Quest const* quest, uint32 /*opt*/) override
{
if (quest->GetQuestId() == QUEST_CLUCK)
- CAST_AI(npc_chicken_cluck::npc_chicken_cluckAI, creature->AI())->Reset();
+ ENSURE_AI(npc_chicken_cluck::npc_chicken_cluckAI, creature->AI())->Reset();
return true;
}
@@ -429,7 +429,7 @@ public:
bool Active;
uint32 CanIteract;
- void Reset() OVERRIDE
+ void Reset() override
{
Active = true;
CanIteract = 3500;
@@ -445,7 +445,7 @@ public:
me->SendMessageToSet(&data, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (!Active)
{
@@ -460,9 +460,9 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void ReceiveEmote(Player* player, uint32 emote) OVERRIDE
+ void ReceiveEmote(Player* player, uint32 emote) override
{
if (me->IsWithinLOS(player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()) && me->IsWithinDistInMap(player, 30.0f))
{
@@ -495,7 +495,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_dancing_flamesAI(creature);
}
@@ -589,7 +589,7 @@ public:
std::list<uint64> Patients;
std::vector<Location*> Coordinates;
- void Reset() OVERRIDE
+ void Reset() override
{
PlayerGUID = 0;
@@ -671,7 +671,7 @@ public:
std::list<uint64>::const_iterator itr;
for (itr = Patients.begin(); itr != Patients.end(); ++itr)
{
- if (Creature* patient = Unit::GetCreature((*me), *itr))
+ if (Creature* patient = ObjectAccessor::GetCreature((*me), *itr))
patient->setDeathState(JUST_DIED);
}
}
@@ -690,20 +690,20 @@ public:
}
}
- void UpdateAI(uint32 diff) OVERRIDE;
+ void UpdateAI(uint32 diff) override;
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
};
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
{
if ((quest->GetQuestId() == 6624) || (quest->GetQuestId() == 6622))
- CAST_AI(npc_doctor::npc_doctorAI, creature->AI())->BeginEvent(player);
+ ENSURE_AI(npc_doctor::npc_doctorAI, creature->AI())->BeginEvent(player);
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_doctorAI(creature);
}
@@ -725,7 +725,7 @@ public:
uint64 DoctorGUID;
Location* Coord;
- void Reset() OVERRIDE
+ void Reset() override
{
DoctorGUID = 0;
Coord = NULL;
@@ -758,9 +758,9 @@ public:
}
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* caster, SpellInfo const* spell) override
{
Player* player = caster->ToPlayer();
if (!player || !me->IsAlive() || spell->Id != 20804)
@@ -768,8 +768,8 @@ public:
if (player->GetQuestStatus(6624) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(6622) == QUEST_STATUS_INCOMPLETE)
if (DoctorGUID)
- if (Creature* doctor = Unit::GetCreature(*me, DoctorGUID))
- CAST_AI(npc_doctor::npc_doctorAI, doctor->AI())->PatientSaved(me, player, Coord);
+ if (Creature* doctor = ObjectAccessor::GetCreature(*me, DoctorGUID))
+ ENSURE_AI(npc_doctor::npc_doctorAI, doctor->AI())->PatientSaved(me, player, Coord);
//make not selectable
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -800,7 +800,7 @@ public:
}
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
//lower HP on every world tick makes it a useful counter, not officlone though
if (me->IsAlive() && me->GetHealth() > 6)
@@ -814,13 +814,13 @@ public:
me->SetFlag(UNIT_DYNAMIC_FLAGS, 32);
if (DoctorGUID)
- if (Creature* doctor = Unit::GetCreature((*me), DoctorGUID))
- CAST_AI(npc_doctor::npc_doctorAI, doctor->AI())->PatientDied(Coord);
+ if (Creature* doctor = ObjectAccessor::GetCreature((*me), DoctorGUID))
+ ENSURE_AI(npc_doctor::npc_doctorAI, doctor->AI())->PatientDied(Coord);
}
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_injured_patientAI(creature);
}
@@ -841,16 +841,16 @@ void npc_doctor::npc_doctorAI::UpdateAI(uint32 diff)
if (Coordinates.empty())
return;
- std::vector<Location*>::iterator itr = Coordinates.begin() + rand() % Coordinates.size();
+ std::vector<Location*>::iterator itr = Coordinates.begin() + rand32() % Coordinates.size();
uint32 patientEntry = 0;
switch (me->GetEntry())
{
case DOCTOR_ALLIANCE:
- patientEntry = AllianceSoldierId[rand() % 3];
+ patientEntry = AllianceSoldierId[rand32() % 3];
break;
case DOCTOR_HORDE:
- patientEntry = HordeSoldierId[rand() % 3];
+ patientEntry = HordeSoldierId[rand32() % 3];
break;
default:
TC_LOG_ERROR("scripts", "Invalid entry for Triage doctor. Please check your database");
@@ -865,8 +865,8 @@ void npc_doctor::npc_doctorAI::UpdateAI(uint32 diff)
Patient->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
Patients.push_back(Patient->GetGUID());
- CAST_AI(npc_injured_patient::npc_injured_patientAI, Patient->AI())->DoctorGUID = me->GetGUID();
- CAST_AI(npc_injured_patient::npc_injured_patientAI, Patient->AI())->Coord = point;
+ ENSURE_AI(npc_injured_patient::npc_injured_patientAI, Patient->AI())->DoctorGUID = me->GetGUID();
+ ENSURE_AI(npc_injured_patient::npc_injured_patientAI, Patient->AI())->Coord = point;
Coordinates.erase(itr);
}
@@ -927,7 +927,7 @@ public:
uint32 RunAwayTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
CasterGUID = 0;
@@ -941,9 +941,9 @@ public:
me->SetHealth(me->CountPctFromMaxHealth(70));
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE
+ void SpellHit(Unit* caster, SpellInfo const* spell) override
{
if (spell->Id == SPELL_LESSER_HEAL_R2 || spell->Id == SPELL_FORTITUDE_R1)
{
@@ -1053,18 +1053,18 @@ public:
}
}
- void WaypointReached(uint32 /*waypointId*/) OVERRIDE
+ void WaypointReached(uint32 /*waypointId*/) override
{
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (CanRun && !me->IsInCombat())
{
if (RunAwayTimer <= diff)
{
- if (Unit* unit = Unit::GetUnit(*me, CasterGUID))
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, CasterGUID))
{
switch (me->GetEntry())
{
@@ -1092,7 +1092,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_garments_of_questsAI(creature);
}
@@ -1116,16 +1116,16 @@ public:
{
npc_guardianAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE
+ void EnterCombat(Unit* /*who*/) override
{
}
- void UpdateAI(uint32 /*diff*/) OVERRIDE
+ void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
return;
@@ -1138,7 +1138,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_guardianAI(creature);
}
@@ -1153,7 +1153,7 @@ class npc_mount_vendor : public CreatureScript
public:
npc_mount_vendor() : CreatureScript("npc_mount_vendor") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -1228,7 +1228,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
if (action == GOSSIP_ACTION_TRADE)
@@ -1280,7 +1280,7 @@ class npc_sayge : public CreatureScript
public:
npc_sayge() : CreatureScript("npc_sayge") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -1349,7 +1349,7 @@ public:
}
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (sender)
@@ -1411,8 +1411,8 @@ public:
{
npc_steam_tonkAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() OVERRIDE { }
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void Reset() override { }
+ void EnterCombat(Unit* /*who*/) override { }
void OnPossess(bool apply)
{
@@ -1429,7 +1429,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_steam_tonkAI(creature);
}
@@ -1454,17 +1454,17 @@ public:
uint32 ExplosionTimer;
- void Reset() OVERRIDE
+ void Reset() override
{
ExplosionTimer = 3000;
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
- void AttackStart(Unit* /*who*/) OVERRIDE { }
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
+ void AttackStart(Unit* /*who*/) override { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (ExplosionTimer <= diff)
{
@@ -1476,7 +1476,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_tonk_mineAI(creature);
}
@@ -1500,7 +1500,7 @@ class npc_brewfest_reveler : public CreatureScript
{
npc_brewfest_revelerAI(Creature* creature) : ScriptedAI(creature) { }
- void ReceiveEmote(Player* player, uint32 emote) OVERRIDE
+ void ReceiveEmote(Player* player, uint32 emote) override
{
if (!IsHolidayActive(HOLIDAY_BREWFEST))
return;
@@ -1510,7 +1510,7 @@ class npc_brewfest_reveler : public CreatureScript
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_brewfest_revelerAI(creature);
}
@@ -1519,7 +1519,10 @@ class npc_brewfest_reveler : public CreatureScript
enum TrainingDummy
{
NPC_ADVANCED_TARGET_DUMMY = 2674,
- NPC_TARGET_DUMMY = 2673
+ NPC_TARGET_DUMMY = 2673,
+
+ EVENT_TD_CHECK_COMBAT = 1,
+ EVENT_TD_DESPAWN = 2
};
class npc_training_dummy : public CreatureScript
@@ -1532,23 +1535,25 @@ public:
npc_training_dummyAI(Creature* creature) : ScriptedAI(creature)
{
SetCombatMovement(false);
- entry = creature->GetEntry();
}
- uint32 entry;
- uint32 resetTimer;
- uint32 despawnTimer;
+ EventMap _events;
+ std::unordered_map<uint64, time_t> _damageTimes;
- void Reset() OVERRIDE
+ void Reset() override
{
me->SetControlled(true, UNIT_STATE_STUNNED);//disable rotate
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);//imune to knock aways like blast wave
- resetTimer = 5000;
- despawnTimer = 15000;
+ _events.Reset();
+ _damageTimes.clear();
+ if (me->GetEntry() != NPC_ADVANCED_TARGET_DUMMY && me->GetEntry() != NPC_TARGET_DUMMY)
+ _events.ScheduleEvent(EVENT_TD_CHECK_COMBAT, 1000);
+ else
+ _events.ScheduleEvent(EVENT_TD_DESPAWN, 15000);
}
- void EnterEvadeMode() OVERRIDE
+ void EnterEvadeMode() override
{
if (!_EnterEvadeMode())
return;
@@ -1556,44 +1561,59 @@ public:
Reset();
}
- void DamageTaken(Unit* /*doneBy*/, uint32& damage) OVERRIDE
+ void DamageTaken(Unit* doneBy, uint32& damage) override
{
- resetTimer = 5000;
+ me->AddThreat(doneBy, float(damage)); // just to create threat reference
+ _damageTimes[doneBy->GetGUID()] = time(NULL);
damage = 0;
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
- if (!UpdateVictim())
+ if (!me->IsInCombat())
return;
if (!me->HasUnitState(UNIT_STATE_STUNNED))
me->SetControlled(true, UNIT_STATE_STUNNED);//disable rotate
- if (entry != NPC_ADVANCED_TARGET_DUMMY && entry != NPC_TARGET_DUMMY)
+ _events.Update(diff);
+
+ if (uint32 eventId = _events.ExecuteEvent())
{
- if (resetTimer <= diff)
+ switch (eventId)
{
- EnterEvadeMode();
- resetTimer = 5000;
+ case EVENT_TD_CHECK_COMBAT:
+ {
+ time_t now = time(NULL);
+ for (std::unordered_map<uint64, time_t>::iterator itr = _damageTimes.begin(); itr != _damageTimes.end();)
+ {
+ // If unit has not dealt damage to training dummy for 5 seconds, remove him from combat
+ if (itr->second < now - 5)
+ {
+ if (Unit* unit = ObjectAccessor::GetUnit(*me, itr->first))
+ unit->getHostileRefManager().deleteReference(me);
+
+ itr = _damageTimes.erase(itr);
+ }
+ else
+ ++itr;
+ }
+ _events.ScheduleEvent(EVENT_TD_CHECK_COMBAT, 1000);
+ break;
+ }
+ case EVENT_TD_DESPAWN:
+ me->DespawnOrUnsummon(1);
+ break;
+ default:
+ break;
}
- else
- resetTimer -= diff;
- return;
- }
- else
- {
- if (despawnTimer <= diff)
- me->DespawnOrUnsummon();
- else
- despawnTimer -= diff;
}
}
- void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { }
+ void MoveInLineOfSight(Unit* /*who*/) override { }
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_training_dummyAI(creature);
}
@@ -1633,12 +1653,12 @@ class npc_wormhole : public CreatureScript
{
npc_wormholeAI(Creature* creature) : PassiveAI(creature) { }
- void InitializeAI() OVERRIDE
+ void InitializeAI() override
{
_showUnderground = urand(0, 100) == 0; // Guessed value, it is really rare though
}
- uint32 GetData(uint32 type) const OVERRIDE
+ uint32 GetData(uint32 type) const override
{
return (type == DATA_SHOW_UNDERGROUND && _showUnderground) ? 1 : 0;
}
@@ -1647,7 +1667,7 @@ class npc_wormhole : public CreatureScript
bool _showUnderground;
};
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsSummon())
{
@@ -1669,7 +1689,7 @@ class npc_wormhole : public CreatureScript
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
@@ -1704,7 +1724,7 @@ class npc_wormhole : public CreatureScript
return true;
}
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_wormholeAI(creature);
}
@@ -1731,7 +1751,7 @@ class npc_pet_trainer : public CreatureScript
public:
npc_pet_trainer() : CreatureScript("npc_pet_trainer") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
if (creature->IsQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
@@ -1749,7 +1769,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -1826,7 +1846,7 @@ class npc_locksmith : public CreatureScript
public:
npc_locksmith() : CreatureScript("npc_locksmith") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
// Arcatraz Key
if (player->GetQuestRewardStatus(QUEST_HOW_TO_BRAKE_IN_TO_THE_ARCATRAZ) && !player->HasItemCount(ITEM_ARCATRAZ_KEY, 1, true))
@@ -1871,7 +1891,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
switch (action)
@@ -1931,7 +1951,7 @@ class npc_experience : public CreatureScript
public:
npc_experience() : CreatureScript("npc_experience") { }
- bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
+ bool OnGossipHello(Player* player, Creature* creature) override
{
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_XP_OFF, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_XP_ON, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
@@ -1939,7 +1959,7 @@ public:
return true;
}
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE
+ bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
{
player->PlayerTalkClass->ClearMenus();
bool noXPGain = player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_NO_XP_GAIN);
@@ -2208,12 +2228,12 @@ public:
return 0;
}
- void Reset() OVERRIDE
+ void Reset() override
{
if (GameObject* launcher = FindNearestLauncher())
{
launcher->SendCustomAnim(ANIM_GO_LAUNCH_FIREWORK);
- me->SetOrientation(launcher->GetOrientation() + M_PI/2);
+ me->SetOrientation(launcher->GetOrientation() + float(M_PI) / 2);
}
else
return;
@@ -2253,7 +2273,7 @@ public:
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_fireworkAI(creature);
}
@@ -2278,7 +2298,7 @@ class npc_spring_rabbit : public CreatureScript
public:
npc_spring_rabbit() : CreatureScript("npc_spring_rabbit") { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ CreatureAI* GetAI(Creature* creature) const override
{
return new npc_spring_rabbitAI(creature);
}
@@ -2293,7 +2313,7 @@ public:
uint32 searchTimer;
uint64 rabbitGUID;
- void Reset() OVERRIDE
+ void Reset() override
{
inLove = false;
rabbitGUID = 0;
@@ -2304,22 +2324,22 @@ public:
me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
}
- void EnterCombat(Unit* /*who*/) OVERRIDE { }
+ void EnterCombat(Unit* /*who*/) override { }
- void DoAction(int32 /*param*/) OVERRIDE
+ void DoAction(int32 /*param*/) override
{
inLove = true;
if (Unit* owner = me->GetOwner())
owner->CastSpell(owner, SPELL_SPRING_FLING, true);
}
- void UpdateAI(uint32 diff) OVERRIDE
+ void UpdateAI(uint32 diff) override
{
if (inLove)
{
if (jumpTimer <= diff)
{
- if (Unit* rabbit = Unit::GetUnit(*me, rabbitGUID))
+ if (Unit* rabbit = ObjectAccessor::GetUnit(*me, rabbitGUID))
DoCast(rabbit, SPELL_SPRING_RABBIT_JUMP);
jumpTimer = urand(5000, 10000);
} else jumpTimer -= diff;
@@ -2353,6 +2373,60 @@ public:
};
};
+class npc_imp_in_a_ball : public CreatureScript
+{
+private:
+ enum
+ {
+ SAY_RANDOM,
+
+ EVENT_TALK = 1,
+ };
+
+public:
+ npc_imp_in_a_ball() : CreatureScript("npc_imp_in_a_ball") { }
+
+ struct npc_imp_in_a_ballAI : public ScriptedAI
+ {
+ npc_imp_in_a_ballAI(Creature* creature) : ScriptedAI(creature)
+ {
+ summonerGUID = 0;
+ }
+
+ void IsSummonedBy(Unit* summoner) override
+ {
+ if (summoner->GetTypeId() == TYPEID_PLAYER)
+ {
+ summonerGUID = summoner->GetGUID();
+ events.ScheduleEvent(EVENT_TALK, 3000);
+ }
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ events.Update(diff);
+
+ if (events.ExecuteEvent() == EVENT_TALK)
+ {
+ if (Player* owner = ObjectAccessor::GetPlayer(*me, summonerGUID))
+ {
+ sCreatureTextMgr->SendChat(me, SAY_RANDOM, owner,
+ owner->GetGroup() ? CHAT_MSG_MONSTER_PARTY : CHAT_MSG_MONSTER_WHISPER, LANG_ADDON, TEXT_RANGE_NORMAL);
+ }
+ }
+ }
+
+ private:
+ EventMap events;
+ uint64 summonerGUID;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_imp_in_a_ballAI(creature);
+ }
+};
+
void AddSC_npcs_special()
{
new npc_air_force_bots();
@@ -2375,4 +2449,5 @@ void AddSC_npcs_special()
new npc_experience();
new npc_firework();
new npc_spring_rabbit();
+ new npc_imp_in_a_ball();
}
diff --git a/src/server/shared/AutoPtr.h b/src/server/shared/AutoPtr.h
deleted file mode 100644
index 96ecbfc79fe..00000000000
--- a/src/server/shared/AutoPtr.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _TRINITY_AUTO_PTR_H
-#define _TRINITY_AUTO_PTR_H
-
-#include <ace/Bound_Ptr.h>
-
-namespace Trinity
-{
-
-template <class Pointer, class Lock>
-class AutoPtr : public ACE_Strong_Bound_Ptr<Pointer, Lock>
-{
- typedef ACE_Strong_Bound_Ptr<Pointer, Lock> Base;
-
-public:
- AutoPtr()
- : Base()
- { }
-
- AutoPtr(Pointer* x)
- : Base(x)
- { }
-
- operator bool() const
- {
- return !Base::null();
- }
-
- bool operator !() const
- {
- return Base::null();
- }
-};
-
-} // namespace Trinity
-
-#endif
diff --git a/src/server/shared/CMakeLists.txt b/src/server/shared/CMakeLists.txt
index af113801067..a61248f01ea 100644
--- a/src/server/shared/CMakeLists.txt
+++ b/src/server/shared/CMakeLists.txt
@@ -18,6 +18,7 @@ file(GLOB_RECURSE sources_Database Database/*.cpp Database/*.h)
file(GLOB_RECURSE sources_DataStores DataStores/*.cpp DataStores/*.h)
file(GLOB_RECURSE sources_Dynamic Dynamic/*.cpp Dynamic/*.h)
file(GLOB_RECURSE sources_Logging Logging/*.cpp Logging/*.h)
+file(GLOB_RECURSE sources_Networking Networking/*.cpp Networking/*.h)
file(GLOB_RECURSE sources_Packets Packets/*.cpp Packets/*.h)
file(GLOB_RECURSE sources_Threading Threading/*.cpp Threading/*.h)
file(GLOB_RECURSE sources_Utilities Utilities/*.cpp Utilities/*.h)
@@ -47,6 +48,7 @@ set(shared_STAT_SRCS
${sources_Debugging}
${sources_Dynamic}
${sources_Logging}
+ ${sources_Networking}
${sources_Packets}
${sources_Threading}
${sources_Utilities}
@@ -68,11 +70,11 @@ include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/Debugging
${CMAKE_CURRENT_SOURCE_DIR}/Dynamic
${CMAKE_CURRENT_SOURCE_DIR}/Logging
+ ${CMAKE_CURRENT_SOURCE_DIR}/Networking
${CMAKE_CURRENT_SOURCE_DIR}/Packets
${CMAKE_CURRENT_SOURCE_DIR}/Threading
${CMAKE_CURRENT_SOURCE_DIR}/Utilities
${CMAKE_SOURCE_DIR}/src/server/game/Entities/Object
- ${ACE_INCLUDE_DIR}
${MYSQL_INCLUDE_DIR}
${OPENSSL_INCLUDE_DIR}
)
@@ -82,10 +84,6 @@ add_library(shared STATIC
${shared_STAT_PCH_SRC}
)
-target_link_libraries(shared
- ${ACE_LIBRARY}
-)
-
# Generate precompiled header
if (USE_COREPCH)
add_cxx_pch(shared ${shared_STAT_PCH_HDR} ${shared_STAT_PCH_SRC})
diff --git a/src/server/shared/Common.h b/src/server/shared/Common.h
index fb153f2ba3e..27e6cb63514 100644
--- a/src/server/shared/Common.h
+++ b/src/server/shared/Common.h
@@ -19,54 +19,14 @@
#ifndef TRINITYCORE_COMMON_H
#define TRINITYCORE_COMMON_H
-// config.h needs to be included 1st
-/// @todo this thingy looks like hack, but its not, need to
-// make separate header however, because It makes mess here.
-#ifdef HAVE_CONFIG_H
-// Remove Some things that we will define
-// This is in case including another config.h
-// before trinity config.h
-#ifdef PACKAGE
-#undef PACKAGE
-#endif //PACKAGE
-#ifdef PACKAGE_BUGREPORT
-#undef PACKAGE_BUGREPORT
-#endif //PACKAGE_BUGREPORT
-#ifdef PACKAGE_NAME
-#undef PACKAGE_NAME
-#endif //PACKAGE_NAME
-#ifdef PACKAGE_STRING
-#undef PACKAGE_STRING
-#endif //PACKAGE_STRING
-#ifdef PACKAGE_TARNAME
-#undef PACKAGE_TARNAME
-#endif //PACKAGE_TARNAME
-#ifdef PACKAGE_VERSION
-#undef PACKAGE_VERSION
-#endif //PACKAGE_VERSION
-#ifdef VERSION
-#undef VERSION
-#endif //VERSION
-
-# include "Config.h"
-
-#undef PACKAGE
-#undef PACKAGE_BUGREPORT
-#undef PACKAGE_NAME
-#undef PACKAGE_STRING
-#undef PACKAGE_TARNAME
-#undef PACKAGE_VERSION
-#undef VERSION
-#endif //HAVE_CONFIG_H
-
#include "Define.h"
-#include "Dynamic/UnorderedMap.h"
+#include <unordered_map>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
-#include <math.h>
+#include <cmath>
#include <errno.h>
#include <signal.h>
#include <assert.h>
@@ -79,22 +39,19 @@
#include <sstream>
#include <algorithm>
-#include "Threading/LockedQueue.h"
-#include "Threading/Threading.h"
+#include "Debugging/Errors.h"
-#include <ace/Basic_Types.h>
-#include <ace/Guard_T.h>
-#include <ace/RW_Thread_Mutex.h>
-#include <ace/Thread_Mutex.h>
-#include <ace/OS_NS_time.h>
+#include "Threading/LockedQueue.h"
#if PLATFORM == PLATFORM_WINDOWS
-# include <ace/config-all.h>
-// XP winver - needed to compile with standard leak check in MemoryLeaks.h
-// uncomment later if needed
-//#define _WIN32_WINNT 0x0501
# include <ws2tcpip.h>
-//#undef WIN32_WINNT
+
+# if defined(__INTEL_COMPILER)
+# if !defined(BOOST_ASIO_HAS_MOVE)
+# define BOOST_ASIO_HAS_MOVE
+# endif // !defined(BOOST_ASIO_HAS_MOVE)
+# endif // if defined(__INTEL_COMPILER)
+
#else
# include <sys/types.h>
# include <sys/ioctl.h>
@@ -111,7 +68,6 @@
#define snprintf _snprintf
#define atoll _atoi64
#define vsnprintf _vsnprintf
-#define finite(X) _finite(X)
#define llabs _abs64
#else
@@ -121,9 +77,7 @@
#endif
-inline float finiteAlways(float f) { return finite(f) ? f : 0.0f; }
-
-#define atol(a) strtoul( a, NULL, 10)
+inline float finiteAlways(float f) { return std::isfinite(f) ? f : 0.0f; }
#define STRINGIZE(a) #a
@@ -182,25 +136,9 @@ typedef std::vector<std::string> StringVector;
#endif
#ifndef M_PI
-#define M_PI 3.14159265358979323846f
+#define M_PI 3.14159265358979323846
#endif
#define MAX_QUERY_LEN 32*1024
-#define TRINITY_GUARD(MUTEX, LOCK) \
- ACE_Guard< MUTEX > TRINITY_GUARD_OBJECT (LOCK); \
- if (TRINITY_GUARD_OBJECT.locked() == 0) ASSERT(false);
-
-//! For proper implementation of multiple-read, single-write pattern, use
-//! ACE_RW_Mutex as underlying @MUTEX
-# define TRINITY_WRITE_GUARD(MUTEX, LOCK) \
- ACE_Write_Guard< MUTEX > TRINITY_GUARD_OBJECT (LOCK); \
- if (TRINITY_GUARD_OBJECT.locked() == 0) ASSERT(false);
-
-//! For proper implementation of multiple-read, single-write pattern, use
-//! ACE_RW_Mutex as underlying @MUTEX
-# define TRINITY_READ_GUARD(MUTEX, LOCK) \
- ACE_Read_Guard< MUTEX > TRINITY_GUARD_OBJECT (LOCK); \
- if (TRINITY_GUARD_OBJECT.locked() == 0) ASSERT(false);
-
#endif
diff --git a/src/server/shared/CompilerDefs.h b/src/server/shared/CompilerDefs.h
index 8a557328af4..2c2d7ea861d 100644
--- a/src/server/shared/CompilerDefs.h
+++ b/src/server/shared/CompilerDefs.h
@@ -55,12 +55,4 @@
# error "FATAL ERROR: Unknown compiler."
#endif
-#if defined(__cplusplus) && __cplusplus == 201103L
-# define COMPILER_HAS_CPP11_SUPPORT 1
-#elif _MSC_VER >= 1700
-# define COMPILER_HAS_CPP11_SUPPORT 1
-#else
-# define COMPILER_HAS_CPP11_SUPPORT 0
-#endif
-
#endif
diff --git a/src/server/shared/Configuration/Config.cpp b/src/server/shared/Configuration/Config.cpp
index 3f8997e6d55..6b83f562520 100644
--- a/src/server/shared/Configuration/Config.cpp
+++ b/src/server/shared/Configuration/Config.cpp
@@ -16,136 +16,100 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <algorithm>
+#include <mutex>
+#include <boost/property_tree/ptree.hpp>
+#include <boost/property_tree/ini_parser.hpp>
#include "Config.h"
#include "Errors.h"
-// Defined here as it must not be exposed to end-users.
-bool ConfigMgr::GetValueHelper(const char* name, ACE_TString &result)
-{
- GuardType guard(_configLock);
-
- if (_config.get() == 0)
- return false;
-
- ACE_TString section_name;
- ACE_Configuration_Section_Key section_key;
- const ACE_Configuration_Section_Key &root_key = _config->root_section();
-
- int i = 0;
- while (_config->enumerate_sections(root_key, i, section_name) == 0)
- {
- _config->open_section(root_key, section_name.c_str(), 0, section_key);
- if (_config->get_string_value(section_key, name, result) == 0)
- return true;
- ++i;
- }
-
- return false;
-}
+using namespace boost::property_tree;
-bool ConfigMgr::LoadInitial(char const* file)
+bool ConfigMgr::LoadInitial(std::string const& file, std::string& error)
{
- ASSERT(file);
-
- GuardType guard(_configLock);
+ std::lock_guard<std::mutex> lock(_configLock);
_filename = file;
- _config.reset(new ACE_Configuration_Heap());
- if (_config->open() == 0)
- if (LoadData(_filename.c_str()))
- return true;
- _config.reset();
- return false;
-}
+ try
+ {
+ ptree fullTree;
+ ini_parser::read_ini(file, fullTree);
-bool ConfigMgr::LoadMore(char const* file)
-{
- ASSERT(file);
- ASSERT(_config);
+ if (fullTree.empty())
+ {
+ error = "empty file (" + file + ")";
+ return false;
+ }
- GuardType guard(_configLock);
+ // Since we're using only one section per config file, we skip the section and have direct property access
+ _config = fullTree.begin()->second;
+ }
+ catch (ini_parser::ini_parser_error const& e)
+ {
+ if (e.line() == 0)
+ error = e.message() + " (" + e.filename() + ")";
+ else
+ error = e.message() + " (" + e.filename() + ":" + std::to_string(e.line()) + ")";
+ return false;
+ }
- return LoadData(file);
+ return true;
}
-bool ConfigMgr::Reload()
+bool ConfigMgr::Reload(std::string& error)
{
- return LoadInitial(_filename.c_str());
+ return LoadInitial(_filename.c_str(), error);
}
-bool ConfigMgr::LoadData(char const* file)
+std::string ConfigMgr::GetStringDefault(std::string const& name, const std::string& def)
{
- ACE_Ini_ImpExp config_importer(*_config.get());
- if (config_importer.import_config(file) == 0)
- return true;
+ std::string value = _config.get<std::string>(ptree::path_type(name, '/'), def);
- return false;
-}
+ value.erase(std::remove(value.begin(), value.end(), '"'), value.end());
-std::string ConfigMgr::GetStringDefault(const char* name, const std::string &def)
-{
- ACE_TString val;
- return GetValueHelper(name, val) ? val.c_str() : def;
+ return value;
}
-bool ConfigMgr::GetBoolDefault(const char* name, bool def)
+bool ConfigMgr::GetBoolDefault(std::string const& name, bool def)
{
- ACE_TString val;
-
- if (!GetValueHelper(name, val))
+ try
+ {
+ std::string val = _config.get<std::string>(ptree::path_type(name, '/'));
+ val.erase(std::remove(val.begin(), val.end(), '"'), val.end());
+ return (val == "true" || val == "TRUE" || val == "yes" || val == "YES" || val == "1");
+ }
+ catch (std::exception const& /*ex*/)
+ {
return def;
-
- return (val == "true" || val == "TRUE" || val == "yes" || val == "YES" ||
- val == "1");
+ }
}
-int ConfigMgr::GetIntDefault(const char* name, int def)
+int ConfigMgr::GetIntDefault(std::string const& name, int def)
{
- ACE_TString val;
- return GetValueHelper(name, val) ? atoi(val.c_str()) : def;
+ return _config.get<int>(ptree::path_type(name, '/'), def);
}
-float ConfigMgr::GetFloatDefault(const char* name, float def)
+float ConfigMgr::GetFloatDefault(std::string const& name, float def)
{
- ACE_TString val;
- return GetValueHelper(name, val) ? (float)atof(val.c_str()) : def;
+ return _config.get<float>(ptree::path_type(name, '/'), def);
}
std::string const& ConfigMgr::GetFilename()
{
- GuardType guard(_configLock);
+ std::lock_guard<std::mutex> lock(_configLock);
return _filename;
}
std::list<std::string> ConfigMgr::GetKeysByString(std::string const& name)
{
- GuardType guard(_configLock);
+ std::lock_guard<std::mutex> lock(_configLock);
std::list<std::string> keys;
- if (_config.get() == 0)
- return keys;
-
- ACE_TString section_name;
- ACE_Configuration_Section_Key section_key;
- const ACE_Configuration_Section_Key &root_key = _config->root_section();
-
- int i = 0;
- while (_config->enumerate_sections(root_key, i++, section_name) == 0)
- {
- _config->open_section(root_key, section_name.c_str(), 0, section_key);
- ACE_TString key_name;
- ACE_Configuration::VALUETYPE type;
- int j = 0;
- while (_config->enumerate_values(section_key, j++, key_name, type) == 0)
- {
- std::string temp = key_name.c_str();
-
- if (!temp.find(name))
- keys.push_back(temp);
- }
- }
+ for (const ptree::value_type& child : _config)
+ if (child.first.compare(0, name.length(), name) == 0)
+ keys.push_back(child.first);
return keys;
}
diff --git a/src/server/shared/Configuration/Config.h b/src/server/shared/Configuration/Config.h
index 4693b21a0c7..ff0233b5669 100644
--- a/src/server/shared/Configuration/Config.h
+++ b/src/server/shared/Configuration/Config.h
@@ -21,58 +21,43 @@
#include <string>
#include <list>
-#include <ace/Singleton.h>
-#include <ace/Configuration_Import_Export.h>
-#include <ace/Thread_Mutex.h>
-#include <AutoPtr.h>
-
-typedef Trinity::AutoPtr<ACE_Configuration_Heap, ACE_Null_Mutex> Config;
+#include <mutex>
+#include <boost/property_tree/ptree.hpp>
class ConfigMgr
{
- friend class ACE_Singleton<ConfigMgr, ACE_Null_Mutex>;
- friend class ConfigLoader;
-
ConfigMgr() { }
~ConfigMgr() { }
public:
/// Method used only for loading main configuration files (authserver.conf and worldserver.conf)
- bool LoadInitial(char const* file);
+ bool LoadInitial(std::string const& file, std::string& error);
- /**
- * This method loads additional configuration files
- * It is recommended to use this method in WorldScript::OnConfigLoad hooks
- *
- * @return true if loading was successful
- */
- bool LoadMore(char const* file);
+ static ConfigMgr* instance()
+ {
+ static ConfigMgr instance;
+ return &instance;
+ }
- bool Reload();
+ bool Reload(std::string& error);
- std::string GetStringDefault(const char* name, const std::string& def);
- bool GetBoolDefault(const char* name, bool def);
- int GetIntDefault(const char* name, int def);
- float GetFloatDefault(const char* name, float def);
+ std::string GetStringDefault(std::string const& name, const std::string& def);
+ bool GetBoolDefault(std::string const& name, bool def);
+ int GetIntDefault(std::string const& name, int def);
+ float GetFloatDefault(std::string const& name, float def);
std::string const& GetFilename();
std::list<std::string> GetKeysByString(std::string const& name);
private:
- bool GetValueHelper(const char* name, ACE_TString &result);
- bool LoadData(char const* file);
-
- typedef ACE_Thread_Mutex LockType;
- typedef ACE_Guard<LockType> GuardType;
-
std::string _filename;
- Config _config;
- LockType _configLock;
+ boost::property_tree::ptree _config;
+ std::mutex _configLock;
ConfigMgr(ConfigMgr const&);
ConfigMgr& operator=(ConfigMgr const&);
};
-#define sConfigMgr ACE_Singleton<ConfigMgr, ACE_Null_Mutex>::instance()
+#define sConfigMgr ConfigMgr::instance()
#endif
diff --git a/src/server/shared/Containers.h b/src/server/shared/Containers.h
index d6ba98e4ed4..9121fbe2a97 100644
--- a/src/server/shared/Containers.h
+++ b/src/server/shared/Containers.h
@@ -64,6 +64,34 @@ namespace Trinity
std::advance(it, urand(0, container.size() - 1));
return *it;
}
+
+ /**
+ * @fn bool Trinity::Containers::Intersects(Iterator first1, Iterator last1, Iterator first2, Iterator last2)
+ *
+ * @brief Checks if two SORTED containers have a common element
+ *
+ * @param first1 Iterator pointing to start of the first container
+ * @param last1 Iterator pointing to end of the first container
+ * @param first2 Iterator pointing to start of the second container
+ * @param last2 Iterator pointing to end of the second container
+ *
+ * @return true if containers have a common element, false otherwise.
+ */
+ template<class Iterator1, class Iterator2>
+ bool Intersects(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2)
+ {
+ while (first1 != last1 && first2 != last2)
+ {
+ if (*first1 < *first2)
+ ++first1;
+ else if (*first2 < *first1)
+ ++first2;
+ else
+ return true;
+ }
+
+ return false;
+ }
}
//! namespace Containers
}
diff --git a/src/server/shared/Cryptography/ARC4.h b/src/server/shared/Cryptography/ARC4.h
index 5304b0730a6..11d3d4ba87b 100644
--- a/src/server/shared/Cryptography/ARC4.h
+++ b/src/server/shared/Cryptography/ARC4.h
@@ -19,8 +19,8 @@
#ifndef _AUTH_SARC4_H
#define _AUTH_SARC4_H
-#include "Define.h"
#include <openssl/evp.h>
+#include "Define.h"
class ARC4
{
diff --git a/src/server/shared/Cryptography/Authentication/AuthCrypt.cpp b/src/server/shared/Cryptography/Authentication/AuthCrypt.cpp
index ff94f307254..ec8913ba1bc 100644
--- a/src/server/shared/Cryptography/Authentication/AuthCrypt.cpp
+++ b/src/server/shared/Cryptography/Authentication/AuthCrypt.cpp
@@ -20,6 +20,8 @@
#include "Cryptography/HMACSHA1.h"
#include "Cryptography/BigNumber.h"
+#include <cstring>
+
AuthCrypt::AuthCrypt() :
_clientDecrypt(SHA_DIGEST_LENGTH), _serverEncrypt(SHA_DIGEST_LENGTH),
_initialized(false)
diff --git a/src/server/shared/Cryptography/BigNumber.cpp b/src/server/shared/Cryptography/BigNumber.cpp
index 1f3fc96e28d..1319e116159 100644
--- a/src/server/shared/Cryptography/BigNumber.cpp
+++ b/src/server/shared/Cryptography/BigNumber.cpp
@@ -16,13 +16,12 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <ace/Guard_T.h>
-
#include "Cryptography/BigNumber.h"
#include <openssl/bn.h>
#include <openssl/crypto.h>
+#include <cstring>
#include <algorithm>
-#include <ace/Auto_Ptr.h>
+#include <memory>
BigNumber::BigNumber()
: _bn(BN_new())
@@ -170,7 +169,7 @@ bool BigNumber::isZero() const
return BN_is_zero(_bn);
}
-ACE_Auto_Array_Ptr<uint8> BigNumber::AsByteArray(int32 minSize, bool littleEndian)
+std::unique_ptr<uint8[]> BigNumber::AsByteArray(int32 minSize, bool littleEndian)
{
int length = (minSize >= GetNumBytes()) ? minSize : GetNumBytes();
@@ -186,7 +185,7 @@ ACE_Auto_Array_Ptr<uint8> BigNumber::AsByteArray(int32 minSize, bool littleEndia
if (littleEndian)
std::reverse(array, array + length);
- ACE_Auto_Array_Ptr<uint8> ret(array);
+ std::unique_ptr<uint8[]> ret(array);
return ret;
}
diff --git a/src/server/shared/Cryptography/BigNumber.h b/src/server/shared/Cryptography/BigNumber.h
index dc553babec9..684a25e8801 100644
--- a/src/server/shared/Cryptography/BigNumber.h
+++ b/src/server/shared/Cryptography/BigNumber.h
@@ -19,8 +19,8 @@
#ifndef _AUTH_BIGNUMBER_H
#define _AUTH_BIGNUMBER_H
+#include <memory>
#include "Define.h"
-#include <ace/Auto_Ptr.h>
struct bignum_st;
@@ -87,7 +87,7 @@ class BigNumber
uint32 AsDword();
- ACE_Auto_Array_Ptr<uint8> AsByteArray(int32 minSize = 0, bool littleEndian = true);
+ std::unique_ptr<uint8[]> AsByteArray(int32 minSize = 0, bool littleEndian = true);
char * AsHexStr() const;
char * AsDecStr() const;
diff --git a/src/server/shared/Cryptography/OpenSSLCrypto.cpp b/src/server/shared/Cryptography/OpenSSLCrypto.cpp
index bd72459e9df..6d8d6584e6c 100644
--- a/src/server/shared/Cryptography/OpenSSLCrypto.cpp
+++ b/src/server/shared/Cryptography/OpenSSLCrypto.cpp
@@ -17,28 +17,23 @@
#include <OpenSSLCrypto.h>
#include <openssl/crypto.h>
-#include <ace/Thread_Mutex.h>
#include <vector>
-#include <ace/Thread.h>
+#include <thread>
+#include <mutex>
-std::vector<ACE_Thread_Mutex*> cryptoLocks;
+std::vector<std::mutex*> cryptoLocks;
static void lockingCallback(int mode, int type, const char* /*file*/, int /*line*/)
{
if (mode & CRYPTO_LOCK)
- cryptoLocks[type]->acquire();
+ cryptoLocks[type]->lock();
else
- cryptoLocks[type]->release();
+ cryptoLocks[type]->unlock();
}
static void threadIdCallback(CRYPTO_THREADID * id)
{
-/// ACE_thread_t turns out to be a struct under Mac OS.
-#ifndef __APPLE__
- CRYPTO_THREADID_set_numeric(id, ACE_Thread::self());
-#else
- CRYPTO_THREADID_set_pointer(id, ACE_Thread::self());
-#endif
+ CRYPTO_THREADID_set_numeric(id, std::hash<std::thread::id>()(std::this_thread::get_id()));
}
void OpenSSLCrypto::threadsSetup()
@@ -46,7 +41,7 @@ void OpenSSLCrypto::threadsSetup()
cryptoLocks.resize(CRYPTO_num_locks());
for(int i = 0 ; i < CRYPTO_num_locks(); ++i)
{
- cryptoLocks[i] = new ACE_Thread_Mutex();
+ cryptoLocks[i] = new std::mutex;
}
CRYPTO_THREADID_set_callback(threadIdCallback);
CRYPTO_set_locking_callback(lockingCallback);
@@ -61,4 +56,4 @@ void OpenSSLCrypto::threadsCleanup()
delete cryptoLocks[i];
}
cryptoLocks.resize(0);
-} \ No newline at end of file
+}
diff --git a/src/server/shared/Cryptography/SHA1.cpp b/src/server/shared/Cryptography/SHA1.cpp
index c89469bafb5..d47b13067cd 100644
--- a/src/server/shared/Cryptography/SHA1.cpp
+++ b/src/server/shared/Cryptography/SHA1.cpp
@@ -18,6 +18,7 @@
#include "SHA1.h"
#include "BigNumber.h"
+#include <cstring>
#include <stdarg.h>
SHA1Hash::SHA1Hash()
diff --git a/src/server/shared/Cryptography/WardenKeyGeneration.h b/src/server/shared/Cryptography/WardenKeyGeneration.h
index 11bc00d641a..9832d5a9c72 100644
--- a/src/server/shared/Cryptography/WardenKeyGeneration.h
+++ b/src/server/shared/Cryptography/WardenKeyGeneration.h
@@ -18,6 +18,8 @@
#include "SHA1.h"
+#include <cstring>
+
#ifndef _WARDEN_KEY_GENERATION_H
#define _WARDEN_KEY_GENERATION_H
diff --git a/src/server/shared/DataStores/DBCFileLoader.h b/src/server/shared/DataStores/DBCFileLoader.h
index c5194d20530..a665bc49c9c 100644
--- a/src/server/shared/DataStores/DBCFileLoader.h
+++ b/src/server/shared/DataStores/DBCFileLoader.h
@@ -106,5 +106,8 @@ class DBCFileLoader
uint32 *fieldsOffset;
unsigned char *data;
unsigned char *stringTable;
+
+ DBCFileLoader(DBCFileLoader const& right) = delete;
+ DBCFileLoader& operator=(DBCFileLoader const& right) = delete;
};
#endif
diff --git a/src/server/shared/DataStores/DBCStore.h b/src/server/shared/DataStores/DBCStore.h
index 78f7bb28580..08b8d810b8b 100644
--- a/src/server/shared/DataStores/DBCStore.h
+++ b/src/server/shared/DataStores/DBCStore.h
@@ -63,6 +63,10 @@ struct SqlDbc
}
}
}
+
+private:
+ SqlDbc(SqlDbc const& right) = delete;
+ SqlDbc& operator=(SqlDbc const& right) = delete;
};
template<class T>
@@ -291,6 +295,9 @@ class DBCStorage
T* dataTable;
StringPoolList stringPoolList;
+
+ DBCStorage(DBCStorage const& right) = delete;
+ DBCStorage& operator=(DBCStorage const& right) = delete;
};
#endif
diff --git a/src/server/shared/Database/AdhocStatement.cpp b/src/server/shared/Database/AdhocStatement.cpp
index 896fefde5b7..7fae9173d20 100644
--- a/src/server/shared/Database/AdhocStatement.cpp
+++ b/src/server/shared/Database/AdhocStatement.cpp
@@ -19,22 +19,20 @@
#include "MySQLConnection.h"
/*! Basic, ad-hoc queries. */
-BasicStatementTask::BasicStatementTask(const char* sql) :
-m_has_result(false)
-{
- m_sql = strdup(sql);
-}
-
-BasicStatementTask::BasicStatementTask(const char* sql, QueryResultFuture result) :
-m_has_result(true),
-m_result(result)
+BasicStatementTask::BasicStatementTask(const char* sql, bool async) :
+m_result(nullptr)
{
m_sql = strdup(sql);
+ m_has_result = async; // If the operation is async, then there's a result
+ if (async)
+ m_result = new QueryResultPromise();
}
BasicStatementTask::~BasicStatementTask()
{
free((void*)m_sql);
+ if (m_has_result && m_result != nullptr)
+ delete m_result;
}
bool BasicStatementTask::Execute()
@@ -45,11 +43,11 @@ bool BasicStatementTask::Execute()
if (!result || !result->GetRowCount() || !result->NextRow())
{
delete result;
- m_result.set(QueryResult(NULL));
+ m_result->set_value(QueryResult(NULL));
return false;
}
- m_result.set(QueryResult(result));
+ m_result->set_value(QueryResult(result));
return true;
}
diff --git a/src/server/shared/Database/AdhocStatement.h b/src/server/shared/Database/AdhocStatement.h
index 44a9fa3d3ee..40c1dbb7098 100644
--- a/src/server/shared/Database/AdhocStatement.h
+++ b/src/server/shared/Database/AdhocStatement.h
@@ -18,24 +18,26 @@
#ifndef _ADHOCSTATEMENT_H
#define _ADHOCSTATEMENT_H
-#include <ace/Future.h>
+#include <future>
#include "SQLOperation.h"
-typedef ACE_Future<QueryResult> QueryResultFuture;
+typedef std::future<QueryResult> QueryResultFuture;
+typedef std::promise<QueryResult> QueryResultPromise;
+
/*! Raw, ad-hoc query. */
class BasicStatementTask : public SQLOperation
{
public:
- BasicStatementTask(const char* sql);
- BasicStatementTask(const char* sql, QueryResultFuture result);
+ BasicStatementTask(const char* sql, bool async = false);
~BasicStatementTask();
- bool Execute();
+ bool Execute() override;
+ QueryResultFuture GetFuture() { return m_result->get_future(); }
private:
const char* m_sql; //- Raw query to be executed
bool m_has_result;
- QueryResultFuture m_result;
+ QueryResultPromise* m_result;
};
#endif \ No newline at end of file
diff --git a/src/server/shared/Database/DatabaseWorker.cpp b/src/server/shared/Database/DatabaseWorker.cpp
index 3581f8e0211..e130429c8d0 100644
--- a/src/server/shared/Database/DatabaseWorker.cpp
+++ b/src/server/shared/Database/DatabaseWorker.cpp
@@ -20,32 +20,42 @@
#include "SQLOperation.h"
#include "MySQLConnection.h"
#include "MySQLThreading.h"
+#include "ProducerConsumerQueue.h"
-DatabaseWorker::DatabaseWorker(ACE_Activation_Queue* new_queue, MySQLConnection* con) :
-m_queue(new_queue),
-m_conn(con)
+DatabaseWorker::DatabaseWorker(ProducerConsumerQueue<SQLOperation*>* newQueue, MySQLConnection* connection)
{
- /// Assign thread to task
- activate();
+ _connection = connection;
+ _queue = newQueue;
+ _cancelationToken = false;
+ _workerThread = std::thread(&DatabaseWorker::WorkerThread, this);
}
-int DatabaseWorker::svc()
+DatabaseWorker::~DatabaseWorker()
{
- if (!m_queue)
- return -1;
+ _cancelationToken = true;
- SQLOperation *request = NULL;
- while (1)
+ _queue->Cancel();
+
+ _workerThread.join();
+}
+
+void DatabaseWorker::WorkerThread()
+{
+ if (!_queue)
+ return;
+
+ for (;;)
{
- request = (SQLOperation*)(m_queue->dequeue());
- if (!request)
- break;
+ SQLOperation* operation = nullptr;
- request->SetConnection(m_conn);
- request->call();
+ _queue->WaitAndPop(operation);
- delete request;
- }
+ if (_cancelationToken || !operation)
+ return;
- return 0;
+ operation->SetConnection(_connection);
+ operation->call();
+
+ delete operation;
+ }
}
diff --git a/src/server/shared/Database/DatabaseWorker.h b/src/server/shared/Database/DatabaseWorker.h
index 14e92924ed2..6f452c767f6 100644
--- a/src/server/shared/Database/DatabaseWorker.h
+++ b/src/server/shared/Database/DatabaseWorker.h
@@ -18,24 +18,29 @@
#ifndef _WORKERTHREAD_H
#define _WORKERTHREAD_H
-#include <ace/Task.h>
-#include <ace/Activation_Queue.h>
+#include <thread>
+#include "ProducerConsumerQueue.h"
class MySQLConnection;
+class SQLOperation;
-class DatabaseWorker : protected ACE_Task_Base
+class DatabaseWorker
{
public:
- DatabaseWorker(ACE_Activation_Queue* new_queue, MySQLConnection* con);
-
- ///- Inherited from ACE_Task_Base
- int svc();
- int wait() { return ACE_Task_Base::wait(); }
+ DatabaseWorker(ProducerConsumerQueue<SQLOperation*>* newQueue, MySQLConnection* connection);
+ ~DatabaseWorker();
private:
- DatabaseWorker() : ACE_Task_Base() { }
- ACE_Activation_Queue* m_queue;
- MySQLConnection* m_conn;
+ ProducerConsumerQueue<SQLOperation*>* _queue;
+ MySQLConnection* _connection;
+
+ void WorkerThread();
+ std::thread _workerThread;
+
+ std::atomic_bool _cancelationToken;
+
+ DatabaseWorker(DatabaseWorker const& right) = delete;
+ DatabaseWorker& operator=(DatabaseWorker const& right) = delete;
};
#endif
diff --git a/src/server/shared/Database/DatabaseWorkerPool.h b/src/server/shared/Database/DatabaseWorkerPool.h
index e2ebda9e8ae..5548e44c925 100644
--- a/src/server/shared/Database/DatabaseWorkerPool.h
+++ b/src/server/shared/Database/DatabaseWorkerPool.h
@@ -18,8 +18,6 @@
#ifndef _DATABASEWORKERPOOL_H
#define _DATABASEWORKERPOOL_H
-#include <ace/Thread_Mutex.h>
-
#include "Common.h"
#include "Callback.h"
#include "MySQLConnection.h"
@@ -37,7 +35,7 @@
class PingOperation : public SQLOperation
{
//! Operation for idle delaythreads
- bool Execute()
+ bool Execute() override
{
m_conn->Ping();
return true;
@@ -47,11 +45,19 @@ class PingOperation : public SQLOperation
template <class T>
class DatabaseWorkerPool
{
+ private:
+ enum InternalIndex
+ {
+ IDX_ASYNC,
+ IDX_SYNCH,
+ IDX_SIZE
+ };
+
public:
/* Activity state */
- DatabaseWorkerPool() :
- _queue(new ACE_Activation_Queue())
+ DatabaseWorkerPool() : _connectionInfo(NULL)
{
+ _queue = new ProducerConsumerQueue<SQLOperation*>();
memset(_connectionCount, 0, sizeof(_connectionCount));
_connections.resize(IDX_SIZE);
@@ -61,44 +67,32 @@ class DatabaseWorkerPool
~DatabaseWorkerPool()
{
+ _queue->Cancel();
+
+ delete _queue;
+
+ delete _connectionInfo;
}
bool Open(const std::string& infoString, uint8 async_threads, uint8 synch_threads)
{
bool res = true;
- _connectionInfo = MySQLConnectionInfo(infoString);
+ _connectionInfo = new MySQLConnectionInfo(infoString);
TC_LOG_INFO("sql.driver", "Opening DatabasePool '%s'. Asynchronous connections: %u, synchronous connections: %u.",
GetDatabaseName(), async_threads, synch_threads);
- //! Open asynchronous connections (delayed operations)
- _connections[IDX_ASYNC].resize(async_threads);
- for (uint8 i = 0; i < async_threads; ++i)
- {
- T* t = new T(_queue, _connectionInfo);
- res &= t->Open();
- if (res) // only check mysql version if connection is valid
- WPFatal(mysql_get_server_version(t->GetHandle()) >= MIN_MYSQL_SERVER_VERSION, "TrinityCore does not support MySQL versions below 5.1");
- _connections[IDX_ASYNC][i] = t;
- ++_connectionCount[IDX_ASYNC];
- }
+ res = OpenConnections(IDX_ASYNC, async_threads);
- //! Open synchronous connections (direct, blocking operations)
- _connections[IDX_SYNCH].resize(synch_threads);
- for (uint8 i = 0; i < synch_threads; ++i)
- {
- T* t = new T(_connectionInfo);
- res &= t->Open();
- _connections[IDX_SYNCH][i] = t;
- ++_connectionCount[IDX_SYNCH];
- }
+ if (!res)
+ return res;
+
+ res = OpenConnections(IDX_SYNCH, synch_threads);
if (res)
TC_LOG_INFO("sql.driver", "DatabasePool '%s' opened successfully. %u total connections running.", GetDatabaseName(),
(_connectionCount[IDX_SYNCH] + _connectionCount[IDX_ASYNC]));
- else
- TC_LOG_ERROR("sql.driver", "DatabasePool %s NOT opened. There were errors opening the MySQL connections. Check your SQLDriverLogFile "
- "for specific errors.", GetDatabaseName());
+
return res;
}
@@ -106,17 +100,9 @@ class DatabaseWorkerPool
{
TC_LOG_INFO("sql.driver", "Closing down DatabasePool '%s'.", GetDatabaseName());
- //! Shuts down delaythreads for this connection pool by underlying deactivate().
- //! The next dequeue attempt in the worker thread tasks will result in an error,
- //! ultimately ending the worker thread task.
- _queue->queue()->close();
-
for (uint8 i = 0; i < _connectionCount[IDX_ASYNC]; ++i)
{
T* t = _connections[IDX_ASYNC][i];
- DatabaseWorker* worker = t->m_worker;
- worker->wait(); //! Block until no more threads are running this task.
- delete worker;
t->Close(); //! Closes the actualy MySQL connection.
}
@@ -130,9 +116,6 @@ class DatabaseWorkerPool
for (uint8 i = 0; i < _connectionCount[IDX_SYNCH]; ++i)
_connections[IDX_SYNCH][i]->Close();
- //! Deletes the ACE_Activation_Queue object and its underlying ACE_Message_Queue
- delete _queue;
-
TC_LOG_INFO("sql.driver", "All connections on DatabasePool '%s' closed.", GetDatabaseName());
}
@@ -302,10 +285,11 @@ class DatabaseWorkerPool
//! The return value is then processed in ProcessQueryCallback methods.
QueryResultFuture AsyncQuery(const char* sql)
{
- QueryResultFuture res;
- BasicStatementTask* task = new BasicStatementTask(sql, res);
+ BasicStatementTask* task = new BasicStatementTask(sql, true);
+ // Store future result before enqueueing - task might get already processed and deleted before returning from this method
+ QueryResultFuture result = task->GetFuture();
Enqueue(task);
- return res; //! Actual return value has no use yet
+ return result;
}
//! Enqueues a query in string format -with variable args- that will set the value of the QueryResultFuture return object as soon as the query is executed.
@@ -326,10 +310,11 @@ class DatabaseWorkerPool
//! Statement must be prepared with CONNECTION_ASYNC flag.
PreparedQueryResultFuture AsyncQuery(PreparedStatement* stmt)
{
- PreparedQueryResultFuture res;
- PreparedStatementTask* task = new PreparedStatementTask(stmt, res);
+ PreparedStatementTask* task = new PreparedStatementTask(stmt, true);
+ // Store future result before enqueueing - task might get already processed and deleted before returning from this method
+ PreparedQueryResultFuture result = task->GetFuture();
Enqueue(task);
- return res;
+ return result;
}
//! Enqueues a vector of SQL operations (can be both adhoc and prepared) that will set the value of the QueryResultHolderFuture
@@ -338,10 +323,11 @@ class DatabaseWorkerPool
//! Any prepared statements added to this holder need to be prepared with the CONNECTION_ASYNC flag.
QueryResultHolderFuture DelayQueryHolder(SQLQueryHolder* holder)
{
- QueryResultHolderFuture res;
- SQLQueryHolderTask* task = new SQLQueryHolderTask(holder, res);
+ SQLQueryHolderTask* task = new SQLQueryHolderTask(holder);
+ // Store future result before enqueueing - task might get already processed and deleted before returning from this method
+ QueryResultHolderFuture result = task->GetFuture();
Enqueue(task);
- return res; //! Fool compiler, has no use yet
+ return result;
}
/**
@@ -411,7 +397,7 @@ class DatabaseWorkerPool
//! Will be wrapped in a transaction if valid object is present, otherwise executed standalone.
void ExecuteOrAppend(SQLTransaction& trans, PreparedStatement* stmt)
{
- if (trans.null())
+ if (!trans)
Execute(stmt);
else
trans->Append(stmt);
@@ -421,7 +407,7 @@ class DatabaseWorkerPool
//! Will be wrapped in a transaction if valid object is present, otherwise executed standalone.
void ExecuteOrAppend(SQLTransaction& trans, const char* sql)
{
- if (trans.null())
+ if (!trans)
Execute(sql);
else
trans->Append(sql);
@@ -445,7 +431,7 @@ class DatabaseWorkerPool
if (str.empty())
return;
- char* buf = new char[str.size()*2+1];
+ char* buf = new char[str.size() * 2 + 1];
EscapeString(buf, str.c_str(), str.size());
str = buf;
delete[] buf;
@@ -473,6 +459,54 @@ class DatabaseWorkerPool
}
private:
+ bool OpenConnections(InternalIndex type, uint8 numConnections)
+ {
+ _connections[type].resize(numConnections);
+ for (uint8 i = 0; i < numConnections; ++i)
+ {
+ T* t;
+
+ if (type == IDX_ASYNC)
+ t = new T(_queue, *_connectionInfo);
+ else if (type == IDX_SYNCH)
+ t = new T(*_connectionInfo);
+ else
+ ASSERT(false);
+
+ _connections[type][i] = t;
+ ++_connectionCount[type];
+
+ bool res = t->Open();
+
+ if (res)
+ {
+ if (mysql_get_server_version(t->GetHandle()) < MIN_MYSQL_SERVER_VERSION)
+ {
+ TC_LOG_ERROR("sql.driver", "TrinityCore does not support MySQL versions below 5.1");
+ res = false;
+ }
+ }
+
+ // Failed to open a connection or invalid version, abort and cleanup
+ if (!res)
+ {
+ TC_LOG_ERROR("sql.driver", "DatabasePool %s NOT opened. There were errors opening the MySQL connections. Check your SQLDriverLogFile "
+ "for specific errors. Read wiki at http://collab.kpsn.org/display/tc/TrinityCore+Home", GetDatabaseName());
+
+ while (_connectionCount[type] != 0)
+ {
+ T* t = _connections[type][i--];
+ delete t;
+ --_connectionCount[type];
+ }
+
+ return false;
+ }
+ }
+
+ return true;
+ }
+
unsigned long EscapeString(char *to, const char *from, unsigned long length)
{
if (!to || !from || !length)
@@ -483,7 +517,7 @@ class DatabaseWorkerPool
void Enqueue(SQLOperation* op)
{
- _queue->enqueue(op);
+ _queue->Push(op);
}
//! Gets a free connection in the synchronous connection pool.
@@ -507,21 +541,13 @@ class DatabaseWorkerPool
char const* GetDatabaseName() const
{
- return _connectionInfo.database.c_str();
+ return _connectionInfo->database.c_str();
}
- private:
- enum _internalIndex
- {
- IDX_ASYNC,
- IDX_SYNCH,
- IDX_SIZE
- };
-
- ACE_Activation_Queue* _queue; //! Queue shared by async worker threads.
- std::vector< std::vector<T*> > _connections;
- uint32 _connectionCount[2]; //! Counter of MySQL connections;
- MySQLConnectionInfo _connectionInfo;
+ ProducerConsumerQueue<SQLOperation*>* _queue; //! Queue shared by async worker threads.
+ std::vector< std::vector<T*> > _connections;
+ uint32 _connectionCount[2]; //! Counter of MySQL connections;
+ MySQLConnectionInfo* _connectionInfo;
};
#endif
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h
index 98d7fe231f1..c73f0df8d00 100644
--- a/src/server/shared/Database/Implementation/CharacterDatabase.h
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.h
@@ -26,10 +26,10 @@ class CharacterDatabaseConnection : public MySQLConnection
public:
//- Constructors for sync and async connections
CharacterDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo) { }
- CharacterDatabaseConnection(ACE_Activation_Queue* q, MySQLConnectionInfo& connInfo) : MySQLConnection(q, connInfo) { }
+ CharacterDatabaseConnection(ProducerConsumerQueue<SQLOperation*>* q, MySQLConnectionInfo& connInfo) : MySQLConnection(q, connInfo) { }
//- Loads database type specific prepared statements
- void DoPrepareStatements();
+ void DoPrepareStatements() override;
};
typedef DatabaseWorkerPool<CharacterDatabaseConnection> CharacterDatabaseWorkerPool;
diff --git a/src/server/shared/Database/Implementation/LoginDatabase.cpp b/src/server/shared/Database/Implementation/LoginDatabase.cpp
index de1e5b992e6..a2b9091a8d5 100644
--- a/src/server/shared/Database/Implementation/LoginDatabase.cpp
+++ b/src/server/shared/Database/Implementation/LoginDatabase.cpp
@@ -26,13 +26,13 @@ void LoginDatabaseConnection::DoPrepareStatements()
PrepareStatement(LOGIN_DEL_EXPIRED_IP_BANS, "DELETE FROM ip_banned WHERE unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_ASYNC);
PrepareStatement(LOGIN_UPD_EXPIRED_ACCOUNT_BANS, "UPDATE account_banned SET active = 0 WHERE active = 1 AND unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_IP_BANNED, "SELECT * FROM ip_banned WHERE ip = ?", CONNECTION_SYNCH);
- PrepareStatement(LOGIN_INS_IP_AUTO_BANNED, "INSERT INTO ip_banned (ip, bandate, unbandate, bannedby, banreason) VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, 'Trinity realmd', 'Failed login autoban')", CONNECTION_ASYNC);
+ PrepareStatement(LOGIN_INS_IP_AUTO_BANNED, "INSERT INTO ip_banned (ip, bandate, unbandate, bannedby, banreason) VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, 'Trinity Auth', 'Failed login autoban')", CONNECTION_ASYNC);
PrepareStatement(LOGIN_SEL_IP_BANNED_ALL, "SELECT ip, bandate, unbandate, bannedby, banreason FROM ip_banned WHERE (bandate = unbandate OR unbandate > UNIX_TIMESTAMP()) ORDER BY unbandate", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_IP_BANNED_BY_IP, "SELECT ip, bandate, unbandate, bannedby, banreason FROM ip_banned WHERE (bandate = unbandate OR unbandate > UNIX_TIMESTAMP()) AND ip LIKE CONCAT('%%', ?, '%%') ORDER BY unbandate", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_ACCOUNT_BANNED, "SELECT bandate, unbandate FROM account_banned WHERE id = ? AND active = 1", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_ACCOUNT_BANNED_ALL, "SELECT account.id, username FROM account, account_banned WHERE account.id = account_banned.id AND active = 1 GROUP BY account.id", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_ACCOUNT_BANNED_BY_USERNAME, "SELECT account.id, username FROM account, account_banned WHERE account.id = account_banned.id AND active = 1 AND username LIKE CONCAT('%%', ?, '%%') GROUP BY account.id", CONNECTION_SYNCH);
- PrepareStatement(LOGIN_INS_ACCOUNT_AUTO_BANNED, "INSERT INTO account_banned VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, 'Trinity realmd', 'Failed login autoban', 1)", CONNECTION_ASYNC);
+ PrepareStatement(LOGIN_INS_ACCOUNT_AUTO_BANNED, "INSERT INTO account_banned VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, 'Trinity Auth', 'Failed login autoban', 1)", CONNECTION_ASYNC);
PrepareStatement(LOGIN_DEL_ACCOUNT_BANNED, "DELETE FROM account_banned WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(LOGIN_SEL_SESSIONKEY, "SELECT a.sessionkey, a.id, aa.gmlevel FROM account a LEFT JOIN account_access aa ON (a.id = aa.id) WHERE username = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_UPD_VS, "UPDATE account SET v = ?, s = ? WHERE username = ?", CONNECTION_ASYNC);
@@ -69,6 +69,7 @@ void LoginDatabaseConnection::DoPrepareStatements()
PrepareStatement(LOGIN_UPD_MUTE_TIME, "UPDATE account SET mutetime = ? , mutereason = ? , muteby = ? WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(LOGIN_UPD_MUTE_TIME_LOGIN, "UPDATE account SET mutetime = ? WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(LOGIN_UPD_LAST_IP, "UPDATE account SET last_ip = ? WHERE username = ?", CONNECTION_ASYNC);
+ PrepareStatement(LOGIN_UPD_LAST_ATTEMPT_IP, "UPDATE account SET last_attempt_ip = ? WHERE username = ?", CONNECTION_ASYNC);
PrepareStatement(LOGIN_UPD_ACCOUNT_ONLINE, "UPDATE account SET online = 1 WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(LOGIN_UPD_UPTIME_PLAYERS, "UPDATE uptime SET uptime = ?, maxplayers = ? WHERE realmid = ? AND starttime = ?", CONNECTION_ASYNC);
PrepareStatement(LOGIN_DEL_OLD_LOGS, "DELETE FROM logs WHERE (time + ?) < ?", CONNECTION_ASYNC);
@@ -90,12 +91,21 @@ void LoginDatabaseConnection::DoPrepareStatements()
PrepareStatement(LOGIN_SEL_ACCOUNT_RECRUITER, "SELECT 1 FROM account WHERE recruiter = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_BANS, "SELECT 1 FROM account_banned WHERE id = ? AND active = 1 UNION SELECT 1 FROM ip_banned WHERE ip = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_ACCOUNT_WHOIS, "SELECT username, email, last_ip FROM account WHERE id = ?", CONNECTION_SYNCH);
+ PrepareStatement(LOGIN_SEL_LAST_ATTEMPT_IP, "SELECT last_attempt_ip FROM account WHERE id = ?", CONNECTION_SYNCH);
+ PrepareStatement(LOGIN_SEL_LAST_IP, "SELECT last_ip FROM account WHERE id = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_REALMLIST_SECURITY_LEVEL, "SELECT allowedSecurityLevel from realmlist WHERE id = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_DEL_ACCOUNT, "DELETE FROM account WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(LOGIN_SEL_IP2NATION_COUNTRY, "SELECT c.country FROM ip2nationCountries c, ip2nation i WHERE i.ip < ? AND c.code = i.country ORDER BY i.ip DESC LIMIT 0,1", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_AUTOBROADCAST, "SELECT id, weight, text FROM autobroadcast WHERE realmid = ? OR realmid = -1", CONNECTION_SYNCH);
PrepareStatement(LOGIN_GET_EMAIL_BY_ID, "SELECT email FROM account WHERE id = ?", CONNECTION_SYNCH);
-
+ // 0: uint32, 1: uint32, 2: uint8, 3: uint32, 4: string // Complete name: "Login_Insert_AccountLoginDeLete_IP_Logging"
+ PrepareStatement(LOGIN_INS_ALDL_IP_LOGGING, "INSERT INTO logs_ip_actions (account_id,character_guid,type,ip,systemnote,unixtime,time) VALUES (?, ?, ?, (SELECT last_ip FROM account WHERE id = ?), ?, unix_timestamp(NOW()), NOW())", CONNECTION_ASYNC);
+ // 0: uint32, 1: uint32, 2: uint8, 3: uint32, 4: string // Complete name: "Login_Insert_FailedAccountLogin_IP_Logging"
+ PrepareStatement(LOGIN_INS_FACL_IP_LOGGING, "INSERT INTO logs_ip_actions (account_id,character_guid,type,ip,systemnote,unixtime,time) VALUES (?, ?, ?, (SELECT last_attempt_ip FROM account WHERE id = ?), ?, unix_timestamp(NOW()), NOW())", CONNECTION_ASYNC);
+ // 0: uint32, 1: uint32, 2: uint8, 3: string, 4: string // Complete name: "Login_Insert_CharacterDelete_IP_Logging"
+ PrepareStatement(LOGIN_INS_CHAR_IP_LOGGING, "INSERT INTO logs_ip_actions (account_id,character_guid,type,ip,systemnote,unixtime,time) VALUES (?, ?, ?, ?, ?, unix_timestamp(NOW()), NOW())", CONNECTION_ASYNC);
+ // 0: string, 1: string, 2: string // Complete name: "Login_Insert_Failed_Account_Login_due_password_IP_Logging"
+ PrepareStatement(LOGIN_INS_FALP_IP_LOGGING, "INSERT INTO logs_ip_actions (account_id,character_guid,type,ip,systemnote,unixtime,time) VALUES ((SELECT id FROM account WHERE username = ?), 0, 1, ?, ?, unix_timestamp(NOW()), NOW())", CONNECTION_ASYNC);
PrepareStatement(LOGIN_SEL_ACCOUNT_ACCESS_BY_ID, "SELECT gmlevel, RealmID FROM account_access WHERE id = ? and (RealmID = ? OR RealmID = -1) ORDER BY gmlevel desc", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_RBAC_ACCOUNT_PERMISSIONS, "SELECT permissionId, granted FROM rbac_account_permissions WHERE accountId = ? AND (realmId = ? OR realmId = -1) ORDER BY permissionId, realmId", CONNECTION_SYNCH);
diff --git a/src/server/shared/Database/Implementation/LoginDatabase.h b/src/server/shared/Database/Implementation/LoginDatabase.h
index 01f9fd973b6..d37149c6a76 100644
--- a/src/server/shared/Database/Implementation/LoginDatabase.h
+++ b/src/server/shared/Database/Implementation/LoginDatabase.h
@@ -26,10 +26,10 @@ class LoginDatabaseConnection : public MySQLConnection
public:
//- Constructors for sync and async connections
LoginDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo) { }
- LoginDatabaseConnection(ACE_Activation_Queue* q, MySQLConnectionInfo& connInfo) : MySQLConnection(q, connInfo) { }
+ LoginDatabaseConnection(ProducerConsumerQueue<SQLOperation*>* q, MySQLConnectionInfo& connInfo) : MySQLConnection(q, connInfo) { }
//- Loads database type specific prepared statements
- void DoPrepareStatements();
+ void DoPrepareStatements() override;
};
typedef DatabaseWorkerPool<LoginDatabaseConnection> LoginDatabaseWorkerPool;
@@ -89,6 +89,7 @@ enum LoginDatabaseStatements
LOGIN_UPD_MUTE_TIME,
LOGIN_UPD_MUTE_TIME_LOGIN,
LOGIN_UPD_LAST_IP,
+ LOGIN_UPD_LAST_ATTEMPT_IP,
LOGIN_UPD_ACCOUNT_ONLINE,
LOGIN_UPD_UPTIME_PLAYERS,
LOGIN_DEL_OLD_LOGS,
@@ -114,7 +115,13 @@ enum LoginDatabaseStatements
LOGIN_DEL_ACCOUNT,
LOGIN_SEL_IP2NATION_COUNTRY,
LOGIN_SEL_AUTOBROADCAST,
+ LOGIN_SEL_LAST_ATTEMPT_IP,
+ LOGIN_SEL_LAST_IP,
LOGIN_GET_EMAIL_BY_ID,
+ LOGIN_INS_ALDL_IP_LOGGING,
+ LOGIN_INS_FACL_IP_LOGGING,
+ LOGIN_INS_CHAR_IP_LOGGING,
+ LOGIN_INS_FALP_IP_LOGGING,
LOGIN_SEL_ACCOUNT_ACCESS_BY_ID,
LOGIN_SEL_RBAC_ACCOUNT_PERMISSIONS,
diff --git a/src/server/shared/Database/Implementation/WorldDatabase.cpp b/src/server/shared/Database/Implementation/WorldDatabase.cpp
index 644d3b330fb..f5d9913bc5b 100644
--- a/src/server/shared/Database/Implementation/WorldDatabase.cpp
+++ b/src/server/shared/Database/Implementation/WorldDatabase.cpp
@@ -25,7 +25,7 @@ void WorldDatabaseConnection::DoPrepareStatements()
PrepareStatement(WORLD_SEL_QUEST_POOLS, "SELECT entry, pool_entry FROM pool_quest", CONNECTION_SYNCH);
PrepareStatement(WORLD_DEL_CRELINKED_RESPAWN, "DELETE FROM linked_respawn WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(WORLD_REP_CREATURE_LINKED_RESPAWN, "REPLACE INTO linked_respawn (guid, linkedGuid) VALUES (?, ?)", CONNECTION_ASYNC);
- PrepareStatement(WORLD_SEL_CREATURE_TEXT, "SELECT entry, groupid, id, text, type, language, probability, emote, duration, sound FROM creature_text", CONNECTION_SYNCH);
+ PrepareStatement(WORLD_SEL_CREATURE_TEXT, "SELECT entry, groupid, id, text, type, language, probability, emote, duration, sound, BroadcastTextID FROM creature_text", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_SMART_SCRIPTS, "SELECT entryorguid, source_type, id, link, event_type, event_phase_mask, event_chance, event_flags, event_param1, event_param2, event_param3, event_param4, action_type, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, target_type, target_param1, target_param2, target_param3, target_x, target_y, target_z, target_o FROM smart_scripts ORDER BY entryorguid, source_type, id, link", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_SMARTAI_WP, "SELECT entry, pointid, position_x, position_y, position_z FROM waypoints ORDER BY entry, pointid", CONNECTION_SYNCH);
PrepareStatement(WORLD_DEL_GAMEOBJECT, "DELETE FROM gameobject WHERE guid = ?", CONNECTION_ASYNC);
@@ -38,7 +38,7 @@ void WorldDatabaseConnection::DoPrepareStatements()
PrepareStatement(WORLD_DEL_NPC_VENDOR, "DELETE FROM npc_vendor WHERE entry = ? AND item = ?", CONNECTION_ASYNC);
PrepareStatement(WORLD_SEL_NPC_VENDOR_REF, "SELECT item, maxcount, incrtime, ExtendedCost FROM npc_vendor WHERE entry = ? ORDER BY slot ASC", CONNECTION_SYNCH);
PrepareStatement(WORLD_UPD_CREATURE_MOVEMENT_TYPE, "UPDATE creature SET MovementType = ? WHERE guid = ?", CONNECTION_ASYNC);
- PrepareStatement(WORLD_UPD_CREATURE_FACTION, "UPDATE creature_template SET faction_A = ?, faction_H = ? WHERE entry = ?", CONNECTION_ASYNC);
+ PrepareStatement(WORLD_UPD_CREATURE_FACTION, "UPDATE creature_template SET faction = ? WHERE entry = ?", CONNECTION_ASYNC);
PrepareStatement(WORLD_UPD_CREATURE_NPCFLAG, "UPDATE creature_template SET npcflag = ? WHERE entry = ?", CONNECTION_ASYNC);
PrepareStatement(WORLD_UPD_CREATURE_POSITION, "UPDATE creature SET position_x = ?, position_y = ?, position_z = ?, orientation = ? WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(WORLD_UPD_CREATURE_SPAWN_DISTANCE, "UPDATE creature SET spawndist = ?, MovementType = ? WHERE guid = ?", CONNECTION_ASYNC);
@@ -51,12 +51,12 @@ void WorldDatabaseConnection::DoPrepareStatements()
PrepareStatement(WORLD_UPD_WAYPOINT_DATA_WPGUID, "UPDATE waypoint_data SET wpguid = ? WHERE id = ? and point = ?", CONNECTION_ASYNC);
PrepareStatement(WORLD_SEL_WAYPOINT_DATA_MAX_ID, "SELECT MAX(id) FROM waypoint_data", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_WAYPOINT_DATA_MAX_POINT, "SELECT MAX(point) FROM waypoint_data WHERE id = ?", CONNECTION_SYNCH);
- PrepareStatement(WORLD_SEL_WAYPOINT_DATA_BY_ID, "SELECT point, position_x, position_y, position_z, orientation, move_flag, delay, action, action_chance FROM waypoint_data WHERE id = ? ORDER BY point", CONNECTION_SYNCH);
+ PrepareStatement(WORLD_SEL_WAYPOINT_DATA_BY_ID, "SELECT point, position_x, position_y, position_z, orientation, move_type, delay, action, action_chance FROM waypoint_data WHERE id = ? ORDER BY point", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_WAYPOINT_DATA_POS_BY_ID, "SELECT point, position_x, position_y, position_z FROM waypoint_data WHERE id = ?", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_WAYPOINT_DATA_POS_FIRST_BY_ID, "SELECT position_x, position_y, position_z FROM waypoint_data WHERE point = 1 AND id = ?", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_WAYPOINT_DATA_POS_LAST_BY_ID, "SELECT position_x, position_y, position_z, orientation FROM waypoint_data WHERE id = ? ORDER BY point DESC LIMIT 1", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_WAYPOINT_DATA_BY_WPGUID, "SELECT id, point FROM waypoint_data WHERE wpguid = ?", CONNECTION_SYNCH);
- PrepareStatement(WORLD_SEL_WAYPOINT_DATA_ALL_BY_WPGUID, "SELECT id, point, delay, move_flag, action, action_chance FROM waypoint_data WHERE wpguid = ?", CONNECTION_SYNCH);
+ PrepareStatement(WORLD_SEL_WAYPOINT_DATA_ALL_BY_WPGUID, "SELECT id, point, delay, move_type, action, action_chance FROM waypoint_data WHERE wpguid = ?", CONNECTION_SYNCH);
PrepareStatement(WORLD_UPD_WAYPOINT_DATA_ALL_WPGUID, "UPDATE waypoint_data SET wpguid = 0", CONNECTION_ASYNC);
PrepareStatement(WORLD_SEL_WAYPOINT_DATA_BY_POS, "SELECT id, point FROM waypoint_data WHERE (abs(position_x - ?) <= ?) and (abs(position_y - ?) <= ?) and (abs(position_z - ?) <= ?)", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_WAYPOINT_DATA_WPGUID_BY_ID, "SELECT wpguid FROM waypoint_data WHERE id = ? and wpguid <> 0", CONNECTION_SYNCH);
@@ -76,7 +76,7 @@ void WorldDatabaseConnection::DoPrepareStatements()
PrepareStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID, "SELECT id FROM waypoint_scripts WHERE guid = ?", CONNECTION_SYNCH);
PrepareStatement(WORLD_DEL_CREATURE, "DELETE FROM creature WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(WORLD_SEL_COMMANDS, "SELECT name, permission, help FROM command", CONNECTION_SYNCH);
- PrepareStatement(WORLD_SEL_CREATURE_TEMPLATE, "SELECT difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, modelid1, modelid2, modelid3, modelid4, name, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, faction_A, faction_H, npcflag, speed_walk, speed_run, scale, rank, mindmg, maxdmg, dmgschool, attackpower, dmg_multiplier, baseattacktime, rangeattacktime, unit_class, unit_flags, unit_flags2, dynamicflags, family, trainer_type, trainer_spell, trainer_class, trainer_race, minrangedmg, maxrangedmg, rangedattackpower, type, type_flags, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, InhabitType, HoverHeight, Health_mod, Mana_mod, Armor_mod, RacialLeader, questItem1, questItem2, questItem3, questItem4, questItem5, questItem6, movementId, RegenHealth, mechanic_immune_mask, flags_extra, ScriptName FROM creature_template WHERE entry = ?", CONNECTION_SYNCH);
+ PrepareStatement(WORLD_SEL_CREATURE_TEMPLATE, "SELECT entry, difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, modelid1, modelid2, modelid3, modelid4, name, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, faction, npcflag, speed_walk, speed_run, scale, rank, dmgschool, BaseAttackTime, RangeAttackTime, BaseVariance, RangeVariance, unit_class, unit_flags, unit_flags2, dynamicflags, family, trainer_type, trainer_spell, trainer_class, trainer_race, type, type_flags, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, InhabitType, HoverHeight, HealthModifier, ManaModifier, ArmorModifier, DamageModifier, ExperienceModifier, RacialLeader, questItem1, questItem2, questItem3, questItem4, questItem5, questItem6, movementId, RegenHealth, mechanic_immune_mask, flags_extra, ScriptName FROM creature_template WHERE entry = ?", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_WAYPOINT_SCRIPT_BY_ID, "SELECT guid, delay, command, datalong, datalong2, dataint, x, y, z, o FROM waypoint_scripts WHERE id = ?", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_ITEM_TEMPLATE_BY_NAME, "SELECT entry FROM item_template WHERE name = ?", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_CREATURE_BY_ID, "SELECT guid FROM creature WHERE id = ?", CONNECTION_SYNCH);
@@ -89,6 +89,4 @@ void WorldDatabaseConnection::DoPrepareStatements()
PrepareStatement(WORLD_INS_DISABLES, "INSERT INTO disables (entry, sourceType, flags, comment) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(WORLD_SEL_DISABLES, "SELECT entry FROM disables WHERE entry = ? AND sourceType = ?", CONNECTION_SYNCH);
PrepareStatement(WORLD_DEL_DISABLES, "DELETE FROM disables WHERE entry = ? AND sourceType = ?", CONNECTION_ASYNC);
- // 0: uint8
- PrepareStatement(WORLD_SEL_REQ_XP, "SELECT xp_for_next_level FROM player_xp_for_level WHERE lvl = ?", CONNECTION_SYNCH);
}
diff --git a/src/server/shared/Database/Implementation/WorldDatabase.h b/src/server/shared/Database/Implementation/WorldDatabase.h
index a815373a1c6..8a5bd206021 100644
--- a/src/server/shared/Database/Implementation/WorldDatabase.h
+++ b/src/server/shared/Database/Implementation/WorldDatabase.h
@@ -26,10 +26,10 @@ class WorldDatabaseConnection : public MySQLConnection
public:
//- Constructors for sync and async connections
WorldDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo) { }
- WorldDatabaseConnection(ACE_Activation_Queue* q, MySQLConnectionInfo& connInfo) : MySQLConnection(q, connInfo) { }
+ WorldDatabaseConnection(ProducerConsumerQueue<SQLOperation*>* q, MySQLConnectionInfo& connInfo) : MySQLConnection(q, connInfo) { }
//- Loads database type specific prepared statements
- void DoPrepareStatements();
+ void DoPrepareStatements() override;
};
typedef DatabaseWorkerPool<WorldDatabaseConnection> WorldDatabaseWorkerPool;
@@ -110,7 +110,6 @@ enum WorldDatabaseStatements
WORLD_SEL_DISABLES,
WORLD_INS_DISABLES,
WORLD_DEL_DISABLES,
- WORLD_SEL_REQ_XP,
MAX_WORLDDATABASE_STATEMENTS
};
diff --git a/src/server/shared/Database/MySQLConnection.cpp b/src/server/shared/Database/MySQLConnection.cpp
index 55d47c76430..4e46ff0e3a1 100644
--- a/src/server/shared/Database/MySQLConnection.cpp
+++ b/src/server/shared/Database/MySQLConnection.cpp
@@ -33,6 +33,7 @@
#include "DatabaseWorker.h"
#include "Timer.h"
#include "Log.h"
+#include "ProducerConsumerQueue.h"
MySQLConnection::MySQLConnection(MySQLConnectionInfo& connInfo) :
m_reconnecting(false),
@@ -43,7 +44,7 @@ m_Mysql(NULL),
m_connectionInfo(connInfo),
m_connectionFlags(CONNECTION_SYNCH) { }
-MySQLConnection::MySQLConnection(ACE_Activation_Queue* queue, MySQLConnectionInfo& connInfo) :
+MySQLConnection::MySQLConnection(ProducerConsumerQueue<SQLOperation*>* queue, MySQLConnectionInfo& connInfo) :
m_reconnecting(false),
m_prepareError(false),
m_queue(queue),
@@ -56,12 +57,14 @@ m_connectionFlags(CONNECTION_ASYNC)
MySQLConnection::~MySQLConnection()
{
- ASSERT (m_Mysql); /// MySQL context must be present at this point
-
for (size_t i = 0; i < m_stmts.size(); ++i)
delete m_stmts[i];
- mysql_close(m_Mysql);
+ if (m_Mysql)
+ mysql_close(m_Mysql);
+
+ if (m_worker)
+ delete m_worker;
}
void MySQLConnection::Close()
@@ -111,7 +114,7 @@ bool MySQLConnection::Open()
else // generic case
{
port = atoi(m_connectionInfo.port_or_socket.c_str());
- unix_socket = 0;
+ unix_socket = nullptr;
}
#endif
@@ -500,8 +503,8 @@ bool MySQLConnection::_HandleMySQLErrno(uint32 errNo)
}
uint32 lErrno = mysql_errno(GetHandle()); // It's possible this attempted reconnect throws 2006 at us. To prevent crazy recursive calls, sleep here.
- ACE_OS::sleep(3); // Sleep 3 seconds
- return _HandleMySQLErrno(lErrno); // Call self (recursive)
+ std::this_thread::sleep_for(std::chrono::seconds(3)); // Sleep 3 seconds
+ return _HandleMySQLErrno(lErrno); // Call self (recursive)
}
case ER_LOCK_DEADLOCK:
@@ -515,12 +518,12 @@ bool MySQLConnection::_HandleMySQLErrno(uint32 errNo)
case ER_BAD_FIELD_ERROR:
case ER_NO_SUCH_TABLE:
TC_LOG_ERROR("sql.sql", "Your database structure is not up to date. Please make sure you've executed all queries in the sql/updates folders.");
- ACE_OS::sleep(10);
+ std::this_thread::sleep_for(std::chrono::seconds(10));
std::abort();
return false;
case ER_PARSE_ERROR:
TC_LOG_ERROR("sql.sql", "Error while parsing SQL. Core fix required.");
- ACE_OS::sleep(10);
+ std::this_thread::sleep_for(std::chrono::seconds(10));
std::abort();
return false;
default:
diff --git a/src/server/shared/Database/MySQLConnection.h b/src/server/shared/Database/MySQLConnection.h
index 161f459a7ad..61b3b37cbc2 100644
--- a/src/server/shared/Database/MySQLConnection.h
+++ b/src/server/shared/Database/MySQLConnection.h
@@ -15,11 +15,10 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <ace/Activation_Queue.h>
-
#include "DatabaseWorkerPool.h"
#include "Transaction.h"
#include "Util.h"
+#include "ProducerConsumerQueue.h"
#ifndef _MYSQLCONNECTION_H
#define _MYSQLCONNECTION_H
@@ -38,8 +37,7 @@ enum ConnectionFlags
struct MySQLConnectionInfo
{
- MySQLConnectionInfo() { }
- MySQLConnectionInfo(const std::string& infoString)
+ explicit MySQLConnectionInfo(std::string const& infoString)
{
Tokenizer tokens(infoString, ';');
@@ -71,7 +69,7 @@ class MySQLConnection
public:
MySQLConnection(MySQLConnectionInfo& connInfo); //! Constructor for synchronous connections.
- MySQLConnection(ACE_Activation_Queue* queue, MySQLConnectionInfo& connInfo); //! Constructor for asynchronous connections.
+ MySQLConnection(ProducerConsumerQueue<SQLOperation*>* queue, MySQLConnectionInfo& connInfo); //! Constructor for asynchronous connections.
virtual ~MySQLConnection();
virtual bool Open();
@@ -100,13 +98,13 @@ class MySQLConnection
{
/// Tries to acquire lock. If lock is acquired by another thread
/// the calling parent will just try another connection
- return m_Mutex.tryacquire() != -1;
+ return m_Mutex.try_lock();
}
void Unlock()
{
/// Called by parent databasepool. Will let other threads access this connection
- m_Mutex.release();
+ m_Mutex.unlock();
}
MYSQL* GetHandle() { return m_Mysql; }
@@ -126,12 +124,15 @@ class MySQLConnection
bool _HandleMySQLErrno(uint32 errNo);
private:
- ACE_Activation_Queue* m_queue; //! Queue shared with other asynchronous connections.
+ ProducerConsumerQueue<SQLOperation*>* m_queue; //! Queue shared with other asynchronous connections.
DatabaseWorker* m_worker; //! Core worker task.
MYSQL * m_Mysql; //! MySQL Handle.
MySQLConnectionInfo& m_connectionInfo; //! Connection info (used for logging)
ConnectionFlags m_connectionFlags; //! Connection flags (for preparing relevant statements)
- ACE_Thread_Mutex m_Mutex;
+ std::mutex m_Mutex;
+
+ MySQLConnection(MySQLConnection const& right) = delete;
+ MySQLConnection& operator=(MySQLConnection const& right) = delete;
};
#endif
diff --git a/src/server/shared/Database/MySQLThreading.h b/src/server/shared/Database/MySQLThreading.h
index 0f6af8ace20..da234138879 100644
--- a/src/server/shared/Database/MySQLThreading.h
+++ b/src/server/shared/Database/MySQLThreading.h
@@ -23,31 +23,6 @@
class MySQL
{
public:
- /*! Create a thread on the MySQL server to mirrior the calling thread,
- initializes thread-specific variables and allows thread-specific
- operations without concurrence from other threads.
- This should only be called if multiple core threads are running
- on the same MySQL connection. Seperate MySQL connections implicitly
- create a mirror thread.
- */
- static void Thread_Init()
- {
- mysql_thread_init();
- TC_LOG_WARN("sql.sql", "Core thread with ID [" UI64FMTD "] initializing MySQL thread.",
- (uint64)ACE_Based::Thread::currentId());
- }
-
- /*! Shuts down MySQL thread and frees resources, should only be called
- when we terminate. MySQL threads and connections are not configurable
- during runtime.
- */
- static void Thread_End()
- {
- mysql_thread_end();
- TC_LOG_WARN("sql.sql", "Core thread with ID [" UI64FMTD "] shutting down MySQL thread.",
- (uint64)ACE_Based::Thread::currentId());
- }
-
static void Library_Init()
{
mysql_library_init(-1, NULL, NULL);
@@ -59,4 +34,4 @@ class MySQL
}
};
-#endif \ No newline at end of file
+#endif
diff --git a/src/server/shared/Database/PreparedStatement.cpp b/src/server/shared/Database/PreparedStatement.cpp
index fe052bf5043..23c50ac2ef8 100644
--- a/src/server/shared/Database/PreparedStatement.cpp
+++ b/src/server/shared/Database/PreparedStatement.cpp
@@ -445,19 +445,19 @@ std::string MySQLPreparedStatement::getQueryString(std::string const& sqlPattern
}
//- Execution
-PreparedStatementTask::PreparedStatementTask(PreparedStatement* stmt) :
-m_stmt(stmt),
-m_has_result(false) { }
-
-PreparedStatementTask::PreparedStatementTask(PreparedStatement* stmt, PreparedQueryResultFuture result) :
-m_stmt(stmt),
-m_has_result(true),
-m_result(result) { }
-
+PreparedStatementTask::PreparedStatementTask(PreparedStatement* stmt, bool async) :
+m_stmt(stmt), m_result(nullptr)
+{
+ m_has_result = async; // If it's async, then there's a result
+ if (async)
+ m_result = new PreparedQueryResultPromise();
+}
PreparedStatementTask::~PreparedStatementTask()
{
delete m_stmt;
+ if (m_has_result && m_result != nullptr)
+ delete m_result;
}
bool PreparedStatementTask::Execute()
@@ -468,10 +468,10 @@ bool PreparedStatementTask::Execute()
if (!result || !result->GetRowCount())
{
delete result;
- m_result.set(PreparedQueryResult(NULL));
+ m_result->set_value(PreparedQueryResult(NULL));
return false;
}
- m_result.set(PreparedQueryResult(result));
+ m_result->set_value(PreparedQueryResult(result));
return true;
}
diff --git a/src/server/shared/Database/PreparedStatement.h b/src/server/shared/Database/PreparedStatement.h
index 6a4d03bfb4d..5af52cde016 100644
--- a/src/server/shared/Database/PreparedStatement.h
+++ b/src/server/shared/Database/PreparedStatement.h
@@ -18,8 +18,8 @@
#ifndef _PREPAREDSTATEMENT_H
#define _PREPAREDSTATEMENT_H
+#include <future>
#include "SQLOperation.h"
-#include <ace/Future.h>
#ifdef __APPLE__
#undef TYPE_BOOL
@@ -101,6 +101,9 @@ class PreparedStatement
MySQLPreparedStatement* m_stmt;
uint32 m_index;
std::vector<PreparedStatementData> statement_data; //- Buffer of parameters, not tied to MySQL in any way yet
+
+ PreparedStatement(PreparedStatement const& right) = delete;
+ PreparedStatement& operator=(PreparedStatement const& right) = delete;
};
//- Class of which the instances are unique per MySQLConnection
@@ -145,23 +148,27 @@ class MySQLPreparedStatement
uint32 m_paramCount;
std::vector<bool> m_paramsSet;
MYSQL_BIND* m_bind;
+
+ MySQLPreparedStatement(MySQLPreparedStatement const& right) = delete;
+ MySQLPreparedStatement& operator=(MySQLPreparedStatement const& right) = delete;
};
-typedef ACE_Future<PreparedQueryResult> PreparedQueryResultFuture;
+typedef std::future<PreparedQueryResult> PreparedQueryResultFuture;
+typedef std::promise<PreparedQueryResult> PreparedQueryResultPromise;
//- Lower-level class, enqueuable operation
class PreparedStatementTask : public SQLOperation
{
public:
- PreparedStatementTask(PreparedStatement* stmt);
- PreparedStatementTask(PreparedStatement* stmt, PreparedQueryResultFuture result);
+ PreparedStatementTask(PreparedStatement* stmt, bool async = false);
~PreparedStatementTask();
- bool Execute();
+ bool Execute() override;
+ PreparedQueryResultFuture GetFuture() { return m_result->get_future(); }
protected:
PreparedStatement* m_stmt;
bool m_has_result;
- PreparedQueryResultFuture m_result;
+ PreparedQueryResultPromise* m_result;
};
#endif
diff --git a/src/server/shared/Database/QueryHolder.cpp b/src/server/shared/Database/QueryHolder.cpp
index 7b4105ee076..f0dc3c96e4e 100644
--- a/src/server/shared/Database/QueryHolder.cpp
+++ b/src/server/shared/Database/QueryHolder.cpp
@@ -166,10 +166,15 @@ void SQLQueryHolder::SetSize(size_t size)
m_queries.resize(size);
}
+SQLQueryHolderTask::~SQLQueryHolderTask()
+{
+ if (!m_executed)
+ delete m_holder;
+}
+
bool SQLQueryHolderTask::Execute()
{
- //the result can't be ready as we are processing it right now
- ASSERT(!m_result.ready());
+ m_executed = true;
if (!m_holder)
return false;
@@ -202,6 +207,6 @@ bool SQLQueryHolderTask::Execute()
}
}
- m_result.set(m_holder);
+ m_result.set_value(m_holder);
return true;
}
diff --git a/src/server/shared/Database/QueryHolder.h b/src/server/shared/Database/QueryHolder.h
index b92b2e5327e..39e51b591c5 100644
--- a/src/server/shared/Database/QueryHolder.h
+++ b/src/server/shared/Database/QueryHolder.h
@@ -18,7 +18,7 @@
#ifndef _QUERYHOLDER_H
#define _QUERYHOLDER_H
-#include <ace/Future.h>
+#include <future>
class SQLQueryHolder
{
@@ -39,19 +39,24 @@ class SQLQueryHolder
void SetPreparedResult(size_t index, PreparedResultSet* result);
};
-typedef ACE_Future<SQLQueryHolder*> QueryResultHolderFuture;
+typedef std::future<SQLQueryHolder*> QueryResultHolderFuture;
+typedef std::promise<SQLQueryHolder*> QueryResultHolderPromise;
class SQLQueryHolderTask : public SQLOperation
{
private:
- SQLQueryHolder * m_holder;
- QueryResultHolderFuture m_result;
+ SQLQueryHolder* m_holder;
+ QueryResultHolderPromise m_result;
+ bool m_executed;
public:
- SQLQueryHolderTask(SQLQueryHolder *holder, QueryResultHolderFuture res)
- : m_holder(holder), m_result(res){ };
- bool Execute();
+ SQLQueryHolderTask(SQLQueryHolder* holder)
+ : m_holder(holder), m_executed(false) { }
+ ~SQLQueryHolderTask();
+
+ bool Execute() override;
+ QueryResultHolderFuture GetFuture() { return m_result.get_future(); }
};
-#endif \ No newline at end of file
+#endif
diff --git a/src/server/shared/Database/QueryResult.cpp b/src/server/shared/Database/QueryResult.cpp
index 58ac8d37270..a7b8ec2b107 100644
--- a/src/server/shared/Database/QueryResult.cpp
+++ b/src/server/shared/Database/QueryResult.cpp
@@ -105,10 +105,10 @@ m_length(NULL)
for (uint64 fIndex = 0; fIndex < m_fieldCount; ++fIndex)
{
if (!*m_rBind[fIndex].is_null)
- m_rows[uint32(m_rowPosition)][fIndex].SetByteValue( m_rBind[fIndex].buffer,
+ m_rows[uint32(m_rowPosition)][fIndex].SetByteValue(m_rBind[fIndex].buffer,
m_rBind[fIndex].buffer_length,
m_rBind[fIndex].buffer_type,
- *m_rBind[fIndex].length );
+ *m_rBind[fIndex].length);
else
switch (m_rBind[fIndex].buffer_type)
{
@@ -118,16 +118,16 @@ m_length(NULL)
case MYSQL_TYPE_BLOB:
case MYSQL_TYPE_STRING:
case MYSQL_TYPE_VAR_STRING:
- m_rows[uint32(m_rowPosition)][fIndex].SetByteValue( "",
+ m_rows[uint32(m_rowPosition)][fIndex].SetByteValue("",
m_rBind[fIndex].buffer_length,
m_rBind[fIndex].buffer_type,
- *m_rBind[fIndex].length );
+ *m_rBind[fIndex].length);
break;
default:
- m_rows[uint32(m_rowPosition)][fIndex].SetByteValue( 0,
+ m_rows[uint32(m_rowPosition)][fIndex].SetByteValue(nullptr,
m_rBind[fIndex].buffer_length,
m_rBind[fIndex].buffer_type,
- *m_rBind[fIndex].length );
+ *m_rBind[fIndex].length);
}
}
m_rowPosition++;
@@ -186,15 +186,8 @@ bool PreparedResultSet::_NextRow()
if (m_rowPosition >= m_rowCount)
return false;
- int retval = mysql_stmt_fetch( m_stmt );
-
- if (!retval || retval == MYSQL_DATA_TRUNCATED)
- retval = true;
-
- if (retval == MYSQL_NO_DATA)
- retval = false;
-
- return retval;
+ int retval = mysql_stmt_fetch(m_stmt);
+ return retval == 0 || retval == MYSQL_DATA_TRUNCATED;
}
void ResultSet::CleanUp()
diff --git a/src/server/shared/Database/QueryResult.h b/src/server/shared/Database/QueryResult.h
index 74320aeba19..e8c277c03cf 100644
--- a/src/server/shared/Database/QueryResult.h
+++ b/src/server/shared/Database/QueryResult.h
@@ -19,9 +19,7 @@
#ifndef QUERYRESULT_H
#define QUERYRESULT_H
-#include "AutoPtr.h"
-#include <ace/Thread_Mutex.h>
-
+#include <memory>
#include "Field.h"
#ifdef _WIN32
@@ -55,9 +53,12 @@ class ResultSet
void CleanUp();
MYSQL_RES* _result;
MYSQL_FIELD* _fields;
+
+ ResultSet(ResultSet const& right) = delete;
+ ResultSet& operator=(ResultSet const& right) = delete;
};
-typedef Trinity::AutoPtr<ResultSet, ACE_Thread_Mutex> QueryResult;
+typedef std::shared_ptr<ResultSet> QueryResult;
class PreparedResultSet
{
@@ -100,9 +101,11 @@ class PreparedResultSet
void CleanUp();
bool _NextRow();
+ PreparedResultSet(PreparedResultSet const& right) = delete;
+ PreparedResultSet& operator=(PreparedResultSet const& right) = delete;
};
-typedef Trinity::AutoPtr<PreparedResultSet, ACE_Thread_Mutex> PreparedQueryResult;
+typedef std::shared_ptr<PreparedResultSet> PreparedQueryResult;
#endif
diff --git a/src/server/shared/Database/SQLOperation.h b/src/server/shared/Database/SQLOperation.h
index 2c404c131ae..4d6e349449d 100644
--- a/src/server/shared/Database/SQLOperation.h
+++ b/src/server/shared/Database/SQLOperation.h
@@ -18,9 +18,6 @@
#ifndef _SQLOPERATION_H
#define _SQLOPERATION_H
-#include <ace/Method_Request.h>
-#include <ace/Activation_Queue.h>
-
#include "QueryResult.h"
//- Forward declare (don't include header to prevent circular includes)
@@ -56,10 +53,12 @@ union SQLResultSetUnion
class MySQLConnection;
-class SQLOperation : public ACE_Method_Request
+class SQLOperation
{
public:
SQLOperation(): m_conn(NULL) { }
+ virtual ~SQLOperation() { }
+
virtual int call()
{
Execute();
@@ -69,6 +68,10 @@ class SQLOperation : public ACE_Method_Request
virtual void SetConnection(MySQLConnection* con) { m_conn = con; }
MySQLConnection* m_conn;
+
+ private:
+ SQLOperation(SQLOperation const& right) = delete;
+ SQLOperation& operator=(SQLOperation const& right) = delete;
};
#endif
diff --git a/src/server/shared/Database/Transaction.h b/src/server/shared/Database/Transaction.h
index cb28f0ad876..3822c2c82c1 100644
--- a/src/server/shared/Database/Transaction.h
+++ b/src/server/shared/Database/Transaction.h
@@ -50,7 +50,7 @@ class Transaction
bool _cleanedUp;
};
-typedef Trinity::AutoPtr<Transaction, ACE_Thread_Mutex> SQLTransaction;
+typedef std::shared_ptr<Transaction> SQLTransaction;
/*! Low level class*/
class TransactionTask : public SQLOperation
@@ -63,7 +63,7 @@ class TransactionTask : public SQLOperation
~TransactionTask(){ };
protected:
- bool Execute();
+ bool Execute() override;
SQLTransaction m_trans;
};
diff --git a/src/server/shared/Debugging/Errors.cpp b/src/server/shared/Debugging/Errors.cpp
index d656dc3fb4a..0621cfa5b6d 100644
--- a/src/server/shared/Debugging/Errors.cpp
+++ b/src/server/shared/Debugging/Errors.cpp
@@ -18,17 +18,16 @@
#include "Errors.h"
-#include <ace/Stack_Trace.h>
-#include <ace/OS_NS_unistd.h>
+#include <cstdio>
#include <cstdlib>
+#include <thread>
namespace Trinity {
void Assert(char const* file, int line, char const* function, char const* message)
{
- ACE_Stack_Trace st;
- fprintf(stderr, "\n%s:%i in %s ASSERTION FAILED:\n %s\n%s\n",
- file, line, function, message, st.c_str());
+ fprintf(stderr, "\n%s:%i in %s ASSERTION FAILED:\n %s\n",
+ file, line, function, message);
*((volatile int*)NULL) = 0;
exit(1);
}
@@ -37,7 +36,8 @@ void Fatal(char const* file, int line, char const* function, char const* message
{
fprintf(stderr, "\n%s:%i in %s FATAL ERROR:\n %s\n",
file, line, function, message);
- ACE_OS::sleep(10);
+
+ std::this_thread::sleep_for(std::chrono::seconds(10));
*((volatile int*)NULL) = 0;
exit(1);
}
diff --git a/src/server/shared/Debugging/Errors.h b/src/server/shared/Debugging/Errors.h
index 7d521fefca0..218acfa453e 100644
--- a/src/server/shared/Debugging/Errors.h
+++ b/src/server/shared/Debugging/Errors.h
@@ -34,10 +34,18 @@ namespace Trinity
} // namespace Trinity
-#define WPAssert(cond) do { if (!(cond)) Trinity::Assert(__FILE__, __LINE__, __FUNCTION__, #cond); } while (0)
-#define WPFatal(cond, msg) do { if (!(cond)) Trinity::Fatal(__FILE__, __LINE__, __FUNCTION__, (msg)); } while (0)
-#define WPError(cond, msg) do { if (!(cond)) Trinity::Error(__FILE__, __LINE__, __FUNCTION__, (msg)); } while (0)
-#define WPWarning(cond, msg) do { if (!(cond)) Trinity::Warning(__FILE__, __LINE__, __FUNCTION__, (msg)); } while (0)
+#if COMPILER == COMPILER_MICROSOFT
+#define ASSERT_BEGIN __pragma(warning(push)) __pragma(warning(disable: 4127))
+#define ASSERT_END __pragma(warning(pop))
+#else
+#define ASSERT_BEGIN
+#define ASSERT_END
+#endif
+
+#define WPAssert(cond) ASSERT_BEGIN do { if (!(cond)) Trinity::Assert(__FILE__, __LINE__, __FUNCTION__, #cond); } while(0) ASSERT_END
+#define WPFatal(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Fatal(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END
+#define WPError(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Error(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END
+#define WPWarning(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Warning(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END
#define ASSERT WPAssert
diff --git a/src/server/shared/Debugging/WheatyExceptionReport.cpp b/src/server/shared/Debugging/WheatyExceptionReport.cpp
index 3b6bd3d2cc8..2eb456ddd02 100644
--- a/src/server/shared/Debugging/WheatyExceptionReport.cpp
+++ b/src/server/shared/Debugging/WheatyExceptionReport.cpp
@@ -45,7 +45,7 @@ inline LPTSTR ErrorMessage(DWORD dw)
sprintf(msgBuf, "Unknown error: %u", dw);
return msgBuf;
}
-
+
}
//============================== Global Variables =============================
@@ -60,6 +60,7 @@ HANDLE WheatyExceptionReport::m_hReportFile;
HANDLE WheatyExceptionReport::m_hDumpFile;
HANDLE WheatyExceptionReport::m_hProcess;
SymbolPairs WheatyExceptionReport::symbols;
+std::stack<SymbolDetail> WheatyExceptionReport::symbolDetails;
// Declare global instance of class
WheatyExceptionReport g_WheatyExceptionReport;
@@ -676,7 +677,7 @@ bool bWriteVariables, HANDLE pThreadHandle)
dwMachineType = IMAGE_FILE_MACHINE_AMD64;
#endif
- while (1)
+ for (;;)
{
// Get the next stack frame
if (! StackWalk64(dwMachineType,
@@ -767,18 +768,21 @@ ULONG /*SymbolSize*/,
PVOID UserContext)
{
- char szBuffer[1024 * 64];
+ char szBuffer[WER_LARGE_BUFFER_SIZE];
+ memset(szBuffer, 0, sizeof(szBuffer));
__try
{
ClearSymbols();
if (FormatSymbolValue(pSymInfo, (STACKFRAME64*)UserContext,
szBuffer, sizeof(szBuffer)))
- _tprintf(_T("\t%s\r\n"), szBuffer);
+ _tprintf(_T("%s"), szBuffer);
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
- _tprintf(_T("punting on symbol %s\r\n"), pSymInfo->Name);
+ _tprintf(_T("punting on symbol %s, partial output:\r\n"), pSymInfo->Name);
+ if (szBuffer[0] != '\0')
+ _tprintf(_T("%s"), szBuffer);
}
return TRUE;
@@ -797,12 +801,6 @@ unsigned /*cbBuffer*/)
{
char * pszCurrBuffer = pszBuffer;
- // Indicate if the variable is a local or parameter
- if (pSym->Flags & IMAGEHLP_SYMBOL_INFO_PARAMETER)
- pszCurrBuffer += sprintf(pszCurrBuffer, "Parameter ");
- else if (pSym->Flags & IMAGEHLP_SYMBOL_INFO_LOCAL)
- pszCurrBuffer += sprintf(pszCurrBuffer, "Local ");
-
// If it's a function, don't do anything.
if (pSym->Tag == SymTagFunction) // SymTagFunction from CVCONST.H from the DIA SDK
return false;
@@ -824,19 +822,25 @@ unsigned /*cbBuffer*/)
// return false;
}
else if (pSym->Flags & IMAGEHLP_SYMBOL_INFO_REGISTER)
- {
return false; // Don't try to report register variable
- }
else
{
pVariable = (DWORD_PTR)pSym->Address; // It must be a global variable
}
+ pszCurrBuffer = PushSymbolDetail(pszCurrBuffer);
+
+ // Indicate if the variable is a local or parameter
+ if (pSym->Flags & IMAGEHLP_SYMBOL_INFO_PARAMETER)
+ symbolDetails.top().Prefix = "Parameter ";
+ else if (pSym->Flags & IMAGEHLP_SYMBOL_INFO_LOCAL)
+ symbolDetails.top().Prefix = "Local ";
+
// Determine if the variable is a user defined type (UDT). IF so, bHandled
// will return true.
bool bHandled;
pszCurrBuffer = DumpTypeIndex(pszCurrBuffer, pSym->ModBase, pSym->TypeIndex,
- 0, pVariable, bHandled, pSym->Name, "");
+ 0, pVariable, bHandled, pSym->Name, "", false, true);
if (!bHandled)
{
@@ -844,15 +848,19 @@ unsigned /*cbBuffer*/)
// variable. Based on the size, we're assuming it's a char, WORD, or
// DWORD.
BasicType basicType = GetBasicType(pSym->TypeIndex, pSym->ModBase);
- pszCurrBuffer += sprintf(pszCurrBuffer, rgBaseType[basicType]);
+ if (symbolDetails.top().Type.empty())
+ symbolDetails.top().Type = rgBaseType[basicType];
// Emit the variable name
- pszCurrBuffer += sprintf(pszCurrBuffer, "\'%s\'", pSym->Name);
+ if (pSym->Name[0] != '\0')
+ symbolDetails.top().Name = pSym->Name;
- pszCurrBuffer = FormatOutputValue(pszCurrBuffer, basicType, pSym->Size,
- (PVOID)pVariable);
+ char buffer[50];
+ FormatOutputValue(buffer, basicType, pSym->Size, (PVOID)pVariable, sizeof(buffer));
+ symbolDetails.top().Value = buffer;
}
+ pszCurrBuffer = PopSymbolDetail(pszCurrBuffer);
return true;
}
@@ -868,13 +876,15 @@ DWORD dwTypeIndex,
unsigned nestingLevel,
DWORD_PTR offset,
bool & bHandled,
-char* Name,
-char* suffix)
+const char* Name,
+char* /*suffix*/,
+bool newSymbol,
+bool logChildren)
{
bHandled = false;
- if (!StoreSymbol(dwTypeIndex, offset))
- return pszCurrBuffer;
+ if (newSymbol)
+ pszCurrBuffer = PushSymbolDetail(pszCurrBuffer);
DWORD typeTag;
if (!SymGetTypeInfo(m_hProcess, modBase, dwTypeIndex, TI_GET_SYMTAG, &typeTag))
@@ -890,19 +900,39 @@ char* suffix)
if (wcscmp(pwszTypeName, L"std::basic_string<char,std::char_traits<char>,std::allocator<char> >") == 0)
{
LocalFree(pwszTypeName);
- pszCurrBuffer += sprintf(pszCurrBuffer, " %s", "std::string");
- pszCurrBuffer = FormatOutputValue(pszCurrBuffer, btStdString, 0, (PVOID)offset);
- pszCurrBuffer += sprintf(pszCurrBuffer, "\r\n");
+ symbolDetails.top().Type = "std::string";
+ char buffer[50];
+ FormatOutputValue(buffer, btStdString, 0, (PVOID)offset, sizeof(buffer));
+ symbolDetails.top().Value = buffer;
+ if (Name != NULL && Name[0] != '\0')
+ symbolDetails.top().Name = Name;
bHandled = true;
return pszCurrBuffer;
}
- pszCurrBuffer += sprintf(pszCurrBuffer, " %ls", pwszTypeName);
+ char buffer[200];
+ wcstombs(buffer, pwszTypeName, sizeof(buffer));
+ buffer[199] = '\0';
+ if (Name != NULL && Name[0] != '\0')
+ {
+ symbolDetails.top().Type = buffer;
+ symbolDetails.top().Name = Name;
+ }
+ else if (buffer[0] != '\0')
+ symbolDetails.top().Name = buffer;
+
LocalFree(pwszTypeName);
}
+ else if (Name != NULL && Name[0] != '\0')
+ symbolDetails.top().Name = Name;
- if (strlen(suffix) > 0)
- pszCurrBuffer += sprintf(pszCurrBuffer, "%s", suffix);
+ if (!StoreSymbol(dwTypeIndex, offset))
+ {
+ // Skip printing address and base class if it has been printed already
+ if (typeTag == SymTagBaseClass)
+ bHandled = true;
+ return pszCurrBuffer;
+ }
DWORD innerTypeID;
switch (typeTag)
@@ -910,11 +940,9 @@ char* suffix)
case SymTagPointerType:
if (SymGetTypeInfo(m_hProcess, modBase, dwTypeIndex, TI_GET_TYPEID, &innerTypeID))
{
-#define MAX_NESTING_LEVEL 5
- if (nestingLevel >= MAX_NESTING_LEVEL)
- break;
+ if (Name != NULL && Name[0] != '\0')
+ symbolDetails.top().Name = Name;
- pszCurrBuffer += sprintf(pszCurrBuffer, " %s", Name);
BOOL isReference;
SymGetTypeInfo(m_hProcess, modBase, dwTypeIndex, TI_GET_IS_REFERENCE, &isReference);
@@ -922,44 +950,56 @@ char* suffix)
memset(addressStr, 0, sizeof(addressStr));
if (isReference)
- addressStr[0] = '&';
+ symbolDetails.top().Suffix += "&";
else
- addressStr[0] = '*';
+ symbolDetails.top().Suffix += "*";
- DWORD_PTR address = *(PDWORD_PTR)offset;
- if (address == NULL)
- {
- pwszTypeName;
- if (SymGetTypeInfo(m_hProcess, modBase, innerTypeID, TI_GET_SYMNAME,
- &pwszTypeName))
- {
- pszCurrBuffer += sprintf(pszCurrBuffer, " %ls", pwszTypeName);
- LocalFree(pwszTypeName);
- }
+ // Try to dereference the pointer in a try/except block since it might be invalid
+ DWORD_PTR address = DereferenceUnsafePointer(offset);
- pszCurrBuffer += sprintf(pszCurrBuffer, "%s = NULL\r\n", addressStr);
+ char buffer[50];
+ FormatOutputValue(buffer, btVoid, sizeof(PVOID), (PVOID)offset, sizeof(buffer));
+ symbolDetails.top().Value = buffer;
- bHandled = true;
- return pszCurrBuffer;
- }
- else
- {
- FormatOutputValue(&addressStr[1], btVoid, sizeof(PVOID), (PVOID)offset);
- pszCurrBuffer = DumpTypeIndex(pszCurrBuffer, modBase, innerTypeID, nestingLevel + 1,
- address, bHandled, "", addressStr);
+ if (nestingLevel >= WER_MAX_NESTING_LEVEL)
+ logChildren = false;
+
+ // no need to log any children since the address is invalid anyway
+ if (address == NULL || address == DWORD_PTR(-1))
+ logChildren = false;
- if (!bHandled)
+ pszCurrBuffer = DumpTypeIndex(pszCurrBuffer, modBase, innerTypeID, nestingLevel + 1,
+ address, bHandled, Name, addressStr, false, logChildren);
+
+ if (!bHandled)
+ {
+ BasicType basicType = GetBasicType(dwTypeIndex, modBase);
+ if (symbolDetails.top().Type.empty())
+ symbolDetails.top().Type = rgBaseType[basicType];
+
+ if (address == NULL)
+ symbolDetails.top().Value = "NULL";
+ else if (address == DWORD_PTR(-1))
+ symbolDetails.top().Value = "<Unable to read memory>";
+ else
{
- BasicType basicType = GetBasicType(dwTypeIndex, modBase);
- pszCurrBuffer += sprintf(pszCurrBuffer, rgBaseType[basicType]);
// Get the size of the child member
ULONG64 length;
SymGetTypeInfo(m_hProcess, modBase, innerTypeID, TI_GET_LENGTH, &length);
- pszCurrBuffer = FormatOutputValue(pszCurrBuffer, basicType, length, (PVOID)address);
- pszCurrBuffer += sprintf(pszCurrBuffer, "\r\n");
- bHandled = true;
- return pszCurrBuffer;
+ char buffer[50];
+ FormatOutputValue(buffer, basicType, length, (PVOID)address, sizeof(buffer));
+ symbolDetails.top().Value = buffer;
}
+ bHandled = true;
+ return pszCurrBuffer;
+ }
+ else if (address == NULL)
+ symbolDetails.top().Value = "NULL";
+ else if (address == DWORD_PTR(-1))
+ {
+ symbolDetails.top().Value = "<Unable to read memory>";
+ bHandled = true;
+ return pszCurrBuffer;
}
}
break;
@@ -970,13 +1010,80 @@ char* suffix)
if (!SymGetTypeInfo(m_hProcess, modBase, innerTypeID, TI_GET_SYMTAG, &innerTypeTag))
break;
- if (innerTypeTag == SymTagPointerType)
+ switch (innerTypeTag)
{
- pszCurrBuffer += sprintf(pszCurrBuffer, " %s", Name);
+ case SymTagUDT:
+ if (nestingLevel >= WER_MAX_NESTING_LEVEL)
+ logChildren = false;
+ pszCurrBuffer = DumpTypeIndex(pszCurrBuffer, modBase, innerTypeID, nestingLevel + 1,
+ offset, bHandled, symbolDetails.top().Name.c_str(), "", false, logChildren);
+ break;
+ case SymTagPointerType:
+ if (Name != NULL && Name[0] != '\0')
+ symbolDetails.top().Name = Name;
+ pszCurrBuffer = DumpTypeIndex(pszCurrBuffer, modBase, innerTypeID, nestingLevel + 1,
+ offset, bHandled, symbolDetails.top().Name.c_str(), "", false, logChildren);
+ break;
+ case SymTagArrayType:
+ pszCurrBuffer = DumpTypeIndex(pszCurrBuffer, modBase, innerTypeID, nestingLevel + 1,
+ offset, bHandled, symbolDetails.top().Name.c_str(), "", false, logChildren);
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ case SymTagArrayType:
+ if (SymGetTypeInfo(m_hProcess, modBase, dwTypeIndex, TI_GET_TYPEID, &innerTypeID))
+ {
+ symbolDetails.top().HasChildren = true;
+
+ BasicType basicType = btNoType;
+ pszCurrBuffer = DumpTypeIndex(pszCurrBuffer, modBase, innerTypeID, nestingLevel + 1,
+ offset, bHandled, Name, "", false, false);
+
+ // Set Value back to an empty string since the Array object itself has no value, only its elements have
+ symbolDetails.top().Value = "";
+
+ DWORD elementsCount;
+ if (SymGetTypeInfo(m_hProcess, modBase, dwTypeIndex, TI_GET_COUNT, &elementsCount))
+ symbolDetails.top().Suffix += "[" + std::to_string(elementsCount) + "]";
+ else
+ symbolDetails.top().Suffix += "[<unknown count>]";
- pszCurrBuffer = DumpTypeIndex(pszCurrBuffer, modBase, innerTypeID, nestingLevel + 1,
- offset, bHandled, "", "");
+ if (!bHandled)
+ {
+ basicType = GetBasicType(dwTypeIndex, modBase);
+ if (symbolDetails.top().Type.empty())
+ symbolDetails.top().Type = rgBaseType[basicType];
+ bHandled = true;
}
+
+ // Get the size of the child member
+ ULONG64 length;
+ SymGetTypeInfo(m_hProcess, modBase, innerTypeID, TI_GET_LENGTH, &length);
+
+ char buffer[50];
+ switch (basicType)
+ {
+ case btChar:
+ case btStdString:
+ FormatOutputValue(buffer, basicType, length, (PVOID)offset, sizeof(buffer));
+ symbolDetails.top().Value = buffer;
+ break;
+ default:
+ for (DWORD index = 0; index < elementsCount && index < WER_MAX_ARRAY_ELEMENTS_COUNT; index++)
+ {
+ pszCurrBuffer = PushSymbolDetail(pszCurrBuffer);
+ symbolDetails.top().Suffix += "[" + std::to_string(index) + "]";
+ FormatOutputValue(buffer, basicType, length, (PVOID)(offset + length * index), sizeof(buffer));
+ symbolDetails.top().Value = buffer;
+ pszCurrBuffer = PopSymbolDetail(pszCurrBuffer);
+ }
+ break;
+ }
+
+ return pszCurrBuffer;
}
break;
case SymTagBaseType:
@@ -1013,26 +1120,37 @@ char* suffix)
return pszCurrBuffer;
}
- // Append a line feed
- pszCurrBuffer += sprintf(pszCurrBuffer, "\r\n");
-
// Iterate through each of the children
for (unsigned i = 0; i < dwChildrenCount; i++)
{
DWORD symTag;
SymGetTypeInfo(m_hProcess, modBase, children.ChildId[i], TI_GET_SYMTAG, &symTag);
- if (symTag == SymTagFunction || symTag == SymTagTypedef)
+ if (symTag == SymTagFunction ||
+ symTag == SymTagEnum ||
+ symTag == SymTagTypedef ||
+ symTag == SymTagVTable)
continue;
- // Add appropriate indentation level (since this routine is recursive)
- for (unsigned j = 0; j <= nestingLevel+1; j++)
- pszCurrBuffer += sprintf(pszCurrBuffer, "\t");
+ // Ignore static fields
+ DWORD dataKind;
+ SymGetTypeInfo(m_hProcess, modBase, children.ChildId[i], TI_GET_DATAKIND, &dataKind);
+ if (dataKind == DataIsStaticLocal ||
+ dataKind == DataIsGlobal ||
+ dataKind == DataIsStaticMember)
+ continue;
+
+
+ symbolDetails.top().HasChildren = true;
+ if (!logChildren)
+ {
+ bHandled = false;
+ return pszCurrBuffer;
+ }
// Recurse for each of the child types
bool bHandled2;
BasicType basicType = GetBasicType(children.ChildId[i], modBase);
- pszCurrBuffer += sprintf(pszCurrBuffer, rgBaseType[basicType]);
// Get the offset of the child member, relative to its parent
DWORD dwMemberOffset;
@@ -1044,11 +1162,14 @@ char* suffix)
pszCurrBuffer = DumpTypeIndex(pszCurrBuffer, modBase,
children.ChildId[i], nestingLevel+1,
- dwFinalOffset, bHandled2, ""/*Name */, "");
+ dwFinalOffset, bHandled2, ""/*Name */, "", true, true);
// If the child wasn't a UDT, format it appropriately
if (!bHandled2)
{
+ if (symbolDetails.top().Type.empty())
+ symbolDetails.top().Type = rgBaseType[basicType];
+
// Get the real "TypeId" of the child. We need this for the
// SymGetTypeInfo(TI_GET_TYPEID) call below.
DWORD typeId;
@@ -1059,75 +1180,75 @@ char* suffix)
ULONG64 length;
SymGetTypeInfo(m_hProcess, modBase, typeId, TI_GET_LENGTH, &length);
- pszCurrBuffer = FormatOutputValue(pszCurrBuffer, basicType,
- length, (PVOID)dwFinalOffset);
-
- pszCurrBuffer += sprintf(pszCurrBuffer, "\r\n");
+ char buffer[50];
+ FormatOutputValue(buffer, basicType, length, (PVOID)dwFinalOffset, sizeof(buffer));
+ symbolDetails.top().Value = buffer;
}
+
+ pszCurrBuffer = PopSymbolDetail(pszCurrBuffer);
}
bHandled = true;
return pszCurrBuffer;
}
-char * WheatyExceptionReport::FormatOutputValue(char * pszCurrBuffer,
+void WheatyExceptionReport::FormatOutputValue(char * pszCurrBuffer,
BasicType basicType,
DWORD64 length,
-PVOID pAddress)
+PVOID pAddress,
+size_t bufferSize)
{
__try
{
switch (basicType)
{
case btChar:
- pszCurrBuffer += sprintf(pszCurrBuffer, " = \"%s\"", pAddress);
+ {
+ if (strlen((char*)pAddress) > bufferSize - 6)
+ pszCurrBuffer += sprintf(pszCurrBuffer, "\"%.*s...\"", bufferSize - 6, (char*)pAddress);
+ else
+ pszCurrBuffer += sprintf(pszCurrBuffer, "\"%s\"", (char*)pAddress);
break;
+ }
case btStdString:
- pszCurrBuffer += sprintf(pszCurrBuffer, " = \"%s\"", static_cast<std::string*>(pAddress)->c_str());
+ {
+ std::string* value = static_cast<std::string*>(pAddress);
+ if (value->length() > bufferSize - 6)
+ pszCurrBuffer += sprintf(pszCurrBuffer, "\"%.*s...\"", bufferSize - 6, value->c_str());
+ else
+ pszCurrBuffer += sprintf(pszCurrBuffer, "\"%s\"", value->c_str());
break;
+ }
default:
// Format appropriately (assuming it's a 1, 2, or 4 bytes (!!!)
if (length == 1)
- pszCurrBuffer += sprintf(pszCurrBuffer, " = %X", *(PBYTE)pAddress);
+ pszCurrBuffer += sprintf(pszCurrBuffer, "0x%X", *(PBYTE)pAddress);
else if (length == 2)
- pszCurrBuffer += sprintf(pszCurrBuffer, " = %X", *(PWORD)pAddress);
+ pszCurrBuffer += sprintf(pszCurrBuffer, "0x%X", *(PWORD)pAddress);
else if (length == 4)
{
if (basicType == btFloat)
- {
- pszCurrBuffer += sprintf(pszCurrBuffer, " = %f", *(PFLOAT)pAddress);
- }
- else if (basicType == btChar)
- {
- if (!IsBadStringPtr(*(PSTR*)pAddress, 32))
- {
- pszCurrBuffer += sprintf(pszCurrBuffer, " = \"%.31s\"",
- *(PSTR*)pAddress);
- }
- else
- pszCurrBuffer += sprintf(pszCurrBuffer, " = %X",
- *(PDWORD)pAddress);
- }
+ pszCurrBuffer += sprintf(pszCurrBuffer, "%f", *(PFLOAT)pAddress);
else
- pszCurrBuffer += sprintf(pszCurrBuffer, " = %X", *(PDWORD)pAddress);
+ pszCurrBuffer += sprintf(pszCurrBuffer, "0x%X", *(PDWORD)pAddress);
}
else if (length == 8)
{
if (basicType == btFloat)
{
- pszCurrBuffer += sprintf(pszCurrBuffer, " = %lf",
+ pszCurrBuffer += sprintf(pszCurrBuffer, "%lf",
*(double *)pAddress);
}
else
- pszCurrBuffer += sprintf(pszCurrBuffer, " = %I64X",
+ pszCurrBuffer += sprintf(pszCurrBuffer, "0x%I64X",
*(DWORD64*)pAddress);
}
else
{
#if _WIN64
- pszCurrBuffer += sprintf(pszCurrBuffer, " = %I64X", (DWORD64*)pAddress);
+ pszCurrBuffer += sprintf(pszCurrBuffer, "0x%I64X", (DWORD64*)pAddress);
#else
- pszCurrBuffer += sprintf(pszCurrBuffer, " = %X", (PDWORD)pAddress);
+ pszCurrBuffer += sprintf(pszCurrBuffer, "0x%X", (PDWORD)pAddress);
#endif
}
break;
@@ -1136,13 +1257,11 @@ PVOID pAddress)
__except (EXCEPTION_EXECUTE_HANDLER)
{
#if _WIN64
- pszCurrBuffer += sprintf(pszCurrBuffer, " <Unable to read memory> = %I64X", (DWORD64*)pAddress);
+ pszCurrBuffer += sprintf(pszCurrBuffer, "0x%I64X <Unable to read memory>", (DWORD64*)pAddress);
#else
- pszCurrBuffer += sprintf(pszCurrBuffer, " <Unable to read memory> = %X", (PDWORD)pAddress);
+ pszCurrBuffer += sprintf(pszCurrBuffer, "0x%X <Unable to read memory>", (PDWORD)pAddress);
#endif
}
-
- return pszCurrBuffer;
}
BasicType
@@ -1170,13 +1289,25 @@ WheatyExceptionReport::GetBasicType(DWORD typeIndex, DWORD64 modBase)
return btNoType;
}
+DWORD_PTR WheatyExceptionReport::DereferenceUnsafePointer(DWORD_PTR address)
+{
+ __try
+ {
+ return *(PDWORD_PTR)address;
+ }
+ __except (EXCEPTION_EXECUTE_HANDLER)
+ {
+ return DWORD_PTR(-1);
+ }
+}
+
//============================================================================
// Helper function that writes to the report file, and allows the user to use
// printf style formating
//============================================================================
int __cdecl WheatyExceptionReport::_tprintf(const TCHAR * format, ...)
{
- TCHAR szBuff[1024 * 64];
+ TCHAR szBuff[WER_LARGE_BUFFER_SIZE];
int retValue;
DWORD cbWritten;
va_list argptr;
@@ -1198,6 +1329,41 @@ bool WheatyExceptionReport::StoreSymbol(DWORD type, DWORD_PTR offset)
void WheatyExceptionReport::ClearSymbols()
{
symbols.clear();
+ while (!symbolDetails.empty())
+ symbolDetails.pop();
+}
+
+char* WheatyExceptionReport::PushSymbolDetail(char* pszCurrBuffer)
+{
+ // Log current symbol and then add another to the stack to keep the hierarchy format
+ pszCurrBuffer = PrintSymbolDetail(pszCurrBuffer);
+ symbolDetails.emplace();
+ return pszCurrBuffer;
+}
+
+char* WheatyExceptionReport::PopSymbolDetail(char* pszCurrBuffer)
+{
+ pszCurrBuffer = PrintSymbolDetail(pszCurrBuffer);
+ symbolDetails.pop();
+ return pszCurrBuffer;
+}
+
+char* WheatyExceptionReport::PrintSymbolDetail(char* pszCurrBuffer)
+{
+ if (symbolDetails.empty())
+ return pszCurrBuffer;
+
+ // Don't log anything if has been logged already or if it's empty
+ if (symbolDetails.top().Logged || symbolDetails.top().empty())
+ return pszCurrBuffer;
+
+ // Add appropriate indentation level (since this routine is recursive)
+ for (size_t i = 0; i < symbolDetails.size(); i++)
+ pszCurrBuffer += sprintf(pszCurrBuffer, "\t");
+
+ pszCurrBuffer += sprintf(pszCurrBuffer, "%s\r\n", symbolDetails.top().ToString().c_str());
+
+ return pszCurrBuffer;
}
#endif // _WIN32
diff --git a/src/server/shared/Debugging/WheatyExceptionReport.h b/src/server/shared/Debugging/WheatyExceptionReport.h
index f6d6b7f4b9e..9137b91aac9 100644
--- a/src/server/shared/Debugging/WheatyExceptionReport.h
+++ b/src/server/shared/Debugging/WheatyExceptionReport.h
@@ -5,12 +5,13 @@
#include <dbghelp.h>
#include <set>
-#if _MSC_VER < 1400
-# define countof(array) (sizeof(array) / sizeof(array[0]))
-#else
-# include <stdlib.h>
-# define countof _countof
-#endif // _MSC_VER < 1400
+#include <stdlib.h>
+#include <stack>
+#define countof _countof
+
+#define WER_MAX_ARRAY_ELEMENTS_COUNT 10
+#define WER_MAX_NESTING_LEVEL 5
+#define WER_LARGE_BUFFER_SIZE 1024 * 128
enum BasicType // Stolen from CVCONST.H in the DIA 2.0 SDK
{
@@ -37,40 +38,54 @@ enum BasicType // Stolen from CVCON
btStdString = 101
};
+enum DataKind // Stolen from CVCONST.H in the DIA 2.0 SDK
+{
+ DataIsUnknown,
+ DataIsLocal,
+ DataIsStaticLocal,
+ DataIsParam,
+ DataIsObjectPtr,
+ DataIsFileStatic,
+ DataIsGlobal,
+ DataIsMember,
+ DataIsStaticMember,
+ DataIsConstant
+};
+
const char* const rgBaseType[] =
{
- " <user defined> ", // btNoType = 0,
- " void ", // btVoid = 1,
- " char* ", // btChar = 2,
- " wchar_t* ", // btWChar = 3,
- " signed char ",
- " unsigned char ",
- " int ", // btInt = 6,
- " unsigned int ", // btUInt = 7,
- " float ", // btFloat = 8,
- " <BCD> ", // btBCD = 9,
- " bool ", // btBool = 10,
- " short ",
- " unsigned short ",
- " long ", // btLong = 13,
- " unsigned long ", // btULong = 14,
- " __int8 ",
- " __int16 ",
- " __int32 ",
- " __int64 ",
- " __int128 ",
- " unsigned __int8 ",
- " unsigned __int16 ",
- " unsigned __int32 ",
- " unsigned __int64 ",
- " unsigned __int128 ",
- " <currency> ", // btCurrency = 25,
- " <date> ", // btDate = 26,
- " VARIANT ", // btVariant = 27,
- " <complex> ", // btComplex = 28,
- " <bit> ", // btBit = 29,
- " BSTR ", // btBSTR = 30,
- " HRESULT " // btHresult = 31
+ "<user defined>", // btNoType = 0,
+ "void", // btVoid = 1,
+ "char",//char* // btChar = 2,
+ "wchar_t*", // btWChar = 3,
+ "signed char",
+ "unsigned char",
+ "int", // btInt = 6,
+ "unsigned int", // btUInt = 7,
+ "float", // btFloat = 8,
+ "<BCD>", // btBCD = 9,
+ "bool", // btBool = 10,
+ "short",
+ "unsigned short",
+ "long", // btLong = 13,
+ "unsigned long", // btULong = 14,
+ "int8",
+ "int16",
+ "int32",
+ "int64",
+ "int128",
+ "uint8",
+ "uint16",
+ "uint32",
+ "uint64",
+ "uint128",
+ "<currency>", // btCurrency = 25,
+ "<date>", // btDate = 26,
+ "VARIANT", // btVariant = 27,
+ "<complex>", // btComplex = 28,
+ "<bit>", // btBit = 29,
+ "BSTR", // btBSTR = 30,
+ "HRESULT" // btHresult = 31
};
struct SymbolPair
@@ -83,7 +98,7 @@ struct SymbolPair
bool operator<(const SymbolPair& other) const
{
- return _offset < other._offset ||
+ return _offset < other._offset ||
(_offset == other._offset && _type < other._type);
}
@@ -92,6 +107,39 @@ struct SymbolPair
};
typedef std::set<SymbolPair> SymbolPairs;
+struct SymbolDetail
+{
+ SymbolDetail() : Prefix(), Type(), Suffix(), Name(), Value(), Logged(false), HasChildren(false) {}
+
+ std::string ToString()
+ {
+ Logged = true;
+ std::string formatted = Prefix + Type + Suffix;
+ if (!Name.empty())
+ {
+ if (!formatted.empty())
+ formatted += " ";
+ formatted += Name;
+ }
+ if (!Value.empty())
+ formatted += " = " + Value;
+ return formatted;
+ }
+
+ bool empty() const
+ {
+ return Value.empty() && !HasChildren;
+ }
+
+ std::string Prefix;
+ std::string Type;
+ std::string Suffix;
+ std::string Name;
+ std::string Value;
+ bool Logged;
+ bool HasChildren;
+};
+
class WheatyExceptionReport
{
public:
@@ -122,11 +170,12 @@ class WheatyExceptionReport
static bool FormatSymbolValue(PSYMBOL_INFO, STACKFRAME64 *, char * pszBuffer, unsigned cbBuffer);
- static char * DumpTypeIndex(char *, DWORD64, DWORD, unsigned, DWORD_PTR, bool &, char*, char*);
+ static char * DumpTypeIndex(char *, DWORD64, DWORD, unsigned, DWORD_PTR, bool &, const char*, char*, bool, bool);
- static char * FormatOutputValue(char * pszCurrBuffer, BasicType basicType, DWORD64 length, PVOID pAddress);
+ static void FormatOutputValue(char * pszCurrBuffer, BasicType basicType, DWORD64 length, PVOID pAddress, size_t bufferSize);
static BasicType GetBasicType(DWORD typeIndex, DWORD64 modBase);
+ static DWORD_PTR DereferenceUnsafePointer(DWORD_PTR address);
static int __cdecl _tprintf(const TCHAR * format, ...);
@@ -141,6 +190,12 @@ class WheatyExceptionReport
static HANDLE m_hDumpFile;
static HANDLE m_hProcess;
static SymbolPairs symbols;
+ static std::stack<SymbolDetail> symbolDetails;
+
+ static char* PushSymbolDetail(char* pszCurrBuffer);
+ static char* PopSymbolDetail(char* pszCurrBuffer);
+ static char* PrintSymbolDetail(char* pszCurrBuffer);
+
};
extern WheatyExceptionReport g_WheatyExceptionReport; // global instance of class
diff --git a/src/server/shared/Define.h b/src/server/shared/Define.h
index 27973694818..c33c8222ebb 100644
--- a/src/server/shared/Define.h
+++ b/src/server/shared/Define.h
@@ -21,24 +21,36 @@
#include "CompilerDefs.h"
-#include <ace/Basic_Types.h>
-#include <ace/ACE_export.h>
+#if COMPILER == COMPILER_GNU
+# if !defined(__STDC_FORMAT_MACROS)
+# define __STDC_FORMAT_MACROS
+# endif
+# if !defined(__STDC_CONSTANT_MACROS)
+# define __STDC_CONSTANT_MACROS
+# endif
+# if !defined(_GLIBCXX_USE_NANOSLEEP)
+# define _GLIBCXX_USE_NANOSLEEP
+# endif
+#endif
#include <cstddef>
+#include <cinttypes>
+#include <climits>
#define TRINITY_LITTLEENDIAN 0
#define TRINITY_BIGENDIAN 1
#if !defined(TRINITY_ENDIAN)
-# if defined (ACE_BIG_ENDIAN)
+# if defined (BOOST_BIG_ENDIAN)
# define TRINITY_ENDIAN TRINITY_BIGENDIAN
-# else //ACE_BYTE_ORDER != ACE_BIG_ENDIAN
+# else
# define TRINITY_ENDIAN TRINITY_LITTLEENDIAN
-# endif //ACE_BYTE_ORDER
-#endif //TRINITY_ENDIAN
+# endif
+#endif
#if PLATFORM == PLATFORM_WINDOWS
# define TRINITY_PATH_MAX MAX_PATH
+# define _USE_MATH_DEFINES
# ifndef DECLSPEC_NORETURN
# define DECLSPEC_NORETURN __declspec(noreturn)
# endif //DECLSPEC_NORETURN
@@ -70,29 +82,19 @@
# define ATTR_DEPRECATED
#endif //COMPILER == COMPILER_GNU
-#if COMPILER_HAS_CPP11_SUPPORT
-# define OVERRIDE override
-# define FINAL final
-#else
-# define OVERRIDE
-# define FINAL
-#endif //COMPILER_HAS_CPP11_SUPPORT
-
-#define UI64FMTD ACE_UINT64_FORMAT_SPECIFIER
-#define UI64LIT(N) ACE_UINT64_LITERAL(N)
-
-#define SI64FMTD ACE_INT64_FORMAT_SPECIFIER
-#define SI64LIT(N) ACE_INT64_LITERAL(N)
+#define UI64FMTD "%" PRIu64
+#define UI64LIT(N) UINT64_C(N)
-#define SIZEFMTD ACE_SIZE_T_FORMAT_SPECIFIER
+#define SI64FMTD "%" PRId64
+#define SI64LIT(N) INT64_C(N)
-typedef ACE_INT64 int64;
-typedef ACE_INT32 int32;
-typedef ACE_INT16 int16;
-typedef ACE_INT8 int8;
-typedef ACE_UINT64 uint64;
-typedef ACE_UINT32 uint32;
-typedef ACE_UINT16 uint16;
-typedef ACE_UINT8 uint8;
+typedef int64_t int64;
+typedef int32_t int32;
+typedef int16_t int16;
+typedef int8_t int8;
+typedef uint64_t uint64;
+typedef uint32_t uint32;
+typedef uint16_t uint16;
+typedef uint8_t uint8;
#endif //TRINITY_DEFINE_H
diff --git a/src/server/shared/Dynamic/FactoryHolder.h b/src/server/shared/Dynamic/FactoryHolder.h
index aee84ab151e..a009fd37a7e 100644
--- a/src/server/shared/Dynamic/FactoryHolder.h
+++ b/src/server/shared/Dynamic/FactoryHolder.h
@@ -30,15 +30,13 @@ class FactoryHolder
{
public:
typedef ObjectRegistry<FactoryHolder<T, Key >, Key > FactoryHolderRegistry;
- friend class ACE_Singleton<FactoryHolderRegistry, ACE_Null_Mutex>;
- typedef ACE_Singleton<FactoryHolderRegistry, ACE_Null_Mutex> FactoryHolderRepository;
FactoryHolder(Key k) : i_key(k) { }
virtual ~FactoryHolder() { }
inline Key key() const { return i_key; }
- void RegisterSelf(void) { FactoryHolderRepository::instance()->InsertItem(this, i_key); }
- void DeregisterSelf(void) { FactoryHolderRepository::instance()->RemoveItem(this, false); }
+ void RegisterSelf(void) { FactoryHolderRegistry::instance()->InsertItem(this, i_key); }
+ void DeregisterSelf(void) { FactoryHolderRegistry::instance()->RemoveItem(this, false); }
/// Abstract Factory create method
virtual T* Create(void *data = NULL) const = 0;
diff --git a/src/server/shared/Dynamic/HashNamespace.h b/src/server/shared/Dynamic/HashNamespace.h
deleted file mode 100644
index 0e95332c05f..00000000000
--- a/src/server/shared/Dynamic/HashNamespace.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef TRINITY_HASH_NAMESPACE_H
-#define TRINITY_HASH_NAMESPACE_H
-
-#include "Define.h"
-
-#if COMPILER_HAS_CPP11_SUPPORT
-# define HASH_NAMESPACE_START namespace std {
-# define HASH_NAMESPACE_END }
-#elif defined(_STLPORT_VERSION)
-# define HASH_NAMESPACE_START namespace std {
-# define HASH_NAMESPACE_END }
-#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1600 // VS100
-# define HASH_NAMESPACE_START namespace std {
-# define HASH_NAMESPACE_END }
-#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1500 && _HAS_TR1
-# define HASH_NAMESPACE_START namespace std { namespace tr1 {
-# define HASH_NAMESPACE_END } }
-#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1300
-# define HASH_NAMESPACE_START namespace stdext {
-# define HASH_NAMESPACE_END }
-
-#if !_HAS_TRADITIONAL_STL
-#ifndef HASH_NAMESPACE
-#define HASH_NAMESPACE
-#else
-
-// can be not used by some platforms, so provide fake forward
-HASH_NAMESPACE_START
-
-template<class K>
-class hash
-{
-public:
- size_t operator() (K const&);
-};
-
-HASH_NAMESPACE_END
-
-#endif
-#endif
-
-#elif COMPILER == COMPILER_INTEL
-# define HASH_NAMESPACE_START namespace std {
-# define HASH_NAMESPACE_END }
-#elif COMPILER == COMPILER_GNU && defined(__clang__) && defined(_LIBCPP_VERSION)
-# define HASH_NAMESPACE_START namespace std {
-# define HASH_NAMESPACE_END }
-#elif COMPILER == COMPILER_GNU && GCC_VERSION > 40200
-# define HASH_NAMESPACE_START namespace std { namespace tr1 {
-# define HASH_NAMESPACE_END } }
-#elif COMPILER == COMPILER_GNU && GCC_VERSION >= 30000
-# define HASH_NAMESPACE_START namespace __gnu_cxx {
-# define HASH_NAMESPACE_END }
-
-#include <ext/hash_fun.h>
-#include <string>
-
-HASH_NAMESPACE_START
-
-template<>
-class hash<unsigned long long>
-{
-public:
- size_t operator()(const unsigned long long &__x) const { return (size_t)__x; }
-};
-
-template<typename T>
-class hash<T *>
-{
-public:
- size_t operator()(T * const &__x) const { return (size_t)__x; }
-};
-
-template<> struct hash<std::string>
-{
- size_t operator()(const std::string &__x) const
- {
- return hash<char const*>()(__x.c_str());
- }
-};
-
-HASH_NAMESPACE_END
-
-#else
-# define HASH_NAMESPACE_START namespace std {
-# define HASH_NAMESPACE_END }
-#endif
-
-#if COMPILER != COMPILER_MICROSOFT
-
-// Visual Studio use non standard hash calculation function, so provide fake forward for other
-HASH_NAMESPACE_START
-
-template<class K>
-size_t hash_value(K const&);
-
-HASH_NAMESPACE_END
-
-#endif
-
-#endif
diff --git a/src/server/shared/Dynamic/LinkedList.h b/src/server/shared/Dynamic/LinkedList.h
index 402aaf3d40c..87bbeaac380 100644
--- a/src/server/shared/Dynamic/LinkedList.h
+++ b/src/server/shared/Dynamic/LinkedList.h
@@ -150,7 +150,7 @@ class LinkedListHead
typedef _Ty& reference;
typedef _Ty const & const_reference;
- Iterator() : _Ptr(0)
+ Iterator() : _Ptr(nullptr)
{ // construct with null node pointer
}
diff --git a/src/server/shared/Dynamic/ObjectRegistry.h b/src/server/shared/Dynamic/ObjectRegistry.h
index 4b17b2fc558..fe55982f15f 100644
--- a/src/server/shared/Dynamic/ObjectRegistry.h
+++ b/src/server/shared/Dynamic/ObjectRegistry.h
@@ -20,12 +20,10 @@
#define TRINITY_OBJECTREGISTRY_H
#include "Define.h"
-#include "Dynamic/UnorderedMap.h"
-#include <ace/Singleton.h>
#include <string>
-#include <vector>
#include <map>
+#include <vector>
/** ObjectRegistry holds all registry item of the same type
*/
@@ -33,7 +31,13 @@ template<class T, class Key = std::string>
class ObjectRegistry
{
public:
- typedef std::map<Key, T *> RegistryMapType;
+ typedef std::map<Key, T*> RegistryMapType;
+
+ static ObjectRegistry<T, Key>* instance()
+ {
+ static ObjectRegistry<T, Key> instance;
+ return &instance;
+ }
/// Returns a registry item
const T* GetRegistryItem(Key key) const
diff --git a/src/server/shared/Dynamic/UnorderedMap.h b/src/server/shared/Dynamic/UnorderedMap.h
deleted file mode 100644
index f97c4830c75..00000000000
--- a/src/server/shared/Dynamic/UnorderedMap.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef TRINITY_UNORDERED_MAP_H
-#define TRINITY_UNORDERED_MAP_H
-
-#include "HashNamespace.h"
-
-#if COMPILER_HAS_CPP11_SUPPORT
-# include <unordered_map>
-#elif COMPILER == COMPILER_INTEL
-# include <ext/hash_map>
-#elif COMPILER == COMPILER_GNU && defined(__clang__) && defined(_LIBCPP_VERSION)
-# include <unordered_map>
-#elif COMPILER == COMPILER_GNU && GCC_VERSION > 40200
-# include <tr1/unordered_map>
-#elif COMPILER == COMPILER_GNU && GCC_VERSION >= 30000
-# include <ext/hash_map>
-#elif COMPILER == COMPILER_MICROSOFT && ((_MSC_VER >= 1500 && _HAS_TR1) || _MSC_VER >= 1700) // VC9.0 SP1 and later
-# include <unordered_map>
-#else
-# include <hash_map>
-#endif
-
-#ifdef _STLPORT_VERSION
-# define UNORDERED_MAP std::hash_map
-# define UNORDERED_MULTIMAP std::hash_multimap
-#elif COMPILER_HAS_CPP11_SUPPORT
-# define UNORDERED_MAP std::unordered_map
-# define UNORDERED_MULTIMAP std::unordered_multimap
-#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1600 // VS100
-# define UNORDERED_MAP std::tr1::unordered_map
-# define UNORDERED_MULTIMAP std::tr1::unordered_multimap
-#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1500 && _HAS_TR1
-# define UNORDERED_MAP std::tr1::unordered_map
-# define UNORDERED_MULTIMAP std::tr1::unordered_multimap
-#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1300
-# define UNORDERED_MAP stdext::hash_map
-# define UNORDERED_MULTIMAP stdext::hash_multimap
-#elif COMPILER == COMPILER_INTEL
-# define UNORDERED_MAP std::hash_map
-# define UNORDERED_MULTIMAP std::hash_multimap
-#elif COMPILER == COMPILER_GNU && defined(__clang__) && defined(_LIBCPP_VERSION)
-# define UNORDERED_MAP std::unordered_map
-# define UNORDERED_MULTIMAP std::unordered_multimap
-#elif COMPILER == COMPILER_GNU && GCC_VERSION > 40200
-# define UNORDERED_MAP std::tr1::unordered_map
-# define UNORDERED_MULTIMAP std::tr1::unordered_multimap
-#elif COMPILER == COMPILER_GNU && GCC_VERSION >= 30000
-# define UNORDERED_MAP __gnu_cxx::hash_map
-# define UNORDERED_MULTIMAP __gnu_cxx::hash_multimap
-#else
-# define UNORDERED_MAP std::hash_map
-# define UNORDERED_MULTIMAP std::hash_multimap
-#endif
-
-#endif
diff --git a/src/server/shared/Dynamic/UnorderedSet.h b/src/server/shared/Dynamic/UnorderedSet.h
deleted file mode 100644
index 0e084698c47..00000000000
--- a/src/server/shared/Dynamic/UnorderedSet.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef TRINITY_UNORDERED_SET_H
-#define TRINITY_UNORDERED_SET_H
-
-#include "HashNamespace.h"
-
-#if COMPILER_HAS_CPP11_SUPPORT
-# include <unordered_set>
-#elif COMPILER == COMPILER_INTEL
-# include <ext/hash_set>
-#elif COMPILER == COMPILER_GNU && defined(__clang__) && defined(_LIBCPP_VERSION)
-# include <unordered_set>
-#elif COMPILER == COMPILER_GNU && GCC_VERSION > 40200
-# include <tr1/unordered_set>
-#elif COMPILER == COMPILER_GNU && GCC_VERSION >= 30000
-# include <ext/hash_set>
-#elif COMPILER == COMPILER_MICROSOFT && ((_MSC_VER >= 1500 && _HAS_TR1) || _MSC_VER >= 1700) // VC9.0 SP1 and later
-# include <unordered_set>
-#else
-# include <hash_set>
-#endif
-
-#ifdef _STLPORT_VERSION
-# define UNORDERED_SET std::hash_set
-using std::hash_set;
-#elif COMPILER_HAS_CPP11_SUPPORT
-# define UNORDERED_SET std::unordered_set
-#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1600 // VS100
-# define UNORDERED_SET std::tr1::unordered_set
-#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1500 && _HAS_TR1
-# define UNORDERED_SET std::tr1::unordered_set
-#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1300
-# define UNORDERED_SET stdext::hash_set
-using stdext::hash_set;
-#elif COMPILER == COMPILER_INTEL
-# define UNORDERED_SET std::hash_set
-using std::hash_set;
-#elif COMPILER == COMPILER_GNU && defined(__clang__) && defined(_LIBCPP_VERSION)
-# define UNORDERED_SET std::unordered_set
-#elif COMPILER == COMPILER_GNU && GCC_VERSION > 40200
-# define UNORDERED_SET std::tr1::unordered_set
-#elif COMPILER == COMPILER_GNU && GCC_VERSION >= 30000
-# define UNORDERED_SET __gnu_cxx::hash_set
-#else
-# define UNORDERED_SET std::hash_set
-using std::hash_set;
-#endif
-
-#endif
diff --git a/src/server/shared/Logging/Appender.cpp b/src/server/shared/Logging/Appender.cpp
index 718c3a406f1..2b38f9886c3 100644
--- a/src/server/shared/Logging/Appender.cpp
+++ b/src/server/shared/Logging/Appender.cpp
@@ -17,11 +17,12 @@
#include "Appender.h"
#include "Common.h"
+#include "Util.h"
std::string LogMessage::getTimeStr(time_t time)
{
tm aTm;
- ACE_OS::localtime_r(&time, &aTm);
+ localtime_r(&time, &aTm);
char buf[20];
snprintf(buf, 20, "%04d-%02d-%02d_%02d:%02d:%02d", aTm.tm_year+1900, aTm.tm_mon+1, aTm.tm_mday, aTm.tm_hour, aTm.tm_min, aTm.tm_sec);
return std::string(buf);
diff --git a/src/server/shared/Logging/Appender.h b/src/server/shared/Logging/Appender.h
index b373f0459c9..67213d0ddd0 100644
--- a/src/server/shared/Logging/Appender.h
+++ b/src/server/shared/Logging/Appender.h
@@ -18,11 +18,10 @@
#ifndef APPENDER_H
#define APPENDER_H
-#include "Define.h"
-#include <time.h>
-#include "Dynamic/UnorderedMap.h"
-
+#include <unordered_map>
#include <string>
+#include <time.h>
+#include "Define.h"
// Values assigned have their equivalent in enum ACE_Log_Priority
enum LogLevel
@@ -105,6 +104,6 @@ class Appender
AppenderFlags flags;
};
-typedef UNORDERED_MAP<uint8, Appender*> AppenderMap;
+typedef std::unordered_map<uint8, Appender*> AppenderMap;
#endif
diff --git a/src/server/shared/Logging/AppenderConsole.cpp b/src/server/shared/Logging/AppenderConsole.cpp
index 14d434e35b8..20923162906 100644
--- a/src/server/shared/Logging/AppenderConsole.cpp
+++ b/src/server/shared/Logging/AppenderConsole.cpp
@@ -15,11 +15,15 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <sstream>
+
#include "AppenderConsole.h"
#include "Config.h"
#include "Util.h"
-#include <sstream>
+#if PLATFORM == PLATFORM_WINDOWS
+ #include <Windows.h>
+#endif
AppenderConsole::AppenderConsole(uint8 id, std::string const& name, LogLevel level, AppenderFlags flags):
Appender(id, name, APPENDER_CONSOLE, level, flags), _colored(false)
diff --git a/src/server/shared/Logging/AppenderConsole.h b/src/server/shared/Logging/AppenderConsole.h
index 1aaa74e96ec..5b66f86650d 100644
--- a/src/server/shared/Logging/AppenderConsole.h
+++ b/src/server/shared/Logging/AppenderConsole.h
@@ -18,8 +18,8 @@
#ifndef APPENDERCONSOLE_H
#define APPENDERCONSOLE_H
-#include "Appender.h"
#include <string>
+#include "Appender.h"
enum ColorTypes
{
@@ -51,7 +51,7 @@ class AppenderConsole: public Appender
private:
void SetColor(bool stdout_stream, ColorTypes color);
void ResetColor(bool stdout_stream);
- void _write(LogMessage const& message);
+ void _write(LogMessage const& message) override;
bool _colored;
ColorTypes _colors[MaxLogLevels];
};
diff --git a/src/server/shared/Logging/AppenderDB.h b/src/server/shared/Logging/AppenderDB.h
index 660992261fd..b86252d0d67 100644
--- a/src/server/shared/Logging/AppenderDB.h
+++ b/src/server/shared/Logging/AppenderDB.h
@@ -31,7 +31,7 @@ class AppenderDB: public Appender
private:
uint32 realmId;
bool enabled;
- void _write(LogMessage const& message);
+ void _write(LogMessage const& message) override;
};
#endif
diff --git a/src/server/shared/Logging/AppenderFile.cpp b/src/server/shared/Logging/AppenderFile.cpp
index f2532ad8bb8..3e79ac40c6f 100644
--- a/src/server/shared/Logging/AppenderFile.cpp
+++ b/src/server/shared/Logging/AppenderFile.cpp
@@ -45,7 +45,7 @@ AppenderFile::~AppenderFile()
void AppenderFile::_write(LogMessage const& message)
{
- bool exceedMaxSize = maxFileSize > 0 && (fileSize.value() + message.Size()) > maxFileSize;
+ bool exceedMaxSize = maxFileSize > 0 && (fileSize.load() + message.Size()) > maxFileSize;
if (dynamicName)
{
diff --git a/src/server/shared/Logging/AppenderFile.h b/src/server/shared/Logging/AppenderFile.h
index 1034b41f665..37ba2769e19 100644
--- a/src/server/shared/Logging/AppenderFile.h
+++ b/src/server/shared/Logging/AppenderFile.h
@@ -18,8 +18,8 @@
#ifndef APPENDERFILE_H
#define APPENDERFILE_H
+#include <atomic>
#include "Appender.h"
-#include "ace/Atomic_Op.h"
class AppenderFile: public Appender
{
@@ -30,7 +30,7 @@ class AppenderFile: public Appender
private:
void CloseFile();
- void _write(LogMessage const& message);
+ void _write(LogMessage const& message) override;
FILE* logfile;
std::string filename;
std::string logDir;
@@ -38,7 +38,7 @@ class AppenderFile: public Appender
bool dynamicName;
bool backup;
uint64 maxFileSize;
- ACE_Atomic_Op<ACE_Thread_Mutex, uint64> fileSize;
+ std::atomic<uint64> fileSize;
};
#endif
diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp
index bc002668b3b..a7b6b418cc4 100644
--- a/src/server/shared/Logging/Log.cpp
+++ b/src/server/shared/Logging/Log.cpp
@@ -29,7 +29,7 @@
#include <cstdio>
#include <sstream>
-Log::Log() : worker(NULL)
+Log::Log() : _ioService(nullptr), _strand(nullptr)
{
m_logsTimestamp = "_" + GetTimestampStr();
LoadFromConfig();
@@ -37,6 +37,7 @@ Log::Log() : worker(NULL)
Log::~Log()
{
+ delete _strand;
Close();
}
@@ -250,13 +251,13 @@ void Log::ReadLoggersFromConfig()
AppenderConsole* appender = new AppenderConsole(NextAppenderId(), "Console", LOG_LEVEL_DEBUG, APPENDER_FLAGS_NONE);
appenders[appender->getId()] = appender;
- Logger& rootLogger = loggers[LOGGER_ROOT];
- rootLogger.Create(LOGGER_ROOT, LOG_LEVEL_ERROR);
- rootLogger.addAppender(appender->getId(), appender);
+ Logger& logger = loggers[LOGGER_ROOT];
+ logger.Create(LOGGER_ROOT, LOG_LEVEL_ERROR);
+ logger.addAppender(appender->getId(), appender);
- Logger& serverLogger = loggers["server"];
- serverLogger.Create("server", LOG_LEVEL_INFO);
- serverLogger.addAppender(appender->getId(), appender);
+ logger = loggers["server"];
+ logger.Create("server", LOG_LEVEL_ERROR);
+ logger.addAppender(appender->getId(), appender);
}
}
@@ -267,13 +268,18 @@ void Log::vlog(std::string const& filter, LogLevel level, char const* str, va_li
write(new LogMessage(level, filter, text));
}
-void Log::write(LogMessage* msg)
+void Log::write(LogMessage* msg) const
{
Logger const* logger = GetLoggerByType(msg->type);
msg->text.append("\n");
- if (worker)
- worker->enqueue(new LogOperation(logger, msg));
+ if (_ioService)
+ {
+ auto logOperation = std::shared_ptr<LogOperation>(new LogOperation(logger, msg));
+
+ _ioService->post(_strand->wrap([logOperation](){ logOperation->call(); }));
+
+ }
else
{
logger->write(*msg);
@@ -283,9 +289,11 @@ void Log::write(LogMessage* msg)
std::string Log::GetTimestampStr()
{
- time_t t = time(NULL);
- tm aTm;
- ACE_OS::localtime_r(&t, &aTm);
+ time_t tt = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
+
+ std::tm aTm;
+ localtime_r(&tt, &aTm);
+
// YYYY year
// MM month (2 digits 01-12)
// DD day (2 digits 01-31)
@@ -373,10 +381,7 @@ void Log::SetRealmId(uint32 id)
void Log::Close()
{
- delete worker;
- worker = NULL;
loggers.clear();
- cachedLoggers.clear();
for (AppenderMap::iterator it = appenders.begin(); it != appenders.end(); ++it)
{
delete it->second;
@@ -389,9 +394,6 @@ void Log::LoadFromConfig()
{
Close();
- if (sConfigMgr->GetBoolDefault("Log.Async.Enable", false))
- worker = new LogWorker();
-
AppenderId = 0;
m_logsDir = sConfigMgr->GetStringDefault("LogsDir", "");
if (!m_logsDir.empty())
diff --git a/src/server/shared/Logging/Log.h b/src/server/shared/Logging/Log.h
index 73c5601b95b..78e7e012bbe 100644
--- a/src/server/shared/Logging/Log.h
+++ b/src/server/shared/Logging/Log.h
@@ -22,29 +22,41 @@
#include "Define.h"
#include "Appender.h"
#include "Logger.h"
-#include "LogWorker.h"
-#include "Dynamic/UnorderedMap.h"
+#include <stdarg.h>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/strand.hpp>
+#include <unordered_map>
#include <string>
-#include <ace/Singleton.h>
#define LOGGER_ROOT "root"
class Log
{
- friend class ACE_Singleton<Log, ACE_Thread_Mutex>;
-
- typedef UNORDERED_MAP<std::string, Logger> LoggerMap;
- typedef UNORDERED_MAP<std::string, Logger const*> CachedLoggerContainer;
+ typedef std::unordered_map<std::string, Logger> LoggerMap;
private:
Log();
~Log();
public:
+
+ static Log* instance(boost::asio::io_service* ioService = nullptr)
+ {
+ static Log instance;
+
+ if (ioService != nullptr)
+ {
+ instance._ioService = ioService;
+ instance._strand = new boost::asio::strand(*ioService);
+ }
+
+ return &instance;
+ }
+
void LoadFromConfig();
void Close();
- bool ShouldLog(std::string const& type, LogLevel level);
+ bool ShouldLog(std::string const& type, LogLevel level) const;
bool SetLogLevel(std::string const& name, char const* level, bool isLogger = true);
void outMessage(std::string const& f, LogLevel level, char const* str, ...) ATTR_PRINTF(4, 5);
@@ -57,9 +69,9 @@ class Log
private:
static std::string GetTimestampStr();
void vlog(std::string const& f, LogLevel level, char const* str, va_list argptr);
- void write(LogMessage* msg);
+ void write(LogMessage* msg) const;
- Logger const* GetLoggerByType(std::string const& type);
+ Logger const* GetLoggerByType(std::string const& type) const;
Appender* GetAppenderByName(std::string const& name);
uint8 NextAppenderId();
void CreateAppenderFromConfig(std::string const& name);
@@ -69,46 +81,38 @@ class Log
AppenderMap appenders;
LoggerMap loggers;
- CachedLoggerContainer cachedLoggers;
uint8 AppenderId;
std::string m_logsDir;
std::string m_logsTimestamp;
- LogWorker* worker;
+ boost::asio::io_service* _ioService;
+ boost::asio::strand* _strand;
};
-inline Logger const* Log::GetLoggerByType(std::string const& originalType)
+inline Logger const* Log::GetLoggerByType(std::string const& type) const
{
- // Check if already cached
- CachedLoggerContainer::const_iterator itCached = cachedLoggers.find(originalType);
- if (itCached != cachedLoggers.end())
- return itCached->second;
-
- Logger const* logger = NULL;
- std::string type(originalType);
-
- do
- {
- // Search for the logger "type.subtype"
- LoggerMap::const_iterator it = loggers.find(type);
- if (it == loggers.end())
- {
- // Search for the logger "type", if our logger contains '.', otherwise search for LOGGER_ROOT
- size_t found = type.find_last_of(".");
- type = found != std::string::npos ? type.substr(0, found) : LOGGER_ROOT;
- }
- else
- logger = &(it->second);
- }
- while (!logger);
+ LoggerMap::const_iterator it = loggers.find(type);
+ if (it != loggers.end())
+ return &(it->second);
- cachedLoggers[originalType] = logger;
- return logger;
+ if (type == LOGGER_ROOT)
+ return NULL;
+
+ std::string parentLogger = LOGGER_ROOT;
+ size_t found = type.find_last_of(".");
+ if (found != std::string::npos)
+ parentLogger = type.substr(0,found);
+
+ return GetLoggerByType(parentLogger);
}
-inline bool Log::ShouldLog(std::string const& type, LogLevel level)
+inline bool Log::ShouldLog(std::string const& type, LogLevel level) const
{
+ // TODO: Use cache to store "Type.sub1.sub2": "Type" equivalence, should
+ // Speed up in cases where requesting "Type.sub1.sub2" but only configured
+ // Logger "Type"
+
Logger const* logger = GetLoggerByType(type);
if (!logger)
return false;
@@ -127,7 +131,7 @@ inline void Log::outMessage(std::string const& filter, LogLevel level, const cha
va_end(ap);
}
-#define sLog ACE_Singleton<Log, ACE_Thread_Mutex>::instance()
+#define sLog Log::instance()
#if PLATFORM != PLATFORM_WINDOWS
#define TC_LOG_MESSAGE_BODY(filterType__, level__, ...) \
diff --git a/src/server/shared/Logging/LogWorker.cpp b/src/server/shared/Logging/LogWorker.cpp
deleted file mode 100644
index b0c82b614f4..00000000000
--- a/src/server/shared/Logging/LogWorker.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "LogWorker.h"
-
-LogWorker::LogWorker()
- : m_queue(HIGH_WATERMARK, LOW_WATERMARK)
-{
- ACE_Task_Base::activate(THR_NEW_LWP | THR_JOINABLE | THR_INHERIT_SCHED, 1);
-}
-
-LogWorker::~LogWorker()
-{
- m_queue.deactivate();
- wait();
-}
-
-int LogWorker::enqueue(LogOperation* op)
-{
- return m_queue.enqueue(op);
-}
-
-int LogWorker::svc()
-{
- while (1)
- {
- LogOperation* request;
- if (m_queue.dequeue(request) == -1)
- break;
-
- request->call();
- delete request;
- }
-
- return 0;
-}
diff --git a/src/server/shared/Logging/LogWorker.h b/src/server/shared/Logging/LogWorker.h
deleted file mode 100644
index 25a57842e08..00000000000
--- a/src/server/shared/Logging/LogWorker.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef LOGWORKER_H
-#define LOGWORKER_H
-
-#include "LogOperation.h"
-
-#include <ace/Task.h>
-#include <ace/Activation_Queue.h>
-
-class LogWorker: protected ACE_Task_Base
-{
- public:
- LogWorker();
- ~LogWorker();
-
- typedef ACE_Message_Queue_Ex<LogOperation, ACE_MT_SYNCH> LogMessageQueueType;
-
- enum
- {
- HIGH_WATERMARK = 8 * 1024 * 1024,
- LOW_WATERMARK = 8 * 1024 * 1024
- };
-
- int enqueue(LogOperation *op);
-
- private:
- virtual int svc();
- LogMessageQueueType m_queue;
-};
-
-#endif
diff --git a/src/server/shared/Networking/AsyncAcceptor.h b/src/server/shared/Networking/AsyncAcceptor.h
new file mode 100644
index 00000000000..64665c2b198
--- /dev/null
+++ b/src/server/shared/Networking/AsyncAcceptor.h
@@ -0,0 +1,73 @@
+/*
+* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __ASYNCACCEPT_H_
+#define __ASYNCACCEPT_H_
+
+#include "Log.h"
+#include <boost/asio.hpp>
+
+using boost::asio::ip::tcp;
+
+template <class T>
+class AsyncAcceptor
+{
+public:
+ AsyncAcceptor(boost::asio::io_service& ioService, std::string bindIp, int port) :
+ _acceptor(ioService, tcp::endpoint(boost::asio::ip::address::from_string(bindIp), port)),
+ _socket(ioService)
+ {
+ AsyncAccept();
+ };
+
+ AsyncAcceptor(boost::asio::io_service& ioService, std::string bindIp, int port, bool tcpNoDelay) :
+ _acceptor(ioService, tcp::endpoint(boost::asio::ip::address::from_string(bindIp), port)),
+ _socket(ioService)
+ {
+ _acceptor.set_option(boost::asio::ip::tcp::no_delay(tcpNoDelay));
+
+ AsyncAccept();
+ };
+
+private:
+ void AsyncAccept()
+ {
+ _acceptor.async_accept(_socket, [this](boost::system::error_code error)
+ {
+ if (!error)
+ {
+ try
+ {
+ // this-> is required here to fix an segmentation fault in gcc 4.7.2 - reason is lambdas in a templated class
+ std::make_shared<T>(std::move(this->_socket))->Start();
+ }
+ catch (boost::system::system_error const& err)
+ {
+ TC_LOG_INFO("network", "Failed to retrieve client's remote address %s", err.what());
+ }
+ }
+
+ // lets slap some more this-> on this so we can fix this bug with gcc 4.7.2 throwing internals in yo face
+ this->AsyncAccept();
+ });
+ }
+
+ tcp::acceptor _acceptor;
+ tcp::socket _socket;
+};
+
+#endif /* __ASYNCACCEPT_H_ */
diff --git a/src/server/shared/Networking/MessageBuffer.h b/src/server/shared/Networking/MessageBuffer.h
new file mode 100644
index 00000000000..c7f8ba31a71
--- /dev/null
+++ b/src/server/shared/Networking/MessageBuffer.h
@@ -0,0 +1,95 @@
+/*
+* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __MESSAGEBUFFER_H_
+#define __MESSAGEBUFFER_H_
+
+#include "Define.h"
+#include <vector>
+
+class MessageBuffer
+{
+ typedef std::vector<uint8>::size_type size_type;
+
+public:
+ MessageBuffer() : _wpos(0), _storage() { }
+
+ MessageBuffer(MessageBuffer const& right) : _wpos(right._wpos), _storage(right._storage) { }
+
+ MessageBuffer(MessageBuffer&& right) : _wpos(right._wpos), _storage(right.Move()) { }
+
+ void Reset()
+ {
+ _storage.clear();
+ _wpos = 0;
+ }
+
+ bool IsMessageReady() const { return _wpos == _storage.size(); }
+
+ size_type GetSize() const { return _storage.size(); }
+
+ size_type GetReadyDataSize() const { return _wpos; }
+
+ size_type GetMissingSize() const { return _storage.size() - _wpos; }
+
+ uint8* Data() { return _storage.data(); }
+
+ void Grow(size_type bytes)
+ {
+ _storage.resize(_storage.size() + bytes);
+ }
+
+ uint8* GetWritePointer() { return &_storage[_wpos]; }
+
+ void WriteCompleted(size_type bytes) { _wpos += bytes; }
+
+ void ResetWritePointer() { _wpos = 0; }
+
+ std::vector<uint8>&& Move()
+ {
+ _wpos = 0;
+ return std::move(_storage);
+ }
+
+ MessageBuffer& operator=(MessageBuffer& right)
+ {
+ if (this != &right)
+ {
+ _wpos = right._wpos;
+ _storage = right._storage;
+ }
+
+ return *this;
+ }
+
+ MessageBuffer& operator=(MessageBuffer&& right)
+ {
+ if (this != &right)
+ {
+ _wpos = right._wpos;
+ _storage = right.Move();
+ }
+
+ return *this;
+ }
+
+private:
+ size_type _wpos;
+ std::vector<uint8> _storage;
+};
+
+#endif /* __MESSAGEBUFFER_H_ */
diff --git a/src/server/shared/Networking/Socket.h b/src/server/shared/Networking/Socket.h
new file mode 100644
index 00000000000..3bd30bd731b
--- /dev/null
+++ b/src/server/shared/Networking/Socket.h
@@ -0,0 +1,252 @@
+/*
+ * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __SOCKET_H__
+#define __SOCKET_H__
+
+#include "MessageBuffer.h"
+#include "Log.h"
+#include <atomic>
+#include <vector>
+#include <mutex>
+#include <queue>
+#include <memory>
+#include <functional>
+#include <type_traits>
+#include <boost/asio/ip/tcp.hpp>
+#include <boost/asio/write.hpp>
+#include <boost/asio/read.hpp>
+
+using boost::asio::ip::tcp;
+
+#define READ_BLOCK_SIZE 4096
+
+template<class T, class PacketType>
+class Socket : public std::enable_shared_from_this<T>
+{
+ typedef typename std::conditional<std::is_pointer<PacketType>::value, PacketType, PacketType const&>::type WritePacketType;
+
+public:
+ Socket(tcp::socket&& socket, std::size_t headerSize) : _socket(std::move(socket)), _remoteAddress(_socket.remote_endpoint().address()),
+ _remotePort(_socket.remote_endpoint().port()), _readHeaderBuffer(), _readDataBuffer(), _closed(false), _closing(false)
+ {
+ _readHeaderBuffer.Grow(headerSize);
+ }
+
+ virtual ~Socket()
+ {
+ boost::system::error_code error;
+ _socket.close(error);
+
+ while (!_writeQueue.empty())
+ {
+ DeletePacket(_writeQueue.front());
+ _writeQueue.pop();
+ }
+ }
+
+ virtual void Start() = 0;
+
+ boost::asio::ip::address GetRemoteIpAddress() const
+ {
+ return _remoteAddress;
+ }
+
+ uint16 GetRemotePort() const
+ {
+ return _remotePort;
+ }
+
+ void AsyncReadHeader()
+ {
+ if (!IsOpen())
+ return;
+
+ _readHeaderBuffer.ResetWritePointer();
+ _readDataBuffer.Reset();
+
+ AsyncReadMissingHeaderData();
+ }
+
+ void AsyncReadData(std::size_t size)
+ {
+ if (!IsOpen())
+ return;
+
+ if (!size)
+ {
+ // if this is a packet with 0 length body just invoke handler directly
+ ReadDataHandler();
+ return;
+ }
+
+ _readDataBuffer.Grow(size);
+ AsyncReadMissingData();
+ }
+
+ void ReadData(std::size_t size)
+ {
+ if (!IsOpen())
+ return;
+
+ boost::system::error_code error;
+
+ _readDataBuffer.Grow(size);
+
+ std::size_t bytesRead = boost::asio::read(_socket, boost::asio::buffer(_readDataBuffer.GetWritePointer(), size), error);
+
+ _readDataBuffer.WriteCompleted(bytesRead);
+
+ if (error || !_readDataBuffer.IsMessageReady())
+ {
+ TC_LOG_DEBUG("network", "Socket::ReadData: %s errored with: %i (%s)", GetRemoteIpAddress().to_string().c_str(), error.value(),
+ error.message().c_str());
+
+ CloseSocket();
+ }
+ }
+
+ void AsyncWrite(WritePacketType data)
+ {
+ boost::asio::async_write(_socket, boost::asio::buffer(data), std::bind(&Socket<T, PacketType>::WriteHandler, this->shared_from_this(),
+ std::placeholders::_1, std::placeholders::_2));
+ }
+
+ bool IsOpen() const { return !_closed && !_closing; }
+
+ virtual void CloseSocket()
+ {
+ if (_closed.exchange(true))
+ return;
+
+ boost::system::error_code shutdownError;
+ _socket.shutdown(boost::asio::socket_base::shutdown_send, shutdownError);
+ if (shutdownError)
+ TC_LOG_DEBUG("network", "Socket::CloseSocket: %s errored when shutting down socket: %i (%s)", GetRemoteIpAddress().to_string().c_str(),
+ shutdownError.value(), shutdownError.message().c_str());
+ }
+
+ /// Marks the socket for closing after write buffer becomes empty
+ void DelayedCloseSocket() { _closing = true; }
+
+ virtual bool IsHeaderReady() const { return _readHeaderBuffer.IsMessageReady(); }
+ virtual bool IsDataReady() const { return _readDataBuffer.IsMessageReady(); }
+
+ uint8* GetHeaderBuffer() { return _readHeaderBuffer.Data(); }
+ uint8* GetDataBuffer() { return _readDataBuffer.Data(); }
+
+ size_t GetHeaderSize() const { return _readHeaderBuffer.GetReadyDataSize(); }
+ size_t GetDataSize() const { return _readDataBuffer.GetReadyDataSize(); }
+
+ MessageBuffer&& MoveHeader() { return std::move(_readHeaderBuffer); }
+ MessageBuffer&& MoveData() { return std::move(_readDataBuffer); }
+
+protected:
+ virtual void ReadHeaderHandler() = 0;
+ virtual void ReadDataHandler() = 0;
+
+ std::mutex _writeLock;
+ std::queue<PacketType> _writeQueue;
+
+private:
+ void AsyncReadMissingHeaderData()
+ {
+ _socket.async_read_some(boost::asio::buffer(_readHeaderBuffer.GetWritePointer(), std::min<std::size_t>(READ_BLOCK_SIZE, _readHeaderBuffer.GetMissingSize())),
+ std::bind(&Socket<T, PacketType>::ReadHeaderHandlerInternal, this->shared_from_this(), std::placeholders::_1, std::placeholders::_2));
+ }
+
+ void AsyncReadMissingData()
+ {
+ _socket.async_read_some(boost::asio::buffer(_readDataBuffer.GetWritePointer(), std::min<std::size_t>(READ_BLOCK_SIZE, _readDataBuffer.GetMissingSize())),
+ std::bind(&Socket<T, PacketType>::ReadDataHandlerInternal, this->shared_from_this(), std::placeholders::_1, std::placeholders::_2));
+ }
+
+ void ReadHeaderHandlerInternal(boost::system::error_code error, size_t transferredBytes)
+ {
+ if (error)
+ {
+ CloseSocket();
+ return;
+ }
+
+ _readHeaderBuffer.WriteCompleted(transferredBytes);
+ if (!IsHeaderReady())
+ {
+ // incomplete, read more
+ AsyncReadMissingHeaderData();
+ return;
+ }
+
+ ReadHeaderHandler();
+ }
+
+ void ReadDataHandlerInternal(boost::system::error_code error, size_t transferredBytes)
+ {
+ if (error)
+ {
+ CloseSocket();
+ return;
+ }
+
+ _readDataBuffer.WriteCompleted(transferredBytes);
+ if (!IsDataReady())
+ {
+ // incomplete, read more
+ AsyncReadMissingData();
+ return;
+ }
+
+ ReadDataHandler();
+ }
+
+ void WriteHandler(boost::system::error_code error, size_t /*transferedBytes*/)
+ {
+ if (!error)
+ {
+ std::lock_guard<std::mutex> deleteGuard(_writeLock);
+
+ DeletePacket(_writeQueue.front());
+ _writeQueue.pop();
+
+ if (!_writeQueue.empty())
+ AsyncWrite(_writeQueue.front());
+ else if (_closing)
+ CloseSocket();
+ }
+ else
+ CloseSocket();
+ }
+
+ template<typename Q = PacketType>
+ typename std::enable_if<std::is_pointer<Q>::value>::type DeletePacket(PacketType& packet) { delete packet; }
+
+ template<typename Q = PacketType>
+ typename std::enable_if<!std::is_pointer<Q>::value>::type DeletePacket(PacketType const& /*packet*/) { }
+
+ tcp::socket _socket;
+
+ boost::asio::ip::address _remoteAddress;
+ uint16 _remotePort;
+
+ MessageBuffer _readHeaderBuffer;
+ MessageBuffer _readDataBuffer;
+
+ std::atomic<bool> _closed;
+ std::atomic<bool> _closing;
+};
+
+#endif // __SOCKET_H__
diff --git a/src/server/shared/Packets/ByteBuffer.cpp b/src/server/shared/Packets/ByteBuffer.cpp
index b8cb5215665..3785d1c29fa 100644
--- a/src/server/shared/Packets/ByteBuffer.cpp
+++ b/src/server/shared/Packets/ByteBuffer.cpp
@@ -17,21 +17,24 @@
*/
#include "ByteBuffer.h"
+#include "MessageBuffer.h"
#include "Common.h"
#include "Log.h"
-#include <ace/Stack_Trace.h>
#include <sstream>
+ByteBuffer::ByteBuffer(MessageBuffer&& buffer) : _rpos(0), _wpos(0), _storage(buffer.Move())
+{
+}
+
ByteBufferPositionException::ByteBufferPositionException(bool add, size_t pos,
size_t size, size_t valueSize)
{
std::ostringstream ss;
- ACE_Stack_Trace trace;
ss << "Attempted to " << (add ? "put" : "get") << " value with size: "
<< valueSize << " in ByteBuffer (pos: " << pos << " size: " << size
- << ")\n\n" << trace.c_str();
+ << ")";
message().assign(ss.str());
}
@@ -40,12 +43,10 @@ ByteBufferSourceException::ByteBufferSourceException(size_t pos, size_t size,
size_t valueSize)
{
std::ostringstream ss;
- ACE_Stack_Trace trace;
ss << "Attempted to put a "
<< (valueSize > 0 ? "NULL-pointer" : "zero-sized value")
- << " in ByteBuffer (pos: " << pos << " size: " << size << ")\n\n"
- << trace.c_str();
+ << " in ByteBuffer (pos: " << pos << " size: " << size << ")";
message().assign(ss.str());
}
@@ -73,8 +74,8 @@ void ByteBuffer::textlike() const
o << "STORAGE_SIZE: " << size();
for (uint32 i = 0; i < size(); ++i)
{
- char buf[1];
- snprintf(buf, 1, "%c", read<uint8>(i));
+ char buf[2];
+ snprintf(buf, 2, "%c", read<uint8>(i));
o << buf;
}
o << " ";
@@ -94,7 +95,7 @@ void ByteBuffer::hexlike() const
for (uint32 i = 0; i < size(); ++i)
{
char buf[3];
- snprintf(buf, 1, "%2X ", read<uint8>(i));
+ snprintf(buf, 3, "%2X ", read<uint8>(i));
if ((i == (j * 8)) && ((i != (k * 16))))
{
o << "| ";
diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h
index 33d33519c8f..046fdc0c8e9 100644
--- a/src/server/shared/Packets/ByteBuffer.h
+++ b/src/server/shared/Packets/ByteBuffer.h
@@ -22,8 +22,8 @@
#include "Define.h"
#include "Errors.h"
#include "ByteConverter.h"
+#include "Util.h"
-#include <ace/OS_NS_time.h>
#include <exception>
#include <list>
#include <map>
@@ -31,6 +31,10 @@
#include <vector>
#include <cstring>
#include <time.h>
+#include <cmath>
+#include <boost/asio/buffer.hpp>
+
+class MessageBuffer;
// Root of ByteBuffer exception hierarchy
class ByteBufferException : public std::exception
@@ -38,7 +42,7 @@ class ByteBufferException : public std::exception
public:
~ByteBufferException() throw() { }
- char const* what() const throw() { return msg_.c_str(); }
+ char const* what() const throw() override { return msg_.c_str(); }
protected:
std::string & message() throw() { return msg_; }
@@ -79,12 +83,28 @@ class ByteBuffer
_storage.reserve(reserve);
}
- // copy constructor
- ByteBuffer(const ByteBuffer &buf) : _rpos(buf._rpos), _wpos(buf._wpos),
- _storage(buf._storage)
+ ByteBuffer(ByteBuffer&& buf) : _rpos(buf._rpos), _wpos(buf._wpos),
+ _storage(std::move(buf._storage)) { }
+
+ ByteBuffer(ByteBuffer const& right) : _rpos(right._rpos), _wpos(right._wpos),
+ _storage(right._storage) { }
+
+ ByteBuffer(MessageBuffer&& buffer);
+
+ ByteBuffer& operator=(ByteBuffer const& right)
{
+ if (this != &right)
+ {
+ _rpos = right._rpos;
+ _wpos = right._wpos;
+ _storage = right._storage;
+ }
+
+ return *this;
}
+ virtual ~ByteBuffer() { }
+
void clear()
{
_storage.clear();
@@ -239,12 +259,16 @@ class ByteBuffer
ByteBuffer &operator>>(float &value)
{
value = read<float>();
+ if (!std::isfinite(value))
+ throw ByteBufferException();
return *this;
}
ByteBuffer &operator>>(double &value)
{
value = read<double>();
+ if (!std::isfinite(value))
+ throw ByteBufferException();
return *this;
}
@@ -375,9 +399,19 @@ class ByteBuffer
return *this;
}
- uint8 * contents() { return &_storage[0]; }
+ uint8* contents()
+ {
+ if (_storage.empty())
+ throw ByteBufferException();
+ return _storage.data();
+ }
- const uint8 *contents() const { return &_storage[0]; }
+ uint8 const* contents() const
+ {
+ if (_storage.empty())
+ throw ByteBufferException();
+ return _storage.data();
+ }
size_t size() const { return _storage.size(); }
bool empty() const { return _storage.empty(); }
@@ -459,7 +493,7 @@ class ByteBuffer
void AppendPackedTime(time_t time)
{
tm lt;
- ACE_OS::localtime_r(&time, &lt);
+ localtime_r(&time, &lt);
append<uint32>((lt.tm_year - 100) << 24 | lt.tm_mon << 20 | (lt.tm_mday - 1) << 14 | lt.tm_wday << 11 | lt.tm_hour << 6 | lt.tm_min);
}
@@ -591,5 +625,15 @@ inline void ByteBuffer::read_skip<std::string>()
read_skip<char*>();
}
-#endif
+namespace boost
+{
+ namespace asio
+ {
+ inline const_buffers_1 buffer(ByteBuffer const& packet)
+ {
+ return buffer(packet.contents(), packet.size());
+ }
+ }
+}
+#endif
diff --git a/src/server/shared/Packets/WorldPacket.h b/src/server/shared/Packets/WorldPacket.h
index 6703c5ed2ea..848a00739fe 100644
--- a/src/server/shared/Packets/WorldPacket.h
+++ b/src/server/shared/Packets/WorldPacket.h
@@ -29,12 +29,30 @@ class WorldPacket : public ByteBuffer
WorldPacket() : ByteBuffer(0), m_opcode(0)
{
}
+
explicit WorldPacket(uint16 opcode, size_t res=200) : ByteBuffer(res), m_opcode(opcode) { }
- // copy constructor
- WorldPacket(const WorldPacket &packet) : ByteBuffer(packet), m_opcode(packet.m_opcode)
+
+ WorldPacket(WorldPacket&& packet) : ByteBuffer(std::move(packet)), m_opcode(packet.m_opcode)
+ {
+ }
+
+ WorldPacket(WorldPacket const& right) : ByteBuffer(right), m_opcode(right.m_opcode)
+ {
+ }
+
+ WorldPacket& operator=(WorldPacket const& right)
{
+ if (this != &right)
+ {
+ m_opcode = right.m_opcode;
+ ByteBuffer::operator =(right);
+ }
+
+ return *this;
}
+ WorldPacket(uint16 opcode, MessageBuffer&& buffer) : ByteBuffer(std::move(buffer)), m_opcode(opcode) { }
+
void Initialize(uint16 opcode, size_t newres=200)
{
clear();
@@ -48,5 +66,5 @@ class WorldPacket : public ByteBuffer
protected:
uint16 m_opcode;
};
-#endif
+#endif
diff --git a/src/server/shared/Threading/Callback.h b/src/server/shared/Threading/Callback.h
index b074ff49c3c..b462fce25d5 100644
--- a/src/server/shared/Threading/Callback.h
+++ b/src/server/shared/Threading/Callback.h
@@ -18,17 +18,14 @@
#ifndef _CALLBACK_H
#define _CALLBACK_H
-#include <ace/Future.h>
-#include <ace/Future_Set.h>
+#include <future>
#include "QueryResult.h"
-typedef ACE_Future<QueryResult> QueryResultFuture;
-typedef ACE_Future<PreparedQueryResult> PreparedQueryResultFuture;
+typedef std::future<QueryResult> QueryResultFuture;
+typedef std::promise<QueryResult> QueryResultPromise;
+typedef std::future<PreparedQueryResult> PreparedQueryResultFuture;
+typedef std::promise<PreparedQueryResult> PreparedQueryResultPromise;
-/*! A simple template using ACE_Future to manage callbacks from the thread and object that
- issued the request. <ParamType> is variable type of parameter that is used as parameter
- for the callback function.
-*/
#define CALLBACK_STAGE_INVALID uint8(-1)
template <typename Result, typename ParamType, bool chain = false>
@@ -38,29 +35,29 @@ class QueryCallback
QueryCallback() : _param(), _stage(chain ? 0 : CALLBACK_STAGE_INVALID) { }
//! The parameter of this function should be a resultset returned from either .AsyncQuery or .AsyncPQuery
- void SetFutureResult(ACE_Future<Result> value)
+ void SetFutureResult(std::future<Result> value)
{
- _result = value;
+ _result = std::move(value);
}
- ACE_Future<Result> GetFutureResult()
+ std::future<Result>& GetFutureResult()
{
return _result;
}
int IsReady()
{
- return _result.ready();
+ return _result.valid() && _result.wait_for(std::chrono::seconds(0)) == std::future_status::ready;
}
void GetResult(Result& res)
{
- _result.get(res);
+ res = _result.get();
}
void FreeResult()
{
- _result.cancel();
+ // Nothing to do here, the constructor of std::future will take care of the cleanup
}
void SetParam(ParamType value)
@@ -106,9 +103,12 @@ class QueryCallback
}
private:
- ACE_Future<Result> _result;
+ std::future<Result> _result;
ParamType _param;
uint8 _stage;
+
+ QueryCallback(QueryCallback const& right) = delete;
+ QueryCallback& operator=(QueryCallback const& right) = delete;
};
template <typename Result, typename ParamType1, typename ParamType2, bool chain = false>
@@ -118,29 +118,29 @@ class QueryCallback_2
QueryCallback_2() : _stage(chain ? 0 : CALLBACK_STAGE_INVALID) { }
//! The parameter of this function should be a resultset returned from either .AsyncQuery or .AsyncPQuery
- void SetFutureResult(ACE_Future<Result> value)
+ void SetFutureResult(std::future<Result> value)
{
- _result = value;
+ _result = std::move(value);
}
- ACE_Future<Result> GetFutureResult()
+ std::future<Result>& GetFutureResult()
{
return _result;
}
int IsReady()
{
- return _result.ready();
+ return _result.valid() && _result.wait_for(std::chrono::seconds(0)) == std::future_status::ready;
}
void GetResult(Result& res)
{
- _result.get(res);
+ res = _result.get();
}
void FreeResult()
{
- _result.cancel();
+ // Nothing to do here, the constructor of std::future will take care of the cleanup
}
void SetFirstParam(ParamType1 value)
@@ -197,10 +197,13 @@ class QueryCallback_2
}
private:
- ACE_Future<Result> _result;
+ std::future<Result> _result;
ParamType1 _param_1;
ParamType2 _param_2;
uint8 _stage;
+
+ QueryCallback_2(QueryCallback_2 const& right) = delete;
+ QueryCallback_2& operator=(QueryCallback_2 const& right) = delete;
};
-#endif \ No newline at end of file
+#endif
diff --git a/src/server/shared/Threading/DelayExecutor.cpp b/src/server/shared/Threading/DelayExecutor.cpp
deleted file mode 100644
index ba8a19429b2..00000000000
--- a/src/server/shared/Threading/DelayExecutor.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-#include <ace/Singleton.h>
-#include <ace/Thread_Mutex.h>
-#include <ace/Log_Msg.h>
-
-#include "DelayExecutor.h"
-
-DelayExecutor* DelayExecutor::instance()
-{
- return ACE_Singleton<DelayExecutor, ACE_Thread_Mutex>::instance();
-}
-
-DelayExecutor::DelayExecutor()
- : pre_svc_hook_(0), post_svc_hook_(0), activated_(false) { }
-
-DelayExecutor::~DelayExecutor()
-{
- if (pre_svc_hook_)
- delete pre_svc_hook_;
-
- if (post_svc_hook_)
- delete post_svc_hook_;
-
- deactivate();
-}
-
-int DelayExecutor::deactivate()
-{
- if (!activated())
- return -1;
-
- activated(false);
- queue_.queue()->deactivate();
- wait();
-
- return 0;
-}
-
-int DelayExecutor::svc()
-{
- if (pre_svc_hook_)
- pre_svc_hook_->call();
-
- for (;;)
- {
- ACE_Method_Request* rq = queue_.dequeue();
-
- if (!rq)
- break;
-
- rq->call();
- delete rq;
- }
-
- if (post_svc_hook_)
- post_svc_hook_->call();
-
- return 0;
-}
-
-int DelayExecutor::start(int num_threads, ACE_Method_Request* pre_svc_hook, ACE_Method_Request* post_svc_hook)
-{
- if (activated())
- return -1;
-
- if (num_threads < 1)
- return -1;
-
- if (pre_svc_hook_)
- delete pre_svc_hook_;
-
- if (post_svc_hook_)
- delete post_svc_hook_;
-
- pre_svc_hook_ = pre_svc_hook;
- post_svc_hook_ = post_svc_hook;
-
- queue_.queue()->activate();
-
- if (ACE_Task_Base::activate(THR_NEW_LWP | THR_JOINABLE | THR_INHERIT_SCHED, num_threads) == -1)
- return -1;
-
- activated(true);
-
- return true;
-}
-
-int DelayExecutor::execute(ACE_Method_Request* new_req)
-{
- if (new_req == NULL)
- return -1;
-
- if (queue_.enqueue(new_req, (ACE_Time_Value*)&ACE_Time_Value::zero) == -1)
- {
- delete new_req;
- ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("(%t) %p\n"), ACE_TEXT("DelayExecutor::execute enqueue")), -1);
- }
-
- return 0;
-}
-
-bool DelayExecutor::activated()
-{
- return activated_;
-}
-
-void DelayExecutor::activated(bool s)
-{
- activated_ = s;
-}
diff --git a/src/server/shared/Threading/DelayExecutor.h b/src/server/shared/Threading/DelayExecutor.h
deleted file mode 100644
index 5eaaacdb98b..00000000000
--- a/src/server/shared/Threading/DelayExecutor.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef _M_DELAY_EXECUTOR_H
-#define _M_DELAY_EXECUTOR_H
-
-#include <ace/Task.h>
-#include <ace/Activation_Queue.h>
-#include <ace/Method_Request.h>
-
-class DelayExecutor : protected ACE_Task_Base
-{
- public:
-
- DelayExecutor();
- virtual ~DelayExecutor();
-
- static DelayExecutor* instance();
-
- int execute(ACE_Method_Request* new_req);
-
- int start(int num_threads = 1, ACE_Method_Request* pre_svc_hook = NULL, ACE_Method_Request* post_svc_hook = NULL);
-
- int deactivate();
-
- bool activated();
-
- virtual int svc();
-
- private:
-
- ACE_Activation_Queue queue_;
- ACE_Method_Request* pre_svc_hook_;
- ACE_Method_Request* post_svc_hook_;
- bool activated_;
-
- void activated(bool s);
-};
-
-#endif // _M_DELAY_EXECUTOR_H
diff --git a/src/server/shared/Threading/LockedQueue.h b/src/server/shared/Threading/LockedQueue.h
index 5709724c9a2..bbd60cb7760 100644
--- a/src/server/shared/Threading/LockedQueue.h
+++ b/src/server/shared/Threading/LockedQueue.h
@@ -19,140 +19,126 @@
#ifndef LOCKEDQUEUE_H
#define LOCKEDQUEUE_H
-#include <ace/Guard_T.h>
-#include <ace/Thread_Mutex.h>
#include <deque>
-#include <assert.h>
-#include "Debugging/Errors.h"
+#include <mutex>
-namespace ACE_Based
+template <class T, typename StorageType = std::deque<T> >
+class LockedQueue
{
- template <class T, class LockType, typename StorageType=std::deque<T> >
- class LockedQueue
+ //! Lock access to the queue.
+ std::mutex _lock;
+
+ //! Storage backing the queue.
+ StorageType _queue;
+
+ //! Cancellation flag.
+ volatile bool _canceled;
+
+public:
+
+ //! Create a LockedQueue.
+ LockedQueue()
+ : _canceled(false)
{
- //! Lock access to the queue.
- LockType _lock;
+ }
- //! Storage backing the queue.
- StorageType _queue;
+ //! Destroy a LockedQueue.
+ virtual ~LockedQueue()
+ {
+ }
- //! Cancellation flag.
- volatile bool _canceled;
+ //! Adds an item to the queue.
+ void add(const T& item)
+ {
+ lock();
+
+ _queue.push_back(item);
- public:
+ unlock();
+ }
+
+ //! Gets the next result in the queue, if any.
+ bool next(T& result)
+ {
+ std::lock_guard<std::mutex> lock(_lock);
- //! Create a LockedQueue.
- LockedQueue()
- : _canceled(false)
- {
- }
+ if (_queue.empty())
+ return false;
- //! Destroy a LockedQueue.
- virtual ~LockedQueue()
- {
- }
-
- //! Adds an item to the queue.
- void add(const T& item)
- {
- lock();
-
- //ASSERT(!this->_canceled);
- // throw Cancellation_Exception();
-
- _queue.push_back(item);
-
- unlock();
- }
-
- //! Gets the next result in the queue, if any.
- bool next(T& result)
- {
- // ACE_Guard<LockType> g(this->_lock);
- ACE_GUARD_RETURN (LockType, g, this->_lock, false);
-
- if (_queue.empty())
- return false;
-
- //ASSERT (!_queue.empty() || !this->_canceled);
- // throw Cancellation_Exception();
- result = _queue.front();
- _queue.pop_front();
-
- return true;
- }
-
- template<class Checker>
- bool next(T& result, Checker& check)
- {
- ACE_Guard<LockType> g(this->_lock);
-
- if (_queue.empty())
- return false;
-
- result = _queue.front();
- if (!check.Process(result))
- return false;
-
- _queue.pop_front();
- return true;
- }
-
- //! Peeks at the top of the queue. Check if the queue is empty before calling! Remember to unlock after use if autoUnlock == false.
- T& peek(bool autoUnlock = false)
- {
- lock();
-
- T& result = _queue.front();
-
- if (autoUnlock)
- unlock();
-
- return result;
- }
-
- //! Cancels the queue.
- void cancel()
- {
- lock();
-
- _canceled = true;
-
- unlock();
- }
-
- //! Checks if the queue is cancelled.
- bool cancelled()
- {
- ACE_Guard<LockType> g(this->_lock);
- return _canceled;
- }
-
- //! Locks the queue for access.
- void lock()
- {
- this->_lock.acquire();
- }
-
- //! Unlocks the queue.
- void unlock()
- {
- this->_lock.release();
- }
-
- ///! Calls pop_front of the queue
- void pop_front()
- {
- ACE_GUARD (LockType, g, this->_lock);
- _queue.pop_front();
- }
-
- ///! Checks if we're empty or not with locks held
- bool empty()
- {
- ACE_GUARD_RETURN (LockType, g, this->_lock, false);
- return _queue.empty();
- }
- };
-}
+ result = _queue.front();
+ _queue.pop_front();
+
+ return true;
+ }
+
+ template<class Checker>
+ bool next(T& result, Checker& check)
+ {
+ std::lock_guard<std::mutex> lock(_lock);
+
+ if (_queue.empty())
+ return false;
+
+ result = _queue.front();
+ if (!check.Process(result))
+ return false;
+
+ _queue.pop_front();
+ return true;
+ }
+
+ //! Peeks at the top of the queue. Check if the queue is empty before calling! Remember to unlock after use if autoUnlock == false.
+ T& peek(bool autoUnlock = false)
+ {
+ lock();
+
+ T& result = _queue.front();
+
+ if (autoUnlock)
+ unlock();
+
+ return result;
+ }
+
+ //! Cancels the queue.
+ void cancel()
+ {
+ std::lock_guard<std::mutex> lock(_lock);
+
+ _canceled = true;
+ }
+
+ //! Checks if the queue is cancelled.
+ bool cancelled()
+ {
+ std::lock_guard<std::mutex> lock(_lock);
+ return _canceled;
+ }
+
+ //! Locks the queue for access.
+ void lock()
+ {
+ this->_lock.lock();
+ }
+
+ //! Unlocks the queue.
+ void unlock()
+ {
+ this->_lock.unlock();
+ }
+
+ ///! Calls pop_front of the queue
+ void pop_front()
+ {
+ std::lock_guard<std::mutex> lock(_lock);
+ _queue.pop_front();
+ }
+
+ ///! Checks if we're empty or not with locks held
+ bool empty()
+ {
+ std::lock_guard<std::mutex> lock(_lock);
+ return _queue.empty();
+ }
+};
#endif
diff --git a/src/server/shared/Threading/ProcessPriority.h b/src/server/shared/Threading/ProcessPriority.h
new file mode 100644
index 00000000000..23238c94ace
--- /dev/null
+++ b/src/server/shared/Threading/ProcessPriority.h
@@ -0,0 +1,105 @@
+/*
+* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _PROCESSPRIO_H
+#define _PROCESSPRIO_H
+
+#include "Configuration/Config.h"
+
+#ifdef __linux__
+#include <sched.h>
+#include <sys/resource.h>
+#define PROCESS_HIGH_PRIORITY -15 // [-20, 19], default is 0
+#endif
+
+void SetProcessPriority(const std::string logChannel)
+{
+// Suppresses Mac OS X Warning since logChannel isn't used.
+#if PLATFORM_APPLE
+ (void)logChannel;
+#endif
+
+#if defined(_WIN32) || defined(__linux__)
+
+ ///- Handle affinity for multiple processors and process priority
+ uint32 affinity = sConfigMgr->GetIntDefault("UseProcessors", 0);
+ bool highPriority = sConfigMgr->GetBoolDefault("ProcessPriority", false);
+
+#ifdef _WIN32 // Windows
+
+ HANDLE hProcess = GetCurrentProcess();
+ if (affinity > 0)
+ {
+ ULONG_PTR appAff;
+ ULONG_PTR sysAff;
+
+ if (GetProcessAffinityMask(hProcess, &appAff, &sysAff))
+ {
+ // remove non accessible processors
+ ULONG_PTR currentAffinity = affinity & appAff;
+
+ if (!currentAffinity)
+ TC_LOG_ERROR(logChannel, "Processors marked in UseProcessors bitmask (hex) %x are not accessible. Accessible processors bitmask (hex): %x", affinity, appAff);
+ else if (SetProcessAffinityMask(hProcess, currentAffinity))
+ TC_LOG_INFO(logChannel, "Using processors (bitmask, hex): %x", currentAffinity);
+ else
+ TC_LOG_ERROR(logChannel, "Can't set used processors (hex): %x", currentAffinity);
+ }
+ }
+
+ if (highPriority)
+ {
+ if (SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS))
+ TC_LOG_INFO(logChannel, "Process priority class set to HIGH");
+ else
+ TC_LOG_ERROR(logChannel, "Can't set process priority class.");
+ }
+
+#else // Linux
+
+ if (affinity > 0)
+ {
+ cpu_set_t mask;
+ CPU_ZERO(&mask);
+
+ for (unsigned int i = 0; i < sizeof(affinity) * 8; ++i)
+ if (affinity & (1 << i))
+ CPU_SET(i, &mask);
+
+ if (sched_setaffinity(0, sizeof(mask), &mask))
+ TC_LOG_ERROR(logChannel, "Can't set used processors (hex): %x, error: %s", affinity, strerror(errno));
+ else
+ {
+ CPU_ZERO(&mask);
+ sched_getaffinity(0, sizeof(mask), &mask);
+ TC_LOG_INFO(logChannel, "Using processors (bitmask, hex): %lx", *(__cpu_mask*)(&mask));
+ }
+ }
+
+ if (highPriority)
+ {
+ if (setpriority(PRIO_PROCESS, 0, PROCESS_HIGH_PRIORITY))
+ TC_LOG_ERROR(logChannel, "Can't set process priority class, error: %s", strerror(errno));
+ else
+ TC_LOG_INFO(logChannel, "Process priority class set to %i", getpriority(PRIO_PROCESS, 0));
+ }
+
+#endif
+#endif
+}
+
+#endif
diff --git a/src/server/shared/Threading/ProducerConsumerQueue.h b/src/server/shared/Threading/ProducerConsumerQueue.h
new file mode 100644
index 00000000000..a76b8b0b5c0
--- /dev/null
+++ b/src/server/shared/Threading/ProducerConsumerQueue.h
@@ -0,0 +1,111 @@
+/*
+* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _PCQ_H
+#define _PCQ_H
+
+#include <condition_variable>
+#include <mutex>
+#include <queue>
+#include <atomic>
+#include <type_traits>
+
+template <typename T>
+class ProducerConsumerQueue
+{
+private:
+ std::mutex _queueLock;
+ std::queue<T> _queue;
+ std::condition_variable _condition;
+ std::atomic<bool> _shutdown;
+
+public:
+
+ ProducerConsumerQueue<T>() : _shutdown(false) { }
+
+ void Push(const T& value)
+ {
+ std::lock_guard<std::mutex> lock(_queueLock);
+ _queue.push(std::move(value));
+
+ _condition.notify_one();
+ }
+
+ bool Empty()
+ {
+ std::lock_guard<std::mutex> lock(_queueLock);
+
+ return _queue.empty();
+ }
+
+ bool Pop(T& value)
+ {
+ std::lock_guard<std::mutex> lock(_queueLock);
+
+ if (_queue.empty() || _shutdown)
+ return false;
+
+ value = _queue.front();
+
+ _queue.pop();
+
+ return true;
+ }
+
+ void WaitAndPop(T& value)
+ {
+ std::unique_lock<std::mutex> lock(_queueLock);
+
+ _condition.wait(lock, [this]() { return !_queue.empty() || _shutdown; });
+
+ if (_queue.empty() || _shutdown)
+ return;
+
+ value = _queue.front();
+
+ _queue.pop();
+ }
+
+ void Cancel()
+ {
+ _queueLock.lock();
+
+ while (!_queue.empty())
+ {
+ T& value = _queue.front();
+
+ DeleteQueuedObject(value);
+
+ _queue.pop();
+ }
+
+ _shutdown = true;
+
+ _queueLock.unlock();
+
+ _condition.notify_all();
+ }
+
+private:
+ template<typename E = T>
+ typename std::enable_if<std::is_pointer<E>::value>::type DeleteQueuedObject(E& obj) { delete obj; }
+
+ template<typename E = T>
+ typename std::enable_if<!std::is_pointer<E>::value>::type DeleteQueuedObject(E const& /*packet*/) { }
+};
+
+#endif
diff --git a/src/server/shared/Threading/Threading.cpp b/src/server/shared/Threading/Threading.cpp
deleted file mode 100644
index f67a985943a..00000000000
--- a/src/server/shared/Threading/Threading.cpp
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2008 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "Threading.h"
-#include "Errors.h"
-#include <ace/OS_NS_unistd.h>
-#include <ace/Sched_Params.h>
-#include <vector>
-
-using namespace ACE_Based;
-
-ThreadPriority::ThreadPriority()
-{
- for (int i = Idle; i < MAXPRIORITYNUM; ++i)
- m_priority[i] = ACE_THR_PRI_OTHER_DEF;
-
- m_priority[Idle] = ACE_Sched_Params::priority_min(ACE_SCHED_OTHER);
- m_priority[Realtime] = ACE_Sched_Params::priority_max(ACE_SCHED_OTHER);
-
- std::vector<int> _tmp;
-
- ACE_Sched_Params::Policy _policy = ACE_SCHED_OTHER;
- ACE_Sched_Priority_Iterator pr_iter(_policy);
-
- while (pr_iter.more())
- {
- _tmp.push_back(pr_iter.priority());
- pr_iter.next();
- }
-
- ASSERT (!_tmp.empty());
-
- if (_tmp.size() >= MAXPRIORITYNUM)
- {
- const size_t max_pos = _tmp.size();
- size_t min_pos = 1;
- size_t norm_pos = 0;
- for (size_t i = 0; i < max_pos; ++i)
- {
- if (_tmp[i] == ACE_THR_PRI_OTHER_DEF)
- {
- norm_pos = i + 1;
- break;
- }
- }
-
- // since we have only 7(seven) values in enum Priority
- // and 3 we know already (Idle, Normal, Realtime) so
- // we need to split each list [Idle...Normal] and [Normal...Realtime]
- // into pieces
- const size_t _divider = 4;
- size_t _div = (norm_pos - min_pos) / _divider;
- if (_div == 0)
- _div = 1;
-
- min_pos = (norm_pos - 1);
-
- m_priority[Low] = _tmp[min_pos -= _div];
- m_priority[Lowest] = _tmp[min_pos -= _div ];
-
- _div = (max_pos - norm_pos) / _divider;
- if (_div == 0)
- _div = 1;
-
- min_pos = norm_pos - 1;
-
- m_priority[High] = _tmp[min_pos += _div];
- m_priority[Highest] = _tmp[min_pos += _div];
- }
-}
-
-int ThreadPriority::getPriority(Priority p) const
-{
- if (p < Idle)
- p = Idle;
-
- if (p > Realtime)
- p = Realtime;
-
- return m_priority[p];
-}
-
-#define THREADFLAG (THR_NEW_LWP | THR_SCHED_DEFAULT| THR_JOINABLE)
-
-Thread::Thread(): m_iThreadId(0), m_hThreadHandle(0), m_task(0)
-{
-
-}
-
-Thread::Thread(Runnable* instance): m_iThreadId(0), m_hThreadHandle(0), m_task(instance)
-{
- // register reference to m_task to prevent it deeltion until destructor
- if (m_task)
- m_task->incReference();
-
- bool _start = start();
- ASSERT (_start);
-}
-
-Thread::~Thread()
-{
- //Wait();
-
- // deleted runnable object (if no other references)
- if (m_task)
- m_task->decReference();
-}
-
-//initialize Thread's class static member
-Thread::ThreadStorage Thread::m_ThreadStorage;
-ThreadPriority Thread::m_TpEnum;
-
-bool Thread::start()
-{
- if (m_task == 0 || m_iThreadId != 0)
- return false;
-
- // incRef before spawing the thread, otherwise Thread::ThreadTask() might call decRef and delete m_task
- m_task->incReference();
-
- bool res = (ACE_Thread::spawn(&Thread::ThreadTask, (void*)m_task, THREADFLAG, &m_iThreadId, &m_hThreadHandle) == 0);
-
- if (!res)
- m_task->decReference();
-
- return res;
-}
-
-bool Thread::wait()
-{
- if (!m_hThreadHandle || !m_task)
- return false;
-
- ACE_THR_FUNC_RETURN _value = ACE_THR_FUNC_RETURN(-1);
- int _res = ACE_Thread::join(m_hThreadHandle, &_value);
-
- m_iThreadId = 0;
- m_hThreadHandle = 0;
-
- return (_res == 0);
-}
-
-void Thread::destroy()
-{
- if (!m_iThreadId || !m_task)
- return;
-
- if (ACE_Thread::kill(m_iThreadId, -1) != 0)
- return;
-
- m_iThreadId = 0;
- m_hThreadHandle = 0;
-
- // reference set at ACE_Thread::spawn
- m_task->decReference();
-}
-
-void Thread::suspend()
-{
- ACE_Thread::suspend(m_hThreadHandle);
-}
-
-void Thread::resume()
-{
- ACE_Thread::resume(m_hThreadHandle);
-}
-
-ACE_THR_FUNC_RETURN Thread::ThreadTask(void * param)
-{
- Runnable* _task = (Runnable*)param;
- _task->run();
-
- // task execution complete, free referecne added at
- _task->decReference();
-
- return (ACE_THR_FUNC_RETURN)0;
-}
-
-ACE_thread_t Thread::currentId()
-{
- return ACE_Thread::self();
-}
-
-ACE_hthread_t Thread::currentHandle()
-{
- ACE_hthread_t _handle;
- ACE_Thread::self(_handle);
-
- return _handle;
-}
-
-Thread * Thread::current()
-{
- Thread * _thread = m_ThreadStorage.ts_object();
- if (!_thread)
- {
- _thread = new Thread();
- _thread->m_iThreadId = Thread::currentId();
- _thread->m_hThreadHandle = Thread::currentHandle();
-
- Thread * _oldValue = m_ThreadStorage.ts_object(_thread);
- if (_oldValue)
- delete _oldValue;
- }
-
- return _thread;
-}
-
-void Thread::setPriority(Priority type)
-{
- int _priority = m_TpEnum.getPriority(type);
- int _ok = ACE_Thread::setprio(m_hThreadHandle, _priority);
- //remove this ASSERT in case you don't want to know is thread priority change was successful or not
- ASSERT (_ok == 0);
-}
-
-void Thread::Sleep(unsigned long msecs)
-{
- ACE_OS::sleep(ACE_Time_Value(0, 1000 * msecs));
-}
diff --git a/src/server/shared/Threading/Threading.h b/src/server/shared/Threading/Threading.h
deleted file mode 100644
index 9d416109e9f..00000000000
--- a/src/server/shared/Threading/Threading.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2008 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef THREADING_H
-#define THREADING_H
-
-#include <ace/Thread.h>
-#include <ace/TSS_T.h>
-#include <ace/Atomic_Op.h>
-#include <assert.h>
-
-namespace ACE_Based
-{
-
- class Runnable
- {
- public:
- virtual ~Runnable() { }
- virtual void run() = 0;
-
- void incReference() { ++m_refs; }
- void decReference()
- {
- if (!--m_refs)
- delete this;
- }
- private:
- ACE_Atomic_Op<ACE_Thread_Mutex, long> m_refs;
- };
-
- enum Priority
- {
- Idle,
- Lowest,
- Low,
- Normal,
- High,
- Highest,
- Realtime
- };
-
-#define MAXPRIORITYNUM (Realtime + 1)
-
- class ThreadPriority
- {
- public:
- ThreadPriority();
- int getPriority(Priority p) const;
-
- private:
- int m_priority[MAXPRIORITYNUM];
- };
-
- class Thread
- {
- public:
- Thread();
- explicit Thread(Runnable* instance);
- ~Thread();
-
- bool start();
- bool wait();
- void destroy();
-
- void suspend();
- void resume();
-
- void setPriority(Priority type);
-
- static void Sleep(unsigned long msecs);
- static ACE_thread_t currentId();
- static ACE_hthread_t currentHandle();
- static Thread * current();
-
- private:
- Thread(const Thread&);
- Thread& operator=(const Thread&);
-
- static ACE_THR_FUNC_RETURN ThreadTask(void * param);
-
- ACE_thread_t m_iThreadId;
- ACE_hthread_t m_hThreadHandle;
- Runnable* m_task;
-
- typedef ACE_TSS<Thread> ThreadStorage;
- //global object - container for Thread class representation of every thread
- static ThreadStorage m_ThreadStorage;
- //use this object to determine current OS thread priority values mapped to enum Priority{ }
- static ThreadPriority m_TpEnum;
- };
-
-}
-#endif
diff --git a/src/server/shared/Utilities/ServiceWin32.cpp b/src/server/shared/Utilities/ServiceWin32.cpp
index ec472b33f40..ecf403423f7 100644
--- a/src/server/shared/Utilities/ServiceWin32.cpp
+++ b/src/server/shared/Utilities/ServiceWin32.cpp
@@ -24,11 +24,6 @@
#include <windows.h>
#include <winsvc.h>
-// stupid ACE define
-#ifdef main
-#undef main
-#endif //main
-
#if !defined(WINADVAPI)
#if !defined(_ADVAPI32_)
#define WINADVAPI DECLSPEC_IMPORT
@@ -60,7 +55,7 @@ bool WinServiceInstall()
if (GetModuleFileName( 0, path, sizeof(path)/sizeof(path[0]) ) > 0)
{
SC_HANDLE service;
- std::strcat(path, " --service");
+ std::strcat(path, " --service run");
service = CreateService(serviceControlManager,
serviceName, // name of service
serviceLongName, // service name to display
@@ -119,6 +114,8 @@ bool WinServiceInstall()
}
CloseServiceHandle(serviceControlManager);
}
+
+ printf("Service installed\n");
return true;
}
@@ -143,6 +140,8 @@ bool WinServiceUninstall()
CloseServiceHandle(serviceControlManager);
}
+
+ printf("Service uninstalled\n");
return true;
}
diff --git a/src/server/shared/Utilities/SignalHandler.h b/src/server/shared/Utilities/SignalHandler.h
deleted file mode 100644
index 41e867c3d1a..00000000000
--- a/src/server/shared/Utilities/SignalHandler.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __SIGNAL_HANDLER_H__
-#define __SIGNAL_HANDLER_H__
-
-#include <ace/Event_Handler.h>
-
-namespace Trinity
-{
-
-/// Handle termination signals
-class SignalHandler : public ACE_Event_Handler
-{
- public:
- int handle_signal(int SigNum, siginfo_t* = NULL, ucontext_t* = NULL)
- {
- HandleSignal(SigNum);
- return 0;
- }
- virtual void HandleSignal(int /*SigNum*/) { };
-};
-
-}
-
-#endif /* __SIGNAL_HANDLER_H__ */
diff --git a/src/server/shared/Utilities/Timer.h b/src/server/shared/Utilities/Timer.h
index c809a59c20f..0e2d6ddbff5 100644
--- a/src/server/shared/Utilities/Timer.h
+++ b/src/server/shared/Utilities/Timer.h
@@ -19,13 +19,15 @@
#ifndef TRINITY_TIMER_H
#define TRINITY_TIMER_H
-#include "ace/OS_NS_sys_time.h"
-#include "Common.h"
+#include <chrono>
+
+using namespace std::chrono;
inline uint32 getMSTime()
{
- static const ACE_Time_Value ApplicationStartTime = ACE_OS::gettimeofday();
- return (ACE_OS::gettimeofday() - ApplicationStartTime).msec();
+ static const system_clock::time_point ApplicationStartTime = system_clock::now();
+
+ return uint32(duration_cast<milliseconds>(system_clock::now() - ApplicationStartTime).count());
}
inline uint32 getMSTimeDiff(uint32 oldMSTime, uint32 newMSTime)
@@ -44,158 +46,158 @@ inline uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
struct IntervalTimer
{
- public:
-
- IntervalTimer()
- : _interval(0), _current(0)
- {
- }
-
- void Update(time_t diff)
- {
- _current += diff;
- if (_current < 0)
- _current = 0;
- }
-
- bool Passed()
- {
- return _current >= _interval;
- }
-
- void Reset()
- {
- if (_current >= _interval)
- _current %= _interval;
- }
-
- void SetCurrent(time_t current)
- {
- _current = current;
- }
-
- void SetInterval(time_t interval)
- {
- _interval = interval;
- }
-
- time_t GetInterval() const
- {
- return _interval;
- }
-
- time_t GetCurrent() const
- {
- return _current;
- }
-
- private:
-
- time_t _interval;
- time_t _current;
+public:
+
+ IntervalTimer()
+ : _interval(0), _current(0)
+ {
+ }
+
+ void Update(time_t diff)
+ {
+ _current += diff;
+ if (_current < 0)
+ _current = 0;
+ }
+
+ bool Passed()
+ {
+ return _current >= _interval;
+ }
+
+ void Reset()
+ {
+ if (_current >= _interval)
+ _current %= _interval;
+ }
+
+ void SetCurrent(time_t current)
+ {
+ _current = current;
+ }
+
+ void SetInterval(time_t interval)
+ {
+ _interval = interval;
+ }
+
+ time_t GetInterval() const
+ {
+ return _interval;
+ }
+
+ time_t GetCurrent() const
+ {
+ return _current;
+ }
+
+private:
+
+ time_t _interval;
+ time_t _current;
};
struct TimeTracker
{
- public:
+public:
- TimeTracker(time_t expiry)
- : i_expiryTime(expiry)
- {
- }
+ TimeTracker(time_t expiry)
+ : i_expiryTime(expiry)
+ {
+ }
- void Update(time_t diff)
- {
- i_expiryTime -= diff;
- }
+ void Update(time_t diff)
+ {
+ i_expiryTime -= diff;
+ }
- bool Passed() const
- {
- return i_expiryTime <= 0;
- }
+ bool Passed() const
+ {
+ return i_expiryTime <= 0;
+ }
- void Reset(time_t interval)
- {
- i_expiryTime = interval;
- }
+ void Reset(time_t interval)
+ {
+ i_expiryTime = interval;
+ }
- time_t GetExpiry() const
- {
- return i_expiryTime;
- }
+ time_t GetExpiry() const
+ {
+ return i_expiryTime;
+ }
- private:
+private:
- time_t i_expiryTime;
+ time_t i_expiryTime;
};
struct TimeTrackerSmall
{
- public:
+public:
- TimeTrackerSmall(uint32 expiry = 0)
- : i_expiryTime(expiry)
- {
- }
+ TimeTrackerSmall(uint32 expiry = 0)
+ : i_expiryTime(expiry)
+ {
+ }
- void Update(int32 diff)
- {
- i_expiryTime -= diff;
- }
+ void Update(int32 diff)
+ {
+ i_expiryTime -= diff;
+ }
- bool Passed() const
- {
- return i_expiryTime <= 0;
- }
+ bool Passed() const
+ {
+ return i_expiryTime <= 0;
+ }
- void Reset(uint32 interval)
- {
- i_expiryTime = interval;
- }
+ void Reset(uint32 interval)
+ {
+ i_expiryTime = interval;
+ }
- int32 GetExpiry() const
- {
- return i_expiryTime;
- }
+ int32 GetExpiry() const
+ {
+ return i_expiryTime;
+ }
- private:
+private:
- int32 i_expiryTime;
+ int32 i_expiryTime;
};
struct PeriodicTimer
{
- public:
+public:
- PeriodicTimer(int32 period, int32 start_time)
- : i_period(period), i_expireTime(start_time)
- {
- }
+ PeriodicTimer(int32 period, int32 start_time)
+ : i_period(period), i_expireTime(start_time)
+ {
+ }
- bool Update(const uint32 diff)
- {
- if ((i_expireTime -= diff) > 0)
- return false;
+ bool Update(const uint32 diff)
+ {
+ if ((i_expireTime -= diff) > 0)
+ return false;
- i_expireTime += i_period > int32(diff) ? i_period : diff;
- return true;
- }
+ i_expireTime += i_period > int32(diff) ? i_period : diff;
+ return true;
+ }
- void SetPeriodic(int32 period, int32 start_time)
- {
- i_expireTime = start_time;
- i_period = period;
- }
+ void SetPeriodic(int32 period, int32 start_time)
+ {
+ i_expireTime = start_time;
+ i_period = period;
+ }
- // Tracker interface
- void TUpdate(int32 diff) { i_expireTime -= diff; }
- bool TPassed() const { return i_expireTime <= 0; }
- void TReset(int32 diff, int32 period) { i_expireTime += period > diff ? period : diff; }
+ // Tracker interface
+ void TUpdate(int32 diff) { i_expireTime -= diff; }
+ bool TPassed() const { return i_expireTime <= 0; }
+ void TReset(int32 diff, int32 period) { i_expireTime += period > diff ? period : diff; }
- private:
+private:
- int32 i_period;
- int32 i_expireTime;
+ int32 i_period;
+ int32 i_expireTime;
};
#endif
diff --git a/src/server/shared/Utilities/Util.cpp b/src/server/shared/Utilities/Util.cpp
index ffef61557fc..f2c02510ed4 100644
--- a/src/server/shared/Utilities/Util.cpp
+++ b/src/server/shared/Utilities/Util.cpp
@@ -18,45 +18,65 @@
#include "Util.h"
#include "Common.h"
+#include "CompilerDefs.h"
#include "utf8.h"
#include "SFMT.h"
#include "Errors.h" // for ASSERT
-#include <ace/TSS_T.h>
+#include <stdarg.h>
+#include <boost/thread/tss.hpp>
-typedef ACE_TSS<SFMTRand> SFMTRandTSS;
-static SFMTRandTSS sfmtRand;
+#if COMPILER == COMPILER_GNU
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+#endif
+
+static boost::thread_specific_ptr<SFMTRand> sfmtRand;
+
+static SFMTRand* GetRng()
+{
+ SFMTRand* rand = sfmtRand.get();
+
+ if (!rand)
+ {
+ rand = new SFMTRand();
+ sfmtRand.reset(rand);
+ }
+
+ return rand;
+}
int32 irand(int32 min, int32 max)
{
ASSERT(max >= min);
- return int32(sfmtRand->IRandom(min, max));
+ return int32(GetRng()->IRandom(min, max));
}
uint32 urand(uint32 min, uint32 max)
{
ASSERT(max >= min);
- return sfmtRand->URandom(min, max);
+ return GetRng()->URandom(min, max);
}
float frand(float min, float max)
{
ASSERT(max >= min);
- return float(sfmtRand->Random() * (max - min) + min);
+ return float(GetRng()->Random() * (max - min) + min);
}
-int32 rand32()
+uint32 rand32()
{
- return int32(sfmtRand->BRandom());
+ return GetRng()->BRandom();
}
-double rand_norm(void)
+double rand_norm()
{
- return sfmtRand->Random();
+ return GetRng()->Random();
}
-double rand_chance(void)
+double rand_chance()
{
- return sfmtRand->Random() * 100.0;
+ return GetRng()->Random() * 100.0;
}
Tokenizer::Tokenizer(const std::string &src, const char sep, uint32 vectorReserve)
@@ -127,6 +147,14 @@ void stripLineInvisibleChars(std::string &str)
}
+#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__))
+struct tm* localtime_r(const time_t* time, struct tm *result)
+{
+ localtime_s(result, time);
+ return result;
+}
+#endif
+
std::string secsToTimeString(uint64 timeInSecs, bool shortText, bool hoursOnly)
{
uint64 secs = timeInSecs % MINUTE;
@@ -216,7 +244,7 @@ uint32 TimeStringToSecs(const std::string& timestring)
std::string TimeToTimestampStr(time_t t)
{
tm aTm;
- ACE_OS::localtime_r(&t, &aTm);
+ localtime_r(&t, &aTm);
// YYYY year
// MM month (2 digits 01-12)
// DD day (2 digits 01-31)
@@ -239,21 +267,6 @@ bool IsIPAddress(char const* ipaddress)
return inet_addr(ipaddress) != INADDR_NONE;
}
-std::string GetAddressString(ACE_INET_Addr const& addr)
-{
- char buf[ACE_MAX_FULLY_QUALIFIED_NAME_LEN + 16];
- addr.addr_to_string(buf, ACE_MAX_FULLY_QUALIFIED_NAME_LEN + 16);
- return buf;
-}
-
-bool IsIPAddrInNetwork(ACE_INET_Addr const& net, ACE_INET_Addr const& addr, ACE_INET_Addr const& subnetMask)
-{
- uint32 mask = subnetMask.get_ip_address();
- if ((net.get_ip_address() & mask) == (addr.get_ip_address() & mask))
- return true;
- return false;
-}
-
/// create PID file
uint32 CreatePIDFile(const std::string& filename)
{
@@ -547,3 +560,12 @@ std::string ByteArrayToHexStr(uint8 const* bytes, uint32 arrayLen, bool reverse
return ss.str();
}
+
+uint32 EventMap::GetTimeUntilEvent(uint32 eventId) const
+{
+ for (EventStore::const_iterator itr = _eventMap.begin(); itr != _eventMap.end(); ++itr)
+ if (eventId == (itr->second & 0x0000FFFF))
+ return itr->first - _time;
+
+ return std::numeric_limits<uint32>::max();
+}
diff --git a/src/server/shared/Utilities/Util.h b/src/server/shared/Utilities/Util.h
index b086a28134c..20c17b14023 100644
--- a/src/server/shared/Utilities/Util.h
+++ b/src/server/shared/Utilities/Util.h
@@ -26,7 +26,7 @@
#include <string>
#include <vector>
#include <list>
-#include <ace/INET_Addr.h>
+#include <map>
// Searcher for map of structs
template<typename T, class S> struct Finder
@@ -70,34 +70,29 @@ void stripLineInvisibleChars(std::string &src);
int32 MoneyStringToMoney(const std::string& moneyString);
+struct tm* localtime_r(const time_t* time, struct tm *result);
+
std::string secsToTimeString(uint64 timeInSecs, bool shortText = false, bool hoursOnly = false);
uint32 TimeStringToSecs(const std::string& timestring);
std::string TimeToTimestampStr(time_t t);
-/* Return a random number in the range min..max; (max-min) must be smaller than 32768. */
+/* Return a random number in the range min..max. */
int32 irand(int32 min, int32 max);
-/* Return a random number in the range min..max (inclusive). For reliable results, the difference
-* between max and min should be less than RAND32_MAX. */
+/* Return a random number in the range min..max (inclusive). */
uint32 urand(uint32 min, uint32 max);
-/* Return a random number in the range 0 .. RAND32_MAX. */
-int32 rand32();
+/* Return a random number in the range 0 .. UINT32_MAX. */
+uint32 rand32();
/* Return a random number in the range min..max */
float frand(float min, float max);
-/* Return a random double from 0.0 to 1.0 (exclusive). Floats support only 7 valid decimal digits.
- * A double supports up to 15 valid decimal digits and is used internally (RAND32_MAX has 10 digits).
- * With an FPU, there is usually no difference in performance between float and double.
-*/
-double rand_norm(void);
+/* Return a random double from 0.0 to 1.0 (exclusive). */
+double rand_norm();
-/* Return a random double from 0.0 to 99.9999999999999. Floats support only 7 valid decimal digits.
- * A double supports up to 15 valid decimal digits and is used internally (RAND32_MAX has 10 digits).
- * With an FPU, there is usually no difference in performance between float and double.
-*/
-double rand_chance(void);
+/* Return a random double from 0.0 to 100.0 (exclusive). */
+double rand_chance();
/* Return true if a random roll fits in the specified chance (range 0-100). */
inline bool roll_chance_f(float chance)
@@ -346,20 +341,9 @@ void vutf8printf(FILE* out, const char *str, va_list* ap);
bool IsIPAddress(char const* ipaddress);
-/// Checks if address belongs to the a network with specified submask
-bool IsIPAddrInNetwork(ACE_INET_Addr const& net, ACE_INET_Addr const& addr, ACE_INET_Addr const& subnetMask);
-
-/// Transforms ACE_INET_Addr address into string format "dotted_ip:port"
-std::string GetAddressString(ACE_INET_Addr const& addr);
-
uint32 CreatePIDFile(const std::string& filename);
std::string ByteArrayToHexStr(uint8 const* bytes, uint32 length, bool reverse = false);
-#endif
-
-//handler for operations on large flags
-#ifndef _FLAG96
-#define _FLAG96
// simple class for not-modifyable list
template <typename T>
@@ -406,13 +390,6 @@ public:
part[2] = p3;
}
- flag96(uint64 p1, uint32 p2)
- {
- part[0] = (uint32)(p1 & UI64LIT(0x00000000FFFFFFFF));
- part[1] = (uint32)((p1 >> 32) & UI64LIT(0x00000000FFFFFFFF));
- part[2] = p2;
- }
-
inline bool IsEqual(uint32 p1 = 0, uint32 p2 = 0, uint32 p3 = 0) const
{
return (part[0] == p1 && part[1] == p2 && part[2] == p3);
@@ -565,4 +542,346 @@ bool CompareValues(ComparisionType type, T val1, T val2)
}
}
+class EventMap
+{
+ /**
+ * Internal storage type.
+ * Key: Time as uint32 when the event should occur.
+ * Value: The event data as uint32.
+ *
+ * Structure of event data:
+ * - Bit 0 - 15: Event Id.
+ * - Bit 16 - 23: Group
+ * - Bit 24 - 31: Phase
+ * - Pattern: 0xPPGGEEEE
+ */
+ typedef std::multimap<uint32, uint32> EventStore;
+
+ public:
+ EventMap() : _time(0), _phase(0), _lastEvent(0) { }
+
+ /**
+ * @name Reset
+ * @brief Removes all scheduled events and resets time and phase.
+ */
+ void Reset()
+ {
+ _eventMap.clear();
+ _time = 0;
+ _phase = 0;
+ }
+
+ /**
+ * @name Update
+ * @brief Updates the timer of the event map.
+ * @param time Value to be added to time.
+ */
+ void Update(uint32 time)
+ {
+ _time += time;
+ }
+
+ /**
+ * @name GetTimer
+ * @return Current timer value.
+ */
+ uint32 GetTimer() const
+ {
+ return _time;
+ }
+
+ /**
+ * @name GetPhaseMask
+ * @return Active phases as mask.
+ */
+ uint8 GetPhaseMask() const
+ {
+ return _phase;
+ }
+
+ /**
+ * @name Empty
+ * @return True, if there are no events scheduled.
+ */
+ bool Empty() const
+ {
+ return _eventMap.empty();
+ }
+
+ /**
+ * @name SetPhase
+ * @brief Sets the phase of the map (absolute).
+ * @param phase Phase which should be set. Values: 1 - 8. 0 resets phase.
+ */
+ void SetPhase(uint8 phase)
+ {
+ if (!phase)
+ _phase = 0;
+ else if (phase <= 8)
+ _phase = uint8(1 << (phase - 1));
+ }
+
+ /**
+ * @name AddPhase
+ * @brief Activates the given phase (bitwise).
+ * @param phase Phase which should be activated. Values: 1 - 8
+ */
+ void AddPhase(uint8 phase)
+ {
+ if (phase && phase <= 8)
+ _phase |= uint8(1 << (phase - 1));
+ }
+
+ /**
+ * @name RemovePhase
+ * @brief Deactivates the given phase (bitwise).
+ * @param phase Phase which should be deactivated. Values: 1 - 8.
+ */
+ void RemovePhase(uint8 phase)
+ {
+ if (phase && phase <= 8)
+ _phase &= uint8(~(1 << (phase - 1)));
+ }
+
+ /**
+ * @name ScheduleEvent
+ * @brief Creates new event entry in map.
+ * @param eventId The id of the new event.
+ * @param time The time in milliseconds until the event occurs.
+ * @param group The group which the event is associated to. Has to be between 1 and 8. 0 means it has no group.
+ * @param phase The phase in which the event can occur. Has to be between 1 and 8. 0 means it can occur in all phases.
+ */
+ void ScheduleEvent(uint32 eventId, uint32 time, uint32 group = 0, uint8 phase = 0)
+ {
+ if (group && group <= 8)
+ eventId |= (1 << (group + 15));
+
+ if (phase && phase <= 8)
+ eventId |= (1 << (phase + 23));
+
+ _eventMap.insert(EventStore::value_type(_time + time, eventId));
+ }
+
+ /**
+ * @name RescheduleEvent
+ * @brief Cancels the given event and reschedules it.
+ * @param eventId The id of the event.
+ * @param time The time in milliseconds until the event occurs.
+ * @param group The group which the event is associated to. Has to be between 1 and 8. 0 means it has no group.
+ * @param phase The phase in which the event can occur. Has to be between 1 and 8. 0 means it can occur in all phases.
+ */
+ void RescheduleEvent(uint32 eventId, uint32 time, uint32 group = 0, uint8 phase = 0)
+ {
+ CancelEvent(eventId);
+ ScheduleEvent(eventId, time, group, phase);
+ }
+
+ /**
+ * @name RepeatEvent
+ * @brief Repeats the mostly recently executed event.
+ * @param time Time until the event occurs.
+ */
+ void Repeat(uint32 time)
+ {
+ _eventMap.insert(EventStore::value_type(_time + time, _lastEvent));
+ }
+
+ /**
+ * @name RepeatEvent
+ * @brief Repeats the mostly recently executed event.
+ * @param time Time until the event occurs. Equivalent to Repeat(urand(minTime, maxTime).
+ */
+ void Repeat(uint32 minTime, uint32 maxTime)
+ {
+ Repeat(urand(minTime, maxTime));
+ }
+
+ /**
+ * @name ExecuteEvent
+ * @brief Returns the next event to execute and removes it from map.
+ * @return Id of the event to execute.
+ */
+ uint32 ExecuteEvent()
+ {
+ while (!Empty())
+ {
+ EventStore::iterator itr = _eventMap.begin();
+
+ if (itr->first > _time)
+ return 0;
+ else if (_phase && (itr->second & 0xFF000000) && !((itr->second >> 24) & _phase))
+ _eventMap.erase(itr);
+ else
+ {
+ uint32 eventId = (itr->second & 0x0000FFFF);
+ _lastEvent = itr->second; // include phase/group
+ _eventMap.erase(itr);
+ return eventId;
+ }
+ }
+
+ return 0;
+ }
+
+ /**
+ * @name DelayEvents
+ * @brief Delays all events in the map. If delay is greater than or equal internal timer, delay will be 0.
+ * @param delay Amount of delay.
+ */
+ void DelayEvents(uint32 delay)
+ {
+ _time = delay < _time ? _time - delay : 0;
+ }
+
+ /**
+ * @name DelayEvents
+ * @brief Delay all events of the same group.
+ * @param delay Amount of delay.
+ * @param group Group of the events.
+ */
+ void DelayEvents(uint32 delay, uint32 group)
+ {
+ if (!group || group > 8 || Empty())
+ return;
+
+ EventStore delayed;
+
+ for (EventStore::iterator itr = _eventMap.begin(); itr != _eventMap.end();)
+ {
+ if (itr->second & (1 << (group + 15)))
+ {
+ delayed.insert(EventStore::value_type(itr->first + delay, itr->second));
+ _eventMap.erase(itr++);
+ }
+ else
+ ++itr;
+ }
+
+ _eventMap.insert(delayed.begin(), delayed.end());
+ }
+
+ /**
+ * @name CancelEvent
+ * @brief Cancels all events of the specified id.
+ * @param eventId Event id to cancel.
+ */
+ void CancelEvent(uint32 eventId)
+ {
+ if (Empty())
+ return;
+
+ for (EventStore::iterator itr = _eventMap.begin(); itr != _eventMap.end();)
+ {
+ if (eventId == (itr->second & 0x0000FFFF))
+ _eventMap.erase(itr++);
+ else
+ ++itr;
+ }
+ }
+
+ /**
+ * @name CancelEventGroup
+ * @brief Cancel events belonging to specified group.
+ * @param group Group to cancel.
+ */
+ void CancelEventGroup(uint32 group)
+ {
+ if (!group || group > 8 || Empty())
+ return;
+
+ for (EventStore::iterator itr = _eventMap.begin(); itr != _eventMap.end();)
+ {
+ if (itr->second & (1 << (group + 15)))
+ _eventMap.erase(itr++);
+ else
+ ++itr;
+ }
+ }
+
+ /**
+ * @name GetNextEventTime
+ * @brief Returns closest occurence of specified event.
+ * @param eventId Wanted event id.
+ * @return Time of found event.
+ */
+ uint32 GetNextEventTime(uint32 eventId) const
+ {
+ if (Empty())
+ return 0;
+
+ for (EventStore::const_iterator itr = _eventMap.begin(); itr != _eventMap.end(); ++itr)
+ if (eventId == (itr->second & 0x0000FFFF))
+ return itr->first;
+
+ return 0;
+ }
+
+ /**
+ * @name GetNextEventTime
+ * @return Time of next event.
+ */
+ uint32 GetNextEventTime() const
+ {
+ return Empty() ? 0 : _eventMap.begin()->first;
+ }
+
+ /**
+ * @name IsInPhase
+ * @brief Returns wether event map is in specified phase or not.
+ * @param phase Wanted phase.
+ * @return True, if phase of event map contains specified phase.
+ */
+ bool IsInPhase(uint8 phase)
+ {
+ return phase <= 8 && (!phase || _phase & (1 << (phase - 1)));
+ }
+
+ /**
+ * @name GetTimeUntilEvent
+ * @brief Returns time in milliseconds until next event.
+ * @param Id of the event.
+ * @return Time of next event.
+ */
+ uint32 GetTimeUntilEvent(uint32 eventId) const;
+
+ private:
+ /**
+ * @name _time
+ * @brief Internal timer.
+ *
+ * This does not represent the real date/time value.
+ * It's more like a stopwatch: It can run, it can be stopped,
+ * it can be resetted and so on. Events occur when this timer
+ * has reached their time value. Its value is changed in the
+ * Update method.
+ */
+ uint32 _time;
+
+ /**
+ * @name _phase
+ * @brief Phase mask of the event map.
+ *
+ * Contains the phases the event map is in. Multiple
+ * phases from 1 to 8 can be set with SetPhase or
+ * AddPhase. RemovePhase deactives a phase.
+ */
+ uint8 _phase;
+
+ /**
+ * @name _eventMap
+ * @brief Internal event storage map. Contains the scheduled events.
+ *
+ * See typedef at the beginning of the class for more
+ * details.
+ */
+ EventStore _eventMap;
+
+
+ /**
+ * @name _lastEvent
+ * @brief Stores information on the most recently executed event
+ */
+ uint32 _lastEvent;
+};
+
#endif
diff --git a/src/server/worldserver/CMakeLists.txt b/src/server/worldserver/CMakeLists.txt
index d1d2ef11848..a7c2b9ebedc 100644
--- a/src/server/worldserver/CMakeLists.txt
+++ b/src/server/worldserver/CMakeLists.txt
@@ -11,7 +11,6 @@
file(GLOB_RECURSE sources_CommandLine CommandLine/*.cpp CommandLine/*.h)
file(GLOB_RECURSE sources_RemoteAccess RemoteAccess/*.cpp RemoteAccess/*.h)
file(GLOB_RECURSE sources_TCSoap TCSoap/*.cpp TCSoap/*.h)
-file(GLOB_RECURSE sources_WorldThread WorldThread/*.cpp WorldThread/*.h)
file(GLOB sources_localdir *.cpp *.h)
if (USE_COREPCH)
@@ -24,7 +23,6 @@ set(worldserver_SRCS
${sources_CommandLine}
${sources_RemoteAccess}
${sources_TCSoap}
- ${sources_WorldThread}
${sources_localdir}
)
@@ -45,6 +43,7 @@ include_directories(
${CMAKE_BINARY_DIR}
${CMAKE_SOURCE_DIR}/dep/g3dlite/include
${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour
+ ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour/Include
${CMAKE_SOURCE_DIR}/dep/gsoap
${CMAKE_SOURCE_DIR}/dep/sockets/include
${CMAKE_SOURCE_DIR}/dep/SFMT
@@ -61,6 +60,7 @@ include_directories(
${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic/LinkedReference
${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic
${CMAKE_SOURCE_DIR}/src/server/shared/Logging
+ ${CMAKE_SOURCE_DIR}/src/server/shared/Networking
${CMAKE_SOURCE_DIR}/src/server/shared/Packets
${CMAKE_SOURCE_DIR}/src/server/shared/Threading
${CMAKE_SOURCE_DIR}/src/server/shared/Utilities
@@ -136,8 +136,6 @@ include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/CommandLine
${CMAKE_CURRENT_SOURCE_DIR}/RemoteAccess
${CMAKE_CURRENT_SOURCE_DIR}/TCSoap
- ${CMAKE_CURRENT_SOURCE_DIR}/WorldThread
- ${ACE_INCLUDE_DIR}
${MYSQL_INCLUDE_DIR}
${OPENSSL_INCLUDE_DIR}
)
@@ -155,7 +153,7 @@ endif()
add_dependencies(worldserver revision.h)
-if( UNIX AND NOT NOJEM )
+if( UNIX AND NOT NOJEM AND NOT APPLE )
set(worldserver_LINK_FLAGS "-pthread -lncurses ${worldserver_LINK_FLAGS}")
endif()
@@ -172,11 +170,11 @@ target_link_libraries(worldserver
${JEMALLOC_LIBRARY}
${READLINE_LIBRARY}
${TERMCAP_LIBRARY}
- ${ACE_LIBRARY}
${MYSQL_LIBRARY}
${OPENSSL_LIBRARIES}
${ZLIB_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
+ ${Boost_LIBRARIES}
)
if( WIN32 )
diff --git a/src/server/worldserver/CommandLine/CliRunnable.cpp b/src/server/worldserver/CommandLine/CliRunnable.cpp
index ac46b218305..295e63c696b 100644
--- a/src/server/worldserver/CommandLine/CliRunnable.cpp
+++ b/src/server/worldserver/CommandLine/CliRunnable.cpp
@@ -131,7 +131,7 @@ int kb_hit_return()
#endif
/// %Thread start
-void CliRunnable::run()
+void CliThread()
{
///- Display the list of available CLI functions then beep
//TC_LOG_INFO("server.worldserver", "");
diff --git a/src/server/worldserver/CommandLine/CliRunnable.h b/src/server/worldserver/CommandLine/CliRunnable.h
index 0306109ab54..7ed3a44995f 100644
--- a/src/server/worldserver/CommandLine/CliRunnable.h
+++ b/src/server/worldserver/CommandLine/CliRunnable.h
@@ -23,12 +23,7 @@
#ifndef __CLIRUNNABLE_H
#define __CLIRUNNABLE_H
-/// Command Line Interface handling thread
-class CliRunnable : public ACE_Based::Runnable
-{
- public:
- void run() OVERRIDE;
-};
+void CliThread();
#endif
diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp
index 75d9ca5145d..e149902af02 100644
--- a/src/server/worldserver/Main.cpp
+++ b/src/server/worldserver/Main.cpp
@@ -22,19 +22,39 @@
#include <openssl/opensslv.h>
#include <openssl/crypto.h>
-#include <ace/Version.h>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/deadline_timer.hpp>
+#include <boost/program_options.hpp>
#include "Common.h"
-#include "Database/DatabaseEnv.h"
+#include "DatabaseEnv.h"
+#include "AsyncAcceptor.h"
+#include "RASession.h"
#include "Configuration/Config.h"
+#include "OpenSSLCrypto.h"
+#include "ProcessPriority.h"
+#include "BigNumber.h"
+#include "RealmList.h"
+#include "World.h"
+#include "MapManager.h"
+#include "InstanceSaveMgr.h"
+#include "ObjectAccessor.h"
+#include "ScriptMgr.h"
+#include "OutdoorPvP/OutdoorPvPMgr.h"
+#include "BattlegroundMgr.h"
+#include "TCSoap.h"
+#include "CliRunnable.h"
+#include "SystemConfig.h"
+#include "WorldSocket.h"
-#include "Log.h"
-#include "Master.h"
+using namespace boost::program_options;
#ifndef _TRINITY_CORE_CONFIG
-# define _TRINITY_CORE_CONFIG "worldserver.conf"
+ #define _TRINITY_CORE_CONFIG "worldserver.conf"
#endif
+#define WORLD_SLEEP_CONST 50
+
#ifdef _WIN32
#include "ServiceWin32.h"
char serviceName[] = "worldserver";
@@ -49,104 +69,480 @@ char serviceDescription[] = "TrinityCore World of Warcraft emulator world servic
int m_ServiceStatus = -1;
#endif
+boost::asio::io_service _ioService;
+boost::asio::deadline_timer _freezeCheckTimer(_ioService);
+uint32 _worldLoopCounter(0);
+uint32 _lastChangeMsTime(0);
+uint32 _maxCoreStuckTimeInMs(0);
+
WorldDatabaseWorkerPool WorldDatabase; ///< Accessor to the world database
CharacterDatabaseWorkerPool CharacterDatabase; ///< Accessor to the character database
LoginDatabaseWorkerPool LoginDatabase; ///< Accessor to the realm/login database
-
uint32 realmID; ///< Id of the realm
-/// Print out the usage string for this program on the console.
-void usage(const char* prog)
+void SignalHandler(const boost::system::error_code& error, int signalNumber);
+void FreezeDetectorHandler(const boost::system::error_code& error);
+AsyncAcceptor<RASession>* StartRaSocketAcceptor(boost::asio::io_service& ioService);
+bool StartDB();
+void StopDB();
+void WorldUpdateLoop();
+void ClearOnlineAccounts();
+void ShutdownThreadPool(std::vector<std::thread>& threadPool);
+variables_map GetConsoleArguments(int argc, char** argv, std::string& cfg_file, std::string& cfg_service);
+
+/// Launch the Trinity server
+extern int main(int argc, char** argv)
{
- printf("Usage:\n");
- printf(" %s [<options>]\n", prog);
- printf(" -c config_file use config_file as configuration file\n");
+ std::string configFile = _TRINITY_CORE_CONFIG;
+ std::string configService;
+
+ auto vm = GetConsoleArguments(argc, argv, configFile, configService);
+ // exit if help is enabled
+ if (vm.count("help"))
+ return 0;
+
#ifdef _WIN32
- printf(" Running as service functions:\n");
- printf(" --service run as service\n");
- printf(" -s install install service\n");
- printf(" -s uninstall uninstall service\n");
+ if (configService.compare("install") == 0)
+ return WinServiceInstall() == true ? 0 : 1;
+ else if (configService.compare("uninstall") == 0)
+ return WinServiceUninstall() == true ? 0 : 1;
+ else if (configService.compare("run") == 0)
+ WinServiceRun();
#endif
+
+ std::string configError;
+ if (!sConfigMgr->LoadInitial(configFile, configError))
+ {
+ printf("Error in config file: %s\n", configError.c_str());
+ return 1;
+ }
+
+ if (sConfigMgr->GetBoolDefault("Log.Async.Enable", false))
+ {
+ // If logs are supposed to be handled async then we need to pass the io_service into the Log singleton
+ Log::instance(&_ioService);
+ }
+
+ TC_LOG_INFO("server.worldserver", "%s (worldserver-daemon)", _FULLVERSION);
+ TC_LOG_INFO("server.worldserver", "<Ctrl-C> to stop.\n");
+ TC_LOG_INFO("server.worldserver", " ______ __");
+ TC_LOG_INFO("server.worldserver", "/\\__ _\\ __ __/\\ \\__");
+ TC_LOG_INFO("server.worldserver", "\\/_/\\ \\/ _ __ /\\_\\ ___ /\\_\\ \\, _\\ __ __");
+ TC_LOG_INFO("server.worldserver", " \\ \\ \\/\\`'__\\/\\ \\ /' _ `\\/\\ \\ \\ \\/ /\\ \\/\\ \\");
+ TC_LOG_INFO("server.worldserver", " \\ \\ \\ \\ \\/ \\ \\ \\/\\ \\/\\ \\ \\ \\ \\ \\_\\ \\ \\_\\ \\");
+ TC_LOG_INFO("server.worldserver", " \\ \\_\\ \\_\\ \\ \\_\\ \\_\\ \\_\\ \\_\\ \\__\\\\/`____ \\");
+ TC_LOG_INFO("server.worldserver", " \\/_/\\/_/ \\/_/\\/_/\\/_/\\/_/\\/__/ `/___/> \\");
+ TC_LOG_INFO("server.worldserver", " C O R E /\\___/");
+ TC_LOG_INFO("server.worldserver", "http://TrinityCore.org \\/__/\n");
+ TC_LOG_INFO("server.worldserver", "Using configuration file %s.", configFile.c_str());
+ TC_LOG_INFO("server.worldserver", "Using SSL version: %s (library: %s)", OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION));
+ TC_LOG_INFO("server.worldserver", "Using Boost version: %i.%i.%i", BOOST_VERSION / 100000, BOOST_VERSION / 100 % 1000, BOOST_VERSION % 100);
+
+ OpenSSLCrypto::threadsSetup();
+
+ // Seed the OpenSSL's PRNG here.
+ // That way it won't auto-seed when calling BigNumber::SetRand and slow down the first world login
+ BigNumber seed;
+ seed.SetRand(16 * 8);
+
+ /// worldserver PID file creation
+ std::string pidFile = sConfigMgr->GetStringDefault("PidFile", "");
+ if (!pidFile.empty())
+ {
+ if (uint32 pid = CreatePIDFile(pidFile))
+ TC_LOG_INFO("server.worldserver", "Daemon PID: %u\n", pid);
+ else
+ {
+ TC_LOG_ERROR("server.worldserver", "Cannot create PID file %s.\n", pidFile.c_str());
+ return 1;
+ }
+ }
+
+ // Set signal handlers (this must be done before starting io_service threads, because otherwise they would unblock and exit)
+ boost::asio::signal_set signals(_ioService, SIGINT, SIGTERM);
+#if PLATFORM == PLATFORM_WINDOWS
+ signals.add(SIGBREAK);
+#endif
+ signals.async_wait(SignalHandler);
+
+ // Start the Boost based thread pool
+ int numThreads = sConfigMgr->GetIntDefault("ThreadPool", 1);
+ std::vector<std::thread> threadPool;
+
+ if (numThreads < 1)
+ numThreads = 1;
+
+ for (int i = 0; i < numThreads; ++i)
+ threadPool.push_back(std::thread(boost::bind(&boost::asio::io_service::run, &_ioService)));
+
+ // Set process priority according to configuration settings
+ SetProcessPriority("server.worldserver");
+
+ // Start the databases
+ if (!StartDB())
+ {
+ ShutdownThreadPool(threadPool);
+ return 1;
+ }
+
+ // Set server offline (not connectable)
+ LoginDatabase.DirectPExecute("UPDATE realmlist SET flag = (flag & ~%u) | %u WHERE id = '%d'", REALM_FLAG_OFFLINE, REALM_FLAG_INVALID, realmID);
+
+ // Initialize the World
+ sWorld->SetInitialWorldSettings();
+
+ // Launch CliRunnable thread
+ std::thread* cliThread = nullptr;
+#ifdef _WIN32
+ if (sConfigMgr->GetBoolDefault("Console.Enable", true) && (m_ServiceStatus == -1)/* need disable console in service mode*/)
+#else
+ if (sConfigMgr->GetBoolDefault("Console.Enable", true))
+#endif
+ {
+ cliThread = new std::thread(CliThread);
+ }
+
+ // Start the Remote Access port (acceptor) if enabled
+ AsyncAcceptor<RASession>* raAcceptor = nullptr;
+ if (sConfigMgr->GetBoolDefault("Ra.Enable", false))
+ raAcceptor = StartRaSocketAcceptor(_ioService);
+
+ // Start soap serving thread if enabled
+ std::thread* soapThread = nullptr;
+ if (sConfigMgr->GetBoolDefault("SOAP.Enabled", false))
+ {
+ soapThread = new std::thread(TCSoapThread, sConfigMgr->GetStringDefault("SOAP.IP", "127.0.0.1"), uint16(sConfigMgr->GetIntDefault("SOAP.Port", 7878)));
+ }
+
+ // Launch the worldserver listener socket
+ uint16 worldPort = uint16(sWorld->getIntConfig(CONFIG_PORT_WORLD));
+ std::string worldListener = sConfigMgr->GetStringDefault("BindIP", "0.0.0.0");
+ bool tcpNoDelay = sConfigMgr->GetBoolDefault("Network.TcpNodelay", true);
+
+ AsyncAcceptor<WorldSocket> worldAcceptor(_ioService, worldListener, worldPort, tcpNoDelay);
+
+ sScriptMgr->OnNetworkStart();
+
+ // Set server online (allow connecting now)
+ LoginDatabase.DirectPExecute("UPDATE realmlist SET flag = flag & ~%u, population = 0 WHERE id = '%u'", REALM_FLAG_INVALID, realmID);
+
+ // Start the freeze check callback cycle in 5 seconds (cycle itself is 1 sec)
+ if (int coreStuckTime = sConfigMgr->GetIntDefault("MaxCoreStuckTime", 0))
+ {
+ _maxCoreStuckTimeInMs = coreStuckTime * 1000;
+ _freezeCheckTimer.expires_from_now(boost::posix_time::seconds(5));
+ _freezeCheckTimer.async_wait(FreezeDetectorHandler);
+ TC_LOG_INFO("server.worldserver", "Starting up anti-freeze thread (%u seconds max stuck time)...", coreStuckTime);
+ }
+
+ TC_LOG_INFO("server.worldserver", "%s (worldserver-daemon) ready...", _FULLVERSION);
+
+ sScriptMgr->OnStartup();
+
+ WorldUpdateLoop();
+
+ // Shutdown starts here
+ ShutdownThreadPool(threadPool);
+
+ sScriptMgr->OnShutdown();
+
+ sWorld->KickAll(); // save and kick all players
+ sWorld->UpdateSessions(1); // real players unload required UpdateSessions call
+
+ // unload battleground templates before different singletons destroyed
+ sBattlegroundMgr->DeleteAllBattlegrounds();
+
+ sInstanceSaveMgr->Unload();
+ sMapMgr->UnloadAll(); // unload all grids (including locked in memory)
+ sObjectAccessor->UnloadAll(); // unload 'i_player2corpse' storage and remove from world
+ sScriptMgr->Unload();
+ sOutdoorPvPMgr->Die();
+
+ // set server offline
+ LoginDatabase.DirectPExecute("UPDATE realmlist SET flag = flag | %u WHERE id = '%d'", REALM_FLAG_OFFLINE, realmID);
+
+ // Clean up threads if any
+ if (soapThread != nullptr)
+ {
+ soapThread->join();
+ delete soapThread;
+ }
+
+ if (raAcceptor != nullptr)
+ delete raAcceptor;
+
+ ///- Clean database before leaving
+ ClearOnlineAccounts();
+
+ StopDB();
+
+ TC_LOG_INFO("server.worldserver", "Halting process...");
+
+ if (cliThread != nullptr)
+ {
+#ifdef _WIN32
+ CancelSynchronousIo(cliThread->native_handle());
+#endif
+ cliThread->join();
+ delete cliThread;
+ }
+
+ OpenSSLCrypto::threadsCleanup();
+
+ // 0 - normal shutdown
+ // 1 - shutdown at error
+ // 2 - restart command used, this code can be used by restarter for restart Trinityd
+
+ return World::GetExitCode();
}
-/// Launch the Trinity server
-extern int main(int argc, char** argv)
+void ShutdownThreadPool(std::vector<std::thread>& threadPool)
+{
+ sScriptMgr->OnNetworkStop();
+
+ _ioService.stop();
+
+ for (auto& thread : threadPool)
+ {
+ thread.join();
+ }
+}
+
+void WorldUpdateLoop()
{
- ///- Command line parsing to get the configuration file name
- char const* cfg_file = _TRINITY_CORE_CONFIG;
- int c = 1;
- while (c < argc)
+ uint32 realCurrTime = 0;
+ uint32 realPrevTime = getMSTime();
+
+ uint32 prevSleepTime = 0; // used for balanced full tick time length near WORLD_SLEEP_CONST
+
+ ///- While we have not World::m_stopEvent, update the world
+ while (!World::IsStopped())
{
- if (!strcmp(argv[c], "-c"))
+ ++World::m_worldLoopCounter;
+ realCurrTime = getMSTime();
+
+ uint32 diff = getMSTimeDiff(realPrevTime, realCurrTime);
+
+ sWorld->Update(diff);
+ realPrevTime = realCurrTime;
+
+ // diff (D0) include time of previous sleep (d0) + tick time (t0)
+ // we want that next d1 + t1 == WORLD_SLEEP_CONST
+ // we can't know next t1 and then can use (t0 + d1) == WORLD_SLEEP_CONST requirement
+ // d1 = WORLD_SLEEP_CONST - t0 = WORLD_SLEEP_CONST - (D0 - d0) = WORLD_SLEEP_CONST + d0 - D0
+ if (diff <= WORLD_SLEEP_CONST + prevSleepTime)
{
- if (++c >= argc)
- {
- printf("Runtime-Error: -c option requires an input argument");
- usage(argv[0]);
- return 1;
- }
- else
- cfg_file = argv[c];
+ prevSleepTime = WORLD_SLEEP_CONST + prevSleepTime - diff;
+
+ std::this_thread::sleep_for(std::chrono::milliseconds(prevSleepTime));
}
+ else
+ prevSleepTime = 0;
+
+#ifdef _WIN32
+ if (m_ServiceStatus == 0)
+ World::StopNow(SHUTDOWN_EXIT_CODE);
- #ifdef _WIN32
- if (strcmp(argv[c], "-s") == 0) // Services
+ while (m_ServiceStatus == 2)
+ Sleep(1000);
+#endif
+ }
+}
+
+void SignalHandler(const boost::system::error_code& error, int /*signalNumber*/)
+{
+ if (!error)
+ World::StopNow(SHUTDOWN_EXIT_CODE);
+}
+
+void FreezeDetectorHandler(const boost::system::error_code& error)
+{
+ if (!error)
+ {
+ uint32 curtime = getMSTime();
+
+ uint32 worldLoopCounter = World::m_worldLoopCounter;
+ if (_worldLoopCounter != worldLoopCounter)
{
- if (++c >= argc)
- {
- printf("Runtime-Error: -s option requires an input argument");
- usage(argv[0]);
- return 1;
- }
-
- if (strcmp(argv[c], "install") == 0)
- {
- if (WinServiceInstall())
- printf("Installing service\n");
- return 1;
- }
- else if (strcmp(argv[c], "uninstall") == 0)
- {
- if (WinServiceUninstall())
- printf("Uninstalling service\n");
- return 1;
- }
- else
- {
- printf("Runtime-Error: unsupported option %s", argv[c]);
- usage(argv[0]);
- return 1;
- }
+ _lastChangeMsTime = curtime;
+ _worldLoopCounter = worldLoopCounter;
+ }
+ // possible freeze
+ else if (getMSTimeDiff(_lastChangeMsTime, curtime) > _maxCoreStuckTimeInMs)
+ {
+ TC_LOG_ERROR("server.worldserver", "World Thread hangs, kicking out server!");
+ ASSERT(false);
}
- if (strcmp(argv[c], "--service") == 0)
- WinServiceRun();
- #endif
- ++c;
+ _freezeCheckTimer.expires_from_now(boost::posix_time::seconds(1));
+ _freezeCheckTimer.async_wait(FreezeDetectorHandler);
}
+}
+
+AsyncAcceptor<RASession>* StartRaSocketAcceptor(boost::asio::io_service& ioService)
+{
+ uint16 raPort = uint16(sConfigMgr->GetIntDefault("Ra.Port", 3443));
+ std::string raListener = sConfigMgr->GetStringDefault("Ra.IP", "0.0.0.0");
+
+ return new AsyncAcceptor<RASession>(ioService, raListener, raPort);
+}
- if (!sConfigMgr->LoadInitial(cfg_file))
+/// Initialize connection to the databases
+bool StartDB()
+{
+ MySQL::Library_Init();
+
+ std::string dbString;
+ uint8 asyncThreads, synchThreads;
+
+ dbString = sConfigMgr->GetStringDefault("WorldDatabaseInfo", "");
+ if (dbString.empty())
{
- printf("Invalid or missing configuration file : %s\n", cfg_file);
- printf("Verify that the file exists and has \'[worldserver]' written in the top of the file!\n");
- return 1;
+ TC_LOG_ERROR("server.worldserver", "World database not specified in configuration file");
+ return false;
}
- TC_LOG_INFO("server.worldserver", "Using configuration file %s.", cfg_file);
+ asyncThreads = uint8(sConfigMgr->GetIntDefault("WorldDatabase.WorkerThreads", 1));
+ if (asyncThreads < 1 || asyncThreads > 32)
+ {
+ TC_LOG_ERROR("server.worldserver", "World database: invalid number of worker threads specified. "
+ "Please pick a value between 1 and 32.");
+ return false;
+ }
- TC_LOG_INFO("server.worldserver", "Using SSL version: %s (library: %s)", OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION));
- TC_LOG_INFO("server.worldserver", "Using ACE version: %s", ACE_VERSION);
+ synchThreads = uint8(sConfigMgr->GetIntDefault("WorldDatabase.SynchThreads", 1));
+ ///- Initialize the world database
+ if (!WorldDatabase.Open(dbString, asyncThreads, synchThreads))
+ {
+ TC_LOG_ERROR("server.worldserver", "Cannot connect to world database %s", dbString.c_str());
+ return false;
+ }
- ///- and run the 'Master'
- /// @todo Why do we need this 'Master'? Can't all of this be in the Main as for Realmd?
- int ret = sMaster->Run();
+ ///- Get character database info from configuration file
+ dbString = sConfigMgr->GetStringDefault("CharacterDatabaseInfo", "");
+ if (dbString.empty())
+ {
+ TC_LOG_ERROR("server.worldserver", "Character database not specified in configuration file");
+ return false;
+ }
- // at sMaster return function exist with codes
- // 0 - normal shutdown
- // 1 - shutdown at error
- // 2 - restart command used, this code can be used by restarter for restart Trinityd
+ asyncThreads = uint8(sConfigMgr->GetIntDefault("CharacterDatabase.WorkerThreads", 1));
+ if (asyncThreads < 1 || asyncThreads > 32)
+ {
+ TC_LOG_ERROR("server.worldserver", "Character database: invalid number of worker threads specified. "
+ "Please pick a value between 1 and 32.");
+ return false;
+ }
+
+ synchThreads = uint8(sConfigMgr->GetIntDefault("CharacterDatabase.SynchThreads", 2));
+
+ ///- Initialize the Character database
+ if (!CharacterDatabase.Open(dbString, asyncThreads, synchThreads))
+ {
+ TC_LOG_ERROR("server.worldserver", "Cannot connect to Character database %s", dbString.c_str());
+ return false;
+ }
+
+ ///- Get login database info from configuration file
+ dbString = sConfigMgr->GetStringDefault("LoginDatabaseInfo", "");
+ if (dbString.empty())
+ {
+ TC_LOG_ERROR("server.worldserver", "Login database not specified in configuration file");
+ return false;
+ }
+
+ asyncThreads = uint8(sConfigMgr->GetIntDefault("LoginDatabase.WorkerThreads", 1));
+ if (asyncThreads < 1 || asyncThreads > 32)
+ {
+ TC_LOG_ERROR("server.worldserver", "Login database: invalid number of worker threads specified. "
+ "Please pick a value between 1 and 32.");
+ return false;
+ }
+
+ synchThreads = uint8(sConfigMgr->GetIntDefault("LoginDatabase.SynchThreads", 1));
+ ///- Initialise the login database
+ if (!LoginDatabase.Open(dbString, asyncThreads, synchThreads))
+ {
+ TC_LOG_ERROR("server.worldserver", "Cannot connect to login database %s", dbString.c_str());
+ return false;
+ }
+
+ ///- Get the realm Id from the configuration file
+ realmID = sConfigMgr->GetIntDefault("RealmID", 0);
+ if (!realmID)
+ {
+ TC_LOG_ERROR("server.worldserver", "Realm ID not defined in configuration file");
+ return false;
+ }
+ TC_LOG_INFO("server.worldserver", "Realm running as realm ID %d", realmID);
+
+ ///- Clean the database before starting
+ ClearOnlineAccounts();
+
+ ///- Insert version info into DB
+ WorldDatabase.PExecute("UPDATE version SET core_version = '%s', core_revision = '%s'", _FULLVERSION, _HASH); // One-time query
+
+ sWorld->LoadDBVersion();
+
+ TC_LOG_INFO("server.worldserver", "Using World DB: %s", sWorld->GetDBVersion());
+ return true;
+}
+
+void StopDB()
+{
+ CharacterDatabase.Close();
+ WorldDatabase.Close();
+ LoginDatabase.Close();
- return ret;
+ MySQL::Library_End();
+}
+
+/// Clear 'online' status for all accounts with characters in this realm
+void ClearOnlineAccounts()
+{
+ // Reset online status for all accounts with characters on the current realm
+ LoginDatabase.DirectPExecute("UPDATE account SET online = 0 WHERE online > 0 AND id IN (SELECT acctid FROM realmcharacters WHERE realmid = %d)", realmID);
+
+ // Reset online status for all characters
+ CharacterDatabase.DirectExecute("UPDATE characters SET online = 0 WHERE online <> 0");
+
+ // Battleground instance ids reset at server restart
+ CharacterDatabase.DirectExecute("UPDATE character_battleground_data SET instanceId = 0");
}
/// @}
+
+variables_map GetConsoleArguments(int argc, char** argv, std::string& configFile, std::string& configService)
+{
+ // Silences warning about configService not be used if the OS is not Windows
+ (void)configService;
+
+ options_description all("Allowed options");
+ all.add_options()
+ ("help,h", "print usage message")
+ ("config,c", value<std::string>(&configFile)->default_value(_TRINITY_CORE_CONFIG), "use <arg> as configuration file")
+ ;
+#ifdef _WIN32
+ options_description win("Windows platform specific options");
+ win.add_options()
+ ("service,s", value<std::string>(&configService)->default_value(""), "Windows service options: [install | uninstall]")
+ ;
+
+ all.add(win);
+#endif
+ variables_map vm;
+ try
+ {
+ store(command_line_parser(argc, argv).options(all).allow_unregistered().run(), vm);
+ notify(vm);
+ }
+ catch (std::exception& e) {
+ std::cerr << e.what() << "\n";
+ }
+
+ if (vm.count("help")) {
+ std::cout << all << "\n";
+ }
+
+ return vm;
+}
diff --git a/src/server/worldserver/Master.cpp b/src/server/worldserver/Master.cpp
deleted file mode 100644
index c3075deb762..00000000000
--- a/src/server/worldserver/Master.cpp
+++ /dev/null
@@ -1,508 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/** \file
- \ingroup Trinityd
-*/
-
-#include <ace/Sig_Handler.h>
-
-#include "Common.h"
-#include "SystemConfig.h"
-#include "SignalHandler.h"
-#include "World.h"
-#include "WorldRunnable.h"
-#include "WorldSocket.h"
-#include "WorldSocketMgr.h"
-#include "Configuration/Config.h"
-#include "Database/DatabaseEnv.h"
-#include "Database/DatabaseWorkerPool.h"
-
-#include "CliRunnable.h"
-#include "Log.h"
-#include "Master.h"
-#include "RARunnable.h"
-#include "TCSoap.h"
-#include "Timer.h"
-#include "Util.h"
-#include "AuthSocket.h"
-#include "RealmList.h"
-
-#include "BigNumber.h"
-#include "OpenSSLCrypto.h"
-
-#ifdef _WIN32
-#include "ServiceWin32.h"
-extern int m_ServiceStatus;
-#endif
-
-#ifdef __linux__
-#include <sched.h>
-#include <sys/resource.h>
-#define PROCESS_HIGH_PRIORITY -15 // [-20, 19], default is 0
-#endif
-
-/// Handle worldservers's termination signals
-class WorldServerSignalHandler : public Trinity::SignalHandler
-{
- public:
- virtual void HandleSignal(int sigNum)
- {
- switch (sigNum)
- {
- case SIGINT:
- World::StopNow(RESTART_EXIT_CODE);
- break;
- case SIGTERM:
-#ifdef _WIN32
- case SIGBREAK:
- if (m_ServiceStatus != 1)
-#endif
- World::StopNow(SHUTDOWN_EXIT_CODE);
- break;
- }
- }
-};
-
-class FreezeDetectorRunnable : public ACE_Based::Runnable
-{
-private:
- uint32 _loops;
- uint32 _lastChange;
- uint32 _delaytime;
-public:
- FreezeDetectorRunnable()
- {
- _loops = 0;
- _lastChange = 0;
- _delaytime = 0;
- }
-
- void SetDelayTime(uint32 t) { _delaytime = t; }
-
- void run() OVERRIDE
- {
- if (!_delaytime)
- return;
-
- TC_LOG_INFO("server.worldserver", "Starting up anti-freeze thread (%u seconds max stuck time)...", _delaytime/1000);
- _loops = 0;
- _lastChange = 0;
- while (!World::IsStopped())
- {
- ACE_Based::Thread::Sleep(1000);
- uint32 curtime = getMSTime();
- // normal work
- uint32 worldLoopCounter = World::m_worldLoopCounter.value();
- if (_loops != worldLoopCounter)
- {
- _lastChange = curtime;
- _loops = worldLoopCounter;
- }
- // possible freeze
- else if (getMSTimeDiff(_lastChange, curtime) > _delaytime)
- {
- TC_LOG_ERROR("server.worldserver", "World Thread hangs, kicking out server!");
- ASSERT(false);
- }
- }
- TC_LOG_INFO("server.worldserver", "Anti-freeze thread exiting without problems.");
- }
-};
-
-/// Main function
-int Master::Run()
-{
- OpenSSLCrypto::threadsSetup();
- BigNumber seed1;
- seed1.SetRand(16 * 8);
-
- TC_LOG_INFO("server.worldserver", "%s (worldserver-daemon)", _FULLVERSION);
- TC_LOG_INFO("server.worldserver", "<Ctrl-C> to stop.\n");
-
- TC_LOG_INFO("server.worldserver", " ______ __");
- TC_LOG_INFO("server.worldserver", "/\\__ _\\ __ __/\\ \\__");
- TC_LOG_INFO("server.worldserver", "\\/_/\\ \\/ _ __ /\\_\\ ___ /\\_\\ \\, _\\ __ __");
- TC_LOG_INFO("server.worldserver", " \\ \\ \\/\\`'__\\/\\ \\ /' _ `\\/\\ \\ \\ \\/ /\\ \\/\\ \\");
- TC_LOG_INFO("server.worldserver", " \\ \\ \\ \\ \\/ \\ \\ \\/\\ \\/\\ \\ \\ \\ \\ \\_\\ \\ \\_\\ \\");
- TC_LOG_INFO("server.worldserver", " \\ \\_\\ \\_\\ \\ \\_\\ \\_\\ \\_\\ \\_\\ \\__\\\\/`____ \\");
- TC_LOG_INFO("server.worldserver", " \\/_/\\/_/ \\/_/\\/_/\\/_/\\/_/\\/__/ `/___/> \\");
- TC_LOG_INFO("server.worldserver", " C O R E /\\___/");
- TC_LOG_INFO("server.worldserver", "http://TrinityCore.org \\/__/\n");
-
- /// worldserver PID file creation
- std::string pidFile = sConfigMgr->GetStringDefault("PidFile", "");
- if (!pidFile.empty())
- {
- if (uint32 pid = CreatePIDFile(pidFile))
- TC_LOG_INFO("server.worldserver", "Daemon PID: %u\n", pid);
- else
- {
- TC_LOG_ERROR("server.worldserver", "Cannot create PID file %s.\n", pidFile.c_str());
- return 1;
- }
- }
-
- ///- Start the databases
- if (!_StartDB())
- return 1;
-
- // set server offline (not connectable)
- LoginDatabase.DirectPExecute("UPDATE realmlist SET flag = (flag & ~%u) | %u WHERE id = '%d'", REALM_FLAG_OFFLINE, REALM_FLAG_INVALID, realmID);
-
- ///- Initialize the World
- sWorld->SetInitialWorldSettings();
-
- ///- Initialize the signal handlers
- WorldServerSignalHandler signalINT, signalTERM;
- #ifdef _WIN32
- WorldServerSignalHandler signalBREAK;
- #endif /* _WIN32 */
-
- ///- Register worldserver's signal handlers
- ACE_Sig_Handler handle;
- handle.register_handler(SIGINT, &signalINT);
- handle.register_handler(SIGTERM, &signalTERM);
-#ifdef _WIN32
- handle.register_handler(SIGBREAK, &signalBREAK);
-#endif
-
- ///- Launch WorldRunnable thread
- ACE_Based::Thread worldThread(new WorldRunnable);
- worldThread.setPriority(ACE_Based::Highest);
-
- ACE_Based::Thread* cliThread = NULL;
-
-#ifdef _WIN32
- if (sConfigMgr->GetBoolDefault("Console.Enable", true) && (m_ServiceStatus == -1)/* need disable console in service mode*/)
-#else
- if (sConfigMgr->GetBoolDefault("Console.Enable", true))
-#endif
- {
- ///- Launch CliRunnable thread
- cliThread = new ACE_Based::Thread(new CliRunnable);
- }
-
- ACE_Based::Thread rarThread(new RARunnable);
-
-#if defined(_WIN32) || defined(__linux__)
-
- ///- Handle affinity for multiple processors and process priority
- uint32 affinity = sConfigMgr->GetIntDefault("UseProcessors", 0);
- bool highPriority = sConfigMgr->GetBoolDefault("ProcessPriority", false);
-
-#ifdef _WIN32 // Windows
-
- HANDLE hProcess = GetCurrentProcess();
-
- if (affinity > 0)
- {
- ULONG_PTR appAff;
- ULONG_PTR sysAff;
-
- if (GetProcessAffinityMask(hProcess, &appAff, &sysAff))
- {
- ULONG_PTR currentAffinity = affinity & appAff; // remove non accessible processors
-
- if (!currentAffinity)
- TC_LOG_ERROR("server.worldserver", "Processors marked in UseProcessors bitmask (hex) %x are not accessible for the worldserver. Accessible processors bitmask (hex): %x", affinity, appAff);
- else if (SetProcessAffinityMask(hProcess, currentAffinity))
- TC_LOG_INFO("server.worldserver", "Using processors (bitmask, hex): %x", currentAffinity);
- else
- TC_LOG_ERROR("server.worldserver", "Can't set used processors (hex): %x", currentAffinity);
- }
- }
-
- if (highPriority)
- {
- if (SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS))
- TC_LOG_INFO("server.worldserver", "worldserver process priority class set to HIGH");
- else
- TC_LOG_ERROR("server.worldserver", "Can't set worldserver process priority class.");
- }
-
-#else // Linux
-
- if (affinity > 0)
- {
- cpu_set_t mask;
- CPU_ZERO(&mask);
-
- for (unsigned int i = 0; i < sizeof(affinity) * 8; ++i)
- if (affinity & (1 << i))
- CPU_SET(i, &mask);
-
- if (sched_setaffinity(0, sizeof(mask), &mask))
- TC_LOG_ERROR("server.worldserver", "Can't set used processors (hex): %x, error: %s", affinity, strerror(errno));
- else
- {
- CPU_ZERO(&mask);
- sched_getaffinity(0, sizeof(mask), &mask);
- TC_LOG_INFO("server.worldserver", "Using processors (bitmask, hex): %lx", *(__cpu_mask*)(&mask));
- }
- }
-
- if (highPriority)
- {
- if (setpriority(PRIO_PROCESS, 0, PROCESS_HIGH_PRIORITY))
- TC_LOG_ERROR("server.worldserver", "Can't set worldserver process priority class, error: %s", strerror(errno));
- else
- TC_LOG_INFO("server.worldserver", "worldserver process priority class set to %i", getpriority(PRIO_PROCESS, 0));
- }
-
-#endif
-#endif
-
- //Start soap serving thread
- ACE_Based::Thread* soapThread = NULL;
-
- if (sConfigMgr->GetBoolDefault("SOAP.Enabled", false))
- {
- TCSoapRunnable* runnable = new TCSoapRunnable();
- runnable->SetListenArguments(sConfigMgr->GetStringDefault("SOAP.IP", "127.0.0.1"), uint16(sConfigMgr->GetIntDefault("SOAP.Port", 7878)));
- soapThread = new ACE_Based::Thread(runnable);
- }
-
- ///- Start up freeze catcher thread
- if (uint32 freezeDelay = sConfigMgr->GetIntDefault("MaxCoreStuckTime", 0))
- {
- FreezeDetectorRunnable* fdr = new FreezeDetectorRunnable();
- fdr->SetDelayTime(freezeDelay * 1000);
- ACE_Based::Thread freezeThread(fdr);
- freezeThread.setPriority(ACE_Based::Highest);
- }
-
- ///- Launch the world listener socket
- uint16 worldPort = uint16(sWorld->getIntConfig(CONFIG_PORT_WORLD));
- std::string bindIp = sConfigMgr->GetStringDefault("BindIP", "0.0.0.0");
-
- if (sWorldSocketMgr->StartNetwork(worldPort, bindIp.c_str()) == -1)
- {
- TC_LOG_ERROR("server.worldserver", "Failed to start network");
- World::StopNow(ERROR_EXIT_CODE);
- // go down and shutdown the server
- }
-
- // set server online (allow connecting now)
- LoginDatabase.DirectPExecute("UPDATE realmlist SET flag = flag & ~%u, population = 0 WHERE id = '%u'", REALM_FLAG_INVALID, realmID);
-
- TC_LOG_INFO("server.worldserver", "%s (worldserver-daemon) ready...", _FULLVERSION);
-
- // when the main thread closes the singletons get unloaded
- // since worldrunnable uses them, it will crash if unloaded after master
- worldThread.wait();
- rarThread.wait();
-
- if (soapThread)
- {
- soapThread->wait();
- soapThread->destroy();
- delete soapThread;
- }
-
- // set server offline
- LoginDatabase.DirectPExecute("UPDATE realmlist SET flag = flag | %u WHERE id = '%d'", REALM_FLAG_OFFLINE, realmID);
-
- ///- Clean database before leaving
- ClearOnlineAccounts();
-
- _StopDB();
-
- TC_LOG_INFO("server.worldserver", "Halting process...");
-
- if (cliThread)
- {
- #ifdef _WIN32
-
- // this only way to terminate CLI thread exist at Win32 (alt. way exist only in Windows Vista API)
- //_exit(1);
- // send keyboard input to safely unblock the CLI thread
- INPUT_RECORD b[4];
- HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE);
- b[0].EventType = KEY_EVENT;
- b[0].Event.KeyEvent.bKeyDown = TRUE;
- b[0].Event.KeyEvent.uChar.AsciiChar = 'X';
- b[0].Event.KeyEvent.wVirtualKeyCode = 'X';
- b[0].Event.KeyEvent.wRepeatCount = 1;
-
- b[1].EventType = KEY_EVENT;
- b[1].Event.KeyEvent.bKeyDown = FALSE;
- b[1].Event.KeyEvent.uChar.AsciiChar = 'X';
- b[1].Event.KeyEvent.wVirtualKeyCode = 'X';
- b[1].Event.KeyEvent.wRepeatCount = 1;
-
- b[2].EventType = KEY_EVENT;
- b[2].Event.KeyEvent.bKeyDown = TRUE;
- b[2].Event.KeyEvent.dwControlKeyState = 0;
- b[2].Event.KeyEvent.uChar.AsciiChar = '\r';
- b[2].Event.KeyEvent.wVirtualKeyCode = VK_RETURN;
- b[2].Event.KeyEvent.wRepeatCount = 1;
- b[2].Event.KeyEvent.wVirtualScanCode = 0x1c;
-
- b[3].EventType = KEY_EVENT;
- b[3].Event.KeyEvent.bKeyDown = FALSE;
- b[3].Event.KeyEvent.dwControlKeyState = 0;
- b[3].Event.KeyEvent.uChar.AsciiChar = '\r';
- b[3].Event.KeyEvent.wVirtualKeyCode = VK_RETURN;
- b[3].Event.KeyEvent.wVirtualScanCode = 0x1c;
- b[3].Event.KeyEvent.wRepeatCount = 1;
- DWORD numb;
- WriteConsoleInput(hStdIn, b, 4, &numb);
-
- cliThread->wait();
-
- #else
-
- cliThread->destroy();
-
- #endif
-
- delete cliThread;
- }
-
- // for some unknown reason, unloading scripts here and not in worldrunnable
- // fixes a memory leak related to detaching threads from the module
- //UnloadScriptingModule();
-
- OpenSSLCrypto::threadsCleanup();
- // Exit the process with specified return value
- return World::GetExitCode();
-}
-
-/// Initialize connection to the databases
-bool Master::_StartDB()
-{
- MySQL::Library_Init();
-
- std::string dbString;
- uint8 asyncThreads, synchThreads;
-
- dbString = sConfigMgr->GetStringDefault("WorldDatabaseInfo", "");
- if (dbString.empty())
- {
- TC_LOG_ERROR("server.worldserver", "World database not specified in configuration file");
- return false;
- }
-
- asyncThreads = uint8(sConfigMgr->GetIntDefault("WorldDatabase.WorkerThreads", 1));
- if (asyncThreads < 1 || asyncThreads > 32)
- {
- TC_LOG_ERROR("server.worldserver", "World database: invalid number of worker threads specified. "
- "Please pick a value between 1 and 32.");
- return false;
- }
-
- synchThreads = uint8(sConfigMgr->GetIntDefault("WorldDatabase.SynchThreads", 1));
- ///- Initialize the world database
- if (!WorldDatabase.Open(dbString, asyncThreads, synchThreads))
- {
- TC_LOG_ERROR("server.worldserver", "Cannot connect to world database %s", dbString.c_str());
- return false;
- }
-
- ///- Get character database info from configuration file
- dbString = sConfigMgr->GetStringDefault("CharacterDatabaseInfo", "");
- if (dbString.empty())
- {
- TC_LOG_ERROR("server.worldserver", "Character database not specified in configuration file");
- return false;
- }
-
- asyncThreads = uint8(sConfigMgr->GetIntDefault("CharacterDatabase.WorkerThreads", 1));
- if (asyncThreads < 1 || asyncThreads > 32)
- {
- TC_LOG_ERROR("server.worldserver", "Character database: invalid number of worker threads specified. "
- "Please pick a value between 1 and 32.");
- return false;
- }
-
- synchThreads = uint8(sConfigMgr->GetIntDefault("CharacterDatabase.SynchThreads", 2));
-
- ///- Initialize the Character database
- if (!CharacterDatabase.Open(dbString, asyncThreads, synchThreads))
- {
- TC_LOG_ERROR("server.worldserver", "Cannot connect to Character database %s", dbString.c_str());
- return false;
- }
-
- ///- Get login database info from configuration file
- dbString = sConfigMgr->GetStringDefault("LoginDatabaseInfo", "");
- if (dbString.empty())
- {
- TC_LOG_ERROR("server.worldserver", "Login database not specified in configuration file");
- return false;
- }
-
- asyncThreads = uint8(sConfigMgr->GetIntDefault("LoginDatabase.WorkerThreads", 1));
- if (asyncThreads < 1 || asyncThreads > 32)
- {
- TC_LOG_ERROR("server.worldserver", "Login database: invalid number of worker threads specified. "
- "Please pick a value between 1 and 32.");
- return false;
- }
-
- synchThreads = uint8(sConfigMgr->GetIntDefault("LoginDatabase.SynchThreads", 1));
- ///- Initialise the login database
- if (!LoginDatabase.Open(dbString, asyncThreads, synchThreads))
- {
- TC_LOG_ERROR("server.worldserver", "Cannot connect to login database %s", dbString.c_str());
- return false;
- }
-
- ///- Get the realm Id from the configuration file
- realmID = sConfigMgr->GetIntDefault("RealmID", 0);
- if (!realmID)
- {
- TC_LOG_ERROR("server.worldserver", "Realm ID not defined in configuration file");
- return false;
- }
- TC_LOG_INFO("server.worldserver", "Realm running as realm ID %d", realmID);
-
- ///- Clean the database before starting
- ClearOnlineAccounts();
-
- ///- Insert version info into DB
- WorldDatabase.PExecute("UPDATE version SET core_version = '%s', core_revision = '%s'", _FULLVERSION, _HASH); // One-time query
-
- sWorld->LoadDBVersion();
-
- TC_LOG_INFO("server.worldserver", "Using World DB: %s", sWorld->GetDBVersion());
- return true;
-}
-
-void Master::_StopDB()
-{
- CharacterDatabase.Close();
- WorldDatabase.Close();
- LoginDatabase.Close();
-
- MySQL::Library_End();
-}
-
-/// Clear 'online' status for all accounts with characters in this realm
-void Master::ClearOnlineAccounts()
-{
- // Reset online status for all accounts with characters on the current realm
- LoginDatabase.DirectPExecute("UPDATE account SET online = 0 WHERE online > 0 AND id IN (SELECT acctid FROM realmcharacters WHERE realmid = %d)", realmID);
-
- // Reset online status for all characters
- CharacterDatabase.DirectExecute("UPDATE characters SET online = 0 WHERE online <> 0");
-
- // Battleground instance ids reset at server restart
- CharacterDatabase.DirectExecute("UPDATE character_battleground_data SET instanceId = 0");
-}
diff --git a/src/server/worldserver/Master.h b/src/server/worldserver/Master.h
deleted file mode 100644
index 9ee94a44acb..00000000000
--- a/src/server/worldserver/Master.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/// \addtogroup Trinityd
-/// @{
-/// \file
-
-#ifndef _MASTER_H
-#define _MASTER_H
-
-#include "Common.h"
-
-/// Start the server
-class Master
-{
- public:
- int Run();
-
- private:
- bool _StartDB();
- void _StopDB();
-
- void ClearOnlineAccounts();
-};
-
-#define sMaster ACE_Singleton<Master, ACE_Null_Mutex>::instance()
-
-#endif
-
-/// @}
diff --git a/src/server/worldserver/PrecompiledHeaders/worldPCH.h b/src/server/worldserver/PrecompiledHeaders/worldPCH.h
index f94dd953bba..6407485f70b 100644
--- a/src/server/worldserver/PrecompiledHeaders/worldPCH.h
+++ b/src/server/worldserver/PrecompiledHeaders/worldPCH.h
@@ -1,5 +1,3 @@
-#include "WorldSocket.h" // must be first to make ACE happy with ACE includes in it
-
#include "Common.h"
#include "World.h"
#include "Log.h"
diff --git a/src/server/worldserver/RemoteAccess/RARunnable.cpp b/src/server/worldserver/RemoteAccess/RARunnable.cpp
deleted file mode 100644
index 44b07163294..00000000000
--- a/src/server/worldserver/RemoteAccess/RARunnable.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/** \file
- \ingroup Trinityd
- */
-
-#include "Common.h"
-#include "Config.h"
-#include "Log.h"
-#include "RARunnable.h"
-#include "World.h"
-
-#include <ace/Reactor_Impl.h>
-#include <ace/TP_Reactor.h>
-#include <ace/Dev_Poll_Reactor.h>
-#include <ace/Acceptor.h>
-#include <ace/SOCK_Acceptor.h>
-
-#include "RASocket.h"
-
-RARunnable::RARunnable()
-{
- ACE_Reactor_Impl* imp;
-
-#if defined (ACE_HAS_EVENT_POLL) || defined (ACE_HAS_DEV_POLL)
- imp = new ACE_Dev_Poll_Reactor();
- imp->max_notify_iterations (128);
- imp->restart (1);
-#else
- imp = new ACE_TP_Reactor();
- imp->max_notify_iterations (128);
-#endif
-
- m_Reactor = new ACE_Reactor (imp, 1);
-}
-
-RARunnable::~RARunnable()
-{
- delete m_Reactor;
-}
-
-void RARunnable::run()
-{
- if (!sConfigMgr->GetBoolDefault("Ra.Enable", false))
- return;
-
- ACE_Acceptor<RASocket, ACE_SOCK_ACCEPTOR> acceptor;
-
- uint16 raPort = uint16(sConfigMgr->GetIntDefault("Ra.Port", 3443));
- std::string stringIp = sConfigMgr->GetStringDefault("Ra.IP", "0.0.0.0");
- ACE_INET_Addr listenAddress(raPort, stringIp.c_str());
-
- if (acceptor.open(listenAddress, m_Reactor) == -1)
- {
- TC_LOG_ERROR("server.worldserver", "Trinity RA can not bind to port %d on %s", raPort, stringIp.c_str());
- return;
- }
-
- TC_LOG_INFO("server.worldserver", "Starting Trinity RA on port %d on %s", raPort, stringIp.c_str());
-
- while (!World::IsStopped())
- {
- ACE_Time_Value interval(0, 100000);
- if (m_Reactor->run_reactor_event_loop(interval) == -1)
- break;
- }
-
- TC_LOG_DEBUG("server.worldserver", "Trinity RA thread exiting");
-}
diff --git a/src/server/worldserver/RemoteAccess/RARunnable.h b/src/server/worldserver/RemoteAccess/RARunnable.h
deleted file mode 100644
index 052b532572e..00000000000
--- a/src/server/worldserver/RemoteAccess/RARunnable.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/// \addtogroup Trinityd
-/// @{
-/// \file
-
-#ifndef _TRINITY_RARUNNABLE_H_
-#define _TRINITY_RARUNNABLE_H_
-
-#include "Common.h"
-
-#include <ace/Reactor.h>
-
-class RARunnable : public ACE_Based::Runnable
-{
-public:
- RARunnable();
- virtual ~RARunnable();
- void run() OVERRIDE;
-
-private:
- ACE_Reactor* m_Reactor;
-
-};
-
-#endif /* _TRINITY_RARUNNABLE_H_ */
-
-/// @}
diff --git a/src/server/worldserver/RemoteAccess/RASession.cpp b/src/server/worldserver/RemoteAccess/RASession.cpp
new file mode 100644
index 00000000000..846a4eb39e3
--- /dev/null
+++ b/src/server/worldserver/RemoteAccess/RASession.cpp
@@ -0,0 +1,222 @@
+/*
+* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <memory>
+#include <boost/asio/write.hpp>
+#include <boost/asio/read_until.hpp>
+#include <boost/array.hpp>
+#include "RASession.h"
+#include "AccountMgr.h"
+#include "Log.h"
+#include "DatabaseEnv.h"
+#include "World.h"
+#include "Config.h"
+
+using boost::asio::ip::tcp;
+
+void RASession::Start()
+{
+ boost::asio::socket_base::bytes_readable command(true);
+ _socket.io_control(command);
+ std::size_t bytes_readable = command.get();
+
+ // Check if there are bytes available, if they are, then the client is requesting the negotiation
+ if (bytes_readable > 0)
+ {
+ // Handle subnegotiation
+ boost::array<char, 1024> buf;
+ _socket.read_some(boost::asio::buffer(buf));
+
+ // Send the end-of-negotiation packet
+ uint8 const reply[2] = { 0xFF, 0xF0 };
+ _socket.write_some(boost::asio::buffer(reply));
+ }
+
+ Send("Authentication Required\r\n");
+ Send("Username: ");
+
+ std::string username = ReadString();
+
+ if (username.empty())
+ return;
+
+ TC_LOG_INFO("commands.ra", "Accepting RA connection from user %s (IP: %s)", username.c_str(), GetRemoteIpAddress().c_str());
+
+ Send("Password: ");
+
+ std::string password = ReadString();
+ if (password.empty())
+ return;
+
+ if (!CheckAccessLevel(username) || !CheckPassword(username, password))
+ {
+ Send("Authentication failed\r\n");
+ _socket.close();
+ return;
+ }
+
+ TC_LOG_INFO("commands.ra", "User %s (IP: %s) authenticated correctly to RA", username.c_str(), GetRemoteIpAddress().c_str());
+
+ // Authentication successful, send the motd
+ Send(std::string(std::string(sWorld->GetMotd()) + "\r\n").c_str());
+
+ // Read commands
+ for (;;)
+ {
+ Send("TC>");
+ std::string command = ReadString();
+
+ if (ProcessCommand(command))
+ break;
+ }
+
+ _socket.close();
+}
+
+int RASession::Send(const char* data)
+{
+ std::ostream os(&_writeBuffer);
+ os << data;
+ size_t written = _socket.send(_writeBuffer.data());
+ _writeBuffer.consume(written);
+ return written;
+}
+
+std::string RASession::ReadString()
+{
+ boost::system::error_code error;
+ size_t read = boost::asio::read_until(_socket, _readBuffer, "\r\n", error);
+ if (!read)
+ {
+ _socket.close();
+ return "";
+ }
+
+ std::string line;
+ std::istream is(&_readBuffer);
+ std::getline(is, line);
+
+ if (*line.rbegin() == '\r')
+ line.erase(line.length() - 1);
+
+ return line;
+}
+
+bool RASession::CheckAccessLevel(const std::string& user)
+{
+ std::string safeUser = user;
+
+ AccountMgr::normalizeString(safeUser);
+
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_ACCESS);
+ stmt->setString(0, safeUser);
+ PreparedQueryResult result = LoginDatabase.Query(stmt);
+
+ if (!result)
+ {
+ TC_LOG_INFO("commands.ra", "User %s does not exist in database", user.c_str());
+ return false;
+ }
+
+ Field* fields = result->Fetch();
+
+ if (fields[1].GetUInt8() < sConfigMgr->GetIntDefault("RA.MinLevel", 3))
+ {
+ TC_LOG_INFO("commands.ra", "User %s has no privilege to login", user.c_str());
+ return false;
+ }
+ else if (fields[2].GetInt32() != -1)
+ {
+ TC_LOG_INFO("commands.ra", "User %s has to be assigned on all realms (with RealmID = '-1')", user.c_str());
+ return false;
+ }
+
+ return true;
+}
+
+bool RASession::CheckPassword(const std::string& user, const std::string& pass)
+{
+ std::string safe_user = user;
+ std::transform(safe_user.begin(), safe_user.end(), safe_user.begin(), ::toupper);
+ AccountMgr::normalizeString(safe_user);
+
+ std::string safe_pass = pass;
+ AccountMgr::normalizeString(safe_pass);
+ std::transform(safe_pass.begin(), safe_pass.end(), safe_pass.begin(), ::toupper);
+
+ std::string hash = AccountMgr::CalculateShaPassHash(safe_user, safe_pass);
+
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_CHECK_PASSWORD_BY_NAME);
+
+ stmt->setString(0, safe_user);
+ stmt->setString(1, hash);
+
+ PreparedQueryResult result = LoginDatabase.Query(stmt);
+
+ if (!result)
+ {
+ TC_LOG_INFO("commands.ra", "Wrong password for user: %s", user.c_str());
+ return false;
+ }
+
+ return true;
+}
+
+bool RASession::ProcessCommand(std::string& command)
+{
+ if (command.length() == 0)
+ return true;
+
+ TC_LOG_INFO("commands.ra", "Received command: %s", command.c_str());
+
+ // handle quit, exit and logout commands to terminate connection
+ if (command == "quit" || command == "exit" || command == "logout")
+ {
+ Send("Bye\r\n");
+ return true;
+ }
+
+ // Obtain a new promise per command
+ if (_commandExecuting != nullptr)
+ delete _commandExecuting;
+
+ _commandExecuting = new std::promise<void>();
+
+ CliCommandHolder* cmd = new CliCommandHolder(this, command.c_str(), &RASession::CommandPrint, &RASession::CommandFinished);
+ sWorld->QueueCliCommand(cmd);
+
+ // Wait for the command to finish
+ _commandExecuting->get_future().wait();
+
+ return false;
+}
+
+void RASession::CommandPrint(void* callbackArg, const char* text)
+{
+ if (!text || !*text)
+ return;
+
+ RASession* session = static_cast<RASession*>(callbackArg);
+ session->Send(text);
+}
+
+void RASession::CommandFinished(void* callbackArg, bool /*success*/)
+{
+ RASession* session = static_cast<RASession*>(callbackArg);
+ session->_commandExecuting->set_value();
+}
diff --git a/src/server/worldserver/RemoteAccess/RASession.h b/src/server/worldserver/RemoteAccess/RASession.h
new file mode 100644
index 00000000000..61156a0fa53
--- /dev/null
+++ b/src/server/worldserver/RemoteAccess/RASession.h
@@ -0,0 +1,63 @@
+/*
+* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __RASESSION_H__
+#define __RASESSION_H__
+
+#include <memory>
+#include <boost/asio/ip/tcp.hpp>
+#include <boost/asio/streambuf.hpp>
+#include "Common.h"
+
+#include <future>
+
+using boost::asio::ip::tcp;
+
+const size_t bufferSize = 4096;
+
+#define BUFFER_SIZE 4096
+
+class RASession : public std::enable_shared_from_this <RASession>
+{
+public:
+ RASession(tcp::socket&& socket) : _socket(std::move(socket)), _commandExecuting(nullptr)
+ {
+ }
+
+ void Start();
+
+ const std::string GetRemoteIpAddress() const { return _socket.remote_endpoint().address().to_string(); }
+ unsigned short GetRemotePort() const { return _socket.remote_endpoint().port(); }
+
+private:
+ int Send(const char* data);
+ std::string ReadString();
+ bool CheckAccessLevel(const std::string& user);
+ bool CheckPassword(const std::string& user, const std::string& pass);
+ bool ProcessCommand(std::string& command);
+
+ static void CommandPrint(void* callbackArg, const char* text);
+ static void CommandFinished(void* callbackArg, bool);
+
+ tcp::socket _socket;
+ boost::asio::streambuf _readBuffer;
+ boost::asio::streambuf _writeBuffer;
+ std::promise<void>* _commandExecuting;
+};
+
+#endif
diff --git a/src/server/worldserver/RemoteAccess/RASocket.cpp b/src/server/worldserver/RemoteAccess/RASocket.cpp
deleted file mode 100644
index 6e621ddfffe..00000000000
--- a/src/server/worldserver/RemoteAccess/RASocket.cpp
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/** \file
- \ingroup Trinityd
-*/
-
-#include "Common.h"
-#include "Configuration/Config.h"
-#include "Database/DatabaseEnv.h"
-#include "AccountMgr.h"
-#include "Log.h"
-#include "RASocket.h"
-#include "Util.h"
-#include "World.h"
-#include "SHA1.h"
-
-RASocket::RASocket()
-{
- _minLevel = uint8(sConfigMgr->GetIntDefault("RA.MinLevel", 3));
- _commandExecuting = false;
-}
-
-int RASocket::open(void *)
-{
- ACE_INET_Addr remoteAddress;
-
- if (peer().get_remote_addr(remoteAddress) == -1)
- {
- TC_LOG_ERROR("server.worldserver", "RASocket::open: peer().get_remote_addr error is %s", ACE_OS::strerror(errno));
- return -1;
- }
-
- TC_LOG_INFO("commands.ra", "Incoming connection from %s", remoteAddress.get_host_addr());
-
- return activate();
-}
-
-int RASocket::handle_close(ACE_HANDLE /*handle*/, ACE_Reactor_Mask /*mask*/)
-{
- TC_LOG_INFO("commands.ra", "Closing connection");
- peer().close_reader();
- wait();
- // While the above wait() will wait for the ::svc() to finish, it will not wait for the async event
- // RASocket::commandfinished to be completed. Calling destroy() before the latter function ends
- // will lead to using a freed pointer -> crash.
- while (_commandExecuting.value())
- ACE_OS::sleep(1);
-
- destroy();
- return 0;
-}
-
-int RASocket::send(const std::string& line)
-{
-#ifdef MSG_NOSIGNAL
- ssize_t n = peer().send(line.c_str(), line.length(), MSG_NOSIGNAL);
-#else
- ssize_t n = peer().send(line.c_str(), line.length());
-#endif // MSG_NOSIGNAL
-
- return n == ssize_t(line.length()) ? 0 : -1;
-}
-
-int RASocket::recv_line(ACE_Message_Block& buffer)
-{
- char byte;
- for (;;)
- {
- ssize_t n = peer().recv(&byte, sizeof(byte));
-
- if (n < 0)
- return -1;
-
- if (n == 0)
- {
- // EOF, connection was closed
- errno = ECONNRESET;
- return -1;
- }
-
- ACE_ASSERT(n == sizeof(byte));
-
- if (byte == '\n')
- break;
- else if (byte == '\r') /* Ignore CR */
- continue;
- else if (buffer.copy(&byte, sizeof(byte)) == -1)
- return -1;
- }
-
- const char nullTerm = '\0';
- if (buffer.copy(&nullTerm, sizeof(nullTerm)) == -1)
- return -1;
-
- return 0;
-}
-
-int RASocket::recv_line(std::string& out_line)
-{
- char buf[4096];
-
- ACE_Data_Block db(sizeof (buf),
- ACE_Message_Block::MB_DATA,
- buf,
- 0,
- 0,
- ACE_Message_Block::DONT_DELETE,
- 0);
-
- ACE_Message_Block message_block(&db,
- ACE_Message_Block::DONT_DELETE,
- 0);
-
- if (recv_line(message_block) == -1)
- {
- TC_LOG_DEBUG("commands.ra", "Recv error %s", ACE_OS::strerror(errno));
- return -1;
- }
-
- out_line = message_block.rd_ptr();
-
- return 0;
-}
-
-int RASocket::process_command(const std::string& command)
-{
- if (command.length() == 0)
- return 0;
-
- TC_LOG_INFO("commands.ra", "Received command: %s", command.c_str());
-
- // handle quit, exit and logout commands to terminate connection
- if (command == "quit" || command == "exit" || command == "logout") {
- (void) send("Bye\r\n");
- return -1;
- }
-
- _commandExecuting = true;
- CliCommandHolder* cmd = new CliCommandHolder(this, command.c_str(), &RASocket::zprint, &RASocket::commandFinished);
- sWorld->QueueCliCommand(cmd);
-
- // wait for result
- ACE_Message_Block* mb;
- for (;;)
- {
- if (getq(mb) == -1)
- return -1;
-
- if (mb->msg_type() == ACE_Message_Block::MB_BREAK)
- {
- mb->release();
- break;
- }
-
- if (send(std::string(mb->rd_ptr(), mb->length())) == -1)
- {
- mb->release();
- return -1;
- }
-
- mb->release();
- }
-
- return 0;
-}
-
-int RASocket::check_access_level(const std::string& user)
-{
- std::string safeUser = user;
-
- AccountMgr::normalizeString(safeUser);
-
- PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_ACCESS);
- stmt->setString(0, safeUser);
- PreparedQueryResult result = LoginDatabase.Query(stmt);
-
- if (!result)
- {
- TC_LOG_INFO("commands.ra", "User %s does not exist in database", user.c_str());
- return -1;
- }
-
- Field* fields = result->Fetch();
-
- if (fields[1].GetUInt8() < _minLevel)
- {
- TC_LOG_INFO("commands.ra", "User %s has no privilege to login", user.c_str());
- return -1;
- }
- else if (fields[2].GetInt32() != -1)
- {
- TC_LOG_INFO("commands.ra", "User %s has to be assigned on all realms (with RealmID = '-1')", user.c_str());
- return -1;
- }
-
- return 0;
-}
-
-int RASocket::check_password(const std::string& user, const std::string& pass)
-{
- std::string safe_user = user;
- AccountMgr::normalizeString(safe_user);
-
- std::string safe_pass = pass;
- AccountMgr::normalizeString(safe_pass);
-
- std::string hash = AccountMgr::CalculateShaPassHash(safe_user, safe_pass);
-
- PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_CHECK_PASSWORD_BY_NAME);
-
- stmt->setString(0, safe_user);
- stmt->setString(1, hash);
-
- PreparedQueryResult result = LoginDatabase.Query(stmt);
-
- if (!result)
- {
- TC_LOG_INFO("commands.ra", "Wrong password for user: %s", user.c_str());
- return -1;
- }
-
- return 0;
-}
-
-int RASocket::authenticate()
-{
- if (send(std::string("Username: ")) == -1)
- return -1;
-
- std::string user;
- if (recv_line(user) == -1)
- return -1;
-
- if (send(std::string("Password: ")) == -1)
- return -1;
-
- std::string pass;
- if (recv_line(pass) == -1)
- return -1;
-
- TC_LOG_INFO("commands.ra", "Login attempt for user: %s", user.c_str());
-
- if (check_access_level(user) == -1)
- return -1;
-
- if (check_password(user, pass) == -1)
- return -1;
-
- TC_LOG_INFO("commands.ra", "User login: %s", user.c_str());
-
- return 0;
-}
-
-
-int RASocket::subnegotiate()
-{
- char buf[1024];
-
- ACE_Data_Block db(sizeof (buf),
- ACE_Message_Block::MB_DATA,
- buf,
- 0,
- 0,
- ACE_Message_Block::DONT_DELETE,
- 0);
-
- ACE_Message_Block message_block(&db,
- ACE_Message_Block::DONT_DELETE,
- 0);
-
- const size_t recv_size = message_block.space();
-
- // Wait a maximum of 1000ms for negotiation packet - not all telnet clients may send it
- ACE_Time_Value waitTime = ACE_Time_Value(1);
- const ssize_t n = peer().recv(message_block.wr_ptr(),
- recv_size, &waitTime);
-
- if (n <= 0)
- return int(n);
-
- if (n >= 1024)
- {
- TC_LOG_DEBUG("commands.ra", "RASocket::subnegotiate: allocated buffer 1024 bytes was too small for negotiation packet, size: %u", uint32(n));
- return -1;
- }
-
- buf[n] = '\0';
-
- #ifdef _DEBUG
- for (uint8 i = 0; i < n; )
- {
- uint8 iac = buf[i];
- if (iac == 0xFF) // "Interpret as Command" (IAC)
- {
- uint8 command = buf[++i];
- std::stringstream ss;
- switch (command)
- {
- case 0xFB: // WILL
- ss << "WILL ";
- break;
- case 0xFC: // WON'T
- ss << "WON'T ";
- break;
- case 0xFD: // DO
- ss << "DO ";
- break;
- case 0xFE: // DON'T
- ss << "DON'T ";
- break;
- default:
- return -1; // not allowed
- }
-
- uint8 param = buf[++i];
- ss << uint32(param);
- TC_LOG_DEBUG("commands.ra", ss.str().c_str());
- }
- ++i;
- }
- #endif
-
- //! Just send back end of subnegotiation packet
- uint8 const reply[2] = {0xFF, 0xF0};
-
-#ifdef MSG_NOSIGNAL
- return int(peer().send(reply, 2, MSG_NOSIGNAL));
-#else
- return int(peer().send(reply, 2));
-#endif // MSG_NOSIGNAL
-}
-
-int RASocket::svc(void)
-{
- //! Subnegotiation may differ per client - do not react on it
- subnegotiate();
-
- if (send("Authentication required\r\n") == -1)
- return -1;
-
- if (authenticate() == -1)
- {
- (void) send("Authentication failed\r\n");
- return -1;
- }
-
- // send motd
- if (send(std::string(sWorld->GetMotd()) + "\r\n") == -1)
- return -1;
-
- for (;;)
- {
- // show prompt
- if (send("TC> ") == -1)
- return -1;
-
- std::string line;
-
- if (recv_line(line) == -1)
- return -1;
-
- if (process_command(line) == -1)
- return -1;
- }
-
- return 0;
-}
-
-void RASocket::zprint(void* callbackArg, const char * szText)
-{
- if (!szText || !callbackArg)
- return;
-
- RASocket* socket = static_cast<RASocket*>(callbackArg);
- size_t sz = strlen(szText);
-
- ACE_Message_Block* mb = new ACE_Message_Block(sz);
- mb->copy(szText, sz);
-
- ACE_Time_Value tv = ACE_Time_Value::zero;
- if (socket->putq(mb, &tv) == -1)
- {
- TC_LOG_DEBUG("commands.ra", "Failed to enqueue message, queue is full or closed. Error is %s", ACE_OS::strerror(errno));
- mb->release();
- }
-}
-
-void RASocket::commandFinished(void* callbackArg, bool /*success*/)
-{
- if (!callbackArg)
- return;
-
- RASocket* socket = static_cast<RASocket*>(callbackArg);
-
- ACE_Message_Block* mb = new ACE_Message_Block();
-
- mb->msg_type(ACE_Message_Block::MB_BREAK);
-
- // the message is 0 size control message to tell that command output is finished
- // hence we don't put timeout, because it shouldn't increase queue size and shouldn't block
- if (socket->putq(mb->duplicate()) == -1)
- // getting here is bad, command can't be marked as complete
- TC_LOG_DEBUG("commands.ra", "Failed to enqueue command end message. Error is %s", ACE_OS::strerror(errno));
-
- mb->release();
-
- socket->_commandExecuting = false;
-}
diff --git a/src/server/worldserver/RemoteAccess/RASocket.h b/src/server/worldserver/RemoteAccess/RASocket.h
deleted file mode 100644
index ae201747010..00000000000
--- a/src/server/worldserver/RemoteAccess/RASocket.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/// \addtogroup Trinityd
-/// @{
-/// \file
-
-#ifndef _RASOCKET_H
-#define _RASOCKET_H
-
-#include "Common.h"
-
-#include <ace/Synch_Traits.h>
-#include <ace/Svc_Handler.h>
-#include <ace/SOCK_Stream.h>
-#include <ace/SOCK_Acceptor.h>
-
-/// Remote Administration socket
-class RASocket : public ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_MT_SYNCH>
-{
- public:
- RASocket();
- virtual ~RASocket() { }
-
- virtual int svc() OVERRIDE;
- virtual int open(void* = 0) OVERRIDE;
- virtual int handle_close(ACE_HANDLE = ACE_INVALID_HANDLE, ACE_Reactor_Mask = ACE_Event_Handler::ALL_EVENTS_MASK) OVERRIDE;
-
- private:
- int recv_line(std::string& outLine);
- int recv_line(ACE_Message_Block& buffer);
- int process_command(const std::string& command);
- int authenticate();
- int subnegotiate(); ///< Used by telnet protocol RFC 854 / 855
- int check_access_level(const std::string& user);
- int check_password(const std::string& user, const std::string& pass);
- int send(const std::string& line);
-
- static void zprint(void* callbackArg, const char* szText);
- static void commandFinished(void* callbackArg, bool success);
-
- private:
- uint8 _minLevel; ///< Minimum security level required to connect
- ACE_Atomic_Op<ACE_Thread_Mutex, bool> _commandExecuting;
-};
-
-#endif
-
-/// @}
diff --git a/src/server/worldserver/TCSoap/TCSoap.cpp b/src/server/worldserver/TCSoap/TCSoap.cpp
index 1549019352d..5122752f3a4 100644
--- a/src/server/worldserver/TCSoap/TCSoap.cpp
+++ b/src/server/worldserver/TCSoap/TCSoap.cpp
@@ -22,7 +22,7 @@
#include "AccountMgr.h"
#include "Log.h"
-void TCSoapRunnable::run()
+void TCSoapThread(const std::string& host, uint16 port)
{
struct soap soap;
soap_init(&soap);
@@ -33,13 +33,13 @@ void TCSoapRunnable::run()
soap.accept_timeout = 3;
soap.recv_timeout = 5;
soap.send_timeout = 5;
- if (!soap_valid_socket(soap_bind(&soap, _host.c_str(), _port, 100)))
+ if (!soap_valid_socket(soap_bind(&soap, host.c_str(), port, 100)))
{
- TC_LOG_ERROR("network.soap", "Couldn't bind to %s:%d", _host.c_str(), _port);
+ TC_LOG_ERROR("network.soap", "Couldn't bind to %s:%d", host.c_str(), port);
exit(-1);
}
- TC_LOG_INFO("network.soap", "Bound to http://%s:%d", _host.c_str(), _port);
+ TC_LOG_INFO("network.soap", "Bound to http://%s:%d", host.c_str(), port);
while (!World::IsStopped())
{
@@ -48,28 +48,21 @@ void TCSoapRunnable::run()
TC_LOG_DEBUG("network.soap", "Accepted connection from IP=%d.%d.%d.%d", (int)(soap.ip>>24)&0xFF, (int)(soap.ip>>16)&0xFF, (int)(soap.ip>>8)&0xFF, (int)soap.ip&0xFF);
struct soap* thread_soap = soap_copy(&soap);// make a safe copy
-
- ACE_Message_Block* mb = new ACE_Message_Block(sizeof(struct soap*));
- ACE_OS::memcpy(mb->wr_ptr(), &thread_soap, sizeof(struct soap*));
- process_message(mb);
+ process_message(thread_soap);
}
soap_done(&soap);
}
-void TCSoapRunnable::process_message(ACE_Message_Block* mb)
+void process_message(struct soap* soap_message)
{
- ACE_TRACE (ACE_TEXT ("SOAPWorkingThread::process_message"));
-
- struct soap* soap;
- ACE_OS::memcpy(&soap, mb->rd_ptr (), sizeof(struct soap*));
- mb->release();
+ TC_LOG_TRACE("network.soap", "SOAPWorkingThread::process_message");
- soap_serve(soap);
- soap_destroy(soap); // dealloc C++ data
- soap_end(soap); // dealloc data and clean up
- soap_done(soap); // detach soap struct
- free(soap);
+ soap_serve(soap_message);
+ soap_destroy(soap_message); // dealloc C++ data
+ soap_end(soap_message); // dealloc data and clean up
+ soap_done(soap_message); // detach soap struct
+ free(soap_message);
}
/*
Code used for generating stubs:
@@ -112,19 +105,15 @@ int ns1__executeCommand(soap* soap, char* command, char** result)
// commands are executed in the world thread. We have to wait for them to be completed
{
- // CliCommandHolder will be deleted from world, accessing after queueing is NOT save
+ // CliCommandHolder will be deleted from world, accessing after queueing is NOT safe
CliCommandHolder* cmd = new CliCommandHolder(&connection, command, &SOAPCommand::print, &SOAPCommand::commandFinished);
sWorld->QueueCliCommand(cmd);
}
- // wait for callback to complete command
-
- int acc = connection.pendingCommands.acquire();
- if (acc)
- TC_LOG_ERROR("network.soap", "Error while acquiring lock, acc = %i, errno = %u", acc, errno);
-
- // alright, command finished
+ // Wait until the command has finished executing
+ connection.finishedPromise.get_future().wait();
+ // The command has finished executing already
char* printBuffer = soap_strdup(soap, connection.m_printBuffer.c_str());
if (connection.hasCommandSucceeded())
{
@@ -139,7 +128,6 @@ void SOAPCommand::commandFinished(void* soapconnection, bool success)
{
SOAPCommand* con = (SOAPCommand*)soapconnection;
con->setCommandSuccess(success);
- con->pendingCommands.release();
}
////////////////////////////////////////////////////////////////////////////////
diff --git a/src/server/worldserver/TCSoap/TCSoap.h b/src/server/worldserver/TCSoap/TCSoap.h
index 34a3b336464..3536d1160bc 100644
--- a/src/server/worldserver/TCSoap/TCSoap.h
+++ b/src/server/worldserver/TCSoap/TCSoap.h
@@ -19,36 +19,18 @@
#define _TCSOAP_H
#include "Define.h"
+#include <mutex>
+#include <future>
+#include <string>
-#include <ace/Semaphore.h>
-#include <ace/Task.h>
-#include <Threading.h>
-
-class TCSoapRunnable : public ACE_Based::Runnable
-{
- public:
- TCSoapRunnable() : _port(0) { }
-
- void run() OVERRIDE;
-
- void SetListenArguments(const std::string& host, uint16 port)
- {
- _host = host;
- _port = port;
- }
-
- private:
- void process_message(ACE_Message_Block* mb);
-
- std::string _host;
- uint16 _port;
-};
+void process_message(struct soap* soap_message);
+void TCSoapThread(const std::string& host, uint16 port);
class SOAPCommand
{
public:
SOAPCommand():
- pendingCommands(0, USYNC_THREAD, "pendingCommands"), m_success(false)
+ m_success(false)
{
}
@@ -61,11 +43,10 @@ class SOAPCommand
m_printBuffer += msg;
}
- ACE_Semaphore pendingCommands;
-
void setCommandSuccess(bool val)
{
m_success = val;
+ finishedPromise.set_value();
}
bool hasCommandSucceeded() const
@@ -82,6 +63,7 @@ class SOAPCommand
bool m_success;
std::string m_printBuffer;
+ std::promise<void> finishedPromise;
};
#endif
diff --git a/src/server/worldserver/WorldThread/WorldRunnable.cpp b/src/server/worldserver/WorldThread/WorldRunnable.cpp
deleted file mode 100644
index 476007f6ea0..00000000000
--- a/src/server/worldserver/WorldThread/WorldRunnable.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/** \file
- \ingroup Trinityd
-*/
-
-#include "Common.h"
-#include "ObjectAccessor.h"
-#include "World.h"
-#include "WorldSocketMgr.h"
-#include "Database/DatabaseEnv.h"
-#include "ScriptMgr.h"
-#include "BattlegroundMgr.h"
-#include "MapManager.h"
-#include "Timer.h"
-#include "WorldRunnable.h"
-#include "OutdoorPvPMgr.h"
-
-#define WORLD_SLEEP_CONST 50
-
-#ifdef _WIN32
-#include "ServiceWin32.h"
-extern int m_ServiceStatus;
-#endif
-
-/// Heartbeat for the World
-void WorldRunnable::run()
-{
- uint32 realCurrTime = 0;
- uint32 realPrevTime = getMSTime();
-
- uint32 prevSleepTime = 0; // used for balanced full tick time length near WORLD_SLEEP_CONST
-
- sScriptMgr->OnStartup();
-
- ///- While we have not World::m_stopEvent, update the world
- while (!World::IsStopped())
- {
- ++World::m_worldLoopCounter;
- realCurrTime = getMSTime();
-
- uint32 diff = getMSTimeDiff(realPrevTime, realCurrTime);
-
- sWorld->Update( diff );
- realPrevTime = realCurrTime;
-
- // diff (D0) include time of previous sleep (d0) + tick time (t0)
- // we want that next d1 + t1 == WORLD_SLEEP_CONST
- // we can't know next t1 and then can use (t0 + d1) == WORLD_SLEEP_CONST requirement
- // d1 = WORLD_SLEEP_CONST - t0 = WORLD_SLEEP_CONST - (D0 - d0) = WORLD_SLEEP_CONST + d0 - D0
- if (diff <= WORLD_SLEEP_CONST+prevSleepTime)
- {
- prevSleepTime = WORLD_SLEEP_CONST+prevSleepTime-diff;
- ACE_Based::Thread::Sleep(prevSleepTime);
- }
- else
- prevSleepTime = 0;
-
- #ifdef _WIN32
- if (m_ServiceStatus == 0)
- World::StopNow(SHUTDOWN_EXIT_CODE);
-
- while (m_ServiceStatus == 2)
- Sleep(1000);
- #endif
- }
-
- sScriptMgr->OnShutdown();
-
- sWorld->KickAll(); // save and kick all players
- sWorld->UpdateSessions( 1 ); // real players unload required UpdateSessions call
-
- // unload battleground templates before different singletons destroyed
- sBattlegroundMgr->DeleteAllBattlegrounds();
-
- sWorldSocketMgr->StopNetwork();
-
- sMapMgr->UnloadAll(); // unload all grids (including locked in memory)
- sObjectAccessor->UnloadAll(); // unload 'i_player2corpse' storage and remove from world
- sScriptMgr->Unload();
- sOutdoorPvPMgr->Die();
-}
diff --git a/src/server/worldserver/WorldThread/WorldRunnable.h b/src/server/worldserver/WorldThread/WorldRunnable.h
deleted file mode 100644
index 563a6b03827..00000000000
--- a/src/server/worldserver/WorldThread/WorldRunnable.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/// \addtogroup Trinityd
-/// @{
-/// \file
-
-#ifndef __WORLDRUNNABLE_H
-#define __WORLDRUNNABLE_H
-
-/// Heartbeat thread for the World
-class WorldRunnable : public ACE_Based::Runnable
-{
- public:
- void run() OVERRIDE;
-};
-
-#endif
-
-/// @}
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index f71ef5d064b..d98a061b9f3 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -144,6 +144,19 @@ WorldServerPort = 8085
BindIP = "0.0.0.0"
#
+# ThreadPool
+# Description: Number of threads to be used for the global thread pool
+# The thread pool is currently used for:
+# - Signal handling
+# - Remote access
+# - Database keep-alive ping
+# - Core freeze check
+# - World socket networking
+# Default: 2
+
+ThreadPool = 2
+
+#
###################################################################################################
###################################################################################################
@@ -161,7 +174,8 @@ UseProcessors = 0
#
# ProcessPriority
# Description: Process priority setting for Windows and Linux based systems.
-# Details: On Linux, a nice value of -15 is used. (requires superuser). On Windows, process is set to HIGH class.
+# Details: On Linux, a nice value of -15 is used. (requires superuser).
+# On Windows, process is set to HIGH class.
# Default: 0 - (Normal)
# 1 - (High)
@@ -181,11 +195,10 @@ Compression = 1
# Description: Maximum number of players in the world. Excluding Mods, GMs and Admins.
# Important: If you want to block players and only allow Mods, GMs or Admins to join the
# server, use the DB field "auth.realmlist.allowedSecurityLevel".
-# Default: 100 - (Enabled)
+# Default: 0 - (Disabled, No limit)
# 1+ - (Enabled)
-# 0 - (Disabled, No limit)
-PlayerLimit = 100
+PlayerLimit = 0
#
# SaveRespawnTimeImmediately
@@ -404,8 +417,8 @@ PidFile = ""
#
# PacketLogFile
# Description: Binary packet logging file for the world server.
-# Filename extension must be .bin to be parsable with WowPacketParser.
-# Example: "World.bin" - (Enabled)
+# Filename extension must be .pkt to be parsable with WowPacketParser.
+# Example: "World.pkt" - (Enabled)
# Default: "" - (Disabled)
PacketLogFile = ""
@@ -1069,7 +1082,8 @@ Account.PasswordChangeSecurity = 0
#
# BirthdayTime
-# Description: Set to date of project's birth in UNIX time. By default the date when TrinityCore was started (Thu Oct 2, 2008)
+# Description: Set to date of project's birth in UNIX time. By default the date when
+# TrinityCore was started (Thu Oct 2, 2008)
# Default: 1222964635
#
#
@@ -1353,6 +1367,14 @@ Rate.Creature.Elite.RAREELITE.HP = 1
Rate.Creature.Elite.WORLDBOSS.HP = 1
#
+# Creature.PickPocketRefillDelay
+# Description: Time in seconds that the server will wait before refilling the pickpocket loot
+# for a creature
+# Default: 600
+
+Creature.PickPocketRefillDelay = 600
+
+#
# ListenRange.Say
# Description: Distance in which players can read say messages from creatures or
# gameobjects.
@@ -1719,6 +1741,15 @@ Rate.XP.Quest = 1
Rate.XP.Explore = 1
#
+# Rate.Quest.Money.Reward
+# Rate.Quest.Money.Max.Level.Reward
+# Description: Multiplier for money quest rewards. Can not be below 0.
+# Default: 1
+
+Rate.Quest.Money.Reward = 1
+Rate.Quest.Money.Max.Level.Reward = 1
+
+#
# Rate.RepairCost
# Description: Repair cost rate.
# Default: 1
@@ -2619,8 +2650,10 @@ UI.ShowQuestLevelsInDialogs = 0
# 1 - Prefix Timestamp to the text
# 2 - Prefix Log Level to the text
# 4 - Prefix Log Filter type to the text
-# 8 - Append timestamp to the log file name. Format: YYYY-MM-DD_HH-MM-SS (Only used with Type = 2)
-# 16 - Make a backup of existing file before overwrite (Only used with Mode = w)
+# 8 - Append timestamp to the log file name. Format: YYYY-MM-DD_HH-MM-SS
+# (Only used with Type = 2)
+# 16 - Make a backup of existing file before overwrite
+# (Only used with Mode = w)
#
# Colors (read as optional1 if Type = Console)
# Format: "fatal error warn info debug trace"
@@ -2735,6 +2768,14 @@ Logger.sql.sql=5,Console DBErrors
Log.Async.Enable = 0
#
+# Allow.IP.Based.Action.Logging
+# Description: Logs actions, e.g. account login and logout to name a few, based on IP of
+# current session.
+# Default: 0 - (Disabled)
+# 1 - (Enabled)
+
+Allow.IP.Based.Action.Logging = 0
+#
###################################################################################################
###################################################################################################
diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp
index ca04e5a2081..0aeb7c38174 100644
--- a/src/tools/map_extractor/System.cpp
+++ b/src/tools/map_extractor/System.cpp
@@ -1052,7 +1052,7 @@ void ExtractDBCFiles(int locale, bool basicLocale)
{
string filename = path;
filename += (iter->c_str() + strlen("DBFilesClient\\"));
-
+
if(FileExists(filename.c_str()))
continue;
diff --git a/src/tools/map_extractor/adt.h b/src/tools/map_extractor/adt.h
index 5cb45d488d5..10894c7a697 100644
--- a/src/tools/map_extractor/adt.h
+++ b/src/tools/map_extractor/adt.h
@@ -40,6 +40,8 @@ enum LiquidType
#define ADT_CELL_SIZE 8
#define ADT_GRID_SIZE (ADT_CELLS_PER_GRID*ADT_CELL_SIZE)
+#pragma pack(push, 1)
+
//
// Adt file height map chunk
//
@@ -304,4 +306,6 @@ public:
adt_MHDR *a_grid;
};
+#pragma pack(pop)
+
#endif
diff --git a/src/tools/map_extractor/dbcfile.h b/src/tools/map_extractor/dbcfile.h
index 526c553e0f0..9e2e6670f89 100644
--- a/src/tools/map_extractor/dbcfile.h
+++ b/src/tools/map_extractor/dbcfile.h
@@ -82,6 +82,8 @@ public:
friend class DBCFile;
friend class DBCFile::Iterator;
+
+ Record& operator=(Record const& right);
};
/** Iterator that iterates over records
*/
@@ -111,6 +113,8 @@ public:
}
private:
Record record;
+
+ Iterator& operator=(Iterator const& right);
};
// Get record by id
diff --git a/src/tools/map_extractor/loadlib/loadlib.h b/src/tools/map_extractor/loadlib/loadlib.h
index 724c41ef3c9..39f800d9b4c 100644
--- a/src/tools/map_extractor/loadlib/loadlib.h
+++ b/src/tools/map_extractor/loadlib/loadlib.h
@@ -47,6 +47,8 @@ typedef uint8_t uint8;
#define FILE_FORMAT_VERSION 18
+#pragma pack(push, 1)
+
union u_map_fcc
{
char fcc_txt[4];
@@ -80,4 +82,7 @@ public:
bool loadFile(char *filename, bool log = true);
virtual void free();
};
+
+#pragma pack(pop)
+
#endif
diff --git a/src/tools/map_extractor/wdt.h b/src/tools/map_extractor/wdt.h
index a55598105b3..9b7fc53cb34 100644
--- a/src/tools/map_extractor/wdt.h
+++ b/src/tools/map_extractor/wdt.h
@@ -25,6 +25,8 @@
//**************************************************************************************
#define WDT_MAP_SIZE 64
+#pragma pack(push, 1)
+
class wdt_MWMO{
union{
uint32 fcc;
@@ -83,4 +85,6 @@ public:
wdt_MWMO *wmo;
};
+#pragma pack(pop)
+
#endif \ No newline at end of file
diff --git a/src/tools/mesh_extractor/ContinentBuilder.cpp b/src/tools/mesh_extractor/ContinentBuilder.cpp
index 8f6a918ef8d..8f509e6e8bb 100644
--- a/src/tools/mesh_extractor/ContinentBuilder.cpp
+++ b/src/tools/mesh_extractor/ContinentBuilder.cpp
@@ -34,13 +34,13 @@ private:
ContinentBuilder* cBuilder;
public:
BuilderThread(ContinentBuilder* _cBuilder, dtNavMeshParams& params) : Params(params), cBuilder(_cBuilder), Free(true) {}
-
- void SetData(int x, int y, int map, const std::string& cont)
- {
- X = x;
- Y = y;
- MapId = map;
- Continent = cont;
+
+ void SetData(int x, int y, int map, const std::string& cont)
+ {
+ X = x;
+ Y = y;
+ MapId = map;
+ Continent = cont;
}
int svc()
@@ -127,13 +127,13 @@ void ContinentBuilder::Build()
CalculateTileBounds();
dtNavMeshParams params;
-
+
std::vector<BuilderThread*> Threads;
if (TileMap->IsGlobalModel)
{
printf("Map %s ( %u ) is a WMO. Building with 1 thread.\n", Continent.c_str(), MapId);
-
+
TileBuilder* builder = new TileBuilder(this, Continent, 0, 0, MapId);
builder->AddGeometry(TileMap->Model, TileMap->ModelDefinition);
uint8* nav = builder->BuildInstance(params);
diff --git a/src/tools/mesh_extractor/DoodadHandler.cpp b/src/tools/mesh_extractor/DoodadHandler.cpp
index d56ba4c3bdf..a7d0c77b50c 100644
--- a/src/tools/mesh_extractor/DoodadHandler.cpp
+++ b/src/tools/mesh_extractor/DoodadHandler.cpp
@@ -21,7 +21,7 @@
#include "Model.h"
#include "G3D/Matrix4.h"
-DoodadHandler::DoodadHandler( ADT* adt ) :
+DoodadHandler::DoodadHandler( ADT* adt ) :
ObjectDataHandler(adt), _definitions(NULL), _paths(NULL)
{
Chunk* mddf = adt->ObjectData->GetChunkByName("MDDF");
@@ -38,7 +38,7 @@ void DoodadHandler::ProcessInternal( MapChunk* mcnk )
{
if (!IsSane())
return;
-
+
uint32 refCount = mcnk->Header.DoodadRefs;
FILE* stream = mcnk->Source->GetStream();
fseek(stream, mcnk->Source->Offset + mcnk->Header.OffsetMCRF, SEEK_SET);
@@ -111,7 +111,7 @@ void DoodadHandler::ReadDoodadPaths( Chunk* id, Chunk* data )
void DoodadHandler::InsertModelGeometry(const DoodadDefinition& def, Model* model)
{
uint32 vertOffset = Vertices.size();
-
+
for (std::vector<Vector3>::iterator itr = model->Vertices.begin(); itr != model->Vertices.end(); ++itr)
Vertices.push_back(Utils::TransformDoodadVertex(def, *itr)); // Vertices have to be converted based on the information from the DoodadDefinition struct
diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp
index 1926734ac72..9af8b0bcc75 100644
--- a/src/tools/mesh_extractor/MeshExtractor.cpp
+++ b/src/tools/mesh_extractor/MeshExtractor.cpp
@@ -290,7 +290,7 @@ bool HandleArgs(int argc, char** argv, uint32& threads, std::set<uint32>& mapLis
mapList.insert(atoi(token));
token = strtok(NULL, ",");
}
-
+
free(copy);
printf("Extracting only provided list of maps (%u).\n", uint32(mapList.size()));
@@ -448,7 +448,7 @@ int main(int argc, char* argv[])
LoadTile(navMesh, buff);
}
}
-
+
navMeshQuery->init(navMesh, 2048);
float nearestPt[3];
@@ -465,7 +465,7 @@ int main(int argc, char* argv[])
int hops;
dtPolyRef* hopBuffer = new dtPolyRef[8192];
dtStatus status = navMeshQuery->findPath(m_startRef, m_endRef, m_spos, m_epos, &m_filter, hopBuffer, &hops, 8192);
-
+
int resultHopCount;
float* straightPath = new float[2048*3];
unsigned char* pathFlags = new unsigned char[2048];
diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp
index 768314e5101..70d6c1b6c55 100644
--- a/src/tools/mesh_extractor/TileBuilder.cpp
+++ b/src/tools/mesh_extractor/TileBuilder.cpp
@@ -257,7 +257,7 @@ uint8* TileBuilder::BuildTiled(dtNavMeshParams& navMeshParams)
}
OutputDebugVertices();
-
+
uint32 numVerts = _Geometry->Vertices.size();
uint32 numTris = _Geometry->Triangles.size();
float* vertices;
diff --git a/src/tools/mesh_extractor/Utils.cpp b/src/tools/mesh_extractor/Utils.cpp
index 704acf967ee..1684ba0274d 100644
--- a/src/tools/mesh_extractor/Utils.cpp
+++ b/src/tools/mesh_extractor/Utils.cpp
@@ -205,7 +205,7 @@ void Utils::SaveToDisk( FILE* stream, const std::string& path )
fclose(stream);
return;
}
-
+
// And write it in the file
size_t wrote = fwrite(data, size, 1, disk);
if (wrote != 1)
diff --git a/src/tools/mesh_extractor/WorldModelHandler.cpp b/src/tools/mesh_extractor/WorldModelHandler.cpp
index c272496c0a7..e3d8e81eeb9 100644
--- a/src/tools/mesh_extractor/WorldModelHandler.cpp
+++ b/src/tools/mesh_extractor/WorldModelHandler.cpp
@@ -56,7 +56,7 @@ void WorldModelHandler::ProcessInternal( MapChunk* mcnk )
{
if (!IsSane())
return;
-
+
uint32 refCount = mcnk->Header.MapObjectRefs;
FILE* stream = mcnk->Source->GetStream();
fseek(stream, mcnk->Source->Offset + mcnk->Header.OffsetMCRF, SEEK_SET);
diff --git a/src/tools/mmaps_generator/CMakeLists.txt b/src/tools/mmaps_generator/CMakeLists.txt
index 591e0cc8e98..8661c035c8e 100644
--- a/src/tools/mmaps_generator/CMakeLists.txt
+++ b/src/tools/mmaps_generator/CMakeLists.txt
@@ -12,14 +12,17 @@ file(GLOB_RECURSE mmap_gen_sources *.cpp *.h)
set(mmap_gen_Includes
${CMAKE_BINARY_DIR}
- ${ACE_INCLUDE_DIR}
${CMAKE_SOURCE_DIR}/dep/libmpq
${CMAKE_SOURCE_DIR}/dep/zlib
${CMAKE_SOURCE_DIR}/dep/bzip2
${CMAKE_SOURCE_DIR}/dep/g3dlite/include
${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast
+ ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast/Include
${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour
+ ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour/Include
${CMAKE_SOURCE_DIR}/src/server/shared
+ ${CMAKE_SOURCE_DIR}/src/server/shared/Utilities
+ ${CMAKE_SOURCE_DIR}/src/server/shared/Threading
${CMAKE_SOURCE_DIR}/src/server/game/Conditions
${CMAKE_SOURCE_DIR}/src/server/collision
${CMAKE_SOURCE_DIR}/src/server/collision/Management
@@ -43,9 +46,10 @@ target_link_libraries(mmaps_generator
g3dlib
Recast
Detour
- ${ACE_LIBRARY}
${BZIP2_LIBRARIES}
${ZLIB_LIBRARIES}
+ ${CMAKE_THREAD_LIBS_INIT}
+ ${Boost_LIBRARIES}
)
if( UNIX )
diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp
index d60924a83f9..885dd24d760 100644
--- a/src/tools/mmaps_generator/MapBuilder.cpp
+++ b/src/tools/mmaps_generator/MapBuilder.cpp
@@ -15,6 +15,7 @@
* 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 <limits.h>
#include "PathCommon.h"
#include "MapBuilder.h"
@@ -27,7 +28,6 @@
#include "DetourCommon.h"
#include "DisableMgr.h"
-#include <ace/OS_NS_unistd.h>
uint32 GetLiquidFlags(uint32 /*liquidType*/) { return 0; }
namespace DisableMgr
@@ -63,7 +63,8 @@ namespace MMAP
m_skipBattlegrounds (skipBattlegrounds),
m_maxWalkableAngle (maxWalkableAngle),
m_bigBaseUnit (bigBaseUnit),
- m_rcContext (NULL)
+ m_rcContext (NULL),
+ _cancelationToken (false)
{
m_terrainBuilder = new TerrainBuilder(skipLiquid);
@@ -77,8 +78,8 @@ namespace MMAP
{
for (TileList::iterator it = m_tiles.begin(); it != m_tiles.end(); ++it)
{
- (*it).second->clear();
- delete (*it).second;
+ (*it).m_tiles->clear();
+ delete (*it).m_tiles;
}
delete m_terrainBuilder;
@@ -97,9 +98,9 @@ namespace MMAP
for (uint32 i = 0; i < files.size(); ++i)
{
mapID = uint32(atoi(files[i].substr(0,3).c_str()));
- if (m_tiles.find(mapID) == m_tiles.end())
+ if (std::find(m_tiles.begin(), m_tiles.end(), mapID) == m_tiles.end())
{
- m_tiles.insert(std::pair<uint32, std::set<uint32>*>(mapID, new std::set<uint32>));
+ m_tiles.emplace_back(MapTiles(mapID, new std::set<uint32>));
count++;
}
}
@@ -109,8 +110,11 @@ namespace MMAP
for (uint32 i = 0; i < files.size(); ++i)
{
mapID = uint32(atoi(files[i].substr(0,3).c_str()));
- m_tiles.insert(std::pair<uint32, std::set<uint32>*>(mapID, new std::set<uint32>));
- count++;
+ if (std::find(m_tiles.begin(), m_tiles.end(), mapID) == m_tiles.end())
+ {
+ m_tiles.emplace_back(MapTiles(mapID, new std::set<uint32>));
+ count++;
+ }
}
printf("found %u.\n", count);
@@ -118,8 +122,8 @@ namespace MMAP
printf("Discovering tiles... ");
for (TileList::iterator itr = m_tiles.begin(); itr != m_tiles.end(); ++itr)
{
- std::set<uint32>* tiles = (*itr).second;
- mapID = (*itr).first;
+ std::set<uint32>* tiles = (*itr).m_tiles;
+ mapID = (*itr).m_mapId;
sprintf(filter, "%03u*.vmtile", mapID);
files.clear();
@@ -153,45 +157,69 @@ namespace MMAP
/**************************************************************************/
std::set<uint32>* MapBuilder::getTileList(uint32 mapID)
{
- TileList::iterator itr = m_tiles.find(mapID);
+ TileList::iterator itr = std::find(m_tiles.begin(), m_tiles.end(), mapID);
if (itr != m_tiles.end())
- return (*itr).second;
+ return (*itr).m_tiles;
std::set<uint32>* tiles = new std::set<uint32>();
- m_tiles.insert(std::pair<uint32, std::set<uint32>*>(mapID, tiles));
+ m_tiles.emplace_back(MapTiles(mapID, tiles));
return tiles;
}
/**************************************************************************/
+
+ void MapBuilder::WorkerThread()
+ {
+ while (1)
+ {
+ uint32 mapId;
+
+ _queue.WaitAndPop(mapId);
+
+ if (_cancelationToken)
+ return;
+
+ buildMap(mapId);
+ }
+ }
+
void MapBuilder::buildAllMaps(int threads)
{
- std::vector<BuilderThread*> _threads;
+ for (int i = 0; i < threads; ++i)
+ {
+ _workerThreads.push_back(std::thread(&MapBuilder::WorkerThread, this));
+ }
- BuilderThreadPool* pool = threads > 0 ? new BuilderThreadPool() : NULL;
+ m_tiles.sort([](MapTiles a, MapTiles b)
+ {
+ return a.m_tiles->size() > b.m_tiles->size();
+ });
for (TileList::iterator it = m_tiles.begin(); it != m_tiles.end(); ++it)
{
- uint32 mapID = it->first;
- if (!shouldSkipMap(mapID))
+ uint32 mapId = it->m_mapId;
+ if (!shouldSkipMap(mapId))
{
if (threads > 0)
- pool->Enqueue(new MapBuildRequest(mapID));
+ _queue.Push(mapId);
else
- buildMap(mapID);
+ buildMap(mapId);
}
}
- for (int i = 0; i < threads; ++i)
- _threads.push_back(new BuilderThread(this, pool->Queue()));
-
- // Free memory
- for (std::vector<BuilderThread*>::iterator _th = _threads.begin(); _th != _threads.end(); ++_th)
+ while (!_queue.Empty())
{
- (*_th)->wait();
- delete *_th;
+ std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}
- delete pool;
+ _cancelationToken = true;
+
+ _queue.Cancel();
+
+ for (auto& thread : _workerThreads)
+ {
+ thread.join();
+ }
}
/**************************************************************************/
@@ -341,7 +369,7 @@ namespace MMAP
void MapBuilder::buildMap(uint32 mapID)
{
#ifndef __APPLE__
- printf("[Thread %u] Building map %03u:\n", uint32(ACE_Thread::self()), mapID);
+ //printf("[Thread %u] Building map %03u:\n", uint32(ACE_Thread::self()), mapID);
#endif
std::set<uint32>* tiles = getTileList(mapID);
@@ -553,7 +581,9 @@ namespace MMAP
config.borderSize = config.walkableRadius + 3;
config.maxEdgeLen = VERTEX_PER_TILE + 1; // anything bigger than tileSize
config.walkableHeight = m_bigBaseUnit ? 3 : 6;
- config.walkableClimb = m_bigBaseUnit ? 2 : 4; // keep less than walkableHeight
+ // a value >= 3|6 allows npcs to walk over some fences
+ // a value >= 4|8 allows npcs to walk over all fences
+ config.walkableClimb = m_bigBaseUnit ? 4 : 8;
config.minRegionArea = rcSqr(60);
config.mergeRegionArea = rcSqr(50);
config.maxSimplificationError = 1.8f; // eliminates most jagged edges (tiny polygons)
@@ -753,12 +783,12 @@ namespace MMAP
if (params.nvp > DT_VERTS_PER_POLYGON)
{
printf("%s Invalid verts-per-polygon value! \n", tileString);
- continue;
+ break;
}
if (params.vertCount >= 0xffff)
{
printf("%s Too many vertices! \n", tileString);
- continue;
+ break;
}
if (!params.vertCount || !params.verts)
{
@@ -767,7 +797,7 @@ namespace MMAP
// message is an annoyance
//printf("%sNo vertices to build tile! \n", tileString);
- continue;
+ break;
}
if (!params.polyCount || !params.polys ||
TILES_PER_MAP*TILES_PER_MAP == params.polyCount)
@@ -776,19 +806,19 @@ namespace MMAP
// keep in mind that we do output those into debug info
// drop tiles with only exact count - some tiles may have geometry while having less tiles
printf("%s No polygons to build on tile! \n", tileString);
- continue;
+ break;
}
if (!params.detailMeshes || !params.detailVerts || !params.detailTris)
{
printf("%s No detail mesh to build tile! \n", tileString);
- continue;
+ break;
}
printf("%s Building navmesh tile...\n", tileString);
if (!dtCreateNavMeshData(&params, &navData, &navDataSize))
{
printf("%s Failed building navmesh tile! \n", tileString);
- continue;
+ break;
}
dtTileRef tileRef = 0;
@@ -799,7 +829,7 @@ namespace MMAP
if (!tileRef || dtResult != DT_SUCCESS)
{
printf("%s Failed adding tile to navmesh! \n", tileString);
- continue;
+ break;
}
// file output
@@ -812,7 +842,7 @@ namespace MMAP
sprintf(message, "[Map %03i] Failed to open %s for writing!\n", mapID, fileName);
perror(message);
navMesh->removeTile(tileRef, NULL, NULL);
- continue;
+ break;
}
printf("%s Writing to file...\n", tileString);
diff --git a/src/tools/mmaps_generator/MapBuilder.h b/src/tools/mmaps_generator/MapBuilder.h
index 33f45a86549..1d688ccfa77 100644
--- a/src/tools/mmaps_generator/MapBuilder.h
+++ b/src/tools/mmaps_generator/MapBuilder.h
@@ -22,24 +22,39 @@
#include <vector>
#include <set>
#include <map>
+#include <list>
+#include <atomic>
+#include <thread>
#include "TerrainBuilder.h"
#include "IntermediateValues.h"
#include "Recast.h"
#include "DetourNavMesh.h"
-
-#include <ace/Task.h>
-#include <ace/Activation_Queue.h>
-#include <ace/Method_Request.h>
+#include "ProducerConsumerQueue.h"
using namespace VMAP;
-// G3D namespace typedefs conflicts with ACE typedefs
-
namespace MMAP
{
- typedef std::map<uint32, std::set<uint32>*> TileList;
+ struct MapTiles
+ {
+ MapTiles() : m_mapId(uint32(-1)), m_tiles(NULL) {}
+
+ MapTiles(uint32 id, std::set<uint32>* tiles) : m_mapId(id), m_tiles(tiles) {}
+ ~MapTiles() {}
+
+ uint32 m_mapId;
+ std::set<uint32>* m_tiles;
+
+ bool operator==(uint32 id)
+ {
+ return m_mapId == id;
+ }
+ };
+
+ typedef std::list<MapTiles> TileList;
+
struct Tile
{
Tile() : chf(NULL), solid(NULL), cset(NULL), pmesh(NULL), dmesh(NULL) {}
@@ -61,7 +76,7 @@ namespace MMAP
class MapBuilder
{
public:
- MapBuilder(float maxWalkableAngle = 55.f,
+ MapBuilder(float maxWalkableAngle = 70.f,
bool skipLiquid = false,
bool skipContinents = false,
bool skipJunkMaps = true,
@@ -82,6 +97,8 @@ namespace MMAP
// builds list of maps, then builds all of mmap tiles (based on the skip settings)
void buildAllMaps(int threads);
+ void WorkerThread();
+
private:
// detect maps and tiles
void discoverTiles();
@@ -124,63 +141,10 @@ namespace MMAP
// build performance - not really used for now
rcContext* m_rcContext;
- };
-
- class MapBuildRequest : public ACE_Method_Request
- {
- public:
- MapBuildRequest(uint32 mapId) : _mapId(mapId) {}
-
- virtual int call()
- {
- /// @ Actually a creative way of unabstracting the class and returning a member variable
- return (int)_mapId;
- }
- private:
- uint32 _mapId;
- };
-
- class BuilderThread : public ACE_Task_Base
- {
- private:
- MapBuilder* _builder;
- ACE_Activation_Queue* _queue;
-
- public:
- BuilderThread(MapBuilder* builder, ACE_Activation_Queue* queue) : _builder(builder), _queue(queue) { activate(); }
-
- int svc()
- {
- /// @ Set a timeout for dequeue attempts (only used when the queue is empty) as it will never get populated after thread starts
- ACE_Time_Value timeout(5);
- ACE_Method_Request* request = NULL;
- while ((request = _queue->dequeue(&timeout)) != NULL)
- {
- _builder->buildMap(request->call());
- delete request;
- request = NULL;
- }
-
- return 0;
- }
- };
-
- class BuilderThreadPool
- {
- public:
- BuilderThreadPool() : _queue(new ACE_Activation_Queue()) {}
- ~BuilderThreadPool() { _queue->queue()->close(); delete _queue; }
-
- void Enqueue(MapBuildRequest* request)
- {
- _queue->enqueue(request);
- }
-
- ACE_Activation_Queue* Queue() { return _queue; }
-
- private:
- ACE_Activation_Queue* _queue;
+ std::vector<std::thread> _workerThreads;
+ ProducerConsumerQueue<uint32> _queue;
+ std::atomic<bool> _cancelationToken;
};
}
diff --git a/src/tools/mmaps_generator/PathCommon.h b/src/tools/mmaps_generator/PathCommon.h
index a035bea3b6f..8285fef74f2 100644
--- a/src/tools/mmaps_generator/PathCommon.h
+++ b/src/tools/mmaps_generator/PathCommon.h
@@ -21,9 +21,8 @@
#include <string>
#include <vector>
-#include <ace/OS_NS_sys_time.h>
-#include "Define.h"
+#include "Common.h"
#ifndef _WIN32
#include <stddef.h>
@@ -135,26 +134,6 @@ namespace MMAP
return LISTFILE_OK;
}
-
- inline uint32 getMSTime()
- {
- static const ACE_Time_Value ApplicationStartTime = ACE_OS::gettimeofday();
- return (ACE_OS::gettimeofday() - ApplicationStartTime).msec();
- }
-
- inline uint32 getMSTimeDiff(uint32 oldMSTime, uint32 newMSTime)
- {
- // getMSTime() have limited data range and this is case when it overflow in this tick
- if (oldMSTime > newMSTime)
- return (0xFFFFFFFF - oldMSTime) + newMSTime;
- else
- return newMSTime - oldMSTime;
- }
-
- inline uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
- {
- return getMSTimeDiff(oldMSTime, getMSTime());
- }
}
#endif
diff --git a/src/tools/mmaps_generator/PathGenerator.cpp b/src/tools/mmaps_generator/PathGenerator.cpp
index 1df24cfa332..c2ca184905e 100644
--- a/src/tools/mmaps_generator/PathGenerator.cpp
+++ b/src/tools/mmaps_generator/PathGenerator.cpp
@@ -18,6 +18,7 @@
#include "PathCommon.h"
#include "MapBuilder.h"
+#include "Timer.h"
using namespace MMAP;
@@ -242,7 +243,7 @@ int finish(const char* message, int returnValue)
int main(int argc, char** argv)
{
int threads = 3, mapnum = -1;
- float maxAngle = 55.0f;
+ float maxAngle = 70.0f;
int tileX = -1, tileY = -1;
bool skipLiquid = false,
skipContinents = false,
@@ -275,7 +276,7 @@ int main(int argc, char** argv)
}
if (!checkDirectories(debugOutput))
- return silent ? -3 : finish("Press any key to close...", -3);
+ return silent ? -3 : finish("Press ENTER to close...", -3);
MapBuilder builder(maxAngle, skipLiquid, skipContinents, skipJunkMaps,
skipBattlegrounds, debugOutput, bigBaseUnit, offMeshInputPath);
diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp
index 19112d84266..771275a1757 100644
--- a/src/tools/mmaps_generator/TerrainBuilder.cpp
+++ b/src/tools/mmaps_generator/TerrainBuilder.cpp
@@ -18,13 +18,11 @@
#include "TerrainBuilder.h"
-#include "PathCommon.h"
#include "MapBuilder.h"
#include "VMapManager2.h"
#include "MapTree.h"
#include "ModelInstance.h"
-#include <vector>
// ******************************************
// Map file format defines
@@ -906,7 +904,7 @@ namespace MMAP
float p0[3], p1[3];
uint32 mid, tx, ty;
float size;
- if (sscanf(buf, "%d %d,%d (%f %f %f) (%f %f %f) %f", &mid, &tx, &ty,
+ if (sscanf(buf, "%u %u,%u (%f %f %f) (%f %f %f) %f", &mid, &tx, &ty,
&p0[0], &p0[1], &p0[2], &p1[0], &p1[1], &p1[2], &size) != 10)
continue;
diff --git a/src/tools/vmap4_extractor/adtfile.cpp b/src/tools/vmap4_extractor/adtfile.cpp
index 246b448380a..c792524eec1 100644
--- a/src/tools/vmap4_extractor/adtfile.cpp
+++ b/src/tools/vmap4_extractor/adtfile.cpp
@@ -159,7 +159,7 @@ bool ADTFile::init(uint32 map_num, uint32 tileX, uint32 tileY)
ADT.read(buf, size);
char* p=buf;
int q = 0;
- WmoInstansName = new string[size];
+ WmoInstansName = new std::string[size];
while (p<buf+size)
{
char* s = GetPlainName(p);
diff --git a/src/tools/vmap4_extractor/adtfile.h b/src/tools/vmap4_extractor/adtfile.h
index aafcb46ce84..ac04074375f 100644
--- a/src/tools/vmap4_extractor/adtfile.h
+++ b/src/tools/vmap4_extractor/adtfile.h
@@ -113,14 +113,14 @@ private:
//size_t mcnk_offsets[256], mcnk_sizes[256];
MPQFile ADT;
//mcell Mcell;
- string Adtfilename;
+ std::string Adtfilename;
public:
ADTFile(char* filename);
~ADTFile();
int nWMO;
int nMDX;
- string* WmoInstansName;
- string* ModelInstansName;
+ std::string* WmoInstansName;
+ std::string* ModelInstansName;
bool init(uint32 map_num, uint32 tileX, uint32 tileY);
//void LoadMapChunks();
diff --git a/src/tools/vmap4_extractor/loadlib/loadlib.h b/src/tools/vmap4_extractor/loadlib/loadlib.h
index 1b44d13a9d3..b26d39fbbf8 100644
--- a/src/tools/vmap4_extractor/loadlib/loadlib.h
+++ b/src/tools/vmap4_extractor/loadlib/loadlib.h
@@ -47,6 +47,8 @@ typedef uint8_t uint8;
#define FILE_FORMAT_VERSION 18
+#pragma pack(push, 1)
+
//
// File version chunk
//
@@ -74,4 +76,7 @@ public:
bool loadFile(char *filename, bool log = true);
virtual void free();
};
+
+#pragma pack(pop)
+
#endif
diff --git a/src/tools/vmap4_extractor/model.cpp b/src/tools/vmap4_extractor/model.cpp
index 825a2697c16..c527ec32ddb 100644
--- a/src/tools/vmap4_extractor/model.cpp
+++ b/src/tools/vmap4_extractor/model.cpp
@@ -96,8 +96,19 @@ bool Model::ConvertToVMAPModel(const char * outfilename)
wsize = sizeof(uint32) + sizeof(unsigned short) * nIndexes;
fwrite(&wsize, sizeof(int), 1, output);
fwrite(&nIndexes, sizeof(uint32), 1, output);
- if (nIndexes >0)
+ if (nIndexes > 0)
+ {
+ for (uint32 i = 0; i < nIndexes; ++i)
+ {
+ if ((i % 3) - 1 == 0 && i + 1 < nIndexes)
+ {
+ uint16 tmp = indices[i];
+ indices[i] = indices[i + 1];
+ indices[i + 1] = tmp;
+ }
+ }
fwrite(indices, sizeof(unsigned short), nIndexes, output);
+ }
fwrite("VERT", 4, 1, output);
wsize = sizeof(int) + sizeof(float) * 3 * nVertices;
@@ -105,8 +116,12 @@ bool Model::ConvertToVMAPModel(const char * outfilename)
fwrite(&nVertices, sizeof(int), 1, output);
if (nVertices >0)
{
- for(uint32 vpos=0; vpos <nVertices; ++vpos)
- std::swap(vertices[vpos].y, vertices[vpos].z);
+ for (uint32 vpos = 0; vpos < nVertices; ++vpos)
+ {
+ float tmp = vertices[vpos].y;
+ vertices[vpos].y = -vertices[vpos].z;
+ vertices[vpos].z = tmp;
+ }
fwrite(vertices, sizeof(float)*3, nVertices, output);
}
diff --git a/src/tools/vmap4_extractor/wmo.h b/src/tools/vmap4_extractor/wmo.h
index 0f1f0772bd3..a5bb7d518e8 100644
--- a/src/tools/vmap4_extractor/wmo.h
+++ b/src/tools/vmap4_extractor/wmo.h
@@ -67,6 +67,8 @@ struct WMOLiquidHeader
short type;
};
+#pragma pack(push, 1)
+
struct WMOLiquidVert
{
uint16 unk1;
@@ -74,6 +76,8 @@ struct WMOLiquidVert
float height;
};
+#pragma pack(pop)
+
class WMOGroup
{
private: