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
12f9e87c
Commit
12f9e87c
authored
Jan 12, 2026
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://github.com/Fluorohydride/ygopro
into server
parents
a5cf2bb0
490da977
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
37 additions
and
31 deletions
+37
-31
gframe/bufferio.h
gframe/bufferio.h
+12
-1
gframe/deck_con.cpp
gframe/deck_con.cpp
+1
-11
gframe/duelclient.cpp
gframe/duelclient.cpp
+16
-3
gframe/duelclient.h
gframe/duelclient.h
+2
-0
gframe/menu_handler.cpp
gframe/menu_handler.cpp
+1
-11
gframe/network.h
gframe/network.h
+3
-3
gframe/sound_manager.cpp
gframe/sound_manager.cpp
+1
-1
gframe/sound_manager.h
gframe/sound_manager.h
+1
-1
No files found.
gframe/bufferio.h
View file @
12f9e87c
...
...
@@ -4,6 +4,7 @@
#include <cstdint>
#include <cstring>
#include <cwchar>
#include <vector>
class
BufferIO
{
public:
...
...
@@ -15,11 +16,21 @@ public:
return
ret
;
}
template
<
typename
T
>
static
void
Write
(
unsigned
char
*&
p
,
T
value
)
{
static
void
Write
(
unsigned
char
*&
p
,
const
T
&
value
)
{
std
::
memcpy
(
p
,
&
value
,
sizeof
(
T
));
p
+=
sizeof
(
T
);
}
static
void
VectorWriteBlock
(
std
::
vector
<
unsigned
char
>&
buffer
,
const
void
*
src
,
size_t
size
)
{
const
auto
len
=
buffer
.
size
();
buffer
.
resize
(
len
+
size
);
std
::
memcpy
(
buffer
.
data
()
+
len
,
src
,
size
);
}
template
<
typename
T
>
static
void
VectorWrite
(
std
::
vector
<
unsigned
char
>&
buffer
,
const
T
&
value
)
{
VectorWriteBlock
(
buffer
,
&
value
,
sizeof
(
T
));
}
// for compatibility
[[
deprecated
]]
static
int32_t
ReadInt32
(
unsigned
char
*&
p
)
{
...
...
gframe/deck_con.cpp
View file @
12f9e87c
...
...
@@ -702,17 +702,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break
;
}
mainGame
->
ClearCardInfo
();
unsigned
char
deckbuf
[
1024
]{};
auto
pdeck
=
deckbuf
;
BufferIO
::
Write
<
int32_t
>
(
pdeck
,
static_cast
<
int32_t
>
(
deckManager
.
current_deck
.
main
.
size
()
+
deckManager
.
current_deck
.
extra
.
size
()));
BufferIO
::
Write
<
int32_t
>
(
pdeck
,
static_cast
<
int32_t
>
(
deckManager
.
current_deck
.
side
.
size
()));
for
(
size_t
i
=
0
;
i
<
deckManager
.
current_deck
.
main
.
size
();
++
i
)
BufferIO
::
Write
<
uint32_t
>
(
pdeck
,
deckManager
.
current_deck
.
main
[
i
]
->
first
);
for
(
size_t
i
=
0
;
i
<
deckManager
.
current_deck
.
extra
.
size
();
++
i
)
BufferIO
::
Write
<
uint32_t
>
(
pdeck
,
deckManager
.
current_deck
.
extra
[
i
]
->
first
);
for
(
size_t
i
=
0
;
i
<
deckManager
.
current_deck
.
side
.
size
();
++
i
)
BufferIO
::
Write
<
uint32_t
>
(
pdeck
,
deckManager
.
current_deck
.
side
[
i
]
->
first
);
DuelClient
::
SendBufferToServer
(
CTOS_UPDATE_DECK
,
deckbuf
,
pdeck
-
deckbuf
);
DuelClient
::
SendUpdateDeck
(
deckManager
.
current_deck
);
break
;
}
case
BUTTON_SIDE_RELOAD
:
{
...
...
gframe/duelclient.cpp
View file @
12f9e87c
...
...
@@ -829,11 +829,11 @@ void DuelClient::HandleSTOCPacketLan(unsigned char* data, int len) {
break
;
}
case
STOC_HS_PLAYER_ENTER
:
{
if
(
len
<
1
+
STOC_HS_PlayerEnter_size
)
if
(
len
<
1
+
sizeof
(
STOC_HS_PlayerEnter
)
)
return
;
soundManager
.
PlaySoundEffect
(
SOUND_PLAYER_ENTER
);
STOC_HS_PlayerEnter
packet
;
std
::
memcpy
(
&
packet
,
pdata
,
STOC_HS_PlayerEnter_size
);
std
::
memcpy
(
&
packet
,
pdata
,
sizeof
(
STOC_HS_PlayerEnter
)
);
auto
pkt
=
&
packet
;
if
(
pkt
->
pos
>
3
)
break
;
...
...
@@ -2942,7 +2942,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
pcard
->
SetCode
(
code
);
pcard
->
position
=
cp
;
if
(
!
mainGame
->
dInfo
.
isReplay
||
!
mainGame
->
dInfo
.
isReplaySkiping
)
{
soundManager
.
PlaySoundEffect
(
SOUND_F
IL
P
);
soundManager
.
PlaySoundEffect
(
SOUND_F
LI
P
);
myswprintf
(
event_string
,
dataManager
.
GetSysString
(
1607
),
dataManager
.
GetName
(
code
));
mainGame
->
dField
.
MoveCard
(
pcard
,
10
);
mainGame
->
WaitFrameSignal
(
11
);
...
...
@@ -4067,6 +4067,19 @@ void DuelClient::SendResponse() {
SendBufferToServer
(
CTOS_RESPONSE
,
response_buf
,
response_len
);
}
}
void
DuelClient
::
SendUpdateDeck
(
const
Deck
&
deck
)
{
std
::
vector
<
unsigned
char
>
deckbuf
;
deckbuf
.
reserve
(
1024
);
BufferIO
::
VectorWrite
<
int32_t
>
(
deckbuf
,
static_cast
<
int32_t
>
(
deck
.
main
.
size
()
+
deck
.
extra
.
size
()));
BufferIO
::
VectorWrite
<
int32_t
>
(
deckbuf
,
static_cast
<
int32_t
>
(
deck
.
side
.
size
()));
for
(
const
auto
&
card
:
deck
.
main
)
BufferIO
::
VectorWrite
<
uint32_t
>
(
deckbuf
,
card
->
first
);
for
(
const
auto
&
card
:
deck
.
extra
)
BufferIO
::
VectorWrite
<
uint32_t
>
(
deckbuf
,
card
->
first
);
for
(
const
auto
&
card
:
deck
.
side
)
BufferIO
::
VectorWrite
<
uint32_t
>
(
deckbuf
,
card
->
first
);
SendBufferToServer
(
CTOS_UPDATE_DECK
,
deckbuf
.
data
(),
deckbuf
.
size
());
}
void
DuelClient
::
BeginRefreshHost
()
{
if
(
is_refreshing
)
return
;
...
...
gframe/duelclient.h
View file @
12f9e87c
...
...
@@ -5,6 +5,7 @@
#include <set>
#include <random>
#include "config.h"
#include "deck_manager.h"
#include "network.h"
namespace
ygo
{
...
...
@@ -48,6 +49,7 @@ public:
static
void
SetResponseI
(
int32_t
respI
);
static
void
SetResponseB
(
void
*
respB
,
size_t
len
);
static
void
SendResponse
();
static
void
SendUpdateDeck
(
const
Deck
&
deck
);
static
void
SendPacketToServer
(
unsigned
char
proto
)
{
auto
p
=
duel_client_write
;
BufferIO
::
Write
<
uint16_t
>
(
p
,
1
);
...
...
gframe/menu_handler.cpp
View file @
12f9e87c
...
...
@@ -15,17 +15,7 @@ namespace ygo {
void
UpdateDeck
()
{
BufferIO
::
CopyWideString
(
mainGame
->
cbCategorySelect
->
getText
(),
mainGame
->
gameConf
.
lastcategory
);
BufferIO
::
CopyWideString
(
mainGame
->
cbDeckSelect
->
getText
(),
mainGame
->
gameConf
.
lastdeck
);
unsigned
char
deckbuf
[
1024
]{};
auto
pdeck
=
deckbuf
;
BufferIO
::
Write
<
int32_t
>
(
pdeck
,
static_cast
<
int32_t
>
(
deckManager
.
current_deck
.
main
.
size
()
+
deckManager
.
current_deck
.
extra
.
size
()));
BufferIO
::
Write
<
int32_t
>
(
pdeck
,
static_cast
<
int32_t
>
(
deckManager
.
current_deck
.
side
.
size
()));
for
(
size_t
i
=
0
;
i
<
deckManager
.
current_deck
.
main
.
size
();
++
i
)
BufferIO
::
Write
<
uint32_t
>
(
pdeck
,
deckManager
.
current_deck
.
main
[
i
]
->
first
);
for
(
size_t
i
=
0
;
i
<
deckManager
.
current_deck
.
extra
.
size
();
++
i
)
BufferIO
::
Write
<
uint32_t
>
(
pdeck
,
deckManager
.
current_deck
.
extra
[
i
]
->
first
);
for
(
size_t
i
=
0
;
i
<
deckManager
.
current_deck
.
side
.
size
();
++
i
)
BufferIO
::
Write
<
uint32_t
>
(
pdeck
,
deckManager
.
current_deck
.
side
[
i
]
->
first
);
DuelClient
::
SendBufferToServer
(
CTOS_UPDATE_DECK
,
deckbuf
,
pdeck
-
deckbuf
);
DuelClient
::
SendUpdateDeck
(
deckManager
.
current_deck
);
}
bool
MenuHandler
::
OnEvent
(
const
irr
::
SEvent
&
event
)
{
if
(
mainGame
->
dField
.
OnCommonEvent
(
event
))
...
...
gframe/network.h
View file @
12f9e87c
...
...
@@ -172,14 +172,14 @@ constexpr int LEN_CHAT_PLAYER = 1;
constexpr
int
LEN_CHAT_MSG
=
256
;
constexpr
int
SIZE_STOC_CHAT
=
(
LEN_CHAT_PLAYER
+
LEN_CHAT_MSG
)
*
sizeof
(
uint16_t
);
#pragma pack(push, 1)
struct
STOC_HS_PlayerEnter
{
uint16_t
name
[
20
]{};
uint8_t
pos
{};
// byte padding[1]
};
#pragma pack(pop)
check_trivially_copyable
(
STOC_HS_PlayerEnter
);
//static_assert(sizeof(STOC_HS_PlayerEnter) == 42, "size mismatch: STOC_HS_PlayerEnter");
constexpr
int
STOC_HS_PlayerEnter_size
=
41
;
//workwround
static_assert
(
sizeof
(
STOC_HS_PlayerEnter
)
==
41
,
"size mismatch: STOC_HS_PlayerEnter"
);
struct
STOC_HS_PlayerChange
{
//pos<<4 | state
...
...
gframe/sound_manager.cpp
View file @
12f9e87c
...
...
@@ -106,7 +106,7 @@ void SoundManager::PlaySoundEffect(int sound) {
strcpy
(
soundName
,
"set"
);
break
;
}
case
SOUND_F
IL
P
:
{
case
SOUND_F
LI
P
:
{
strcpy
(
soundName
,
"flip"
);
break
;
}
...
...
gframe/sound_manager.h
View file @
12f9e87c
...
...
@@ -54,7 +54,7 @@ extern SoundManager soundManager;
#define SOUND_SPECIAL_SUMMON 102
#define SOUND_ACTIVATE 103
#define SOUND_SET 104
#define SOUND_F
IL
P 105
#define SOUND_F
LI
P 105
#define SOUND_REVEAL 106
#define SOUND_EQUIP 107
#define SOUND_DESTROYED 108
...
...
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