// dwp. против зацикливание при выборе охраны на остатке силы. // так как уже достаточно велико минимальное ограничение количества юнитов. private List <Monster> get_ALL_monster(int level, MonsterPlaceHolder holder) { List <Monster> list = m_parser_.Monsters.FindAll( delegate(Monster m) { return(m.Level == level && //level filter (current_alignment_ != ArmyAlignment.Town || current_alignment_ == ArmyAlignment.Town && m.TownType == current_town_) && //race filter (current_alignment_ != ArmyAlignment.Side || current_alignment_ == ArmyAlignment.Side && m.RaceSide == current_side_) && //side filter (placeholders_.Count == 0 || holder.Traits == MonsterTraits.Any || (m.Traits & holder.Traits) != MonsterTraits.Any) && //dwp !!! ограничение парсера по выбранным городам (!Settings.Default.SelectedFactionGuards || (Settings.Default.SelectedFactionGuards && ( m.TownType == (eTownType)Settings.Default.FactionRed || m.TownType == (eTownType)Settings.Default.FactionBlue || (m.TownType == (eTownType)Settings.Default.FactionGreen && !Program.frmMainMenu.RadioButton1.Checked) || (m.TownType == (eTownType)Settings.Default.FactionYellow && (Program.frmMainMenu.RadioButton3.Checked || Program.frmMainMenu.RadioButton4.Checked)) )))); //monster type filter } ); if (list.Count == 0) { return(null); } return(list); }
/// <summary> /// Save additional monster in an army /// </summary> private void save_additional_monster(XmlNode xml_additionals, MonsterPlaceHolder holder) { xml_additionals.ChildNodes[0]["Creature"].InnerText = holder.Monster.Name; xml_additionals.ChildNodes[0]["Amount"].InnerText = holder.Amount.ToString(); // add next node xml_additionals.AppendChild(xml_additionals.ChildNodes[0].Clone()); }
private void parse(XmlNode node) { XmlNodeList items = node.SelectNodes(".//Item"); foreach (XmlNode n in items) { XmlNode name = n.SelectSingleNode(".//Creature"); XmlNode count = n.SelectSingleNode(".//Count"); MonsterPlaceHolder h = new MonsterPlaceHolder(MonsterTraits.Any); h.Monster = new Monster(); h.Monster.Name = name.InnerText; h.Amount = int.Parse(count.InnerText); monsters_.Add(h); } node_ = node; }
/// <summary> /// Save first monster in an army /// </summary> /// <param name="xml_node"></param> /// <param name="holder"></param> /// <returns></returns> private XmlNode save_primary_monster(XmlNode xml_node, MonsterPlaceHolder holder) { StringBuilder href = new StringBuilder(); if (holder.Monster.CreatureName == "") //random monster { href.AppendFormat("Random/Random-Monster-L{0}.(AdvMapMonsterShared).xdb", holder.Monster.Level); } else //defined moster { string ext = holder.Monster.CreatureName.Contains(".xdb") ? "" : ".(AdvMapMonsterShared).xdb"; href.AppendFormat("{0}/{1}{2}", EnumConvert.HREFTownStringFromString(holder.Monster.Town), holder.Monster.CreatureName, ext); } XmlNode shared = ((XmlElement)xml_node).GetElementsByTagName("Shared")[0]; ((XmlElement)shared).SetAttribute("href", shared.Attributes["href"].Value.Replace("Random/Random-Monster-L3.(AdvMapMonsterShared).xdb", href.ToString())); XmlNode amount = ((XmlElement)xml_node).GetElementsByTagName("Amount")[0]; amount.InnerText = holder.Amount.ToString(); return(((XmlElement)xml_node).GetElementsByTagName("AdditionalStacks")[0]); }
/// <summary> /// Get random monster /// </summary> /// <param name="level"></param> /// <returns></returns> private Monster get_random_monster(int level, MonsterPlaceHolder holder) { List <Monster> list = m_parser_.Monsters.FindAll( delegate(Monster m) { return(m.Level == level && //level filter (current_alignment_ != ArmyAlignment.Town || current_alignment_ == ArmyAlignment.Town && m.TownType == current_town_) && //race filter (current_alignment_ != ArmyAlignment.Side || current_alignment_ == ArmyAlignment.Side && m.RaceSide == current_side_) && //side filter (placeholders_.Count == 0 || holder.Traits == MonsterTraits.Any || (m.Traits & holder.Traits) != MonsterTraits.Any)); //monster type filter } ); if (list.Count == 0) { return(null); } int rnd = Randomizer.rnd.Next(list.Count); return(list[rnd]); }