// 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); } }
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(); }