我们自己的ddrace风味,一个Teeworlds mod。请参阅网站以获取更多信息。
开发讨论发生在Quakenet(Webchat)上的#DDNET上或开发人员频道中的Discord上进行。
您可以在DDNET网站上获取二进制版本,在Steam上找到它或从存储库中安装。
如果您想了解源代码,可以查看Wiki上的开发文章。
克隆这个具有完整历史记录和外部库的存储库(〜350 MB):
git clone --recursive https://github.com/ddnet/ddnet
当您已经在系统上拥有必要的库时(〜220 MB),请克隆该存储库,具有完整的历史记录:
git clone https://github.com/ddnet/ddnet
自从我们将图书馆移至https://github.com/ddnet/ddnet-libs(〜40 MB)以来,请使用历史库克隆这个存储库:
git clone --shallow-exclude=included-libs https://github.com/ddnet/ddnet
如果您以前没有它们克隆的DDNET,则克隆库,或者如果您需要DDNET-LIBS历史记录而不是浅层克隆:
git submodule update --init --recursive
您可以在系统上安装所需的库, touch CMakeLists.txt和cmake将默认使用系统范围的库。您可以在Debian或Ubuntu上安装所有必需的依赖项和CMAKE,例如:
sudo apt install build-essential cargo cmake git glslang-tools google-mock libavcodec-extra libavdevice-dev libavfilter-dev libavformat-dev libavutil-dev libcurl4-openssl-dev libfreetype6-dev libglew-dev libnotify-dev libogg-dev libopus-dev libopusfile-dev libpng-dev libsdl2-dev libsqlite3-dev libssl-dev libvulkan-dev libwavpack-dev libx264-dev python3 rustc spirv-tools
在像Ubuntu这样的较旧的发行版中,请不要安装google-mock ,而是设置-DDOWNLOAD_GTEST=ON构建时以获取最新的GTEST/GMOCK版本。
在较旧的发行版中, rustc版本可能太旧了,无法获得最新的生锈编译器,您可以将Rustup与稳定的通道一起使用,或者尝试rustc-mozilla包装。
或在Centos上,Redhat和Almalinux这样:
sudo yum install cargo cmake ffmpeg-devel freetype-devel gcc gcc-c++ git glew-devel glslang gmock-devel gtest-devel libcurl-devel libnotify-devel libogg-devel libpng-devel libx264-devel make openssl-devel opus-devel opusfile-devel python2 rust SDL2-devel spirv-tools sqlite-devel vulkan-devel wavpack-devel
或像这样的软呢帽:
sudo dnf install cargo cmake ffmpeg-devel freetype-devel gcc gcc-c++ git glew-devel glslang gmock-devel gtest-devel libcurl-devel libnotify-devel libogg-devel libpng-devel make openssl-devel opus-devel opusfile-devel python2 SDL2-devel spirv-tools sqlite-devel vulkan-devel wavpack-devel x264-devel
或这样的Arch Linux上:
sudo pacman -S --needed base-devel cmake curl ffmpeg freetype2 git glew glslang gmock libnotify libpng opusfile python rust sdl2 spirv-tools sqlite vulkan-headers vulkan-icd-loader wavpack x264
或这样的Gentoo:
emerge --ask dev-db/sqlite dev-lang/rust-bin dev-libs/glib dev-libs/openssl dev-util/glslang dev-util/spirv-headers dev-util/spirv-tools media-libs/freetype media-libs/glew media-libs/libglvnd media-libs/libogg media-libs/libpng media-libs/libsdl2 media-libs/libsdl2[vulkan] media-libs/opus media-libs/opusfile media-libs/pnglite media-libs/vulkan-loader[layers] media-sound/wavpack media-video/ffmpeg net-misc/curl x11-libs/gdk-pixbuf x11-libs/libnotify
在MacOS上,您可以使用自制的构建依赖项来安装这样的依赖性:
brew install cmake ffmpeg freetype glew glslang googletest libpng molten-vk opusfile rust SDL2 spirv-tools vulkan-headers wavpack x264
如果您不想使用系统库,则可以将-DPREFER_BUNDLED_LIBS=ON参数传递给cmake。
要自己编译DDNET,请在源根中执行以下命令:
mkdir build
cd build
cmake ..
make -j$(nproc)
将汇编的线程数传递给make -j 。 $(nproc)在这种情况下,返回处理单元的数量。
DDNET需要其他库,其中一些库是为最常见的平台(Windows,Mac,Linux,All X86和X86_64)捆绑在一起的,并出于官方构建。现在的官方版本捆绑图书馆已在DDNET-LIBS子模块中。请注意,当您在本地构建和开发时,理想情况下应该使用系统的软件包管理器来安装依赖项,而不是依靠DDNet-Libs subpodule,而DDNet-Libs submodule不包含所有依赖项(例如OpenSSL,Vulkan)。有关如何获得依赖项,请参见上一节。或者,请参阅以下构建参数,以了解如何禁用某些功能及其依赖项( -DVULKAN=OFF不需要Vulkan)。
以下是可以传递给cmake命令行工具的构建参数的非排量列表,以便在构建时间中启用或禁用选项:
-dcmake_build_type = [释放| debug | relwithdebinfo | minsizerel]
用于设置构建类型的可选CMAKE变量。如果未设置,则不使用-DDEV=ON默认为“ repution”,而使用-DDEV=ON “ debug”。有关更多信息,请参见CMAKE文档中的CMAKE_BUILD_TYPE 。
-dprefer_bundled_libs = [on | off]
是否更喜欢捆绑的库而不是系统库。设置为ON将使DDNET使用ddnet-libs文件夹中可用的第三方库,该文件夹是上面提到的DDNET-LIBS存储库的Git-SubModule目标 - 如果您安装了这些库并希望避免构建它们,则非常有用。如果设置为关闭,则只会在找不到系统库时使用捆绑的库。默认值关闭。
-dwebsockets = [on | off]
是否启用Websocket对服务器的支持。设置需要安装libwebsockets-dev库。默认值关闭。
-dmysql = [on | off]
是否启用MySQL/MariadB对服务器的支持。至少需要MySQL 8.0或Mariadb 10.2。设置需要安装的libmariadbclient-dev库,该库也作为通用平台的捆绑库提供。默认值关闭。
请注意,捆绑的MySQL库可能无法在您的系统上正常工作。如果您遇到了MySQL Server的连接问题,例如,它在选择另一个用户时将其作为root连接,请确保为MySQL客户端安装系统库。确保CMAKE配置摘要说它发现了没有捆绑的mysql libs(没有“使用捆绑的libs”)。
-dtest_mysql = [on | off]
是否在基于GTEST的测试中测试MySQL/MariadB支持。默认值关闭。
请注意,这需要使用此设置运行Localhost上的MySQL/MariadB数据库:
CREATE DATABASE ddnet;
CREATE USER 'ddnet'@'localhost' IDENTIFIED BY 'thebestpassword';
GRANT ALL PRIVILEGES ON ddnet.* TO 'ddnet'@'localhost';
FLUSH PRIVILEGES;
-dautoupdate = [on | off]
是否启用自动化器。包装商可能希望将其用于包装。 Windows和Linux的默认值将打开。
-dclient = [on | off]
是否启用客户汇编。如果设置为关闭,DDNET将不取决于卷曲,freetype,ogg,opus,opusfile和sdl2。默认值已打开。
-dvideorecorder = [on | off]
是否将使用FFMPEG的视频记录支持添加到客户端。默认值已打开。
-ddownload_gtest = [on | off]
是否下载和编译GTEST。如果未安装GTEST,并且对于Linux用户而言,没有合适的软件包提供。默认值关闭。
-ddev = [on | off]
是否为开发优化,加快汇编过程的加速。如果启用,请勿生成包装所需的东西。设置为ON Will将将CMAKE_BUILD_TYPE设置为默认情况下调试。默认值关闭。
-dupnp = [on | off]
是否启用对服务器的UPNP支持。您需要在Arch Linux上的miniupnpc上安装libminiupnpc-dev 。默认值关闭。
-dvulkan = [on | off]
是否启用Vulkan后端。在Windows上,您需要安装Vulkan SDK并相应地设置VULKAN_SDK环境标志。 Windows X86_64和Linux的默认值以及Windows X86和MacOS的OFF。
-gninja
使用忍者构建系统而不是制造系统。这会自动使构建平行,并且通常更快。用ninja而不是make编译。使用Sudo Apt安装忍者,在Arch Linux上的sudo pacman -S --needed ninja上sudo apt install ninja-build 。
-dcmake_cxx_link_flags = [flags]
链接时为编译器设置的自定义标志。
-dexception_handling = [on | off]
启用异常处理(目前仅适用于Windows,在那里使用Drmingw)。默认值关闭。
-dipo = [on | off]
启用脑外部优化,也称为链接时间优化(LTO)。默认值关闭。
-dfuse_ld = [off |链接]
使用的链接器。默认值未能尝试模具,lld,金。
-dsecurity_compiler_flags = [on | off]
是否设置与安全相关的编译器标志,例如-D_FORTIFY_SOURCE=2和-fstack-protector-all 。默认值已打开。
为了运行测试,您需要安装以下库libgtest-dev 。
该库未编译,因此您必须这样做:
sudo apt install libgtest-dev
cd /usr/src/gtest
sudo cmake CMakeLists.txt
sudo make -j $( nproc )
# copy or symlink libgtest.a and libgtest_main.a to your /usr/lib folder
sudo cp lib/ * .a /usr/lib make run_tests运行run_tests
我们使用Clang-Format 10格式化该项目的C ++代码。执行scripts/fix_style.py更改代码以确保正确格式化代码后,GitHub Central样式检查器将执行相同的操作并防止您的更改提交。
在Arch Linux上,您可以使用clang-Format静态式AUR软件包安装Clang-Format 10。在MacOS上,您可以使用自制龙头安装Clang-Format 10:
brew install r-lib/taps/clang-format@10
sudo ln -s /opt/homebrew/Cellar/clang-format@10/10.0.1/bin/clang-format /opt/homebrew/bin/clang-format-10ASAN+UBSAN和MEMCHECK更容易找到代码问题。如果可以的话,请使用它们来测试您的更改。
对于Asan+Ubsan编译:
CC=clang CXX=clang++ CXXFLAGS= " -fsanitize=address,undefined -fsanitize-recover=address,undefined -fno-omit-frame-pointer " CFLAGS= " -fsanitize=address,undefined -fsanitize-recover=address,undefined -fno-omit-frame-pointer " cmake -DCMAKE_BUILD_TYPE=Debug .
make并与:
UBSAN_OPTIONS=suppressions=./ubsan.supp:log_path=./SAN:print_stacktrace=1:halt_on_errors=0 ASAN_OPTIONS=log_path=./SAN:print_stacktrace=1:check_initialization_order=1:detect_leaks=1:halt_on_errors=0 LSAN_OPTIONS=suppressions=./lsan.supp ./DDNet检查SAN。*之后文件。这比Memcheck发现更多的问题,运行速度更快,但需要现代的GCC/Clang编译器。
对于Valgrind的Memcheck,编译了正常的调试构建和运行: valgrind --tool=memcheck ./DDNet期望很大的放慢速度。
通过C ++支持下载并安装某些版本的Microsoft Visual Studio(MSVS Community 2022)。
您还必须同时安装Python 3和Rust。
确保在安装程序中选择了MSVC构建工具,C ++ Cmake-Tools和适合您Windows版本的最新Windows SDK版本。
现在打开您的项目文件夹,Visual Studio应使用CMAKE自动检测和配置您的项目。
在三角“运行”按钮旁边的Hotbar上,您现在可以选择要启动的内容(例如游戏 - 客户或游戏服务器)并构建它。
首先,您需要安装MSVC构建工具,即Python 3和Rust。
要在Windows上编译和构建DDNET,请使用CMAKE集成(例如Visual Studio代码)或通过弃用使用CMAKE GUI。
配置CMAKE使用IDE的说明使用适合您系统的MSVC构建工具。
如果您使用的是Visual Studio代码,则可以使用CMAKE工具扩展名配置和构建项目。
然后,您可以在VSC中打开项目文件夹,然后按Ctrl+Shift+P打开命令调色板,然后搜索CMake: Configure
这将为您选择套件,选择Visual Studio版本并保存它的提示。现在,您可以使用GUI(左下)来编译和构建项目。
安装i686-w64-mingw32-gcc (32位)或x86_64-w64-mingw32-gcc (64位)的MINGW跨编译器。这可能是困难的部分。 )
然后,添加-DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/mingw64.toolchain到初始cmake命令行。
在现代Linux发行版上安装Emscripten跨编译器(例如sudo apt install emscripten )。
如果您需要编译WebAssembly的DDNET LIBS,只需致电
# <directory to build in> should be a directory outside of the project's source directory
scripts/compile_libs/gen_libs.sh < directory to build in > webasm来自项目的源目录。它将自动创建一个称为ddnet-libs的目录。然后,您可以手动将此目录与DDNET源目录中的该目录合并。
然后运行emcmake cmake .. -DVIDEORECORDER=OFF -DVULKAN=OFF -DSERVER=OFF -DTOOLS=OFF -DPREFER_BUNDLED_LIBS=ON on build Directory。
要在本地测试编译的代码,只需使用emrun --browser firefox DDNet.html
要托管编译的.html文件复制所有.data , .html , .js , .wasm文件到Web服务器。 (有关最小HTML示例
然后启用交叉起源政策。 Apache2在Debian的发行版中的示例:
sudo a2enmod header
# edit the apache2 config to allow .htaccess files
sudo nano /etc/apache2/apache2.conf
# set AllowOverride to All for your directory
# then create a .htaccess file on the web server (where the .html is)
# and add these lines
Header add Cross-Origin-Embedder-Policy " require-corp "
Header add Cross-Origin-Opener-Policy " same-origin "
# now restart apache2
sudo service apache2 restart安装OSXCROSS,然后添加-DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/darwin.toolchain和-DCMAKE_OSX_SYSROOT=/path/to/osxcross/target/SDK/MacOSX10.11.sdk/ to Initial cmake命令行。
从libdmg-hfsplus和newfs_hfs安装dmg和hfsplus从diskdev_cmds安装newfs_hfs,以解锁输出MACOS磁盘映像的package_dmg目标。
$ wget https://ddnet.org/stats/ddnet-sql.zip
$ unzip ddnet-sql.zip
$ yaourt -S mariadb mysql-connector-c++
$ mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
$ systemctl start mariadb
$ mysqladmin -u root password ' PW '
$ mysql -u root -p ' PW '
MariaDB [(none)] > create database teeworlds ; create user ' teeworlds ' @ ' localhost ' identified by ' PW2 ' ; grant all privileges on teeworlds. * to ' teeworlds ' @ ' localhost ' ; flush privileges ;
# this takes a while, you can remove the KEYs in record_race.sql to trade performance in queries
$ mysql -u teeworlds -p ' PW2 ' teeworlds < ddnet-sql/record_ * .sql
$ cat mine.cfg
sv_use_sql 1
add_sqlserver r teeworlds record teeworlds " PW2 " " localhost " " 3306 "
add_sqlserver w teeworlds record teeworlds " PW2 " " localhost " " 3306 "
$ mkdir build
$ cd build
$ cmake -DMYSQL=ON ..
$ make -j $( nproc )
$ ./DDNet-Server -f mine.cfgDebian/Ubuntu
$ apt-get install ddnet
macos
$ brew install --cask ddnet软呢帽
$ dnf install ddnetArch Linux
$ yay -S ddnetfreebsd
$ pkg install DDNetWindows(Scoop)
scoop bucket add games
scoop install games/ddnet
DDNET可在Phoronix测试套件中使用。如果您安装了PTS,则可以像这样轻松在自己的系统上基准DDNET:
$ phoronix-test-suite benchmark ddnet首先,使用比git blame自己更好的工具,例如tig 。 Windows可能也有一个很好的UI。或者,使用GitHub UI,在任何文件视图中单击“责备”。
对于tig ,请使用tig blame path/to/file.cpp打开责备视图,您可以使用箭头键或KJ导航,按逗号,访问当前行的上一个修订版,q退出。
只有这样,您还可以设置git来忽略特定格式的修订:
git config blame.ignoreRevsFile formatting-revs.txt将文件检测和语法文件复制到您的VIM配置文件夹:
# vim
cp -R other/vim/ * ~ /.vim/
# neovim
cp -R other/vim/ * ~ /.config/nvim/