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))); }
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))); }
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(); }
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); }
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))); }
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))); }
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); }
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(); }
public bool isTrapCard() { return(CardDescription.isTrapCard(this)); }
public static bool isTrapCard(CardDescription card) { return(isTrapCard(card.iCardType)); }
public bool isMagicCard() { return(CardDescription.isMagicCard(this)); }
public bool isMonsterCard() { return(CardDescription.isMonsterCard(this)); }
public bool isExtraCard() { return(CardDescription.isExtraCard(this)); }
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); }
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); }
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); }
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); }
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); }
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))); }
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); }
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); }
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); }