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
ba5af7f5
Commit
ba5af7f5
authored
Sep 02, 2021
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://github.com/Fluorohydride/ygopro
into server
parents
bd61f452
c0bb3719
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
149 additions
and
67 deletions
+149
-67
gframe/deck_con.cpp
gframe/deck_con.cpp
+6
-4
gframe/deck_manager.cpp
gframe/deck_manager.cpp
+21
-14
gframe/deck_manager.h
gframe/deck_manager.h
+1
-1
gframe/drawing.cpp
gframe/drawing.cpp
+25
-22
gframe/duelclient.cpp
gframe/duelclient.cpp
+7
-3
gframe/game.cpp
gframe/game.cpp
+32
-11
gframe/game.h
gframe/game.h
+8
-0
gframe/menu_handler.cpp
gframe/menu_handler.cpp
+36
-0
gframe/netserver.cpp
gframe/netserver.cpp
+2
-2
gframe/network.h
gframe/network.h
+1
-0
gframe/single_duel.cpp
gframe/single_duel.cpp
+1
-3
gframe/tag_duel.cpp
gframe/tag_duel.cpp
+1
-3
strings.conf
strings.conf
+8
-4
No files found.
gframe/deck_con.cpp
View file @
ba5af7f5
...
...
@@ -1449,13 +1449,15 @@ void DeckBuilder::FilterCards() {
if
(
filter_lm
)
{
if
(
filter_lm
<=
3
&&
(
!
filterList
->
count
(
ptr
->
first
)
||
(
*
filterList
).
at
(
ptr
->
first
)
!=
filter_lm
-
1
))
continue
;
if
(
filter_lm
==
4
&&
data
.
ot
!=
1
)
if
(
filter_lm
==
4
&&
!
(
data
.
ot
&
AVAIL_OCG
)
)
continue
;
if
(
filter_lm
==
5
&&
data
.
ot
!=
2
)
if
(
filter_lm
==
5
&&
!
(
data
.
ot
&
AVAIL_TCG
)
)
continue
;
if
(
filter_lm
==
6
&&
data
.
ot
!=
3
)
if
(
filter_lm
==
6
&&
!
(
data
.
ot
&
AVAIL_SC
)
)
continue
;
if
(
filter_lm
==
7
&&
data
.
ot
!=
4
)
if
(
filter_lm
==
7
&&
!
(
data
.
ot
&
AVAIL_CUSTOM
))
continue
;
if
(
filter_lm
==
8
&&
((
data
.
ot
&
AVAIL_OCGTCG
)
!=
AVAIL_OCGTCG
))
continue
;
}
bool
is_target
=
true
;
...
...
gframe/deck_manager.cpp
View file @
ba5af7f5
...
...
@@ -71,7 +71,16 @@ const std::unordered_map<int, int>* DeckManager::GetLFListContent(int lfhash) {
return
&
lit
->
content
;
return
nullptr
;
}
int
DeckManager
::
CheckDeck
(
Deck
&
deck
,
int
lfhash
,
bool
allow_ocg
,
bool
allow_tcg
)
{
static
int
checkAvail
(
int
ot
,
int
avail
)
{
if
((
ot
&
avail
)
==
avail
)
return
0
;
if
((
ot
&
AVAIL_OCG
)
&&
!
(
avail
==
AVAIL_OCG
))
return
DECKERROR_OCGONLY
;
if
((
ot
&
AVAIL_TCG
)
&&
!
(
avail
==
AVAIL_TCG
))
return
DECKERROR_TCGONLY
;
return
DECKERROR_NOTAVAIL
;
}
int
DeckManager
::
CheckDeck
(
Deck
&
deck
,
int
lfhash
,
int
rule
)
{
std
::
unordered_map
<
int
,
int
>
ccount
;
auto
list
=
GetLFListContent
(
lfhash
);
if
(
!
list
)
...
...
@@ -83,13 +92,13 @@ int DeckManager::CheckDeck(Deck& deck, int lfhash, bool allow_ocg, bool allow_tc
return
(
DECKERROR_EXTRACOUNT
<<
28
)
+
deck
.
extra
.
size
();
if
(
deck
.
side
.
size
()
>
15
)
return
(
DECKERROR_SIDECOUNT
<<
28
)
+
deck
.
side
.
size
();
const
int
rule_map
[
6
]
=
{
AVAIL_OCG
,
AVAIL_TCG
,
AVAIL_SC
,
AVAIL_CUSTOM
,
AVAIL_OCGTCG
,
0
};
int
avail
=
rule_map
[
rule
];
for
(
size_t
i
=
0
;
i
<
deck
.
main
.
size
();
++
i
)
{
code_pointer
cit
=
deck
.
main
[
i
];
if
(
!
allow_ocg
&&
(
cit
->
second
.
ot
==
0x1
))
return
(
DECKERROR_OCGONLY
<<
28
)
+
cit
->
first
;
if
(
!
allow_tcg
&&
(
cit
->
second
.
ot
==
0x2
))
return
(
DECKERROR_TCGONLY
<<
28
)
+
cit
->
first
;
int
gameruleDeckError
=
checkAvail
(
cit
->
second
.
ot
,
avail
);
if
(
gameruleDeckError
)
return
(
gameruleDeckError
<<
28
)
+
cit
->
first
;
if
(
cit
->
second
.
type
&
(
TYPE_FUSION
|
TYPE_SYNCHRO
|
TYPE_XYZ
|
TYPE_TOKEN
|
TYPE_LINK
))
return
(
DECKERROR_EXTRACOUNT
<<
28
);
int
code
=
cit
->
second
.
alias
?
cit
->
second
.
alias
:
cit
->
first
;
...
...
@@ -103,10 +112,9 @@ int DeckManager::CheckDeck(Deck& deck, int lfhash, bool allow_ocg, bool allow_tc
}
for
(
size_t
i
=
0
;
i
<
deck
.
extra
.
size
();
++
i
)
{
code_pointer
cit
=
deck
.
extra
[
i
];
if
(
!
allow_ocg
&&
(
cit
->
second
.
ot
==
0x1
))
return
(
DECKERROR_OCGONLY
<<
28
)
+
cit
->
first
;
if
(
!
allow_tcg
&&
(
cit
->
second
.
ot
==
0x2
))
return
(
DECKERROR_TCGONLY
<<
28
)
+
cit
->
first
;
int
gameruleDeckError
=
checkAvail
(
cit
->
second
.
ot
,
avail
);
if
(
gameruleDeckError
)
return
(
gameruleDeckError
<<
28
)
+
cit
->
first
;
int
code
=
cit
->
second
.
alias
?
cit
->
second
.
alias
:
cit
->
first
;
ccount
[
code
]
++
;
dc
=
ccount
[
code
];
...
...
@@ -118,10 +126,9 @@ int DeckManager::CheckDeck(Deck& deck, int lfhash, bool allow_ocg, bool allow_tc
}
for
(
size_t
i
=
0
;
i
<
deck
.
side
.
size
();
++
i
)
{
code_pointer
cit
=
deck
.
side
[
i
];
if
(
!
allow_ocg
&&
(
cit
->
second
.
ot
==
0x1
))
return
(
DECKERROR_OCGONLY
<<
28
)
+
cit
->
first
;
if
(
!
allow_tcg
&&
(
cit
->
second
.
ot
==
0x2
))
return
(
DECKERROR_TCGONLY
<<
28
)
+
cit
->
first
;
int
gameruleDeckError
=
checkAvail
(
cit
->
second
.
ot
,
avail
);
if
(
gameruleDeckError
)
return
(
gameruleDeckError
<<
28
)
+
cit
->
first
;
int
code
=
cit
->
second
.
alias
?
cit
->
second
.
alias
:
cit
->
first
;
ccount
[
code
]
++
;
dc
=
ccount
[
code
];
...
...
gframe/deck_manager.h
View file @
ba5af7f5
...
...
@@ -39,7 +39,7 @@ public:
void
LoadLFList
();
const
wchar_t
*
GetLFListName
(
int
lfhash
);
const
std
::
unordered_map
<
int
,
int
>*
GetLFListContent
(
int
lfhash
);
int
CheckDeck
(
Deck
&
deck
,
int
lfhash
,
bool
allow_ocg
,
bool
allow_tcg
);
int
CheckDeck
(
Deck
&
deck
,
int
lfhash
,
int
rule
);
int
LoadDeck
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
);
bool
LoadSide
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
);
#ifndef YGOPRO_SERVER_MODE
...
...
gframe/drawing.cpp
View file @
ba5af7f5
...
...
@@ -1105,23 +1105,26 @@ void Game::DrawThumb(code_pointer cp, position2di pos, const std::unordered_map<
break
;
}
}
if
(
cbLimit
->
getSelected
()
>=
4
&&
(
cp
->
second
.
ot
&
gameConf
.
defaultOT
))
{
switch
(
cp
->
second
.
ot
)
{
case
1
:
driver
->
draw2DImage
(
imageManager
.
tOT
,
otloc
,
recti
(
0
,
128
,
128
,
192
),
0
,
0
,
true
);
break
;
case
2
:
driver
->
draw2DImage
(
imageManager
.
tOT
,
otloc
,
recti
(
0
,
192
,
128
,
256
),
0
,
0
,
true
);
break
;
int
filter_lm
=
cbLimit
->
getSelected
();
if
(
filter_lm
>=
4
)
{
bool
avail
=
!
((
filter_lm
==
4
&&
!
(
cp
->
second
.
ot
&
AVAIL_OCG
)
||
(
filter_lm
==
5
&&
!
(
cp
->
second
.
ot
&
AVAIL_TCG
))
||
(
filter_lm
==
6
&&
!
(
cp
->
second
.
ot
&
AVAIL_SC
))
||
(
filter_lm
==
7
&&
!
(
cp
->
second
.
ot
&
AVAIL_CUSTOM
))
||
(
filter_lm
==
8
&&
(
cp
->
second
.
ot
&
AVAIL_OCGTCG
)
!=
AVAIL_OCGTCG
)));
if
(
avail
)
{
if
((
cp
->
second
.
ot
&
AVAIL_OCG
)
&&
!
(
cp
->
second
.
ot
&
AVAIL_TCG
))
driver
->
draw2DImage
(
imageManager
.
tOT
,
otloc
,
recti
(
0
,
128
,
128
,
192
),
0
,
0
,
true
);
else
if
((
cp
->
second
.
ot
&
AVAIL_TCG
)
&&
!
(
cp
->
second
.
ot
&
AVAIL_OCG
))
driver
->
draw2DImage
(
imageManager
.
tOT
,
otloc
,
recti
(
0
,
192
,
128
,
256
),
0
,
0
,
true
);
}
}
else
if
(
cbLimit
->
getSelected
()
>=
4
||
!
(
cp
->
second
.
ot
&
gameConf
.
defaultOT
))
{
switch
(
cp
->
second
.
ot
)
{
case
1
:
driver
->
draw2DImage
(
imageManager
.
tOT
,
otloc
,
recti
(
0
,
0
,
128
,
64
),
0
,
0
,
true
);
break
;
case
2
:
driver
->
draw2DImage
(
imageManager
.
tOT
,
otloc
,
recti
(
0
,
64
,
128
,
128
),
0
,
0
,
true
);
break
;
else
{
if
(
cp
->
second
.
ot
&
AVAIL_OCG
)
driver
->
draw2DImage
(
imageManager
.
tOT
,
otloc
,
recti
(
0
,
0
,
128
,
64
),
0
,
0
,
true
);
else
if
(
cp
->
second
.
ot
&
AVAIL_TCG
)
driver
->
draw2DImage
(
imageManager
.
tOT
,
otloc
,
recti
(
0
,
64
,
128
,
128
),
0
,
0
,
true
);
else
driver
->
draw2DImage
(
imageManager
.
tLim
,
otloc
,
recti
(
0
,
0
,
64
,
64
),
0
,
0
,
true
);
}
}
}
...
...
@@ -1222,11 +1225,11 @@ void Game::DrawDeckBd() {
myswprintf
(
scaleBuffer
,
L" %d/%d"
,
ptr
->
second
.
lscale
,
ptr
->
second
.
rscale
);
wcscat
(
textBuffer
,
scaleBuffer
);
}
if
((
ptr
->
second
.
ot
&
0x3
)
==
1
)
if
((
ptr
->
second
.
ot
&
AVAIL_OCGTCG
)
==
AVAIL_OCG
)
wcscat
(
textBuffer
,
L" [OCG]"
);
else
if
((
ptr
->
second
.
ot
&
0x3
)
==
2
)
else
if
((
ptr
->
second
.
ot
&
AVAIL_OCGTCG
)
==
AVAIL_TCG
)
wcscat
(
textBuffer
,
L" [TCG]"
);
else
if
((
ptr
->
second
.
ot
&
0x7
)
==
4
)
else
if
((
ptr
->
second
.
ot
&
AVAIL_CUSTOM
)
==
AVAIL_CUSTOM
)
wcscat
(
textBuffer
,
L" [Custom]"
);
DrawShadowText
(
textFont
,
textBuffer
,
Resize
(
860
,
209
+
i
*
66
,
955
,
229
+
i
*
66
),
Resize
(
1
,
1
,
0
,
0
));
}
else
{
...
...
@@ -1235,11 +1238,11 @@ void Game::DrawDeckBd() {
const
wchar_t
*
ptype
=
dataManager
.
FormatType
(
ptr
->
second
.
type
);
DrawShadowText
(
textFont
,
ptype
,
Resize
(
860
,
187
+
i
*
66
,
955
,
207
+
i
*
66
),
Resize
(
1
,
1
,
0
,
0
));
textBuffer
[
0
]
=
0
;
if
((
ptr
->
second
.
ot
&
0x3
)
==
1
)
if
((
ptr
->
second
.
ot
&
AVAIL_OCGTCG
)
==
AVAIL_OCG
)
wcscat
(
textBuffer
,
L"[OCG]"
);
else
if
((
ptr
->
second
.
ot
&
0x3
)
==
2
)
else
if
((
ptr
->
second
.
ot
&
AVAIL_OCGTCG
)
==
AVAIL_TCG
)
wcscat
(
textBuffer
,
L"[TCG]"
);
else
if
((
ptr
->
second
.
ot
&
0x7
)
==
4
)
else
if
((
ptr
->
second
.
ot
&
AVAIL_CUSTOM
)
==
AVAIL_CUSTOM
)
wcscat
(
textBuffer
,
L"[Custom]"
);
DrawShadowText
(
textFont
,
textBuffer
,
Resize
(
860
,
209
+
i
*
66
,
955
,
229
+
i
*
66
),
Resize
(
1
,
1
,
0
,
0
));
}
...
...
gframe/duelclient.cpp
View file @
ba5af7f5
...
...
@@ -123,7 +123,7 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) {
if
(
bot_mode
)
{
BufferIO
::
CopyWStr
(
L"Bot Game"
,
cscg
.
name
,
20
);
BufferIO
::
CopyWStr
(
L""
,
cscg
.
pass
,
20
);
cscg
.
info
.
rule
=
2
;
cscg
.
info
.
rule
=
5
;
cscg
.
info
.
mode
=
0
;
cscg
.
info
.
start_hand
=
5
;
cscg
.
info
.
start_lp
=
8000
;
...
...
@@ -304,6 +304,10 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
myswprintf
(
msgbuf
,
dataManager
.
GetSysString
(
1419
),
code
);
break
;
}
case
DECKERROR_NOTAVAIL
:
{
myswprintf
(
msgbuf
,
dataManager
.
GetSysString
(
1432
),
dataManager
.
GetName
(
code
));
break
;
}
default:
{
myswprintf
(
msgbuf
,
dataManager
.
GetSysString
(
1406
));
break
;
...
...
@@ -421,7 +425,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
wchar_t
msgbuf
[
256
];
myswprintf
(
msgbuf
,
L"%ls%ls
\n
"
,
dataManager
.
GetSysString
(
1226
),
deckManager
.
GetLFListName
(
pkt
->
info
.
lflist
));
str
.
append
(
msgbuf
);
myswprintf
(
msgbuf
,
L"%ls%ls
\n
"
,
dataManager
.
GetSysString
(
1225
),
dataManager
.
GetSysString
(
1
240
+
pkt
->
info
.
rule
));
myswprintf
(
msgbuf
,
L"%ls%ls
\n
"
,
dataManager
.
GetSysString
(
1225
),
dataManager
.
GetSysString
(
1
481
+
pkt
->
info
.
rule
));
str
.
append
(
msgbuf
);
myswprintf
(
msgbuf
,
L"%ls%ls
\n
"
,
dataManager
.
GetSysString
(
1227
),
dataManager
.
GetSysString
(
1244
+
pkt
->
info
.
mode
));
str
.
append
(
msgbuf
);
...
...
@@ -4020,7 +4024,7 @@ void DuelClient::BroadcastReply(evutil_socket_t fd, short events, void * arg) {
hoststr
.
append
(
L"["
);
hoststr
.
append
(
deckManager
.
GetLFListName
(
pHP
->
host
.
lflist
));
hoststr
.
append
(
L"]["
);
hoststr
.
append
(
dataManager
.
GetSysString
(
pHP
->
host
.
rule
+
1
240
));
hoststr
.
append
(
dataManager
.
GetSysString
(
pHP
->
host
.
rule
+
1
481
));
hoststr
.
append
(
L"]["
);
hoststr
.
append
(
dataManager
.
GetSysString
(
pHP
->
host
.
mode
+
1244
));
hoststr
.
append
(
L"]["
);
...
...
gframe/game.cpp
View file @
ba5af7f5
...
...
@@ -219,11 +219,30 @@ bool Game::Initialize() {
cbHostLFlist
->
setSelected
(
gameConf
.
use_lflist
?
gameConf
.
default_lflist
:
cbHostLFlist
->
getItemCount
()
-
1
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1225
),
rect
<
s32
>
(
20
,
60
,
220
,
80
),
false
,
false
,
wCreateHost
);
cbRule
=
env
->
addComboBox
(
rect
<
s32
>
(
140
,
55
,
300
,
80
),
wCreateHost
);
cbRule
->
addItem
(
dataManager
.
GetSysString
(
1240
));
cbRule
->
addItem
(
dataManager
.
GetSysString
(
1241
));
cbRule
->
addItem
(
dataManager
.
GetSysString
(
1242
));
cbRule
->
addItem
(
dataManager
.
GetSysString
(
1243
));
cbRule
->
setSelected
(
gameConf
.
defaultOT
-
1
);
cbRule
->
setMaxSelectionRows
(
10
);
cbRule
->
addItem
(
dataManager
.
GetSysString
(
1481
));
cbRule
->
addItem
(
dataManager
.
GetSysString
(
1482
));
cbRule
->
addItem
(
dataManager
.
GetSysString
(
1483
));
cbRule
->
addItem
(
dataManager
.
GetSysString
(
1484
));
cbRule
->
addItem
(
dataManager
.
GetSysString
(
1485
));
cbRule
->
addItem
(
dataManager
.
GetSysString
(
1486
));
switch
(
gameConf
.
defaultOT
)
{
case
1
:
cbRule
->
setSelected
(
0
);
break
;
case
2
:
cbRule
->
setSelected
(
1
);
break
;
case
4
:
cbRule
->
setSelected
(
3
);
break
;
case
8
:
cbRule
->
setSelected
(
2
);
break
;
default:
cbRule
->
setSelected
(
5
);
break
;
}
env
->
addStaticText
(
dataManager
.
GetSysString
(
1227
),
rect
<
s32
>
(
20
,
90
,
220
,
110
),
false
,
false
,
wCreateHost
);
cbMatchMode
=
env
->
addComboBox
(
rect
<
s32
>
(
140
,
85
,
300
,
110
),
wCreateHost
);
cbMatchMode
->
addItem
(
dataManager
.
GetSysString
(
1244
));
...
...
@@ -696,14 +715,15 @@ bool Game::Initialize() {
stLimit
=
env
->
addStaticText
(
dataManager
.
GetSysString
(
1315
),
rect
<
s32
>
(
205
,
2
+
25
/
6
,
280
,
22
+
25
/
6
),
false
,
false
,
wFilter
);
cbLimit
=
env
->
addComboBox
(
rect
<
s32
>
(
260
,
25
/
6
,
390
,
20
+
25
/
6
),
wFilter
,
COMBOBOX_LIMIT
);
cbLimit
->
setMaxSelectionRows
(
10
);
cbLimit
->
addItem
(
dataManager
.
GetSysString
(
1
310
));
cbLimit
->
addItem
(
dataManager
.
GetSysString
(
1
486
));
cbLimit
->
addItem
(
dataManager
.
GetSysString
(
1316
));
cbLimit
->
addItem
(
dataManager
.
GetSysString
(
1317
));
cbLimit
->
addItem
(
dataManager
.
GetSysString
(
1318
));
cbLimit
->
addItem
(
dataManager
.
GetSysString
(
1240
));
cbLimit
->
addItem
(
dataManager
.
GetSysString
(
1241
));
cbLimit
->
addItem
(
dataManager
.
GetSysString
(
1242
));
cbLimit
->
addItem
(
dataManager
.
GetSysString
(
1243
));
cbLimit
->
addItem
(
dataManager
.
GetSysString
(
1481
));
cbLimit
->
addItem
(
dataManager
.
GetSysString
(
1482
));
cbLimit
->
addItem
(
dataManager
.
GetSysString
(
1483
));
cbLimit
->
addItem
(
dataManager
.
GetSysString
(
1484
));
cbLimit
->
addItem
(
dataManager
.
GetSysString
(
1485
));
stAttribute
=
env
->
addStaticText
(
dataManager
.
GetSysString
(
1319
),
rect
<
s32
>
(
10
,
22
+
50
/
6
,
70
,
42
+
50
/
6
),
false
,
false
,
wFilter
);
cbAttribute
=
env
->
addComboBox
(
rect
<
s32
>
(
60
,
20
+
50
/
6
,
190
,
40
+
50
/
6
),
wFilter
,
COMBOBOX_ATTRIBUTE
);
cbAttribute
->
setMaxSelectionRows
(
10
);
...
...
@@ -781,8 +801,9 @@ bool Game::Initialize() {
btnDeleteReplay
=
env
->
addButton
(
rect
<
s32
>
(
360
,
355
,
460
,
380
),
wReplay
,
BUTTON_DELETE_REPLAY
,
dataManager
.
GetSysString
(
1361
));
btnRenameReplay
=
env
->
addButton
(
rect
<
s32
>
(
360
,
385
,
460
,
410
),
wReplay
,
BUTTON_RENAME_REPLAY
,
dataManager
.
GetSysString
(
1362
));
btnReplayCancel
=
env
->
addButton
(
rect
<
s32
>
(
470
,
385
,
570
,
410
),
wReplay
,
BUTTON_CANCEL_REPLAY
,
dataManager
.
GetSysString
(
1347
));
btnExportDeck
=
env
->
addButton
(
rect
<
s32
>
(
470
,
325
,
570
,
350
),
wReplay
,
BUTTON_EXPORT_DECK
,
dataManager
.
GetSysString
(
1369
));
env
->
addStaticText
(
dataManager
.
GetSysString
(
1349
),
rect
<
s32
>
(
360
,
30
,
570
,
50
),
false
,
true
,
wReplay
);
stReplayInfo
=
env
->
addStaticText
(
L""
,
rect
<
s32
>
(
360
,
60
,
570
,
3
5
0
),
false
,
true
,
wReplay
);
stReplayInfo
=
env
->
addStaticText
(
L""
,
rect
<
s32
>
(
360
,
60
,
570
,
3
2
0
),
false
,
true
,
wReplay
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1353
),
rect
<
s32
>
(
360
,
275
,
570
,
295
),
false
,
true
,
wReplay
);
ebRepStartTurn
=
env
->
addEditBox
(
L""
,
rect
<
s32
>
(
360
,
300
,
460
,
320
),
true
,
wReplay
,
-
1
);
ebRepStartTurn
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
...
...
gframe/game.h
View file @
ba5af7f5
...
...
@@ -382,6 +382,7 @@ public:
irr
::
gui
::
IGUIButton
*
btnDeleteReplay
;
irr
::
gui
::
IGUIButton
*
btnRenameReplay
;
irr
::
gui
::
IGUIButton
*
btnReplayCancel
;
irr
::
gui
::
IGUIButton
*
btnExportDeck
;
irr
::
gui
::
IGUIEditBox
*
ebRepStartTurn
;
//single play
irr
::
gui
::
IGUIWindow
*
wSinglePlay
;
...
...
@@ -652,6 +653,7 @@ extern unsigned int pre_seed[3];
#define BUTTON_CANCEL_REPLAY 132
#define BUTTON_DELETE_REPLAY 133
#define BUTTON_RENAME_REPLAY 134
#define BUTTON_EXPORT_DECK 135
#define BUTTON_REPLAY_START 140
#define BUTTON_REPLAY_PAUSE 141
#define BUTTON_REPLAY_STEP 142
...
...
@@ -810,6 +812,12 @@ extern unsigned int pre_seed[3];
#define BUTTON_BIG_CARD_ZOOM_OUT 382
#define BUTTON_BIG_CARD_ORIG_SIZE 383
#define AVAIL_OCG 0x1
#define AVAIL_TCG 0x2
#define AVAIL_CUSTOM 0x4
#define AVAIL_SC 0x8
#define AVAIL_OCGTCG (AVAIL_OCG|AVAIL_TCG)
#define DEFAULT_DUEL_RULE 5
#define CARD_ARTWORK_VERSIONS_OFFSET 10
...
...
gframe/menu_handler.cpp
View file @
ba5af7f5
...
...
@@ -280,6 +280,42 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame
->
ShowElement
(
mainGame
->
wMainMenu
);
break
;
}
case
BUTTON_EXPORT_DECK
:
{
if
(
mainGame
->
lstReplayList
->
getSelected
()
==
-
1
)
break
;
Replay
replay
;
wchar_t
ex_filename
[
256
];
wchar_t
namebuf
[
4
][
20
];
wchar_t
filename
[
256
];
myswprintf
(
ex_filename
,
L"%ls"
,
mainGame
->
lstReplayList
->
getListItem
(
mainGame
->
lstReplayList
->
getSelected
()));
if
(
!
replay
.
OpenReplay
(
ex_filename
))
break
;
const
ReplayHeader
&
rh
=
replay
.
pheader
;
if
(
rh
.
flag
&
REPLAY_SINGLE_MODE
)
break
;
int
max
=
(
rh
.
flag
&
REPLAY_TAG
)
?
4
:
2
;
//player name
for
(
int
i
=
0
;
i
<
max
;
++
i
)
replay
.
ReadName
(
namebuf
[
i
]);
//skip pre infos
for
(
int
i
=
0
;
i
<
4
;
++
i
)
replay
.
ReadInt32
();
//deck
for
(
int
i
=
0
;
i
<
max
;
++
i
)
{
int
main
=
replay
.
ReadInt32
();
Deck
tmp_deck
;
for
(
int
j
=
0
;
j
<
main
;
++
j
)
tmp_deck
.
main
.
push_back
(
dataManager
.
GetCodePointer
(
replay
.
ReadInt32
()));
int
extra
=
replay
.
ReadInt32
();
for
(
int
j
=
0
;
j
<
extra
;
++
j
)
tmp_deck
.
extra
.
push_back
(
dataManager
.
GetCodePointer
(
replay
.
ReadInt32
()));
myswprintf
(
filename
,
L"%ls %ls"
,
ex_filename
,
namebuf
[
i
]);
deckManager
.
SaveDeck
(
tmp_deck
,
filename
);
}
mainGame
->
stACMessage
->
setText
(
dataManager
.
GetSysString
(
1335
));
mainGame
->
PopupElement
(
mainGame
->
wACMessage
,
20
);
break
;
}
case
BUTTON_BOT_START
:
{
int
sel
=
mainGame
->
lstBotList
->
getSelected
();
if
(
sel
==
-
1
)
...
...
gframe/netserver.cpp
View file @
ba5af7f5
...
...
@@ -295,8 +295,8 @@ void NetServer::HandleCTOSPacket(DuelPlayer* dp, char* data, unsigned int len) {
duel_mode
=
new
TagDuel
();
duel_mode
->
etimer
=
event_new
(
net_evbase
,
0
,
EV_TIMEOUT
|
EV_PERSIST
,
TagDuel
::
TagTimer
,
duel_mode
);
}
if
(
pkt
->
info
.
rule
>
3
)
pkt
->
info
.
rule
=
0
;
if
(
pkt
->
info
.
rule
>
5
)
pkt
->
info
.
rule
=
5
;
if
(
pkt
->
info
.
mode
>
2
)
pkt
->
info
.
mode
=
0
;
unsigned
int
hash
=
1
;
...
...
gframe/network.h
View file @
ba5af7f5
...
...
@@ -226,6 +226,7 @@ public:
#define DECKERROR_MAINCOUNT 0x6
#define DECKERROR_EXTRACOUNT 0x7
#define DECKERROR_SIDECOUNT 0x8
#define DECKERROR_NOTAVAIL 0x9
#define MODE_SINGLE 0x0
#define MODE_MATCH 0x1
...
...
gframe/single_duel.cpp
View file @
ba5af7f5
...
...
@@ -357,9 +357,7 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
if
(
deck_error
[
dp
->
type
])
{
deckerror
=
(
DECKERROR_UNKNOWNCARD
<<
28
)
+
deck_error
[
dp
->
type
];
}
else
{
bool
allow_ocg
=
host_info
.
rule
==
0
||
host_info
.
rule
==
2
;
bool
allow_tcg
=
host_info
.
rule
==
1
||
host_info
.
rule
==
2
;
deckerror
=
deckManager
.
CheckDeck
(
pdeck
[
dp
->
type
],
host_info
.
lflist
,
allow_ocg
,
allow_tcg
);
deckerror
=
deckManager
.
CheckDeck
(
pdeck
[
dp
->
type
],
host_info
.
lflist
,
host_info
.
rule
);
}
}
if
(
deckerror
)
{
...
...
gframe/tag_duel.cpp
View file @
ba5af7f5
...
...
@@ -335,9 +335,7 @@ void TagDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
if
(
deck_error
[
dp
->
type
])
{
deckerror
=
(
DECKERROR_UNKNOWNCARD
<<
28
)
+
deck_error
[
dp
->
type
];
}
else
{
bool
allow_ocg
=
host_info
.
rule
==
0
||
host_info
.
rule
==
2
;
bool
allow_tcg
=
host_info
.
rule
==
1
||
host_info
.
rule
==
2
;
deckerror
=
deckManager
.
CheckDeck
(
pdeck
[
dp
->
type
],
host_info
.
lflist
,
allow_ocg
,
allow_tcg
);
deckerror
=
deckManager
.
CheckDeck
(
pdeck
[
dp
->
type
],
host_info
.
lflist
,
host_info
.
rule
);
}
}
if
(
deckerror
)
{
...
...
strings.conf
View file @
ba5af7f5
...
...
@@ -301,10 +301,6 @@
!
system
1235
主机密码:
!
system
1236
规则:
!
system
1237
每回合时间:
!
system
1240
OCG
!
system
1241
TCG
!
system
1242
OCG&TCG
!
system
1243
自定义卡片
!
system
1244
单局模式
!
system
1245
比赛模式
!
system
1246
TAG
...
...
@@ -415,6 +411,7 @@
!
system
1365
重命名失败,可能存在同名文件
!
system
1366
自动保存录像
!
system
1367
录像已自动保存为%
ls
.
yrp
!
system
1369
提取卡组
!
system
1370
星数↑
!
system
1371
攻击↑
!
system
1372
守备↑
...
...
@@ -462,6 +459,7 @@
!
system
1429
选择的位置不符合条件。
!
system
1430
选择的表示形式不符合条件。
!
system
1431
选择的指示物不符合条件。
!
system
1432
「%
ls
」不允许在当前设定下使用。
!
system
1440
关闭大图
!
system
1441
放大
!
system
1442
缩小
...
...
@@ -487,6 +485,12 @@
!
system
1474
已存在同名分类
!
system
1475
已存在同名卡组
!
system
1476
删除失败
!
system
1481
OCG
!
system
1482
TCG
!
system
1483
简体中文
!
system
1484
自定义卡片
!
system
1485
无独有卡
!
system
1486
所有卡片
!
system
1500
决斗结束。
!
system
1501
录像结束。
!
system
1502
连接已断开。
...
...
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