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
64c28dce
Commit
64c28dce
authored
Jun 08, 2025
by
nanahira
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'server-develop' of ../versions/ygopro-mc into server-develop
parents
dde7cc72
9da2a4fd
Changes
8
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
1166 additions
and
37 deletions
+1166
-37
.github/workflows/server.yml
.github/workflows/server.yml
+289
-0
gframe/deck_manager.h
gframe/deck_manager.h
+2
-2
gframe/game.cpp
gframe/game.cpp
+5
-3
gframe/game.h
gframe/game.h
+1
-1
gframe/premake5.lua
gframe/premake5.lua
+3
-1
gframe/replay.cpp
gframe/replay.cpp
+1
-1
premake/irrlicht/irrlicht.patch
premake/irrlicht/irrlicht.patch
+836
-0
premake5.lua
premake5.lua
+29
-29
No files found.
.github/workflows/server.yml
0 → 100644
View file @
64c28dce
name
:
Automated Test Build (Server Mode)
on
:
push
:
branches
:
[
"
server"
]
pull_request
:
branches
:
[
"
server"
]
jobs
:
build-windows
:
strategy
:
fail-fast
:
false
matrix
:
name
:
-
windows
-
windows-x64
-
windows-ygopro2-ai-server
# - windows-2025
include
:
-
name
:
windows
os
:
windows-2022
vs
:
vs2022
-
name
:
windows-x64
os
:
windows-2022
vs
:
vs2022
x64
:
true
# - name: windows-2025
# os: windows-2025
# vs: vs2025 # to be enabled after the release of Visual Studio 2025
-
name
:
windows-ygopro2-ai-server
os
:
windows-2022
vs
:
vs2022
x64
:
true
ygopro2
:
true
runs-on
:
${{ matrix.os }}
steps
:
-
name
:
Checkout repository with submodules
uses
:
actions/checkout@v4
with
:
fetch-depth
:
1
submodules
:
true
-
name
:
Update submodules
run
:
|
cd ocgcore
git checkout master
git pull origin master
cd ..
# cd script
# git checkout master
# git pull origin master
# cd ..
-
name
:
Download premake
id
:
premake
uses
:
mercury233/action-cache-download-file@v1.0.0
with
:
url
:
https://github.com/premake/premake-core/releases/download/v5.0.0-beta6/premake-5.0.0-beta6-windows.zip
filename
:
premake5.zip
-
name
:
Extract premake
run
:
|
7z x ${{ steps.premake.outputs.filepath }}
-
name
:
Download libevent
id
:
libevent
uses
:
mercury233/action-cache-download-file@v1.0.0
with
:
url
:
https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz
filename
:
libevent.tar.gz
-
name
:
Extract libevent
run
:
|
tar xf ${{ steps.libevent.outputs.filepath }}
move libevent-2.0.22-stable event
-
name
:
Download lua
id
:
lua
uses
:
mercury233/action-cache-download-file@v1.0.0
with
:
url
:
https://www.lua.org/ftp/lua-5.4.7.tar.gz
-
name
:
Extract lua
run
:
|
tar xf ${{ steps.lua.outputs.filepath }}
move lua-5.4.7 lua
-
name
:
Download sqlite
id
:
sqlite
uses
:
mercury233/action-cache-download-file@v1.0.0
with
:
url
:
https://www.sqlite.org/2025/sqlite-amalgamation-3490100.zip
-
name
:
Extract sqlite
run
:
|
7z x ${{ steps.sqlite.outputs.filepath }}
move sqlite-amalgamation-3490100 sqlite3
-
name
:
Download irrlicht
if
:
matrix.ygopro2 ==
true
run
:
|
git clone --depth=1 https://github.com/mercury233/irrlicht
-
name
:
Copy premake files
run
:
|
xcopy /E premake\* .
xcopy /E resource\* .
-
name
:
Use premake to generate Visual Studio solution
run
:
|
.\premake5.exe ${{ matrix.vs }} ${{ matrix.ygopro2 && '--server-pro2-support' || '' }}
-
name
:
Add msbuild to PATH
uses
:
microsoft/setup-msbuild@v2
-
name
:
Build solution
run
:
|
MSBuild.exe build\YGOPro.sln /m /p:Configuration=Release /p:Platform=${{ matrix.x64 && 'x64' || 'Win32' }}
-
name
:
Upload build artifacts
uses
:
actions/upload-artifact@v4
with
:
name
:
YGOPro-Server-${{ matrix.name }}
path
:
|
bin/release/x86/ygopro.exe
bin/release/x64/ygopro.exe
bin/release/x64/AI.Server.exe
build-linux
:
strategy
:
fail-fast
:
false
matrix
:
name
:
-
ubuntu-22
-
ubuntu-24
-
ubuntu-static-link
-
ubuntu-zip-support
include
:
-
name
:
ubuntu-22
os
:
ubuntu-22.04
premake-version
:
5.0.0-beta4
-
name
:
ubuntu-24
os
:
ubuntu-24.04
premake-version
:
5.0.0-beta6
-
name
:
ubuntu-static-link
os
:
ubuntu-22.04
premake-version
:
5.0.0-beta4
static-link
:
true
-
name
:
ubuntu-zip-support
os
:
ubuntu-22.04
premake-version
:
5.0.0-beta4
zip-support
:
true
runs-on
:
${{ matrix.os }}
steps
:
-
name
:
Checkout repository with submodules
uses
:
actions/checkout@v4
with
:
fetch-depth
:
1
submodules
:
true
-
name
:
Update submodules
run
:
|
cd ocgcore
git checkout master
git pull origin master
cd ..
# cd script
# git checkout master
# git pull origin master
# cd ..
-
name
:
Install dependencies
if
:
matrix.static-link !=
true
run
:
|
sudo apt-get update
sudo apt-get install -y libevent-dev libsqlite3-dev
-
name
:
Download premake
id
:
premake
uses
:
mercury233/action-cache-download-file@v1.0.0
with
:
url
:
https://github.com/premake/premake-core/releases/download/v${{ matrix.premake-version }}/premake-${{ matrix.premake-version }}-linux.tar.gz
filename
:
premake5.tar.gz
-
name
:
Extract premake
run
:
|
tar xf ${{ steps.premake.outputs.filepath }}
chmod +x ./premake5
-
name
:
Download libevent
if
:
matrix.static-link ==
true
id
:
libevent
uses
:
mercury233/action-cache-download-file@v1.0.0
with
:
url
:
https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
filename
:
libevent.tar.gz
-
name
:
Extract libevent
if
:
matrix.static-link ==
true
run
:
|
tar xf ${{ steps.libevent.outputs.filepath }}
mv libevent-2.1.12-stable event
-
name
:
Configure libevent
if
:
matrix.static-link ==
true
run
:
|
cd event
./configure --disable-openssl --enable-static=yes --enable-shared=no
sed -f make-event-config.sed < config.h > ./include/event2/event-config.h
cd ..
-
name
:
Download lua
id
:
lua
uses
:
mercury233/action-cache-download-file@v1.0.0
with
:
url
:
https://www.lua.org/ftp/lua-5.4.7.tar.gz
-
name
:
Extract lua
run
:
|
tar xf ${{ steps.lua.outputs.filepath }}
mv lua-5.4.7 lua
-
name
:
Download sqlite
if
:
matrix.static-link ==
true
id
:
sqlite
uses
:
mercury233/action-cache-download-file@v1.0.0
with
:
url
:
https://www.sqlite.org/2025/sqlite-amalgamation-3490100.zip
-
name
:
Extract sqlite
if
:
matrix.static-link ==
true
run
:
|
7z x ${{ steps.sqlite.outputs.filepath }}
mv sqlite-amalgamation-3490100 sqlite3
-
name
:
Download irrlicht
if
:
matrix.zip-support ==
true
run
:
|
git clone --depth=1 https://github.com/mercury233/irrlicht
-
name
:
Copy premake files
run
:
|
cp -r premake/* .
cp -r resource/* .
-
name
:
Use premake to generate make files
run
:
|
./premake5 gmake ${{ matrix.zip-support && '--server-zip-support' || '' }} \
${{ matrix.static-link && '--build-sqlite --build-event' || '' }}
-
name
:
Make
run
:
|
cd build
make -j 4 config=release
cd ..
-
name
:
Upload build artifacts
uses
:
actions/upload-artifact@v4
with
:
name
:
YGOPro-Server-${{ matrix.name }}
path
:
|
bin/release/ygopro
publish
:
needs
:
[
build-windows
]
if
:
github.event_name == 'push'
runs-on
:
ubuntu-latest
steps
:
-
name
:
Download build artifacts
uses
:
actions/download-artifact@v4
with
:
pattern
:
YGOPro-Server-windows-*
# the "windows" (no hyphen) artifact is ignored
merge-multiple
:
true
-
name
:
GitHub Release
uses
:
salix5/action-automatic-releases@node20
with
:
repo_token
:
"
${{
secrets.GITHUB_TOKEN
}}"
automatic_release_tag
:
"
server-latest"
prerelease
:
true
title
:
"
Development
Build"
files
:
|
x64/ygopro.exe
x64/AI.Server.exe
\ No newline at end of file
gframe/deck_manager.h
View file @
64c28dce
...
...
@@ -78,7 +78,7 @@ public:
int
TypeCount
(
std
::
vector
<
code_pointer
>
list
,
unsigned
int
ctype
);
bool
LoadDeckFromCode
(
Deck
&
deck
,
const
unsigned
char
*
code
,
int
len
);
int
SaveDeckToCode
(
Deck
&
deck
,
unsigned
char
*
code
);
#endif //
YGOPRO_SERVER_MODE
#endif //YGOPRO_SERVER_MODE
static
uint32_t
LoadDeck
(
Deck
&
deck
,
uint32_t
dbuf
[],
int
mainc
,
int
sidec
,
bool
is_packlist
=
false
);
static
bool
LoadSide
(
Deck
&
deck
,
uint32_t
dbuf
[],
int
mainc
,
int
sidec
);
...
...
@@ -94,7 +94,7 @@ public:
static
bool
RenameCategory
(
const
wchar_t
*
oldname
,
const
wchar_t
*
newname
);
static
bool
DeleteCategory
(
const
wchar_t
*
name
);
static
bool
SaveDeckArray
(
const
DeckArray
&
deck
,
const
wchar_t
*
name
);
#endif //
YGOPRO_SERVER_MODE
#endif //YGOPRO_SERVER_MODE
};
extern
DeckManager
deckManager
;
...
...
gframe/game.cpp
View file @
64c28dce
...
...
@@ -121,7 +121,6 @@ void Game::MainTestLoop(int code) {
NetServer
::
InitTestCard
(
code
);
}
#else //YGOPRO_SERVER_MODE
bool
Game
::
Initialize
()
{
initUtils
();
LoadConfig
();
...
...
@@ -889,6 +888,7 @@ bool Game::Initialize() {
ebStar
=
env
->
addEditBox
(
L""
,
irr
::
core
::
rect
<
irr
::
s32
>
(
60
,
60
+
100
/
6
,
100
,
80
+
100
/
6
),
true
,
wFilter
,
EDITBOX_INPUTS
);
editbox_list
.
push_back
(
ebStar
);
ebStar
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
editbox_list
.
push_back
(
ebStar
);
stScale
=
env
->
addStaticText
(
dataManager
.
GetSysString
(
1336
),
irr
::
core
::
rect
<
irr
::
s32
>
(
101
,
62
+
100
/
6
,
150
,
82
+
100
/
6
),
false
,
false
,
wFilter
);
ebScale
=
env
->
addEditBox
(
L""
,
irr
::
core
::
rect
<
irr
::
s32
>
(
150
,
60
+
100
/
6
,
195
,
80
+
100
/
6
),
true
,
wFilter
,
EDITBOX_INPUTS
);
ebScale
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
...
...
@@ -1292,9 +1292,11 @@ std::wstring Game::SetStaticText(irr::gui::IGUIStaticText* pControl, irr::u32 cW
void
Game
::
LoadExpansions
()
{
#ifdef SERVER_PRO2_SUPPORT
FileSystem
::
TraversalDir
(
L"./cdb"
,
[](
const
wchar_t
*
name
,
bool
isdir
)
{
if
(
isdir
)
return
;
wchar_t
fpath
[
1024
];
myswprintf
(
fpath
,
L"./cdb/%ls"
,
name
);
if
(
!
isdir
&&
IsExtension
(
name
,
L".cdb"
))
{
if
(
IsExtension
(
name
,
L".cdb"
))
{
dataManager
.
LoadDB
(
fpath
);
}
});
...
...
@@ -2086,7 +2088,7 @@ void Game::AddDebugMsg(const char* msg) {
NetServer
::
duel_mode
->
Chat
(
&
tmp_dp
,
(
unsigned
char
*
)
msgbuf_u16
,
(
len
+
1
)
*
sizeof
(
uint16_t
));
// send to chat log
#endif
#ifdef YGOPRO_SERVER_MODE
fprintf
(
stderr
,
"%s
\n
"
,
msg
);
std
::
fprintf
(
stderr
,
"%s
\n
"
,
msg
);
#else
if
(
enable_log
&
0x1
)
{
wchar_t
wbuf
[
1024
];
...
...
gframe/game.h
View file @
64c28dce
...
...
@@ -17,10 +17,10 @@
#include "deck_con.h"
#include "menu_handler.h"
#include "CGUISkinSystem/CGUISkinSystem.h"
#include <ctime>
#else
#include "netserver.h"
#endif //YGOPRO_SERVER_MODE
#include <ctime>
#include <unordered_map>
#include <vector>
#include <list>
...
...
gframe/premake5.lua
View file @
64c28dce
...
...
@@ -87,7 +87,7 @@ end
libdirs
{
SQLITE_LIB_DIR
}
end
if
USE_AUDIO
then
if
USE_AUDIO
and
not
SERVER_MODE
then
defines
{
"YGOPRO_USE_AUDIO"
}
if
AUDIO_LIB
==
"miniaudio"
then
defines
{
"YGOPRO_USE_MINIAUDIO"
}
...
...
@@ -137,8 +137,10 @@ end
filter
{}
end
end
if
not
SERVER_MODE
then
filter
"not system:windows"
links
{
"resolv"
}
end
filter
"system:macosx"
if
not
SERVER_MODE
then
openmp
"Off"
...
...
gframe/replay.cpp
View file @
64c28dce
...
...
@@ -48,7 +48,7 @@ void Replay::BeginRecord() {
char
tmppath
[
40
];
strftime
(
tmppath
,
40
,
"./replay/%Y-%m-%d %H-%M-%S %%u.yrp"
,
localedtime
);
char
path
[
40
];
s
td
::
s
printf
(
path
,
tmppath
,
server_port
);
sprintf
(
path
,
tmppath
,
server_port
);
fp
=
myfopen
(
path
,
"wb"
);
#else
fp
=
myfopen
(
"./replay/_LastReplay.yrp"
,
"wb"
);
...
...
premake/irrlicht/irrlicht.patch
0 → 100644
View file @
64c28dce
This diff is collapsed.
Click to expand it.
premake5.lua
View file @
64c28dce
...
...
@@ -40,7 +40,7 @@ newoption { trigger = "no-build-lua", category = "YGOPro - lua", description = "
newoption
{
trigger
=
"lua-include-dir"
,
category
=
"YGOPro - lua"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"lua-lib-dir"
,
category
=
"YGOPro - lua"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"lua-lib-name"
,
category
=
"YGOPro - lua"
,
description
=
""
,
value
=
"NAME"
,
default
=
LUA_LIB_NAME
}
newoption
{
trigger
=
"lua-deb"
,
category
=
"YGOPro - lua"
,
description
=
""
}
newoption
{
trigger
=
"lua-deb"
,
category
=
"YGOPro - lua"
,
description
=
"
Use Debian lua package
"
}
newoption
{
trigger
=
"build-event"
,
category
=
"YGOPro - event"
,
description
=
""
}
newoption
{
trigger
=
"no-build-event"
,
category
=
"YGOPro - event"
,
description
=
""
}
...
...
@@ -131,6 +131,14 @@ function GetParam(param)
return
_OPTIONS
[
param
]
or
os.getenv
(
string.upper
(
string.gsub
(
param
,
"-"
,
"_"
)))
end
function
FindHeaderWithSubDir
(
header
,
subdir
)
local
result
=
os
.
findheader
(
header
)
if
result
and
subdir
then
result
=
path
.
join
(
result
,
subdir
)
end
return
result
end
function
ApplyBoolean
(
param
)
if
GetParam
(
param
)
then
defines
{
"YGOPRO_"
..
string.upper
(
string.gsub
(
param
,
"-"
,
"_"
))
}
...
...
@@ -146,12 +154,24 @@ function ApplyNumber(param)
end
end
function
FindHeaderWithSubDir
(
header
,
subdir
)
local
result
=
os
.
findheader
(
header
)
if
result
and
subdir
then
result
=
path
.
join
(
result
,
subdir
)
end
return
result
if
GetParam
(
"server-mode"
)
then
SERVER_MODE
=
true
end
if
GetParam
(
"server-zip-support"
)
then
SERVER_ZIP_SUPPORT
=
true
end
if
GetParam
(
"server-pro2-support"
)
then
SERVER_PRO2_SUPPORT
=
true
SERVER_ZIP_SUPPORT
=
true
SERVER_TAG_SURRENDER_CONFIRM
=
true
end
if
GetParam
(
"server-pro3-support"
)
then
SERVER_PRO3_SUPPORT
=
true
SERVER_ZIP_SUPPORT
=
true
SERVER_TAG_SURRENDER_CONFIRM
=
true
end
if
GetParam
(
"server-tag-surrender-confirm"
)
then
SERVER_TAG_SURRENDER_CONFIRM
=
true
end
if
GetParam
(
"build-lua"
)
then
...
...
@@ -237,7 +257,6 @@ if USE_DXSDK and os.istarget("windows") then
end
end
USE_AUDIO
=
not
SERVER_MODE
and
not
GetParam
(
"no-audio"
)
if
GetParam
(
"no-audio"
)
then
USE_AUDIO
=
false
elseif
GetParam
(
"no-use-miniaudio"
)
then
...
...
@@ -256,7 +275,7 @@ elseif GetParam("use-irrklang") then
AUDIO_LIB
=
"irrklang"
end
if
USE_AUDIO
then
if
USE_AUDIO
and
not
SERVER_MODE
then
AUDIO_LIB
=
GetParam
(
"audio-lib"
)
or
AUDIO_LIB
if
AUDIO_LIB
==
"miniaudio"
then
if
GetParam
(
"miniaudio-support-opus-vorbis"
)
then
...
...
@@ -328,25 +347,6 @@ function spawn(cmd)
return
nil
end
end
if
GetParam
(
"server-mode"
)
then
SERVER_MODE
=
true
end
if
GetParam
(
"server-zip-support"
)
then
SERVER_ZIP_SUPPORT
=
true
end
if
GetParam
(
"server-pro2-support"
)
then
SERVER_PRO2_SUPPORT
=
true
SERVER_ZIP_SUPPORT
=
true
SERVER_TAG_SURRENDER_CONFIRM
=
true
end
if
GetParam
(
"server-pro3-support"
)
then
SERVER_PRO3_SUPPORT
=
true
SERVER_ZIP_SUPPORT
=
true
SERVER_TAG_SURRENDER_CONFIRM
=
true
end
if
GetParam
(
"server-tag-surrender-confirm"
)
then
SERVER_TAG_SURRENDER_CONFIRM
=
true
end
if
SERVER_MODE
then
BUILD_FREETYPE
=
false
...
...
@@ -582,7 +582,7 @@ end
if
BUILD_SQLITE
then
include
"sqlite3"
end
if
USE_AUDIO
then
if
USE_AUDIO
and
not
SERVER_MODE
then
if
AUDIO_LIB
==
"miniaudio"
then
include
"miniaudio"
end
...
...
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