Пример #1
0
        private bool TryGetValueByIndex(int index, out object result)
        {
            if (sequenceNode == null)
            {
                return(FailToGetValue(out result));
            }

            if (index >= sequenceNode.Count())
            {
                throw new IndexOutOfRangeException();
            }

            return(YamlDoc.TryMapValue(sequenceNode.ToArray()[index], out result));
        }
Пример #2
0
        public YamlNode serializeYaml()
        {
            var crateNode = new YamlMappingNode();
            // This should be validated, as any null object will break the entire document
            // Add the properties of the crate
            var crateProps = new YamlMappingNode();

            crateProps.Add("type", Type.ToString());

            var displayName = new YamlScalarNode(DisplayName);

            displayName.Style = YamlDotNet.Core.ScalarStyle.SingleQuoted;
            crateProps.Add("displayName", displayName);

            crateProps.Add("preview", Preview.ToString().ToLower());

            // BUY NODE
            var buyNode = new YamlMappingNode();

            buyNode.Add("enabled", Shop.Enabled.ToString().ToLower());
            buyNode.Add("cost", Shop.Buy.ToString());
            crateProps.Add("buy", buyNode);

            // KEY NODE
            var key = new YamlMappingNode();

            key.Add("item", Key.Item);
            key.Add("enchantment", string.Join(";", Key.Enchants));
            // The item uses null to keep the empty one
            if (Key.Name != null)
            {
                key.Add("name", Key.Name);
            }
            else
            {
                key.Add("name", "");
            }
            var keyLore = new YamlSequenceNode();

            foreach (var lore in Key.EditLore)
            {
                keyLore.Add(lore.Lore);
            }
            key.Add("lore", keyLore);
            if (key != null)
            {
                crateProps.Add("key", key);
            }

            // MESSAGE NODE
            var messageNode = new YamlMappingNode();
            // Set our style to singlequoted for this section
            var onOpenNode = new YamlScalarNode(Message.OnOpen);

            onOpenNode.Style = YamlDotNet.Core.ScalarStyle.SingleQuoted;
            var broadcastNode = new YamlScalarNode(Message.Broadcast);

            broadcastNode.Style = YamlDotNet.Core.ScalarStyle.SingleQuoted;
            messageNode.Add("onOpen", onOpenNode);
            messageNode.Add("broadcast", broadcastNode);
            crateProps.Add("message", messageNode);

            // EFFECT NODE
            var    effect      = new YamlMappingNode();
            string openEffects = string.Join(", ", from openEffect in Effect.onOpenEffects
                                             select openEffect.Effect);
            var openEff = new YamlScalarNode(openEffects);

            openEff.Style = YamlDotNet.Core.ScalarStyle.SingleQuoted;
            string dormantEffects = string.Join(", ", from dormantEffect in Effect.dormantEffects
                                                select dormantEffect.Effect);
            var dormantEff = new YamlScalarNode(dormantEffects);

            dormantEff.Style = YamlDotNet.Core.ScalarStyle.SingleQuoted;
            effect.Add("onOpenEffects", openEff);
            effect.Add("dormantEffects", dormantEff);
            crateProps.Add("effect", effect);

            // REWARDS NODE
            var reward = new YamlMappingNode();

            reward.Add("minimumRewards", MinimumRewards.ToString());
            reward.Add("maximumRewards", MaximumRewards.ToString());
            // Add the list of crate rewards
            var rewards = new YamlSequenceNode();

            foreach (var thereward in Rewards)
            {
                // Updates the plaintext Lore with rarity
                thereward.UpdateLore(getRarity(thereward));
                var scalar = new YamlScalarNode(thereward.GetReward());
                scalar.Style = YamlDotNet.Core.ScalarStyle.SingleQuoted;
                rewards.Add(scalar);
            }
            if (rewards.Count() > 0)
            {
                reward.Add("rewards", rewards);
            }
            crateProps.Add("reward", reward);
            // Add the properties to the root crate node
            crateNode.Add(Name, crateProps);

            return(crateNode);
        }