Ejemplo n.º 1
0
        public override CardDescription[] Read(string filename, ProgressBar process, ToolStripStatusLabel lbl)
        {
            StreamReader sr    = null;
            ArrayList    cards = new ArrayList(MinCapacity);

            sr = new StreamReader(filename, Encoding.GetEncoding("GB2312"));

            int i  = 0;
            int lc = 0;

            while (!sr.EndOfStream)
            {
                string s = sr.ReadLine().Trim();
                if (s != "")
                {
                    CardDescription card = new CardDescription();
                    card.name     = s.Substring(1, s.Length - 2);
                    card.ID       = 60000 + i++;
                    card.cardCamp = CardCamp.DIY;
                    card.limit    = -5;
                    s             = sr.ReadLine().Trim();
                    cards.Add(ParseCard(card, s));
                }
                lbl.Text = "读取数据中..." + lc.ToString();
                lc++;
                Application.DoEvents();
            }
            sr.Close();

            return((CardDescription[])cards.ToArray(typeof(CardDescription)));
        }
Ejemplo n.º 2
0
        public override CardDescription[] Read(string filename)
        {
            StreamReader sr    = null;
            ArrayList    cards = new ArrayList(MinCapacity);

            sr = new StreamReader(filename, Encoding.GetEncoding("GB2312"));

            int i = 0;

            while (!sr.EndOfStream)
            {
                string s = sr.ReadLine().Trim();
                if (s != "")
                {
                    CardDescription card = new CardDescription();
                    card.name     = s.Substring(1, s.Length - 2);
                    card.ID       = 60000 + i++;
                    card.cardCamp = CardCamp.DIY;
                    card.limit    = -5;
                    s             = sr.ReadLine().Trim();
                    cards.Add(ParseCard(card, s));
                }
            }
            sr.Close();

            return((CardDescription[])cards.ToArray(typeof(CardDescription)));
        }
Ejemplo n.º 3
0
        public virtual void Save(string filename, CardDescription[] cards, ProgressBar process, ToolStripStatusLabel lbl)
        {
            StreamWriter    sw   = new StreamWriter(filename, false, System.Text.Encoding.Default);
            CardDescription card = null;

            for (int i = 0; i < cards.Length - 1; i++)
            {
                card = cards[i];
                string s = card.name;
                sw.WriteLine("[" + s + "]");
                s = card.GetSimpleInfo();
                s = s.Replace("\"\"", "\"");
                sw.WriteLine(s);

                process.Value++;
                lbl.Text = string.Format("{0} / {1}", (i + 1).ToString(), process.Maximum.ToString());
                Application.DoEvents();
            }
            card = cards[cards.Length - 1];
            string ss = card.name;

            sw.WriteLine("[" + ss + "]");
            ss = card.GetSimpleInfo();
            ss = ss.Replace("\"\"", "\"");
            sw.Write(ss);
            sw.Close();
        }
Ejemplo n.º 4
0
        private CardDescription ParseCard(Document doc)
        {
            CardDescription card = new CardDescription();

            card.ID        = int.Parse(GetFieldString(doc, "ID"));
            card.name      = GetFieldString(doc, "name");
            card.japName   = GetFieldString(doc, "japName");
            card.enName    = GetFieldString(doc, "enName");
            card.oldName   = GetFieldString(doc, "oldName2");
            card.shortName = GetFieldString(doc, "shortName2");
            card.sCardType = GetFieldString(doc, "cardType");
            card.iCardtype = CardTypeMapper.Mapper(card.sCardType);
            if (card.iCardtype <= 3 || card.iCardtype == 6)
            {
                card.level    = int.Parse(GetFieldString(doc, "level"));
                card.element  = GetFieldString(doc, "element");
                card.tribe    = GetFieldString(doc, "tribe");
                card.atk      = GetFieldString(doc, "atk");
                card.atkValue = int.Parse(GetFieldString(doc, "atkValue"));
                card.def      = GetFieldString(doc, "def");
                card.defValue = int.Parse(GetFieldString(doc, "defValue"));
            }
            card.effecfType  = GetFieldString(doc, "effecfType");
            card.effect      = GetFieldString(doc, "effect");
            card.infrequence = GetFieldString(doc, "infrequence");
            card.package     = GetFieldString(doc, "package");
            card.limit       = int.Parse(GetFieldString(doc, "limit"));
            if (card.limit == -5)
            {
                card.cardCamp = CardCamp.DIY;
                card.limit    = 3;
            }
            card.cheatcode = GetFieldString(doc, "cheatcode");
            card.adjust    = GetFieldString(doc, "adjust").Trim();

            string s = GetFieldString(doc, "cardCamp").Trim();

            switch (s)
            {
            case "TCG、OCG":
                card.cardCamp = CardCamp.BothOT;
                break;

            case "TCG":
                card.cardCamp = CardCamp.TCG;
                break;

            case "OCG":
                card.cardCamp = CardCamp.OCG;
                break;

            case "DIY":
                card.cardCamp = CardCamp.DIY;
                break;
            }

            return(card);
        }
Ejemplo n.º 5
0
        public override CardDescription[] Read(string filename, ReadProcessChangedInvoker processchanged)
        {
            if (!File.Exists(filename))
            {
                return(new CardDescription[0]);
            }

            ArrayList cards = new ArrayList(MinCapacity);
            Hashtable ht    = new Hashtable(MinCapacity);

            //连接数据库
            SQLiteConnection con = new SQLiteConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + filename + ";Persist Security Info=False;");

            con.Open();

            //统计记录数
            SQLiteCommand    dcc     = new SQLiteCommand("Select Count(*) as iCount FROM [Datas]", con);
            SQLiteDataReader creader = dcc.ExecuteReader();

            creader.Read();
            int total = int.Parse(creader["iCount"].ToString());

            creader.Close();


            Hashtable htCheatCode = new Hashtable();

            dcc     = new SQLiteCommand(@"select * from datas t1 left join texts t2 on t1.id = t2.id ", con);
            creader = dcc.ExecuteReader();

            int i = 0;

            while (creader.Read())
            {
                CardDescription card = ParseCard(creader, cards);
                if (!ht.Contains(card.name))
                {
                    cards.Add(card);
                    ht.Add(card.name, card);
                }
                else
                {
                    CardDescription cd = (CardDescription)ht[card.name];
                    cd.cheatcode = cd.cheatcode + "," + card.cheatcode;
                }
                i++;
                processchanged.Invoke(total, i);
            }

            creader.Close();
            con.Close();
            return((CardDescription[])cards.ToArray(typeof(CardDescription)));
        }
Ejemplo n.º 6
0
        public override CardDescription[] Read(string filename, ReadProcessChangedInvoker processchanged)
        {
            if (!File.Exists(filename))
            {
                return(new CardDescription[0]);
            }

            int total = File.ReadAllLines(filename).Length;

            StreamReader sr    = null;
            ArrayList    cards = new ArrayList(MinCapacity);

            sr = new StreamReader(filename, Encoding.GetEncoding("GB2312"));

            int i = 0;

            while (!sr.EndOfStream)
            {
                string s = sr.ReadLine().Trim();
                if (s != "")
                {
                    CardDescription card = new CardDescription();
                    card.name     = s.Substring(1, s.Length - 2);
                    card.ID       = 60000 + i;
                    card.cardCamp = CardCamp.DIY;
                    card.limit    = -5;
                    s             = sr.ReadLine().Trim();
                    cards.Add(ParseCard(card, s));
                    i++;
                    if (processchanged != null)
                    {
                        processchanged.Invoke(total, i);
                    }
                }
            }
            sr.Close();

            return((CardDescription[])cards.ToArray(typeof(CardDescription)));
        }
Ejemplo n.º 7
0
        public static int GetImageIndex(BaseCardLibrary.DataAccess.CardDescription card)
        {
            int index = 0;

            switch (card.sCardType)
            {
            case "Ч¹û¹ÖÊÞ":
                index = 0;
                break;

            case "ÆÕͨ¹ÖÊÞ":
                index = 1;
                break;

            case "ÈںϹÖÊÞ":
                index = 2;
                break;

            case "ÒÇʽ¹ÖÊÞ":
                index = 3;
                break;

            default:
                if (card.sCardType.Length == 4)
                {
                    if (card.sCardType.Substring(2, 2).Equals("ħ·¨"))
                    {
                        index = 4;
                    }
                    else if (card.sCardType.Substring(2, 2).Equals("ÏÝÚå"))
                    {
                        index = 5;
                    }
                }
                break;
            }
            return(index);
        }
Ejemplo n.º 8
0
        public virtual void Save(string filename, CardDescription[] cards)
        {
            StreamWriter    sw   = new StreamWriter(filename, false, System.Text.Encoding.Default);
            CardDescription card = null;

            for (int i = 0; i < cards.Length - 1; i++)
            {
                card = cards[i];
                string s = card.name;
                sw.WriteLine("[" + s + "]");
                s = card.GetSimpleInfo();
                s = s.Replace("\"\"", "\"");
                sw.WriteLine(s);
            }
            card = cards[cards.Length - 1];
            string ss = card.name;

            sw.WriteLine("[" + ss + "]");
            ss = card.GetSimpleInfo();
            ss = ss.Replace("\"\"", "\"");
            sw.Write(ss);
            sw.Close();
        }
Ejemplo n.º 9
0
 public bool isTrapCard()
 {
     return(CardDescription.isTrapCard(this));
 }
Ejemplo n.º 10
0
 public static bool isTrapCard(CardDescription card)
 {
     return(isTrapCard(card.iCardType));
 }
Ejemplo n.º 11
0
 public bool isMagicCard()
 {
     return(CardDescription.isMagicCard(this));
 }
Ejemplo n.º 12
0
 public bool isMonsterCard()
 {
     return(CardDescription.isMonsterCard(this));
 }
Ejemplo n.º 13
0
 public bool isExtraCard()
 {
     return(CardDescription.isExtraCard(this));
 }
Ejemplo n.º 14
0
        private CardDescription ParseCard(OleDbDataReader reader)
        {
            CardDescription card = new CardDescription();

            card.ID        = int.Parse(GetFieldString(reader, "CardID")) - 1;
            card.japName   = GetFieldString(reader, "JPCardName");
            card.name      = GetFieldString(reader, "SCCardName");
            card.enName    = GetFieldString(reader, "ENCardName");
            card.sCardType = GetFieldString(reader, "SCCardType");
            card.tribe     = GetFieldString(reader, "SCCardRace");
            card.package   = GetFieldString(reader, "CardBagNum");
            card.element   = GetFieldString(reader, "SCCardAttribute");
            try
            {
                card.level = int.Parse(GetFieldString(reader, "CardStarNum"));
            }
            catch
            {
                card.level = -1;
            }
            card.infrequence = GetFieldString(reader, "SCCardRare");
            card.atk         = GetFieldString(reader, "CardAtk");
            card.def         = GetFieldString(reader, "CardDef");
            card.effect      = GetFieldString(reader, "SCCardDepict");
            card.cheatcode   = GetFieldString(reader, "CardPass");
            card.adjust      = GetFieldString(reader, "CardAdjust");
            card.associate   = GetFieldString(reader, "CardUnion");
            card.oldName     = GetFieldString(reader, "CardOnceName");
            card.shortName   = GetFieldString(reader, "CardAbbrName");
            string l = GetFieldString(reader, "SCCardBan");

            switch (l)
            {
            case "无限制":
                card.limit = 3;
                break;

            case "禁止卡":
                card.limit = 0;
                break;

            case "限制卡":
                card.limit = 1;
                break;

            case "准限制卡":
                card.limit = 2;
                break;

            default:
                card.limit = -4;
                break;
            }

            l = GetFieldString(reader, "CardCamp").Trim();
            switch (l)
            {
            case "TCG、OCG":
                card.cardCamp = CardCamp.BothOT;
                break;

            case "TCG":
                card.cardCamp = CardCamp.TCG;
                break;

            case "OCG":
                card.cardCamp = CardCamp.OCG;
                break;

            case "DIY":
                card.cardCamp = CardCamp.DIY;
                break;
            }

            if (string.Equals(card.atk, "9999"))
            {
                card.atk      = "?";
                card.atkValue = -1;
            }
            else
            {
                try
                {
                    card.atkValue = int.Parse(card.atk);
                }
                catch
                {
                    card.atkValue = -2;
                }
            }
            if (string.Equals(card.def, "9999"))
            {
                card.def      = "?";
                card.defValue = -1;
            }
            else
            {
                try
                {
                    card.defValue = int.Parse(card.def);
                }
                catch
                {
                    card.defValue = -2;
                }
            }

            if (string.Equals(card.sCardType, "普通怪兽"))
            {
                card.sCardType = "通常怪兽";
            }
            card.iCardtype = CardTypeMapper.Mapper(card.sCardType);

            string sdcardtype = GetFieldString(reader, "SCDCardType").Trim();

            if (sdcardtype.Length > 1)
            {
                if (!string.Equals(card.effect.Substring(0, sdcardtype.Length), sdcardtype))
                {
                    card.effect = sdcardtype + ":" + card.effect;
                }
            }

            return(card);
        }
Ejemplo n.º 15
0
        private CardDescription ParseCard(Document doc)
        {
            CardDescription card = new CardDescription();

            card.ID        = int.Parse(doc.GetField("CardId").StringValue());
            card.name      = doc.GetField("中文名").StringValue();
            card.japName   = doc.GetField("日文名").StringValue();
            card.enName    = doc.GetField("英文名").StringValue();
            card.sCardType = doc.GetField("卡片类型").StringValue();
            if (string.Equals(card.sCardType.Substring(2, 2), "怪兽"))
            {
                card.level   = int.Parse(doc.GetField("卡片星级").StringValue());
                card.element = doc.GetField("卡片属性").StringValue();
                card.tribe   = doc.GetField("卡片种族").StringValue();
                card.atk     = doc.GetField("攻击力").StringValue();
                if (string.Equals(card.atk, "9999"))
                {
                    card.atk      = "?";
                    card.atkValue = -1;
                }
                else
                {
                    try
                    {
                        card.atkValue = int.Parse(card.atk);
                    }
                    catch
                    {
                        card.atkValue = -2;
                    }
                }
                card.def = doc.GetField("防御力").StringValue();
                if (string.Equals(card.def, "9999"))
                {
                    card.def      = "?";
                    card.defValue = -1;
                }
                else
                {
                    try
                    {
                        card.defValue = int.Parse(card.def);
                    }
                    catch
                    {
                        card.defValue = -2;
                    }
                }
            }
            card.effecfType  = doc.GetField("详细类型").StringValue();
            card.effect      = doc.GetField("效果").StringValue();
            card.infrequence = doc.GetField("罕贵程度").StringValue();
            card.package     = doc.GetField("卡包").StringValue();
            card.cheatcode   = doc.GetField("CardPass").StringValue();
            card.adjust      = doc.GetField("调整").StringValue();
            card.associate   = doc.GetField("关联卡片").StringValue();
            string l = doc.GetField("禁限类型").StringValue();

            switch (l)
            {
            case "无限制":
                card.limit = 3;
                break;

            case "禁止卡":
                card.limit = 0;
                break;

            case "限制卡":
                card.limit = 1;
                break;

            case "准限制卡":
                card.limit = 2;
                break;

            default:
                card.limit = -4;
                break;
            }
            card.iCardtype = CardTypeMapper.Mapper(card.sCardType);

            return(card);
        }
Ejemplo n.º 16
0
        private CardDescription ParseCard(SQLiteDataReader reader)
        {
            CardDescription card = new CardDescription();

            card.ID        = int.Parse(GetFieldString(reader, "id"));
            card.japName   = GetFieldString(reader, "japName");
            card.name      = GetFieldString(reader, "name");
            card.enName    = GetFieldString(reader, "enName");
            card.sCardType = GetFieldString(reader, "SCardType");
            card.tribe     = GetFieldString(reader, "tribe");
            card.package   = GetFieldString(reader, "package");
            card.element   = GetFieldString(reader, "element");
            try
            {
                card.level = int.Parse(GetFieldString(reader, "level"));
            }
            catch
            {
                card.level = -1;
            }
            try
            {
                card.pendulumL = int.Parse(GetFieldString(reader, "pendulumL"));
                card.pendulumR = int.Parse(GetFieldString(reader, "pendulumR"));
            }
            catch
            {
                card.pendulumL = 0;
                card.pendulumR = 0;
            }
            card.infrequence = GetFieldString(reader, "infrequence");
            card.atk         = GetFieldString(reader, "atk");
            card.def         = GetFieldString(reader, "def");
            card.effect      = GetFieldString(reader, "effect").Replace(" ", "");
            card.cheatcode   = GetFieldString(reader, "cheatcode");
            card.adjust      = GetFieldString(reader, "adjust");
            card.oldName     = GetFieldString(reader, "oldName");
            card.shortName   = GetFieldString(reader, "shortName");
            string l = GetFieldString(reader, "ban");

            switch (l)
            {
            case "无限制":
                card.limit = 3;
                break;

            case "禁止卡":
                card.limit = 0;
                break;

            case "限制卡":
                card.limit = 1;
                break;

            case "准限制卡":
                card.limit = 2;
                break;

            default:
                card.limit = -4;
                break;
            }

            l = GetFieldString(reader, "CardCamp").Trim();
            switch (l)
            {
            case "TCG、OCG":
                card.cardCamp = CardCamp.BothOT;
                break;

            case "TCG":
                card.cardCamp = CardCamp.TCG;
                break;

            case "OCG":
                card.cardCamp = CardCamp.OCG;
                break;

            case "DIY":
                card.cardCamp = CardCamp.DIY;
                break;
            }

            if (string.Equals(card.atk, "9999"))
            {
                card.atk      = "?";
                card.atkValue = -1;
            }
            else
            {
                try
                {
                    card.atkValue = int.Parse(card.atk);
                }
                catch
                {
                    card.atkValue = -2;
                }
            }
            if (string.Equals(card.def, "9999"))
            {
                card.def      = "?";
                card.defValue = -1;
            }
            else
            {
                try
                {
                    card.defValue = int.Parse(card.def);
                }
                catch
                {
                    card.defValue = -2;
                }
            }

            if (string.Equals(card.sCardType, "普通怪兽"))
            {
                card.sCardType = "通常怪兽";
            }
            card.iCardType = CardDescription.CardTypeMapper(card.sCardType);

            string sdcardtype = GetFieldString(reader, "CardDType").Trim();

            if (sdcardtype.Length > 1)
            {
                if (!string.Equals(card.effect.Substring(0, sdcardtype.Length), sdcardtype))
                {
                    card.effect = sdcardtype + ":" + card.effect;
                }
            }

            return(card);
        }
Ejemplo n.º 17
0
        private CardDescription ParseCard(SQLiteDataReader reader, ArrayList Cards)
        {
            CardDescription card = new CardDescription();

            card.ID        = Cards.Count + 1;
            card.cheatcode = GetFieldString(reader, "ID").PadLeft(8, '0');;
            card.name      = GetFieldString(reader, "name");
            card.effect    = GetFieldString(reader, "desc");

            int i = GetFieldInt(reader, "OT");

            switch (i)
            {
            case 3:
                card.cardCamp = CardCamp.BothOT;
                break;

            case 2:
                card.cardCamp = CardCamp.TCG;
                break;

            case 1:
                card.cardCamp = CardCamp.OCG;
                break;

            default:
                card.cardCamp = CardCamp.DIY;
                break;
            }

            i = GetFieldInt(reader, "level");
            if (i <= 12)
            {
                card.level = i;
            }
            else
            {
                card.level     = (int)(i & 0xffff);
                card.pendulumR = (int)(i >> 16 & 0xff);
                card.pendulumL = (int)(i >> 24 & 0xff);
            }


            string s = GetFieldString(reader, "ATTRIBUTE");

            switch (s)
            {
            case "1":
                card.element = "地";
                break;

            case "2":
                card.element = "水";
                break;

            case "4":
                card.element = "炎";
                break;

            case "8":
                card.element = "风";
                break;

            case "16":
                card.element = "光";
                break;

            case "32":
                card.element = "暗";
                break;

            case "64":
                card.element = "神";
                break;

            default:
                card.element = "无";
                break;
            }

            s = GetFieldString(reader, "RACE");
            switch (s)
            {
            case "1":
                card.tribe = "战士";
                break;

            case "2":
                card.tribe = "魔法师";
                break;

            case "4":
                card.tribe = "天使";
                break;

            case "8":
                card.tribe = "恶魔";
                break;

            case "16":
                card.tribe = "不死";
                break;

            case "32":
                card.tribe = "机械";
                break;

            case "64":
                card.tribe = "水";
                break;

            case "128":
                card.tribe = "炎";
                break;

            case "256":
                card.tribe = "岩石";
                break;

            case "512":
                card.tribe = "鸟兽";
                break;

            case "1024":
                card.tribe = "植物";
                break;

            case "2048":
                card.tribe = "昆虫";
                break;

            case "4096":
                card.tribe = "雷";
                break;

            case "8192":
                card.tribe = "龙";
                break;

            case "16384":
                card.tribe = "兽";
                break;

            case "32768":
                card.tribe = "兽战士";
                break;

            case "65536":
                card.tribe = "恐龙";
                break;

            case "131072":
                card.tribe = "鱼";
                break;

            case "262144":
                card.tribe = "海龙";
                break;

            case "524288":
                card.tribe = "爬虫类";
                break;

            case "1048576":
                card.tribe = "念动力";
                break;

            case "2097152":
                card.tribe = "幻神兽";
                break;

            case "4194304":
                card.tribe = "创造神";
                break;

            case "8388608":
                card.tribe = "幻龙";
                break;

            default:
                card.tribe = "无";
                break;
            }

            s = "";
            int cardtype = GetFieldInt(reader, "type");

            if ((cardtype & (int)YGOCardType.TYPE_MONSTER) != 0L)
            {
                s = "怪兽";
            }
            else if ((cardtype & (int)YGOCardType.TYPE_SPELL) != 0L)
            {
                s = "魔法";
            }
            else if ((cardtype & (int)YGOCardType.TYPE_TRAP) != 0L)
            {
                s = "陷阱";
            }

            if (s == "怪兽")
            {
                card.atk      = GetFieldString(reader, "atk");
                card.atkValue = int.Parse(card.atk);
                if (card.atkValue < 0)
                {
                    card.atk = "?";
                }

                card.def      = GetFieldString(reader, "def");
                card.defValue = int.Parse(card.def);
                if (card.defValue < 0)
                {
                    card.def = "?";
                }
            }
            else
            {
                card.atk      = "";
                card.atkValue = -10000;
                card.def      = "";
                card.defValue = -10000;
            }


            if (s == "")
            {
                return(null);
            }

            if ((cardtype & (int)YGOCardType.TYPE_NORMAL) != 0L)
            {
                s = "通常" + s;
            }
            else if ((cardtype & (int)YGOCardType.TYPE_FUSION) != 0L)
            {
                s = "融合" + s;
            }
            else if ((cardtype & (int)YGOCardType.TYPE_RITUAL) != 0L)
            {
                s = "仪式" + s;
            }
            else if ((cardtype & (int)YGOCardType.TYPE_SYNCHRO) != 0L)
            {
                s = "同调" + s;
            }
            else if ((cardtype & (int)YGOCardType.TYPE_XYZ) != 0L)
            {
                s = "XYZ" + s;
            }
            //else if ((cardtype & (int)YGOCardType.TYPE_PENDULUM) != 0L)
            //    s = "灵摆" + s;
            else if ((cardtype & (int)YGOCardType.TYPE_EFFECT) != 0L)
            {
                s = "效果" + s;
            }
            else if ((cardtype & (int)YGOCardType.TYPE_QUICKPLAY) != 0L)
            {
                s = "速攻" + s;
            }
            else if ((cardtype & (int)YGOCardType.TYPE_CONTINUOUS) != 0L)
            {
                s = "永续" + s;
            }
            else if ((cardtype & (int)YGOCardType.TYPE_EQUIP) != 0L)
            {
                s = "装备" + s;
            }
            else if ((cardtype & (int)YGOCardType.TYPE_FIELD) != 0L)
            {
                s = "场地" + s;
            }
            else if ((cardtype & (int)YGOCardType.TYPE_COUNTER) != 0L)
            {
                s = "反击" + s;
            }

            if (s == "魔法" || s == "陷阱")
            {
                s = "通常" + s;
            }
            card.sCardType = s;
            card.iCardType = CardDescription.CardTypeMapper(card.sCardType);

            if ((cardtype & (int)YGOCardType.TYPE_SPIRIT) != 0L)
            {
                card.effect = "效果·灵魂:" + card.effect;
            }
            if ((cardtype & (int)YGOCardType.TYPE_UNION) != 0L)
            {
                card.effect = "效果·同盟:" + card.effect;
            }
            if ((cardtype & (int)YGOCardType.TYPE_DUAL) != 0L)
            {
                card.effect = "效果·二重:" + card.effect;
            }
            if ((cardtype & (int)YGOCardType.TYPE_FLIP) != 0L)
            {
                card.effect = "效果·反转:" + card.effect;
            }
            if ((cardtype & (int)YGOCardType.TYPE_TOON) != 0L)
            {
                card.effect = "效果·卡通:" + card.effect;
            }

            s = "";

            //是否同调、超量
            if ((cardtype & (int)YGOCardType.TYPE_SYNCHRO) != 0L)
            {
                s = "同调";
            }
            else if ((cardtype & (int)YGOCardType.TYPE_XYZ) != 0L)
            {
                s = "超量";
            }
            else if ((cardtype & (int)YGOCardType.TYPE_EFFECT) != 0L)
            {
                s = "效果";
            }
            else
            {
                s = "通常";
            }

            //是否调整
            if ((cardtype & (int)YGOCardType.TYPE_TUNER) != 0L)
            {
                s += "·调整";
            }

            //是否灵摆
            if ((cardtype & (int)YGOCardType.TYPE_PENDULUM) != 0L)
            {
                s += "·灵摆";
            }

            if (s.Length > 2)
            {
                card.effect = s + ":" + card.effect;
            }

            return(card);
        }
Ejemplo n.º 18
0
        private CardDescription ParseCard(CardDescription card, string info)
        {
            string[] infos = info.Split(',');

            //处理文本
            for (int i = 0; i < infos.Length; i++)
            {
                //空字符串不处理
                if (infos[i].Length > 0)
                {
                    //过滤开始的空格
                    while (infos[i][0] == ' ')
                    {
                        infos[i] = infos[i].Substring(1, infos[i].Length - 1);
                        if (infos[i].Length == 0)
                        {
                            break;
                        }
                    }

                    //转换双引号
                    infos[i] = infos[i].Replace("\"", "\"\"");
                }
            }

            //卡片类型
            string s = infos[0].Substring(2, 2);

            if (s == "怪兽")
            {
                card.sCardType = infos[0];
                for (int i = 1; i < 7; i++)
                {
                    s = infos[i].Substring(0, 3);
                    string s2 = infos[i].Substring(3);
                    switch (s)
                    {
                    case "种族:":
                        card.tribe = s2;
                        break;

                    case "属性:":
                        card.element = s2;
                        break;

                    case "星级:":
                        try
                        {
                            card.level = int.Parse(s2);
                        }
                        catch
                        {
                            card.level = -1;
                        }
                        break;

                    case "攻击:":
                        //攻击
                        card.atk = s2;
                        if (card.atk.Equals("?") || card.atk.Equals("?"))
                        {
                            card.atkValue = -1;
                        }
                        else
                        {
                            try
                            {
                                card.atkValue = int.Parse(card.atk);
                            }
                            catch
                            {
                                card.atkValue = -2;
                            }
                        }
                        break;

                    case "防御:":
                        card.def = s2;
                        if (card.def.Equals("?") || card.def.Equals("?"))
                        {
                            card.defValue = -1;
                        }
                        else
                        {
                            try
                            {
                                card.defValue = int.Parse(card.def);
                            }
                            catch
                            {
                                card.defValue = -2;
                            }
                        }
                        break;

                    case "效果:":
                        card.effect = s2;
                        break;
                    }
                }
                for (int i = 7; i < infos.Length; i++)
                {
                    card.effect += "," + infos[i];
                }
            }
            else
            {
                s = infos[0].Substring(0, 5);
                if (s == "魔法种类:" || s == "陷阱种类:")
                {
                    card.sCardType = infos[0].Substring(5, 2) + infos[0].Substring(0, 2);
                    card.atk       = "";
                    card.atkValue  = -10000;
                    card.def       = "";
                    card.defValue  = -10000;
                }
            }
            card.iCardtype = CardTypeMapper.Mapper(card.sCardType);

            return(card);
        }
Ejemplo n.º 19
0
        public CardDescription[] Read(string filename, CardDescription[] oricards, ReadProcessChangedInvoker processchanged)
        {
            ArrayList cards = new ArrayList(oricards.Length);

            //连接数据库
            SQLiteConnection con = new SQLiteConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + filename + ";Persist Security Info=False;");

            con.Open();

            //读取同名卡数据
            Hashtable htCheatCode = new Hashtable();

            SQLiteCommand    dcc     = new SQLiteCommand(@"select t3.*, t4.[alias_list] as alias_list from
  (select t2.[id],case t2.[alias] when 0 then t2.[id] else t2.[alias] end as alias from datas t2) as t3
left join
  (select t1.[alias], t1.[alias] || ',' || group_concat(t1.[id]) as alias_list from datas t1 where t1.[alias] <> 0 group   by t1.[alias]) as t4
on t3.[alias] = t4.[alias]
where not t4.[alias_list] is null", con);
            SQLiteDataReader creader = null;

            try
            {
                creader = dcc.ExecuteReader();

                while (creader.Read())
                {
                    string cheatcode     = GetFieldString(creader, "id").PadLeft(8, '0');
                    string cheatcodelist = GetFieldString(creader, "alias_list");
                    htCheatCode.Add(cheatcode, cheatcodelist);
                }
                creader.Close();
            }
            catch
            {
            }

            //读取YGOPRO的效果分类数据
            Hashtable htEffectType = new Hashtable();

            dcc     = new SQLiteCommand("Select * FROM [datas]", con);
            creader = null;
            try
            {
                creader = dcc.ExecuteReader();

                while (creader.Read())
                {
                    string cheatcode = GetFieldString(creader, "id").PadLeft(8, '0');
                    int    Effect    = int.Parse(creader["category"].ToString());
                    htEffectType.Add(cheatcode, Effect);
                }
                creader.Close();
            }
            catch
            {
            }

            //更新同名卡数据和效果分类数据
            for (int i = 0; i < oricards.Length; i++)
            {
                CardDescription card = oricards[i];
                card.effectType = "";
                StringBuilder sb = new StringBuilder();

                int categorynum = 0;
                if (htEffectType.ContainsKey(card.cheatcode))
                {
                    categorynum = (int)htEffectType[card.cheatcode];
                }
                if (categorynum != 0)
                {
                    int index = 0;
                    int num;
                    for (num = 1; index < 0x20; num = num << 1)
                    {
                        if ((num & categorynum) != 0L)
                        {
                            sb.Append(EffectTypeDescription[index]);
                            sb.Append(",");
                        }
                        index++;
                    }

                    if (sb.Length > 0)
                    {
                        sb.Length--;
                    }
                    card.effectType = sb.ToString();
                }

                if (htCheatCode.ContainsKey(card.cheatcode))
                {
                    string[] ccl = ((string)htCheatCode[card.cheatcode]).Split(',');
                    sb = new StringBuilder();
                    for (int j = 0; j < ccl.Length; j++)
                    {
                        sb.Append(ccl[j].PadLeft(8, '0'));
                        sb.Append(',');
                    }
                    sb.Length--;
                    card.aliasList = sb.ToString();
                }

                cards.Add(card);
            }

            return((CardDescription[])cards.ToArray(typeof(CardDescription)));
        }
Ejemplo n.º 20
0
        public virtual void Save(string dirname, CardDescription[] cards)
        {
            if (dirname == null || dirname.Length <= 0)
            {
                return;
            }

            if (!Directory.Exists(dirname))
            {
                Directory.CreateDirectory(dirname);
            }

            IndexWriter writer = new IndexWriter(dirname, AnalyzerFactory.GetAnalyzer(), true);

            for (int i = 0; i < cards.Length; i++)
            {
                CardDescription card = cards[i];
                Document        doc  = new Document();

                Field ID         = new Field("ID", card.ID.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED);
                Field name       = new Field("name", card.name, Field.Store.YES, Field.Index.TOKENIZED);
                Field japName    = new Field("japName", card.japName, Field.Store.YES, Field.Index.TOKENIZED);
                Field enName     = new Field("enName", card.enName, Field.Store.YES, Field.Index.TOKENIZED);
                Field oldName    = new Field("oldName", card.oldName.Replace(",", " 龴 "), Field.Store.NO, Field.Index.TOKENIZED);
                Field shortName  = new Field("shortName", card.shortName.Replace(",", " 龴 "), Field.Store.NO, Field.Index.TOKENIZED);
                Field oldName2   = new Field("oldName2", card.oldName, Field.Store.YES, Field.Index.NO_NORMS);
                Field shortName2 = new Field("shortName2", card.shortName, Field.Store.YES, Field.Index.NO_NORMS);

                Field pyname      = new Field("pyname", GetPingyin.convertline(card.name), Field.Store.NO, Field.Index.TOKENIZED);
                Field pyoldName   = new Field("pyoldName", GetPingyin.convertline(card.oldName), Field.Store.NO, Field.Index.TOKENIZED);
                Field pyshortName = new Field("pyshortName", GetPingyin.convertline(card.shortName), Field.Store.NO, Field.Index.TOKENIZED);

                Field cardType    = new Field("cardType", card.sCardType, Field.Store.YES, Field.Index.TOKENIZED);
                Field effecfType  = new Field("effecfType", card.effecfType, Field.Store.YES, Field.Index.TOKENIZED);
                Field effect      = new Field("effect", card.effect, Field.Store.YES, Field.Index.TOKENIZED);
                Field infrequence = new Field("infrequence", card.infrequence, Field.Store.YES, Field.Index.TOKENIZED);
                Field package     = new Field("package", card.package, Field.Store.YES, Field.Index.TOKENIZED);
                Field limit       = new Field("limit", card.limit.ToString(), Field.Store.YES, Field.Index.TOKENIZED);
                Field cheatcode   = new Field("cheatcode", card.cheatcode, Field.Store.YES, Field.Index.TOKENIZED);
                Field adjust      = new Field("adjust", card.adjust, Field.Store.YES, Field.Index.NO);
                Field associate   = new Field("associate", card.associate, Field.Store.YES, Field.Index.TOKENIZED);

                Field name2    = new Field("name2", card.name, Field.Store.NO, Field.Index.NO_NORMS);
                Field japName2 = new Field("japName2", card.japName, Field.Store.NO, Field.Index.NO_NORMS);
                Field enName2  = new Field("enName2", card.enName, Field.Store.NO, Field.Index.NO_NORMS);

                Field cardCamp = new Field("cardCamp", card.cardCamp.ToString(), Field.Store.YES, Field.Index.TOKENIZED);

                string ct = "";
                if (card.sCardType.Length > 0)
                {
                    switch (card.sCardType.Substring(2, 2))
                    {
                    case "怪兽":
                        ct = "1";
                        break;

                    case "魔法":
                        ct = "2";
                        break;

                    case "陷阱":
                        ct = "3";
                        break;

                    default:
                        ct = "0";
                        break;
                    }
                    switch (card.sCardType.Substring(0, 2))
                    {
                    case "通常":
                        ct += "0";
                        break;

                    case "普通":
                        ct += "1";
                        break;

                    case "速攻":
                        ct += "2";
                        break;

                    case "装备":
                        ct += "3";
                        break;

                    case "仪式":
                        ct += "4";
                        break;

                    case "场地":
                        ct += "5";
                        break;

                    case "反击":
                        ct += "6";
                        break;

                    case "永续":
                        ct += "7";
                        break;

                    case "效果":
                        ct += "8";
                        break;

                    case "融合":
                        ct += "9";
                        break;

                    default:
                        ct += "X";
                        break;
                    }
                }
                Field cardType2 = new Field("cardType2", ct, Field.Store.NO, Field.Index.NO_NORMS);

                Field level    = null;
                Field element  = null;
                Field tribe    = null;
                Field atk      = null;
                Field atkValue = null;
                Field def      = null;
                Field defValue = null;
                if (ct[0] == '1')
                {
                    level    = new Field("level", string.Format("{0:D2}", card.level), Field.Store.YES, Field.Index.UN_TOKENIZED);
                    element  = new Field("element", card.element, Field.Store.YES, Field.Index.NO_NORMS);
                    tribe    = new Field("tribe", card.tribe, Field.Store.YES, Field.Index.NO_NORMS);
                    atk      = new Field("atk", card.atk, Field.Store.YES, Field.Index.UN_TOKENIZED);
                    atkValue = new Field("atkValue", string.Format("{0:D4}", card.atkValue), Field.Store.YES, Field.Index.UN_TOKENIZED);
                    def      = new Field("def", card.def, Field.Store.YES, Field.Index.UN_TOKENIZED);
                    defValue = new Field("defValue", string.Format("{0:D4}", card.defValue), Field.Store.YES, Field.Index.UN_TOKENIZED);
                }
                else
                {
                    level    = new Field("level", "-01", Field.Store.YES, Field.Index.UN_TOKENIZED);
                    element  = new Field("element", "", Field.Store.YES, Field.Index.NO_NORMS);
                    tribe    = new Field("tribe", "", Field.Store.YES, Field.Index.NO_NORMS);
                    atk      = new Field("atk", "", Field.Store.YES, Field.Index.UN_TOKENIZED);
                    atkValue = new Field("atkValue", "-0002", Field.Store.YES, Field.Index.UN_TOKENIZED);
                    def      = new Field("def", "", Field.Store.YES, Field.Index.UN_TOKENIZED);
                    defValue = new Field("defValue", "-0002", Field.Store.YES, Field.Index.UN_TOKENIZED);
                }

                doc.Add(ID);
                doc.Add(name);
                doc.Add(name2);
                doc.Add(japName);
                doc.Add(japName2);
                doc.Add(enName);
                doc.Add(oldName);
                doc.Add(shortName);
                doc.Add(oldName2);
                doc.Add(shortName2);

                doc.Add(pyname);
                doc.Add(pyoldName);
                doc.Add(pyshortName);

                doc.Add(cardType);
                doc.Add(cardType2);
                doc.Add(level);
                doc.Add(element);
                doc.Add(tribe);
                doc.Add(effecfType);
                doc.Add(atk);
                doc.Add(atkValue);
                doc.Add(def);
                doc.Add(defValue);
                doc.Add(effect);
                doc.Add(infrequence);
                doc.Add(package);
                doc.Add(limit);
                doc.Add(cheatcode);
                doc.Add(adjust);
                doc.Add(associate);
                doc.Add(cardCamp);

                if (card.iCardtype == 1)
                {
                    doc.SetBoost(1);
                }
                else
                {
                    doc.SetBoost(2);
                }

                writer.AddDocument(doc);
            }
            writer.Optimize();
            writer.Close();

            if (dirname[dirname.Length - 1] != '\\')
            {
                dirname += "\\";
            }
            string files = "";

            foreach (string s in Directory.GetFiles(dirname))
            {
                string ss = s.Substring(s.LastIndexOf('\\') + 1);
                if (!string.Equals(ss, "list.txt", StringComparison.OrdinalIgnoreCase))
                {
                    files += ss + "\r\n";
                }
            }
            File.WriteAllText(dirname + "list.txt", files, Encoding.UTF8);
        }
Ejemplo n.º 21
0
        private CardDescription ParseCard(string info)
        {
            CardDescription card = new CardDescription();

            string[] infos = info.Split('^');

            //处理文本
            for (int i = 0; i < infos.Length; i++)
            {
                //空字符串不处理
                if (infos[i].Length > 0)
                {
                    //过滤开始的空格
                    while (infos[i][0] == ' ')
                    {
                        infos[i] = infos[i].Substring(1, infos[i].Length - 1);
                        if (infos[i].Length == 0)
                        {
                            break;
                        }
                    }

                    //转换双引号
                    infos[i] = infos[i].Replace("\"", "\"\"");
                }
            }

            //自编序号
            card.ID = int.Parse(infos[12]);

            //卡片类型
            card.sCardType = infos[8] + infos[9] + infos[0];
            if (string.Equals(card.sCardType, "普通怪兽"))
            {
                card.sCardType = "通常怪兽";
            }

            //中文名称
            card.name = infos[1];

            //星级
            try
            {
                card.level = int.Parse(infos[2]);
            }
            catch
            {
                card.level = -1;
            }

            //属性
            card.element = infos[3];

            //种族
            card.tribe = infos[4];

            //攻击
            card.atk = infos[5];
            if (card.element.Equals(""))
            {
                card.atk      = "";
                card.atkValue = -10000;
            }
            else if (card.atk.Equals("?") || card.atk.Equals("?"))
            {
                card.atkValue = -1;
            }
            else
            {
                try
                {
                    card.atkValue = int.Parse(card.atk);
                }
                catch
                {
                    card.atkValue = -2;
                }
            }

            //防御
            card.def = infos[6];
            if (card.element.Equals(""))
            {
                card.def      = "";
                card.defValue = -10000;
            }
            else if (card.def.Equals("?") || card.def.Equals("?"))
            {
                card.defValue = -1;
            }
            else
            {
                try
                {
                    card.defValue = int.Parse(card.def);
                }
                catch
                {
                    card.defValue = -2;
                }
            }

            //7未知
            //if (!infos[7].Equals(""))
            {
                //MessageBox.Show(infos[7]);
            }

            //卡包
            card.package = infos[10];

            //效果
            card.effect = infos[11];

            //日文名称
            card.japName = infos[13];

            //罕见度
            card.infrequence = infos[14];

            //限制
            card.limit = 3;


            return(card);
        }
Ejemplo n.º 22
0
        public virtual void Save(string dirname, CardDescription[] cards, SaveProcessChangedInvoker processchanged)
        {
            if (dirname == null || dirname.Length <= 0)
            {
                return;
            }

            if (!Directory.Exists(dirname))
            {
                Directory.CreateDirectory(dirname);
            }

            Lucene.Net.Store.Directory dir = new Lucene.Net.Store.SimpleFSDirectory(new DirectoryInfo(dirname), new Lucene.Net.Store.SimpleFSLockFactory());
            IndexWriter writer             = new IndexWriter(dir, AnalyzerFactory.GetAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);

            writer.SetMaxBufferedDocs(100);
            writer.SetMergeFactor(100);


//========================================卡片种类映射表====================================
//
//	         通常  普通  速攻  装备  仪式  场地  反击  永续  效果  融合  同调  XYZ
// 1、怪兽	  0     0                 3                       4     5     6     7
// 2、魔法	  0     0     1     2     3     4           5
// 3、陷阱	  0     0                             1     5
//
//==========================================================================================

            for (int i = 0; i < cards.Length; i++)
            {
                CardDescription card = cards[i];
                int             ict  = 0;
                if (card.sCardType.Length > 0)
                {
                    switch (card.sCardType.Substring(card.sCardType.Length - 2, 2))
                    {
                    case "怪兽":
                        ict = 1;
                        break;

                    case "魔法":
                        ict = 2;
                        break;

                    case "陷阱":
                        ict = 3;
                        break;

                    default:
                        ict = 4;
                        break;
                    }
                    ict *= 10;

                    switch (card.sCardType.Substring(0, 2))
                    {
                    case "通常":
                        ict += 0;
                        break;

                    case "普通":
                        ict += 0;
                        break;

                    case "速攻":
                        ict += 1;
                        break;

                    case "装备":
                        ict += 2;
                        break;

                    case "仪式":
                        ict += 3;
                        break;

                    case "场地":
                        ict += 4;
                        break;

                    case "反击":
                        ict += 1;
                        break;

                    case "永续":
                        ict += 5;
                        break;

                    case "效果":
                        ict += 4;
                        break;

                    case "融合":
                        ict += 5;
                        break;

                    case "同调":
                        ict += 6;
                        break;

                    case "XY":
                        ict += 7;
                        break;

                    default:
                        ict += 9;
                        break;
                    }
                }


                Document doc = new Document();

                Field ID         = new Field("ID", card.ID.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED);
                Field name       = new Field("name", card.name, Field.Store.YES, Field.Index.ANALYZED);
                Field name2      = new Field("name2", card.name, Field.Store.NO, Field.Index.NOT_ANALYZED);
                Field japName    = new Field("japName", card.japName, Field.Store.YES, Field.Index.ANALYZED);
                Field japName2   = new Field("japName2", card.japName, Field.Store.NO, Field.Index.NOT_ANALYZED);
                Field enName     = new Field("enName", card.enName, Field.Store.YES, Field.Index.ANALYZED);
                Field enName2    = new Field("enName2", card.enName, Field.Store.NO, Field.Index.NOT_ANALYZED);
                Field oldName    = new Field("oldName", card.oldName.Replace(",", " 龴 "), Field.Store.NO, Field.Index.ANALYZED);
                Field shortName  = new Field("shortName", card.shortName.Replace(",", " 龴 "), Field.Store.NO, Field.Index.ANALYZED);
                Field oldName2   = new Field("oldName2", card.oldName, Field.Store.YES, Field.Index.NOT_ANALYZED);
                Field shortName2 = new Field("shortName2", card.shortName, Field.Store.YES, Field.Index.NOT_ANALYZED);

                Field pyname      = new Field("pyname", GetPingyin.convertline(card.name), Field.Store.NO, Field.Index.ANALYZED);
                Field pyoldName   = new Field("pyoldName", GetPingyin.convertline(card.oldName), Field.Store.NO, Field.Index.ANALYZED);
                Field pyshortName = new Field("pyshortName", GetPingyin.convertline(card.shortName), Field.Store.NO, Field.Index.ANALYZED);

                Field cardType    = new Field("cardType", card.sCardType, Field.Store.YES, Field.Index.ANALYZED);
                Field cardType2   = new Field("cardType2", ict.ToString(), Field.Store.NO, Field.Index.NOT_ANALYZED);
                Field effectType  = new Field("effectType", card.effectType, Field.Store.YES, Field.Index.ANALYZED);
                Field effect      = new Field("effect", card.effect, Field.Store.YES, Field.Index.ANALYZED);
                Field infrequence = new Field("infrequence", card.infrequence, Field.Store.YES, Field.Index.ANALYZED);
                Field package     = new Field("package", card.package, Field.Store.YES, Field.Index.ANALYZED);
                Field limit       = new Field("limit", card.limit.ToString(), Field.Store.YES, Field.Index.ANALYZED);
                Field cheatcode   = new Field("cheatcode", card.cheatcode, Field.Store.YES, Field.Index.ANALYZED);
                Field aliasList   = new Field("aliasList", card.aliasList, Field.Store.YES, Field.Index.ANALYZED);
                Field adjust      = new Field("adjust", card.adjust, Field.Store.YES, Field.Index.NO);
                Field associate   = new Field("associate", card.associate, Field.Store.YES, Field.Index.NO);
                Field cardCamp    = new Field("cardCamp", card.cardCamp.ToString(), Field.Store.YES, Field.Index.ANALYZED);

                Field level     = null;
                Field pendulumL = null;
                Field pendulumR = null;
                Field element   = null;
                Field tribe     = null;
                Field atk       = null;
                Field atkValue  = null;
                Field def       = null;
                Field defValue  = null;
                if (ict < 20)
                {
                    //怪兽卡
                    level     = new Field("level", string.Format("{0:D2}", card.level), Field.Store.YES, Field.Index.NOT_ANALYZED);
                    pendulumL = new Field("pendulumL", string.Format("{0:D2}", card.pendulumL), Field.Store.YES, Field.Index.NOT_ANALYZED);
                    pendulumR = new Field("pendulumR", string.Format("{0:D2}", card.pendulumR), Field.Store.YES, Field.Index.NOT_ANALYZED);
                    element   = new Field("element", card.element, Field.Store.YES, Field.Index.NOT_ANALYZED);
                    tribe     = new Field("tribe", card.tribe, Field.Store.YES, Field.Index.NOT_ANALYZED);
                    atk       = new Field("atk", card.atk, Field.Store.YES, Field.Index.NOT_ANALYZED);
                    atkValue  = new Field("atkValue", string.Format("{0:D4}", card.atkValue), Field.Store.YES, Field.Index.NOT_ANALYZED);
                    //atkValue = new NumericField("atkValue", Field.Store.YES, true).SetIntValue(card.atkValue);
                    def      = new Field("def", card.def, Field.Store.YES, Field.Index.NOT_ANALYZED);
                    defValue = new Field("defValue", string.Format("{0:D4}", card.defValue), Field.Store.YES, Field.Index.NOT_ANALYZED);
                }
                else
                {
                    //魔陷卡
                    level     = new Field("level", "-01", Field.Store.YES, Field.Index.NOT_ANALYZED);
                    pendulumL = new Field("pendulumL", "-01", Field.Store.YES, Field.Index.NOT_ANALYZED);
                    pendulumR = new Field("pendulumR", "-01", Field.Store.YES, Field.Index.NOT_ANALYZED);
                    element   = new Field("element", "", Field.Store.YES, Field.Index.NOT_ANALYZED);
                    tribe     = new Field("tribe", "", Field.Store.YES, Field.Index.NOT_ANALYZED);
                    atk       = new Field("atk", "", Field.Store.YES, Field.Index.NOT_ANALYZED);
                    atkValue  = new Field("atkValue", "-0002", Field.Store.YES, Field.Index.NOT_ANALYZED);
                    def       = new Field("def", "", Field.Store.YES, Field.Index.NOT_ANALYZED);
                    defValue  = new Field("defValue", "-0002", Field.Store.YES, Field.Index.NOT_ANALYZED);
                }

                doc.Add(ID);
                doc.Add(name);
                doc.Add(name2);
                doc.Add(japName);
                doc.Add(japName2);
                doc.Add(enName);
                doc.Add(oldName);
                doc.Add(shortName);
                doc.Add(oldName2);
                doc.Add(shortName2);

                doc.Add(pyname);
                doc.Add(pyoldName);
                doc.Add(pyshortName);

                doc.Add(cardType);
                doc.Add(cardType2);
                doc.Add(level);
                doc.Add(pendulumL);
                doc.Add(pendulumR);
                doc.Add(element);
                doc.Add(tribe);
                doc.Add(effectType);
                doc.Add(atk);
                doc.Add(atkValue);
                doc.Add(def);
                doc.Add(defValue);
                doc.Add(effect);
                doc.Add(infrequence);
                doc.Add(package);
                doc.Add(limit);
                doc.Add(cheatcode);
                doc.Add(aliasList);
                doc.Add(adjust);
                doc.Add(associate);
                doc.Add(cardCamp);

                if (card.iCardType == 1)
                {
                    doc.SetBoost(1);
                }
                else
                {
                    doc.SetBoost(2);
                }

                writer.AddDocument(doc);

                if (processchanged != null)
                {
                    processchanged.Invoke(cards.Length, i + 1);
                }
            }
            writer.Optimize();
            writer.Close();

            //记录当前索引文件夹的文件列表
            if (dirname[dirname.Length - 1] != '\\')
            {
                dirname += "\\";
            }
            string files = "";

            foreach (string s in Directory.GetFiles(dirname))
            {
                string ss = s.Substring(s.LastIndexOf('\\') + 1);
                if (!string.Equals(ss, "list.txt", StringComparison.OrdinalIgnoreCase))
                {
                    files += ss + "\r\n";
                }
            }
            File.WriteAllText(dirname + "list.txt", files, Encoding.UTF8);
        }