Пример #1
0
 private void CboTypeMode_SelectedIndexChanged(object sender, EventArgs e)
 {
     inputMode = (CharacterMetaData)cboTypeMode.SelectedItem;
     if (alphabetManager.CurrentCharacter != null)
     {
         CheckTypeValid(alphabetManager.CurrentCharacter);
     }
 }
Пример #2
0
 private void CboDisplayMode_SelectedIndexChanged(object sender, EventArgs e)
 {
     displayMode = (CharacterMetaData)cboDisplayMode.SelectedItem;
     if (SelectedGroups.Count > 0)
     {
         NextCharacter();
     }
 }
Пример #3
0
        public MerchantStock GetBlacksmithStock(long characterId)
        {
            Item[]            items             = this.dbContext.Items.Where(i => i.CharacterId == characterId && i.Merchant == "blacksmith").ToArray();
            CharacterMetaData characterMetaData = this.dbContext.CharacterMetaDatas.FirstOrDefault(c => c.CharacterId == characterId);

            //No items | older than 1 minute
            if (items.Length == 0 || DateTime.Now > characterMetaData.BlackSmithItemGenerationTime.AddMinutes(1))
            {
                int level = this.dbContext.Characters.Select(c => new { c.CharacterId, c.Level }).FirstOrDefault(c => c.CharacterId == characterId).Level;
                //Remove all previous items from store
                if (items != default)
                {
                    this.dbContext.Items.RemoveRange(items);
                }
                //Create new items
                Item[] newItems = this.CreateItems(level, 8, "blacksmith", characterId).ToArray();
                characterMetaData.BlackSmithItemGenerationTime = DateTime.Now;

                this.dbContext.Items.AddRange(newItems);
                this.dbContext.CharacterMetaDatas.Update(characterMetaData);

                /// <summary>
                /// Suppress concurenccy exception
                /// </summary>
                try
                {
                    this.dbContext.SaveChanges();
                }
                catch (DbUpdateConcurrencyException) { return(null); }
                items = newItems;
            }
            return(new MerchantStock()
            {
                Items = items.Select(i => i.ItemDTO()).ToArray(),
                RestockTime = characterMetaData.BlackSmithItemGenerationTime.AddMinutes(1)
            });
        }
Пример #4
0
        public Alphabet ParseFile(string filePath)
        {
            // Validating XML
            XmlSchemaSet schemas = new XmlSchemaSet();

            schemas.Add("", "AlphabetFile.xsd");

            XDocument doc       = XDocument.Load(filePath);
            bool      errors    = false;
            string    lastError = "";

            doc.Validate(schemas, (o, e) =>
            {
                lastError = e.Message;
                Console.WriteLine("{0}", e.Message);
                errors = true;
            });

            if (errors)
            {
                throw new System.Xml.XmlException("Loaded XML file does not follow the current XML Schema" + lastError);
            }



            //Parsing XML
            //TODO check version number

            XElement rootElement = doc.Element("alphabet-file");

            Alphabet alphabet = new Alphabet
            {
                AlphabetName = rootElement.Attribute("name") != null?rootElement.Attribute("name").Value : "Unamed Group",
            };



            //META DATA
            List <CharacterMetaData> metaDatas = new List <CharacterMetaData>();
            {
                XElement AlphabetCharacters = rootElement.Element("alphabet-characters-meta-data");

                foreach (XElement eMetaGroup in AlphabetCharacters.Elements())
                {
                    foreach (XElement eMetaData in eMetaGroup.Elements())
                    {
                        CharacterMetaData meta = new CharacterMetaData(eMetaData.Attribute("id").Value,
                                                                       eMetaGroup.Attribute("id").Value,
                                                                       eMetaGroup.Attribute("name").Value,
                                                                       eMetaData.Attribute("name").Value,
                                                                       eMetaData.Attribute("display") != null ? eMetaData.Attribute("display").Value.ToLower() == "true" : false,
                                                                       eMetaData.Attribute("input") != null ? eMetaData.Attribute("input").Value.ToLower() == "true" : false
                                                                       );

                        if (meta.Display)
                        {
                            alphabet.DisplayOptions.Add(meta);
                        }
                        if (meta.Input)
                        {
                            alphabet.InputOptions.Add(meta);
                        }

                        metaDatas.Add(meta);
                    }
                }
            }



            //UI OPTIONS
            {
                XElement options = rootElement.Element("ui-options");
                foreach (CharacterMetaData meta in metaDatas)
                {
                    if (meta.ID == options.Element("display-options").Attribute("defaultMeta").Value)
                    {
                        alphabet.DefaultDisplay = meta;
                    }
                    if (meta.ID == options.Element("input-options").Attribute("defaultMeta").Value)
                    {
                        alphabet.DefaultInput = meta;
                    }
                }
            }

            //Groups
            Dictionary <string, CharacterGroup> groups = new Dictionary <string, CharacterGroup>();

            {
                List <CharacterGroup> rootGroups = new List <CharacterGroup>();
                XElement alphabetClasses         = rootElement.Element("alphabet-classes");
                foreach (XElement eGroup in alphabetClasses.Elements())
                {
                    rootGroups.Add(ParseGroupElement(eGroup));
                }

                //TODO better solution than this


                foreach (CharacterGroup g in rootGroups)
                {
                    groups.Add(g.ID, g);
                    foreach (CharacterGroup c in g.GetAllDescendantsGroups())
                    {
                        groups.Add(c.ID, c);
                    }
                    alphabet.CharacterGroups.Add(g);
                }
                alphabet.RootGroups = rootGroups;
            }



            // Characters
            {
                XElement alphabetCharacters = rootElement.Element("alphabet-characters");
                foreach (XElement eCharacter in alphabetCharacters.Elements())
                {
                    Character character = new Character();
                    foreach (XElement eMeta in eCharacter.Elements())
                    {
                        List <string> value = eMeta.Value.Split(',').ToList();

                        CharacterMetaData metaData = null;
                        //TODO optimise this loop (use dictionary?)
                        foreach (CharacterMetaData meta in metaDatas)
                        {
                            if (meta.ID == eMeta.Attribute("id").Value)
                            {
                                metaData = meta;
                                break;
                            }
                        }
                        if (metaData != null)
                        {
                            character.Data.Add(metaData, value);
                        }
                        else
                        {
                            //TODO proper exception
                            throw new Exception("Meta Data ID Invalid");
                        }
                    }


                    List <string> groupIDs = eCharacter.Attribute("class").Value
                                             .Split(new char[0], StringSplitOptions.RemoveEmptyEntries).ToList();

                    foreach (string groupID in groupIDs)
                    {
                        if (!groups.ContainsKey(groupID))
                        {
                            throw new KeyNotFoundException("key \"" + groupID + "\" was not found in groups");
                        }
                        groups[groupID].Characters.Add(character);
                    }
                }
            }

            return(alphabet);
        }
 public CharacterMetaModeException(Character character, CharacterMetaData MetaData, string message)
     : base($"Character \"{character}\" does not contain meta data for: \"{MetaData.Name}\" in group: \"{MetaData.GroupID}\"\n" + message)
 {
     this.character = character;
     this.MetaData  = MetaData;
 }