private void CboTypeMode_SelectedIndexChanged(object sender, EventArgs e) { inputMode = (CharacterMetaData)cboTypeMode.SelectedItem; if (alphabetManager.CurrentCharacter != null) { CheckTypeValid(alphabetManager.CurrentCharacter); } }
private void CboDisplayMode_SelectedIndexChanged(object sender, EventArgs e) { displayMode = (CharacterMetaData)cboDisplayMode.SelectedItem; if (SelectedGroups.Count > 0) { NextCharacter(); } }
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) }); }
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; }