aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRat <gmstreetrat@gmail.com>2012-01-21 22:25:01 +0100
committerRat <gmstreetrat@gmail.com>2012-01-21 22:25:01 +0100
commitf006a2da68cf2df130a02e41eda4ab0e06d92170 (patch)
tree18df8247100d566aad15070bdc2c1dba7041723a /src
parent68ec9b02e39b8adca44e49cc928ab54ab7b64e8f (diff)
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
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp48
-rwxr-xr-xsrc/server/game/Entities/Player/Player.h1
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp8
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/MovementHandler.cpp5
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp3
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuraEffects.cpp20
-rw-r--r--src/server/scripts/Commands/cs_gm.cpp7
7 files changed, 60 insertions, 32 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 4d9dd6aa669..cdb9ddbcd9b 100755
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -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))
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 66e95f09003..a594f2c02ef 100755
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -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();
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index dcc18c0559f..cbfa73d5311 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -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());
diff --git a/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp b/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
index b23a73dc9bb..71dfc670145 100755
--- a/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
@@ -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
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 41ddddaaf1d..1225f7b6c06 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -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 );
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 124e1628903..c54f644a43c 100755
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -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)
diff --git a/src/server/scripts/Commands/cs_gm.cpp b/src/server/scripts/Commands/cs_gm.cpp
index 926e2fe2bf2..ac57d9c9425 100644
--- a/src/server/scripts/Commands/cs_gm.cpp
+++ b/src/server/scripts/Commands/cs_gm.cpp
@@ -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;
}