diff options
-rwxr-xr-x | src/server/game/Entities/Creature/Creature.cpp | 36 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 55 | ||||
-rwxr-xr-x | src/server/game/Handlers/SpellHandler.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 17 | ||||
-rwxr-xr-x | src/server/game/Server/Protocol/Opcodes.h | 1 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 1 | ||||
-rw-r--r-- | src/server/game/Tickets/TicketMgr.cpp | 5 |
7 files changed, 82 insertions, 39 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 8076372df43..a1297391a08 100755 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -2506,9 +2506,10 @@ bool Creature::SetWalk(bool enable) return false; ObjectGuid guid = GetGUID(); + WorldPacket data; if (enable) { - WorldPacket data(SMSG_SPLINE_MOVE_SET_WALK_MODE, 9); + data.Initialize(SMSG_SPLINE_MOVE_SET_WALK_MODE, 9); data.WriteBit(guid[7]); data.WriteBit(guid[6]); data.WriteBit(guid[5]); @@ -2517,7 +2518,7 @@ bool Creature::SetWalk(bool enable) data.WriteBit(guid[4]); data.WriteBit(guid[2]); data.WriteBit(guid[0]); - data.FlushBits(); + data.WriteByteSeq(guid[4]); data.WriteByteSeq(guid[2]); data.WriteByteSeq(guid[1]); @@ -2526,11 +2527,10 @@ bool Creature::SetWalk(bool enable) data.WriteByteSeq(guid[0]); data.WriteByteSeq(guid[7]); data.WriteByteSeq(guid[3]); - SendMessageToSet(&data, false); } else { - WorldPacket data(SMSG_SPLINE_MOVE_SET_RUN_MODE, 9); + data.Initialize(SMSG_SPLINE_MOVE_SET_RUN_MODE, 9); data.WriteBit(guid[5]); data.WriteBit(guid[6]); data.WriteBit(guid[3]); @@ -2539,7 +2539,7 @@ bool Creature::SetWalk(bool enable) data.WriteBit(guid[0]); data.WriteBit(guid[4]); data.WriteBit(guid[1]); - data.FlushBits(); + data.WriteByteSeq(guid[7]); data.WriteByteSeq(guid[0]); data.WriteByteSeq(guid[4]); @@ -2548,9 +2548,9 @@ bool Creature::SetWalk(bool enable) data.WriteByteSeq(guid[1]); data.WriteByteSeq(guid[2]); data.WriteByteSeq(guid[3]); - SendMessageToSet(&data, false); } + SendMessageToSet(&data, false); return true; } @@ -2565,9 +2565,10 @@ bool Creature::SetDisableGravity(bool disable, bool packetOnly/*=false*/) return true; ObjectGuid guid = GetGUID(); + WorldPacket data; if (disable) { - WorldPacket data(SMSG_SPLINE_MOVE_GRAVITY_DISABLE, 9); + data.Initialize(SMSG_SPLINE_MOVE_GRAVITY_DISABLE, 9); data.WriteBit(guid[7]); data.WriteBit(guid[3]); data.WriteBit(guid[4]); @@ -2576,7 +2577,7 @@ bool Creature::SetDisableGravity(bool disable, bool packetOnly/*=false*/) data.WriteBit(guid[1]); data.WriteBit(guid[0]); data.WriteBit(guid[6]); - data.FlushBits(); + data.WriteByteSeq(guid[7]); data.WriteByteSeq(guid[1]); data.WriteByteSeq(guid[3]); @@ -2585,11 +2586,10 @@ bool Creature::SetDisableGravity(bool disable, bool packetOnly/*=false*/) data.WriteByteSeq(guid[2]); data.WriteByteSeq(guid[5]); data.WriteByteSeq(guid[0]); - SendMessageToSet(&data, false); } else { - WorldPacket data(SMSG_SPLINE_MOVE_GRAVITY_ENABLE, 9); + data.Initialize(SMSG_SPLINE_MOVE_GRAVITY_ENABLE, 9); data.WriteBit(guid[5]); data.WriteBit(guid[4]); data.WriteBit(guid[7]); @@ -2598,7 +2598,7 @@ bool Creature::SetDisableGravity(bool disable, bool packetOnly/*=false*/) data.WriteBit(guid[6]); data.WriteBit(guid[2]); data.WriteBit(guid[0]); - data.FlushBits(); + data.WriteByteSeq(guid[7]); data.WriteByteSeq(guid[3]); data.WriteByteSeq(guid[4]); @@ -2607,9 +2607,9 @@ bool Creature::SetDisableGravity(bool disable, bool packetOnly/*=false*/) data.WriteByteSeq(guid[6]); data.WriteByteSeq(guid[0]); data.WriteByteSeq(guid[5]); - SendMessageToSet(&data, false); } + SendMessageToSet(&data, false); return true; } @@ -2629,9 +2629,10 @@ bool Creature::SetHover(bool enable) //! Not always a packet is sent ObjectGuid guid = GetGUID(); + WorldPacket data; if (enable) { - WorldPacket data(SMSG_SPLINE_MOVE_SET_HOVER, 9); + data.Initialize(SMSG_SPLINE_MOVE_SET_HOVER, 9); data.WriteBit(guid[3]); data.WriteBit(guid[7]); data.WriteBit(guid[0]); @@ -2640,7 +2641,7 @@ bool Creature::SetHover(bool enable) data.WriteBit(guid[6]); data.WriteBit(guid[2]); data.WriteBit(guid[5]); - data.FlushBits(); + data.WriteByteSeq(guid[2]); data.WriteByteSeq(guid[4]); data.WriteByteSeq(guid[3]); @@ -2649,11 +2650,10 @@ bool Creature::SetHover(bool enable) data.WriteByteSeq(guid[0]); data.WriteByteSeq(guid[5]); data.WriteByteSeq(guid[6]); - SendMessageToSet(&data, false); } else { - WorldPacket data(SMSG_SPLINE_MOVE_UNSET_HOVER, 9); + data.Initialize(SMSG_SPLINE_MOVE_UNSET_HOVER, 9); data.WriteBit(guid[6]); data.WriteBit(guid[7]); data.WriteBit(guid[4]); @@ -2662,7 +2662,7 @@ bool Creature::SetHover(bool enable) data.WriteBit(guid[1]); data.WriteBit(guid[5]); data.WriteBit(guid[2]); - data.FlushBits(); + data.WriteByteSeq(guid[4]); data.WriteByteSeq(guid[5]); data.WriteByteSeq(guid[3]); @@ -2671,8 +2671,8 @@ bool Creature::SetHover(bool enable) data.WriteByteSeq(guid[7]); data.WriteByteSeq(guid[6]); data.WriteByteSeq(guid[1]); - SendMessageToSet(&data, false); } + SendMessageToSet(&data, false); return true; } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 65050753bb2..459cd030b40 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -26087,9 +26087,53 @@ void Player::SendMovementSetCanTransitionBetweenSwimAndFly(bool apply) void Player::SendMovementSetHover(bool apply) { - WorldPacket data(apply ? SMSG_MOVE_SET_HOVER : SMSG_MOVE_UNSET_HOVER, 12); - data.append(GetPackGUID()); - data << uint32(0); //! movement counter + ObjectGuid guid = GetGUID(); + WorldPacket data; + if (apply) + { + data.Initialize(SMSG_MOVE_SET_HOVER, 12); + data.WriteBit(guid[1]); + data.WriteBit(guid[4]); + data.WriteBit(guid[2]); + data.WriteBit(guid[3]); + data.WriteBit(guid[0]); + data.WriteBit(guid[5]); + data.WriteBit(guid[6]); + data.WriteBit(guid[7]); + + data.WriteByteSeq(guid[5]); + data.WriteByteSeq(guid[4]); + data.WriteByteSeq(guid[1]); + data.WriteByteSeq(guid[2]); + data.WriteByteSeq(guid[3]); + data.WriteByteSeq(guid[6]); + data.WriteByteSeq(guid[0]); + data.WriteByteSeq(guid[7]); + data << uint32(0); // movement counter + } + else + { + data.Initialize(SMSG_MOVE_UNSET_HOVER, 12); + data.WriteBit(guid[4]); + data.WriteBit(guid[6]); + data.WriteBit(guid[3]); + data.WriteBit(guid[1]); + data.WriteBit(guid[2]); + data.WriteBit(guid[7]); + data.WriteBit(guid[5]); + data.WriteBit(guid[0]); + + data.WriteByteSeq(guid[4]); + data.WriteByteSeq(guid[5]); + data.WriteByteSeq(guid[3]); + data.WriteByteSeq(guid[6]); + data.WriteByteSeq(guid[7]); + data.WriteByteSeq(guid[1]); + data.WriteByteSeq(guid[2]); + data.WriteByteSeq(guid[0]); + data << uint32(0); // movement counter + } + SendDirectMessage(&data); } @@ -26112,9 +26156,7 @@ void Player::SendMovementSetWaterWalking(bool apply) data.WriteByteSeq(guid[0]); data.WriteByteSeq(guid[5]); data.WriteByteSeq(guid[2]); - data << uint32(0); //! movement counter - data.WriteByteSeq(guid[7]); data.WriteByteSeq(guid[3]); data.WriteByteSeq(guid[4]); @@ -26141,7 +26183,6 @@ void Player::SendMovementSetWaterWalking(bool apply) data.WriteByteSeq(guid[0]); data.WriteByteSeq(guid[3]); data.WriteByteSeq(guid[2]); - data << uint32(0); //! movement counter } SendDirectMessage(&data); @@ -26167,9 +26208,7 @@ void Player::SendMovementSetFeatherFall(bool apply) data.WriteByteSeq(guid[5]); data.WriteByteSeq(guid[7]); data.WriteByteSeq(guid[2]); - data << uint32(0); //! movement counter - data.WriteByteSeq(guid[0]); data.WriteByteSeq(guid[3]); data.WriteByteSeq(guid[4]); diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index 9bfc5ffa87e..33824fa0b49 100755 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -552,8 +552,9 @@ void WorldSession::HandleTotemDestroyed(WorldPacket& recvPacket) return; uint8 slotId; - + uint64 guid; recvPacket >> slotId; + recvPacket >> guid; ++slotId; if (slotId >= MAX_TOTEM_SLOT) @@ -563,8 +564,7 @@ void WorldSession::HandleTotemDestroyed(WorldPacket& recvPacket) return; Creature* totem = GetPlayer()->GetMap()->GetCreature(_player->m_SummonSlot[slotId]); - - if (totem && totem->isTotem()) + if (totem && totem->isTotem() && totem->GetGUID() == guid) totem->ToTotem()->UnSummon(); } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 5a2ea0f5746..a69b4cc91c3 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -220,12 +220,12 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(CMSG_GET_MIRRORIMAGE_DATA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMirrorImageDataRequest ); DEFINE_OPCODE_HANDLER(CMSG_GMRESPONSE_RESOLVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGMResponseResolve ); DEFINE_OPCODE_HANDLER(CMSG_GMSURVEY_SUBMIT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGMSurveySubmit ); - DEFINE_OPCODE_HANDLER(CMSG_GMTICKET_CREATE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketCreateOpcode ); - DEFINE_OPCODE_HANDLER(CMSG_GMTICKET_DELETETICKET, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketDeleteOpcode ); + DEFINE_OPCODE_HANDLER(CMSG_GMTICKET_CREATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketCreateOpcode ); + DEFINE_OPCODE_HANDLER(CMSG_GMTICKET_DELETETICKET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketDeleteOpcode ); DEFINE_OPCODE_HANDLER(CMSG_GMTICKET_GETTICKET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketGetTicketOpcode ); - DEFINE_OPCODE_HANDLER(CMSG_GMTICKET_SYSTEMSTATUS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketSystemStatusOpcode); - DEFINE_OPCODE_HANDLER(CMSG_GMTICKET_UPDATETEXT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketUpdateOpcode ); - DEFINE_OPCODE_HANDLER(CMSG_GM_REPORT_LAG, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleReportLag ); + DEFINE_OPCODE_HANDLER(CMSG_GMTICKET_SYSTEMSTATUS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketSystemStatusOpcode); + DEFINE_OPCODE_HANDLER(CMSG_GMTICKET_UPDATETEXT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketUpdateOpcode ); + DEFINE_OPCODE_HANDLER(CMSG_GM_REPORT_LAG, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleReportLag ); DEFINE_OPCODE_HANDLER(CMSG_GOSSIP_HELLO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGossipHelloOpcode ); DEFINE_OPCODE_HANDLER(CMSG_GOSSIP_SELECT_OPTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGossipSelectOptionOpcode ); DEFINE_OPCODE_HANDLER(CMSG_GRANT_LEVEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGrantLevel ); @@ -526,7 +526,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(CMSG_TIME_SYNC_RESP, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleTimeSyncResp ); DEFINE_OPCODE_HANDLER(CMSG_TIME_SYNC_RESP_FAILED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER(CMSG_TOGGLE_PVP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTogglePvP ); - DEFINE_OPCODE_HANDLER(CMSG_TOTEM_DESTROYED, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleTotemDestroyed ); + DEFINE_OPCODE_HANDLER(CMSG_TOTEM_DESTROYED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTotemDestroyed ); DEFINE_OPCODE_HANDLER(CMSG_TRAINER_BUY_SPELL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTrainerBuySpellOpcode ); DEFINE_OPCODE_HANDLER(CMSG_TRAINER_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTrainerListOpcode ); DEFINE_OPCODE_HANDLER(CMSG_TRANSMOGRIFY_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTransmogrifyItems ); @@ -1000,7 +1000,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_COMPOUND_STATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_FLIGHT_BACK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_FLIGHT_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_HOVER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_HOVER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_PITCH_RATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_RUN_BACK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_RUN_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); @@ -1011,7 +1011,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(SMSG_MOVE_UNROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_UNSET_CAN_FLY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_UNSET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - DEFINE_OPCODE_HANDLER(SMSG_MOVE_UNSET_HOVER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_MOVE_UNSET_HOVER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_COLLISION_HEIGHT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_KNOCK_BACK, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); @@ -1677,7 +1677,6 @@ void OpcodeTable::Initialize() //DEFINE_OPCODE_HANDLER(SMSG_SERVERINFO, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //DEFINE_OPCODE_HANDLER(SMSG_SERVER_BUCK_DATA, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //DEFINE_OPCODE_HANDLER(SMSG_SERVER_BUCK_DATA_START, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //DEFINE_OPCODE_HANDLER(SMSG_SETUP_RESEARCH_HISTORY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //DEFINE_OPCODE_HANDLER(SMSG_SET_EXTRA_AURA_INFO_NEED_UPDATE_OBSOLETE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //DEFINE_OPCODE_HANDLER(SMSG_SET_EXTRA_AURA_INFO_OBSOLETE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //DEFINE_OPCODE_HANDLER(SMSG_SHOW_MAILBOX, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 379ea2542ca..006ef8fa133 100755 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -1243,7 +1243,6 @@ enum Opcodes SMSG_SERVER_INFO_RESPONSE = 0x74B5, SMSG_SERVER_MESSAGE = 0x6C04, SMSG_SERVER_PERF = 0x74B6, - SMSG_SETUP_RESEARCH_HISTORY = 0x0000, SMSG_SET_AI_ANIM_KIT = 0x0000, SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x35B6, SMSG_SET_FACTION_ATWAR = 0x4216, diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 81f1bbe7198..27abe8ebc6e 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -5845,6 +5845,7 @@ void Spell::EffectPlayMusic(SpellEffIndex effIndex) WorldPacket data(SMSG_PLAY_MUSIC, 4); data << uint32(soundid); + data << uint64(unitTarget->GetGUID()); unitTarget->ToPlayer()->GetSession()->SendPacket(&data); } diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp index 334ed676660..ffcb65bb14b 100644 --- a/src/server/game/Tickets/TicketMgr.cpp +++ b/src/server/game/Tickets/TicketMgr.cpp @@ -131,6 +131,11 @@ void GmTicket::WritePacket(WorldPacket& data) const data << uint8(std::min(_escalatedStatus, TICKET_IN_ESCALATION_QUEUE)); // escalated data data << uint8(_viewed ? GMTICKET_OPENEDBYGM_STATUS_OPENED : GMTICKET_OPENEDBYGM_STATUS_NOT_OPENED); // whether or not it has been viewed + + // TODO: implement these + std::string waitTimeOverrideMessage = ""; + data << waitTimeOverrideMessage; + data << uint32(0); // waitTimeOverrideMinutes } void GmTicket::SendResponse(WorldSession* session) const |