mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-17 13:39:46 -04:00
Core/Movement: updated UN/SET_FLY packets, .gm fly on/off now works, fly mounts are still broken, probably aura handling needs to be updated too
This commit is contained in:
@@ -2103,6 +2103,54 @@ void Player::SendTeleportPacket(Position &oldPos)
|
||||
SendDirectMessage(&data);
|
||||
}
|
||||
|
||||
void Player::SendSetFlyPacket(bool apply)
|
||||
{
|
||||
WorldPacket data(apply ? SMSG_MOVE_SET_CAN_FLY : SMSG_MOVE_UNSET_CAN_FLY, 12);
|
||||
uint64 guid = GetGUID();
|
||||
uint8* bytes = (uint8*)&guid;
|
||||
if (apply)
|
||||
{
|
||||
data.WriteBit(bytes[4]);
|
||||
data.WriteBit(bytes[3]);
|
||||
data.WriteBit(bytes[6]);
|
||||
data.WriteBit(bytes[0]);
|
||||
data.WriteBit(bytes[1]);
|
||||
data.WriteBit(bytes[2]);
|
||||
data.WriteBit(bytes[7]);
|
||||
data.WriteBit(bytes[5]);
|
||||
data.WriteByteSeq(bytes[3]);
|
||||
data.WriteByteSeq(bytes[7]);
|
||||
data.WriteByteSeq(bytes[5]);
|
||||
data.WriteByteSeq(bytes[0]);
|
||||
data.WriteByteSeq(bytes[1]);
|
||||
data.WriteByteSeq(bytes[4]);
|
||||
data << uint32(sWorld->GetGameTime());
|
||||
data.WriteByteSeq(bytes[6]);
|
||||
data.WriteByteSeq(bytes[2]);
|
||||
}
|
||||
else
|
||||
{
|
||||
data.WriteBit(bytes[1]);
|
||||
data.WriteBit(bytes[6]);
|
||||
data.WriteBit(bytes[0]);
|
||||
data.WriteBit(bytes[2]);
|
||||
data.WriteBit(bytes[4]);
|
||||
data.WriteBit(bytes[5]);
|
||||
data.WriteBit(bytes[7]);
|
||||
data.WriteBit(bytes[3]);
|
||||
data.WriteByteSeq(bytes[7]);
|
||||
data.WriteByteSeq(bytes[6]);
|
||||
data.WriteByteSeq(bytes[5]);
|
||||
data.WriteByteSeq(bytes[0]);
|
||||
data << uint32(sWorld->GetGameTime());
|
||||
data.WriteByteSeq(bytes[3]);
|
||||
data.WriteByteSeq(bytes[1]);
|
||||
data.WriteByteSeq(bytes[2]);
|
||||
data.WriteByteSeq(bytes[4]);
|
||||
}
|
||||
SendDirectMessage(&data);
|
||||
}
|
||||
|
||||
bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options)
|
||||
{
|
||||
if (!MapManager::IsValidMapCoord(mapid, x, y, z, orientation))
|
||||
|
||||
@@ -1982,6 +1982,7 @@ class Player : public Unit, public GridObject<Player>
|
||||
void SendMessageToSet(WorldPacket* data, Player const* skipped_rcvr);
|
||||
|
||||
void SendTeleportPacket(Position &oldPos);
|
||||
void SendSetFlyPacket(bool apply);
|
||||
|
||||
Corpse* GetCorpse() const;
|
||||
void SpawnCorpseBones();
|
||||
|
||||
@@ -11958,11 +11958,11 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
|
||||
player->UnsummonPetTemporaryIfAny();
|
||||
}
|
||||
|
||||
WorldPacket data(SMSG_MOVE_SET_COLLISION_HEIGHT, GetPackGUID().size() + 4 + 4);
|
||||
/*WorldPacket data(SMSG_MOVE_SET_COLLISION_HEIGHT, GetPackGUID().size() + 4 + 4);
|
||||
data.append(GetPackGUID());
|
||||
data << uint32(sWorld->GetGameTime()); // Packet counter
|
||||
data << player->GetCollisionHeight(true);
|
||||
player->GetSession()->SendPacket(&data);
|
||||
player->GetSession()->SendPacket(&data);*/
|
||||
}
|
||||
|
||||
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_MOUNT);
|
||||
@@ -11976,14 +11976,14 @@ void Unit::Dismount()
|
||||
SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0);
|
||||
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_MOUNT);
|
||||
|
||||
if (Player* thisPlayer = ToPlayer())
|
||||
/*if (Player* thisPlayer = ToPlayer())
|
||||
{
|
||||
WorldPacket data(SMSG_MOVE_SET_COLLISION_HEIGHT, GetPackGUID().size() + 4 + 4);
|
||||
data.append(GetPackGUID());
|
||||
data << uint32(sWorld->GetGameTime()); // Packet counter
|
||||
data << thisPlayer->GetCollisionHeight(false);
|
||||
thisPlayer->GetSession()->SendPacket(&data);
|
||||
}
|
||||
}*/
|
||||
|
||||
WorldPacket data(SMSG_DISMOUNT, 8);
|
||||
data.appendPackGUID(GetGUID());
|
||||
|
||||
@@ -484,10 +484,7 @@ void WorldSession::HandleSetActiveMoverOpcode(WorldPacket &recv_data)
|
||||
GetPlayer()->SetMover(mover);
|
||||
if (mover != GetPlayer() && mover->canFly())
|
||||
{
|
||||
WorldPacket data(SMSG_MOVE_SPLINE_SET_FLYING, 12);
|
||||
data.append(mover->GetPackGUID());
|
||||
data << uint32(0);
|
||||
SendPacket(&data);
|
||||
GetPlayer()->SendSetFlyPacket(true);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -896,7 +896,8 @@ void InitOpcodes()
|
||||
//DEFINE_OPCODE_HANDLER(CMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY_ACK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
//DEFINE_OPCODE_HANDLER(MSG_MOVE_START_SWIM_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
//DEFINE_OPCODE_HANDLER(MSG_MOVE_STOP_SWIM_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_MOVE_SPLINE_SET_FLYING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_CAN_FLY, 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_SPLINE_UNSET_FLYING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(CMSG_MOVE_SET_CAN_FLY_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveSetCanFlyAckOpcode );
|
||||
//DEFINE_OPCODE_HANDLER(CMSG_MOVE_SET_FLY, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
|
||||
|
||||
@@ -2850,14 +2850,7 @@ void AuraEffect::HandleAuraAllowFlight(AuraApplication const* aurApp, uint8 mode
|
||||
if (Player* player = target->m_movedPlayer)
|
||||
{
|
||||
// allow flying
|
||||
WorldPacket data;
|
||||
if (apply)
|
||||
data.Initialize(SMSG_MOVE_SPLINE_SET_FLYING, 12);
|
||||
else
|
||||
data.Initialize(SMSG_MOVE_SPLINE_UNSET_FLYING, 12);
|
||||
data.append(target->GetPackGUID());
|
||||
data << uint32(0); // unk
|
||||
player->SendDirectMessage(&data);
|
||||
player->SendSetFlyPacket(apply);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3247,16 +3240,7 @@ void AuraEffect::HandleAuraModIncreaseFlightSpeed(AuraApplication const* aurApp,
|
||||
if (mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK && (apply || (!target->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) && !target->HasAuraType(SPELL_AURA_FLY))))
|
||||
{
|
||||
if (Player* player = target->m_movedPlayer)
|
||||
{
|
||||
WorldPacket data;
|
||||
if (apply)
|
||||
data.Initialize(SMSG_MOVE_SPLINE_SET_FLYING, 12);
|
||||
else
|
||||
data.Initialize(SMSG_MOVE_SPLINE_UNSET_FLYING, 12);
|
||||
data.append(player->GetPackGUID());
|
||||
data << uint32(0); // unknown
|
||||
player->SendDirectMessage(&data);
|
||||
}
|
||||
player->SendSetFlyPacket(apply);
|
||||
}
|
||||
|
||||
if (mode & AURA_EFFECT_HANDLE_REAL)
|
||||
|
||||
@@ -97,17 +97,14 @@ public:
|
||||
|
||||
WorldPacket data;
|
||||
if (strncmp(args, "on", 3) == 0)
|
||||
data.SetOpcode(SMSG_MOVE_SET_CAN_FLY);
|
||||
target->SendSetFlyPacket(true);
|
||||
else if (strncmp(args, "off", 4) == 0)
|
||||
data.SetOpcode(SMSG_MOVE_UNSET_CAN_FLY);
|
||||
target->SendSetFlyPacket(false);
|
||||
else
|
||||
{
|
||||
handler->SendSysMessage(LANG_USE_BOL);
|
||||
return false;
|
||||
}
|
||||
data.append(target->GetPackGUID());
|
||||
data << uint32(0); // unknown
|
||||
target->SendMessageToSet(&data, true);
|
||||
handler->PSendSysMessage(LANG_COMMAND_FLYMODE_STATUS, handler->GetNameLink(target).c_str(), args);
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user