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; return true;
} }
bool CanNeverSee(WorldObject obj) public virtual bool CanNeverSee(WorldObject obj)
{ {
return GetMap() != obj.GetMap() || !IsInPhase(obj); return GetMap() != obj.GetMap() || !IsInPhase(obj);
} }
+12
View File
@@ -780,6 +780,9 @@ namespace Game.Entities
GetName(), viewpoint.GetEntry(), viewpoint.GetTypeId()); GetName(), viewpoint.GetEntry(), viewpoint.GetTypeId());
SetViewpoint(viewpoint, false); SetViewpoint(viewpoint, false);
} }
RemovePlayerLocalFlag(PlayerLocalFlags.OverrideTransportServerTime);
SetTransportServerTime(0);
} }
void ScheduleDelayedOperation(PlayerDelayedOperations operation) void ScheduleDelayedOperation(PlayerDelayedOperations operation)
@@ -4099,6 +4102,13 @@ namespace Game.Entities
return false; 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) public override bool CanAlwaysSee(WorldObject obj)
{ {
// Always can see self // 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 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 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); } public bool CanTameExoticPets() { return IsGameMaster() || HasAuraType(AuraType.AllowTamePetType); }
void SendAttackSwingCantAttack() { SendPacket(new AttackSwingError(AttackSwingErr.CantAttack)); } void SendAttackSwingCantAttack() { SendPacket(new AttackSwingError(AttackSwingErr.CantAttack)); }
+9
View File
@@ -828,5 +828,14 @@ namespace Game
_timeSyncClockDelta = back.Item1; _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);
}
} }
} }
@@ -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 //Structs
public struct MovementAck public struct MovementAck
{ {