Conflicts: .travis.yml CMakeLists.txt README.md dep/libmpq/CMakeLists.txt doc/UnixInstall.txt revision_data.h.in.cmake sql/base/auth_database.sql sql/base/characters_database.sql sql/base/dev/world_database.sql sql/old/3.3.5a/auth/59_2015_11_07/2015_08_21_00_auth.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_00_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_01_world_335.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_02_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_03_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_04_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_05_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_15_00_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_15_01_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_15_02_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_16_00_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_00_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_01_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_02_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_03_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_04_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_18_00_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_18_01_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_00_world_2015_07_18_04.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_01_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_02_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_03_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_04_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_05_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_20_02_world_2015_07_19_35.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_21_00_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_00_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_01_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_02_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_03_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_04_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_05_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_06_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_07_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_00_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_01_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_02_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_03_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_04_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_00_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_04_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_05_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_06_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_27_00_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_07_27_01_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_02_00_world_335.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_02_01_world_335.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_03_00_world_335.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_00_world_335.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_01_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_02_world_335.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_03_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_04_world_335.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_09_00_world_335.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_00_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_01_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_02_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_03_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_04_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_21_00_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_21_01_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_21_02_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_23_00_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_25_00_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_25_01_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_26_00_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_26_01_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_27_00_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_02_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_03_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_04_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_09_01_00_world_335.sql sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_02_world_335.sql sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_03_world_335.sql sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_05_world_335.sql sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_00_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_01_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_02_world_335.sql sql/old/3.3.5a/world/59_2015_11_07/2015_09_06_00_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_01_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_02_world.sql sql/old/3.3.5a/world/59_2015_11_07/2015_09_10_00_world_335.sql sql/old/3.3.5a/world/59_2015_11_07/2015_09_10_01_world_335.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_14_02_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_14_03_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_14_04_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_14_05_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_15_00_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_15_01_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_15_02_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_16_00_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_17_00_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_17_01_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_17_02_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_17_03_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_17_04_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_18_00_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_18_01_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_19_01_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_19_02_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_19_03_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_19_04_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_19_05_world_from_335.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_21_00_world_from_335.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_24_00_world_from_335.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_24_01_world_from_335.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_24_02_world_from_335.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_24_03_world_from_335.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_24_04_world_from_335.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_24_06_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_24_07_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_25_00_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_25_01_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_25_02_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_25_03_world_from_335.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_25_04_world_from_335.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_26_04_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_26_05_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_27_00_world.sql sql/old/4.3.4/TDB09_to_TDB10_updates/world/2015_07_27_01_world.sql sql/updates/world/2015_07_14_02_world.sql sql/updates/world/2015_07_14_03_world.sql sql/updates/world/2015_07_14_04_world.sql sql/updates/world/2015_07_14_05_world.sql sql/updates/world/2015_07_15_00_world.sql sql/updates/world/2015_07_15_01_world.sql sql/updates/world/2015_07_15_02_world.sql sql/updates/world/2015_07_16_00_world.sql sql/updates/world/2015_07_17_00_world.sql sql/updates/world/2015_07_17_01_world.sql sql/updates/world/2015_07_17_02_world.sql sql/updates/world/2015_07_17_03_world.sql sql/updates/world/2015_07_17_04_world.sql sql/updates/world/2015_07_18_00_world.sql sql/updates/world/2015_07_18_01_world.sql sql/updates/world/2015_07_19_01_world.sql sql/updates/world/2015_07_19_02_world.sql sql/updates/world/2015_07_19_03_world.sql sql/updates/world/2015_07_19_04_world.sql sql/updates/world/2015_07_19_05_world.sql sql/updates/world/2015_07_21_00_world.sql sql/updates/world/2015_07_24_00_world.sql sql/updates/world/2015_07_24_01_world.sql sql/updates/world/2015_07_24_02_world.sql sql/updates/world/2015_07_24_03_world.sql sql/updates/world/2015_07_24_04_world.sql sql/updates/world/2015_07_24_06_world.sql sql/updates/world/2015_07_24_07_world.sql sql/updates/world/2015_07_25_00_world.sql sql/updates/world/2015_07_25_01_world.sql sql/updates/world/2015_07_25_02_world.sql sql/updates/world/2015_07_25_03_world.sql sql/updates/world/2015_07_25_04_world.sql sql/updates/world/2015_07_26_00_world.sql sql/updates/world/2015_07_26_04_world.sql sql/updates/world/2015_07_26_05_world.sql sql/updates/world/2015_07_26_06_world.sql sql/updates/world/2015_07_27_00_world.sql sql/updates/world/2015_07_27_01_world.sql sql/updates/world/2015_07_28_02_world.sql sql/updates/world/2015_07_28_03_world.sql sql/updates/world/2015_08_13_00_world.sql sql/updates/world/2015_08_13_01_world.sql sql/updates/world/2015_08_13_02_world.sql sql/updates/world/2015_08_13_03_world.sql sql/updates/world/2015_08_13_04_world.sql sql/updates/world/2015_08_21_00_world.sql sql/updates/world/2015_08_21_01_world.sql sql/updates/world/2015_08_21_02_world.sql sql/updates/world/2015_08_23_00_world.sql sql/updates/world/2015_08_25_00_world.sql sql/updates/world/2015_08_25_01_world.sql sql/updates/world/2015_08_26_00_world.sql sql/updates/world/2015_08_26_01_world.sql sql/updates/world/2015_08_27_00_world.sql sql/updates/world/2015_08_29_02_world.sql sql/updates/world/2015_08_29_03_world.sql sql/updates/world/2015_08_29_04_world.sql sql/updates/world/2015_09_01_00_world_335.sql sql/updates/world/2015_09_05_00_world.sql sql/updates/world/2015_09_05_01_world.sql sql/updates/world/2015_09_06_00_world.sql sql/updates/world/2015_09_08_01_world.sql sql/updates/world/2015_09_08_02_world.sql sql/updates/world/2015_09_11_00_world_from_335.sql sql/updates/world/2015_09_11_01_world_from_335.sql sql/updates/world/2015_09_11_02_world_from_335.sql sql/updates/world/2015_09_11_03_world_from_335.sql sql/updates/world/2015_09_11_04_world_from_335.sql sql/updates/world/2015_09_11_05_world_from_335.sql sql/updates/world/2015_09_11_06_world_from_335.sql sql/updates/world/2015_09_11_07_world_from_335.sql sql/updates/world/2015_09_11_08_world_from_335.sql sql/updates/world/2015_09_11_09_world_from_335.sql sql/updates/world/2015_09_11_10_world_from_335.sql sql/updates/world/2015_09_11_11_world_from_335.sql sql/updates/world/2015_09_11_12_world_from_335.sql sql/updates/world/2015_09_11_13_world_from_335.sql sql/updates/world/2015_09_11_16_world_from_335.sql sql/updates/world/2015_09_11_17_world_from_335.sql sql/updates/world/2015_09_11_18_world_from_335.sql sql/updates/world/2015_09_11_21_world_from_335.sql sql/updates/world/2015_09_11_40_world_from_335.sql sql/updates/world/2015_09_11_41_world_from_335.sql sql/updates/world/2015_09_11_43_world_from_335.sql sql/updates/world/2015_09_11_51_world_from_335.sql sql/updates/world/2015_09_11_52_world_from_335.sql sql/updates/world/2015_12_14_00_world.sql sql/updates/world/2016_01_01_00_world.sql sql/updates/world/2016_01_01_01_world.sql src/common/Common.h src/common/Cryptography/Authentication/AuthCrypt.cpp src/common/Cryptography/Authentication/AuthCrypt.h src/common/Cryptography/HMACSHA1.cpp src/common/Cryptography/HMACSHA1.h src/server/database/Database/Implementation/CharacterDatabase.cpp src/server/database/Database/Implementation/CharacterDatabase.h src/server/database/Database/Implementation/LoginDatabase.cpp src/server/game/AI/SmartScripts/SmartScript.cpp src/server/game/AI/SmartScripts/SmartScript.h src/server/game/Achievements/AchievementMgr.cpp src/server/game/Battlefield/Battlefield.cpp src/server/game/Battlegrounds/ArenaTeam.cpp src/server/game/Battlegrounds/ArenaTeamMgr.cpp src/server/game/Battlegrounds/Battleground.cpp src/server/game/Battlegrounds/BattlegroundQueue.cpp src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp src/server/game/Chat/Chat.cpp src/server/game/Chat/Chat.h src/server/game/Conditions/ConditionMgr.cpp src/server/game/Conditions/ConditionMgr.h src/server/game/DataStores/DBCStores.cpp src/server/game/DataStores/DBCStructure.h src/server/game/DataStores/DBCfmt.h src/server/game/Entities/Corpse/Corpse.cpp src/server/game/Entities/Creature/Creature.cpp src/server/game/Entities/Creature/Creature.h src/server/game/Entities/Creature/GossipDef.cpp src/server/game/Entities/DynamicObject/DynamicObject.cpp src/server/game/Entities/DynamicObject/DynamicObject.h src/server/game/Entities/GameObject/GameObject.cpp src/server/game/Entities/Object/Object.cpp src/server/game/Entities/Object/ObjectGuid.cpp src/server/game/Entities/Object/ObjectGuid.h src/server/game/Entities/Pet/Pet.cpp src/server/game/Entities/Pet/Pet.h src/server/game/Entities/Player/Player.cpp src/server/game/Entities/Player/Player.h src/server/game/Entities/Transport/Transport.cpp src/server/game/Entities/Transport/Transport.h src/server/game/Entities/Unit/Unit.cpp src/server/game/Events/GameEventMgr.cpp src/server/game/Globals/ObjectAccessor.cpp src/server/game/Globals/ObjectAccessor.h src/server/game/Globals/ObjectMgr.cpp src/server/game/Globals/ObjectMgr.h src/server/game/Grids/GridDefines.h src/server/game/Grids/ObjectGridLoader.cpp src/server/game/Groups/Group.cpp src/server/game/Guilds/Guild.cpp src/server/game/Guilds/Guild.h src/server/game/Guilds/GuildMgr.cpp src/server/game/Guilds/GuildMgr.h src/server/game/Handlers/AuctionHouseHandler.cpp src/server/game/Handlers/BattleGroundHandler.cpp src/server/game/Handlers/CharacterHandler.cpp src/server/game/Handlers/ChatHandler.cpp src/server/game/Handlers/GroupHandler.cpp src/server/game/Handlers/ItemHandler.cpp src/server/game/Handlers/MailHandler.cpp src/server/game/Handlers/MiscHandler.cpp src/server/game/Handlers/QueryHandler.cpp src/server/game/Handlers/QuestHandler.cpp src/server/game/Handlers/ReferAFriendHandler.cpp src/server/game/Handlers/TaxiHandler.cpp src/server/game/Handlers/TradeHandler.cpp src/server/game/Instances/InstanceScript.cpp src/server/game/Maps/Map.cpp src/server/game/Maps/Map.h src/server/game/Maps/MapInstanced.cpp src/server/game/Maps/MapManager.h src/server/game/Maps/TransportMgr.cpp src/server/game/Maps/TransportMgr.h src/server/game/Miscellaneous/Language.h src/server/game/Movement/Waypoints/Path.h src/server/game/OutdoorPvP/OutdoorPvP.cpp src/server/game/OutdoorPvP/OutdoorPvP.h src/server/game/Pools/PoolMgr.cpp src/server/game/Quests/QuestDef.cpp src/server/game/Quests/QuestDef.h src/server/game/Scripting/MapScripts.cpp src/server/game/Scripting/ScriptMgr.cpp src/server/game/Server/WorldSession.cpp src/server/game/Server/WorldSession.h src/server/game/Server/WorldSocket.cpp src/server/game/Server/WorldSocket.h src/server/game/Spells/Auras/SpellAuraEffects.cpp src/server/game/Spells/Auras/SpellAuras.cpp src/server/game/Spells/Spell.cpp src/server/game/Spells/SpellEffects.cpp src/server/game/Spells/SpellHistory.cpp src/server/game/Spells/SpellHistory.h src/server/game/Spells/SpellInfo.cpp src/server/game/Spells/SpellInfo.h src/server/game/Spells/SpellMgr.cpp src/server/game/Tickets/TicketMgr.cpp src/server/game/Tools/PlayerDump.cpp src/server/game/Tools/PlayerDump.h src/server/game/World/World.cpp src/server/scripts/Commands/cs_debug.cpp src/server/scripts/Commands/cs_gobject.cpp src/server/scripts/Commands/cs_misc.cpp src/server/scripts/Commands/cs_mmaps.cpp src/server/scripts/Commands/cs_modify.cpp src/server/scripts/Commands/cs_npc.cpp src/server/scripts/Commands/cs_reload.cpp src/server/scripts/Commands/cs_ticket.cpp src/server/scripts/Commands/cs_wp.cpp src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp src/server/scripts/EasternKingdoms/ZulAman/zulaman.h src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp src/server/scripts/EasternKingdoms/zone_tirisfal_glades.cpp src/server/scripts/Kalimdor/boss_azuregos.cpp src/server/scripts/Kalimdor/zone_azshara.cpp src/server/scripts/Kalimdor/zone_darkshore.cpp src/server/scripts/Kalimdor/zone_felwood.cpp src/server/scripts/Kalimdor/zone_moonglade.cpp src/server/scripts/Kalimdor/zone_orgrimmar.cpp src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp src/server/scripts/OutdoorPvP/OutdoorPvPEP.h src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp src/server/scripts/Spells/spell_dk.cpp src/server/scripts/Spells/spell_druid.cpp src/server/scripts/World/duel_reset.cpp src/server/scripts/World/npc_taxi.cpp src/server/shared/Containers.h src/server/shared/Dynamic/TypeContainer.h src/server/shared/Dynamic/TypeContainerFunctions.h src/server/shared/Dynamic/TypeList.h src/server/shared/Packets/WorldPacket.h src/tools/map_extractor/CMakeLists.txt src/tools/map_extractor/System.cpp src/tools/map_extractor/loadlib.cpp src/tools/map_extractor/loadlib/loadlib.h src/tools/map_extractor/mpq_libmpq.cpp src/tools/map_extractor/mpq_libmpq04.h src/tools/vmap4_extractor/adtfile.cpp src/tools/vmap4_extractor/loadlib/loadlib.h src/tools/vmap4_extractor/mpq_libmpq.cpp src/tools/vmap4_extractor/mpq_libmpq04.h src/tools/vmap4_extractor/vmapexport.cpp src/tools/vmap4_extractor/wdtfile.cpp src/tools/vmap4_extractor/wdtfile.h src/tools/vmap4_extractor/wmo.cpp
363 lines
14 KiB
C++
363 lines
14 KiB
C++
/*
|
|
* Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
|
|
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation; either version 2 of the License, or (at your
|
|
* option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef ObjectGuid_h__
|
|
#define ObjectGuid_h__
|
|
|
|
#include "Common.h"
|
|
#include "ByteBuffer.h"
|
|
#include <type_traits>
|
|
#include <functional>
|
|
|
|
enum TypeID
|
|
{
|
|
TYPEID_OBJECT = 0,
|
|
TYPEID_ITEM = 1,
|
|
TYPEID_CONTAINER = 2,
|
|
TYPEID_UNIT = 3,
|
|
TYPEID_PLAYER = 4,
|
|
TYPEID_GAMEOBJECT = 5,
|
|
TYPEID_DYNAMICOBJECT = 6,
|
|
TYPEID_CORPSE = 7,
|
|
TYPEID_AREATRIGGER = 8
|
|
};
|
|
|
|
#define NUM_CLIENT_OBJECT_TYPES 9
|
|
|
|
enum TypeMask
|
|
{
|
|
TYPEMASK_OBJECT = 0x0001,
|
|
TYPEMASK_ITEM = 0x0002,
|
|
TYPEMASK_CONTAINER = 0x0006, // TYPEMASK_ITEM | 0x0004
|
|
TYPEMASK_UNIT = 0x0008, // creature
|
|
TYPEMASK_PLAYER = 0x0010,
|
|
TYPEMASK_GAMEOBJECT = 0x0020,
|
|
TYPEMASK_DYNAMICOBJECT = 0x0040,
|
|
TYPEMASK_CORPSE = 0x0080,
|
|
TYPEMASK_AREATRIGGER = 0x0100,
|
|
TYPEMASK_SEER = TYPEMASK_PLAYER | TYPEMASK_UNIT | TYPEMASK_DYNAMICOBJECT
|
|
};
|
|
|
|
enum class HighGuid
|
|
{
|
|
Item = 0x400, // blizz 4000
|
|
Container = 0x400, // blizz 4000
|
|
Player = 0x000, // blizz 0000
|
|
GameObject = 0xF11, // blizz F110
|
|
Transport = 0xF12, // blizz F120 (for GAMEOBJECT_TYPE_TRANSPORT)
|
|
Unit = 0xF13, // blizz F130
|
|
Pet = 0xF14, // blizz F140
|
|
Vehicle = 0xF15, // blizz F550
|
|
DynamicObject = 0xF10, // blizz F100
|
|
Corpse = 0xF101, // blizz F100
|
|
AreaTrigger = 0xF102,
|
|
BattleGround = 0x1F1,
|
|
Mo_Transport = 0x1FC, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT)
|
|
Instance = 0x1F4, // blizz 1F40
|
|
Group = 0x1F5,
|
|
Guild = 0x1FF
|
|
};
|
|
|
|
template<HighGuid guid>
|
|
struct ObjectGuidTraits
|
|
{
|
|
static bool const Global = false;
|
|
static bool const MapSpecific = false;
|
|
};
|
|
|
|
#define GUID_TRAIT_GLOBAL(highguid) \
|
|
template<> struct ObjectGuidTraits<highguid> \
|
|
{ \
|
|
static bool const Global = true; \
|
|
static bool const MapSpecific = false; \
|
|
}
|
|
|
|
#define GUID_TRAIT_MAP_SPECIFIC(highguid) \
|
|
template<> struct ObjectGuidTraits<highguid> \
|
|
{ \
|
|
static bool const Global = false; \
|
|
static bool const MapSpecific = true; \
|
|
}
|
|
|
|
GUID_TRAIT_GLOBAL(HighGuid::Mo_Transport);
|
|
GUID_TRAIT_GLOBAL(HighGuid::Group);
|
|
GUID_TRAIT_GLOBAL(HighGuid::Instance);
|
|
GUID_TRAIT_GLOBAL(HighGuid::BattleGround);
|
|
GUID_TRAIT_GLOBAL(HighGuid::Player);
|
|
GUID_TRAIT_GLOBAL(HighGuid::Item);
|
|
GUID_TRAIT_GLOBAL(HighGuid::Transport);
|
|
GUID_TRAIT_GLOBAL(HighGuid::Guild);
|
|
GUID_TRAIT_MAP_SPECIFIC(HighGuid::Unit);
|
|
GUID_TRAIT_MAP_SPECIFIC(HighGuid::Vehicle);
|
|
GUID_TRAIT_MAP_SPECIFIC(HighGuid::Pet);
|
|
GUID_TRAIT_MAP_SPECIFIC(HighGuid::GameObject);
|
|
GUID_TRAIT_MAP_SPECIFIC(HighGuid::DynamicObject);
|
|
GUID_TRAIT_MAP_SPECIFIC(HighGuid::Corpse);
|
|
GUID_TRAIT_MAP_SPECIFIC(HighGuid::AreaTrigger);
|
|
|
|
#undef GUID_TRAIT_GLOBAL
|
|
#undef GUID_TRAIT_REALM_SPECIFIC
|
|
#undef GUID_TRAIT_MAP_SPECIFIC
|
|
|
|
class ObjectGuid;
|
|
class PackedGuid;
|
|
|
|
struct PackedGuidReader
|
|
{
|
|
explicit PackedGuidReader(ObjectGuid& guid) : GuidPtr(&guid) { }
|
|
ObjectGuid* GuidPtr;
|
|
};
|
|
|
|
class ObjectGuid
|
|
{
|
|
public:
|
|
static ObjectGuid const Empty;
|
|
|
|
typedef uint32 LowType;
|
|
|
|
template<HighGuid type>
|
|
static typename std::enable_if<ObjectGuidTraits<type>::Global, ObjectGuid>::type Create(LowType counter) { return Global(type, counter); }
|
|
|
|
template<HighGuid type>
|
|
static typename std::enable_if<ObjectGuidTraits<type>::MapSpecific, ObjectGuid>::type Create(uint32 entry, LowType counter) { return MapSpecific(type, entry, counter); }
|
|
|
|
|
|
ObjectGuid() { _data._guid = UI64LIT(0); }
|
|
explicit ObjectGuid(uint64 guid) { _data._guid = guid; }
|
|
ObjectGuid(HighGuid hi, uint32 entry, uint32 counter) { _data._guid = counter ? uint64(counter) | (uint64(entry) << 32) | (uint64(hi) << ((hi == HighGuid::Corpse || hi == HighGuid::AreaTrigger) ? 48 : 52)) : 0; }
|
|
ObjectGuid(HighGuid hi, uint32 counter) { _data._guid = counter ? uint64(counter) | (uint64(hi) << ((hi == HighGuid::Corpse || hi == HighGuid::AreaTrigger) ? 48 : 52)) : 0; }
|
|
ObjectGuid(ObjectGuid const& r) : _data(r._data) { }
|
|
ObjectGuid(ObjectGuid&& r) : _data(r._data) { }
|
|
|
|
ObjectGuid& operator=(ObjectGuid const& r) { _data = r._data; return *this; }
|
|
ObjectGuid& operator=(ObjectGuid&& r) { _data = r._data; return *this; }
|
|
|
|
operator uint64() const { return _data._guid; }
|
|
PackedGuidReader ReadAsPacked() { return PackedGuidReader(*this); }
|
|
|
|
void Set(uint64 guid) { _data._guid = guid; }
|
|
void Clear() { _data._guid = 0; }
|
|
|
|
PackedGuid WriteAsPacked() const;
|
|
|
|
uint64 GetRawValue() const { return _data._guid; }
|
|
HighGuid GetHigh() const
|
|
{
|
|
HighGuid temp = static_cast<HighGuid>((uint64(_data._guid) >> 48) & 0x0000FFFF);
|
|
return HighGuid((temp == HighGuid::Corpse || temp == HighGuid::AreaTrigger) ? temp : HighGuid(((uint32)temp >> 4) & 0x00000FFF));
|
|
}
|
|
uint32 GetEntry() const { return HasEntry() ? uint32((_data._guid >> 32) & UI64LIT(0x00000000000FFFFF)) : 0; }
|
|
uint32 GetCounter() const
|
|
{
|
|
return uint32(_data._guid & UI64LIT(0x00000000FFFFFFFF));
|
|
}
|
|
|
|
static LowType GetMaxCounter(HighGuid /*high*/)
|
|
{
|
|
return LowType(0xFFFFFFFF);
|
|
}
|
|
|
|
ObjectGuid::LowType GetMaxCounter() const { return GetMaxCounter(GetHigh()); }
|
|
|
|
uint8& operator[](uint32 index)
|
|
{
|
|
ASSERT(index < sizeof(uint64));
|
|
return _data._bytes[index];
|
|
}
|
|
|
|
uint8 const& operator[](uint32 index) const
|
|
{
|
|
ASSERT(index < sizeof(uint64));
|
|
return _data._bytes[index];
|
|
}
|
|
|
|
bool IsEmpty() const { return _data._guid == 0; }
|
|
bool IsCreature() const { return GetHigh() == HighGuid::Unit; }
|
|
bool IsPet() const { return GetHigh() == HighGuid::Pet; }
|
|
bool IsVehicle() const { return GetHigh() == HighGuid::Vehicle; }
|
|
bool IsCreatureOrPet() const { return IsCreature() || IsPet(); }
|
|
bool IsCreatureOrVehicle() const { return IsCreature() || IsVehicle(); }
|
|
bool IsAnyTypeCreature() const { return IsCreature() || IsPet() || IsVehicle(); }
|
|
bool IsPlayer() const { return !IsEmpty() && GetHigh() == HighGuid::Player; }
|
|
bool IsUnit() const { return IsAnyTypeCreature() || IsPlayer(); }
|
|
bool IsItem() const { return GetHigh() == HighGuid::Item; }
|
|
bool IsGameObject() const { return GetHigh() == HighGuid::GameObject; }
|
|
bool IsDynamicObject() const { return GetHigh() == HighGuid::DynamicObject; }
|
|
bool IsCorpse() const { return GetHigh() == HighGuid::Corpse; }
|
|
bool IsAreaTrigger() const { return GetHigh() == HighGuid::AreaTrigger; }
|
|
bool IsBattleground() const { return GetHigh() == HighGuid::BattleGround; }
|
|
bool IsTransport() const { return GetHigh() == HighGuid::Transport; }
|
|
bool IsMOTransport() const { return GetHigh() == HighGuid::Mo_Transport; }
|
|
bool IsAnyTypeGameObject() const { return IsGameObject() || IsTransport() || IsMOTransport(); }
|
|
bool IsInstance() const { return GetHigh() == HighGuid::Instance; }
|
|
bool IsGroup() const { return GetHigh() == HighGuid::Group; }
|
|
bool IsGuild() const { return GetHigh() == HighGuid::Guild; }
|
|
|
|
static TypeID GetTypeId(HighGuid high)
|
|
{
|
|
switch (high)
|
|
{
|
|
case HighGuid::Item: return TYPEID_ITEM;
|
|
//case HighGuid::Container: return TYPEID_CONTAINER; HighGuid::Container==HighGuid::Item currently
|
|
case HighGuid::Unit: return TYPEID_UNIT;
|
|
case HighGuid::Pet: return TYPEID_UNIT;
|
|
case HighGuid::Player: return TYPEID_PLAYER;
|
|
case HighGuid::GameObject: return TYPEID_GAMEOBJECT;
|
|
case HighGuid::DynamicObject: return TYPEID_DYNAMICOBJECT;
|
|
case HighGuid::Corpse: return TYPEID_CORPSE;
|
|
case HighGuid::AreaTrigger: return TYPEID_AREATRIGGER;
|
|
case HighGuid::Mo_Transport: return TYPEID_GAMEOBJECT;
|
|
case HighGuid::Vehicle: return TYPEID_UNIT;
|
|
// unknown
|
|
case HighGuid::Instance:
|
|
case HighGuid::BattleGround:
|
|
case HighGuid::Group:
|
|
case HighGuid::Guild:
|
|
default: return TYPEID_OBJECT;
|
|
}
|
|
}
|
|
|
|
TypeID GetTypeId() const { return GetTypeId(GetHigh()); }
|
|
|
|
bool operator!() const { return IsEmpty(); }
|
|
bool operator== (ObjectGuid const& guid) const { return GetRawValue() == guid.GetRawValue(); }
|
|
bool operator!= (ObjectGuid const& guid) const { return GetRawValue() != guid.GetRawValue(); }
|
|
bool operator< (ObjectGuid const& guid) const { return GetRawValue() < guid.GetRawValue(); }
|
|
|
|
static char const* GetTypeName(HighGuid high);
|
|
char const* GetTypeName() const { return !IsEmpty() ? GetTypeName(GetHigh()) : "None"; }
|
|
std::string ToString() const;
|
|
|
|
private:
|
|
static bool HasEntry(HighGuid high)
|
|
{
|
|
switch (high)
|
|
{
|
|
case HighGuid::Item:
|
|
case HighGuid::Player:
|
|
case HighGuid::DynamicObject:
|
|
case HighGuid::Corpse:
|
|
case HighGuid::Mo_Transport:
|
|
case HighGuid::Instance:
|
|
case HighGuid::Group:
|
|
return false;
|
|
case HighGuid::GameObject:
|
|
case HighGuid::Transport:
|
|
case HighGuid::Unit:
|
|
case HighGuid::Pet:
|
|
case HighGuid::Vehicle:
|
|
default:
|
|
return true;
|
|
}
|
|
}
|
|
|
|
bool HasEntry() const { return HasEntry(GetHigh()); }
|
|
|
|
static ObjectGuid Global(HighGuid type, LowType counter);
|
|
static ObjectGuid MapSpecific(HighGuid type, uint32 entry, LowType counter);
|
|
|
|
explicit ObjectGuid(uint32 const&) = delete; // no implementation, used to catch wrong type assignment
|
|
ObjectGuid(HighGuid, uint32, uint64 counter) = delete; // no implementation, used to catch wrong type assignment
|
|
ObjectGuid(HighGuid, uint64 counter) = delete; // no implementation, used to catch wrong type assignment
|
|
|
|
union
|
|
{
|
|
uint64 _guid;
|
|
uint8 _bytes[sizeof(uint64)];
|
|
} _data;
|
|
};
|
|
|
|
// Some Shared defines
|
|
typedef std::set<ObjectGuid> GuidSet;
|
|
typedef std::list<ObjectGuid> GuidList;
|
|
typedef std::deque<ObjectGuid> GuidDeque;
|
|
typedef std::vector<ObjectGuid> GuidVector;
|
|
typedef std::unordered_set<ObjectGuid> GuidUnorderedSet;
|
|
|
|
// minimum buffer size for packed guid is 9 bytes
|
|
#define PACKED_GUID_MIN_BUFFER_SIZE 9
|
|
|
|
class PackedGuid
|
|
{
|
|
friend ByteBuffer& operator<<(ByteBuffer& buf, PackedGuid const& guid);
|
|
|
|
public:
|
|
explicit PackedGuid() : _packedGuid(PACKED_GUID_MIN_BUFFER_SIZE) { _packedGuid.appendPackGUID(0); }
|
|
explicit PackedGuid(uint64 guid) : _packedGuid(PACKED_GUID_MIN_BUFFER_SIZE) { _packedGuid.appendPackGUID(guid); }
|
|
explicit PackedGuid(ObjectGuid guid) : _packedGuid(PACKED_GUID_MIN_BUFFER_SIZE) { _packedGuid.appendPackGUID(guid.GetRawValue()); }
|
|
|
|
void Set(uint64 guid) { _packedGuid.wpos(0); _packedGuid.appendPackGUID(guid); }
|
|
void Set(ObjectGuid guid) { _packedGuid.wpos(0); _packedGuid.appendPackGUID(guid.GetRawValue()); }
|
|
|
|
size_t size() const { return _packedGuid.size(); }
|
|
|
|
private:
|
|
ByteBuffer _packedGuid;
|
|
};
|
|
|
|
class ObjectGuidGeneratorBase
|
|
{
|
|
public:
|
|
ObjectGuidGeneratorBase(ObjectGuid::LowType start = 1) : _nextGuid(start) { }
|
|
|
|
virtual void Set(ObjectGuid::LowType val) { _nextGuid = val; }
|
|
virtual ObjectGuid::LowType Generate() = 0;
|
|
ObjectGuid::LowType GetNextAfterMaxUsed() const { return _nextGuid; }
|
|
|
|
protected:
|
|
static void HandleCounterOverflow(HighGuid high);
|
|
ObjectGuid::LowType _nextGuid;
|
|
};
|
|
|
|
template<HighGuid high>
|
|
class ObjectGuidGenerator : public ObjectGuidGeneratorBase
|
|
{
|
|
public:
|
|
explicit ObjectGuidGenerator(ObjectGuid::LowType start = 1) : ObjectGuidGeneratorBase(start) { }
|
|
|
|
ObjectGuid::LowType Generate() override
|
|
{
|
|
if (_nextGuid >= ObjectGuid::GetMaxCounter(high) - 1)
|
|
HandleCounterOverflow(high);
|
|
return _nextGuid++;
|
|
}
|
|
};
|
|
|
|
ByteBuffer& operator<<(ByteBuffer& buf, ObjectGuid const& guid);
|
|
ByteBuffer& operator>>(ByteBuffer& buf, ObjectGuid& guid);
|
|
|
|
ByteBuffer& operator<<(ByteBuffer& buf, PackedGuid const& guid);
|
|
ByteBuffer& operator>>(ByteBuffer& buf, PackedGuidReader const& guid);
|
|
|
|
inline PackedGuid ObjectGuid::WriteAsPacked() const { return PackedGuid(*this); }
|
|
|
|
namespace std
|
|
{
|
|
template<>
|
|
struct hash<ObjectGuid>
|
|
{
|
|
public:
|
|
size_t operator()(ObjectGuid const& key) const
|
|
{
|
|
return hash<uint64>()(key.GetRawValue());
|
|
}
|
|
};
|
|
}
|
|
|
|
#endif // ObjectGuid_h__
|