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
0a060025
Commit
0a060025
authored
Feb 03, 2025
by
wind2009
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'upstream/master' into server
parents
8bd12238
ad9a7069
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
128 additions
and
137 deletions
+128
-137
gframe/client_card.cpp
gframe/client_card.cpp
+8
-8
gframe/client_card.h
gframe/client_card.h
+1
-1
gframe/client_field.cpp
gframe/client_field.cpp
+33
-53
gframe/data_manager.cpp
gframe/data_manager.cpp
+15
-13
gframe/data_manager.h
gframe/data_manager.h
+4
-3
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
+11
-11
gframe/netserver.cpp
gframe/netserver.cpp
+3
-3
gframe/network.h
gframe/network.h
+9
-9
gframe/single_duel.cpp
gframe/single_duel.cpp
+3
-1
gframe/tag_duel.cpp
gframe/tag_duel.cpp
+2
-0
No files found.
gframe/client_card.cpp
View file @
0a060025
...
@@ -31,8 +31,8 @@ ClientCard::~ClientCard() {
...
@@ -31,8 +31,8 @@ ClientCard::~ClientCard() {
}
}
overlayed
.
clear
();
overlayed
.
clear
();
}
}
void
ClientCard
::
SetCode
(
int
x
)
{
void
ClientCard
::
SetCode
(
unsigned
int
x
)
{
if
((
location
==
LOCATION_HAND
)
&&
(
code
!=
(
unsigned
int
)
x
))
{
if
((
location
==
LOCATION_HAND
)
&&
(
code
!=
x
))
{
code
=
x
;
code
=
x
;
mainGame
->
dField
.
MoveCard
(
this
,
5
);
mainGame
->
dField
.
MoveCard
(
this
,
5
);
}
else
}
else
...
@@ -175,13 +175,13 @@ void ClientCard::UpdateInfo(unsigned char* buf) {
...
@@ -175,13 +175,13 @@ void ClientCard::UpdateInfo(unsigned char* buf) {
}
}
}
}
void
ClientCard
::
ClearTarget
()
{
void
ClientCard
::
ClearTarget
()
{
for
(
auto
cit
=
cardTarget
.
begin
();
cit
!=
cardTarget
.
end
();
++
ci
t
)
{
for
(
auto
&
pcard
:
cardTarge
t
)
{
(
*
cit
)
->
is_showtarget
=
false
;
pcard
->
is_showtarget
=
false
;
(
*
cit
)
->
ownerTarget
.
erase
(
this
);
pcard
->
ownerTarget
.
erase
(
this
);
}
}
for
(
auto
cit
=
ownerTarget
.
begin
();
cit
!=
ownerTarget
.
end
();
++
ci
t
)
{
for
(
auto
&
pcard
:
ownerTarge
t
)
{
(
*
cit
)
->
is_showtarget
=
false
;
pcard
->
is_showtarget
=
false
;
(
*
cit
)
->
cardTarget
.
erase
(
this
);
pcard
->
cardTarget
.
erase
(
this
);
}
}
cardTarget
.
clear
();
cardTarget
.
clear
();
ownerTarget
.
clear
();
ownerTarget
.
clear
();
...
...
gframe/client_card.h
View file @
0a060025
...
@@ -75,7 +75,7 @@ public:
...
@@ -75,7 +75,7 @@ public:
ClientCard
()
=
default
;
ClientCard
()
=
default
;
~
ClientCard
();
~
ClientCard
();
void
SetCode
(
int
x
);
void
SetCode
(
unsigned
int
x
);
void
UpdateInfo
(
unsigned
char
*
buf
);
void
UpdateInfo
(
unsigned
char
*
buf
);
void
ClearTarget
();
void
ClearTarget
();
void
ClearData
();
void
ClearData
();
...
...
gframe/client_field.cpp
View file @
0a060025
...
@@ -196,12 +196,9 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
...
@@ -196,12 +196,9 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
deck
[
controler
].
push_back
(
pcard
);
deck
[
controler
].
push_back
(
pcard
);
pcard
->
sequence
=
(
unsigned
char
)(
deck
[
controler
].
size
()
-
1
);
pcard
->
sequence
=
(
unsigned
char
)(
deck
[
controler
].
size
()
-
1
);
}
else
{
}
else
{
deck
[
controler
].
push_back
(
0
);
for
(
auto
&
pcard
:
deck
[
controler
])
for
(
int
i
=
deck
[
controler
].
size
()
-
1
;
i
>
0
;
--
i
)
{
pcard
->
sequence
++
;
deck
[
controler
][
i
]
=
deck
[
controler
][
i
-
1
];
deck
[
controler
].
insert
(
deck
[
controler
].
begin
(),
pcard
);
deck
[
controler
][
i
]
->
sequence
++
;
}
deck
[
controler
][
0
]
=
pcard
;
pcard
->
sequence
=
0
;
pcard
->
sequence
=
0
;
}
}
pcard
->
is_reversed
=
false
;
pcard
->
is_reversed
=
false
;
...
@@ -235,15 +232,13 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
...
@@ -235,15 +232,13 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
extra
[
controler
].
push_back
(
pcard
);
extra
[
controler
].
push_back
(
pcard
);
pcard
->
sequence
=
(
unsigned
char
)(
extra
[
controler
].
size
()
-
1
);
pcard
->
sequence
=
(
unsigned
char
)(
extra
[
controler
].
size
()
-
1
);
}
else
{
}
else
{
extra
[
controler
].
push_back
(
0
);
int
p
=
extra
[
controler
].
size
()
-
extra_p_count
[
controler
]
-
1
;
int
p
=
extra
[
controler
].
size
()
-
extra_p_count
[
controler
]
-
1
;
for
(
int
i
=
extra
[
controler
].
size
()
-
1
;
i
>
p
;
--
i
)
{
for
(
int
i
=
extra
[
controler
].
size
()
-
1
;
i
>
p
;
--
i
)
{
extra
[
controler
][
i
]
=
extra
[
controler
][
i
-
1
];
extra
[
controler
][
i
]
->
sequence
++
;
extra
[
controler
][
i
]
->
sequence
++
;
extra
[
controler
][
i
]
->
curPos
+=
irr
::
core
::
vector3df
(
0
,
0
,
0.01
f
);
extra
[
controler
][
i
]
->
curPos
+=
irr
::
core
::
vector3df
(
0
,
0
,
0.01
f
);
extra
[
controler
][
i
]
->
mTransform
.
setTranslation
(
extra
[
controler
][
i
]
->
curPos
);
extra
[
controler
][
i
]
->
mTransform
.
setTranslation
(
extra
[
controler
][
i
]
->
curPos
);
}
}
extra
[
controler
]
[
p
]
=
pcard
;
extra
[
controler
]
.
insert
(
extra
[
controler
].
begin
()
+
p
,
pcard
)
;
pcard
->
sequence
=
p
;
pcard
->
sequence
=
p
;
}
}
if
(
pcard
->
position
&
POS_FACEUP
)
if
(
pcard
->
position
&
POS_FACEUP
)
...
@@ -253,69 +248,54 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
...
@@ -253,69 +248,54 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
}
}
}
}
ClientCard
*
ClientField
::
RemoveCard
(
int
controler
,
int
location
,
int
sequence
)
{
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
)
{
switch
(
location
)
{
case
LOCATION_DECK
:
{
case
LOCATION_DECK
:
{
pcard
=
deck
[
controler
][
sequence
];
pcard
=
deck
[
controler
][
sequence
];
for
(
size_t
i
=
sequence
;
i
<
deck
[
controler
].
size
()
-
1
;
++
i
)
{
erase_card
(
deck
[
controler
],
sequence
);
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
);
break
;
break
;
}
}
case
LOCATION_HAND
:
{
case
LOCATION_HAND
:
{
pcard
=
hand
[
controler
][
sequence
];
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
]
=
hand
[
controler
][
i
+
1
];
hand
[
controler
][
i
]
->
sequence
--
;
hand
[
controler
][
i
]
->
sequence
--
;
}
}
hand
[
controler
].
erase
(
hand
[
controler
].
end
()
-
1
);
hand
[
controler
].
pop_back
(
);
break
;
break
;
}
}
case
LOCATION_MZONE
:
{
case
LOCATION_MZONE
:
{
pcard
=
mzone
[
controler
][
sequence
];
pcard
=
mzone
[
controler
][
sequence
];
mzone
[
controler
][
sequence
]
=
0
;
mzone
[
controler
][
sequence
]
=
nullptr
;
break
;
break
;
}
}
case
LOCATION_SZONE
:
{
case
LOCATION_SZONE
:
{
pcard
=
szone
[
controler
][
sequence
];
pcard
=
szone
[
controler
][
sequence
];
szone
[
controler
][
sequence
]
=
0
;
szone
[
controler
][
sequence
]
=
nullptr
;
break
;
break
;
}
}
case
LOCATION_GRAVE
:
{
case
LOCATION_GRAVE
:
{
pcard
=
grave
[
controler
][
sequence
];
pcard
=
grave
[
controler
][
sequence
];
for
(
size_t
i
=
sequence
;
i
<
grave
[
controler
].
size
()
-
1
;
++
i
)
{
erase_card
(
grave
[
controler
],
sequence
);
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
);
break
;
break
;
}
}
case
LOCATION_REMOVED
:
{
case
LOCATION_REMOVED
:
{
pcard
=
remove
[
controler
][
sequence
];
pcard
=
remove
[
controler
][
sequence
];
for
(
size_t
i
=
sequence
;
i
<
remove
[
controler
].
size
()
-
1
;
++
i
)
{
erase_card
(
remove
[
controler
],
sequence
);
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
);
break
;
break
;
}
}
case
LOCATION_EXTRA
:
{
case
LOCATION_EXTRA
:
{
pcard
=
extra
[
controler
][
sequence
];
pcard
=
extra
[
controler
][
sequence
];
for
(
size_t
i
=
sequence
;
i
<
extra
[
controler
].
size
()
-
1
;
++
i
)
{
erase_card
(
extra
[
controler
],
sequence
);
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
);
if
(
pcard
->
position
&
POS_FACEUP
)
if
(
pcard
->
position
&
POS_FACEUP
)
extra_p_count
[
controler
]
--
;
extra_p_count
[
controler
]
--
;
break
;
break
;
...
@@ -425,8 +405,8 @@ void ClientField::ClearChainSelect() {
...
@@ -425,8 +405,8 @@ void ClientField::ClearChainSelect() {
void
ClientField
::
ShowSelectCard
(
bool
buttonok
,
bool
chain
)
{
void
ClientField
::
ShowSelectCard
(
bool
buttonok
,
bool
chain
)
{
if
(
cant_check_grave
)
{
if
(
cant_check_grave
)
{
bool
has_card_in_grave
=
false
;
bool
has_card_in_grave
=
false
;
for
(
size_t
i
=
0
;
i
<
selectable_cards
.
size
();
++
i
)
{
for
(
auto
&
pcard
:
selectable_cards
)
{
if
(
selectable_cards
[
i
]
->
location
==
LOCATION_GRAVE
)
{
if
(
pcard
->
location
==
LOCATION_GRAVE
)
{
has_card_in_grave
=
true
;
has_card_in_grave
=
true
;
break
;
break
;
}
}
...
@@ -436,7 +416,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
...
@@ -436,7 +416,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
}
}
}
}
int
startpos
;
int
startpos
;
size_
t
ct
;
in
t
ct
;
if
(
selectable_cards
.
size
()
<=
5
)
{
if
(
selectable_cards
.
size
()
<=
5
)
{
startpos
=
30
+
125
*
(
5
-
selectable_cards
.
size
())
/
2
;
startpos
=
30
+
125
*
(
5
-
selectable_cards
.
size
())
/
2
;
ct
=
selectable_cards
.
size
();
ct
=
selectable_cards
.
size
();
...
@@ -444,7 +424,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
...
@@ -444,7 +424,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
startpos
=
30
;
startpos
=
30
;
ct
=
5
;
ct
=
5
;
}
}
for
(
size_
t
i
=
0
;
i
<
ct
;
++
i
)
{
for
(
in
t
i
=
0
;
i
<
ct
;
++
i
)
{
mainGame
->
stCardPos
[
i
]
->
enableOverrideColor
(
false
);
mainGame
->
stCardPos
[
i
]
->
enableOverrideColor
(
false
);
// image
// image
if
(
selectable_cards
[
i
]
->
code
)
if
(
selectable_cards
[
i
]
->
code
)
...
@@ -528,7 +508,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
...
@@ -528,7 +508,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
}
}
void
ClientField
::
ShowChainCard
()
{
void
ClientField
::
ShowChainCard
()
{
int
startpos
;
int
startpos
;
size_
t
ct
;
in
t
ct
;
if
(
selectable_cards
.
size
()
<=
5
)
{
if
(
selectable_cards
.
size
()
<=
5
)
{
startpos
=
30
+
125
*
(
5
-
selectable_cards
.
size
())
/
2
;
startpos
=
30
+
125
*
(
5
-
selectable_cards
.
size
())
/
2
;
ct
=
selectable_cards
.
size
();
ct
=
selectable_cards
.
size
();
...
@@ -536,7 +516,7 @@ void ClientField::ShowChainCard() {
...
@@ -536,7 +516,7 @@ void ClientField::ShowChainCard() {
startpos
=
30
;
startpos
=
30
;
ct
=
5
;
ct
=
5
;
}
}
for
(
size_
t
i
=
0
;
i
<
ct
;
++
i
)
{
for
(
in
t
i
=
0
;
i
<
ct
;
++
i
)
{
if
(
selectable_cards
[
i
]
->
code
)
if
(
selectable_cards
[
i
]
->
code
)
mainGame
->
imageLoading
.
insert
(
std
::
make_pair
(
mainGame
->
btnCardSelect
[
i
],
selectable_cards
[
i
]
->
code
));
mainGame
->
imageLoading
.
insert
(
std
::
make_pair
(
mainGame
->
btnCardSelect
[
i
],
selectable_cards
[
i
]
->
code
));
else
else
...
@@ -582,7 +562,7 @@ void ClientField::ShowChainCard() {
...
@@ -582,7 +562,7 @@ void ClientField::ShowChainCard() {
}
}
void
ClientField
::
ShowLocationCard
()
{
void
ClientField
::
ShowLocationCard
()
{
int
startpos
;
int
startpos
;
size_
t
ct
;
in
t
ct
;
if
(
display_cards
.
size
()
<=
5
)
{
if
(
display_cards
.
size
()
<=
5
)
{
startpos
=
30
+
125
*
(
5
-
display_cards
.
size
())
/
2
;
startpos
=
30
+
125
*
(
5
-
display_cards
.
size
())
/
2
;
ct
=
display_cards
.
size
();
ct
=
display_cards
.
size
();
...
@@ -590,7 +570,7 @@ void ClientField::ShowLocationCard() {
...
@@ -590,7 +570,7 @@ void ClientField::ShowLocationCard() {
startpos
=
30
;
startpos
=
30
;
ct
=
5
;
ct
=
5
;
}
}
for
(
size_
t
i
=
0
;
i
<
ct
;
++
i
)
{
for
(
in
t
i
=
0
;
i
<
ct
;
++
i
)
{
mainGame
->
stDisplayPos
[
i
]
->
enableOverrideColor
(
false
);
mainGame
->
stDisplayPos
[
i
]
->
enableOverrideColor
(
false
);
if
(
display_cards
[
i
]
->
code
)
if
(
display_cards
[
i
]
->
code
)
mainGame
->
imageLoading
.
insert
(
std
::
make_pair
(
mainGame
->
btnCardDisplay
[
i
],
display_cards
[
i
]
->
code
));
mainGame
->
imageLoading
.
insert
(
std
::
make_pair
(
mainGame
->
btnCardDisplay
[
i
],
display_cards
[
i
]
->
code
));
...
@@ -1182,8 +1162,8 @@ bool ClientField::CheckSelectSum() {
...
@@ -1182,8 +1162,8 @@ bool ClientField::CheckSelectSum() {
}
}
select_curval_l
=
0
;
select_curval_l
=
0
;
select_curval_h
=
0
;
select_curval_h
=
0
;
for
(
size_t
i
=
0
;
i
<
selected_cards
.
size
();
++
i
)
{
for
(
int
i
=
0
;
i
<
(
int
)
selected_cards
.
size
();
++
i
)
{
if
(
(
int
)
i
<
must_select_count
)
if
(
i
<
must_select_count
)
selected_cards
[
i
]
->
is_selectable
=
false
;
selected_cards
[
i
]
->
is_selectable
=
false
;
else
else
selected_cards
[
i
]
->
is_selectable
=
true
;
selected_cards
[
i
]
->
is_selectable
=
true
;
...
@@ -1282,7 +1262,7 @@ bool ClientField::CheckSelectTribute() {
...
@@ -1282,7 +1262,7 @@ bool ClientField::CheckSelectTribute() {
(
*
sit
)
->
is_selected
=
false
;
(
*
sit
)
->
is_selected
=
false
;
selable
.
insert
(
*
sit
);
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_selectable
=
true
;
selected_cards
[
i
]
->
is_selected
=
true
;
selected_cards
[
i
]
->
is_selected
=
true
;
selable
.
erase
(
selected_cards
[
i
]);
selable
.
erase
(
selected_cards
[
i
]);
...
...
gframe/data_manager.cpp
View file @
0a060025
...
@@ -389,30 +389,32 @@ uint32_t DataManager::CardReader(uint32_t code, card_data* pData) {
...
@@ -389,30 +389,32 @@ uint32_t DataManager::CardReader(uint32_t code, card_data* pData) {
pData
->
clear
();
pData
->
clear
();
return
0
;
return
0
;
}
}
unsigned
char
*
DataManager
::
ScriptReaderEx
(
const
char
*
script_
name
,
int
*
slen
)
{
unsigned
char
*
DataManager
::
ScriptReaderEx
(
const
char
*
script_
path
,
int
*
slen
)
{
// default script name: ./script/c%d.lua
// default script name: ./script/c%d.lua
if
(
std
::
strncmp
(
script_name
,
"./script"
,
8
)
!=
0
)
if
(
std
::
strncmp
(
script_path
,
"./script"
,
8
)
!=
0
)
// not a card script file
return
DefaultScriptReader
(
script_name
,
slen
);
return
ReadScriptFromFile
(
script_path
,
slen
);
const
char
*
script_name
=
script_path
+
2
;
char
expansions_path
[
1024
]{};
char
expansions_path
[
1024
]{};
std
::
snprintf
(
expansions_path
,
sizeof
expansions_path
,
"./expansions/%s"
,
script_name
+
2
);
std
::
snprintf
(
expansions_path
,
sizeof
expansions_path
,
"./expansions/%s"
,
script_name
);
if
(
mainGame
->
gameConf
.
prefer_expansion_script
)
{
if
(
mainGame
->
gameConf
.
prefer_expansion_script
)
{
// debug script with raw file in expansions
if
(
DefaultScriptReader
(
expansions_path
,
slen
))
if
(
ReadScriptFromFile
(
expansions_path
,
slen
))
return
scriptBuffer
;
return
scriptBuffer
;
else
if
(
ScriptReader
(
script_name
+
2
,
slen
))
if
(
ReadScriptFromIrrFS
(
script_name
,
slen
))
return
scriptBuffer
;
return
scriptBuffer
;
else
if
(
DefaultScriptReader
(
script_name
,
slen
))
if
(
ReadScriptFromFile
(
script_path
,
slen
))
return
scriptBuffer
;
return
scriptBuffer
;
}
else
{
}
else
{
if
(
DefaultScriptReader
(
script_name
,
slen
))
if
(
ReadScriptFromIrrFS
(
script_name
,
slen
))
return
scriptBuffer
;
return
scriptBuffer
;
else
if
(
DefaultScriptReader
(
expansions
_path
,
slen
))
if
(
ReadScriptFromFile
(
script
_path
,
slen
))
return
scriptBuffer
;
return
scriptBuffer
;
else
if
(
ScriptReader
(
script_name
+
2
,
slen
))
if
(
ReadScriptFromFile
(
expansions_path
,
slen
))
return
scriptBuffer
;
return
scriptBuffer
;
}
}
return
nullptr
;
return
nullptr
;
}
}
unsigned
char
*
DataManager
::
ScriptReader
(
const
char
*
script_name
,
int
*
slen
)
{
unsigned
char
*
DataManager
::
ReadScriptFromIrrFS
(
const
char
*
script_name
,
int
*
slen
)
{
#ifdef _WIN32
#ifdef _WIN32
wchar_t
fname
[
256
]{};
wchar_t
fname
[
256
]{};
BufferIO
::
DecodeUTF8
(
script_name
,
fname
);
BufferIO
::
DecodeUTF8
(
script_name
,
fname
);
...
@@ -429,7 +431,7 @@ unsigned char* DataManager::ScriptReader(const char* script_name, int* slen) {
...
@@ -429,7 +431,7 @@ unsigned char* DataManager::ScriptReader(const char* script_name, int* slen) {
*
slen
=
size
;
*
slen
=
size
;
return
scriptBuffer
;
return
scriptBuffer
;
}
}
unsigned
char
*
DataManager
::
DefaultScriptReader
(
const
char
*
script_name
,
int
*
slen
)
{
unsigned
char
*
DataManager
::
ReadScriptFromFile
(
const
char
*
script_name
,
int
*
slen
)
{
wchar_t
fname
[
256
]{};
wchar_t
fname
[
256
]{};
BufferIO
::
DecodeUTF8
(
script_name
,
fname
);
BufferIO
::
DecodeUTF8
(
script_name
,
fname
);
FILE
*
fp
=
myfopen
(
fname
,
"rb"
);
FILE
*
fp
=
myfopen
(
fname
,
"rb"
);
...
...
gframe/data_manager.h
View file @
0a060025
...
@@ -17,6 +17,7 @@ namespace irr {
...
@@ -17,6 +17,7 @@ namespace irr {
namespace
ygo
{
namespace
ygo
{
constexpr
int
MAX_STRING_ID
=
0x7ff
;
constexpr
int
MAX_STRING_ID
=
0x7ff
;
constexpr
unsigned
int
MIN_CARD_ID
=
(
unsigned
int
)(
MAX_STRING_ID
+
1
)
>>
4
;
constexpr
unsigned
int
MIN_CARD_ID
=
(
unsigned
int
)(
MAX_STRING_ID
+
1
)
>>
4
;
constexpr
unsigned
int
MAX_CARD_ID
=
0x0fffffffU
;
using
CardData
=
card_data
;
using
CardData
=
card_data
;
struct
CardDataC
:
card_data
{
struct
CardDataC
:
card_data
{
...
@@ -82,12 +83,12 @@ public:
...
@@ -82,12 +83,12 @@ public:
static
unsigned
char
scriptBuffer
[
0x100000
];
static
unsigned
char
scriptBuffer
[
0x100000
];
static
const
wchar_t
*
unknown_string
;
static
const
wchar_t
*
unknown_string
;
static
uint32_t
CardReader
(
uint32_t
,
card_data
*
);
static
uint32_t
CardReader
(
uint32_t
,
card_data
*
);
static
unsigned
char
*
ScriptReaderEx
(
const
char
*
script_
name
,
int
*
slen
);
static
unsigned
char
*
ScriptReaderEx
(
const
char
*
script_
path
,
int
*
slen
);
//read by IFileSystem
//read by IFileSystem
static
unsigned
char
*
ScriptReader
(
const
char
*
script_name
,
int
*
slen
);
static
unsigned
char
*
ReadScriptFromIrrFS
(
const
char
*
script_name
,
int
*
slen
);
//read by fread
//read by fread
static
unsigned
char
*
DefaultScriptReader
(
const
char
*
script_name
,
int
*
slen
);
static
unsigned
char
*
ReadScriptFromFile
(
const
char
*
script_name
,
int
*
slen
);
static
irr
::
io
::
IFileSystem
*
FileSystem
;
static
irr
::
io
::
IFileSystem
*
FileSystem
;
...
...
gframe/deck_con.cpp
View file @
0a060025
...
@@ -177,7 +177,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
...
@@ -177,7 +177,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if
(
*
dname
==
0
)
if
(
*
dname
==
0
)
break
;
break
;
int
sel
=
-
1
;
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
)))
{
if
(
!
std
::
wcscmp
(
dname
,
mainGame
->
cbDBDecks
->
getItem
(
i
)))
{
sel
=
i
;
sel
=
i
;
break
;
break
;
...
...
gframe/deck_manager.cpp
View file @
0a060025
...
@@ -35,7 +35,7 @@ void DeckManager::LoadLFListSingle(const char* path) {
...
@@ -35,7 +35,7 @@ void DeckManager::LoadLFListSingle(const char* path) {
int
count
=
-
1
;
int
count
=
-
1
;
if
(
sscanf
(
linebuf
,
"%d %d"
,
&
code
,
&
count
)
!=
2
)
if
(
sscanf
(
linebuf
,
"%d %d"
,
&
code
,
&
count
)
!=
2
)
continue
;
continue
;
if
(
code
<=
0
||
code
>
0xfffffff
)
if
(
code
<=
0
||
code
>
MAX_CARD_ID
)
continue
;
continue
;
if
(
count
<
0
||
count
>
2
)
if
(
count
<
0
||
count
>
2
)
continue
;
continue
;
...
@@ -72,71 +72,75 @@ const std::unordered_map<int, int>* DeckManager::GetLFListContent(int lfhash) {
...
@@ -72,71 +72,75 @@ const std::unordered_map<int, int>* DeckManager::GetLFListContent(int lfhash) {
return
&
lit
->
content
;
return
&
lit
->
content
;
return
nullptr
;
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
)
if
((
ot
&
avail
)
==
avail
)
return
0
;
return
0
;
if
((
ot
&
AVAIL_OCG
)
&&
!
(
avail
=
=
AVAIL_OCG
))
if
((
ot
&
AVAIL_OCG
)
&&
(
avail
!
=
AVAIL_OCG
))
return
DECKERROR_OCGONLY
;
return
DECKERROR_OCGONLY
;
if
((
ot
&
AVAIL_TCG
)
&&
!
(
avail
=
=
AVAIL_TCG
))
if
((
ot
&
AVAIL_TCG
)
&&
(
avail
!
=
AVAIL_TCG
))
return
DECKERROR_TCGONLY
;
return
DECKERROR_TCGONLY
;
return
DECKERROR_NOTAVAIL
;
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
;
std
::
unordered_map
<
int
,
int
>
ccount
;
auto
list
=
GetLFListContent
(
lfhash
);
// rule
if
(
!
list
)
return
0
;
int
dc
=
0
;
if
(
deck
.
main
.
size
()
<
DECK_MIN_SIZE
||
deck
.
main
.
size
()
>
DECK_MAX_SIZE
)
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
)
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
)
if
(
deck
.
side
.
size
()
>
SIDE_MAX_SIZE
)
return
((
unsigned
)
DECKERROR_SIDECOUNT
<<
28
)
+
deck
.
side
.
size
();
return
(
DECKERROR_SIDECOUNT
<<
28
)
|
(
unsigned
)
deck
.
side
.
size
();
if
(
rule
<
0
||
rule
>=
6
)
auto
list
=
GetLFListContent
(
lfhash
);
if
(
!
list
)
return
0
;
return
0
;
const
unsigned
int
rule_map
[
6
]
=
{
AVAIL_OCG
,
AVAIL_TCG
,
AVAIL_SC
,
AVAIL_CUSTOM
,
AVAIL_OCGTCG
,
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
)
{
for
(
auto
&
cit
:
deck
.
main
)
{
int
gameruleDeckError
=
checkAvail
(
cit
->
second
.
ot
,
avail
);
auto
gameruleDeckError
=
checkAvail
(
cit
->
second
.
ot
,
avail
);
if
(
gameruleDeckError
)
if
(
gameruleDeckError
)
return
(
gameruleDeckError
<<
28
)
+
cit
->
first
;
return
(
gameruleDeckError
<<
28
)
|
cit
->
first
;
if
(
cit
->
second
.
type
&
(
TYPES_EXTRA_DECK
|
TYPE_TOKEN
))
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
;
int
code
=
cit
->
second
.
alias
?
cit
->
second
.
alias
:
cit
->
first
;
ccount
[
code
]
++
;
ccount
[
code
]
++
;
dc
=
ccount
[
code
];
int
dc
=
ccount
[
code
];
if
(
dc
>
3
)
if
(
dc
>
3
)
return
(
DECKERROR_CARDCOUNT
<<
28
)
+
cit
->
first
;
return
(
DECKERROR_CARDCOUNT
<<
28
)
|
cit
->
first
;
auto
it
=
list
->
find
(
code
);
auto
it
=
list
->
find
(
code
);
if
(
it
!=
list
->
end
()
&&
dc
>
it
->
second
)
if
(
it
!=
list
->
end
()
&&
dc
>
it
->
second
)
return
(
DECKERROR_LFLIST
<<
28
)
+
cit
->
first
;
return
(
DECKERROR_LFLIST
<<
28
)
|
cit
->
first
;
}
}
for
(
auto
&
cit
:
deck
.
extra
)
{
for
(
auto
&
cit
:
deck
.
extra
)
{
int
gameruleDeckError
=
checkAvail
(
cit
->
second
.
ot
,
avail
);
auto
gameruleDeckError
=
checkAvail
(
cit
->
second
.
ot
,
avail
);
if
(
gameruleDeckError
)
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
;
int
code
=
cit
->
second
.
alias
?
cit
->
second
.
alias
:
cit
->
first
;
ccount
[
code
]
++
;
ccount
[
code
]
++
;
dc
=
ccount
[
code
];
int
dc
=
ccount
[
code
];
if
(
dc
>
3
)
if
(
dc
>
3
)
return
(
DECKERROR_CARDCOUNT
<<
28
)
+
cit
->
first
;
return
(
DECKERROR_CARDCOUNT
<<
28
)
|
cit
->
first
;
auto
it
=
list
->
find
(
code
);
auto
it
=
list
->
find
(
code
);
if
(
it
!=
list
->
end
()
&&
dc
>
it
->
second
)
if
(
it
!=
list
->
end
()
&&
dc
>
it
->
second
)
return
(
DECKERROR_LFLIST
<<
28
)
+
cit
->
first
;
return
(
DECKERROR_LFLIST
<<
28
)
|
cit
->
first
;
}
}
for
(
auto
&
cit
:
deck
.
side
)
{
for
(
auto
&
cit
:
deck
.
side
)
{
int
gameruleDeckError
=
checkAvail
(
cit
->
second
.
ot
,
avail
);
auto
gameruleDeckError
=
checkAvail
(
cit
->
second
.
ot
,
avail
);
if
(
gameruleDeckError
)
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
;
int
code
=
cit
->
second
.
alias
?
cit
->
second
.
alias
:
cit
->
first
;
ccount
[
code
]
++
;
ccount
[
code
]
++
;
dc
=
ccount
[
code
];
int
dc
=
ccount
[
code
];
if
(
dc
>
3
)
if
(
dc
>
3
)
return
(
DECKERROR_CARDCOUNT
<<
28
)
+
cit
->
first
;
return
(
DECKERROR_CARDCOUNT
<<
28
)
|
cit
->
first
;
auto
it
=
list
->
find
(
code
);
auto
it
=
list
->
find
(
code
);
if
(
it
!=
list
->
end
()
&&
dc
>
it
->
second
)
if
(
it
!=
list
->
end
()
&&
dc
>
it
->
second
)
return
(
DECKERROR_LFLIST
<<
28
)
+
cit
->
first
;
return
(
DECKERROR_LFLIST
<<
28
)
|
cit
->
first
;
}
}
return
0
;
return
0
;
}
}
...
@@ -160,11 +164,11 @@ int DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, bool is_p
...
@@ -160,11 +164,11 @@ int DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, bool is_p
continue
;
continue
;
}
}
if
(
cd
.
type
&
TYPES_EXTRA_DECK
)
{
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
));
deck
.
extra
.
push_back
(
dataManager
.
GetCodePointer
(
code
));
}
}
else
{
else
{
if
(
(
int
)
deck
.
main
.
size
()
<
DECK_MAX_SIZE
)
if
(
deck
.
main
.
size
()
<
DECK_MAX_SIZE
)
deck
.
main
.
push_back
(
dataManager
.
GetCodePointer
(
code
));
deck
.
main
.
push_back
(
dataManager
.
GetCodePointer
(
code
));
}
}
}
}
...
...
gframe/deck_manager.h
View file @
0a060025
...
@@ -47,7 +47,7 @@ public:
...
@@ -47,7 +47,7 @@ public:
void
LoadLFList
();
void
LoadLFList
();
const
wchar_t
*
GetLFListName
(
int
lfhash
);
const
wchar_t
*
GetLFListName
(
int
lfhash
);
const
std
::
unordered_map
<
int
,
int
>*
GetLFListContent
(
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
,
int
*
dbuf
,
int
mainc
,
int
sidec
,
bool
is_packlist
=
false
);
int
LoadDeck
(
Deck
&
deck
,
std
::
istringstream
&
deckStream
,
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
);
bool
LoadSide
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
);
...
...
gframe/drawing.cpp
View file @
0a060025
...
@@ -1266,7 +1266,7 @@ void Game::DrawDeckBd() {
...
@@ -1266,7 +1266,7 @@ void Game::DrawDeckBd() {
driver
->
draw2DRectangle
(
Resize
(
805
,
160
,
1020
,
630
),
0x400000ff
,
0x400000ff
,
0x40000000
,
0x40000000
);
driver
->
draw2DRectangle
(
Resize
(
805
,
160
,
1020
,
630
),
0x400000ff
,
0x400000ff
,
0x40000000
,
0x40000000
);
driver
->
draw2DRectangleOutline
(
Resize
(
804
,
159
,
1020
,
630
));
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
()];
code_pointer
ptr
=
deckBuilder
.
results
[
i
+
scrFilter
->
getPos
()];
if
(
i
>=
7
)
if
(
i
>=
7
)
{
{
...
...
gframe/duelclient.cpp
View file @
0a060025
...
@@ -9,7 +9,6 @@
...
@@ -9,7 +9,6 @@
#include "deck_manager.h"
#include "deck_manager.h"
#include "replay.h"
#include "replay.h"
#include <thread>
#include <thread>
#include <array>
namespace
ygo
{
namespace
ygo
{
...
@@ -102,17 +101,18 @@ void DuelClient::ClientRead(bufferevent* bev, void* ctx) {
...
@@ -102,17 +101,18 @@ void DuelClient::ClientRead(bufferevent* bev, void* ctx) {
int
len
=
evbuffer_get_length
(
input
);
int
len
=
evbuffer_get_length
(
input
);
if
(
len
<
2
)
if
(
len
<
2
)
return
;
return
;
std
::
array
<
unsigned
char
,
SIZE_NETWORK_BUFFER
>
duel_client_read
;
unsigned
char
*
duel_client_read
=
new
unsigned
char
[
SIZE_NETWORK_BUFFER
]
;
uint16_t
packet_len
=
0
;
uint16_t
packet_len
=
0
;
while
(
len
>=
2
)
{
while
(
len
>=
2
)
{
evbuffer_copyout
(
input
,
&
packet_len
,
sizeof
packet_len
);
evbuffer_copyout
(
input
,
&
packet_len
,
sizeof
packet_len
);
if
(
len
<
packet_len
+
2
)
if
(
len
<
packet_len
+
2
)
break
;
break
;
int
read_len
=
evbuffer_remove
(
input
,
duel_client_read
.
data
()
,
packet_len
+
2
);
int
read_len
=
evbuffer_remove
(
input
,
duel_client_read
,
packet_len
+
2
);
if
(
read_len
>
2
)
if
(
read_len
>
2
)
HandleSTOCPacketLan
(
&
duel_client_read
[
2
],
read_len
-
2
);
HandleSTOCPacketLan
(
&
duel_client_read
[
2
],
read_len
-
2
);
len
-=
packet_len
+
2
;
len
-=
packet_len
+
2
;
}
}
delete
[]
duel_client_read
;
}
}
void
DuelClient
::
ClientEvent
(
bufferevent
*
bev
,
short
events
,
void
*
ctx
)
{
void
DuelClient
::
ClientEvent
(
bufferevent
*
bev
,
short
events
,
void
*
ctx
)
{
if
(
events
&
BEV_EVENT_CONNECTED
)
{
if
(
events
&
BEV_EVENT_CONNECTED
)
{
...
@@ -274,8 +274,8 @@ void DuelClient::HandleSTOCPacketLan(unsigned char* data, int len) {
...
@@ -274,8 +274,8 @@ void DuelClient::HandleSTOCPacketLan(unsigned char* data, int len) {
}
}
case
ERRMSG_DECKERROR
:
{
case
ERRMSG_DECKERROR
:
{
mainGame
->
gMutex
.
lock
();
mainGame
->
gMutex
.
lock
();
unsigned
int
code
=
pkt
->
code
&
0xFFFFFFF
;
unsigned
int
code
=
pkt
->
code
&
MAX_CARD_ID
;
int
flag
=
pkt
->
code
>>
28
;
unsigned
int
flag
=
pkt
->
code
>>
28
;
wchar_t
msgbuf
[
256
];
wchar_t
msgbuf
[
256
];
switch
(
flag
)
switch
(
flag
)
{
{
...
@@ -1565,7 +1565,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
...
@@ -1565,7 +1565,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
l
=
BufferIO
::
ReadUInt8
(
pbuf
);
l
=
BufferIO
::
ReadUInt8
(
pbuf
);
s
=
BufferIO
::
ReadUInt8
(
pbuf
);
s
=
BufferIO
::
ReadUInt8
(
pbuf
);
ss
=
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
];
pcard
=
mainGame
->
dField
.
GetCard
(
c
,
l
&
0x7f
,
s
)
->
overlayed
[
ss
];
else
else
pcard
=
mainGame
->
dField
.
GetCard
(
c
,
l
,
s
);
pcard
=
mainGame
->
dField
.
GetCard
(
c
,
l
,
s
);
...
@@ -1630,7 +1630,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
...
@@ -1630,7 +1630,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
l
=
BufferIO
::
ReadUInt8
(
pbuf
);
l
=
BufferIO
::
ReadUInt8
(
pbuf
);
s
=
BufferIO
::
ReadUInt8
(
pbuf
);
s
=
BufferIO
::
ReadUInt8
(
pbuf
);
ss
=
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
];
pcard
=
mainGame
->
dField
.
GetCard
(
c
,
l
&
0x7f
,
s
)
->
overlayed
[
ss
];
else
else
pcard
=
mainGame
->
dField
.
GetCard
(
c
,
l
,
s
);
pcard
=
mainGame
->
dField
.
GetCard
(
c
,
l
,
s
);
...
@@ -1654,7 +1654,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
...
@@ -1654,7 +1654,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
l
=
BufferIO
::
ReadUInt8
(
pbuf
);
l
=
BufferIO
::
ReadUInt8
(
pbuf
);
s
=
BufferIO
::
ReadUInt8
(
pbuf
);
s
=
BufferIO
::
ReadUInt8
(
pbuf
);
ss
=
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
];
pcard
=
mainGame
->
dField
.
GetCard
(
c
,
l
&
0x7f
,
s
)
->
overlayed
[
ss
];
else
else
pcard
=
mainGame
->
dField
.
GetCard
(
c
,
l
,
s
);
pcard
=
mainGame
->
dField
.
GetCard
(
c
,
l
,
s
);
...
@@ -2193,7 +2193,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
...
@@ -2193,7 +2193,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
}
}
if
(
field_confirm
.
size
()
>
0
)
{
if
(
field_confirm
.
size
()
>
0
)
{
mainGame
->
WaitFrameSignal
(
5
);
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
];
pcard
=
field_confirm
[
i
];
c
=
pcard
->
controler
;
c
=
pcard
->
controler
;
l
=
pcard
->
location
;
l
=
pcard
->
location
;
...
@@ -2223,7 +2223,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
...
@@ -2223,7 +2223,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
mainGame
->
WaitFrameSignal
(
30
);
mainGame
->
WaitFrameSignal
(
30
);
else
else
mainGame
->
WaitFrameSignal
(
90
);
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
];
pcard
=
field_confirm
[
i
];
mainGame
->
dField
.
MoveCard
(
pcard
,
5
);
mainGame
->
dField
.
MoveCard
(
pcard
,
5
);
pcard
->
is_highlighting
=
false
;
pcard
->
is_highlighting
=
false
;
...
@@ -3064,7 +3064,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
...
@@ -3064,7 +3064,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
unsigned
int
l
=
BufferIO
::
ReadUInt8
(
pbuf
);
unsigned
int
l
=
BufferIO
::
ReadUInt8
(
pbuf
);
int
s
=
BufferIO
::
ReadUInt8
(
pbuf
);
int
s
=
BufferIO
::
ReadUInt8
(
pbuf
);
int
ss
=
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
];
pcards
[
i
]
=
mainGame
->
dField
.
GetCard
(
c
,
l
&
0x7f
,
s
)
->
overlayed
[
ss
];
else
else
pcards
[
i
]
=
mainGame
->
dField
.
GetCard
(
c
,
l
,
s
);
pcards
[
i
]
=
mainGame
->
dField
.
GetCard
(
c
,
l
,
s
);
...
...
gframe/netserver.cpp
View file @
0a060025
...
@@ -4,7 +4,6 @@
...
@@ -4,7 +4,6 @@
#include "tag_duel.h"
#include "tag_duel.h"
#include "deck_manager.h"
#include "deck_manager.h"
#include <thread>
#include <thread>
#include <array>
namespace
ygo
{
namespace
ygo
{
std
::
unordered_map
<
bufferevent
*
,
DuelPlayer
>
NetServer
::
users
;
std
::
unordered_map
<
bufferevent
*
,
DuelPlayer
>
NetServer
::
users
;
...
@@ -127,17 +126,18 @@ void NetServer::ServerEchoRead(bufferevent *bev, void *ctx) {
...
@@ -127,17 +126,18 @@ void NetServer::ServerEchoRead(bufferevent *bev, void *ctx) {
int
len
=
evbuffer_get_length
(
input
);
int
len
=
evbuffer_get_length
(
input
);
if
(
len
<
2
)
if
(
len
<
2
)
return
;
return
;
std
::
array
<
unsigned
char
,
SIZE_NETWORK_BUFFER
>
net_server_read
;
unsigned
char
*
net_server_read
=
new
unsigned
char
[
SIZE_NETWORK_BUFFER
]
;
uint16_t
packet_len
=
0
;
uint16_t
packet_len
=
0
;
while
(
len
>=
2
)
{
while
(
len
>=
2
)
{
evbuffer_copyout
(
input
,
&
packet_len
,
sizeof
packet_len
);
evbuffer_copyout
(
input
,
&
packet_len
,
sizeof
packet_len
);
if
(
len
<
packet_len
+
2
)
if
(
len
<
packet_len
+
2
)
break
;
break
;
int
read_len
=
evbuffer_remove
(
input
,
net_server_read
.
data
()
,
packet_len
+
2
);
int
read_len
=
evbuffer_remove
(
input
,
net_server_read
,
packet_len
+
2
);
if
(
read_len
>
2
)
if
(
read_len
>
2
)
HandleCTOSPacket
(
&
users
[
bev
],
&
net_server_read
[
2
],
read_len
-
2
);
HandleCTOSPacket
(
&
users
[
bev
],
&
net_server_read
[
2
],
read_len
-
2
);
len
-=
packet_len
+
2
;
len
-=
packet_len
+
2
;
}
}
delete
[]
net_server_read
;
}
}
void
NetServer
::
ServerEchoEvent
(
bufferevent
*
bev
,
short
events
,
void
*
ctx
)
{
void
NetServer
::
ServerEchoEvent
(
bufferevent
*
bev
,
short
events
,
void
*
ctx
)
{
if
(
events
&
(
BEV_EVENT_EOF
|
BEV_EVENT_ERROR
))
{
if
(
events
&
(
BEV_EVENT_EOF
|
BEV_EVENT_ERROR
))
{
...
...
gframe/network.h
View file @
0a060025
...
@@ -324,15 +324,15 @@ public:
...
@@ -324,15 +324,15 @@ public:
#define ERRMSG_SIDEERROR 0x3
#define ERRMSG_SIDEERROR 0x3
#define ERRMSG_VERERROR 0x4
#define ERRMSG_VERERROR 0x4
#define DECKERROR_LFLIST 0x1
#define DECKERROR_LFLIST 0x1
U
#define DECKERROR_OCGONLY 0x2
#define DECKERROR_OCGONLY 0x2
U
#define DECKERROR_TCGONLY 0x3
#define DECKERROR_TCGONLY 0x3
U
#define DECKERROR_UNKNOWNCARD 0x4
#define DECKERROR_UNKNOWNCARD 0x4
U
#define DECKERROR_CARDCOUNT 0x5
#define DECKERROR_CARDCOUNT 0x5
U
#define DECKERROR_MAINCOUNT 0x6
#define DECKERROR_MAINCOUNT 0x6
U
#define DECKERROR_EXTRACOUNT 0x7
#define DECKERROR_EXTRACOUNT 0x7
U
#define DECKERROR_SIDECOUNT 0x8
#define DECKERROR_SIDECOUNT 0x8
U
#define DECKERROR_NOTAVAIL 0x9
#define DECKERROR_NOTAVAIL 0x9
U
#define MODE_SINGLE 0x0
#define MODE_SINGLE 0x0
#define MODE_MATCH 0x1
#define MODE_MATCH 0x1
...
...
gframe/single_duel.cpp
View file @
0a060025
...
@@ -245,7 +245,7 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
...
@@ -245,7 +245,7 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
unsigned
int
deckerror
=
0
;
unsigned
int
deckerror
=
0
;
if
(
!
host_info
.
no_check_deck
)
{
if
(
!
host_info
.
no_check_deck
)
{
if
(
deck_error
[
dp
->
type
])
{
if
(
deck_error
[
dp
->
type
])
{
deckerror
=
(
DECKERROR_UNKNOWNCARD
<<
28
)
+
deck_error
[
dp
->
type
];
deckerror
=
(
DECKERROR_UNKNOWNCARD
<<
28
)
|
deck_error
[
dp
->
type
];
}
else
{
}
else
{
deckerror
=
deckManager
.
CheckDeck
(
pdeck
[
dp
->
type
],
host_info
.
lflist
,
host_info
.
rule
);
deckerror
=
deckManager
.
CheckDeck
(
pdeck
[
dp
->
type
],
host_info
.
lflist
,
host_info
.
rule
);
}
}
...
@@ -278,6 +278,8 @@ void SingleDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
...
@@ -278,6 +278,8 @@ void SingleDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
void
SingleDuel
::
UpdateDeck
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
int
len
)
{
void
SingleDuel
::
UpdateDeck
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
int
len
)
{
if
(
dp
->
type
>
1
||
ready
[
dp
->
type
])
if
(
dp
->
type
>
1
||
ready
[
dp
->
type
])
return
;
return
;
if
(
len
<
8
||
len
>
sizeof
(
CTOS_DeckData
))
return
;
bool
valid
=
true
;
bool
valid
=
true
;
CTOS_DeckData
deckbuf
;
CTOS_DeckData
deckbuf
;
std
::
memcpy
(
&
deckbuf
,
pdata
,
len
);
std
::
memcpy
(
&
deckbuf
,
pdata
,
len
);
...
...
gframe/tag_duel.cpp
View file @
0a060025
...
@@ -261,6 +261,8 @@ void TagDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
...
@@ -261,6 +261,8 @@ void TagDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
void
TagDuel
::
UpdateDeck
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
int
len
)
{
void
TagDuel
::
UpdateDeck
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
int
len
)
{
if
(
dp
->
type
>
3
||
ready
[
dp
->
type
])
if
(
dp
->
type
>
3
||
ready
[
dp
->
type
])
return
;
return
;
if
(
len
<
8
||
len
>
sizeof
(
CTOS_DeckData
))
return
;
bool
valid
=
true
;
bool
valid
=
true
;
CTOS_DeckData
deckbuf
;
CTOS_DeckData
deckbuf
;
std
::
memcpy
(
&
deckbuf
,
pdata
,
len
);
std
::
memcpy
(
&
deckbuf
,
pdata
,
len
);
...
...
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