diff --git a/sql/mangos.sql b/sql/mangos.sql index d8d3204d1..b435076d8 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -1425,7 +1425,7 @@ CREATE TABLE `db_version` ( `version` varchar(120) DEFAULT NULL, `creature_ai_version` varchar(120) DEFAULT NULL, `cache_id` int(10) DEFAULT '0', - `required_m12652_command` bit(1) default NULL + `required_12662_01_mangos_hotfix_data` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; /*!40101 SET character_set_client = @saved_cs_client */; @@ -1435,7 +1435,7 @@ CREATE TABLE `db_version` ( LOCK TABLES `db_version` WRITE; /*!40000 ALTER TABLE `db_version` DISABLE KEYS */; -INSERT INTO `db_version` (`version`, `creature_ai_version`, `cache_id`, `required_c12602_01_mangos_npc_spellclick_spells`) VALUES +INSERT INTO `db_version` (`version`, `creature_ai_version`, `cache_id`, `required_12662_01_mangos_hotfix_data`) VALUES ('Mangos default database.','Creature EventAI not provided.',0,NULL); /*!40000 ALTER TABLE `db_version` ENABLE KEYS */; UNLOCK TABLES; @@ -2140,7 +2140,62 @@ INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, /*!40000 ALTER TABLE `gossip_menu_option` ENABLE KEYS */; UNLOCK TABLES; + + -- +-- Table structure for table `hotfix_data` -- + +DROP TABLE IF EXISTS `hotfix_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `hotfix_data` ( + `entry` int(10) unsigned NOT NULL, + `type` int(10) unsigned NOT NULL DEFAULT '0', + `hotfixDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`entry`,`type`,`hotfixDate`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `hotfix_data` +-- + +LOCK TABLES `hotfix_data` WRITE; +/*!40000 ALTER TABLE `hotfix_data` DISABLE KEYS */; +INSERT INTO `hotfix_data` (`entry`, `type`, `hotfixDate`) VALUES +('6948', '1344507586', '2011-11-23 08:34:13'), +('44623', '1344507586', '2011-11-23 08:34:04'), +('44625', '1344507586', '2011-11-23 08:34:04'), +('44626', '1344507586', '2011-11-23 08:34:04'), +('44632', '1344507586', '2011-11-23 08:34:04'), +('44812', '1344507586', '2011-11-23 08:34:00'), +('44834', '1344507586', '2011-11-23 08:34:00'), +('44835', '1344507586', '2011-11-23 08:34:00'), +('44836', '1344507586', '2011-11-23 08:34:00'), +('44837', '1344507586', '2011-11-23 08:34:00'), +('44838', '1344507586', '2011-11-23 08:34:00'), +('44839', '1344507586', '2011-11-23 08:34:00'), +('44840', '1344507586', '2011-11-23 08:34:00'), +('44844', '1344507586', '2011-11-23 08:34:00'), +('44853', '1344507586', '2011-11-23 08:34:00'), +('44854', '1344507586', '2011-11-23 08:34:00'), +('44855', '1344507586', '2011-11-23 08:34:00'), +('44856', '1344507586', '2011-11-23 08:34:00'), +('46784', '1344507586', '2011-11-23 08:34:00'), +('46793', '1344507586', '2011-11-23 08:34:00'), +('46796', '1344507586', '2011-11-23 08:34:00'), +('46797', '1344507586', '2011-11-23 08:34:00'), +('46887', '1344507586', '2011-11-23 08:34:00'), +('46888', '1344507586', '2011-11-23 08:34:00'), +('64488', '1344507586', '2011-11-23 08:34:13'), +('69847', '1344507586', '2011-11-23 08:34:03'), +('69847', '1344507586', '2011-11-23 08:34:06'), +('72068', '1344507586', '2011-11-23 08:34:03'), +('72068', '1344507586', '2011-11-23 08:34:06'); +/*!40000 ALTER TABLE `hotfix_data` ENABLE KEYS */; +UNLOCK TABLES; + +-- -- Table structure for table `instance_encounters` -- diff --git a/sql/updates/12662_01_mangos_hotfix_data.sql b/sql/updates/12662_01_mangos_hotfix_data.sql new file mode 100644 index 000000000..5873b0937 --- /dev/null +++ b/sql/updates/12662_01_mangos_hotfix_data.sql @@ -0,0 +1,38 @@ +ALTER TABLE db_version CHANGE COLUMN required_m12654_command required_12662_01_mangos_hotfix_data bit; + +CREATE TABLE `hotfix_data` ( + `entry` int(10) unsigned NOT NULL, + `type` int(10) unsigned NOT NULL DEFAULT '0', + `hotfixDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`entry`,`type`,`hotfixDate`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +INSERT INTO `hotfix_data` VALUES ('6948', '1344507586', '2011-11-23 08:34:13'); +INSERT INTO `hotfix_data` VALUES ('44623', '1344507586', '2011-11-23 08:34:04'); +INSERT INTO `hotfix_data` VALUES ('44625', '1344507586', '2011-11-23 08:34:04'); +INSERT INTO `hotfix_data` VALUES ('44626', '1344507586', '2011-11-23 08:34:04'); +INSERT INTO `hotfix_data` VALUES ('44632', '1344507586', '2011-11-23 08:34:04'); +INSERT INTO `hotfix_data` VALUES ('44812', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('44834', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('44835', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('44836', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('44837', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('44838', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('44839', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('44840', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('44844', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('44853', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('44854', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('44855', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('44856', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('46784', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('46793', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('46796', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('46797', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('46887', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('46888', '1344507586', '2011-11-23 08:34:00'); +INSERT INTO `hotfix_data` VALUES ('64488', '1344507586', '2011-11-23 08:34:13'); +INSERT INTO `hotfix_data` VALUES ('69847', '1344507586', '2011-11-23 08:34:03'); +INSERT INTO `hotfix_data` VALUES ('69847', '1344507586', '2011-11-23 08:34:06'); +INSERT INTO `hotfix_data` VALUES ('72068', '1344507586', '2011-11-23 08:34:03'); +INSERT INTO `hotfix_data` VALUES ('72068', '1344507586', '2011-11-23 08:34:06'); \ No newline at end of file diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index a7e5d6a27..fb7393113 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -551,6 +551,7 @@ ChatCommand* ChatHandler::getCommandTable() { "gameobject_battleground", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadBattleEventCommand, "", NULL }, { "gossip_menu", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadGossipMenuCommand, "", NULL }, { "gossip_menu_option", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadGossipMenuCommand, "", NULL }, + { "hotfix_data", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadHotfixDataCommand, "", NULL }, { "item_convert", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadItemConvertCommand, "", NULL }, { "item_enchantment_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadItemEnchantementsCommand, "", NULL }, { "item_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesItemCommand, "", NULL }, diff --git a/src/game/Chat.h b/src/game/Chat.h index eef16890a..655bc2e33 100644 --- a/src/game/Chat.h +++ b/src/game/Chat.h @@ -427,6 +427,7 @@ class MANGOS_DLL_SPEC ChatHandler bool HandleReloadGossipMenuCommand(char* args); bool HandleReloadGOQuestRelationsCommand(char* args); bool HandleReloadGOQuestInvRelationsCommand(char* args); + bool HandleReloadHotfixDataCommand(char* args); bool HandleReloadItemConvertCommand(char* args); bool HandleReloadItemEnchantementsCommand(char* args); bool HandleReloadItemRequiredTragetCommand(char* args); diff --git a/src/game/ItemHandler.cpp b/src/game/ItemHandler.cpp index 69420111d..ff85f6a77 100644 --- a/src/game/ItemHandler.cpp +++ b/src/game/ItemHandler.cpp @@ -1315,3 +1315,171 @@ void WorldSession::HandleItemTextQuery(WorldPacket& recv_data) } SendPacket(&data); } + + +void WorldSession::SendItemDb2Reply(uint32 entry) +{ + WorldPacket data(SMSG_DB_REPLY, 44); + ItemPrototype const* proto = sObjectMgr.GetItemPrototype(entry); + if (!proto) + { + data << uint32(-1); // entry + data << uint32(DB2_REPLY_ITEM); + data << uint32(time(NULL)); // hotfix date + data << uint32(0); // size of next block + SendPacket(&data); + return; + } + + data << uint32(entry); + data << uint32(DB2_REPLY_ITEM); + data << uint32(sObjectMgr.GetHotfixDate(entry, DB2_REPLY_ITEM)); + + ByteBuffer buff; + buff << uint32(entry); + buff << uint32(proto->Class); + buff << uint32(proto->SubClass); + buff << int32(proto->Unk0); + buff << uint32(proto->Material); + buff << uint32(proto->DisplayInfoID); + buff << uint32(proto->InventoryType); + buff << uint32(proto->Sheath); + + data << uint32(buff.size()); + data.append(buff); + + SendPacket(&data); +} + +void WorldSession::SendItemSparseDb2Reply(uint32 entry) +{ + WorldPacket data(SMSG_DB_REPLY, 526); + ItemPrototype const* proto = sObjectMgr.GetItemPrototype(entry); + if (!proto) + { + data << uint32(-1); // entry + data << uint32(DB2_REPLY_SPARSE); + data << uint32(time(NULL)); // hotfix date + data << uint32(0); // size of next block + SendPacket(&data); + return; + } + + data << uint32(entry); + data << uint32(DB2_REPLY_SPARSE); + data << uint32(sObjectMgr.GetHotfixDate(entry, DB2_REPLY_SPARSE)); + + ByteBuffer buff; + buff << uint32(entry); + buff << uint32(proto->Quality); + buff << uint32(proto->Flags); + buff << uint32(proto->Flags2); + buff << float(proto->Unknown); + buff << float(proto->Unknown1); + buff << uint32(proto->BuyCount); + buff << int32(proto->BuyPrice); + buff << uint32(proto->SellPrice); + buff << uint32(proto->InventoryType); + buff << int32(proto->AllowableClass); + buff << int32(proto->AllowableRace); + buff << uint32(proto->ItemLevel); + buff << uint32(proto->RequiredLevel); + buff << uint32(proto->RequiredSkill); + buff << uint32(proto->RequiredSkillRank); + buff << uint32(proto->RequiredSpell); + buff << uint32(proto->RequiredHonorRank); + buff << uint32(proto->RequiredCityRank); + buff << uint32(proto->RequiredReputationFaction); + buff << uint32(proto->RequiredReputationRank); + buff << int32(proto->MaxCount); + buff << int32(proto->Stackable); + buff << uint32(proto->ContainerSlots); + + for (uint32 x = 0; x < MAX_ITEM_PROTO_STATS; ++x) + buff << uint32(proto->ItemStat[x].ItemStatType); + + for (uint32 x = 0; x < MAX_ITEM_PROTO_STATS; ++x) + buff << int32(proto->ItemStat[x].ItemStatValue); + + for (uint32 x = 0; x < MAX_ITEM_PROTO_STATS; ++x) + buff << int32(proto->ItemStat[x].ItemStatType2); + + for (uint32 x = 0; x < MAX_ITEM_PROTO_STATS; ++x) + buff << int32(proto->ItemStat[x].ItemStatValue2); + + buff << uint32(proto->ScalingStatDistribution); + buff << uint32(proto->DamageType); + buff << uint32(proto->Delay); + buff << float(proto->RangedModRange); + + for (uint32 x = 0; x < MAX_ITEM_PROTO_SPELLS; ++x) + buff << int32(proto->Spells[x].SpellId); + + for (uint32 x = 0; x < MAX_ITEM_PROTO_SPELLS; ++x) + buff << uint32(proto->Spells[x].SpellTrigger); + + for (uint32 x = 0; x < MAX_ITEM_PROTO_SPELLS; ++x) + buff << int32(proto->Spells[x].SpellCharges); + + for (uint32 x = 0; x < MAX_ITEM_PROTO_SPELLS; ++x) + buff << int32(proto->Spells[x].SpellCooldown); + + for (uint32 x = 0; x < MAX_ITEM_PROTO_SPELLS; ++x) + buff << uint32(proto->Spells[x].SpellCategory); + + for (uint32 x = 0; x < MAX_ITEM_PROTO_SPELLS; ++x) + buff << int32(proto->Spells[x].SpellCategoryCooldown); + + buff << uint32(proto->Bonding); + + // item name + std::string name = proto->Name1; + buff << uint16(name.length()); + if (name.length()) + buff << name; + + for (uint32 i = 0; i < 3; ++i) // other 3 names + buff << uint16(0); + + std::string desc = proto->Description; + buff << uint16(desc.length()); + if (desc.length()) + buff << desc; + + buff << uint32(proto->PageText); + buff << uint32(proto->LanguageID); + buff << uint32(proto->PageMaterial); + buff << uint32(proto->StartQuest); + buff << uint32(proto->LockID); + buff << int32(proto->Material); + buff << uint32(proto->Sheath); + buff << int32(proto->RandomProperty); + buff << int32(proto->RandomSuffix); + buff << uint32(proto->ItemSet); + + buff << uint32(proto->Area); + buff << uint32(proto->Map); + buff << uint32(proto->BagFamily); + buff << uint32(proto->TotemCategory); + + for (uint32 x = 0; x < MAX_ITEM_PROTO_SOCKETS; ++x) + buff << uint32(proto->Socket[x].Color); + + for (uint32 x = 0; x < MAX_ITEM_PROTO_SOCKETS; ++x) + buff << uint32(proto->Socket[x].Content); + + buff << uint32(proto->socketBonus); + buff << uint32(proto->GemProperties); + buff << float(proto->ArmorDamageModifier); + buff << int32(proto->Duration); + buff << uint32(proto->ItemLimitCategory); + buff << uint32(proto->HolidayId); + buff << float(proto->StatScalingFactor); + buff << uint32(proto->Unknown400_1); + buff << uint32(proto->Unknown400_2); + + data << uint32(buff.size()); + data.append(buff); + + SendPacket(&data); +} diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index 9bf98a584..42c15f3ff 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -448,6 +448,14 @@ bool ChatHandler::HandleReloadConditionsCommand(char* /*args*/) return true; } +bool ChatHandler::HandleReloadHotfixDataCommand(char* /*args*/) +{ + sLog.outString("Re-Loading hotfix data..."); + sObjectMgr.LoadHotfixData(); + SendGlobalSysMessage("DB table `hotfix_data` reloaded."); + return true; +} + bool ChatHandler::HandleReloadGossipMenuCommand(char* /*args*/) { sObjectMgr.LoadGossipMenus(); diff --git a/src/game/MiscHandler.cpp b/src/game/MiscHandler.cpp index f02f6adb3..d5a3f62db 100644 --- a/src/game/MiscHandler.cpp +++ b/src/game/MiscHandler.cpp @@ -1525,3 +1525,39 @@ void WorldSession::HandleHearthandResurrect(WorldPacket& /*recv_data*/) _player->ResurrectPlayer(100); _player->TeleportToHomebind(); } + +void WorldSession::HandleRequestHotfix(WorldPacket& recv_data) +{ + uint32 type, count; + recv_data >> type; + + count = recv_data.ReadBits(23); + + std::vector guids; + guids.reserve(count); + + for (uint32 i = 0; i < count; ++i) + recv_data.ReadGuidMask<0, 4, 7, 2, 5, 3, 6, 1>(guids[i]); + + uint32 entry; + for (uint32 i = 0; i < count; ++i) + { + recv_data.ReadGuidBytes<5, 6, 7, 0, 1, 3, 4>(guids[i]); + recv_data >> entry; + recv_data.ReadGuidBytes<2>(guids[i]); + + switch (type) + { + case DB2_REPLY_ITEM: + SendItemDb2Reply(entry); + break; + case DB2_REPLY_SPARSE: + SendItemSparseDb2Reply(entry); + break; + default: + sLog.outError("CMSG_REQUEST_HOTFIX: Received unknown hotfix type: %u", type); + recv_data.rfinish(); + break; + } + } +} diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 762323b4f..221a864a6 100755 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -9961,3 +9961,38 @@ GameObjectDataPair const* FindGOData::GetResult() const return i_anyData; } + +void ObjectMgr::LoadHotfixData() +{ + uint32 count = 0; + m_hotfixData.clear(); + + QueryResult* result = WorldDatabase.Query("SELECT entry, type, UNIX_TIMESTAMP(hotfixDate) FROM hotfix_data"); + if (!result) + { + BarGoLink bar(1); + + bar.step(); + + sLog.outString(">> Loaded %u hotfix info entries. DB table `hotfix_data` is empty.", count); + return; + } + + do + { + Field* fields = result->Fetch(); + + HotfixInfo info; + info.Entry = fields[0].GetUInt32(); + info.Type = fields[1].GetUInt32(); + info.Timestamp = fields[2].GetUInt32(); + m_hotfixData.push_back(info); + ++count; + } + while (result->NextRow()); + + delete result; + + sLog.outString(); + sLog.outString(">> Loaded %u hotfix info entries.", count); +} diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index 929778a98..f3c84bfe3 100755 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -467,6 +467,15 @@ enum SkillRangeType SkillRangeType GetSkillRangeType(SkillLineEntry const* pSkill, bool racial); +struct HotfixInfo +{ + uint32 Type; + uint32 Timestamp; + uint32 Entry; +}; + +typedef std::vector HotfixData; + #define MAX_PLAYER_NAME 12 // max allowed by client name length #define MAX_INTERNAL_PLAYER_NAME 15 // max server internal player name length ( > MAX_PLAYER_NAME for support declined names ) #define MAX_PET_NAME 12 // max allowed by client name length @@ -1116,6 +1125,20 @@ class ObjectMgr QuestRelationsMap& GetCreatureQuestRelationsMap() { return m_CreatureQuestRelations; } uint32 GetModelForRace(uint32 sourceModelId, uint32 racemask); + + void LoadHotfixData(); + HotfixData const& GetHotfixData() const { return m_hotfixData; } + uint32 GetHotfixDate(uint32 entry, uint32 type) const + { + uint32 ret = 0; + for (HotfixData::const_iterator itr = m_hotfixData.begin(); itr != m_hotfixData.end(); ++itr) + if (itr->Entry == entry && itr->Type == type) + if (itr->Timestamp > ret) + ret = itr->Timestamp; + + return ret ? ret : uint32(time(NULL)); + } + protected: // first free id for selected id type @@ -1252,6 +1275,8 @@ class ObjectMgr CacheVendorItemMap m_mCacheVendorItemMap; CacheTrainerSpellMap m_mCacheTrainerTemplateSpellMap; CacheTrainerSpellMap m_mCacheTrainerSpellMap; + + HotfixData m_hotfixData; }; #define sObjectMgr MaNGOS::Singleton::Instance() diff --git a/src/game/Opcodes.cpp b/src/game/Opcodes.cpp index 7957de101..621a0a9ef 100644 --- a/src/game/Opcodes.cpp +++ b/src/game/Opcodes.cpp @@ -1405,4 +1405,6 @@ void InitializeOpcodes() OPCODE(SMSG_PVP_REWARDS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(CMSG_REQUEST_PVP_OPTIONS_ENABLED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestPvPOptionsEnabledOpcode ); OPCODE(SMSG_PVP_OPTIONS_ENABLED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + OPCODE(CMSG_REQUEST_HOTFIX, STATUS_AUTHED, PROCESS_INPLACE, &WorldSession::HandleRequestHotfix ); + OPCODE(SMSG_DB_REPLY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); }; diff --git a/src/game/Opcodes.h b/src/game/Opcodes.h index d8691fccf..9643c8fef 100644 --- a/src/game/Opcodes.h +++ b/src/game/Opcodes.h @@ -1423,6 +1423,8 @@ enum Opcodes SMSG_PVP_REWARDS = 0x5DA4, // 4.3.4 15595 CMSG_REQUEST_PVP_OPTIONS_ENABLED = 0x24A1, // 4.3.4 15595 SMSG_PVP_OPTIONS_ENABLED = 0x50A1, // 4.3.4 15595 + CMSG_REQUEST_HOTFIX = 0x2401, // 4.3.4 15595 + SMSG_DB_REPLY = 0x38A4, // 4.3.4 15595 }; #define MAX_OPCODE_TABLE_SIZE 0xFFFF diff --git a/src/game/World.cpp b/src/game/World.cpp index 6e08d767d..a55f7a6bc 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -1331,6 +1331,9 @@ void World::SetInitialWorldSettings() sLog.outString("Loading GM tickets..."); sTicketMgr.LoadGMTickets(); + sLog.outString("Loading hotfix data..."); + sObjectMgr.LoadHotfixData(); + ///- Handle outdated emails (delete/return) sLog.outString("Returning old mails..."); sObjectMgr.ReturnOrDeleteOldMails(false); diff --git a/src/game/WorldSession.h b/src/game/WorldSession.h index 4d8ec934e..1ad36bb35 100644 --- a/src/game/WorldSession.h +++ b/src/game/WorldSession.h @@ -67,6 +67,9 @@ enum AccountDataType #define GLOBAL_CACHE_MASK 0x15 #define PER_CHARACTER_CACHE_MASK 0xEA +#define DB2_REPLY_ITEM 1344507586 +#define DB2_REPLY_SPARSE 2442913102 + struct AccountData { AccountData() : Time(0), Data("") {} @@ -863,6 +866,11 @@ class MANGOS_DLL_SPEC WorldSession void HandleCalendarComplain(WorldPacket& recv_data); void HandleCalendarGetNumPending(WorldPacket& recv_data); + // Hotfix handlers + void HandleRequestHotfix(WorldPacket& recv_data); + void SendItemDb2Reply(uint32 entry); + void SendItemSparseDb2Reply(uint32 entry); + void HandleSpellClick(WorldPacket& recv_data); void HandleGetMirrorimageData(WorldPacket& recv_data); void HandleAlterAppearanceOpcode(WorldPacket& recv_data); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 64c3383fd..c477cf8db 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "12661" + #define REVISION_NR "12662" #endif // __REVISION_NR_H__ diff --git a/src/shared/revision_sql.h b/src/shared/revision_sql.h index 57a04997a..de860cbb0 100644 --- a/src/shared/revision_sql.h +++ b/src/shared/revision_sql.h @@ -1,6 +1,6 @@ #ifndef __REVISION_SQL_H__ #define __REVISION_SQL_H__ #define REVISION_DB_CHARACTERS "required_c12631_01_characters_corpse" - #define REVISION_DB_MANGOS "required_m12654_command" + #define REVISION_DB_MANGOS "required_12662_01_mangos_hotfix_data" #define REVISION_DB_REALMD "required_c12484_02_realmd_account_access" #endif // __REVISION_SQL_H__