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
c8803e16
Commit
c8803e16
authored
Dec 31, 2024
by
nanahira
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'patch1' of github.com:salix5/ygopro into server-develop
parents
b0e3c982
8866da6a
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
27 additions
and
30 deletions
+27
-30
gframe/netserver.cpp
gframe/netserver.cpp
+3
-1
gframe/network.h
gframe/network.h
+8
-1
gframe/single_duel.cpp
gframe/single_duel.cpp
+8
-14
gframe/tag_duel.cpp
gframe/tag_duel.cpp
+7
-13
script
script
+1
-1
No files found.
gframe/netserver.cpp
View file @
c8803e16
...
...
@@ -305,7 +305,9 @@ void NetServer::HandleCTOSPacket(DuelPlayer* dp, unsigned char* data, int len) {
case
CTOS_UPDATE_DECK
:
{
if
(
!
dp
->
game
)
return
;
if
(
len
<
1
+
(
int
)
sizeof
(
unsigned
char
))
if
(
len
<
1
+
(
int
)
sizeof
(
int32_t
)
+
(
int
)
sizeof
(
int32_t
))
return
;
if
(
len
>
1
+
(
int
)
sizeof
(
CTOS_DeckData
))
return
;
duel_mode
->
UpdateDeck
(
dp
,
pdata
,
len
-
1
);
break
;
...
...
gframe/network.h
View file @
c8803e16
...
...
@@ -54,6 +54,13 @@ struct HostRequest {
check_trivially_copyable
(
HostRequest
);
static_assert
(
sizeof
(
HostRequest
)
==
2
,
"size mismatch: HostRequest"
);
struct
CTOS_DeckData
{
int32_t
mainc
{};
int32_t
sidec
{};
int32_t
list
[
MAINC_MAX
+
SIDEC_MAX
]{};
};
check_trivially_copyable
(
CTOS_DeckData
);
struct
CTOS_HandResult
{
unsigned
char
res
{};
};
...
...
@@ -258,7 +265,7 @@ public:
#define NETPLAYER_TYPE_OBSERVER 7
#define CTOS_RESPONSE 0x1 // byte array
#define CTOS_UPDATE_DECK 0x2 //
mainc, sidec, int32_t[mainc + sidec]
#define CTOS_UPDATE_DECK 0x2 //
CTOS_DeckData
#define CTOS_HAND_RESULT 0x3 // CTOS_HandResult
#define CTOS_TP_RESULT 0x4 // CTOS_TPResult
#define CTOS_PLAYER_INFO 0x10 // CTOS_PlayerInfo
...
...
gframe/single_duel.cpp
View file @
c8803e16
...
...
@@ -394,22 +394,18 @@ void SingleDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
void
SingleDuel
::
UpdateDeck
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
int
len
)
{
if
(
dp
->
type
>
1
||
ready
[
dp
->
type
])
return
;
if
(
len
<
8
)
return
;
bool
valid
=
true
;
auto
deckbuf
=
pdata
;
int
mainc
=
BufferIO
::
ReadInt32
(
deckbuf
);
int
sidec
=
BufferIO
::
ReadInt32
(
deckbuf
);
const
int
deck_size
=
len
-
2
*
sizeof
(
int32_t
);
if
(
mainc
<
0
||
mainc
>
MAINC_MAX
)
CTOS_DeckData
deckbuf
;
std
::
memcpy
(
&
deckbuf
,
pdata
,
len
);
if
(
deckbuf
.
mainc
<
0
||
deckbuf
.
mainc
>
MAINC_MAX
)
valid
=
false
;
else
if
(
sidec
<
0
||
sidec
>
SIDEC_MAX
)
else
if
(
deckbuf
.
sidec
<
0
||
deckbuf
.
sidec
>
SIDEC_MAX
)
valid
=
false
;
else
if
#ifdef YGOPRO_SERVER_MODE
(
deck_size
<
(
mainc
+
sidec
)
*
(
int
)
sizeof
(
int32_t
)
||
deck_size
>
MAINC_MAX
+
SIDEC_MAX
)
(
len
<
(
2
+
deckbuf
.
mainc
+
deckbuf
.
sidec
)
*
(
int
)
sizeof
(
int32_t
)
||
len
>
(
2
+
MAINC_MAX
+
SIDEC_MAX
)
*
(
int
)
sizeof
(
int32_t
)
)
#else
(
deck_size
!=
(
mainc
+
sidec
)
*
(
int
)
sizeof
(
int32_t
))
(
len
!=
(
2
+
deckbuf
.
mainc
+
deckbuf
.
sidec
)
*
(
int
)
sizeof
(
int32_t
))
#endif
valid
=
false
;
if
(
!
valid
)
{
...
...
@@ -419,12 +415,10 @@ void SingleDuel::UpdateDeck(DuelPlayer* dp, unsigned char* pdata, int len) {
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_ERROR_MSG
,
scem
);
return
;
}
int
deck_list
[
SIZE_NETWORK_BUFFER
/
sizeof
(
int32_t
)];
std
::
memcpy
(
deck_list
,
deckbuf
,
deck_size
);
if
(
duel_count
==
0
)
{
deck_error
[
dp
->
type
]
=
deckManager
.
LoadDeck
(
pdeck
[
dp
->
type
],
deck
_list
,
mainc
,
sidec
);
deck_error
[
dp
->
type
]
=
deckManager
.
LoadDeck
(
pdeck
[
dp
->
type
],
deck
buf
.
list
,
deckbuf
.
mainc
,
deckbuf
.
sidec
);
}
else
{
if
(
deckManager
.
LoadSide
(
pdeck
[
dp
->
type
],
deck
_list
,
mainc
,
sidec
))
{
if
(
deckManager
.
LoadSide
(
pdeck
[
dp
->
type
],
deck
buf
.
list
,
deckbuf
.
mainc
,
deckbuf
.
sidec
))
{
ready
[
dp
->
type
]
=
true
;
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_DUEL_START
);
if
(
ready
[
0
]
&&
ready
[
1
])
{
...
...
gframe/tag_duel.cpp
View file @
c8803e16
...
...
@@ -380,22 +380,18 @@ void TagDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
void
TagDuel
::
UpdateDeck
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
int
len
)
{
if
(
dp
->
type
>
3
||
ready
[
dp
->
type
])
return
;
if
(
len
<
8
)
return
;
bool
valid
=
true
;
auto
deckbuf
=
pdata
;
int
mainc
=
BufferIO
::
ReadInt32
(
deckbuf
);
int
sidec
=
BufferIO
::
ReadInt32
(
deckbuf
);
const
int
deck_size
=
len
-
2
*
sizeof
(
int32_t
);
if
(
mainc
<
0
||
mainc
>
MAINC_MAX
)
CTOS_DeckData
deckbuf
;
std
::
memcpy
(
&
deckbuf
,
pdata
,
len
);
if
(
deckbuf
.
mainc
<
0
||
deckbuf
.
mainc
>
MAINC_MAX
)
valid
=
false
;
else
if
(
sidec
<
0
||
sidec
>
SIDEC_MAX
)
else
if
(
deckbuf
.
sidec
<
0
||
deckbuf
.
sidec
>
SIDEC_MAX
)
valid
=
false
;
else
if
#ifdef YGOPRO_SERVER_MODE
(
deck_size
<
(
mainc
+
sidec
)
*
(
int
)
sizeof
(
int32_t
)
||
deck_size
>
MAINC_MAX
+
SIDEC_MAX
)
(
len
<
(
2
+
deckbuf
.
mainc
+
deckbuf
.
sidec
)
*
(
int
)
sizeof
(
int32_t
)
||
len
>
(
2
+
MAINC_MAX
+
SIDEC_MAX
)
*
(
int
)
sizeof
(
int32_t
)
)
#else
(
deck_size
!=
(
mainc
+
sidec
)
*
(
int
)
sizeof
(
int32_t
))
(
len
!=
(
2
+
deckbuf
.
mainc
+
deckbuf
.
sidec
)
*
(
int
)
sizeof
(
int32_t
))
#endif
valid
=
false
;
if
(
!
valid
)
{
...
...
@@ -405,9 +401,7 @@ void TagDuel::UpdateDeck(DuelPlayer* dp, unsigned char* pdata, int len) {
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_ERROR_MSG
,
scem
);
return
;
}
int
deck_list
[
SIZE_NETWORK_BUFFER
/
sizeof
(
int32_t
)];
std
::
memcpy
(
deck_list
,
deckbuf
,
deck_size
);
deck_error
[
dp
->
type
]
=
deckManager
.
LoadDeck
(
pdeck
[
dp
->
type
],
deck_list
,
mainc
,
sidec
);
deck_error
[
dp
->
type
]
=
deckManager
.
LoadDeck
(
pdeck
[
dp
->
type
],
deckbuf
.
list
,
deckbuf
.
mainc
,
deckbuf
.
sidec
);
}
void
TagDuel
::
StartDuel
(
DuelPlayer
*
dp
)
{
if
(
dp
!=
host_player
)
...
...
script
@
9fd9ad8b
Subproject commit
15ae75c68c2120e72566b6cd9083ed5bc1558dce
Subproject commit
9fd9ad8bb4e12283926d176f975fa5e5c2bc9edb
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