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
0
Issues
0
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
聖園ミカ
DataEditorX
Commits
9d62faef
Commit
9d62faef
authored
Dec 31, 2014
by
keyongyu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mse
parent
3d359917
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
204 additions
and
118 deletions
+204
-118
DataEditorX/Config/ConfHelper.cs
DataEditorX/Config/ConfHelper.cs
+74
-0
DataEditorX/Config/MSEConfig.cs
DataEditorX/Config/MSEConfig.cs
+66
-108
DataEditorX/Core/MseMaker.cs
DataEditorX/Core/MseMaker.cs
+4
-4
DataEditorX/Core/MseReader.cs
DataEditorX/Core/MseReader.cs
+10
-0
DataEditorX/Core/TaskHelper.cs
DataEditorX/Core/TaskHelper.cs
+2
-2
DataEditorX/DataEditorX.csproj
DataEditorX/DataEditorX.csproj
+4
-2
DataEditorX/chinese/mse-config.txt
DataEditorX/chinese/mse-config.txt
+22
-1
DataEditorX/single.lua
DataEditorX/single.lua
+0
-0
win32/DataEditorX.exe
win32/DataEditorX.exe
+0
-0
win32/chinese/mse-config.txt
win32/chinese/mse-config.txt
+22
-1
win32/single.lua
win32/single.lua
+0
-0
No files found.
DataEditorX/Config/ConfHelper.cs
0 → 100644
View file @
9d62faef
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
using
System.Globalization
;
namespace
DataEditorX.Config
{
public
class
ConfHelper
{
public
const
string
SEP_LINE
=
" "
;
public
static
string
getValue
(
string
line
)
{
int
t
=
line
.
IndexOf
(
'='
);
if
(
t
>
0
)
return
line
.
Substring
(
t
+
1
).
Trim
();
return
""
;
}
public
static
string
getValue1
(
string
word
)
{
int
i
=
word
.
IndexOf
(
SEP_LINE
);
if
(
i
>
0
)
return
word
.
Substring
(
0
,
i
);
return
""
;
}
public
static
string
getValue2
(
string
word
)
{
int
i
=
word
.
IndexOf
(
SEP_LINE
);
if
(
i
>
0
)
return
word
.
Substring
(
i
+
SEP_LINE
.
Length
);
return
""
;
}
public
static
string
getRegexValue
(
string
line
)
{
return
getRegex
(
getValue
(
line
));
}
public
static
string
getRegex
(
string
word
)
{
return
word
.
Replace
(
"\\n"
,
"\n"
).
Replace
(
"\\t"
,
"\t"
).
Replace
(
"\\s"
,
" "
);
}
public
static
bool
getBooleanValue
(
string
line
)
{
if
(
getValue
(
line
).
ToLower
()
==
"true"
)
return
true
;
else
return
false
;
}
public
static
int
getIntegerValue
(
string
line
,
int
defalut
)
{
int
i
;
try
{
i
=
int
.
Parse
(
getValue
(
line
));
return
i
;
}
catch
{}
return
defalut
;
}
public
static
void
DicAdd
(
Dictionary
<
long
,
string
>
dic
,
string
line
)
{
int
i
=
line
.
IndexOf
(
"0x"
);
int
j
=
(
i
>
0
)
?
line
.
IndexOf
(
SEP_LINE
,
i
+
1
)
:
-
1
;
if
(
j
>
0
)
{
string
strkey
=
line
.
Substring
(
i
+
2
,
j
-
i
-
1
);
string
strval
=
line
.
Substring
(
j
+
1
);
long
key
;
long
.
TryParse
(
strkey
,
NumberStyles
.
HexNumber
,
null
,
out
key
);
if
(!
dic
.
ContainsKey
(
key
))
dic
.
Add
(
key
,
strval
.
Trim
());
}
}
}
}
DataEditorX/Config/MSEConfig.cs
View file @
9d62faef
...
@@ -15,25 +15,11 @@
...
@@ -15,25 +15,11 @@
namespace
DataEditorX.Config
namespace
DataEditorX.Config
{
{
public
class
RegStr
/// <summary>
{
/// Description of MSEConfig.
public
RegStr
(
string
p
,
string
r
)
/// </summary>
{
public
class
MSEConfig
pstr
=
Re
(
p
);
{
rstr
=
Re
(
r
);
}
string
Re
(
string
str
)
{
return
str
.
Replace
(
"\\n"
,
"\n"
).
Replace
(
"\\t"
,
"\t"
).
Replace
(
"\\s"
,
" "
);
}
public
string
pstr
;
public
string
rstr
;
}
/// <summary>
/// Description of MSEConfig.
/// </summary>
public
class
MSEConfig
{
public
const
string
TAG_HEAD
=
"head"
;
public
const
string
TAG_HEAD
=
"head"
;
public
const
string
TAG_MONSTER
=
"monster"
;
public
const
string
TAG_MONSTER
=
"monster"
;
public
const
string
TAG_PENDULUM
=
"pendulum"
;
public
const
string
TAG_PENDULUM
=
"pendulum"
;
...
@@ -42,10 +28,10 @@ public class MSEConfig
...
@@ -42,10 +28,10 @@ public class MSEConfig
public
const
string
FILE_TEMPLATE
=
"mse-template.txt"
;
public
const
string
FILE_TEMPLATE
=
"mse-template.txt"
;
public
const
string
SEP_LINE
=
" "
;
public
const
string
SEP_LINE
=
" "
;
public
MSEConfig
(
string
path
)
public
MSEConfig
(
string
path
)
{
{
init
(
path
);
init
(
path
);
}
}
public
void
init
(
string
path
)
public
void
init
(
string
path
)
{
{
Iscn2tw
=
false
;
Iscn2tw
=
false
;
...
@@ -64,111 +50,83 @@ public void init(string path)
...
@@ -64,111 +50,83 @@ public void init(string path)
string
tmp
=
MyPath
.
Combine
(
path
,
FILE_CONFIG
);
string
tmp
=
MyPath
.
Combine
(
path
,
FILE_CONFIG
);
replaces
=
new
List
<
RegStr
>();
replaces
=
new
Dictionary
<
string
,
string
>();
typeDic
=
new
Dictionary
<
long
,
string
>();
typeDic
=
new
Dictionary
<
long
,
string
>();
raceDic
=
new
Dictionary
<
long
,
string
>();
raceDic
=
new
Dictionary
<
long
,
string
>();
//读取配置
//读取配置
if
(
File
.
Exists
(
tmp
))
if
(!
File
.
Exists
(
tmp
))
return
;
string
[]
lines
=
File
.
ReadAllLines
(
tmp
,
Encoding
.
UTF8
);
foreach
(
string
line
in
lines
)
{
{
string
[]
lines
=
File
.
ReadAllLines
(
tmp
,
Encoding
.
UTF8
);
if
(
string
.
IsNullOrEmpty
(
line
)
||
line
.
StartsWith
(
"#"
))
foreach
(
string
line
in
lines
)
continue
;
if
(
line
.
StartsWith
(
"cn2tw"
))
Iscn2tw
=
ConfHelper
.
getBooleanValue
(
line
);
else
if
(
line
.
StartsWith
(
"spell"
))
str_spell
=
ConfHelper
.
getValue
(
line
);
else
if
(
line
.
StartsWith
(
"trap"
))
str_trap
=
ConfHelper
.
getValue
(
line
);
else
if
(
line
.
StartsWith
(
"pendulum-text"
))
regx_pendulum
=
ConfHelper
.
getRegexValue
(
line
);
else
if
(
line
.
StartsWith
(
"monster-text"
))
regx_monster
=
ConfHelper
.
getRegexValue
(
line
);
else
if
(
line
.
StartsWith
(
"maxcount"
))
maxcount
=
ConfHelper
.
getIntegerValue
(
line
,
0
);
else
if
(
line
.
StartsWith
(
"imagepath"
))
{
{
if
(
string
.
IsNullOrEmpty
(
line
)
||
line
.
StartsWith
(
"#"
))
//如果路径不合法,则为后面的路径
continue
;
imagepath
=
MyPath
.
CheckDir
(
ConfHelper
.
getValue
(
line
),
MyPath
.
Combine
(
path
,
"Images"
));
if
(
line
.
StartsWith
(
"cn2tw"
))
}
Iscn2tw
=
(
getValue
(
line
).
ToLower
()
==
"true"
)
?
true
:
false
;
else
if
(
line
.
StartsWith
(
"replace"
))
else
if
(
line
.
StartsWith
(
"spell"
))
{
//特数字替换
str_spell
=
getValue
(
line
);
string
word
=
ConfHelper
.
getValue
(
line
);
else
if
(
line
.
StartsWith
(
"trap"
))
string
p
=
ConfHelper
.
getRegex
(
ConfHelper
.
getValue1
(
word
));
str_trap
=
getValue
(
line
);
string
r
=
ConfHelper
.
getRegex
(
ConfHelper
.
getValue2
(
word
));
else
if
(
line
.
StartsWith
(
"pendulum-text"
))
if
(!
string
.
IsNullOrEmpty
(
p
))
regx_pendulum
=
getRegex
(
getValue
(
line
));
replaces
.
Add
(
p
,
r
);
else
if
(
line
.
StartsWith
(
"monster-text"
))
regx_monster
=
getRegex
(
getValue
(
line
));
}
else
if
(
line
.
StartsWith
(
"maxcount"
))
else
if
(
line
.
StartsWith
(
"race"
))
int
.
TryParse
(
getValue
(
line
),
out
maxcount
);
{
//种族
else
if
(
line
.
StartsWith
(
"imagepath"
))
ConfHelper
.
DicAdd
(
raceDic
,
line
);
imagepath
=
MyPath
.
CheckDir
(
getValue
(
line
),
MyPath
.
Combine
(
path
,
"Images"
));
}
else
if
(
line
.
StartsWith
(
"replace"
))
else
if
(
line
.
StartsWith
(
"type"
))
{
{
//类型
string
word
=
getValue
(
line
);
ConfHelper
.
DicAdd
(
typeDic
,
line
);
int
t
=
word
.
IndexOf
(
" "
);
if
(
t
>
0
)
{
string
p
=
word
.
Substring
(
0
,
t
);
string
r
=
word
.
Substring
(
t
+
1
);
if
(!
string
.
IsNullOrEmpty
(
p
))
replaces
.
Add
(
new
RegStr
(
p
,
r
));
}
}
else
if
(
line
.
StartsWith
(
"race"
))
{
DicAdd
(
raceDic
,
line
);
}
else
if
(
line
.
StartsWith
(
"type"
))
{
DicAdd
(
typeDic
,
line
);
}
}
}
if
(
str_spell
==
"%%"
&&
str_trap
==
"%%"
)
st_is_symbol
=
true
;
else
st_is_symbol
=
false
;
}
}
//判断魔法标志是否为纯符号
if
(
str_spell
==
"%%"
&&
str_trap
==
"%%"
)
st_is_symbol
=
true
;
else
else
{
st_is_symbol
=
false
;
Iscn2tw
=
false
;
}
}
void
DicAdd
(
Dictionary
<
long
,
string
>
dic
,
string
line
)
{
int
i
=
line
.
IndexOf
(
"0x"
);
int
j
=
(
i
>
0
)?
line
.
IndexOf
(
SEP_LINE
,
i
+
1
):-
1
;
if
(
j
>
0
)
{
string
strkey
=
line
.
Substring
(
i
+
2
,
j
-
i
-
1
);
string
strval
=
line
.
Substring
(
j
+
1
);
long
key
;
long
.
TryParse
(
strkey
,
NumberStyles
.
HexNumber
,
null
,
out
key
);
if
(!
dic
.
ContainsKey
(
key
))
dic
.
Add
(
key
,
strval
.
Trim
());
}
}
}
string
getRegex
(
string
word
)
{
return
word
.
Replace
(
"\\n"
,
"\n"
).
Replace
(
"\\t"
,
"\t"
);
}
string
getValue
(
string
line
)
{
int
t
=
line
.
IndexOf
(
'='
);
if
(
t
>
0
)
return
line
.
Substring
(
t
+
1
).
Trim
();
return
""
;
}
//每个存档最大数
//每个存档最大数
public
int
maxcount
;
public
int
maxcount
;
//图片路径
//图片路径
public
string
imagepath
;
public
string
imagepath
;
//标志是符号
//标志是符号
public
bool
st_is_symbol
;
public
bool
st_is_symbol
;
//魔法标志
//魔法标志
public
string
str_spell
;
public
string
str_spell
;
//陷阱标志
//陷阱标志
public
string
str_trap
;
public
string
str_trap
;
//简体转繁体?
//简体转繁体?
public
bool
Iscn2tw
;
public
bool
Iscn2tw
;
//特数字替换
//特数字替换
public
List
<
RegStr
>
replaces
;
public
Dictionary
<
string
,
string
>
replaces
;
//效果文正则提取
//效果文正则提取
public
string
regx_pendulum
;
public
string
regx_pendulum
;
public
string
regx_monster
;
public
string
regx_monster
;
//模版
//模版
public
string
head
;
public
string
head
;
public
string
monster
;
public
string
monster
;
public
string
pendulum
;
public
string
pendulum
;
public
string
spelltrap
;
public
string
spelltrap
;
public
Dictionary
<
long
,
string
>
typeDic
;
public
Dictionary
<
long
,
string
>
typeDic
;
public
Dictionary
<
long
,
string
>
raceDic
;
public
Dictionary
<
long
,
string
>
raceDic
;
}
}
}
}
DataEditorX/Core/M
SE
.cs
→
DataEditorX/Core/M
seMaker
.cs
View file @
9d62faef
...
@@ -24,7 +24,7 @@ namespace DataEditorX.Core
...
@@ -24,7 +24,7 @@ namespace DataEditorX.Core
/// <summary>
/// <summary>
/// Description of MSE.
/// Description of MSE.
/// </summary>
/// </summary>
public
class
M
SE
public
class
M
seMaker
{
{
MSEConfig
cfg
;
MSEConfig
cfg
;
...
@@ -38,7 +38,7 @@ public string ImagePath
...
@@ -38,7 +38,7 @@ public string ImagePath
get
{
return
cfg
.
imagepath
;}
get
{
return
cfg
.
imagepath
;}
}
}
public
M
SE
(
MSEConfig
mcfg
)
public
M
seMaker
(
MSEConfig
mcfg
)
{
{
cfg
=
mcfg
;
cfg
=
mcfg
;
}
}
...
@@ -46,9 +46,9 @@ public MSE(MSEConfig mcfg)
...
@@ -46,9 +46,9 @@ public MSE(MSEConfig mcfg)
public
string
reItalic
(
string
str
)
public
string
reItalic
(
string
str
)
{
{
str
=
cn2tw
(
str
);
str
=
cn2tw
(
str
);
foreach
(
RegStr
rs
in
cfg
.
replace
s
)
foreach
(
string
rs
in
cfg
.
replaces
.
Key
s
)
{
{
str
=
Regex
.
Replace
(
str
,
rs
.
pstr
,
rs
.
rstr
);
str
=
Regex
.
Replace
(
str
,
rs
,
cfg
.
replaces
[
rs
]
);
}
}
return
str
;
return
str
;
}
}
...
...
DataEditorX/Core/MseReader.cs
0 → 100644
View file @
9d62faef
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
namespace
DataEditorX.Core
{
public
class
MseReader
{
}
}
DataEditorX/Core/TaskHelper.cs
View file @
9d62faef
...
@@ -41,7 +41,7 @@ public class TaskHelper
...
@@ -41,7 +41,7 @@ public class TaskHelper
private
Card
[]
cardlist
;
private
Card
[]
cardlist
;
private
string
[]
mArgs
;
private
string
[]
mArgs
;
private
ImageSet
imgSet
=
new
ImageSet
();
private
ImageSet
imgSet
=
new
ImageSet
();
private
M
SE
mseHelper
;
private
M
seMaker
mseHelper
;
private
bool
isCancel
=
false
;
private
bool
isCancel
=
false
;
private
bool
isRun
=
false
;
private
bool
isRun
=
false
;
private
BackgroundWorker
worker
;
private
BackgroundWorker
worker
;
...
@@ -49,7 +49,7 @@ public class TaskHelper
...
@@ -49,7 +49,7 @@ public class TaskHelper
public
TaskHelper
(
string
datapath
,
BackgroundWorker
worker
,
MSEConfig
mcfg
)
public
TaskHelper
(
string
datapath
,
BackgroundWorker
worker
,
MSEConfig
mcfg
)
{
{
this
.
worker
=
worker
;
this
.
worker
=
worker
;
mseHelper
=
new
M
SE
(
mcfg
);
mseHelper
=
new
M
seMaker
(
mcfg
);
imgSet
.
Init
();
imgSet
.
Init
();
}
}
public
bool
IsRuning
()
public
bool
IsRuning
()
...
...
DataEditorX/DataEditorX.csproj
View file @
9d62faef
...
@@ -68,6 +68,7 @@
...
@@ -68,6 +68,7 @@
<DependentUpon>
CodeEditForm.cs
</DependentUpon>
<DependentUpon>
CodeEditForm.cs
</DependentUpon>
</Compile>
</Compile>
<Compile
Include=
"Common\CheckUpdate.cs"
/>
<Compile
Include=
"Common\CheckUpdate.cs"
/>
<Compile
Include=
"Config\ConfHelper.cs"
/>
<Compile
Include=
"Controls\DoubleContorl.cs"
>
<Compile
Include=
"Controls\DoubleContorl.cs"
>
<SubType>
Component
</SubType>
<SubType>
Component
</SubType>
</Compile>
</Compile>
...
@@ -93,8 +94,9 @@
...
@@ -93,8 +94,9 @@
<Compile
Include=
"Config\DataManager.cs"
/>
<Compile
Include=
"Config\DataManager.cs"
/>
<Compile
Include=
"Config\ImageSet.cs"
/>
<Compile
Include=
"Config\ImageSet.cs"
/>
<Compile
Include=
"Core\LuaFunction.cs"
/>
<Compile
Include=
"Core\LuaFunction.cs"
/>
<Compile
Include=
"Core\M
SE
.cs"
/>
<Compile
Include=
"Core\M
seMaker
.cs"
/>
<Compile
Include=
"Config\MSEConfig.cs"
/>
<Compile
Include=
"Config\MSEConfig.cs"
/>
<Compile
Include=
"Core\MseReader.cs"
/>
<Compile
Include=
"Core\TaskHelper.cs"
/>
<Compile
Include=
"Core\TaskHelper.cs"
/>
<Compile
Include=
"Core\YGOUtil.cs"
/>
<Compile
Include=
"Core\YGOUtil.cs"
/>
<Compile
Include=
"DataEditForm.cs"
>
<Compile
Include=
"DataEditForm.cs"
>
...
@@ -202,7 +204,7 @@
...
@@ -202,7 +204,7 @@
<None
Include=
"chinese\mse-template.txt"
>
<None
Include=
"chinese\mse-template.txt"
>
<CopyToOutputDirectory>
PreserveNewest
</CopyToOutputDirectory>
<CopyToOutputDirectory>
PreserveNewest
</CopyToOutputDirectory>
</None>
</None>
<None
Include=
"
chinese\
single.lua"
>
<None
Include=
"single.lua"
>
<CopyToOutputDirectory>
PreserveNewest
</CopyToOutputDirectory>
<CopyToOutputDirectory>
PreserveNewest
</CopyToOutputDirectory>
</None>
</None>
<None
Include=
"chinese\strings.conf"
>
<None
Include=
"chinese\strings.conf"
>
...
...
DataEditorX/chinese/mse-config.txt
View file @
9d62faef
...
@@ -23,6 +23,25 @@ monster-text = [果|介|述|報]】\n([\S\s]*)
...
@@ -23,6 +23,25 @@ monster-text = [果|介|述|報]】\n([\S\s]*)
replace = ([鮟|鱇|・|·]) <i>$1</i>
replace = ([鮟|鱇|・|·]) <i>$1</i>
#replace = \s <sym-auto>^</sym-auto>
#replace = \s <sym-auto>^</sym-auto>
#replace = ([A-Z]) <i>$1</i>
#replace = ([A-Z]) <i>$1</i>
########################### Read MSE set
#
type = card type
name = name
attribute = attribute
level = level
image = image
type1 = type 1
type2 = type 2
type3 = type 3
type4 = type 4
rule = rule text
atk = attack
def = defense
pscale1 = pendulum scale 1
pscale2 = pendulum scale 2
prule = pendulum text
code = gamecode
###########################
##race
##race
race 0x1 战士族
race 0x1 战士族
race 0x2 魔法师族
race 0x2 魔法师族
...
@@ -48,6 +67,7 @@ race 0x100000 念动力族
...
@@ -48,6 +67,7 @@ race 0x100000 念动力族
race 0x200000 幻神兽族
race 0x200000 幻神兽族
race 0x400000 创造神族
race 0x400000 创造神族
race 0x800000 幻龙族
race 0x800000 幻龙族
###########################
##type
##type
type 0x1 怪兽
type 0x1 怪兽
type 0x2 魔法
type 0x2 魔法
...
@@ -73,4 +93,5 @@ type 0x100000 反击
...
@@ -73,4 +93,5 @@ type 0x100000 反击
type 0x200000 反转
type 0x200000 反转
type 0x400000 卡通
type 0x400000 卡通
type 0x800000 超量
type 0x800000 超量
type 0x1000000 灵摆
type 0x1000000 灵摆
\ No newline at end of file
##########################
\ No newline at end of file
DataEditorX/
chinese/
single.lua
→
DataEditorX/single.lua
View file @
9d62faef
File moved
win32/DataEditorX.exe
View file @
9d62faef
No preview for this file type
win32/chinese/mse-config.txt
View file @
9d62faef
...
@@ -23,6 +23,25 @@ monster-text = [果|介|述|報]】\n([\S\s]*)
...
@@ -23,6 +23,25 @@ monster-text = [果|介|述|報]】\n([\S\s]*)
replace = ([鮟|鱇|・|·]) <i>$1</i>
replace = ([鮟|鱇|・|·]) <i>$1</i>
#replace = \s <sym-auto>^</sym-auto>
#replace = \s <sym-auto>^</sym-auto>
#replace = ([A-Z]) <i>$1</i>
#replace = ([A-Z]) <i>$1</i>
########################### Read MSE set
#
type = card type
name = name
attribute = attribute
level = level
image = image
type1 = type 1
type2 = type 2
type3 = type 3
type4 = type 4
rule = rule text
atk = attack
def = defense
pscale1 = pendulum scale 1
pscale2 = pendulum scale 2
prule = pendulum text
code = gamecode
###########################
##race
##race
race 0x1 战士族
race 0x1 战士族
race 0x2 魔法师族
race 0x2 魔法师族
...
@@ -48,6 +67,7 @@ race 0x100000 念动力族
...
@@ -48,6 +67,7 @@ race 0x100000 念动力族
race 0x200000 幻神兽族
race 0x200000 幻神兽族
race 0x400000 创造神族
race 0x400000 创造神族
race 0x800000 幻龙族
race 0x800000 幻龙族
###########################
##type
##type
type 0x1 怪兽
type 0x1 怪兽
type 0x2 魔法
type 0x2 魔法
...
@@ -73,4 +93,5 @@ type 0x100000 反击
...
@@ -73,4 +93,5 @@ type 0x100000 反击
type 0x200000 反转
type 0x200000 反转
type 0x400000 卡通
type 0x400000 卡通
type 0x800000 超量
type 0x800000 超量
type 0x1000000 灵摆
type 0x1000000 灵摆
\ No newline at end of file
##########################
\ No newline at end of file
win32/
chinese/
single.lua
→
win32/single.lua
View file @
9d62faef
File moved
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