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
YGOPRO-520DIY
ygopro
Commits
87a5e4a2
Commit
87a5e4a2
authored
Jul 03, 2019
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'fh' into patch-deck-category
parents
c6e83ee3
e65e5c61
Changes
23
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
483 additions
and
209 deletions
+483
-209
gframe/CGUIImageButton.cpp
gframe/CGUIImageButton.cpp
+23
-0
gframe/CGUIImageButton.h
gframe/CGUIImageButton.h
+4
-0
gframe/client_field.cpp
gframe/client_field.cpp
+7
-7
gframe/client_field.h
gframe/client_field.h
+3
-3
gframe/data_manager.cpp
gframe/data_manager.cpp
+2
-2
gframe/duelclient.cpp
gframe/duelclient.cpp
+120
-87
gframe/duelclient.h
gframe/duelclient.h
+3
-0
gframe/event_handler.cpp
gframe/event_handler.cpp
+6
-2
gframe/game.cpp
gframe/game.cpp
+19
-12
gframe/game.h
gframe/game.h
+1
-0
gframe/netserver.cpp
gframe/netserver.cpp
+4
-10
gframe/network.h
gframe/network.h
+1
-1
gframe/replay_mode.cpp
gframe/replay_mode.cpp
+13
-10
gframe/single_duel.cpp
gframe/single_duel.cpp
+11
-3
gframe/single_duel.h
gframe/single_duel.h
+1
-1
gframe/single_mode.cpp
gframe/single_mode.cpp
+6
-8
gframe/sound_manager.cpp
gframe/sound_manager.cpp
+2
-0
gframe/tag_duel.cpp
gframe/tag_duel.cpp
+10
-2
gframe/tag_duel.h
gframe/tag_duel.h
+1
-1
lflist.conf
lflist.conf
+212
-39
ocgcore
ocgcore
+1
-1
script
script
+1
-1
strings.conf
strings.conf
+32
-19
No files found.
gframe/CGUIImageButton.cpp
View file @
87a5e4a2
...
...
@@ -97,8 +97,10 @@ void Draw2DImageQuad(video::IVideoDriver* driver, video::ITexture* image, core::
CGUIImageButton
::
CGUIImageButton
(
IGUIEnvironment
*
environment
,
IGUIElement
*
parent
,
s32
id
,
core
::
rect
<
s32
>
rectangle
)
:
CGUIButton
(
environment
,
parent
,
id
,
rectangle
)
{
isDrawImage
=
true
;
isFixedSize
=
false
;
imageRotation
=
0.0
f
;
imageScale
=
core
::
vector2df
(
1.0
f
,
1.0
f
);
imageSize
=
core
::
dimension2di
(
rectangle
.
getWidth
(),
rectangle
.
getHeight
());
}
CGUIImageButton
*
CGUIImageButton
::
addImageButton
(
IGUIEnvironment
*
env
,
const
core
::
rect
<
s32
>&
rectangle
,
IGUIElement
*
parent
,
s32
id
)
{
CGUIImageButton
*
button
=
new
CGUIImageButton
(
env
,
parent
?
parent
:
0
,
id
,
rectangle
);
...
...
@@ -129,6 +131,23 @@ void CGUIImageButton::draw() {
irr
::
gui
::
Draw2DImageRotation
(
driver
,
Image
,
ImageRect
,
pos
,
center
,
imageRotation
,
imageScale
);
IGUIElement
::
draw
();
}
void
CGUIImageButton
::
setImage
(
video
::
ITexture
*
image
)
{
if
(
image
)
image
->
grab
();
if
(
Image
)
Image
->
drop
();
Image
=
image
;
if
(
image
)
{
ImageRect
=
core
::
rect
<
s32
>
(
core
::
position2d
<
s32
>
(
0
,
0
),
image
->
getOriginalSize
());
if
(
isFixedSize
)
imageScale
=
core
::
vector2df
((
irr
::
f32
)
imageSize
.
Width
/
image
->
getSize
().
Width
,
(
irr
::
f32
)
imageSize
.
Height
/
image
->
getSize
().
Height
);
}
if
(
!
PressedImage
)
setPressedImage
(
Image
);
}
void
CGUIImageButton
::
setDrawImage
(
bool
b
)
{
isDrawImage
=
b
;
}
...
...
@@ -138,6 +157,10 @@ void CGUIImageButton::setImageRotation(f32 r) {
void
CGUIImageButton
::
setImageScale
(
core
::
vector2df
s
)
{
imageScale
=
s
;
}
void
CGUIImageButton
::
setImageSize
(
core
::
dimension2di
s
)
{
isFixedSize
=
true
;
imageSize
=
s
;
}
IGUIFont
*
CGUIImageButton
::
getOverrideFont
(
void
)
const
{
...
...
gframe/CGUIImageButton.h
View file @
87a5e4a2
...
...
@@ -17,16 +17,20 @@ public:
CGUIImageButton
(
IGUIEnvironment
*
environment
,
IGUIElement
*
parent
,
s32
id
,
core
::
rect
<
s32
>
rectangle
);
static
CGUIImageButton
*
addImageButton
(
IGUIEnvironment
*
env
,
const
core
::
rect
<
s32
>&
rectangle
,
IGUIElement
*
parent
,
s32
id
);
virtual
void
draw
();
virtual
void
setImage
(
video
::
ITexture
*
image
=
0
);
virtual
void
setDrawImage
(
bool
b
);
virtual
void
setImageRotation
(
f32
r
);
virtual
void
setImageScale
(
core
::
vector2df
s
);
virtual
void
setImageSize
(
core
::
dimension2di
s
);
virtual
IGUIFont
*
getOverrideFont
(
void
)
const
;
virtual
IGUIFont
*
getActiveFont
()
const
;
private:
bool
isDrawImage
;
bool
isFixedSize
;
f32
imageRotation
;
core
::
vector2df
imageScale
;
core
::
dimension2di
imageSize
;
};
}
...
...
gframe/client_field.cpp
View file @
87a5e4a2
...
...
@@ -1418,7 +1418,7 @@ static bool is_declarable(T const& cd, const std::vector<int>& opcode) {
return
cd
.
code
==
CARD_MARINE_DOLPHIN
||
cd
.
code
==
CARD_TWINKLE_MOSS
||
(
!
cd
.
alias
&&
(
cd
.
type
&
(
TYPE_MONSTER
+
TYPE_TOKEN
))
!=
(
TYPE_MONSTER
+
TYPE_TOKEN
));
}
void
ClientField
::
UpdateDeclarableCodeType
(
bool
enter
)
{
void
ClientField
::
UpdateDeclarableCodeType
()
{
const
wchar_t
*
pname
=
mainGame
->
ebANCard
->
getText
();
int
trycode
=
BufferIO
::
GetVal
(
pname
);
CardString
cstr
;
...
...
@@ -1430,7 +1430,7 @@ void ClientField::UpdateDeclarableCodeType(bool enter) {
ancard
.
push_back
(
trycode
);
return
;
}
if
(
(
pname
[
0
]
==
0
||
pname
[
1
]
==
0
)
&&
!
enter
)
{
if
(
pname
[
0
]
==
0
)
{
std
::
vector
<
int
>
cache
;
cache
.
swap
(
ancard
);
int
sel
=
mainGame
->
lstANCard
->
getSelected
();
...
...
@@ -1465,7 +1465,7 @@ void ClientField::UpdateDeclarableCodeType(bool enter) {
}
}
}
void
ClientField
::
UpdateDeclarableCodeOpcode
(
bool
enter
)
{
void
ClientField
::
UpdateDeclarableCodeOpcode
()
{
const
wchar_t
*
pname
=
mainGame
->
ebANCard
->
getText
();
int
trycode
=
BufferIO
::
GetVal
(
pname
);
CardString
cstr
;
...
...
@@ -1477,7 +1477,7 @@ void ClientField::UpdateDeclarableCodeOpcode(bool enter) {
ancard
.
push_back
(
trycode
);
return
;
}
if
(
(
pname
[
0
]
==
0
||
pname
[
1
]
==
0
)
&&
!
enter
)
{
if
(
pname
[
0
]
==
0
)
{
std
::
vector
<
int
>
cache
;
cache
.
swap
(
ancard
);
int
sel
=
mainGame
->
lstANCard
->
getSelected
();
...
...
@@ -1512,10 +1512,10 @@ void ClientField::UpdateDeclarableCodeOpcode(bool enter) {
}
}
}
void
ClientField
::
UpdateDeclarableCode
(
bool
enter
)
{
void
ClientField
::
UpdateDeclarableCode
()
{
if
(
opcode
.
size
()
==
0
)
UpdateDeclarableCodeType
(
enter
);
UpdateDeclarableCodeType
();
else
UpdateDeclarableCodeOpcode
(
enter
);
UpdateDeclarableCodeOpcode
();
}
}
gframe/client_field.h
View file @
87a5e4a2
...
...
@@ -112,9 +112,9 @@ public:
void
check_sel_sum_t
(
const
std
::
set
<
ClientCard
*>&
left
,
int
acc
);
bool
check_sum
(
std
::
set
<
ClientCard
*>::
const_iterator
index
,
std
::
set
<
ClientCard
*>::
const_iterator
end
,
int
acc
,
int
count
);
void
UpdateDeclarableCodeType
(
bool
enter
);
void
UpdateDeclarableCodeOpcode
(
bool
enter
);
void
UpdateDeclarableCode
(
bool
enter
);
void
UpdateDeclarableCodeType
();
void
UpdateDeclarableCodeOpcode
();
void
UpdateDeclarableCode
();
irr
::
gui
::
IGUIElement
*
panel
;
std
::
vector
<
int
>
ancard
;
...
...
gframe/data_manager.cpp
View file @
87a5e4a2
...
...
@@ -222,8 +222,8 @@ const wchar_t* DataManager::GetSetName(int code) {
}
unsigned
int
DataManager
::
GetSetCode
(
const
wchar_t
*
setname
)
{
for
(
auto
csit
=
_setnameStrings
.
begin
();
csit
!=
_setnameStrings
.
end
();
++
csit
)
{
auto
xpos
=
csit
->
second
.
find_first_of
(
L'|'
);
//setname|extra info
if
(
csit
->
second
.
compare
(
0
,
xpos
,
setname
)
==
0
)
auto
xpos
=
csit
->
second
.
find_first_of
(
L'|'
);
//setname|
another setname or
extra info
if
(
csit
->
second
.
compare
(
0
,
xpos
,
setname
)
==
0
||
csit
->
second
.
compare
(
xpos
+
1
,
csit
->
second
.
length
(),
setname
)
==
0
)
return
csit
->
first
;
}
return
0
;
...
...
gframe/duelclient.cpp
View file @
87a5e4a2
This diff is collapsed.
Click to expand it.
gframe/duelclient.h
View file @
87a5e4a2
...
...
@@ -31,6 +31,9 @@ private:
static
bool
is_closing
;
static
int
select_hint
;
static
int
select_unselect_hint
;
static
int
last_select_hint
;
static
char
last_successful_msg
[
2048
];
static
unsigned
int
last_successful_msg_length
;
static
wchar_t
event_string
[
256
];
static
mtrandom
rnd
;
public:
...
...
gframe/event_handler.cpp
View file @
87a5e4a2
...
...
@@ -20,6 +20,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
return
false
;
switch
(
event
.
EventType
)
{
case
irr
:
:
EET_GUI_EVENT
:
{
if
(
mainGame
->
fadingList
.
size
())
break
;
s32
id
=
event
.
GUIEvent
.
Caller
->
getID
();
switch
(
event
.
GUIEvent
.
EventType
)
{
case
irr
:
:
gui
::
EGET_BUTTON_CLICKED
:
{
...
...
@@ -612,6 +614,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case
BUTTON_CARD_4
:
{
if
(
mainGame
->
dInfo
.
isReplay
)
break
;
mainGame
->
stCardListTip
->
setVisible
(
false
);
switch
(
mainGame
->
dInfo
.
curMsg
)
{
case
MSG_SELECT_IDLECMD
:
case
MSG_SELECT_BATTLECMD
:
...
...
@@ -757,6 +760,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
break
;
}
case
BUTTON_CARD_SEL_OK
:
{
mainGame
->
stCardListTip
->
setVisible
(
false
);
if
(
mainGame
->
dInfo
.
isReplay
)
{
mainGame
->
HideElement
(
mainGame
->
wCardSelect
);
break
;
...
...
@@ -959,7 +963,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case
irr
:
:
gui
::
EGET_EDITBOX_CHANGED
:
{
switch
(
id
)
{
case
EDITBOX_ANCARD
:
{
UpdateDeclarableCode
(
false
);
UpdateDeclarableCode
();
break
;
}
}
...
...
@@ -968,7 +972,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case
irr
:
:
gui
::
EGET_EDITBOX_ENTER
:
{
switch
(
id
)
{
case
EDITBOX_ANCARD
:
{
UpdateDeclarableCode
(
true
);
UpdateDeclarableCode
();
break
;
}
}
...
...
gframe/game.cpp
View file @
87a5e4a2
...
...
@@ -10,7 +10,7 @@
#include "netserver.h"
#include "single_mode.h"
const
unsigned
short
PRO_VERSION
=
0x134
9
;
const
unsigned
short
PRO_VERSION
=
0x134
A
;
namespace
ygo
{
...
...
@@ -416,15 +416,15 @@ bool Game::Initialize() {
wPosSelect
->
getCloseButton
()
->
setVisible
(
false
);
wPosSelect
->
setVisible
(
false
);
btnPSAU
=
irr
::
gui
::
CGUIImageButton
::
addImageButton
(
env
,
rect
<
s32
>
(
10
,
45
,
150
,
185
),
wPosSelect
,
BUTTON_POS_AU
);
btnPSAU
->
setImageS
cale
(
core
::
vector2df
(
0.5
,
0.5
));
btnPSAU
->
setImageS
ize
(
core
::
dimension2di
(
CARD_IMG_WIDTH
*
0.5
f
,
CARD_IMG_HEIGHT
*
0.5
f
));
btnPSAD
=
irr
::
gui
::
CGUIImageButton
::
addImageButton
(
env
,
rect
<
s32
>
(
155
,
45
,
295
,
185
),
wPosSelect
,
BUTTON_POS_AD
);
btnPSAD
->
setImageS
cale
(
core
::
vector2df
(
0.5
,
0.5
));
btnPSAD
->
setImageS
ize
(
core
::
dimension2di
(
CARD_IMG_WIDTH
*
0.5
f
,
CARD_IMG_HEIGHT
*
0.5
f
));
btnPSAD
->
setImage
(
imageManager
.
tCover
[
2
]);
btnPSDU
=
irr
::
gui
::
CGUIImageButton
::
addImageButton
(
env
,
rect
<
s32
>
(
300
,
45
,
440
,
185
),
wPosSelect
,
BUTTON_POS_DU
);
btnPSDU
->
setImageS
cale
(
core
::
vector2df
(
0.5
,
0.5
));
btnPSDU
->
setImageS
ize
(
core
::
dimension2di
(
CARD_IMG_WIDTH
*
0.5
f
,
CARD_IMG_HEIGHT
*
0.5
f
));
btnPSDU
->
setImageRotation
(
270
);
btnPSDD
=
irr
::
gui
::
CGUIImageButton
::
addImageButton
(
env
,
rect
<
s32
>
(
445
,
45
,
585
,
185
),
wPosSelect
,
BUTTON_POS_DD
);
btnPSDD
->
setImageS
cale
(
core
::
vector2df
(
0.5
,
0.5
));
btnPSDD
->
setImageS
ize
(
core
::
dimension2di
(
CARD_IMG_WIDTH
*
0.5
f
,
CARD_IMG_HEIGHT
*
0.5
f
));
btnPSDD
->
setImageRotation
(
270
);
btnPSDD
->
setImage
(
imageManager
.
tCover
[
2
]);
//card select
...
...
@@ -436,7 +436,7 @@ bool Game::Initialize() {
stCardPos
[
i
]
->
setBackgroundColor
(
0xffffffff
);
stCardPos
[
i
]
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
btnCardSelect
[
i
]
=
irr
::
gui
::
CGUIImageButton
::
addImageButton
(
env
,
rect
<
s32
>
(
30
+
125
*
i
,
55
,
150
+
125
*
i
,
225
),
wCardSelect
,
BUTTON_CARD_0
+
i
);
btnCardSelect
[
i
]
->
setImageS
cale
(
core
::
vector2df
(
0.6
f
,
0.6
f
));
btnCardSelect
[
i
]
->
setImageS
ize
(
core
::
dimension2di
(
CARD_IMG_WIDTH
*
0.6
f
,
CARD_IMG_HEIGHT
*
0.6
f
));
}
scrCardList
=
env
->
addScrollBar
(
true
,
rect
<
s32
>
(
30
,
235
,
650
,
255
),
wCardSelect
,
SCROLL_CARD_SELECT
);
btnSelectOK
=
env
->
addButton
(
rect
<
s32
>
(
300
,
265
,
380
,
290
),
wCardSelect
,
BUTTON_CARD_SEL_OK
,
dataManager
.
GetSysString
(
1211
));
...
...
@@ -449,7 +449,7 @@ bool Game::Initialize() {
stDisplayPos
[
i
]
->
setBackgroundColor
(
0xffffffff
);
stDisplayPos
[
i
]
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
btnCardDisplay
[
i
]
=
irr
::
gui
::
CGUIImageButton
::
addImageButton
(
env
,
rect
<
s32
>
(
30
+
125
*
i
,
55
,
150
+
125
*
i
,
225
),
wCardDisplay
,
BUTTON_DISPLAY_0
+
i
);
btnCardDisplay
[
i
]
->
setImageS
cale
(
core
::
vector2df
(
0.6
f
,
0.6
f
));
btnCardDisplay
[
i
]
->
setImageS
ize
(
core
::
dimension2di
(
CARD_IMG_WIDTH
*
0.6
f
,
CARD_IMG_HEIGHT
*
0.6
f
));
}
scrDisplayList
=
env
->
addScrollBar
(
true
,
rect
<
s32
>
(
30
,
235
,
650
,
255
),
wCardDisplay
,
SCROLL_CARD_DISPLAY
);
btnDisplayOK
=
env
->
addButton
(
rect
<
s32
>
(
300
,
265
,
380
,
290
),
wCardDisplay
,
BUTTON_CARD_DISP_OK
,
dataManager
.
GetSysString
(
1211
));
...
...
@@ -461,13 +461,13 @@ bool Game::Initialize() {
cbANNumber
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
btnANNumberOK
=
env
->
addButton
(
rect
<
s32
>
(
80
,
60
,
150
,
85
),
wANNumber
,
BUTTON_ANNUMBER_OK
,
dataManager
.
GetSysString
(
1211
));
//announce card
wANCard
=
env
->
addWindow
(
rect
<
s32
>
(
5
60
,
170
,
770
,
37
0
),
false
,
L""
);
wANCard
=
env
->
addWindow
(
rect
<
s32
>
(
5
10
,
120
,
820
,
42
0
),
false
,
L""
);
wANCard
->
getCloseButton
()
->
setVisible
(
false
);
wANCard
->
setVisible
(
false
);
ebANCard
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
20
,
25
,
1
90
,
45
),
true
,
wANCard
,
EDITBOX_ANCARD
);
ebANCard
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
20
,
25
,
2
90
,
45
),
true
,
wANCard
,
EDITBOX_ANCARD
);
ebANCard
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
lstANCard
=
env
->
addListBox
(
rect
<
s32
>
(
20
,
50
,
190
,
160
),
wANCard
,
LISTBOX_ANCARD
,
true
);
btnANCardOK
=
env
->
addButton
(
rect
<
s32
>
(
60
,
165
,
150
,
190
),
wANCard
,
BUTTON_ANCARD_OK
,
dataManager
.
GetSysString
(
1211
));
lstANCard
=
env
->
addListBox
(
rect
<
s32
>
(
20
,
50
,
290
,
265
),
wANCard
,
LISTBOX_ANCARD
,
true
);
btnANCardOK
=
env
->
addButton
(
rect
<
s32
>
(
110
,
270
,
200
,
295
),
wANCard
,
BUTTON_ANCARD_OK
,
dataManager
.
GetSysString
(
1211
));
//announce attribute
wANAttribute
=
env
->
addWindow
(
rect
<
s32
>
(
500
,
200
,
830
,
285
),
false
,
dataManager
.
GetSysString
(
562
));
wANAttribute
->
getCloseButton
()
->
setVisible
(
false
);
...
...
@@ -1449,6 +1449,13 @@ void Game::ClearCardInfo(int player) {
stText
->
setText
(
L""
);
scrCardText
->
setVisible
(
false
);
}
void
Game
::
AddLog
(
const
wchar_t
*
msg
,
int
param
)
{
logParam
.
push_back
(
param
);
lstLog
->
addItem
(
msg
);
if
(
!
env
->
hasFocus
(
lstLog
))
{
lstLog
->
setSelected
(
-
1
);
}
}
void
Game
::
AddChatMsg
(
const
wchar_t
*
msg
,
int
player
)
{
for
(
int
i
=
7
;
i
>
0
;
--
i
)
{
chatMsg
[
i
]
=
chatMsg
[
i
-
1
];
...
...
@@ -1689,7 +1696,7 @@ void Game::OnResize() {
wPosSelect
->
setRelativePosition
(
ResizeWin
(
340
,
200
,
935
,
410
));
wCardSelect
->
setRelativePosition
(
ResizeWin
(
320
,
100
,
1000
,
400
));
wANNumber
->
setRelativePosition
(
ResizeWin
(
550
,
200
,
780
,
295
));
wANCard
->
setRelativePosition
(
ResizeWin
(
5
60
,
170
,
770
,
37
0
));
wANCard
->
setRelativePosition
(
ResizeWin
(
5
10
,
120
,
820
,
42
0
));
wANAttribute
->
setRelativePosition
(
ResizeWin
(
500
,
200
,
830
,
285
));
wANRace
->
setRelativePosition
(
ResizeWin
(
480
,
200
,
850
,
410
));
wReplaySave
->
setRelativePosition
(
ResizeWin
(
510
,
200
,
820
,
320
));
...
...
gframe/game.h
View file @
87a5e4a2
...
...
@@ -144,6 +144,7 @@ public:
void
SaveConfig
();
void
ShowCardInfo
(
int
code
,
bool
resize
=
false
);
void
ClearCardInfo
(
int
player
=
0
);
void
AddLog
(
const
wchar_t
*
msg
,
int
param
=
0
);
void
AddChatMsg
(
const
wchar_t
*
msg
,
int
player
);
void
ClearChatMsg
();
void
AddDebugMsg
(
const
char
*
msgbuf
);
...
...
gframe/netserver.cpp
View file @
87a5e4a2
...
...
@@ -40,13 +40,11 @@ bool NetServer::StartBroadcast() {
if
(
!
net_evbase
)
return
false
;
SOCKET
udp
=
socket
(
AF_INET
,
SOCK_DGRAM
,
IPPROTO_UDP
);
BOOL
opt
=
TRUE
;
setsockopt
(
udp
,
SOL_SOCKET
,
SO_BROADCAST
,
(
const
char
*
)
&
opt
,
sizeof
(
BOOL
));
sockaddr_in
addr
;
memset
(
&
addr
,
0
,
sizeof
(
addr
));
addr
.
sin_family
=
AF_INET
;
addr
.
sin_port
=
htons
(
79
20
);
addr
.
sin_addr
.
s_addr
=
0
;
addr
.
sin_port
=
htons
(
79
11
);
addr
.
sin_addr
.
s_addr
=
htonl
(
INADDR_ANY
)
;
if
(
bind
(
udp
,
(
sockaddr
*
)
&
addr
,
sizeof
(
addr
))
==
SOCKET_ERROR
)
{
closesocket
(
udp
);
return
false
;
...
...
@@ -85,17 +83,13 @@ void NetServer::BroadcastEvent(evutil_socket_t fd, short events, void* arg) {
return
;
HostRequest
*
pHR
=
(
HostRequest
*
)
buf
;
if
(
pHR
->
identifier
==
NETWORK_CLIENT_ID
)
{
SOCKADDR_IN
sockTo
;
sockTo
.
sin_addr
.
s_addr
=
bc_addr
.
sin_addr
.
s_addr
;
sockTo
.
sin_family
=
AF_INET
;
sockTo
.
sin_port
=
htons
(
7921
);
HostPacket
hp
;
hp
.
identifier
=
NETWORK_SERVER_ID
;
hp
.
port
=
server_port
;
hp
.
version
=
PRO_VERSION
;
hp
.
host
=
duel_mode
->
host_info
;
BufferIO
::
CopyWStr
(
duel_mode
->
name
,
hp
.
name
,
20
);
sendto
(
fd
,
(
const
char
*
)
&
hp
,
sizeof
(
HostPacket
),
0
,
(
sockaddr
*
)
&
sockTo
,
sizeof
(
sockTo
)
);
sendto
(
fd
,
(
const
char
*
)
&
hp
,
sizeof
(
HostPacket
),
0
,
(
sockaddr
*
)
&
bc_addr
,
sz
);
}
}
void
NetServer
::
ServerAccept
(
evconnlistener
*
listener
,
evutil_socket_t
fd
,
sockaddr
*
address
,
int
socklen
,
void
*
ctx
)
{
...
...
@@ -197,7 +191,7 @@ void NetServer::HandleCTOSPacket(DuelPlayer* dp, char* data, unsigned int len) {
case
CTOS_UPDATE_DECK
:
{
if
(
!
dp
->
game
)
return
;
duel_mode
->
UpdateDeck
(
dp
,
pdata
);
duel_mode
->
UpdateDeck
(
dp
,
pdata
,
len
-
1
);
break
;
}
case
CTOS_HAND_RESULT
:
{
...
...
gframe/network.h
View file @
87a5e4a2
...
...
@@ -123,7 +123,7 @@ public:
virtual
void
ToObserver
(
DuelPlayer
*
dp
)
{}
virtual
void
PlayerReady
(
DuelPlayer
*
dp
,
bool
is_ready
)
{}
virtual
void
PlayerKick
(
DuelPlayer
*
dp
,
unsigned
char
pos
)
{}
virtual
void
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
)
{}
virtual
void
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
,
unsigned
int
len
)
{}
virtual
void
StartDuel
(
DuelPlayer
*
dp
)
{}
virtual
void
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
)
{}
virtual
void
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
)
{}
...
...
gframe/replay_mode.cpp
View file @
87a5e4a2
...
...
@@ -101,6 +101,8 @@ int ReplayMode::ReplayThread(void* param) {
if
(
is_restarting
)
{
mainGame
->
gMutex
.
Lock
();
is_restarting
=
false
;
mainGame
->
dInfo
.
isReplaySkiping
=
true
;
Restart
(
false
);
int
step
=
current_step
-
1
;
if
(
step
<
0
)
step
=
0
;
...
...
@@ -109,10 +111,13 @@ int ReplayMode::ReplayThread(void* param) {
skip_step
=
0
;
int
len
=
get_message
(
pduel
,
(
byte
*
)
engineBuffer
);
if
(
len
>
0
)
{
mainGame
->
gMutex
.
Unlock
();
is_continuing
=
ReplayAnalyze
(
engineBuffer
,
len
);
mainGame
->
gMutex
.
Lock
();
}
}
else
{
ReplayRefreshDeck
(
0
);
ReplayRefreshDeck
(
1
);
ReplayRefreshExtra
(
0
);
ReplayRefreshExtra
(
1
);
}
if
(
step
==
0
)
{
Pause
(
true
,
false
);
...
...
@@ -171,14 +176,14 @@ bool ReplayMode::StartDuel() {
int
extra
=
cur_replay
.
ReadInt32
();
for
(
int
i
=
0
;
i
<
extra
;
++
i
)
new_card
(
pduel
,
cur_replay
.
ReadInt32
(),
0
,
0
,
LOCATION_EXTRA
,
0
,
POS_FACEDOWN_DEFENSE
);
mainGame
->
dField
.
Initial
(
0
,
main
,
extra
);
mainGame
->
dField
.
Initial
(
mainGame
->
LocalPlayer
(
0
)
,
main
,
extra
);
main
=
cur_replay
.
ReadInt32
();
for
(
int
i
=
0
;
i
<
main
;
++
i
)
new_card
(
pduel
,
cur_replay
.
ReadInt32
(),
1
,
1
,
LOCATION_DECK
,
0
,
POS_FACEDOWN_DEFENSE
);
extra
=
cur_replay
.
ReadInt32
();
for
(
int
i
=
0
;
i
<
extra
;
++
i
)
new_card
(
pduel
,
cur_replay
.
ReadInt32
(),
1
,
1
,
LOCATION_EXTRA
,
0
,
POS_FACEDOWN_DEFENSE
);
mainGame
->
dField
.
Initial
(
1
,
main
,
extra
);
mainGame
->
dField
.
Initial
(
mainGame
->
LocalPlayer
(
1
)
,
main
,
extra
);
}
else
{
int
main
=
cur_replay
.
ReadInt32
();
for
(
int
i
=
0
;
i
<
main
;
++
i
)
...
...
@@ -186,7 +191,7 @@ bool ReplayMode::StartDuel() {
int
extra
=
cur_replay
.
ReadInt32
();
for
(
int
i
=
0
;
i
<
extra
;
++
i
)
new_card
(
pduel
,
cur_replay
.
ReadInt32
(),
0
,
0
,
LOCATION_EXTRA
,
0
,
POS_FACEDOWN_DEFENSE
);
mainGame
->
dField
.
Initial
(
0
,
main
,
extra
);
mainGame
->
dField
.
Initial
(
mainGame
->
LocalPlayer
(
0
)
,
main
,
extra
);
main
=
cur_replay
.
ReadInt32
();
for
(
int
i
=
0
;
i
<
main
;
++
i
)
new_tag_card
(
pduel
,
cur_replay
.
ReadInt32
(),
0
,
LOCATION_DECK
);
...
...
@@ -199,7 +204,7 @@ bool ReplayMode::StartDuel() {
extra
=
cur_replay
.
ReadInt32
();
for
(
int
i
=
0
;
i
<
extra
;
++
i
)
new_card
(
pduel
,
cur_replay
.
ReadInt32
(),
1
,
1
,
LOCATION_EXTRA
,
0
,
POS_FACEDOWN_DEFENSE
);
mainGame
->
dField
.
Initial
(
1
,
main
,
extra
);
mainGame
->
dField
.
Initial
(
mainGame
->
LocalPlayer
(
1
)
,
main
,
extra
);
main
=
cur_replay
.
ReadInt32
();
for
(
int
i
=
0
;
i
<
main
;
++
i
)
new_tag_card
(
pduel
,
cur_replay
.
ReadInt32
(),
1
,
LOCATION_DECK
);
...
...
@@ -267,13 +272,11 @@ void ReplayMode::Restart(bool refresh) {
//mainGame->dInfo.isReplay = true;
}
skip_turn
=
0
;
is_restarting
=
true
;
}
void
ReplayMode
::
Undo
()
{
if
(
skip_step
>
0
||
current_step
==
0
)
return
;
mainGame
->
dInfo
.
isReplaySkiping
=
true
;
Restart
(
false
);
is_restarting
=
true
;
Pause
(
false
,
false
);
}
bool
ReplayMode
::
ReplayAnalyze
(
char
*
msg
,
unsigned
int
len
)
{
...
...
@@ -775,7 +778,7 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) {
case
MSG_ANNOUNCE_NUMBER
:
case
MSG_ANNOUNCE_CARD_FILTER
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
count
=
BufferIO
::
ReadInt8
(
pbuf
);
count
=
BufferIO
::
Read
U
Int8
(
pbuf
);
pbuf
+=
4
*
count
;
return
ReadReplayResponse
();
}
...
...
gframe/single_duel.cpp
View file @
87a5e4a2
...
...
@@ -173,7 +173,7 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) {
unsigned
char
wbuf
[
3
];
wbuf
[
0
]
=
MSG_WIN
;
wbuf
[
1
]
=
1
-
dp
->
type
;
wbuf
[
2
]
=
0
;
wbuf
[
2
]
=
0
x4
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
wbuf
,
3
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
...
...
@@ -280,12 +280,20 @@ void SingleDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
return
;
LeaveGame
(
players
[
pos
]);
}
void
SingleDuel
::
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
)
{
void
SingleDuel
::
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
,
unsigned
int
len
)
{
if
(
dp
->
type
>
1
||
ready
[
dp
->
type
])
return
;
char
*
deckbuf
=
(
char
*
)
pdata
;
int
mainc
=
BufferIO
::
ReadInt32
(
deckbuf
);
int
sidec
=
BufferIO
::
ReadInt32
(
deckbuf
);
// verify data
if
((
unsigned
)
mainc
+
(
unsigned
)
sidec
>
(
len
-
8
)
/
4
)
{
STOC_ErrorMsg
scem
;
scem
.
msg
=
ERRMSG_DECKERROR
;
scem
.
code
=
0
;
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_ERROR_MSG
,
scem
);
return
;
}
if
(
duel_count
==
0
)
{
deck_error
[
dp
->
type
]
=
deckManager
.
LoadDeck
(
pdeck
[
dp
->
type
],
(
int
*
)
deckbuf
,
mainc
,
sidec
);
}
else
{
...
...
@@ -1347,7 +1355,7 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
case
MSG_ANNOUNCE_NUMBER
:
case
MSG_ANNOUNCE_CARD_FILTER
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
count
=
BufferIO
::
ReadInt8
(
pbuf
);
count
=
BufferIO
::
Read
U
Int8
(
pbuf
);
pbuf
+=
4
*
count
;
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
...
...
gframe/single_duel.h
View file @
87a5e4a2
...
...
@@ -18,7 +18,7 @@ public:
virtual
void
ToObserver
(
DuelPlayer
*
dp
);
virtual
void
PlayerReady
(
DuelPlayer
*
dp
,
bool
ready
);
virtual
void
PlayerKick
(
DuelPlayer
*
dp
,
unsigned
char
pos
);
virtual
void
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
);
virtual
void
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
,
unsigned
int
len
);
virtual
void
StartDuel
(
DuelPlayer
*
dp
);
virtual
void
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
);
virtual
void
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
);
...
...
gframe/single_mode.cpp
View file @
87a5e4a2
...
...
@@ -177,13 +177,11 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
mainGame
->
dInfo
.
curMsg
=
BufferIO
::
ReadUInt8
(
pbuf
);
switch
(
mainGame
->
dInfo
.
curMsg
)
{
case
MSG_RETRY
:
{
mainGame
->
gMutex
.
Lock
();
mainGame
->
stMessage
->
setText
(
L"Error occurs."
);
mainGame
->
PopupElement
(
mainGame
->
wMessage
);
mainGame
->
gMutex
.
Unlock
();
mainGame
->
actionSignal
.
Reset
();
mainGame
->
actionSignal
.
Wait
();
return
false
;
if
(
!
DuelClient
::
ClientAnalyze
(
offset
,
pbuf
-
offset
))
{
mainGame
->
singleSignal
.
Reset
();
mainGame
->
singleSignal
.
Wait
();
}
break
;
}
case
MSG_HINT
:
{
/*int type = */
BufferIO
::
ReadInt8
(
pbuf
);
...
...
@@ -693,7 +691,7 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
case
MSG_ANNOUNCE_NUMBER
:
case
MSG_ANNOUNCE_CARD_FILTER
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
count
=
BufferIO
::
ReadInt8
(
pbuf
);
count
=
BufferIO
::
Read
U
Int8
(
pbuf
);
pbuf
+=
4
*
count
;
if
(
!
DuelClient
::
ClientAnalyze
(
offset
,
pbuf
-
offset
))
{
mainGame
->
singleSignal
.
Reset
();
...
...
gframe/sound_manager.cpp
View file @
87a5e4a2
...
...
@@ -195,6 +195,8 @@ void SoundManager::PlayDialogSound(irr::gui::IGUIElement * element) {
PlaySoundEffect
(
SOUND_QUESTION
);
}
else
if
(
element
==
mainGame
->
wReplaySave
)
{
PlaySoundEffect
(
SOUND_QUESTION
);
}
else
if
(
element
==
mainGame
->
wFTSelect
)
{
PlaySoundEffect
(
SOUND_QUESTION
);
}
}
void
SoundManager
::
PlayMusic
(
char
*
song
,
bool
loop
)
{
...
...
gframe/tag_duel.cpp
View file @
87a5e4a2
...
...
@@ -256,12 +256,20 @@ void TagDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
return
;
LeaveGame
(
players
[
pos
]);
}
void
TagDuel
::
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
)
{
void
TagDuel
::
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
,
unsigned
int
len
)
{
if
(
dp
->
type
>
3
||
ready
[
dp
->
type
])
return
;
char
*
deckbuf
=
(
char
*
)
pdata
;
int
mainc
=
BufferIO
::
ReadInt32
(
deckbuf
);
int
sidec
=
BufferIO
::
ReadInt32
(
deckbuf
);
// verify data
if
((
unsigned
)
mainc
+
(
unsigned
)
sidec
>
(
len
-
8
)
/
4
)
{
STOC_ErrorMsg
scem
;
scem
.
msg
=
ERRMSG_DECKERROR
;
scem
.
code
=
0
;
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_ERROR_MSG
,
scem
);
return
;
}
deck_error
[
dp
->
type
]
=
deckManager
.
LoadDeck
(
pdeck
[
dp
->
type
],
(
int
*
)
deckbuf
,
mainc
,
sidec
);
}
void
TagDuel
::
StartDuel
(
DuelPlayer
*
dp
)
{
...
...
@@ -1396,7 +1404,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
case
MSG_ANNOUNCE_NUMBER
:
case
MSG_ANNOUNCE_CARD_FILTER
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
count
=
BufferIO
::
ReadInt8
(
pbuf
);
count
=
BufferIO
::
Read
U
Int8
(
pbuf
);
pbuf
+=
4
*
count
;
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
...
...
gframe/tag_duel.h
View file @
87a5e4a2
...
...
@@ -18,7 +18,7 @@ public:
virtual
void
ToObserver
(
DuelPlayer
*
dp
);
virtual
void
PlayerReady
(
DuelPlayer
*
dp
,
bool
ready
);
virtual
void
PlayerKick
(
DuelPlayer
*
dp
,
unsigned
char
pos
);
virtual
void
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
);
virtual
void
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
,
unsigned
int
len
);
virtual
void
StartDuel
(
DuelPlayer
*
dp
);
virtual
void
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
);
virtual
void
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
);
...
...
lflist.conf
View file @
87a5e4a2
This diff is collapsed.
Click to expand it.
ocgcore
@
f95d9084
Subproject commit
3cbdbf5a970b3ac5d8dcf0c6550898c41f5274e
0
Subproject commit
f95d908449a428691301ff6ae29ab9920eb492c
0
script
@
9ec1a442
Subproject commit
68a3de27cbd22e6cf74157feeaa2b8e5ee455636
Subproject commit
9ec1a4429cf9e3a3fd5002b6286061f9a83db917
strings.conf
View file @
87a5e4a2
...
...
@@ -10,7 +10,7 @@
!
system
6
反转召唤成功
!
system
7
发动
!
system
10
移除指示物
!
system
11
支付
LP
!
system
11
支付
基本分
!
system
12
移除本身的素材
!
system
20
抽卡阶段中
!
system
21
准备阶段中
...
...
@@ -41,7 +41,7 @@
!
system
72
陷阱卡
!
system
80
进入战斗阶段
!
system
81
进入结束阶段
!
system
90
是否不解放怪
物
通常召唤?
!
system
90
是否不解放怪
兽
通常召唤?
!
system
91
是否使用额外的召唤机会?
!
system
92
是否要解放对方怪兽进行上级召唤?
!
system
93
是否要继续选择素材?
...
...
@@ -88,9 +88,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
请选择攻击表示的怪兽
...
...
@@ -110,7 +110,7 @@
!
system
530
请选择对方的卡
!
system
531
请选择上级召唤用需要解放的怪兽
!
system
532
请选择要取除超量素材的怪兽
!
system
533
请选择
连接召唤的素材
!
system
533
请选择
要作为连接素材的卡
!
system
534
请选择要保留在场上的卡
!
system
549
请选择攻击的对象
!
system
550
请选择要发动的效果
...
...
@@ -169,7 +169,7 @@
!
system
1036
恐龙
!
system
1037
鱼
!
system
1038
海龙
!
system
1039
爬虫
!
system
1039
爬虫
类
!
system
1040
念动力
!
system
1041
幻神兽
!
system
1042
创造神
...
...
@@ -284,7 +284,7 @@
!
system
1228
↓额外选项(无特殊要求请勿修改)
!
system
1229
不检查卡组
!
system
1230
不洗切卡组
!
system
1231
初始
LP
:
!
system
1231
初始
基本分
:
!
system
1232
初始手卡数:
!
system
1233
每回合抽卡:
!
system
1234
主机名称:
...
...
@@ -316,7 +316,7 @@
!
system
1273
系统设定
!
system
1274
自动选择怪兽卡片位置
!
system
1275
↑随机选择位置
!
system
1276
自动
排列连锁顺序
!
system
1276
自动
发动并排序必发效果
!
system
1277
没有可连锁的卡时延迟回应
!
system
1278
自动选择魔陷卡片位置
!
system
1279
开启音效
...
...
@@ -439,7 +439,17 @@
!
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
未分类卡组
...
...
@@ -479,11 +489,11 @@
!
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
1619
[%
ls
]攻击[%
ls
]
...
...
@@ -496,7 +506,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
失去连接
...
...
@@ -592,6 +602,7 @@
!
counter
0
x4e
指示物(魂之灵摆)
!
counter
0
x104f
蛊指示物
!
counter
0
x50
指示物(娱乐伙伴 掉头跑骑兵)
!
counter
0
x51
指示物(蜂军巢)
#setnames, using tab for comment
!
setname
0
x1
正义盟军
A
・
O
・
J
!
setname
0
x2
次世代 ジェネクス
...
...
@@ -604,8 +615,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
新宇 ネオス
...
...
@@ -796,7 +807,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
异色眼 オッドアイズ
...
...
@@ -825,7 +836,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
契约书 契約書
...
...
@@ -944,7 +955,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
眼纳祭神 アイズ・サクリファイス
...
...
@@ -978,3 +989,5 @@
!
setname
0
x12b
海晶少女 マリンセス
!
setname
0
x12c
天威
!
setname
0
x12d
斯摩夫 シムルグ
!
setname
0
x12e
占卜魔女 占い魔女
!
setname
0
x12f
蜂军
B
・
F
(ビー・フォース)
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