示例#1
0
        void ImportMwsDeck(GameInfoItem gameItem, DeckItem deck, string text, CodesMapService mappingManager, Dictionary<string, string> discardedLines)
        {
            ServicesProvider engServicesProvider = servicesProvider;
              if(engServicesProvider.GameLanguageCode != "eng")
              {
            engServicesProvider = new ServicesProvider("eng", "eng");
            engServicesProvider.LoadGame(gameItem);
              }
              discardedLines.Clear();
              foreach(string line in text.Split(new string[] {Environment.NewLine}, StringSplitOptions.None).
            Select(e => e.Trim()).Where(e => e.Length > 0 && !e.StartsWith("//")))
              {
            string[] lineParts = line.Split(' ');
            if(lineParts.Length < 3)
              continue;

            try
            {
              var cardList = deck.MainCards;
              int partIndex = 0;
              if(lineParts[0] == "SB:")
              {
            partIndex++;
            cardList = deck.SideboardCards;
              }
              int amount;
              if(int.TryParse(lineParts[partIndex++], out amount))
              {
            string mwsSetCode = string.Empty;
            try
            {
              mwsSetCode = lineParts[partIndex++].Replace("[", string.Empty).Replace("]", string.Empty);
            }
            catch
            {
              throw new Exception("Cannot read set code on this line: " + line);
            }
            string cardName = string.Empty;
            try
            {
              cardName = string.Concat(
                lineParts.Skip(partIndex).Where(e => e != "(1)" && e != "(2)" && e != "(3)" && e != "(4)").Select(
                e => string.Concat(e, " ")).ToArray()).TrimEnd();
              cardName = cardName.Split(new string[] { "--" }, StringSplitOptions.None).First();
            }
            catch
            {
              throw new Exception("Cannot read card name on this line: " + line);
            }
            string internalSetCode = mappingManager.GetCode(mwsSetCode);
            if(string.IsNullOrEmpty(internalSetCode))
              throw new Exception("Set code unknown: " + mwsSetCode);
            CardSearchParams p = new CardSearchParams();
            p.Sets.Add(internalSetCode);
            p.Name = cardName;
            p.Language = "ENG";
            p.NameExact = true;

            CardItem cardItem = engServicesProvider.CardsService.SelectCards(p).FirstOrDefault();
            if(cardItem == null)
              throw new Exception("Card name unknown: " + cardName);
            for(int i = 0; i < amount; i++)
              cardList.Add(cardItem.Clone());
              }
              else
              {
            throw new Exception("Cannot read card amount on this line: " + line);
              }
            }
            catch(Exception ex)
            {
              discardedLines.Add(line, ex.Message);
            }
              }
        }