Files
Viano-Core/src/server/game/Entities/Creature/GossipDef.cpp
T
ariel- e34e3f379f Merge remote-tracking branch 'tc/3.3.5' into 4.3.4
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
2016-01-15 00:15:35 -03:00

777 lines
30 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/>.
*/
#include "QuestDef.h"
#include "GossipDef.h"
#include "ObjectMgr.h"
#include "WorldSession.h"
#include "Formulas.h"
GossipMenu::GossipMenu()
{
_menuId = 0;
_locale = DEFAULT_LOCALE;
_senderGUID.Clear();
}
GossipMenu::~GossipMenu()
{
ClearMenu();
}
void GossipMenu::AddMenuItem(int32 menuItemId, uint8 icon, std::string const& message, uint32 sender, uint32 action, std::string const& boxMessage, uint32 boxMoney, bool coded /*= false*/)
{
ASSERT(_menuItems.size() <= GOSSIP_MAX_MENU_ITEMS);
// Find a free new id - script case
if (menuItemId == -1)
{
menuItemId = 0;
if (!_menuItems.empty())
{
for (GossipMenuItemContainer::const_iterator itr = _menuItems.begin(); itr != _menuItems.end(); ++itr)
{
if (int32(itr->first) > menuItemId)
break;
menuItemId = itr->first + 1;
}
}
}
GossipMenuItem& menuItem = _menuItems[menuItemId];
menuItem.MenuItemIcon = icon;
menuItem.Message = message;
menuItem.IsCoded = coded;
menuItem.Sender = sender;
menuItem.OptionType = action;
menuItem.BoxMessage = boxMessage;
menuItem.BoxMoney = boxMoney;
}
/**
* @name AddMenuItem
* @brief Adds a localized gossip menu item from db by menu id and menu item id.
* @param menuId Gossip menu id.
* @param menuItemId Gossip menu item id.
* @param sender Identifier of the current menu.
* @param action Custom action given to OnGossipHello.
*/
void GossipMenu::AddMenuItem(uint32 menuId, uint32 menuItemId, uint32 sender, uint32 action)
{
/// Find items for given menu id.
GossipMenuItemsMapBounds bounds = sObjectMgr->GetGossipMenuItemsMapBounds(menuId);
/// Return if there are none.
if (bounds.first == bounds.second)
return;
/// Iterate over each of them.
for (GossipMenuItemsContainer::const_iterator itr = bounds.first; itr != bounds.second; ++itr)
{
/// Find the one with the given menu item id.
if (itr->second.OptionIndex != menuItemId)
continue;
/// Store texts for localization.
std::string strOptionText, strBoxText;
BroadcastText const* optionBroadcastText = sObjectMgr->GetBroadcastText(itr->second.OptionBroadcastTextId);
BroadcastText const* boxBroadcastText = sObjectMgr->GetBroadcastText(itr->second.BoxBroadcastTextId);
/// OptionText
if (optionBroadcastText)
strOptionText = optionBroadcastText->GetText(GetLocale());
else
strOptionText = itr->second.OptionText;
/// BoxText
if (boxBroadcastText)
strBoxText = boxBroadcastText->GetText(GetLocale());
else
strBoxText = itr->second.BoxText;
/// Check need of localization.
if (GetLocale() != DEFAULT_LOCALE)
{
if (!optionBroadcastText)
{
/// Find localizations from database.
if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuItemId)))
ObjectMgr::GetLocaleString(gossipMenuLocale->OptionText, GetLocale(), strOptionText);
}
if (!boxBroadcastText)
{
/// Find localizations from database.
if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuItemId)))
ObjectMgr::GetLocaleString(gossipMenuLocale->BoxText, GetLocale(), strBoxText);
}
}
/// Add menu item with existing method. Menu item id -1 is also used in ADD_GOSSIP_ITEM macro.
AddMenuItem(-1, itr->second.OptionIcon, strOptionText, sender, action, strBoxText, itr->second.BoxMoney, itr->second.BoxCoded);
}
}
void GossipMenu::AddGossipMenuItemData(uint32 menuItemId, uint32 gossipActionMenuId, uint32 gossipActionPoi)
{
GossipMenuItemData& itemData = _menuItemData[menuItemId];
itemData.GossipActionMenuId = gossipActionMenuId;
itemData.GossipActionPoi = gossipActionPoi;
}
uint32 GossipMenu::GetMenuItemSender(uint32 menuItemId) const
{
GossipMenuItemContainer::const_iterator itr = _menuItems.find(menuItemId);
if (itr == _menuItems.end())
return 0;
return itr->second.Sender;
}
uint32 GossipMenu::GetMenuItemAction(uint32 menuItemId) const
{
GossipMenuItemContainer::const_iterator itr = _menuItems.find(menuItemId);
if (itr == _menuItems.end())
return 0;
return itr->second.OptionType;
}
bool GossipMenu::IsMenuItemCoded(uint32 menuItemId) const
{
GossipMenuItemContainer::const_iterator itr = _menuItems.find(menuItemId);
if (itr == _menuItems.end())
return false;
return itr->second.IsCoded;
}
void GossipMenu::ClearMenu()
{
_menuItems.clear();
_menuItemData.clear();
}
PlayerMenu::PlayerMenu(WorldSession* session) : _session(session)
{
if (_session)
_gossipMenu.SetLocale(_session->GetSessionDbLocaleIndex());
}
PlayerMenu::~PlayerMenu()
{
ClearMenus();
}
void PlayerMenu::ClearMenus()
{
_gossipMenu.ClearMenu();
_questMenu.ClearMenu();
}
void PlayerMenu::SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID)
{
_gossipMenu.SetSenderGUID(objectGUID);
WorldPacket data(SMSG_GOSSIP_MESSAGE, 100); // guess size
data << uint64(objectGUID);
data << uint32(_gossipMenu.GetMenuId()); // new 2.4.0
data << uint32(titleTextId);
data << uint32(_gossipMenu.GetMenuItemCount()); // max count 0x10
for (GossipMenuItemContainer::const_iterator itr = _gossipMenu.GetMenuItems().begin(); itr != _gossipMenu.GetMenuItems().end(); ++itr)
{
GossipMenuItem const& item = itr->second;
data << uint32(itr->first);
data << uint8(item.MenuItemIcon);
data << uint8(item.IsCoded); // makes pop up box password
data << uint32(item.BoxMoney); // money required to open menu, 2.0.3
data << item.Message; // text for gossip item
data << item.BoxMessage; // accept text (related to money) pop up box, 2.0.3
}
size_t count_pos = data.wpos();
data << uint32(0); // max count 0x20
uint32 count = 0;
// Store this instead of checking the Singleton every loop iteration
bool questLevelInTitle = sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS);
for (uint8 i = 0; i < _questMenu.GetMenuItemCount(); ++i)
{
QuestMenuItem const& item = _questMenu.GetItem(i);
uint32 questID = item.QuestId;
if (Quest const* quest = sObjectMgr->GetQuestTemplate(questID))
{
++count;
data << uint32(questID);
data << uint32(item.QuestIcon);
data << int32(quest->GetQuestLevel());
data << uint32(quest->GetFlags()); // 3.3.3 quest flags
data << uint8(0); // 3.3.3 changes icon: blue question or yellow exclamation
std::string title = quest->GetTitle();
int32 locale = _session->GetSessionDbLocaleIndex();
if (locale >= 0)
if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(questID))
ObjectMgr::GetLocaleString(localeData->Title, locale, title);
if (questLevelInTitle)
AddQuestLevelToTitle(title, quest->GetQuestLevel());
data << title; // max 0x200
}
}
data.put<uint8>(count_pos, count);
_session->SendPacket(&data);
}
void PlayerMenu::SendCloseGossip()
{
_gossipMenu.SetSenderGUID(ObjectGuid::Empty);
WorldPacket data(SMSG_GOSSIP_COMPLETE, 0);
_session->SendPacket(&data);
}
void PlayerMenu::SendPointOfInterest(uint32 poiId) const
{
PointOfInterest const* poi = sObjectMgr->GetPointOfInterest(poiId);
if (!poi)
{
TC_LOG_ERROR("sql.sql", "Request to send non-existing POI (Id: %u), ignored.", poiId);
return;
}
std::string iconText = poi->icon_name;
int32 locale = _session->GetSessionDbLocaleIndex();
if (locale >= 0)
if (PointOfInterestLocale const* localeData = sObjectMgr->GetPointOfInterestLocale(poiId))
ObjectMgr::GetLocaleString(localeData->IconName, locale, iconText);
WorldPacket data(SMSG_GOSSIP_POI, 4 + 4 + 4 + 4 + 4 + 10); // guess size
data << uint32(poi->flags);
data << float(poi->x);
data << float(poi->y);
data << uint32(poi->icon);
data << uint32(poi->data);
data << iconText;
_session->SendPacket(&data);
}
/*********************************************************/
/*** QUEST SYSTEM ***/
/*********************************************************/
QuestMenu::QuestMenu()
{
_questMenuItems.reserve(16); // can be set for max from most often sizes to speedup push_back and less memory use
}
QuestMenu::~QuestMenu()
{
ClearMenu();
}
void QuestMenu::AddMenuItem(uint32 QuestId, uint8 Icon)
{
if (!sObjectMgr->GetQuestTemplate(QuestId))
return;
ASSERT(_questMenuItems.size() <= GOSSIP_MAX_MENU_ITEMS);
QuestMenuItem questMenuItem;
questMenuItem.QuestId = QuestId;
questMenuItem.QuestIcon = Icon;
_questMenuItems.push_back(questMenuItem);
}
bool QuestMenu::HasItem(uint32 questId) const
{
for (QuestMenuItemList::const_iterator i = _questMenuItems.begin(); i != _questMenuItems.end(); ++i)
if (i->QuestId == questId)
return true;
return false;
}
void QuestMenu::ClearMenu()
{
_questMenuItems.clear();
}
void PlayerMenu::SendQuestGiverQuestList(QEmote const& eEmote, const std::string& Title, ObjectGuid npcGUID)
{
WorldPacket data(SMSG_QUESTGIVER_QUEST_LIST, 100); // guess size
data << uint64(npcGUID);
data << Title;
data << uint32(eEmote._Delay); // player emote
data << uint32(eEmote._Emote); // NPC emote
size_t count_pos = data.wpos();
data << uint8 (0);
uint32 count = 0;
// Store this instead of checking the Singleton every loop iteration
bool questLevelInTitle = sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS);
for (uint32 i = 0; i < _questMenu.GetMenuItemCount(); ++i)
{
QuestMenuItem const& qmi = _questMenu.GetItem(i);
uint32 questID = qmi.QuestId;
if (Quest const* quest = sObjectMgr->GetQuestTemplate(questID))
{
++count;
std::string title = quest->GetTitle();
int32 locale = _session->GetSessionDbLocaleIndex();
if (locale >= 0)
if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(questID))
ObjectMgr::GetLocaleString(localeData->Title, locale, title);
if (questLevelInTitle)
AddQuestLevelToTitle(title, quest->GetQuestLevel());
data << uint32(questID);
data << uint32(qmi.QuestIcon);
data << int32(quest->GetQuestLevel());
data << uint32(quest->GetFlags()); // 3.3.3 quest flags
data << uint8(0); // 3.3.3 changes icon: blue question or yellow exclamation
data << title;
}
}
data.put<uint8>(count_pos, count);
_session->SendPacket(&data);
TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_QUEST_LIST NPC=%s", npcGUID.ToString().c_str());
}
void PlayerMenu::SendQuestGiverStatus(uint32 questStatus, ObjectGuid npcGUID) const
{
WorldPacket data(SMSG_QUESTGIVER_STATUS, 8 + 4);
data << uint64(npcGUID);
data << uint32(questStatus);
_session->SendPacket(&data);
TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_STATUS NPC=%s, status=%u", npcGUID.ToString().c_str(), questStatus);
}
void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGUID, bool activateAccept) const
{
std::string questTitle = quest->GetTitle();
std::string questDetails = quest->GetDetails();
std::string questObjectives = quest->GetObjectives();
std::string questAreaDescription = quest->GetAreaDescription();
std::string questGiverTextWindow = quest->GetQuestGiverTextWindow();
std::string questGiverTargetName = quest->GetQuestGiverTargetName();
std::string questTurnTextWindow = quest->GetQuestTurnTextWindow();
std::string questTurnTargetName = quest->GetQuestTurnTargetName();
int32 locale = _session->GetSessionDbLocaleIndex();
if (locale >= 0)
{
if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
{
ObjectMgr::GetLocaleString(localeData->Title, locale, questTitle);
ObjectMgr::GetLocaleString(localeData->Details, locale, questDetails);
ObjectMgr::GetLocaleString(localeData->Objectives, locale, questObjectives);
ObjectMgr::GetLocaleString(localeData->AreaDescription, locale, questAreaDescription);
ObjectMgr::GetLocaleString(localeData->QuestGiverTextWindow, locale, questGiverTextWindow);
ObjectMgr::GetLocaleString(localeData->QuestGiverTargetName, locale, questGiverTargetName);
ObjectMgr::GetLocaleString(localeData->QuestTurnTextWindow, locale, questTurnTextWindow);
ObjectMgr::GetLocaleString(localeData->QuestTurnTargetName, locale, questTurnTargetName);
}
}
if (sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS))
AddQuestLevelToTitle(questTitle, quest->GetQuestLevel());
WorldPacket data(SMSG_QUESTGIVER_QUEST_DETAILS, 100); // guess size
data << uint64(npcGUID);
data << uint64(_session->GetPlayer()->GetDivider());
data << uint32(quest->GetQuestId());
data << questTitle;
data << questDetails;
data << questObjectives;
data << questGiverTextWindow; // 4.x
data << questGiverTargetName; // 4.x
data << questTurnTextWindow; // 4.x
data << questTurnTargetName; // 4.x
data << uint32(quest->GetQuestGiverPortrait()); // 4.x
data << uint32(quest->GetQuestTurnInPortrait()); // 4.x
data << uint8(activateAccept ? 1 : 0); // auto finish
data << uint32(quest->GetFlags()); // 3.3.3 questFlags
data << uint32(quest->GetSuggestedPlayers());
data << uint8(0); // IsFinished? value is sent back to server in quest accept packet
data << uint8(quest->HasFlag(QUEST_FLAGS_AUTO_ACCEPT) ? 1 : 0); // 4.x Starts at AreaTrigger
data << uint32(quest->GetRequiredSpell()); // 4.x
quest->BuildExtraQuestInfo(data, _session->GetPlayer());
data << uint32(QUEST_EMOTE_COUNT);
for (uint8 i = 0; i < QUEST_EMOTE_COUNT; ++i)
{
data << uint32(quest->DetailsEmote[i]);
data << uint32(quest->DetailsEmoteDelay[i]); // DetailsEmoteDelay (in ms)
}
_session->SendPacket(&data);
TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_QUEST_DETAILS NPC=%s, questid=%u", npcGUID.ToString().c_str(), quest->GetQuestId());
}
void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
{
std::string questTitle = quest->GetTitle();
std::string questDetails = quest->GetDetails();
std::string questObjectives = quest->GetObjectives();
std::string questAreaDescription = quest->GetAreaDescription();
std::string questCompletedText = quest->GetCompletedText();
std::string questGiverTextWindow = quest->GetQuestGiverTextWindow();
std::string questGiverTargetName = quest->GetQuestGiverTargetName();
std::string questTurnTextWindow = quest->GetQuestTurnTextWindow();
std::string questTurnTargetName = quest->GetQuestTurnTargetName();
std::string questObjectiveText[QUEST_OBJECTIVES_COUNT];
for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
questObjectiveText[i] = quest->ObjectiveText[i];
int32 locale = _session->GetSessionDbLocaleIndex();
if (locale >= 0)
{
if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
{
ObjectMgr::GetLocaleString(localeData->Title, locale, questTitle);
ObjectMgr::GetLocaleString(localeData->Details, locale, questDetails);
ObjectMgr::GetLocaleString(localeData->Objectives, locale, questObjectives);
ObjectMgr::GetLocaleString(localeData->AreaDescription, locale, questAreaDescription);
ObjectMgr::GetLocaleString(localeData->CompletedText, locale, questCompletedText);
ObjectMgr::GetLocaleString(localeData->QuestGiverTextWindow, locale, questGiverTextWindow);
ObjectMgr::GetLocaleString(localeData->QuestGiverTargetName, locale, questGiverTargetName);
ObjectMgr::GetLocaleString(localeData->QuestTurnTextWindow, locale, questTurnTextWindow);
ObjectMgr::GetLocaleString(localeData->QuestTurnTargetName, locale, questTurnTargetName);
for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
ObjectMgr::GetLocaleString(localeData->ObjectiveText[i], locale, questObjectiveText[i]);
}
}
WorldPacket data(SMSG_QUEST_QUERY_RESPONSE, 100); // guess size
data << uint32(quest->GetQuestId()); // quest id
data << uint32(quest->GetQuestMethod()); // Accepted values: 0, 1 or 2. 0 == IsAutoComplete() (skip objectives/details)
data << uint32(quest->GetQuestLevel()); // may be -1, static data, in other cases must be used dynamic level: Player::GetQuestLevel (0 is not known, but assuming this is no longer valid for quest intended for client)
data << uint32(quest->GetMinLevel()); // min level
data << uint32(quest->GetZoneOrSort()); // zone or sort to display in quest log
data << uint32(quest->GetType()); // quest type
data << uint32(quest->GetSuggestedPlayers()); // suggested players count
data << uint32(quest->GetRepObjectiveFaction()); // shown in quest log as part of quest objective
data << uint32(quest->GetRepObjectiveValue()); // shown in quest log as part of quest objective
data << uint32(quest->GetRepObjectiveFaction2()); // shown in quest log as part of quest objective OPPOSITE faction
data << uint32(quest->GetRepObjectiveValue2()); // shown in quest log as part of quest objective OPPOSITE faction
data << uint32(quest->GetNextQuestInChain()); // client will request this quest from NPC, if not 0
data << uint32(quest->GetXPId()); // used for calculating rewarded experience
if (quest->HasFlag(QUEST_FLAGS_HIDDEN_REWARDS))
data << uint32(0); // Hide money rewarded
else
data << uint32(quest->GetRewOrReqMoney()); // reward money (below max lvl)
data << uint32(quest->GetRewMoneyMaxLevel()); // used in XP calculation at client
data << uint32(quest->GetRewSpell()); // reward spell, this spell will display (icon) (cast if RewSpellCast == 0)
data << int32(quest->GetRewSpellCast()); // cast spell
// rewarded honor points
data << uint32(quest->GetRewHonorAddition());
data << float(quest->GetRewHonorMultiplier());
data << uint32(quest->GetSrcItemId()); // source item id
data << uint32(quest->GetFlags()); // quest flags
data << uint32(quest->GetMinimapTargetMark()); // minimap target mark (skull, etc. missing enum)
data << uint32(quest->GetCharTitleId()); // CharTitleId, new 2.4.0, player gets this title (id from CharTitles)
data << uint32(quest->GetPlayersSlain()); // players slain
data << uint32(quest->GetBonusTalents()); // bonus talents
data << uint32(quest->GetRewArenaPoints()); // bonus arena points FIXME: arena points were removed, right?
data << uint32(quest->GetRewardSkillId()); // reward skill id
data << uint32(quest->GetRewardSkillPoints()); // reward skill points
data << uint32(quest->GetRewardReputationMask()); // rep mask (unsure on what it does)
data << uint32(quest->GetQuestGiverPortrait()); // quest giver entry ?
data << uint32(quest->GetQuestTurnInPortrait()); // quest turnin entry ?
if (quest->HasFlag(QUEST_FLAGS_HIDDEN_REWARDS))
{
for (uint8 i = 0; i < QUEST_REWARDS_COUNT; ++i)
data << uint32(0) << uint32(0);
for (uint8 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
data << uint32(0) << uint32(0);
}
else
{
for (uint8 i = 0; i < QUEST_REWARDS_COUNT; ++i)
{
data << uint32(quest->RewardItemId[i]);
data << uint32(quest->RewardItemIdCount[i]);
}
for (uint8 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
{
data << uint32(quest->RewardChoiceItemId[i]);
data << uint32(quest->RewardChoiceItemCount[i]);
}
}
for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // reward factions ids
data << uint32(quest->RewardFactionId[i]);
for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // columnid+1 QuestFactionReward.dbc?
data << int32(quest->RewardFactionValueId[i]);
for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // unknown usage
data << int32(quest->RewardFactionValueIdOverride[i]);
data << uint32(quest->GetPOIContinent());
data << float(quest->GetPOIx());
data << float(quest->GetPOIy());
data << uint32(quest->GetPointOpt());
if (sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS))
AddQuestLevelToTitle(questTitle, quest->GetQuestLevel());
data << questTitle;
data << questObjectives;
data << questDetails;
data << questAreaDescription;
data << questCompletedText; // display in quest objectives window once all objectives are completed
for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
{
if (quest->RequiredNpcOrGo[i] < 0)
data << uint32((quest->RequiredNpcOrGo[i] * (-1)) | 0x80000000); // client expects gameobject template id in form (id|0x80000000)
else
data << uint32(quest->RequiredNpcOrGo[i]);
data << uint32(quest->RequiredNpcOrGoCount[i]);
data << uint32(quest->ItemDrop[i]);
data << uint32(quest->ItemDropQuantity[i]);
}
for (uint8 i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
{
data << uint32(quest->RequiredItemId[i]);
data << uint32(quest->RequiredItemCount[i]);
}
data << uint32(quest->GetRequiredSpell()); // Is it required to be cast, learned or what?
for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
data << questObjectiveText[i];
for (uint32 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i)
{
data << uint32(quest->RewardCurrencyId[i]);
data << uint32(quest->RewardCurrencyCount[i]);
}
for (uint32 i = 0; i < QUEST_REQUIRED_CURRENCY_COUNT; ++i)
{
data << uint32(quest->RequiredCurrencyId[i]);
data << uint32(quest->RequiredCurrencyCount[i]);
}
data << questGiverTextWindow;
data << questGiverTargetName;
data << questTurnTextWindow;
data << questTurnTargetName;
data << uint32(quest->GetSoundAccept());
data << uint32(quest->GetSoundTurnIn());
_session->SendPacket(&data);
TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUEST_QUERY_RESPONSE questid=%u", quest->GetQuestId());
}
void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, ObjectGuid npcGUID, bool enableNext) const
{
std::string questTitle = quest->GetTitle();
std::string questOfferRewardText = quest->GetOfferRewardText();
std::string questGiverTextWindow = quest->GetQuestGiverTextWindow();
std::string questGiverTargetName = quest->GetQuestGiverTargetName();
std::string questTurnTextWindow = quest->GetQuestTurnTextWindow();
std::string questTurnTargetName = quest->GetQuestTurnTargetName();
int32 locale = _session->GetSessionDbLocaleIndex();
if (locale >= 0)
{
if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
{
ObjectMgr::GetLocaleString(localeData->Title, locale, questTitle);
ObjectMgr::GetLocaleString(localeData->OfferRewardText, locale, questOfferRewardText);
ObjectMgr::GetLocaleString(localeData->QuestGiverTextWindow, locale, questGiverTextWindow);
ObjectMgr::GetLocaleString(localeData->QuestGiverTargetName, locale, questGiverTargetName);
ObjectMgr::GetLocaleString(localeData->QuestTurnTextWindow, locale, questTurnTextWindow);
ObjectMgr::GetLocaleString(localeData->QuestTurnTargetName, locale, questTurnTargetName);
}
}
if (sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS))
AddQuestLevelToTitle(questTitle, quest->GetQuestLevel());
WorldPacket data(SMSG_QUESTGIVER_OFFER_REWARD, 50); // guess size
data << uint64(npcGUID);
data << uint32(quest->GetQuestId());
data << questTitle;
data << questOfferRewardText;
data << questGiverTextWindow;
data << questGiverTargetName;
data << questTurnTextWindow;
data << questTurnTargetName;
data << uint32(quest->GetQuestGiverPortrait());
data << uint32(quest->GetQuestTurnInPortrait());
data << uint8(enableNext ? 1 : 0); // Auto Finish
data << uint32(quest->GetFlags()); // 3.3.3 questFlags
data << uint32(quest->GetSuggestedPlayers()); // SuggestedGroupNum
uint32 emoteCount = 0;
for (uint8 i = 0; i < QUEST_EMOTE_COUNT; ++i)
{
if (quest->OfferRewardEmote[i] <= 0)
break;
++emoteCount;
}
data << emoteCount; // Emote Count
for (uint8 i = 0; i < emoteCount; ++i)
{
data << uint32(quest->OfferRewardEmoteDelay[i]); // Delay Emote
data << uint32(quest->OfferRewardEmote[i]);
}
quest->BuildExtraQuestInfo(data, _session->GetPlayer());
_session->SendPacket(&data);
TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_OFFER_REWARD NPC=%s, questid=%u", npcGUID.ToString().c_str(), quest->GetQuestId());
}
void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, ObjectGuid npcGUID, bool canComplete, bool closeOnCancel) const
{
// We can always call to RequestItems, but this packet only goes out if there are actually
// items. Otherwise, we'll skip straight to the OfferReward
std::string questTitle = quest->GetTitle();
std::string requestItemsText = quest->GetRequestItemsText();
int32 locale = _session->GetSessionDbLocaleIndex();
if (locale >= 0)
{
if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
{
ObjectMgr::GetLocaleString(localeData->Title, locale, questTitle);
ObjectMgr::GetLocaleString(localeData->RequestItemsText, locale, requestItemsText);
}
}
if (!quest->GetReqItemsCount() && canComplete)
{
SendQuestGiverOfferReward(quest, npcGUID, true);
return;
}
if (sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS))
AddQuestLevelToTitle(questTitle, quest->GetQuestLevel());
WorldPacket data(SMSG_QUESTGIVER_REQUEST_ITEMS, 50); // guess size
data << uint64(npcGUID);
data << uint32(quest->GetQuestId());
data << questTitle;
data << requestItemsText;
data << uint32(0); // unknown
if (canComplete)
data << quest->GetCompleteEmote();
else
data << quest->GetIncompleteEmote();
// Close Window after cancel
data << uint32(closeOnCancel);
data << uint32(quest->GetFlags()); // 3.3.3 questFlags
data << uint32(quest->GetSuggestedPlayers()); // SuggestedGroupNum
// Required Money
data << uint32(quest->GetRewOrReqMoney() < 0 ? -quest->GetRewOrReqMoney() : 0);
data << uint32(quest->GetReqItemsCount());
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
{
if (!quest->RequiredItemId[i])
continue;
data << uint32(quest->RequiredItemId[i]);
data << uint32(quest->RequiredItemCount[i]);
if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RequiredItemId[i]))
data << uint32(itemTemplate->DisplayInfoID);
else
data << uint32(0);
}
data << uint32(quest->GetReqCurrencyCount());
for (int i = 0; i < QUEST_REQUIRED_CURRENCY_COUNT; ++i)
{
if (!quest->RequiredCurrencyId[i])
continue;
data << uint32(quest->RequiredCurrencyId[i]);
data << uint32(quest->RequiredCurrencyCount[i]);
}
if (!canComplete) // Experimental; there are 6 similar flags, if any of them
data << uint32(0x00); // of them is 0 player can't complete quest (still unknown meaning)
else
data << uint32(0x02);
data << uint32(0x04);
data << uint32(0x08);
data << uint32(0x10);
data << uint32(0x40);
_session->SendPacket(&data);
TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_REQUEST_ITEMS NPC=%s, questid=%u", npcGUID.ToString().c_str(), quest->GetQuestId());
}
void PlayerMenu::AddQuestLevelToTitle(std::string &title, int32 level)
{
// Adds the quest level to the front of the quest title
// example: [13] Westfall Stew
std::stringstream questTitlePretty;
questTitlePretty << "[" << level << "] " << title;
title = questTitlePretty.str();
}