diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index 4cf9cdbc5..917234e62 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -1028,6 +1028,7 @@ void ChatHandler::FillMessageData( WorldPacket *data, WorldSession* session, uin case CHAT_MSG_MONSTER_EMOTE: case CHAT_MSG_RAID_BOSS_WHISPER: case CHAT_MSG_RAID_BOSS_EMOTE: + case CHAT_MSG_BN: { *data << uint64(speaker->GetGUID()); *data << uint32(0); // 2.1.0 diff --git a/src/game/ItemHandler.cpp b/src/game/ItemHandler.cpp index 6a95acda2..f5937dd60 100644 --- a/src/game/ItemHandler.cpp +++ b/src/game/ItemHandler.cpp @@ -355,7 +355,7 @@ void WorldSession::HandleItemQuerySingleOpcode( WorldPacket & recv_data ) } data << pProto->ScalingStatDistribution; // scaling stats distribution data << pProto->ScalingStatValue; // some kind of flags used to determine stat values column - for(int i = 0; i < 5; ++i) + for(int i = 0; i < 2; ++i) { data << pProto->Damage[i].DamageMin; data << pProto->Damage[i].DamageMax; @@ -440,6 +440,7 @@ void WorldSession::HandleItemQuerySingleOpcode( WorldPacket & recv_data ) data << pProto->ArmorDamageModifier; data << pProto->Duration; // added in 2.4.2.8209, duration (seconds) data << pProto->ItemLimitCategory; // WotLK, ItemLimitCategory + data << uint32(0); // Holiday.dbc? SendPacket( &data ); } else diff --git a/src/game/ItemPrototype.h b/src/game/ItemPrototype.h index d46a80492..f30ed2bfb 100644 --- a/src/game/ItemPrototype.h +++ b/src/game/ItemPrototype.h @@ -523,7 +523,7 @@ struct ItemPrototype _ItemStat ItemStat[10]; uint32 ScalingStatDistribution; // id from ScalingStatDistribution.dbc uint32 ScalingStatValue; // mask for selecting column in ScalingStatValues.dbc - _Damage Damage[5]; + _Damage Damage[2]; uint32 Armor; uint32 HolyRes; uint32 FireRes; @@ -634,8 +634,8 @@ struct ItemPrototype if (Delay == 0) return 0; float temp = 0; - for (int i=0;i<5;++i) - temp+=Damage[i].DamageMin + Damage[i].DamageMax; + for (int i = 0; i < 2; ++i) + temp += Damage[i].DamageMin + Damage[i].DamageMax; return temp*500/Delay; } diff --git a/src/game/MiscHandler.cpp b/src/game/MiscHandler.cpp index 52ce0d565..4f56d30e0 100644 --- a/src/game/MiscHandler.cpp +++ b/src/game/MiscHandler.cpp @@ -1163,9 +1163,10 @@ void WorldSession::HandlePlayedTime(WorldPacket& /*recv_data*/) uint32 TotalTimePlayed = GetPlayer()->GetTotalPlayedTime(); uint32 LevelPlayedTime = GetPlayer()->GetLevelPlayedTime(); - WorldPacket data(SMSG_PLAYED_TIME, 8); + WorldPacket data(SMSG_PLAYED_TIME, 9); data << TotalTimePlayed; data << LevelPlayedTime; + data << uint8(0); SendPacket(&data); } diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index ca116e917..9b739c72c 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -1545,7 +1545,7 @@ void ObjectMgr::LoadItemPrototypes() } } - for (int j = 0; j < 5; j++) + for (int j = 0; j < 2; j++) { if(proto->Damage[j].DamageType >= MAX_SPELL_SCHOOL) { diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 9dfe86a9c..6a7d0d811 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -2417,7 +2417,7 @@ void Player::SendInitialSpells() if(!itr->second->active || itr->second->disabled) continue; - data << uint16(itr->first); + data << uint32(itr->first); data << uint16(0); // it's not slot id spellCount +=1; @@ -2433,7 +2433,7 @@ void Player::SendInitialSpells() if(!sEntry) continue; - data << uint16(itr->first); + data << uint32(itr->first); time_t cooldown = 0; time_t curTime = time(NULL); @@ -2626,14 +2626,14 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen { // update spell ranks in spellbook and action bar WorldPacket data(SMSG_SUPERCEDED_SPELL, (4)); - data << uint16(spell_id); - data << uint16(next_active_spell_id); + data << uint32(spell_id); + data << uint32(next_active_spell_id); GetSession()->SendPacket( &data ); } else { WorldPacket data(SMSG_REMOVED_SPELL, 4); - data << uint16(spell_id); + data << uint32(spell_id); GetSession()->SendPacket(&data); } } @@ -2725,8 +2725,8 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen if(IsInWorld()) // not send spell (re-/over-)learn packets at loading { WorldPacket data(SMSG_SUPERCEDED_SPELL, (4)); - data << uint16(itr->first); - data << uint16(spell_id); + data << uint32(itr->first); + data << uint32(spell_id); GetSession()->SendPacket( &data ); } @@ -2741,8 +2741,8 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen if(IsInWorld()) // not send spell (re-/over-)learn packets at loading { WorldPacket data(SMSG_SUPERCEDED_SPELL, (4)); - data << uint16(spell_id); - data << uint16(itr->first); + data << uint32(spell_id); + data << uint32(itr->first); GetSession()->SendPacket( &data ); } @@ -3093,8 +3093,8 @@ void Player::removeSpell(uint32 spell_id, bool disabled, bool update_action_bar_ { // downgrade spell ranks in spellbook and action bar WorldPacket data(SMSG_SUPERCEDED_SPELL, (4)); - data << uint16(spell_id); - data << uint16(prev_id); + data << uint32(spell_id); + data << uint32(prev_id); GetSession()->SendPacket( &data ); prev_activate = true; } @@ -3108,7 +3108,7 @@ void Player::removeSpell(uint32 spell_id, bool disabled, bool update_action_bar_ if(!prev_activate) { WorldPacket data(SMSG_REMOVED_SPELL, 4); - data << uint16(spell_id); + data << uint32(spell_id); GetSession()->SendPacket(&data); } } @@ -3131,7 +3131,7 @@ void Player::RemoveArenaSpellCooldowns() // notify player WorldPacket data(SMSG_CLEAR_COOLDOWN, (4+8)); data << uint32(itr->first); - data << GetGUID(); + data << uint64(GetGUID()); GetSession()->SendPacket(&data); // remove cooldown m_spellCooldowns.erase(itr); @@ -5251,7 +5251,8 @@ void Player::SendInitialActionButtons() { sLog.outDetail( "Initializing Action Buttons for '%u'", GetGUIDLow() ); - WorldPacket data(SMSG_ACTION_BUTTONS, (MAX_ACTION_BUTTONS*4)); + WorldPacket data(SMSG_ACTION_BUTTONS, 1+(MAX_ACTION_BUTTONS*4)); + data << uint8(0); // can be 0, 1, 2 for(int button = 0; button < MAX_ACTION_BUTTONS; ++button) { ActionButtonList::const_iterator itr = m_actionButtons.find(button); @@ -16469,7 +16470,7 @@ void Player::RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent) if(pet->isControlled()) { - WorldPacket data(SMSG_PET_SPELLS, 8); + WorldPacket data(SMSG_PET_SPELLS, 8+4); data << uint64(0); data << uint32(0); GetSession()->SendPacket(&data); @@ -16657,7 +16658,7 @@ void Player::PetSpellInitialize() if(itr->second > curTime) cooldown = (itr->second - curTime) * 1000; - data << uint16(itr->first); // spellid + data << uint32(itr->first); // spellid data << uint16(0); // spell category? data << uint32(itr->second); // cooldown data << uint32(0); // category cooldown @@ -16670,7 +16671,7 @@ void Player::PetSpellInitialize() if(itr->second > curTime) cooldown = (itr->second - curTime) * 1000; - data << uint16(itr->first); // spellid + data << uint32(itr->first); // spellid data << uint16(0); // spell category? data << uint32(0); // cooldown data << uint32(itr->second); // category cooldown @@ -16701,7 +16702,7 @@ void Player::PossessSpellInitialize() data << uint64(charm->GetGUID()); data << uint32(0x00000000); data << uint32(0); - data << uint8(0) << uint8(0) << uint16(0); + data << uint32(0); for(uint32 i = 0; i < 10; i++) //40 { diff --git a/src/game/QueryHandler.cpp b/src/game/QueryHandler.cpp index 45195ec56..47105c009 100644 --- a/src/game/QueryHandler.cpp +++ b/src/game/QueryHandler.cpp @@ -39,13 +39,14 @@ void WorldSession::SendNameQueryOpcode(Player *p) return; // guess size - WorldPacket data( SMSG_NAME_QUERY_RESPONSE, (8+1+4+4+4+10) ); - data << p->GetGUID(); - data << p->GetName(); + WorldPacket data( SMSG_NAME_QUERY_RESPONSE, (8+1+1+1+1+1+10) ); + data << uint64(p->GetGUID()); // player guid + data << uint8(0); // added in 3.1 + data << p->GetName(); // played name data << uint8(0); // realm name for cross realm BG usage - data << uint32(p->getRace()); - data << uint32(p->getGender()); - data << uint32(p->getClass()); + data << uint8(p->getRace()); + data << uint8(p->getGender()); + data << uint8(p->getClass()); if(DeclinedName const* names = p->GetDeclinedNames()) { data << uint8(1); // is declined @@ -98,23 +99,24 @@ void WorldSession::SendNameQueryOpcodeFromDBCallBack(QueryResult *result, uint32 field = fields[2].GetUInt32(); // guess size - WorldPacket data( SMSG_NAME_QUERY_RESPONSE, (8+1+4+4+4+10) ); - data << MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER); + WorldPacket data( SMSG_NAME_QUERY_RESPONSE, (8+1+1+1+1+1+1+10) ); + data << uint64(MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER)); + data << uint8(0); // added in 3.1 data << name; - data << (uint8)0; - data << (uint32)(field & 0xFF); - data << (uint32)((field >> 16) & 0xFF); - data << (uint32)((field >> 8) & 0xFF); + data << uint8(0); + data << uint8(field & 0xFF); + data << uint8((field >> 16) & 0xFF); + data << uint8((field >> 8) & 0xFF); // if the first declined name field (3) is empty, the rest must be too if(sWorld.getConfig(CONFIG_DECLINED_NAMES_USED) && fields[3].GetCppString() != "") { - data << (uint8)1; // is declined + data << uint8(1); // is declined for(int i = 3; i < MAX_DECLINED_NAME_CASES+3; ++i) data << fields[i].GetCppString(); } else - data << (uint8)0; // is declined + data << uint8(0); // is declined session->SendPacket( &data ); delete result; @@ -122,7 +124,7 @@ void WorldSession::SendNameQueryOpcodeFromDBCallBack(QueryResult *result, uint32 void WorldSession::HandleNameQueryOpcode( WorldPacket & recv_data ) { - CHECK_PACKET_SIZE(recv_data,8); + CHECK_PACKET_SIZE(recv_data, 8); uint64 guid; @@ -175,23 +177,27 @@ void WorldSession::HandleCreatureQueryOpcode( WorldPacket & recv_data ) sLog.outDetail("WORLD: CMSG_CREATURE_QUERY '%s' - Entry: %u.", ci->Name, entry); // guess size WorldPacket data( SMSG_CREATURE_QUERY_RESPONSE, 100 ); - data << (uint32)entry; // creature entry + data << uint32(entry); // creature entry data << Name; data << uint8(0) << uint8(0) << uint8(0); // name2, name3, name4, always empty data << SubName; data << ci->IconName; // "Directions" for guard, string for Icons 2.3.0 - data << (uint32)ci->type_flags; // flags wdbFeild7=wad flags1 - data << (uint32)ci->type; - data << (uint32)ci->family; // family wdbFeild9 - data << (uint32)ci->rank; // rank wdbFeild10 - data << (uint32)ci->PetSpellDataId; // Id from CreatureSpellData.dbc wdbField12 - data << (uint32)ci->DisplayID_A; // modelid_male1 - data << (uint32)ci->DisplayID_H; // modelid_female1 ? - data << (uint32)ci->DisplayID_A2; // modelid_male2 ? - data << (uint32)ci->DisplayID_H2; // modelid_femmale2 ? - data << (float)1.0f; // unk - data << (float)1.0f; // unk - data << (uint8)ci->RacialLeader; + data << uint32(ci->type_flags); // flags wdbFeild7=wad flags1 + data << uint32(ci->type); + data << uint32(ci->family); // family wdbFeild9 + data << uint32(ci->rank); // rank wdbFeild10 + data << uint32(ci->PetSpellDataId); // Id from CreatureSpellData.dbc wdbField12 + data << uint32(ci->DisplayID_A); // modelid_male1 + data << uint32(ci->DisplayID_H); // modelid_female1 ? + data << uint32(ci->DisplayID_A2); // modelid_male2 ? + data << uint32(ci->DisplayID_H2); // modelid_femmale2 ? + data << uint32(0); // new in 3.1 + data << float(1.0f); // unk + data << float(1.0f); // unk + data << uint8(ci->RacialLeader); + for(uint32 i = 0; i < 4; ++i) + data << uint32(0); // added in 3.1 + data << uint32(0); // added in 3.1 SendPacket( &data ); sLog.outDebug( "WORLD: Sent SMSG_CREATURE_QUERY_RESPONSE " ); } @@ -205,7 +211,7 @@ void WorldSession::HandleCreatureQueryOpcode( WorldPacket & recv_data ) WorldPacket data( SMSG_CREATURE_QUERY_RESPONSE, 4 ); data << uint32(entry | 0x80000000); SendPacket( &data ); - sLog.outDebug( "WORLD: Sent SMSG_CREATURE_QUERY_RESPONSE " ); + sLog.outDebug( "WORLD: Sent SMSG_CREATURE_QUERY_RESPONSE " ); } } @@ -241,16 +247,18 @@ void WorldSession::HandleGameObjectQueryOpcode( WorldPacket & recv_data ) } sLog.outDetail("WORLD: CMSG_GAMEOBJECT_QUERY '%s' - Entry: %u. ", info->name, entryID); WorldPacket data ( SMSG_GAMEOBJECT_QUERY_RESPONSE, 150 ); - data << entryID; - data << (uint32)info->type; - data << (uint32)info->displayId; + data << uint32(entryID); + data << uint32(info->type); + data << uint32(info->displayId); data << Name; data << uint8(0) << uint8(0) << uint8(0); // name2, name3, name4 data << uint8(0); // 2.0.3, string data << CastBarCaption; // 2.0.3, string. Text will appear in Cast Bar when using GO (ex: "Collecting") - data << uint8(0); // 2.0.3, probably string - data.append(info->raw.data,24); + data << uint8(0); // 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); // added in 3.1 SendPacket( &data ); sLog.outDebug( "WORLD: Sent CMSG_GAMEOBJECT_QUERY " ); } diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 01ff8aa57..53efa90bb 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -3042,7 +3042,7 @@ void Aura::HandleModPossess(bool apply, bool Real) if(caster->GetTypeId() == TYPEID_PLAYER) { - WorldPacket data(SMSG_PET_SPELLS, 8); + WorldPacket data(SMSG_PET_SPELLS, 8+4); data << uint64(0); data << uint32(0); ((Player*)caster)->GetSession()->SendPacket(&data); @@ -3198,7 +3198,7 @@ void Aura::HandleModCharm(bool apply, bool Real) if(caster->GetTypeId() == TYPEID_PLAYER) { - WorldPacket data(SMSG_PET_SPELLS, 8); + WorldPacket data(SMSG_PET_SPELLS, 8+4); data << uint64(0); data << uint32(0); ((Player*)caster)->GetSession()->SendPacket(&data); diff --git a/src/shared/Database/SQLStorage.cpp b/src/shared/Database/SQLStorage.cpp index b6a51064b..875f56765 100644 --- a/src/shared/Database/SQLStorage.cpp +++ b/src/shared/Database/SQLStorage.cpp @@ -33,8 +33,8 @@ const char CreatureInfoAddonInfofmt[]="iiiiiiis"; const char EquipmentInfofmt[]="iiii"; const char GameObjectInfosrcfmt[]="iiissiifiiiiiiiiiiiiiiiiiiiiiiiis"; const char GameObjectInfodstfmt[]="iiissiifiiiiiiiiiiiiiiiiiiiiiiiii"; -const char ItemPrototypesrcfmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiffiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifiisiiii"; -const char ItemPrototypedstfmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiffiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifiiiiiii"; +const char ItemPrototypesrcfmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifiisiiii"; +const char ItemPrototypedstfmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifiiiiiii"; const char PageTextfmt[]="isi"; const char SpellThreatfmt[]="ii"; const char InstanceTemplatesrcfmt[]="iiiiiiiffffs";