Beispiel #1
0
        public override void Unmarshal(string data, bool withV = true)
        {
            XmlNode xmlNode1 = this.GetRoot(data).SelectSingleNode("node");

            if (xmlNode1 == null)
            {
                throw new SerializingException("node tag not found");
            }
            HeroClassDef heroClassDef = this.Type.Id.Definition as HeroClassDef;

            for (XmlNode xmlNode2 = xmlNode1.FirstChild; xmlNode2 != null; xmlNode2 = xmlNode2.NextSibling)
            {
                if (xmlNode2.Name == "f")
                {
                    string       name  = xmlNode2.Attributes["name"].Value;
                    HeroFieldDef field = heroClassDef.GetField(name);
                    if (field != null)
                    {
                        HeroAnyValue heroAnyValue = HeroAnyValue.Create(field.FieldType);
                        heroAnyValue.Unmarshal("<v>" + xmlNode2.InnerXml + "</v>", true);
                        this.Variables.Add(new Variable(new DefinitionId(field.Id), 0, heroAnyValue));
                    }
                }
            }
        }
Beispiel #2
0
        public override void Unmarshal(string data, bool withV = true)
        {
            XmlNode node = base.GetRoot(data).SelectSingleNode("node");

            if (node == null)
            {
                throw new SerializingException("node tag not found");
            }
            HeroClassDef definition = base.Type.Id.Definition as HeroClassDef;

            for (node = node.FirstChild; node != null; node = node.NextSibling)
            {
                if (node.Name == "f")
                {
                    string       name  = node.Attributes["name"].Value;
                    HeroFieldDef field = definition.GetField(name);
                    if (field != null)
                    {
                        HeroAnyValue value2 = HeroAnyValue.Create(field.FieldType);
                        value2.Unmarshal("<v>" + node.InnerXml + "</v>", true);
                        this.Variables.Add(new Variable(new DefinitionId(field.Id), 0, value2));
                    }
                }
            }
        }
Beispiel #3
0
        public void SetVariable <T>(string name, T value) where T : HeroAnyValue
        {
            if (!GOM.Instance.DefinitionsByName[HeroDefinition.Types.Field].ContainsKey(name))
            {
                throw new Exception("Field name does not exist");
            }
            HeroFieldDef def = GOM.Instance.DefinitionsByName[(HeroDefinition.Types) 3][name] as HeroFieldDef;

            this.SetVariable <T>(new DefinitionId(def.Id), value);
        }
Beispiel #4
0
        public override void Deserialize(PackedStream_2 stream)
        {
            this.hasValue  = true;
            this.Variables = new VariableList();
            DeserializeClass deserializeClass = new DeserializeClass(stream, 1);

            for (uint index = 0U; index < deserializeClass.Count; ++index)
            {
                uint  type1      = 0U;
                int   variableId = 0;
                ulong fieldId;
                int   d;
                deserializeClass.ReadFieldData(out fieldId, ref type1, ref variableId, out d);
                if (d != 2)
                {
                    HeroType     type2 = new HeroType((HeroTypes)type1);
                    DefinitionId field = new DefinitionId(fieldId);
                    if (field.Definition != null)
                    {
                        HeroFieldDef heroFieldDef = field.Definition as HeroFieldDef;
                        switch (heroFieldDef.FieldType.Type)
                        {
                        case HeroTypes.Enum:
                        case HeroTypes.ScriptRef:
                            type2.Id = heroFieldDef.FieldType.Id;
                            break;

                        case HeroTypes.LookupList:
                            type2 = heroFieldDef.FieldType;
                            break;
                        }
                    }
                    HeroAnyValue heroAnyValue = HeroAnyValue.Create(type2);
                    heroAnyValue.Deserialize(stream);
                    this.Variables.Add(new Variable(field, variableId, heroAnyValue));
                }
            }
        }
Beispiel #5
0
        public void SetVariable <T>(DefinitionId field, T value) where T : HeroAnyValue
        {
            int          variableId;
            Variable     variable;
            HeroFieldDef definition = field.Definition as HeroFieldDef;

            if ((definition != null) && (definition.FieldType.Type != value.Type.Type))
            {
                throw new Exception("Type mismatch exception");
            }
            this.dictIdToVariable.TryGetValue(field.Id, out variable);
            if (variable != null)
            {
                variableId     = variable.VariableId;
                variable.Value = value;
            }
            else
            {
                variableId = this.GetNextId();
                variable   = new Variable(field, variableId, value);
                this.dictIdToVariable[field.Id] = variable;
                base.Add(variable);
            }
        }