Core/PacketIO: Implemented CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE and ActivePlayerData::TransportServerTime updatefield
Port From (https://github.com/TrinityCore/TrinityCore/commit/aa592e431b945800928f2e43b3812cfa240fada1)
This commit is contained in:
@@ -1232,7 +1232,7 @@ namespace Game.Entities
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CanNeverSee(WorldObject obj)
|
||||
public virtual bool CanNeverSee(WorldObject obj)
|
||||
{
|
||||
return GetMap() != obj.GetMap() || !IsInPhase(obj);
|
||||
}
|
||||
|
||||
@@ -780,6 +780,9 @@ namespace Game.Entities
|
||||
GetName(), viewpoint.GetEntry(), viewpoint.GetTypeId());
|
||||
SetViewpoint(viewpoint, false);
|
||||
}
|
||||
|
||||
RemovePlayerLocalFlag(PlayerLocalFlags.OverrideTransportServerTime);
|
||||
SetTransportServerTime(0);
|
||||
}
|
||||
|
||||
void ScheduleDelayedOperation(PlayerDelayedOperations operation)
|
||||
@@ -4099,6 +4102,13 @@ namespace Game.Entities
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool CanNeverSee(WorldObject obj)
|
||||
{
|
||||
// the intent is to delay sending visible objects until client is ready for them
|
||||
// some gameobjects dont function correctly if they are sent before TransportServerTime is correctly set (after CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE)
|
||||
return !HasPlayerLocalFlag(PlayerLocalFlags.OverrideTransportServerTime);
|
||||
}
|
||||
|
||||
public override bool CanAlwaysSee(WorldObject obj)
|
||||
{
|
||||
// Always can see self
|
||||
@@ -7739,6 +7749,8 @@ namespace Game.Entities
|
||||
public void AddAuraVision(PlayerFieldByte2Flags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.AuraVision), (byte)flags); }
|
||||
public void RemoveAuraVision(PlayerFieldByte2Flags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.AuraVision), (byte)flags); }
|
||||
|
||||
public void SetTransportServerTime(int transportServerTime) { SetUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.TransportServerTime), transportServerTime); }
|
||||
|
||||
public bool CanTameExoticPets() { return IsGameMaster() || HasAuraType(AuraType.AllowTamePetType); }
|
||||
|
||||
void SendAttackSwingCantAttack() { SendPacket(new AttackSwingError(AttackSwingErr.CantAttack)); }
|
||||
|
||||
@@ -828,5 +828,14 @@ namespace Game
|
||||
_timeSyncClockDelta = back.Item1;
|
||||
}
|
||||
}
|
||||
|
||||
[WorldPacketHandler(ClientOpcodes.MoveInitActiveMoverComplete, Processing = PacketProcessing.ThreadSafe)]
|
||||
void HandleMoveInitActiveMoverComplete(MoveInitActiveMoverComplete moveInitActiveMoverComplete)
|
||||
{
|
||||
_player.SetPlayerLocalFlag(PlayerLocalFlags.OverrideTransportServerTime);
|
||||
_player.SetTransportServerTime((int)(GameTime.GetGameTimeMS() - moveInitActiveMoverComplete.Ticks));
|
||||
|
||||
_player.UpdateObjectVisibility(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -490,7 +490,7 @@ namespace Game.Networking.Packets
|
||||
public ObjectGuid Guid;
|
||||
public float SplineDist;
|
||||
}
|
||||
|
||||
|
||||
public class MoveSplineSetSpeed : ServerPacket
|
||||
{
|
||||
public MoveSplineSetSpeed(ServerOpcodes opcode) : base(opcode, ConnectionType.Instance) { }
|
||||
@@ -1028,7 +1028,7 @@ namespace Game.Networking.Packets
|
||||
public ObjectGuid MoverGUID;
|
||||
public uint TimeSkipped;
|
||||
}
|
||||
|
||||
|
||||
class SummonResponse : ClientPacket
|
||||
{
|
||||
public SummonResponse(WorldPacket packet) : base(packet) { }
|
||||
@@ -1239,6 +1239,18 @@ namespace Game.Networking.Packets
|
||||
}
|
||||
}
|
||||
|
||||
class MoveInitActiveMoverComplete : ClientPacket
|
||||
{
|
||||
public uint Ticks;
|
||||
|
||||
public MoveInitActiveMoverComplete(WorldPacket packet) : base(packet) { }
|
||||
|
||||
public override void Read()
|
||||
{
|
||||
_worldPacket.WriteUInt32(Ticks);
|
||||
}
|
||||
}
|
||||
|
||||
//Structs
|
||||
public struct MovementAck
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user