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