Commit 83787ed0 authored by keyongyu's avatar keyongyu

2.2.7.0

parent edc418ec
......@@ -178,7 +178,7 @@ private void InitializeComponent()
// menuitem_about
//
this.menuitem_about.Name = "menuitem_about";
this.menuitem_about.Size = new System.Drawing.Size(152, 22);
this.menuitem_about.Size = new System.Drawing.Size(111, 22);
this.menuitem_about.Text = "About";
this.menuitem_about.Click += new System.EventHandler(this.AboutToolStripMenuItemClick);
//
......
......@@ -43,11 +43,6 @@ public CodeEditForm()
{
InitForm();
}
public CodeEditForm(string file)
{
InitForm();
Open(file);
}
void InitForm()
{
cardlist=new SortedDictionary<long, string>();
......@@ -208,7 +203,6 @@ void CodeEditFormEnter(object sender, EventArgs e)
,AutocompleteItem[] conlist)
{
this.tooltipDic=tooltipDic;
List<AutocompleteItem> items=new List<AutocompleteItem>();
items.AddRange(funlist);
items.AddRange(conlist);
......@@ -397,8 +391,9 @@ void Tb_inputKeyDown(object sender, KeyEventArgs e)
}
}
#endregion
void CodeEditFormFormClosing(object sender, FormClosingEventArgs e)
#region close
void CodeEditFormFormClosing(object sender, FormClosingEventArgs e)
{
if(!string.IsNullOrEmpty(oldtext))
{
......@@ -411,8 +406,10 @@ void CodeEditFormFormClosing(object sender, FormClosingEventArgs e)
Save();
}
}
public void SetCDBList(string[] cdbs)
#endregion
#region card tooltip
public void SetCDBList(string[] cdbs)
{
if(cdbs == null)
return;
......@@ -448,8 +445,10 @@ public void SetCards(Card[] cards)
cardlist.Add(c.id,c.ToString());
}
}
void FctbSelectionChangedDelayed(object sender, EventArgs e)
#endregion
#region selection
void FctbSelectionChangedDelayed(object sender, EventArgs e)
{
tb_input.Text=fctb.SelectedText;
fctb.VisibleRange.ClearStyle(SameWordsStyle);
......@@ -466,7 +465,10 @@ void FctbSelectionChangedDelayed(object sender, EventArgs e)
foreach(var r in ranges)
r.SetStyle(SameWordsStyle);
}
void FctbMouseClick(object sender, MouseEventArgs e)
#endregion
#region goto function define
void FctbMouseClick(object sender, MouseEventArgs e)
{
var fragment = fctb.Selection.GetFragment(@"\w");
string text = fragment.Text;
......@@ -481,6 +483,7 @@ void FctbMouseClick(object sender, MouseEventArgs e)
//MessageBox.Show(linenums[0].ToString());
}
}
}
}
}
#endregion
}
}
......@@ -26,7 +26,9 @@ public class MySyntaxHighlighter : SyntaxHighlighter
TextStyle ConStyle = new TextStyle(Brushes.YellowGreen, null, FontStyle.Regular);
TextStyle mKeywordStyle = new TextStyle(Brushes.DeepSkyBlue, null, FontStyle.Regular);
TextStyle mGrayStyle = new TextStyle(Brushes.Gray, null, FontStyle.Regular);
TextStyle mFunStyle = new TextStyle(Brushes.DeepSkyBlue, null, FontStyle.Regular);
TextStyle mFunStyle = new TextStyle(Brushes.LightGray, null, FontStyle.Bold);
/// <summary>
/// Highlights Lua code
/// </summary>
......@@ -44,7 +46,7 @@ public override void LuaSyntaxHighlight(Range range)
= @"^\s*[\w\.]+(\s\w+)?\s*(?<range>=)\s*(?<range>.+)";
//clear style of changed range
range.ClearStyle(mStrStyle, mGrayStyle, ConStyle, mNumberStyle, mKeywordStyle, mFunStyle);
range.ClearStyle(mStrStyle, mGrayStyle,ConStyle, mNumberStyle, mKeywordStyle, mFunStyle);
//
if (base.LuaStringRegex == null)
base.InitLuaRegex();
......@@ -56,18 +58,15 @@ public override void LuaSyntaxHighlight(Range range)
range.SetStyle(mGrayStyle, base.LuaCommentRegex3);
//number highlighting
range.SetStyle(mNumberStyle, base.LuaNumberRegex);
range.SetStyle(mNumberStyle, @"\bc\d+\b");
//keyword highlighting
range.SetStyle(mKeywordStyle, base.LuaKeywordRegex);
//functions highlighting
range.SetStyle(mFunStyle, base.LuaFunctionsRegex);
range.SetStyle(mNumberStyle, @"\bc\d+\b");
//range.SetStyle(mBoldStyle, @"\b(?<range>[a-zA-Z0-9_]+?)[.|:|=|\s]");
//constant
range.SetStyle(ConStyle, @"[\s|\(|+|,]{0,1}(?<range>[A-Z_]+?)[\)|+|\s|,]");
//function
//range.SetStyle(FunStyle, @"[:|.|\s](?<range>[^\(]*?)[\(|\)|\s]");
range.SetStyle(ConStyle, @"[\s|\(|+|,]{0,1}(?<range>[A-Z_]+?)[\)|+|\s|,|;]");
//range.SetStyle(mFunStyle, @"[:|\.|\s](?<range>[a-zA-Z0-9_]*?)[\(|\)|\s]");
//clear folding markers
range.ClearFoldingMarkers();
......
......@@ -218,7 +218,6 @@ public bool IsSetCode(long sc)
}
#endregion
}
}
using System;
using System.Drawing;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using System.Configuration;
using WeifenLuo.WinFormsUI.Docking;
using FastColoredTextBoxNS;
using DataEditorX.Language;
using DataEditorX.Core;
using System.Text;
namespace DataEditorX.Core
{
class CodeConfig
{
public CodeConfig(string datapath)
{
funtxt = MyPath.Combine(datapath, "_functions.txt");
conlua = MyPath.Combine(datapath, "constant.lua");
confstring = MyPath.Combine(datapath, "strings.conf");
tooltipDic = new Dictionary<string, string>();
funList = new List<AutocompleteItem>();
conList = new List<AutocompleteItem>();
}
//函数提示
Dictionary<string, string> tooltipDic;
public Dictionary<string, string> TooltipDic
{
get { return tooltipDic; }
}
//自动完成
List<AutocompleteItem> funList;
List<AutocompleteItem> conList;
bool isInit;
public bool IsInit
{
get { return isInit; }
}
public AutocompleteItem[] FunList
{
get { return funList.ToArray(); }
}
public AutocompleteItem[] ConList
{
get { return conList.ToArray(); }
}
public string funtxt, conlua, confstring;
public void Init()
{
isInit = true;
tooltipDic.Clear();
funList.Clear();
conList.Clear();
AddFunction(funtxt);
AddConstant(conlua);
}
#region setnames strings
public void SetNames(Dictionary<long, string> dic)
{
foreach (long k in dic.Keys)
{
string key = "0x" + k.ToString("x");
if (!tooltipDic.ContainsKey(key))
{
AddConToolTip(key, dic[k]);
}
}
}
public void AddStrings(string str)
{
if (File.Exists(str))
{
string[] lines = File.ReadAllLines(str);
foreach (string line in lines)
{
if (line.StartsWith("!victory")
|| line.StartsWith("!counter"))
{
string[] ws = line.Split(' ');
if (ws.Length > 2)
{
AddConToolTip(ws[1], ws[2]);
}
}
}
}
}
public void AddStrings()
{
AddStrings(confstring);
}
#endregion
#region function
void AddFunction(string funtxt)
{
if (File.Exists(funtxt))
{
string[] lines = File.ReadAllLines(funtxt);
bool isFind = false;
string name = "";
string desc = "";
foreach (string line in lines)
{
if (string.IsNullOrEmpty(line)
|| line.StartsWith("==")
|| line.StartsWith("#"))
continue;
if (line.StartsWith("●"))
{
//add
AddFuncTooltip(name, desc);
int w = line.IndexOf("(");
int t = line.IndexOf(" ");
if (t < w && t > 0)
{
name = line.Substring(t + 1, w - t - 1);
isFind = true;
desc = line;
}
}
else if (isFind)
{
desc += Environment.NewLine + line;
}
}
AddFuncTooltip(name, desc);
}
}
string GetFunName(string str)
{
int t = str.IndexOf(".");
if (t > 0)
return str.Substring(t + 1);
return str;
}
void AddFuncTooltip(string name, string desc)
{
if (!string.IsNullOrEmpty(name))
{
string fname = GetFunName(name);
AddAutoMenuItem(funList, fname, desc);
if (!tooltipDic.ContainsKey(fname))
{
tooltipDic.Add(fname, desc);
}
else
tooltipDic[fname] += Environment.NewLine
+ Environment.NewLine + desc;
}
}
#endregion
#region constant
void AddAutoMenuItem(List<AutocompleteItem> list, string key, string desc)
{
bool isExists = false;
foreach (AutocompleteItem ai in list)
{
if (ai.Text == key)
{
isExists = true;
ai.ToolTipText += Environment.NewLine
+ Environment.NewLine + desc;
}
}
if (!isExists)
{
AutocompleteItem aitem = new AutocompleteItem(key);
aitem.ToolTipTitle = key;
aitem.ToolTipText = desc;
list.Add(aitem);
}
}
void AddConToolTip(string key, string desc)
{
AddAutoMenuItem(conList, key, desc);
if (tooltipDic.ContainsKey(key))
tooltipDic[key] += Environment.NewLine
+ Environment.NewLine + desc;
else
{
tooltipDic.Add(key, desc);
}
}
void AddConstant(string conlua)
{
//conList.Add("con");
if (File.Exists(conlua))
{
string[] lines = File.ReadAllLines(conlua);
foreach (string line in lines)
{
if (line.StartsWith("--"))
continue;
string k = line, desc = line;
int t = line.IndexOf("=");
int t2 = line.IndexOf("--");
k = (t > 0) ? line.Substring(0, t).TrimEnd(new char[] { ' ', '\t' })
: line;
desc = (t > 0) ? line.Substring(t + 1).Replace("--", "\n")
: line;
if (!tooltipDic.ContainsKey(k))
{
AddConToolTip(k, desc);
}
else
tooltipDic[k] += Environment.NewLine
+ Environment.NewLine + desc;
}
}
}
#endregion
}
}
......@@ -122,8 +122,6 @@ public static int Command(string DB, params string[] SQLs)
}
#endregion
#region 数据读取
#region 根据SQL读取
static Card ReadCard(SQLiteDataReader reader,bool reNewLine)
{
......@@ -161,7 +159,17 @@ static string Retext(string text)
sr.Remove(0, sr.Length);
return text;
}
/// <summary>
public static Card[] Read(string DB, bool reNewLine, params long[] ids)
{
List<string> idlist = new List<string>();
foreach (long id in ids)
{
idlist.Add(id.ToString());
}
return Read(DB, reNewLine, idlist.ToArray());
}
/// <summary>
/// 根据密码集合,读取数据
/// </summary>
/// <param name="DB">数据库</param>
......@@ -221,70 +229,6 @@ public static Card[] Read(string DB,bool reNewLine, params string[] SQLs)
return list.ToArray();
}
#endregion
#region 根据文件读取数据库
public static Card[] ReadYdk(string dbfile, string ydkfile)
{
if ( File.Exists(dbfile) )
{
string[] ids = ReadYDK(ydkfile);
if(ids!=null)
return DataBase.Read(dbfile, true, ids);
}
return null;
}
/// <summary>
/// 读取ydk文件为密码数组
/// </summary>
/// <param name="file">ydk文件</param>
/// <returns>密码数组</returns>
static string[] ReadYDK(string ydkfile)
{
string str;
List<string> IDs = new List<string>();
if ( File.Exists(ydkfile) )
{
using ( FileStream f = new FileStream(ydkfile, FileMode.Open, FileAccess.Read) )
{
StreamReader sr = new StreamReader(f, Encoding.Default);
str = sr.ReadLine();
while ( str != null )
{
if ( !str.StartsWith("!") && !str.StartsWith("#") &&str.Length>0)
{
if ( IDs.IndexOf(str) < 0 )
IDs.Add(str);
}
str = sr.ReadLine();
}
sr.Close();
f.Close();
}
}
if(IDs.Count==0)
return null;
return IDs.ToArray();
}
#endregion
#region 根据图像读取数据库
public static Card[] ReadImage(string dbfile, string path)
{
if ( File.Exists(dbfile) )
{
string[] files = Directory.GetFiles(path, "*.jpg");
int n = files.Length;
for ( int i = 0; i < n; i++ )
{
files[i] = Path.GetFileNameWithoutExtension(files[i]);
}
return DataBase.Read(dbfile, true,files);
}
return null;
}
#endregion
#endregion
#region 复制数据库
/// <summary>
......
......@@ -18,22 +18,23 @@ public class DataConfig
{
public DataConfig()
{
InitMember();
InitMember(System.Windows.Forms.Application.StartupPath);
}
public DataConfig(string datapath)
{
confrule=Path.Combine(datapath, "card-rule.txt");
confattribute=Path.Combine(datapath, "card-attribute.txt");
confrace=Path.Combine(datapath, "card-race.txt");
conflevel=Path.Combine(datapath, "card-level.txt");
confsetname=Path.Combine(datapath, "card-setname.txt");
conftype=Path.Combine(datapath, "card-type.txt");
confcategory=Path.Combine(datapath, "card-category.txt");
InitMember();
InitMember(datapath);
}
void InitMember()
{
void InitMember(string datapath)
{
this.datapath = datapath;
confrule = Path.Combine(datapath, "card-rule.txt");
confattribute = Path.Combine(datapath, "card-attribute.txt");
confrace = Path.Combine(datapath, "card-race.txt");
conflevel = Path.Combine(datapath, "card-level.txt");
confsetname = Path.Combine(datapath, "card-setname.txt");
conftype = Path.Combine(datapath, "card-type.txt");
confcategory = Path.Combine(datapath, "card-category.txt");
dicCardRules=new Dictionary<long, string>();
dicSetnames=new Dictionary<long, string>();
dicCardTypes=new Dictionary<long, string>();
......@@ -42,26 +43,6 @@ void InitMember()
dicCardRaces=new Dictionary<long, string>();
dicCardLevels=new Dictionary<long, string>();
}
public DataConfig Clone()
{
DataConfig datacfg=new DataConfig();
datacfg.confrule = confrule;
datacfg.confattribute = confattribute;
datacfg.confrace = confrace;
datacfg.conflevel = conflevel;
datacfg.confsetname = confsetname;
datacfg.conftype = conftype;
datacfg.confcategory = confcategory;
datacfg.dicCardRules = CopyDic(dicCardRules);
datacfg.dicSetnames = CopyDic(dicSetnames);
datacfg.dicCardTypes = CopyDic(dicCardTypes);
datacfg.dicCardcategorys = CopyDic(dicCardcategorys);
datacfg.dicCardAttributes = CopyDic(dicCardAttributes);
datacfg.dicCardRaces = CopyDic(dicCardRaces);
datacfg.dicCardLevels = CopyDic(dicCardLevels);
return datacfg;
}
Dictionary<long, string> CopyDic(Dictionary<long, string> dic)
{
Dictionary<long, string> ndic=new Dictionary<long, string>();
......@@ -81,8 +62,10 @@ public void Init()
dicCardRaces=DataManager.Read(confrace);
dicCardLevels=DataManager.Read(conflevel);
}
string datapath;
public string confrule, confattribute, confrace, conflevel;
public string confsetname, conftype, confcategory;
public Dictionary<long, string> dicCardRules=null;
public Dictionary<long, string> dicCardAttributes=null;
public Dictionary<long, string> dicCardRaces=null;
......
......@@ -86,7 +86,8 @@ long defaultKey
return lkey;
}
#endregion
#region value
public static string[] GetValues(Dictionary<long, string> dic)
{
int length=dic.Count;
......@@ -104,5 +105,6 @@ public static string[] GetValues(Dictionary<long, string> dic)
return dic[key];
return key.ToString("x");
}
#endregion
}
}
......@@ -13,6 +13,7 @@
using System.Text.RegularExpressions;
using System.IO.Compression;
using System.Windows.Forms;
using Microsoft.VisualBasic;
namespace DataEditorX.Core
{
......@@ -24,7 +25,6 @@ namespace DataEditorX.Core
public class MSE
{
MSEConfig cfg;
MSEConvert conv;
public int MaxNum
{
......@@ -41,8 +41,61 @@ public string ImagePath
Dictionary<long,string> racedic)
{
cfg=new MSEConfig(path);
conv=new MSEConvert(typedic, racedic, cfg);
}
public string reItalic(string str)
{
str = cn2tw(str);
foreach (RegStr rs in cfg.replaces)
{
str = Regex.Replace(str, rs.pstr, rs.rstr);
}
return str;
}
public string cn2tw(string str)
{
if (cfg.Iscn2tw)
{
str = Strings.StrConv(str, VbStrConv.TraditionalChinese, 0);
str = str.Replace("巖", "岩");
}
return str;
}
public string ReDesc(string desc)
{
desc = cn2tw(desc);
StringBuilder sb = new StringBuilder(reItalic(desc));
sb.Replace(Environment.NewLine, "\n");
sb.Replace("\n\n", "\n");
sb.Replace("\n", "\n\t\t");
return sb.ToString();
}
public string GetST(Card c, bool isSpell)
{
string level;
if (c.IsType(CardType.TYPE_EQUIP))
level = "+";
else if (c.IsType(CardType.TYPE_QUICKPLAY))
level = "$";
else if (c.IsType(CardType.TYPE_FIELD))
level = "&";
else if (c.IsType(CardType.TYPE_CONTINUOUS))
level = "%";
else if (c.IsType(CardType.TYPE_RITUAL))
level = "#";
else if (c.IsType(CardType.TYPE_COUNTER))
level = "!";
else if (cfg.st_is_symbol)
level = "^";
else
level = "";
if (isSpell)
level = cfg.str_spell.Replace("%%", level);
else
level = cfg.str_trap.Replace("%%", level);
return level;
}
public string[] WriteSet(string file,Card[] cards)
{
List<string> list=new List<string>();
......@@ -54,48 +107,12 @@ public string[] WriteSet(string file,Card[] cards)
sw.WriteLine(cfg.head);
foreach(Card c in cards)
{
string jpg=MyPath.Combine(pic,c.id+".jpg");
string jpg2=MyPath.Combine(pic,c.idString+".jpg");
string jpg3=MyPath.Combine(pic,c.name+".jpg");
string png=MyPath.Combine(pic,c.id+".png");
string png2=MyPath.Combine(pic,c.idString+".png");
string png3=MyPath.Combine(pic,c.name+".png");
if(File.Exists(jpg)){
list.Add(jpg);
jpg=Path.GetFileName(jpg);
}
else if(File.Exists(jpg2)){
list.Add(jpg2);
jpg=Path.GetFileName(jpg2);
}
else if(File.Exists(jpg3)){
File.Copy(jpg3, jpg, true);
if(File.Exists(jpg)){//复制失败
list.Add(jpg);
jpg=Path.GetFileName(jpg);
}
else
jpg="";
}
else if(File.Exists(png)){
list.Add(png);
jpg=Path.GetFileName(png);
}
else if(File.Exists(png2)){
list.Add(png2);
jpg=Path.GetFileName(png2);
}
else if(File.Exists(png3)){
File.Copy(png3, png, true);
if(File.Exists(png)){//复制失败
list.Add(png);
jpg=Path.GetFileName(png);
}
else
jpg="";
}
else
jpg="";
string jpg = YGOUtil.GetCardImagePath(pic, c);
if (!string.IsNullOrEmpty(jpg))
{
list.Add(jpg);
jpg = Path.GetFileName(jpg);
}
if(c.IsType(CardType.TYPE_SPELL)||c.IsType(CardType.TYPE_TRAP))
sw.WriteLine(getSpellTrap(c, jpg, c.IsType(CardType.TYPE_SPELL)));
else
......@@ -114,30 +131,30 @@ string getMonster(Card c,string img,bool isPendulum)
sb.Append(cfg.pendulum);
else
sb.Append(cfg.monster);
string[] types = conv.GetTypes(c);
string race = conv.GetRace(c.race);
string[] types = YGOUtil.GetTypes(c);
string race = YGOUtil.GetRace(c.race);
sb.Replace("%type%", types[0]);
sb.Replace("%name%", conv.reItalic(c.name));
sb.Replace("%attribute%", conv.GetAttribute(c.attribute));
sb.Replace("%level%", conv.GetStar(c.level));
sb.Replace("%name%", reItalic(c.name));
sb.Replace("%attribute%", YGOUtil.GetAttribute(c.attribute));
sb.Replace("%level%", YGOUtil.GetStar(c.level));
sb.Replace("%image%", img);
sb.Replace("%race%", race);
sb.Replace("%type1%",types[1]);
sb.Replace("%type2%",types[2]);
sb.Replace("%type3%",types[3]);
sb.Replace("%race%", cn2tw(race));
sb.Replace("%type1%",cn2tw(types[1]));
sb.Replace("%type2%",cn2tw(types[2]));
sb.Replace("%type3%",cn2tw(types[3]));
if(isPendulum){
string text= conv.GetDesc(c.desc, cfg.regx_monster);
string text = YGOUtil.GetDesc(c.desc, cfg.regx_monster);
if(string.IsNullOrEmpty(text))
text=c.desc;
sb.Replace("%desc%", conv.ReDesc(text));
sb.Replace("%desc%", ReDesc(text));
sb.Replace("%pl%", ((c.level >> 0x18) & 0xff).ToString());
sb.Replace("%pr%", ((c.level >> 0x10) & 0xff).ToString());
sb.Replace("%pdesc%", conv.ReDesc(
conv.GetDesc(c.desc, cfg.regx_pendulum)));
sb.Replace("%pdesc%", ReDesc(
YGOUtil.GetDesc(c.desc, cfg.regx_pendulum)));
}
else
sb.Replace("%desc%", conv.ReDesc(c.desc));
sb.Replace("%desc%", ReDesc(c.desc));
sb.Replace("%atk%", (c.atk<0)?"?":c.atk.ToString());
sb.Replace("%def%", (c.def<0)?"?":c.def.ToString());
......@@ -148,11 +165,11 @@ string getSpellTrap(Card c,string img,bool isSpell)
{
StringBuilder sb=new StringBuilder(cfg.spelltrap);
sb.Replace("%type%", isSpell?"spell card":"trap card");
sb.Replace("%name%", conv.reItalic(c.name));
sb.Replace("%name%", reItalic(c.name));
sb.Replace("%attribute%", isSpell?"spell":"trap");
sb.Replace("%level%", conv.GetST(c, isSpell));
sb.Replace("%level%", GetST(c, isSpell));
sb.Replace("%image%", img);
sb.Replace("%desc%", conv.ReDesc(c.desc));
sb.Replace("%desc%", ReDesc(c.desc));
sb.Replace("%code%", c.idString);
return sb.ToString();
}
......
/*
* 由SharpDevelop创建。
* 用户: Acer
* 日期: 2014-10-15
* 时间: 15:46
*
*/
using System;
using System.Text;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using Microsoft.VisualBasic;
using System.Configuration;
namespace DataEditorX.Core
{
/// <summary>
/// Description of MSEConvert.
/// </summary>
public class MSEConvert
{
/*
*
normal monster 通常怪兽
effect monster 效果怪兽
fusion monster 融合怪兽
ritual monster 仪式怪兽
synchro monster 同调怪兽
token monster 衍生物
xyz monster 超量怪兽
spell card 魔法
trap card 陷阱
*/
MSEConfig cfg;
Dictionary<long,string> mTypedic=null;
Dictionary<long,string> mRacedic=null;
public MSEConvert(Dictionary<long,string> typedic,
Dictionary<long,string> racedic,
MSEConfig _cfg)
{
mTypedic = typedic;
mRacedic = racedic;
cfg=_cfg;
}
public string GetST(Card c,bool isSpell)
{
string level;
if(c.IsType(CardType.TYPE_EQUIP))
level="+";
else if(c.IsType(CardType.TYPE_QUICKPLAY))
level="$";
else if(c.IsType(CardType.TYPE_FIELD))
level="&";
else if(c.IsType(CardType.TYPE_CONTINUOUS))
level="%";
else if(c.IsType(CardType.TYPE_RITUAL))
level="#";
else if(c.IsType(CardType.TYPE_COUNTER))
level="!";
else if(cfg.st_is_symbol)
level="^";
else
level="";
if(isSpell)
level=cfg.str_spell.Replace("%%",level);
else
level=cfg.str_trap.Replace("%%",level);
return level;
}
public string reItalic(string str)
{
str=cn2tw(str);
foreach(RegStr rs in cfg.replaces)
{
str= Regex.Replace(str, rs.pstr, rs.rstr);
}
return str;
}
public string cn2tw(string str)
{
if(cfg.Iscn2tw){
str= Strings.StrConv(str,VbStrConv.TraditionalChinese,0);
str=str.Replace("巖","岩");
}
return str;
}
public string ReDesc(string desc)
{
desc=cn2tw(desc);
StringBuilder sb=new StringBuilder(reItalic(desc));
sb.Replace(Environment.NewLine, "\n");
sb.Replace("\n\n","\n");
sb.Replace("\n","\n\t\t");
return sb.ToString();
}
public string[] GetTypes(Card c)
{
string[] types=new string[]{"normal monster","","",""};
if(c.IsType(CardType.TYPE_MONSTER))
{//卡片类型和第1效果
if(c.IsType(CardType.TYPE_XYZ)){
types[0]="xyz monster";
types[1]=GetType(CardType.TYPE_XYZ);
}
else if(c.IsType(CardType.TYPE_TOKEN)){
if(c.race==0)
types[0]="token card";
else
types[0]="token monster";
types[1]=GetType(CardType.TYPE_TOKEN);
}
else if(c.IsType(CardType.TYPE_RITUAL)){
types[0]="ritual monster";
types[1]=GetType(CardType.TYPE_RITUAL);
}
else if(c.IsType(CardType.TYPE_FUSION)){
types[0]="fusion monster";
types[1]=GetType(CardType.TYPE_FUSION);
}
else if(c.IsType(CardType.TYPE_SYNCHRO)){
types[0]="synchro monster";
types[1]=GetType(CardType.TYPE_SYNCHRO);
}
else if(c.IsType(CardType.TYPE_EFFECT)){
types[0]="effect monster";
}
else
types[0]="normal monster";
//同调
if(types[0]=="synchro monster" || types[0]=="token monster")
{
if(c.IsType(CardType.TYPE_TUNER)
&& c.IsType(CardType.TYPE_EFFECT))
{//调整效果
types[2]=GetType(CardType.TYPE_TUNER);
types[3]=GetType(CardType.TYPE_EFFECT);
}
else if(c.IsType(CardType.TYPE_TUNER))
{
types[2]=GetType(CardType.TYPE_TUNER);
}
else if(c.IsType(CardType.TYPE_EFFECT))
{
types[2]=GetType(CardType.TYPE_EFFECT);
}
}
else if(types[0] == "normal monster")
{
if(c.IsType(CardType.TYPE_PENDULUM))//灵摆
types[1]=GetType(CardType.TYPE_PENDULUM);
else if(c.IsType(CardType.TYPE_TUNER))//调整
types[1]=GetType(CardType.TYPE_TUNER);
}
else if(types[0] != "effect monster")
{//效果
if(c.IsType(CardType.TYPE_EFFECT))
types[2]=GetType(CardType.TYPE_EFFECT);
}
else
{//效果怪兽
types[2]=GetType(CardType.TYPE_EFFECT);
if(c.IsType(CardType.TYPE_PENDULUM))
types[1]=GetType(CardType.TYPE_PENDULUM);
else if(c.IsType(CardType.TYPE_TUNER))
types[1]=GetType(CardType.TYPE_TUNER);
else if(c.IsType(CardType.TYPE_SPIRIT))
types[1]=GetType(CardType.TYPE_SPIRIT);
else if(c.IsType(CardType.TYPE_TOON))
types[1]=GetType(CardType.TYPE_TOON);
else if(c.IsType(CardType.TYPE_UNION))
types[1]=GetType(CardType.TYPE_UNION);
else if(c.IsType(CardType.TYPE_DUAL))
types[1]=GetType(CardType.TYPE_DUAL);
else if(c.IsType(CardType.TYPE_FLIP))
types[1]=GetType(CardType.TYPE_FLIP);
else{
types[1]=GetType(CardType.TYPE_EFFECT);
types[2]="";
}
}
}
if(c.race==0)
{
types[0]="";
types[1]="";
types[2]="";
}
return types;
}
string GetType(CardType type)
{
long key=(long)type;
if(mTypedic==null)
return "";
if(mTypedic.ContainsKey(key))
return cn2tw(mTypedic[key].Trim());
return "";
}
public string GetStar(long level)
{
long j=level&0xff;
string star="";
for(int i=0;i<j;i++)
{
star+="*";
}
return star;
}
public string GetRace(long race)
{
if(race==0)
return "";
if(mRacedic==null)
return "";
if(mRacedic.ContainsKey(race))
return cn2tw(mRacedic[race]);
return "";
}
public string GetDesc(string desc,string regx)
{
desc=desc.Replace(Environment.NewLine,"\n");
Regex regex=new Regex(regx);
Match mc=regex.Match(desc);
if(mc.Success)
return (mc.Groups.Count>1)?
mc.Groups[1].Value:mc.Groups[0].Value;
return "";
}
public string GetAttribute(int attr)
{
CardAttribute cattr= (CardAttribute)attr;
string sattr="none";
switch(cattr)
{
case CardAttribute.ATTRIBUTE_DARK:
sattr="dark";
break;
case CardAttribute.ATTRIBUTE_DEVINE:
sattr="divine";
break;
case CardAttribute.ATTRIBUTE_EARTH:
sattr="earth";
break;
case CardAttribute.ATTRIBUTE_FIRE:
sattr="fire";
break;
case CardAttribute.ATTRIBUTE_LIGHT:
sattr="light";
break;
case CardAttribute.ATTRIBUTE_WATER:
sattr="water";
break;
case CardAttribute.ATTRIBUTE_WIND:
sattr="wind";
break;
}
return sattr;
}
}
}
......@@ -279,6 +279,7 @@ public void ExportData(string zipname)
zips.AddFile(lua,"script/c"+c.id.ToString()+".lua","");
}
}
File.Delete(cdbfile);
}
public void Run(){
......
using System;
using System.Text;
using System.IO;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using Microsoft.VisualBasic;
using System.Configuration;
namespace DataEditorX.Core
{
static class YGOUtil
{
static DataConfig datacfg;
static YGOUtil()
{
datacfg = new DataConfig();
datacfg.Init();
}
public static void SetConfig(DataConfig dcfg)
{
datacfg = dcfg;
}
public static string GetCardImagePath(string picpath,Card c)
{
string jpg = MyPath.Combine(picpath, c.id + ".jpg");
string jpg2 = MyPath.Combine(picpath, c.idString + ".jpg");
string jpg3 = MyPath.Combine(picpath, c.name + ".jpg");
string png = MyPath.Combine(picpath, c.id + ".png");
string png2 = MyPath.Combine(picpath, c.idString + ".png");
string png3 = MyPath.Combine(picpath, c.name + ".png");
if (File.Exists(jpg))
{
return jpg;
}
else if (File.Exists(jpg2))
{
return jpg2;
}
else if (File.Exists(jpg3))
{
File.Copy(jpg3, jpg, true);
if (File.Exists(jpg))
{//复制失败
return jpg;
}
}
else if (File.Exists(png))
{
return png;
}
else if (File.Exists(png2))
{
return png2;
}
else if (File.Exists(png3))
{
File.Copy(png3, png, true);
if (File.Exists(png))
{//复制失败
return png;
}
}
return "";
}
public static string GetStar(long level)
{
long j = level & 0xff;
string star = "";
for (int i = 0; i < j; i++)
{
star += "*";
}
return star;
}
public static string GetAttributeString(int attr)
{
return DataManager.GetValue(datacfg.dicCardAttributes, attr);
}
public static string GetAttribute(int attr)
{
CardAttribute cattr = (CardAttribute)attr;
string sattr = "none";
switch (cattr)
{
case CardAttribute.ATTRIBUTE_DARK:
sattr = "dark";
break;
case CardAttribute.ATTRIBUTE_DEVINE:
sattr = "divine";
break;
case CardAttribute.ATTRIBUTE_EARTH:
sattr = "earth";
break;
case CardAttribute.ATTRIBUTE_FIRE:
sattr = "fire";
break;
case CardAttribute.ATTRIBUTE_LIGHT:
sattr = "light";
break;
case CardAttribute.ATTRIBUTE_WATER:
sattr = "water";
break;
case CardAttribute.ATTRIBUTE_WIND:
sattr = "wind";
break;
}
return sattr;
}
public static string GetRace(long race)
{
return DataManager.GetValue(datacfg.dicCardRaces, race);
}
public static string[] GetTypes(Card c)
{
string[] types = new string[] { "normal monster", "", "", "" };
if (c.IsType(CardType.TYPE_MONSTER))
{//卡片类型和第1效果
if (c.IsType(CardType.TYPE_XYZ))
{
types[0] = "xyz monster";
types[1] = GetType(CardType.TYPE_XYZ);
}
else if (c.IsType(CardType.TYPE_TOKEN))
{
if (c.race == 0)
types[0] = "token card";
else
types[0] = "token monster";
types[1] = GetType(CardType.TYPE_TOKEN);
}
else if (c.IsType(CardType.TYPE_RITUAL))
{
types[0] = "ritual monster";
types[1] = GetType(CardType.TYPE_RITUAL);
}
else if (c.IsType(CardType.TYPE_FUSION))
{
types[0] = "fusion monster";
types[1] = GetType(CardType.TYPE_FUSION);
}
else if (c.IsType(CardType.TYPE_SYNCHRO))
{
types[0] = "synchro monster";
types[1] = GetType(CardType.TYPE_SYNCHRO);
}
else if (c.IsType(CardType.TYPE_EFFECT))
{
types[0] = "effect monster";
}
else
types[0] = "normal monster";
//同调
if (types[0] == "synchro monster" || types[0] == "token monster")
{
if (c.IsType(CardType.TYPE_TUNER)
&& c.IsType(CardType.TYPE_EFFECT))
{//调整效果
types[2] = GetType(CardType.TYPE_TUNER);
types[3] = GetType(CardType.TYPE_EFFECT);
}
else if (c.IsType(CardType.TYPE_TUNER))
{
types[2] = GetType(CardType.TYPE_TUNER);
}
else if (c.IsType(CardType.TYPE_EFFECT))
{
types[2] = GetType(CardType.TYPE_EFFECT);
}
}
else if (types[0] == "normal monster")
{
if (c.IsType(CardType.TYPE_PENDULUM))//灵摆
types[1] = GetType(CardType.TYPE_PENDULUM);
else if (c.IsType(CardType.TYPE_TUNER))//调整
types[1] = GetType(CardType.TYPE_TUNER);
}
else if (types[0] != "effect monster")
{//效果
if (c.IsType(CardType.TYPE_EFFECT))
types[2] = GetType(CardType.TYPE_EFFECT);
}
else
{//效果怪兽
types[2] = GetType(CardType.TYPE_EFFECT);
if (c.IsType(CardType.TYPE_PENDULUM))
types[1] = GetType(CardType.TYPE_PENDULUM);
else if (c.IsType(CardType.TYPE_TUNER))
types[1] = GetType(CardType.TYPE_TUNER);
else if (c.IsType(CardType.TYPE_SPIRIT))
types[1] = GetType(CardType.TYPE_SPIRIT);
else if (c.IsType(CardType.TYPE_TOON))
types[1] = GetType(CardType.TYPE_TOON);
else if (c.IsType(CardType.TYPE_UNION))
types[1] = GetType(CardType.TYPE_UNION);
else if (c.IsType(CardType.TYPE_DUAL))
types[1] = GetType(CardType.TYPE_DUAL);
else if (c.IsType(CardType.TYPE_FLIP))
types[1] = GetType(CardType.TYPE_FLIP);
else
{
types[1] = GetType(CardType.TYPE_EFFECT);
types[2] = "";
}
}
}
if (c.race == 0)
{
types[0] = "";
types[1] = "";
types[2] = "";
}
return types;
}
public static string GetCardType(Card c)
{
string str = "???";
if (c.IsType(CardType.TYPE_MONSTER))
{//卡片类型和第1效果
if (c.IsType(CardType.TYPE_XYZ))
{
str = GetType(CardType.TYPE_XYZ);
}
else if (c.IsType(CardType.TYPE_TOKEN))
{
str = GetType(CardType.TYPE_TOKEN);
}
else if (c.IsType(CardType.TYPE_RITUAL))
{
str = GetType(CardType.TYPE_RITUAL);
}
else if (c.IsType(CardType.TYPE_FUSION))
{
str = GetType(CardType.TYPE_FUSION);
}
else if (c.IsType(CardType.TYPE_SYNCHRO))
{
str = GetType(CardType.TYPE_SYNCHRO);
}
else if (c.IsType(CardType.TYPE_EFFECT))
{
str = GetType(CardType.TYPE_EFFECT);
}
else
str = GetType(CardType.TYPE_NORMAL);
str += GetType(CardType.TYPE_MONSTER);
}
else if (c.IsType(CardType.TYPE_SPELL))
{
if (c.IsType(CardType.TYPE_EQUIP))
str = GetType(CardType.TYPE_EQUIP);
else if (c.IsType(CardType.TYPE_QUICKPLAY))
str = GetType(CardType.TYPE_QUICKPLAY);
else if (c.IsType(CardType.TYPE_FIELD))
str = GetType(CardType.TYPE_FIELD);
else if (c.IsType(CardType.TYPE_CONTINUOUS))
str = GetType(CardType.TYPE_CONTINUOUS);
else if (c.IsType(CardType.TYPE_RITUAL))
str = GetType(CardType.TYPE_RITUAL);
else
str = GetType(CardType.TYPE_NORMAL);
str += GetType(CardType.TYPE_SPELL);
}
else if (c.IsType(CardType.TYPE_TRAP))
{
if (c.IsType(CardType.TYPE_CONTINUOUS))
str = GetType(CardType.TYPE_CONTINUOUS);
else if (c.IsType(CardType.TYPE_COUNTER))
str = GetType(CardType.TYPE_COUNTER);
else
str = GetType(CardType.TYPE_NORMAL);
str += GetType(CardType.TYPE_TRAP);
}
return str;
}
static string GetType(CardType type)
{
return DataManager.GetValue(datacfg.dicCardTypes, (long)type);
}
public static string GetDesc(string desc, string regx)
{
desc = desc.Replace(Environment.NewLine, "\n");
Regex regex = new Regex(regx);
Match mc = regex.Match(desc);
if (mc.Success)
return (mc.Groups.Count > 1) ?
mc.Groups[1].Value : mc.Groups[0].Value;
return "";
}
#region 根据文件读取数据库
/// <summary>
/// 读取ydk文件为密码数组
/// </summary>
/// <param name="file">ydk文件</param>
/// <returns>密码数组</returns>
public static string[] ReadYDK(string ydkfile)
{
string str;
List<string> IDs = new List<string>();
if (File.Exists(ydkfile))
{
using (FileStream f = new FileStream(ydkfile, FileMode.Open, FileAccess.Read))
{
StreamReader sr = new StreamReader(f, Encoding.Default);
str = sr.ReadLine();
while (str != null)
{
if (!str.StartsWith("!") && !str.StartsWith("#") && str.Length > 0)
{
if (IDs.IndexOf(str) < 0)
IDs.Add(str);
}
str = sr.ReadLine();
}
sr.Close();
f.Close();
}
}
if (IDs.Count == 0)
return null;
return IDs.ToArray();
}
#endregion
#region 图像
public static string[] ReadImage(string path)
{
List<string> list = new List<string>();
string[] files = Directory.GetFiles(path, "*.*");
int n = files.Length;
for (int i = 0; i < n; i++)
{
string ex = Path.GetExtension(files[i]).ToLower();
if (ex == ".jpg" || ex == ".png" || ex == ".bmp")
list.Add(Path.GetFileNameWithoutExtension(files[i]));
}
return list.ToArray();
}
#endregion
}
}
......@@ -25,15 +25,13 @@ public partial class DataEditForm : DockContent
#region 成员变量
TaskHelper tasker=null;
string taskname;
string ydkfile=null;
string imagepath=null;
string GAMEPATH,PICPATH,PICPATH2,LUAPTH;
string GAMEPATH="",PICPATH="",PICPATH2="",LUAPTH="";
/// <summary>当前卡片</summary>
Card oldCard=new Card(0);
/// <summary>搜索条件</summary>
Card srcCard=new Card(0);
string[] strs=null;
Dictionary<long,Card> complist;
List<long> tmpCodes;
string title;
string nowCdbFile="";
int MaxRow=20;
......@@ -41,10 +39,7 @@ public partial class DataEditForm : DockContent
int cardcount;
string undoString;
List<Card> cardlist=new List<Card>();
bool setcodeIsedit1;
bool setcodeIsedit2;
bool setcodeIsedit3;
bool setcodeIsedit4;
bool[] setcodeIsedit = new bool[5];
Image m_cover;
DataConfig datacfg;
......@@ -80,26 +75,20 @@ public DataEditForm()
void Initialize()
{
datacfg=null;
complist=new Dictionary<long, Card>();
tmpCodes = new List<long>();
InitializeComponent();
title=this.Text;
nowCdbFile="";
}
#endregion
#region 界面初始化
//窗体第一次加载
#region 窗体
//窗体第一次加载
void DataEditFormLoad(object sender, EventArgs e)
{
InitListRows();
//界面初始化
HideMenu();
#if DEBUG
title=title+"(DEBUG)";
#endif
HideMenu();//是否需要隐藏菜单
SetTitle();
if(datacfg==null){
......@@ -109,15 +98,13 @@ void DataEditFormLoad(object sender, EventArgs e)
tasker=new TaskHelper(datapath, bgWorker1,
datacfg.dicCardTypes,
datacfg.dicCardRaces);
SetCDB(nowCdbFile);
//设置空白卡片
oldCard=new Card(0);
SetCard(oldCard);
if(File.Exists(nowCdbFile))
Open(nowCdbFile);
//checkupdate(false);
//checkupdate(false);//检查更新
}
//窗体关闭
void DataEditFormFormClosing(object sender, FormClosingEventArgs e)
......@@ -132,10 +119,15 @@ void DataEditFormFormClosing(object sender, FormClosingEventArgs e)
}
}
void DataEditFormEnter(object sender, EventArgs e)
//窗体激活
void DataEditFormEnter(object sender, EventArgs e)
{
SetTitle();
}
#endregion
#region 初始化设置
//隐藏菜单
void HideMenu()
{
if(this.MdiParent ==null)
......@@ -155,7 +147,7 @@ void HideMenu()
this.ResumeLayout(false);
//this.PerformLayout();
}
//移除Tag
string RemoveTag(string text)
{
int t=text.LastIndexOf(" (");
......@@ -165,7 +157,8 @@ string RemoveTag(string text)
}
return text;
}
void SetTitle()
//设置标题
void SetTitle()
{
string str=title;
string str2=RemoveTag(title);
......@@ -213,8 +206,7 @@ void InitPath(string datapath)
m_cover=Image.FromFile(confcover);
else
m_cover=null;
}
}
//保存dic
void SaveDic(string file, Dictionary<long, string> dic)
{
......@@ -228,16 +220,19 @@ void SaveDic(string file, Dictionary<long, string> dic)
sw.Close();
fs.Close();
}
}
}
//初始化游戏数据
public void InitGameData(DataConfig dataconfig)
{
//初始化
this.datacfg=dataconfig.Clone();
this.datacfg = dataconfig;
InitControl();
}
void InitControl()
#endregion
#region 界面控件
//初始化控件
void InitControl()
{
InitComboBox(cb_cardrace, datacfg.dicCardRaces);
InitComboBox(cb_cardattribute, datacfg.dicCardAttributes);
......@@ -255,7 +250,6 @@ void InitControl()
cb_setname4.Items.AddRange(setnames);
//
}
//初始化FlowLayoutPanel
void InitCheckPanel(FlowLayoutPanel fpanel, Dictionary<long, string> dic)
{
......@@ -274,13 +268,11 @@ void InitCheckPanel(FlowLayoutPanel fpanel, Dictionary<long, string> dic)
fpanel.ResumeLayout(false);
fpanel.PerformLayout();
}
//FlowLayoutPanel点击CheckBox
void PanelOnCheckClick(object sender, EventArgs e)
{
}
//初始化ComboBox
void InitComboBox(ComboBox cb, Dictionary<long, string> tempdic)
{
......@@ -288,7 +280,6 @@ void InitComboBox(ComboBox cb, Dictionary<long, string> tempdic)
cb.Items.AddRange(DataManager.GetValues(tempdic));
cb.SelectedIndex=0;
}
//计算list最大行数
void InitListRows()
{
......@@ -310,8 +301,149 @@ void InitListRows()
if ( MaxRow<10 )
MaxRow=20;
}
#endregion
//设置checkbox
string SetCheck(FlowLayoutPanel fpl, long number)
{
long temp;
string strType = "";
foreach (Control c in fpl.Controls)
{
if (c is CheckBox)
{
CheckBox cbox = (CheckBox)c;
long.TryParse(cbox.Name.Substring(fpl.Name.Length), out temp);
if ((temp & number) == temp && temp != 0)
{
cbox.Checked = true;
strType += "/" + c.Text;
}
else
cbox.Checked = false;
}
}
return strType;
}
//设置combobox
int SetSelect(Dictionary<long, string> dic, ComboBox cb, long k)
{
int index = 0;
if (k == 0)
{
cb.SelectedIndex = 0;
return index;
}
foreach (long key in dic.Keys)
{
if (k == key)
break;
index++;
}
if (index == cb.Items.Count)
{
string word = k.ToString("x");
if (!dic.ContainsKey(k))
dic.Add(k, word);
if (cb.Name == cb_setname1.Name
|| cb.Name == cb_setname2.Name
|| cb.Name == cb_setname3.Name
|| cb.Name == cb_setname4.Name)
{
cb_setname1.Items.Add(word);
cb_setname2.Items.Add(word);
cb_setname3.Items.Add(word);
cb_setname4.Items.Add(word);
}
else
cb.Items.Add(word);
}
cb.SelectedIndex = index;
return index;
}
//得到所选值16进制
string GetSelectHex(Dictionary<long, string> dic, ComboBox cb)
{
long temp;
long.TryParse(GetSelect(dic, cb), out temp);
return temp.ToString("x");
}
//得到所选值
string GetSelect(Dictionary<long, string> dic, ComboBox cb)
{
long fkey = 0;
bool isfind = false;
foreach (long key in dic.Keys)
{
if (cb.Text == dic[key])
{
fkey = key;
isfind = true;
break;
}
}
if (!isfind)
{
long.TryParse(cb.Text, NumberStyles.HexNumber, null, out fkey);
}
return fkey.ToString();
}
//得到checkbox的总值
long GetCheck(FlowLayoutPanel fpl)
{
long number = 0;
long temp;
foreach (Control c in fpl.Controls)
{
if (c is CheckBox)
{
CheckBox cbox = (CheckBox)c;
long.TryParse(cbox.Name.Substring(fpl.Name.Length), out temp);
if (cbox.Checked)
number += temp;
}
}
return number;
}
//添加列表行
void AddListView(int p)
{
int i, j, istart, iend;
if (p <= 0)
p = 1;
else if (p >= pageNum)
p = pageNum;
istart = (p - 1) * MaxRow;
iend = p * MaxRow;
if (iend > cardcount)
iend = cardcount;
page = p;
lv_cardlist.BeginUpdate();
lv_cardlist.Items.Clear();
if ((iend - istart) > 0)
{
ListViewItem[] items = new ListViewItem[iend - istart];
Card mcard;
for (i = istart, j = 0; i < iend; i++, j++)
{
mcard = cardlist[i];
items[j] = new ListViewItem();
items[j].Text = mcard.id.ToString();
if (mcard.id == oldCard.id)
items[j].Checked = true;
if (i % 2 == 0)
items[j].BackColor = Color.GhostWhite;
else
items[j].BackColor = Color.White;
items[j].SubItems.Add(mcard.name);
}
lv_cardlist.Items.AddRange(items);
}
lv_cardlist.EndUpdate();
tb_page.Text = page.ToString();
}
#endregion
#region 设置卡片
void SetCard(Card c)
......@@ -325,12 +457,12 @@ void SetCard(Card c)
lb_scripttext.Items.Clear();
lb_scripttext.Items.AddRange(c.str);
tb_edittext.Text="";
//data
SetSelect(datacfg.dicCardRules,cb_cardrule,(long)c.ot);
SetSelect(datacfg.dicCardAttributes,cb_cardattribute,(long)c.attribute);
SetSelect(datacfg.dicCardLevels,cb_cardlevel,(long)(c.level&0xff));
SetSelect(datacfg.dicCardRaces,cb_cardrace,c.race);
//setcode
long sc1=c.setcode&0xffff;
long sc2=(c.setcode>>0x10)&0xffff;
long sc3=(c.setcode>>0x20)&0xffff;
......@@ -343,10 +475,10 @@ void SetCard(Card c)
SetSelect(datacfg.dicSetnames, cb_setname2, sc2);
SetSelect(datacfg.dicSetnames, cb_setname3, sc3);
SetSelect(datacfg.dicSetnames, cb_setname4, sc4);
//type,category
SetCheck(pl_cardtype,c.type);
SetCheck(pl_category,c.category);
//text
tb_pleft.Text=((c.level >> 0x18) & 0xff).ToString();
tb_pright.Text=((c.level >> 0x10) & 0xff).ToString();
tb_atk.Text=(c.atk<0)?"?":c.atk.ToString();
......@@ -354,69 +486,7 @@ void SetCard(Card c)
tb_cardcode.Text=c.id.ToString();
tb_cardalias.Text=c.alias.ToString();
setImage(c.id.ToString());
}
//设置checkbox
string SetCheck(FlowLayoutPanel fpl,long number)
{
long temp;
string strType="";
foreach(Control c in fpl.Controls)
{
if(c is CheckBox)
{
CheckBox cbox=(CheckBox)c;
long.TryParse(cbox.Name.Substring(fpl.Name.Length), out temp);
if((temp & number)==temp && temp!=0)
{
cbox.Checked=true;
strType+="/"+c.Text;
}
else
cbox.Checked=false;
}
}
return strType;
}
//设置combobox
int SetSelect(Dictionary<long, string> dic,ComboBox cb, long k)
{
int index=0;
if(k==0)
{
cb.SelectedIndex=0;
return index;
}
foreach(long key in dic.Keys)
{
if(k==key)
break;
index++;
}
if(index==cb.Items.Count)
{
string word=k.ToString("x");
if(!dic.ContainsKey(k))
dic.Add(k, word);
if(cb.Name==cb_setname1.Name
||cb.Name==cb_setname2.Name
||cb.Name==cb_setname3.Name
||cb.Name==cb_setname4.Name)
{
cb_setname1.Items.Add(word);
cb_setname2.Items.Add(word);
cb_setname3.Items.Add(word);
cb_setname4.Items.Add(word);
}
else
cb.Items.Add(word);
}
cb.SelectedIndex=index;
return index;
}
}
#endregion
#region 获取卡片
......@@ -432,7 +502,7 @@ Card GetCard()
int.TryParse(GetSelect(datacfg.dicCardAttributes,cb_cardattribute),out c.attribute);
long.TryParse(GetSelect(datacfg.dicCardLevels,cb_cardlevel),out c.level);
long.TryParse(GetSelect(datacfg.dicCardRaces,cb_cardrace),out c.race);
//setcode
int.TryParse(tb_setcode1.Text, NumberStyles.HexNumber,null,out temp);
c.setcode =temp;
int.TryParse(tb_setcode2.Text, NumberStyles.HexNumber,null,out temp);
......@@ -467,54 +537,10 @@ Card GetCard()
return c;
}
//得到所选值
string GetSelectHex(Dictionary<long, string> dic,ComboBox cb)
{
long temp;
long.TryParse(GetSelect(dic,cb),out temp);
return temp.ToString("x");
}
string GetSelect(Dictionary<long, string> dic,ComboBox cb)
{
long fkey=0;
bool isfind=false;
foreach(long key in dic.Keys)
{
if(cb.Text==dic[key])
{
fkey=key;
isfind=true;
break;
}
}
if(!isfind)
{
long.TryParse(cb.Text, NumberStyles.HexNumber, null, out fkey);
}
return fkey.ToString();
}
//得到checkbox的总值
long GetCheck(FlowLayoutPanel fpl)
{
long number=0;
long temp;
foreach(Control c in fpl.Controls)
{
if(c is CheckBox)
{
CheckBox cbox=(CheckBox)c;
long.TryParse(cbox.Name.Substring(fpl.Name.Length), out temp);
if(cbox.Checked)
number+=temp;
}
}
return number;
}
#endregion
#region 卡片列表
//列表选择
void Lv_cardlistSelectedIndexChanged(object sender, EventArgs e)
{
if(lv_cardlist.SelectedItems.Count>0)
......@@ -527,48 +553,7 @@ void Lv_cardlistSelectedIndexChanged(object sender, EventArgs e)
SetCard(c);
}
}
}
//添加行
void AddListView(int p)
{
int i,j,istart,iend;
if(p<=0)
p=1;
else if(p>=pageNum)
p=pageNum;
istart=(p-1)*MaxRow;
iend=p*MaxRow;
if(iend>cardcount)
iend=cardcount;
page=p;
lv_cardlist.BeginUpdate();
lv_cardlist.Items.Clear();
if((iend-istart)>0)
{
ListViewItem[] items=new ListViewItem[iend-istart];
Card mcard;
for(i=istart,j=0;i < iend;i++,j++)
{
mcard=cardlist[i];
items[j]=new ListViewItem();
items[j].Text=mcard.id.ToString();
if(mcard.id==oldCard.id)
items[j].Checked=true;
if ( i % 2 == 0 )
items[j].BackColor = Color.GhostWhite;
else
items[j].BackColor = Color.White;
items[j].SubItems.Add(mcard.name);
}
lv_cardlist.Items.AddRange(items);
}
lv_cardlist.EndUpdate();
tb_page.Text=page.ToString();
}
}
//列表按键
void Lv_cardlistKeyDown(object sender, KeyEventArgs e)
{
......@@ -579,7 +564,6 @@ void Lv_cardlistKeyDown(object sender, KeyEventArgs e)
case Keys.Left:Btn_PageUpClick(null,null);break;
}
}
//上一页
void Btn_PageUpClick(object sender, EventArgs e)
{
......@@ -587,8 +571,7 @@ void Btn_PageUpClick(object sender, EventArgs e)
return;
page--;
AddListView(page);
}
}
//下一页
void Btn_PageDownClick(object sender, EventArgs e)
{
......@@ -596,8 +579,7 @@ void Btn_PageDownClick(object sender, EventArgs e)
return;
page++;
AddListView(page);
}
}
//跳转到指定页数
void Tb_pageKeyPress(object sender, KeyPressEventArgs e)
{
......@@ -625,27 +607,26 @@ public bool Check()
return false;
}
}
//打开数据库
public bool Open(string cdbFile)
{
SetCDB(cdbFile);
if(!File.Exists(cdbFile))
{
MyMsg.Error(LMSG.FileIsNotExists);
return false;
}
ydkfile=null;
imagepath=null;
complist=null;
SetCDB(cdbFile);
//清空
tmpCodes.Clear();
cardlist.Clear();
//检查表是否存在
DataBase.CheckTable(cdbFile);
srcCard=new Card();
SetCards(DataBase.Read(cdbFile,true,""),false);
return true;
}
//设置卡片组
public void SetCards(Card[] cards, bool isfresh)
{
if(cards!=null)
......@@ -682,17 +663,15 @@ public void SetCards(Card[] cards, bool isfresh)
SetCard(new Card(0));
}
}
//搜索卡片
public void Search(Card c, bool isfresh)
{
if(!Check())
return;
if(!string.IsNullOrEmpty(ydkfile))
SetCards(DataBase.ReadYdk(nowCdbFile, ydkfile), false);
else if(!string.IsNullOrEmpty(imagepath))
SetCards(DataBase.ReadImage(nowCdbFile, imagepath), false);
else if(complist !=null){
UpdateCompCards();
if (tmpCodes.Count>0)
{
Card[] mcards = DataBase.Read(nowCdbFile,
true, tmpCodes.ToArray());
SetCards(getCompCards(), false);
}
else{
......@@ -704,28 +683,12 @@ public void Search(Card c, bool isfresh)
SetCards(DataBase.Read(nowCdbFile, true, sql),isfresh);
}
}
void UpdateCompCards()
{
Card[] mcards=DataBase.Read(nowCdbFile,true,"");
if(mcards==null){
complist.Clear();
return;
}
foreach(Card c in mcards)
{
if(complist.ContainsKey(c.id))
complist[c.id]=c;
}
}
//更新临时卡片
public void Reset()
{
oldCard=new Card(0);
SetCard(oldCard);
}
}
#endregion
#region 卡片编辑
......@@ -886,9 +849,7 @@ public void Undo()
//搜索卡片
void Btn_serachClick(object sender, EventArgs e)
{
ydkfile=null;
imagepath=null;
complist=null;
tmpCodes.Clear();
Search(GetCard(), false);
}
//重置卡片
......@@ -948,9 +909,7 @@ void Tb_cardcodeKeyPress(object sender, KeyPressEventArgs e)
long.TryParse(tb_cardcode.Text, out c.id);
if(c.id>0)
{
ydkfile=null;
imagepath=null;
complist=null;
tmpCodes.Clear();
Search(c, false);
}
}
......@@ -963,9 +922,7 @@ void Tb_cardnameKeyDown(object sender, KeyEventArgs e)
Card c=new Card(0);
c.name=tb_cardname.Text;
if(c.name.Length>0){
ydkfile=null;
imagepath=null;
complist=null;
tmpCodes.Clear();
Search(c, false);
}
}
......@@ -1105,8 +1062,8 @@ void Menuitem_readydkClick(object sender, EventArgs e)
dlg.Filter=LANG.GetMsg(LMSG.ydkType);
if(dlg.ShowDialog()==DialogResult.OK)
{
ydkfile=dlg.FileName;
SetCards(DataBase.ReadYdk(nowCdbFile, ydkfile), false);
SetCards(DataBase.Read(nowCdbFile, true,
YGOUtil.ReadYDK(dlg.FileName)), false);
}
}
}
......@@ -1120,8 +1077,8 @@ void Menuitem_readimagesClick(object sender, EventArgs e)
fdlg.Description= LANG.GetMsg(LMSG.SelectImagePath);
if(fdlg.ShowDialog()==DialogResult.OK)
{
imagepath=fdlg.SelectedPath;
SetCards(DataBase.ReadImage(nowCdbFile, imagepath), false);
SetCards(DataBase.Read(nowCdbFile, true,
YGOUtil.ReadImage(fdlg.SelectedPath)), false);
}
}
}
......@@ -1206,82 +1163,82 @@ void BgWorker1RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerC
#region setcode
void Cb_setname2SelectedIndexChanged(object sender, EventArgs e)
{
if(setcodeIsedit2)
if(setcodeIsedit[2])
return;
setcodeIsedit2=true;
setcodeIsedit[2]=true;
tb_setcode2.Text=GetSelectHex(datacfg.dicSetnames, cb_setname2);
setcodeIsedit2=false;
setcodeIsedit[2]=false;
}
void Cb_setname1SelectedIndexChanged(object sender, EventArgs e)
{
if(setcodeIsedit1)
if(setcodeIsedit[1])
return;
setcodeIsedit1=true;
setcodeIsedit[1]=true;
tb_setcode1.Text=GetSelectHex(datacfg.dicSetnames, cb_setname1);
setcodeIsedit1=false;
setcodeIsedit[1]=false;
}
void Cb_setname3SelectedIndexChanged(object sender, EventArgs e)
{
if(setcodeIsedit3)
if(setcodeIsedit[3])
return;
setcodeIsedit3=true;
setcodeIsedit[3]=true;
tb_setcode3.Text=GetSelectHex(datacfg.dicSetnames, cb_setname3);
setcodeIsedit3=false;
setcodeIsedit[3]=false;
}
void Cb_setname4SelectedIndexChanged(object sender, EventArgs e)
{
if(setcodeIsedit4)
if(setcodeIsedit[4])
return;
setcodeIsedit4=true;
setcodeIsedit[4]=true;
tb_setcode4.Text=GetSelectHex(datacfg.dicSetnames, cb_setname4);
setcodeIsedit4=false;
setcodeIsedit[4]=false;
}
void Tb_setcode4TextChanged(object sender, EventArgs e)
{
if(setcodeIsedit4)
if(setcodeIsedit[4])
return;
setcodeIsedit4=true;
setcodeIsedit[4]=true;
long temp;
long.TryParse(tb_setcode4.Text,NumberStyles.HexNumber, null ,out temp);
SetSelect(datacfg.dicSetnames, cb_setname4, temp);
setcodeIsedit4=false;
setcodeIsedit[4]=false;
}
void Tb_setcode3TextChanged(object sender, EventArgs e)
{
if(setcodeIsedit3)
if(setcodeIsedit[3])
return;
setcodeIsedit3=true;
setcodeIsedit[3]=true;
long temp;
long.TryParse(tb_setcode3.Text,NumberStyles.HexNumber, null ,out temp);
SetSelect(datacfg.dicSetnames, cb_setname3, temp);
setcodeIsedit3=false;
setcodeIsedit[3]=false;
}
void Tb_setcode2TextChanged(object sender, EventArgs e)
{
if(setcodeIsedit2)
if(setcodeIsedit[2])
return;
setcodeIsedit2=true;
setcodeIsedit[2]=true;
long temp;
long.TryParse(tb_setcode2.Text,NumberStyles.HexNumber, null ,out temp);
SetSelect(datacfg.dicSetnames, cb_setname2, temp);
setcodeIsedit2=false;
setcodeIsedit[2]=false;
}
void Tb_setcode1TextChanged(object sender, EventArgs e)
{
if(setcodeIsedit1)
if(setcodeIsedit[1])
return;
setcodeIsedit1=true;
setcodeIsedit[1]=true;
long temp;
long.TryParse(tb_setcode1.Text,NumberStyles.HexNumber, null ,out temp);
SetSelect(datacfg.dicSetnames, cb_setname1, temp);
setcodeIsedit1=false;
setcodeIsedit[1]=false;
}
#endregion
......@@ -1430,8 +1387,12 @@ void Menuitem_importmseimgClick(object sender, EventArgs e)
void ImportImage(string file,string tid)
{
string f;
pl_image.BackgroundImage.Dispose();
pl_image.BackgroundImage=m_cover;
if (pl_image.BackgroundImage != null
&& pl_image.BackgroundImage != m_cover)
{
pl_image.BackgroundImage.Dispose();
pl_image.BackgroundImage = m_cover;
}
if(menuitem_importmseimg.Checked){
if(!Directory.Exists(tasker.MSEImage))
Directory.CreateDirectory(tasker.MSEImage);
......@@ -1546,35 +1507,33 @@ bool CheckCard(Card[] cards,Card card,bool checkinfo)
}
Card[] getCompCards()
{
if(complist.Count==0)
if (tmpCodes.Count == 0)
return null;
Card[] tmps=new Card[complist.Count];
complist.Values.CopyTo(tmps,0);
return tmps;
if (!Check())
return null;
return DataBase.Read(nowCdbFile, true, tmpCodes.ToArray());
}
public void CompareCards(string cdbfile,bool checktext)
{
if(!Check())
return;
ydkfile=null;
imagepath=null;
tmpCodes.Clear();
srcCard=new Card();
Card[] mcards=DataBase.Read(nowCdbFile,true,"");
Card[] cards=DataBase.Read(cdbfile,true,"");
complist =new Dictionary<long, Card>();
foreach(Card card in mcards)
{
if(!CheckCard(cards, card, checktext))
complist.Add(card.id, card);
if (!CheckCard(cards, card, checktext))
tmpCodes.Add(card.id);
}
if(complist.Count==0){
if (tmpCodes.Count == 0)
{
SetCards(null, false);
return;
}
SetCards(getCompCards(), false);
}
#endregion
}
}
......@@ -61,13 +61,19 @@
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="CodeEditForm.cs" />
<Compile Include="CodeEditForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="CodeEditForm.Designer.cs">
<DependentUpon>CodeEditForm.cs</DependentUpon>
</Compile>
<Compile Include="Common\CheckUpdate.cs" />
<Compile Include="Common\DoubleContorl.cs" />
<Compile Include="Common\FastColoredTextBoxEx.cs" />
<Compile Include="Common\DoubleContorl.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Common\FastColoredTextBoxEx.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Common\MyPath.cs" />
<Compile Include="Common\MySyntaxHighlighter.cs" />
<Compile Include="Common\MyBitmap.cs" />
......@@ -77,6 +83,7 @@
<Compile Include="Core\CardAttribute.cs" />
<Compile Include="Core\CardRace.cs" />
<Compile Include="Core\CardType.cs" />
<Compile Include="Core\CodeConfig.cs" />
<Compile Include="Core\DataBase.cs" />
<Compile Include="Core\DataConfig.cs" />
<Compile Include="Core\DataManager.cs" />
......@@ -84,16 +91,20 @@
<Compile Include="Core\LuaFunction.cs" />
<Compile Include="Core\MSE.cs" />
<Compile Include="Core\MSEConfig.cs" />
<Compile Include="Core\MSEConvert.cs" />
<Compile Include="Core\TaskHelper.cs" />
<Compile Include="DataEditForm.cs" />
<Compile Include="Core\YGOUtil.cs" />
<Compile Include="DataEditForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="DataEditForm.Designer.cs">
<DependentUpon>DataEditForm.cs</DependentUpon>
</Compile>
<Compile Include="Language\LanguageHelper.cs" />
<Compile Include="Language\LMsg.cs" />
<Compile Include="Language\MyMsg.cs" />
<Compile Include="MainForm.cs" />
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
......@@ -111,15 +122,7 @@
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Folder Include="chinese" />
<Folder Include="Core" />
<Folder Include="english" />
<Folder Include="Common" />
<Folder Include="Language" />
<Folder Include="Magic Set Editor 2" />
<Folder Include="Magic Set Editor 2\update" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<None Include="app.config">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
......
......@@ -35,314 +35,317 @@ protected override void Dispose(bool disposing)
/// </summary>
private void InitializeComponent()
{
WeifenLuo.WinFormsUI.Docking.DockPanelSkin dockPanelSkin1 = new WeifenLuo.WinFormsUI.Docking.DockPanelSkin();
WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin autoHideStripSkin1 = new WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin();
WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient1 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin dockPaneStripSkin1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin();
WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient dockPaneStripGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient2 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient2 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient3 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient dockPaneStripToolWindowGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient4 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient5 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient3 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient6 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient7 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
this.dockPanel1 = new WeifenLuo.WinFormsUI.Docking.DockPanel();
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.menuitem_file = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_open = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_new = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_save = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_findluafunc = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.menuitem_copyselect = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_copyall = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_pastecards = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
this.menuitem_comp1 = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_comp2 = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.menuitem_history = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
this.menuitem_quit = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_windows = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_dataeditor = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_codeeditor = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.menuitem_close = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_closeother = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_closeall = new System.Windows.Forms.ToolStripMenuItem();
this.menuStrip1.SuspendLayout();
this.SuspendLayout();
//
// dockPanel1
//
this.dockPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.dockPanel1.Location = new System.Drawing.Point(0, 25);
this.dockPanel1.Margin = new System.Windows.Forms.Padding(0);
this.dockPanel1.Name = "dockPanel1";
this.dockPanel1.Size = new System.Drawing.Size(868, 572);
dockPanelGradient1.EndColor = System.Drawing.SystemColors.ControlLight;
dockPanelGradient1.StartColor = System.Drawing.SystemColors.ControlLight;
autoHideStripSkin1.DockStripGradient = dockPanelGradient1;
tabGradient1.EndColor = System.Drawing.SystemColors.Control;
tabGradient1.StartColor = System.Drawing.SystemColors.Control;
tabGradient1.TextColor = System.Drawing.SystemColors.ControlDarkDark;
autoHideStripSkin1.TabGradient = tabGradient1;
autoHideStripSkin1.TextFont = new System.Drawing.Font("微软雅黑", 9F);
dockPanelSkin1.AutoHideStripSkin = autoHideStripSkin1;
tabGradient2.EndColor = System.Drawing.SystemColors.ControlLightLight;
tabGradient2.StartColor = System.Drawing.SystemColors.ControlLightLight;
tabGradient2.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripGradient1.ActiveTabGradient = tabGradient2;
dockPanelGradient2.EndColor = System.Drawing.SystemColors.Control;
dockPanelGradient2.StartColor = System.Drawing.SystemColors.Control;
dockPaneStripGradient1.DockStripGradient = dockPanelGradient2;
tabGradient3.EndColor = System.Drawing.SystemColors.ControlLight;
tabGradient3.StartColor = System.Drawing.SystemColors.ControlLight;
tabGradient3.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripGradient1.InactiveTabGradient = tabGradient3;
dockPaneStripSkin1.DocumentGradient = dockPaneStripGradient1;
dockPaneStripSkin1.TextFont = new System.Drawing.Font("微软雅黑", 9F);
tabGradient4.EndColor = System.Drawing.SystemColors.ActiveCaption;
tabGradient4.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
tabGradient4.StartColor = System.Drawing.SystemColors.GradientActiveCaption;
tabGradient4.TextColor = System.Drawing.SystemColors.ActiveCaptionText;
dockPaneStripToolWindowGradient1.ActiveCaptionGradient = tabGradient4;
tabGradient5.EndColor = System.Drawing.SystemColors.Control;
tabGradient5.StartColor = System.Drawing.SystemColors.Control;
tabGradient5.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripToolWindowGradient1.ActiveTabGradient = tabGradient5;
dockPanelGradient3.EndColor = System.Drawing.SystemColors.ControlLight;
dockPanelGradient3.StartColor = System.Drawing.SystemColors.ControlLight;
dockPaneStripToolWindowGradient1.DockStripGradient = dockPanelGradient3;
tabGradient6.EndColor = System.Drawing.SystemColors.InactiveCaption;
tabGradient6.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
tabGradient6.StartColor = System.Drawing.SystemColors.GradientInactiveCaption;
tabGradient6.TextColor = System.Drawing.SystemColors.InactiveCaptionText;
dockPaneStripToolWindowGradient1.InactiveCaptionGradient = tabGradient6;
tabGradient7.EndColor = System.Drawing.Color.Transparent;
tabGradient7.StartColor = System.Drawing.Color.Transparent;
tabGradient7.TextColor = System.Drawing.SystemColors.ControlDarkDark;
dockPaneStripToolWindowGradient1.InactiveTabGradient = tabGradient7;
dockPaneStripSkin1.ToolWindowGradient = dockPaneStripToolWindowGradient1;
dockPanelSkin1.DockPaneStripSkin = dockPaneStripSkin1;
this.dockPanel1.Skin = dockPanelSkin1;
this.dockPanel1.TabIndex = 0;
//
// menuStrip1
//
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuitem_file,
this.menuitem_windows});
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.MdiWindowListItem = this.menuitem_windows;
this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(868, 25);
this.menuStrip1.TabIndex = 3;
this.menuStrip1.Text = "menuStrip1";
//
// menuitem_file
//
this.menuitem_file.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuitem_open,
this.menuitem_new,
this.menuitem_save,
this.menuitem_findluafunc,
this.toolStripSeparator3,
this.menuitem_copyselect,
this.menuitem_copyall,
this.menuitem_pastecards,
this.toolStripSeparator4,
this.menuitem_comp1,
this.menuitem_comp2,
this.toolStripSeparator1,
this.menuitem_history,
this.toolStripSeparator5,
this.menuitem_quit});
this.menuitem_file.Name = "menuitem_file";
this.menuitem_file.Size = new System.Drawing.Size(53, 21);
this.menuitem_file.Text = "File(&F)";
//
// menuitem_open
//
this.menuitem_open.Name = "menuitem_open";
this.menuitem_open.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
this.menuitem_open.Size = new System.Drawing.Size(261, 22);
this.menuitem_open.Text = "Open";
this.menuitem_open.Click += new System.EventHandler(this.Menuitem_openClick);
//
// menuitem_new
//
this.menuitem_new.Name = "menuitem_new";
this.menuitem_new.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N)));
this.menuitem_new.Size = new System.Drawing.Size(261, 22);
this.menuitem_new.Text = "New";
this.menuitem_new.Click += new System.EventHandler(this.Menuitem_newClick);
//
// menuitem_save
//
this.menuitem_save.Name = "menuitem_save";
this.menuitem_save.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
this.menuitem_save.Size = new System.Drawing.Size(261, 22);
this.menuitem_save.Text = "Save";
this.menuitem_save.Click += new System.EventHandler(this.Menuitem_saveClick);
//
// menuitem_findluafunc
//
this.menuitem_findluafunc.Name = "menuitem_findluafunc";
this.menuitem_findluafunc.Size = new System.Drawing.Size(261, 22);
this.menuitem_findluafunc.Text = "Find LuaFunctons";
this.menuitem_findluafunc.Click += new System.EventHandler(this.Menuitem_findluafuncClick);
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
this.toolStripSeparator3.Size = new System.Drawing.Size(258, 6);
//
// menuitem_copyselect
//
this.menuitem_copyselect.Name = "menuitem_copyselect";
this.menuitem_copyselect.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
| System.Windows.Forms.Keys.C)));
this.menuitem_copyselect.Size = new System.Drawing.Size(261, 22);
this.menuitem_copyselect.Text = "Copy Select Cards";
this.menuitem_copyselect.Click += new System.EventHandler(this.Menuitem_copyselecttoClick);
//
// menuitem_copyall
//
this.menuitem_copyall.Name = "menuitem_copyall";
this.menuitem_copyall.Size = new System.Drawing.Size(261, 22);
this.menuitem_copyall.Text = "Copy All Cards";
this.menuitem_copyall.Click += new System.EventHandler(this.Menuitem_copyallClick);
//
// menuitem_pastecards
//
this.menuitem_pastecards.Name = "menuitem_pastecards";
this.menuitem_pastecards.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
| System.Windows.Forms.Keys.V)));
this.menuitem_pastecards.Size = new System.Drawing.Size(261, 22);
this.menuitem_pastecards.Text = "Paste Cards";
this.menuitem_pastecards.Click += new System.EventHandler(this.Menuitem_pastecardsClick);
//
// toolStripSeparator4
//
this.toolStripSeparator4.Name = "toolStripSeparator4";
this.toolStripSeparator4.Size = new System.Drawing.Size(258, 6);
//
// menuitem_comp1
//
this.menuitem_comp1.Name = "menuitem_comp1";
this.menuitem_comp1.Size = new System.Drawing.Size(261, 22);
this.menuitem_comp1.Text = "Compare DB 1";
this.menuitem_comp1.Click += new System.EventHandler(this.Menuitem_comp1Click);
//
// menuitem_comp2
//
this.menuitem_comp2.Enabled = false;
this.menuitem_comp2.Name = "menuitem_comp2";
this.menuitem_comp2.Size = new System.Drawing.Size(261, 22);
this.menuitem_comp2.Text = "Compare DB 2";
this.menuitem_comp2.Click += new System.EventHandler(this.Menuitem_comp2Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(258, 6);
//
// menuitem_history
//
this.menuitem_history.Name = "menuitem_history";
this.menuitem_history.Size = new System.Drawing.Size(261, 22);
this.menuitem_history.Text = "History(&H)";
//
// toolStripSeparator5
//
this.toolStripSeparator5.Name = "toolStripSeparator5";
this.toolStripSeparator5.Size = new System.Drawing.Size(258, 6);
//
// menuitem_quit
//
this.menuitem_quit.Name = "menuitem_quit";
this.menuitem_quit.Size = new System.Drawing.Size(261, 22);
this.menuitem_quit.Text = "Quit";
this.menuitem_quit.Click += new System.EventHandler(this.QuitToolStripMenuItemClick);
//
// menuitem_windows
//
this.menuitem_windows.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuitem_dataeditor,
this.menuitem_codeeditor,
this.toolStripSeparator2,
this.menuitem_close,
this.menuitem_closeother,
this.menuitem_closeall});
this.menuitem_windows.Name = "menuitem_windows";
this.menuitem_windows.Size = new System.Drawing.Size(93, 21);
this.menuitem_windows.Text = "Windows(&W)";
//
// menuitem_dataeditor
//
this.menuitem_dataeditor.Name = "menuitem_dataeditor";
this.menuitem_dataeditor.Size = new System.Drawing.Size(157, 22);
this.menuitem_dataeditor.Text = "DataEditor";
this.menuitem_dataeditor.Click += new System.EventHandler(this.DataEditorToolStripMenuItemClick);
//
// menuitem_codeeditor
//
this.menuitem_codeeditor.Name = "menuitem_codeeditor";
this.menuitem_codeeditor.Size = new System.Drawing.Size(157, 22);
this.menuitem_codeeditor.Text = "CodeEditor";
this.menuitem_codeeditor.Click += new System.EventHandler(this.Menuitem_codeeditorClick);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(154, 6);
//
// menuitem_close
//
this.menuitem_close.Name = "menuitem_close";
this.menuitem_close.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.W)));
this.menuitem_close.Size = new System.Drawing.Size(157, 22);
this.menuitem_close.Text = "Close";
this.menuitem_close.Click += new System.EventHandler(this.CloseToolStripMenuItemClick);
//
// menuitem_closeother
//
this.menuitem_closeother.Name = "menuitem_closeother";
this.menuitem_closeother.Size = new System.Drawing.Size(157, 22);
this.menuitem_closeother.Text = "Close Other";
this.menuitem_closeother.Click += new System.EventHandler(this.CloseOtherToolStripMenuItemClick);
//
// menuitem_closeall
//
this.menuitem_closeall.Name = "menuitem_closeall";
this.menuitem_closeall.Size = new System.Drawing.Size(157, 22);
this.menuitem_closeall.Text = "Close All";
this.menuitem_closeall.Click += new System.EventHandler(this.CloseAllToolStripMenuItemClick);
//
// MainForm
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.SystemColors.Control;
this.ClientSize = new System.Drawing.Size(868, 597);
this.Controls.Add(this.dockPanel1);
this.Controls.Add(this.menuStrip1);
this.IsMdiContainer = true;
this.MainMenuStrip = this.menuStrip1;
this.Name = "MainForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "MainForm";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainFormFormClosing);
this.Load += new System.EventHandler(this.MainFormLoad);
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
WeifenLuo.WinFormsUI.Docking.DockPanelSkin dockPanelSkin1 = new WeifenLuo.WinFormsUI.Docking.DockPanelSkin();
WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin autoHideStripSkin1 = new WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin();
WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient1 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin dockPaneStripSkin1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin();
WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient dockPaneStripGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient2 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient2 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient3 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient dockPaneStripToolWindowGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient4 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient5 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient3 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient6 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient7 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.dockPanel1 = new WeifenLuo.WinFormsUI.Docking.DockPanel();
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.menuitem_file = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_open = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_new = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_save = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_findluafunc = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.menuitem_copyselect = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_copyall = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_pastecards = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
this.menuitem_comp1 = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_comp2 = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.menuitem_history = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
this.menuitem_quit = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_windows = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_dataeditor = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_codeeditor = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.menuitem_close = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_closeother = new System.Windows.Forms.ToolStripMenuItem();
this.menuitem_closeall = new System.Windows.Forms.ToolStripMenuItem();
this.menuStrip1.SuspendLayout();
this.SuspendLayout();
//
// dockPanel1
//
this.dockPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.dockPanel1.Location = new System.Drawing.Point(0, 25);
this.dockPanel1.Margin = new System.Windows.Forms.Padding(0);
this.dockPanel1.Name = "dockPanel1";
this.dockPanel1.Size = new System.Drawing.Size(868, 572);
dockPanelGradient1.EndColor = System.Drawing.SystemColors.ControlLight;
dockPanelGradient1.StartColor = System.Drawing.SystemColors.ControlLight;
autoHideStripSkin1.DockStripGradient = dockPanelGradient1;
tabGradient1.EndColor = System.Drawing.SystemColors.Control;
tabGradient1.StartColor = System.Drawing.SystemColors.Control;
tabGradient1.TextColor = System.Drawing.SystemColors.ControlDarkDark;
autoHideStripSkin1.TabGradient = tabGradient1;
autoHideStripSkin1.TextFont = new System.Drawing.Font("微软雅黑", 9F);
dockPanelSkin1.AutoHideStripSkin = autoHideStripSkin1;
tabGradient2.EndColor = System.Drawing.SystemColors.ControlLightLight;
tabGradient2.StartColor = System.Drawing.SystemColors.ControlLightLight;
tabGradient2.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripGradient1.ActiveTabGradient = tabGradient2;
dockPanelGradient2.EndColor = System.Drawing.SystemColors.Control;
dockPanelGradient2.StartColor = System.Drawing.SystemColors.Control;
dockPaneStripGradient1.DockStripGradient = dockPanelGradient2;
tabGradient3.EndColor = System.Drawing.SystemColors.ControlLight;
tabGradient3.StartColor = System.Drawing.SystemColors.ControlLight;
tabGradient3.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripGradient1.InactiveTabGradient = tabGradient3;
dockPaneStripSkin1.DocumentGradient = dockPaneStripGradient1;
dockPaneStripSkin1.TextFont = new System.Drawing.Font("微软雅黑", 9F);
tabGradient4.EndColor = System.Drawing.SystemColors.ActiveCaption;
tabGradient4.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
tabGradient4.StartColor = System.Drawing.SystemColors.GradientActiveCaption;
tabGradient4.TextColor = System.Drawing.SystemColors.ActiveCaptionText;
dockPaneStripToolWindowGradient1.ActiveCaptionGradient = tabGradient4;
tabGradient5.EndColor = System.Drawing.SystemColors.Control;
tabGradient5.StartColor = System.Drawing.SystemColors.Control;
tabGradient5.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripToolWindowGradient1.ActiveTabGradient = tabGradient5;
dockPanelGradient3.EndColor = System.Drawing.SystemColors.ControlLight;
dockPanelGradient3.StartColor = System.Drawing.SystemColors.ControlLight;
dockPaneStripToolWindowGradient1.DockStripGradient = dockPanelGradient3;
tabGradient6.EndColor = System.Drawing.SystemColors.InactiveCaption;
tabGradient6.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
tabGradient6.StartColor = System.Drawing.SystemColors.GradientInactiveCaption;
tabGradient6.TextColor = System.Drawing.SystemColors.InactiveCaptionText;
dockPaneStripToolWindowGradient1.InactiveCaptionGradient = tabGradient6;
tabGradient7.EndColor = System.Drawing.Color.Transparent;
tabGradient7.StartColor = System.Drawing.Color.Transparent;
tabGradient7.TextColor = System.Drawing.SystemColors.ControlDarkDark;
dockPaneStripToolWindowGradient1.InactiveTabGradient = tabGradient7;
dockPaneStripSkin1.ToolWindowGradient = dockPaneStripToolWindowGradient1;
dockPanelSkin1.DockPaneStripSkin = dockPaneStripSkin1;
this.dockPanel1.Skin = dockPanelSkin1;
this.dockPanel1.TabIndex = 0;
//
// menuStrip1
//
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuitem_file,
this.menuitem_windows});
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.MdiWindowListItem = this.menuitem_windows;
this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(868, 25);
this.menuStrip1.TabIndex = 3;
this.menuStrip1.Text = "menuStrip1";
//
// menuitem_file
//
this.menuitem_file.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuitem_open,
this.menuitem_new,
this.menuitem_save,
this.menuitem_findluafunc,
this.toolStripSeparator3,
this.menuitem_copyselect,
this.menuitem_copyall,
this.menuitem_pastecards,
this.toolStripSeparator4,
this.menuitem_comp1,
this.menuitem_comp2,
this.toolStripSeparator1,
this.menuitem_history,
this.toolStripSeparator5,
this.menuitem_quit});
this.menuitem_file.Name = "menuitem_file";
this.menuitem_file.Size = new System.Drawing.Size(53, 21);
this.menuitem_file.Text = "File(&F)";
//
// menuitem_open
//
this.menuitem_open.Name = "menuitem_open";
this.menuitem_open.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
this.menuitem_open.Size = new System.Drawing.Size(261, 22);
this.menuitem_open.Text = "Open";
this.menuitem_open.Click += new System.EventHandler(this.Menuitem_openClick);
//
// menuitem_new
//
this.menuitem_new.Name = "menuitem_new";
this.menuitem_new.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N)));
this.menuitem_new.Size = new System.Drawing.Size(261, 22);
this.menuitem_new.Text = "New";
this.menuitem_new.Click += new System.EventHandler(this.Menuitem_newClick);
//
// menuitem_save
//
this.menuitem_save.Name = "menuitem_save";
this.menuitem_save.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
this.menuitem_save.Size = new System.Drawing.Size(261, 22);
this.menuitem_save.Text = "Save";
this.menuitem_save.Click += new System.EventHandler(this.Menuitem_saveClick);
//
// menuitem_findluafunc
//
this.menuitem_findluafunc.Name = "menuitem_findluafunc";
this.menuitem_findluafunc.Size = new System.Drawing.Size(261, 22);
this.menuitem_findluafunc.Text = "Find LuaFunctons";
this.menuitem_findluafunc.Click += new System.EventHandler(this.Menuitem_findluafuncClick);
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
this.toolStripSeparator3.Size = new System.Drawing.Size(258, 6);
//
// menuitem_copyselect
//
this.menuitem_copyselect.Name = "menuitem_copyselect";
this.menuitem_copyselect.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
| System.Windows.Forms.Keys.C)));
this.menuitem_copyselect.Size = new System.Drawing.Size(261, 22);
this.menuitem_copyselect.Text = "Copy Select Cards";
this.menuitem_copyselect.Click += new System.EventHandler(this.Menuitem_copyselecttoClick);
//
// menuitem_copyall
//
this.menuitem_copyall.Name = "menuitem_copyall";
this.menuitem_copyall.Size = new System.Drawing.Size(261, 22);
this.menuitem_copyall.Text = "Copy All Cards";
this.menuitem_copyall.Click += new System.EventHandler(this.Menuitem_copyallClick);
//
// menuitem_pastecards
//
this.menuitem_pastecards.Name = "menuitem_pastecards";
this.menuitem_pastecards.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
| System.Windows.Forms.Keys.V)));
this.menuitem_pastecards.Size = new System.Drawing.Size(261, 22);
this.menuitem_pastecards.Text = "Paste Cards";
this.menuitem_pastecards.Click += new System.EventHandler(this.Menuitem_pastecardsClick);
//
// toolStripSeparator4
//
this.toolStripSeparator4.Name = "toolStripSeparator4";
this.toolStripSeparator4.Size = new System.Drawing.Size(258, 6);
//
// menuitem_comp1
//
this.menuitem_comp1.Name = "menuitem_comp1";
this.menuitem_comp1.Size = new System.Drawing.Size(261, 22);
this.menuitem_comp1.Text = "Compare DB 1";
this.menuitem_comp1.Click += new System.EventHandler(this.Menuitem_comp1Click);
//
// menuitem_comp2
//
this.menuitem_comp2.Enabled = false;
this.menuitem_comp2.Name = "menuitem_comp2";
this.menuitem_comp2.Size = new System.Drawing.Size(261, 22);
this.menuitem_comp2.Text = "Compare DB 2";
this.menuitem_comp2.Click += new System.EventHandler(this.Menuitem_comp2Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(258, 6);
//
// menuitem_history
//
this.menuitem_history.Name = "menuitem_history";
this.menuitem_history.Size = new System.Drawing.Size(261, 22);
this.menuitem_history.Text = "History(&H)";
//
// toolStripSeparator5
//
this.toolStripSeparator5.Name = "toolStripSeparator5";
this.toolStripSeparator5.Size = new System.Drawing.Size(258, 6);
//
// menuitem_quit
//
this.menuitem_quit.Name = "menuitem_quit";
this.menuitem_quit.Size = new System.Drawing.Size(261, 22);
this.menuitem_quit.Text = "Quit";
this.menuitem_quit.Click += new System.EventHandler(this.QuitToolStripMenuItemClick);
//
// menuitem_windows
//
this.menuitem_windows.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuitem_dataeditor,
this.menuitem_codeeditor,
this.toolStripSeparator2,
this.menuitem_close,
this.menuitem_closeother,
this.menuitem_closeall});
this.menuitem_windows.Name = "menuitem_windows";
this.menuitem_windows.Size = new System.Drawing.Size(93, 21);
this.menuitem_windows.Text = "Windows(&W)";
//
// menuitem_dataeditor
//
this.menuitem_dataeditor.Name = "menuitem_dataeditor";
this.menuitem_dataeditor.Size = new System.Drawing.Size(157, 22);
this.menuitem_dataeditor.Text = "DataEditor";
this.menuitem_dataeditor.Click += new System.EventHandler(this.DataEditorToolStripMenuItemClick);
//
// menuitem_codeeditor
//
this.menuitem_codeeditor.Name = "menuitem_codeeditor";
this.menuitem_codeeditor.Size = new System.Drawing.Size(157, 22);
this.menuitem_codeeditor.Text = "CodeEditor";
this.menuitem_codeeditor.Click += new System.EventHandler(this.Menuitem_codeeditorClick);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(154, 6);
//
// menuitem_close
//
this.menuitem_close.Name = "menuitem_close";
this.menuitem_close.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.W)));
this.menuitem_close.Size = new System.Drawing.Size(157, 22);
this.menuitem_close.Text = "Close";
this.menuitem_close.Click += new System.EventHandler(this.CloseToolStripMenuItemClick);
//
// menuitem_closeother
//
this.menuitem_closeother.Name = "menuitem_closeother";
this.menuitem_closeother.Size = new System.Drawing.Size(157, 22);
this.menuitem_closeother.Text = "Close Other";
this.menuitem_closeother.Click += new System.EventHandler(this.CloseOtherToolStripMenuItemClick);
//
// menuitem_closeall
//
this.menuitem_closeall.Name = "menuitem_closeall";
this.menuitem_closeall.Size = new System.Drawing.Size(157, 22);
this.menuitem_closeall.Text = "Close All";
this.menuitem_closeall.Click += new System.EventHandler(this.CloseAllToolStripMenuItemClick);
//
// MainForm
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.SystemColors.Control;
this.ClientSize = new System.Drawing.Size(868, 597);
this.Controls.Add(this.dockPanel1);
this.Controls.Add(this.menuStrip1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.IsMdiContainer = true;
this.MainMenuStrip = this.menuStrip1;
this.Name = "MainForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "MainForm";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainFormFormClosing);
this.Load += new System.EventHandler(this.MainFormLoad);
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
private System.Windows.Forms.ToolStripMenuItem menuitem_findluafunc;
private System.Windows.Forms.ToolStripMenuItem menuitem_save;
......
......@@ -26,23 +26,16 @@ namespace DataEditorX
public partial class MainForm : Form
{
#region member
bool isInitAuto=false;
bool isInitDataEditor=false;
string cdbHistoryFile;
List<string> cdblist;
List<string> hittorylist;
string datapath;
string conflang,conflang_de,conflang_ce,confmsg,conflang_pe;
string funtxt,conlua,fieldtxt,confstring;
DataEditForm compare1,compare2;
Card[] tCards;
Dictionary<DataEditForm,string> list;
//
DataConfig datacfg;
//函数提示
Dictionary<string,string> tooltipDic;
//自动完成
List<AutocompleteItem> funList;
List<AutocompleteItem> conList;
DataConfig datacfg = null;
CodeConfig codecfg = null;
#endregion
#region init
......@@ -60,24 +53,21 @@ public MainForm(string datapath)
}
void Init(string datapath)
{
tCards=null;
cdblist=new List<string>();
tooltipDic=new Dictionary<string, string>();
funList=new List<AutocompleteItem>();
conList=new List<AutocompleteItem>();
list=new Dictionary<DataEditForm,string>();
this.datapath=datapath;
datacfg=new DataConfig(datapath);
tCards = null;
hittorylist = new List<string>();
list = new Dictionary<DataEditForm,string>();
this.datapath = datapath;
InitDataEditor();
InitCodeEditor();
cdbHistoryFile =MyPath.Combine(datapath, "history.txt");
conflang = MyPath.Combine(datapath, "language-mainform.txt");
conflang_de = MyPath.Combine(datapath, "language-dataeditor.txt");
conflang_ce = MyPath.Combine(datapath, "language-codeeditor.txt");
conflang_pe = MyPath.Combine(datapath, "language-puzzleditor.txt");
fieldtxt= MyPath.Combine(datapath, "Puzzle.txt");
confmsg = MyPath.Combine(datapath, "message.txt");
funtxt = MyPath.Combine(datapath, "_functions.txt");
conlua = MyPath.Combine(datapath, "constant.lua");
confstring = MyPath.Combine(datapath, "strings.conf");
InitializeComponent();
LANG.InitForm(this, conflang);
LANG.LoadMessage(confmsg);
......@@ -110,28 +100,28 @@ void ReadHistory()
{
if(string.IsNullOrEmpty(line) || line.StartsWith("#"))
continue;
if(File.Exists(line) && cdblist.IndexOf(line)<0){
cdblist.Add(line);
if(File.Exists(line) && hittorylist.IndexOf(line)<0){
hittorylist.Add(line);
}
}
}
void AddHistory(string file)
{
int index=cdblist.IndexOf(file);
int index=hittorylist.IndexOf(file);
if(index>=0){
cdblist.RemoveAt(index);
hittorylist.RemoveAt(index);
}
string[] tmps=cdblist.ToArray();
cdblist.Clear();
cdblist.Add(file);
cdblist.AddRange(tmps);
string[] tmps=hittorylist.ToArray();
hittorylist.Clear();
hittorylist.Add(file);
hittorylist.AddRange(tmps);
SaveHistory();
MenuHistory();
}
void SaveHistory()
{
string texts="# history";
foreach(string str in cdblist)
foreach(string str in hittorylist)
{
if(File.Exists(str))
texts += Environment.NewLine + str;
......@@ -142,7 +132,7 @@ void SaveHistory()
void MenuHistory()
{
menuitem_history.DropDownItems.Clear();
foreach(string str in cdblist)
foreach(string str in hittorylist)
{
ToolStripMenuItem tsmi=new ToolStripMenuItem(str);
tsmi.Click+=MenuHistoryItem_Click;
......@@ -156,7 +146,7 @@ void MenuHistory()
}
void MenuHistoryClear_Click(object sender, EventArgs e)
{
cdblist.Clear();
hittorylist.Clear();
MenuHistory();
SaveHistory();
}
......@@ -203,26 +193,43 @@ protected override void DefWndProc(ref System.Windows.Forms.Message m)
#endregion
#region open
public void OpenScript(string file)
{
if(!string.IsNullOrEmpty(file) && File.Exists(file)){
AddHistory(file);
}
CodeEditForm cf=new CodeEditForm(file);
CodeEditForm cf=new CodeEditForm();
LANG.InitForm(cf, conflang_ce);
LANG.SetLanguage(cf);
if(!isInitAuto)
{
isInitAuto=true;
InitCodeEditor(funtxt, conlua);
}
cf.SetCDBList(cdblist.ToArray());
InitCodeEditor();
cf.SetCDBList(hittorylist.ToArray());
cf.DockAreas = DockAreas.Document;
cf.InitTooltip(tooltipDic, funList.ToArray(), conList.ToArray());
cf.InitTooltip(codecfg.TooltipDic,
codecfg.FunList, codecfg.ConList);
//cf.SetIMEMode(ImeMode.Inherit);
cf.Open(file);
cf.Show(dockPanel1, DockState.Document);
}
void InitCodeEditor()
{
if (codecfg == null)
{
codecfg = new CodeConfig(datapath);
codecfg.Init();
InitDataEditor();
codecfg.SetNames(datacfg.dicSetnames);
codecfg.AddStrings();
}
}
void InitDataEditor()
{
if (datacfg == null)
{
datacfg = new DataConfig(datapath);
datacfg.Init();
YGOUtil.SetConfig(datacfg);
}
}
public void Open(string file)
{
if(!string.IsNullOrEmpty(file) && File.Exists(file)){
......@@ -239,8 +246,7 @@ public void Open(string file)
def=new DataEditForm(datapath,file);
LANG.InitForm(def, conflang_de);
LANG.SetLanguage(def);
if(!isInitDataEditor)
datacfg.Init();
InitDataEditor();
def.InitGameData(datacfg);
def.DockAreas = DockAreas.Document;
def.FormClosed+=new FormClosedEventHandler(def_FormClosed);
......@@ -290,6 +296,7 @@ void DataEditorToolStripMenuItemClick(object sender, EventArgs e)
{
Open(null);
}
#endregion
#region form
......@@ -345,6 +352,11 @@ void CloseAllToolStripMenuItemClick(object sender, EventArgs e)
#endregion
#region file
DataEditForm GetActive()
{
DataEditForm df = dockPanel1.ActiveContent as DataEditForm;
return df;
}
void Menuitem_openClick(object sender, EventArgs e)
{
using(OpenFileDialog dlg=new OpenFileDialog())
......@@ -409,16 +421,6 @@ void Menuitem_saveClick(object sender, EventArgs e)
#endregion
#region copy
DataEditForm GetActive()
{
foreach(DataEditForm df in list.Keys)
{
if(df==dockPanel1.ActiveContent)
return df;
}
return null;
}
void Menuitem_copyselecttoClick(object sender, EventArgs e)
{
DataEditForm df =GetActive();
......@@ -506,180 +508,19 @@ void Menuitem_comp2Click(object sender, EventArgs e)
#endregion
#region complate
void InitCodeEditor(string funtxt,string conlua)
{
if(!isInitDataEditor)
datacfg.Init();
tooltipDic.Clear();
funList.Clear();
conList.Clear();
AddFunction(funtxt);
AddConstant(conlua);
foreach(long k in datacfg.dicSetnames.Keys)
{
string key="0x"+k.ToString("x");
if(!tooltipDic.ContainsKey(key))
{
AddConToolTip(key, datacfg.dicSetnames[k]);
}
}
if(File.Exists(confstring))
{
string[] lines=File.ReadAllLines(confstring);
foreach(string line in lines)
{
if(line.StartsWith("!victory")
|| line.StartsWith("!counter"))
{
string[] ws = line.Split(' ');
if(ws.Length>2)
{
AddConToolTip(ws[1], ws[2]);
}
}
}
}
ReadStrings(confstring);
//MessageBox.Show(funList.Count.ToString());
}
void ReadStrings(string txt)
{
}
void Menuitem_findluafuncClick(object sender, EventArgs e)
{
using (FolderBrowserDialog fd = new FolderBrowserDialog())
{
fd.Description = "Folder Name: ocgcore";
if (fd.ShowDialog() == DialogResult.OK)
{
LuaFunction.Read(codecfg.funtxt);
LuaFunction.Find(fd.SelectedPath);
MessageBox.Show("OK");
}
}
}
#endregion
#region function
void AddFunction(string funtxt)
{
if(File.Exists(funtxt))
{
string[] lines=File.ReadAllLines(funtxt);
bool isFind=false;
string name="";
string desc="";
foreach(string line in lines)
{
if(string.IsNullOrEmpty(line)
|| line.StartsWith("==")
|| line.StartsWith("#"))
continue;
if(line.StartsWith("●"))
{
//add
AddFuncTooltip(name, desc);
int w=line.IndexOf("(");
int t=line.IndexOf(" ");
if(t<w && t>0){
name=line.Substring(t+1,w-t-1);
isFind=true;
desc=line;
}
}
else if(isFind){
desc+=Environment.NewLine+line;
}
}
AddFuncTooltip(name, desc);
}
}
string GetFunName(string str)
{
int t=str.IndexOf(".");
if(t>0)
return str.Substring(t+1);
return str;
}
void AddFuncTooltip(string name,string desc)
{
if(!string.IsNullOrEmpty(name))
{
string fname=GetFunName(name);
AddAutoMenuItem(funList, fname, desc);
if(!tooltipDic.ContainsKey(fname)){
tooltipDic.Add(fname, desc );
}
else
tooltipDic[fname] += Environment.NewLine
+Environment.NewLine +desc;
}
}
#endregion
#region constant
void AddAutoMenuItem(List<AutocompleteItem> list,string key,string desc)
{
bool isExists=false;
foreach(AutocompleteItem ai in list)
{
if(ai.Text==key)
{
isExists=true;
ai.ToolTipText += Environment.NewLine
+Environment.NewLine+ desc;
}
}
if(!isExists){
AutocompleteItem aitem=new AutocompleteItem(key);
aitem.ToolTipTitle = key;
aitem.ToolTipText = desc;
list.Add(aitem);
}
}
void AddConToolTip(string key, string desc)
{
AddAutoMenuItem(conList, key,desc);
if(tooltipDic.ContainsKey(key))
tooltipDic[key] += Environment.NewLine
+Environment.NewLine +desc;
else
tooltipDic.Add(key, desc);
}
void AddConstant(string conlua)
{
//conList.Add("con");
if(File.Exists(conlua))
{
string[] lines=File.ReadAllLines(conlua);
foreach(string line in lines)
{
if(line.StartsWith("--"))
continue;
string k=line,desc=line;
int t=line.IndexOf("=");
int t2=line.IndexOf("--");
k = (t>0)?line.Substring(0,t).TrimEnd(new char[]{' ','\t'})
:line;
desc = (t>0)?line.Substring(t+1).Replace("--","\n")
:line;
if(!tooltipDic.ContainsKey(k)){
AddConToolTip(k, desc);
}
else
tooltipDic[k] += Environment.NewLine
+Environment.NewLine+ desc;
}
}
}
#endregion
void Menuitem_findluafuncClick(object sender, EventArgs e)
{
using(FolderBrowserDialog fd=new FolderBrowserDialog())
{
fd.Description="Folder Name: ocgcore";
if(fd.ShowDialog()==DialogResult.OK)
{
LuaFunction.Read(funtxt);
LuaFunction.Find(fd.SelectedPath);
MessageBox.Show("OK");
}
}
}
}
}
......@@ -117,13 +117,467 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="dockPanel1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>130, 17</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>25</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAqBAAAJ4EAABISAAAAQAgAIhUAABGFQAAKAAAABAA
AAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZJPInDgGD/uHlc/69yVf+vcVT/r3FU/69w
U/+vcFP/r3BT/69wU/+vcFP/r3BT/65wU/+tb1L/uHZX/7h3Wf90UkOfsHFV+TooIFYYDwskGhALKBoQ
DCgaEAwoGhAMKBoQDCgaEAwpGhAMKRoQDCkaEAwpGA8KJVU4KoG3dVb/d1ZGo5ZgSOgAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCgcXrG9R/3dWR6KaZUvpAQAAAgAA
AAAFGgRaCSgGhQUjAoEUNBKFFDUScQgoBW8EFQM7AAAAAAAAAAAAAAAAFw4LIq1vU/96WEiim2VM6QEA
AAMAAAAAAgwCIAk8BcYkjhz/S3NHrw0ZDCkFHQRNEFEL3xJUDLACCQETAAAAABcPDCKwclb/e1lKop1o
T+kBAAADAAAAAAAAAAADIQGYLZIm/zlPN20AAAAAAAAAAAIOAVQbfxP/J2ciugAAAAAXDgsgs3hc/31b
TaKibVPpAQAAAwAAAAAAAAAABCQCnSuQJP86Uzh1AAAAAAAAAAAAAAAbDFYH9jiWMf8YJRsvEgYHFLd8
YP+AXU6iqHJa6QEAAAMAAAAAAAAAAAQkAp0rkCT/OlM4dQAAAAAAAAAAAAAAEAtNBekzlyv/LD8uUhAE
BRC7f2P/g2FRoq14XukBAAADAAAAAAAAAAAEJAKdK5Ak/zpTOHUAAAAAAAAAAAAAABgJTgTzPZw2/yw3
LkAQBQUSv4Jm/4ViU6Kxe2TpAQEAAwAAAAAAAAAABCMCmyuQJP86Uzh1AAAAAAAAAAAAAQBHD2sI/1ua
V+kLCwsLFQwJHMGFaf+HZFaitYFo6QEBAAMAAAAAAAAAAAMlAKsrliT/OVM4dgAAAAAAAAAgEkQQ3VSe
T/IzPDNHAAAAABoSDiPDh2r/iGdZoriFb+kBAQEBAAAAAAceBWkcVxjJNH4v1DNgLqAPMg15GkIYpDhg
NZcgJCAnAAAAAAAAAAAaEg4ixols/4lpW6O4iG/nAAAAAAAAAAAABQAMAgICAgAAAAAABQEIAgoDEgAA
AAAAAAAAAAAAAAAAAAAAAAAAEQsIGMiKbv+IaVqf0pyD8yEZFigAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAgEBAgIBAAICAQECAAAAAEY1LlbXl3r/gmZZmPq8oP/Unob/vYt25cCPeOnAjnfpv4x26b+M
dem8i3PpvIhx6byIcOm7h2/puoZt6LeEaubXnID/56SG/yIbGSiBZFaVhmdYnoppWqKJaVmiiWhZoohn
WaKIZ1mih2RWooVkVKKFZFSihWJUooRiUqKEYU+igV5NnW1QQoYAAAAAAAAAAD/8AAAQHAAAEAQAABjE
AAAYwAAAGMAAABjAAAAYwAAAGIQAABAMAAAyfAAAH8QAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAACohHDWYbVjPu39i/651Wf+tdFn/rnRZ/691Wv+udFn/rXRZ/610
Wf+udFj/rXJW/6xyVv+sclf/rHJX/6xyVv+sclb/rHJW/6xyVv+rcVb/q3FW/6txVv+sclb/rHJW/6tx
Vv+rcVb/rHJW/6txVv+sclb/rHJW/7R4XP9gQTOLj2xdt7t7Xf+lZkj/pmtP/6xuUv+xcVX/sHBS/69u
UP+vb1H/r29R/69vUf+vb1D/r29Q/69wUv+vb1H/r29Q/69vUP+vb1D/r29Q/69vUP+ublH/rm5Q/69v
UP+vb1D/rm5Q/65uUP+vb1D/r29Q/6dpTP+maEv/p2hM/7J2W/+GY1WuuHpd/6NlSf+yd13/i2BK0XdR
QLJ0TTi0dEk2tHRJNrR0STa0dEk2tHRJNrR0STa0dEk2tHRJNrR0STa0dEk2tHRJNrR0STa0dEk2tHRJ
NrR0STa0dEk2tHRJNrR0STa0dEk2tHRIN7N2Sja3oWlQ+KpuUv+mak3/p2pO/4VkVa24el7/pGdJ/4lf
S80cFBApAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABaPzSDo2xQ8alrTv+na0//hmZYrbp8
X/+lZ0r/KxsUQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7VkSj0I9y/8WIbf+Wd2it46uR/82X
fP8uIho7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH1VRKTSk3b/xopu/5Z3
aK3iq5L/0pp+/2ZOQ3sDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIyEtpnZj0M6P
c//Gi2//mHdqrOGskv/QmH7/2KWO/2VMQns3KCFFOSokRjkqJEc5KiRHOSokRzkqIkc6KiJHOSsiRzoq
Ikc6KiJHOSoiRzkqIkc5KiJHOSkiRzkoIkc5KSJHOCkgRzgoIEc5KSFHOCggRzgoIEc3JyBGOikhSa+K
etLXnoT/yIpw/8aKcP+ggHO557GX/9Gcgv/TnIL/1J2E/9Kcgv/Rm4L/0puC/9Kbgv/Sm4L/0ZuB/9KZ
gP/Smn//0pl//9GZfv/QmX//0Jd+/9CXff/QlXz/z5V7/9CWe//PlXn/zpR4/86Uef/Nknf/zJJ1/8uR
dv/OknX/yo1w/8qPc//KjnP/0pR5/2dWTnrVpJD46LCV/+OqkP/krZP/5a2T/+Wskv/lrJL/5ayS/+Wt
kf/mrJL/5KmS/+Ookf/jqJH/4aiP/+OokP/hpoz/4aSL/+Gliv/gp4r/4KaJ/+Ckif/gpIn/3qKH/96i
hv/doYP/3aCD/9yggv/ZnID/2Jp//9qdf/+ugGjYAAAAAGhSSXeffGy1lHNirZVzYq2Vc2KtlXNirZVz
Yq2Vc2KtlHJirZRyYq2UcWKtlHJirZRyYq2UcmKtlHFgrZJvX62Rb16tkW9erZFuXq2Qbl2tjmxcrY5r
XK2QbFutjmtarY5qWq2MalmtjGhYrY5oV62OaFeuj2pZryMaFisAAAAAAAAAAAAAAAAH///wD///+A//
//gP///4DgAH+A4AAfgPwcD4D8HweA+B8DgPgfA4D4H4GA+B+BgPgfgYD4H4GA+B+BgPgfAYD4HwOA+B
8DgPweB4D4GA+A4AA/gOAA/4D///+A////gH///wAAAAAAAAAAAAAAAAgAAAACgAAABIAAAAkAAAAAEA
IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICBVtFO3mXcWLGkGlUx4VZRb6FW0a/hVtIv4Vb
Rr+FW0a/hVtGv4VbRr+FW0a/hVtGv4VbRr+EW0a/glpGv4JaRr+CWka/glpGv4JaRr+CWka/hFpGv4VY
Rb+CWEW/gVdDv4FXQ7+BV0O/gVdDv4FXQ7+BV0O/gVdDv4FXQ7+BV0O/gVdDv4FXQ7+BV0O/gVdDv4FX
Q7+BV0O/gVdDv4FXQ7+BV0O/f1VDv39VQ7+BV0O/gVdDv4FXQ7+BV0O/gVdDv4FXQ7+BV0O/gVdDv4FX
Q7+BV0O/gVdDv39VQ79/VUO/gVdDv4FXQ7+BV0O/f1VDv39VQ7+BV0O/gVdDv39VQ79/VUO/hltHxI1j
TM1XPS99AwEBBQAAAAALCQcOIRgVK4hmVLjFknv/v4dt/7V5Xf+1el7/tHxg/7N8YP+ze1//s3tf/7N8
YP+0e2D/tHtf/7R7X/+yel//sXle/7F5Xv+xeV7/sXle/7F5Xv+xeV7/s3le/7N4Xf+xd1z/r3Vb/691
W/+vdVv/r3Vb/692W/+vdlv/r3Vb/691W/+vdVv/r3Vb/691W/+vdVv/r3Vb/691W/+vdVv/r3Vb/691
W/+vdVv/rnVa/651Wv+vdVv/r3Vb/691W/+vdVv/r3Vb/691W/+vdVv/r3Vb/691W/+vdVv/r3Vb/650
Wv+udFr/r3Vb/691W/+vdVv/rnVa/651Wv+vdVv/r3Vb/651Wv+udVr/s3le/76DZf+CW0W+HBQPKgkG
BA1xVkmQjmhauqFuVumtcVX/rXJV/6twU/+qblL/qW5S/6luUv+obVH/qG1R/6luUv+qblL/qm9T/6tv
U/+qblP/qW1S/6ltUv+pb1L/qW9S/6lvUv+pb1L/qm5S/6luUf+pbVH/qW1R/6ltUf+pbVH/qW1R/6lu
Uv+pblL/qW1S/6ltUf+pbVH/qW1R/6ltUf+obVH/qG1R/6htUf+obVH/qG1R/6htUf+obVH/qG1R/6ht
Uf+nbFH/p2xR/6ltUf+pbVH/qG1R/6htUf+obVH/qW1R/6ltUf+nbFH/p2xR/6hsUf+obFH/qW1R/6lt
Uf+obVH/qG1Q/6htUP+pbVH/qW1R/6htUf+oblD/qW1R/6xvU/+dZ1DsgVdGvVo+MoO1i3fnz5qC/61v
U/+fXj7/o2ZH/6VqTv+kaEz/o2ZK/6NmSv+iZEn/omRJ/6NlSf+kZkn/pWdL/6VoTP+lZ0z/pGZL/6Rm
S/+kaEv/pGhL/6RpS/+kaUv/pGhL/6RnS/+kZ0v/pGhK/6RoSv+kaEr/pGhK/6RpTf+kaU3/pGhN/6Ro
Sv+kaEr/pGhK/6RoSv+laEr/pWhK/6VoSv+laEr/pWhK/6VoSv+laEr/pWhL/6VoS/+jZkv/o2ZL/6Rn
Sv+kaEr/pWhK/6VoSv+laEr/pGhK/6RoSv+jZkr/o2ZK/6NnS/+jZ0v/pGhK/6RoSv+kaEv/pWhM/6Vo
S/+kaEv/pGhL/6VoS/+laUr/o2ZJ/6JiR/+pbVP/u4Fn/5BlUNOsgW7cyZR8/61xVf+iYkT/pWhK/6dq
Tf+mak7/pmxR/6dsUv+nbFH/p2xS/6luU/+qb1T/qG1Q/6ZrTf+mak3/pmlN/6ZpTf+ma07/pmtO/6Zq
Tv+mak7/pmtO/6ZqTv+maU7/pmpN/6ZqTf+mak3/pmpN/6ZrTv+ma07/pmpO/6ZqTf+mak3/pmpN/6Zq
Tf+mak3/pmpN/6ZqTf+mak3/pmpN/6ZqTf+mak3/p2pN/6dqTf+maU7/pmlO/6ZpTf+mak3/pmpN/6Zq
Tf+mak3/pmpN/6ZqTf+maU3/pmlN/6VpTf+laU3/pmlN/6ZqTf+nak3/p2lN/6VpTP+kZ0z/o2dM/6Vo
TP+laUz/pGhL/6RmSv+nbFD/sHZb/4RbRcmgd2XPw453/65zV/+kZUj/pmhL/6ZoTP+obFH/qnNZ/6t0
Wv+udlr/rXVb/611XP+rdVz/p3BU/6RqTf+lak3/pmpO/6ZqTv+mak7/pmpO/6ZoTv+maE7/pmpP/6Zq
T/+mak//pmpO/6ZqTv+mak7/pmpO/6ZqTv+mak7/pmpN/6ZqTv+mak7/pmpO/6ZqTv+laU7/pWlO/6Vp
Tv+laU7/pWlO/6VpTv+laU7/pmpO/6ZqTv+mak//pmpP/6ZqTv+mak7/pWlO/6VpTv+laU7/pmpO/6Zq
Tv+mak7/pmpO/6VpTv+laU7/pmlP/6ZqTv+maU3/qGpN/6dqTf+kZ0z/o2dM/6RoTf+laE3/pWlN/6Vp
Tf+na03/p2pO/3dNN7yhd2fSw452/61yVv+kZEf/pWdK/6VnTP+nbVT/r3df/6RxV/SDWUXDeVBAtHVP
PbBzTzytckw5rnFHNa9xRzWvckc1r3JHNa9yRzWvckc1r3FHNa9xRzWvckc1r3JHNa9yRzWvckc1r3JH
Na9yRzWvckc1r3JHNa9yRzWvckc1r3JHNa9yRzWvckc1r3JHNa9xRzWvcUc1r3FHNa9xRzWvcUc1r3FH
Na9xRzWvckc1r3JHNa9yRzWvckc1r3JHNa9yRzWvcUc1r3FHNa9xRzWvckc1r3JHNa9yRzWvckc1r3FH
Na9xRzWvcUg1rnFHNK1yRzOxdEk1tIFUPMihalD5qW9U/6VqT/+kZ0z/pWlN/6VpTf+mak3/qGpN/3tO
Ob+heGjSw494/6xyV/+iZEj/pGdK/6RoS/+pcVb/t4Fn/5RnU9omGhQ5EQsJGRIMCRsRCwkaEQsJGhEL
CRsRCwgbEQsIGxELCBsRCwgbEQsIGxELCBsRCwgbEQsIGxELCBsRCwgbEQsIGxELCBsRCwgbEQsIGxEL
CBsRCwgbEQsIGxELCBsRCwgbEQsIGxELCBsRCwgbEQsIGxELCBsRCwgbEQsIGxELCBsRCwgbEQsIGxEL
CBsRCwgbEQsIGxELCBsRCwgbEQsIGxELCBsRCwgbEQsIGxELCBsRCwgbEQsIGxELCBsRCwgbEQoIGhEK
CBoRCggbDwkGFzAhGkigbljqtX5l/6lvVf+jZ0v/pGlM/6VqTv+mak7/qWxQ/3xPOr+heGjSw494/6xy
V/+iZEj/pGdK/6RoS/+ga1H1nG5Z5HJQQacKBwYPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQO
DB5+V0i3nW1Z5aJrUfekaEv/pWlM/6VqTv+mak7/qWxQ/3xPOr+lfGrSxpJ7/69yV/+jZEf/pmhL/6dp
Tf94TTq6LyEbRRYPDB8BAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgUXEA4iNiYeUIRW
P8qoa07/p2tP/6ZrT/+ma0//qWxQ/3xPOr+lfWzSxpR8/69zV/+jZEf/pmlM/6ZpTf9oQTCgBwUECgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwoIF3hNN7WpbE//p2xP/6Zr
T/+ma0//qWxQ/3xPOr+lfGzSxpR9/61zV/+iZEb/pmlN/6RpTf5lPi2dCQYFDgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgGE2lEMaOkaU77qW1Q/6VqT/+na0//qmxQ/3xP
Or+lfGzSxpR9/6xzV/+hZEb/p2lN/6NpTv5iPi6aCgYFDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAACQYED18+LpShaUz1qm5R/6VqTv+nbE//qmxQ/3xPOr+lfGzSxpR8/65z
WP+iZEj/p2lN/6RqTv5kQC+bCgYFDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAACgcED2JAL5WhaUv2qm1Q/6VqTv+nbE//qm1Q/3xPOr+lfGrSxpR7/690Wv+kZUr/p2pO/6Rr
Tf5lQS6cCgcFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwgFEWVB
L5miaU34qmxQ/6ZpTv+obE//q25R/35ROr+lfGrSxpV8/7B2XP+mZ0z/qGtO/6RrTf5lQS6cCgcFEAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
a//Eh2z/xolt/5FkT7+1kX3S366X/9Kdg//NlHn/zpV6/8iSef57WkmcDQkIEAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQkHEXRQP5i8gmj3xohs/8KFav/Eh2z/xolt/5Fk
T7+4kn/S4a+Y/9Kegv/NlHj/zpd8/8iVfP57XEycDQkIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAADQkHEXRQQJm9gWf4xohs/8KGa//Eh2z/xolt/5FkT7+3kn/S4K+Z/9Oe
hf/Nlnv/zpd9/8eUe/56W0qbDQkIDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAADAgGEHNPPpa8gWf3x4lu/8SJbv/FiW7/xolt/5FkT7+1kn/S37CZ/9Sfh//OmH7/zph+/8aS
ev54WEiaDAkHDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgGD29N
PZS6gGX2yItw/8WLcP/Gim//xolt/5FkT7+1kX/S37CY/9Sgh//PmYD/z5qA/8qVe/56WkmbCwgHDgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgoHEXhSQ56+g2v6yItx/8WK
b//Gim//x4pu/5FmUb+1kX/S37CZ/9WhiP/QmoH/0ZuB/9Cbff+AYU2fCQcGCgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEg0KFYleS7LHiXD/x4ty/8SJbv/Gim//yIxx/5Nn
Ur+1kX/S37CZ/9WhiP/QmoH/0ZqA/9Kcff+RbVizLCMfNA8MCxIBAQECAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAMDAwMSDw4UNismP5ttV8XJi3D/xopw/8SKb//Gim//yIxx/5NnUr+4koHS4bGc/9Wh
if/PmoD/0Jh+/9CVe//FkH3vsIt81X5kWZgLCQkOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcU
ExuPeG+nt5iJ18KOefLGiGz/x4pv/8eMcv/Hi3D/yIxw/5NnUr+4koHS4bGc/9Wiiv/Pm4H/0Jl+/9CT
e//UnYj/4bGc/7SNfdgnHRouDAgIDg4KCBEMCQgPDAkIDw0KCBANCggQDQoIEA0KCBANCggQDQoIEA0K
CBANCggQDQoIEA0KCBANCggQDQkIEA0JCBANCggQDQoIEA0JCBANCQgQDQkIEA0JCBANCQgQDQkIEA0J
CBANCQgQDQkIEA0JCBANCQgQDQkIEA0JCBANCQgQDQkIEA0JCBANCQgQDQkIEA0JBxANCQcQDQkHEA0J
BxANCQcQDQkHEA0JBxANCgcQDQoHEA0JBxANCQcQDAkHDwwJBxANCQcRCgcGDTUsKD7GpZjp4ryp/86Z
gf/Gh2v/x4tw/8eMcv/Hi3D/yIxx/5NnVL+4koDS4rGb/9aji//RnYP/0ZuC/9GZf//SnIT/16SL/8eV
f/GQa1mygWBQoYBdTZ58W0uafFxOmn9eT5x9XU6cfV1OnH1dTpx9XU6cfV1OnH1dT5x9XU+cfV1MnH1d
S5x/XUycf1xMnH9cTJx9XkycfV5MnH9dS5x/XEucf1xMnH9cTJx9XEycfVxLnH1cS5x9XEycfVxMnH1c
TJx9XEycfVtMnH1aS5x9WkucfVpJnH1aSZx9WkucfVpJnHxZSJx8WUicfFlInHxZSJx9WkicfVpInH1a
SJx7V0ece1dHnHtXR5x7WEibelZGmXlVRZp9V0afgFpJoZJoVrnHlH730Z6E/8uTeP/KjXP/yIxy/8WL
cP/GinD/yYxy/5RnVL+2j37P4rCb/9mkjP/ToIX/052E/9Kcg//RnIH/0JqA/9Gagf/Tm4H/0puB/8+a
gf/NmYD9zpmA/c+YgP7OmH/+zph//s6Yf/7OmH/+zph//s6YgP7OmID+zZh//s2YfP7Nl33+z5Z+/s+W
fv7OmX3+zpl9/s+XfP7Plnz+z5Z9/s+Wff7Oln3+zZZ7/syWfP7Mlnz+zJZ9/syWfP7Mlnz+zJR8/syS
e/7Mknr+y5J5/suSef7Mk3r+zJN5/sqRd/7KkXb+ypF2/sqRdv7Lknb+y5F3/suSd/7JjnT+yY50/siP
df7Jj3X+yI9z/ciOc/3Lj3T/zZB1/8uOcf/FiGr/xYhs/8qPdP/Mk3j/yI50/8SJb//Gi3D/yYtx/5Nm
U7y/m4re47ai/9iljv/Un4b/056F/9Odhf/TnYP/0pyC/9Ocg//TnYX/056F/9Sfhv/UnoX/1J2D/9Sd
hP/UnYT/1J2E/9SdhP/UnYT/1J2E/9SdhP/UnYT/1J2D/9Sdgv/TnIL/05qC/9Oagv/Tm4H/05uB/9Oa
gf/TmoH/0pqA/9Kaf//SmoH/0pqB/9Kagf/RmH//0Zh//9GYf//RmH//0Zh+/9GWff/Rl33/0Jh9/9CY
ff/RmH3/0Zh8/9CWfP/Qlnv/0JZ7/9CXe//Qlnr/z5V6/8+Vev/Ok3j/zpN4/82UeP/Nk3b/zZN2/86T
eP/Nk3f/zJF1/8yRdP/IjXD/x4xx/8qPdP/LkXb/yI50/8eMcf/Jj3T/z5V7/5twW8e/n5Di3rek/9Sj
jf/TnIT/1J+G/9Sghv/UnoX/1J2E/9SdhP/ToIf/06CH/9Ofhf/TnIP/05yD/9OdhP/TnYT/052E/9Od
hP/TnYT/052E/9Sdg//UnYP/1J2E/9SdhP/Tm4T/0pmD/9KZg//Sl4L/0peC/9KZgv/SmYL/z5mA/8+Z
fv/QmYH/0ZmF/9GYgv/QlX7/0JV8/9CVfv/QlX7/0JZ9/9CVfP/Qlnz/z5p9/8+aff/Ql3z/0Jd8/9CW
ff/Rln3/0ZZ9/9GWff/OlXv/zJR6/8yTef/Nk3n/zZN5/8yTd//Mk3X/zJJ1/8ySdv/Mk3b/zZR3/8yT
d//KkHX/ypB1/8qPdP/KjnP/yY5y/8mOcv/NlHn/2aGH/6l9aNR2Y1mLmn5xt7+UgeTYooz/2aWN/9il
iv/Xoon/16GJ/9ehif/XpIv/16SL/9ejiv/Xoon/16KJ/9ehif/XoYn/16GJ/9ehif/XoYn/16GJ/9ii
iP/Yooj/16KJ/9ehif/Xn4j/1Z6I/9WeiP/VnYj/1Z2I/9WeiP/Vnoj/1J6G/9SehP/Unob/1Z2I/9Wd
h//TmoL/05qB/9Oagv/TmoL/05qB/9Oagf/Tm4H/0p6B/9Kegf/Tm4D/05uA/9Oagf/SmYH/0pmB/9KZ
gf/RmID/0Jh+/9CXff/QmH7/0Jh+/8+Xe//Pl3r/z5Z6/8+Wev/Plnr/zpZ6/86Wev/Nk3j/zZN4/8yS
eP/Mknf/zZN3/82Td/+5hm7poXdiynZWSZQNCwkPJx8dLZ57brblsp//47Ga/92rkf/dqpL/3quT/96r
k//eq5P/3quT/96rk//eq5P/3quT/96rk//eq5P/3quT/96rk//eq5P/3quT/92pkv/dqZL/3amS/92p
kv/dqZL/3aiS/92okv/dqJL/3aiS/92okv/dqJL/3aiS/92okv/dqJH/3KeP/9ynj//ZpIz/2aSM/9mk
jP/ZpIz/2aSM/9mkjP/ZpIz/2aSM/9mljP/Xoon/16KJ/9ahiP/VoIj/1aCI/9WfiP/Wn4j/2KCH/9eg
h//Un4X/1J+F/9Wehf/VnoX/1J2E/9Odg//TnYP/052D/9Odg//UmoH/1JqB/9KagP/Rmn7/1p6D/9ae
g/+LZlaqJBsWLhINCxYAAAAABwUFB3ZdU4e/lojavZSC2rOKdNGzinfStIt30rSLd9K0i3fStIt30rSL
d9K0i3fStIt30rSLd9K0i3fStIt30rSLd9K0i3fStIt30rOKd9KzinfSs4p30rOKd9KzinfSs4p30rOK
d9KzinfSs4p30rOKd9KzinfSs4p30rSKd9KzinfSs4l10rOJddKwhXLSsIVy0rCFctKwhXLSsIVy0rCF
ctKwhXLSsIVy0rCFctKvhG/Sr4Rv0q2Eb9Ktg2/SrYNv0q2Bb9Kug2/Sr4Nu0q+EbtKtgW3SrYFt0q2B
bdKtgW3Sq4Bs0quAatKrgGrSq4Bq0quAatKtfWnSrX1p0qp9aNKnfWbRsoNv26+CbtdgRzx0AAAAAAAA
AACAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////AAAAAAAP////////AAA
AAAA/////////wAAAAAA/////////wAAAAAA/////////wAAAAAA/////////wAAAAAA/////////wAA
AAAA/////////wAAAAAA/wAAAH///wAAAAAA/wAAAAf//wAAAAAA/wAAAAH//wAAAAAA/wAAAAB//wAA
AAAA/wAAAAAf/wAAAAAA//gAP4AP/wAAAAAA//gAf+AD/wAAAAAA//gAf+AB/wAAAAAA//gAf/AA/wAA
AAAA//gAf/gAfwAAAAAA//gAf/gAfwAAAAAA//gAf/gAPwAAAAAA//gAf/wAPwAAAAAA//gAf/wAPwAA
AAAA//gAf/wAHwAAAAAA//gAf/wAHwAAAAAA//gAf/wAHwAAAAAA//gAf/4AHwAAAAAA//gAf/4AHwAA
AAAA//gAf/4AHwAAAAAA//gAf/4AHwAAAAAA//gAf/4AHwAAAAAA//gAf/4AHwAAAAAA//gAf/wAHwAA
AAAA//gAf/wAHwAAAAAA//gAf/wAHwAAAAAA//gAf/wAHwAAAAAA//gAf/wAPwAAAAAA//gAf/gAPwAA
AAAA//gAf/gAPwAAAAAA//gAf/AAfwAAAAAA//gAf/AA/wAAAAAA//gAf+AB/wAAAAAA//gAf8AD/wAA
AAAA//gAf4AH/wAAAAAA/+AAfAAP/wAAAAAA/wAAAAAf/wAAAAAA/wAAAAB//wAAAAAA/wAAAAH//wAA
AAAA/wAAAA///wAAAAAA/////////wAAAAAA/////////wAAAAAA/////////wAAAAAA/////////wAA
AAAA/////////wAAAAAA/////////wAAAAAAP////////AAAAAAAP////////AAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACAAAAAAAAAAAMAAAA=
</value>
</data>
</root>
\ No newline at end of file
......@@ -28,4 +28,4 @@
//
// You can specify all the values or you can use the default the Revision and
// Build Numbers by using the '*' as shown below:
[assembly: AssemblyVersion("2.2.6.4")]
[assembly: AssemblyVersion("2.2.7.0")]
[DataEditorX]2.2.6.4[DataEditorX]
[DataEditorX]2.2.7.0[DataEditorX]
[URL]https://github.com/247321453/DataEditorX/raw/master/win32/win32.zip[URL]
★文件关联
......@@ -58,6 +58,10 @@ Ctrl+鼠标左键 跳转到函数定义
Ctrl+鼠标滑轮 缩放文字
★更新历史
2.2.7.0
修复导入图片
整理代码
图片搜索支持png,bmp
2.2.6.4
修复lua编辑器的自动完成
2.2.6.3
......
No preview for this file type
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<!-- Example connection to a SQL Server Database on localhost. -->
<!-- <add name="ExampleConnectionString"
connectionString="Data Source=.;Initial Catalog=DBName;Integrated Security=True"
providerName="System.Data.SqlClient" /> -->
</connectionStrings>
<appSettings>
<!-- access these values via the property:
System.Configuration.ConfigurationManager.AppSettings[key]
-->
<!-- language directory -->
<add key="language" value="chinese" />
<!-- DataEditorX source code -->
<add key="sourceURL" value="https://github.com/247321453/DataEditorX" />
<!-- DataEditorX update url-->
<add key="updateURL" value="https://github.com/247321453/DataEditorX/tree/master/win32/readme.txt" />
<!-- Cut Images Setting -->
<add key="image_quilty" value="100" />
<add key="image" value="44,64,177,254" />
<add key="image_other" value="25,54,128,128" />
<add key="image_xyz" value="24,51,128,128" />
<add key="image_pendulum" value="14,46,149,120" />
<!-- CodeEdiotr Setting
IME = true 使用輸入法,正常顯示文字,反應變慢
IME = false English
-->
<add key="IME" value="false" />
<add key="fontname" value="Consolas" />
<add key="fontsize" value="14.5" />
</appSettings>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
# history
F:\games\ygopro\script\c33396948.lua
F:\games\ygopro\script\c242146.lua
F:\games\ygopro\cards.cdb
F:\games\ygopro\script\c255998.lua
\ No newline at end of file
F:\games\ygopro\script\c126218.lua
F:\games\ygopro\script\c131182.lua
F:\games\ygocore\script\c135598.lua
F:\games\ygocore\script\c126218.lua
F:\games\ygocore\script\c114932.lua
F:\games\ygocore\single\[sample]BerserkDragon.lua
F:\games\ygopro\script\c57774843.lua
F:\games\ygopro\script\c33396948.lua
F:\games\ygopro\script\c255998.lua
F:\games\ygopro\script\utility.lua
\ No newline at end of file
[DataEditorX]2.2.6.4[DataEditorX]
[DataEditorX]2.2.7.0[DataEditorX]
[URL]https://github.com/247321453/DataEditorX/raw/master/win32/win32.zip[URL]
★文件关联
......@@ -58,6 +58,10 @@ Ctrl+鼠标左键 跳转到函数定义
Ctrl+鼠标滑轮 缩放文字
★更新历史
2.2.7.0
修复导入图片
整理代码
图片搜索支持png,bmp
2.2.6.4
修复lua编辑器的自动完成
2.2.6.3
......
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment