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
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
MyCard
ygopro
Commits
db332d1b
Commit
db332d1b
authored
Jul 23, 2021
by
nanahira
1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add CCG support
parent
d35f098d
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
50 additions
and
41 deletions
+50
-41
gframe/deck_con.cpp
gframe/deck_con.cpp
+5
-3
gframe/deck_manager.cpp
gframe/deck_manager.cpp
+27
-13
gframe/deck_manager.h
gframe/deck_manager.h
+2
-1
gframe/drawing.cpp
gframe/drawing.cpp
+9
-16
gframe/duelclient.cpp
gframe/duelclient.cpp
+1
-1
gframe/game.cpp
gframe/game.cpp
+2
-0
gframe/netserver.cpp
gframe/netserver.cpp
+1
-1
gframe/single_duel.cpp
gframe/single_duel.cpp
+1
-3
gframe/tag_duel.cpp
gframe/tag_duel.cpp
+1
-3
strings.conf
strings.conf
+1
-0
textures/ot.png
textures/ot.png
+0
-0
No files found.
gframe/deck_con.cpp
View file @
db332d1b
...
...
@@ -1448,14 +1448,16 @@ 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
&
0x3
)
!=
1
)
continue
;
if
(
filter_lm
==
5
&&
data
.
ot
!=
2
)
if
(
filter_lm
==
5
&&
(
data
.
ot
&
0x3
)
!=
2
)
continue
;
if
(
filter_lm
==
6
&&
data
.
ot
!=
3
)
if
(
filter_lm
==
6
&&
(
data
.
ot
&
0x3
)
!=
3
)
continue
;
if
(
filter_lm
==
7
&&
data
.
ot
!=
4
)
continue
;
if
(
filter_lm
==
8
&&
!
(
data
.
ot
&
0x8
))
continue
;
}
bool
is_target
=
true
;
for
(
auto
elements_iterator
=
query_elements
.
begin
();
elements_iterator
!=
query_elements
.
end
();
++
elements_iterator
)
{
...
...
gframe/deck_manager.cpp
View file @
db332d1b
...
...
@@ -71,7 +71,24 @@ 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
)
{
int
DeckManager
::
IsGameRuleDisallowed
(
unsigned
char
hostInfoRule
,
unsigned
int
cardOt
)
{
bool
allow_ocg
=
hostInfoRule
==
0
||
hostInfoRule
==
2
;
// OCG can be used in OCG and OT duels
bool
allow_tcg
=
hostInfoRule
==
1
||
hostInfoRule
==
2
;
// TCG can be used in TCG and OT duels
bool
allow_ccg
=
hostInfoRule
==
0
||
hostInfoRule
==
4
||
hostInfoRule
==
2
;
// CCG can be used in OCG, CCG and OT duels
if
(
!
allow_ocg
&&
(
cardOt
&
0x3
==
0x1
))
return
DECKERROR_OCGONLY
;
if
(
!
allow_tcg
&&
(
cardOt
&
0x3
==
0x2
))
return
DECKERROR_TCGONLY
;
if
(
hostInfoRule
==
4
&&
!
(
cardOt
&
0x8
)
&&
(
cardOt
&
0x3
))
{
// in CCG duels, cards labeled with ither OCG or TCG, but not CCG, would not be allowed.
if
(
cardOt
&
0x3
==
0x2
)
{
return
DECKERROR_TCGONLY
;
}
else
{
return
DECKERROR_OCGONLY
;
}
}
return
0
;
}
int
DeckManager
::
CheckDeck
(
Deck
&
deck
,
int
lfhash
,
unsigned
char
hostInfoRule
)
{
std
::
unordered_map
<
int
,
int
>
ccount
;
auto
list
=
GetLFListContent
(
lfhash
);
if
(
!
list
)
...
...
@@ -86,10 +103,9 @@ int DeckManager::CheckDeck(Deck& deck, int lfhash, bool allow_ocg, bool allow_tc
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
;
const
int
gameruleDeckError
=
IsGameRuleDisallowed
(
hostInfoRule
,
cit
->
second
.
ot
);
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 +119,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
;
const
int
gameruleDeckError
=
IsGameRuleDisallowed
(
hostInfoRule
,
cit
->
second
.
ot
);
if
(
gameruleDeckError
)
return
(
gameruleDeckError
<<
28
)
+
cit
->
first
;
int
code
=
cit
->
second
.
alias
?
cit
->
second
.
alias
:
cit
->
first
;
ccount
[
code
]
++
;
dc
=
ccount
[
code
];
...
...
@@ -118,10 +133,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
;
const
int
gameruleDeckError
=
IsGameRuleDisallowed
(
hostInfoRule
,
cit
->
second
.
ot
);
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 @
db332d1b
...
...
@@ -39,7 +39,8 @@ 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
IsGameRuleDisallowed
(
unsigned
char
hostInfoRule
,
unsigned
int
cardOt
);
int
CheckDeck
(
Deck
&
deck
,
int
lfhash
,
unsigned
char
hostInfoRule
);
int
LoadDeck
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
);
bool
LoadSide
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
);
void
GetCategoryPath
(
wchar_t
*
ret
,
int
index
,
const
wchar_t
*
text
);
...
...
gframe/drawing.cpp
View file @
db332d1b
...
...
@@ -1105,24 +1105,17 @@ 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
;
if
(
cbLimit
->
getSelected
()
>=
4
&&
((
cp
->
second
.
ot
&
0x8
)
||
cp
->
second
.
ot
&
0x3
&&
(
cp
->
second
.
ot
&
0x3
)
!=
0x3
))
{
int
xOffset
=
0
,
yOffset
=
0
;
if
(
cp
->
second
.
ot
&
0x8
)
xOffset
+=
128
;
else
if
((
cp
->
second
.
ot
&
0x3
)
==
0x2
)
{
yOffset
+=
64
;
}
}
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
;
if
(
!
deckManager
.
IsGameRuleDisallowed
(
gameConf
.
defaultOT
,
cp
->
second
.
ot
))
{
yOffset
+=
128
;
}
driver
->
draw2DImage
(
imageManager
.
tOT
,
otloc
,
recti
(
xOffset
,
yOffset
,
128
+
xOffset
,
64
+
yOffset
),
0
,
0
,
true
);
}
}
void
Game
::
DrawDeckBd
()
{
...
...
gframe/duelclient.cpp
View file @
db332d1b
...
...
@@ -421,7 +421,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
(
1240
+
pkt
->
info
.
rule
));
myswprintf
(
msgbuf
,
L"%ls%ls
\n
"
,
dataManager
.
GetSysString
(
1225
),
dataManager
.
GetSysString
(
pkt
->
info
.
rule
==
4
?
1249
:
1240
+
pkt
->
info
.
rule
));
str
.
append
(
msgbuf
);
myswprintf
(
msgbuf
,
L"%ls%ls
\n
"
,
dataManager
.
GetSysString
(
1227
),
dataManager
.
GetSysString
(
1244
+
pkt
->
info
.
mode
));
str
.
append
(
msgbuf
);
...
...
gframe/game.cpp
View file @
db332d1b
...
...
@@ -197,6 +197,7 @@ bool Game::Initialize() {
cbRule
->
addItem
(
dataManager
.
GetSysString
(
1241
));
cbRule
->
addItem
(
dataManager
.
GetSysString
(
1242
));
cbRule
->
addItem
(
dataManager
.
GetSysString
(
1243
));
cbRule
->
addItem
(
dataManager
.
GetSysString
(
1249
));
cbRule
->
setSelected
(
gameConf
.
defaultOT
-
1
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1227
),
rect
<
s32
>
(
20
,
90
,
220
,
110
),
false
,
false
,
wCreateHost
);
cbMatchMode
=
env
->
addComboBox
(
rect
<
s32
>
(
140
,
85
,
300
,
110
),
wCreateHost
);
...
...
@@ -678,6 +679,7 @@ bool Game::Initialize() {
cbLimit
->
addItem
(
dataManager
.
GetSysString
(
1241
));
cbLimit
->
addItem
(
dataManager
.
GetSysString
(
1242
));
cbLimit
->
addItem
(
dataManager
.
GetSysString
(
1243
));
cbLimit
->
addItem
(
dataManager
.
GetSysString
(
1249
));
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
);
...
...
gframe/netserver.cpp
View file @
db332d1b
...
...
@@ -233,7 +233,7 @@ 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
)
if
(
pkt
->
info
.
rule
>
4
)
pkt
->
info
.
rule
=
0
;
if
(
pkt
->
info
.
mode
>
2
)
pkt
->
info
.
mode
=
0
;
...
...
gframe/single_duel.cpp
View file @
db332d1b
...
...
@@ -251,9 +251,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 @
db332d1b
...
...
@@ -226,9 +226,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 @
db332d1b
...
...
@@ -307,6 +307,7 @@
!
system
1246
TAG
!
system
1247
标准对战
!
system
1248
自定义
!
system
1249
简体中文
!
system
1250
决斗准备
!
system
1251
→决斗者
!
system
1252
→观战
...
...
textures/ot.png
View replaced file @
d35f098d
View file @
db332d1b
8.26 KB
|
W:
|
H:
9.92 KB
|
W:
|
H:
2-up
Swipe
Onion skin
mercury233
@mercury233
mentioned in commit
51983cf5
·
Sep 06, 2021
mentioned in commit
51983cf5
mentioned in commit 51983cf5e4a0ddb7f31349adbf9f526506c94ce9
Toggle commit list
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