diff --git a/sql/310/4_mangos_creature_template.sql b/sql/310/4_mangos_creature_template.sql new file mode 100644 index 000000000..d1a2d2124 --- /dev/null +++ b/sql/310/4_mangos_creature_template.sql @@ -0,0 +1,8 @@ +alter table `creature_template` + add column `unk1` int(11) UNSIGNED DEFAULT '0' NOT NULL after `heroic_entry`, + add column `unk2` int(11) UNSIGNED DEFAULT '0' NOT NULL after `unk1`, + add column `questItem1` int(11) UNSIGNED DEFAULT '0' NOT NULL after `RacialLeader`, + add column `questItem2` int(11) UNSIGNED DEFAULT '0' NOT NULL after `questItem1`, + add column `questItem3` int(11) UNSIGNED DEFAULT '0' NOT NULL after `questItem2`, + add column `questItem4` int(11) UNSIGNED DEFAULT '0' NOT NULL after `questItem3`, + add column `movementId` int(11) UNSIGNED DEFAULT '0' NOT NULL after `questItem4`; diff --git a/sql/310/5_mangos_item_template.sql b/sql/310/5_mangos_item_template.sql new file mode 100644 index 000000000..e4a79250f --- /dev/null +++ b/sql/310/5_mangos_item_template.sql @@ -0,0 +1,2 @@ +alter table `item_template` + add column `HolidayId` int(11) UNSIGNED DEFAULT '0' NOT NULL after `ItemLimitCategory`; diff --git a/sql/310/6_mangos_gameobject_template.sql b/sql/310/6_mangos_gameobject_template.sql new file mode 100644 index 000000000..bd8426efd --- /dev/null +++ b/sql/310/6_mangos_gameobject_template.sql @@ -0,0 +1,6 @@ +alter table `gameobject_template` + add column `unk1` varchar(100) NOT NULL default '', + add column `questItem1` int(11) UNSIGNED DEFAULT '0' NOT NULL after `size`, + add column `questItem2` int(11) UNSIGNED DEFAULT '0' NOT NULL after `questItem1`, + add column `questItem3` int(11) UNSIGNED DEFAULT '0' NOT NULL after `questItem2`, + add column `questItem4` int(11) UNSIGNED DEFAULT '0' NOT NULL after `questItem3`; diff --git a/src/game/Creature.h b/src/game/Creature.h index 5f0c54a95..2bb6fe004 100644 --- a/src/game/Creature.h +++ b/src/game/Creature.h @@ -157,6 +157,8 @@ struct CreatureInfo { uint32 Entry; uint32 HeroicEntry; + uint32 unk1; + uint32 unk2; uint32 DisplayID_A; uint32 DisplayID_A2; uint32 DisplayID_H; @@ -214,6 +216,8 @@ struct CreatureInfo float unk16; float unk17; bool RacialLeader; + uint32 questItems[4]; + uint32 movementId; bool RegenHealth; uint32 equipmentId; uint32 MechanicImmuneMask; diff --git a/src/game/GameObject.h b/src/game/GameObject.h index 807b09af7..8f2e1908f 100644 --- a/src/game/GameObject.h +++ b/src/game/GameObject.h @@ -41,9 +41,11 @@ struct GameObjectInfo char *name; char *IconName; char *castBarCaption; + char *unk1; uint32 faction; uint32 flags; float size; + uint32 questItems[4]; union // different GO types have different data field { //0 GAMEOBJECT_TYPE_DOOR diff --git a/src/game/ItemPrototype.h b/src/game/ItemPrototype.h index e3bb86c0a..48b6f3f51 100644 --- a/src/game/ItemPrototype.h +++ b/src/game/ItemPrototype.h @@ -558,7 +558,7 @@ struct ItemPrototype uint32 MaxDurability; uint32 Area; // id from AreaTable.dbc uint32 Map; // id from Map.dbc - uint32 BagFamily; // bit string (1 << id from ItemBagFamily.dbc) + uint32 BagFamily; // bit mask (1 << id from ItemBagFamily.dbc) uint32 TotemCategory; // id from TotemCategory.dbc _Socket Socket[MAX_ITEM_PROTO_SOCKETS]; uint32 socketBonus; // id from SpellItemEnchantment.dbc @@ -567,6 +567,7 @@ struct ItemPrototype float ArmorDamageModifier; int32 Duration; // negative = realtime, positive = ingame time uint32 ItemLimitCategory; // id from ItemLimitCategory.dbc + uint32 HolidayId; // id from Holidays.dbc uint32 ScriptId; uint32 DisenchantID; uint32 FoodType; diff --git a/src/game/QueryHandler.cpp b/src/game/QueryHandler.cpp index b1506f8a2..63507686b 100644 --- a/src/game/QueryHandler.cpp +++ b/src/game/QueryHandler.cpp @@ -185,8 +185,8 @@ void WorldSession::HandleCreatureQueryOpcode( WorldPacket & recv_data ) data << uint32(ci->type); // CreatureType.dbc data << uint32(ci->family); // CreatureFamily.dbc data << uint32(ci->rank); // Creature Rank (elite, boss, etc) - data << uint32(0); // new in 3.1, creature entry? - data << uint32(0); // new in 3.1, creature entry? + data << uint32(ci->unk1); // new in 3.1, creature entry? + data << uint32(ci->unk2); // new in 3.1, creature entry? data << uint32(ci->DisplayID_A); // modelid_male1 data << uint32(ci->DisplayID_H); // modelid_female1 ? data << uint32(ci->DisplayID_A2); // modelid_male2 ? @@ -195,7 +195,7 @@ void WorldSession::HandleCreatureQueryOpcode( WorldPacket & recv_data ) data << float(ci->unk17); // unk data << uint8(ci->RacialLeader); for(uint32 i = 0; i < 4; ++i) - data << uint32(0); // itemId[4], quest drop + data << uint32(ci->questItems[i]); // itemId[4], quest drop data << uint32(0); // CreatureMovementInfo.dbc SendPacket( &data ); sLog.outDebug( "WORLD: Sent SMSG_CREATURE_QUERY_RESPONSE" ); @@ -225,7 +225,6 @@ void WorldSession::HandleGameObjectQueryOpcode( WorldPacket & recv_data ) const GameObjectInfo *info = objmgr.GetGameObjectInfo(entryID); if(info) { - std::string Name; std::string IconName; std::string CastBarCaption; @@ -255,11 +254,11 @@ void WorldSession::HandleGameObjectQueryOpcode( WorldPacket & recv_data ) data << uint8(0) << uint8(0) << uint8(0); // name2, name3, name4 data << IconName; // 2.0.3, string. Icon name to use instead of default icon for go's (ex: "Attack" makes sword) data << CastBarCaption; // 2.0.3, string. Text will appear in Cast Bar when using GO (ex: "Collecting") - data << uint8(0); // 2.0.3, string + data << info->unk1; // 2.0.3, string data.append(info->raw.data, 24); data << float(info->size); // go size for(uint32 i = 0; i < 4; ++i) - data << uint32(0); // itemId[4], quest drop + data << uint32(info->questItems[i]); // itemId[4], quest drop SendPacket( &data ); sLog.outDebug( "WORLD: Sent SMSG_GAMEOBJECT_QUERY_RESPONSE" ); } diff --git a/src/shared/Database/SQLStorage.cpp b/src/shared/Database/SQLStorage.cpp index ecc591a49..44310d84e 100644 --- a/src/shared/Database/SQLStorage.cpp +++ b/src/shared/Database/SQLStorage.cpp @@ -25,16 +25,16 @@ extern DatabasePostgre WorldDatabase; extern DatabaseMysql WorldDatabase; #endif -const char CreatureInfosrcfmt[]="iiiiiisssiiiiiiiiiiffiffiiiiiiiiiiiffiiiiiiiiiiiiiiiiiiisiifflliiis"; -const char CreatureInfodstfmt[]="iiiiiisssiiiiiiiiiiffiffiiiiiiiiiiiffiiiiiiiiiiiiiiiiiiisiifflliiii"; +const char CreatureInfosrcfmt[]="iiiiiiiisssiiiiiiiiiiffiffiiiiiiiiiiiffiiiiiiiiiiiiiiiiiiisiiffliiiiiliiis"; +const char CreatureInfodstfmt[]="iiiiiiiisssiiiiiiiiiiffiffiiiiiiiiiiiffiiiiiiiiiiiiiiiiiiisiiffliiiiiliiii"; const char CreatureDataAddonInfofmt[]="iiiiiiis"; const char CreatureModelfmt[]="iffbi"; const char CreatureInfoAddonInfofmt[]="iiiiiiis"; const char EquipmentInfofmt[]="iiii"; -const char GameObjectInfosrcfmt[]="iiisssiifiiiiiiiiiiiiiiiiiiiiiiiis"; -const char GameObjectInfodstfmt[]="iiisssiifiiiiiiiiiiiiiiiiiiiiiiiii"; -const char ItemPrototypesrcfmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifiisiiii"; -const char ItemPrototypedstfmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifiiiiiii"; +const char GameObjectInfosrcfmt[]="iiisssiifiiiiiiiiiiiiiiiiiiiiiiiiiiiis"; +const char GameObjectInfodstfmt[]="iiisssiifiiiiiiiiiiiiiiiiiiiiiiiiiiiii"; +const char ItemPrototypesrcfmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifiiisiiii"; +const char ItemPrototypedstfmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifiiiiiiii"; const char PageTextfmt[]="isi"; const char SpellThreatfmt[]="ii"; const char InstanceTemplatesrcfmt[]="iiiiiiiffffs";