diff --git a/src/game/BattleGroundMgr.cpp b/src/game/BattleGroundMgr.cpp index b885595aa..ea0686abf 100644 --- a/src/game/BattleGroundMgr.cpp +++ b/src/game/BattleGroundMgr.cpp @@ -1712,8 +1712,9 @@ void BattleGroundMgr::CreateInitialBattleGrounds() } if (MinLvl == 0 || MaxLvl == 0 || MinLvl > MaxLvl) { - MinLvl = bl->minlvl; - MaxLvl = bl->maxlvl; + // TODO: fix me + MinLvl = 0;//bl->minlvl; + MaxLvl = 80;//bl->maxlvl; } start1 = fields[5].GetUInt32(); diff --git a/src/game/DBCStructure.h b/src/game/DBCStructure.h index ce364eba9..4c14bf962 100644 --- a/src/game/DBCStructure.h +++ b/src/game/DBCStructure.h @@ -567,16 +567,12 @@ struct BattlemasterListEntry uint32 id; // 0 int32 mapid[8]; // 1-8 mapid uint32 type; // 9 (3 - BG, 4 - arena) - uint32 minlvl; // 10 - uint32 maxlvl; // 11 - uint32 maxplayersperteam; // 12 - // 13 minplayers - // 14 0 or 9 - // 15 - char* name[16]; // 16-31 - // 32 string flag, unused - // 33 unused - //uint32 unk; // 34 new 3.1 + uint32 maxplayersperteam; // 10 + //uint32 unk1; // 11 (0 or 1) + char* name[16]; // 12-27 + // 28 string flag, unused + // 29 unused + //uint32 unk2; // 30 new 3.1 }; #define MAX_OUTFIT_ITEMS 24 @@ -784,10 +780,14 @@ struct FactionEntry int32 BaseRepValue[4]; // 10-13 m_reputationBase uint32 ReputationFlags[4]; // 14-17 m_reputationFlags uint32 team; // 18 m_parentFactionID - char* name[16]; // 19-34 m_name_lang - // 35 string flags - //char* description[16]; // 36-51 m_description_lang - // 52 string flags + //float unk1; // 19 + //float unk2; // 20 + //uint32 unk3 // 21 + //uint32 unk4; // 22 + char* name[16]; // 23-38 m_name_lang + // 39 string flags + //char* description[16]; // 40-55 m_description_lang + // 56 string flags }; struct FactionTemplateEntry @@ -1077,23 +1077,24 @@ struct MapEntry uint32 MapID; // 0 //char* internalname; // 1 unused uint32 map_type; // 2 - // 3 0 or 1 for battlegrounds (not arenas) - char* name[16]; // 4-19 - // 20 name flags, unused - uint32 linked_zone; // 21 common zone for instance and continent map - //char* hordeIntro[16]; // 23-37 text for PvP Zones - // 38 intro text flags - //char* allianceIntro[16]; // 39-54 text for PvP Zones - // 55 intro text flags - uint32 multimap_id; // 56 - // 57 - int32 entrance_map; // 58 map_id of entrance map - float entrance_x; // 59 entrance x coordinate (if exist single entry) - float entrance_y; // 60 entrance y coordinate (if exist single entry) - // 61 -1, 0 and 720 - uint32 addon; // 62 (0-original maps,1-tbc addon) - // 63 some kind of time? - //uint32 maxPlayers; // 64 max players + //uint32 unk_330; // 3 + // 4 0 or 1 for battlegrounds (not arenas) + char* name[16]; // 5-20 + // 21 name flags, unused + uint32 linked_zone; // 22 common zone for instance and continent map + //char* hordeIntro[16]; // 23-38 text for PvP Zones + // 39 intro text flags + //char* allianceIntro[16]; // 40-55 text for PvP Zones + // 56 intro text flags + uint32 multimap_id; // 57 + // 58 + int32 entrance_map; // 59 map_id of entrance map + float entrance_x; // 60 entrance x coordinate (if exist single entry) + float entrance_y; // 61 entrance y coordinate (if exist single entry) + // 62 -1, 0 and 720 + uint32 addon; // 63 (0-original maps,1-tbc addon) + // 64 some kind of time? + //uint32 maxPlayers; // 65 max players // Helpers uint32 Expansion() const { return addon; } @@ -1423,6 +1424,7 @@ struct SpellEntry //uint32 PowerDisplayId; // 234 PowerDisplay.dbc, new in 3.1 //float unk_320_4[3]; // 235-237 3.2.0 //uint32 spellDescriptionVariableID; // 238 3.2.0 + //uint32 SpellDifficultyId; // 239 3.3.0 // helpers int32 CalculateSimpleValue(uint8 eff) const { return EffectBasePoints[eff]+int32(EffectBaseDice[eff]); } diff --git a/src/game/DBCfmt.h b/src/game/DBCfmt.h index 32c18ecfa..a0943b026 100644 --- a/src/game/DBCfmt.h +++ b/src/game/DBCfmt.h @@ -27,7 +27,7 @@ const char AreaTriggerEntryfmt[]="niffffffff"; const char AuctionHouseEntryfmt[]="niiixxxxxxxxxxxxxxxxx"; const char BankBagSlotPricesEntryfmt[]="ni"; const char BarberShopStyleEntryfmt[]="nixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiii"; -const char BattlemasterListEntryfmt[]="niiiiiiiiiiiixxxssssssssssssssssxxx"; +const char BattlemasterListEntryfmt[]="niiiiiiiiiixssssssssssssssssxxx"; const char CharStartOutfitEntryfmt[]="diiiiiiiiiiiiiiiiiiiiiiiiixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; const char CharTitlesEntryfmt[]="nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi"; const char ChatChannelsEntryfmt[]="iixssssssssssssssssxxxxxxxxxxxxxxxxxx"; @@ -44,7 +44,7 @@ const char DurabilityCostsfmt[]="niiiiiiiiiiiiiiiiiiiiiiiiiiiii"; const char DurabilityQualityfmt[]="nf"; const char EmotesEntryfmt[]="nxxiiix"; const char EmotesTextEntryfmt[]="nxixxxxxxxxxxxxxxxx"; -const char FactionEntryfmt[]="niiiiiiiiiiiiiiiiiissssssssssssssssxxxxxxxxxxxxxxxxxx"; +const char FactionEntryfmt[]="niiiiiiiiiiiiiiiiiixxxxssssssssssssssssxxxxxxxxxxxxxxxxxx"; const char FactionTemplateEntryfmt[]="niiiiiiiiiiiii"; const char GameObjectDisplayInfofmt[]="nxxxxxxxxxxxxxxxxxx"; const char GemPropertiesEntryfmt[]="nixxi"; @@ -72,7 +72,7 @@ const char ItemRandomSuffixfmt[]="nxxxxxxxxxxxxxxxxxxiiiiiiiiii"; const char ItemSetEntryfmt[]="dssssssssssssssssxxxxxxxxxxxxxxxxxxiiiiiiiiiiiiiiiiii"; const char LockEntryfmt[]="niiiiiiiiiiiiiiiiiiiiiiiixxxxxxxx"; const char MailTemplateEntryfmt[]="nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; -const char MapEntryfmt[]="nxixssssssssssssssssxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixiffxixx"; +const char MapEntryfmt[]="nxixxssssssssssssssssxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixiffxixx"; const char MapDifficultyEntryfmt[]="diixxxxxxxxxxxxxxxxxiix"; const char MovieEntryfmt[]="nxx"; const char QuestSortEntryfmt[]="nxxxxxxxxxxxxxxxxx"; @@ -84,7 +84,7 @@ const char SkillLineAbilityfmt[]="niiiixxiiiiixx"; const char SoundEntriesfmt[]="nxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; const char SpellCastTimefmt[]="nixx"; const char SpellDurationfmt[]="niii"; -const char SpellEntryfmt[]="niiiiiiiiiixixixiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifxiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffffffiiiiiiiiiiiiiiiiiiiiifffiiiiiiiiiiiiiiifffiiiiiiiiiiiiixssssssssssssssssxssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiiiiiiiiiiixfffxxxiiiiixxxxxx"; +const char SpellEntryfmt[]="niiiiiiiiiixixixiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifxiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffffffiiiiiiiiiiiiiiiiiiiiifffiiiiiiiiiiiiiiifffiiiiiiiiiiiiixssssssssssssssssxssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiiiiiiiiiiixfffxxxiiiiixxxxxxx"; const char SpellFocusObjectfmt[]="nxxxxxxxxxxxxxxxxx"; const char SpellItemEnchantmentfmt[]="nxiiiiiixxxiiissssssssssssssssxiiiixxx"; const char SpellItemEnchantmentConditionfmt[]="nbbbbbxxxxxbbbbbbbbbbiiiiiXXXXX"; diff --git a/src/game/GossipDef.cpp b/src/game/GossipDef.cpp index 7a221a59f..8d18c6cca 100644 --- a/src/game/GossipDef.cpp +++ b/src/game/GossipDef.cpp @@ -572,11 +572,14 @@ void PlayerMenu::SendQuestQueryResponse( Quest const *pQuest ) // rewarded honor points data << uint32(MaNGOS::Honor::hk_honor_at_level(pSession->GetPlayer()->getLevel(), pQuest->GetRewHonorableKills())); + data << float(1); // weird honor multiplier data << uint32(pQuest->GetSrcItemId()); // source item id data << uint32(pQuest->GetFlags() & 0xFFFF); // quest flags data << uint32(pQuest->GetCharTitleId()); // CharTitleId, new 2.4.0, player gets this title (id from CharTitles) data << uint32(pQuest->GetPlayersSlain()); // players slain data << uint32(pQuest->GetBonusTalents()); // bonus talents + data << uint32(0); // bonus arena points + data << uint32(0); // unknown int iI; @@ -601,6 +604,15 @@ void PlayerMenu::SendQuestQueryResponse( Quest const *pQuest ) } } + for(iI = 0; iI < QUEST_REPUTATIONS_COUNT; ++iI) // reward factions ids + data << uint32(0); + + for(iI = 0; iI < QUEST_REPUTATIONS_COUNT; ++iI) // columnid+1 QuestFactionReward.dbc? + data << uint32(0); + + for(iI = 0; iI < QUEST_REPUTATIONS_COUNT; ++iI) // unk (0) + data << uint32(0); + data << pQuest->GetPointMapId(); data << pQuest->GetPointX(); data << pQuest->GetPointY(); @@ -610,6 +622,7 @@ void PlayerMenu::SendQuestQueryResponse( Quest const *pQuest ) data << Objectives; data << Details; data << EndText; + data << uint8(0); // some string for (iI = 0; iI < QUEST_OBJECTIVES_COUNT; ++iI) { diff --git a/src/game/Mail.cpp b/src/game/Mail.cpp index 98b85dbbd..9d51c869d 100644 --- a/src/game/Mail.cpp +++ b/src/game/Mail.cpp @@ -313,6 +313,7 @@ void WorldSession::HandleMailDelete(WorldPacket & recv_data ) uint32 mailId; recv_data >> mailbox; recv_data >> mailId; + recv_data.read_skip(); // 3.3.0 if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX)) return; diff --git a/src/game/MiscHandler.cpp b/src/game/MiscHandler.cpp index 776277d2a..fef107afc 100644 --- a/src/game/MiscHandler.cpp +++ b/src/game/MiscHandler.cpp @@ -1518,13 +1518,17 @@ void WorldSession::HandleMoveSetCanFlyAckOpcode( WorldPacket & recv_data ) sLog.outDebug("WORLD: CMSG_MOVE_SET_CAN_FLY_ACK"); //recv_data.hexlike(); - recv_data.read_skip(); // guid + uint64 guid; + if(!recv_data.readPackGUID(guid)) + return; + recv_data.read_skip(); // unk MovementInfo movementInfo; + movementInfo.guid = guid; ReadMovementInfo(recv_data, &movementInfo); - recv_data.read_skip(); // unk2 + recv_data.read_skip(); // unk2 _player->m_movementInfo.SetMovementFlags(movementInfo.GetMovementFlags()); } diff --git a/src/game/Object.cpp b/src/game/Object.cpp index 222b8efad..a1276b93e 100644 --- a/src/game/Object.cpp +++ b/src/game/Object.cpp @@ -325,7 +325,7 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint16 flags, uint32 flags2 } // 0x02200000 - if((flags2 & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING2)) || (unk_flags & 0x20)) + if((flags2 & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING)) || (unk_flags & 0x20)) { if(GetTypeId() == TYPEID_PLAYER) *data << (float)((Player*)this)->m_movementInfo.s_pitch; diff --git a/src/game/Opcodes.cpp b/src/game/Opcodes.cpp index 78fbcef0a..6b85bb666 100644 --- a/src/game/Opcodes.cpp +++ b/src/game/Opcodes.cpp @@ -1299,4 +1299,8 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x4F6*/ { "CMSG_WORLD_STATE_UI_TIMER_UPDATE", STATUS_LOGGEDIN, &WorldSession::HandleWorldStateUITimerUpdate }, /*0x4F7*/ { "SMSG_WORLD_STATE_UI_TIMER_UPDATE", STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x4F8*/ { "CMSG_UNKNOWN_1272", STATUS_NEVER, &WorldSession::Handle_NULL }, + /*0x4F9*/ { "UMSG_UNKNOWN_1273", STATUS_NEVER, &WorldSession::Handle_NULL }, + /*0x4FA*/ { "SMSG_UNKNOWN_1274", STATUS_NEVER, &WorldSession::Handle_ServerSide }, + /*0x4FB*/ { "UMSG_UNKNOWN_1275", STATUS_NEVER, &WorldSession::Handle_NULL }, + /*0x4FC*/ { "SMSG_UNKNOWN_1276", STATUS_NEVER, &WorldSession::Handle_ServerSide }, }; diff --git a/src/game/Opcodes.h b/src/game/Opcodes.h index 66b52fa54..21cbb3c87 100644 --- a/src/game/Opcodes.h +++ b/src/game/Opcodes.h @@ -1307,7 +1307,11 @@ enum Opcodes CMSG_WORLD_STATE_UI_TIMER_UPDATE = 0x4F6, SMSG_WORLD_STATE_UI_TIMER_UPDATE = 0x4F7, CMSG_UNKNOWN_1272 = 0x4F8, // called from lua: CreateCharacter, paid race change - NUM_MSG_TYPES = 0x4F9 + UMSG_UNKNOWN_1273 = 0x4F9, // not found 10522 + SMSG_UNKNOWN_1274 = 0x4FA, // uint8 + UMSG_UNKNOWN_1275 = 0x4FB, // not found 10522 + SMSG_UNKNOWN_1276 = 0x4FC, // does nothing in 10522 + NUM_MSG_TYPES = 0x4FD }; /// Player state diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 185551340..1769c99bd 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -18268,7 +18268,7 @@ void Player::SendInitialPacketsBeforeAddToMap() // set fly flag if in fly form or taxi flight to prevent visually drop at ground in showup moment if(HasAuraType(SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED) || HasAuraType(SPELL_AURA_FLY) || isInFlight()) - m_movementInfo.AddMovementFlag(MOVEMENTFLAG_FLYING2); + m_movementInfo.AddMovementFlag(MOVEMENTFLAG_FLYING); m_mover = this; } diff --git a/src/game/Player.h b/src/game/Player.h index 20835baf1..5d5b384cf 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -748,14 +748,14 @@ enum MovementFlags MOVEMENTFLAG_LEVITATING = 0x00000400, MOVEMENTFLAG_FLY_UNK1 = 0x00000800, MOVEMENTFLAG_JUMPING = 0x00001000, - MOVEMENTFLAG_UNK4 = 0x00002000, - MOVEMENTFLAG_FALLING = 0x00004000, + MOVEMENTFLAG_FALLING = 0x00002000, + MOVEMENTFLAG_UNK4 = 0x00004000, // 0x8000, 0x10000, 0x20000, 0x40000, 0x80000, 0x100000 MOVEMENTFLAG_SWIMMING = 0x00200000, // appears with fly flag also - MOVEMENTFLAG_FLY_UP = 0x00400000, - MOVEMENTFLAG_CAN_FLY = 0x00800000, - MOVEMENTFLAG_FLYING = 0x01000000, - MOVEMENTFLAG_FLYING2 = 0x02000000, // Actual flying mode + MOVEMENTFLAG_FLY_UP = 0x00400000, // swim up also + MOVEMENTFLAG_FLY_DOWN = 0x00800000, // swim down also + MOVEMENTFLAG_CAN_FLY = 0x01000000, // can fly in 3.3? + MOVEMENTFLAG_FLYING = 0x02000000, // Actual flying mode MOVEMENTFLAG_SPLINE = 0x04000000, // used for flight paths MOVEMENTFLAG_SPLINE2 = 0x08000000, // used for flight paths MOVEMENTFLAG_WATERWALKING = 0x10000000, // prevent unit from falling through water @@ -803,7 +803,7 @@ struct MovementInfo // flags that use in movement check for example at spell casting MovementFlags const movementFlagsMask = MovementFlags( - MOVEMENTFLAG_FORWARD |MOVEMENTFLAG_BACKWARD |MOVEMENTFLAG_STRAFE_LEFT|MOVEMENTFLAG_STRAFE_RIGHT| + MOVEMENTFLAG_FORWARD |MOVEMENTFLAG_BACKWARD |MOVEMENTFLAG_STRAFE_LEFT |MOVEMENTFLAG_STRAFE_RIGHT| MOVEMENTFLAG_PITCH_UP|MOVEMENTFLAG_PITCH_DOWN|MOVEMENTFLAG_FLY_UNK1 | MOVEMENTFLAG_JUMPING |MOVEMENTFLAG_FALLING |MOVEMENTFLAG_FLY_UP | MOVEMENTFLAG_FLYING |MOVEMENTFLAG_SPLINE diff --git a/src/game/QueryHandler.cpp b/src/game/QueryHandler.cpp index e7ae81462..82ef1580d 100644 --- a/src/game/QueryHandler.cpp +++ b/src/game/QueryHandler.cpp @@ -156,7 +156,6 @@ void WorldSession::HandleCreatureQueryOpcode( WorldPacket & recv_data ) CreatureInfo const *ci = objmgr.GetCreatureTemplate(entry); if (ci) { - std::string Name, SubName; Name = ci->Name; SubName = ci->SubName; diff --git a/src/game/UpdateFields.h b/src/game/UpdateFields.h index 4240e6a4a..751343104 100644 --- a/src/game/UpdateFields.h +++ b/src/game/UpdateFields.h @@ -19,7 +19,7 @@ #ifndef _UPDATEFIELDS_AUTO_H #define _UPDATEFIELDS_AUTO_H -// Auto generated for version 3, 2, 2, 10505 +// Auto generated for version 0, 3, 0, 10522 enum EObjectFields { diff --git a/src/game/WorldSession.cpp b/src/game/WorldSession.cpp index 3a7c61181..19ce9cb8e 100644 --- a/src/game/WorldSession.cpp +++ b/src/game/WorldSession.cpp @@ -738,7 +738,7 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo *mi) data >> mi->t_seat; } - if((mi->HasMovementFlag(MovementFlags(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING2))) || (mi->unk1 & 0x20)) + if((mi->HasMovementFlag(MovementFlags(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING))) || (mi->unk1 & 0x20)) { data >> mi->s_pitch; } @@ -783,7 +783,7 @@ void WorldSession::WriteMovementInfo(WorldPacket *data, MovementInfo *mi) *data << mi->t_seat; } - if((mi->HasMovementFlag(MovementFlags(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING2))) || (mi->unk1 & 0x20)) + if((mi->HasMovementFlag(MovementFlags(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING))) || (mi->unk1 & 0x20)) { *data << mi->s_pitch; } diff --git a/src/realmd/AuthCodes.h b/src/realmd/AuthCodes.h index 7df23ad42..fcc823232 100644 --- a/src/realmd/AuthCodes.h +++ b/src/realmd/AuthCodes.h @@ -66,9 +66,9 @@ enum LoginResult // we need to stick to 1 version or half of the stuff will work for someone // others will not and opposite -// will only support WoW, WoW:TBC and WoW:WotLK 3.2.2a client build 10505... +// will only support WoW, WoW:TBC and WoW:WotLK 3.3.0 client build 10522... -#define EXPECTED_MANGOS_CLIENT_BUILD {10505, 0} +#define EXPECTED_MANGOS_CLIENT_BUILD {10522, 0} // At update excepted builds please update if need define DEFAULT_MAX_LEVEL // in DBCEnum.h to default max player level expected by build