Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro
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
wyykak
ygopro
Commits
3fe03703
Commit
3fe03703
authored
Apr 21, 2018
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'fh' into resize
parents
58ca41dd
78772f2d
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
107 additions
and
87 deletions
+107
-87
gframe/client_field.cpp
gframe/client_field.cpp
+1
-1
gframe/client_field.h
gframe/client_field.h
+1
-1
gframe/deck_con.cpp
gframe/deck_con.cpp
+2
-1
gframe/deck_manager.cpp
gframe/deck_manager.cpp
+36
-0
gframe/drawing.cpp
gframe/drawing.cpp
+3
-2
gframe/duelclient.cpp
gframe/duelclient.cpp
+14
-10
gframe/event_handler.cpp
gframe/event_handler.cpp
+33
-14
gframe/game.cpp
gframe/game.cpp
+7
-2
gframe/game.h
gframe/game.h
+2
-0
gframe/menu_handler.cpp
gframe/menu_handler.cpp
+2
-53
ocgcore
ocgcore
+1
-1
script
script
+1
-1
strings.conf
strings.conf
+4
-1
No files found.
gframe/client_field.cpp
View file @
3fe03703
...
...
@@ -1062,7 +1062,7 @@ bool ClientField::ShowSelectSum(bool panelmode) {
select_ready
=
false
;
}
if
(
select_ready
)
{
ShowCancelOrFinishButton
(
1
);
ShowCancelOrFinishButton
(
2
);
}
else
{
ShowCancelOrFinishButton
(
0
);
}
...
...
gframe/client_field.h
View file @
3fe03703
...
...
@@ -54,8 +54,8 @@ public:
int
select_max
;
int
must_select_count
;
int
select_sumval
;
int
select_cancelable
;
int
select_mode
;
bool
select_cancelable
;
bool
select_panalmode
;
bool
select_ready
;
int
announce_count
;
...
...
gframe/deck_con.cpp
View file @
3fe03703
...
...
@@ -369,7 +369,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break
;
}
int
sel
=
mainGame
->
cbDBDecks
->
getSelected
();
deckManager
.
LoadDeck
(
mainGame
->
cbDBDecks
->
getItem
(
sel
));
if
(
sel
>=
0
)
deckManager
.
LoadDeck
(
mainGame
->
cbDBDecks
->
getItem
(
sel
));
prev_deck
=
sel
;
is_modified
=
false
;
break
;
...
...
gframe/deck_manager.cpp
View file @
3fe03703
...
...
@@ -11,8 +11,44 @@ DeckManager deckManager;
void
DeckManager
::
LoadLFList
()
{
LFList
*
cur
=
NULL
;
FILE
*
fp
=
fopen
(
"lflist.conf"
,
"r"
);
FILE
*
fp_custom
=
fopen
(
"expansions/lflist.conf"
,
"r"
);
char
linebuf
[
256
];
wchar_t
strBuffer
[
256
];
if
(
fp_custom
)
{
while
(
fgets
(
linebuf
,
256
,
fp_custom
))
{
if
(
linebuf
[
0
]
==
'#'
)
continue
;
int
p
=
0
,
sa
=
0
,
code
,
count
;
if
(
linebuf
[
0
]
==
'!'
)
{
sa
=
BufferIO
::
DecodeUTF8
((
const
char
*
)(
&
linebuf
[
1
]),
strBuffer
);
while
(
strBuffer
[
sa
-
1
]
==
L'\r'
||
strBuffer
[
sa
-
1
]
==
L'\n'
)
sa
--
;
LFList
newlist
;
_lfList
.
push_back
(
newlist
);
cur
=
&
_lfList
[
_lfList
.
size
()
-
1
];
memcpy
(
cur
->
listName
,
(
const
void
*
)
strBuffer
,
40
);
cur
->
listName
[
sa
]
=
0
;
cur
->
content
=
new
std
::
unordered_map
<
int
,
int
>
;
cur
->
hash
=
0x7dfcee6a
;
continue
;
}
while
(
linebuf
[
p
]
!=
' '
&&
linebuf
[
p
]
!=
'\t'
&&
linebuf
[
p
]
!=
0
)
p
++
;
if
(
linebuf
[
p
]
==
0
)
continue
;
linebuf
[
p
++
]
=
0
;
sa
=
p
;
code
=
atoi
(
linebuf
);
if
(
code
==
0
)
continue
;
while
(
linebuf
[
p
]
==
' '
||
linebuf
[
p
]
==
'\t'
)
p
++
;
while
(
linebuf
[
p
]
!=
' '
&&
linebuf
[
p
]
!=
'\t'
&&
linebuf
[
p
]
!=
0
)
p
++
;
linebuf
[
p
]
=
0
;
count
=
atoi
(
&
linebuf
[
sa
]);
if
(
cur
==
NULL
)
continue
;
(
*
cur
->
content
)[
code
]
=
count
;
cur
->
hash
=
cur
->
hash
^
((
code
<<
18
)
|
(
code
>>
14
))
^
((
code
<<
(
27
+
count
))
|
(
code
>>
(
5
-
count
)));
}
fclose
(
fp_custom
);
}
if
(
fp
)
{
while
(
fgets
(
linebuf
,
256
,
fp
))
{
if
(
linebuf
[
0
]
==
'#'
)
...
...
gframe/drawing.cpp
View file @
3fe03703
...
...
@@ -920,12 +920,13 @@ void Game::DrawSpec() {
showChat
=
false
;
hideChatTimer
--
;
}
int
maxChatLines
=
dInfo
.
isStarted
?
5
:
8
;
for
(
int
i
=
0
;
i
<
maxChatLines
;
++
i
)
{
for
(
int
i
=
0
;
i
<
8
;
++
i
)
{
static
unsigned
int
chatColor
[]
=
{
0xffffffff
,
0xffffffff
,
0xffffffff
,
0xffffffff
,
0xffffffff
,
0xffffffff
,
0xffffffff
,
0xffffffff
,
0xff8080ff
,
0xffff4040
,
0xffff4040
,
0xffff4040
,
0xff40ff40
,
0xff4040ff
,
0xff40ffff
,
0xffff40ff
,
0xffffff40
,
0xffffffff
,
0xff808080
,
0xff404040
};
if
(
chatTiming
[
i
])
{
chatTiming
[
i
]
--
;
if
(
mainGame
->
dInfo
.
isStarted
&&
i
>=
5
)
continue
;
if
(
!
showChat
&&
i
>
2
)
continue
;
int
w
=
textFont
->
getDimension
(
chatMsg
[
i
].
c_str
()).
Width
;
...
...
gframe/duelclient.cpp
View file @
3fe03703
...
...
@@ -479,7 +479,8 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
else
if
(
mainGame
->
wSinglePlay
->
isVisible
())
mainGame
->
HideElement
(
mainGame
->
wSinglePlay
);
mainGame
->
ShowElement
(
mainGame
->
wHostPrepare
);
mainGame
->
wChat
->
setVisible
(
true
);
if
(
!
mainGame
->
chkIgnore1
->
isChecked
())
mainGame
->
wChat
->
setVisible
(
true
);
mainGame
->
gMutex
.
Unlock
();
mainGame
->
dInfo
.
duel_rule
=
pkt
->
info
.
duel_rule
;
watching
=
0
;
...
...
@@ -588,7 +589,8 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame
->
btnM2
->
setVisible
(
false
);
mainGame
->
btnEP
->
setVisible
(
false
);
mainGame
->
btnShuffle
->
setVisible
(
false
);
mainGame
->
wChat
->
setVisible
(
true
);
if
(
!
mainGame
->
chkIgnore1
->
isChecked
())
mainGame
->
wChat
->
setVisible
(
true
);
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
dField
);
if
(
!
mainGame
->
dInfo
.
isTag
)
{
if
(
selftype
>
1
)
{
...
...
@@ -1340,7 +1342,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
}
case
MSG_SELECT_CARD
:
{
/*int selecting_player = */
BufferIO
::
ReadInt8
(
pbuf
);
mainGame
->
dField
.
select_cancelable
=
BufferIO
::
ReadInt8
(
pbuf
);
mainGame
->
dField
.
select_cancelable
=
BufferIO
::
ReadInt8
(
pbuf
)
!=
0
;
mainGame
->
dField
.
select_min
=
BufferIO
::
ReadInt8
(
pbuf
);
mainGame
->
dField
.
select_max
=
BufferIO
::
ReadInt8
(
pbuf
);
int
count
=
BufferIO
::
ReadInt8
(
pbuf
);
...
...
@@ -1397,8 +1399,9 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
}
case
MSG_SELECT_UNSELECT_CARD
:
{
/*int selecting_player = */
BufferIO
::
ReadInt8
(
pbuf
);
bool
buttonok
=
BufferIO
::
ReadInt8
(
pbuf
);
mainGame
->
dField
.
select_cancelable
=
BufferIO
::
ReadInt8
(
pbuf
);
bool
finishable
=
BufferIO
::
ReadInt8
(
pbuf
)
!=
0
;
bool
cancelable
=
BufferIO
::
ReadInt8
(
pbuf
)
!=
0
;
mainGame
->
dField
.
select_cancelable
=
finishable
||
cancelable
;
mainGame
->
dField
.
select_min
=
BufferIO
::
ReadInt8
(
pbuf
);
mainGame
->
dField
.
select_max
=
BufferIO
::
ReadInt8
(
pbuf
);
int
count1
=
BufferIO
::
ReadInt8
(
pbuf
);
...
...
@@ -1457,19 +1460,20 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
if
(
panelmode
)
{
mainGame
->
gMutex
.
Lock
();
mainGame
->
wCardSelect
->
setText
(
textBuffer
);
mainGame
->
dField
.
ShowSelectCard
(
buttonok
);
mainGame
->
dField
.
ShowSelectCard
(
mainGame
->
dField
.
select_cancelable
);
mainGame
->
gMutex
.
Unlock
();
}
else
{
mainGame
->
stHintMsg
->
setText
(
textBuffer
);
mainGame
->
stHintMsg
->
setVisible
(
true
);
}
if
(
mainGame
->
dField
.
select_cancelable
)
{
if
(
count2
==
0
)
mainGame
->
dField
.
ShowCancelOrFinishButton
(
1
);
else
{
if
(
finishable
)
{
mainGame
->
dField
.
select_ready
=
true
;
mainGame
->
dField
.
ShowCancelOrFinishButton
(
2
);
}
else
{
mainGame
->
dField
.
ShowCancelOrFinishButton
(
1
);
}
}
else
mainGame
->
dField
.
ShowCancelOrFinishButton
(
0
);
...
...
@@ -1688,7 +1692,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
}
case
MSG_SELECT_TRIBUTE
:
{
/*int selecting_player = */
BufferIO
::
ReadInt8
(
pbuf
);
mainGame
->
dField
.
select_cancelable
=
BufferIO
::
ReadInt8
(
pbuf
)
?
true
:
false
;
mainGame
->
dField
.
select_cancelable
=
BufferIO
::
ReadInt8
(
pbuf
)
!=
0
;
mainGame
->
dField
.
select_min
=
BufferIO
::
ReadInt8
(
pbuf
);
mainGame
->
dField
.
select_max
=
BufferIO
::
ReadInt8
(
pbuf
);
int
count
=
BufferIO
::
ReadInt8
(
pbuf
);
...
...
gframe/event_handler.cpp
View file @
3fe03703
...
...
@@ -464,6 +464,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
list_command
=
COMMAND_SPSUMMON
;
mainGame
->
wCardSelect
->
setText
(
dataManager
.
GetSysString
(
509
));
ShowSelectCard
();
select_ready
=
false
;
ShowCancelOrFinishButton
(
1
);
}
break
;
...
...
@@ -956,18 +957,6 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
UpdateDeclarableCode
(
true
);
break
;
}
case
EDITBOX_CHAT
:
{
if
(
mainGame
->
dInfo
.
isReplay
)
break
;
const
wchar_t
*
input
=
mainGame
->
ebChatInput
->
getText
();
if
(
input
[
0
])
{
unsigned
short
msgbuf
[
256
];
int
len
=
BufferIO
::
CopyWStr
(
input
,
msgbuf
,
256
);
DuelClient
::
SendBufferToServer
(
CTOS_CHAT
,
msgbuf
,
(
len
+
1
)
*
sizeof
(
short
));
mainGame
->
ebChatInput
->
setText
(
L""
);
}
break
;
}
}
break
;
}
...
...
@@ -1763,13 +1752,17 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
s32
id
=
event
.
GUIEvent
.
Caller
->
getID
();
switch
(
event
.
GUIEvent
.
EventType
)
{
case
irr
:
:
gui
::
EGET_ELEMENT_HOVERED
:
{
if
(
event
.
GUIEvent
.
Caller
->
getType
()
==
EGUIET_EDIT_BOX
)
if
(
event
.
GUIEvent
.
Caller
->
getType
()
==
EGUIET_EDIT_BOX
)
{
mainGame
->
SetCursor
(
event
.
GUIEvent
.
Caller
->
isEnabled
()
?
ECI_IBEAM
:
ECI_NORMAL
);
return
true
;
}
break
;
}
case
irr
:
:
gui
::
EGET_ELEMENT_LEFT
:
{
if
(
event
.
GUIEvent
.
Caller
->
getType
()
==
EGUIET_EDIT_BOX
)
if
(
event
.
GUIEvent
.
Caller
->
getType
()
==
EGUIET_EDIT_BOX
)
{
mainGame
->
SetCursor
(
ECI_NORMAL
);
return
true
;
}
break
;
}
case
irr
:
:
gui
::
EGET_BUTTON_CLICKED
:
{
...
...
@@ -1797,6 +1790,14 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
return
true
;
break
;
}
case
CHECKBOX_DISABLE_CHAT
:
{
bool
show
=
mainGame
->
is_building
?
false
:
!
mainGame
->
chkIgnore1
->
isChecked
();
mainGame
->
wChat
->
setVisible
(
show
);
if
(
!
show
)
mainGame
->
ClearChatMsg
();
return
true
;
break
;
}
}
break
;
}
...
...
@@ -1849,6 +1850,24 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
}
break
;
}
case
irr
:
:
gui
::
EGET_EDITBOX_ENTER
:
{
switch
(
id
)
{
case
EDITBOX_CHAT
:
{
if
(
mainGame
->
dInfo
.
isReplay
)
break
;
const
wchar_t
*
input
=
mainGame
->
ebChatInput
->
getText
();
if
(
input
[
0
])
{
unsigned
short
msgbuf
[
256
];
int
len
=
BufferIO
::
CopyWStr
(
input
,
msgbuf
,
256
);
DuelClient
::
SendBufferToServer
(
CTOS_CHAT
,
msgbuf
,
(
len
+
1
)
*
sizeof
(
short
));
mainGame
->
ebChatInput
->
setText
(
L""
);
return
true
;
}
break
;
}
}
break
;
}
default:
break
;
}
break
;
...
...
gframe/game.cpp
View file @
3fe03703
...
...
@@ -15,7 +15,7 @@
#include <dirent.h>
#endif
const
unsigned
short
PRO_VERSION
=
0x134
2
;
const
unsigned
short
PRO_VERSION
=
0x134
3
;
namespace
ygo
{
...
...
@@ -270,7 +270,7 @@ bool Game::Initialize() {
//system
irr
::
gui
::
IGUITab
*
tabSystem
=
wInfos
->
addTab
(
dataManager
.
GetSysString
(
1273
));
posY
=
20
;
chkIgnore1
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
posX
,
posY
,
posX
+
260
,
posY
+
25
),
tabSystem
,
-
1
,
dataManager
.
GetSysString
(
1290
));
chkIgnore1
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
posX
,
posY
,
posX
+
260
,
posY
+
25
),
tabSystem
,
CHECKBOX_DISABLE_CHAT
,
dataManager
.
GetSysString
(
1290
));
chkIgnore1
->
setChecked
(
gameConf
.
chkIgnore1
!=
0
);
posY
+=
30
;
chkIgnore2
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
posX
,
posY
,
posX
+
260
,
posY
+
25
),
tabSystem
,
-
1
,
dataManager
.
GetSysString
(
1291
));
...
...
@@ -1350,6 +1350,11 @@ void Game::AddChatMsg(wchar_t* msg, int player) {
}
chatMsg
[
0
].
append
(
msg
);
}
void
Game
::
ClearChatMsg
()
{
for
(
int
i
=
7
;
i
>=
0
;
--
i
)
{
chatTiming
[
i
]
=
0
;
}
}
void
Game
::
AddDebugMsg
(
char
*
msg
)
{
if
(
enable_log
&
0x1
)
{
...
...
gframe/game.h
View file @
3fe03703
...
...
@@ -136,6 +136,7 @@ public:
void
SaveConfig
();
void
ShowCardInfo
(
int
code
,
bool
resize
=
false
);
void
AddChatMsg
(
wchar_t
*
msg
,
int
player
);
void
ClearChatMsg
();
void
AddDebugMsg
(
char
*
msgbuf
);
void
ClearTextures
();
void
CloseDuelWindow
();
...
...
@@ -642,6 +643,7 @@ extern Game* mainGame;
#define CHECKBOX_ENABLE_SOUND 361
#define CHECKBOX_ENABLE_MUSIC 362
#define SCROLL_VOLUME 363
#define CHECKBOX_DISABLE_CHAT 364
#define COMBOBOX_SORTTYPE 370
#define COMBOBOX_LIMIT 371
...
...
gframe/menu_handler.cpp
View file @
3fe03703
...
...
@@ -27,6 +27,8 @@ void UpdateDeck() {
DuelClient
::
SendBufferToServer
(
CTOS_UPDATE_DECK
,
deckbuf
,
pdeck
-
deckbuf
);
}
bool
MenuHandler
::
OnEvent
(
const
irr
::
SEvent
&
event
)
{
if
(
mainGame
->
dField
.
OnCommonEvent
(
event
))
return
false
;
switch
(
event
.
EventType
)
{
case
irr
:
:
EET_GUI_EVENT
:
{
irr
::
gui
::
IGUIElement
*
caller
=
event
.
GUIEvent
.
Caller
;
...
...
@@ -40,16 +42,6 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
break
;
}
switch
(
event
.
GUIEvent
.
EventType
)
{
case
irr
:
:
gui
::
EGET_ELEMENT_HOVERED
:
{
if
(
event
.
GUIEvent
.
Caller
->
getType
()
==
EGUIET_EDIT_BOX
)
mainGame
->
SetCursor
(
event
.
GUIEvent
.
Caller
->
isEnabled
()
?
ECI_IBEAM
:
ECI_NORMAL
);
break
;
}
case
irr
:
:
gui
::
EGET_ELEMENT_LEFT
:
{
if
(
event
.
GUIEvent
.
Caller
->
getType
()
==
EGUIET_EDIT_BOX
)
mainGame
->
SetCursor
(
ECI_NORMAL
);
break
;
}
case
irr
:
:
gui
::
EGET_BUTTON_CLICKED
:
{
if
(
id
<
110
)
soundManager
.
PlaySoundEffect
(
SOUND_MENU
);
...
...
@@ -510,49 +502,6 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
}
break
;
}
case
irr
:
:
gui
::
EGET_EDITBOX_ENTER
:
{
switch
(
id
)
{
case
EDITBOX_CHAT
:
{
if
(
mainGame
->
dInfo
.
isReplay
)
break
;
const
wchar_t
*
input
=
mainGame
->
ebChatInput
->
getText
();
if
(
input
[
0
])
{
unsigned
short
msgbuf
[
256
];
if
(
mainGame
->
dInfo
.
isStarted
)
{
if
(
mainGame
->
dInfo
.
player_type
<
7
)
{
if
(
mainGame
->
dInfo
.
isTag
&&
(
mainGame
->
dInfo
.
player_type
%
2
))
mainGame
->
AddChatMsg
((
wchar_t
*
)
input
,
2
);
else
mainGame
->
AddChatMsg
((
wchar_t
*
)
input
,
0
);
}
else
mainGame
->
AddChatMsg
((
wchar_t
*
)
input
,
10
);
}
else
mainGame
->
AddChatMsg
((
wchar_t
*
)
input
,
7
);
int
len
=
BufferIO
::
CopyWStr
(
input
,
msgbuf
,
256
);
DuelClient
::
SendBufferToServer
(
CTOS_CHAT
,
msgbuf
,
(
len
+
1
)
*
sizeof
(
short
));
mainGame
->
ebChatInput
->
setText
(
L""
);
}
break
;
}
}
break
;
}
default:
break
;
}
break
;
}
case
irr
:
:
EET_KEY_INPUT_EVENT
:
{
switch
(
event
.
KeyInput
.
Key
)
{
case
irr
:
:
KEY_KEY_R
:
{
if
(
!
event
.
KeyInput
.
PressedDown
&&
!
mainGame
->
HasFocus
(
EGUIET_EDIT_BOX
))
mainGame
->
textFont
->
setTransparency
(
true
);
break
;
}
case
irr
:
:
KEY_ESCAPE
:
{
if
(
!
mainGame
->
HasFocus
(
EGUIET_EDIT_BOX
))
mainGame
->
device
->
minimizeWindow
();
break
;
}
default:
break
;
}
break
;
...
...
ocgcore
@
24dff6a9
Subproject commit
9a253618906d678a5b0722b0f42e3c8f009e9c7d
Subproject commit
24dff6a9a81f3f3dae45b2e2600203a08b19a0cf
script
@
5f197f2d
Subproject commit
8548beecbbb8e209a2c8c25b12e55d165533a39
5
Subproject commit
5f197f2d2cd3a619b48ce30d20b57a7fe5bb0d6
5
strings.conf
View file @
3fe03703
...
...
@@ -305,7 +305,7 @@
!
system
1279
开启音效
!
system
1280
开启音乐
!
system
1281
按场景切换音乐
!
system
1290
忽略对方发言
!
system
1290
禁用聊天功能
!
system
1291
忽略观战者发言
!
system
1292
忽略时点
!
system
1293
显示时点
...
...
@@ -531,6 +531,7 @@
!
counter
0
x1045
鳞粉指示物
!
counter
0
x46
指示物(刚鬼死斗)
!
counter
0
x47
指示物(限制代码)
!
counter
0
x48
指示物(连接死亡炮塔)
#setnames, using tab for comment
!
setname
0
x1
正义盟军
A
・
O
・
J
!
setname
0
x2
次世代 ジェネクス
...
...
@@ -891,3 +892,5 @@
!
setname
0
x114
空牙团 空牙団
!
setname
0
x115
闪刀 閃刀
!
setname
0
x1115
闪刀姬 閃刀姫
!
setname
0
x116
圣像骑士 パラディオン
!
setname
0
x117
魔神仪 魔神儀
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