protected async ValueTask <bool> ValidateOwnership(CheatContext context, IClientPlayer sender) { if (!sender.IsOwner(this)) { if (await sender.Client.ReportCheatAsync(context, $"Failed ownership check on {GetType().Name}")) { return(false); } } return(true); }
public override async ValueTask DeserializeAsync(IClientPlayer sender, IClientPlayer?target, IMessageReader reader, bool initialState) { var sequenceId = reader.ReadUInt16(); if (initialState) { _lastSequenceId = sequenceId; await SetPositionAsync(sender, reader.ReadVector2()); _targetSyncVelocity = reader.ReadVector2(); } else { if (!sender.IsOwner(this)) { if (await sender.Client.ReportCheatAsync(CheatContext.Deserialize, $"Client attempted to send unowned {nameof(InnerCustomNetworkTransform)} data")) { return; } } if (target != null) { if (await sender.Client.ReportCheatAsync(CheatContext.Deserialize, $"Client attempted to send {nameof(InnerCustomNetworkTransform)} data to a specific player, must be broadcast")) { return; } } if (!SidGreaterThan(sequenceId, _lastSequenceId)) { return; } _lastSequenceId = sequenceId; await SetPositionAsync(sender, reader.ReadVector2()); _targetSyncVelocity = reader.ReadVector2(); } }