Exemple #1
0
        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);
        }
Exemple #2
0
        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();
            }
        }