diff options
author | click <none@none> | 2010-06-05 21:22:47 +0200 |
---|---|---|
committer | click <none@none> | 2010-06-05 21:22:47 +0200 |
commit | 455bfb01645510c677b88c693e0092244e1901e4 (patch) | |
tree | f9a1d305217c4967fdd572b595a98e2f58a0c482 /src/game/SpellMgr.cpp | |
parent | a2d6e7ff8c95e688adc625c01387af2ca3cde3a0 (diff) |
Move core/realm files to new subdirectory
--HG--
branch : trunk
rename : src/framework/CMakeLists.txt => src/server/framework/CMakeLists.txt
rename : src/framework/Dynamic/FactoryHolder.h => src/server/framework/Dynamic/FactoryHolder.h
rename : src/framework/Dynamic/ObjectRegistry.h => src/server/framework/Dynamic/ObjectRegistry.h
rename : src/framework/GameSystem/Grid.h => src/server/framework/GameSystem/Grid.h
rename : src/framework/GameSystem/GridLoader.h => src/server/framework/GameSystem/GridLoader.h
rename : src/framework/GameSystem/GridRefManager.h => src/server/framework/GameSystem/GridRefManager.h
rename : src/framework/GameSystem/GridReference.h => src/server/framework/GameSystem/GridReference.h
rename : src/framework/GameSystem/NGrid.h => src/server/framework/GameSystem/NGrid.h
rename : src/framework/GameSystem/TypeContainer.h => src/server/framework/GameSystem/TypeContainer.h
rename : src/framework/GameSystem/TypeContainerFunctions.h => src/server/framework/GameSystem/TypeContainerFunctions.h
rename : src/framework/GameSystem/TypeContainerFunctionsPtr.h => src/server/framework/GameSystem/TypeContainerFunctionsPtr.h
rename : src/framework/GameSystem/TypeContainerVisitor.h => src/server/framework/GameSystem/TypeContainerVisitor.h
rename : src/framework/Network/SocketDefines.h => src/server/framework/Network/SocketDefines.h
rename : src/framework/Platform/CompilerDefs.h => src/server/framework/Platform/CompilerDefs.h
rename : src/framework/Platform/Define.h => src/server/framework/Platform/Define.h
rename : src/framework/Policies/CreationPolicy.h => src/server/framework/Policies/CreationPolicy.h
rename : src/framework/Policies/ObjectLifeTime.cpp => src/server/framework/Policies/ObjectLifeTime.cpp
rename : src/framework/Policies/ObjectLifeTime.h => src/server/framework/Policies/ObjectLifeTime.h
rename : src/framework/Policies/Singleton.h => src/server/framework/Policies/Singleton.h
rename : src/framework/Policies/SingletonImp.h => src/server/framework/Policies/SingletonImp.h
rename : src/framework/Policies/ThreadingModel.h => src/server/framework/Policies/ThreadingModel.h
rename : src/framework/Utilities/ByteConverter.h => src/server/framework/Utilities/ByteConverter.h
rename : src/framework/Utilities/Callback.h => src/server/framework/Utilities/Callback.h
rename : src/framework/Utilities/CountedReference/Reference.h => src/server/framework/Utilities/CountedReference/Reference.h
rename : src/framework/Utilities/CountedReference/ReferenceHolder.h => src/server/framework/Utilities/CountedReference/ReferenceHolder.h
rename : src/framework/Utilities/CountedReference/ReferenceImpl.h => src/server/framework/Utilities/CountedReference/ReferenceImpl.h
rename : src/framework/Utilities/EventProcessor.cpp => src/server/framework/Utilities/EventProcessor.cpp
rename : src/framework/Utilities/EventProcessor.h => src/server/framework/Utilities/EventProcessor.h
rename : src/framework/Utilities/LinkedList.h => src/server/framework/Utilities/LinkedList.h
rename : src/framework/Utilities/LinkedReference/RefManager.h => src/server/framework/Utilities/LinkedReference/RefManager.h
rename : src/framework/Utilities/LinkedReference/Reference.h => src/server/framework/Utilities/LinkedReference/Reference.h
rename : src/framework/Utilities/TypeList.h => src/server/framework/Utilities/TypeList.h
rename : src/framework/Utilities/UnorderedMap.h => src/server/framework/Utilities/UnorderedMap.h
rename : src/game/AccountMgr.cpp => src/server/game/AccountMgr.cpp
rename : src/game/AccountMgr.h => src/server/game/AccountMgr.h
rename : src/game/AchievementMgr.cpp => src/server/game/AchievementMgr.cpp
rename : src/game/AchievementMgr.h => src/server/game/AchievementMgr.h
rename : src/game/AddonHandler.cpp => src/server/game/AddonHandler.cpp
rename : src/game/AddonHandler.h => src/server/game/AddonHandler.h
rename : src/game/AddonMgr.cpp => src/server/game/AddonMgr.cpp
rename : src/game/AddonMgr.h => src/server/game/AddonMgr.h
rename : src/game/ArenaTeam.cpp => src/server/game/ArenaTeam.cpp
rename : src/game/ArenaTeam.h => src/server/game/ArenaTeam.h
rename : src/game/ArenaTeamHandler.cpp => src/server/game/ArenaTeamHandler.cpp
rename : src/game/AuctionHouseBot.cpp => src/server/game/AuctionHouseBot.cpp
rename : src/game/AuctionHouseBot.h => src/server/game/AuctionHouseBot.h
rename : src/game/AuctionHouseHandler.cpp => src/server/game/AuctionHouseHandler.cpp
rename : src/game/AuctionHouseMgr.cpp => src/server/game/AuctionHouseMgr.cpp
rename : src/game/AuctionHouseMgr.h => src/server/game/AuctionHouseMgr.h
rename : src/game/Bag.cpp => src/server/game/Bag.cpp
rename : src/game/Bag.h => src/server/game/Bag.h
rename : src/game/BattleGround.cpp => src/server/game/BattleGround.cpp
rename : src/game/BattleGround.h => src/server/game/BattleGround.h
rename : src/game/BattleGroundAA.cpp => src/server/game/BattleGroundAA.cpp
rename : src/game/BattleGroundAA.h => src/server/game/BattleGroundAA.h
rename : src/game/BattleGroundAB.cpp => src/server/game/BattleGroundAB.cpp
rename : src/game/BattleGroundAB.h => src/server/game/BattleGroundAB.h
rename : src/game/BattleGroundAV.cpp => src/server/game/BattleGroundAV.cpp
rename : src/game/BattleGroundAV.h => src/server/game/BattleGroundAV.h
rename : src/game/BattleGroundBE.cpp => src/server/game/BattleGroundBE.cpp
rename : src/game/BattleGroundBE.h => src/server/game/BattleGroundBE.h
rename : src/game/BattleGroundDS.cpp => src/server/game/BattleGroundDS.cpp
rename : src/game/BattleGroundDS.h => src/server/game/BattleGroundDS.h
rename : src/game/BattleGroundEY.cpp => src/server/game/BattleGroundEY.cpp
rename : src/game/BattleGroundEY.h => src/server/game/BattleGroundEY.h
rename : src/game/BattleGroundHandler.cpp => src/server/game/BattleGroundHandler.cpp
rename : src/game/BattleGroundIC.cpp => src/server/game/BattleGroundIC.cpp
rename : src/game/BattleGroundIC.h => src/server/game/BattleGroundIC.h
rename : src/game/BattleGroundMgr.cpp => src/server/game/BattleGroundMgr.cpp
rename : src/game/BattleGroundMgr.h => src/server/game/BattleGroundMgr.h
rename : src/game/BattleGroundNA.cpp => src/server/game/BattleGroundNA.cpp
rename : src/game/BattleGroundNA.h => src/server/game/BattleGroundNA.h
rename : src/game/BattleGroundRB.cpp => src/server/game/BattleGroundRB.cpp
rename : src/game/BattleGroundRB.h => src/server/game/BattleGroundRB.h
rename : src/game/BattleGroundRL.cpp => src/server/game/BattleGroundRL.cpp
rename : src/game/BattleGroundRL.h => src/server/game/BattleGroundRL.h
rename : src/game/BattleGroundRV.cpp => src/server/game/BattleGroundRV.cpp
rename : src/game/BattleGroundRV.h => src/server/game/BattleGroundRV.h
rename : src/game/BattleGroundSA.cpp => src/server/game/BattleGroundSA.cpp
rename : src/game/BattleGroundSA.h => src/server/game/BattleGroundSA.h
rename : src/game/BattleGroundWS.cpp => src/server/game/BattleGroundWS.cpp
rename : src/game/BattleGroundWS.h => src/server/game/BattleGroundWS.h
rename : src/game/CMakeLists.txt => src/server/game/CMakeLists.txt
rename : src/game/Calendar.cpp => src/server/game/Calendar.cpp
rename : src/game/Calendar.h => src/server/game/Calendar.h
rename : src/game/CalendarHandler.cpp => src/server/game/CalendarHandler.cpp
rename : src/game/Cell.h => src/server/game/Cell.h
rename : src/game/CellImpl.h => src/server/game/CellImpl.h
rename : src/game/Channel.cpp => src/server/game/Channel.cpp
rename : src/game/Channel.h => src/server/game/Channel.h
rename : src/game/ChannelHandler.cpp => src/server/game/ChannelHandler.cpp
rename : src/game/ChannelMgr.cpp => src/server/game/ChannelMgr.cpp
rename : src/game/ChannelMgr.h => src/server/game/ChannelMgr.h
rename : src/game/CharacterHandler.cpp => src/server/game/CharacterHandler.cpp
rename : src/game/Chat.cpp => src/server/game/Chat.cpp
rename : src/game/Chat.h => src/server/game/Chat.h
rename : src/game/ChatHandler.cpp => src/server/game/ChatHandler.cpp
rename : src/game/CombatAI.cpp => src/server/game/CombatAI.cpp
rename : src/game/CombatAI.h => src/server/game/CombatAI.h
rename : src/game/CombatHandler.cpp => src/server/game/CombatHandler.cpp
rename : src/game/ConditionMgr.cpp => src/server/game/ConditionMgr.cpp
rename : src/game/ConditionMgr.h => src/server/game/ConditionMgr.h
rename : src/game/ConfusedMovementGenerator.cpp => src/server/game/ConfusedMovementGenerator.cpp
rename : src/game/ConfusedMovementGenerator.h => src/server/game/ConfusedMovementGenerator.h
rename : src/game/Corpse.cpp => src/server/game/Corpse.cpp
rename : src/game/Corpse.h => src/server/game/Corpse.h
rename : src/game/Creature.cpp => src/server/game/Creature.cpp
rename : src/game/Creature.h => src/server/game/Creature.h
rename : src/game/CreatureAI.cpp => src/server/game/CreatureAI.cpp
rename : src/game/CreatureAI.h => src/server/game/CreatureAI.h
rename : src/game/CreatureAIFactory.h => src/server/game/CreatureAIFactory.h
rename : src/game/CreatureAIImpl.h => src/server/game/CreatureAIImpl.h
rename : src/game/CreatureAIRegistry.cpp => src/server/game/CreatureAIRegistry.cpp
rename : src/game/CreatureAIRegistry.h => src/server/game/CreatureAIRegistry.h
rename : src/game/CreatureAISelector.cpp => src/server/game/CreatureAISelector.cpp
rename : src/game/CreatureAISelector.h => src/server/game/CreatureAISelector.h
rename : src/game/CreatureEventAI.cpp => src/server/game/CreatureEventAI.cpp
rename : src/game/CreatureEventAI.h => src/server/game/CreatureEventAI.h
rename : src/game/CreatureEventAIMgr.cpp => src/server/game/CreatureEventAIMgr.cpp
rename : src/game/CreatureEventAIMgr.h => src/server/game/CreatureEventAIMgr.h
rename : src/game/CreatureGroups.cpp => src/server/game/CreatureGroups.cpp
rename : src/game/CreatureGroups.h => src/server/game/CreatureGroups.h
rename : src/game/DBCEnums.h => src/server/game/DBCEnums.h
rename : src/game/DBCStores.cpp => src/server/game/DBCStores.cpp
rename : src/game/DBCStores.h => src/server/game/DBCStores.h
rename : src/game/DBCStructure.h => src/server/game/DBCStructure.h
rename : src/game/DBCfmt.h => src/server/game/DBCfmt.h
rename : src/game/Debugcmds.cpp => src/server/game/Debugcmds.cpp
rename : src/game/DestinationHolder.cpp => src/server/game/DestinationHolder.cpp
rename : src/game/DestinationHolder.h => src/server/game/DestinationHolder.h
rename : src/game/DestinationHolderImp.h => src/server/game/DestinationHolderImp.h
rename : src/game/DuelHandler.cpp => src/server/game/DuelHandler.cpp
rename : src/game/DynamicObject.cpp => src/server/game/DynamicObject.cpp
rename : src/game/DynamicObject.h => src/server/game/DynamicObject.h
rename : src/game/FleeingMovementGenerator.cpp => src/server/game/FleeingMovementGenerator.cpp
rename : src/game/FleeingMovementGenerator.h => src/server/game/FleeingMovementGenerator.h
rename : src/game/FollowerRefManager.h => src/server/game/FollowerRefManager.h
rename : src/game/FollowerReference.cpp => src/server/game/FollowerReference.cpp
rename : src/game/FollowerReference.h => src/server/game/FollowerReference.h
rename : src/game/Formulas.h => src/server/game/Formulas.h
rename : src/game/GameEventMgr.cpp => src/server/game/GameEventMgr.cpp
rename : src/game/GameEventMgr.h => src/server/game/GameEventMgr.h
rename : src/game/GameObject.cpp => src/server/game/GameObject.cpp
rename : src/game/GameObject.h => src/server/game/GameObject.h
rename : src/game/GlobalEvents.cpp => src/server/game/GlobalEvents.cpp
rename : src/game/GlobalEvents.h => src/server/game/GlobalEvents.h
rename : src/game/GossipDef.cpp => src/server/game/GossipDef.cpp
rename : src/game/GossipDef.h => src/server/game/GossipDef.h
rename : src/game/GridDefines.h => src/server/game/GridDefines.h
rename : src/game/GridNotifiers.cpp => src/server/game/GridNotifiers.cpp
rename : src/game/GridNotifiers.h => src/server/game/GridNotifiers.h
rename : src/game/GridNotifiersImpl.h => src/server/game/GridNotifiersImpl.h
rename : src/game/GridStates.cpp => src/server/game/GridStates.cpp
rename : src/game/GridStates.h => src/server/game/GridStates.h
rename : src/game/Group.cpp => src/server/game/Group.cpp
rename : src/game/Group.h => src/server/game/Group.h
rename : src/game/GroupHandler.cpp => src/server/game/GroupHandler.cpp
rename : src/game/GroupRefManager.h => src/server/game/GroupRefManager.h
rename : src/game/GroupReference.cpp => src/server/game/GroupReference.cpp
rename : src/game/GroupReference.h => src/server/game/GroupReference.h
rename : src/game/GuardAI.cpp => src/server/game/GuardAI.cpp
rename : src/game/GuardAI.h => src/server/game/GuardAI.h
rename : src/game/Guild.cpp => src/server/game/Guild.cpp
rename : src/game/Guild.h => src/server/game/Guild.h
rename : src/game/GuildHandler.cpp => src/server/game/GuildHandler.cpp
rename : src/game/HomeMovementGenerator.cpp => src/server/game/HomeMovementGenerator.cpp
rename : src/game/HomeMovementGenerator.h => src/server/game/HomeMovementGenerator.h
rename : src/game/HostileRefManager.cpp => src/server/game/HostileRefManager.cpp
rename : src/game/HostileRefManager.h => src/server/game/HostileRefManager.h
rename : src/game/IdleMovementGenerator.cpp => src/server/game/IdleMovementGenerator.cpp
rename : src/game/IdleMovementGenerator.h => src/server/game/IdleMovementGenerator.h
rename : src/game/InstanceData.cpp => src/server/game/InstanceData.cpp
rename : src/game/InstanceData.h => src/server/game/InstanceData.h
rename : src/game/InstanceSaveMgr.cpp => src/server/game/InstanceSaveMgr.cpp
rename : src/game/InstanceSaveMgr.h => src/server/game/InstanceSaveMgr.h
rename : src/game/Item.cpp => src/server/game/Item.cpp
rename : src/game/Item.h => src/server/game/Item.h
rename : src/game/ItemEnchantmentMgr.cpp => src/server/game/ItemEnchantmentMgr.cpp
rename : src/game/ItemEnchantmentMgr.h => src/server/game/ItemEnchantmentMgr.h
rename : src/game/ItemHandler.cpp => src/server/game/ItemHandler.cpp
rename : src/game/ItemPrototype.h => src/server/game/ItemPrototype.h
rename : src/game/LFG.h => src/server/game/LFG.h
rename : src/game/LFGHandler.cpp => src/server/game/LFGHandler.cpp
rename : src/game/LFGMgr.cpp => src/server/game/LFGMgr.cpp
rename : src/game/LFGMgr.h => src/server/game/LFGMgr.h
rename : src/game/Language.h => src/server/game/Language.h
rename : src/game/Level0.cpp => src/server/game/Level0.cpp
rename : src/game/Level1.cpp => src/server/game/Level1.cpp
rename : src/game/Level2.cpp => src/server/game/Level2.cpp
rename : src/game/Level3.cpp => src/server/game/Level3.cpp
rename : src/game/LootHandler.cpp => src/server/game/LootHandler.cpp
rename : src/game/LootMgr.cpp => src/server/game/LootMgr.cpp
rename : src/game/LootMgr.h => src/server/game/LootMgr.h
rename : src/game/Mail.cpp => src/server/game/Mail.cpp
rename : src/game/Mail.h => src/server/game/Mail.h
rename : src/game/Map.cpp => src/server/game/Map.cpp
rename : src/game/Map.h => src/server/game/Map.h
rename : src/game/MapInstanced.cpp => src/server/game/MapInstanced.cpp
rename : src/game/MapInstanced.h => src/server/game/MapInstanced.h
rename : src/game/MapManager.cpp => src/server/game/MapManager.cpp
rename : src/game/MapManager.h => src/server/game/MapManager.h
rename : src/game/MapRefManager.h => src/server/game/MapRefManager.h
rename : src/game/MapReference.h => src/server/game/MapReference.h
rename : src/game/MapUpdater.cpp => src/server/game/MapUpdater.cpp
rename : src/game/MapUpdater.h => src/server/game/MapUpdater.h
rename : src/game/MiscHandler.cpp => src/server/game/MiscHandler.cpp
rename : src/game/MotionMaster.cpp => src/server/game/MotionMaster.cpp
rename : src/game/MotionMaster.h => src/server/game/MotionMaster.h
rename : src/game/MovementGenerator.cpp => src/server/game/MovementGenerator.cpp
rename : src/game/MovementGenerator.h => src/server/game/MovementGenerator.h
rename : src/game/MovementGeneratorImpl.h => src/server/game/MovementGeneratorImpl.h
rename : src/game/MovementHandler.cpp => src/server/game/MovementHandler.cpp
rename : src/game/NPCHandler.cpp => src/server/game/NPCHandler.cpp
rename : src/game/NPCHandler.h => src/server/game/NPCHandler.h
rename : src/game/Object.cpp => src/server/game/Object.cpp
rename : src/game/Object.h => src/server/game/Object.h
rename : src/game/ObjectAccessor.cpp => src/server/game/ObjectAccessor.cpp
rename : src/game/ObjectAccessor.h => src/server/game/ObjectAccessor.h
rename : src/game/ObjectDefines.h => src/server/game/ObjectDefines.h
rename : src/game/ObjectGridLoader.cpp => src/server/game/ObjectGridLoader.cpp
rename : src/game/ObjectGridLoader.h => src/server/game/ObjectGridLoader.h
rename : src/game/ObjectMgr.cpp => src/server/game/ObjectMgr.cpp
rename : src/game/ObjectMgr.h => src/server/game/ObjectMgr.h
rename : src/game/ObjectPosSelector.cpp => src/server/game/ObjectPosSelector.cpp
rename : src/game/ObjectPosSelector.h => src/server/game/ObjectPosSelector.h
rename : src/game/Opcodes.cpp => src/server/game/Opcodes.cpp
rename : src/game/Opcodes.h => src/server/game/Opcodes.h
rename : src/game/OutdoorPvP.cpp => src/server/game/OutdoorPvP.cpp
rename : src/game/OutdoorPvP.h => src/server/game/OutdoorPvP.h
rename : src/game/OutdoorPvPEP.cpp => src/server/game/OutdoorPvPEP.cpp
rename : src/game/OutdoorPvPEP.h => src/server/game/OutdoorPvPEP.h
rename : src/game/OutdoorPvPHP.cpp => src/server/game/OutdoorPvPHP.cpp
rename : src/game/OutdoorPvPHP.h => src/server/game/OutdoorPvPHP.h
rename : src/game/OutdoorPvPImpl.h => src/server/game/OutdoorPvPImpl.h
rename : src/game/OutdoorPvPMgr.cpp => src/server/game/OutdoorPvPMgr.cpp
rename : src/game/OutdoorPvPMgr.h => src/server/game/OutdoorPvPMgr.h
rename : src/game/OutdoorPvPNA.cpp => src/server/game/OutdoorPvPNA.cpp
rename : src/game/OutdoorPvPNA.h => src/server/game/OutdoorPvPNA.h
rename : src/game/OutdoorPvPSI.cpp => src/server/game/OutdoorPvPSI.cpp
rename : src/game/OutdoorPvPSI.h => src/server/game/OutdoorPvPSI.h
rename : src/game/OutdoorPvPTF.cpp => src/server/game/OutdoorPvPTF.cpp
rename : src/game/OutdoorPvPTF.h => src/server/game/OutdoorPvPTF.h
rename : src/game/OutdoorPvPZM.cpp => src/server/game/OutdoorPvPZM.cpp
rename : src/game/OutdoorPvPZM.h => src/server/game/OutdoorPvPZM.h
rename : src/game/PassiveAI.cpp => src/server/game/PassiveAI.cpp
rename : src/game/PassiveAI.h => src/server/game/PassiveAI.h
rename : src/game/Path.h => src/server/game/Path.h
rename : src/game/Pet.cpp => src/server/game/Pet.cpp
rename : src/game/Pet.h => src/server/game/Pet.h
rename : src/game/PetAI.cpp => src/server/game/PetAI.cpp
rename : src/game/PetAI.h => src/server/game/PetAI.h
rename : src/game/PetHandler.cpp => src/server/game/PetHandler.cpp
rename : src/game/PetitionsHandler.cpp => src/server/game/PetitionsHandler.cpp
rename : src/game/Player.cpp => src/server/game/Player.cpp
rename : src/game/Player.h => src/server/game/Player.h
rename : src/game/PlayerDump.cpp => src/server/game/PlayerDump.cpp
rename : src/game/PlayerDump.h => src/server/game/PlayerDump.h
rename : src/game/PointMovementGenerator.cpp => src/server/game/PointMovementGenerator.cpp
rename : src/game/PointMovementGenerator.h => src/server/game/PointMovementGenerator.h
rename : src/game/PoolHandler.cpp => src/server/game/PoolHandler.cpp
rename : src/game/PoolHandler.h => src/server/game/PoolHandler.h
rename : src/game/QueryHandler.cpp => src/server/game/QueryHandler.cpp
rename : src/game/QuestDef.cpp => src/server/game/QuestDef.cpp
rename : src/game/QuestDef.h => src/server/game/QuestDef.h
rename : src/game/QuestHandler.cpp => src/server/game/QuestHandler.cpp
rename : src/game/RandomMovementGenerator.cpp => src/server/game/RandomMovementGenerator.cpp
rename : src/game/RandomMovementGenerator.h => src/server/game/RandomMovementGenerator.h
rename : src/game/ReactorAI.cpp => src/server/game/ReactorAI.cpp
rename : src/game/ReactorAI.h => src/server/game/ReactorAI.h
rename : src/game/ReputationMgr.cpp => src/server/game/ReputationMgr.cpp
rename : src/game/ReputationMgr.h => src/server/game/ReputationMgr.h
rename : src/game/ScriptLoader.cpp => src/server/game/ScriptLoader.cpp
rename : src/game/ScriptLoader.h => src/server/game/ScriptLoader.h
rename : src/game/ScriptMgr.cpp => src/server/game/ScriptMgr.cpp
rename : src/game/ScriptMgr.h => src/server/game/ScriptMgr.h
rename : src/game/ScriptSystem.cpp => src/server/game/ScriptSystem.cpp
rename : src/game/ScriptSystem.h => src/server/game/ScriptSystem.h
rename : src/game/ScriptedCreature.cpp => src/server/game/ScriptedCreature.cpp
rename : src/game/ScriptedCreature.h => src/server/game/ScriptedCreature.h
rename : src/game/ScriptedEscortAI.cpp => src/server/game/ScriptedEscortAI.cpp
rename : src/game/ScriptedEscortAI.h => src/server/game/ScriptedEscortAI.h
rename : src/game/ScriptedFollowerAI.cpp => src/server/game/ScriptedFollowerAI.cpp
rename : src/game/ScriptedFollowerAI.h => src/server/game/ScriptedFollowerAI.h
rename : src/game/ScriptedGossip.h => src/server/game/ScriptedGossip.h
rename : src/game/ScriptedGuardAI.cpp => src/server/game/ScriptedGuardAI.cpp
rename : src/game/ScriptedGuardAI.h => src/server/game/ScriptedGuardAI.h
rename : src/game/ScriptedInstance.h => src/server/game/ScriptedInstance.h
rename : src/game/ScriptedPch.cpp => src/server/game/ScriptedPch.cpp
rename : src/game/ScriptedPch.h => src/server/game/ScriptedPch.h
rename : src/game/ScriptedSimpleAI.cpp => src/server/game/ScriptedSimpleAI.cpp
rename : src/game/ScriptedSimpleAI.h => src/server/game/ScriptedSimpleAI.h
rename : src/game/ScriptedSmartAI.cpp => src/server/game/ScriptedSmartAI.cpp
rename : src/game/ScriptedSmartAI.h => src/server/game/ScriptedSmartAI.h
rename : src/game/SharedDefines.h => src/server/game/SharedDefines.h
rename : src/game/SkillDiscovery.cpp => src/server/game/SkillDiscovery.cpp
rename : src/game/SkillDiscovery.h => src/server/game/SkillDiscovery.h
rename : src/game/SkillExtraItems.cpp => src/server/game/SkillExtraItems.cpp
rename : src/game/SkillExtraItems.h => src/server/game/SkillExtraItems.h
rename : src/game/SkillHandler.cpp => src/server/game/SkillHandler.cpp
rename : src/game/SocialMgr.cpp => src/server/game/SocialMgr.cpp
rename : src/game/SocialMgr.h => src/server/game/SocialMgr.h
rename : src/game/Spell.cpp => src/server/game/Spell.cpp
rename : src/game/Spell.h => src/server/game/Spell.h
rename : src/game/SpellAuraDefines.h => src/server/game/SpellAuraDefines.h
rename : src/game/SpellAuraEffects.cpp => src/server/game/SpellAuraEffects.cpp
rename : src/game/SpellAuraEffects.h => src/server/game/SpellAuraEffects.h
rename : src/game/SpellAuras.cpp => src/server/game/SpellAuras.cpp
rename : src/game/SpellAuras.h => src/server/game/SpellAuras.h
rename : src/game/SpellEffects.cpp => src/server/game/SpellEffects.cpp
rename : src/game/SpellHandler.cpp => src/server/game/SpellHandler.cpp
rename : src/game/SpellMgr.cpp => src/server/game/SpellMgr.cpp
rename : src/game/SpellMgr.h => src/server/game/SpellMgr.h
rename : src/game/StatSystem.cpp => src/server/game/StatSystem.cpp
rename : src/game/TargetedMovementGenerator.cpp => src/server/game/TargetedMovementGenerator.cpp
rename : src/game/TargetedMovementGenerator.h => src/server/game/TargetedMovementGenerator.h
rename : src/game/TaxiHandler.cpp => src/server/game/TaxiHandler.cpp
rename : src/game/TemporarySummon.cpp => src/server/game/TemporarySummon.cpp
rename : src/game/TemporarySummon.h => src/server/game/TemporarySummon.h
rename : src/game/ThreatManager.cpp => src/server/game/ThreatManager.cpp
rename : src/game/ThreatManager.h => src/server/game/ThreatManager.h
rename : src/game/TicketHandler.cpp => src/server/game/TicketHandler.cpp
rename : src/game/TimeMgr.cpp => src/server/game/TimeMgr.cpp
rename : src/game/TimeMgr.h => src/server/game/TimeMgr.h
rename : src/game/Tools.cpp => src/server/game/Tools.cpp
rename : src/game/Tools.h => src/server/game/Tools.h
rename : src/game/Totem.cpp => src/server/game/Totem.cpp
rename : src/game/Totem.h => src/server/game/Totem.h
rename : src/game/TotemAI.cpp => src/server/game/TotemAI.cpp
rename : src/game/TotemAI.h => src/server/game/TotemAI.h
rename : src/game/TradeHandler.cpp => src/server/game/TradeHandler.cpp
rename : src/game/Transports.cpp => src/server/game/Transports.cpp
rename : src/game/Transports.h => src/server/game/Transports.h
rename : src/game/Traveller.h => src/server/game/Traveller.h
rename : src/game/Unit.cpp => src/server/game/Unit.cpp
rename : src/game/Unit.h => src/server/game/Unit.h
rename : src/game/UnitAI.cpp => src/server/game/UnitAI.cpp
rename : src/game/UnitAI.h => src/server/game/UnitAI.h
rename : src/game/UnitEvents.h => src/server/game/UnitEvents.h
rename : src/game/UpdateData.cpp => src/server/game/UpdateData.cpp
rename : src/game/UpdateData.h => src/server/game/UpdateData.h
rename : src/game/UpdateFields.h => src/server/game/UpdateFields.h
rename : src/game/UpdateMask.h => src/server/game/UpdateMask.h
rename : src/game/Vehicle.cpp => src/server/game/Vehicle.cpp
rename : src/game/Vehicle.h => src/server/game/Vehicle.h
rename : src/game/VoiceChatHandler.cpp => src/server/game/VoiceChatHandler.cpp
rename : src/game/WaypointManager.cpp => src/server/game/WaypointManager.cpp
rename : src/game/WaypointManager.h => src/server/game/WaypointManager.h
rename : src/game/WaypointMovementGenerator.cpp => src/server/game/WaypointMovementGenerator.cpp
rename : src/game/WaypointMovementGenerator.h => src/server/game/WaypointMovementGenerator.h
rename : src/game/Weather.cpp => src/server/game/Weather.cpp
rename : src/game/Weather.h => src/server/game/Weather.h
rename : src/game/World.cpp => src/server/game/World.cpp
rename : src/game/World.h => src/server/game/World.h
rename : src/game/WorldLog.cpp => src/server/game/WorldLog.cpp
rename : src/game/WorldLog.h => src/server/game/WorldLog.h
rename : src/game/WorldSession.cpp => src/server/game/WorldSession.cpp
rename : src/game/WorldSession.h => src/server/game/WorldSession.h
rename : src/game/WorldSocket.cpp => src/server/game/WorldSocket.cpp
rename : src/game/WorldSocket.h => src/server/game/WorldSocket.h
rename : src/game/WorldSocketMgr.cpp => src/server/game/WorldSocketMgr.cpp
rename : src/game/WorldSocketMgr.h => src/server/game/WorldSocketMgr.h
rename : src/game/ZoneScript.h => src/server/game/ZoneScript.h
rename : src/game/pchdef.cpp => src/server/game/pchdef.cpp
rename : src/game/pchdef.h => src/server/game/pchdef.h
rename : src/game/pchlinux.cpp => src/server/game/pchlinux.cpp
rename : src/game/pchlinux.h => src/server/game/pchlinux.h
rename : src/scripts/CMakeLists.txt => src/server/scripts/CMakeLists.txt
rename : src/scripts/custom/custom_example.cpp => src/server/scripts/custom/custom_example.cpp
rename : src/scripts/custom/custom_gossip_codebox.cpp => src/server/scripts/custom/custom_gossip_codebox.cpp
rename : src/scripts/custom/npc_acherus_taxi.cpp => src/server/scripts/custom/npc_acherus_taxi.cpp
rename : src/scripts/custom/npc_wyrmresttempel_taxi.cpp => src/server/scripts/custom/npc_wyrmresttempel_taxi.cpp
rename : src/scripts/custom/on_events.cpp => src/server/scripts/custom/on_events.cpp
rename : src/scripts/custom/test.cpp => src/server/scripts/custom/test.cpp
rename : src/scripts/eastern_kingdoms/alterac_mountains.cpp => src/server/scripts/eastern_kingdoms/alterac_mountains.cpp
rename : src/scripts/eastern_kingdoms/alterac_valley/alterac_valley.cpp => src/server/scripts/eastern_kingdoms/alterac_valley/alterac_valley.cpp
rename : src/scripts/eastern_kingdoms/alterac_valley/boss_balinda.cpp => src/server/scripts/eastern_kingdoms/alterac_valley/boss_balinda.cpp
rename : src/scripts/eastern_kingdoms/alterac_valley/boss_drekthar.cpp => src/server/scripts/eastern_kingdoms/alterac_valley/boss_drekthar.cpp
rename : src/scripts/eastern_kingdoms/alterac_valley/boss_galvangar.cpp => src/server/scripts/eastern_kingdoms/alterac_valley/boss_galvangar.cpp
rename : src/scripts/eastern_kingdoms/alterac_valley/boss_vanndar.cpp => src/server/scripts/eastern_kingdoms/alterac_valley/boss_vanndar.cpp
rename : src/scripts/eastern_kingdoms/arathi_highlands.cpp => src/server/scripts/eastern_kingdoms/arathi_highlands.cpp
rename : src/scripts/eastern_kingdoms/blackrock_depths/blackrock_depths.cpp => src/server/scripts/eastern_kingdoms/blackrock_depths/blackrock_depths.cpp
rename : src/scripts/eastern_kingdoms/blackrock_depths/blackrock_depths.h => src/server/scripts/eastern_kingdoms/blackrock_depths/blackrock_depths.h
rename : src/scripts/eastern_kingdoms/blackrock_depths/boss_ambassador_flamelash.cpp => src/server/scripts/eastern_kingdoms/blackrock_depths/boss_ambassador_flamelash.cpp
rename : src/scripts/eastern_kingdoms/blackrock_depths/boss_anubshiah.cpp => src/server/scripts/eastern_kingdoms/blackrock_depths/boss_anubshiah.cpp
rename : src/scripts/eastern_kingdoms/blackrock_depths/boss_emperor_dagran_thaurissan.cpp => src/server/scripts/eastern_kingdoms/blackrock_depths/boss_emperor_dagran_thaurissan.cpp
rename : src/scripts/eastern_kingdoms/blackrock_depths/boss_general_angerforge.cpp => src/server/scripts/eastern_kingdoms/blackrock_depths/boss_general_angerforge.cpp
rename : src/scripts/eastern_kingdoms/blackrock_depths/boss_gorosh_the_dervish.cpp => src/server/scripts/eastern_kingdoms/blackrock_depths/boss_gorosh_the_dervish.cpp
rename : src/scripts/eastern_kingdoms/blackrock_depths/boss_grizzle.cpp => src/server/scripts/eastern_kingdoms/blackrock_depths/boss_grizzle.cpp
rename : src/scripts/eastern_kingdoms/blackrock_depths/boss_high_interrogator_gerstahn.cpp => src/server/scripts/eastern_kingdoms/blackrock_depths/boss_high_interrogator_gerstahn.cpp
rename : src/scripts/eastern_kingdoms/blackrock_depths/boss_magmus.cpp => src/server/scripts/eastern_kingdoms/blackrock_depths/boss_magmus.cpp
rename : src/scripts/eastern_kingdoms/blackrock_depths/boss_moira_bronzebeard.cpp => src/server/scripts/eastern_kingdoms/blackrock_depths/boss_moira_bronzebeard.cpp
rename : src/scripts/eastern_kingdoms/blackrock_depths/boss_tomb_of_seven.cpp => src/server/scripts/eastern_kingdoms/blackrock_depths/boss_tomb_of_seven.cpp
rename : src/scripts/eastern_kingdoms/blackrock_depths/instance_blackrock_depths.cpp => src/server/scripts/eastern_kingdoms/blackrock_depths/instance_blackrock_depths.cpp
rename : src/scripts/eastern_kingdoms/blackrock_spire/blackrock_spire.cpp => src/server/scripts/eastern_kingdoms/blackrock_spire/blackrock_spire.cpp
rename : src/scripts/eastern_kingdoms/blackrock_spire/blackrock_spire.h => src/server/scripts/eastern_kingdoms/blackrock_spire/blackrock_spire.h
rename : src/scripts/eastern_kingdoms/blackrock_spire/boss_drakkisath.cpp => src/server/scripts/eastern_kingdoms/blackrock_spire/boss_drakkisath.cpp
rename : src/scripts/eastern_kingdoms/blackrock_spire/boss_gyth.cpp => src/server/scripts/eastern_kingdoms/blackrock_spire/boss_gyth.cpp
rename : src/scripts/eastern_kingdoms/blackrock_spire/boss_halycon.cpp => src/server/scripts/eastern_kingdoms/blackrock_spire/boss_halycon.cpp
rename : src/scripts/eastern_kingdoms/blackrock_spire/boss_highlord_omokk.cpp => src/server/scripts/eastern_kingdoms/blackrock_spire/boss_highlord_omokk.cpp
rename : src/scripts/eastern_kingdoms/blackrock_spire/boss_mother_smolderweb.cpp => src/server/scripts/eastern_kingdoms/blackrock_spire/boss_mother_smolderweb.cpp
rename : src/scripts/eastern_kingdoms/blackrock_spire/boss_overlord_wyrmthalak.cpp => src/server/scripts/eastern_kingdoms/blackrock_spire/boss_overlord_wyrmthalak.cpp
rename : src/scripts/eastern_kingdoms/blackrock_spire/boss_pyroguard_emberseer.cpp => src/server/scripts/eastern_kingdoms/blackrock_spire/boss_pyroguard_emberseer.cpp
rename : src/scripts/eastern_kingdoms/blackrock_spire/boss_quartermaster_zigris.cpp => src/server/scripts/eastern_kingdoms/blackrock_spire/boss_quartermaster_zigris.cpp
rename : src/scripts/eastern_kingdoms/blackrock_spire/boss_rend_blackhand.cpp => src/server/scripts/eastern_kingdoms/blackrock_spire/boss_rend_blackhand.cpp
rename : src/scripts/eastern_kingdoms/blackrock_spire/boss_shadow_hunter_voshgajin.cpp => src/server/scripts/eastern_kingdoms/blackrock_spire/boss_shadow_hunter_voshgajin.cpp
rename : src/scripts/eastern_kingdoms/blackrock_spire/boss_the_beast.cpp => src/server/scripts/eastern_kingdoms/blackrock_spire/boss_the_beast.cpp
rename : src/scripts/eastern_kingdoms/blackrock_spire/boss_warmaster_voone.cpp => src/server/scripts/eastern_kingdoms/blackrock_spire/boss_warmaster_voone.cpp
rename : src/scripts/eastern_kingdoms/blackrock_spire/instance_blackrock_spire.cpp => src/server/scripts/eastern_kingdoms/blackrock_spire/instance_blackrock_spire.cpp
rename : src/scripts/eastern_kingdoms/blackwing_lair/boss_broodlord_lashlayer.cpp => src/server/scripts/eastern_kingdoms/blackwing_lair/boss_broodlord_lashlayer.cpp
rename : src/scripts/eastern_kingdoms/blackwing_lair/boss_chromaggus.cpp => src/server/scripts/eastern_kingdoms/blackwing_lair/boss_chromaggus.cpp
rename : src/scripts/eastern_kingdoms/blackwing_lair/boss_ebonroc.cpp => src/server/scripts/eastern_kingdoms/blackwing_lair/boss_ebonroc.cpp
rename : src/scripts/eastern_kingdoms/blackwing_lair/boss_firemaw.cpp => src/server/scripts/eastern_kingdoms/blackwing_lair/boss_firemaw.cpp
rename : src/scripts/eastern_kingdoms/blackwing_lair/boss_flamegor.cpp => src/server/scripts/eastern_kingdoms/blackwing_lair/boss_flamegor.cpp
rename : src/scripts/eastern_kingdoms/blackwing_lair/boss_nefarian.cpp => src/server/scripts/eastern_kingdoms/blackwing_lair/boss_nefarian.cpp
rename : src/scripts/eastern_kingdoms/blackwing_lair/boss_razorgore.cpp => src/server/scripts/eastern_kingdoms/blackwing_lair/boss_razorgore.cpp
rename : src/scripts/eastern_kingdoms/blackwing_lair/boss_vaelastrasz.cpp => src/server/scripts/eastern_kingdoms/blackwing_lair/boss_vaelastrasz.cpp
rename : src/scripts/eastern_kingdoms/blackwing_lair/boss_victor_nefarius.cpp => src/server/scripts/eastern_kingdoms/blackwing_lair/boss_victor_nefarius.cpp
rename : src/scripts/eastern_kingdoms/blackwing_lair/instance_blackwing_lair.cpp => src/server/scripts/eastern_kingdoms/blackwing_lair/instance_blackwing_lair.cpp
rename : src/scripts/eastern_kingdoms/blasted_lands.cpp => src/server/scripts/eastern_kingdoms/blasted_lands.cpp
rename : src/scripts/eastern_kingdoms/boss_kruul.cpp => src/server/scripts/eastern_kingdoms/boss_kruul.cpp
rename : src/scripts/eastern_kingdoms/burning_steppes.cpp => src/server/scripts/eastern_kingdoms/burning_steppes.cpp
rename : src/scripts/eastern_kingdoms/deadmines/boss_mr_smite.cpp => src/server/scripts/eastern_kingdoms/deadmines/boss_mr_smite.cpp
rename : src/scripts/eastern_kingdoms/deadmines/deadmines.cpp => src/server/scripts/eastern_kingdoms/deadmines/deadmines.cpp
rename : src/scripts/eastern_kingdoms/deadmines/deadmines.h => src/server/scripts/eastern_kingdoms/deadmines/deadmines.h
rename : src/scripts/eastern_kingdoms/deadmines/instance_deadmines.cpp => src/server/scripts/eastern_kingdoms/deadmines/instance_deadmines.cpp
rename : src/scripts/eastern_kingdoms/dun_morogh.cpp => src/server/scripts/eastern_kingdoms/dun_morogh.cpp
rename : src/scripts/eastern_kingdoms/duskwood.cpp => src/server/scripts/eastern_kingdoms/duskwood.cpp
rename : src/scripts/eastern_kingdoms/eastern_plaguelands.cpp => src/server/scripts/eastern_kingdoms/eastern_plaguelands.cpp
rename : src/scripts/eastern_kingdoms/elwynn_forest.cpp => src/server/scripts/eastern_kingdoms/elwynn_forest.cpp
rename : src/scripts/eastern_kingdoms/eversong_woods.cpp => src/server/scripts/eastern_kingdoms/eversong_woods.cpp
rename : src/scripts/eastern_kingdoms/ghostlands.cpp => src/server/scripts/eastern_kingdoms/ghostlands.cpp
rename : src/scripts/eastern_kingdoms/gnomeregan/gnomeregan.cpp => src/server/scripts/eastern_kingdoms/gnomeregan/gnomeregan.cpp
rename : src/scripts/eastern_kingdoms/gnomeregan/gnomeregan.h => src/server/scripts/eastern_kingdoms/gnomeregan/gnomeregan.h
rename : src/scripts/eastern_kingdoms/gnomeregan/instance_gnomeregan.cpp => src/server/scripts/eastern_kingdoms/gnomeregan/instance_gnomeregan.cpp
rename : src/scripts/eastern_kingdoms/hinterlands.cpp => src/server/scripts/eastern_kingdoms/hinterlands.cpp
rename : src/scripts/eastern_kingdoms/ironforge.cpp => src/server/scripts/eastern_kingdoms/ironforge.cpp
rename : src/scripts/eastern_kingdoms/isle_of_queldanas.cpp => src/server/scripts/eastern_kingdoms/isle_of_queldanas.cpp
rename : src/scripts/eastern_kingdoms/karazhan/boss_curator.cpp => src/server/scripts/eastern_kingdoms/karazhan/boss_curator.cpp
rename : src/scripts/eastern_kingdoms/karazhan/boss_maiden_of_virtue.cpp => src/server/scripts/eastern_kingdoms/karazhan/boss_maiden_of_virtue.cpp
rename : src/scripts/eastern_kingdoms/karazhan/boss_midnight.cpp => src/server/scripts/eastern_kingdoms/karazhan/boss_midnight.cpp
rename : src/scripts/eastern_kingdoms/karazhan/boss_moroes.cpp => src/server/scripts/eastern_kingdoms/karazhan/boss_moroes.cpp
rename : src/scripts/eastern_kingdoms/karazhan/boss_netherspite.cpp => src/server/scripts/eastern_kingdoms/karazhan/boss_netherspite.cpp
rename : src/scripts/eastern_kingdoms/karazhan/boss_nightbane.cpp => src/server/scripts/eastern_kingdoms/karazhan/boss_nightbane.cpp
rename : src/scripts/eastern_kingdoms/karazhan/boss_prince_malchezaar.cpp => src/server/scripts/eastern_kingdoms/karazhan/boss_prince_malchezaar.cpp
rename : src/scripts/eastern_kingdoms/karazhan/boss_shade_of_aran.cpp => src/server/scripts/eastern_kingdoms/karazhan/boss_shade_of_aran.cpp
rename : src/scripts/eastern_kingdoms/karazhan/boss_terestian_illhoof.cpp => src/server/scripts/eastern_kingdoms/karazhan/boss_terestian_illhoof.cpp
rename : src/scripts/eastern_kingdoms/karazhan/bosses_opera.cpp => src/server/scripts/eastern_kingdoms/karazhan/bosses_opera.cpp
rename : src/scripts/eastern_kingdoms/karazhan/instance_karazhan.cpp => src/server/scripts/eastern_kingdoms/karazhan/instance_karazhan.cpp
rename : src/scripts/eastern_kingdoms/karazhan/karazhan.cpp => src/server/scripts/eastern_kingdoms/karazhan/karazhan.cpp
rename : src/scripts/eastern_kingdoms/karazhan/karazhan.h => src/server/scripts/eastern_kingdoms/karazhan/karazhan.h
rename : src/scripts/eastern_kingdoms/loch_modan.cpp => src/server/scripts/eastern_kingdoms/loch_modan.cpp
rename : src/scripts/eastern_kingdoms/magisters_terrace/boss_felblood_kaelthas.cpp => src/server/scripts/eastern_kingdoms/magisters_terrace/boss_felblood_kaelthas.cpp
rename : src/scripts/eastern_kingdoms/magisters_terrace/boss_priestess_delrissa.cpp => src/server/scripts/eastern_kingdoms/magisters_terrace/boss_priestess_delrissa.cpp
rename : src/scripts/eastern_kingdoms/magisters_terrace/boss_selin_fireheart.cpp => src/server/scripts/eastern_kingdoms/magisters_terrace/boss_selin_fireheart.cpp
rename : src/scripts/eastern_kingdoms/magisters_terrace/boss_vexallus.cpp => src/server/scripts/eastern_kingdoms/magisters_terrace/boss_vexallus.cpp
rename : src/scripts/eastern_kingdoms/magisters_terrace/instance_magisters_terrace.cpp => src/server/scripts/eastern_kingdoms/magisters_terrace/instance_magisters_terrace.cpp
rename : src/scripts/eastern_kingdoms/magisters_terrace/magisters_terrace.cpp => src/server/scripts/eastern_kingdoms/magisters_terrace/magisters_terrace.cpp
rename : src/scripts/eastern_kingdoms/magisters_terrace/magisters_terrace.h => src/server/scripts/eastern_kingdoms/magisters_terrace/magisters_terrace.h
rename : src/scripts/eastern_kingdoms/molten_core/boss_baron_geddon.cpp => src/server/scripts/eastern_kingdoms/molten_core/boss_baron_geddon.cpp
rename : src/scripts/eastern_kingdoms/molten_core/boss_garr.cpp => src/server/scripts/eastern_kingdoms/molten_core/boss_garr.cpp
rename : src/scripts/eastern_kingdoms/molten_core/boss_gehennas.cpp => src/server/scripts/eastern_kingdoms/molten_core/boss_gehennas.cpp
rename : src/scripts/eastern_kingdoms/molten_core/boss_golemagg.cpp => src/server/scripts/eastern_kingdoms/molten_core/boss_golemagg.cpp
rename : src/scripts/eastern_kingdoms/molten_core/boss_lucifron.cpp => src/server/scripts/eastern_kingdoms/molten_core/boss_lucifron.cpp
rename : src/scripts/eastern_kingdoms/molten_core/boss_magmadar.cpp => src/server/scripts/eastern_kingdoms/molten_core/boss_magmadar.cpp
rename : src/scripts/eastern_kingdoms/molten_core/boss_majordomo_executus.cpp => src/server/scripts/eastern_kingdoms/molten_core/boss_majordomo_executus.cpp
rename : src/scripts/eastern_kingdoms/molten_core/boss_ragnaros.cpp => src/server/scripts/eastern_kingdoms/molten_core/boss_ragnaros.cpp
rename : src/scripts/eastern_kingdoms/molten_core/boss_shazzrah.cpp => src/server/scripts/eastern_kingdoms/molten_core/boss_shazzrah.cpp
rename : src/scripts/eastern_kingdoms/molten_core/boss_sulfuron_harbinger.cpp => src/server/scripts/eastern_kingdoms/molten_core/boss_sulfuron_harbinger.cpp
rename : src/scripts/eastern_kingdoms/molten_core/instance_molten_core.cpp => src/server/scripts/eastern_kingdoms/molten_core/instance_molten_core.cpp
rename : src/scripts/eastern_kingdoms/molten_core/molten_core.cpp => src/server/scripts/eastern_kingdoms/molten_core/molten_core.cpp
rename : src/scripts/eastern_kingdoms/molten_core/molten_core.h => src/server/scripts/eastern_kingdoms/molten_core/molten_core.h
rename : src/scripts/eastern_kingdoms/redridge_mountains.cpp => src/server/scripts/eastern_kingdoms/redridge_mountains.cpp
rename : src/scripts/eastern_kingdoms/scarlet_enclave/chapter1.cpp => src/server/scripts/eastern_kingdoms/scarlet_enclave/chapter1.cpp
rename : src/scripts/eastern_kingdoms/scarlet_enclave/chapter2.cpp => src/server/scripts/eastern_kingdoms/scarlet_enclave/chapter2.cpp
rename : src/scripts/eastern_kingdoms/scarlet_enclave/chapter5.cpp => src/server/scripts/eastern_kingdoms/scarlet_enclave/chapter5.cpp
rename : src/scripts/eastern_kingdoms/scarlet_enclave/the_scarlet_enclave.cpp => src/server/scripts/eastern_kingdoms/scarlet_enclave/the_scarlet_enclave.cpp
rename : src/scripts/eastern_kingdoms/scarlet_monastery/boss_arcanist_doan.cpp => src/server/scripts/eastern_kingdoms/scarlet_monastery/boss_arcanist_doan.cpp
rename : src/scripts/eastern_kingdoms/scarlet_monastery/boss_azshir_the_sleepless.cpp => src/server/scripts/eastern_kingdoms/scarlet_monastery/boss_azshir_the_sleepless.cpp
rename : src/scripts/eastern_kingdoms/scarlet_monastery/boss_bloodmage_thalnos.cpp => src/server/scripts/eastern_kingdoms/scarlet_monastery/boss_bloodmage_thalnos.cpp
rename : src/scripts/eastern_kingdoms/scarlet_monastery/boss_headless_horseman.cpp => src/server/scripts/eastern_kingdoms/scarlet_monastery/boss_headless_horseman.cpp
rename : src/scripts/eastern_kingdoms/scarlet_monastery/boss_herod.cpp => src/server/scripts/eastern_kingdoms/scarlet_monastery/boss_herod.cpp
rename : src/scripts/eastern_kingdoms/scarlet_monastery/boss_high_inquisitor_fairbanks.cpp => src/server/scripts/eastern_kingdoms/scarlet_monastery/boss_high_inquisitor_fairbanks.cpp
rename : src/scripts/eastern_kingdoms/scarlet_monastery/boss_houndmaster_loksey.cpp => src/server/scripts/eastern_kingdoms/scarlet_monastery/boss_houndmaster_loksey.cpp
rename : src/scripts/eastern_kingdoms/scarlet_monastery/boss_interrogator_vishas.cpp => src/server/scripts/eastern_kingdoms/scarlet_monastery/boss_interrogator_vishas.cpp
rename : src/scripts/eastern_kingdoms/scarlet_monastery/boss_mograine_and_whitemane.cpp => src/server/scripts/eastern_kingdoms/scarlet_monastery/boss_mograine_and_whitemane.cpp
rename : src/scripts/eastern_kingdoms/scarlet_monastery/boss_scorn.cpp => src/server/scripts/eastern_kingdoms/scarlet_monastery/boss_scorn.cpp
rename : src/scripts/eastern_kingdoms/scarlet_monastery/instance_scarlet_monastery.cpp => src/server/scripts/eastern_kingdoms/scarlet_monastery/instance_scarlet_monastery.cpp
rename : src/scripts/eastern_kingdoms/scarlet_monastery/scarlet_monastery.h => src/server/scripts/eastern_kingdoms/scarlet_monastery/scarlet_monastery.h
rename : src/scripts/eastern_kingdoms/scholomance/boss_darkmaster_gandling.cpp => src/server/scripts/eastern_kingdoms/scholomance/boss_darkmaster_gandling.cpp
rename : src/scripts/eastern_kingdoms/scholomance/boss_death_knight_darkreaver.cpp => src/server/scripts/eastern_kingdoms/scholomance/boss_death_knight_darkreaver.cpp
rename : src/scripts/eastern_kingdoms/scholomance/boss_doctor_theolen_krastinov.cpp => src/server/scripts/eastern_kingdoms/scholomance/boss_doctor_theolen_krastinov.cpp
rename : src/scripts/eastern_kingdoms/scholomance/boss_illucia_barov.cpp => src/server/scripts/eastern_kingdoms/scholomance/boss_illucia_barov.cpp
rename : src/scripts/eastern_kingdoms/scholomance/boss_instructor_malicia.cpp => src/server/scripts/eastern_kingdoms/scholomance/boss_instructor_malicia.cpp
rename : src/scripts/eastern_kingdoms/scholomance/boss_jandice_barov.cpp => src/server/scripts/eastern_kingdoms/scholomance/boss_jandice_barov.cpp
rename : src/scripts/eastern_kingdoms/scholomance/boss_kormok.cpp => src/server/scripts/eastern_kingdoms/scholomance/boss_kormok.cpp
rename : src/scripts/eastern_kingdoms/scholomance/boss_lord_alexei_barov.cpp => src/server/scripts/eastern_kingdoms/scholomance/boss_lord_alexei_barov.cpp
rename : src/scripts/eastern_kingdoms/scholomance/boss_lorekeeper_polkelt.cpp => src/server/scripts/eastern_kingdoms/scholomance/boss_lorekeeper_polkelt.cpp
rename : src/scripts/eastern_kingdoms/scholomance/boss_ras_frostwhisper.cpp => src/server/scripts/eastern_kingdoms/scholomance/boss_ras_frostwhisper.cpp
rename : src/scripts/eastern_kingdoms/scholomance/boss_the_ravenian.cpp => src/server/scripts/eastern_kingdoms/scholomance/boss_the_ravenian.cpp
rename : src/scripts/eastern_kingdoms/scholomance/boss_vectus.cpp => src/server/scripts/eastern_kingdoms/scholomance/boss_vectus.cpp
rename : src/scripts/eastern_kingdoms/scholomance/instance_scholomance.cpp => src/server/scripts/eastern_kingdoms/scholomance/instance_scholomance.cpp
rename : src/scripts/eastern_kingdoms/scholomance/scholomance.h => src/server/scripts/eastern_kingdoms/scholomance/scholomance.h
rename : src/scripts/eastern_kingdoms/searing_gorge.cpp => src/server/scripts/eastern_kingdoms/searing_gorge.cpp
rename : src/scripts/eastern_kingdoms/shadowfang_keep/instance_shadowfang_keep.cpp => src/server/scripts/eastern_kingdoms/shadowfang_keep/instance_shadowfang_keep.cpp
rename : src/scripts/eastern_kingdoms/shadowfang_keep/shadowfang_keep.cpp => src/server/scripts/eastern_kingdoms/shadowfang_keep/shadowfang_keep.cpp
rename : src/scripts/eastern_kingdoms/shadowfang_keep/shadowfang_keep.h => src/server/scripts/eastern_kingdoms/shadowfang_keep/shadowfang_keep.h
rename : src/scripts/eastern_kingdoms/silvermoon_city.cpp => src/server/scripts/eastern_kingdoms/silvermoon_city.cpp
rename : src/scripts/eastern_kingdoms/silverpine_forest.cpp => src/server/scripts/eastern_kingdoms/silverpine_forest.cpp
rename : src/scripts/eastern_kingdoms/stormwind_city.cpp => src/server/scripts/eastern_kingdoms/stormwind_city.cpp
rename : src/scripts/eastern_kingdoms/stranglethorn_vale.cpp => src/server/scripts/eastern_kingdoms/stranglethorn_vale.cpp
rename : src/scripts/eastern_kingdoms/stratholme/boss_baron_rivendare.cpp => src/server/scripts/eastern_kingdoms/stratholme/boss_baron_rivendare.cpp
rename : src/scripts/eastern_kingdoms/stratholme/boss_baroness_anastari.cpp => src/server/scripts/eastern_kingdoms/stratholme/boss_baroness_anastari.cpp
rename : src/scripts/eastern_kingdoms/stratholme/boss_cannon_master_willey.cpp => src/server/scripts/eastern_kingdoms/stratholme/boss_cannon_master_willey.cpp
rename : src/scripts/eastern_kingdoms/stratholme/boss_dathrohan_balnazzar.cpp => src/server/scripts/eastern_kingdoms/stratholme/boss_dathrohan_balnazzar.cpp
rename : src/scripts/eastern_kingdoms/stratholme/boss_magistrate_barthilas.cpp => src/server/scripts/eastern_kingdoms/stratholme/boss_magistrate_barthilas.cpp
rename : src/scripts/eastern_kingdoms/stratholme/boss_maleki_the_pallid.cpp => src/server/scripts/eastern_kingdoms/stratholme/boss_maleki_the_pallid.cpp
rename : src/scripts/eastern_kingdoms/stratholme/boss_nerubenkan.cpp => src/server/scripts/eastern_kingdoms/stratholme/boss_nerubenkan.cpp
rename : src/scripts/eastern_kingdoms/stratholme/boss_order_of_silver_hand.cpp => src/server/scripts/eastern_kingdoms/stratholme/boss_order_of_silver_hand.cpp
rename : src/scripts/eastern_kingdoms/stratholme/boss_postmaster_malown.cpp => src/server/scripts/eastern_kingdoms/stratholme/boss_postmaster_malown.cpp
rename : src/scripts/eastern_kingdoms/stratholme/boss_ramstein_the_gorger.cpp => src/server/scripts/eastern_kingdoms/stratholme/boss_ramstein_the_gorger.cpp
rename : src/scripts/eastern_kingdoms/stratholme/boss_timmy_the_cruel.cpp => src/server/scripts/eastern_kingdoms/stratholme/boss_timmy_the_cruel.cpp
rename : src/scripts/eastern_kingdoms/stratholme/instance_stratholme.cpp => src/server/scripts/eastern_kingdoms/stratholme/instance_stratholme.cpp
rename : src/scripts/eastern_kingdoms/stratholme/stratholme.cpp => src/server/scripts/eastern_kingdoms/stratholme/stratholme.cpp
rename : src/scripts/eastern_kingdoms/stratholme/stratholme.h => src/server/scripts/eastern_kingdoms/stratholme/stratholme.h
rename : src/scripts/eastern_kingdoms/sunken_temple/instance_sunken_temple.cpp => src/server/scripts/eastern_kingdoms/sunken_temple/instance_sunken_temple.cpp
rename : src/scripts/eastern_kingdoms/sunken_temple/sunken_temple.cpp => src/server/scripts/eastern_kingdoms/sunken_temple/sunken_temple.cpp
rename : src/scripts/eastern_kingdoms/sunken_temple/sunken_temple.h => src/server/scripts/eastern_kingdoms/sunken_temple/sunken_temple.h
rename : src/scripts/eastern_kingdoms/sunwell_plateau/boss_brutallus.cpp => src/server/scripts/eastern_kingdoms/sunwell_plateau/boss_brutallus.cpp
rename : src/scripts/eastern_kingdoms/sunwell_plateau/boss_eredar_twins.cpp => src/server/scripts/eastern_kingdoms/sunwell_plateau/boss_eredar_twins.cpp
rename : src/scripts/eastern_kingdoms/sunwell_plateau/boss_felmyst.cpp => src/server/scripts/eastern_kingdoms/sunwell_plateau/boss_felmyst.cpp
rename : src/scripts/eastern_kingdoms/sunwell_plateau/boss_kalecgos.cpp => src/server/scripts/eastern_kingdoms/sunwell_plateau/boss_kalecgos.cpp
rename : src/scripts/eastern_kingdoms/sunwell_plateau/boss_kiljaeden.cpp => src/server/scripts/eastern_kingdoms/sunwell_plateau/boss_kiljaeden.cpp
rename : src/scripts/eastern_kingdoms/sunwell_plateau/boss_muru.cpp => src/server/scripts/eastern_kingdoms/sunwell_plateau/boss_muru.cpp
rename : src/scripts/eastern_kingdoms/sunwell_plateau/instance_sunwell_plateau.cpp => src/server/scripts/eastern_kingdoms/sunwell_plateau/instance_sunwell_plateau.cpp
rename : src/scripts/eastern_kingdoms/sunwell_plateau/sunwell_plateau.cpp => src/server/scripts/eastern_kingdoms/sunwell_plateau/sunwell_plateau.cpp
rename : src/scripts/eastern_kingdoms/sunwell_plateau/sunwell_plateau.h => src/server/scripts/eastern_kingdoms/sunwell_plateau/sunwell_plateau.h
rename : src/scripts/eastern_kingdoms/tirisfal_glades.cpp => src/server/scripts/eastern_kingdoms/tirisfal_glades.cpp
rename : src/scripts/eastern_kingdoms/uldaman/boss_archaedas.cpp => src/server/scripts/eastern_kingdoms/uldaman/boss_archaedas.cpp
rename : src/scripts/eastern_kingdoms/uldaman/boss_ironaya.cpp => src/server/scripts/eastern_kingdoms/uldaman/boss_ironaya.cpp
rename : src/scripts/eastern_kingdoms/uldaman/instance_uldaman.cpp => src/server/scripts/eastern_kingdoms/uldaman/instance_uldaman.cpp
rename : src/scripts/eastern_kingdoms/uldaman/uldaman.cpp => src/server/scripts/eastern_kingdoms/uldaman/uldaman.cpp
rename : src/scripts/eastern_kingdoms/undercity.cpp => src/server/scripts/eastern_kingdoms/undercity.cpp
rename : src/scripts/eastern_kingdoms/western_plaguelands.cpp => src/server/scripts/eastern_kingdoms/western_plaguelands.cpp
rename : src/scripts/eastern_kingdoms/westfall.cpp => src/server/scripts/eastern_kingdoms/westfall.cpp
rename : src/scripts/eastern_kingdoms/wetlands.cpp => src/server/scripts/eastern_kingdoms/wetlands.cpp
rename : src/scripts/eastern_kingdoms/zulaman/boss_akilzon.cpp => src/server/scripts/eastern_kingdoms/zulaman/boss_akilzon.cpp
rename : src/scripts/eastern_kingdoms/zulaman/boss_halazzi.cpp => src/server/scripts/eastern_kingdoms/zulaman/boss_halazzi.cpp
rename : src/scripts/eastern_kingdoms/zulaman/boss_hexlord.cpp => src/server/scripts/eastern_kingdoms/zulaman/boss_hexlord.cpp
rename : src/scripts/eastern_kingdoms/zulaman/boss_janalai.cpp => src/server/scripts/eastern_kingdoms/zulaman/boss_janalai.cpp
rename : src/scripts/eastern_kingdoms/zulaman/boss_nalorakk.cpp => src/server/scripts/eastern_kingdoms/zulaman/boss_nalorakk.cpp
rename : src/scripts/eastern_kingdoms/zulaman/boss_zuljin.cpp => src/server/scripts/eastern_kingdoms/zulaman/boss_zuljin.cpp
rename : src/scripts/eastern_kingdoms/zulaman/instance_zulaman.cpp => src/server/scripts/eastern_kingdoms/zulaman/instance_zulaman.cpp
rename : src/scripts/eastern_kingdoms/zulaman/zulaman.cpp => src/server/scripts/eastern_kingdoms/zulaman/zulaman.cpp
rename : src/scripts/eastern_kingdoms/zulaman/zulaman.h => src/server/scripts/eastern_kingdoms/zulaman/zulaman.h
rename : src/scripts/eastern_kingdoms/zulgurub/boss_arlokk.cpp => src/server/scripts/eastern_kingdoms/zulgurub/boss_arlokk.cpp
rename : src/scripts/eastern_kingdoms/zulgurub/boss_gahzranka.cpp => src/server/scripts/eastern_kingdoms/zulgurub/boss_gahzranka.cpp
rename : src/scripts/eastern_kingdoms/zulgurub/boss_grilek.cpp => src/server/scripts/eastern_kingdoms/zulgurub/boss_grilek.cpp
rename : src/scripts/eastern_kingdoms/zulgurub/boss_hakkar.cpp => src/server/scripts/eastern_kingdoms/zulgurub/boss_hakkar.cpp
rename : src/scripts/eastern_kingdoms/zulgurub/boss_hazzarah.cpp => src/server/scripts/eastern_kingdoms/zulgurub/boss_hazzarah.cpp
rename : src/scripts/eastern_kingdoms/zulgurub/boss_jeklik.cpp => src/server/scripts/eastern_kingdoms/zulgurub/boss_jeklik.cpp
rename : src/scripts/eastern_kingdoms/zulgurub/boss_jindo.cpp => src/server/scripts/eastern_kingdoms/zulgurub/boss_jindo.cpp
rename : src/scripts/eastern_kingdoms/zulgurub/boss_mandokir.cpp => src/server/scripts/eastern_kingdoms/zulgurub/boss_mandokir.cpp
rename : src/scripts/eastern_kingdoms/zulgurub/boss_marli.cpp => src/server/scripts/eastern_kingdoms/zulgurub/boss_marli.cpp
rename : src/scripts/eastern_kingdoms/zulgurub/boss_renataki.cpp => src/server/scripts/eastern_kingdoms/zulgurub/boss_renataki.cpp
rename : src/scripts/eastern_kingdoms/zulgurub/boss_thekal.cpp => src/server/scripts/eastern_kingdoms/zulgurub/boss_thekal.cpp
rename : src/scripts/eastern_kingdoms/zulgurub/boss_venoxis.cpp => src/server/scripts/eastern_kingdoms/zulgurub/boss_venoxis.cpp
rename : src/scripts/eastern_kingdoms/zulgurub/boss_wushoolay.cpp => src/server/scripts/eastern_kingdoms/zulgurub/boss_wushoolay.cpp
rename : src/scripts/eastern_kingdoms/zulgurub/instance_zulgurub.cpp => src/server/scripts/eastern_kingdoms/zulgurub/instance_zulgurub.cpp
rename : src/scripts/eastern_kingdoms/zulgurub/zulgurub.h => src/server/scripts/eastern_kingdoms/zulgurub/zulgurub.h
rename : src/scripts/examples/example_creature.cpp => src/server/scripts/examples/example_creature.cpp
rename : src/scripts/examples/example_escort.cpp => src/server/scripts/examples/example_escort.cpp
rename : src/scripts/examples/example_gossip_codebox.cpp => src/server/scripts/examples/example_gossip_codebox.cpp
rename : src/scripts/examples/example_misc.cpp => src/server/scripts/examples/example_misc.cpp
rename : src/scripts/kalimdor/ashenvale.cpp => src/server/scripts/kalimdor/ashenvale.cpp
rename : src/scripts/kalimdor/azshara.cpp => src/server/scripts/kalimdor/azshara.cpp
rename : src/scripts/kalimdor/azuremyst_isle.cpp => src/server/scripts/kalimdor/azuremyst_isle.cpp
rename : src/scripts/kalimdor/blackfathom_depths/blackfathom_deeps.cpp => src/server/scripts/kalimdor/blackfathom_depths/blackfathom_deeps.cpp
rename : src/scripts/kalimdor/blackfathom_depths/blackfathom_deeps.h => src/server/scripts/kalimdor/blackfathom_depths/blackfathom_deeps.h
rename : src/scripts/kalimdor/blackfathom_depths/boss_aku_mai.cpp => src/server/scripts/kalimdor/blackfathom_depths/boss_aku_mai.cpp
rename : src/scripts/kalimdor/blackfathom_depths/boss_gelihast.cpp => src/server/scripts/kalimdor/blackfathom_depths/boss_gelihast.cpp
rename : src/scripts/kalimdor/blackfathom_depths/boss_kelris.cpp => src/server/scripts/kalimdor/blackfathom_depths/boss_kelris.cpp
rename : src/scripts/kalimdor/blackfathom_depths/instance_blackfathom_deeps.cpp => src/server/scripts/kalimdor/blackfathom_depths/instance_blackfathom_deeps.cpp
rename : src/scripts/kalimdor/bloodmyst_isle.cpp => src/server/scripts/kalimdor/bloodmyst_isle.cpp
rename : src/scripts/kalimdor/boss_azuregos.cpp => src/server/scripts/kalimdor/boss_azuregos.cpp
rename : src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_epoch.cpp => src/server/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_epoch.cpp
rename : src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_infinite.cpp => src/server/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_infinite.cpp
rename : src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_mal_ganis.cpp => src/server/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_mal_ganis.cpp
rename : src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_meathook.cpp => src/server/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_meathook.cpp
rename : src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_salramm.cpp => src/server/scripts/kalimdor/caverns_of_time/culling_of_stratholme/boss_salramm.cpp
rename : src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/culling_of_stratholme.cpp => src/server/scripts/kalimdor/caverns_of_time/culling_of_stratholme/culling_of_stratholme.cpp
rename : src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/culling_of_stratholme.h => src/server/scripts/kalimdor/caverns_of_time/culling_of_stratholme/culling_of_stratholme.h
rename : src/scripts/kalimdor/caverns_of_time/culling_of_stratholme/instance_culling_of_stratholme.cpp => src/server/scripts/kalimdor/caverns_of_time/culling_of_stratholme/instance_culling_of_stratholme.cpp
rename : src/scripts/kalimdor/caverns_of_time/dark_portal/boss_aeonus.cpp => src/server/scripts/kalimdor/caverns_of_time/dark_portal/boss_aeonus.cpp
rename : src/scripts/kalimdor/caverns_of_time/dark_portal/boss_chrono_lord_deja.cpp => src/server/scripts/kalimdor/caverns_of_time/dark_portal/boss_chrono_lord_deja.cpp
rename : src/scripts/kalimdor/caverns_of_time/dark_portal/boss_temporus.cpp => src/server/scripts/kalimdor/caverns_of_time/dark_portal/boss_temporus.cpp
rename : src/scripts/kalimdor/caverns_of_time/dark_portal/dark_portal.cpp => src/server/scripts/kalimdor/caverns_of_time/dark_portal/dark_portal.cpp
rename : src/scripts/kalimdor/caverns_of_time/dark_portal/dark_portal.h => src/server/scripts/kalimdor/caverns_of_time/dark_portal/dark_portal.h
rename : src/scripts/kalimdor/caverns_of_time/dark_portal/instance_dark_portal.cpp => src/server/scripts/kalimdor/caverns_of_time/dark_portal/instance_dark_portal.cpp
rename : src/scripts/kalimdor/caverns_of_time/hyjal/boss_anetheron.cpp => src/server/scripts/kalimdor/caverns_of_time/hyjal/boss_anetheron.cpp
rename : src/scripts/kalimdor/caverns_of_time/hyjal/boss_archimonde.cpp => src/server/scripts/kalimdor/caverns_of_time/hyjal/boss_archimonde.cpp
rename : src/scripts/kalimdor/caverns_of_time/hyjal/boss_azgalor.cpp => src/server/scripts/kalimdor/caverns_of_time/hyjal/boss_azgalor.cpp
rename : src/scripts/kalimdor/caverns_of_time/hyjal/boss_kazrogal.cpp => src/server/scripts/kalimdor/caverns_of_time/hyjal/boss_kazrogal.cpp
rename : src/scripts/kalimdor/caverns_of_time/hyjal/boss_rage_winterchill.cpp => src/server/scripts/kalimdor/caverns_of_time/hyjal/boss_rage_winterchill.cpp
rename : src/scripts/kalimdor/caverns_of_time/hyjal/hyjal.cpp => src/server/scripts/kalimdor/caverns_of_time/hyjal/hyjal.cpp
rename : src/scripts/kalimdor/caverns_of_time/hyjal/hyjal.h => src/server/scripts/kalimdor/caverns_of_time/hyjal/hyjal.h
rename : src/scripts/kalimdor/caverns_of_time/hyjal/hyjalAI.cpp => src/server/scripts/kalimdor/caverns_of_time/hyjal/hyjalAI.cpp
rename : src/scripts/kalimdor/caverns_of_time/hyjal/hyjalAI.h => src/server/scripts/kalimdor/caverns_of_time/hyjal/hyjalAI.h
rename : src/scripts/kalimdor/caverns_of_time/hyjal/hyjal_trash.cpp => src/server/scripts/kalimdor/caverns_of_time/hyjal/hyjal_trash.cpp
rename : src/scripts/kalimdor/caverns_of_time/hyjal/hyjal_trash.h => src/server/scripts/kalimdor/caverns_of_time/hyjal/hyjal_trash.h
rename : src/scripts/kalimdor/caverns_of_time/hyjal/instance_hyjal.cpp => src/server/scripts/kalimdor/caverns_of_time/hyjal/instance_hyjal.cpp
rename : src/scripts/kalimdor/caverns_of_time/old_hillsbrad/boss_captain_skarloc.cpp => src/server/scripts/kalimdor/caverns_of_time/old_hillsbrad/boss_captain_skarloc.cpp
rename : src/scripts/kalimdor/caverns_of_time/old_hillsbrad/boss_epoch_hunter.cpp => src/server/scripts/kalimdor/caverns_of_time/old_hillsbrad/boss_epoch_hunter.cpp
rename : src/scripts/kalimdor/caverns_of_time/old_hillsbrad/boss_leutenant_drake.cpp => src/server/scripts/kalimdor/caverns_of_time/old_hillsbrad/boss_leutenant_drake.cpp
rename : src/scripts/kalimdor/caverns_of_time/old_hillsbrad/instance_old_hillsbrad.cpp => src/server/scripts/kalimdor/caverns_of_time/old_hillsbrad/instance_old_hillsbrad.cpp
rename : src/scripts/kalimdor/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp => src/server/scripts/kalimdor/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp
rename : src/scripts/kalimdor/caverns_of_time/old_hillsbrad/old_hillsbrad.h => src/server/scripts/kalimdor/caverns_of_time/old_hillsbrad/old_hillsbrad.h
rename : src/scripts/kalimdor/darkshore.cpp => src/server/scripts/kalimdor/darkshore.cpp
rename : src/scripts/kalimdor/desolace.cpp => src/server/scripts/kalimdor/desolace.cpp
rename : src/scripts/kalimdor/durotar.cpp => src/server/scripts/kalimdor/durotar.cpp
rename : src/scripts/kalimdor/dustwallow_marsh.cpp => src/server/scripts/kalimdor/dustwallow_marsh.cpp
rename : src/scripts/kalimdor/felwood.cpp => src/server/scripts/kalimdor/felwood.cpp
rename : src/scripts/kalimdor/feralas.cpp => src/server/scripts/kalimdor/feralas.cpp
rename : src/scripts/kalimdor/maraudon/boss_celebras_the_cursed.cpp => src/server/scripts/kalimdor/maraudon/boss_celebras_the_cursed.cpp
rename : src/scripts/kalimdor/maraudon/boss_landslide.cpp => src/server/scripts/kalimdor/maraudon/boss_landslide.cpp
rename : src/scripts/kalimdor/maraudon/boss_noxxion.cpp => src/server/scripts/kalimdor/maraudon/boss_noxxion.cpp
rename : src/scripts/kalimdor/maraudon/boss_princess_theradras.cpp => src/server/scripts/kalimdor/maraudon/boss_princess_theradras.cpp
rename : src/scripts/kalimdor/moonglade.cpp => src/server/scripts/kalimdor/moonglade.cpp
rename : src/scripts/kalimdor/mulgore.cpp => src/server/scripts/kalimdor/mulgore.cpp
rename : src/scripts/kalimdor/onyxias_lair/boss_onyxia.cpp => src/server/scripts/kalimdor/onyxias_lair/boss_onyxia.cpp
rename : src/scripts/kalimdor/onyxias_lair/instance_onyxias_lair.cpp => src/server/scripts/kalimdor/onyxias_lair/instance_onyxias_lair.cpp
rename : src/scripts/kalimdor/onyxias_lair/onyxias_lair.h => src/server/scripts/kalimdor/onyxias_lair/onyxias_lair.h
rename : src/scripts/kalimdor/orgrimmar.cpp => src/server/scripts/kalimdor/orgrimmar.cpp
rename : src/scripts/kalimdor/razorfen_downs/boss_amnennar_the_coldbringer.cpp => src/server/scripts/kalimdor/razorfen_downs/boss_amnennar_the_coldbringer.cpp
rename : src/scripts/kalimdor/razorfen_downs/instance_razorfen_downs.cpp => src/server/scripts/kalimdor/razorfen_downs/instance_razorfen_downs.cpp
rename : src/scripts/kalimdor/razorfen_downs/razorfen_downs.cpp => src/server/scripts/kalimdor/razorfen_downs/razorfen_downs.cpp
rename : src/scripts/kalimdor/razorfen_downs/razorfen_downs.h => src/server/scripts/kalimdor/razorfen_downs/razorfen_downs.h
rename : src/scripts/kalimdor/razorfen_kraul/instance_razorfen_kraul.cpp => src/server/scripts/kalimdor/razorfen_kraul/instance_razorfen_kraul.cpp
rename : src/scripts/kalimdor/razorfen_kraul/razorfen_kraul.cpp => src/server/scripts/kalimdor/razorfen_kraul/razorfen_kraul.cpp
rename : src/scripts/kalimdor/razorfen_kraul/razorfen_kraul.h => src/server/scripts/kalimdor/razorfen_kraul/razorfen_kraul.h
rename : src/scripts/kalimdor/ruins_of_ahnqiraj/boss_ayamiss.cpp => src/server/scripts/kalimdor/ruins_of_ahnqiraj/boss_ayamiss.cpp
rename : src/scripts/kalimdor/ruins_of_ahnqiraj/boss_buru.cpp => src/server/scripts/kalimdor/ruins_of_ahnqiraj/boss_buru.cpp
rename : src/scripts/kalimdor/ruins_of_ahnqiraj/boss_kurinnaxx.cpp => src/server/scripts/kalimdor/ruins_of_ahnqiraj/boss_kurinnaxx.cpp
rename : src/scripts/kalimdor/ruins_of_ahnqiraj/boss_moam.cpp => src/server/scripts/kalimdor/ruins_of_ahnqiraj/boss_moam.cpp
rename : src/scripts/kalimdor/ruins_of_ahnqiraj/boss_ossirian.cpp => src/server/scripts/kalimdor/ruins_of_ahnqiraj/boss_ossirian.cpp
rename : src/scripts/kalimdor/ruins_of_ahnqiraj/boss_rajaxx.cpp => src/server/scripts/kalimdor/ruins_of_ahnqiraj/boss_rajaxx.cpp
rename : src/scripts/kalimdor/ruins_of_ahnqiraj/instance_ruins_of_ahnqiraj.cpp => src/server/scripts/kalimdor/ruins_of_ahnqiraj/instance_ruins_of_ahnqiraj.cpp
rename : src/scripts/kalimdor/ruins_of_ahnqiraj/ruins_of_ahnqiraj.h => src/server/scripts/kalimdor/ruins_of_ahnqiraj/ruins_of_ahnqiraj.h
rename : src/scripts/kalimdor/silithus.cpp => src/server/scripts/kalimdor/silithus.cpp
rename : src/scripts/kalimdor/stonetalon_mountains.cpp => src/server/scripts/kalimdor/stonetalon_mountains.cpp
rename : src/scripts/kalimdor/tanaris.cpp => src/server/scripts/kalimdor/tanaris.cpp
rename : src/scripts/kalimdor/teldrassil.cpp => src/server/scripts/kalimdor/teldrassil.cpp
rename : src/scripts/kalimdor/temple_of_ahnqiraj/boss_bug_trio.cpp => src/server/scripts/kalimdor/temple_of_ahnqiraj/boss_bug_trio.cpp
rename : src/scripts/kalimdor/temple_of_ahnqiraj/boss_cthun.cpp => src/server/scripts/kalimdor/temple_of_ahnqiraj/boss_cthun.cpp
rename : src/scripts/kalimdor/temple_of_ahnqiraj/boss_fankriss.cpp => src/server/scripts/kalimdor/temple_of_ahnqiraj/boss_fankriss.cpp
rename : src/scripts/kalimdor/temple_of_ahnqiraj/boss_huhuran.cpp => src/server/scripts/kalimdor/temple_of_ahnqiraj/boss_huhuran.cpp
rename : src/scripts/kalimdor/temple_of_ahnqiraj/boss_ouro.cpp => src/server/scripts/kalimdor/temple_of_ahnqiraj/boss_ouro.cpp
rename : src/scripts/kalimdor/temple_of_ahnqiraj/boss_sartura.cpp => src/server/scripts/kalimdor/temple_of_ahnqiraj/boss_sartura.cpp
rename : src/scripts/kalimdor/temple_of_ahnqiraj/boss_skeram.cpp => src/server/scripts/kalimdor/temple_of_ahnqiraj/boss_skeram.cpp
rename : src/scripts/kalimdor/temple_of_ahnqiraj/boss_twinemperors.cpp => src/server/scripts/kalimdor/temple_of_ahnqiraj/boss_twinemperors.cpp
rename : src/scripts/kalimdor/temple_of_ahnqiraj/boss_viscidus.cpp => src/server/scripts/kalimdor/temple_of_ahnqiraj/boss_viscidus.cpp
rename : src/scripts/kalimdor/temple_of_ahnqiraj/instance_temple_of_ahnqiraj.cpp => src/server/scripts/kalimdor/temple_of_ahnqiraj/instance_temple_of_ahnqiraj.cpp
rename : src/scripts/kalimdor/temple_of_ahnqiraj/mob_anubisath_sentinel.cpp => src/server/scripts/kalimdor/temple_of_ahnqiraj/mob_anubisath_sentinel.cpp
rename : src/scripts/kalimdor/temple_of_ahnqiraj/temple_of_ahnqiraj.h => src/server/scripts/kalimdor/temple_of_ahnqiraj/temple_of_ahnqiraj.h
rename : src/scripts/kalimdor/the_barrens.cpp => src/server/scripts/kalimdor/the_barrens.cpp
rename : src/scripts/kalimdor/thousand_needles.cpp => src/server/scripts/kalimdor/thousand_needles.cpp
rename : src/scripts/kalimdor/thunder_bluff.cpp => src/server/scripts/kalimdor/thunder_bluff.cpp
rename : src/scripts/kalimdor/ungoro_crater.cpp => src/server/scripts/kalimdor/ungoro_crater.cpp
rename : src/scripts/kalimdor/wailing_caverns/instance_wailing_caverns.cpp => src/server/scripts/kalimdor/wailing_caverns/instance_wailing_caverns.cpp
rename : src/scripts/kalimdor/wailing_caverns/wailing_caverns.cpp => src/server/scripts/kalimdor/wailing_caverns/wailing_caverns.cpp
rename : src/scripts/kalimdor/wailing_caverns/wailing_caverns.h => src/server/scripts/kalimdor/wailing_caverns/wailing_caverns.h
rename : src/scripts/kalimdor/winterspring.cpp => src/server/scripts/kalimdor/winterspring.cpp
rename : src/scripts/kalimdor/zulfarrak/instance_zulfarrak.cpp => src/server/scripts/kalimdor/zulfarrak/instance_zulfarrak.cpp
rename : src/scripts/kalimdor/zulfarrak/zulfarrak.cpp => src/server/scripts/kalimdor/zulfarrak/zulfarrak.cpp
rename : src/scripts/northrend/azjol_nerub/ahnkahet/ahnkahet.h => src/server/scripts/northrend/azjol_nerub/ahnkahet/ahnkahet.h
rename : src/scripts/northrend/azjol_nerub/ahnkahet/boss_amanitar.cpp => src/server/scripts/northrend/azjol_nerub/ahnkahet/boss_amanitar.cpp
rename : src/scripts/northrend/azjol_nerub/ahnkahet/boss_elder_nadox.cpp => src/server/scripts/northrend/azjol_nerub/ahnkahet/boss_elder_nadox.cpp
rename : src/scripts/northrend/azjol_nerub/ahnkahet/boss_herald_volazj.cpp => src/server/scripts/northrend/azjol_nerub/ahnkahet/boss_herald_volazj.cpp
rename : src/scripts/northrend/azjol_nerub/ahnkahet/boss_jedoga_shadowseeker.cpp => src/server/scripts/northrend/azjol_nerub/ahnkahet/boss_jedoga_shadowseeker.cpp
rename : src/scripts/northrend/azjol_nerub/ahnkahet/boss_prince_taldaram.cpp => src/server/scripts/northrend/azjol_nerub/ahnkahet/boss_prince_taldaram.cpp
rename : src/scripts/northrend/azjol_nerub/ahnkahet/instance_ahnkahet.cpp => src/server/scripts/northrend/azjol_nerub/ahnkahet/instance_ahnkahet.cpp
rename : src/scripts/northrend/azjol_nerub/azjol_nerub/azjol_nerub.h => src/server/scripts/northrend/azjol_nerub/azjol_nerub/azjol_nerub.h
rename : src/scripts/northrend/azjol_nerub/azjol_nerub/boss_anubarak.cpp => src/server/scripts/northrend/azjol_nerub/azjol_nerub/boss_anubarak.cpp
rename : src/scripts/northrend/azjol_nerub/azjol_nerub/boss_hadronox.cpp => src/server/scripts/northrend/azjol_nerub/azjol_nerub/boss_hadronox.cpp
rename : src/scripts/northrend/azjol_nerub/azjol_nerub/boss_krikthir_the_gatewatcher.cpp => src/server/scripts/northrend/azjol_nerub/azjol_nerub/boss_krikthir_the_gatewatcher.cpp
rename : src/scripts/northrend/azjol_nerub/azjol_nerub/instance_azjol_nerub.cpp => src/server/scripts/northrend/azjol_nerub/azjol_nerub/instance_azjol_nerub.cpp
rename : src/scripts/northrend/borean_tundra.cpp => src/server/scripts/northrend/borean_tundra.cpp
rename : src/scripts/northrend/crusaders_coliseum/trial_of_the_champion/boss_argent_challenge.cpp => src/server/scripts/northrend/crusaders_coliseum/trial_of_the_champion/boss_argent_challenge.cpp
rename : src/scripts/northrend/crusaders_coliseum/trial_of_the_champion/boss_black_knight.cpp => src/server/scripts/northrend/crusaders_coliseum/trial_of_the_champion/boss_black_knight.cpp
rename : src/scripts/northrend/crusaders_coliseum/trial_of_the_champion/boss_grand_champions.cpp => src/server/scripts/northrend/crusaders_coliseum/trial_of_the_champion/boss_grand_champions.cpp
rename : src/scripts/northrend/crusaders_coliseum/trial_of_the_champion/instance_trial_of_the_champion.cpp => src/server/scripts/northrend/crusaders_coliseum/trial_of_the_champion/instance_trial_of_the_champion.cpp
rename : src/scripts/northrend/crusaders_coliseum/trial_of_the_champion/trial_of_the_champion.cpp => src/server/scripts/northrend/crusaders_coliseum/trial_of_the_champion/trial_of_the_champion.cpp
rename : src/scripts/northrend/crusaders_coliseum/trial_of_the_champion/trial_of_the_champion.h => src/server/scripts/northrend/crusaders_coliseum/trial_of_the_champion/trial_of_the_champion.h
rename : src/scripts/northrend/crystalsong_forest.cpp => src/server/scripts/northrend/crystalsong_forest.cpp
rename : src/scripts/northrend/dalaran.cpp => src/server/scripts/northrend/dalaran.cpp
rename : src/scripts/northrend/dragonblight.cpp => src/server/scripts/northrend/dragonblight.cpp
rename : src/scripts/northrend/draktharon_keep/boss_dred.cpp => src/server/scripts/northrend/draktharon_keep/boss_dred.cpp
rename : src/scripts/northrend/draktharon_keep/boss_novos.cpp => src/server/scripts/northrend/draktharon_keep/boss_novos.cpp
rename : src/scripts/northrend/draktharon_keep/boss_tharon_ja.cpp => src/server/scripts/northrend/draktharon_keep/boss_tharon_ja.cpp
rename : src/scripts/northrend/draktharon_keep/boss_trollgore.cpp => src/server/scripts/northrend/draktharon_keep/boss_trollgore.cpp
rename : src/scripts/northrend/draktharon_keep/drak_tharon_keep.h => src/server/scripts/northrend/draktharon_keep/drak_tharon_keep.h
rename : src/scripts/northrend/draktharon_keep/instance_drak_tharon_keep.cpp => src/server/scripts/northrend/draktharon_keep/instance_drak_tharon_keep.cpp
rename : src/scripts/northrend/frozen_halls/forge_of_souls/boss_bronjahm.cpp => src/server/scripts/northrend/frozen_halls/forge_of_souls/boss_bronjahm.cpp
rename : src/scripts/northrend/frozen_halls/forge_of_souls/boss_devourer_of_souls.cpp => src/server/scripts/northrend/frozen_halls/forge_of_souls/boss_devourer_of_souls.cpp
rename : src/scripts/northrend/frozen_halls/forge_of_souls/forge_of_souls.cpp => src/server/scripts/northrend/frozen_halls/forge_of_souls/forge_of_souls.cpp
rename : src/scripts/northrend/frozen_halls/forge_of_souls/forge_of_souls.h => src/server/scripts/northrend/frozen_halls/forge_of_souls/forge_of_souls.h
rename : src/scripts/northrend/frozen_halls/forge_of_souls/instance_forge_of_souls.cpp => src/server/scripts/northrend/frozen_halls/forge_of_souls/instance_forge_of_souls.cpp
rename : src/scripts/northrend/frozen_halls/halls_of_reflection/boss_falric.cpp => src/server/scripts/northrend/frozen_halls/halls_of_reflection/boss_falric.cpp
rename : src/scripts/northrend/frozen_halls/halls_of_reflection/boss_marwyn.cpp => src/server/scripts/northrend/frozen_halls/halls_of_reflection/boss_marwyn.cpp
rename : src/scripts/northrend/frozen_halls/halls_of_reflection/halls_of_reflection.cpp => src/server/scripts/northrend/frozen_halls/halls_of_reflection/halls_of_reflection.cpp
rename : src/scripts/northrend/frozen_halls/halls_of_reflection/halls_of_reflection.h => src/server/scripts/northrend/frozen_halls/halls_of_reflection/halls_of_reflection.h
rename : src/scripts/northrend/frozen_halls/halls_of_reflection/instance_halls_of_reflection.cpp => src/server/scripts/northrend/frozen_halls/halls_of_reflection/instance_halls_of_reflection.cpp
rename : src/scripts/northrend/frozen_halls/pit_of_saron/boss_forgemaster_garfrost.cpp => src/server/scripts/northrend/frozen_halls/pit_of_saron/boss_forgemaster_garfrost.cpp
rename : src/scripts/northrend/frozen_halls/pit_of_saron/boss_krickandick.cpp => src/server/scripts/northrend/frozen_halls/pit_of_saron/boss_krickandick.cpp
rename : src/scripts/northrend/frozen_halls/pit_of_saron/boss_scourgelord_tyrannus.cpp => src/server/scripts/northrend/frozen_halls/pit_of_saron/boss_scourgelord_tyrannus.cpp
rename : src/scripts/northrend/frozen_halls/pit_of_saron/instance_pit_of_saron.cpp => src/server/scripts/northrend/frozen_halls/pit_of_saron/instance_pit_of_saron.cpp
rename : src/scripts/northrend/frozen_halls/pit_of_saron/pit_of_saron.cpp => src/server/scripts/northrend/frozen_halls/pit_of_saron/pit_of_saron.cpp
rename : src/scripts/northrend/frozen_halls/pit_of_saron/pit_of_saron.h => src/server/scripts/northrend/frozen_halls/pit_of_saron/pit_of_saron.h
rename : src/scripts/northrend/grizzly_hills.cpp => src/server/scripts/northrend/grizzly_hills.cpp
rename : src/scripts/northrend/gundrak/boss_drakkari_colossus.cpp => src/server/scripts/northrend/gundrak/boss_drakkari_colossus.cpp
rename : src/scripts/northrend/gundrak/boss_eck.cpp => src/server/scripts/northrend/gundrak/boss_eck.cpp
rename : src/scripts/northrend/gundrak/boss_gal_darah.cpp => src/server/scripts/northrend/gundrak/boss_gal_darah.cpp
rename : src/scripts/northrend/gundrak/boss_moorabi.cpp => src/server/scripts/northrend/gundrak/boss_moorabi.cpp
rename : src/scripts/northrend/gundrak/boss_slad_ran.cpp => src/server/scripts/northrend/gundrak/boss_slad_ran.cpp
rename : src/scripts/northrend/gundrak/gundrak.h => src/server/scripts/northrend/gundrak/gundrak.h
rename : src/scripts/northrend/gundrak/instance_gundrak.cpp => src/server/scripts/northrend/gundrak/instance_gundrak.cpp
rename : src/scripts/northrend/howling_fjord.cpp => src/server/scripts/northrend/howling_fjord.cpp
rename : src/scripts/northrend/icecrown.cpp => src/server/scripts/northrend/icecrown.cpp
rename : src/scripts/northrend/naxxramas/boss_anubrekhan.cpp => src/server/scripts/northrend/naxxramas/boss_anubrekhan.cpp
rename : src/scripts/northrend/naxxramas/boss_faerlina.cpp => src/server/scripts/northrend/naxxramas/boss_faerlina.cpp
rename : src/scripts/northrend/naxxramas/boss_four_horsemen.cpp => src/server/scripts/northrend/naxxramas/boss_four_horsemen.cpp
rename : src/scripts/northrend/naxxramas/boss_gluth.cpp => src/server/scripts/northrend/naxxramas/boss_gluth.cpp
rename : src/scripts/northrend/naxxramas/boss_gothik.cpp => src/server/scripts/northrend/naxxramas/boss_gothik.cpp
rename : src/scripts/northrend/naxxramas/boss_grobbulus.cpp => src/server/scripts/northrend/naxxramas/boss_grobbulus.cpp
rename : src/scripts/northrend/naxxramas/boss_heigan.cpp => src/server/scripts/northrend/naxxramas/boss_heigan.cpp
rename : src/scripts/northrend/naxxramas/boss_highlord_mograine.cpp => src/server/scripts/northrend/naxxramas/boss_highlord_mograine.cpp
rename : src/scripts/northrend/naxxramas/boss_kelthuzad.cpp => src/server/scripts/northrend/naxxramas/boss_kelthuzad.cpp
rename : src/scripts/northrend/naxxramas/boss_loatheb.cpp => src/server/scripts/northrend/naxxramas/boss_loatheb.cpp
rename : src/scripts/northrend/naxxramas/boss_maexxna.cpp => src/server/scripts/northrend/naxxramas/boss_maexxna.cpp
rename : src/scripts/northrend/naxxramas/boss_noth.cpp => src/server/scripts/northrend/naxxramas/boss_noth.cpp
rename : src/scripts/northrend/naxxramas/boss_patchwerk.cpp => src/server/scripts/northrend/naxxramas/boss_patchwerk.cpp
rename : src/scripts/northrend/naxxramas/boss_razuvious.cpp => src/server/scripts/northrend/naxxramas/boss_razuvious.cpp
rename : src/scripts/northrend/naxxramas/boss_sapphiron.cpp => src/server/scripts/northrend/naxxramas/boss_sapphiron.cpp
rename : src/scripts/northrend/naxxramas/boss_thaddius.cpp => src/server/scripts/northrend/naxxramas/boss_thaddius.cpp
rename : src/scripts/northrend/naxxramas/instance_naxxramas.cpp => src/server/scripts/northrend/naxxramas/instance_naxxramas.cpp
rename : src/scripts/northrend/naxxramas/naxxramas.h => src/server/scripts/northrend/naxxramas/naxxramas.h
rename : src/scripts/northrend/nexus/eye_of_eternity/boss_malygos.cpp => src/server/scripts/northrend/nexus/eye_of_eternity/boss_malygos.cpp
rename : src/scripts/northrend/nexus/eye_of_eternity/eye_of_eternity.h => src/server/scripts/northrend/nexus/eye_of_eternity/eye_of_eternity.h
rename : src/scripts/northrend/nexus/eye_of_eternity/instance_eye_of_eternity.cpp => src/server/scripts/northrend/nexus/eye_of_eternity/instance_eye_of_eternity.cpp
rename : src/scripts/northrend/nexus/nexus/boss_anomalus.cpp => src/server/scripts/northrend/nexus/nexus/boss_anomalus.cpp
rename : src/scripts/northrend/nexus/nexus/boss_keristrasza.cpp => src/server/scripts/northrend/nexus/nexus/boss_keristrasza.cpp
rename : src/scripts/northrend/nexus/nexus/boss_magus_telestra.cpp => src/server/scripts/northrend/nexus/nexus/boss_magus_telestra.cpp
rename : src/scripts/northrend/nexus/nexus/boss_ormorok.cpp => src/server/scripts/northrend/nexus/nexus/boss_ormorok.cpp
rename : src/scripts/northrend/nexus/nexus/commander_kolurg.cpp => src/server/scripts/northrend/nexus/nexus/commander_kolurg.cpp
rename : src/scripts/northrend/nexus/nexus/commander_stoutbeard.cpp => src/server/scripts/northrend/nexus/nexus/commander_stoutbeard.cpp
rename : src/scripts/northrend/nexus/nexus/instance_nexus.cpp => src/server/scripts/northrend/nexus/nexus/instance_nexus.cpp
rename : src/scripts/northrend/nexus/nexus/nexus.h => src/server/scripts/northrend/nexus/nexus/nexus.h
rename : src/scripts/northrend/nexus/oculus/boss_drakos.cpp => src/server/scripts/northrend/nexus/oculus/boss_drakos.cpp
rename : src/scripts/northrend/nexus/oculus/boss_eregos.cpp => src/server/scripts/northrend/nexus/oculus/boss_eregos.cpp
rename : src/scripts/northrend/nexus/oculus/boss_urom.cpp => src/server/scripts/northrend/nexus/oculus/boss_urom.cpp
rename : src/scripts/northrend/nexus/oculus/boss_varos.cpp => src/server/scripts/northrend/nexus/oculus/boss_varos.cpp
rename : src/scripts/northrend/nexus/oculus/instance_oculus.cpp => src/server/scripts/northrend/nexus/oculus/instance_oculus.cpp
rename : src/scripts/northrend/nexus/oculus/oculus.cpp => src/server/scripts/northrend/nexus/oculus/oculus.cpp
rename : src/scripts/northrend/nexus/oculus/oculus.h => src/server/scripts/northrend/nexus/oculus/oculus.h
rename : src/scripts/northrend/obsidian_sanctum/boss_sartharion.cpp => src/server/scripts/northrend/obsidian_sanctum/boss_sartharion.cpp
rename : src/scripts/northrend/obsidian_sanctum/instance_obsidian_sanctum.cpp => src/server/scripts/northrend/obsidian_sanctum/instance_obsidian_sanctum.cpp
rename : src/scripts/northrend/obsidian_sanctum/obsidian_sanctum.h => src/server/scripts/northrend/obsidian_sanctum/obsidian_sanctum.h
rename : src/scripts/northrend/sholazar_basin.cpp => src/server/scripts/northrend/sholazar_basin.cpp
rename : src/scripts/northrend/storm_peaks.cpp => src/server/scripts/northrend/storm_peaks.cpp
rename : src/scripts/northrend/ulduar/halls_of_lightning/boss_bjarngrim.cpp => src/server/scripts/northrend/ulduar/halls_of_lightning/boss_bjarngrim.cpp
rename : src/scripts/northrend/ulduar/halls_of_lightning/boss_ionar.cpp => src/server/scripts/northrend/ulduar/halls_of_lightning/boss_ionar.cpp
rename : src/scripts/northrend/ulduar/halls_of_lightning/boss_loken.cpp => src/server/scripts/northrend/ulduar/halls_of_lightning/boss_loken.cpp
rename : src/scripts/northrend/ulduar/halls_of_lightning/boss_volkhan.cpp => src/server/scripts/northrend/ulduar/halls_of_lightning/boss_volkhan.cpp
rename : src/scripts/northrend/ulduar/halls_of_lightning/halls_of_lightning.h => src/server/scripts/northrend/ulduar/halls_of_lightning/halls_of_lightning.h
rename : src/scripts/northrend/ulduar/halls_of_lightning/instance_halls_of_lightning.cpp => src/server/scripts/northrend/ulduar/halls_of_lightning/instance_halls_of_lightning.cpp
rename : src/scripts/northrend/ulduar/halls_of_stone/boss_krystallus.cpp => src/server/scripts/northrend/ulduar/halls_of_stone/boss_krystallus.cpp
rename : src/scripts/northrend/ulduar/halls_of_stone/boss_maiden_of_grief.cpp => src/server/scripts/northrend/ulduar/halls_of_stone/boss_maiden_of_grief.cpp
rename : src/scripts/northrend/ulduar/halls_of_stone/boss_sjonnir.cpp => src/server/scripts/northrend/ulduar/halls_of_stone/boss_sjonnir.cpp
rename : src/scripts/northrend/ulduar/halls_of_stone/halls_of_stone.cpp => src/server/scripts/northrend/ulduar/halls_of_stone/halls_of_stone.cpp
rename : src/scripts/northrend/ulduar/halls_of_stone/halls_of_stone.h => src/server/scripts/northrend/ulduar/halls_of_stone/halls_of_stone.h
rename : src/scripts/northrend/ulduar/halls_of_stone/instance_halls_of_stone.cpp => src/server/scripts/northrend/ulduar/halls_of_stone/instance_halls_of_stone.cpp
rename : src/scripts/northrend/ulduar/ulduar/boss_algalon.cpp => src/server/scripts/northrend/ulduar/ulduar/boss_algalon.cpp
rename : src/scripts/northrend/ulduar/ulduar/boss_assembly_of_iron.cpp => src/server/scripts/northrend/ulduar/ulduar/boss_assembly_of_iron.cpp
rename : src/scripts/northrend/ulduar/ulduar/boss_auriaya.cpp => src/server/scripts/northrend/ulduar/ulduar/boss_auriaya.cpp
rename : src/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp => src/server/scripts/northrend/ulduar/ulduar/boss_flame_leviathan.cpp
rename : src/scripts/northrend/ulduar/ulduar/boss_freya.cpp => src/server/scripts/northrend/ulduar/ulduar/boss_freya.cpp
rename : src/scripts/northrend/ulduar/ulduar/boss_general_vezax.cpp => src/server/scripts/northrend/ulduar/ulduar/boss_general_vezax.cpp
rename : src/scripts/northrend/ulduar/ulduar/boss_hodir.cpp => src/server/scripts/northrend/ulduar/ulduar/boss_hodir.cpp
rename : src/scripts/northrend/ulduar/ulduar/boss_ignis.cpp => src/server/scripts/northrend/ulduar/ulduar/boss_ignis.cpp
rename : src/scripts/northrend/ulduar/ulduar/boss_kologarn.cpp => src/server/scripts/northrend/ulduar/ulduar/boss_kologarn.cpp
rename : src/scripts/northrend/ulduar/ulduar/boss_mimiron.cpp => src/server/scripts/northrend/ulduar/ulduar/boss_mimiron.cpp
rename : src/scripts/northrend/ulduar/ulduar/boss_razorscale.cpp => src/server/scripts/northrend/ulduar/ulduar/boss_razorscale.cpp
rename : src/scripts/northrend/ulduar/ulduar/boss_thorim.cpp => src/server/scripts/northrend/ulduar/ulduar/boss_thorim.cpp
rename : src/scripts/northrend/ulduar/ulduar/boss_xt002.cpp => src/server/scripts/northrend/ulduar/ulduar/boss_xt002.cpp
rename : src/scripts/northrend/ulduar/ulduar/boss_yoggsaron.cpp => src/server/scripts/northrend/ulduar/ulduar/boss_yoggsaron.cpp
rename : src/scripts/northrend/ulduar/ulduar/instance_ulduar.cpp => src/server/scripts/northrend/ulduar/ulduar/instance_ulduar.cpp
rename : src/scripts/northrend/ulduar/ulduar/ulduar.h => src/server/scripts/northrend/ulduar/ulduar/ulduar.h
rename : src/scripts/northrend/ulduar/ulduar/ulduar_teleporter.cpp => src/server/scripts/northrend/ulduar/ulduar/ulduar_teleporter.cpp
rename : src/scripts/northrend/utgarde_keep/utgarde_keep/boss_ingvar_the_plunderer.cpp => src/server/scripts/northrend/utgarde_keep/utgarde_keep/boss_ingvar_the_plunderer.cpp
rename : src/scripts/northrend/utgarde_keep/utgarde_keep/boss_keleseth.cpp => src/server/scripts/northrend/utgarde_keep/utgarde_keep/boss_keleseth.cpp
rename : src/scripts/northrend/utgarde_keep/utgarde_keep/boss_skarvald_dalronn.cpp => src/server/scripts/northrend/utgarde_keep/utgarde_keep/boss_skarvald_dalronn.cpp
rename : src/scripts/northrend/utgarde_keep/utgarde_keep/instance_utgarde_keep.cpp => src/server/scripts/northrend/utgarde_keep/utgarde_keep/instance_utgarde_keep.cpp
rename : src/scripts/northrend/utgarde_keep/utgarde_keep/utgarde_keep.cpp => src/server/scripts/northrend/utgarde_keep/utgarde_keep/utgarde_keep.cpp
rename : src/scripts/northrend/utgarde_keep/utgarde_keep/utgarde_keep.h => src/server/scripts/northrend/utgarde_keep/utgarde_keep/utgarde_keep.h
rename : src/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_palehoof.cpp => src/server/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_palehoof.cpp
rename : src/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_skadi.cpp => src/server/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_skadi.cpp
rename : src/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp => src/server/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp
rename : src/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_ymiron.cpp => src/server/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_ymiron.cpp
rename : src/scripts/northrend/utgarde_keep/utgarde_pinnacle/instance_pinnacle.cpp => src/server/scripts/northrend/utgarde_keep/utgarde_pinnacle/instance_pinnacle.cpp
rename : src/scripts/northrend/utgarde_keep/utgarde_pinnacle/utgarde_pinnacle.h => src/server/scripts/northrend/utgarde_keep/utgarde_pinnacle/utgarde_pinnacle.h
rename : src/scripts/northrend/vault_of_archavon/boss_archavon.cpp => src/server/scripts/northrend/vault_of_archavon/boss_archavon.cpp
rename : src/scripts/northrend/vault_of_archavon/boss_emalon.cpp => src/server/scripts/northrend/vault_of_archavon/boss_emalon.cpp
rename : src/scripts/northrend/vault_of_archavon/boss_koralon.cpp => src/server/scripts/northrend/vault_of_archavon/boss_koralon.cpp
rename : src/scripts/northrend/vault_of_archavon/boss_toravon.cpp => src/server/scripts/northrend/vault_of_archavon/boss_toravon.cpp
rename : src/scripts/northrend/vault_of_archavon/instance_vault_of_archavon.cpp => src/server/scripts/northrend/vault_of_archavon/instance_vault_of_archavon.cpp
rename : src/scripts/northrend/vault_of_archavon/vault_of_archavon.h => src/server/scripts/northrend/vault_of_archavon/vault_of_archavon.h
rename : src/scripts/northrend/violet_hold/boss_cyanigosa.cpp => src/server/scripts/northrend/violet_hold/boss_cyanigosa.cpp
rename : src/scripts/northrend/violet_hold/boss_erekem.cpp => src/server/scripts/northrend/violet_hold/boss_erekem.cpp
rename : src/scripts/northrend/violet_hold/boss_ichoron.cpp => src/server/scripts/northrend/violet_hold/boss_ichoron.cpp
rename : src/scripts/northrend/violet_hold/boss_lavanthor.cpp => src/server/scripts/northrend/violet_hold/boss_lavanthor.cpp
rename : src/scripts/northrend/violet_hold/boss_moragg.cpp => src/server/scripts/northrend/violet_hold/boss_moragg.cpp
rename : src/scripts/northrend/violet_hold/boss_xevozz.cpp => src/server/scripts/northrend/violet_hold/boss_xevozz.cpp
rename : src/scripts/northrend/violet_hold/boss_zuramat.cpp => src/server/scripts/northrend/violet_hold/boss_zuramat.cpp
rename : src/scripts/northrend/violet_hold/instance_violet_hold.cpp => src/server/scripts/northrend/violet_hold/instance_violet_hold.cpp
rename : src/scripts/northrend/violet_hold/violet_hold.cpp => src/server/scripts/northrend/violet_hold/violet_hold.cpp
rename : src/scripts/northrend/violet_hold/violet_hold.h => src/server/scripts/northrend/violet_hold/violet_hold.h
rename : src/scripts/northrend/zuldrak.cpp => src/server/scripts/northrend/zuldrak.cpp
rename : src/scripts/outland/auchindoun/auchenai_crypts/boss_exarch_maladaar.cpp => src/server/scripts/outland/auchindoun/auchenai_crypts/boss_exarch_maladaar.cpp
rename : src/scripts/outland/auchindoun/auchenai_crypts/boss_shirrak_the_dead_watcher.cpp => src/server/scripts/outland/auchindoun/auchenai_crypts/boss_shirrak_the_dead_watcher.cpp
rename : src/scripts/outland/auchindoun/mana_tombs/boss_nexusprince_shaffar.cpp => src/server/scripts/outland/auchindoun/mana_tombs/boss_nexusprince_shaffar.cpp
rename : src/scripts/outland/auchindoun/mana_tombs/boss_pandemonius.cpp => src/server/scripts/outland/auchindoun/mana_tombs/boss_pandemonius.cpp
rename : src/scripts/outland/auchindoun/sethekk_halls/boss_darkweaver_syth.cpp => src/server/scripts/outland/auchindoun/sethekk_halls/boss_darkweaver_syth.cpp
rename : src/scripts/outland/auchindoun/sethekk_halls/boss_tailonking_ikiss.cpp => src/server/scripts/outland/auchindoun/sethekk_halls/boss_tailonking_ikiss.cpp
rename : src/scripts/outland/auchindoun/sethekk_halls/instance_sethekk_halls.cpp => src/server/scripts/outland/auchindoun/sethekk_halls/instance_sethekk_halls.cpp
rename : src/scripts/outland/auchindoun/sethekk_halls/sethekk_halls.h => src/server/scripts/outland/auchindoun/sethekk_halls/sethekk_halls.h
rename : src/scripts/outland/auchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp => src/server/scripts/outland/auchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp
rename : src/scripts/outland/auchindoun/shadow_labyrinth/boss_blackheart_the_inciter.cpp => src/server/scripts/outland/auchindoun/shadow_labyrinth/boss_blackheart_the_inciter.cpp
rename : src/scripts/outland/auchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp => src/server/scripts/outland/auchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp
rename : src/scripts/outland/auchindoun/shadow_labyrinth/boss_murmur.cpp => src/server/scripts/outland/auchindoun/shadow_labyrinth/boss_murmur.cpp
rename : src/scripts/outland/auchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp => src/server/scripts/outland/auchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp
rename : src/scripts/outland/auchindoun/shadow_labyrinth/shadow_labyrinth.h => src/server/scripts/outland/auchindoun/shadow_labyrinth/shadow_labyrinth.h
rename : src/scripts/outland/black_temple/black_temple.cpp => src/server/scripts/outland/black_temple/black_temple.cpp
rename : src/scripts/outland/black_temple/black_temple.h => src/server/scripts/outland/black_temple/black_temple.h
rename : src/scripts/outland/black_temple/boss_bloodboil.cpp => src/server/scripts/outland/black_temple/boss_bloodboil.cpp
rename : src/scripts/outland/black_temple/boss_illidan.cpp => src/server/scripts/outland/black_temple/boss_illidan.cpp
rename : src/scripts/outland/black_temple/boss_mother_shahraz.cpp => src/server/scripts/outland/black_temple/boss_mother_shahraz.cpp
rename : src/scripts/outland/black_temple/boss_reliquary_of_souls.cpp => src/server/scripts/outland/black_temple/boss_reliquary_of_souls.cpp
rename : src/scripts/outland/black_temple/boss_shade_of_akama.cpp => src/server/scripts/outland/black_temple/boss_shade_of_akama.cpp
rename : src/scripts/outland/black_temple/boss_supremus.cpp => src/server/scripts/outland/black_temple/boss_supremus.cpp
rename : src/scripts/outland/black_temple/boss_teron_gorefiend.cpp => src/server/scripts/outland/black_temple/boss_teron_gorefiend.cpp
rename : src/scripts/outland/black_temple/boss_warlord_najentus.cpp => src/server/scripts/outland/black_temple/boss_warlord_najentus.cpp
rename : src/scripts/outland/black_temple/illidari_council.cpp => src/server/scripts/outland/black_temple/illidari_council.cpp
rename : src/scripts/outland/black_temple/instance_black_temple.cpp => src/server/scripts/outland/black_temple/instance_black_temple.cpp
rename : src/scripts/outland/blades_edge_mountains.cpp => src/server/scripts/outland/blades_edge_mountains.cpp
rename : src/scripts/outland/boss_doomlord_kazzak.cpp => src/server/scripts/outland/boss_doomlord_kazzak.cpp
rename : src/scripts/outland/boss_doomwalker.cpp => src/server/scripts/outland/boss_doomwalker.cpp
rename : src/scripts/outland/coilfang_resevoir/serpent_shrine/boss_fathomlord_karathress.cpp => src/server/scripts/outland/coilfang_resevoir/serpent_shrine/boss_fathomlord_karathress.cpp
rename : src/scripts/outland/coilfang_resevoir/serpent_shrine/boss_hydross_the_unstable.cpp => src/server/scripts/outland/coilfang_resevoir/serpent_shrine/boss_hydross_the_unstable.cpp
rename : src/scripts/outland/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp => src/server/scripts/outland/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp
rename : src/scripts/outland/coilfang_resevoir/serpent_shrine/boss_leotheras_the_blind.cpp => src/server/scripts/outland/coilfang_resevoir/serpent_shrine/boss_leotheras_the_blind.cpp
rename : src/scripts/outland/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp => src/server/scripts/outland/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp
rename : src/scripts/outland/coilfang_resevoir/serpent_shrine/boss_morogrim_tidewalker.cpp => src/server/scripts/outland/coilfang_resevoir/serpent_shrine/boss_morogrim_tidewalker.cpp
rename : src/scripts/outland/coilfang_resevoir/serpent_shrine/instance_serpent_shrine.cpp => src/server/scripts/outland/coilfang_resevoir/serpent_shrine/instance_serpent_shrine.cpp
rename : src/scripts/outland/coilfang_resevoir/serpent_shrine/serpent_shrine.h => src/server/scripts/outland/coilfang_resevoir/serpent_shrine/serpent_shrine.h
rename : src/scripts/outland/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp => src/server/scripts/outland/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp
rename : src/scripts/outland/coilfang_resevoir/steam_vault/boss_mekgineer_steamrigger.cpp => src/server/scripts/outland/coilfang_resevoir/steam_vault/boss_mekgineer_steamrigger.cpp
rename : src/scripts/outland/coilfang_resevoir/steam_vault/boss_warlord_kalithresh.cpp => src/server/scripts/outland/coilfang_resevoir/steam_vault/boss_warlord_kalithresh.cpp
rename : src/scripts/outland/coilfang_resevoir/steam_vault/instance_steam_vault.cpp => src/server/scripts/outland/coilfang_resevoir/steam_vault/instance_steam_vault.cpp
rename : src/scripts/outland/coilfang_resevoir/steam_vault/steam_vault.h => src/server/scripts/outland/coilfang_resevoir/steam_vault/steam_vault.h
rename : src/scripts/outland/coilfang_resevoir/underbog/boss_hungarfen.cpp => src/server/scripts/outland/coilfang_resevoir/underbog/boss_hungarfen.cpp
rename : src/scripts/outland/coilfang_resevoir/underbog/boss_the_black_stalker.cpp => src/server/scripts/outland/coilfang_resevoir/underbog/boss_the_black_stalker.cpp
rename : src/scripts/outland/gruuls_lair/boss_gruul.cpp => src/server/scripts/outland/gruuls_lair/boss_gruul.cpp
rename : src/scripts/outland/gruuls_lair/boss_high_king_maulgar.cpp => src/server/scripts/outland/gruuls_lair/boss_high_king_maulgar.cpp
rename : src/scripts/outland/gruuls_lair/gruuls_lair.h => src/server/scripts/outland/gruuls_lair/gruuls_lair.h
rename : src/scripts/outland/gruuls_lair/instance_gruuls_lair.cpp => src/server/scripts/outland/gruuls_lair/instance_gruuls_lair.cpp
rename : src/scripts/outland/hellfire_citadel/blood_furnace/blood_furnace.h => src/server/scripts/outland/hellfire_citadel/blood_furnace/blood_furnace.h
rename : src/scripts/outland/hellfire_citadel/blood_furnace/boss_broggok.cpp => src/server/scripts/outland/hellfire_citadel/blood_furnace/boss_broggok.cpp
rename : src/scripts/outland/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp => src/server/scripts/outland/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp
rename : src/scripts/outland/hellfire_citadel/blood_furnace/boss_the_maker.cpp => src/server/scripts/outland/hellfire_citadel/blood_furnace/boss_the_maker.cpp
rename : src/scripts/outland/hellfire_citadel/blood_furnace/instance_blood_furnace.cpp => src/server/scripts/outland/hellfire_citadel/blood_furnace/instance_blood_furnace.cpp
rename : src/scripts/outland/hellfire_citadel/hellfire_ramparts/boss_omor_the_unscarred.cpp => src/server/scripts/outland/hellfire_citadel/hellfire_ramparts/boss_omor_the_unscarred.cpp
rename : src/scripts/outland/hellfire_citadel/hellfire_ramparts/boss_vazruden_the_herald.cpp => src/server/scripts/outland/hellfire_citadel/hellfire_ramparts/boss_vazruden_the_herald.cpp
rename : src/scripts/outland/hellfire_citadel/hellfire_ramparts/boss_watchkeeper_gargolmar.cpp => src/server/scripts/outland/hellfire_citadel/hellfire_ramparts/boss_watchkeeper_gargolmar.cpp
rename : src/scripts/outland/hellfire_citadel/hellfire_ramparts/hellfire_ramparts.h => src/server/scripts/outland/hellfire_citadel/hellfire_ramparts/hellfire_ramparts.h
rename : src/scripts/outland/hellfire_citadel/hellfire_ramparts/instance_hellfire_ramparts.cpp => src/server/scripts/outland/hellfire_citadel/hellfire_ramparts/instance_hellfire_ramparts.cpp
rename : src/scripts/outland/hellfire_citadel/magtheridons_lair/boss_magtheridon.cpp => src/server/scripts/outland/hellfire_citadel/magtheridons_lair/boss_magtheridon.cpp
rename : src/scripts/outland/hellfire_citadel/magtheridons_lair/instance_magtheridons_lair.cpp => src/server/scripts/outland/hellfire_citadel/magtheridons_lair/instance_magtheridons_lair.cpp
rename : src/scripts/outland/hellfire_citadel/magtheridons_lair/magtheridons_lair.h => src/server/scripts/outland/hellfire_citadel/magtheridons_lair/magtheridons_lair.h
rename : src/scripts/outland/hellfire_citadel/shattered_halls/boss_nethekurse.cpp => src/server/scripts/outland/hellfire_citadel/shattered_halls/boss_nethekurse.cpp
rename : src/scripts/outland/hellfire_citadel/shattered_halls/boss_warbringer_omrogg.cpp => src/server/scripts/outland/hellfire_citadel/shattered_halls/boss_warbringer_omrogg.cpp
rename : src/scripts/outland/hellfire_citadel/shattered_halls/boss_warchief_kargath_bladefist.cpp => src/server/scripts/outland/hellfire_citadel/shattered_halls/boss_warchief_kargath_bladefist.cpp
rename : src/scripts/outland/hellfire_citadel/shattered_halls/instance_shattered_halls.cpp => src/server/scripts/outland/hellfire_citadel/shattered_halls/instance_shattered_halls.cpp
rename : src/scripts/outland/hellfire_citadel/shattered_halls/shattered_halls.h => src/server/scripts/outland/hellfire_citadel/shattered_halls/shattered_halls.h
rename : src/scripts/outland/hellfire_peninsula.cpp => src/server/scripts/outland/hellfire_peninsula.cpp
rename : src/scripts/outland/nagrand.cpp => src/server/scripts/outland/nagrand.cpp
rename : src/scripts/outland/netherstorm.cpp => src/server/scripts/outland/netherstorm.cpp
rename : src/scripts/outland/shadowmoon_valley.cpp => src/server/scripts/outland/shadowmoon_valley.cpp
rename : src/scripts/outland/shattrath_city.cpp => src/server/scripts/outland/shattrath_city.cpp
rename : src/scripts/outland/tempest_keep/arcatraz/arcatraz.cpp => src/server/scripts/outland/tempest_keep/arcatraz/arcatraz.cpp
rename : src/scripts/outland/tempest_keep/arcatraz/arcatraz.h => src/server/scripts/outland/tempest_keep/arcatraz/arcatraz.h
rename : src/scripts/outland/tempest_keep/arcatraz/boss_harbinger_skyriss.cpp => src/server/scripts/outland/tempest_keep/arcatraz/boss_harbinger_skyriss.cpp
rename : src/scripts/outland/tempest_keep/arcatraz/instance_arcatraz.cpp => src/server/scripts/outland/tempest_keep/arcatraz/instance_arcatraz.cpp
rename : src/scripts/outland/tempest_keep/botanica/boss_high_botanist_freywinn.cpp => src/server/scripts/outland/tempest_keep/botanica/boss_high_botanist_freywinn.cpp
rename : src/scripts/outland/tempest_keep/botanica/boss_laj.cpp => src/server/scripts/outland/tempest_keep/botanica/boss_laj.cpp
rename : src/scripts/outland/tempest_keep/botanica/boss_warp_splinter.cpp => src/server/scripts/outland/tempest_keep/botanica/boss_warp_splinter.cpp
rename : src/scripts/outland/tempest_keep/the_eye/boss_alar.cpp => src/server/scripts/outland/tempest_keep/the_eye/boss_alar.cpp
rename : src/scripts/outland/tempest_keep/the_eye/boss_astromancer.cpp => src/server/scripts/outland/tempest_keep/the_eye/boss_astromancer.cpp
rename : src/scripts/outland/tempest_keep/the_eye/boss_kaelthas.cpp => src/server/scripts/outland/tempest_keep/the_eye/boss_kaelthas.cpp
rename : src/scripts/outland/tempest_keep/the_eye/boss_void_reaver.cpp => src/server/scripts/outland/tempest_keep/the_eye/boss_void_reaver.cpp
rename : src/scripts/outland/tempest_keep/the_eye/instance_the_eye.cpp => src/server/scripts/outland/tempest_keep/the_eye/instance_the_eye.cpp
rename : src/scripts/outland/tempest_keep/the_eye/the_eye.cpp => src/server/scripts/outland/tempest_keep/the_eye/the_eye.cpp
rename : src/scripts/outland/tempest_keep/the_eye/the_eye.h => src/server/scripts/outland/tempest_keep/the_eye/the_eye.h
rename : src/scripts/outland/tempest_keep/the_mechanar/boss_gatewatcher_gyrokill.cpp => src/server/scripts/outland/tempest_keep/the_mechanar/boss_gatewatcher_gyrokill.cpp
rename : src/scripts/outland/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp => src/server/scripts/outland/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp
rename : src/scripts/outland/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp => src/server/scripts/outland/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp
rename : src/scripts/outland/tempest_keep/the_mechanar/boss_pathaleon_the_calculator.cpp => src/server/scripts/outland/tempest_keep/the_mechanar/boss_pathaleon_the_calculator.cpp
rename : src/scripts/outland/tempest_keep/the_mechanar/instance_mechanar.cpp => src/server/scripts/outland/tempest_keep/the_mechanar/instance_mechanar.cpp
rename : src/scripts/outland/tempest_keep/the_mechanar/mechanar.h => src/server/scripts/outland/tempest_keep/the_mechanar/mechanar.h
rename : src/scripts/outland/terokkar_forest.cpp => src/server/scripts/outland/terokkar_forest.cpp
rename : src/scripts/outland/zangarmarsh.cpp => src/server/scripts/outland/zangarmarsh.cpp
rename : src/scripts/world/areatrigger_scripts.cpp => src/server/scripts/world/areatrigger_scripts.cpp
rename : src/scripts/world/boss_emeriss.cpp => src/server/scripts/world/boss_emeriss.cpp
rename : src/scripts/world/boss_lethon.cpp => src/server/scripts/world/boss_lethon.cpp
rename : src/scripts/world/boss_taerar.cpp => src/server/scripts/world/boss_taerar.cpp
rename : src/scripts/world/boss_ysondre.cpp => src/server/scripts/world/boss_ysondre.cpp
rename : src/scripts/world/go_scripts.cpp => src/server/scripts/world/go_scripts.cpp
rename : src/scripts/world/guards.cpp => src/server/scripts/world/guards.cpp
rename : src/scripts/world/item_scripts.cpp => src/server/scripts/world/item_scripts.cpp
rename : src/scripts/world/mob_generic_creature.cpp => src/server/scripts/world/mob_generic_creature.cpp
rename : src/scripts/world/npc_innkeeper.cpp => src/server/scripts/world/npc_innkeeper.cpp
rename : src/scripts/world/npc_professions.cpp => src/server/scripts/world/npc_professions.cpp
rename : src/scripts/world/npc_taxi.cpp => src/server/scripts/world/npc_taxi.cpp
rename : src/scripts/world/npcs_special.cpp => src/server/scripts/world/npcs_special.cpp
rename : src/shared/Auth/AuthCrypt.cpp => src/server/shared/Auth/AuthCrypt.cpp
rename : src/shared/Auth/AuthCrypt.h => src/server/shared/Auth/AuthCrypt.h
rename : src/shared/Auth/BigNumber.cpp => src/server/shared/Auth/BigNumber.cpp
rename : src/shared/Auth/BigNumber.h => src/server/shared/Auth/BigNumber.h
rename : src/shared/Auth/CMakeLists.txt => src/server/shared/Auth/CMakeLists.txt
rename : src/shared/Auth/Hmac.cpp => src/server/shared/Auth/Hmac.cpp
rename : src/shared/Auth/Hmac.h => src/server/shared/Auth/Hmac.h
rename : src/shared/Auth/SARC4.cpp => src/server/shared/Auth/SARC4.cpp
rename : src/shared/Auth/SARC4.h => src/server/shared/Auth/SARC4.h
rename : src/shared/Auth/Sha1.cpp => src/server/shared/Auth/Sha1.cpp
rename : src/shared/Auth/Sha1.h => src/server/shared/Auth/Sha1.h
rename : src/shared/Auth/md5.c => src/server/shared/Auth/md5.c
rename : src/shared/Auth/md5.h => src/server/shared/Auth/md5.h
rename : src/shared/ByteBuffer.h => src/server/shared/ByteBuffer.h
rename : src/shared/CMakeLists.txt => src/server/shared/CMakeLists.txt
rename : src/shared/Common.cpp => src/server/shared/Common.cpp
rename : src/shared/Common.h => src/server/shared/Common.h
rename : src/shared/Config/CMakeLists.txt => src/server/shared/Config/CMakeLists.txt
rename : src/shared/Config/Config.cpp => src/server/shared/Config/Config.cpp
rename : src/shared/Config/Config.h => src/server/shared/Config/Config.h
rename : src/shared/Config/ConfigEnv.h => src/server/shared/Config/ConfigEnv.h
rename : src/shared/Config/ConfigLibrary.vcproj => src/server/shared/Config/ConfigLibrary.vcproj
rename : src/shared/Config/dotconfpp/dotconfpp.cpp => src/server/shared/Config/dotconfpp/dotconfpp.cpp
rename : src/shared/Config/dotconfpp/dotconfpp.h => src/server/shared/Config/dotconfpp/dotconfpp.h
rename : src/shared/Config/dotconfpp/mempool.cpp => src/server/shared/Config/dotconfpp/mempool.cpp
rename : src/shared/Config/dotconfpp/mempool.h => src/server/shared/Config/dotconfpp/mempool.h
rename : src/shared/Database/CMakeLists.txt => src/server/shared/Database/CMakeLists.txt
rename : src/shared/Database/DBCFileLoader.cpp => src/server/shared/Database/DBCFileLoader.cpp
rename : src/shared/Database/DBCFileLoader.h => src/server/shared/Database/DBCFileLoader.h
rename : src/shared/Database/DBCStore.h => src/server/shared/Database/DBCStore.h
rename : src/shared/Database/Database.cpp => src/server/shared/Database/Database.cpp
rename : src/shared/Database/Database.h => src/server/shared/Database/Database.h
rename : src/shared/Database/DatabaseEnv.h => src/server/shared/Database/DatabaseEnv.h
rename : src/shared/Database/DatabaseImpl.h => src/server/shared/Database/DatabaseImpl.h
rename : src/shared/Database/Field.cpp => src/server/shared/Database/Field.cpp
rename : src/shared/Database/Field.h => src/server/shared/Database/Field.h
rename : src/shared/Database/QueryResult.cpp => src/server/shared/Database/QueryResult.cpp
rename : src/shared/Database/QueryResult.h => src/server/shared/Database/QueryResult.h
rename : src/shared/Database/SQLStorage.cpp => src/server/shared/Database/SQLStorage.cpp
rename : src/shared/Database/SQLStorage.h => src/server/shared/Database/SQLStorage.h
rename : src/shared/Database/SQLStorageImpl.h => src/server/shared/Database/SQLStorageImpl.h
rename : src/shared/Database/SqlDelayThread.cpp => src/server/shared/Database/SqlDelayThread.cpp
rename : src/shared/Database/SqlDelayThread.h => src/server/shared/Database/SqlDelayThread.h
rename : src/shared/Database/SqlOperations.cpp => src/server/shared/Database/SqlOperations.cpp
rename : src/shared/Database/SqlOperations.h => src/server/shared/Database/SqlOperations.h
rename : src/shared/DelayExecutor.cpp => src/server/shared/DelayExecutor.cpp
rename : src/shared/DelayExecutor.h => src/server/shared/DelayExecutor.h
rename : src/shared/Errors.h => src/server/shared/Errors.h
rename : src/shared/LockedQueue.h => src/server/shared/LockedQueue.h
rename : src/shared/Log.cpp => src/server/shared/Log.cpp
rename : src/shared/Log.h => src/server/shared/Log.h
rename : src/shared/MemoryLeaks.cpp => src/server/shared/MemoryLeaks.cpp
rename : src/shared/MemoryLeaks.h => src/server/shared/MemoryLeaks.h
rename : src/shared/PacketLog.cpp => src/server/shared/PacketLog.cpp
rename : src/shared/PacketLog.h => src/server/shared/PacketLog.h
rename : src/shared/ProgressBar.cpp => src/server/shared/ProgressBar.cpp
rename : src/shared/ProgressBar.h => src/server/shared/ProgressBar.h
rename : src/shared/ServiceWin32.cpp => src/server/shared/ServiceWin32.cpp
rename : src/shared/ServiceWin32.h => src/server/shared/ServiceWin32.h
rename : src/shared/SignalHandler.h => src/server/shared/SignalHandler.h
rename : src/shared/SystemConfig.h => src/server/shared/SystemConfig.h
rename : src/shared/Threading.cpp => src/server/shared/Threading.cpp
rename : src/shared/Threading.h => src/server/shared/Threading.h
rename : src/shared/Timer.h => src/server/shared/Timer.h
rename : src/shared/Util.cpp => src/server/shared/Util.cpp
rename : src/shared/Util.h => src/server/shared/Util.h
rename : src/shared/WheatyExceptionReport.cpp => src/server/shared/WheatyExceptionReport.cpp
rename : src/shared/WheatyExceptionReport.h => src/server/shared/WheatyExceptionReport.h
rename : src/shared/WorldPacket.h => src/server/shared/WorldPacket.h
rename : src/shared/vmap/BIH.cpp => src/server/shared/vmap/BIH.cpp
rename : src/shared/vmap/BIH.h => src/server/shared/vmap/BIH.h
rename : src/shared/vmap/CMakeLists.txt => src/server/shared/vmap/CMakeLists.txt
rename : src/shared/vmap/IVMapManager.h => src/server/shared/vmap/IVMapManager.h
rename : src/shared/vmap/MapTree.cpp => src/server/shared/vmap/MapTree.cpp
rename : src/shared/vmap/MapTree.h => src/server/shared/vmap/MapTree.h
rename : src/shared/vmap/ModelInstance.cpp => src/server/shared/vmap/ModelInstance.cpp
rename : src/shared/vmap/ModelInstance.h => src/server/shared/vmap/ModelInstance.h
rename : src/shared/vmap/TileAssembler.cpp => src/server/shared/vmap/TileAssembler.cpp
rename : src/shared/vmap/TileAssembler.h => src/server/shared/vmap/TileAssembler.h
rename : src/shared/vmap/VMapDefinitions.h => src/server/shared/vmap/VMapDefinitions.h
rename : src/shared/vmap/VMapFactory.cpp => src/server/shared/vmap/VMapFactory.cpp
rename : src/shared/vmap/VMapFactory.h => src/server/shared/vmap/VMapFactory.h
rename : src/shared/vmap/VMapManager2.cpp => src/server/shared/vmap/VMapManager2.cpp
rename : src/shared/vmap/VMapManager2.h => src/server/shared/vmap/VMapManager2.h
rename : src/shared/vmap/VMapTools.h => src/server/shared/vmap/VMapTools.h
rename : src/shared/vmap/WorldModel.cpp => src/server/shared/vmap/WorldModel.cpp
rename : src/shared/vmap/WorldModel.h => src/server/shared/vmap/WorldModel.h
rename : src/trinitycore/CMakeLists.txt => src/server/trinitycore/CMakeLists.txt
rename : src/trinitycore/CliRunnable.cpp => src/server/trinitycore/CliRunnable.cpp
rename : src/trinitycore/CliRunnable.h => src/server/trinitycore/CliRunnable.h
rename : src/trinitycore/Main.cpp => src/server/trinitycore/Main.cpp
rename : src/trinitycore/Master.cpp => src/server/trinitycore/Master.cpp
rename : src/trinitycore/Master.h => src/server/trinitycore/Master.h
rename : src/trinitycore/RASocket.cpp => src/server/trinitycore/RASocket.cpp
rename : src/trinitycore/RASocket.h => src/server/trinitycore/RASocket.h
rename : src/trinitycore/TrinityCore.ico => src/server/trinitycore/TrinityCore.ico
rename : src/trinitycore/TrinityCore.rc => src/server/trinitycore/TrinityCore.rc
rename : src/trinitycore/WorldRunnable.cpp => src/server/trinitycore/WorldRunnable.cpp
rename : src/trinitycore/WorldRunnable.h => src/server/trinitycore/WorldRunnable.h
rename : src/trinitycore/resource.h => src/server/trinitycore/resource.h
rename : src/trinitycore/trinitycore.conf.dist => src/server/trinitycore/trinitycore.conf.dist
rename : src/trinityrealm/AuthCodes.cpp => src/server/trinityrealm/AuthCodes.cpp
rename : src/trinityrealm/AuthCodes.h => src/server/trinityrealm/AuthCodes.h
rename : src/trinityrealm/AuthSocket.cpp => src/server/trinityrealm/AuthSocket.cpp
rename : src/trinityrealm/AuthSocket.h => src/server/trinityrealm/AuthSocket.h
rename : src/trinityrealm/CMakeLists.txt => src/server/trinityrealm/CMakeLists.txt
rename : src/trinityrealm/Main.cpp => src/server/trinityrealm/Main.cpp
rename : src/trinityrealm/RealmAcceptor.h => src/server/trinityrealm/RealmAcceptor.h
rename : src/trinityrealm/RealmList.cpp => src/server/trinityrealm/RealmList.cpp
rename : src/trinityrealm/RealmList.h => src/server/trinityrealm/RealmList.h
rename : src/trinityrealm/RealmSocket.cpp => src/server/trinityrealm/RealmSocket.cpp
rename : src/trinityrealm/RealmSocket.h => src/server/trinityrealm/RealmSocket.h
rename : src/trinityrealm/TrinityRealm.ico => src/server/trinityrealm/TrinityRealm.ico
rename : src/trinityrealm/TrinityRealm.rc => src/server/trinityrealm/TrinityRealm.rc
rename : src/trinityrealm/resource.h => src/server/trinityrealm/resource.h
rename : src/trinityrealm/trinityrealm.conf.dist => src/server/trinityrealm/trinityrealm.conf.dist
Diffstat (limited to 'src/game/SpellMgr.cpp')
-rw-r--r-- | src/game/SpellMgr.cpp | 3888 |
1 files changed, 0 insertions, 3888 deletions
diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp deleted file mode 100644 index 510fdccb98a..00000000000 --- a/src/game/SpellMgr.cpp +++ /dev/null @@ -1,3888 +0,0 @@ -/* - * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> - * - * Copyright (C) 2008-2010 Trinity <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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "SpellMgr.h" -#include "ObjectMgr.h" -#include "SpellAuraDefines.h" -#include "ProgressBar.h" -#include "DBCStores.h" -#include "World.h" -#include "Chat.h" -#include "Spell.h" -#include "BattleGroundMgr.h" -#include "CreatureAI.h" -#include "MapManager.h" - -bool IsAreaEffectTarget[TOTAL_SPELL_TARGETS]; -SpellEffectTargetTypes EffectTargetType[TOTAL_SPELL_EFFECTS]; -SpellSelectTargetTypes SpellTargetType[TOTAL_SPELL_TARGETS]; - -SpellMgr::SpellMgr() -{ - for (int i = 0; i < TOTAL_SPELL_EFFECTS; ++i) - { - switch(i) - { - case SPELL_EFFECT_PERSISTENT_AREA_AURA: //27 - case SPELL_EFFECT_SUMMON: //28 - case SPELL_EFFECT_TRIGGER_MISSILE: //32 - case SPELL_EFFECT_TRANS_DOOR: //50 summon object - case SPELL_EFFECT_SUMMON_PET: //56 - case SPELL_EFFECT_ADD_FARSIGHT: //72 - case SPELL_EFFECT_SUMMON_OBJECT_WILD: //76 - //case SPELL_EFFECT_SUMMON_CRITTER: //97 not 303 - case SPELL_EFFECT_SUMMON_OBJECT_SLOT1: //104 - case SPELL_EFFECT_SUMMON_OBJECT_SLOT2: //105 - case SPELL_EFFECT_SUMMON_OBJECT_SLOT3: //106 - case SPELL_EFFECT_SUMMON_OBJECT_SLOT4: //107 - case SPELL_EFFECT_SUMMON_DEAD_PET: //109 - case SPELL_EFFECT_TRIGGER_SPELL_2: //151 ritual of summon - EffectTargetType[i] = SPELL_REQUIRE_DEST; - break; - case SPELL_EFFECT_PARRY: // 0 - case SPELL_EFFECT_BLOCK: // 0 - case SPELL_EFFECT_SKILL: // always with dummy 3 as A - //case SPELL_EFFECT_LEARN_SPELL: // 0 may be 5 pet - case SPELL_EFFECT_TRADE_SKILL: // 0 or 1 - case SPELL_EFFECT_PROFICIENCY: // 0 - EffectTargetType[i] = SPELL_REQUIRE_NONE; - break; - case SPELL_EFFECT_ENCHANT_ITEM: - case SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY: - case SPELL_EFFECT_DISENCHANT: - //in 243 this is 0, in 309 it is 1 - //so both item target and unit target is pushed, and cause crash - //case SPELL_EFFECT_FEED_PET: - case SPELL_EFFECT_PROSPECTING: - case SPELL_EFFECT_MILLING: - case SPELL_EFFECT_ENCHANT_ITEM_PRISMATIC: - EffectTargetType[i] = SPELL_REQUIRE_ITEM; - break; - //caster must be pushed otherwise no sound - case SPELL_EFFECT_APPLY_AREA_AURA_PARTY: - case SPELL_EFFECT_APPLY_AREA_AURA_FRIEND: - case SPELL_EFFECT_APPLY_AREA_AURA_ENEMY: - case SPELL_EFFECT_APPLY_AREA_AURA_PET: - case SPELL_EFFECT_APPLY_AREA_AURA_OWNER: - case SPELL_EFFECT_APPLY_AREA_AURA_RAID: - case SPELL_EFFECT_CHARGE: - case SPELL_EFFECT_JUMP: - case SPELL_EFFECT_JUMP2: - case SPELL_EFFECT_LEAP_BACK: - EffectTargetType[i] = SPELL_REQUIRE_CASTER; - break; - //case SPELL_EFFECT_WMO_DAMAGE: - //case SPELL_EFFECT_WMO_REPAIR: - //case SPELL_EFFECT_WMO_CHANGE: - // EffectTargetType[i] = SPELL_REQUIRE_GOBJECT; - // break; - default: - EffectTargetType[i] = SPELL_REQUIRE_UNIT; - break; - } - } - - for (int i = 0; i < TOTAL_SPELL_TARGETS; ++i) - { - switch(i) - { - case TARGET_UNIT_CASTER: - case TARGET_UNIT_CASTER_FISHING: - case TARGET_UNIT_MASTER: - case TARGET_UNIT_PET: - case TARGET_UNIT_PARTY_CASTER: - case TARGET_UNIT_RAID_CASTER: - case TARGET_UNIT_VEHICLE: - case TARGET_UNIT_PASSENGER_0: - case TARGET_UNIT_PASSENGER_1: - case TARGET_UNIT_PASSENGER_2: - case TARGET_UNIT_PASSENGER_3: - case TARGET_UNIT_PASSENGER_4: - case TARGET_UNIT_PASSENGER_5: - case TARGET_UNIT_PASSENGER_6: - case TARGET_UNIT_PASSENGER_7: - SpellTargetType[i] = TARGET_TYPE_UNIT_CASTER; - break; - case TARGET_UNIT_MINIPET: - case TARGET_UNIT_TARGET_ALLY: - case TARGET_UNIT_TARGET_RAID: - case TARGET_UNIT_TARGET_ANY: - case TARGET_UNIT_TARGET_ENEMY: - case TARGET_UNIT_TARGET_PARTY: - case TARGET_UNIT_PARTY_TARGET: - case TARGET_UNIT_CLASS_TARGET: - case TARGET_UNIT_CHAINHEAL: - case TARGET_UNIT_UNK_92: - SpellTargetType[i] = TARGET_TYPE_UNIT_TARGET; - break; - case TARGET_UNIT_NEARBY_ENEMY: - case TARGET_UNIT_NEARBY_ALLY: - case TARGET_UNIT_NEARBY_ALLY_UNK: - case TARGET_UNIT_NEARBY_ENTRY: - case TARGET_UNIT_NEARBY_RAID: - case TARGET_GAMEOBJECT_NEARBY_ENTRY: - SpellTargetType[i] = TARGET_TYPE_UNIT_NEARBY; - break; - case TARGET_UNIT_AREA_ENEMY_SRC: - case TARGET_UNIT_AREA_ALLY_SRC: - case TARGET_UNIT_AREA_ENTRY_SRC: - case TARGET_UNIT_AREA_PARTY_SRC: - case TARGET_OBJECT_AREA_SRC: - SpellTargetType[i] = TARGET_TYPE_AREA_SRC; - break; - case TARGET_UNIT_AREA_ENEMY_DST: - case TARGET_UNIT_AREA_ALLY_DST: - case TARGET_UNIT_AREA_ENTRY_DST: - case TARGET_UNIT_AREA_PARTY_DST: - case TARGET_OBJECT_AREA_DST: - SpellTargetType[i] = TARGET_TYPE_AREA_DST; - break; - case TARGET_UNIT_CONE_ENEMY: - case TARGET_UNIT_CONE_ALLY: - case TARGET_UNIT_CONE_ENTRY: - case TARGET_UNIT_CONE_ENEMY_UNKNOWN: - case TARGET_UNIT_AREA_PATH: - SpellTargetType[i] = TARGET_TYPE_AREA_CONE; - break; - case TARGET_DST_CASTER: - case TARGET_SRC_CASTER: - case TARGET_MINION: - case TARGET_DEST_CASTER_FRONT_LEAP: - case TARGET_DEST_CASTER_FRONT: - case TARGET_DEST_CASTER_BACK: - case TARGET_DEST_CASTER_RIGHT: - case TARGET_DEST_CASTER_LEFT: - case TARGET_DEST_CASTER_FRONT_LEFT: - case TARGET_DEST_CASTER_BACK_LEFT: - case TARGET_DEST_CASTER_BACK_RIGHT: - case TARGET_DEST_CASTER_FRONT_RIGHT: - case TARGET_DEST_CASTER_RANDOM: - case TARGET_DEST_CASTER_RADIUS: - SpellTargetType[i] = TARGET_TYPE_DEST_CASTER; - break; - case TARGET_DST_TARGET_ENEMY: - case TARGET_DEST_TARGET_ANY: - case TARGET_DEST_TARGET_FRONT: - case TARGET_DEST_TARGET_BACK: - case TARGET_DEST_TARGET_RIGHT: - case TARGET_DEST_TARGET_LEFT: - case TARGET_DEST_TARGET_FRONT_LEFT: - case TARGET_DEST_TARGET_BACK_LEFT: - case TARGET_DEST_TARGET_BACK_RIGHT: - case TARGET_DEST_TARGET_FRONT_RIGHT: - case TARGET_DEST_TARGET_RANDOM: - case TARGET_DEST_TARGET_RADIUS: - SpellTargetType[i] = TARGET_TYPE_DEST_TARGET; - break; - case TARGET_DEST_DYNOBJ_ENEMY: - case TARGET_DEST_DYNOBJ_ALLY: - case TARGET_DEST_DYNOBJ_NONE: - case TARGET_DEST_DEST: - case TARGET_DEST_TRAJ: - case TARGET_DEST_DEST_FRONT_LEFT: - case TARGET_DEST_DEST_BACK_LEFT: - case TARGET_DEST_DEST_BACK_RIGHT: - case TARGET_DEST_DEST_FRONT_RIGHT: - case TARGET_DEST_DEST_FRONT: - case TARGET_DEST_DEST_BACK: - case TARGET_DEST_DEST_RIGHT: - case TARGET_DEST_DEST_LEFT: - case TARGET_DEST_DEST_RANDOM: - case TARGET_DEST_DEST_RANDOM_DIR_DIST: - SpellTargetType[i] = TARGET_TYPE_DEST_DEST; - break; - case TARGET_DST_DB: - case TARGET_DST_HOME: - case TARGET_DST_NEARBY_ENTRY: - SpellTargetType[i] = TARGET_TYPE_DEST_SPECIAL; - break; - case TARGET_UNIT_CHANNEL: - case TARGET_DEST_CHANNEL: - SpellTargetType[i] = TARGET_TYPE_CHANNEL; - break; - default: - SpellTargetType[i] = TARGET_TYPE_DEFAULT; - } - } - - for (int i = 0; i < TOTAL_SPELL_TARGETS; ++i) - { - switch(i) - { - case TARGET_UNIT_AREA_ENEMY_DST: - case TARGET_UNIT_AREA_ENEMY_SRC: - case TARGET_UNIT_AREA_ALLY_DST: - case TARGET_UNIT_AREA_ALLY_SRC: - case TARGET_UNIT_AREA_ENTRY_DST: - case TARGET_UNIT_AREA_ENTRY_SRC: - case TARGET_UNIT_AREA_PARTY_DST: - case TARGET_UNIT_AREA_PARTY_SRC: - case TARGET_UNIT_PARTY_TARGET: - case TARGET_UNIT_PARTY_CASTER: - case TARGET_UNIT_CONE_ENEMY: - case TARGET_UNIT_CONE_ALLY: - case TARGET_UNIT_CONE_ENEMY_UNKNOWN: - case TARGET_UNIT_AREA_PATH: - case TARGET_UNIT_RAID_CASTER: - IsAreaEffectTarget[i] = true; - break; - default: - IsAreaEffectTarget[i] = false; - break; - } - } -} - -SpellMgr::~SpellMgr() -{ -} - -SpellMgr& SpellMgr::Instance() -{ - static SpellMgr spellMgr; - return spellMgr; -} - -bool SpellMgr::IsSrcTargetSpell(SpellEntry const *spellInfo) const -{ - for (uint8 i = 0; i< MAX_SPELL_EFFECTS; ++i) - { - if (SpellTargetType[spellInfo->EffectImplicitTargetA[i]] == TARGET_TYPE_AREA_SRC || SpellTargetType[spellInfo->EffectImplicitTargetB[i]] == TARGET_TYPE_AREA_SRC) - return true; - } - return false; -} - -int32 GetSpellDuration(SpellEntry const *spellInfo) -{ - if (!spellInfo) - return 0; - SpellDurationEntry const *du = sSpellDurationStore.LookupEntry(spellInfo->DurationIndex); - if (!du) - return 0; - return (du->Duration[0] == -1) ? -1 : abs(du->Duration[0]); -} - -int32 GetSpellMaxDuration(SpellEntry const *spellInfo) -{ - if (!spellInfo) - return 0; - SpellDurationEntry const *du = sSpellDurationStore.LookupEntry(spellInfo->DurationIndex); - if (!du) - return 0; - return (du->Duration[2] == -1) ? -1 : abs(du->Duration[2]); -} - -int32 GetDispelChance(Unit* auraCaster, Unit* target, uint32 spellId, bool offensive, bool *result) -{ - // we assume that aura dispel chance is 100% on start - // need formula for level difference based chance - int32 resist_chance = 0; - - // Apply dispel mod from aura caster - if (auraCaster) - if (Player* modOwner = auraCaster->GetSpellModOwner()) - modOwner->ApplySpellMod(spellId, SPELLMOD_RESIST_DISPEL_CHANCE, resist_chance); - - // Dispel resistance from target SPELL_AURA_MOD_DISPEL_RESIST - // Only affects offensive dispels - if (offensive && target) - resist_chance += target->GetTotalAuraModifier(SPELL_AURA_MOD_DISPEL_RESIST); - - // Try dispel - if (result) - *result = !roll_chance_i(resist_chance); - - return resist_chance; -} - -uint32 GetSpellCastTime(SpellEntry const* spellInfo, Spell * spell) -{ - SpellCastTimesEntry const *spellCastTimeEntry = sSpellCastTimesStore.LookupEntry(spellInfo->CastingTimeIndex); - - // not all spells have cast time index and this is all is pasiive abilities - if (!spellCastTimeEntry) - return 0; - - int32 castTime = spellCastTimeEntry->CastTime; - - if (spell && spell->GetCaster()) - spell->GetCaster()->ModSpellCastTime(spellInfo, castTime, spell); - - if (spellInfo->Attributes & SPELL_ATTR_REQ_AMMO && (!spell || !(spell->IsAutoRepeat()))) - castTime += 500; - - return (castTime > 0) ? uint32(castTime) : 0; -} - -bool IsPassiveSpell(uint32 spellId) -{ - SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellId); - if (!spellInfo) - return false; - return IsPassiveSpell(spellInfo); -} - -bool IsPassiveSpell(SpellEntry const * spellInfo) -{ - if (spellInfo->Attributes & SPELL_ATTR_PASSIVE) - return true; - return false; -} - -bool IsAutocastableSpell(uint32 spellId) -{ - SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellId); - if (!spellInfo) - return false; - if (spellInfo->Attributes & SPELL_ATTR_PASSIVE) - return false; - if (spellInfo->AttributesEx & SPELL_ATTR_EX_UNAUTOCASTABLE_BY_PET) - return false; - return true; -} - -bool IsHigherHankOfSpell(uint32 spellId_1, uint32 spellId_2) -{ - return spellmgr.GetSpellRank(spellId_1)<spellmgr.GetSpellRank(spellId_2); -} - -uint32 CalculatePowerCost(SpellEntry const * spellInfo, Unit const * caster, SpellSchoolMask schoolMask) -{ - // Spell drain all exist power on cast (Only paladin lay of Hands) - if (spellInfo->AttributesEx & SPELL_ATTR_EX_DRAIN_ALL_POWER) - { - // If power type - health drain all - if (spellInfo->powerType == POWER_HEALTH) - return caster->GetHealth(); - // Else drain all power - if (spellInfo->powerType < MAX_POWERS) - return caster->GetPower(Powers(spellInfo->powerType)); - sLog.outError("CalculateManaCost: Unknown power type '%d' in spell %d", spellInfo->powerType, spellInfo->Id); - return 0; - } - - // Base powerCost - int32 powerCost = spellInfo->manaCost; - // PCT cost from total amount - if (spellInfo->ManaCostPercentage) - { - switch (spellInfo->powerType) - { - // health as power used - case POWER_HEALTH: - powerCost += spellInfo->ManaCostPercentage * caster->GetCreateHealth() / 100; - break; - case POWER_MANA: - powerCost += spellInfo->ManaCostPercentage * caster->GetCreateMana() / 100; - break; - case POWER_RAGE: - case POWER_FOCUS: - case POWER_ENERGY: - case POWER_HAPPINESS: - powerCost += spellInfo->ManaCostPercentage * caster->GetMaxPower(Powers(spellInfo->powerType)) / 100; - break; - case POWER_RUNE: - case POWER_RUNIC_POWER: - sLog.outDebug("CalculateManaCost: Not implemented yet!"); - break; - default: - sLog.outError("CalculateManaCost: Unknown power type '%d' in spell %d", spellInfo->powerType, spellInfo->Id); - return 0; - } - } - SpellSchools school = GetFirstSchoolInMask(schoolMask); - // Flat mod from caster auras by spell school - powerCost += caster->GetInt32Value(UNIT_FIELD_POWER_COST_MODIFIER + school); - // Shiv - costs 20 + weaponSpeed*10 energy (apply only to non-triggered spell with energy cost) - if (spellInfo->AttributesEx4 & SPELL_ATTR_EX4_SPELL_VS_EXTEND_COST) - powerCost += caster->GetAttackTime(OFF_ATTACK)/100; - // Apply cost mod by spell - if (Player* modOwner = caster->GetSpellModOwner()) - modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_COST, powerCost); - - if (spellInfo->Attributes & SPELL_ATTR_LEVEL_DAMAGE_CALCULATION) - powerCost = int32(powerCost/ (1.117f* spellInfo->spellLevel / caster->getLevel() -0.1327f)); - - // PCT mod from user auras by school - powerCost = int32(powerCost * (1.0f+caster->GetFloatValue(UNIT_FIELD_POWER_COST_MULTIPLIER+school))); - if (powerCost < 0) - powerCost = 0; - return powerCost; -} - -Unit* GetTriggeredSpellCaster(SpellEntry const * spellInfo, Unit * caster, Unit * target) -{ - for (uint8 i = 0 ; i < MAX_SPELL_EFFECTS; ++i) - { - if (SpellTargetType[spellInfo->EffectImplicitTargetA[i]] == TARGET_TYPE_UNIT_TARGET - || SpellTargetType[spellInfo->EffectImplicitTargetB[i]] == TARGET_TYPE_UNIT_TARGET - || SpellTargetType[spellInfo->EffectImplicitTargetA[i]] == TARGET_TYPE_CHANNEL - || SpellTargetType[spellInfo->EffectImplicitTargetB[i]] == TARGET_TYPE_CHANNEL - || SpellTargetType[spellInfo->EffectImplicitTargetA[i]] == TARGET_TYPE_DEST_TARGET - || SpellTargetType[spellInfo->EffectImplicitTargetB[i]] == TARGET_TYPE_DEST_TARGET) - return caster; - } - return target; -} - -AuraState GetSpellAuraState(SpellEntry const * spellInfo) -{ - // Seals - if (IsSealSpell(spellInfo)) - return AURA_STATE_JUDGEMENT; - - // Conflagrate aura state on Immolate and Shadowflame - if (spellInfo->SpellFamilyName == SPELLFAMILY_WARLOCK && - // Immolate - ((spellInfo->SpellFamilyFlags[0] & 4) || - // Shadowflame - (spellInfo->SpellFamilyFlags[2] & 2))) - return AURA_STATE_CONFLAGRATE; - - // Faerie Fire (druid versions) - if (spellInfo->SpellFamilyName == SPELLFAMILY_DRUID && spellInfo->SpellFamilyFlags[0] & 0x400) - return AURA_STATE_FAERIE_FIRE; - - // Sting (hunter's pet ability) - if (spellInfo->Category == 1133) - return AURA_STATE_FAERIE_FIRE; - - // Victorious - if (spellInfo->SpellFamilyName == SPELLFAMILY_WARRIOR && spellInfo->SpellFamilyFlags[1] & 0x00040000) - return AURA_STATE_WARRIOR_VICTORY_RUSH; - - // Swiftmend state on Regrowth & Rejuvenation - if (spellInfo->SpellFamilyName == SPELLFAMILY_DRUID && spellInfo->SpellFamilyFlags[0] & 0x50) - return AURA_STATE_SWIFTMEND; - - // Deadly poison aura state - if (spellInfo->SpellFamilyName == SPELLFAMILY_ROGUE && spellInfo->SpellFamilyFlags[0] & 0x10000) - return AURA_STATE_DEADLY_POISON; - - // Enrage aura state - if (spellInfo->Dispel == DISPEL_ENRAGE) - return AURA_STATE_ENRAGE; - - // Bleeding aura state - if (GetAllSpellMechanicMask(spellInfo) & 1<<MECHANIC_BLEED) - return AURA_STATE_BLEEDING; - - if (GetSpellSchoolMask(spellInfo) & SPELL_SCHOOL_MASK_FROST) - { - for (uint8 i = 0; i<MAX_SPELL_EFFECTS; ++i) - { - if (spellInfo->EffectApplyAuraName[i] == SPELL_AURA_MOD_STUN - || spellInfo->EffectApplyAuraName[i] == SPELL_AURA_MOD_ROOT) - return AURA_STATE_FROZEN; - } - } - return AURA_STATE_NONE; -} - -SpellSpecific GetSpellSpecific(SpellEntry const * spellInfo) -{ - switch(spellInfo->SpellFamilyName) - { - case SPELLFAMILY_GENERIC: - { - // Food / Drinks (mostly) - if (spellInfo->AuraInterruptFlags & AURA_INTERRUPT_FLAG_NOT_SEATED) - { - bool food = false; - bool drink = false; - for (int i = 0; i < 3; ++i) - { - switch(spellInfo->EffectApplyAuraName[i]) - { - // Food - case SPELL_AURA_MOD_REGEN: - case SPELL_AURA_OBS_MOD_HEALTH: - food = true; - break; - // Drink - case SPELL_AURA_MOD_POWER_REGEN: - case SPELL_AURA_OBS_MOD_POWER: - drink = true; - break; - default: - break; - } - } - - if (food && drink) - return SPELL_SPECIFIC_FOOD_AND_DRINK; - else if (food) - return SPELL_SPECIFIC_FOOD; - else if (drink) - return SPELL_SPECIFIC_DRINK; - } - // scrolls effects - else - { - uint32 firstSpell = spellmgr.GetFirstSpellInChain(spellInfo->Id); - switch (firstSpell) - { - case 8118: // Strength - case 8099: // Stamina - case 8112: // Spirit - case 8096: // Intellect - case 8115: // Agility - case 8091: // Armor - return SPELL_SPECIFIC_SCROLL; - case 12880: // Enrage (Enrage) - case 57518: // Enrage (Wrecking Crew) - return SPELL_SPECIFIC_WARRIOR_ENRAGE; - } - } - break; - } - case SPELLFAMILY_MAGE: - { - // family flags 18(Molten), 25(Frost/Ice), 28(Mage) - if (spellInfo->SpellFamilyFlags[0] & 0x12040000) - return SPELL_SPECIFIC_MAGE_ARMOR; - - // Arcane brillance and Arcane intelect (normal check fails because of flags difference) - if (spellInfo->SpellFamilyFlags[0] & 0x400) - return SPELL_SPECIFIC_MAGE_ARCANE_BRILLANCE; - - if ((spellInfo->SpellFamilyFlags[0] & 0x1000000) && spellInfo->EffectApplyAuraName[0] == SPELL_AURA_MOD_CONFUSE) - return SPELL_SPECIFIC_MAGE_POLYMORPH; - - break; - } - case SPELLFAMILY_WARRIOR: - { - if (spellInfo->Id == 12292) // Death Wish - return SPELL_SPECIFIC_WARRIOR_ENRAGE; - - break; - } - case SPELLFAMILY_WARLOCK: - { - // only warlock curses have this - if (spellInfo->Dispel == DISPEL_CURSE) - return SPELL_SPECIFIC_CURSE; - - // Warlock (Demon Armor | Demon Skin | Fel Armor) - if (spellInfo->SpellFamilyFlags[1] & 0x20000020 || spellInfo->SpellFamilyFlags[2] & 0x00000010) - return SPELL_SPECIFIC_WARLOCK_ARMOR; - - //seed of corruption and corruption - if (spellInfo->SpellFamilyFlags[1] & 0x10 || spellInfo->SpellFamilyFlags[0] & 0x2) - return SPELL_SPECIFIC_WARLOCK_CORRUPTION; - break; - } - case SPELLFAMILY_PRIEST: - { - // Divine Spirit and Prayer of Spirit - if (spellInfo->SpellFamilyFlags[0] & 0x20) - return SPELL_SPECIFIC_PRIEST_DIVINE_SPIRIT; - - break; - } - case SPELLFAMILY_HUNTER: - { - // only hunter stings have this - if (spellInfo->Dispel == DISPEL_POISON) - return SPELL_SPECIFIC_STING; - - // only hunter aspects have this (but not all aspects in hunter family) - if (spellInfo->SpellFamilyFlags.HasFlag(0x00380000, 0x00440000, 0x00001010)) - return SPELL_SPECIFIC_ASPECT; - - break; - } - case SPELLFAMILY_PALADIN: - { - if (IsSealSpell(spellInfo)) - return SPELL_SPECIFIC_SEAL; - - if (spellInfo->SpellFamilyFlags[0] & 0x00002190) - return SPELL_SPECIFIC_HAND; - - // Judgement of Wisdom, Judgement of Light, Judgement of Justice - if (spellInfo->Id == 20184 || spellInfo->Id == 20185 || spellInfo->Id == 20186) - return SPELL_SPECIFIC_JUDGEMENT; - - // only paladin auras have this (for palaldin class family) - if (spellInfo->SpellFamilyFlags[2] & 0x00000020) - return SPELL_SPECIFIC_AURA; - - break; - } - case SPELLFAMILY_SHAMAN: - { - if (IsElementalShield(spellInfo)) - return SPELL_SPECIFIC_ELEMENTAL_SHIELD; - - break; - } - - case SPELLFAMILY_DEATHKNIGHT: - if (spellInfo->Id == 48266 || spellInfo->Id == 48263 || spellInfo->Id == 48265) - //if (spellInfo->Category == 47) - return SPELL_SPECIFIC_PRESENCE; - break; - } - - for (int i = 0; i < 3; ++i) - { - if (spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AURA) - { - switch(spellInfo->EffectApplyAuraName[i]) - { - case SPELL_AURA_MOD_CHARM: - case SPELL_AURA_MOD_POSSESS_PET: - case SPELL_AURA_MOD_POSSESS: - case SPELL_AURA_AOE_CHARM: - return SPELL_SPECIFIC_CHARM; - case SPELL_AURA_TRACK_CREATURES: - case SPELL_AURA_TRACK_RESOURCES: - case SPELL_AURA_TRACK_STEALTHED: - return SPELL_SPECIFIC_TRACKER; - case SPELL_AURA_PHASE: - return SPELL_SPECIFIC_PHASE; - } - } - } - - return SPELL_SPECIFIC_NORMAL; -} - -// target not allow have more one spell specific from same caster -bool IsSingleFromSpellSpecificPerCaster(SpellSpecific spellSpec1,SpellSpecific spellSpec2) -{ - switch(spellSpec1) - { - case SPELL_SPECIFIC_SEAL: - case SPELL_SPECIFIC_HAND: - case SPELL_SPECIFIC_AURA: - case SPELL_SPECIFIC_STING: - case SPELL_SPECIFIC_CURSE: - case SPELL_SPECIFIC_ASPECT: - case SPELL_SPECIFIC_JUDGEMENT: - case SPELL_SPECIFIC_WARLOCK_CORRUPTION: - return spellSpec1 == spellSpec2; - default: - return false; - } -} - -bool IsSingleFromSpellSpecificPerTarget(SpellSpecific spellSpec1, SpellSpecific spellSpec2) -{ - switch(spellSpec1) - { - case SPELL_SPECIFIC_PHASE: - case SPELL_SPECIFIC_TRACKER: - case SPELL_SPECIFIC_WARLOCK_ARMOR: - case SPELL_SPECIFIC_MAGE_ARMOR: - case SPELL_SPECIFIC_ELEMENTAL_SHIELD: - case SPELL_SPECIFIC_MAGE_POLYMORPH: - case SPELL_SPECIFIC_PRESENCE: - case SPELL_SPECIFIC_CHARM: - case SPELL_SPECIFIC_SCROLL: - case SPELL_SPECIFIC_WARRIOR_ENRAGE: - case SPELL_SPECIFIC_MAGE_ARCANE_BRILLANCE: - case SPELL_SPECIFIC_PRIEST_DIVINE_SPIRIT: - return spellSpec1 == spellSpec2; - case SPELL_SPECIFIC_FOOD: - return spellSpec2 == SPELL_SPECIFIC_FOOD - || spellSpec2 == SPELL_SPECIFIC_FOOD_AND_DRINK; - case SPELL_SPECIFIC_DRINK: - return spellSpec2 == SPELL_SPECIFIC_DRINK - || spellSpec2 == SPELL_SPECIFIC_FOOD_AND_DRINK; - case SPELL_SPECIFIC_FOOD_AND_DRINK: - return spellSpec2 == SPELL_SPECIFIC_FOOD - || spellSpec2 == SPELL_SPECIFIC_DRINK - || spellSpec2 == SPELL_SPECIFIC_FOOD_AND_DRINK; - default: - return false; - } -} - -bool IsPositiveTarget(uint32 targetA, uint32 targetB) -{ - // non-positive targets - switch(targetA) - { - case TARGET_UNIT_NEARBY_ENEMY: - case TARGET_UNIT_TARGET_ENEMY: - case TARGET_UNIT_AREA_ENEMY_SRC: - case TARGET_UNIT_AREA_ENEMY_DST: - case TARGET_UNIT_CONE_ENEMY: - case TARGET_DEST_DYNOBJ_ENEMY: - case TARGET_DST_TARGET_ENEMY: - case TARGET_UNIT_CHANNEL: - return false; - default: - break; - } - if (targetB) - return IsPositiveTarget(targetB, 0); - return true; -} - -bool SpellMgr::_isPositiveEffect(uint32 spellId, uint32 effIndex, bool deep) const -{ - SpellEntry const *spellproto = sSpellStore.LookupEntry(spellId); - if (!spellproto) return false; - - // not found a single positive spell with this attribute - if (spellproto->Attributes & SPELL_ATTR_NEGATIVE_1) - return false; - - switch(spellId) - { - //case 37675: // Chaos Blast removed from mangos - case 34700: // Allergic Reaction - case 61987: // Avenging Wrath Marker - case 61988: // Divine Shield exclude aura - case 50524: // Runic Power Feed - return false; - case 12042: // Arcane Power - case 30877: // Tag Murloc - return true; - } - - switch(spellproto->Mechanic) - { - case MECHANIC_IMMUNE_SHIELD: - return true; - default: - break; - } - - // Special case: effects which determine positivity of whole spell - for (uint8 i = 0; i<MAX_SPELL_EFFECTS; ++i) - { - if (spellproto->EffectApplyAuraName[i] == SPELL_AURA_MOD_STEALTH) - return true; - } - - switch(spellproto->Effect[effIndex]) - { - case SPELL_EFFECT_DUMMY: - // some explicitly required dummy effect sets - switch(spellId) - { - case 28441: return false; // AB Effect 000 - default: - break; - } - break; - // always positive effects (check before target checks that provided non-positive result in some case for positive effects) - case SPELL_EFFECT_HEAL: - case SPELL_EFFECT_LEARN_SPELL: - case SPELL_EFFECT_SKILL_STEP: - case SPELL_EFFECT_HEAL_PCT: - case SPELL_EFFECT_ENERGIZE_PCT: - return true; - - // non-positive aura use - case SPELL_EFFECT_APPLY_AURA: - case SPELL_EFFECT_APPLY_AREA_AURA_FRIEND: - { - switch(spellproto->EffectApplyAuraName[effIndex]) - { - case SPELL_AURA_MOD_DAMAGE_DONE: // dependent from bas point sign (negative -> negative) - case SPELL_AURA_MOD_STAT: - case SPELL_AURA_MOD_SKILL: - case SPELL_AURA_MOD_HEALING_PCT: - case SPELL_AURA_MOD_HEALING_DONE: - case SPELL_AURA_MOD_DAMAGE_PERCENT_DONE: - if (spellproto->CalculateSimpleValue(effIndex) < 0) - return false; - break; - case SPELL_AURA_MOD_DAMAGE_TAKEN: // dependent from bas point sign (positive -> negative) - if (spellproto->CalculateSimpleValue(effIndex) > 0) - return false; - break; - case SPELL_AURA_MOD_CRIT_PCT: - case SPELL_AURA_MOD_SPELL_CRIT_CHANCE: - if (spellproto->CalculateSimpleValue(effIndex) > 0) - return true; // some expected positive spells have SPELL_ATTR_EX_NEGATIVE - break; - case SPELL_AURA_ADD_TARGET_TRIGGER: - return true; - case SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE: - case SPELL_AURA_PERIODIC_TRIGGER_SPELL: - if (!deep) - { - uint32 spellTriggeredId = spellproto->EffectTriggerSpell[effIndex]; - SpellEntry const *spellTriggeredProto = sSpellStore.LookupEntry(spellTriggeredId); - - if (spellTriggeredProto) - { - // non-positive targets of main spell return early - for (int i = 0; i < 3; ++i) - { - if (!spellTriggeredProto->Effect[i]) - continue; - // if non-positive trigger cast targeted to positive target this main cast is non-positive - // this will place this spell auras as debuffs - if (IsPositiveTarget(spellTriggeredProto->EffectImplicitTargetA[effIndex],spellTriggeredProto->EffectImplicitTargetB[effIndex]) && !_isPositiveEffect(spellTriggeredId,i, true)) - return false; - } - } - } - case SPELL_AURA_PROC_TRIGGER_SPELL: - // many positive auras have negative triggered spells at damage for example and this not make it negative (it can be canceled for example) - break; - case SPELL_AURA_MOD_STUN: //have positive and negative spells, we can't sort its correctly at this moment. - if (effIndex == 0 && spellproto->Effect[1] == 0 && spellproto->Effect[2] == 0) - return false; // but all single stun aura spells is negative - break; - case SPELL_AURA_MOD_PACIFY_SILENCE: - if (spellproto->Id == 24740) // Wisp Costume - return true; - return false; - case SPELL_AURA_MOD_ROOT: - case SPELL_AURA_MOD_SILENCE: - case SPELL_AURA_GHOST: - case SPELL_AURA_PERIODIC_LEECH: - case SPELL_AURA_MOD_STALKED: - case SPELL_AURA_PERIODIC_DAMAGE_PERCENT: - return false; - case SPELL_AURA_PERIODIC_DAMAGE: // used in positive spells also. - // part of negative spell if casted at self (prevent cancel) - if (spellproto->EffectImplicitTargetA[effIndex] == TARGET_UNIT_CASTER) - return false; - break; - case SPELL_AURA_MOD_DECREASE_SPEED: // used in positive spells also - // part of positive spell if casted at self - if (spellproto->EffectImplicitTargetA[effIndex] != TARGET_UNIT_CASTER) - return false; - // but not this if this first effect (didn't find better check) - if (spellproto->Attributes & 0x4000000 && effIndex == 0) - return false; - break; - case SPELL_AURA_MECHANIC_IMMUNITY: - { - // non-positive immunities - switch(spellproto->EffectMiscValue[effIndex]) - { - case MECHANIC_BANDAGE: - case MECHANIC_SHIELD: - case MECHANIC_MOUNT: - case MECHANIC_INVULNERABILITY: - return false; - default: - break; - } - } break; - case SPELL_AURA_ADD_FLAT_MODIFIER: // mods - case SPELL_AURA_ADD_PCT_MODIFIER: - { - // non-positive mods - switch(spellproto->EffectMiscValue[effIndex]) - { - case SPELLMOD_COST: // dependent from bas point sign (negative -> positive) - if (spellproto->CalculateSimpleValue(effIndex) > 0) - { - if (!deep) - { - bool negative = true; - for (uint8 i=0; i<MAX_SPELL_EFFECTS; ++i) - { - if (i != effIndex) - if (_isPositiveEffect(spellId, i, true)) - { - negative = false; - break; - } - } - if (negative) - return false; - } - } - break; - default: - break; - } - } break; - default: - break; - } - break; - } - default: - break; - } - - // non-positive targets - if (!IsPositiveTarget(spellproto->EffectImplicitTargetA[effIndex],spellproto->EffectImplicitTargetB[effIndex])) - return false; - - // AttributesEx check - if (spellproto->AttributesEx & SPELL_ATTR_EX_NEGATIVE) - return false; - - if (!deep && spellproto->EffectTriggerSpell[effIndex] - && !spellproto->EffectApplyAuraName[effIndex] - && IsPositiveTarget(spellproto->EffectImplicitTargetA[effIndex],spellproto->EffectImplicitTargetB[effIndex]) - && !_isPositiveSpell(spellproto->EffectTriggerSpell[effIndex], true)) - return false; - - // ok, positive - return true; -} - -bool IsPositiveSpell(uint32 spellId) -{ - if (!sSpellStore.LookupEntry(spellId)) // non-existing spells - return false; - return !(spellmgr.GetSpellCustomAttr(spellId) & SPELL_ATTR_CU_NEGATIVE); -} - -bool IsPositiveEffect(uint32 spellId, uint32 effIndex) -{ - if (!sSpellStore.LookupEntry(spellId)) - return false; - switch(effIndex) - { - default: - case 0: return !(spellmgr.GetSpellCustomAttr(spellId) & SPELL_ATTR_CU_NEGATIVE_EFF0); - case 1: return !(spellmgr.GetSpellCustomAttr(spellId) & SPELL_ATTR_CU_NEGATIVE_EFF1); - case 2: return !(spellmgr.GetSpellCustomAttr(spellId) & SPELL_ATTR_CU_NEGATIVE_EFF2); - } -} - -bool SpellMgr::_isPositiveSpell(uint32 spellId, bool deep) const -{ - SpellEntry const *spellproto = sSpellStore.LookupEntry(spellId); - if (!spellproto) return false; - - // spells with at least one negative effect are considered negative - // some self-applied spells have negative effects but in self casting case negative check ignored. - for (int i = 0; i < 3; ++i) - if (!_isPositiveEffect(spellId, i, deep)) - return false; - return true; -} - -bool IsSingleTargetSpell(SpellEntry const *spellInfo) -{ - // all other single target spells have if it has AttributesEx5 - if (spellInfo->AttributesEx5 & SPELL_ATTR_EX5_SINGLE_TARGET_SPELL) - return true; - - switch(GetSpellSpecific(spellInfo)) - { - case SPELL_SPECIFIC_JUDGEMENT: - return true; - default: - break; - } - - return false; -} - -bool IsSingleTargetSpells(SpellEntry const *spellInfo1, SpellEntry const *spellInfo2) -{ - // TODO - need better check - // Equal icon and spellfamily - if (spellInfo1->SpellFamilyName == spellInfo2->SpellFamilyName && - spellInfo1->SpellIconID == spellInfo2->SpellIconID) - return true; - - // TODO - need found Judgements rule - SpellSpecific spec1 = GetSpellSpecific(spellInfo1); - // spell with single target specific types - switch(spec1) - { - case SPELL_SPECIFIC_JUDGEMENT: - case SPELL_SPECIFIC_MAGE_POLYMORPH: - if (GetSpellSpecific(spellInfo2) == spec1) - return true; - break; - default: - break; - } - - return false; -} - -SpellCastResult GetErrorAtShapeshiftedCast (SpellEntry const *spellInfo, uint32 form) -{ - // talents that learn spells can have stance requirements that need ignore - // (this requirement only for client-side stance show in talent description) - if (GetTalentSpellCost(spellInfo->Id) > 0 && - (spellInfo->Effect[0] == SPELL_EFFECT_LEARN_SPELL || spellInfo->Effect[1] == SPELL_EFFECT_LEARN_SPELL || spellInfo->Effect[2] == SPELL_EFFECT_LEARN_SPELL)) - return SPELL_CAST_OK; - - uint32 stanceMask = (form ? 1 << (form - 1) : 0); - - if (stanceMask & spellInfo->StancesNot) // can explicitly not be casted in this stance - return SPELL_FAILED_NOT_SHAPESHIFT; - - if (stanceMask & spellInfo->Stances) // can explicitly be casted in this stance - return SPELL_CAST_OK; - - bool actAsShifted = false; - SpellShapeshiftEntry const *shapeInfo = NULL; - if (form > 0) - { - shapeInfo = sSpellShapeshiftStore.LookupEntry(form); - if (!shapeInfo) - { - sLog.outError("GetErrorAtShapeshiftedCast: unknown shapeshift %u", form); - return SPELL_CAST_OK; - } - actAsShifted = !(shapeInfo->flags1 & 1); // shapeshift acts as normal form for spells - } - - if (actAsShifted) - { - if (spellInfo->Attributes & SPELL_ATTR_NOT_SHAPESHIFT) // not while shapeshifted - return SPELL_FAILED_NOT_SHAPESHIFT; - else if (spellInfo->Stances != 0) // needs other shapeshift - return SPELL_FAILED_ONLY_SHAPESHIFT; - } - else - { - // needs shapeshift - if (!(spellInfo->AttributesEx2 & SPELL_ATTR_EX2_NOT_NEED_SHAPESHIFT) && spellInfo->Stances != 0) - return SPELL_FAILED_ONLY_SHAPESHIFT; - } - - // Check if stance disables cast of not-stance spells - // Example: cannot cast any other spells in zombie or ghoul form - // TODO: Find a way to disable use of these spells clientside - if (shapeInfo && shapeInfo->flags1 & 0x400) - { - if (!(stanceMask & spellInfo->Stances)) - return SPELL_FAILED_ONLY_SHAPESHIFT; - } - - return SPELL_CAST_OK; -} - -void SpellMgr::LoadSpellTargetPositions() -{ - mSpellTargetPositions.clear(); // need for reload case - - uint32 count = 0; - - // 0 1 2 3 4 5 - QueryResult_AutoPtr result = WorldDatabase.Query("SELECT id, target_map, target_position_x, target_position_y, target_position_z, target_orientation FROM spell_target_position"); - if (!result) - { - - barGoLink bar(1); - - bar.step(); - - sLog.outString(); - sLog.outString(">> Loaded %u spell target coordinates", count); - return; - } - - barGoLink bar(result->GetRowCount()); - - do - { - Field *fields = result->Fetch(); - - bar.step(); - - uint32 Spell_ID = fields[0].GetUInt32(); - - SpellTargetPosition st; - - st.target_mapId = fields[1].GetUInt32(); - st.target_X = fields[2].GetFloat(); - st.target_Y = fields[3].GetFloat(); - st.target_Z = fields[4].GetFloat(); - st.target_Orientation = fields[5].GetFloat(); - - MapEntry const* mapEntry = sMapStore.LookupEntry(st.target_mapId); - if (!mapEntry) - { - sLog.outErrorDb("Spell (ID:%u) target map (ID: %u) does not exist in `Map.dbc`.",Spell_ID,st.target_mapId); - continue; - } - - if (st.target_X==0 && st.target_Y==0 && st.target_Z==0) - { - sLog.outErrorDb("Spell (ID:%u) target coordinates not provided.",Spell_ID); - continue; - } - - SpellEntry const* spellInfo = sSpellStore.LookupEntry(Spell_ID); - if (!spellInfo) - { - sLog.outErrorDb("Spell (ID:%u) listed in `spell_target_position` does not exist.",Spell_ID); - continue; - } - - bool found = false; - for (int i = 0; i < 3; ++i) - { - if (spellInfo->EffectImplicitTargetA[i] == TARGET_DST_DB || spellInfo->EffectImplicitTargetB[i] == TARGET_DST_DB) - { - // additional requirements - if (spellInfo->Effect[i]==SPELL_EFFECT_BIND && spellInfo->EffectMiscValue[i]) - { - uint32 area_id = MapManager::Instance().GetAreaId(st.target_mapId, st.target_X, st.target_Y, st.target_Z); - if (area_id != uint32(spellInfo->EffectMiscValue[i])) - { - sLog.outErrorDb("Spell (Id: %u) listed in `spell_target_position` expected point to zone %u bit point to zone %u.",Spell_ID, spellInfo->EffectMiscValue[i], area_id); - break; - } - } - - found = true; - break; - } - } - if (!found) - { - sLog.outErrorDb("Spell (Id: %u) listed in `spell_target_position` does not have target TARGET_DST_DB (17).",Spell_ID); - continue; - } - - mSpellTargetPositions[Spell_ID] = st; - ++count; - - } while (result->NextRow()); - - // Check all spells - for (uint32 i = 1; i < sSpellStore.GetNumRows(); ++i) - { - SpellEntry const * spellInfo = sSpellStore.LookupEntry(i); - if (!spellInfo) - continue; - - bool found = false; - for (int j = 0; j < 3; ++j) - { - switch(spellInfo->EffectImplicitTargetA[j]) - { - case TARGET_DST_DB: - found = true; - break; - } - if (found) - break; - switch(spellInfo->EffectImplicitTargetB[j]) - { - case TARGET_DST_DB: - found = true; - break; - } - if (found) - break; - } - if (found) - { -// if (!spellmgr.GetSpellTargetPosition(i)) -// sLog.outDebug("Spell (ID: %u) does not have record in `spell_target_position`", i); - } - } - - sLog.outString(); - sLog.outString(">> Loaded %u spell teleport coordinates", count); -} - -bool SpellMgr::IsAffectedByMod(SpellEntry const *spellInfo, SpellModifier *mod) const -{ - // false for spellInfo == NULL - if (!spellInfo || !mod) - return false; - - SpellEntry const *affect_spell = sSpellStore.LookupEntry(mod->spellId); - // False if affect_spell == NULL or spellFamily not equal - if (!affect_spell || affect_spell->SpellFamilyName != spellInfo->SpellFamilyName) - return false; - - // true - if (mod->mask & spellInfo->SpellFamilyFlags) - return true; - - return false; -} - -void SpellMgr::LoadSpellProcEvents() -{ - mSpellProcEventMap.clear(); // need for reload case - - uint32 count = 0; - - // 0 1 2 3 4 5 6 7 8 9 10 - QueryResult_AutoPtr result = WorldDatabase.Query("SELECT entry, SchoolMask, SpellFamilyName, SpellFamilyMask0, SpellFamilyMask1, SpellFamilyMask2, procFlags, procEx, ppmRate, CustomChance, Cooldown FROM spell_proc_event"); - if (!result) - { - barGoLink bar(1); - bar.step(); - sLog.outString(); - sLog.outString(">> Loaded %u spell proc event conditions", count); - return; - } - - barGoLink bar(result->GetRowCount()); - uint32 customProc = 0; - do - { - Field *fields = result->Fetch(); - - bar.step(); - - uint32 entry = fields[0].GetUInt32(); - - const SpellEntry *spell = sSpellStore.LookupEntry(entry); - if (!spell) - { - sLog.outErrorDb("Spell %u listed in `spell_proc_event` does not exist", entry); - continue; - } - - SpellProcEventEntry spe; - - spe.schoolMask = fields[1].GetUInt32(); - spe.spellFamilyName = fields[2].GetUInt32(); - spe.spellFamilyMask[0] = fields[3].GetUInt32(); - spe.spellFamilyMask[1] = fields[4].GetUInt32(); - spe.spellFamilyMask[2] = fields[5].GetUInt32(); - spe.procFlags = fields[6].GetUInt32(); - spe.procEx = fields[7].GetUInt32(); - spe.ppmRate = fields[8].GetFloat(); - spe.customChance = fields[9].GetFloat(); - spe.cooldown = fields[10].GetUInt32(); - - mSpellProcEventMap[entry] = spe; - - if (spell->procFlags == 0) - { - if (spe.procFlags == 0) - { - sLog.outErrorDb("Spell %u listed in `spell_proc_event` probally not triggered spell", entry); - continue; - } - customProc++; - } - ++count; - } while (result->NextRow()); - - sLog.outString(); - if (customProc) - sLog.outString(">> Loaded %u extra spell proc event conditions + %u custom", count, customProc); - else - sLog.outString(">> Loaded %u extra spell proc event conditions", count); -} - -void SpellMgr::LoadSpellBonusess() -{ - mSpellBonusMap.clear(); // need for reload case - uint32 count = 0; - // 0 1 2 3 4 - QueryResult_AutoPtr result = WorldDatabase.Query("SELECT entry, direct_bonus, dot_bonus, ap_bonus, ap_dot_bonus FROM spell_bonus_data"); - if (!result) - { - barGoLink bar(1); - bar.step(); - sLog.outString(); - sLog.outString(">> Loaded %u spell bonus data", count); - return; - } - - barGoLink bar(result->GetRowCount()); - do - { - Field *fields = result->Fetch(); - bar.step(); - uint32 entry = fields[0].GetUInt32(); - - const SpellEntry *spell = sSpellStore.LookupEntry(entry); - if (!spell) - { - sLog.outErrorDb("Spell %u listed in `spell_bonus_data` does not exist", entry); - continue; - } - - SpellBonusEntry sbe; - - sbe.direct_damage = fields[1].GetFloat(); - sbe.dot_damage = fields[2].GetFloat(); - sbe.ap_bonus = fields[3].GetFloat(); - sbe.ap_dot_bonus = fields[4].GetFloat(); - - mSpellBonusMap[entry] = sbe; - ++count; - } while (result->NextRow()); - - sLog.outString(); - sLog.outString(">> Loaded %u extra spell bonus data", count); -} - -bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellEntry const * procSpell, uint32 procFlags, uint32 procExtra, bool active) -{ - // No extra req need - uint32 procEvent_procEx = PROC_EX_NONE; - - // check prockFlags for condition - if ((procFlags & EventProcFlag) == 0) - return false; - - bool hasFamilyMask = false; - - /* Check Periodic Auras - - *Dots can trigger if spell has no PROC_FLAG_SUCCESSFUL_NEGATIVE_MAGIC_SPELL - nor PROC_FLAG_TAKEN_POSITIVE_MAGIC_SPELL - - *Only Hots can trigger if spell has PROC_FLAG_TAKEN_POSITIVE_MAGIC_SPELL - - *Only dots can trigger if spell has both positivity flags or PROC_FLAG_SUCCESSFUL_NEGATIVE_MAGIC_SPELL - - *Aura has to have PROC_FLAG_TAKEN_POSITIVE_MAGIC_SPELL or spellfamily specified to trigger from Hot - - */ - - if (procFlags & PROC_FLAG_ON_DO_PERIODIC) - { - if (EventProcFlag & PROC_FLAG_SUCCESSFUL_NEGATIVE_MAGIC_SPELL) - { - if (!(procExtra & PROC_EX_INTERNAL_DOT)) - return false; - } - else if (procExtra & PROC_EX_INTERNAL_HOT) - procExtra |= PROC_EX_INTERNAL_REQ_FAMILY; - else if (EventProcFlag & PROC_FLAG_SUCCESSFUL_POSITIVE_MAGIC_SPELL) - return false; - } - - if (procFlags & PROC_FLAG_ON_TAKE_PERIODIC) - { - if (EventProcFlag & PROC_FLAG_TAKEN_NEGATIVE_MAGIC_SPELL) - { - if (!(procExtra & PROC_EX_INTERNAL_DOT)) - return false; - } - else if (procExtra & PROC_EX_INTERNAL_HOT) - procExtra |= PROC_EX_INTERNAL_REQ_FAMILY; - else if (EventProcFlag & PROC_FLAG_TAKEN_POSITIVE_MAGIC_SPELL) - return false; - } - // Trap casts are active by default - if (procFlags & PROC_FLAG_ON_TRAP_ACTIVATION) - active = true; - - // Always trigger for this - if (procFlags & (PROC_FLAG_KILLED | PROC_FLAG_KILL | PROC_FLAG_DEATH)) - return true; - - if (spellProcEvent) // Exist event data - { - // Store extra req - procEvent_procEx = spellProcEvent->procEx; - - // For melee triggers - if (procSpell == NULL) - { - // Check (if set) for school (melee attack have Normal school) - if (spellProcEvent->schoolMask && (spellProcEvent->schoolMask & SPELL_SCHOOL_MASK_NORMAL) == 0) - return false; - } - else // For spells need check school/spell family/family mask - { - // Check (if set) for school - if (spellProcEvent->schoolMask && (spellProcEvent->schoolMask & procSpell->SchoolMask) == 0) - return false; - - // Check (if set) for spellFamilyName - if (spellProcEvent->spellFamilyName && (spellProcEvent->spellFamilyName != procSpell->SpellFamilyName)) - return false; - - // spellFamilyName is Ok need check for spellFamilyMask if present - if (spellProcEvent->spellFamilyMask) - { - if ((spellProcEvent->spellFamilyMask & procSpell->SpellFamilyFlags) == 0) - return false; - hasFamilyMask = true; - // Some spells are not considered as active even with have spellfamilyflags - if (!(procEvent_procEx & PROC_EX_ONLY_ACTIVE_SPELL)) - active = true; - } - } - } - - if (procExtra & (PROC_EX_INTERNAL_REQ_FAMILY)) - { - if (!hasFamilyMask) - return false; - } - - // Check for extra req (if none) and hit/crit - if (procEvent_procEx == PROC_EX_NONE) - { - // No extra req, so can trigger only for hit/crit - spell has to be active - if ((procExtra & (PROC_EX_NORMAL_HIT|PROC_EX_CRITICAL_HIT)) && active) - return true; - } - else // Passive spells hits here only if resist/reflect/immune/evade - { - if (procExtra & AURA_SPELL_PROC_EX_MASK) - { - // if spell marked as procing only from not active spells - if (active && procEvent_procEx & PROC_EX_NOT_ACTIVE_SPELL) - return false; - // if spell marked as procing only from active spells - if (!active && procEvent_procEx & PROC_EX_ONLY_ACTIVE_SPELL) - return false; - // Exist req for PROC_EX_EX_TRIGGER_ALWAYS - if (procEvent_procEx & PROC_EX_EX_TRIGGER_ALWAYS) - return true; - // PROC_EX_NOT_ACTIVE_SPELL and PROC_EX_ONLY_ACTIVE_SPELL flags handle: if passed checks before - if ((procExtra & (PROC_EX_NORMAL_HIT|PROC_EX_CRITICAL_HIT)) && ((procEvent_procEx & (AURA_SPELL_PROC_EX_MASK)) == 0)) - return true; - } - // Check Extra Requirement like (hit/crit/miss/resist/parry/dodge/block/immune/reflect/absorb and other) - if (procEvent_procEx & procExtra) - return true; - } - return false; -} - -void SpellMgr::LoadSpellGroups() -{ - mSpellSpellGroup.clear(); // need for reload case - mSpellGroupSpell.clear(); - - uint32 count = 0; - - // 0 1 - QueryResult_AutoPtr result = WorldDatabase.Query("SELECT id, spell_id FROM spell_group"); - if (!result) - { - - barGoLink bar(1); - - bar.step(); - - sLog.outString(); - sLog.outString(">> Loaded %u spell group definitions", count); - return; - } - - barGoLink bar(result->GetRowCount()); - - std::set<uint32> groups; - - do - { - Field *fields = result->Fetch(); - - bar.step(); - - uint32 group_id = fields[0].GetUInt32(); - if (group_id <= SPELL_GROUP_DB_RANGE_MIN && group_id >= SPELL_GROUP_CORE_RANGE_MAX) - { - sLog.outErrorDb("SpellGroup id %u listed in `spell_groups` is in core range, but is not defined in core!", group_id); - continue; - } - int32 spell_id = fields[1].GetInt32(); - - groups.insert(std::set<uint32>::value_type(group_id)); - mSpellGroupSpell.insert(SpellGroupSpellMap::value_type((SpellGroup)group_id, spell_id)); - - } while (result->NextRow()); - - for (SpellGroupSpellMap::iterator itr = mSpellGroupSpell.begin(); itr!= mSpellGroupSpell.end() ;) - { - if (itr->second < 0) - { - if (groups.find(abs(itr->second)) == groups.end()) - { - sLog.outErrorDb("SpellGroup id %u listed in `spell_groups` does not exist", abs(itr->second)); - mSpellGroupSpell.erase(itr++); - } - else - ++itr; - } - else - { - SpellEntry const* spellInfo = sSpellStore.LookupEntry(itr->second); - - if (!spellInfo) - { - sLog.outErrorDb("Spell %u listed in `spell_group` does not exist", itr->second); - mSpellGroupSpell.erase(itr++); - } - else if (GetSpellRank(itr->second) > 1) - { - sLog.outErrorDb("Spell %u listed in `spell_group` is not first rank of spell", itr->second); - mSpellGroupSpell.erase(itr++); - } - else - ++itr; - } - } - - for (std::set<uint32>::iterator groupItr = groups.begin() ; groupItr != groups.end() ; ++groupItr) - { - std::set<uint32> spells; - GetSetOfSpellsInSpellGroup(SpellGroup(*groupItr), spells); - - for (std::set<uint32>::iterator spellItr = spells.begin() ; spellItr != spells.end() ; ++spellItr) - { - ++count; - mSpellSpellGroup.insert(SpellSpellGroupMap::value_type(*spellItr, SpellGroup(*groupItr))); - } - } - - sLog.outString(); - sLog.outString(">> Loaded %u spell group definitions", count); -} - -void SpellMgr::LoadSpellGroupStackRules() -{ - mSpellGroupStack.clear(); // need for reload case - - uint32 count = 0; - - // 0 1 - QueryResult_AutoPtr result = WorldDatabase.Query("SELECT group_id, stack_rule FROM spell_group_stack_rules"); - if (!result) - { - - barGoLink bar(1); - - bar.step(); - - sLog.outString(); - sLog.outString(">> Loaded %u spell group stack rules", count); - return; - } - - barGoLink bar(result->GetRowCount()); - - do - { - Field *fields = result->Fetch(); - - bar.step(); - - uint32 group_id = fields[0].GetUInt32(); - uint8 stack_rule = fields[1].GetUInt32(); - if (stack_rule >= SPELL_GROUP_STACK_RULE_MAX) - { - sLog.outErrorDb("SpellGroupStackRule %u listed in `spell_group_stack_rules` does not exist", stack_rule); - continue; - } - - SpellGroupSpellMapBounds spellGroup = GetSpellGroupSpellMapBounds((SpellGroup)group_id); - - if (spellGroup.first == spellGroup.second) - { - sLog.outErrorDb("SpellGroup id %u listed in `spell_group_stack_rules` does not exist", group_id); - continue; - } - - mSpellGroupStack[(SpellGroup)group_id] = (SpellGroupStackRule)stack_rule; - - ++count; - } while (result->NextRow()); - - sLog.outString(); - sLog.outString(">> Loaded %u spell group stack rules", count); -} - -void SpellMgr::LoadSpellThreats() -{ - mSpellThreatMap.clear(); // need for reload case - - uint32 count = 0; - - // 0 1 - QueryResult_AutoPtr result = WorldDatabase.Query("SELECT entry, Threat FROM spell_threat"); - if (!result) - { - - barGoLink bar(1); - - bar.step(); - - sLog.outString(); - sLog.outString(">> Loaded %u aggro generating spells", count); - return; - } - - barGoLink bar(result->GetRowCount()); - - do - { - Field *fields = result->Fetch(); - - bar.step(); - - uint32 entry = fields[0].GetUInt32(); - uint16 Threat = fields[1].GetUInt16(); - - if (!sSpellStore.LookupEntry(entry)) - { - sLog.outErrorDb("Spell %u listed in `spell_threat` does not exist", entry); - continue; - } - - mSpellThreatMap[entry] = Threat; - - ++count; - } while (result->NextRow()); - - sLog.outString(); - sLog.outString(">> Loaded %u aggro generating spells", count); -} - -bool SpellMgr::IsRankSpellDueToSpell(SpellEntry const *spellInfo_1,uint32 spellId_2) const -{ - SpellEntry const *spellInfo_2 = sSpellStore.LookupEntry(spellId_2); - if (!spellInfo_1 || !spellInfo_2) return false; - if (spellInfo_1->Id == spellId_2) return false; - - return GetFirstSpellInChain(spellInfo_1->Id) == GetFirstSpellInChain(spellId_2); -} - -bool SpellMgr::canStackSpellRanks(SpellEntry const *spellInfo) -{ - if (IsPassiveSpell(spellInfo->Id)) // ranked passive spell - return false; - if (spellInfo->powerType != POWER_MANA && spellInfo->powerType != POWER_HEALTH) - return false; - if (IsProfessionOrRidingSpell(spellInfo->Id)) - return false; - - if (spellmgr.IsSkillBonusSpell(spellInfo->Id)) - return false; - - // All stance spells. if any better way, change it. - for (int i = 0; i < 3; ++i) - { - switch(spellInfo->SpellFamilyName) - { - case SPELLFAMILY_PALADIN: - // Paladin aura Spell - if (spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AREA_AURA_RAID) - return false; - break; - case SPELLFAMILY_DRUID: - // Druid form Spell - if (spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AURA && - spellInfo->EffectApplyAuraName[i] == SPELL_AURA_MOD_SHAPESHIFT) - return false; - break; - case SPELLFAMILY_ROGUE: - // Rogue Stealth - if (spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AURA && - spellInfo->EffectApplyAuraName[i] == SPELL_AURA_MOD_SHAPESHIFT) - return false; - } - } - return true; -} - -bool SpellMgr::IsProfessionOrRidingSpell(uint32 spellId) -{ - SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellId); - if (!spellInfo) - return false; - - for (uint8 i = 0 ; i < MAX_SPELL_EFFECTS ; ++i) - { - if (spellInfo->Effect[i] == SPELL_EFFECT_SKILL) - { - uint32 skill = spellInfo->EffectMiscValue[i]; - - bool found = IsProfessionOrRidingSkill(skill); - if (found) - return true; - } - } - return false; -} - -bool SpellMgr::IsProfessionSpell(uint32 spellId) -{ - SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellId); - if (!spellInfo) - return false; - - for (uint8 i = 0 ; i < MAX_SPELL_EFFECTS ; ++i) - { - if (spellInfo->Effect[i] == SPELL_EFFECT_SKILL) - { - uint32 skill = spellInfo->EffectMiscValue[i]; - - bool found = IsProfessionSkill(skill); - if (found) - return true; - } - } - return false; -} - -bool SpellMgr::IsPrimaryProfessionSpell(uint32 spellId) -{ - SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellId); - if (!spellInfo) - return false; - - for (uint8 i = 0 ; i < MAX_SPELL_EFFECTS ; ++i) - { - if (spellInfo->Effect[i] == SPELL_EFFECT_SKILL) - { - uint32 skill = spellInfo->EffectMiscValue[i]; - - bool found = IsPrimaryProfessionSkill(skill); - if (found) - return true; - } - } - return false; -} - -bool SpellMgr::IsPrimaryProfessionFirstRankSpell(uint32 spellId) const -{ - return IsPrimaryProfessionSpell(spellId) && GetSpellRank(spellId) == 1; -} - -bool SpellMgr::IsSkillBonusSpell(uint32 spellId) const -{ - SkillLineAbilityMapBounds bounds = GetSkillLineAbilityMapBounds(spellId); - - 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) - continue; - - if (pAbility->req_skill_value > 0) - return true; - } - - return false; -} - -SpellEntry const* SpellMgr::SelectAuraRankForPlayerLevel(SpellEntry const* spellInfo, uint32 playerLevel) const -{ - // ignore passive spells - if (IsPassiveSpell(spellInfo->Id)) - return spellInfo; - - bool needRankSelection = false; - for (int i=0; i<3; ++i) - { - if (IsPositiveEffect(spellInfo->Id, i) && ( - spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AURA || - spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AREA_AURA_PARTY || - spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AREA_AURA_RAID -)) - { - needRankSelection = true; - break; - } - } - - // not required - if (!needRankSelection) - return spellInfo; - - for (uint32 nextSpellId = spellInfo->Id; nextSpellId != 0; nextSpellId = GetPrevSpellInChain(nextSpellId)) - { - SpellEntry const *nextSpellInfo = sSpellStore.LookupEntry(nextSpellId); - if (!nextSpellInfo) - break; - - // if found appropriate level - if (playerLevel + 10 >= nextSpellInfo->spellLevel) - return nextSpellInfo; - - // one rank less then - } - - // not found - return NULL; -} - -void SpellMgr::LoadSpellLearnSkills() -{ - mSpellLearnSkills.clear(); // need for reload case - - // search auto-learned skills and add its to map also for use in unlearn spells/talents - uint32 dbc_count = 0; - barGoLink bar(sSpellStore.GetNumRows()); - for (uint32 spell = 0; spell < sSpellStore.GetNumRows(); ++spell) - { - bar.step(); - SpellEntry const* entry = sSpellStore.LookupEntry(spell); - - if (!entry) - continue; - - for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) - { - if (entry->Effect[i] == SPELL_EFFECT_SKILL) - { - SpellLearnSkillNode dbc_node; - dbc_node.skill = entry->EffectMiscValue[i]; - dbc_node.step = entry->CalculateSimpleValue(i); - if (dbc_node.skill != SKILL_RIDING) - dbc_node.value = 1; - else - dbc_node.value = dbc_node.step * 75; - dbc_node.maxvalue = dbc_node.step * 75; - - // FIXME: db_node not used... remove it? - SpellLearnSkillNode const* db_node = GetSpellLearnSkill(spell); - - mSpellLearnSkills[spell] = dbc_node; - ++dbc_count; - break; - } - } - } - - sLog.outString(); - sLog.outString(">> Loaded %u Spell Learn Skills from DBC", dbc_count); -} - -void SpellMgr::LoadSpellLearnSpells() -{ - mSpellLearnSpells.clear(); // need for reload case - - // 0 1 2 - QueryResult_AutoPtr result = WorldDatabase.Query("SELECT entry, SpellID, Active FROM spell_learn_spell"); - if (!result) - { - barGoLink bar(1); - bar.step(); - - sLog.outString(); - sLog.outString(">> Loaded 0 spell learn spells"); - sLog.outErrorDb("`spell_learn_spell` table is empty!"); - return; - } - - uint32 count = 0; - - barGoLink bar(result->GetRowCount()); - do - { - bar.step(); - Field *fields = result->Fetch(); - - uint32 spell_id = fields[0].GetUInt32(); - - SpellLearnSpellNode node; - node.spell = fields[1].GetUInt32(); - node.active = fields[2].GetBool(); - node.autoLearned= false; - - if (!sSpellStore.LookupEntry(spell_id)) - { - sLog.outErrorDb("Spell %u listed in `spell_learn_spell` does not exist", spell_id); - continue; - } - - if (!sSpellStore.LookupEntry(node.spell)) - { - sLog.outErrorDb("Spell %u listed in `spell_learn_spell` learning not existed spell %u", spell_id, node.spell); - continue; - } - - if (GetTalentSpellCost(node.spell)) - { - sLog.outErrorDb("Spell %u listed in `spell_learn_spell` attempt learning talent spell %u, skipped", spell_id, node.spell); - continue; - } - - mSpellLearnSpells.insert(SpellLearnSpellMap::value_type(spell_id,node)); - - ++count; - } while (result->NextRow()); - - // search auto-learned spells and add its to map also for use in unlearn spells/talents - uint32 dbc_count = 0; - for (uint32 spell = 0; spell < sSpellStore.GetNumRows(); ++spell) - { - SpellEntry const* entry = sSpellStore.LookupEntry(spell); - - if (!entry) - continue; - - for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) - { - if (entry->Effect[i] == SPELL_EFFECT_LEARN_SPELL) - { - SpellLearnSpellNode dbc_node; - dbc_node.spell = entry->EffectTriggerSpell[i]; - dbc_node.active = true; // all dbc based learned spells is active (show in spell book or hide by client itself) - - // ignore learning not existed spells (broken/outdated/or generic learnig spell 483 - if (!sSpellStore.LookupEntry(dbc_node.spell)) - continue; - - // talent or passive spells or skill-step spells auto-casted and not need dependent learning, - // pet teaching spells don't must be dependent learning (casted) - // other required explicit dependent learning - dbc_node.autoLearned = entry->EffectImplicitTargetA[i] == TARGET_UNIT_PET || GetTalentSpellCost(spell) > 0 || IsPassiveSpell(spell) || IsSpellHaveEffect(entry,SPELL_EFFECT_SKILL_STEP); - - SpellLearnSpellMapBounds db_node_bounds = GetSpellLearnSpellMapBounds(spell); - - bool found = false; - for (SpellLearnSpellMap::const_iterator itr = db_node_bounds.first; itr != db_node_bounds.second; ++itr) - { - if (itr->second.spell == dbc_node.spell) - { - sLog.outErrorDb("Spell %u auto-learn spell %u in spell.dbc then the record in `spell_learn_spell` is redundant, please fix DB.", - spell,dbc_node.spell); - found = true; - break; - } - } - - if (!found) // add new spell-spell pair if not found - { - mSpellLearnSpells.insert(SpellLearnSpellMap::value_type(spell,dbc_node)); - ++dbc_count; - } - } - } - } - - sLog.outString(); - sLog.outString(">> Loaded %u spell learn spells + %u found in DBC", count, dbc_count); -} - -void SpellMgr::LoadSpellPetAuras() -{ - mSpellPetAuraMap.clear(); // need for reload case - - uint32 count = 0; - - // 0 1 2 3 - QueryResult_AutoPtr result = WorldDatabase.Query("SELECT spell, effectId, pet, aura FROM spell_pet_auras"); - if (!result) - { - barGoLink bar(1); - - bar.step(); - - sLog.outString(); - sLog.outString(">> Loaded %u spell pet auras", count); - return; - } - - barGoLink bar(result->GetRowCount()); - - do - { - Field *fields = result->Fetch(); - - bar.step(); - - uint32 spell = fields[0].GetUInt32(); - uint8 eff = fields[1].GetUInt8(); - uint32 pet = fields[2].GetUInt32(); - uint32 aura = fields[3].GetUInt32(); - - SpellPetAuraMap::iterator itr = mSpellPetAuraMap.find((spell<<8) + eff); - if (itr != mSpellPetAuraMap.end()) - itr->second.AddAura(pet, aura); - else - { - SpellEntry const* spellInfo = sSpellStore.LookupEntry(spell); - if (!spellInfo) - { - sLog.outErrorDb("Spell %u listed in `spell_pet_auras` does not exist", spell); - continue; - } - if (spellInfo->Effect[eff] != SPELL_EFFECT_DUMMY && - (spellInfo->Effect[eff] != SPELL_EFFECT_APPLY_AURA || - spellInfo->EffectApplyAuraName[eff] != SPELL_AURA_DUMMY)) - { - sLog.outError("Spell %u listed in `spell_pet_auras` does not have dummy aura or dummy effect", spell); - continue; - } - - SpellEntry const* spellInfo2 = sSpellStore.LookupEntry(aura); - if (!spellInfo2) - { - sLog.outErrorDb("Aura %u listed in `spell_pet_auras` does not exist", aura); - continue; - } - - PetAura pa(pet, aura, spellInfo->EffectImplicitTargetA[eff] == TARGET_UNIT_PET, spellInfo->CalculateSimpleValue(eff)); - mSpellPetAuraMap[(spell<<8) + eff] = pa; - } - - ++count; - } while (result->NextRow()); - - sLog.outString(); - sLog.outString(">> Loaded %u spell pet auras", count); -} - -void SpellMgr::LoadPetLevelupSpellMap() -{ - mPetLevelupSpellMap.clear(); // need for reload case - - uint32 count = 0; - uint32 family_count = 0; - - barGoLink bar(sCreatureFamilyStore.GetNumRows()); - - for (uint32 i = 0; i < sCreatureFamilyStore.GetNumRows(); ++i) - { - bar.step(); - - CreatureFamilyEntry const *creatureFamily = sCreatureFamilyStore.LookupEntry(i); - if (!creatureFamily) // not exist - continue; - - for (uint8 j = 0; j < 2; ++j) - { - if (!creatureFamily->skillLine[j]) - continue; - - for (uint32 k = 0; k < sSkillLineAbilityStore.GetNumRows(); ++k) - { - SkillLineAbilityEntry const *skillLine = sSkillLineAbilityStore.LookupEntry(k); - if (!skillLine) - continue; - - //if (skillLine->skillId != creatureFamily->skillLine[0] && - // (!creatureFamily->skillLine[1] || skillLine->skillId != creatureFamily->skillLine[1])) - // continue; - - if (skillLine->skillId != creatureFamily->skillLine[j]) - continue; - - if (skillLine->learnOnGetSkill != ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL) - continue; - - SpellEntry const *spell = sSpellStore.LookupEntry(skillLine->spellId); - if (!spell) // not exist or triggered or talent - continue; - - if (!spell->spellLevel) - continue; - - PetLevelupSpellSet& spellSet = mPetLevelupSpellMap[creatureFamily->ID]; - if (spellSet.empty()) - ++family_count; - - spellSet.insert(PetLevelupSpellSet::value_type(spell->spellLevel,spell->Id)); - ++count; - } - } - } - - sLog.outString(); - sLog.outString(">> Loaded %u pet levelup and default spells for %u families", count, family_count); -} - -bool LoadPetDefaultSpells_helper(CreatureInfo const* cInfo, PetDefaultSpellsEntry& petDefSpells) -{ - // skip empty list; - bool have_spell = false; - for (uint8 j = 0; j < MAX_CREATURE_SPELL_DATA_SLOT; ++j) - { - if (petDefSpells.spellid[j]) - { - have_spell = true; - break; - } - } - if (!have_spell) - return false; - - // remove duplicates with levelupSpells if any - if (PetLevelupSpellSet const *levelupSpells = cInfo->family ? spellmgr.GetPetLevelupSpellList(cInfo->family) : NULL) - { - for (uint8 j = 0; j < MAX_CREATURE_SPELL_DATA_SLOT; ++j) - { - if (!petDefSpells.spellid[j]) - continue; - - for (PetLevelupSpellSet::const_iterator itr = levelupSpells->begin(); itr != levelupSpells->end(); ++itr) - { - if (itr->second == petDefSpells.spellid[j]) - { - petDefSpells.spellid[j] = 0; - break; - } - } - } - } - - // skip empty list; - have_spell = false; - for (uint8 j = 0; j < MAX_CREATURE_SPELL_DATA_SLOT; ++j) - { - if (petDefSpells.spellid[j]) - { - have_spell = true; - break; - } - } - - return have_spell; -} - -void SpellMgr::LoadPetDefaultSpells() -{ - mPetDefaultSpellsMap.clear(); - - uint32 countCreature = 0; - uint32 countData = 0; - - barGoLink bar(sCreatureStorage.MaxEntry + sSpellStore.GetNumRows()); - - for (uint32 i = 0; i < sCreatureStorage.MaxEntry; ++i) - { - bar.step(); - - CreatureInfo const* cInfo = sCreatureStorage.LookupEntry<CreatureInfo>(i); - if (!cInfo) - continue; - - if (!cInfo->PetSpellDataId) - continue; - - // for creature with PetSpellDataId get default pet spells from dbc - CreatureSpellDataEntry const* spellDataEntry = sCreatureSpellDataStore.LookupEntry(cInfo->PetSpellDataId); - if (!spellDataEntry) - continue; - - int32 petSpellsId = -int32(cInfo->PetSpellDataId); - PetDefaultSpellsEntry petDefSpells; - for (uint8 j = 0; j < MAX_CREATURE_SPELL_DATA_SLOT; ++j) - petDefSpells.spellid[j] = spellDataEntry->spellId[j]; - - if (LoadPetDefaultSpells_helper(cInfo, petDefSpells)) - { - mPetDefaultSpellsMap[petSpellsId] = petDefSpells; - ++countData; - } - } - - // different summon spells - for (uint32 i = 0; i < sSpellStore.GetNumRows(); ++i) - { - bar.step(); - - SpellEntry const* spellEntry = sSpellStore.LookupEntry(i); - if (!spellEntry) - continue; - - for (uint8 k = 0; k < MAX_SPELL_EFFECTS; ++k) - { - if (spellEntry->Effect[k] == SPELL_EFFECT_SUMMON || spellEntry->Effect[k] == SPELL_EFFECT_SUMMON_PET) - { - uint32 creature_id = spellEntry->EffectMiscValue[k]; - CreatureInfo const *cInfo = sCreatureStorage.LookupEntry<CreatureInfo>(creature_id); - if (!cInfo) - continue; - - // already loaded - if (cInfo->PetSpellDataId) - continue; - - // for creature without PetSpellDataId get default pet spells from creature_template - int32 petSpellsId = cInfo->Entry; - if (mPetDefaultSpellsMap.find(cInfo->Entry) != mPetDefaultSpellsMap.end()) - continue; - - PetDefaultSpellsEntry petDefSpells; - for (uint8 j = 0; j < MAX_CREATURE_SPELL_DATA_SLOT; ++j) - petDefSpells.spellid[j] = cInfo->spells[j]; - - if (LoadPetDefaultSpells_helper(cInfo, petDefSpells)) - { - mPetDefaultSpellsMap[petSpellsId] = petDefSpells; - ++countCreature; - } - } - } - } - - sLog.outString(); - sLog.outString(">> Loaded addition spells for %u pet spell data entries.", countData); - sLog.outString(">> Loaded %u summonable creature templates.", countCreature); -} - -/// Some checks for spells, to prevent adding deprecated/broken spells for trainers, spell book, etc -bool SpellMgr::IsSpellValid(SpellEntry const *spellInfo, Player *pl, bool msg) -{ - // not exist - if (!spellInfo) - return false; - - bool need_check_reagents = false; - - // check effects - for (uint8 i = 0; i < 3; ++i) - { - switch (spellInfo->Effect[i]) - { - case 0: - continue; - - // craft spell for crafting non-existed item (break client recipes list show) - case SPELL_EFFECT_CREATE_ITEM: - case SPELL_EFFECT_CREATE_ITEM_2: - { - if (spellInfo->EffectItemType[i] == 0) - { - // skip auto-loot crafting spells, its not need explicit item info (but have special fake items sometime) - if (!IsLootCraftingSpell(spellInfo)) - { - if (msg) - { - if (pl) - ChatHandler(pl).PSendSysMessage("Craft spell %u not have create item entry.",spellInfo->Id); - else - sLog.outErrorDb("Craft spell %u not have create item entry.",spellInfo->Id); - } - return false; - } - - } - // also possible IsLootCraftingSpell case but fake item must exist anyway - else if (!ObjectMgr::GetItemPrototype(spellInfo->EffectItemType[i])) - { - if (msg) - { - if (pl) - ChatHandler(pl).PSendSysMessage("Craft spell %u create not-exist in DB item (Entry: %u) and then...",spellInfo->Id,spellInfo->EffectItemType[i]); - else - sLog.outErrorDb("Craft spell %u create not-exist in DB item (Entry: %u) and then...",spellInfo->Id,spellInfo->EffectItemType[i]); - } - return false; - } - - need_check_reagents = true; - break; - } - case SPELL_EFFECT_LEARN_SPELL: - { - SpellEntry const *spellInfo2 = sSpellStore.LookupEntry(spellInfo->EffectTriggerSpell[i]); - if (!IsSpellValid(spellInfo2,pl,msg)) - { - if (msg) - { - if (pl) - ChatHandler(pl).PSendSysMessage("Spell %u learn to broken spell %u, and then...",spellInfo->Id,spellInfo->EffectTriggerSpell[i]); - else - sLog.outErrorDb("Spell %u learn to invalid spell %u, and then...",spellInfo->Id,spellInfo->EffectTriggerSpell[i]); - } - return false; - } - break; - } - } - } - - if (need_check_reagents) - { - for (uint8 j = 0; j < 8; ++j) - { - if (spellInfo->Reagent[j] > 0 && !ObjectMgr::GetItemPrototype(spellInfo->Reagent[j])) - { - if (msg) - { - if (pl) - ChatHandler(pl).PSendSysMessage("Craft spell %u have not-exist reagent in DB item (Entry: %u) and then...",spellInfo->Id,spellInfo->Reagent[j]); - else - sLog.outErrorDb("Craft spell %u have not-exist reagent in DB item (Entry: %u) and then...",spellInfo->Id,spellInfo->Reagent[j]); - } - return false; - } - } - } - - return true; -} - -void SpellMgr::LoadSpellAreas() -{ - mSpellAreaMap.clear(); // need for reload case - mSpellAreaForQuestMap.clear(); - mSpellAreaForActiveQuestMap.clear(); - mSpellAreaForQuestEndMap.clear(); - mSpellAreaForAuraMap.clear(); - - uint32 count = 0; - - // 0 1 2 3 4 5 6 7 8 - QueryResult_AutoPtr result = WorldDatabase.Query("SELECT spell, area, quest_start, quest_start_active, quest_end, aura_spell, racemask, gender, autocast FROM spell_area"); - - if (!result) - { - barGoLink bar(1); - - bar.step(); - - sLog.outString(); - sLog.outString(">> Loaded %u spell area requirements", count); - return; - } - - barGoLink bar(result->GetRowCount()); - - do - { - Field *fields = result->Fetch(); - - bar.step(); - - uint32 spell = fields[0].GetUInt32(); - SpellArea spellArea; - spellArea.spellId = spell; - spellArea.areaId = fields[1].GetUInt32(); - spellArea.questStart = fields[2].GetUInt32(); - spellArea.questStartCanActive = fields[3].GetBool(); - spellArea.questEnd = fields[4].GetUInt32(); - spellArea.auraSpell = fields[5].GetInt32(); - spellArea.raceMask = fields[6].GetUInt32(); - spellArea.gender = Gender(fields[7].GetUInt8()); - spellArea.autocast = fields[8].GetBool(); - - if (const SpellEntry* spellInfo = sSpellStore.LookupEntry(spell)) - { - if (spellArea.autocast) - const_cast<SpellEntry*>(spellInfo)->Attributes |= SPELL_ATTR_CANT_CANCEL; - } - else - { - sLog.outErrorDb("Spell %u listed in `spell_area` does not exist", spell); - continue; - } - - { - bool ok = true; - SpellAreaMapBounds sa_bounds = GetSpellAreaMapBounds(spellArea.spellId); - for (SpellAreaMap::const_iterator itr = sa_bounds.first; itr != sa_bounds.second; ++itr) - { - if (spellArea.spellId != itr->second.spellId) - continue; - if (spellArea.areaId != itr->second.areaId) - continue; - if (spellArea.questStart != itr->second.questStart) - continue; - if (spellArea.auraSpell != itr->second.auraSpell) - continue; - if ((spellArea.raceMask & itr->second.raceMask) == 0) - continue; - if (spellArea.gender != itr->second.gender) - continue; - - // duplicate by requirements - ok =false; - break; - } - - if (!ok) - { - sLog.outErrorDb("Spell %u listed in `spell_area` already listed with similar requirements.", spell); - continue; - } - } - - if (spellArea.areaId && !GetAreaEntryByAreaID(spellArea.areaId)) - { - sLog.outErrorDb("Spell %u listed in `spell_area` have wrong area (%u) requirement", spell,spellArea.areaId); - continue; - } - - if (spellArea.questStart && !objmgr.GetQuestTemplate(spellArea.questStart)) - { - sLog.outErrorDb("Spell %u listed in `spell_area` have wrong start quest (%u) requirement", spell,spellArea.questStart); - continue; - } - - if (spellArea.questEnd) - { - if (!objmgr.GetQuestTemplate(spellArea.questEnd)) - { - sLog.outErrorDb("Spell %u listed in `spell_area` have wrong end quest (%u) requirement", spell,spellArea.questEnd); - continue; - } - - if (spellArea.questEnd == spellArea.questStart && !spellArea.questStartCanActive) - { - sLog.outErrorDb("Spell %u listed in `spell_area` have quest (%u) requirement for start and end in same time", spell,spellArea.questEnd); - continue; - } - } - - if (spellArea.auraSpell) - { - SpellEntry const* spellInfo = sSpellStore.LookupEntry(abs(spellArea.auraSpell)); - if (!spellInfo) - { - sLog.outErrorDb("Spell %u listed in `spell_area` have wrong aura spell (%u) requirement", spell,abs(spellArea.auraSpell)); - continue; - } - - if (uint32(abs(spellArea.auraSpell)) == spellArea.spellId) - { - sLog.outErrorDb("Spell %u listed in `spell_area` have aura spell (%u) requirement for itself", spell,abs(spellArea.auraSpell)); - continue; - } - - // not allow autocast chains by auraSpell field (but allow use as alternative if not present) - if (spellArea.autocast && spellArea.auraSpell > 0) - { - bool chain = false; - SpellAreaForAuraMapBounds saBound = GetSpellAreaForAuraMapBounds(spellArea.spellId); - for (SpellAreaForAuraMap::const_iterator itr = saBound.first; itr != saBound.second; ++itr) - { - if (itr->second->autocast && itr->second->auraSpell > 0) - { - chain = true; - break; - } - } - - if (chain) - { - sLog.outErrorDb("Spell %u listed in `spell_area` have aura spell (%u) requirement that itself autocast from aura", spell,spellArea.auraSpell); - continue; - } - - SpellAreaMapBounds saBound2 = GetSpellAreaMapBounds(spellArea.auraSpell); - for (SpellAreaMap::const_iterator itr2 = saBound2.first; itr2 != saBound2.second; ++itr2) - { - if (itr2->second.autocast && itr2->second.auraSpell > 0) - { - chain = true; - break; - } - } - - if (chain) - { - sLog.outErrorDb("Spell %u listed in `spell_area` have aura spell (%u) requirement that itself autocast from aura", spell,spellArea.auraSpell); - continue; - } - } - } - - if (spellArea.raceMask && (spellArea.raceMask & RACEMASK_ALL_PLAYABLE) == 0) - { - sLog.outErrorDb("Spell %u listed in `spell_area` have wrong race mask (%u) requirement", spell,spellArea.raceMask); - continue; - } - - if (spellArea.gender != GENDER_NONE && spellArea.gender != GENDER_FEMALE && spellArea.gender != GENDER_MALE) - { - sLog.outErrorDb("Spell %u listed in `spell_area` have wrong gender (%u) requirement", spell, spellArea.gender); - continue; - } - - SpellArea const* sa = &mSpellAreaMap.insert(SpellAreaMap::value_type(spell,spellArea))->second; - - // for search by current zone/subzone at zone/subzone change - if (spellArea.areaId) - mSpellAreaForAreaMap.insert(SpellAreaForAreaMap::value_type(spellArea.areaId,sa)); - - // for search at quest start/reward - if (spellArea.questStart) - { - if (spellArea.questStartCanActive) - mSpellAreaForActiveQuestMap.insert(SpellAreaForQuestMap::value_type(spellArea.questStart,sa)); - else - mSpellAreaForQuestMap.insert(SpellAreaForQuestMap::value_type(spellArea.questStart,sa)); - } - - // for search at quest start/reward - if (spellArea.questEnd) - mSpellAreaForQuestEndMap.insert(SpellAreaForQuestMap::value_type(spellArea.questEnd,sa)); - - // for search at aura apply - if (spellArea.auraSpell) - mSpellAreaForAuraMap.insert(SpellAreaForAuraMap::value_type(abs(spellArea.auraSpell),sa)); - - ++count; - } while (result->NextRow()); - - sLog.outString(); - sLog.outString(">> Loaded %u spell area requirements", count); -} - -SpellCastResult SpellMgr::GetSpellAllowedInLocationError(SpellEntry const *spellInfo, uint32 map_id, uint32 zone_id, uint32 area_id, Player const* player) -{ - // normal case - if (spellInfo->AreaGroupId > 0) - { - bool found = false; - AreaGroupEntry const* groupEntry = sAreaGroupStore.LookupEntry(spellInfo->AreaGroupId); - while (groupEntry) - { - for (uint8 i = 0; i < 6; ++i) - if (groupEntry->AreaId[i] == zone_id || groupEntry->AreaId[i] == area_id) - found = true; - if (found || !groupEntry->nextGroup) - break; - // Try search in next group - groupEntry = sAreaGroupStore.LookupEntry(groupEntry->nextGroup); - } - - if (!found) - return SPELL_FAILED_INCORRECT_AREA; - } - - // continent limitation (virtual continent) - if (spellInfo->AttributesEx4 & SPELL_ATTR_EX4_CAST_ONLY_IN_OUTLAND) - { - uint32 v_map = GetVirtualMapForMapAndZone(map_id, zone_id); - MapEntry const *mapEntry = sMapStore.LookupEntry(v_map); - if (!mapEntry || mapEntry->addon < 1 || !mapEntry->IsContinent()) - return SPELL_FAILED_INCORRECT_AREA; - } - - // raid instance limitation - if (spellInfo->AttributesEx6 & SPELL_ATTR_EX6_NOT_IN_RAID_INSTANCE) - { - MapEntry const *mapEntry = sMapStore.LookupEntry(map_id); - if (!mapEntry || mapEntry->IsRaid()) - return SPELL_FAILED_NOT_IN_RAID_INSTANCE; - } - - // DB base check (if non empty then must fit at least single for allow) - SpellAreaMapBounds saBounds = spellmgr.GetSpellAreaMapBounds(spellInfo->Id); - if (saBounds.first != saBounds.second) - { - for (SpellAreaMap::const_iterator itr = saBounds.first; itr != saBounds.second; ++itr) - { - if (itr->second.IsFitToRequirements(player,zone_id,area_id)) - return SPELL_CAST_OK; - } - return SPELL_FAILED_INCORRECT_AREA; - } - - // bg spell checks - switch(spellInfo->Id) - { - case 23333: // Warsong Flag - case 23335: // Silverwing Flag - return map_id == 489 && player && player->InBattleGround() ? SPELL_CAST_OK : SPELL_FAILED_REQUIRES_AREA; - case 34976: // Netherstorm Flag - return map_id == 566 && player && player->InBattleGround() ? SPELL_CAST_OK : SPELL_FAILED_REQUIRES_AREA; - case 2584: // Waiting to Resurrect - case 22011: // Spirit Heal Channel - case 22012: // Spirit Heal - case 24171: // Resurrection Impact Visual - case 42792: // Recently Dropped Flag - case 43681: // Inactive - case 44535: // Spirit Heal (mana) - { - MapEntry const* mapEntry = sMapStore.LookupEntry(map_id); - if (!mapEntry) - return SPELL_FAILED_INCORRECT_AREA; - - return zone_id == 4197 || (mapEntry->IsBattleGround() && player && player->InBattleGround()) ? SPELL_CAST_OK : SPELL_FAILED_REQUIRES_AREA; - } - case 44521: // Preparation - { - if (!player) - return SPELL_FAILED_REQUIRES_AREA; - - MapEntry const *mapEntry = sMapStore.LookupEntry(map_id); - if (!mapEntry) - return SPELL_FAILED_INCORRECT_AREA; - - if (!mapEntry->IsBattleGround()) - return SPELL_FAILED_REQUIRES_AREA; - - BattleGround* bg = player->GetBattleGround(); - return bg && bg->GetStatus() == STATUS_WAIT_JOIN ? SPELL_CAST_OK : SPELL_FAILED_REQUIRES_AREA; - } - case 32724: // Gold Team (Alliance) - case 32725: // Green Team (Alliance) - case 35774: // Gold Team (Horde) - case 35775: // Green Team (Horde) - { - MapEntry const *mapEntry = sMapStore.LookupEntry(map_id); - if (!mapEntry) - return SPELL_FAILED_INCORRECT_AREA; - - return mapEntry->IsBattleArena() && player && player->InBattleGround() ? SPELL_CAST_OK : SPELL_FAILED_REQUIRES_AREA; - } - case 32727: // Arena Preparation - { - if (!player) - return SPELL_FAILED_REQUIRES_AREA; - - MapEntry const *mapEntry = sMapStore.LookupEntry(map_id); - if (!mapEntry) - return SPELL_FAILED_INCORRECT_AREA; - - if (!mapEntry->IsBattleArena()) - return SPELL_FAILED_REQUIRES_AREA; - - BattleGround *bg = player->GetBattleGround(); - return bg && bg->GetStatus() == STATUS_WAIT_JOIN ? SPELL_CAST_OK : SPELL_FAILED_REQUIRES_AREA; - } - } - - // aura limitations - for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) - { - switch (spellInfo->EffectApplyAuraName[i]) - { - case SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED: - case SPELL_AURA_FLY: - { - if (player && !player->IsKnowHowFlyIn(map_id, zone_id)) - return SPELL_FAILED_INCORRECT_AREA; - } - } - } - - return SPELL_CAST_OK; -} - -void SpellMgr::LoadSkillLineAbilityMap() -{ - mSkillLineAbilityMap.clear(); - - barGoLink bar(sSkillLineAbilityStore.GetNumRows()); - uint32 count = 0; - - for (uint32 i = 0; i < sSkillLineAbilityStore.GetNumRows(); ++i) - { - bar.step(); - SkillLineAbilityEntry const *SkillInfo = sSkillLineAbilityStore.LookupEntry(i); - if (!SkillInfo) - continue; - - mSkillLineAbilityMap.insert(SkillLineAbilityMap::value_type(SkillInfo->spellId,SkillInfo)); - ++count; - } - - sLog.outString(); - sLog.outString(">> Loaded %u SkillLineAbility MultiMap Data", count); -} - -DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellEntry const* spellproto, bool triggered) -{ - // Explicit Diminishing Groups - switch (spellproto->SpellFamilyName) - { - case SPELLFAMILY_GENERIC: - // some generic arena related spells have by some strange reason MECHANIC_TURN - if (spellproto->Mechanic == MECHANIC_TURN) - return DIMINISHING_NONE; - break; - case SPELLFAMILY_MAGE: - { - // Frostbite - if (spellproto->SpellFamilyFlags[1] & 0x80000000) - return DIMINISHING_TRIGGER_ROOT; - //Shattered Barrier: only flag SpellFamilyFlags[0] = 0x00080000 shared - //by most frost spells, using id instead - if (spellproto->Id == 55080) - return DIMINISHING_TRIGGER_ROOT; - // Frost Nova / Freeze (Water Elemental) - if (spellproto->SpellIconID == 193) - return DIMINISHING_CONTROL_ROOT; - break; - } - case SPELLFAMILY_ROGUE: - { - // Sap 0x80 Gouge 0x8 - if (spellproto->SpellFamilyFlags[0] & 0x88) - return DIMINISHING_POLYMORPH; - // Blind - else if (spellproto->SpellFamilyFlags[0] & 0x1000000) - return DIMINISHING_FEAR_BLIND; - // Cheap Shot - else if (spellproto->SpellFamilyFlags[0] & 0x400) - return DIMINISHING_CHEAPSHOT_POUNCE; - // Crippling poison - Limit to 10 seconds in PvP (No SpellFamilyFlags) - else if (spellproto->SpellIconID == 163) - return DIMINISHING_LIMITONLY; - break; - } - case SPELLFAMILY_WARLOCK: - { - // Death Coil - if (spellproto->SpellFamilyFlags[0] & 0x80000) - return DIMINISHING_DEATHCOIL; - // Curses/etc - else if (spellproto->SpellFamilyFlags[0] & 0x80000000) - return DIMINISHING_LIMITONLY; - // Howl of Terror - else if (spellproto->SpellFamilyFlags[1] & 0x8) - return DIMINISHING_FEAR_BLIND; - // Seduction - else if (spellproto->SpellFamilyFlags[0] & 0x40000000) - return DIMINISHING_FEAR_BLIND; - break; - } - case SPELLFAMILY_DRUID: - { - // Pounce - if (spellproto->SpellFamilyFlags[0] & 0x20000) - return DIMINISHING_CHEAPSHOT_POUNCE; - // Cyclone - else if (spellproto->SpellFamilyFlags[1] & 0x20) - return DIMINISHING_CYCLONE; - // Entangling Roots: to force natures grasp proc to be control root - else if (spellproto->SpellFamilyFlags[0] & 0x00000200) - return DIMINISHING_CONTROL_ROOT; - // Faerie Fire - else if (spellproto->SpellFamilyFlags[0] & 0x400) - return DIMINISHING_LIMITONLY; - break; - } - case SPELLFAMILY_WARRIOR: - { - // Hamstring - limit duration to 10s in PvP - if (spellproto->SpellFamilyFlags[0] & 0x2) - return DIMINISHING_LIMITONLY; - // Intimidating Shout - else if (spellproto->SpellFamilyFlags[0] & 0x40000) - return DIMINISHING_FEAR_BLIND; - // Charge Stun - else if (spellproto->SpellFamilyFlags[0] & 0x01000000) - return DIMINISHING_NONE; - break; - } - case SPELLFAMILY_PALADIN: - { - // Repentance - if (spellproto->SpellFamilyFlags[0] & 0x4) - return DIMINISHING_POLYMORPH; - break; - } - case SPELLFAMILY_PRIEST: - { - // Vampiric Embrace - if ((spellproto->SpellFamilyFlags[0] & 0x4) && spellproto->SpellIconID == 150) - return DIMINISHING_LIMITONLY; - break; - } - case SPELLFAMILY_DEATHKNIGHT: - { - // Hungering Cold (no flags) - if (spellproto->SpellIconID == 2797) - return DIMINISHING_POLYMORPH; - // Mark of Blood - else if ((spellproto->SpellFamilyFlags[0] & 0x10000000) - && spellproto->SpellIconID == 2285) - return DIMINISHING_LIMITONLY; - break; - } - case SPELLFAMILY_HUNTER: - { - // Hunter's mark - if ((spellproto->SpellFamilyFlags[0] & 0x400) && spellproto->SpellIconID == 538) - return DIMINISHING_LIMITONLY; - break; - } - default: - break; - } - - // Get by mechanic - uint32 mechanic = GetAllSpellMechanicMask(spellproto); - if (mechanic == MECHANIC_NONE) return DIMINISHING_NONE; - if (mechanic & ((1<<MECHANIC_STUN) | - (1<<MECHANIC_SHACKLE))) return triggered ? DIMINISHING_TRIGGER_STUN : DIMINISHING_CONTROL_STUN; - if (mechanic & ((1<<MECHANIC_SLEEP) | - (1<<MECHANIC_FREEZE))) return DIMINISHING_FREEZE_SLEEP; - if (mechanic & (1<<MECHANIC_POLYMORPH)) return DIMINISHING_POLYMORPH; - if (mechanic & (1<<MECHANIC_ROOT)) return triggered ? DIMINISHING_TRIGGER_ROOT : DIMINISHING_CONTROL_ROOT; - if (mechanic & ((1<<MECHANIC_FEAR) | - (1<<MECHANIC_TURN))) return DIMINISHING_FEAR_BLIND; - if (mechanic & (1<<MECHANIC_CHARM)) return DIMINISHING_CHARM; - if (mechanic & (1<<MECHANIC_SILENCE)) return DIMINISHING_SILENCE; - if (mechanic & (1<<MECHANIC_DISARM)) return DIMINISHING_DISARM; - if (mechanic & (1<<MECHANIC_FREEZE)) return DIMINISHING_FREEZE_SLEEP; - if (mechanic & ((1<<MECHANIC_KNOCKOUT) | - (1<<MECHANIC_SAPPED))) return DIMINISHING_KNOCKOUT; - if (mechanic & (1<<MECHANIC_BANISH)) return DIMINISHING_BANISH; - if (mechanic & (1<<MECHANIC_HORROR)) return DIMINISHING_DEATHCOIL; - - // Get by effect - for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) - { - if (spellproto->EffectApplyAuraName[i] == SPELL_AURA_MOD_TAUNT) - return DIMINISHING_TAUNT; - } - return DIMINISHING_NONE; -} - -int32 GetDiminishingReturnsLimitDuration(DiminishingGroup group, SpellEntry const* spellproto) -{ - if (!IsDiminishingReturnsGroupDurationLimited(group)) - return 0; - - // Explicit diminishing duration - switch(spellproto->SpellFamilyName) - { - case SPELLFAMILY_HUNTER: - { - // Wyvern Sting - if (spellproto->SpellFamilyFlags[1] & 0x1000) - return 6 * IN_MILISECONDS; - // Hunter's Mark - if (spellproto->SpellFamilyFlags[0] & 0x400) - return 120 * IN_MILISECONDS; - break; - } - case SPELLFAMILY_PALADIN: - { - // Repentance - limit to 6 seconds in PvP - if (spellproto->SpellFamilyFlags[0] & 0x4) - return 6 * IN_MILISECONDS; - break; - } - case SPELLFAMILY_DRUID: - { - // Faerie Fire - limit to 40 seconds in PvP (3.1) - if (spellproto->SpellFamilyFlags[0] & 0x400) - return 40 * IN_MILISECONDS; - break; - } - case SPELLFAMILY_PRIEST: - { - // Vampiric Embrace - limit to 60 seconds in PvP (3.1) - if ((spellproto->SpellFamilyFlags[0] & 0x4) && spellproto->SpellIconID == 150) - return 60 * IN_MILISECONDS; - break; - } - default: - break; - } - - return 10 * IN_MILISECONDS; -} - -bool IsDiminishingReturnsGroupDurationLimited(DiminishingGroup group) -{ - switch(group) - { - case DIMINISHING_CONTROL_STUN: - case DIMINISHING_TRIGGER_STUN: - case DIMINISHING_FREEZE_SLEEP: - case DIMINISHING_CONTROL_ROOT: - case DIMINISHING_TRIGGER_ROOT: - case DIMINISHING_FEAR_BLIND: - case DIMINISHING_CHARM: - case DIMINISHING_POLYMORPH: - case DIMINISHING_KNOCKOUT: - case DIMINISHING_CYCLONE: - case DIMINISHING_BANISH: - case DIMINISHING_LIMITONLY: - case DIMINISHING_CHEAPSHOT_POUNCE: - return true; - default: - return false; - } -} - -DiminishingLevels GetDiminishingReturnsMaxLevel(DiminishingGroup group) -{ - switch(group) - { - case DIMINISHING_TAUNT: - return DIMINISHING_LEVEL_TAUNT_IMMUNE; - default: - return DIMINISHING_LEVEL_IMMUNE; - } -} - -DiminishingReturnsType GetDiminishingReturnsGroupType(DiminishingGroup group) -{ - switch(group) - { - case DIMINISHING_TAUNT: - case DIMINISHING_CONTROL_STUN: - case DIMINISHING_TRIGGER_STUN: - case DIMINISHING_CHEAPSHOT_POUNCE: - case DIMINISHING_CYCLONE: - return DRTYPE_ALL; - case DIMINISHING_FEAR_BLIND: - case DIMINISHING_CONTROL_ROOT: - case DIMINISHING_TRIGGER_ROOT: - case DIMINISHING_CHARM: - case DIMINISHING_POLYMORPH: - case DIMINISHING_SILENCE: - case DIMINISHING_DISARM: - case DIMINISHING_DEATHCOIL: - case DIMINISHING_FREEZE_SLEEP: - case DIMINISHING_BANISH: - case DIMINISHING_KNOCKOUT: - return DRTYPE_PLAYER; - default: - break; - } - - return DRTYPE_NONE; -} - -bool SpellArea::IsFitToRequirements(Player const* player, uint32 newZone, uint32 newArea) const -{ - if (gender != GENDER_NONE) // not in expected gender - if (!player || gender != player->getGender()) - return false; - - if (raceMask) // not in expected race - if (!player || !(raceMask & player->getRaceMask())) - return false; - - if (areaId) // not in expected zone - if (newZone != areaId && newArea != areaId) - return false; - - if (questStart) // not in expected required quest state - if (!player || (!questStartCanActive || !player->IsActiveQuest(questStart)) && !player->GetQuestRewardStatus(questStart)) - return false; - - if (questEnd) // not in expected forbidden quest state - if (!player || player->GetQuestRewardStatus(questEnd)) - return false; - - if (auraSpell) // not have expected aura - if (!player || auraSpell > 0 && !player->HasAura(auraSpell) || auraSpell < 0 && player->HasAura(-auraSpell)) - return false; - - // Extra conditions -- leaving the possibility add extra conditions... - switch(spellId) - { - case 58600: // No fly Zone - Dalaran (Krasus Landing exception) - if (!player || player->GetAreaId() == 4564 || !player->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) && !player->HasAuraType(SPELL_AURA_FLY) || player->HasAura(44795)) - return false; - break; - } - - return true; -} - -//-----------TRINITY------------- - -bool SpellMgr::CanAurasStack(SpellEntry const *spellInfo_1, SpellEntry const *spellInfo_2, bool sameCaster) const -{ - SpellSpecific spellSpec_1 = GetSpellSpecific(spellInfo_1); - SpellSpecific spellSpec_2 = GetSpellSpecific(spellInfo_2); - if (spellSpec_1 && spellSpec_2) - if (IsSingleFromSpellSpecificPerTarget(spellSpec_1, spellSpec_2) - || sameCaster && IsSingleFromSpellSpecificPerCaster(spellSpec_1, spellSpec_2)) - return false; - - SpellGroupStackRule stackRule = CheckSpellGroupStackRules(spellInfo_1->Id, spellInfo_2->Id); - if (stackRule) - { - if (stackRule == SPELL_GROUP_STACK_RULE_EXCLUSIVE) - return false; - if (sameCaster && stackRule == SPELL_GROUP_STACK_RULE_EXCLUSIVE_FROM_SAME_CASTER) - return false; - } - - if (spellInfo_1->SpellFamilyName != spellInfo_2->SpellFamilyName) - return true; - - if (!sameCaster) - { - if (spellInfo_1->AttributesEx & SPELL_ATTR_EX_STACK_FOR_DIFF_CASTERS - || spellInfo_1->AttributesEx3 & SPELL_ATTR_EX3_STACK_FOR_DIFF_CASTERS) - return true; - - // check same periodic auras - for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) - { - switch(spellInfo_1->EffectApplyAuraName[i]) - { - // DOT or HOT from different casters will stack - case SPELL_AURA_PERIODIC_DAMAGE: - case SPELL_AURA_PERIODIC_HEAL: - case SPELL_AURA_PERIODIC_TRIGGER_SPELL: - case SPELL_AURA_PERIODIC_ENERGIZE: - case SPELL_AURA_PERIODIC_MANA_LEECH: - case SPELL_AURA_PERIODIC_LEECH: - case SPELL_AURA_POWER_BURN_MANA: - case SPELL_AURA_OBS_MOD_POWER: - case SPELL_AURA_OBS_MOD_HEALTH: - case SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE: - return true; - default: - break; - } - } - } - - uint32 spellId_1 = GetLastSpellInChain(spellInfo_1->Id); - uint32 spellId_2 = GetLastSpellInChain(spellInfo_2->Id); - - // same spell - if (spellId_1 == spellId_2) - { - // Hack for Incanter's Absorption - if (spellId_1 == 44413) - return true; - // same spell with same caster should not stack - return false; - } - - // use icon to check generic spells - if (!spellInfo_1->SpellFamilyName) - { - if (!spellInfo_1->SpellIconID || spellInfo_1->SpellIconID == 1 - || spellInfo_1->SpellIconID != spellInfo_2->SpellIconID) - return true; - } - // use familyflag to check class spells - else - { - if (!spellInfo_1->SpellFamilyFlags - || spellInfo_1->SpellFamilyFlags != spellInfo_2->SpellFamilyFlags) - return true; - } - - //use data of highest rank spell(needed for spells which ranks have different effects) - spellInfo_1 = sSpellStore.LookupEntry(spellId_1); - spellInfo_2 = sSpellStore.LookupEntry(spellId_2); - - //if spells do not have the same effect or aura or miscvalue, they will stack - for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) - if (spellInfo_1->Effect[i] != spellInfo_2->Effect[i] - || spellInfo_1->EffectApplyAuraName[i] != spellInfo_2->EffectApplyAuraName[i] - || spellInfo_1->EffectMiscValue[i] != spellInfo_2->EffectMiscValue[i]) // paladin resist aura - return true; // need itemtype check? need an example to add that check - - // different spells with same effect - return false; -} - -bool IsDispelableBySpell(SpellEntry const * dispelSpell, uint32 spellId, bool def) -{ - if (!dispelSpell) return false; - SpellEntry const *spellproto = sSpellStore.LookupEntry(spellId); - if (!spellproto) return false; - - // Cyclone etc.. - if (spellproto->AttributesEx & SPELL_ATTR_EX_UNAFFECTED_BY_SCHOOL_IMMUNE) - return false; - - if (dispelSpell->Attributes & SPELL_ATTR_UNAFFECTED_BY_INVULNERABILITY) - return true; - - return def; -} - -void SpellMgr::LoadSpellEnchantProcData() -{ - mSpellEnchantProcEventMap.clear(); // need for reload case - - uint32 count = 0; - - // 0 1 2 3 - QueryResult_AutoPtr result = WorldDatabase.Query("SELECT entry, customChance, PPMChance, procEx FROM spell_enchant_proc_data"); - if (!result) - { - barGoLink bar(1); - - bar.step(); - - sLog.outString(); - sLog.outString(">> Loaded %u spell enchant proc event conditions", count); - return; - } - - barGoLink bar(result->GetRowCount()); - do - { - Field *fields = result->Fetch(); - - bar.step(); - - uint32 enchantId = fields[0].GetUInt32(); - - SpellItemEnchantmentEntry const *ench = sSpellItemEnchantmentStore.LookupEntry(enchantId); - if (!ench) - { - sLog.outErrorDb("Enchancment %u listed in `spell_enchant_proc_data` does not exist", enchantId); - continue; - } - - SpellEnchantProcEntry spe; - - spe.customChance = fields[1].GetUInt32(); - spe.PPMChance = fields[2].GetFloat(); - spe.procEx = fields[3].GetUInt32(); - - mSpellEnchantProcEventMap[enchantId] = spe; - - ++count; - } while (result->NextRow()); - - sLog.outString(); - sLog.outString(">> Loaded %u enchant proc data definitions", count); -} - -void SpellMgr::LoadSpellRequired() -{ - mSpellsReqSpell.clear(); // need for reload case - mSpellReq.clear(); // need for reload case - - QueryResult_AutoPtr result = WorldDatabase.Query("SELECT spell_id, req_spell from spell_required"); - - if (!result) - { - barGoLink bar(1); - bar.step(); - - sLog.outString(); - sLog.outString(">> Loaded 0 spell required records"); - sLog.outErrorDb("`spell_required` table is empty!"); - return; - } - uint32 rows = 0; - - barGoLink bar(result->GetRowCount()); - do - { - bar.step(); - Field *fields = result->Fetch(); - - uint32 spell_id = fields[0].GetUInt32(); - uint32 spell_req = fields[1].GetUInt32(); - // check if chain is made with valid first spell - SpellEntry const * spell = sSpellStore.LookupEntry(spell_id); - if (!spell) - { - sLog.outErrorDb("spell_id %u in `spell_required` table is not found in dbcs, skipped", spell_id); - continue; - } - SpellEntry const * req_spell = sSpellStore.LookupEntry(spell_req); - if (!req_spell) - { - sLog.outErrorDb("req_spell %u in `spell_required` table is not found in dbcs, skipped", spell_req); - continue; - } - if (GetFirstSpellInChain(spell_id) == GetFirstSpellInChain(spell_req)) - { - sLog.outErrorDb("req_spell %u and spell_id %u in `spell_required` table are ranks of the same spell, entry not needed, skipped", spell_req, spell_id); - continue; - } - if (IsSpellRequiringSpell(spell_id, spell_req)) - { - sLog.outErrorDb("duplicated entry of req_spell %u and spell_id %u in `spell_required`, skipped", spell_req, spell_id); - continue; - } - - mSpellReq.insert (std::pair<uint32, uint32>(spell_id, spell_req)); - mSpellsReqSpell.insert (std::pair<uint32, uint32>(spell_req, spell_id)); - ++rows; - } while (result->NextRow()); - - sLog.outString(); - sLog.outString(">> Loaded %u spell required records", rows); -} - -void SpellMgr::LoadSpellRanks() -{ - mSpellChains.clear(); // need for reload case - - QueryResult_AutoPtr result = WorldDatabase.Query("SELECT first_spell_id, spell_id, rank from spell_ranks ORDER BY first_spell_id , rank"); - - if (!result) - { - barGoLink bar(1); - bar.step(); - - sLog.outString(); - sLog.outString(">> Loaded 0 spell rank records"); - sLog.outErrorDb("`spell_ranks` table is empty!"); - return; - } - - barGoLink bar(result->GetRowCount()); - - uint32 rows = 0; - bool finished = false; - - do - { - // spellid, rank - std::list < std::pair < int32, int32 > > rankChain; - int32 currentSpell = -1; - int32 lastSpell = -1; - - // fill one chain - while (currentSpell == lastSpell && !finished) - { - Field *fields = result->Fetch(); - - currentSpell = fields[0].GetUInt32(); - if (lastSpell == -1) - lastSpell = currentSpell; - uint32 spell_id = fields[1].GetUInt32(); - uint32 rank = fields[2].GetUInt32(); - - // don't drop the row if we're moving to the next rank - if (currentSpell == lastSpell) - { - bar.step(); - rankChain.push_back(std::make_pair(spell_id, rank)); - if (!result->NextRow()) - finished = true; - } - else - break; - } - // check if chain is made with valid first spell - SpellEntry const * first = sSpellStore.LookupEntry(lastSpell); - if (!first) - { - sLog.outErrorDb("Spell rank identifier(first_spell_id) %u listed in `spell_ranks` does not exist!", lastSpell); - continue; - } - // check if chain is long enough - if (rankChain.size() < 2) - { - sLog.outErrorDb("There is only 1 spell rank for identifier(first_spell_id) %u in `spell_ranks`, entry is not needed!", lastSpell); - continue; - } - int32 curRank = 0; - bool valid = true; - // check spells in chain - for (std::list<std::pair<int32, int32> >::iterator itr = rankChain.begin() ; itr!= rankChain.end(); ++itr) - { - SpellEntry const * spell = sSpellStore.LookupEntry(itr->first); - if (!spell) - { - sLog.outErrorDb("Spell %u (rank %u) listed in `spell_ranks` for chain %u does not exist!", itr->first, itr->second, lastSpell); - valid = false; - break; - } - ++curRank; - if (itr->second != curRank) - { - sLog.outErrorDb("Spell %u (rank %u) listed in `spell_ranks` for chain %u does not have proper rank value(should be %u)!", itr->first, itr->second, lastSpell, curRank); - valid = false; - break; - } - } - if (!valid) - continue; - int32 prevRank = 0; - // insert the chain - std::list<std::pair<int32, int32> >::iterator itr = rankChain.begin(); - do - { - ++rows; - int32 addedSpell = itr->first; - mSpellChains[addedSpell].first = lastSpell; - mSpellChains[addedSpell].last = rankChain.back().first; - mSpellChains[addedSpell].rank = itr->second; - mSpellChains[addedSpell].prev = prevRank; - prevRank = addedSpell; - ++itr; - if (itr == rankChain.end()) - { - mSpellChains[addedSpell].next = 0; - break; - } - else - mSpellChains[addedSpell].next = itr->first; - } - while (true); - } while (!finished); - - sLog.outString(); - sLog.outString(">> Loaded %u spell rank records", rows); -} - -// set data in core for now -void SpellMgr::LoadSpellCustomAttr() -{ - mSpellCustomAttr.resize(GetSpellStore()->GetNumRows()); - - barGoLink bar(GetSpellStore()->GetNumRows()); - - uint32 count = 0; - - SpellEntry *spellInfo; - for (uint32 i = 0; i < GetSpellStore()->GetNumRows(); ++i) - { - bar.step(); - - mSpellCustomAttr[i] = 0; - spellInfo = (SpellEntry*)GetSpellStore()->LookupEntry(i); - if (!spellInfo) - continue; - - for (uint8 j = 0; j < MAX_SPELL_EFFECTS; ++j) - { - switch (spellInfo->Effect[j]) - { - case SPELL_EFFECT_SCHOOL_DAMAGE: - case SPELL_EFFECT_WEAPON_DAMAGE: - case SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL: - case SPELL_EFFECT_NORMALIZED_WEAPON_DMG: - case SPELL_EFFECT_WEAPON_PERCENT_DAMAGE: - case SPELL_EFFECT_HEAL: - mSpellCustomAttr[i] |= SPELL_ATTR_CU_DIRECT_DAMAGE; - count++; - break; - case SPELL_EFFECT_CHARGE: - case SPELL_EFFECT_JUMP: - case SPELL_EFFECT_JUMP2: - case SPELL_EFFECT_LEAP_BACK: - if (!spellInfo->speed && !spellInfo->SpellFamilyName) - spellInfo->speed = SPEED_CHARGE; - mSpellCustomAttr[i] |= SPELL_ATTR_CU_CHARGE; - count++; - break; - case SPELL_EFFECT_PICKPOCKET: - mSpellCustomAttr[i] |= SPELL_ATTR_CU_PICKPOCKET; - break; - case SPELL_EFFECT_TRIGGER_SPELL: - if (IsPositionTarget(spellInfo->EffectImplicitTargetA[j]) || - spellInfo->Targets & (TARGET_FLAG_SOURCE_LOCATION|TARGET_FLAG_DEST_LOCATION)) - spellInfo->Effect[j] = SPELL_EFFECT_TRIGGER_MISSILE; - count++; - break; - } - - switch (SpellTargetType[spellInfo->EffectImplicitTargetA[j]]) - { - case TARGET_TYPE_UNIT_TARGET: - case TARGET_TYPE_DEST_TARGET: - spellInfo->Targets |= TARGET_FLAG_UNIT; - count++; - break; - } - } - - for (uint8 j = 0; j < MAX_SPELL_EFFECTS; ++j) - { - switch (spellInfo->EffectApplyAuraName[j]) - { - case SPELL_AURA_MOD_POSSESS: - case SPELL_AURA_MOD_CONFUSE: - case SPELL_AURA_MOD_CHARM: - case SPELL_AURA_AOE_CHARM: - case SPELL_AURA_MOD_FEAR: - case SPELL_AURA_MOD_STUN: - mSpellCustomAttr[i] |= SPELL_ATTR_CU_AURA_CC; - count++; - break; - } - } - - if (!_isPositiveEffect(i, 0, false)) - { - mSpellCustomAttr[i] |= SPELL_ATTR_CU_NEGATIVE_EFF0; - count++; - } - if (!_isPositiveEffect(i, 1, false)) - { - mSpellCustomAttr[i] |= SPELL_ATTR_CU_NEGATIVE_EFF1; - count++; - } - if (!_isPositiveEffect(i, 2, false)) - { - mSpellCustomAttr[i] |= SPELL_ATTR_CU_NEGATIVE_EFF2; - count++; - } - - if (spellInfo->SpellVisual[0] == 3879) - { - mSpellCustomAttr[i] |= SPELL_ATTR_CU_CONE_BACK; - count++; - } - - if (spellInfo->activeIconID == 2158) // flight - { - spellInfo->Attributes |= SPELL_ATTR_PASSIVE; - count++; - } - - switch(i) - { - // Bind - case 3286: - spellInfo->EffectImplicitTargetA[0] = TARGET_UNIT_TARGET_ENEMY; - spellInfo->EffectImplicitTargetA[1] = TARGET_UNIT_TARGET_ENEMY; - count++; - break; - // Heroism - case 32182: - spellInfo->excludeCasterAuraSpell = 57723; // Exhaustion - count++; - break; - // Blazing Harpoon - case 61588: - spellInfo->MaxAffectedTargets = 1; - count++; - break; - // Bloodlust - case 2825: - spellInfo->excludeCasterAuraSpell = 57724; // Sated - count++; - break; - // Heart of the Crusader - case 20335: - case 20336: - case 20337: - // Glyph of Life Tap - case 63320: - // Entries were not updated after spell effect change, we have to do that manually :/ - spellInfo->AttributesEx3 |= SPELL_ATTR_EX3_CAN_PROC_TRIGGERED; - count++; - break; - case 16007: // Draco-Incarcinatrix 900 - // was 46, but effect is aura effect - spellInfo->EffectImplicitTargetA[0] = TARGET_UNIT_NEARBY_ENTRY; - spellInfo->EffectImplicitTargetB[0] = TARGET_DST_NEARBY_ENTRY; - count++; - break; - case 26029: // dark glare - case 37433: // spout - case 43140: case 43215: // flame breath - mSpellCustomAttr[i] |= SPELL_ATTR_CU_CONE_LINE; - count++; - break; - case 24340: case 26558: case 28884: // Meteor - case 36837: case 38903: case 41276: // Meteor - case 57467: // Meteor - case 26789: // Shard of the Fallen Star - case 31436: // Malevolent Cleave - case 35181: // Dive Bomb - case 40810: case 43267: case 43268: // Saber Lash - case 42384: // Brutal Swipe - case 45150: // Meteor Slash - case 64422: case 64688: // Sonic Screech - case 72373: // Shared Suffering - // ONLY SPELLS WITH SPELLFAMILY_GENERIC and EFFECT_SCHOOL_DAMAGE - mSpellCustomAttr[i] |= SPELL_ATTR_CU_SHARE_DAMAGE; - count++; - break; - case 59725: // Improved Spell Reflection - aoe aura - // Target entry seems to be wrong for this spell :/ - spellInfo->EffectImplicitTargetA[0] = TARGET_UNIT_PARTY_CASTER; - spellInfo->EffectRadiusIndex[0] = 45; - count++; - break; - case 27820: // Mana Detonation - //case 28062: case 39090: // Positive/Negative Charge - //case 28085: case 39093: - mSpellCustomAttr[i] |= SPELL_ATTR_CU_EXCLUDE_SELF; - count++; - break; - case 44978: case 45001: case 45002: // Wild Magic - case 45004: case 45006: case 45010: // Wild Magic - case 31347: // Doom - case 41635: // Prayer of Mending - case 44869: // Spectral Blast - case 45027: // Revitalize - case 45976: // Muru Portal Channel - case 39365: // Thundering Storm - case 41071: // Raise Dead (HACK) - case 52124: // Sky Darkener Assault - spellInfo->MaxAffectedTargets = 1; - count++; - break; - case 52479: // Gift of the Harvester - spellInfo->MaxAffectedTargets = 1; - // a trap always has dst = src? - spellInfo->EffectImplicitTargetA[0] = TARGET_DST_CASTER; - spellInfo->EffectImplicitTargetA[1] = TARGET_DST_CASTER; - count++; - break; - case 41376: // Spite - case 39992: // Needle Spine - case 29576: // Multi-Shot - case 40816: // Saber Lash - case 37790: // Spread Shot - case 46771: // Flame Sear - case 45248: // Shadow Blades - case 41303: // Soul Drain - case 54172: // Divine Storm (heal) - case 29213: // Curse of the Plaguebringer - Noth - case 28542: // Life Drain - Sapphiron - spellInfo->MaxAffectedTargets = 3; - count++; - break; - case 38310: // Multi-Shot - case 53385: // Divine Storm (Damage) - spellInfo->MaxAffectedTargets = 4; - count++; - break; - case 42005: // Bloodboil - case 38296: // Spitfire Totem - case 37676: // Insidious Whisper - case 46008: // Negative Energy - case 45641: // Fire Bloom - case 55665: // Life Drain - Sapphiron (H) - case 28796: // Poison Bolt Volly - Faerlina - spellInfo->MaxAffectedTargets = 5; - count++; - break; - case 40827: // Sinful Beam - case 40859: // Sinister Beam - case 40860: // Vile Beam - case 40861: // Wicked Beam - case 54835: // Curse of the Plaguebringer - Noth (H) - case 54098: // Poison Bolt Volly - Faerlina (H) - spellInfo->MaxAffectedTargets = 10; - count++; - break; - case 38794: case 33711: //Murmur's Touch - spellInfo->MaxAffectedTargets = 1; - spellInfo->EffectTriggerSpell[0] = 33760; - count++; - break; - case 17941: // Shadow Trance - case 22008: // Netherwind Focus - case 31834: // Light's Grace - case 34754: // Clearcasting - case 34936: // Backlash - case 48108: // Hot Streak - case 51124: // Killing Machine - case 54741: // Firestarter - case 57761: // Fireball! - case 39805: // Lightning Overload - case 52437: // Sudden Death - case 64823: // Item - Druid T8 Balance 4P Bonus - case 44401: - spellInfo->procCharges = 1; - count++; - break; - case 53390: // Tidal Wave - spellInfo->procCharges = 2; - count++; - break; - case 44544: // Fingers of Frost - spellInfo->procCharges = 2; - spellInfo->EffectSpellClassMask[0] = flag96(685904631,1151048,0); - count++; - break; - case 28200: // Ascendance (Talisman of Ascendance trinket) - spellInfo->procCharges = 6; - count++; - break; - case 51852: // The Eye of Acherus (no spawn in phase 2 in db) - spellInfo->EffectMiscValue[0] |= 1; - count++; - break; - case 52025: // Cleansing Totem Effect - spellInfo->EffectDieSides[1] = 1; - count++; - break; - case 51904: // Summon Ghouls On Scarlet Crusade (core does not know the triggered spell is summon spell) - spellInfo->EffectImplicitTargetA[0] = TARGET_UNIT_CASTER; - count++; - break; - case 29809: // Desecration Arm - 36 instead of 37 - typo? :/ - spellInfo->EffectRadiusIndex[0] = 37; - count++; - break; - // Master Shapeshifter: missing stance data for forms other than bear - bear version has correct data - // To prevent aura staying on target after talent unlearned - case 48420: - spellInfo->Stances = 1 << (FORM_CAT - 1); - count++; - break; - case 48421: - spellInfo->Stances = 1 << (FORM_MOONKIN - 1); - count++; - break; - case 48422: - spellInfo->Stances = 1 << (FORM_TREE - 1); - count++; - break; - case 30421: // Nether Portal - Perseverence - spellInfo->EffectBasePoints[2] += 30000; - count++; - break; - // some dummy spell only has dest, should push caster in this case - case 62324: // Throw Passenger - spellInfo->Targets |= TARGET_FLAG_CASTER; - count++; - break; - case 51735: // Ebon Plague - case 51734: - case 51726: - spellInfo->SpellFamilyFlags[2] = 0x10; - count++; - break; - // cleansing totem pulse when it is spawned - case 8172: - spellInfo->AttributesEx5 |= SPELL_ATTR_EX5_START_PERIODIC_AT_APPLY; - count++; - break; - case 41013: // Parasitic Shadowfiend Passive - spellInfo->EffectApplyAuraName[0] = 4; // proc debuff, and summon infinite fiends - count++; - break; - case 27892: // To Anchor 1 - case 27928: // To Anchor 1 - case 27935: // To Anchor 1 - case 27915: // Anchor to Skulls - case 27931: // Anchor to Skulls - case 27937: // Anchor to Skulls - spellInfo->rangeIndex = 13; - count++; - break; - case 62374: // Pursued - spellInfo->MaxAffectedTargets = 1; - count++; - break; - case 48743: // Death Pact - spellInfo->AttributesEx &= ~SPELL_ATTR_EX_CANT_TARGET_SELF; - count++; - break; - // target allys instead of enemies, target A is src_caster, spells with effect like that have ally target - // this is the only known exception, probably just wrong data - case 29214: // Wrath of the Plaguebringer - case 54836: // Wrath of the Plaguebringer - spellInfo->EffectImplicitTargetB[0] = TARGET_UNIT_AREA_ALLY_SRC; - spellInfo->EffectImplicitTargetB[1] = TARGET_UNIT_AREA_ALLY_SRC; - count++; - break; - case 31687: // Summon Water Elemental - // 322-330 switch - effect changed to dummy, target entry not changed in client:( - spellInfo->EffectImplicitTargetA[0] = TARGET_UNIT_CASTER; - count++; - break; - case 25771: // Forbearance - wrong mechanic immunity in DBC since 3.0.x - spellInfo->EffectMiscValue[0] = MECHANIC_IMMUNE_SHIELD; - count++; - break; - case 42442: // Vengeance Landing Cannonfire - spellInfo->MaxAffectedTargets = 1; - count++; - break; - case 45863: // Cosmetic - Incinerate to Random Target - spellInfo->MaxAffectedTargets = 1; - count++; - break; - case 25425: // Shoot - spellInfo->MaxAffectedTargets = 1; - count++; - break; - case 45761: // Shoot - spellInfo->MaxAffectedTargets = 1; - count++; - break; - case 42611: // Shoot - spellInfo->MaxAffectedTargets = 1; - count++; - break; - case 66588: // Flaming Spear - spellInfo->MaxAffectedTargets = 3; - count++; - break; - case 53651: - spellInfo->AttributesEx3 |= SPELL_ATTR_EX3_NO_INITIAL_AGGRO; - count++; - break; - case 61306: // Kirin Tor Commendation Badge - case 61308: // Wyrmrest Commendation Badge - case 61311: // Argent Crusade Commendation Badge - case 61312: // Ebon Blade Commendadtion Badge - case 69757: // Sons of Hodir Commendation Badge - spellInfo->EffectBasePoints[0] = 519; // Some suggest a global multiplier is used for rep gain - count++; // but basepoints * 1,3 hard coded in the tooltip says - break; // otherwise. - default: - break; - } - - switch(spellInfo->SpellFamilyName) - { - case SPELLFAMILY_WARRIOR: - // Shout - if (spellInfo->SpellFamilyFlags[0] & 0x20000 || spellInfo->SpellFamilyFlags[1] & 0x20) - mSpellCustomAttr[i] |= SPELL_ATTR_CU_AURA_CC; - else - break; - count++; - break; - case SPELLFAMILY_DRUID: - // Starfall Target Selection - if (spellInfo->SpellFamilyFlags[2] & 0x100) - spellInfo->MaxAffectedTargets = 2; - // Starfall AOE Damage - else if (spellInfo->SpellFamilyFlags[2] & 0x800000) - mSpellCustomAttr[i] |= SPELL_ATTR_CU_EXCLUDE_SELF; - // Roar - else if (spellInfo->SpellFamilyFlags[0] & 0x8) - mSpellCustomAttr[i] |= SPELL_ATTR_CU_AURA_CC; - else - break; - count++; - break; - // Do not allow Deadly throw and Slice and Dice to proc twice - case SPELLFAMILY_ROGUE: - if (spellInfo->SpellFamilyFlags[1] & 0x1 || spellInfo->SpellFamilyFlags[0] & 0x40000) - spellInfo->AttributesEx4 |= SPELL_ATTR_EX4_CANT_PROC_FROM_SELFCAST; - else - break; - count++; - break; - } - } - - SummonPropertiesEntry *properties = const_cast<SummonPropertiesEntry*>(sSummonPropertiesStore.LookupEntry(121)); - properties->Type = SUMMON_TYPE_TOTEM; - properties = const_cast<SummonPropertiesEntry*>(sSummonPropertiesStore.LookupEntry(647)); // 52893 - properties->Type = SUMMON_TYPE_TOTEM; - - CreatureAI::FillAISpellInfo(); - - sLog.outString(); - sLog.outString(">> Loaded %u custom spell attributes", count); -} - -// Fill custom data about enchancments -void SpellMgr::LoadEnchantCustomAttr() -{ - uint32 size = sSpellItemEnchantmentStore.GetNumRows(); - mEnchantCustomAttr.resize(size); - - barGoLink bar(GetSpellStore()->GetNumRows()); - - uint32 count = 0; - - for (uint32 i = 0; i < size; ++i) - mEnchantCustomAttr[i] = 0; - - for (uint32 i = 0; i < GetSpellStore()->GetNumRows(); ++i) - { - bar.step(); - - SpellEntry * spellInfo = (SpellEntry*)GetSpellStore()->LookupEntry(i); - if (!spellInfo) - continue; - - // TODO: find a better check - if (!(spellInfo->AttributesEx2 & SPELL_ATTR_EX2_UNK13) || !(spellInfo->Attributes & SPELL_ATTR_NOT_SHAPESHIFT)) - continue; - - for (uint32 j = 0; j < MAX_SPELL_EFFECTS; ++j) - { - if (spellInfo->Effect[j] == SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY) - { - uint32 enchId = spellInfo->EffectMiscValue[j]; - SpellItemEnchantmentEntry const *ench = sSpellItemEnchantmentStore.LookupEntry(enchId); - if (!ench) - continue; - mEnchantCustomAttr[enchId] = true; - count++; - break; - } - } - } - - sLog.outString(); - sLog.outString(">> Loaded %u custom enchant attributes", count); -} - -bool SpellMgr::IsSkillTypeSpell(uint32 spellId, SkillType type) const -{ - SkillLineAbilityMapBounds bounds = GetSkillLineAbilityMapBounds(spellId); - - for (SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx) - if (_spell_idx->second->skillId == uint32(type)) - return true; - - return false; -} - -void SpellMgr::LoadSpellLinked() -{ - mSpellLinkedMap.clear(); // need for reload case - uint32 count = 0; - - // 0 1 2 - QueryResult_AutoPtr result = WorldDatabase.Query("SELECT spell_trigger, spell_effect, type FROM spell_linked_spell"); - if (!result) - { - barGoLink bar(1); - bar.step(); - sLog.outString(); - sLog.outString(">> Loaded %u linked spells", count); - return; - } - - barGoLink bar(result->GetRowCount()); - - do - { - Field *fields = result->Fetch(); - - bar.step(); - - int32 trigger = fields[0].GetInt32(); - int32 effect = fields[1].GetInt32(); - int32 type = fields[2].GetInt32(); - - SpellEntry const* spellInfo = sSpellStore.LookupEntry(abs(trigger)); - if (!spellInfo) - { - sLog.outErrorDb("Spell %u listed in `spell_linked_spell` does not exist", abs(trigger)); - continue; - } - spellInfo = sSpellStore.LookupEntry(abs(effect)); - if (!spellInfo) - { - sLog.outErrorDb("Spell %u listed in `spell_linked_spell` does not exist", abs(effect)); - continue; - } - - if (trigger > 0) - { - switch(type) - { - case 0: mSpellCustomAttr[trigger] |= SPELL_ATTR_CU_LINK_CAST; break; - case 1: mSpellCustomAttr[trigger] |= SPELL_ATTR_CU_LINK_HIT; break; - case 2: mSpellCustomAttr[trigger] |= SPELL_ATTR_CU_LINK_AURA; break; - } - } - else - { - mSpellCustomAttr[-trigger] |= SPELL_ATTR_CU_LINK_REMOVE; - } - - if (type) //we will find a better way when more types are needed - { - if (trigger > 0) - trigger += SPELL_LINKED_MAX_SPELLS * type; - else - trigger -= SPELL_LINKED_MAX_SPELLS * type; - } - mSpellLinkedMap[trigger].push_back(effect); - - ++count; - } while (result->NextRow()); - - sLog.outString(); - sLog.outString(">> Loaded %u linked spells", count); -} |