public static PlayerTick DeserializeLength(Stream stream, int length)
    {
        PlayerTick playerTick = Pool.Get <PlayerTick>();

        PlayerTick.DeserializeLength(stream, length, playerTick, false);
        return(playerTick);
    }
    public PlayerTick Copy()
    {
        PlayerTick playerTick = Pool.Get <PlayerTick>();

        this.CopyTo(playerTick);
        return(playerTick);
    }
    public static PlayerTick Deserialize(Stream stream)
    {
        PlayerTick playerTick = Pool.Get <PlayerTick>();

        PlayerTick.Deserialize(stream, playerTick, false);
        return(playerTick);
    }
 public void CopyTo(PlayerTick instance)
 {
     if (this.inputState == null)
     {
         instance.inputState = null;
     }
     else if (instance.inputState != null)
     {
         this.inputState.CopyTo(instance.inputState);
     }
     else
     {
         instance.inputState = this.inputState.Copy();
     }
     instance.position = this.position;
     if (this.modelState == null)
     {
         instance.modelState = null;
     }
     else if (instance.modelState != null)
     {
         this.modelState.CopyTo(instance.modelState);
     }
     else
     {
         instance.modelState = this.modelState.Copy();
     }
     instance.activeItem = this.activeItem;
     instance.eyePos     = this.eyePos;
     instance.parentID   = this.parentID;
 }
 public static PlayerTick Deserialize(byte[] buffer, PlayerTick instance, bool isDelta = false)
 {
     using (MemoryStream memoryStream = new MemoryStream(buffer))
     {
         PlayerTick.Deserialize(memoryStream, instance, isDelta);
     }
     return(instance);
 }
 public virtual void WriteToStreamDelta(Stream stream, PlayerTick previous)
 {
     if (previous == null)
     {
         PlayerTick.Serialize(stream, this);
         return;
     }
     PlayerTick.SerializeDelta(stream, this, previous);
 }
    public static void SerializeDelta(Stream stream, PlayerTick instance, PlayerTick previous)
    {
        MemoryStream memoryStream = Pool.Get <MemoryStream>();

        if (instance.inputState == null)
        {
            throw new ArgumentNullException("inputState", "Required by proto specification.");
        }
        stream.WriteByte(10);
        memoryStream.SetLength((long)0);
        InputMessage.SerializeDelta(memoryStream, instance.inputState, previous.inputState);
        uint length = (uint)memoryStream.Length;

        ProtocolParser.WriteUInt32(stream, length);
        stream.Write(memoryStream.GetBuffer(), 0, (int)length);
        if (instance.position != previous.position)
        {
            stream.WriteByte(18);
            memoryStream.SetLength((long)0);
            Vector3Serialized.SerializeDelta(memoryStream, instance.position, previous.position);
            uint num = (uint)memoryStream.Length;
            ProtocolParser.WriteUInt32(stream, num);
            stream.Write(memoryStream.GetBuffer(), 0, (int)num);
        }
        if (instance.modelState == null)
        {
            throw new ArgumentNullException("modelState", "Required by proto specification.");
        }
        stream.WriteByte(34);
        memoryStream.SetLength((long)0);
        ModelState.SerializeDelta(memoryStream, instance.modelState, previous.modelState);
        uint length1 = (uint)memoryStream.Length;

        ProtocolParser.WriteUInt32(stream, length1);
        stream.Write(memoryStream.GetBuffer(), 0, (int)length1);
        if (instance.activeItem != previous.activeItem)
        {
            stream.WriteByte(40);
            ProtocolParser.WriteUInt32(stream, instance.activeItem);
        }
        if (instance.eyePos != previous.eyePos)
        {
            stream.WriteByte(50);
            memoryStream.SetLength((long)0);
            Vector3Serialized.SerializeDelta(memoryStream, instance.eyePos, previous.eyePos);
            uint num1 = (uint)memoryStream.Length;
            ProtocolParser.WriteUInt32(stream, num1);
            stream.Write(memoryStream.GetBuffer(), 0, (int)num1);
        }
        if (instance.parentID != previous.parentID)
        {
            stream.WriteByte(56);
            ProtocolParser.WriteUInt32(stream, instance.parentID);
        }
        Pool.FreeMemoryStream(ref memoryStream);
    }
    public static PlayerTick Deserialize(byte[] buffer)
    {
        PlayerTick playerTick = Pool.Get <PlayerTick>();

        using (MemoryStream memoryStream = new MemoryStream(buffer))
        {
            PlayerTick.Deserialize(memoryStream, playerTick, false);
        }
        return(playerTick);
    }
 public static byte[] SerializeToBytes(PlayerTick instance)
 {
     byte[] array;
     using (MemoryStream memoryStream = new MemoryStream())
     {
         PlayerTick.Serialize(memoryStream, instance);
         array = memoryStream.ToArray();
     }
     return(array);
 }
Exemple #10
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 #11
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();
        }
 public static void ResetToPool(PlayerTick instance)
 {
     if (!instance.ShouldPool)
     {
         return;
     }
     if (instance.inputState != null)
     {
         instance.inputState.ResetToPool();
         instance.inputState = null;
     }
     instance.position = new Vector3();
     if (instance.modelState != null)
     {
         instance.modelState.ResetToPool();
         instance.modelState = null;
     }
     instance.activeItem = 0;
     instance.eyePos     = new Vector3();
     instance.parentID   = 0;
     Pool.Free <PlayerTick>(ref instance);
 }
Exemple #13
0
 public Tick(Packet p)
 {
     protobuf   = PlayerTick.Deserialize(p);
     modelState = new BaseModelState(protobuf.modelState);
     inputState = new Input_Message(protobuf.inputState);
 }
 public virtual void WriteToStream(Stream stream)
 {
     PlayerTick.Serialize(stream, this);
 }
 public byte[] ToProtoBytes()
 {
     return(PlayerTick.SerializeToBytes(this));
 }
 public void ToProto(Stream stream)
 {
     PlayerTick.Serialize(stream, this);
 }
Exemple #17
0
        private object OnPlayerTick(BasePlayer player, PlayerTick msg)
        {
            InputState input;

            return(playerInputState.TryGetValue(player, out input) ? Interface.CallHook("OnPlayerInput", player, input) : null);
        }
 public void ResetToPool()
 {
     PlayerTick.ResetToPool(this);
 }
 public virtual void ReadFromStream(Stream stream, int size, bool isDelta = false)
 {
     PlayerTick.DeserializeLength(stream, size, this, isDelta);
 }
 public void FromProto(Stream stream, bool isDelta = false)
 {
     PlayerTick.Deserialize(stream, this, isDelta);
 }
    public static PlayerTick DeserializeLengthDelimited(Stream stream, PlayerTick instance, bool isDelta)
    {
        long position = (long)ProtocolParser.ReadUInt32(stream);

        position += stream.Position;
        while (stream.Position < position)
        {
            int num = stream.ReadByte();
            if (num == -1)
            {
                throw new EndOfStreamException();
            }
            if (num <= 34)
            {
                if (num == 10)
                {
                    if (instance.inputState != null)
                    {
                        InputMessage.DeserializeLengthDelimited(stream, instance.inputState, isDelta);
                        continue;
                    }
                    else
                    {
                        instance.inputState = InputMessage.DeserializeLengthDelimited(stream);
                        continue;
                    }
                }
                else if (num == 18)
                {
                    Vector3Serialized.DeserializeLengthDelimited(stream, ref instance.position, isDelta);
                    continue;
                }
                else if (num == 34)
                {
                    if (instance.modelState != null)
                    {
                        ModelState.DeserializeLengthDelimited(stream, instance.modelState, isDelta);
                        continue;
                    }
                    else
                    {
                        instance.modelState = ModelState.DeserializeLengthDelimited(stream);
                        continue;
                    }
                }
            }
            else if (num == 40)
            {
                instance.activeItem = ProtocolParser.ReadUInt32(stream);
                continue;
            }
            else if (num == 50)
            {
                Vector3Serialized.DeserializeLengthDelimited(stream, ref instance.eyePos, isDelta);
                continue;
            }
            else if (num == 56)
            {
                instance.parentID = ProtocolParser.ReadUInt32(stream);
                continue;
            }
            Key key = ProtocolParser.ReadKey((byte)num, stream);
            if (key.Field == 0)
            {
                throw new ProtocolBufferException("Invalid field id: 0, something went wrong in the stream");
            }
            ProtocolParser.SkipKey(stream, key);
        }
        if (stream.Position != position)
        {
            throw new ProtocolBufferException("Read past max limit");
        }
        return(instance);
    }
Exemple #22
0
 private object OnPlayerTick(BasePlayer player, PlayerTick msg)
 {
     return Interface.CallHook("OnPlayerInput", player, serverInputField.GetValue(player));
 }
 public static void SerializeLengthDelimited(Stream stream, PlayerTick instance)
 {
     byte[] bytes = PlayerTick.SerializeToBytes(instance);
     ProtocolParser.WriteUInt32(stream, (uint)bytes.Length);
     stream.Write(bytes, 0, (int)bytes.Length);
 }
Exemple #24
0
 private object OnPlayerTick(BasePlayer player, PlayerTick msg)
 {
     InputState input;
     return playerInputState.TryGetValue(player, out input) ? Interface.CallHook("OnPlayerInput", player, input) : null;
 }
Exemple #25
0
            public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
            {
                serializer.ContractResolver = new JsonResolver();
                var packet = (Packet)value;

                writer.WriteStartObject();
                Action <string, object> Serialize = (string name, object obj) => {
                    writer.WritePropertyName(name);
                    serializer.Serialize(writer, obj);
                };

                if (Informative)
                {
                    Serialize("ID", packet.packetID);
                    Serialize("Name", packet.GetName());
                    Serialize("Type", packet.GetPacketTypeName());
                    Serialize("Origin", packet.GetOrigin());
                    Serialize("Delay", packet.delay);
                }
                else
                {
                    Serialize("ID", packet.packetID);
                    Serialize("TypeID", packet.type);
                    Serialize("Length", packet.incomingLength);
                    Serialize("GUID", packet.incomingGUID);
                    Serialize("Data", packet.baseStream.ToArray());
                }
                if (packet.length > 1 && Informative)
                {
                    if (packet.type == Packet.PacketType.RUST)
                    {
                        writer.WritePropertyName("Content");
                        writer.WriteStartObject();
                        packet.Position = 1;
                        switch (packet.rustID)
                        {
                        case Packet.Rust.Approved:
                            Serialize("ProtoBuf", ProtoBuf.Approval.Deserialize(packet));
                            break;

                        case Packet.Rust.Auth:
                            var bytes = packet.BytesWithSize();
                            Serialize("AuthData", BitConverter.ToString(bytes).Replace("-", ""));
                            break;

                        case Packet.Rust.ConsoleCommand:
                            Serialize("Command", packet.String());
                            break;

                        case Packet.Rust.ConsoleMessage:
                            Serialize("Message", packet.String());
                            break;

                        case Packet.Rust.DisconnectReason:
                            Serialize("Reason", packet.String());
                            break;

                        case Packet.Rust.Effect:
                            Serialize("ProtoBuf", EffectData.Deserialize(packet));
                            break;

                        case Packet.Rust.Entities:
                            Serialize("Num", packet.UInt32());
                            Serialize("ProtoBuf", ProtoBuf.Entity.Deserialize(packet));
                            break;

                        case Packet.Rust.EntityDestroy:
                            Serialize("UID", packet.UInt32());
                            Serialize("Destroy Mode", packet.UInt8());
                            break;

                        case Packet.Rust.EntityPosition:
                            writer.WritePropertyName("Entity Positions");
                            writer.WriteStartArray();
                            while (packet.unread >= 28L)
                            {
                                writer.WriteStartObject();
                                Serialize("Entity ID", packet.EntityID());
                                Serialize("Position", packet.Vector3());
                                Serialize("Rotation", packet.Vector3());
                                writer.WriteEndObject();
                            }
                            writer.WriteEndArray();
                            break;

                        case Packet.Rust.GiveUserInformation:
                            Serialize("ProtocolVersion", packet.UInt8());
                            Serialize("Steam ID", packet.UInt64());
                            Serialize("Protocol", packet.UInt32());
                            Serialize("OS Name", packet.String());
                            Serialize("Steam Name", packet.String());
                            Serialize("Branch", packet.String());
                            break;

                        case Packet.Rust.GroupChange:
                            Serialize("Entity ID", packet.EntityID());
                            Serialize("Group ID", packet.GroupID());
                            break;

                        case Packet.Rust.GroupDestroy:
                            Serialize("Group ID", packet.GroupID());

                            break;

                        case Packet.Rust.GroupEnter:
                            Serialize("Group ID", packet.GroupID());
                            break;

                        case Packet.Rust.GroupLeave:
                            Serialize("Group ID", packet.GroupID());
                            break;

                        case Packet.Rust.Message:
                            Serialize("String 1 (PlayerName?)", packet.String());
                            Serialize("String 2 (PlayerMsg?)", packet.String());
                            break;

                        case Packet.Rust.RPCMessage:
                            Serialize("UID", packet.UInt32());
                            Serialize("Name ID", packet.UInt32());
                            Serialize("Source Connection", packet.UInt64());
                            break;

                        case Packet.Rust.Ready:
                            Serialize("ProtoBuf", ProtoBuf.ClientReady.Deserialize(packet));
                            break;

                        case Packet.Rust.Tick:
                            Serialize("ProtoBuf", PlayerTick.Deserialize(packet));
                            break;

                        default:
                            break;
                        }
                        writer.WriteEndObject();
                    }
                }

                writer.WriteEndObject();
            }