نكهة DDRACE الخاصة بنا ، Mod teeworlds. انظر الموقع لمزيد من المعلومات.
تحدث مناقشات التطوير على #DDNet على Quakenet (WebChat) أو على Discord في قناة المطور.
يمكنك الحصول على إصدارات ثنائية على موقع DDNET أو العثور عليها على Steam أو التثبيت من المستودع.
إذا كنت ترغب في معرفة الرمز المصدر ، يمكنك التحقق من مقالة التطوير على الويكي.
لاستنساخ هذا المستودع مع التاريخ الكامل والمكتبات الخارجية (حوالي 350 ميجابايت):
git clone --recursive https://github.com/ddnet/ddnet
لاستنساخ هذا المستودع بالتاريخ الكامل عندما يكون لديك المكتبات اللازمة على نظامك بالفعل (~ 220 ميجابايت):
git clone https://github.com/ddnet/ddnet
لاستنساخ هذا المستودع مع التاريخ منذ أن نقلنا المكتبات إلى https://github.com/ddnet/ddnet-libs (حوالي 40 ميجابايت):
git clone --shallow-exclude=included-libs https://github.com/ddnet/ddnet
لاستنساخ المكتبات إذا كنت قد قمت سابقًا باستنساخ DDNet بدونها ، أو إذا كنت بحاجة إلى تاريخ DDNET-LIBS بدلاً من استنساخ ضحل:
git submodule update --init --recursive
يمكنك تثبيت المكتبات المطلوبة على نظامك ، وسوف يستخدم touch CMakeLists.txt و Cmake المكتبات على مستوى النظام افتراضيًا. يمكنك تثبيت جميع التبعيات المطلوبة و cmake على Debian أو Ubuntu مثل هذا:
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 18.04 ، لا تقوم بتثبيت 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
أو على قوس 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 ، يمكنك استخدام Homebrew لتثبيت تبعيات بناء مثل هذا:
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 وجميع X86 و X86_64) للراحة والبناء الرسمي. المكتبات المجمعة للبنيات الرسمية موجودة الآن في الجهاز الفرعي DDNET-LIBS. لاحظ أنه عندما تقوم بإنشاء وتطوير محليًا ، يجب عليك استخدام مدير حزمة النظام الخاص بك بشكل مثالي لتثبيت التبعيات ، بدلاً من الاعتماد على الجهاز الفرعي DDNET-LIBS ، والذي لا يحتوي على جميع التبعيات على أي حال (على سبيل المثال Openssl ، Vulkan). راجع القسم السابق لمعرفة كيفية الحصول على التبعيات. بدلاً من ذلك ، راجع وسيطات الإنشاء التالية لكيفية تعطيل بعض الميزات وتبعياتها ( -DVULKAN=OFF لن تتطلب Vulkan على سبيل المثال).
فيما يلي قائمة غير شاملة من وسيطات الإنشاء التي يمكن تمريرها إلى أداة سطر أوامر cmake من أجل تمكين أو تعطيل الخيارات في وقت البناء:
-dcmake_build_type = [الإصدار | debug | relwithdebinfo | minsizerel]
متغير CMake اختياري لتسديد نوع البناء. إذا لم يتم تعيينه ، فإن الإعدادات الافتراضية إلى "الإصدار" إذا لم يتم استخدام -DDEV=ON ، و "Debug" إذا تم استخدام -DDEV=ON . انظر CMAKE_BUILD_TYPE في وثائق CMake لمزيد من المعلومات.
-dprefer_bundled_libs = [on | Off]
سواء كنت تفضل المكتبات المجمعة على مكتبات النظام. سيجعل الإعداد إلى تشغيل DDNET استخدام مكتبات أطراف ثالثة في مجلد ddnet-libs ، وهو هدف git-submodule لمستودع DDNET-LIBS المذكور أعلاه-مفيد إذا لم يكن لديك تلك المكتبات مثبتة وتريد تجنب بنائها. إذا تم ضبطها على OFF ، فسيستخدم فقط المكتبات المجمعة عند عدم العثور على مكتبات النظام. القيمة الافتراضية مطفأة.
-dwebsockets = [on | Off]
ما إذا كان لتمكين دعم WebSocket للخادم. يتطلب الإعداد على مكتبة libwebsockets-dev مثبتة. القيمة الافتراضية مطفأة.
-dmysql = [on | Off]
ما إذا كان لتمكين دعم MySQL/MariaDB للخادم. يتطلب ما لا يقل عن MySQL 8.0 أو MariaDB 10.2. يتطلب الإعداد على مكتبة libmariadbclient-dev مثبتة ، والتي يتم توفيرها أيضًا كمكتبات مجمعة للمنصات المشتركة. القيمة الافتراضية مطفأة.
لاحظ أن مكتبات MySQL المجمعة قد لا تعمل بشكل صحيح على نظامك. إذا قمت بتشغيل مشكلات اتصال مع خادم MySQL ، على سبيل المثال ، يتصل كجذر أثناء اختيار مستخدم آخر ، تأكد من تثبيت مكتبات النظام الخاصة بك لعميل MySQL. تأكد من أن ملخص تكوين CMake يقول أنه وجد mysql libs لم يتم تجميعه (لا "استخدام libs المجمعة").
-DTEST_MYSQL = [ON | OFF]
ما إذا كان للاختبار دعم MySQL/MariaDB في الاختبارات القائمة على GTEST. القيمة الافتراضية مطفأة.
لاحظ أن هذا يتطلب قاعدة بيانات 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]
سواء لتمكين autoupdater. قد يرغب الحزمون في تعطيل هذا لحزمهم. القيمة الافتراضية قيد التشغيل لنظام التشغيل Windows و Linux.
-dclient = [on | Off]
سواء لتمكين تجميع العميل. إذا تم تعيين DDNET على OFF ، فلن يعتمد DDNET على Curl و Freetype و OGG و OPUS و OPUSFILE و SDL2. القيمة الافتراضية قيد التشغيل.
-dvideorEcorder = [on | Off]
ما إذا كنت تريد إضافة دعم تسجيل الفيديو باستخدام FFMPEG إلى العميل. القيمة الافتراضية قيد التشغيل.
-ddownload_gtest = [ON | OFF]
سواء لتنزيل وتجميع GTest. مفيد إذا لم يتم تثبيت GTEST ، وبالنسبة لمستخدمي Linux ، لا توجد حزمة مناسبة توفرها. القيمة الافتراضية مطفأة.
-ddev = [on | Off]
سواء كنت تتحسن من أجل التطوير ، فإن تسريع عملية التجميع قليلاً. إذا تم تمكينها ، لا تنشئ أشياء ضرورية للتغليف. الإعداد على ON سوف يعين cmake_build_type لتصحيح الافتراضي. القيمة الافتراضية مطفأة.
-dupnp = [on | Off]
ما إذا كان لتمكين دعم UPNP للخادم. تحتاج إلى تثبيت libminiupnpc-dev على Debian ، miniupnpc على Arch Linux. القيمة الافتراضية مطفأة.
-dvulkan = [على | OFF]
سواء لتمكين الواجهة الخلفية فولكان. على Windows ، تحتاج إلى تثبيت Fulkan SDK وتعيين علامة بيئة VULKAN_SDK وفقًا لذلك. القيمة الافتراضية قيد التشغيل لنظام التشغيل Windows X86_64 و Linux ، وإيقاف تشغيل Windows X86 و MacOS.
-gninja
استخدم نظام بناء النينجا بدلاً من صنعه. هذا يوازي تلقائيا البناء وهو أسرع بشكل عام. تجميع مع ninja بدلا من make . قم بتثبيت Ninja مع sudo apt install ninja-build على Debian ، sudo pacman -S --needed ninja على Arch Linux.
-dcmake_cxx_link_flags = [أعلام]
أعلام مخصصة لتعيين المترجم عند الارتباط.
-dexception_handling = [on | Off]
تمكين معالجة الاستثناء (يعمل فقط مع Windows حتى الآن ، يستخدم DrmingW هناك). القيمة الافتراضية مطفأة.
-dipo = [on | Off]
تمكين التحسينات المتداخلة ، والمعروفة أيضًا باسم تحسين وقت الارتباط (LTO). القيمة الافتراضية مطفأة.
-dfuse_ld = [OFF | LINKER]
رابط للاستخدام. القيمة الافتراضية متوقفة لتجربة العفن ، 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 لتشغيل الاختبارات ، يجب أن تستهدف run_tests مع Make: make run_tests
نستخدم Clang-Format 10 لتنسيق رمز C ++ لهذا المشروع. تنفيذ scripts/fix_style.py بعد تغيير الرمز لضمان تنسيق الكود بشكل صحيح ، فإن مدقق النمط المركزي Github سوف يفعل الشيء نفسه ويمنع تغييرك من تقديمه.
على Arch Linux ، يمكنك تثبيت Clang-Format 10 باستخدام حزمة Clang-Format-Static-Bin Aur. على 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-10يعد ASAN+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 ، يعمل بشكل أسرع ، ولكنه يتطلب برنامج التحويل البرمجي العالمي/Clang حديث.
بالنسبة لتجميع Memcheck من Valgrind ، قم بتجميع تصحيح الأخطاء العادية وتشغيله مع: valgrind --tool=memcheck ./DDNet توقع تباطؤ كبير.
قم بتنزيل وتثبيت بعض إصدار Microsoft Visual Studio (في وقت كتابة هذا التقرير ، MSVS Community 2022) مع دعم C ++ .
سيكون عليك تثبيت كل من Python 3 والصدأ كذلك.
تأكد من أن أدوات إنشاء MSVC ، وأدوات C ++ Cmake وأحدث إصدار من Windows SDK مناسب لإصدار Windows الخاص بك يتم تحديدهم في المثبت.
افتح الآن مجلد المشروع الخاص بك ، يجب على Visual Studio اكتشاف مشروعك وتكوينه تلقائيًا باستخدام CMake.
على أدواتك Hotbar بجوار زر "Run" الثلاثي ، يمكنك الآن تحديد ما تريد أن تبدأ (على سبيل المثال عميل اللعبة أو خادم اللعبة) وبنائه.
أولاً ، ستحتاج إلى تثبيت أدوات إنشاء MSVC ، Python 3 وكذلك Rust.
لتجميع وبناء DDNET على Windows ، استخدم IDE المفضل لديك إما باستخدام تكامل CMAKE (مثل رمز Visual Studio) ، أو بواسطة تم إهماله باستخدام Cmake واجهة المستخدم الرسومية.
قم بتكوين CMake لاستخدام أدوات إنشاء MSVC المناسبة لنظامك من خلال تعليمات IDE الخاصة بك.
إذا كنت تستخدم Visual Studio Code ، فيمكنك استخدام ملحق Cmake Tools لتكوين المشروع وإنشائه.
يمكنك بعد ذلك فتح مجلد المشروع في VSC والضغط على Ctrl+Shift+P لفتح لوحة الأوامر ، ثم ابحث عن CMake: Configure
سيؤدي ذلك إلى فتح موجه لك لتحديد مجموعة ، واختر إصدار Visual Studio وحفظه. يمكنك الآن استخدام واجهة المستخدم الرسومية (أسفل اليسار) لتجميع وإنشاء مشروعك.
قم بتثبيت أجهزة MingW المتقاطعة من النموذج i686-w64-mingw32-gcc (32 بت) أو x86_64-w64-mingw32-gcc (64 بت). ربما هذا هو الجزء الصعب. ؛)
ثم أضف -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/mingw64.toolchain إلى سطر الأوامر الأولي cmake.
قم بتثبيت emscripten المتقاطع (مثل eg sudo apt install emscripten ) على توزيعة Linux الحديثة.
إذا كنت بحاجة إلى تجميع ddnet-libs for webassembly ، فما عليك سوى الاتصال
# <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 في دليل البناء الخاص بك.
لاختبار الرمز المترجم محليًا ، ما عليك سوى استخدام emrun --browser firefox DDNet.html
لاستضافة ملف .html Copy All .data ، .html ، .js ، .wasm files إلى خادم الويب. (انظر/Other/emscripten/minimal.html للحصول على حد أدنى من مثال HTML)
ثم تمكين سياسات الأصل عبر. مثال على Apache2 على Distros المستندة إلى 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 the cmake stomer.
قم بتثبيت dmg و hfsplus من LIBDMG-HFSPLUS و newfs_hfs من DISKDEV_CMDS لإلغاء تأمين هدف package_dmg الذي يخرج صورة قرص MACOS.
$ 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.cfgديبيان/أوبونتو
$ apt-get install ddnet
ماكوس
$ brew install --cask ddnetفيدورا
$ dnf install ddnetقوس لينكس
$ 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 . من المحتمل أن يكون هناك واجهة مستخدم جيدة للنوافذ أيضًا. بدلاً من ذلك ، استخدم واجهة مستخدم GitHub ، انقر فوق "إلقاء اللوم" في أي طريقة عرض ملف.
بالنسبة لـ tig ، استخدم tig blame path/to/file.cpp لفتح عرض اللوم ، يمكنك التنقل باستخدام مفاتيح Arrow أو KJ ، اضغط على COMMA للانتقال إلى المراجعة السابقة للخط الحالي ، Q للاستقالة.
عندها فقط ، يمكنك أيضًا إعداد GIT لتجاهل مراجعات التنسيق المحددة:
git config blame.ignoreRevsFile formatting-revs.txtانسخ ملفات الكشف عن الملفات والبناء إلى مجلد Config الخاص بك:
# vim
cp -R other/vim/ * ~ /.vim/
# neovim
cp -R other/vim/ * ~ /.config/nvim/