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
134528e1
Commit
134528e1
authored
Feb 08, 2025
by
wind2009
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'upstream/master' into server
parents
f1ce2613
377824c5
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
154 additions
and
162 deletions
+154
-162
gframe/client_card.cpp
gframe/client_card.cpp
+25
-23
gframe/client_card.h
gframe/client_card.h
+1
-1
gframe/client_field.cpp
gframe/client_field.cpp
+38
-55
gframe/data_manager.h
gframe/data_manager.h
+1
-0
gframe/deck_con.cpp
gframe/deck_con.cpp
+1
-1
gframe/deck_manager.cpp
gframe/deck_manager.cpp
+36
-32
gframe/deck_manager.h
gframe/deck_manager.h
+1
-1
gframe/drawing.cpp
gframe/drawing.cpp
+1
-1
gframe/duelclient.cpp
gframe/duelclient.cpp
+8
-8
gframe/event_handler.cpp
gframe/event_handler.cpp
+32
-30
gframe/network.h
gframe/network.h
+9
-9
gframe/single_duel.cpp
gframe/single_duel.cpp
+1
-1
No files found.
gframe/client_card.cpp
View file @
134528e1
...
...
@@ -31,8 +31,8 @@ ClientCard::~ClientCard() {
}
overlayed
.
clear
();
}
void
ClientCard
::
SetCode
(
int
x
)
{
if
((
location
==
LOCATION_HAND
)
&&
(
code
!=
(
unsigned
int
)
x
))
{
void
ClientCard
::
SetCode
(
unsigned
int
x
)
{
if
((
location
==
LOCATION_HAND
)
&&
(
code
!=
x
))
{
code
=
x
;
mainGame
->
dField
.
MoveCard
(
this
,
5
);
}
else
...
...
@@ -175,13 +175,13 @@ void ClientCard::UpdateInfo(unsigned char* buf) {
}
}
void
ClientCard
::
ClearTarget
()
{
for
(
auto
cit
=
cardTarget
.
begin
();
cit
!=
cardTarget
.
end
();
++
ci
t
)
{
(
*
cit
)
->
is_showtarget
=
false
;
(
*
cit
)
->
ownerTarget
.
erase
(
this
);
for
(
auto
&
pcard
:
cardTarge
t
)
{
pcard
->
is_showtarget
=
false
;
pcard
->
ownerTarget
.
erase
(
this
);
}
for
(
auto
cit
=
ownerTarget
.
begin
();
cit
!=
ownerTarget
.
end
();
++
ci
t
)
{
(
*
cit
)
->
is_showtarget
=
false
;
(
*
cit
)
->
cardTarget
.
erase
(
this
);
for
(
auto
&
pcard
:
ownerTarge
t
)
{
pcard
->
is_showtarget
=
false
;
pcard
->
cardTarget
.
erase
(
this
);
}
cardTarget
.
clear
();
ownerTarget
.
clear
();
...
...
@@ -220,27 +220,29 @@ bool ClientCard::client_card_sort(ClientCard* c1, ClientCard* c2) {
return
cp1
<
cp2
;
if
(
c1
->
location
!=
c2
->
location
)
return
c1
->
location
<
c2
->
location
;
if
(
c1
->
location
&
LOCATION_OVERLAY
)
{
if
(
c1
->
location
==
LOCATION_OVERLAY
)
{
if
(
c1
->
overlayTarget
!=
c2
->
overlayTarget
)
return
c1
->
overlayTarget
->
sequence
<
c2
->
overlayTarget
->
sequence
;
else
return
c1
->
sequence
<
c2
->
sequence
;
}
else
{
if
(
c1
->
location
&
(
LOCATION_DECK
|
LOCATION_GRAVE
|
LOCATION_REMOVED
|
LOCATION_EXTRA
))
{
auto
it1
=
std
::
find_if
(
mainGame
->
dField
.
chains
.
rbegin
(),
mainGame
->
dField
.
chains
.
rend
(),
[
c1
](
const
ChainInfo
&
ch
)
{
return
c1
==
ch
.
chain_card
||
ch
.
target
.
find
(
c1
)
!=
ch
.
target
.
end
();
});
auto
it2
=
std
::
find_if
(
mainGame
->
dField
.
chains
.
rbegin
(),
mainGame
->
dField
.
chains
.
rend
(),
[
c2
](
const
ChainInfo
&
ch
)
{
return
c2
==
ch
.
chain_card
||
ch
.
target
.
find
(
c2
)
!=
ch
.
target
.
end
(
);
});
if
(
it1
!=
mainGame
->
dField
.
chains
.
rend
()
||
it2
!=
mainGame
->
dField
.
chains
.
rend
())
{
return
it1
<
it2
;
}
return
c1
->
sequence
>
c2
->
sequence
;
else
if
(
c1
->
location
==
LOCATION_DECK
)
{
return
c1
->
sequence
>
c2
->
sequence
;
}
else
if
(
c1
->
location
&
(
LOCATION_GRAVE
|
LOCATION_REMOVED
|
LOCATION_EXTRA
))
{
auto
it1
=
std
::
find_if
(
mainGame
->
dField
.
chains
.
rbegin
(),
mainGame
->
dField
.
chains
.
rend
(),
[
c1
](
const
ChainInfo
&
ch
)
{
return
c1
==
ch
.
chain_card
||
ch
.
target
.
find
(
c1
)
!=
ch
.
target
.
end
();
}
);
auto
it2
=
std
::
find_if
(
mainGame
->
dField
.
chains
.
rbegin
(),
mainGame
->
dField
.
chains
.
rend
(),
[
c2
](
const
ChainInfo
&
ch
)
{
return
c2
==
ch
.
chain_card
||
ch
.
target
.
find
(
c2
)
!=
ch
.
target
.
end
();
})
;
if
(
it1
!=
mainGame
->
dField
.
chains
.
rend
()
||
it2
!=
mainGame
->
dField
.
chains
.
rend
())
{
return
it1
<
it2
;
}
else
return
c1
->
sequence
<
c2
->
sequence
;
return
c1
->
sequence
>
c2
->
sequence
;
}
else
{
return
c1
->
sequence
<
c2
->
sequence
;
}
}
}
gframe/client_card.h
View file @
134528e1
...
...
@@ -76,7 +76,7 @@ public:
ClientCard
()
=
default
;
~
ClientCard
();
void
SetCode
(
int
x
);
void
SetCode
(
unsigned
int
x
);
void
UpdateInfo
(
unsigned
char
*
buf
);
void
ClearTarget
();
void
ClearData
();
...
...
gframe/client_field.cpp
View file @
134528e1
...
...
@@ -127,7 +127,7 @@ void ClientField::Initial(int player, int deckc, int extrac) {
deck
[
player
].
push_back
(
pcard
);
pcard
->
owner
=
player
;
pcard
->
controler
=
player
;
pcard
->
location
=
0x1
;
pcard
->
location
=
LOCATION_DECK
;
pcard
->
sequence
=
i
;
pcard
->
position
=
POS_FACEDOWN_DEFENSE
;
GetCardLocation
(
pcard
,
&
pcard
->
curPos
,
&
pcard
->
curRot
,
true
);
...
...
@@ -137,7 +137,7 @@ void ClientField::Initial(int player, int deckc, int extrac) {
extra
[
player
].
push_back
(
pcard
);
pcard
->
owner
=
player
;
pcard
->
controler
=
player
;
pcard
->
location
=
0x40
;
pcard
->
location
=
LOCATION_EXTRA
;
pcard
->
sequence
=
i
;
pcard
->
position
=
POS_FACEDOWN_DEFENSE
;
GetCardLocation
(
pcard
,
&
pcard
->
curPos
,
&
pcard
->
curRot
,
true
);
...
...
@@ -196,15 +196,15 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
deck
[
controler
].
push_back
(
pcard
);
pcard
->
sequence
=
(
unsigned
char
)(
deck
[
controler
].
size
()
-
1
);
}
else
{
deck
[
controler
].
push_back
(
0
);
for
(
int
i
=
deck
[
controler
].
size
()
-
1
;
i
>
0
;
--
i
)
{
deck
[
controler
][
i
]
=
deck
[
controler
][
i
-
1
];
deck
[
controler
][
i
]
->
sequence
++
;
}
deck
[
controler
][
0
]
=
pcard
;
for
(
auto
&
pcard
:
deck
[
controler
])
pcard
->
sequence
++
;
deck
[
controler
].
insert
(
deck
[
controler
].
begin
(),
pcard
);
pcard
->
sequence
=
0
;
}
pcard
->
is_reversed
=
false
;
pcard
->
ClearData
();
pcard
->
ClearTarget
();
SetShowMark
(
pcard
,
false
);
break
;
}
case
LOCATION_HAND
:
{
...
...
@@ -235,15 +235,13 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
extra
[
controler
].
push_back
(
pcard
);
pcard
->
sequence
=
(
unsigned
char
)(
extra
[
controler
].
size
()
-
1
);
}
else
{
extra
[
controler
].
push_back
(
0
);
int
p
=
extra
[
controler
].
size
()
-
extra_p_count
[
controler
]
-
1
;
for
(
int
i
=
extra
[
controler
].
size
()
-
1
;
i
>
p
;
--
i
)
{
extra
[
controler
][
i
]
=
extra
[
controler
][
i
-
1
];
extra
[
controler
][
i
]
->
sequence
++
;
extra
[
controler
][
i
]
->
curPos
+=
irr
::
core
::
vector3df
(
0
,
0
,
0.01
f
);
extra
[
controler
][
i
]
->
mTransform
.
setTranslation
(
extra
[
controler
][
i
]
->
curPos
);
}
extra
[
controler
]
[
p
]
=
pcard
;
extra
[
controler
]
.
insert
(
extra
[
controler
].
begin
()
+
p
,
pcard
)
;
pcard
->
sequence
=
p
;
}
if
(
pcard
->
position
&
POS_FACEUP
)
...
...
@@ -253,69 +251,54 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
}
}
ClientCard
*
ClientField
::
RemoveCard
(
int
controler
,
int
location
,
int
sequence
)
{
ClientCard
*
pcard
=
0
;
ClientCard
*
pcard
=
nullptr
;
auto
erase_card
=
[](
std
::
vector
<
ClientCard
*>&
lst
,
int
seq
)
{
for
(
int
i
=
seq
;
i
<
(
int
)
lst
.
size
()
-
1
;
++
i
)
{
lst
[
i
]
=
lst
[
i
+
1
];
lst
[
i
]
->
sequence
--
;
lst
[
i
]
->
curPos
-=
irr
::
core
::
vector3df
(
0
,
0
,
0.01
f
);
lst
[
i
]
->
mTransform
.
setTranslation
(
lst
[
i
]
->
curPos
);
}
lst
.
pop_back
();
};
switch
(
location
)
{
case
LOCATION_DECK
:
{
pcard
=
deck
[
controler
][
sequence
];
for
(
size_t
i
=
sequence
;
i
<
deck
[
controler
].
size
()
-
1
;
++
i
)
{
deck
[
controler
][
i
]
=
deck
[
controler
][
i
+
1
];
deck
[
controler
][
i
]
->
sequence
--
;
deck
[
controler
][
i
]
->
curPos
-=
irr
::
core
::
vector3df
(
0
,
0
,
0.01
f
);
deck
[
controler
][
i
]
->
mTransform
.
setTranslation
(
deck
[
controler
][
i
]
->
curPos
);
}
deck
[
controler
].
erase
(
deck
[
controler
].
end
()
-
1
);
erase_card
(
deck
[
controler
],
sequence
);
break
;
}
case
LOCATION_HAND
:
{
pcard
=
hand
[
controler
][
sequence
];
for
(
size_t
i
=
sequence
;
i
<
hand
[
controler
].
size
()
-
1
;
++
i
)
{
for
(
int
i
=
sequence
;
i
<
(
int
)
hand
[
controler
].
size
()
-
1
;
++
i
)
{
hand
[
controler
][
i
]
=
hand
[
controler
][
i
+
1
];
hand
[
controler
][
i
]
->
sequence
--
;
}
hand
[
controler
].
erase
(
hand
[
controler
].
end
()
-
1
);
hand
[
controler
].
pop_back
(
);
break
;
}
case
LOCATION_MZONE
:
{
pcard
=
mzone
[
controler
][
sequence
];
mzone
[
controler
][
sequence
]
=
0
;
mzone
[
controler
][
sequence
]
=
nullptr
;
break
;
}
case
LOCATION_SZONE
:
{
pcard
=
szone
[
controler
][
sequence
];
szone
[
controler
][
sequence
]
=
0
;
szone
[
controler
][
sequence
]
=
nullptr
;
break
;
}
case
LOCATION_GRAVE
:
{
pcard
=
grave
[
controler
][
sequence
];
for
(
size_t
i
=
sequence
;
i
<
grave
[
controler
].
size
()
-
1
;
++
i
)
{
grave
[
controler
][
i
]
=
grave
[
controler
][
i
+
1
];
grave
[
controler
][
i
]
->
sequence
--
;
grave
[
controler
][
i
]
->
curPos
-=
irr
::
core
::
vector3df
(
0
,
0
,
0.01
f
);
grave
[
controler
][
i
]
->
mTransform
.
setTranslation
(
grave
[
controler
][
i
]
->
curPos
);
}
grave
[
controler
].
erase
(
grave
[
controler
].
end
()
-
1
);
erase_card
(
grave
[
controler
],
sequence
);
break
;
}
case
LOCATION_REMOVED
:
{
pcard
=
remove
[
controler
][
sequence
];
for
(
size_t
i
=
sequence
;
i
<
remove
[
controler
].
size
()
-
1
;
++
i
)
{
remove
[
controler
][
i
]
=
remove
[
controler
][
i
+
1
];
remove
[
controler
][
i
]
->
sequence
--
;
remove
[
controler
][
i
]
->
curPos
-=
irr
::
core
::
vector3df
(
0
,
0
,
0.01
f
);
remove
[
controler
][
i
]
->
mTransform
.
setTranslation
(
remove
[
controler
][
i
]
->
curPos
);
}
remove
[
controler
].
erase
(
remove
[
controler
].
end
()
-
1
);
erase_card
(
remove
[
controler
],
sequence
);
break
;
}
case
LOCATION_EXTRA
:
{
pcard
=
extra
[
controler
][
sequence
];
for
(
size_t
i
=
sequence
;
i
<
extra
[
controler
].
size
()
-
1
;
++
i
)
{
extra
[
controler
][
i
]
=
extra
[
controler
][
i
+
1
];
extra
[
controler
][
i
]
->
sequence
--
;
extra
[
controler
][
i
]
->
curPos
-=
irr
::
core
::
vector3df
(
0
,
0
,
0.01
f
);
extra
[
controler
][
i
]
->
mTransform
.
setTranslation
(
extra
[
controler
][
i
]
->
curPos
);
}
extra
[
controler
].
erase
(
extra
[
controler
].
end
()
-
1
);
erase_card
(
extra
[
controler
],
sequence
);
if
(
pcard
->
position
&
POS_FACEUP
)
extra_p_count
[
controler
]
--
;
break
;
...
...
@@ -425,8 +408,8 @@ void ClientField::ClearChainSelect() {
void
ClientField
::
ShowSelectCard
(
bool
buttonok
,
bool
chain
)
{
if
(
cant_check_grave
)
{
bool
has_card_in_grave
=
false
;
for
(
size_t
i
=
0
;
i
<
selectable_cards
.
size
();
++
i
)
{
if
(
selectable_cards
[
i
]
->
location
==
LOCATION_GRAVE
)
{
for
(
auto
&
pcard
:
selectable_cards
)
{
if
(
pcard
->
location
==
LOCATION_GRAVE
)
{
has_card_in_grave
=
true
;
break
;
}
...
...
@@ -436,7 +419,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
}
}
int
startpos
;
size_
t
ct
;
in
t
ct
;
if
(
selectable_cards
.
size
()
<=
5
)
{
startpos
=
30
+
125
*
(
5
-
selectable_cards
.
size
())
/
2
;
ct
=
selectable_cards
.
size
();
...
...
@@ -444,7 +427,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
startpos
=
30
;
ct
=
5
;
}
for
(
size_
t
i
=
0
;
i
<
ct
;
++
i
)
{
for
(
in
t
i
=
0
;
i
<
ct
;
++
i
)
{
mainGame
->
stCardPos
[
i
]
->
enableOverrideColor
(
false
);
// image
if
(
selectable_cards
[
i
]
->
code
)
...
...
@@ -528,7 +511,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
}
void
ClientField
::
ShowChainCard
()
{
int
startpos
;
size_
t
ct
;
in
t
ct
;
if
(
selectable_cards
.
size
()
<=
5
)
{
startpos
=
30
+
125
*
(
5
-
selectable_cards
.
size
())
/
2
;
ct
=
selectable_cards
.
size
();
...
...
@@ -536,7 +519,7 @@ void ClientField::ShowChainCard() {
startpos
=
30
;
ct
=
5
;
}
for
(
size_
t
i
=
0
;
i
<
ct
;
++
i
)
{
for
(
in
t
i
=
0
;
i
<
ct
;
++
i
)
{
if
(
selectable_cards
[
i
]
->
code
)
mainGame
->
imageLoading
.
insert
(
std
::
make_pair
(
mainGame
->
btnCardSelect
[
i
],
selectable_cards
[
i
]
->
code
));
else
...
...
@@ -582,7 +565,7 @@ void ClientField::ShowChainCard() {
}
void
ClientField
::
ShowLocationCard
()
{
int
startpos
;
size_
t
ct
;
in
t
ct
;
if
(
display_cards
.
size
()
<=
5
)
{
startpos
=
30
+
125
*
(
5
-
display_cards
.
size
())
/
2
;
ct
=
display_cards
.
size
();
...
...
@@ -590,7 +573,7 @@ void ClientField::ShowLocationCard() {
startpos
=
30
;
ct
=
5
;
}
for
(
size_
t
i
=
0
;
i
<
ct
;
++
i
)
{
for
(
in
t
i
=
0
;
i
<
ct
;
++
i
)
{
mainGame
->
stDisplayPos
[
i
]
->
enableOverrideColor
(
false
);
if
(
display_cards
[
i
]
->
code
)
mainGame
->
imageLoading
.
insert
(
std
::
make_pair
(
mainGame
->
btnCardDisplay
[
i
],
display_cards
[
i
]
->
code
));
...
...
@@ -1187,8 +1170,8 @@ bool ClientField::CheckSelectSum() {
(
*
sit
)
->
is_selected
=
false
;
selable
.
insert
(
*
sit
);
}
for
(
size_t
i
=
0
;
i
<
selected_cards
.
size
();
++
i
)
{
if
(
(
int
)
i
<
must_select_count
)
for
(
int
i
=
0
;
i
<
(
int
)
selected_cards
.
size
();
++
i
)
{
if
(
i
<
must_select_count
)
selected_cards
[
i
]
->
is_selectable
=
false
;
else
selected_cards
[
i
]
->
is_selectable
=
true
;
...
...
@@ -1274,7 +1257,7 @@ bool ClientField::CheckSelectTribute() {
(
*
sit
)
->
is_selected
=
false
;
selable
.
insert
(
*
sit
);
}
for
(
size_t
i
=
0
;
i
<
selected_cards
.
size
();
++
i
)
{
for
(
int
i
=
0
;
i
<
(
int
)
selected_cards
.
size
();
++
i
)
{
selected_cards
[
i
]
->
is_selectable
=
true
;
selected_cards
[
i
]
->
is_selected
=
true
;
selable
.
erase
(
selected_cards
[
i
]);
...
...
gframe/data_manager.h
View file @
134528e1
...
...
@@ -17,6 +17,7 @@ namespace irr {
namespace
ygo
{
constexpr
int
MAX_STRING_ID
=
0x7ff
;
constexpr
unsigned
int
MIN_CARD_ID
=
(
unsigned
int
)(
MAX_STRING_ID
+
1
)
>>
4
;
constexpr
unsigned
int
MAX_CARD_ID
=
0x0fffffffU
;
using
CardData
=
card_data
;
struct
CardDataC
:
card_data
{
...
...
gframe/deck_con.cpp
View file @
134528e1
...
...
@@ -177,7 +177,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if
(
*
dname
==
0
)
break
;
int
sel
=
-
1
;
for
(
size_t
i
=
0
;
i
<
mainGame
->
cbDBDecks
->
getItemCount
();
++
i
)
{
for
(
int
i
=
0
;
i
<
(
int
)
mainGame
->
cbDBDecks
->
getItemCount
();
++
i
)
{
if
(
!
std
::
wcscmp
(
dname
,
mainGame
->
cbDBDecks
->
getItem
(
i
)))
{
sel
=
i
;
break
;
...
...
gframe/deck_manager.cpp
View file @
134528e1
...
...
@@ -37,7 +37,7 @@ void DeckManager::LoadLFListSingle(const char* path) {
int
count
=
-
1
;
if
(
sscanf
(
linebuf
,
"%d %d"
,
&
code
,
&
count
)
!=
2
)
continue
;
if
(
code
<=
0
||
code
>
0xfffffff
)
if
(
code
<=
0
||
code
>
MAX_CARD_ID
)
continue
;
if
(
count
<
0
||
count
>
2
)
continue
;
...
...
@@ -77,71 +77,75 @@ const std::unordered_map<int, int>* DeckManager::GetLFListContent(int lfhash) {
return
&
lit
->
content
;
return
nullptr
;
}
static
int
checkAvail
(
unsigned
int
ot
,
unsigned
int
avail
)
{
static
unsigned
int
checkAvail
(
unsigned
int
ot
,
unsigned
int
avail
)
{
if
((
ot
&
avail
)
==
avail
)
return
0
;
if
((
ot
&
AVAIL_OCG
)
&&
!
(
avail
=
=
AVAIL_OCG
))
if
((
ot
&
AVAIL_OCG
)
&&
(
avail
!
=
AVAIL_OCG
))
return
DECKERROR_OCGONLY
;
if
((
ot
&
AVAIL_TCG
)
&&
!
(
avail
=
=
AVAIL_TCG
))
if
((
ot
&
AVAIL_TCG
)
&&
(
avail
!
=
AVAIL_TCG
))
return
DECKERROR_TCGONLY
;
return
DECKERROR_NOTAVAIL
;
}
int
DeckManager
::
CheckDeck
(
Deck
&
deck
,
int
lfhash
,
int
rule
)
{
unsigned
int
DeckManager
::
CheckDeck
(
Deck
&
deck
,
int
lfhash
,
int
rule
)
{
std
::
unordered_map
<
int
,
int
>
ccount
;
auto
list
=
GetLFListContent
(
lfhash
);
if
(
!
list
)
return
0
;
int
dc
=
0
;
// rule
if
(
deck
.
main
.
size
()
<
DECK_MIN_SIZE
||
deck
.
main
.
size
()
>
DECK_MAX_SIZE
)
return
(
(
unsigned
)
DECKERROR_MAINCOUNT
<<
28
)
+
deck
.
main
.
size
();
return
(
DECKERROR_MAINCOUNT
<<
28
)
|
(
unsigned
)
deck
.
main
.
size
();
if
(
deck
.
extra
.
size
()
>
EXTRA_MAX_SIZE
)
return
(
(
unsigned
)
DECKERROR_EXTRACOUNT
<<
28
)
+
deck
.
extra
.
size
();
return
(
DECKERROR_EXTRACOUNT
<<
28
)
|
(
unsigned
)
deck
.
extra
.
size
();
if
(
deck
.
side
.
size
()
>
SIDE_MAX_SIZE
)
return
((
unsigned
)
DECKERROR_SIDECOUNT
<<
28
)
+
deck
.
side
.
size
();
if
(
rule
<
0
||
rule
>=
6
)
return
(
DECKERROR_SIDECOUNT
<<
28
)
|
(
unsigned
)
deck
.
side
.
size
();
auto
list
=
GetLFListContent
(
lfhash
);
if
(
!
list
)
return
0
;
const
unsigned
int
rule_map
[
6
]
=
{
AVAIL_OCG
,
AVAIL_TCG
,
AVAIL_SC
,
AVAIL_CUSTOM
,
AVAIL_OCGTCG
,
0
};
auto
avail
=
rule_map
[
rule
];
unsigned
int
avail
=
0
;
if
(
rule
>=
0
&&
rule
<
(
int
)(
sizeof
rule_map
/
sizeof
rule_map
[
0
]))
avail
=
rule_map
[
rule
];
for
(
auto
&
cit
:
deck
.
main
)
{
int
gameruleDeckError
=
checkAvail
(
cit
->
second
.
ot
,
avail
);
auto
gameruleDeckError
=
checkAvail
(
cit
->
second
.
ot
,
avail
);
if
(
gameruleDeckError
)
return
(
gameruleDeckError
<<
28
)
+
cit
->
first
;
return
(
gameruleDeckError
<<
28
)
|
cit
->
first
;
if
(
cit
->
second
.
type
&
(
TYPES_EXTRA_DECK
|
TYPE_TOKEN
))
return
(
DECKERROR_
EXTRA
COUNT
<<
28
);
return
(
DECKERROR_
MAIN
COUNT
<<
28
);
int
code
=
cit
->
second
.
alias
?
cit
->
second
.
alias
:
cit
->
first
;
ccount
[
code
]
++
;
dc
=
ccount
[
code
];
int
dc
=
ccount
[
code
];
if
(
dc
>
3
)
return
(
DECKERROR_CARDCOUNT
<<
28
)
+
cit
->
first
;
return
(
DECKERROR_CARDCOUNT
<<
28
)
|
cit
->
first
;
auto
it
=
list
->
find
(
code
);
if
(
it
!=
list
->
end
()
&&
dc
>
it
->
second
)
return
(
DECKERROR_LFLIST
<<
28
)
+
cit
->
first
;
return
(
DECKERROR_LFLIST
<<
28
)
|
cit
->
first
;
}
for
(
auto
&
cit
:
deck
.
extra
)
{
int
gameruleDeckError
=
checkAvail
(
cit
->
second
.
ot
,
avail
);
auto
gameruleDeckError
=
checkAvail
(
cit
->
second
.
ot
,
avail
);
if
(
gameruleDeckError
)
return
(
gameruleDeckError
<<
28
)
+
cit
->
first
;
return
(
gameruleDeckError
<<
28
)
|
cit
->
first
;
if
(
!
(
cit
->
second
.
type
&
TYPES_EXTRA_DECK
)
||
cit
->
second
.
type
&
TYPE_TOKEN
)
return
(
DECKERROR_EXTRACOUNT
<<
28
);
int
code
=
cit
->
second
.
alias
?
cit
->
second
.
alias
:
cit
->
first
;
ccount
[
code
]
++
;
dc
=
ccount
[
code
];
int
dc
=
ccount
[
code
];
if
(
dc
>
3
)
return
(
DECKERROR_CARDCOUNT
<<
28
)
+
cit
->
first
;
return
(
DECKERROR_CARDCOUNT
<<
28
)
|
cit
->
first
;
auto
it
=
list
->
find
(
code
);
if
(
it
!=
list
->
end
()
&&
dc
>
it
->
second
)
return
(
DECKERROR_LFLIST
<<
28
)
+
cit
->
first
;
return
(
DECKERROR_LFLIST
<<
28
)
|
cit
->
first
;
}
for
(
auto
&
cit
:
deck
.
side
)
{
int
gameruleDeckError
=
checkAvail
(
cit
->
second
.
ot
,
avail
);
auto
gameruleDeckError
=
checkAvail
(
cit
->
second
.
ot
,
avail
);
if
(
gameruleDeckError
)
return
(
gameruleDeckError
<<
28
)
+
cit
->
first
;
return
(
gameruleDeckError
<<
28
)
|
cit
->
first
;
if
(
cit
->
second
.
type
&
TYPE_TOKEN
)
return
(
DECKERROR_SIDECOUNT
<<
28
);
int
code
=
cit
->
second
.
alias
?
cit
->
second
.
alias
:
cit
->
first
;
ccount
[
code
]
++
;
dc
=
ccount
[
code
];
int
dc
=
ccount
[
code
];
if
(
dc
>
3
)
return
(
DECKERROR_CARDCOUNT
<<
28
)
+
cit
->
first
;
return
(
DECKERROR_CARDCOUNT
<<
28
)
|
cit
->
first
;
auto
it
=
list
->
find
(
code
);
if
(
it
!=
list
->
end
()
&&
dc
>
it
->
second
)
return
(
DECKERROR_LFLIST
<<
28
)
+
cit
->
first
;
return
(
DECKERROR_LFLIST
<<
28
)
|
cit
->
first
;
}
return
0
;
}
...
...
@@ -165,11 +169,11 @@ int DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, bool is_p
continue
;
}
if
(
cd
.
type
&
TYPES_EXTRA_DECK
)
{
if
(
(
int
)
deck
.
extra
.
size
()
<
EXTRA_MAX_SIZE
)
if
(
deck
.
extra
.
size
()
<
EXTRA_MAX_SIZE
)
deck
.
extra
.
push_back
(
dataManager
.
GetCodePointer
(
code
));
}
else
{
if
(
(
int
)
deck
.
main
.
size
()
<
DECK_MAX_SIZE
)
if
(
deck
.
main
.
size
()
<
DECK_MAX_SIZE
)
deck
.
main
.
push_back
(
dataManager
.
GetCodePointer
(
code
));
}
}
...
...
gframe/deck_manager.h
View file @
134528e1
...
...
@@ -65,7 +65,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
,
int
rule
);
unsigned
int
CheckDeck
(
Deck
&
deck
,
int
lfhash
,
int
rule
);
int
LoadDeck
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
,
bool
is_packlist
=
false
);
int
LoadDeck
(
Deck
&
deck
,
std
::
istringstream
&
deckStream
,
bool
is_packlist
=
false
);
bool
LoadSide
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
);
...
...
gframe/drawing.cpp
View file @
134528e1
...
...
@@ -1266,7 +1266,7 @@ void Game::DrawDeckBd() {
driver
->
draw2DRectangle
(
Resize
(
805
,
160
,
1020
,
630
),
0x400000ff
,
0x400000ff
,
0x40000000
,
0x40000000
);
driver
->
draw2DRectangleOutline
(
Resize
(
804
,
159
,
1020
,
630
));
}
for
(
size_t
i
=
0
;
i
<
9
&&
i
+
scrFilter
->
getPos
()
<
deckBuilder
.
results
.
size
();
++
i
)
{
for
(
int
i
=
0
;
i
<
9
&&
i
+
scrFilter
->
getPos
()
<
(
int
)
deckBuilder
.
results
.
size
();
++
i
)
{
code_pointer
ptr
=
deckBuilder
.
results
[
i
+
scrFilter
->
getPos
()];
if
(
i
>=
7
)
{
...
...
gframe/duelclient.cpp
View file @
134528e1
...
...
@@ -274,8 +274,8 @@ void DuelClient::HandleSTOCPacketLan(unsigned char* data, int len) {
}
case
ERRMSG_DECKERROR
:
{
mainGame
->
gMutex
.
lock
();
unsigned
int
code
=
pkt
->
code
&
0xFFFFFFF
;
int
flag
=
pkt
->
code
>>
28
;
unsigned
int
code
=
pkt
->
code
&
MAX_CARD_ID
;
unsigned
int
flag
=
pkt
->
code
>>
28
;
wchar_t
msgbuf
[
256
];
switch
(
flag
)
{
...
...
@@ -1565,7 +1565,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
l
=
BufferIO
::
ReadUInt8
(
pbuf
);
s
=
BufferIO
::
ReadUInt8
(
pbuf
);
ss
=
BufferIO
::
ReadUInt8
(
pbuf
);
if
(
(
l
&
LOCATION_OVERLAY
)
>
0
)
if
(
l
&
LOCATION_OVERLAY
)
pcard
=
mainGame
->
dField
.
GetCard
(
c
,
l
&
0x7f
,
s
)
->
overlayed
[
ss
];
else
pcard
=
mainGame
->
dField
.
GetCard
(
c
,
l
,
s
);
...
...
@@ -1630,7 +1630,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
l
=
BufferIO
::
ReadUInt8
(
pbuf
);
s
=
BufferIO
::
ReadUInt8
(
pbuf
);
ss
=
BufferIO
::
ReadUInt8
(
pbuf
);
if
(
(
l
&
LOCATION_OVERLAY
)
>
0
)
if
(
l
&
LOCATION_OVERLAY
)
pcard
=
mainGame
->
dField
.
GetCard
(
c
,
l
&
0x7f
,
s
)
->
overlayed
[
ss
];
else
pcard
=
mainGame
->
dField
.
GetCard
(
c
,
l
,
s
);
...
...
@@ -1654,7 +1654,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
l
=
BufferIO
::
ReadUInt8
(
pbuf
);
s
=
BufferIO
::
ReadUInt8
(
pbuf
);
ss
=
BufferIO
::
ReadUInt8
(
pbuf
);
if
(
(
l
&
LOCATION_OVERLAY
)
>
0
)
if
(
l
&
LOCATION_OVERLAY
)
pcard
=
mainGame
->
dField
.
GetCard
(
c
,
l
&
0x7f
,
s
)
->
overlayed
[
ss
];
else
pcard
=
mainGame
->
dField
.
GetCard
(
c
,
l
,
s
);
...
...
@@ -2201,7 +2201,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
}
if
(
field_confirm
.
size
()
>
0
)
{
mainGame
->
WaitFrameSignal
(
5
);
for
(
size_t
i
=
0
;
i
<
field_confirm
.
size
();
++
i
)
{
for
(
int
i
=
0
;
i
<
(
int
)
field_confirm
.
size
();
++
i
)
{
pcard
=
field_confirm
[
i
];
c
=
pcard
->
controler
;
l
=
pcard
->
location
;
...
...
@@ -2231,7 +2231,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
mainGame
->
WaitFrameSignal
(
30
);
else
mainGame
->
WaitFrameSignal
(
90
);
for
(
size_t
i
=
0
;
i
<
field_confirm
.
size
();
++
i
)
{
for
(
int
i
=
0
;
i
<
(
int
)
field_confirm
.
size
();
++
i
)
{
pcard
=
field_confirm
[
i
];
mainGame
->
dField
.
MoveCard
(
pcard
,
5
);
pcard
->
is_highlighting
=
false
;
...
...
@@ -3072,7 +3072,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
unsigned
int
l
=
BufferIO
::
ReadUInt8
(
pbuf
);
int
s
=
BufferIO
::
ReadUInt8
(
pbuf
);
int
ss
=
BufferIO
::
ReadUInt8
(
pbuf
);
if
(
(
l
&
LOCATION_OVERLAY
)
>
0
)
if
(
l
&
LOCATION_OVERLAY
)
pcards
[
i
]
=
mainGame
->
dField
.
GetCard
(
c
,
l
&
0x7f
,
s
)
->
overlayed
[
ss
];
else
pcards
[
i
]
=
mainGame
->
dField
.
GetCard
(
c
,
l
,
s
);
...
...
gframe/event_handler.cpp
View file @
134528e1
...
...
@@ -2407,19 +2407,19 @@ void ClientField::ShowCancelOrFinishButton(int buttonOp) {
void
ClientField
::
SetShowMark
(
ClientCard
*
pcard
,
bool
enable
)
{
if
(
pcard
->
equipTarget
)
pcard
->
equipTarget
->
is_showequip
=
enable
;
for
(
auto
cit
=
pcard
->
equipped
.
begin
();
cit
!=
pcard
->
equipped
.
end
();
++
cit
)
(
*
cit
)
->
is_showequip
=
enable
;
for
(
auto
cit
=
pcard
->
cardTarget
.
begin
();
cit
!=
pcard
->
cardTarget
.
end
();
++
ci
t
)
(
*
cit
)
->
is_showtarget
=
enable
;
for
(
auto
cit
=
pcard
->
ownerTarget
.
begin
();
cit
!=
pcard
->
ownerTarget
.
end
();
++
ci
t
)
(
*
cit
)
->
is_showtarget
=
enable
;
for
(
auto
chit
=
chains
.
begin
();
chit
!=
chains
.
end
();
++
chit
)
{
if
(
pcard
==
chit
->
chain_card
)
{
for
(
auto
tgit
=
chit
->
target
.
begin
();
tgit
!=
chit
->
target
.
end
();
++
tgi
t
)
(
*
tgit
)
->
is_showchaintarget
=
enable
;
for
(
auto
&
card
:
pcard
->
equipped
)
card
->
is_showequip
=
enable
;
for
(
auto
&
card
:
pcard
->
cardTarge
t
)
card
->
is_showtarget
=
enable
;
for
(
auto
&
card
:
pcard
->
ownerTarge
t
)
card
->
is_showtarget
=
enable
;
for
(
auto
&
ch
:
chains
)
{
if
(
pcard
==
ch
.
chain_card
)
{
for
(
auto
&
tg
:
ch
.
targe
t
)
tg
->
is_showchaintarget
=
enable
;
}
if
(
chit
->
target
.
find
(
pcard
)
!=
chit
->
target
.
end
())
ch
it
->
chain_card
->
is_showchaintarget
=
enable
;
if
(
ch
.
target
.
find
(
pcard
)
!=
ch
.
target
.
end
())
ch
.
chain_card
->
is_showchaintarget
=
enable
;
}
}
void
ClientField
::
ShowCardInfoInList
(
ClientCard
*
pcard
,
irr
::
gui
::
IGUIElement
*
element
,
irr
::
gui
::
IGUIElement
*
parent
)
{
...
...
@@ -2428,26 +2428,28 @@ void ClientField::ShowCardInfoInList(ClientCard* pcard, irr::gui::IGUIElement* e
if
(
pcard
->
code
)
{
str
.
append
(
dataManager
.
GetName
(
pcard
->
code
));
}
if
(
pcard
->
overlayTarget
)
{
myswprintf
(
formatBuffer
,
dataManager
.
GetSysString
(
225
),
dataManager
.
GetName
(
pcard
->
overlayTarget
->
code
),
pcard
->
overlayTarget
->
sequence
+
1
);
str
.
append
(
L"
\n
"
).
append
(
formatBuffer
);
}
if
((
pcard
->
status
&
STATUS_PROC_COMPLETE
)
&&
(
pcard
->
type
&
(
TYPE_RITUAL
|
TYPE_FUSION
|
TYPE_SYNCHRO
|
TYPE_XYZ
|
TYPE_LINK
|
TYPE_SPSUMMON
)))
str
.
append
(
L"
\n
"
).
append
(
dataManager
.
GetSysString
(
224
));
for
(
auto
iter
=
pcard
->
desc_hints
.
begin
();
iter
!=
pcard
->
desc_hints
.
end
();
++
iter
)
{
myswprintf
(
formatBuffer
,
L"
\n
*%ls"
,
dataManager
.
GetDesc
(
iter
->
first
));
str
.
append
(
formatBuffer
);
}
for
(
size_t
i
=
0
;
i
<
chains
.
size
();
++
i
)
{
auto
chit
=
chains
[
i
];
if
(
pcard
==
chit
.
chain_card
)
{
myswprintf
(
formatBuffer
,
dataManager
.
GetSysString
(
216
),
i
+
1
);
if
(
pcard
->
location
!=
LOCATION_DECK
)
{
if
(
pcard
->
overlayTarget
)
{
myswprintf
(
formatBuffer
,
dataManager
.
GetSysString
(
225
),
dataManager
.
GetName
(
pcard
->
overlayTarget
->
code
),
pcard
->
overlayTarget
->
sequence
+
1
);
str
.
append
(
L"
\n
"
).
append
(
formatBuffer
);
}
if
(
chit
.
target
.
find
(
pcard
)
!=
chit
.
target
.
end
())
{
myswprintf
(
formatBuffer
,
dataManager
.
GetSysString
(
217
),
i
+
1
,
dataManager
.
GetName
(
chit
.
chain_card
->
code
));
str
.
append
(
L"
\n
"
).
append
(
formatBuffer
);
if
((
pcard
->
status
&
STATUS_PROC_COMPLETE
)
&&
(
pcard
->
type
&
(
TYPE_RITUAL
|
TYPE_FUSION
|
TYPE_SYNCHRO
|
TYPE_XYZ
|
TYPE_LINK
|
TYPE_SPSUMMON
)))
str
.
append
(
L"
\n
"
).
append
(
dataManager
.
GetSysString
(
224
));
for
(
auto
iter
=
pcard
->
desc_hints
.
begin
();
iter
!=
pcard
->
desc_hints
.
end
();
++
iter
)
{
myswprintf
(
formatBuffer
,
L"
\n
*%ls"
,
dataManager
.
GetDesc
(
iter
->
first
));
str
.
append
(
formatBuffer
);
}
for
(
size_t
i
=
0
;
i
<
chains
.
size
();
++
i
)
{
const
auto
&
chit
=
chains
[
i
];
if
(
pcard
==
chit
.
chain_card
)
{
myswprintf
(
formatBuffer
,
dataManager
.
GetSysString
(
216
),
i
+
1
);
str
.
append
(
L"
\n
"
).
append
(
formatBuffer
);
}
if
(
chit
.
target
.
find
(
pcard
)
!=
chit
.
target
.
end
())
{
myswprintf
(
formatBuffer
,
dataManager
.
GetSysString
(
217
),
i
+
1
,
dataManager
.
GetName
(
chit
.
chain_card
->
code
));
str
.
append
(
L"
\n
"
).
append
(
formatBuffer
);
}
}
}
if
(
str
.
length
()
>
0
)
{
...
...
gframe/network.h
View file @
134528e1
...
...
@@ -327,15 +327,15 @@ public:
#define ERRMSG_SIDEERROR 0x3
#define ERRMSG_VERERROR 0x4
#define DECKERROR_LFLIST 0x1
#define DECKERROR_OCGONLY 0x2
#define DECKERROR_TCGONLY 0x3
#define DECKERROR_UNKNOWNCARD 0x4
#define DECKERROR_CARDCOUNT 0x5
#define DECKERROR_MAINCOUNT 0x6
#define DECKERROR_EXTRACOUNT 0x7
#define DECKERROR_SIDECOUNT 0x8
#define DECKERROR_NOTAVAIL 0x9
#define DECKERROR_LFLIST 0x1
U
#define DECKERROR_OCGONLY 0x2
U
#define DECKERROR_TCGONLY 0x3
U
#define DECKERROR_UNKNOWNCARD 0x4
U
#define DECKERROR_CARDCOUNT 0x5
U
#define DECKERROR_MAINCOUNT 0x6
U
#define DECKERROR_EXTRACOUNT 0x7
U
#define DECKERROR_SIDECOUNT 0x8
U
#define DECKERROR_NOTAVAIL 0x9
U
#define MODE_SINGLE 0x0
#define MODE_MATCH 0x1
...
...
gframe/single_duel.cpp
View file @
134528e1
...
...
@@ -353,7 +353,7 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
unsigned
int
deckerror
=
0
;
if
(
!
host_info
.
no_check_deck
)
{
if
(
deck_error
[
dp
->
type
])
{
deckerror
=
(
DECKERROR_UNKNOWNCARD
<<
28
)
+
deck_error
[
dp
->
type
];
deckerror
=
(
DECKERROR_UNKNOWNCARD
<<
28
)
|
deck_error
[
dp
->
type
];
}
else
{
deckerror
=
deckManager
.
CheckDeck
(
pdeck
[
dp
->
type
],
host_info
.
lflist
,
host_info
.
rule
);
}
...
...
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