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:
hondacrx
2022-06-02 22:16:12 -04:00
parent 8934cfb6dc
commit 2cc0b372bf
4 changed files with 36 additions and 3 deletions
+1 -1
View File
@@ -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);
}
+12
View File
@@ -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)); }
+9
View File
@@ -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
{