public override void Parse(GameBitBuffer buffer)
 {
     ActorID = buffer.ReadUInt(32);
     Field1 = new NetAttributeKeyValue();
     Field1.Parse(buffer);
     Field1.ParseValue(buffer);
 }
 public override void Parse(GameBitBuffer buffer)
 {
     ActorID = buffer.ReadUInt(32);
     atKeyVals = new NetAttributeKeyValue[buffer.ReadInt(4)];
     for (int i = 0; i < atKeyVals.Length; i++) { atKeyVals[i] = new NetAttributeKeyValue(); atKeyVals[i].Parse(buffer); }
     for (int i = 0; i < atKeyVals.Length; i++) { atKeyVals[i].ParseValue(buffer); }
 }
Exemple #3
0
        public List<GameMessage> GetMessageList(uint actorID)
        {
            var messageList = new List<GameMessage>();
            int count = _attributeValues.Count;
            if (count == 1)
            {
                AttributeSetValueMessage msg = new AttributeSetValueMessage();
                var e = _attributeValues.GetEnumerator();

                if (!e.MoveNext())
                    throw new Exception("Expected value in enumerator.");

                var keyid = e.Current.Key;
                var value = e.Current.Value;

                int id = keyid.Id;
                msg.ActorID = actorID;
                msg.Field1 = new Fields.NetAttributeKeyValue();
                msg.Field1.Field0 = keyid.Key;
                // FIXME: need to rework NetAttributeKeyValue, and maybe rename GameAttribute to NetAttribute?
                msg.Field1.Attribute = GameAttribute.Attributes[id]; // FIXME
                if (msg.Field1.Attribute.IsInteger)
                    msg.Field1.Int = value.Value;
                else
                    msg.Field1.Float = value.ValueF;

                messageList.Add(msg);
            }
            else
            {
                var e = _attributeValues.GetEnumerator();
                // FIXME: probably need to rework AttributesSetValues as well a bit
                if (count >= 15)
                {
                    for (; count >= 15; count -= 15)
                    {
                        AttributesSetValuesMessage msg = new AttributesSetValuesMessage();
                        msg.ActorID = actorID;
                        msg.atKeyVals = new Fields.NetAttributeKeyValue[15];
                        for (int i = 0; i < 15; i++)
                            msg.atKeyVals[i] = new Fields.NetAttributeKeyValue();
                        for(int i = 0;i < 15;i++)
                        {
                            if (!e.MoveNext())
                                throw new Exception("Expected values in enumerator.");
                            var kv = msg.atKeyVals[i];

                            var keyid = e.Current.Key;
                            var id = keyid.Id;
                            var value = e.Current.Value;

                            kv.Field0 = keyid.Key;
                            kv.Attribute = GameAttribute.Attributes[id];
                            if (kv.Attribute.IsInteger)
                                kv.Int = value.Value;
                            else
                                kv.Float = value.ValueF;
                        }
                        messageList.Add(msg);
                    }
                }

                if (count > 0)
                {
                    AttributesSetValuesMessage msg = new AttributesSetValuesMessage();
                    msg.ActorID = actorID;
                    msg.atKeyVals = new Fields.NetAttributeKeyValue[count];
                    for (int i = 0; i < count; i++)
                    {
                        if (!e.MoveNext())
                            throw new Exception("Expected values in enumerator.");
                        var kv = new Fields.NetAttributeKeyValue();
                        msg.atKeyVals[i] = kv;

                        var keyid = e.Current.Key;
                        var id = keyid.Id;
                        var value = e.Current.Value;
                        kv.Field0 = keyid.Key;
                        kv.Attribute = GameAttribute.Attributes[id];
                        if (kv.Attribute.IsInteger)
                            kv.Int = value.Value;
                        else
                            kv.Float = value.ValueF;
                    }
                    messageList.Add(msg);
                }
            }
            return messageList;
        }
Exemple #4
0
        public void SendMessage(GameClient client, int actorId)
        {
            int count = _attributeValues.Count;

            if (_attributeValues.Count == 1)
            {
                AttributeSetValueMessage msg = new AttributeSetValueMessage();
                msg.Id = (int)Opcodes.AttributeSetValueMessage;
                var e = _attributeValues.GetEnumerator();

                if (!e.MoveNext())
                    throw new Exception("Expected value in enumerator.");

                var keyid = e.Current.Key;
                var value = e.Current.Value;

                int id = keyid.Id;
                msg.Field0 = actorId;
                msg.Field1 = new Fields.NetAttributeKeyValue();
                msg.Field1.Field0 = keyid.Key;
                // FIXME: need to rework NetAttributeKeyValue, and maybe rename GameAttribute to NetAttribute?
                msg.Field1.Attribute = GameAttribute.Attributes[id]; // FIXME
                if (msg.Field1.Attribute.IsInteger)
                    msg.Field1.Int = value.Value;
                else
                    msg.Field1.Float = value.ValueF;

                client.SendMessage(msg);
            }
            else
            {
                AttributesSetValuesMessage msg = new AttributesSetValuesMessage();
                msg.Id = (int)Opcodes.AttributesSetValuesMessage;
                msg.Field0 = actorId;

                var e = _attributeValues.GetEnumerator();
                // FIXME: probably need to rework AttributesSetValues as well a bit
                if (count >= 15)
                {
                    msg.atKeyVals = new Fields.NetAttributeKeyValue[15];
                    for (int i = 0; i < 15; i++)
                        msg.atKeyVals[i] = new Fields.NetAttributeKeyValue();

                    for (; count >= 15; count -= 15)
                    {
                        for(int i = 0;i < 15;i++)
                        {
                            if (!e.MoveNext())
                                throw new Exception("Expected values in enumerator.");
                            var kv = msg.atKeyVals[i];

                            var keyid = e.Current.Key;
                            var id = keyid.Id;
                            var value = e.Current.Value;

                            kv.Field0 = keyid.Key;
                            kv.Attribute = GameAttribute.Attributes[id];
                            if (kv.Attribute.IsInteger)
                                kv.Int = value.Value;
                            else
                                kv.Float = value.ValueF;
                        }
                        client.SendMessage(msg);
                    }
                }

                if (count > 0)
                {
                    msg.atKeyVals = new Fields.NetAttributeKeyValue[count];
                    for (int i = 0; i < count; i++)
                    {
                        if (!e.MoveNext())
                            throw new Exception("Expected values in enumerator.");
                        var kv = new Fields.NetAttributeKeyValue();
                        msg.atKeyVals[i] = kv;

                        var keyid = e.Current.Key;
                        var id = keyid.Id;
                        var value = e.Current.Value;
                        kv.Field0 = keyid.Key;
                        kv.Attribute = GameAttribute.Attributes[id];
                        if (kv.Attribute.IsInteger)
                            kv.Int = value.Value;
                        else
                            kv.Float = value.ValueF;
                    }
                    client.SendMessage(msg);
                }
            }


        }