Exemple #1
0
//        private int spend = 0;
        public bool OnTick(Message packet)
        {
            using (PlayerTick playerTick = PlayerTick.Deserialize(packet.read, previousRecievedTick, true))
            {
                previousRecievedTick = playerTick.Copy();
                ViewAngles           = playerTick.inputState.aimAngles;
                EyePos = playerTick.eyePos;
//                spend++;
//                if (spend < 8)
//                {
//                    return true;
//                }
//                spend = 0;

                if (IsServerAdmin)
                {
                    return(false);
                }
                if (playerTick.modelState.flying)
                {
                    playerTick.modelState.flying = false;

                    lastFlying = true;
                }
                else
                {
                    if (lastFlying)
                    {
                        previousTick.modelState.flying = true;
                    }
                    lastFlying = false;
                }


                if (VirtualServer.BaseClient.write.Start())
                {
                    VirtualServer.BaseClient.write.PacketID(Message.Type.Tick);
                    playerTick.WriteToStreamDelta(VirtualServer.BaseClient.write, previousTick);
                    previousTick = playerTick.Copy();

                    VirtualServer.BaseClient.Send();
                }
                return(true);
            }
        }
Exemple #2
0
        public void OnReceivedTick(Message _message)
        {
            bool needUpdateFlags = false;

            PlayerTick msg = PlayerTick.Deserialize(_message.read, this.m_lastPlayerTickPacket, true);

            this.PlayerOwner.PlayerButtons = (E_PlayerButton)msg.inputState.buttons;
            if (ModelState.Equal(this.PlayerOwner.PlayerModelState, msg.modelState) == false)
            {
                this.PlayerOwner.PlayerModelState = msg.modelState;
                needUpdateFlags = true;
            }

            if (this.PlayerOwner.IsSleeping)
            {
                if (this.PlayerOwner.HasPlayerButton(E_PlayerButton.FIRE_PRIMARY) || this.PlayerOwner.HasPlayerButton(E_PlayerButton.FIRE_SECONDARY) || this.PlayerOwner.HasPlayerButton(E_PlayerButton.JUMP))
                {
                    this.PlayerOwner.SetPlayerFlag(E_PlayerFlags.Sleeping, false);
                    needUpdateFlags = true;
                }
            }
            else
            {
                if ((this.PlayerOwner.ActiveItem?.UID ?? 0) != msg.activeItem)
                {
                    this.PlayerOwner.OnChangeActiveItem(Item.ListItemsInWorld.TryGetValue(msg.activeItem, out Item item) ? item : null);
                    needUpdateFlags = true;
                }
                if (this.PlayerOwner.Position != msg.position || this.PlayerOwner.Rotation != msg.inputState.aimAngles)
                {
                    this.PlayerOwner.Position = msg.position;
                    this.PlayerOwner.Rotation = msg.inputState.aimAngles;
                    this.PlayerOwner.OnPositionChanged();
                }
            }

            if (needUpdateFlags == true)
            {
                this.PlayerOwner.SendNetworkUpdate_PlayerFlags();
            }
            this.m_lastPlayerTickPacket = msg.Copy();
        }