Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
D
DataEditorX
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
1
Issues
1
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nanahira
DataEditorX
Commits
2abe825f
Commit
2abe825f
authored
Jun 08, 2020
by
JoyJ
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
More code formats; Now use label as tooltip.
parent
bc0829bf
Changes
23
Hide whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
645 additions
and
367 deletions
+645
-367
DataEditorX/CodeEditForm.cs
DataEditorX/CodeEditForm.cs
+6
-6
DataEditorX/Common/ConfHelper.cs
DataEditorX/Common/ConfHelper.cs
+10
-10
DataEditorX/Common/MyBitmap.cs
DataEditorX/Common/MyBitmap.cs
+1
-1
DataEditorX/Common/MyPath.cs
DataEditorX/Common/MyPath.cs
+2
-2
DataEditorX/Common/ZipStorer.cs
DataEditorX/Common/ZipStorer.cs
+138
-138
DataEditorX/Config/DataManager.cs
DataEditorX/Config/DataManager.cs
+2
-2
DataEditorX/Config/ImageSet.cs
DataEditorX/Config/ImageSet.cs
+5
-5
DataEditorX/Config/MyConfig.cs
DataEditorX/Config/MyConfig.cs
+15
-15
DataEditorX/Controls/FastColoredTextBoxEx.cs
DataEditorX/Controls/FastColoredTextBoxEx.cs
+47
-10
DataEditorX/Controls/FastColoredTextBoxEx.resx
DataEditorX/Controls/FastColoredTextBoxEx.resx
+120
-0
DataEditorX/Controls/History.cs
DataEditorX/Controls/History.cs
+5
-3
DataEditorX/Core/CardEdit.cs
DataEditorX/Core/CardEdit.cs
+20
-26
DataEditorX/Core/Info/CardLink.cs
DataEditorX/Core/Info/CardLink.cs
+1
-1
DataEditorX/Core/Mse/CardPack.cs
DataEditorX/Core/Mse/CardPack.cs
+3
-3
DataEditorX/Core/Mse/MSEConfig.cs
DataEditorX/Core/Mse/MSEConfig.cs
+25
-25
DataEditorX/Core/Mse/MseMaker.cs
DataEditorX/Core/Mse/MseMaker.cs
+11
-11
DataEditorX/Core/TCGEditor/CardSet.cs
DataEditorX/Core/TCGEditor/CardSet.cs
+1
-1
DataEditorX/Core/TaskHelper.cs
DataEditorX/Core/TaskHelper.cs
+3
-3
DataEditorX/DataEditForm.cs
DataEditorX/DataEditForm.cs
+18
-18
DataEditorX/DataEditorX.csproj
DataEditorX/DataEditorX.csproj
+4
-3
DataEditorX/MainForm.cs
DataEditorX/MainForm.cs
+2
-2
DataEditorX/data/constant.lua
DataEditorX/data/constant.lua
+71
-46
DataEditorX/data/strings.conf
DataEditorX/data/strings.conf
+135
-36
No files found.
DataEditorX/CodeEditForm.cs
View file @
2abe825f
...
...
@@ -51,15 +51,15 @@ void InitForm()
this
.
tooltipDic
=
new
SortedList
<
string
,
string
>();
this
.
InitializeComponent
();
//设置字体,大小
string
fontname
=
MyConfig
.
r
eadString
(
MyConfig
.
TAG_FONT_NAME
);
float
fontsize
=
MyConfig
.
r
eadFloat
(
MyConfig
.
TAG_FONT_SIZE
,
this
.
fctb
.
Font
.
Size
);
string
fontname
=
MyConfig
.
R
eadString
(
MyConfig
.
TAG_FONT_NAME
);
float
fontsize
=
MyConfig
.
R
eadFloat
(
MyConfig
.
TAG_FONT_SIZE
,
this
.
fctb
.
Font
.
Size
);
this
.
fctb
.
Font
=
new
Font
(
fontname
,
fontsize
);
if
(
MyConfig
.
r
eadBoolean
(
MyConfig
.
TAG_IME
))
if
(
MyConfig
.
R
eadBoolean
(
MyConfig
.
TAG_IME
))
{
this
.
fctb
.
ImeMode
=
ImeMode
.
On
;
}
if
(
MyConfig
.
r
eadBoolean
(
MyConfig
.
TAG_WORDWRAP
))
if
(
MyConfig
.
R
eadBoolean
(
MyConfig
.
TAG_WORDWRAP
))
{
this
.
fctb
.
WordWrap
=
true
;
}
...
...
@@ -68,7 +68,7 @@ void InitForm()
this
.
fctb
.
WordWrap
=
false
;
}
if
(
MyConfig
.
r
eadBoolean
(
MyConfig
.
TAG_TAB2SPACES
))
if
(
MyConfig
.
R
eadBoolean
(
MyConfig
.
TAG_TAB2SPACES
))
{
this
.
tabisspaces
=
true
;
}
...
...
@@ -370,7 +370,7 @@ void AboutToolStripMenuItemClick(object sender, EventArgs e)
MyMsg
.
Show
(
LanguageHelper
.
GetMsg
(
LMSG
.
About
)
+
"\t"
+
Application
.
ProductName
+
"\n"
+
LanguageHelper
.
GetMsg
(
LMSG
.
Version
)
+
"\t1.1.0.0\n"
+
LanguageHelper
.
GetMsg
(
LMSG
.
Author
)
+
"\t
菜菜
"
);
+
LanguageHelper
.
GetMsg
(
LMSG
.
Author
)
+
"\t
Nanahira & JoyJ
"
);
}
void
Menuitem_openClick
(
object
sender
,
EventArgs
e
)
...
...
DataEditorX/Common/ConfHelper.cs
View file @
2abe825f
...
...
@@ -16,7 +16,7 @@ public class ConfHelper
/// </summary>
/// <param name="line"></param>
/// <returns></returns>
public
static
string
g
etValue
(
string
line
)
public
static
string
G
etValue
(
string
line
)
{
int
t
=
line
.
IndexOf
(
'='
);
if
(
t
>
0
)
...
...
@@ -31,7 +31,7 @@ public static string getValue(string line)
/// </summary>
/// <param name="word"></param>
/// <returns></returns>
public
static
string
g
etValue1
(
string
word
)
public
static
string
G
etValue1
(
string
word
)
{
int
i
=
word
.
IndexOf
(
SEP_LINE
);
if
(
i
>
0
)
...
...
@@ -46,7 +46,7 @@ public static string getValue1(string word)
/// </summary>
/// <param name="word"></param>
/// <returns></returns>
public
static
string
g
etValue2
(
string
word
)
public
static
string
G
etValue2
(
string
word
)
{
int
i
=
word
.
IndexOf
(
SEP_LINE
);
if
(
i
>
0
)
...
...
@@ -61,16 +61,16 @@ public static string getValue2(string word)
/// </summary>
/// <param name="line"></param>
/// <returns></returns>
public
static
string
g
etMultLineValue
(
string
line
)
public
static
string
G
etMultLineValue
(
string
line
)
{
return
getRegex
(
g
etValue
(
line
));
return
GetRegex
(
G
etValue
(
line
));
}
/// <summary>
/// 替换特殊符
/// </summary>
/// <param name="word"></param>
/// <returns></returns>
public
static
string
g
etRegex
(
string
word
)
public
static
string
G
etRegex
(
string
word
)
{
StringBuilder
sb
=
new
StringBuilder
(
word
);
sb
.
Replace
(
"\\r"
,
"\r"
);
...
...
@@ -84,9 +84,9 @@ public static string getRegex(string word)
/// </summary>
/// <param name="line"></param>
/// <returns></returns>
public
static
bool
g
etBooleanValue
(
string
line
)
public
static
bool
G
etBooleanValue
(
string
line
)
{
if
(
g
etValue
(
line
).
ToLower
()
==
"true"
)
if
(
G
etValue
(
line
).
ToLower
()
==
"true"
)
{
return
true
;
}
...
...
@@ -101,12 +101,12 @@ public static bool getBooleanValue(string line)
/// <param name="line"></param>
/// <param name="defalut">失败的值</param>
/// <returns></returns>
public
static
int
g
etIntegerValue
(
string
line
,
int
defalut
)
public
static
int
G
etIntegerValue
(
string
line
,
int
defalut
)
{
int
i
;
try
{
i
=
int
.
Parse
(
g
etValue
(
line
));
i
=
int
.
Parse
(
G
etValue
(
line
));
return
i
;
}
catch
{}
...
...
DataEditorX/Common/MyBitmap.cs
View file @
2abe825f
...
...
@@ -14,7 +14,7 @@ namespace DataEditorX.Common
/// </summary>
public
static
class
MyBitmap
{
public
static
Bitmap
r
eadImage
(
string
file
)
public
static
Bitmap
R
eadImage
(
string
file
)
{
if
(!
File
.
Exists
(
file
))
{
...
...
DataEditorX/Common/MyPath.cs
View file @
2abe825f
...
...
@@ -110,7 +110,7 @@ public static string CheckDir(string dir,string defalut)
/// <param name="tag">前面</param>
/// <param name="lang"></param>
/// <returns></returns>
public
static
string
g
etFileName
(
string
tag
,
string
lang
)
public
static
string
G
etFileName
(
string
tag
,
string
lang
)
{
return
tag
+
"_"
+
lang
+
".txt"
;
}
...
...
@@ -120,7 +120,7 @@ public static string getFileName(string tag,string lang)
/// <param name="tag"></param>
/// <param name="file"></param>
/// <returns></returns>
public
static
string
g
etFullFileName
(
string
tag
,
string
file
)
public
static
string
G
etFullFileName
(
string
tag
,
string
file
)
{
string
name
=
Path
.
GetFileNameWithoutExtension
(
file
);
if
(!
name
.
StartsWith
(
tag
+
"_"
))
...
...
DataEditorX/Common/ZipStorer.cs
View file @
2abe825f
...
...
@@ -68,23 +68,23 @@ public override string ToString()
#
region
Private
fields
// List of files to store
private
readonly
List
<
ZipFileEntry
>
F
iles
=
new
List
<
ZipFileEntry
>();
private
readonly
List
<
ZipFileEntry
>
f
iles
=
new
List
<
ZipFileEntry
>();
// Filename of storage file
private
string
F
ileName
;
private
string
f
ileName
;
// Stream object of storage file
private
Stream
Z
ipFileStream
;
private
Stream
z
ipFileStream
;
// General comment
private
string
C
omment
=
""
;
private
string
c
omment
=
""
;
// Central dir image
private
byte
[]
C
entralDirImage
=
null
;
private
byte
[]
c
entralDirImage
=
null
;
// Existing files in zip
private
ushort
E
xistingFiles
=
0
;
private
ushort
e
xistingFiles
=
0
;
// File access for Open method
private
FileAccess
A
ccess
;
private
FileAccess
a
ccess
;
// Static CRC32 Table
private
static
readonly
uint
[]
C
rcTable
=
null
;
private
static
readonly
uint
[]
_c
rcTable
=
null
;
// Default filename encoder
private
static
readonly
Encoding
D
efaultEncoding
=
Encoding
.
GetEncoding
(
437
);
private
static
readonly
Encoding
_d
efaultEncoding
=
Encoding
.
GetEncoding
(
437
);
#
endregion
#
region
Public
methods
...
...
@@ -92,8 +92,8 @@ public override string ToString()
static
ZipStorer
()
{
// Generate CRC32 table
C
rcTable
=
new
uint
[
256
];
for
(
int
i
=
0
;
i
<
C
rcTable
.
Length
;
i
++)
_c
rcTable
=
new
uint
[
256
];
for
(
int
i
=
0
;
i
<
_c
rcTable
.
Length
;
i
++)
{
uint
c
=
(
uint
)
i
;
for
(
int
j
=
0
;
j
<
8
;
j
++)
...
...
@@ -107,7 +107,7 @@ static ZipStorer()
c
>>=
1
;
}
}
C
rcTable
[
i
]
=
c
;
_c
rcTable
[
i
]
=
c
;
}
}
/// <summary>
...
...
@@ -121,8 +121,8 @@ public static ZipStorer Create(string _filename, string _comment)
Stream
stream
=
new
FileStream
(
_filename
,
FileMode
.
Create
,
FileAccess
.
ReadWrite
);
ZipStorer
zip
=
Create
(
stream
,
_comment
);
zip
.
C
omment
=
_comment
;
zip
.
F
ileName
=
_filename
;
zip
.
c
omment
=
_comment
;
zip
.
f
ileName
=
_filename
;
return
zip
;
}
...
...
@@ -136,9 +136,9 @@ public static ZipStorer Create(Stream _stream, string _comment)
{
ZipStorer
zip
=
new
ZipStorer
{
C
omment
=
_comment
,
Z
ipFileStream
=
_stream
,
A
ccess
=
FileAccess
.
Write
c
omment
=
_comment
,
z
ipFileStream
=
_stream
,
a
ccess
=
FileAccess
.
Write
};
return
zip
;
...
...
@@ -154,7 +154,7 @@ public static ZipStorer Open(string _filename, FileAccess _access)
Stream
stream
=
(
Stream
)
new
FileStream
(
_filename
,
FileMode
.
Open
,
_access
==
FileAccess
.
Read
?
FileAccess
.
Read
:
FileAccess
.
ReadWrite
);
ZipStorer
zip
=
Open
(
stream
,
_access
);
zip
.
F
ileName
=
_filename
;
zip
.
f
ileName
=
_filename
;
return
zip
;
}
...
...
@@ -174,8 +174,8 @@ public static ZipStorer Open(Stream _stream, FileAccess _access)
ZipStorer
zip
=
new
ZipStorer
{
//zip.FileName = _filename;
Z
ipFileStream
=
_stream
,
A
ccess
=
_access
z
ipFileStream
=
_stream
,
a
ccess
=
_access
};
if
(
zip
.
ReadFileInfo
())
...
...
@@ -195,7 +195,7 @@ public static ZipStorer Open(Stream _stream, FileAccess _access)
public
void
AddFile
(
string
_pathname
,
string
_filenameInZip
,
string
_comment
)
{
Compression
_method
=
Compression
.
Deflate
;
if
(
this
.
A
ccess
==
FileAccess
.
Read
)
if
(
this
.
a
ccess
==
FileAccess
.
Read
)
{
throw
new
InvalidOperationException
(
"Writing is not alowed"
);
}
...
...
@@ -213,7 +213,7 @@ public void AddFile(string _pathname, string _filenameInZip, string _comment)
/// <param name="_comment">Comment for stored file</param>
public
void
AddFile
(
Compression
_method
,
string
_pathname
,
string
_filenameInZip
,
string
_comment
)
{
if
(
this
.
A
ccess
==
FileAccess
.
Read
)
if
(
this
.
a
ccess
==
FileAccess
.
Read
)
{
throw
new
InvalidOperationException
(
"Writing is not alowed"
);
}
...
...
@@ -232,17 +232,17 @@ public void AddFile(Compression _method, string _pathname, string _filenameInZip
/// <param name="_comment">Comment for stored file</param>
public
void
AddStream
(
Compression
_method
,
string
_filenameInZip
,
Stream
_source
,
DateTime
_modTime
,
string
_comment
)
{
if
(
this
.
A
ccess
==
FileAccess
.
Read
)
if
(
this
.
a
ccess
==
FileAccess
.
Read
)
{
throw
new
InvalidOperationException
(
"Writing is not alowed"
);
}
if
(
this
.
F
iles
.
Count
==
0
)
if
(
this
.
f
iles
.
Count
==
0
)
{
}
else
{
ZipFileEntry
last
=
this
.
Files
[
this
.
F
iles
.
Count
-
1
];
ZipFileEntry
last
=
this
.
files
[
this
.
f
iles
.
Count
-
1
];
_
=
last
.
HeaderOffset
+
last
.
HeaderSize
;
}
...
...
@@ -256,13 +256,13 @@ public void AddStream(Compression _method, string _filenameInZip, Stream _source
// Even though we write the header now, it will have to be rewritten, since we don't know compressed size or crc.
Crc32
=
0
,
// to be updated later
HeaderOffset
=
(
uint
)
this
.
Z
ipFileStream
.
Position
,
// offset within file of the start of this local record
HeaderOffset
=
(
uint
)
this
.
z
ipFileStream
.
Position
,
// offset within file of the start of this local record
ModifyTime
=
_modTime
};
// Write local header
this
.
WriteLocalHeader
(
ref
zfe
);
zfe
.
FileOffset
=
(
uint
)
this
.
Z
ipFileStream
.
Position
;
zfe
.
FileOffset
=
(
uint
)
this
.
z
ipFileStream
.
Position
;
// Write file to zip (store)
this
.
Store
(
ref
zfe
,
_source
);
...
...
@@ -270,7 +270,7 @@ public void AddStream(Compression _method, string _filenameInZip, Stream _source
this
.
UpdateCrcAndSizes
(
ref
zfe
);
this
.
F
iles
.
Add
(
zfe
);
this
.
f
iles
.
Add
(
zfe
);
}
/// <summary>
/// Updates central directory (if pertinent) and close the Zip storage
...
...
@@ -278,26 +278,26 @@ public void AddStream(Compression _method, string _filenameInZip, Stream _source
/// <remarks>This is a required step, unless automatic dispose is used</remarks>
public
void
Close
()
{
if
(
this
.
A
ccess
!=
FileAccess
.
Read
)
if
(
this
.
a
ccess
!=
FileAccess
.
Read
)
{
uint
centralOffset
=
(
uint
)
this
.
Z
ipFileStream
.
Position
;
uint
centralOffset
=
(
uint
)
this
.
z
ipFileStream
.
Position
;
uint
centralSize
=
0
;
if
(
this
.
C
entralDirImage
!=
null
)
if
(
this
.
c
entralDirImage
!=
null
)
{
this
.
ZipFileStream
.
Write
(
this
.
CentralDirImage
,
0
,
this
.
C
entralDirImage
.
Length
);
this
.
zipFileStream
.
Write
(
this
.
centralDirImage
,
0
,
this
.
c
entralDirImage
.
Length
);
}
for
(
int
i
=
0
;
i
<
this
.
F
iles
.
Count
;
i
++)
for
(
int
i
=
0
;
i
<
this
.
f
iles
.
Count
;
i
++)
{
long
pos
=
this
.
Z
ipFileStream
.
Position
;
this
.
WriteCentralDirRecord
(
this
.
F
iles
[
i
]);
centralSize
+=
(
uint
)(
this
.
Z
ipFileStream
.
Position
-
pos
);
long
pos
=
this
.
z
ipFileStream
.
Position
;
this
.
WriteCentralDirRecord
(
this
.
f
iles
[
i
]);
centralSize
+=
(
uint
)(
this
.
z
ipFileStream
.
Position
-
pos
);
}
if
(
this
.
C
entralDirImage
!=
null
)
if
(
this
.
c
entralDirImage
!=
null
)
{
this
.
WriteEndRecord
(
centralSize
+
(
uint
)
this
.
C
entralDirImage
.
Length
,
centralOffset
);
this
.
WriteEndRecord
(
centralSize
+
(
uint
)
this
.
c
entralDirImage
.
Length
,
centralOffset
);
}
else
{
...
...
@@ -305,11 +305,11 @@ public void Close()
}
}
if
(
this
.
Z
ipFileStream
!=
null
)
if
(
this
.
z
ipFileStream
!=
null
)
{
this
.
Z
ipFileStream
.
Flush
();
this
.
Z
ipFileStream
.
Dispose
();
this
.
Z
ipFileStream
=
null
;
this
.
z
ipFileStream
.
Flush
();
this
.
z
ipFileStream
.
Dispose
();
this
.
z
ipFileStream
=
null
;
}
}
/// <summary>
...
...
@@ -318,39 +318,39 @@ public void Close()
/// <returns>List of all entries in directory</returns>
public
List
<
ZipFileEntry
>
ReadCentralDir
()
{
if
(
this
.
C
entralDirImage
==
null
)
if
(
this
.
c
entralDirImage
==
null
)
{
throw
new
InvalidOperationException
(
"Central directory currently does not exist"
);
}
List
<
ZipFileEntry
>
result
=
new
List
<
ZipFileEntry
>();
for
(
int
pointer
=
0
;
pointer
<
this
.
C
entralDirImage
.
Length
;
)
for
(
int
pointer
=
0
;
pointer
<
this
.
c
entralDirImage
.
Length
;
)
{
uint
signature
=
BitConverter
.
ToUInt32
(
this
.
C
entralDirImage
,
pointer
);
uint
signature
=
BitConverter
.
ToUInt32
(
this
.
c
entralDirImage
,
pointer
);
if
(
signature
!=
0x02014b50
)
{
break
;
}
bool
encodeUTF8
=
(
BitConverter
.
ToUInt16
(
this
.
C
entralDirImage
,
pointer
+
8
)
&
0x0800
)
!=
0
;
ushort
method
=
BitConverter
.
ToUInt16
(
this
.
C
entralDirImage
,
pointer
+
10
);
uint
modifyTime
=
BitConverter
.
ToUInt32
(
this
.
C
entralDirImage
,
pointer
+
12
);
uint
crc32
=
BitConverter
.
ToUInt32
(
this
.
C
entralDirImage
,
pointer
+
16
);
uint
comprSize
=
BitConverter
.
ToUInt32
(
this
.
C
entralDirImage
,
pointer
+
20
);
uint
fileSize
=
BitConverter
.
ToUInt32
(
this
.
C
entralDirImage
,
pointer
+
24
);
ushort
filenameSize
=
BitConverter
.
ToUInt16
(
this
.
C
entralDirImage
,
pointer
+
28
);
ushort
extraSize
=
BitConverter
.
ToUInt16
(
this
.
C
entralDirImage
,
pointer
+
30
);
ushort
commentSize
=
BitConverter
.
ToUInt16
(
this
.
C
entralDirImage
,
pointer
+
32
);
uint
headerOffset
=
BitConverter
.
ToUInt32
(
this
.
C
entralDirImage
,
pointer
+
42
);
bool
encodeUTF8
=
(
BitConverter
.
ToUInt16
(
this
.
c
entralDirImage
,
pointer
+
8
)
&
0x0800
)
!=
0
;
ushort
method
=
BitConverter
.
ToUInt16
(
this
.
c
entralDirImage
,
pointer
+
10
);
uint
modifyTime
=
BitConverter
.
ToUInt32
(
this
.
c
entralDirImage
,
pointer
+
12
);
uint
crc32
=
BitConverter
.
ToUInt32
(
this
.
c
entralDirImage
,
pointer
+
16
);
uint
comprSize
=
BitConverter
.
ToUInt32
(
this
.
c
entralDirImage
,
pointer
+
20
);
uint
fileSize
=
BitConverter
.
ToUInt32
(
this
.
c
entralDirImage
,
pointer
+
24
);
ushort
filenameSize
=
BitConverter
.
ToUInt16
(
this
.
c
entralDirImage
,
pointer
+
28
);
ushort
extraSize
=
BitConverter
.
ToUInt16
(
this
.
c
entralDirImage
,
pointer
+
30
);
ushort
commentSize
=
BitConverter
.
ToUInt16
(
this
.
c
entralDirImage
,
pointer
+
32
);
uint
headerOffset
=
BitConverter
.
ToUInt32
(
this
.
c
entralDirImage
,
pointer
+
42
);
uint
headerSize
=
(
uint
)(
46
+
filenameSize
+
extraSize
+
commentSize
);
Encoding
encoder
=
encodeUTF8
?
Encoding
.
UTF8
:
D
efaultEncoding
;
Encoding
encoder
=
encodeUTF8
?
Encoding
.
UTF8
:
_d
efaultEncoding
;
ZipFileEntry
zfe
=
new
ZipFileEntry
{
Method
=
(
Compression
)
method
,
FilenameInZip
=
encoder
.
GetString
(
this
.
C
entralDirImage
,
pointer
+
46
,
filenameSize
),
FilenameInZip
=
encoder
.
GetString
(
this
.
c
entralDirImage
,
pointer
+
46
,
filenameSize
),
FileOffset
=
this
.
GetFileOffset
(
headerOffset
),
FileSize
=
fileSize
,
CompressedSize
=
comprSize
,
...
...
@@ -361,7 +361,7 @@ public List<ZipFileEntry> ReadCentralDir()
};
if
(
commentSize
>
0
)
{
zfe
.
Comment
=
encoder
.
GetString
(
this
.
C
entralDirImage
,
pointer
+
46
+
filenameSize
+
extraSize
,
commentSize
);
zfe
.
Comment
=
encoder
.
GetString
(
this
.
c
entralDirImage
,
pointer
+
46
+
filenameSize
+
extraSize
,
commentSize
);
}
result
.
Add
(
zfe
);
...
...
@@ -420,8 +420,8 @@ public bool ExtractFile(ZipFileEntry _zfe, Stream _stream)
// check signature
byte
[]
signature
=
new
byte
[
4
];
this
.
Z
ipFileStream
.
Seek
(
_zfe
.
HeaderOffset
,
SeekOrigin
.
Begin
);
this
.
Z
ipFileStream
.
Read
(
signature
,
0
,
4
);
this
.
z
ipFileStream
.
Seek
(
_zfe
.
HeaderOffset
,
SeekOrigin
.
Begin
);
this
.
z
ipFileStream
.
Read
(
signature
,
0
,
4
);
if
(
BitConverter
.
ToUInt32
(
signature
,
0
)
!=
0x04034b50
)
{
return
false
;
...
...
@@ -431,11 +431,11 @@ public bool ExtractFile(ZipFileEntry _zfe, Stream _stream)
Stream
inStream
;
if
(
_zfe
.
Method
==
Compression
.
Store
)
{
inStream
=
this
.
Z
ipFileStream
;
inStream
=
this
.
z
ipFileStream
;
}
else
if
(
_zfe
.
Method
==
Compression
.
Deflate
)
{
inStream
=
new
DeflateStream
(
this
.
Z
ipFileStream
,
CompressionMode
.
Decompress
,
true
);
inStream
=
new
DeflateStream
(
this
.
z
ipFileStream
,
CompressionMode
.
Decompress
,
true
);
}
else
{
...
...
@@ -444,7 +444,7 @@ public bool ExtractFile(ZipFileEntry _zfe, Stream _stream)
// Buffered copy
byte
[]
buffer
=
new
byte
[
16384
];
this
.
Z
ipFileStream
.
Seek
(
_zfe
.
FileOffset
,
SeekOrigin
.
Begin
);
this
.
z
ipFileStream
.
Seek
(
_zfe
.
FileOffset
,
SeekOrigin
.
Begin
);
uint
bytesPending
=
_zfe
.
FileSize
;
while
(
bytesPending
>
0
)
{
...
...
@@ -470,7 +470,7 @@ public bool ExtractFile(ZipFileEntry _zfe, Stream _stream)
/// <remarks>This method only works for storage of type FileStream</remarks>
public
static
bool
RemoveEntries
(
ref
ZipStorer
_zip
,
List
<
ZipFileEntry
>
_zfes
)
{
if
(!(
_zip
.
Z
ipFileStream
is
FileStream
))
if
(!(
_zip
.
z
ipFileStream
is
FileStream
))
{
throw
new
InvalidOperationException
(
"RemoveEntries is allowed just over streams of type FileStream"
);
}
...
...
@@ -500,10 +500,10 @@ public static bool RemoveEntries(ref ZipStorer _zip, List<ZipFileEntry> _zfes)
_zip
.
Close
();
tempZip
.
Close
();
File
.
Delete
(
_zip
.
F
ileName
);
File
.
Move
(
tempZipName
,
_zip
.
F
ileName
);
File
.
Delete
(
_zip
.
f
ileName
);
File
.
Move
(
tempZipName
,
_zip
.
f
ileName
);
_zip
=
ZipStorer
.
Open
(
_zip
.
FileName
,
_zip
.
A
ccess
);
_zip
=
ZipStorer
.
Open
(
_zip
.
fileName
,
_zip
.
a
ccess
);
}
catch
{
...
...
@@ -531,10 +531,10 @@ private uint GetFileOffset(uint _headerOffset)
{
byte
[]
buffer
=
new
byte
[
2
];
this
.
Z
ipFileStream
.
Seek
(
_headerOffset
+
26
,
SeekOrigin
.
Begin
);
this
.
Z
ipFileStream
.
Read
(
buffer
,
0
,
2
);
this
.
z
ipFileStream
.
Seek
(
_headerOffset
+
26
,
SeekOrigin
.
Begin
);
this
.
z
ipFileStream
.
Read
(
buffer
,
0
,
2
);
ushort
filenameSize
=
BitConverter
.
ToUInt16
(
buffer
,
0
);
this
.
Z
ipFileStream
.
Read
(
buffer
,
0
,
2
);
this
.
z
ipFileStream
.
Read
(
buffer
,
0
,
2
);
ushort
extraSize
=
BitConverter
.
ToUInt16
(
buffer
,
0
);
return
(
uint
)(
30
+
filenameSize
+
extraSize
+
_headerOffset
);
...
...
@@ -557,20 +557,20 @@ extra field (variable size)
*/
private
void
WriteLocalHeader
(
ref
ZipFileEntry
_zfe
)
{
long
pos
=
this
.
Z
ipFileStream
.
Position
;
Encoding
encoder
=
_zfe
.
EncodeUTF8
?
Encoding
.
UTF8
:
D
efaultEncoding
;
long
pos
=
this
.
z
ipFileStream
.
Position
;
Encoding
encoder
=
_zfe
.
EncodeUTF8
?
Encoding
.
UTF8
:
_d
efaultEncoding
;
byte
[]
encodedFilename
=
encoder
.
GetBytes
(
_zfe
.
FilenameInZip
);
this
.
Z
ipFileStream
.
Write
(
new
byte
[]
{
80
,
75
,
3
,
4
,
20
,
0
},
0
,
6
);
// No extra header
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)(
_zfe
.
EncodeUTF8
?
0x0800
:
0
)),
0
,
2
);
// filename and comment encoding
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
_zfe
.
Method
),
0
,
2
);
// zipping method
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
this
.
DateTimeToDosTime
(
_zfe
.
ModifyTime
)),
0
,
4
);
// zipping date and time
this
.
Z
ipFileStream
.
Write
(
new
byte
[]
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
12
);
// unused CRC, un/compressed size, updated later
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
encodedFilename
.
Length
),
0
,
2
);
// filename length
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
0
),
0
,
2
);
// extra length
this
.
z
ipFileStream
.
Write
(
new
byte
[]
{
80
,
75
,
3
,
4
,
20
,
0
},
0
,
6
);
// No extra header
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)(
_zfe
.
EncodeUTF8
?
0x0800
:
0
)),
0
,
2
);
// filename and comment encoding
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
_zfe
.
Method
),
0
,
2
);
// zipping method
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
this
.
DateTimeToDosTime
(
_zfe
.
ModifyTime
)),
0
,
4
);
// zipping date and time
this
.
z
ipFileStream
.
Write
(
new
byte
[]
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
12
);
// unused CRC, un/compressed size, updated later
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
encodedFilename
.
Length
),
0
,
2
);
// filename length
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
0
),
0
,
2
);
// extra length
this
.
Z
ipFileStream
.
Write
(
encodedFilename
,
0
,
encodedFilename
.
Length
);
_zfe
.
HeaderSize
=
(
uint
)(
this
.
Z
ipFileStream
.
Position
-
pos
);
this
.
z
ipFileStream
.
Write
(
encodedFilename
,
0
,
encodedFilename
.
Length
);
_zfe
.
HeaderSize
=
(
uint
)(
this
.
z
ipFileStream
.
Position
-
pos
);
}
/* Central directory's File header:
central file header signature 4 bytes (0x02014b50)
...
...
@@ -597,29 +597,29 @@ file comment (variable size)
*/
private
void
WriteCentralDirRecord
(
ZipFileEntry
_zfe
)
{
Encoding
encoder
=
_zfe
.
EncodeUTF8
?
Encoding
.
UTF8
:
D
efaultEncoding
;
Encoding
encoder
=
_zfe
.
EncodeUTF8
?
Encoding
.
UTF8
:
_d
efaultEncoding
;
byte
[]
encodedFilename
=
encoder
.
GetBytes
(
_zfe
.
FilenameInZip
);
byte
[]
encodedComment
=
encoder
.
GetBytes
(
_zfe
.
Comment
);
this
.
Z
ipFileStream
.
Write
(
new
byte
[]
{
80
,
75
,
1
,
2
,
23
,
0xB
,
20
,
0
},
0
,
8
);
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)(
_zfe
.
EncodeUTF8
?
0x0800
:
0
)),
0
,
2
);
// filename and comment encoding
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
_zfe
.
Method
),
0
,
2
);
// zipping method
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
this
.
DateTimeToDosTime
(
_zfe
.
ModifyTime
)),
0
,
4
);
// zipping date and time
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
_zfe
.
Crc32
),
0
,
4
);
// file CRC
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
_zfe
.
CompressedSize
),
0
,
4
);
// compressed file size
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
_zfe
.
FileSize
),
0
,
4
);
// uncompressed file size
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
encodedFilename
.
Length
),
0
,
2
);
// Filename in zip
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
0
),
0
,
2
);
// extra length
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
encodedComment
.
Length
),
0
,
2
);
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
0
),
0
,
2
);
// disk=0
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
0
),
0
,
2
);
// file type: binary
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
0
),
0
,
2
);
// Internal file attributes
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
0x8100
),
0
,
2
);
// External file attributes (normal/readable)
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
_zfe
.
HeaderOffset
),
0
,
4
);
// Offset of header
this
.
Z
ipFileStream
.
Write
(
encodedFilename
,
0
,
encodedFilename
.
Length
);
this
.
Z
ipFileStream
.
Write
(
encodedComment
,
0
,
encodedComment
.
Length
);
this
.
z
ipFileStream
.
Write
(
new
byte
[]
{
80
,
75
,
1
,
2
,
23
,
0xB
,
20
,
0
},
0
,
8
);
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)(
_zfe
.
EncodeUTF8
?
0x0800
:
0
)),
0
,
2
);
// filename and comment encoding
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
_zfe
.
Method
),
0
,
2
);
// zipping method
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
this
.
DateTimeToDosTime
(
_zfe
.
ModifyTime
)),
0
,
4
);
// zipping date and time
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
_zfe
.
Crc32
),
0
,
4
);
// file CRC
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
_zfe
.
CompressedSize
),
0
,
4
);
// compressed file size
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
_zfe
.
FileSize
),
0
,
4
);
// uncompressed file size
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
encodedFilename
.
Length
),
0
,
2
);
// Filename in zip
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
0
),
0
,
2
);
// extra length
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
encodedComment
.
Length
),
0
,
2
);
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
0
),
0
,
2
);
// disk=0
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
0
),
0
,
2
);
// file type: binary
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
0
),
0
,
2
);
// Internal file attributes
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
0x8100
),
0
,
2
);
// External file attributes (normal/readable)
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
_zfe
.
HeaderOffset
),
0
,
4
);
// Offset of header
this
.
z
ipFileStream
.
Write
(
encodedFilename
,
0
,
encodedFilename
.
Length
);
this
.
z
ipFileStream
.
Write
(
encodedComment
,
0
,
encodedComment
.
Length
);
}
/* End of central dir record:
end of central dir signature 4 bytes (0x06054b50)
...
...
@@ -639,16 +639,16 @@ zipfile comment (variable size)
*/
private
void
WriteEndRecord
(
uint
_size
,
uint
_offset
)
{
Encoding
encoder
=
this
.
EncodeUTF8
?
Encoding
.
UTF8
:
D
efaultEncoding
;
byte
[]
encodedComment
=
encoder
.
GetBytes
(
this
.
C
omment
);
this
.
Z
ipFileStream
.
Write
(
new
byte
[]
{
80
,
75
,
5
,
6
,
0
,
0
,
0
,
0
},
0
,
8
);
this
.
ZipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
this
.
Files
.
Count
+
this
.
E
xistingFiles
),
0
,
2
);
this
.
ZipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
this
.
Files
.
Count
+
this
.
E
xistingFiles
),
0
,
2
);
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
_size
),
0
,
4
);
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
_offset
),
0
,
4
);
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
encodedComment
.
Length
),
0
,
2
);
this
.
Z
ipFileStream
.
Write
(
encodedComment
,
0
,
encodedComment
.
Length
);
Encoding
encoder
=
this
.
EncodeUTF8
?
Encoding
.
UTF8
:
_d
efaultEncoding
;
byte
[]
encodedComment
=
encoder
.
GetBytes
(
this
.
c
omment
);
this
.
z
ipFileStream
.
Write
(
new
byte
[]
{
80
,
75
,
5
,
6
,
0
,
0
,
0
,
0
},
0
,
8
);
this
.
zipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
this
.
files
.
Count
+
this
.
e
xistingFiles
),
0
,
2
);
this
.
zipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
this
.
files
.
Count
+
this
.
e
xistingFiles
),
0
,
2
);
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
_size
),
0
,
4
);
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
_offset
),
0
,
4
);
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
encodedComment
.
Length
),
0
,
2
);
this
.
z
ipFileStream
.
Write
(
encodedComment
,
0
,
encodedComment
.
Length
);
}
// Copies all source file into storage file
private
void
Store
(
ref
ZipFileEntry
_zfe
,
Stream
_source
)
...
...
@@ -658,16 +658,16 @@ private void Store(ref ZipFileEntry _zfe, Stream _source)
uint
totalRead
=
0
;
Stream
outStream
;
long
posStart
=
this
.
Z
ipFileStream
.
Position
;
long
posStart
=
this
.
z
ipFileStream
.
Position
;
long
sourceStart
=
_source
.
Position
;
if
(
_zfe
.
Method
==
Compression
.
Store
)
{
outStream
=
this
.
Z
ipFileStream
;
outStream
=
this
.
z
ipFileStream
;
}
else
{
outStream
=
new
DeflateStream
(
this
.
Z
ipFileStream
,
CompressionMode
.
Compress
,
true
);
outStream
=
new
DeflateStream
(
this
.
z
ipFileStream
,
CompressionMode
.
Compress
,
true
);
}
_zfe
.
Crc32
=
0
^
0xffffffff
;
...
...
@@ -682,7 +682,7 @@ private void Store(ref ZipFileEntry _zfe, Stream _source)
for
(
uint
i
=
0
;
i
<
bytesRead
;
i
++)
{
_zfe
.
Crc32
=
ZipStorer
.
C
rcTable
[(
_zfe
.
Crc32
^
buffer
[
i
])
&
0xFF
]
^
(
_zfe
.
Crc32
>>
8
);
_zfe
.
Crc32
=
ZipStorer
.
_c
rcTable
[(
_zfe
.
Crc32
^
buffer
[
i
])
&
0xFF
]
^
(
_zfe
.
Crc32
>>
8
);
}
}
}
while
(
bytesRead
==
buffer
.
Length
);
...
...
@@ -695,15 +695,15 @@ private void Store(ref ZipFileEntry _zfe, Stream _source)
_zfe
.
Crc32
^=
0xffffffff
;
_zfe
.
FileSize
=
totalRead
;
_zfe
.
CompressedSize
=
(
uint
)(
this
.
Z
ipFileStream
.
Position
-
posStart
);
_zfe
.
CompressedSize
=
(
uint
)(
this
.
z
ipFileStream
.
Position
-
posStart
);
// Verify for real compression
if
(
_zfe
.
Method
==
Compression
.
Deflate
&&
!
this
.
ForceDeflating
&&
_source
.
CanSeek
&&
_zfe
.
CompressedSize
>
_zfe
.
FileSize
)
{
// Start operation again with Store algorithm
_zfe
.
Method
=
Compression
.
Store
;
this
.
Z
ipFileStream
.
Position
=
posStart
;
this
.
Z
ipFileStream
.
SetLength
(
posStart
);
this
.
z
ipFileStream
.
Position
=
posStart
;
this
.
z
ipFileStream
.
SetLength
(
posStart
);
_source
.
Position
=
sourceStart
;
this
.
Store
(
ref
_zfe
,
_source
);
}
...
...
@@ -749,17 +749,17 @@ private DateTime DosTimeToDateTime(uint _dt)
*/
private
void
UpdateCrcAndSizes
(
ref
ZipFileEntry
_zfe
)
{
long
lastPos
=
this
.
Z
ipFileStream
.
Position
;
// remember position
long
lastPos
=
this
.
z
ipFileStream
.
Position
;
// remember position
this
.
Z
ipFileStream
.
Position
=
_zfe
.
HeaderOffset
+
8
;
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
_zfe
.
Method
),
0
,
2
);
// zipping method
this
.
z
ipFileStream
.
Position
=
_zfe
.
HeaderOffset
+
8
;
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
((
ushort
)
_zfe
.
Method
),
0
,
2
);
// zipping method
this
.
Z
ipFileStream
.
Position
=
_zfe
.
HeaderOffset
+
14
;
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
_zfe
.
Crc32
),
0
,
4
);
// Update CRC
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
_zfe
.
CompressedSize
),
0
,
4
);
// Compressed size
this
.
Z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
_zfe
.
FileSize
),
0
,
4
);
// Uncompressed size
this
.
z
ipFileStream
.
Position
=
_zfe
.
HeaderOffset
+
14
;
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
_zfe
.
Crc32
),
0
,
4
);
// Update CRC
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
_zfe
.
CompressedSize
),
0
,
4
);
// Compressed size
this
.
z
ipFileStream
.
Write
(
BitConverter
.
GetBytes
(
_zfe
.
FileSize
),
0
,
4
);
// Uncompressed size
this
.
Z
ipFileStream
.
Position
=
lastPos
;
// restore position
this
.
z
ipFileStream
.
Position
=
lastPos
;
// restore position
}
// Replaces backslashes with slashes to store in zip header
private
string
NormalizedFilename
(
string
_filename
)
...
...
@@ -777,22 +777,22 @@ private string NormalizedFilename(string _filename)
// Reads the end-of-central-directory record
private
bool
ReadFileInfo
()
{
if
(
this
.
Z
ipFileStream
.
Length
<
22
)
if
(
this
.
z
ipFileStream
.
Length
<
22
)
{
return
false
;
}
try
{
this
.
Z
ipFileStream
.
Seek
(-
17
,
SeekOrigin
.
End
);
BinaryReader
br
=
new
BinaryReader
(
this
.
Z
ipFileStream
);
this
.
z
ipFileStream
.
Seek
(-
17
,
SeekOrigin
.
End
);
BinaryReader
br
=
new
BinaryReader
(
this
.
z
ipFileStream
);
do
{
this
.
Z
ipFileStream
.
Seek
(-
5
,
SeekOrigin
.
Current
);
this
.
z
ipFileStream
.
Seek
(-
5
,
SeekOrigin
.
Current
);
uint
sig
=
br
.
ReadUInt32
();
if
(
sig
==
0x06054b50
)
{
this
.
Z
ipFileStream
.
Seek
(
6
,
SeekOrigin
.
Current
);
this
.
z
ipFileStream
.
Seek
(
6
,
SeekOrigin
.
Current
);
ushort
entries
=
br
.
ReadUInt16
();
int
centralSize
=
br
.
ReadInt32
();
...
...
@@ -800,22 +800,22 @@ private bool ReadFileInfo()
ushort
commentSize
=
br
.
ReadUInt16
();
// check if comment field is the very last data in file
if
(
this
.
ZipFileStream
.
Position
+
commentSize
!=
this
.
Z
ipFileStream
.
Length
)
if
(
this
.
zipFileStream
.
Position
+
commentSize
!=
this
.
z
ipFileStream
.
Length
)
{
return
false
;
}
// Copy entire central directory to a memory buffer
this
.
E
xistingFiles
=
entries
;
this
.
C
entralDirImage
=
new
byte
[
centralSize
];
this
.
Z
ipFileStream
.
Seek
(
centralDirOffset
,
SeekOrigin
.
Begin
);
this
.
ZipFileStream
.
Read
(
this
.
C
entralDirImage
,
0
,
centralSize
);
this
.
e
xistingFiles
=
entries
;
this
.
c
entralDirImage
=
new
byte
[
centralSize
];
this
.
z
ipFileStream
.
Seek
(
centralDirOffset
,
SeekOrigin
.
Begin
);
this
.
zipFileStream
.
Read
(
this
.
c
entralDirImage
,
0
,
centralSize
);
// Leave the pointer at the begining of central dir, to append new files
this
.
Z
ipFileStream
.
Seek
(
centralDirOffset
,
SeekOrigin
.
Begin
);
this
.
z
ipFileStream
.
Seek
(
centralDirOffset
,
SeekOrigin
.
Begin
);
return
true
;
}
}
while
(
this
.
Z
ipFileStream
.
Position
>
0
);
}
while
(
this
.
z
ipFileStream
.
Position
>
0
);
}
catch
{
}
...
...
DataEditorX/Config/DataManager.cs
View file @
2abe825f
...
...
@@ -36,7 +36,7 @@ static string reReturn(string content)
text
=
text
.
Replace
(
"\r"
,
"\n"
);
return
text
;
}
public
static
string
s
ubString
(
string
content
,
string
tag
)
public
static
string
S
ubString
(
string
content
,
string
tag
)
{
Regex
reg
=
new
Regex
(
string
.
Format
(
@"{0}{1}\n([\S\s]*?)\n{2}"
,
TAG_START
,
tag
,
TAG_END
),
RegexOptions
.
Multiline
);
Match
mac
=
reg
.
Match
(
reReturn
(
content
));
...
...
@@ -57,7 +57,7 @@ public static string subString(string content, string tag)
/// <returns></returns>
public
static
Dictionary
<
long
,
string
>
Read
(
string
content
,
string
tag
)
{
return
Read
(
s
ubString
(
content
,
tag
));
return
Read
(
S
ubString
(
content
,
tag
));
}
/// <summary>
/// 从文件读取内容,按行读取
...
...
DataEditorX/Config/ImageSet.cs
View file @
2abe825f
...
...
@@ -23,20 +23,20 @@ public class ImageSet
//初始化
void
Init
()
{
this
.
normalArea
=
MyConfig
.
r
eadArea
(
MyConfig
.
TAG_IMAGE_OTHER
);
this
.
normalArea
=
MyConfig
.
R
eadArea
(
MyConfig
.
TAG_IMAGE_OTHER
);
this
.
xyzArea
=
MyConfig
.
r
eadArea
(
MyConfig
.
TAG_IMAGE_XYZ
);
this
.
xyzArea
=
MyConfig
.
R
eadArea
(
MyConfig
.
TAG_IMAGE_XYZ
);
this
.
pendulumArea
=
MyConfig
.
r
eadArea
(
MyConfig
.
TAG_IMAGE_PENDULUM
);
this
.
pendulumArea
=
MyConfig
.
R
eadArea
(
MyConfig
.
TAG_IMAGE_PENDULUM
);
int
[]
ints
=
MyConfig
.
r
eadIntegers
(
MyConfig
.
TAG_IMAGE_SIZE
,
4
);
int
[]
ints
=
MyConfig
.
R
eadIntegers
(
MyConfig
.
TAG_IMAGE_SIZE
,
4
);
this
.
w
=
ints
[
0
];
this
.
h
=
ints
[
1
];
this
.
W
=
ints
[
2
];
this
.
H
=
ints
[
3
];
this
.
quilty
=
MyConfig
.
r
eadInteger
(
MyConfig
.
TAG_IMAGE_QUILTY
,
95
);
this
.
quilty
=
MyConfig
.
R
eadInteger
(
MyConfig
.
TAG_IMAGE_QUILTY
,
95
);
}
/// <summary>
/// jpeg质量
...
...
DataEditorX/Config/MyConfig.cs
View file @
2abe825f
...
...
@@ -181,7 +181,7 @@ public class MyConfig : XMLReader
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public
static
string
r
eadString
(
string
key
)
public
static
string
R
eadString
(
string
key
)
{
return
GetAppConfig
(
key
);
}
...
...
@@ -191,9 +191,9 @@ public static string readString(string key)
/// <param name="key"></param>
/// <param name="def"></param>
/// <returns></returns>
public
static
int
r
eadInteger
(
string
key
,
int
def
)
public
static
int
R
eadInteger
(
string
key
,
int
def
)
{
if
(
int
.
TryParse
(
r
eadString
(
key
),
out
int
i
))
if
(
int
.
TryParse
(
R
eadString
(
key
),
out
int
i
))
{
return
i
;
}
...
...
@@ -206,9 +206,9 @@ public static int readInteger(string key, int def)
/// <param name="key"></param>
/// <param name="def"></param>
/// <returns></returns>
public
static
float
r
eadFloat
(
string
key
,
float
def
)
public
static
float
R
eadFloat
(
string
key
,
float
def
)
{
if
(
float
.
TryParse
(
r
eadString
(
key
),
out
float
i
))
if
(
float
.
TryParse
(
R
eadString
(
key
),
out
float
i
))
{
return
i
;
}
...
...
@@ -221,9 +221,9 @@ public static float readFloat(string key, float def)
/// <param name="key"></param>
/// <param name="length"></param>
/// <returns></returns>
public
static
int
[]
r
eadIntegers
(
string
key
,
int
length
)
public
static
int
[]
R
eadIntegers
(
string
key
,
int
length
)
{
string
temp
=
r
eadString
(
key
);
string
temp
=
R
eadString
(
key
);
int
[]
ints
=
new
int
[
length
];
string
[]
ws
=
string
.
IsNullOrEmpty
(
temp
)
?
null
:
temp
.
Split
(
','
);
...
...
@@ -241,9 +241,9 @@ public static int[] readIntegers(string key, int length)
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public
static
Area
r
eadArea
(
string
key
)
public
static
Area
R
eadArea
(
string
key
)
{
int
[]
ints
=
r
eadIntegers
(
key
,
4
);
int
[]
ints
=
R
eadIntegers
(
key
,
4
);
Area
a
=
new
Area
();
if
(
ints
!=
null
)
{
...
...
@@ -259,9 +259,9 @@ public static Area readArea(string key)
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public
static
bool
r
eadBoolean
(
string
key
,
bool
def
=
false
)
public
static
bool
R
eadBoolean
(
string
key
,
bool
def
=
false
)
{
string
val
=
r
eadString
(
key
);
string
val
=
R
eadString
(
key
);
if
(
"true"
.
Equals
(
val
,
StringComparison
.
OrdinalIgnoreCase
)){
return
true
;
}
...
...
@@ -280,7 +280,7 @@ public static bool readBoolean(string key,bool def=false)
/// <returns></returns>
public
static
string
GetLanguageFile
(
string
path
)
{
if
(
r
eadBoolean
(
TAG_CHECK_SYSLANG
)
&&
Directory
.
Exists
(
path
))
if
(
R
eadBoolean
(
TAG_CHECK_SYSLANG
)
&&
Directory
.
Exists
(
path
))
{
Save
(
TAG_CHECK_SYSLANG
,
"false"
);
string
[]
words
=
CultureInfo
.
InstalledUICulture
.
EnglishName
.
Split
(
' '
);
...
...
@@ -288,7 +288,7 @@ public static string GetLanguageFile(string path)
string
[]
files
=
Directory
.
GetFiles
(
path
);
foreach
(
string
file
in
files
)
{
string
name
=
MyPath
.
g
etFullFileName
(
MyConfig
.
TAG_LANGUAGE
,
file
);
string
name
=
MyPath
.
G
etFullFileName
(
MyConfig
.
TAG_LANGUAGE
,
file
);
if
(
string
.
IsNullOrEmpty
(
name
))
{
continue
;
...
...
@@ -301,7 +301,7 @@ public static string GetLanguageFile(string path)
}
}
}
return
MyPath
.
Combine
(
path
,
MyPath
.
g
etFileName
(
MyConfig
.
TAG_LANGUAGE
,
GetAppConfig
(
TAG_LANGUAGE
)));
return
MyPath
.
Combine
(
path
,
MyPath
.
G
etFileName
(
MyConfig
.
TAG_LANGUAGE
,
GetAppConfig
(
TAG_LANGUAGE
)));
}
/// <summary>
/// 卡片信息配置文件名
...
...
@@ -310,7 +310,7 @@ public static string GetLanguageFile(string path)
/// <returns></returns>
public
static
string
GetCardInfoFile
(
string
path
)
{
return
MyPath
.
Combine
(
path
,
MyPath
.
g
etFileName
(
MyConfig
.
TAG_CARDINFO
,
GetAppConfig
(
TAG_LANGUAGE
)));
return
MyPath
.
Combine
(
path
,
MyPath
.
G
etFileName
(
MyConfig
.
TAG_CARDINFO
,
GetAppConfig
(
TAG_LANGUAGE
)));
}
/// <summary>
/// 发送消息打开文件
...
...
DataEditorX/Controls/FastColoredTextBoxEx.cs
View file @
2abe825f
...
...
@@ -10,18 +10,21 @@
using
System.Drawing.Drawing2D
;
using
System.Windows.Forms
;
using
System.Collections.Generic
;
using
System.Text
;
namespace
FastColoredTextBoxNS
{
public
class
FastColoredTextBoxEx
:
FastColoredTextBox
{
Point
lastMouseCoord
;
{
private
Label
lbTooltip
;
Point
lastMouseCoord
;
public
FastColoredTextBoxEx
()
:
base
()
{
this
.
SyntaxHighlighter
=
new
MySyntaxHighlighter
();
this
.
InitializeComponent
();
this
.
ToolTipDelay
=
1
;
this
.
TextChangedDelayed
+=
this
.
FctbTextChangedDelayed
;
}
public
new
event
EventHandler
<
ToolTipNeededEventArgs
>
ToolTipNeeded
;
protected
override
void
OnMouseMove
(
MouseEventArgs
e
)
...
...
@@ -61,13 +64,16 @@ protected override void OnToolTip()
if
(
ea
.
ToolTipText
!=
null
)
{
//show tooltip
this
.
ToolTip
.
ToolTipTitle
=
ea
.
ToolTipTitle
;
this
.
ToolTip
.
ToolTipIcon
=
ea
.
ToolTipIcon
;
lbTooltip
.
Text
=
$"
{
ea
.
ToolTipTitle
}
\r\n\r\n
{
ea
.
ToolTipText
}
"
;
lbTooltip
.
Location
=
new
Point
(
this
.
Size
.
Width
-
500
,
this
.
lastMouseCoord
.
Y
+
this
.
CharHeight
);
//this.ToolTip.ToolTipTitle = ea.ToolTipTitle;
//this.ToolTip.ToolTipIcon = ea.ToolTipIcon;
//ToolTip.SetToolTip(this, ea.ToolTipText);
this
.
ToolTip
.
Show
(
ea
.
ToolTipText
,
this
,
new
Point
(
this
.
lastMouseCoord
.
X
,
this
.
lastMouseCoord
.
Y
+
this
.
CharHeight
));
}
}
//this.ToolTip.Show(ea.ToolTipText, this, new Point(this.lastMouseCoord.X, this.lastMouseCoord.Y + this.CharHeight));
}
}
//高亮当前词
void
FctbTextChangedDelayed
(
object
sender
,
TextChangedEventArgs
e
)
{
...
...
@@ -101,5 +107,36 @@ void FctbTextChangedDelayed(object sender, TextChangedEventArgs e)
lastNonEmptyLine
=
i
;
}
}
}
private
void
InitializeComponent
()
{
this
.
lbTooltip
=
new
System
.
Windows
.
Forms
.
Label
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
)).
BeginInit
();
this
.
SuspendLayout
();
//
// lbTooltip
//
this
.
lbTooltip
.
AutoSize
=
true
;
this
.
lbTooltip
.
BackColor
=
System
.
Drawing
.
SystemColors
.
Desktop
;
this
.
lbTooltip
.
Font
=
new
System
.
Drawing
.
Font
(
"微软雅黑"
,
15.75F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
0
)));
this
.
lbTooltip
.
ForeColor
=
System
.
Drawing
.
SystemColors
.
Control
;
this
.
lbTooltip
.
Location
=
new
System
.
Drawing
.
Point
(
221
,
117
);
this
.
lbTooltip
.
MaximumSize
=
new
System
.
Drawing
.
Size
(
480
,
0
);
this
.
lbTooltip
.
Name
=
"lbTooltip"
;
this
.
lbTooltip
.
Size
=
new
System
.
Drawing
.
Size
(
0
,
28
);
this
.
lbTooltip
.
TabIndex
=
1
;
//
// FastColoredTextBoxEx
//
this
.
AutoScrollMinSize
=
new
System
.
Drawing
.
Size
(
27
,
14
);
this
.
BackColor
=
System
.
Drawing
.
SystemColors
.
Control
;
this
.
Controls
.
Add
(
this
.
lbTooltip
);
this
.
Name
=
"FastColoredTextBoxEx"
;
this
.
Size
=
new
System
.
Drawing
.
Size
(
584
,
327
);
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
)).
EndInit
();
this
.
ResumeLayout
(
false
);
this
.
PerformLayout
();
}
}
}
DataEditorX/Controls/FastColoredTextBoxEx.resx
0 → 100644
View file @
2abe825f
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema
id=
"root"
xmlns=
""
xmlns:xsd=
"http://www.w3.org/2001/XMLSchema"
xmlns:msdata=
"urn:schemas-microsoft-com:xml-msdata"
>
<xsd:import
namespace=
"http://www.w3.org/XML/1998/namespace"
/>
<xsd:element
name=
"root"
msdata:IsDataSet=
"true"
>
<xsd:complexType>
<xsd:choice
maxOccurs=
"unbounded"
>
<xsd:element
name=
"metadata"
>
<xsd:complexType>
<xsd:sequence>
<xsd:element
name=
"value"
type=
"xsd:string"
minOccurs=
"0"
/>
</xsd:sequence>
<xsd:attribute
name=
"name"
use=
"required"
type=
"xsd:string"
/>
<xsd:attribute
name=
"type"
type=
"xsd:string"
/>
<xsd:attribute
name=
"mimetype"
type=
"xsd:string"
/>
<xsd:attribute
ref=
"xml:space"
/>
</xsd:complexType>
</xsd:element>
<xsd:element
name=
"assembly"
>
<xsd:complexType>
<xsd:attribute
name=
"alias"
type=
"xsd:string"
/>
<xsd:attribute
name=
"name"
type=
"xsd:string"
/>
</xsd:complexType>
</xsd:element>
<xsd:element
name=
"data"
>
<xsd:complexType>
<xsd:sequence>
<xsd:element
name=
"value"
type=
"xsd:string"
minOccurs=
"0"
msdata:Ordinal=
"1"
/>
<xsd:element
name=
"comment"
type=
"xsd:string"
minOccurs=
"0"
msdata:Ordinal=
"2"
/>
</xsd:sequence>
<xsd:attribute
name=
"name"
type=
"xsd:string"
use=
"required"
msdata:Ordinal=
"1"
/>
<xsd:attribute
name=
"type"
type=
"xsd:string"
msdata:Ordinal=
"3"
/>
<xsd:attribute
name=
"mimetype"
type=
"xsd:string"
msdata:Ordinal=
"4"
/>
<xsd:attribute
ref=
"xml:space"
/>
</xsd:complexType>
</xsd:element>
<xsd:element
name=
"resheader"
>
<xsd:complexType>
<xsd:sequence>
<xsd:element
name=
"value"
type=
"xsd:string"
minOccurs=
"0"
msdata:Ordinal=
"1"
/>
</xsd:sequence>
<xsd:attribute
name=
"name"
type=
"xsd:string"
use=
"required"
/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader
name=
"resmimetype"
>
<value>
text/microsoft-resx
</value>
</resheader>
<resheader
name=
"version"
>
<value>
2.0
</value>
</resheader>
<resheader
name=
"reader"
>
<value>
System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader
name=
"writer"
>
<value>
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
</value>
</resheader>
</root>
\ No newline at end of file
DataEditorX/Controls/History.cs
View file @
2abe825f
...
...
@@ -76,9 +76,11 @@ void AddHistorys(string[] lines)
}
public
void
AddHistory
(
string
file
)
{
List
<
string
>
tmplist
=
new
List
<
string
>();
//添加到开始
tmplist
.
Add
(
file
);
List
<
string
>
tmplist
=
new
List
<
string
>
{
//添加到开始
file
};
//添加旧记录
tmplist
.
AddRange
(
this
.
cdbhistory
.
ToArray
());
tmplist
.
AddRange
(
this
.
luahistory
.
ToArray
());
...
...
DataEditorX/Core/CardEdit.cs
View file @
2abe825f
...
...
@@ -29,12 +29,10 @@ public CardEdit(IDataForm dataform)
//添加
public
class
AddCommand
:
IBackableCommand
{
private
string
_undoSQL
;
readonly
CardEdit
cardedit
;
private
string
undoSQL
;
readonly
IDataForm
dataform
;
public
AddCommand
(
CardEdit
cardedit
)
{
this
.
cardedit
=
cardedit
;
this
.
dataform
=
cardedit
.
dataform
;
}
...
...
@@ -64,7 +62,7 @@ public bool Excute(params object[] args)
DataBase
.
GetInsertSQL
(
c
,
true
))
>=
2
)
{
MyMsg
.
Show
(
LMSG
.
AddSucceed
);
this
.
_
undoSQL
=
DataBase
.
GetDeleteSQL
(
c
);
this
.
undoSQL
=
DataBase
.
GetDeleteSQL
(
c
);
this
.
dataform
.
Search
(
true
);
this
.
dataform
.
SetCard
(
c
);
return
true
;
...
...
@@ -74,7 +72,7 @@ public bool Excute(params object[] args)
}
public
void
Undo
()
{
DataBase
.
Command
(
this
.
dataform
.
GetOpenFile
(),
this
.
_
undoSQL
);
DataBase
.
Command
(
this
.
dataform
.
GetOpenFile
(),
this
.
undoSQL
);
}
public
object
Clone
()
...
...
@@ -88,16 +86,14 @@ public object Clone()
//修改
public
class
ModCommand
:
IBackableCommand
{
private
string
_
undoSQL
;
private
string
undoSQL
;
private
bool
modifiled
=
false
;
private
long
oldid
;
private
long
newid
;
private
bool
delold
;
readonly
CardEdit
cardedit
;
readonly
IDataForm
dataform
;
public
ModCommand
(
CardEdit
cardedit
)
{
this
.
cardedit
=
cardedit
;
this
.
dataform
=
cardedit
.
dataform
;
}
...
...
@@ -138,12 +134,12 @@ public bool Excute(params object[] args)
}
else
{
//删除成功,添加还原sql
this
.
_
undoSQL
=
DataBase
.
GetDeleteSQL
(
c
)
+
DataBase
.
GetInsertSQL
(
oldCard
,
false
);
this
.
undoSQL
=
DataBase
.
GetDeleteSQL
(
c
)
+
DataBase
.
GetInsertSQL
(
oldCard
,
false
);
}
}
else
{
this
.
_
undoSQL
=
DataBase
.
GetDeleteSQL
(
c
);
//还原就是删除
this
.
undoSQL
=
DataBase
.
GetDeleteSQL
(
c
);
//还原就是删除
}
//如果删除旧卡片,则把资源修改名字,否则复制资源
if
(
modfiles
)
...
...
@@ -166,7 +162,7 @@ public bool Excute(params object[] args)
else
{
//更新数据
sql
=
DataBase
.
GetUpdateSQL
(
c
);
this
.
_
undoSQL
=
DataBase
.
GetUpdateSQL
(
oldCard
);
this
.
undoSQL
=
DataBase
.
GetUpdateSQL
(
oldCard
);
}
if
(
DataBase
.
Command
(
this
.
dataform
.
GetOpenFile
(),
sql
)
>
0
)
{
...
...
@@ -185,7 +181,7 @@ public bool Excute(params object[] args)
public
void
Undo
()
{
DataBase
.
Command
(
this
.
dataform
.
GetOpenFile
(),
this
.
_
undoSQL
);
DataBase
.
Command
(
this
.
dataform
.
GetOpenFile
(),
this
.
undoSQL
);
if
(
this
.
modifiled
)
{
if
(
this
.
delold
)
...
...
@@ -210,12 +206,10 @@ public object Clone()
//删除
public
class
DelCommand
:
IBackableCommand
{
private
string
_undoSQL
;
readonly
CardEdit
cardedit
;
private
string
undoSQL
;
readonly
IDataForm
dataform
;
public
DelCommand
(
CardEdit
cardedit
)
{
this
.
cardedit
=
cardedit
;
this
.
dataform
=
cardedit
.
dataform
;
}
...
...
@@ -255,7 +249,7 @@ public bool Excute(params object[] args)
{
MyMsg
.
Show
(
LMSG
.
DeleteSucceed
);
this
.
dataform
.
Search
(
true
);
this
.
_
undoSQL
=
undo
;
this
.
undoSQL
=
undo
;
return
true
;
}
else
...
...
@@ -267,7 +261,7 @@ public bool Excute(params object[] args)
}
public
void
Undo
()
{
DataBase
.
Command
(
this
.
dataform
.
GetOpenFile
(),
this
.
_
undoSQL
);
DataBase
.
Command
(
this
.
dataform
.
GetOpenFile
(),
this
.
undoSQL
);
}
public
object
Clone
()
...
...
@@ -354,9 +348,9 @@ public bool OpenScript(bool openinthis, string addrequire)
public
class
CopyCommand
:
IBackableCommand
{
bool
copied
=
false
;
Card
[]
N
ewCards
;
Card
[]
n
ewCards
;
bool
replace
;
Card
[]
O
ldCards
;
Card
[]
o
ldCards
;
readonly
CardEdit
cardedit
;
readonly
IDataForm
dataform
;
public
CopyCommand
(
CardEdit
cardedit
)
...
...
@@ -406,15 +400,15 @@ public bool Excute(params object[] args)
}
DataBase
.
CopyDB
(
this
.
dataform
.
GetOpenFile
(),
!
replace
,
cards
);
this
.
copied
=
true
;
this
.
N
ewCards
=
cards
;
this
.
n
ewCards
=
cards
;
this
.
replace
=
replace
;
this
.
O
ldCards
=
oldcards
;
this
.
o
ldCards
=
oldcards
;
return
true
;
}
public
void
Undo
()
{
DataBase
.
DeleteDB
(
this
.
dataform
.
GetOpenFile
(),
this
.
N
ewCards
);
DataBase
.
CopyDB
(
this
.
dataform
.
GetOpenFile
(),
!
this
.
replace
,
this
.
O
ldCards
);
DataBase
.
DeleteDB
(
this
.
dataform
.
GetOpenFile
(),
this
.
n
ewCards
);
DataBase
.
CopyDB
(
this
.
dataform
.
GetOpenFile
(),
!
this
.
replace
,
this
.
o
ldCards
);
}
public
object
Clone
()
...
...
@@ -422,12 +416,12 @@ public object Clone()
CopyCommand
replica
=
new
CopyCommand
(
this
.
cardedit
)
{
copied
=
this
.
copied
,
NewCards
=
(
Card
[])
this
.
N
ewCards
.
Clone
(),
newCards
=
(
Card
[])
this
.
n
ewCards
.
Clone
(),
replace
=
this
.
replace
};
if
(
this
.
O
ldCards
!=
null
)
if
(
this
.
o
ldCards
!=
null
)
{
replica
.
OldCards
=
(
Card
[])
this
.
O
ldCards
.
Clone
();
replica
.
oldCards
=
(
Card
[])
this
.
o
ldCards
.
Clone
();
}
return
replica
;
...
...
DataEditorX/Core/Info/CardLink.cs
View file @
2abe825f
...
...
@@ -30,7 +30,7 @@ public static class CardLink
public
const
int
Up
=
0x80
;
public
const
int
UpRight
=
0x100
;
public
static
bool
i
sLink
(
int
marks
,
int
mark
){
public
static
bool
I
sLink
(
int
marks
,
int
mark
){
return
(
marks
&
mark
)
==
mark
;
}
}
...
...
DataEditorX/Core/Mse/CardPack.cs
View file @
2abe825f
...
...
@@ -17,10 +17,10 @@ public class CardPack
{
public
CardPack
(
long
id
)
{
this
.
card_i
d
=
id
;
this
.
CardI
d
=
id
;
}
public
long
card_i
d
{
public
long
CardI
d
{
get
;
private
set
;
}
...
...
@@ -29,7 +29,7 @@ public CardPack(long id)
public
string
rarity
;
public
string
date
;
public
string
g
etMseRarity
(){
public
string
G
etMseRarity
(){
if
(
this
.
rarity
==
null
)
{
return
"common"
;
...
...
DataEditorX/Core/Mse/MSEConfig.cs
View file @
2abe825f
...
...
@@ -63,7 +63,7 @@ public class MSEConfig
#
endregion
public
MSEConfig
(
string
path
)
{
this
.
i
nit
(
path
);
this
.
I
nit
(
path
);
}
public
void
SetConfig
(
string
config
,
string
path
)
{
...
...
@@ -75,7 +75,7 @@ public void SetConfig(string config, string path)
this
.
regx_monster
=
"(\\s\\S*?)"
;
this
.
regx_pendulum
=
"(\\s\\S*?)"
;
//设置文件名
this
.
configName
=
MyPath
.
g
etFullFileName
(
MSEConfig
.
TAG
,
config
);
this
.
configName
=
MyPath
.
G
etFullFileName
(
MSEConfig
.
TAG
,
config
);
this
.
replaces
=
new
SortedList
<
string
,
string
>();
...
...
@@ -91,56 +91,56 @@ public void SetConfig(string config, string path)
if
(
line
.
StartsWith
(
TAG_CN2TW
))
{
this
.
Iscn2tw
=
ConfHelper
.
g
etBooleanValue
(
line
);
this
.
Iscn2tw
=
ConfHelper
.
G
etBooleanValue
(
line
);
}
else
if
(
line
.
StartsWith
(
TAG_SPELL
))
{
this
.
str_spell
=
ConfHelper
.
g
etValue
(
line
);
this
.
str_spell
=
ConfHelper
.
G
etValue
(
line
);
}
else
if
(
line
.
StartsWith
(
TAG_HEAD
))
{
this
.
head
=
ConfHelper
.
g
etMultLineValue
(
line
);
this
.
head
=
ConfHelper
.
G
etMultLineValue
(
line
);
}
else
if
(
line
.
StartsWith
(
TAG_END
))
{
this
.
end
=
ConfHelper
.
g
etMultLineValue
(
line
);
this
.
end
=
ConfHelper
.
G
etMultLineValue
(
line
);
}
else
if
(
line
.
StartsWith
(
TAG_TEXT
))
{
this
.
temp_text
=
ConfHelper
.
g
etMultLineValue
(
line
);
this
.
temp_text
=
ConfHelper
.
G
etMultLineValue
(
line
);
}
else
if
(
line
.
StartsWith
(
TAG_TRAP
))
{
this
.
str_trap
=
ConfHelper
.
g
etValue
(
line
);
this
.
str_trap
=
ConfHelper
.
G
etValue
(
line
);
}
else
if
(
line
.
StartsWith
(
TAG_REG_PENDULUM
))
{
this
.
regx_pendulum
=
ConfHelper
.
g
etValue
(
line
);
this
.
regx_pendulum
=
ConfHelper
.
G
etValue
(
line
);
}
else
if
(
line
.
StartsWith
(
TAG_REG_MONSTER
))
{
this
.
regx_monster
=
ConfHelper
.
g
etValue
(
line
);
this
.
regx_monster
=
ConfHelper
.
G
etValue
(
line
);
}
else
if
(
line
.
StartsWith
(
TAG_MAXCOUNT
))
{
this
.
maxcount
=
ConfHelper
.
g
etIntegerValue
(
line
,
0
);
this
.
maxcount
=
ConfHelper
.
G
etIntegerValue
(
line
,
0
);
}
else
if
(
line
.
StartsWith
(
TAG_WIDTH
)){
this
.
width
=
ConfHelper
.
g
etIntegerValue
(
line
,
0
);
this
.
width
=
ConfHelper
.
G
etIntegerValue
(
line
,
0
);
}
else
if
(
line
.
StartsWith
(
TAG_HEIGHT
)){
this
.
height
=
ConfHelper
.
g
etIntegerValue
(
line
,
0
);
this
.
height
=
ConfHelper
.
G
etIntegerValue
(
line
,
0
);
}
else
if
(
line
.
StartsWith
(
TAG_PEND_WIDTH
)){
this
.
pwidth
=
ConfHelper
.
g
etIntegerValue
(
line
,
0
);
this
.
pwidth
=
ConfHelper
.
G
etIntegerValue
(
line
,
0
);
}
else
if
(
line
.
StartsWith
(
TAG_PEND_HEIGHT
)){
this
.
pheight
=
ConfHelper
.
g
etIntegerValue
(
line
,
0
);
this
.
pheight
=
ConfHelper
.
G
etIntegerValue
(
line
,
0
);
}
else
if
(
line
.
StartsWith
(
TAG_NO_TEN
)){
this
.
no10
=
ConfHelper
.
g
etBooleanValue
(
line
);
this
.
no10
=
ConfHelper
.
G
etBooleanValue
(
line
);
}
else
if
(
line
.
StartsWith
(
TAG_NO_START_CARDS
)){
string
val
=
ConfHelper
.
g
etValue
(
line
);
string
val
=
ConfHelper
.
G
etValue
(
line
);
string
[]
cs
=
val
.
Split
(
','
);
this
.
noStartCards
=
new
long
[
cs
.
Length
];
int
i
=
0
;
...
...
@@ -152,16 +152,16 @@ public void SetConfig(string config, string path)
else
if
(
line
.
StartsWith
(
TAG_IMAGE
))
{
//如果路径不合法,则为后面的路径
this
.
imagepath
=
MyPath
.
CheckDir
(
ConfHelper
.
g
etValue
(
line
),
MyPath
.
Combine
(
path
,
PATH_IMAGE
));
this
.
imagepath
=
MyPath
.
CheckDir
(
ConfHelper
.
G
etValue
(
line
),
MyPath
.
Combine
(
path
,
PATH_IMAGE
));
//图片缓存目录
this
.
imagecache
=
MyPath
.
Combine
(
this
.
imagepath
,
"cache"
);
MyPath
.
CreateDir
(
this
.
imagecache
);
}
else
if
(
line
.
StartsWith
(
TAG_REPALCE
))
{
//特数字替换
string
word
=
ConfHelper
.
g
etValue
(
line
);
string
p
=
ConfHelper
.
getRegex
(
ConfHelper
.
g
etValue1
(
word
));
string
r
=
ConfHelper
.
getRegex
(
ConfHelper
.
g
etValue2
(
word
));
string
word
=
ConfHelper
.
G
etValue
(
line
);
string
p
=
ConfHelper
.
GetRegex
(
ConfHelper
.
G
etValue1
(
word
));
string
r
=
ConfHelper
.
GetRegex
(
ConfHelper
.
G
etValue2
(
word
));
if
(!
string
.
IsNullOrEmpty
(
p
))
{
this
.
replaces
.
Add
(
p
,
r
);
...
...
@@ -175,20 +175,20 @@ public void SetConfig(string config, string path)
{
//类型
ConfHelper
.
DicAdd
(
this
.
typeDic
,
line
);
}
else
if
(
line
.
StartsWith
(
TAG_REIMAGE
)){
this
.
reimage
=
ConfHelper
.
g
etBooleanValue
(
line
);
this
.
reimage
=
ConfHelper
.
G
etBooleanValue
(
line
);
}
}
}
public
void
i
nit
(
string
path
)
public
void
I
nit
(
string
path
)
{
this
.
Iscn2tw
=
false
;
//读取配置
string
tmp
=
MyPath
.
Combine
(
path
,
MyPath
.
getFileName
(
MSEConfig
.
TAG
,
MyConfig
.
r
eadString
(
MyConfig
.
TAG_MSE
)));
string
tmp
=
MyPath
.
Combine
(
path
,
MyPath
.
GetFileName
(
MSEConfig
.
TAG
,
MyConfig
.
R
eadString
(
MyConfig
.
TAG_MSE
)));
if
(!
File
.
Exists
(
tmp
))
{
tmp
=
MyPath
.
Combine
(
path
,
MyPath
.
g
etFileName
(
MSEConfig
.
TAG
,
FILE_CONFIG_NAME
));
tmp
=
MyPath
.
Combine
(
path
,
MyPath
.
G
etFileName
(
MSEConfig
.
TAG
,
FILE_CONFIG_NAME
));
if
(!
File
.
Exists
(
tmp
))
{
return
;
//如果默认的也不存在
...
...
DataEditorX/Core/Mse/MseMaker.cs
View file @
2abe825f
...
...
@@ -447,32 +447,32 @@ string getMonster(Card c, string img,CardPack cardpack=null,bool rarity=true)
if
(
cardpack
!=
null
){
sb
.
AppendLine
(
this
.
GetLine
(
TAG_NUMBER
,
cardpack
.
pack_id
));
if
(
rarity
){
sb
.
AppendLine
(
this
.
GetLine
(
TAG_RARITY
,
cardpack
.
g
etMseRarity
()));
sb
.
AppendLine
(
this
.
GetLine
(
TAG_RARITY
,
cardpack
.
G
etMseRarity
()));
}
}
if
(
c
.
IsType
(
CardType
.
TYPE_LINK
)){
if
(
CardLink
.
i
sLink
(
c
.
def
,
CardLink
.
DownLeft
)){
if
(
CardLink
.
I
sLink
(
c
.
def
,
CardLink
.
DownLeft
)){
sb
.
AppendLine
(
this
.
GetLine
(
TAG_Link_Marker_DL
,
"yes"
));
}
if
(
CardLink
.
i
sLink
(
c
.
def
,
CardLink
.
Down
)){
if
(
CardLink
.
I
sLink
(
c
.
def
,
CardLink
.
Down
)){
sb
.
AppendLine
(
this
.
GetLine
(
TAG_Link_Marker_Down
,
"yes"
));
}
if
(
CardLink
.
i
sLink
(
c
.
def
,
CardLink
.
DownRight
)){
if
(
CardLink
.
I
sLink
(
c
.
def
,
CardLink
.
DownRight
)){
sb
.
AppendLine
(
this
.
GetLine
(
TAG_Link_Marker_DR
,
"yes"
));
}
if
(
CardLink
.
i
sLink
(
c
.
def
,
CardLink
.
UpLeft
)){
if
(
CardLink
.
I
sLink
(
c
.
def
,
CardLink
.
UpLeft
)){
sb
.
AppendLine
(
this
.
GetLine
(
TAG_Link_Marker_UL
,
"yes"
));
}
if
(
CardLink
.
i
sLink
(
c
.
def
,
CardLink
.
Up
)){
if
(
CardLink
.
I
sLink
(
c
.
def
,
CardLink
.
Up
)){
sb
.
AppendLine
(
this
.
GetLine
(
TAG_Link_Marker_Up
,
"yes"
));
}
if
(
CardLink
.
i
sLink
(
c
.
def
,
CardLink
.
UpRight
)){
if
(
CardLink
.
I
sLink
(
c
.
def
,
CardLink
.
UpRight
)){
sb
.
AppendLine
(
this
.
GetLine
(
TAG_Link_Marker_UR
,
"yes"
));
}
if
(
CardLink
.
i
sLink
(
c
.
def
,
CardLink
.
Left
)){
if
(
CardLink
.
I
sLink
(
c
.
def
,
CardLink
.
Left
)){
sb
.
AppendLine
(
this
.
GetLine
(
TAG_Link_Marker_Left
,
"yes"
));
}
if
(
CardLink
.
i
sLink
(
c
.
def
,
CardLink
.
Right
)){
if
(
CardLink
.
I
sLink
(
c
.
def
,
CardLink
.
Right
)){
sb
.
AppendLine
(
this
.
GetLine
(
TAG_Link_Marker_Right
,
"yes"
));
}
sb
.
AppendLine
(
this
.
GetLine
(
TAG_Link_Number
,
""
+
this
.
getLinkNumber
(
c
.
def
)));
...
...
@@ -520,7 +520,7 @@ string getSpellTrap(Card c, string img, bool isSpell,CardPack cardpack=null,bool
if
(
cardpack
!=
null
){
sb
.
AppendLine
(
this
.
GetLine
(
TAG_NUMBER
,
cardpack
.
pack_id
));
if
(
rarity
){
sb
.
AppendLine
(
this
.
GetLine
(
TAG_RARITY
,
cardpack
.
g
etMseRarity
()));
sb
.
AppendLine
(
this
.
GetLine
(
TAG_RARITY
,
cardpack
.
G
etMseRarity
()));
}
}
sb
.
AppendLine
(
" "
+
TAG_TEXT
+
":"
);
...
...
@@ -888,7 +888,7 @@ public Card[] ReadCards(string set, bool repalceOld)
string
file
=
MyPath
.
Combine
(
this
.
cfg
.
imagecache
,
md5
);
if
(!
File
.
Exists
(
file
)){
//生成缓存
Bitmap
bmp
=
MyBitmap
.
r
eadImage
(
img
);
Bitmap
bmp
=
MyBitmap
.
R
eadImage
(
img
);
//缩放
if
(
isPendulum
){
bmp
=
MyBitmap
.
Zoom
(
bmp
,
this
.
cfg
.
pwidth
,
this
.
cfg
.
pheight
);
...
...
DataEditorX/Core/TCGEditor/CardSet.cs
View file @
2abe825f
...
...
@@ -48,7 +48,7 @@ public override string ToString()
}
public
class
CardJson
{
public
static
void
t
est
(){
public
static
void
T
est
(){
string
json
=
File
.
ReadAllText
(
@"F:\TCGEditor_v1.2\t.tcgb"
);
CardSet
cardset
=
JsonConvert
.
DeserializeObject
<
CardSet
>(
json
);
if
(
cardset
.
cards
!=
null
){
...
...
DataEditorX/Core/TaskHelper.cs
View file @
2abe825f
...
...
@@ -136,7 +136,7 @@ public void ToImg(string img, string saveimg1)
#
region
检查更新
public
static
void
CheckVersion
(
bool
showNew
)
{
string
newver
=
CheckUpdate
.
GetNewVersion
(
MyConfig
.
r
eadString
(
MyConfig
.
TAG_UPDATE_URL
));
string
newver
=
CheckUpdate
.
GetNewVersion
(
MyConfig
.
R
eadString
(
MyConfig
.
TAG_UPDATE_URL
));
if
(
newver
==
CheckUpdate
.
DEFALUT
)
{
//检查失败
if
(!
showNew
)
...
...
@@ -284,8 +284,8 @@ public void SaveMSEs(string file, Card[] cards,bool isUpdate)
return
;
}
string
pack_db
=
MyPath
.
GetRealPath
(
MyConfig
.
r
eadString
(
"pack_db"
));
bool
rarity
=
MyConfig
.
r
eadBoolean
(
"mse_auto_rarity"
,
false
);
string
pack_db
=
MyPath
.
GetRealPath
(
MyConfig
.
R
eadString
(
"pack_db"
));
bool
rarity
=
MyConfig
.
R
eadBoolean
(
"mse_auto_rarity"
,
false
);
#
if
DEBUG
MessageBox
.
Show
(
"db = "
+
pack_db
+
",auto rarity="
+
rarity
);
#
endif
...
...
DataEditorX/DataEditForm.cs
View file @
2abe825f
...
...
@@ -101,7 +101,7 @@ public DataEditForm(string datapath)
}
public
DataEditForm
()
{
//默认启动
string
dir
=
MyConfig
.
r
eadString
(
MyConfig
.
TAG_DATA
);
string
dir
=
MyConfig
.
R
eadString
(
MyConfig
.
TAG_DATA
);
if
(
string
.
IsNullOrEmpty
(
dir
))
{
Application
.
Exit
();
...
...
@@ -171,13 +171,13 @@ void DataEditFormLoad(object sender, EventArgs e)
this
.
oldCard
=
new
Card
(
0
);
this
.
SetCard
(
this
.
oldCard
);
//删除资源
this
.
menuitem_operacardsfile
.
Checked
=
MyConfig
.
r
eadBoolean
(
MyConfig
.
TAG_DELETE_WITH
);
this
.
menuitem_operacardsfile
.
Checked
=
MyConfig
.
R
eadBoolean
(
MyConfig
.
TAG_DELETE_WITH
);
//用CodeEditor打开脚本
this
.
menuitem_openfileinthis
.
Checked
=
MyConfig
.
r
eadBoolean
(
MyConfig
.
TAG_OPEN_IN_THIS
);
this
.
menuitem_openfileinthis
.
Checked
=
MyConfig
.
R
eadBoolean
(
MyConfig
.
TAG_OPEN_IN_THIS
);
//自动检查更新
this
.
menuitem_autocheckupdate
.
Checked
=
MyConfig
.
r
eadBoolean
(
MyConfig
.
TAG_AUTO_CHECK_UPDATE
);
this
.
menuitem_autocheckupdate
.
Checked
=
MyConfig
.
R
eadBoolean
(
MyConfig
.
TAG_AUTO_CHECK_UPDATE
);
//add require automatically
this
.
Addrequire
=
MyConfig
.
r
eadString
(
MyConfig
.
TAG_ADD_REQUIRE
);
this
.
Addrequire
=
MyConfig
.
R
eadString
(
MyConfig
.
TAG_ADD_REQUIRE
);
this
.
menuitem_addrequire
.
Checked
=
(
this
.
Addrequire
.
Length
>
0
);
if
(
this
.
nowCdbFile
!=
null
&&
File
.
Exists
(
this
.
nowCdbFile
))
{
...
...
@@ -295,7 +295,7 @@ void InitPath(string datapath)
this
.
confcover
=
MyPath
.
Combine
(
datapath
,
"cover.jpg"
);
if
(
File
.
Exists
(
this
.
confcover
))
{
this
.
cover
=
MyBitmap
.
r
eadImage
(
this
.
confcover
);
this
.
cover
=
MyBitmap
.
R
eadImage
(
this
.
confcover
);
}
else
{
...
...
@@ -567,7 +567,7 @@ long GetSelect(ComboBox cb)
}
List
<
long
>
keys
=
(
List
<
long
>)
cb
.
Tag
;
int
index
=
cb
.
SelectedIndex
;
if
(
index
>=
keys
.
Count
)
if
(
index
>=
keys
.
Count
||
index
<
0
)
{
return
0
;
}
...
...
@@ -1155,7 +1155,7 @@ void Menuitem_aboutClick(object sender, EventArgs e)
MyMsg
.
Show
(
LanguageHelper
.
GetMsg
(
LMSG
.
About
)
+
"\t"
+
Application
.
ProductName
+
"\n"
+
LanguageHelper
.
GetMsg
(
LMSG
.
Version
)
+
"\t"
+
Application
.
ProductVersion
+
"\n"
+
LanguageHelper
.
GetMsg
(
LMSG
.
Author
)
+
"\t
菜菜
"
);
+
LanguageHelper
.
GetMsg
(
LMSG
.
Author
)
+
"\t
Nanahira & JoyJ
"
);
}
void
Menuitem_checkupdateClick
(
object
sender
,
EventArgs
e
)
...
...
@@ -1197,7 +1197,7 @@ void Menuitem_cancelTaskClick(object sender, EventArgs e)
}
void
Menuitem_githubClick
(
object
sender
,
EventArgs
e
)
{
System
.
Diagnostics
.
Process
.
Start
(
MyConfig
.
r
eadString
(
MyConfig
.
TAG_SOURCE_URL
));
System
.
Diagnostics
.
Process
.
Start
(
MyConfig
.
R
eadString
(
MyConfig
.
TAG_SOURCE_URL
));
}
#
endregion
...
...
@@ -1630,12 +1630,12 @@ public void SetImage(long id)
string
msepic
=
MseMaker
.
GetCardImagePath
(
this
.
tasker
.
MSEImagePath
,
this
.
oldCard
);
if
(
File
.
Exists
(
msepic
))
{
this
.
pl_image
.
BackgroundImage
=
MyBitmap
.
r
eadImage
(
msepic
);
this
.
pl_image
.
BackgroundImage
=
MyBitmap
.
R
eadImage
(
msepic
);
}
}
else
if
(
File
.
Exists
(
pic
))
{
this
.
pl_image
.
BackgroundImage
=
MyBitmap
.
r
eadImage
(
pic
);
this
.
pl_image
.
BackgroundImage
=
MyBitmap
.
R
eadImage
(
pic
);
}
else
{
...
...
@@ -1779,7 +1779,7 @@ void AddMenuItemFormMSE()
string
[]
files
=
Directory
.
GetFiles
(
this
.
datapath
);
foreach
(
string
file
in
files
)
{
string
name
=
MyPath
.
g
etFullFileName
(
MSEConfig
.
TAG
,
file
);
string
name
=
MyPath
.
G
etFullFileName
(
MSEConfig
.
TAG
,
file
);
//是否是MSE配置文件
if
(
string
.
IsNullOrEmpty
(
name
))
{
...
...
@@ -1999,7 +1999,7 @@ void GetLanguageItem()
string
[]
files
=
Directory
.
GetFiles
(
this
.
datapath
);
foreach
(
string
file
in
files
)
{
string
name
=
MyPath
.
g
etFullFileName
(
MyConfig
.
TAG_LANGUAGE
,
file
);
string
name
=
MyPath
.
G
etFullFileName
(
MyConfig
.
TAG_LANGUAGE
,
file
);
if
(
string
.
IsNullOrEmpty
(
name
))
{
continue
;
...
...
@@ -2011,7 +2011,7 @@ void GetLanguageItem()
ToolTipText
=
file
};
tsmi
.
Click
+=
this
.
SetLanguage_Click
;
if
(
MyConfig
.
r
eadString
(
MyConfig
.
TAG_LANGUAGE
).
Equals
(
name
,
StringComparison
.
OrdinalIgnoreCase
))
if
(
MyConfig
.
R
eadString
(
MyConfig
.
TAG_LANGUAGE
).
Equals
(
name
,
StringComparison
.
OrdinalIgnoreCase
))
{
tsmi
.
Checked
=
true
;
}
...
...
@@ -2043,7 +2043,7 @@ void Menuitem_exportMSEimageClick(object sender, EventArgs e)
return
;
}
string
msepath
=
MyPath
.
GetRealPath
(
MyConfig
.
r
eadString
(
MyConfig
.
TAG_MSE_PATH
));
string
msepath
=
MyPath
.
GetRealPath
(
MyConfig
.
R
eadString
(
MyConfig
.
TAG_MSE_PATH
));
if
(!
File
.
Exists
(
msepath
)){
MyMsg
.
Error
(
LMSG
.
exportMseImagesErr
);
this
.
menuitem_exportMSEimage
.
Checked
=
false
;
...
...
@@ -2065,7 +2065,7 @@ void Menuitem_exportMSEimageClick(object sender, EventArgs e)
if
(
dlg
.
ShowDialog
()
==
DialogResult
.
OK
)
{
string
mseset
=
dlg
.
FileName
;
string
exportpath
=
MyPath
.
GetRealPath
(
MyConfig
.
r
eadString
(
MyConfig
.
TAG_MSE_EXPORT
));
string
exportpath
=
MyPath
.
GetRealPath
(
MyConfig
.
R
eadString
(
MyConfig
.
TAG_MSE_EXPORT
));
MseMaker
.
ExportSet
(
msepath
,
mseset
,
exportpath
,
delegate
{
this
.
menuitem_exportMSEimage
.
Checked
=
false
;
});
...
...
@@ -2123,7 +2123,7 @@ void Menuitem_autoreturnClick(object sender, EventArgs e)
if
(
DataBase
.
Create
(
dlg
.
FileName
))
{
//
int
len
=
MyConfig
.
r
eadInteger
(
MyConfig
.
TAG_AUTO_LEN
,
30
);
int
len
=
MyConfig
.
R
eadInteger
(
MyConfig
.
TAG_AUTO_LEN
,
30
);
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
if
(
cards
[
i
].
desc
!=
null
){
...
...
@@ -2160,7 +2160,7 @@ void Menuitem_replaceClick(object sender, EventArgs e)
if
(
DataBase
.
Create
(
dlg
.
FileName
))
{
//
_
=
MyConfig
.
r
eadInteger
(
MyConfig
.
TAG_AUTO_LEN
,
30
);
_
=
MyConfig
.
R
eadInteger
(
MyConfig
.
TAG_AUTO_LEN
,
30
);
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
if
(
cards
[
i
].
desc
!=
null
)
...
...
DataEditorX/DataEditorX.csproj
View file @
2abe825f
...
...
@@ -200,6 +200,9 @@
<EmbeddedResource
Include=
"CodeEditForm.resx"
>
<DependentUpon>
CodeEditForm.cs
</DependentUpon>
</EmbeddedResource>
<EmbeddedResource
Include=
"Controls\FastColoredTextBoxEx.resx"
>
<DependentUpon>
FastColoredTextBoxEx.cs
</DependentUpon>
</EmbeddedResource>
<EmbeddedResource
Include=
"DataEditForm.resx"
>
<DependentUpon>
DataEditForm.cs
</DependentUpon>
</EmbeddedResource>
...
...
@@ -232,8 +235,6 @@
<CopyToOutputDirectory>
PreserveNewest
</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<Folder
Include=
"Core\TCGEditor"
/>
</ItemGroup>
<ItemGroup
/>
<Import
Project=
"$(MSBuildToolsPath)\Microsoft.CSharp.targets"
/>
</Project>
\ No newline at end of file
DataEditorX/MainForm.cs
View file @
2abe825f
...
...
@@ -56,7 +56,7 @@ public void SetDataPath(string datapath)
this
.
tCards
=
null
;
//数据目录
this
.
datapath
=
datapath
;
if
(
MyConfig
.
r
eadBoolean
(
MyConfig
.
TAG_ASYNC
))
if
(
MyConfig
.
R
eadBoolean
(
MyConfig
.
TAG_ASYNC
))
{
//后台加载数据
this
.
bgWorker1
.
RunWorkerAsync
();
...
...
@@ -548,7 +548,7 @@ private void bgWorker1_RunWorkerCompleted(object sender, System.ComponentModel.R
private
void
MainForm_Load
(
object
sender
,
EventArgs
e
)
{
//检查更新
if
(!
MyConfig
.
r
eadBoolean
(
MyConfig
.
TAG_AUTO_CHECK_UPDATE
))
if
(!
MyConfig
.
R
eadBoolean
(
MyConfig
.
TAG_AUTO_CHECK_UPDATE
))
{
return
;
}
...
...
DataEditorX/data/constant.lua
View file @
2abe825f
...
...
@@ -6,21 +6,21 @@ MAX_COUNTER =65535 --max number for adding/removing counters, by card::add_coun
LOCATION_DECK
=
0x01
--卡组
LOCATION_HAND
=
0x02
--手牌
LOCATION_MZONE
=
0x04
--怪兽区
LOCATION_SZONE
=
0x08
--魔陷区
LOCATION_SZONE
=
0x08
--魔陷区
(0~4)+场地区(5)
LOCATION_GRAVE
=
0x10
--墓地
LOCATION_REMOVED
=
0x20
--除外区
LOCATION_EXTRA
=
0x40
--额外
LOCATION_OVERLAY
=
0x80
--超量素材
LOCATION_ONFIELD
=
0x0c
--场上(
怪兽+魔陷
)
LOCATION_ONFIELD
=
0x0c
--场上(
LOCATION_MZONE+LOCATION_SZONE
)
--Locations (for redirect) 若在重定向类效果中指定LOCATION_DECK则为弹回卡组顶部
LOCATION_DECKBOT
=
0x10001
--弹回卡组底部
LOCATION_DECKSHF
=
0x20001
--弹回卡组并洗牌
--Locations
(for SetRange)
--Locations
of spell cards
LOCATION_FZONE
=
0x100
--场地区
LOCATION_PZONE
=
0x200
--灵摆区
--Positions 表示形式
POS_FACEUP_ATTACK
=
0x1
--表侧攻击
POS_FACEDOWN_ATTACK
=
0x2
--
里侧攻击
POS_FACEDOWN_ATTACK
=
0x2
--
(reserved)
POS_FACEUP_DEFENSE
=
0x4
--表侧守备
POS_FACEDOWN_DEFENSE
=
0x8
--里侧守备
POS_FACEUP
=
0x5
--正面表示
...
...
@@ -61,7 +61,7 @@ ATTRIBUTE_FIRE =0x04 --炎
ATTRIBUTE_WIND
=
0x08
--风
ATTRIBUTE_LIGHT
=
0x10
--光
ATTRIBUTE_DARK
=
0x20
--暗
ATTRIBUTE_D
E
VINE
=
0x40
--神
ATTRIBUTE_D
I
VINE
=
0x40
--神
--Races 种族
RACE_ALL
=
0x1ffffff
--全种族
RACE_WARRIOR
=
0x1
--战士
...
...
@@ -85,7 +85,7 @@ RACE_FISH =0x20000 --鱼
RACE_SEASERPENT
=
0x40000
--海龙
RACE_REPTILE
=
0x80000
--爬虫类
RACE_PSYCHO
=
0x100000
--念动力
RACE_D
E
VINE
=
0x200000
--幻神兽
RACE_D
I
VINE
=
0x200000
--幻神兽
RACE_CREATORGOD
=
0x400000
--创造神
RACE_WYRM
=
0x800000
--幻龙
RACE_CYBERSE
=
0x1000000
--电子界
...
...
@@ -156,7 +156,7 @@ STATUS_EFFECT_REPLACED =0x80000 --效果被替代(红莲霸权)
STATUS_FUTURE_FUSION
=
0x100000
--未来融合特殊召唤(不触发融合素材效果)
STATUS_ATTACK_CANCELED
=
0x200000
--若其為攻擊者,則攻擊中止
STATUS_INITIALIZING
=
0x400000
--初始化..
STATUS_ACTIVATED
=
0x800000
--
魔法陷阱卡发动過
STATUS_ACTIVATED
=
0x800000
--
N/A
STATUS_JUST_POS
=
0x1000000
--已改變表示形式(用於STATUS_CONTINUOUS_POS判定)
STATUS_CONTINUOUS_POS
=
0x2000000
--改變後再次設定成其他表示形式
STATUS_FORBIDDEN
=
0x4000000
--不能play
...
...
@@ -174,14 +174,14 @@ ASSUME_RACE =6
ASSUME_ATTACK
=
7
ASSUME_DEFENSE
=
8
--Link Marker
LINK_MARKER_BOTTOM_LEFT
=
0x001
LINK_MARKER_BOTTOM
=
0x002
LINK_MARKER_BOTTOM_RIGHT
=
0x004
LINK_MARKER_LEFT
=
0x008
LINK_MARKER_RIGHT
=
0x020
LINK_MARKER_TOP_LEFT
=
0x040
LINK_MARKER_TOP
=
0x080
LINK_MARKER_TOP_RIGHT
=
0x100
LINK_MARKER_BOTTOM_LEFT
=
0x001
-- ↙
LINK_MARKER_BOTTOM
=
0x002
-- ↓
LINK_MARKER_BOTTOM_RIGHT
=
0x004
-- ↘
LINK_MARKER_LEFT
=
0x008
-- ←
LINK_MARKER_RIGHT
=
0x020
-- →
LINK_MARKER_TOP_LEFT
=
0x040
-- ↖
LINK_MARKER_TOP
=
0x080
-- ↑
LINK_MARKER_TOP_RIGHT
=
0x100
-- ↗
--Counter --指示物
COUNTER_WITHOUT_PERMIT
=
0x1000
--可以放置在非特定對象的指示物
COUNTER_NEED_ENABLE
=
0x2000
--在卡片本身放置上述指示物的標記(卡片守衛)
...
...
@@ -215,6 +215,14 @@ CHAININFO_CHAIN_ID =0x800 --连锁ID
CHAININFO_TYPE
=
0x1000
--连锁类型
CHAININFO_EXTTYPE
=
0x2000
--连锁额外类型
CHAININFO_TRIGGERING_POSITION
=
0x4000
--连锁发生时的表示形式
CHAININFO_TRIGGERING_CODE
=
0x8000
--连锁发生时的密码
CHAININFO_TRIGGERING_CODE2
=
0x10000
--连锁发生时的其他密码
CHAININFO_TRIGGERING_LEVEL
=
0x40000
--连锁发生时的等级
CHAININFO_TRIGGERING_RANK
=
0x80000
--连锁发生时的阶级
CHAININFO_TRIGGERING_ATTRIBUTE
=
0x100000
--连锁发生时的属性
CHAININFO_TRIGGERING_RACE
=
0x200000
--连锁发生时的种族
CHAININFO_TRIGGERING_ATTACK
=
0x400000
--连锁发生时的攻击力
CHAININFO_TRIGGERING_DEFENSE
=
0x800000
--连锁发生时的守备力
--========== Reset ========== --重置条件(注意:重置条件可以多个相加)
RESET_SELF_TURN
=
0x10000000
--自己回合的階段重置
RESET_OPPO_TURN
=
0x20000000
--对方回合的階段重置
...
...
@@ -238,7 +246,7 @@ RESET_OVERLAY =0x04000000 --超量叠放重置
RESET_MSCHANGE
=
0x08000000
--从怪兽区到魔法区,或者从魔法区到怪兽区(move_to_field()、寶玉獸)
----组合时点
RESETS_STANDARD
=
0x1fe0000
--RESET_TOFIELD+RESET_LEAVE+RESET_TODECK+RESET_TOHAND+RESET_TEMP_REMOVE+RESET_REMOVE+RESET_TOGRAVE+RESET_TURN_SET
RESETS_
STANDARD_DISABLE
=
0x1ff0000
--0x1fe0000+RESET_DISABLE
RESETS_
REDIRECT
=
0xc7e0000
--RESETS_STANDARD+RESET_OVERLAY+RESET_MSCHANGE-RESET_TOFIELD-RESET_LEAVE (EFFECT_LEAVE_FIELD_REDIRECT)
--========== Types ========== --效果类型(定义效果触发类型,和codes一起使用)
EFFECT_TYPE_SINGLE
=
0x0001
--自己状态变化时触发
EFFECT_TYPE_FIELD
=
0x0002
--场上所有卡状态变化时触发
...
...
@@ -254,18 +262,19 @@ EFFECT_TYPE_QUICK_F =0x0400 --诱发即时必发效果(熊猫龙等)
EFFECT_TYPE_CONTINUOUS
=
0x0800
--由事件觸發的輔助用效果/永續效果
EFFECT_TYPE_XMATERIAL
=
0x1000
--作为超量素材时超量怪兽获得的效果(十二兽)
EFFECT_TYPE_GRANT
=
0x2000
--使其他卡片获得效果(天气模样)
EFFECT_TYPE_TARGET
=
0x4000
--影响持续取的对象的效果(基本只用于魔陷)
--========== Flags ========== --效果的特殊性质
EFFECT_FLAG_INITIAL
=
0x0001
--可以发动的
EFFECT_FLAG_FUNC_VALUE
=
0x0002
--此效果的Value属性是函数
EFFECT_FLAG_COUNT_LIMIT
=
0x0004
--发动次数限制
EFFECT_FLAG_FIELD_ONLY
=
0x0008
--此效果是注册给全局环境的
EFFECT_FLAG_CARD_TARGET
=
0x0010
--取对象效果
EFFECT_FLAG_IGNORE_RANGE
=
0x0020
--影响所有区域的卡(
禁止令 大宇宙 王宫的铁壁
)
EFFECT_FLAG_IGNORE_RANGE
=
0x0020
--影响所有区域的卡(
大宇宙
)
EFFECT_FLAG_ABSOLUTE_TARGET
=
0x0040
--Target Range不会因为控制权的改变而改变
EFFECT_FLAG_IGNORE_IMMUNE
=
0x0080
--无视效果免疫
EFFECT_FLAG_SET_AVAILABLE
=
0x0100
--影响场上里侧的卡/裡側狀態可發動
EFFECT_FLAG_CANNOT_NEGATE
=
0x0200
--含有"此效果不會被無效"的敘述
EFFECT_FLAG_CANNOT_DISABLE
=
0x0400
--不会被无效
EFFECT_FLAG_CANNOT_DISABLE
=
0x0400
--
效果
不会被无效
EFFECT_FLAG_PLAYER_TARGET
=
0x0800
--以玩家为对象
EFFECT_FLAG_BOTH_SIDE
=
0x1000
--双方都能使用(部分场地,弹压)
EFFECT_FLAG_COPY_INHERIT
=
0x2000
--若由复制的效果產生則继承其Reset属性
...
...
@@ -279,16 +288,16 @@ EFFECT_FLAG_SPSUM_PARAM =0x100000 --指定召喚/规则特殊召唤的位置和
EFFECT_FLAG_REPEAT
=
0x200000
--神之化身的攻击力重复计算
EFFECT_FLAG_NO_TURN_RESET
=
0x400000
--发条等“这张卡在场上只能发动一次”的效果
EFFECT_FLAG_EVENT_PLAYER
=
0x800000
--视为对方玩家的效果(动作?)
EFFECT_FLAG_OWNER_RELATE
=
0x1000000
--
持續成為對象
EFFECT_FLAG_
AVAILABLE_BD
=
0x2000000
--战斗破坏确定时效果也适用(纳祭之魔 地狱战士)
EFFECT_FLAG_OWNER_RELATE
=
0x1000000
--
与效果owner关联的效果
EFFECT_FLAG_
CANNOT_INACTIVATE
=
0x2000000
--發動不會被無效
EFFECT_FLAG_CLIENT_HINT
=
0x4000000
--客户端提示
EFFECT_FLAG_C
HAIN_UNIQUE
=
0x8000000
--同一组连锁只能发动一次
EFFECT_FLAG_
NAGA
=
0x10000000
--N/A
EFFECT_FLAG_C
ONTINUOUS_TARGET
=
0x8000000
--建立持續對象的永續魔法、永續陷阱、早埋系以外的裝備魔法卡
EFFECT_FLAG_
LIMIT_ZONE
=
0x10000000
--限制魔法·陷阱卡发动时可以放置的区域
EFFECT_FLAG_COF
=
0x20000000
--N/A
EFFECT_FLAG_CVAL_CHECK
=
0x40000000
--N/A
EFFECT_FLAG_IMMEDIATELY_APPLY
=
0x80000000
--卡在发动时效果就立即适用
(卡通王國)
EFFECT_FLAG_IMMEDIATELY_APPLY
=
0x80000000
--卡在发动时效果就立即适用
EFFECT_FLAG2_NAGA
=
0x0001
--
特殊情况时发动不会被无效(神卡纳迦的特殊处理)
EFFECT_FLAG2_NAGA
=
0x0001
--
N/A
EFFECT_FLAG2_COF
=
0x0002
--通常魔法卡在MP1以外发动(邪恶的仪式的特殊处理)
--========== Codes ========== --对永续性效果表示效果类型(EFFECT开头),对诱发型效果表示触发效果的事件/时点(EVENT开头)
EFFECT_IMMUNE_EFFECT
=
1
--效果免疫
...
...
@@ -319,7 +328,7 @@ EFFECT_CANNOT_DISABLE_SPSUMMON =27 --特殊召唤不会无效
EFFECT_SET_SUMMON_COUNT_LIMIT
=
28
--限制每回合放置怪兽次数
EFFECT_EXTRA_SUMMON_COUNT
=
29
--增加召唤(通常召唤)次数
EFFECT_SPSUMMON_CONDITION
=
30
--特殊召唤条件
EFFECT_REVIVE_LIMIT
=
31
--有苏生限制的怪獸
EFFECT_REVIVE_LIMIT
=
31
--有苏生限制的怪獸
(Card.EnableReviveLimit())
EFFECT_SUMMON_PROC
=
32
--召唤规则效果
EFFECT_LIMIT_SUMMON_PROC
=
33
--召唤规则限制
EFFECT_SPSUMMON_PROC
=
34
--特殊召唤规则
...
...
@@ -389,8 +398,8 @@ EFFECT_SET_BASE_DEFENSE =107 --设置原本防御力
EFFECT_REVERSE_UPDATE
=
108
--倒置改变攻击力、防御力(天邪鬼)
EFFECT_SWAP_AD
=
109
--交换攻防(超級漏洞人)
EFFECT_SWAP_BASE_AD
=
110
--交换原本攻防
EFFECT_SWAP_ATTACK_FINAL
=
111
--
設定最終攻擊力(用於交換攻防)
EFFECT_SWAP_DEFENSE_FINAL
=
112
--
設定最終防禦力(用於交換攻防)
EFFECT_SWAP_ATTACK_FINAL
=
111
--
N/A
EFFECT_SWAP_DEFENSE_FINAL
=
112
--
N/A
EFFECT_ADD_CODE
=
113
--增加卡名
EFFECT_CHANGE_CODE
=
114
--改变卡名
EFFECT_ADD_TYPE
=
115
--增加卡片种类(types)
...
...
@@ -442,7 +451,7 @@ EFFECT_MUST_ATTACK =191 --必须攻击
EFFECT_FIRST_ATTACK
=
192
--必须第一个攻击
EFFECT_ATTACK_ALL
=
193
--可以攻击所有怪兽
EFFECT_EXTRA_ATTACK
=
194
--增加攻击次数
EFFECT_MUST_BE_ATTACKED
=
195
--
必须攻击此卡
EFFECT_MUST_BE_ATTACKED
=
195
--
N/A
EFFECT_ONLY_BE_ATTACKED
=
196
--只能攻击此卡
EFFECT_ATTACK_DISABLED
=
197
--攻击已被無效(Duel.NegateAttack()成功的標記)
EFFECT_NO_BATTLE_DAMAGE
=
200
--不会给对方造成战斗伤害
...
...
@@ -451,6 +460,9 @@ EFFECT_REFLECT_BATTLE_DAMAGE =202 --反弹战斗伤害
EFFECT_PIERCE
=
203
--贯穿伤害
EFFECT_BATTLE_DESTROY_REDIRECT
=
204
--战斗破坏时重新指定去向
EFFECT_BATTLE_DAMAGE_TO_EFFECT
=
205
--战斗伤害视为效果伤害
EFFECT_BOTH_BATTLE_DAMAGE
=
206
--战斗伤害由双方承受
EFFECT_ALSO_BATTLE_DAMAGE
=
207
--对自己的战斗伤害让对方也承受
EFFECT_CHANGE_BATTLE_DAMAGE
=
208
--改变战斗伤害
EFFECT_TOSS_COIN_REPLACE
=
220
--重新抛硬币
EFFECT_TOSS_DICE_REPLACE
=
221
--重新掷骰子
EFFECT_FUSION_MATERIAL
=
230
--指定融合素材的條件
...
...
@@ -497,8 +509,8 @@ EFFECT_SYNCHRO_CHECK =310 --基因组斗士
EFFECT_QP_ACT_IN_NTPHAND
=
311
--对方回合从自己手卡发动(失乐的圣女)
EFFECT_MUST_BE_SMATERIAL
=
312
--必须作为同调素材(波动龙 声子龙)
EFFECT_TO_GRAVE_REDIRECT_CB
=
313
--重新指定去向(寶玉獸)
EFFECT_CHANGE_LEVEL_FINAL
=
314
--
設定最終等級(銀河女王之光)
EFFECT_CHANGE_RANK_FINAL
=
315
--
設定最終階級
EFFECT_CHANGE_LEVEL_FINAL
=
314
--
N/A
EFFECT_CHANGE_RANK_FINAL
=
315
--
N/A
EFFECT_MUST_BE_FMATERIAL
=
316
--必须作为融合素材
EFFECT_MUST_BE_XMATERIAL
=
317
--必须作为超量素材
EFFECT_MUST_BE_LMATERIAL
=
318
--必须作为连接素材
...
...
@@ -509,13 +521,13 @@ EFFECT_CANNOT_SELECT_BATTLE_TARGET =332 --對手不能選擇為攻擊對象
EFFECT_CANNOT_SELECT_EFFECT_TARGET
=
333
--對手不能選擇為效果對象
EFFECT_ADD_SETCODE
=
334
--视为「XX」字段的效果
EFFECT_NO_EFFECT_DAMAGE
=
335
--玩家已受到"效果傷害變成0"的效果影響
EFFECT_UNSUMMONABLE_CARD
=
336
--
不能通常召唤的怪獸
EFFECT_UNSUMMONABLE_CARD
=
336
--
N/A
EFFECT_DISABLE_CHAIN_FIELD
=
337
--N/A
EFFECT_DISCARD_COST_CHANGE
=
338
--反制陷阱捨棄手牌的代價改變(解放之阿里阿德涅)
EFFECT_HAND_SYNCHRO
=
339
--用手牌的怪獸當作同步素材
EFFECT_ADD_FUSION_CODE
=
340
--作为融合素材时可以当作某一卡名(融合识别)
EFFECT_ADD_FUSION_SETCODE
=
341
--作为融合素材时可以当作某一字段(魔玩具改造)
EFFECT_RISE_TO_FULL_HEIGHT
=
342
--
仁王立
EFFECT_RISE_TO_FULL_HEIGHT
=
342
--
N/A
EFFECT_ONLY_ATTACK_MONSTER
=
343
--只能攻擊X
EFFECT_MUST_ATTACK_MONSTER
=
344
--若攻擊則必須攻擊X
EFFECT_PATRICIAN_OF_DARKNESS
=
345
--由對手選擇攻擊對象(黑暗貴族)
...
...
@@ -531,9 +543,15 @@ EFFECT_ADD_LINK_CODE =354 --用作连接素材时的卡名
EFFECT_ADD_LINK_SETCODE
=
355
--reserve
EFFECT_ADD_LINK_ATTRIBUTE
=
356
--用作连接素材时的属性
EFFECT_ADD_LINK_RACE
=
357
--用作连接素材时的种族
EFFECT_EXTRA_LINK_MATERIAL
=
358
--手卡的连接素材
EFFECT_QP_ACT_IN_SET_TURN
=
359
--速攻魔法可以在盖放的回合发动
EFFECT_EXTRA_PENDULUM_SUMMON
=
360
--extra pendulum summon
EFFECT_MATERIAL_LIMIT
=
361
--
EFFECT_SET_BATTLE_ATTACK
=
362
--战斗的伤害计算用设置的攻击力进行
EFFECT_SET_BATTLE_DEFENSE
=
363
--战斗的伤害计算用设置的守备力进行
--下面是诱发效果的诱发事件、时点 (如果是TYPE_SINGLE则自己发生以下事件后触发,如果TYPE_FIELD则场上任何卡发生以下事件都触发)
EVENT_STARTUP
=
1000
--
游戏开始时
EVENT_STARTUP
=
1000
--
N/A
EVENT_FLIP
=
1001
--翻转时
EVENT_FREE_CHAIN
=
1002
--自由时点(强脱等,还有昴星团等诱发即时效果)
EVENT_DESTROY
=
1010
--確定被破壞的卡片移動前
...
...
@@ -545,7 +563,7 @@ EVENT_LEAVE_FIELD =1015 --离场时
EVENT_CHANGE_POS
=
1016
--表示形式变更时
EVENT_RELEASE
=
1017
--解放时
EVENT_DISCARD
=
1018
--丢弃手牌时
EVENT_LEAVE_FIELD_P
=
1019
--
永久离场时
EVENT_LEAVE_FIELD_P
=
1019
--
離場的卡片移動前
EVENT_CHAIN_SOLVING
=
1020
--连锁处理开始时(EVENT_CHAIN_ACTIVATING之後)
EVENT_CHAIN_ACTIVATING
=
1021
--连锁处理准备中
EVENT_CHAIN_SOLVED
=
1022
--连锁处理结束时
...
...
@@ -556,7 +574,7 @@ EVENT_CHAIN_END =1026 --连锁串结束时
EVENT_CHAINING
=
1027
--效果发动时
EVENT_BECOME_TARGET
=
1028
--成为效果对象时
EVENT_DESTROYED
=
1029
--被破坏时
EVENT_MOVE
=
1030
--
EVENT_MOVE
=
1030
--
移動卡片(急兔馬)
EVENT_ADJUST
=
1040
--adjust_all()调整後(御前试合)
EVENT_SUMMON_SUCCESS
=
1100
--通常召唤成功时
EVENT_FLIP_SUMMON_SUCCESS
=
1101
--翻转召唤成功时
...
...
@@ -572,6 +590,9 @@ EVENT_DRAW =1110 --抽卡时
EVENT_DAMAGE
=
1111
--造成战斗/效果伤害时
EVENT_RECOVER
=
1112
--回复生命值时
EVENT_PREDRAW
=
1113
--抽卡阶段通常抽卡前
EVENT_SUMMON_NEGATED
=
1114
--召唤被无效时
EVENT_FLIP_SUMMON_NEGATED
=
1115
--反转召唤被无效时
EVENT_SPSUMMON_NEGATED
=
1116
--特殊召唤被无效时
EVENT_CONTROL_CHANGED
=
1120
--控制权变更
EVENT_EQUIP
=
1121
--装备卡装备时
EVENT_ATTACK_ANNOUNCE
=
1130
--攻击宣言时
...
...
@@ -614,7 +635,7 @@ CATEGORY_HANDES =0x80 --捨棄手牌效果
CATEGORY_SUMMON
=
0x100
--含召唤的效果
CATEGORY_SPECIAL_SUMMON
=
0x200
--含特殊召唤的效果
CATEGORY_TOKEN
=
0x400
--含衍生物效果
CATEGORY_
FLIP
=
0x800
--含翻转效果
CATEGORY_
GRAVE_ACTION
=
0x800
--包含涉及墓地的部分的效果(屋敷わらし)
CATEGORY_POSITION
=
0x1000
--改变表示形式效果
CATEGORY_CONTROL
=
0x2000
--改变控制权效果
CATEGORY_DISABLE
=
0x4000
--使效果无效效果
...
...
@@ -629,12 +650,12 @@ CATEGORY_DEFCHANGE =0x400000 --改变防御效果
CATEGORY_COUNTER
=
0x800000
--指示物效果
CATEGORY_COIN
=
0x1000000
--硬币效果
CATEGORY_DICE
=
0x2000000
--骰子效果
CATEGORY_LEAVE_GRAVE
=
0x4000000
--
离开墓地效果
CATEGORY_LEAVE_GRAVE
=
0x4000000
--
涉及墓地的效果(王家長眠之谷)
CATEGORY_LVCHANGE
=
0x8000000
--改变等级效果
CATEGORY_NEGATE
=
0x10000000
--使发动无效效果
CATEGORY_ANNOUNCE
=
0x20000000
--發動時宣言卡名的效果
CATEGORY_FUSION_SUMMON
=
0x40000000
--融合召唤效果(暴走魔法阵)
CATEGORY_TOEXTRA
=
0x80000000
--
CATEGORY_TOEXTRA
=
0x80000000
--
回额外卡组效果
--Hint
HINT_EVENT
=
1
HINT_MESSAGE
=
2
...
...
@@ -646,6 +667,7 @@ HINT_ATTRIB =7
HINT_CODE
=
8
HINT_NUMBER
=
9
HINT_CARD
=
10
HINT_ZONE
=
11
--Card Hint
CHINT_TURN
=
1
CHINT_CARD
=
2
...
...
@@ -667,6 +689,9 @@ OPCODE_ISSETCARD =0x40000101
OPCODE_ISTYPE
=
0x40000102
OPCODE_ISRACE
=
0x40000103
OPCODE_ISATTRIBUTE
=
0x40000104
--
DOUBLE_DAMAGE
=
0x80000000
HALF_DAMAGE
=
0x80000001
--Hint Message --提示消息,显示在窗口的上面
HINTMSG_RELEASE
=
500
--请选择要解放的卡
HINTMSG_DISCARD
=
501
--请选择要丢弃的手牌
...
...
@@ -679,9 +704,9 @@ HINTMSG_TODECK =507 --请选择要返回卡组的卡
HINTMSG_SUMMON
=
508
--请选择要召唤的卡
HINTMSG_SPSUMMON
=
509
--请选择要特殊召唤的卡
HINTMSG_SET
=
510
--请选择要盖放的卡
HINTMSG_FMATERIAL
=
511
--请选择
融合召唤的素材
HINTMSG_SMATERIAL
=
512
--请选择
同调召唤的素材
HINTMSG_XMATERIAL
=
513
--请选择
超量召唤的素材
HINTMSG_FMATERIAL
=
511
--请选择
要作为融合素材的卡
HINTMSG_SMATERIAL
=
512
--请选择
要作为同调素材的卡
HINTMSG_XMATERIAL
=
513
--请选择
要作为超量素材的卡
HINTMSG_FACEUP
=
514
--请选择表侧表示的卡
HINTMSG_FACEDOWN
=
515
--请选择里侧表示的卡
HINTMSG_ATTACK
=
516
--请选择攻击表示的怪兽
...
...
@@ -701,7 +726,7 @@ HINTMSG_SELF =529 --请选择自己的卡
HINTMSG_OPPO
=
530
--请选择对方的卡
HINTMSG_TRIBUTE
=
531
--请选择上级召唤用需要解放的怪兽
HINTMSG_DEATTACHFROM
=
532
--请选择要取除超量素材的怪兽
HINTMSG_LMATERIAL
=
533
--请选择
连接召唤的素材
HINTMSG_LMATERIAL
=
533
--请选择
要作为连接素材的卡
HINTMSG_ATTACKTARGET
=
549
--请选择攻击的对象
HINTMSG_EFFECT
=
550
--请选择要发动的效果
HINTMSG_TARGET
=
551
--请选择效果的对象
...
...
@@ -721,6 +746,9 @@ HINTMSG_RESOLVECARD =568 --请选择要处理效果的卡
HINTMSG_ZONE
=
569
--请选择[%ls]的位置
HINTMSG_DISABLEZONE
=
570
--请选择要变成不能使用的卡片区域
HINTMSG_TOZONE
=
571
--请选择要移动到的位置
HINTMSG_COUNTER
=
572
--请选择要放置指示物的卡
HINTMSG_DISABLE
=
573
--请选择要无效的卡
HINTMSG_OPERATECARD
=
574
--请选择要操作的卡
--Select --请选择
SELECT_HEADS
=
60
--正面
SELECT_TAILS
=
61
--反面
...
...
@@ -752,9 +780,9 @@ TIMING_TOGRAVE =0x800000 --进墓地时点
TIMING_BATTLE_PHASE
=
0x1000000
--战斗阶段时点
TIMING_EQUIP
=
0x2000000
--装备时点
TIMING_BATTLE_STEP_END
=
0x4000000
--戰鬥步驟結束時
TIMING_BATTLED
=
0x8000000
--伤害计算后时点
----组合时点
TIMINGS_CHECK_MONSTER
=
0x1c0
-- 怪兽正面上场
TIMINGS_CHECK_MONSTER_E
=
0x1e0
-- 怪兽正面上场 + EP
--Global flag --特殊标记
GLOBALFLAG_DECK_REVERSE_CHECK
=
0x1
--卡组翻转标记
GLOBALFLAG_BRAINWASHING_CHECK
=
0x2
--洗脑解除标记
...
...
@@ -789,9 +817,6 @@ ACTIVITY_FLIPSUMMON =4 --
ACTIVITY_ATTACK
=
5
--
ACTIVITY_BATTLE_PHASE
=
6
-- not available in custom counter
ACTIVITY_CHAIN
=
7
-- only available in custom counter
--announce type(宣言类型,CATEGORY_ANNOUNCE的OperationInfo的target_param)
ANNOUNCE_CARD
=
0x7
--宣言卡片
ANNOUNCE_CARD_FILTER
=
0x8
--宣言符合条件的卡片
--cards with double names
CARD_MARINE_DOLPHIN
=
78734254
--海洋海豚
CARD_TWINKLE_MOSS
=
13857930
--光輝苔蘚
DataEditorX/data/strings.conf
View file @
2abe825f
...
...
@@ -9,9 +9,9 @@
!
system
5
特殊召唤成功
!
system
6
反转召唤成功
!
system
7
发动
!
system
10
移
除指示物
!
system
11
支付
LP
!
system
12
移
除本身的素材
!
system
10
取
除指示物
!
system
11
支付
基本分
!
system
12
取
除本身的素材
!
system
20
抽卡阶段中
!
system
21
准备阶段中
!
system
22
主要阶段中
...
...
@@ -36,27 +36,30 @@
!
system
64
二重状态
!
system
65
使用效果
!
system
66
持续公开
!
system
67
原本持有者为对方
!
system
70
怪兽卡
!
system
71
魔法卡
!
system
72
陷阱卡
!
system
80
进入战斗阶段
!
system
81
进入结束阶段
!
system
90
是否不解放怪
物
通常召唤?
!
system
90
是否不解放怪
兽
通常召唤?
!
system
91
是否使用额外的召唤机会?
!
system
92
是否要解放对方怪兽进行上级召唤?
!
system
93
是否要继续选择素材?
!
system
94
是否现在使用这张卡的效果?
!
system
95
是否使用[%
ls
]的效果?
!
system
96
是否使用[%
ls
]的效果代替破坏?
!
system
97
是否把[%
ls
]在魔法与陷阱区域
盖放
?
!
system
97
是否把[%
ls
]在魔法与陷阱区域
放置
?
!
system
98
是否要解放对方怪兽?
!
system
100
先攻
!
system
101
后攻
!
system
102
我方
!
system
103
对方
!
system
200
是否在[%
ls
]发动[%
ls
]的效果?
!
system
201
此时没有可以发动的效果
!
system
202
是否要确认场上的情况?
!
system
203
是否要进行连锁?
!
system
204
请
移
除%
d
个[%
ls
]
!
system
204
请
取
除%
d
个[%
ls
]
!
system
205
请选择排列顺序
!
system
206
请选择连锁顺序
!
system
207
翻开卡组上方%
d
张卡:
...
...
@@ -88,9 +91,9 @@
!
system
508
请选择要召唤的卡
!
system
509
请选择要特殊召唤的卡
!
system
510
请选择要盖放的卡
!
system
511
请选择
融合召唤的素材
!
system
512
请选择
同调召唤的素材
!
system
513
请选择
超量召唤的素材
!
system
511
请选择
要作为融合素材的卡
!
system
512
请选择
要作为同调素材的卡
!
system
513
请选择
要作为超量素材的卡
!
system
514
请选择表侧表示的卡
!
system
515
请选择里侧表示的卡
!
system
516
请选择攻击表示的怪兽
...
...
@@ -104,13 +107,13 @@
!
system
524
请选择里侧攻击表示的怪兽
!
system
525
请选择里侧守备表示的怪兽
!
system
526
请选择给对方确认的卡
!
system
527
请选择要
盖放
到场上的卡
!
system
527
请选择要
放置
到场上的卡
!
system
528
请选择要改变表示形式的怪兽
!
system
529
请选择自己的卡
!
system
530
请选择对方的卡
!
system
531
请选择上级召唤用需要解放的怪兽
!
system
532
请选择要取除超量素材的怪兽
!
system
533
请选择
连接召唤的素材
!
system
533
请选择
要作为连接素材的卡
!
system
534
请选择要保留在场上的卡
!
system
549
请选择攻击的对象
!
system
550
请选择要发动的效果
...
...
@@ -132,6 +135,9 @@
!
system
569
请选择[%
ls
]的位置
!
system
570
请选择要变成不能使用的卡片区域
!
system
571
请选择要移动到的位置
!
system
572
请选择要放置指示物的卡
!
system
573
请选择要无效的卡
!
system
574
请选择要操作的卡
!
system
1000
卡组
!
system
1001
手卡
!
system
1002
怪兽区
...
...
@@ -168,7 +174,7 @@
!
system
1036
恐龙
!
system
1037
鱼
!
system
1038
海龙
!
system
1039
爬虫
!
system
1039
爬虫
类
!
system
1040
念动力
!
system
1041
幻神兽
!
system
1042
创造神
...
...
@@ -202,6 +208,7 @@
!
system
1075
特殊召唤
!
system
1076
连接
!
system
1080
(
N
/
A
)
!
system
1081
额外怪兽区
#GUI
!
system
1100
魔陷破坏
!
system
1101
怪兽破坏
...
...
@@ -283,7 +290,7 @@
!
system
1228
↓额外选项(无特殊要求请勿修改)
!
system
1229
不检查卡组
!
system
1230
不洗切卡组
!
system
1231
初始
LP
:
!
system
1231
初始
基本分
:
!
system
1232
初始手卡数:
!
system
1233
每回合抽卡:
!
system
1234
主机名称:
...
...
@@ -309,29 +316,39 @@
!
system
1261
大师规则2
!
system
1262
大师规则3
!
system
1263
新大师规则
!
system
1264
大师规则
2020
!
system
1269
数字灵摆图片
!
system
1270
卡片信息
!
system
1271
消息记录
!
system
1272
清除记录
!
system
1273
系统设定
!
system
1274
自动选择怪兽卡片位置
!
system
1275
↑随机选择位置
!
system
1276
自动
排列连锁顺序
!
system
1276
自动
发动并排序必发效果
!
system
1277
没有可连锁的卡时延迟回应
!
system
1278
自动选择魔陷卡片位置
!
system
1279
开启音效
!
system
1280
开启音乐
!
system
1281
按场景切换音乐
!
system
1290
禁用聊天功能
!
system
1282
窗口大小
!
system
1283
小
!
system
1284
中
!
system
1285
大
!
system
1286
特大
!
system
1287
只有连锁
1
也显示连锁动画
!
system
1288
语言(重启后生效)
!
system
1289
默认
!
system
1290
忽略对方发言
!
system
1291
忽略观战者发言
!
system
1292
忽略时点
!
system
1293
显示时点
!
system
1294
可用时点
!
system
1295
取消操作
!
system
1296
完成选择
!
system
1297
切洗
手卡
!
system
1297
洗切
手卡
!
system
1298
辅助功能
!
system
1299
加快动画效果
!
system
1300
禁限卡表
:
!
system
1300
卡组分类
:
!
system
1301
卡组列表:
!
system
1302
保存
!
system
1303
另存
...
...
@@ -358,6 +375,7 @@
!
system
1325
关键字:
!
system
1326
效果
!
system
1327
搜索
!
system
1328
管理
!
system
1329
系列:
!
system
1330
主卡组:
!
system
1331
额外卡组:
...
...
@@ -386,6 +404,7 @@
!
system
1356
是否要放弃对卡组的修改?
!
system
1357
不提示保留对卡组的修改
!
system
1358
键入关键字后自动进行搜索
!
system
1359
是否确定投降?
!
system
1360
上一步
!
system
1361
删除录像
!
system
1362
重命名
...
...
@@ -394,6 +413,7 @@
!
system
1365
重命名失败,可能存在同名文件
!
system
1366
自动保存录像
!
system
1367
录像已自动保存为%
ls
.
yrp
!
system
1369
提取卡组
!
system
1370
星数↑
!
system
1371
攻击↑
!
system
1372
守备↑
...
...
@@ -404,9 +424,12 @@
!
system
1380
人机模式
!
system
1381
残局模式
!
system
1382
人机信息:
!
system
1383
使用旧规则(大师规则3)
!
system
1384
电脑锁定出剪刀
!
system
1385
列表为空,可能未安装合适的人机
!
system
1386
使用正则表达式搜索卡片
!
system
1387
卡组代码
!
system
1388
Ctrl
+
A
全选,
Ctrl
+
C
复制,
Ctrl
+
V
粘贴
!
system
1389
卡组代码无效。
!
system
1390
等待行动中...
!
system
1391
等待行动中....
!
system
1392
等待行动中.....
...
...
@@ -431,7 +454,38 @@
!
system
1418
额外卡组数量应不超过
15
张,当前卡组数量为%
d
张。
!
system
1419
副卡组数量应不超过
15
张,当前卡组数量为%
d
张。
!
system
1420
有额外卡组卡片存在于主卡组,可能是额外卡组数量超过
15
张。
!
system
1421
宣言的卡不符合条件,或无法被主机识别。
!
system
1421
操作无效,请重试。
!
system
1422
宣言的卡不符合条件,或无法被主机识别。
!
system
1423
宣言的属性不符合条件。
!
system
1424
宣言的种族不符合条件
!
system
1425
宣言的数字不符合条件。
!
system
1426
选择的选项不符合条件
!
system
1427
选择的卡片不符合条件。
!
system
1428
选择的连锁不符合条件。
!
system
1429
选择的位置不符合条件。
!
system
1430
选择的表示形式不符合条件。
!
system
1431
选择的指示物不符合条件。
!
system
1450
卡包展示
!
system
1451
人机卡组
!
system
1452
未分类卡组
!
system
1453
--------
!
system
1460
卡组管理
!
system
1461
新建分类
!
system
1462
重命名分类
!
system
1463
删除分类
!
system
1464
新建卡组
!
system
1465
重命名卡组
!
system
1466
删除卡组
!
system
1467
移动到分类
!
system
1468
复制到分类
!
system
1469
请输入分类名:
!
system
1470
确实要删除此分类和分类下全部卡组吗?
!
system
1471
请输入卡组名:
!
system
1472
请选择要移动到的分类:
!
system
1473
请选择要复制到的分类:
!
system
1474
已存在同名分类
!
system
1475
已存在同名卡组
!
system
1476
删除失败
!
system
1500
决斗结束。
!
system
1501
录像结束。
!
system
1502
连接已断开。
...
...
@@ -450,13 +504,13 @@
!
system
1609
[%
ls
]的效果发动
!
system
1610
[%
ls
](%
ls
,%
d
)成为对象
!
system
1611
我方抽了%
d
张卡
!
system
1612
对
手
抽了%
d
张卡
!
system
1612
对
方
抽了%
d
张卡
!
system
1613
我方受到%
d
伤害
!
system
1614
对方受到%
d
伤害
!
system
1615
我方回复%
d
LP
!
system
1616
对方回复%
d
LP
!
system
1615
我方回复%
d
基本分
!
system
1616
对方回复%
d
基本分
!
system
1617
[%
ls
]放置了%
d
个[%
ls
]
!
system
1618
[%
ls
]
移
除了%
d
个[%
ls
]
!
system
1618
[%
ls
]
取
除了%
d
个[%
ls
]
!
system
1619
[%
ls
]攻击[%
ls
]
!
system
1620
[%
ls
]直接攻击
!
system
1621
攻击被无效
...
...
@@ -467,7 +521,7 @@
!
system
1700
可以用鼠标右键%
ls
#victory reason
!
victory
0
x0
投降
!
victory
0
x1
LP
变成
0
!
victory
0
x1
基本分
变成
0
!
victory
0
x2
没有卡可抽
!
victory
0
x3
超时
!
victory
0
x4
失去连接
...
...
@@ -487,7 +541,8 @@
!
victory
0
x1d
「方程式运动员胜利团队」效果胜利
!
victory
0
x1e
「飞行象」效果胜利
!
victory
0
x1f
「守护神 艾克佐迪亚」效果胜利
!
victory
0
x20
由于「%
ls
」的效果获得比赛胜利
!
victory
0
x20
「真艾克佐迪亚」效果胜利
!
victory
0
xffff
由于「%
ls
」的效果获得比赛胜利
#counters
!
counter
0
x1
魔力指示物
!
counter
0
x1002
楔指示物
...
...
@@ -562,6 +617,14 @@
!
counter
0
x104d
信号指示物
!
counter
0
x4e
指示物(魂之灵摆)
!
counter
0
x104f
蛊指示物
!
counter
0
x50
指示物(娱乐伙伴 掉头跑骑兵)
!
counter
0
x51
指示物(蜂军巢)
!
counter
0
x52
指示物(防火龙·暗流体)
!
counter
0
x53
指示物(炽天蝶)
!
counter
0
x54
指示物(星遗物引导的前路)
!
counter
0
x55
指示物(隐居者的大釜)
!
counter
0
x56
炎星指示物
!
counter
0
x57
幻魔指示物
#setnames, using tab for comment
!
setname
0
x1
正义盟军
A
・
O
・
J
!
setname
0
x2
次世代 ジェネクス
...
...
@@ -574,8 +637,8 @@
!
setname
0
x7
古代的机械 アンティーク・ギア
!
setname
0
x8
英雄
HERO
!
setname
0
x3008
元素英雄
E
・
HERO
#
setname 0x5008 幻影英雄 V・HERO
#
setname 0x6008 邪心英雄 E-HERO
!
setname
0
x5008
幻影英雄
V
・
HERO
!
setname
0
x6008
邪心英雄
E
-
HERO
!
setname
0
xa008
假面英雄
M
・
HERO
!
setname
0
xc008
命运英雄
D
-
HERO
!
setname
0
x9
新宇 ネオス
...
...
@@ -672,7 +735,7 @@
#setname 0x4d N/A
#setname 0x4e 进化 エヴォル
!
setname
0
x304e
进化虫 エヴォルド
!
setname
0
x604e
进化龙 エヴォルダ
!
setname
0
x604e
进化龙 エヴォルダ
ー
!
setname
0
x504e
进化帝 エヴォルカイザー
#setname 0x4f 爆裂 バスター
!
setname
0
x104f
/爆裂体 /バスター
...
...
@@ -721,7 +784,7 @@
!
setname
0
x73
超量 エクシーズ
!
setname
0
x1073
混沌超量
CX
(カオスエクシーズ)
!
setname
0
x2073
超量龙 エクシーズ・ドラゴン
!
setname
0
x74
水精鱗
!
setname
0
x74
水精
鳞 水精
鱗
!
setname
0
x75
深渊 アビス
!
setname
0
x76
纹章兽 紋章獣
!
setname
0
x77
海皇
...
...
@@ -739,6 +802,7 @@
!
setname
0
x7e
异热同心武器
ZW
(ゼアル・ウェポン)
!
setname
0
x7f
霍普 ホープ
!
setname
0
x107f
希望皇 霍普 希望皇ホープ
!
setname
0
x207f
未来皇 霍普 未来皇ホープ
!
setname
0
x80
尘妖 ダストン
!
setname
0
x81
炎王
!
setname
0
x1081
炎王兽 炎王獣
...
...
@@ -766,7 +830,7 @@
!
setname
0
x4093
电子暗黑 サイバー・ダーク/サイバーダーク
!
setname
0
x94
电子科技 サイバネティック
!
setname
0
x95
升阶魔法
RUM
!
setname
0
x96
电子鱼人 フィッシュボーグ
!
setname
0
x96
电子鱼人
|非「电子」
フィッシュボーグ
!
setname
0
x97
古遗物 アーティファクト
!
setname
0
x98
魔术师 魔術師
!
setname
0
x99
异色眼 オッドアイズ
...
...
@@ -795,7 +859,7 @@
!
setname
0
xa9
毛绒动物 ファーニマル
!
setname
0
xaa
机壳 クリフォート
!
setname
0
x10aa
隐藏的机壳 アポクリフォート
!
setname
0
xab
文具电子人 ブンボーグ
!
setname
0
xab
文具电子人
|非「电子」
ブンボーグ
!
setname
0
xac
哥布林 ゴブリン
!
setname
0
xad
魔玩具 デストーイ
!
setname
0
xae
契约书 契約書
...
...
@@ -914,7 +978,7 @@
!
setname
0
x10a
珀耳修斯 パーシアス
!
setname
0
x10b
廷达魔三角 ティンダングル
!
setname
0
x10c
机界骑士 ジャックナイツ
!
setname
0
x10d
魔导兽 魔導獣
!
setname
0
x10d
魔导兽
|非「魔导」
魔導獣
!
setname
0
x10e
进化药 進化薬
!
setname
0
x10f
枪管 ヴァレル
!
setname
0
x110
眼纳祭神 アイズ・サクリファイス
...
...
@@ -932,15 +996,50 @@
!
setname
0
x11b
自奏圣乐 オルフェゴール
!
setname
0
x11c
雷龙 サンダー·ドラゴン
!
setname
0
x11d
禁忌的 禁じられた
!
setname
0
x11e
危险!
Danger
!
!
setname
0
x11e
未界域
!
setname
0
x11f
奈芙提斯 ネフティス
!
setname
0
x120
调皮宝贝 プランキッズ
!
setname
0
x121
魔妖
!
setname
0
x122
女武神
Valkyrie
!
setname
0
x123
蔷薇龙 ローズ・ドラゴン
!
setname
0
x122
女武神 ワルキューレ
!
setname
0
x123
蔷薇 ローズ
!
setname
0
x1123
蔷薇龙 ローズ・ドラゴン
!
setname
0
x124
机械天使 機械天使
!
setname
0
x125
笑容 スマイル
!
setname
0
x126
时间
怪盗
Time
Thief
!
setname
0
x126
时间
潜行者 クロノダイバー
!
setname
0
x127
无限起动 無限起動
!
setname
0
x128
魔女术 ウィッチクラフト
!
setname
0
x129
咒眼 呪眼
!
setname
0
x12a
恩底弥翁 エンディミオン
!
setname
0
x12b
海晶少女 マリンセス
!
setname
0
x12c
天威
!
setname
0
x12d
斯摩夫 シムルグ
!
setname
0
x12e
占卜魔女 占い魔女
!
setname
0
x12f
蜂军
B
・
F
(ビー・フォース)
!
setname
0
x130
破械
!
setname
0
x1130
破械神
!
setname
0
x131
梦镜
Dream
Mirror
!
setname
0
x132
斩机 斬機
!
setname
0
x133
半龙女仆 ドラゴンメイド
!
setname
0
x134
王战 ジェネレイド
!
setname
0
x135
@火灵天星 @イグニスター
!
setname
0
x136
“艾”
Ai
(アイ)
!
setname
0
x137
战华 戦華
!
setname
0
x138
巨石遗物 メガリス
!
setname
0
x139
守护神官 守護神官
!
setname
0
x13a
拟声 オノマト
!
setname
0
x13b
叛逆 リベリオン
!
setname
0
x13c
代码破坏者 コードブレイカー
!
setname
0
x13d
星义 ネメシス
!
setname
0
x13e
巴巴罗斯 バルバロス
!
setname
0
x13f
巡掠海魔
Plunder
Patroll
!
setname
0
x140
魔救 アダマシア
!
setname
0
x141
六花
#setname 0x142 黄金国 エルド
!
setname
0
x1142
黄金国巫妖 エルドリッチ
!
setname
0
x2142
黄金国永生药 エルドリクシル
!
setname
0
x143
黄金乡 黄金郷
!
setname
0
x144
幻魔
!
setname
0
x145
教导 ドラグマ
!
setname
0
x146
童话动物 メルフィー
!
setname
0
x147
波波 ポータン
!
setname
0
x148
罗兰 ローラン
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment