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