mirror of
https://github.com/ddnet/ddnet.git
synced 2024-09-19 09:12:19 +00:00
Compare commits
259 commits
faa27d6c4b
...
7a4a2c51cd
Author | SHA1 | Date | |
---|---|---|---|
Chiller Dragon | 7a4a2c51cd | ||
ChillerDragon | 8fc437bea6 | ||
ChillerDragon | 732798444c | ||
fc058fa432 | |||
3b22a3e02f | |||
ed1ef4e694 | |||
9103332e36 | |||
0948a53648 | |||
bbd34c9452 | |||
e4282f100a | |||
eb9e73f68b | |||
e0a95d14a6 | |||
fa28ed77a6 | |||
5335813629 | |||
796fa4275f | |||
5b0163d069 | |||
c9e7e0f01b | |||
cf107a81a1 | |||
4e2d7e2104 | |||
ChillerDragon | 74bb327799 | ||
22d699fbc0 | |||
51c0b4dafc | |||
5f57ba9130 | |||
69fa7ea18f | |||
41c40fb27f | |||
0664f12265 | |||
8b5da71e89 | |||
ChillerDragon | d0eebee44d | ||
1cbdb9d2f0 | |||
8f79d4252c | |||
7abad2b8a4 | |||
c64b744ad3 | |||
f599449f31 | |||
226d948acc | |||
58f14edb95 | |||
a3fc627285 | |||
f79784bec7 | |||
ccaddd2016 | |||
7a60f4a5e7 | |||
ChillerDragon | e9187cc352 | ||
ChillerDragon | 2cf6622cd7 | ||
ChillerDragon | 19a888734c | ||
ChillerDragon | 44fc871463 | ||
157498799e | |||
a017190753 | |||
e17da385dd | |||
bfc6a15df9 | |||
ChillerDragon | 2a26c1c5d6 | ||
624ac85e8c | |||
d9b031c887 | |||
403c4a40da | |||
0e2960206a | |||
a8616ef2ab | |||
ChillerDragon | 8b304cab23 | ||
9e88ca5846 | |||
ChillerDragon | 1b8e402a65 | ||
30acedaac5 | |||
bb3c76a290 | |||
341e3f6ec7 | |||
d4f72803be | |||
f2d5b83f84 | |||
fcf810cae1 | |||
50b0af1614 | |||
b5c11bc860 | |||
7951136fab | |||
ChillerDragon | 82ca4bc335 | ||
ChillerDragon | 5986ee03b9 | ||
ChillerDragon | e1cb617c42 | ||
ChillerDragon | daad41fbd7 | ||
ChillerDragon | ed49fef917 | ||
ChillerDragon | e20250cd65 | ||
36f0bcc509 | |||
dd82cf83a2 | |||
8ca93d451b | |||
871f97a283 | |||
ChillerDragon | 2c77aeef2b | ||
ChillerDragon | f053a29463 | ||
ChillerDragon | f8a4e7dbab | ||
ChillerDragon | f44def1cdd | ||
bb45db8ad3 | |||
468900acfe | |||
6ab597a465 | |||
a83248b9ec | |||
383bef93b9 | |||
f0449befa5 | |||
ChillerDragon | c02a2ed1d6 | ||
d452bcda8f | |||
60688bf80e | |||
29a205a6d9 | |||
c10b466a40 | |||
914867d980 | |||
d40cc86bfa | |||
f754054874 | |||
05970178b2 | |||
3d5b533816 | |||
cdc5b9922a | |||
528a38265e | |||
099ec44eac | |||
b641fdb8fd | |||
e54fb30e72 | |||
325f908f09 | |||
870cff3da2 | |||
4ea9ed9b2b | |||
98b0f50111 | |||
fe35322bb0 | |||
41cd82c2d3 | |||
21375f0e1d | |||
55891afc50 | |||
1d65fff3ff | |||
edcc3245f4 | |||
88739c5345 | |||
da4bc09429 | |||
ChillerDragon | 43dee5d4c5 | ||
ba4f0368a4 | |||
5cf0e5e997 | |||
218ce1f53f | |||
91ae4ca120 | |||
41fee0bb3f | |||
cc1dc405fe | |||
1dd56f1a90 | |||
ecec1ff2a7 | |||
5a66dc05f4 | |||
7df1b24491 | |||
31ee6abe82 | |||
d78032e9a6 | |||
3d6820ab68 | |||
8b7e5dee4d | |||
76c44cfb40 | |||
f407adc61c | |||
9fbbf5cde7 | |||
dc0d4b3b76 | |||
9a7bc70f76 | |||
0e016f9732 | |||
cb57aa82bf | |||
14f1b36dd1 | |||
906f75c13a | |||
7c8f9b43ac | |||
c4ff37d9d9 | |||
3a2cecb8b4 | |||
358cd20183 | |||
9d920b3575 | |||
5fb059ad92 | |||
4b8dcc3315 | |||
b30b493ab8 | |||
29f3323735 | |||
7c62b457b7 | |||
8b27a6e852 | |||
028bd148f3 | |||
6e3b0910e1 | |||
9fd4adfb21 | |||
d44c68a8a5 | |||
8f6d5d453e | |||
7ee1dac08b | |||
2fc3f81725 | |||
8e16113428 | |||
7628783e95 | |||
59dd8735bf | |||
0b27a47553 | |||
d8e82bbb1d | |||
77790f677e | |||
cd3e85f532 | |||
10376fa4ff | |||
728bb9777f | |||
83c3b4ea89 | |||
6c0e42987e | |||
be2e49e1f6 | |||
4786419fee | |||
24356bd029 | |||
e46d2375ba | |||
9b90588ccc | |||
e9a9261d1e | |||
ed9720f1be | |||
3bda76ff1f | |||
93675799e8 | |||
3cf3e2339d | |||
7ee735a274 | |||
5dff5e9e81 | |||
f897af8dbb | |||
96beaf2eca | |||
b1914e972a | |||
b9a794121a | |||
a01e5e7151 | |||
37fd57ccb8 | |||
ChillerDragon | 56b56ef2b9 | ||
0013615da1 | |||
4d09332b83 | |||
e81a561702 | |||
a3c8949d40 | |||
0ba6d998a4 | |||
ChillerDragon | 804a91ced0 | ||
5210d77f92 | |||
f796309cc8 | |||
fe9c2d305f | |||
499ad48ee6 | |||
4dc7346b4f | |||
992f235f05 | |||
ce0e52851c | |||
abf8fac568 | |||
01d2b3e3bc | |||
db9b5f5b61 | |||
ChillerDragon | dcd1fefa7e | ||
ChillerDragon | 00b9eab2ce | ||
1ebfe269aa | |||
ChillerDragon | 99ae72c143 | ||
54271aef2a | |||
839c511af4 | |||
580b2690a0 | |||
87aa251d73 | |||
238e7495d2 | |||
30f49201e5 | |||
ChillerDragon | ef2db30bef | ||
ChillerDragon | 15713d7859 | ||
1dd2f3a4af | |||
40fbc2140b | |||
4fb3027bd7 | |||
89cc2d46a8 | |||
288f999e9d | |||
ChillerDragon | 66e3f619c7 | ||
474dae5ead | |||
ddd13ba4fc | |||
8dd2b6e9e6 | |||
b9ab23405e | |||
5c2ab4cb92 | |||
2eff7ecb61 | |||
96e946d504 | |||
ddfd4dbfb1 | |||
21807c15bd | |||
ChillerDragon | 789fee99df | ||
f569981eb5 | |||
1758bfc7f9 | |||
e008f40a19 | |||
830aff899a | |||
b05ffeae3b | |||
9fe2203a24 | |||
ChillerDragon | 99fe6b09ed | ||
ChillerDragon | fa1ee98f1e | ||
ChillerDragon | 6121be1bf1 | ||
ChillerDragon | 64c7ab677d | ||
ChillerDragon | 8d7c99fb96 | ||
ChillerDragon | e8fbb440b9 | ||
b16bc401a8 | |||
ChillerDragon | 31cc4c24bf | ||
ChillerDragon | 933a43bd0f | ||
ChillerDragon | 7cffdf40b6 | ||
f057898ce0 | |||
ChillerDragon | fac02650f1 | ||
aaf69542b6 | |||
8d024be37c | |||
Chiller Dragon | 87aa664899 | ||
6a4a70fddd | |||
de206b27d1 | |||
ChillerDragon | 1f0467b545 | ||
ChillerDragon | 04c141828f | ||
ChillerDragon | a77895711b | ||
ChillerDragon | 81de29565d | ||
6a5a0436bf | |||
595f537625 | |||
ChillerDragon | 7fa2306138 | ||
a013372be4 |
2
.github/workflows/style.yml
vendored
2
.github/workflows/style.yml
vendored
|
@ -40,6 +40,8 @@ jobs:
|
||||||
run: scripts/fix_style.py --dry-run
|
run: scripts/fix_style.py --dry-run
|
||||||
- name: Check header guards
|
- name: Check header guards
|
||||||
run: scripts/check_header_guards.py
|
run: scripts/check_header_guards.py
|
||||||
|
- name: Validate Languages
|
||||||
|
run: scripts/languages/validate.py
|
||||||
- name: Check languages
|
- name: Check languages
|
||||||
run: scripts/languages/update_all.py
|
run: scripts/languages/update_all.py
|
||||||
- name: Check dilated images
|
- name: Check dilated images
|
||||||
|
|
|
@ -40,7 +40,9 @@ else()
|
||||||
set(TARGET_BITS "64")
|
set(TARGET_BITS "64")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "arm" OR "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "aarch64")
|
if("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "arm"
|
||||||
|
OR "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "aarch64"
|
||||||
|
OR "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "ARM64")
|
||||||
if(TARGET_BITS STREQUAL "32")
|
if(TARGET_BITS STREQUAL "32")
|
||||||
set(TARGET_CPU_ARCHITECTURE "arm")
|
set(TARGET_CPU_ARCHITECTURE "arm")
|
||||||
else()
|
else()
|
||||||
|
@ -1391,6 +1393,7 @@ set(EXPECTED_DATA
|
||||||
editor/audio_source.png
|
editor/audio_source.png
|
||||||
editor/automap/basic_freeze.rules
|
editor/automap/basic_freeze.rules
|
||||||
editor/automap/ddmax_freeze.rules
|
editor/automap/ddmax_freeze.rules
|
||||||
|
editor/automap/ddnet_grass.rules
|
||||||
editor/automap/ddnet_tiles.rules
|
editor/automap/ddnet_tiles.rules
|
||||||
editor/automap/ddnet_walls.rules
|
editor/automap/ddnet_walls.rules
|
||||||
editor/automap/desert_main.rules
|
editor/automap/desert_main.rules
|
||||||
|
@ -1399,7 +1402,6 @@ set(EXPECTED_DATA
|
||||||
editor/automap/generic_unhookable.rules
|
editor/automap/generic_unhookable.rules
|
||||||
editor/automap/generic_unhookable_0.7.rules
|
editor/automap/generic_unhookable_0.7.rules
|
||||||
editor/automap/grass_main.rules
|
editor/automap/grass_main.rules
|
||||||
editor/automap/grass_main_0.7.rules
|
|
||||||
editor/automap/jungle_main.rules
|
editor/automap/jungle_main.rules
|
||||||
editor/automap/jungle_midground.rules
|
editor/automap/jungle_midground.rules
|
||||||
editor/automap/round_tiles.rules
|
editor/automap/round_tiles.rules
|
||||||
|
@ -1487,6 +1489,7 @@ set(EXPECTED_DATA
|
||||||
mapres/bg_cloud2.png
|
mapres/bg_cloud2.png
|
||||||
mapres/bg_cloud3.png
|
mapres/bg_cloud3.png
|
||||||
mapres/ddmax_freeze.png
|
mapres/ddmax_freeze.png
|
||||||
|
mapres/ddnet_grass.png
|
||||||
mapres/ddnet_start.png
|
mapres/ddnet_start.png
|
||||||
mapres/ddnet_tiles.png
|
mapres/ddnet_tiles.png
|
||||||
mapres/ddnet_walls.png
|
mapres/ddnet_walls.png
|
||||||
|
@ -2126,6 +2129,7 @@ set_src(ENGINE_SHARED GLOB_RECURSE src/engine/shared
|
||||||
teehistorian_ex.cpp
|
teehistorian_ex.cpp
|
||||||
teehistorian_ex.h
|
teehistorian_ex.h
|
||||||
teehistorian_ex_chunks.h
|
teehistorian_ex_chunks.h
|
||||||
|
translation_context.cpp
|
||||||
translation_context.h
|
translation_context.h
|
||||||
uuid_manager.cpp
|
uuid_manager.cpp
|
||||||
uuid_manager.h
|
uuid_manager.h
|
||||||
|
@ -2458,6 +2462,7 @@ if(CLIENT)
|
||||||
editor_trackers.cpp
|
editor_trackers.cpp
|
||||||
editor_trackers.h
|
editor_trackers.h
|
||||||
editor_ui.h
|
editor_ui.h
|
||||||
|
enums.h
|
||||||
explanations.cpp
|
explanations.cpp
|
||||||
layer_selector.cpp
|
layer_selector.cpp
|
||||||
layer_selector.h
|
layer_selector.h
|
||||||
|
@ -2496,8 +2501,13 @@ if(CLIENT)
|
||||||
mapitems/sound.cpp
|
mapitems/sound.cpp
|
||||||
mapitems/sound.h
|
mapitems/sound.h
|
||||||
popups.cpp
|
popups.cpp
|
||||||
|
prompt.cpp
|
||||||
|
prompt.h
|
||||||
proof_mode.cpp
|
proof_mode.cpp
|
||||||
proof_mode.h
|
proof_mode.h
|
||||||
|
quick_action.h
|
||||||
|
quick_actions.cpp
|
||||||
|
quick_actions.h
|
||||||
smooth_value.cpp
|
smooth_value.cpp
|
||||||
smooth_value.h
|
smooth_value.h
|
||||||
tileart.cpp
|
tileart.cpp
|
||||||
|
@ -2920,6 +2930,7 @@ if(GTEST_FOUND OR DOWNLOAD_GTEST)
|
||||||
compression.cpp
|
compression.cpp
|
||||||
csv.cpp
|
csv.cpp
|
||||||
datafile.cpp
|
datafile.cpp
|
||||||
|
editor.cpp
|
||||||
fs.cpp
|
fs.cpp
|
||||||
git_revision.cpp
|
git_revision.cpp
|
||||||
hash.cpp
|
hash.cpp
|
||||||
|
@ -3110,6 +3121,8 @@ set(CPACK_GENERATOR TGZ TXZ)
|
||||||
set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
|
set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
|
||||||
if(TARGET_OS STREQUAL "mac")
|
if(TARGET_OS STREQUAL "mac")
|
||||||
set(CPACK_STRIP_FILES FALSE)
|
set(CPACK_STRIP_FILES FALSE)
|
||||||
|
elseif(TARGET_OS STREQUAL "windows" AND TARGET_CPU_ARCHITECTURE STREQUAL "arm64")
|
||||||
|
set(CPACK_STRIP_FILES FALSE)
|
||||||
else()
|
else()
|
||||||
set(CPACK_STRIP_FILES TRUE)
|
set(CPACK_STRIP_FILES TRUE)
|
||||||
endif()
|
endif()
|
||||||
|
@ -3123,7 +3136,11 @@ set(CPACK_SYSTEM_NAME ${CMAKE_SYSTEM_NAME})
|
||||||
|
|
||||||
if(TARGET_OS AND TARGET_BITS)
|
if(TARGET_OS AND TARGET_BITS)
|
||||||
if(TARGET_OS STREQUAL "windows")
|
if(TARGET_OS STREQUAL "windows")
|
||||||
|
if (TARGET_CPU_ARCHITECTURE STREQUAL "arm64")
|
||||||
|
set(CPACK_SYSTEM_NAME "win-arm64")
|
||||||
|
else()
|
||||||
set(CPACK_SYSTEM_NAME "win${TARGET_BITS}")
|
set(CPACK_SYSTEM_NAME "win${TARGET_BITS}")
|
||||||
|
endif()
|
||||||
set(CPACK_GENERATOR ZIP)
|
set(CPACK_GENERATOR ZIP)
|
||||||
elseif(TARGET_OS STREQUAL "linux")
|
elseif(TARGET_OS STREQUAL "linux")
|
||||||
# Let compiler tell its arch
|
# Let compiler tell its arch
|
||||||
|
@ -3384,7 +3401,7 @@ foreach(ext zip tar.gz tar.xz)
|
||||||
endforeach()
|
endforeach()
|
||||||
foreach(target ${CPACK_TARGETS})
|
foreach(target ${CPACK_TARGETS})
|
||||||
list(APPEND COPY_TARGET_COMMANDS COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${target}> ${TMPDIR}/)
|
list(APPEND COPY_TARGET_COMMANDS COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${target}> ${TMPDIR}/)
|
||||||
if(NOT TARGET_OS STREQUAL "mac")
|
if(NOT TARGET_OS STREQUAL "mac" AND NOT (TARGET_OS STREQUAL "windows" AND TARGET_CPU_ARCHITECTURE STREQUAL "arm64"))
|
||||||
list(APPEND STRIP_TARGET_COMMANDS COMMAND strip -s ${TMPDIR}/$<TARGET_FILE_NAME:${target}>)
|
list(APPEND STRIP_TARGET_COMMANDS COMMAND strip -s ${TMPDIR}/$<TARGET_FILE_NAME:${target}>)
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
|
@ -26,8 +26,11 @@ if(CURL_FOUND)
|
||||||
is_bundled(CURL_BUNDLED "${CURL_LIBRARY}")
|
is_bundled(CURL_BUNDLED "${CURL_LIBRARY}")
|
||||||
set(CURL_LIBRARIES ${CURL_LIBRARY})
|
set(CURL_LIBRARIES ${CURL_LIBRARY})
|
||||||
set(CURL_INCLUDE_DIRS ${CURL_INCLUDEDIR})
|
set(CURL_INCLUDE_DIRS ${CURL_INCLUDEDIR})
|
||||||
|
if (CURL_BUNDLED AND TARGET_OS STREQUAL "windows" AND TARGET_CPU_ARCHITECTURE STREQUAL "arm64")
|
||||||
if(CURL_BUNDLED AND TARGET_OS STREQUAL "windows")
|
set(CURL_COPY_FILES
|
||||||
|
"${EXTRA_CURL_LIBDIR}/libcurl-4.dll"
|
||||||
|
)
|
||||||
|
elseif(CURL_BUNDLED AND TARGET_OS STREQUAL "windows")
|
||||||
set(CURL_COPY_FILES
|
set(CURL_COPY_FILES
|
||||||
"${EXTRA_CURL_LIBDIR}/libcurl.dll"
|
"${EXTRA_CURL_LIBDIR}/libcurl.dll"
|
||||||
"${EXTRA_CURL_LIBDIR}/zlib1.dll"
|
"${EXTRA_CURL_LIBDIR}/zlib1.dll"
|
||||||
|
|
|
@ -11,6 +11,12 @@ if(TARGET_OS STREQUAL "windows")
|
||||||
if(NOT EXCEPTION_HANDLING_BUNDLED)
|
if(NOT EXCEPTION_HANDLING_BUNDLED)
|
||||||
message(FATAL_ERROR "could not find exception handling paths")
|
message(FATAL_ERROR "could not find exception handling paths")
|
||||||
endif()
|
endif()
|
||||||
|
if(TARGET_CPU_ARCHITECTURE STREQUAL "arm64")
|
||||||
|
set(EXCEPTION_HANDLING_COPY_FILES
|
||||||
|
"${EXTRA_EXCEPTION_HANDLING_LIBDIR}/exchndl.dll"
|
||||||
|
"${EXTRA_EXCEPTION_HANDLING_LIBDIR}/mgwhelp.dll"
|
||||||
|
)
|
||||||
|
else()
|
||||||
set(EXCEPTION_HANDLING_COPY_FILES
|
set(EXCEPTION_HANDLING_COPY_FILES
|
||||||
"${EXTRA_EXCEPTION_HANDLING_LIBDIR}/exchndl.dll"
|
"${EXTRA_EXCEPTION_HANDLING_LIBDIR}/exchndl.dll"
|
||||||
"${EXTRA_EXCEPTION_HANDLING_LIBDIR}/dbgcore.dll"
|
"${EXTRA_EXCEPTION_HANDLING_LIBDIR}/dbgcore.dll"
|
||||||
|
@ -18,4 +24,5 @@ if(TARGET_OS STREQUAL "windows")
|
||||||
"${EXTRA_EXCEPTION_HANDLING_LIBDIR}/mgwhelp.dll"
|
"${EXTRA_EXCEPTION_HANDLING_LIBDIR}/mgwhelp.dll"
|
||||||
"${EXTRA_EXCEPTION_HANDLING_LIBDIR}/symsrv.dll"
|
"${EXTRA_EXCEPTION_HANDLING_LIBDIR}/symsrv.dll"
|
||||||
)
|
)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -31,7 +31,9 @@ if(FREETYPE_FOUND)
|
||||||
is_bundled(FREETYPE_BUNDLED "${FREETYPE_LIBRARY}")
|
is_bundled(FREETYPE_BUNDLED "${FREETYPE_LIBRARY}")
|
||||||
set(FREETYPE_COPY_FILES)
|
set(FREETYPE_COPY_FILES)
|
||||||
if(FREETYPE_BUNDLED)
|
if(FREETYPE_BUNDLED)
|
||||||
if(TARGET_OS STREQUAL "windows")
|
if(TARGET_OS STREQUAL "windows" AND TARGET_CPU_ARCHITECTURE STREQUAL "arm64")
|
||||||
|
set(FREETYPE_COPY_FILES "${EXTRA_FREETYPE_LIBDIR}/libfreetype-6.dll")
|
||||||
|
elseif(TARGET_OS STREQUAL "windows")
|
||||||
set(FREETYPE_COPY_FILES "${EXTRA_FREETYPE_LIBDIR}/libfreetype.dll")
|
set(FREETYPE_COPY_FILES "${EXTRA_FREETYPE_LIBDIR}/libfreetype.dll")
|
||||||
elseif(TARGET_OS STREQUAL "mac")
|
elseif(TARGET_OS STREQUAL "mac")
|
||||||
set(FREETYPE_COPY_FILES "${EXTRA_FREETYPE_LIBDIR}/libfreetype.6.dylib")
|
set(FREETYPE_COPY_FILES "${EXTRA_FREETYPE_LIBDIR}/libfreetype.6.dylib")
|
||||||
|
|
|
@ -29,12 +29,21 @@ set(OPUSFILE_INCLUDE_DIRS ${OPUSFILE_INCLUDEDIR})
|
||||||
if(OPUSFILE_FOUND)
|
if(OPUSFILE_FOUND)
|
||||||
is_bundled(OPUSFILE_BUNDLED "${OPUSFILE_LIBRARY}")
|
is_bundled(OPUSFILE_BUNDLED "${OPUSFILE_LIBRARY}")
|
||||||
if(OPUSFILE_BUNDLED AND TARGET_OS STREQUAL "windows")
|
if(OPUSFILE_BUNDLED AND TARGET_OS STREQUAL "windows")
|
||||||
|
if (TARGET_CPU_ARCHITECTURE STREQUAL "arm64")
|
||||||
|
set(OPUSFILE_COPY_FILES
|
||||||
|
"${EXTRA_OPUSFILE_LIBDIR}/libopusfile-0.dll"
|
||||||
|
"${EXTRA_OPUSFILE_LIBDIR}/libopus-0.dll"
|
||||||
|
"${EXTRA_OPUSFILE_LIBDIR}/libogg-0.dll"
|
||||||
|
"${EXTRA_OPUSFILE_LIBDIR}/libwinpthread-1.dll"
|
||||||
|
)
|
||||||
|
else()
|
||||||
set(OPUSFILE_COPY_FILES
|
set(OPUSFILE_COPY_FILES
|
||||||
"${EXTRA_OPUSFILE_LIBDIR}/libogg.dll"
|
"${EXTRA_OPUSFILE_LIBDIR}/libogg.dll"
|
||||||
"${EXTRA_OPUSFILE_LIBDIR}/libopus.dll"
|
"${EXTRA_OPUSFILE_LIBDIR}/libopus.dll"
|
||||||
"${EXTRA_OPUSFILE_LIBDIR}/libopusfile.dll"
|
"${EXTRA_OPUSFILE_LIBDIR}/libopusfile.dll"
|
||||||
"${EXTRA_OPUSFILE_LIBDIR}/libwinpthread-1.dll"
|
"${EXTRA_OPUSFILE_LIBDIR}/libwinpthread-1.dll"
|
||||||
)
|
)
|
||||||
|
endif()
|
||||||
if(TARGET_BITS EQUAL 32)
|
if(TARGET_BITS EQUAL 32)
|
||||||
list(APPEND OPUSFILE_COPY_FILES
|
list(APPEND OPUSFILE_COPY_FILES
|
||||||
"${EXTRA_OPUSFILE_LIBDIR}/libgcc_s_sjlj-1.dll"
|
"${EXTRA_OPUSFILE_LIBDIR}/libgcc_s_sjlj-1.dll"
|
||||||
|
|
|
@ -40,6 +40,12 @@ if(SQLite3_FOUND)
|
||||||
is_bundled(SQLite3_BUNDLED "${SQLite3_LIBRARY}")
|
is_bundled(SQLite3_BUNDLED "${SQLite3_LIBRARY}")
|
||||||
set(SQLite3_COPY_FILES)
|
set(SQLite3_COPY_FILES)
|
||||||
if(SQLite3_BUNDLED AND TARGET_OS STREQUAL "windows")
|
if(SQLite3_BUNDLED AND TARGET_OS STREQUAL "windows")
|
||||||
|
if (TARGET_CPU_ARCHITECTURE STREQUAL "arm64")
|
||||||
|
set(SQLite3_COPY_FILES
|
||||||
|
"${EXTRA_SQLite3_LIBDIR}/libsqlite3-0.dll"
|
||||||
|
)
|
||||||
|
else()
|
||||||
set(SQLite3_COPY_FILES "${EXTRA_SQLite3_LIBDIR}/sqlite3.dll")
|
set(SQLite3_COPY_FILES "${EXTRA_SQLite3_LIBDIR}/sqlite3.dll")
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
if(TARGET_OS STREQUAL "windows")
|
# only find ssp when toolchain is gcc
|
||||||
|
if(TARGET_OS STREQUAL "windows"
|
||||||
|
AND NOT CMAKE_C_COMPILER_ID STREQUAL "Clang"
|
||||||
|
AND NOT CMAKE_C_COMPILER_ID STREQUAL "MSVC")
|
||||||
set_extra_dirs_lib(SSP ssp)
|
set_extra_dirs_lib(SSP ssp)
|
||||||
find_file(SSP_LIBRARY
|
find_file(SSP_LIBRARY
|
||||||
NAMES libssp-0.dll
|
NAMES libssp-0.dll
|
||||||
|
|
12
cmake/toolchains/mingw64-aarch64-llvm.toolchain
Normal file
12
cmake/toolchains/mingw64-aarch64-llvm.toolchain
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
set(CMAKE_SYSTEM_NAME Windows)
|
||||||
|
|
||||||
|
set(CMAKE_SYSTEM_PROCESSOR aarch64)
|
||||||
|
set(CMAKE_C_COMPILER aarch64-w64-mingw32-clang)
|
||||||
|
set(CMAKE_CXX_COMPILER aarch64-w64-mingw32-clang++)
|
||||||
|
set(CMAKE_RC_COMPILER aarch64-w64-mingw32-windres)
|
||||||
|
set(CMAKE_RUST_COMPILER_TARGET aarch64-pc-windows-gnullvm)
|
||||||
|
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
|
@ -275,9 +275,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== ﺐﻋﻼﻟﺍ ﺪﻠﺑ:
|
== ﺐﻋﻼﻟﺍ ﺪﻠﺑ:
|
||||||
|
|
||||||
Player options
|
|
||||||
== ﺐﻋﻼﻟﺍ ﺕﺍﺩﺍﺪﻋﺍ
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== ﻦﻴﺒﻋﻻ
|
== ﻦﻴﺒﻋﻻ
|
||||||
|
|
||||||
|
@ -773,9 +770,6 @@ Skin prefix
|
||||||
Show HUD
|
Show HUD
|
||||||
== ﻞﻜﺸﻟﺍ ﺭﺎﻬﻇﺍ
|
== ﻞﻜﺸﻟﺍ ﺭﺎﻬﻇﺍ
|
||||||
|
|
||||||
Reload
|
|
||||||
== ﻞﻴﻤﺤﺘﻟﺍ ﺓﺩﺎﻋﺍ
|
|
||||||
|
|
||||||
9+ new mentions
|
9+ new mentions
|
||||||
== 9+ ﺓﺪﻳﺪﺟ ﺕﺍﺭﺎﻌﺷﺍ
|
== 9+ ﺓﺪﻳﺪﺟ ﺕﺍﺭﺎﻌﺷﺍ
|
||||||
|
|
||||||
|
@ -1026,9 +1020,6 @@ Debug mode enabled. Press Ctrl+Shift+D to disable debug mode.
|
||||||
Existing Player
|
Existing Player
|
||||||
== ﺩﻮﺟﻮﻣ ﺐﻋﻼﻟﺍ
|
== ﺩﻮﺟﻮﻣ ﺐﻋﻼﻟﺍ
|
||||||
|
|
||||||
Your nickname '%s' is already used (%d points). Do you still want to use it?
|
|
||||||
== ﻪﻣﺍﺪﺨﺘﺳﺍ ﺪﻳﺮﺗ ﺖﻟﺯﺎﻣ ﻞﻫ '%s' ﻞﻤﻌﺘﺴﻣ ﻚﻤﺳﺍ
|
|
||||||
|
|
||||||
Checking for existing player with your name
|
Checking for existing player with your name
|
||||||
== ﻚﻤﺳﺎﺑ ﺐﻋﻻ ﺩﻮﺟﻭ ﻦﻣ ﻖﻘﺤﺘﻟﺍ
|
== ﻚﻤﺳﺎﺑ ﺐﻋﻻ ﺩﻮﺟﻭ ﻦﻣ ﻖﻘﺤﺘﻟﺍ
|
||||||
|
|
||||||
|
@ -1092,9 +1083,18 @@ Could not initialize the given graphics backend, reverting to the default backen
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1225,6 +1225,9 @@ Render complete
|
||||||
Are you sure that you want to restart?
|
Are you sure that you want to restart?
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Your nickname '%s' is already used (%d points). Do you still want to use it?
|
||||||
|
==
|
||||||
|
|
||||||
There's an unsaved map in the editor, you might want to save it.
|
There's an unsaved map in the editor, you might want to save it.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1478,6 +1481,12 @@ Unable to delete the demo '%s'
|
||||||
Unable to delete the folder '%s'. Make sure it's empty first.
|
Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Loading…
|
Loading…
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1645,7 +1654,7 @@ Show local time always
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
==
|
==
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
|
@ -1819,6 +1828,39 @@ Unregister protocol and file extensions
|
||||||
DDNet %s is available:
|
DDNet %s is available:
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Extras
|
Extras
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#modified by:
|
#modified by:
|
||||||
# Gokturk 2024-06-09 12:00:50
|
# Gokturk 2024-06-09 12:00:50
|
||||||
# Gokturk 2024-07-17 02:24:00
|
# Gokturk 2024-07-17 02:24:00
|
||||||
|
# Gokturk 2024-08-29 23:39:00
|
||||||
##### /authors #####
|
##### /authors #####
|
||||||
|
|
||||||
##### translated strings #####
|
##### translated strings #####
|
||||||
|
@ -274,9 +275,6 @@ Play background music
|
||||||
Player
|
Player
|
||||||
== Oyunçu
|
== Oyunçu
|
||||||
|
|
||||||
Player options
|
|
||||||
== Oyunçu parametrlər
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Oyunçular
|
== Oyunçular
|
||||||
|
|
||||||
|
@ -652,9 +650,6 @@ Connecting dummy
|
||||||
Connect Dummy
|
Connect Dummy
|
||||||
== Dummy daxil ol
|
== Dummy daxil ol
|
||||||
|
|
||||||
Reload
|
|
||||||
== Yenilə
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== Qeyri-aktiv etmək
|
== Qeyri-aktiv etmək
|
||||||
|
|
||||||
|
@ -1450,9 +1445,6 @@ Show health, shields and ammo
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== DDRace interfeysi
|
== DDRace interfeysi
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Xal lövhəsində klient ID-lərini göstərin
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== DDRace interfeysi göstər
|
== DDRace interfeysi göstər
|
||||||
|
|
||||||
|
@ -1870,3 +1862,54 @@ Team %d (%d/%d)
|
||||||
|
|
||||||
https://wiki.ddnet.org/wiki/Mapping
|
https://wiki.ddnet.org/wiki/Mapping
|
||||||
== https://wiki.ddnet.org/wiki/Mapping
|
== https://wiki.ddnet.org/wiki/Mapping
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
== '%s' Link ünvanını həll etmək mümkün olmadı. Ətraflı məlumat üçün yerli konsola baxın
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
== Link ünvanı xətası
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
== Dummy qoşula bilmədi
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
== Bu serverdə dummy icazə verilmir
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
== Zəhmət olmasa gözləyin…
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
== Klient ID'sini göstərin (aparıcı lövhə, söhbət, izləyici)
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
== Normal:
|
||||||
|
|
||||||
|
Team:
|
||||||
|
== Komanda:
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
== Dummy parametrlər
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
== Dummy parametrlərini redaktə etmək üçün açın
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
== Təsadüfi
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
== '%s' Bunu silmək istədiyinizə əminsiniz?
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
== Skini silin
|
||||||
|
|
||||||
|
Basic
|
||||||
|
== Sadə
|
||||||
|
|
||||||
|
Custom
|
||||||
|
== Xüsusi
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
== Skin silinə bilməz
|
||||||
|
|
||||||
|
Customize
|
||||||
|
== Fərdiləşdirmək
|
||||||
|
|
|
@ -2,10 +2,11 @@
|
||||||
#originally created by:
|
#originally created by:
|
||||||
# arionwt1997
|
# arionwt1997
|
||||||
#modified by:
|
#modified by:
|
||||||
# Chill & PoKeMoN 2023-03-31 16:00:00
|
# Chill [TD] & PoKeMoN [TD] 2023-03-31 16:00:00
|
||||||
# Chill & PoKeMoN 2023-07-02 00:54:00
|
# Chill [TD] & PoKeMoN [TD] 2023-07-02 00:54:00
|
||||||
# Chill [TD] & PoKeMoN [TD] 2023-09-22 17:49:00
|
# Chill [TD] & PoKeMoN [TD] 2023-09-22 17:49:00
|
||||||
# Chill [TD] & PoKeMoN [TD] 2023-11-14 12:42:00
|
# Chill [TD] & PoKeMoN [TD] 2023-11-14 12:42:00
|
||||||
|
# Chill [TD] & PoKeMoN [TD] 2024-08-23 23:17:00
|
||||||
#
|
#
|
||||||
##### /authors #####
|
##### /authors #####
|
||||||
|
|
||||||
|
@ -281,9 +282,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Краіна гульца:
|
== Краіна гульца:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Опцыі гульца
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Гульцы
|
== Гульцы
|
||||||
|
|
||||||
|
@ -345,7 +343,7 @@ Shotgun
|
||||||
== Драбавік
|
== Драбавік
|
||||||
|
|
||||||
Show chat
|
Show chat
|
||||||
== Паказаць чат
|
== Паказваць чат
|
||||||
|
|
||||||
Show friends only
|
Show friends only
|
||||||
== Толькі з сябрамі
|
== Толькі з сябрамі
|
||||||
|
@ -381,7 +379,7 @@ Stop record
|
||||||
== Стоп запісу
|
== Стоп запісу
|
||||||
|
|
||||||
Strict gametype filter
|
Strict gametype filter
|
||||||
== Строгі фільтр рэжым.
|
== Строгі фільтр рэжымаў
|
||||||
|
|
||||||
Sudden Death
|
Sudden Death
|
||||||
== Раптоўная смерць
|
== Раптоўная смерць
|
||||||
|
@ -867,9 +865,6 @@ Loading ghost files
|
||||||
Time
|
Time
|
||||||
== Час
|
== Час
|
||||||
|
|
||||||
Reload
|
|
||||||
== Перазагрузіць
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== Выключыць
|
== Выключыць
|
||||||
|
|
||||||
|
@ -1166,9 +1161,6 @@ Show votes window after voting
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== DDRace HUD
|
== DDRace HUD
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Паказваць ID кліента ў табло ачкоў
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== Паказваць DDRace HUD
|
== Паказваць DDRace HUD
|
||||||
|
|
||||||
|
@ -1621,7 +1613,7 @@ Go back the specified duration
|
||||||
|
|
||||||
[Demo player duration]
|
[Demo player duration]
|
||||||
%d sec.
|
%d sec.
|
||||||
== % сек.
|
== %d сек.
|
||||||
|
|
||||||
Change the skip duration
|
Change the skip duration
|
||||||
== Змяніць працягласць пропуску
|
== Змяніць працягласць пропуску
|
||||||
|
@ -1705,6 +1697,7 @@ Regular background color
|
||||||
Entities background color
|
Entities background color
|
||||||
== Колер фону энтыты
|
== Колер фону энтыты
|
||||||
|
|
||||||
|
[Graphics error]
|
||||||
An error during command recording occurred. Try to update your GPU drivers.
|
An error during command recording occurred. Try to update your GPU drivers.
|
||||||
== Адбылася памылка падчас выканання каманды запісу. Паспрабуйце абнавіць драйверы відэакарты.
|
== Адбылася памылка падчас выканання каманды запісу. Паспрабуйце абнавіць драйверы відэакарты.
|
||||||
|
|
||||||
|
@ -1714,162 +1707,213 @@ A render command failed. Try to update your GPU drivers.
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Failed during initialization. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
Failed during initialization. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
||||||
==
|
== Памылка падчас ініцыялізацыі. Паспрабуйце змяніць gfx_backend на OpenGL або Vulcan у settings_dnet.cfg ў тэчцы канфігурацыйных файлаў і паспрабуйце яшчэ раз.
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Out of VRAM. Try removing custom assets (skins, entities, etc.), especially those with high resolution.
|
Out of VRAM. Try removing custom assets (skins, entities, etc.), especially those with high resolution.
|
||||||
==
|
== Недахоп VRAM. Паспрабуйце выдаліць карыстацкія тэкстуры (скіны, энтыты і г.д.), асабліва тыя, якія маюць высокую разрознасць.
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Submitting the render commands failed. Try to update your GPU drivers.
|
Submitting the render commands failed. Try to update your GPU drivers.
|
||||||
==
|
== Адпраўка каманд рэндэрынгу не ўдалася. Паспрабуйце абнавіць драйверы відэакарты.
|
||||||
|
|
||||||
Failed saving the replay!
|
Failed saving the replay!
|
||||||
==
|
== Не атрымалася захаваць паўтор!
|
||||||
|
|
||||||
Saving settings to '%s' failed
|
Saving settings to '%s' failed
|
||||||
==
|
== Захаванне налад у '%s' не атрымалася
|
||||||
|
|
||||||
Error saving settings
|
Error saving settings
|
||||||
==
|
== Памылка захавання налад
|
||||||
|
|
||||||
Loading demo file from storage
|
Loading demo file from storage
|
||||||
==
|
== Загрузка файла дэма са сховішча
|
||||||
|
|
||||||
Searching
|
Searching
|
||||||
==
|
== Пошук
|
||||||
|
|
||||||
Enter Username
|
Enter Username
|
||||||
==
|
== Увядзіце імя карыстальніка
|
||||||
|
|
||||||
Enter Password
|
Enter Password
|
||||||
==
|
== Увядзіце пароль
|
||||||
|
|
||||||
NOT CONNECTED
|
NOT CONNECTED
|
||||||
==
|
== НЕ ПАДЛУЧАНА
|
||||||
|
|
||||||
Match %d of %d
|
Match %d of %d
|
||||||
==
|
== Адпаведна %d з %d
|
||||||
|
|
||||||
No results
|
No results
|
||||||
==
|
== Няма вынікаў
|
||||||
|
|
||||||
Lines %d - %d (%s)
|
Lines %d - %d (%s)
|
||||||
==
|
== Радкі %d - %d (%s)
|
||||||
|
|
||||||
Locked
|
Locked
|
||||||
==
|
== Зафіксаваныя
|
||||||
|
|
||||||
Following
|
Following
|
||||||
==
|
== Бягучыя
|
||||||
|
|
||||||
Loading commands…
|
Loading commands…
|
||||||
==
|
== Загрузка каманд…
|
||||||
|
|
||||||
[Spectating]
|
[Spectating]
|
||||||
Following %s
|
Following %s
|
||||||
==
|
== Назіранне за %s
|
||||||
|
|
||||||
Press a key…
|
Press a key…
|
||||||
==
|
== Націсніце клавішу…
|
||||||
|
|
||||||
Main menu
|
Main menu
|
||||||
==
|
== Галоўнае меню
|
||||||
|
|
||||||
Are you sure that you want to restart?
|
Are you sure that you want to restart?
|
||||||
==
|
== Вы ўпэўненыя, што хочаце пачаць нанова?
|
||||||
|
|
||||||
There's an unsaved map in the editor, you might want to save it.
|
There's an unsaved map in the editor, you might want to save it.
|
||||||
==
|
== У рэдактары засталася не захаваная карта, магчыма вы хочаце яе захаваць.
|
||||||
|
|
||||||
Continue anyway?
|
Continue anyway?
|
||||||
==
|
== Працягнуць у любым выпадку?
|
||||||
|
|
||||||
%d/%d KiB (%.1f KiB/s)
|
%d/%d KiB (%.1f KiB/s)
|
||||||
==
|
== %d/%d КіБ (%.1f КіБ/с)
|
||||||
|
|
||||||
Example of usage
|
Example of usage
|
||||||
==
|
== Прыклад выкарыстання
|
||||||
|
|
||||||
No login required
|
No login required
|
||||||
==
|
== Уваход не патрабуецца
|
||||||
|
|
||||||
Communities
|
Communities
|
||||||
==
|
== Суполкі
|
||||||
|
|
||||||
Server filter
|
Server filter
|
||||||
==
|
== Фільтр сервераў
|
||||||
|
|
||||||
Friends
|
Friends
|
||||||
==
|
== Сябры
|
||||||
|
|
||||||
Loading…
|
Loading…
|
||||||
==
|
== Загрузка…
|
||||||
|
|
||||||
Player info change cooldown
|
Player info change cooldown
|
||||||
==
|
== Затрымка абнаўлення інфармацыі пра гульца
|
||||||
|
|
||||||
Tee
|
Tee
|
||||||
==
|
== Tee
|
||||||
|
|
||||||
Info Messages
|
Info Messages
|
||||||
==
|
== Інфа. Паведамленні
|
||||||
|
|
||||||
Show local time always
|
Show local time always
|
||||||
==
|
== Заўсёды паказваць мясцовы час
|
||||||
|
|
||||||
Always show chat
|
Always show chat
|
||||||
==
|
== Заўсёды паказваць чат
|
||||||
|
|
||||||
Show only chat messages from team members
|
Show only chat messages from team members
|
||||||
==
|
== Паказваць паведамленні чата толькі ад чальцоў каманды
|
||||||
|
|
||||||
Chat font size
|
Chat font size
|
||||||
==
|
== Памер шрыфта чата
|
||||||
|
|
||||||
Chat width
|
Chat width
|
||||||
==
|
== Шырыня чата
|
||||||
|
|
||||||
Show friend mark (♥) in name plates
|
Show friend mark (♥) in name plates
|
||||||
==
|
== Паказваць адзнаку сябра (♥) у таблічках з імёнамі
|
||||||
|
|
||||||
Show hook strength icon indicator
|
Show hook strength icon indicator
|
||||||
==
|
== Паказваць іконку індыкатара сілы крука
|
||||||
|
|
||||||
Show hook strength number indicator
|
Show hook strength number indicator
|
||||||
==
|
== Паказваць нумар індыкатара сілы крука
|
||||||
|
|
||||||
Authed name color in scoreboard
|
Authed name color in scoreboard
|
||||||
==
|
== Колер аўтарызаваных гульцоў у табло ачкоў
|
||||||
|
|
||||||
Same clan color in scoreboard
|
Same clan color in scoreboard
|
||||||
==
|
== Колер твайго клана ў табло ачкоў
|
||||||
|
|
||||||
Show own player's hook collision line
|
Show own player's hook collision line
|
||||||
==
|
== Паказваць сваю лінію сутыкнення крука
|
||||||
|
|
||||||
Always show own player's hook collision line
|
Always show own player's hook collision line
|
||||||
==
|
== Заўсёды паказваць сваю лінію сутыкнення крука
|
||||||
|
|
||||||
Always show other players' hook collision lines
|
Always show other players' hook collision lines
|
||||||
==
|
== Заўсёды паказваць лініі сутыкнення крука іншых гульцоў
|
||||||
|
|
||||||
Show finish messages
|
Show finish messages
|
||||||
==
|
== Паказваць паведамленні пра фініш
|
||||||
|
|
||||||
Round %d/%d
|
Round %d/%d
|
||||||
==
|
== Раўнд %d/%d
|
||||||
|
|
||||||
[Spectators]
|
[Spectators]
|
||||||
%d others…
|
%d others…
|
||||||
==
|
== %d іншых…
|
||||||
|
|
||||||
[Team and size]
|
[Team and size]
|
||||||
%d\n(%d/%d)
|
%d\n(%d/%d)
|
||||||
==
|
== %d\n(%d/%d)
|
||||||
|
|
||||||
Team %d (%d/%d)
|
Team %d (%d/%d)
|
||||||
==
|
== Каманда %d (%d/%d)
|
||||||
|
|
||||||
https://wiki.ddnet.org/wiki/Mapping
|
https://wiki.ddnet.org/wiki/Mapping
|
||||||
|
== https://wiki.ddnet.org/wiki/Mapping
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
==
|
==
|
||||||
|
|
|
@ -280,9 +280,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Država
|
== Država
|
||||||
|
|
||||||
Player options
|
|
||||||
== Postavke igrača
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Igrači
|
== Igrači
|
||||||
|
|
||||||
|
@ -651,9 +648,6 @@ Connecting dummy
|
||||||
Connect Dummy
|
Connect Dummy
|
||||||
== Konektuj dummy-a
|
== Konektuj dummy-a
|
||||||
|
|
||||||
Reload
|
|
||||||
== Reload
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== Deaktiviraj
|
== Deaktiviraj
|
||||||
|
|
||||||
|
@ -951,9 +945,18 @@ Could not initialize the given graphics backend, reverting to the default backen
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1385,6 +1388,12 @@ Unable to delete the demo '%s'
|
||||||
Unable to delete the folder '%s'. Make sure it's empty first.
|
Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Loading…
|
Loading…
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1591,7 +1600,7 @@ Show local time always
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
==
|
==
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
|
@ -1777,6 +1786,39 @@ Chat command (e.g. showall 1)
|
||||||
Unregister protocol and file extensions
|
Unregister protocol and file extensions
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Emoticons
|
Emoticons
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
# Rafael Fontenelle 2024-04-30 14:52:00
|
# Rafael Fontenelle 2024-04-30 14:52:00
|
||||||
# Rafael Fontenelle 2024-06-11 22:43:00
|
# Rafael Fontenelle 2024-06-11 22:43:00
|
||||||
# Rafael Fontenelle 2024-07-17 12:04:00
|
# Rafael Fontenelle 2024-07-17 12:04:00
|
||||||
|
# Rafael Fontenelle 2024-09-02 16:02:00
|
||||||
##### /authors #####
|
##### /authors #####
|
||||||
|
|
||||||
##### translated strings #####
|
##### translated strings #####
|
||||||
|
@ -311,9 +312,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== País do jogador:
|
== País do jogador:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Opções do jogador
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Jogadores
|
== Jogadores
|
||||||
|
|
||||||
|
@ -818,9 +816,6 @@ Show DDNet map finishes in server browser
|
||||||
transmits your player name to info.ddnet.org
|
transmits your player name to info.ddnet.org
|
||||||
== transmite seu nome de jogador para info.ddnet.org
|
== transmite seu nome de jogador para info.ddnet.org
|
||||||
|
|
||||||
Reload
|
|
||||||
== Recarregar
|
|
||||||
|
|
||||||
Time
|
Time
|
||||||
== Tempo
|
== Tempo
|
||||||
|
|
||||||
|
@ -1376,9 +1371,6 @@ Show health, shields and ammo
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== HUD do DDRace
|
== HUD do DDRace
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Mostrar IDs de cliente no placar
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== Mostrar HUD do DDRace
|
== Mostrar HUD do DDRace
|
||||||
|
|
||||||
|
@ -1901,3 +1893,54 @@ Team %d (%d/%d)
|
||||||
|
|
||||||
https://wiki.ddnet.org/wiki/Mapping
|
https://wiki.ddnet.org/wiki/Mapping
|
||||||
== https://wiki.ddnet.org/wiki/Mapping
|
== https://wiki.ddnet.org/wiki/Mapping
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
== Não foi possível resolver o endereço de conexão '%s'. Veja o console local para detalhes.
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
== Erro no endereço de conexão
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
== Não foi possível conectar o dummy
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
== Dummy não é permitido neste servidor
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
== Por favor, aguarde…
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
== Mostrar IDs de clientes (placar, chat, observador)
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
== Normal:
|
||||||
|
|
||||||
|
Team:
|
||||||
|
== Time:
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
== Configurações do dummy
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
== Alterne para editar suas configurações do dummy
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
== Aleatorizar
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
== Tem certeza que deseja excluir '%s'?
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
== Excluir skin
|
||||||
|
|
||||||
|
Basic
|
||||||
|
== Básico
|
||||||
|
|
||||||
|
Custom
|
||||||
|
== Personalizado
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
== Não foi possível excluir skin
|
||||||
|
|
||||||
|
Customize
|
||||||
|
== Personalizar
|
||||||
|
|
|
@ -277,9 +277,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Страна на играча:
|
== Страна на играча:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Настройки на Играча
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Играчи
|
== Играчи
|
||||||
|
|
||||||
|
@ -546,9 +543,18 @@ Could not initialize the given graphics backend, reverting to the default backen
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1094,6 +1100,12 @@ Are you sure that you want to disconnect?
|
||||||
Connect Dummy
|
Connect Dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Connecting dummy
|
Connecting dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1441,7 +1453,7 @@ Show votes window after voting
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
==
|
==
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
|
@ -1693,9 +1705,6 @@ Regular background color
|
||||||
Entities background color
|
Entities background color
|
||||||
==
|
==
|
||||||
|
|
||||||
Reload
|
|
||||||
==
|
|
||||||
|
|
||||||
Use current map as background
|
Use current map as background
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1732,6 +1741,39 @@ No updates available
|
||||||
Check now
|
Check now
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Emoticons
|
Emoticons
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -275,9 +275,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== País del jugador
|
== País del jugador
|
||||||
|
|
||||||
Player options
|
|
||||||
== Opcions del jugador
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Jugadors
|
== Jugadors
|
||||||
|
|
||||||
|
@ -782,9 +779,6 @@ Show DDNet map finishes in server browser
|
||||||
transmits your player name to info.ddnet.org
|
transmits your player name to info.ddnet.org
|
||||||
== retransmet el teu nom de jugar a info.ddnet.org
|
== retransmet el teu nom de jugar a info.ddnet.org
|
||||||
|
|
||||||
Reload
|
|
||||||
== Recarga
|
|
||||||
|
|
||||||
Successfully saved the replay!
|
Successfully saved the replay!
|
||||||
== S'ha guardat la repetició correctament!
|
== S'ha guardat la repetició correctament!
|
||||||
|
|
||||||
|
@ -1197,9 +1191,18 @@ Could not initialize the given graphics backend, reverting to the default backen
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1541,6 +1544,12 @@ Unable to delete the demo '%s'
|
||||||
Unable to delete the folder '%s'. Make sure it's empty first.
|
Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Loading…
|
Loading…
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1672,7 +1681,7 @@ Show local time always
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
==
|
==
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
|
@ -1828,6 +1837,39 @@ Entities background color
|
||||||
Unregister protocol and file extensions
|
Unregister protocol and file extensions
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Extras
|
Extras
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -277,9 +277,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Çĕршыв:
|
== Çĕршыв:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Опцисем
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Çынсем
|
== Çынсем
|
||||||
|
|
||||||
|
@ -549,9 +546,18 @@ Could not initialize the given graphics backend, reverting to the default backen
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1097,6 +1103,12 @@ Are you sure that you want to disconnect?
|
||||||
Connect Dummy
|
Connect Dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Connecting dummy
|
Connecting dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1441,7 +1453,7 @@ Show votes window after voting
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
==
|
==
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
|
@ -1693,9 +1705,6 @@ Regular background color
|
||||||
Entities background color
|
Entities background color
|
||||||
==
|
==
|
||||||
|
|
||||||
Reload
|
|
||||||
==
|
|
||||||
|
|
||||||
Use current map as background
|
Use current map as background
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1732,6 +1741,39 @@ No updates available
|
||||||
Check now
|
Check now
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Emoticons
|
Emoticons
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
# Petr 2011-04-02 23:02:33
|
# Petr 2011-04-02 23:02:33
|
||||||
# Medik & Petr 2011-07-02 19:37:05
|
# Medik & Petr 2011-07-02 19:37:05
|
||||||
# TeeWorlds-org 2011-07-15 00:34:19
|
# TeeWorlds-org 2011-07-15 00:34:19
|
||||||
# dobrykafe 2024-06-09 00:00:00
|
# dobrykafe 2024-08-30 00:00:00
|
||||||
##### /authors #####
|
##### /authors #####
|
||||||
|
|
||||||
##### translated strings #####
|
##### translated strings #####
|
||||||
|
@ -281,9 +281,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Země hráčů:
|
== Země hráčů:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Možnosti hráčů
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Hráči
|
== Hráči
|
||||||
|
|
||||||
|
@ -646,9 +643,6 @@ Connecting dummy
|
||||||
Connect Dummy
|
Connect Dummy
|
||||||
== Připojit dummyho
|
== Připojit dummyho
|
||||||
|
|
||||||
Reload
|
|
||||||
== Znovu načíst
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== Deaktivovat
|
== Deaktivovat
|
||||||
|
|
||||||
|
@ -1634,9 +1628,6 @@ Show local time always
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== DDRace HUD
|
== DDRace HUD
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Zobrazit ID klientů ve výsledkové tabulce
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== Zobrazit DDRace HUD
|
== Zobrazit DDRace HUD
|
||||||
|
|
||||||
|
@ -1853,26 +1844,77 @@ Tee
|
||||||
Show only chat messages from team members
|
Show only chat messages from team members
|
||||||
== Zobrazit pouze zprávy od členů týmu
|
== Zobrazit pouze zprávy od členů týmu
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
== Nelze získat adresu k připojení '%s'. Podrobnosti najdete v místní konzoli.
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
== Chyba v adrese k připojení
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
== Nepodařilo se připojit dummyho
|
||||||
|
|
||||||
[Spectating]
|
[Spectating]
|
||||||
Following %s
|
Following %s
|
||||||
==
|
== Sledujete %s
|
||||||
|
|
||||||
Example of usage
|
Example of usage
|
||||||
==
|
== Příklad použití
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
== Dummy není na tomto serveru povolen
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
== Čekejte prosím…
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
== Zobrazit ID klientů (výsledková tabulka, chat, divák)
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
== Normální:
|
||||||
|
|
||||||
|
Team:
|
||||||
|
== Tým:
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
== Nastavení dummyho
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
== Přepnutím upravíte nastavení dummyho
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
== Randomizovat
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
== Jste si jisti, že chcete smazat '%s'?
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
== Odstranit skin
|
||||||
|
|
||||||
|
Basic
|
||||||
|
== Základní
|
||||||
|
|
||||||
|
Custom
|
||||||
|
== Vlastní
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
== Nelze odstranit skin
|
||||||
|
|
||||||
|
Customize
|
||||||
|
== Přizpůsobit
|
||||||
|
|
||||||
Round %d/%d
|
Round %d/%d
|
||||||
==
|
== Kolo %d/%d
|
||||||
|
|
||||||
[Spectators]
|
[Spectators]
|
||||||
%d others…
|
%d others…
|
||||||
==
|
== %d dalších…
|
||||||
|
|
||||||
[Team and size]
|
[Team and size]
|
||||||
%d\n(%d/%d)
|
%d\n(%d/%d)
|
||||||
==
|
== %d\n(%d/%d)
|
||||||
|
|
||||||
Team %d (%d/%d)
|
Team %d (%d/%d)
|
||||||
==
|
== Tým %d (%d/%d)
|
||||||
|
|
||||||
https://wiki.ddnet.org/wiki/Mapping
|
https://wiki.ddnet.org/wiki/Mapping
|
||||||
==
|
== https://wiki.ddnet.org/wiki/Mapping
|
||||||
|
|
|
@ -278,9 +278,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Spillernes land:
|
== Spillernes land:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Spillermuligheder
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Spillere
|
== Spillere
|
||||||
|
|
||||||
|
@ -676,9 +673,6 @@ Kill
|
||||||
Pause
|
Pause
|
||||||
== Pause
|
== Pause
|
||||||
|
|
||||||
Reload
|
|
||||||
== Genindlæs
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== Deaktiver
|
== Deaktiver
|
||||||
|
|
||||||
|
@ -1100,9 +1094,18 @@ Could not initialize the given graphics backend, reverting to the default backen
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1486,6 +1489,12 @@ Unable to delete the demo '%s'
|
||||||
Unable to delete the folder '%s'. Make sure it's empty first.
|
Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Loading…
|
Loading…
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1653,7 +1662,7 @@ Show local time always
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
==
|
==
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
|
@ -1824,6 +1833,39 @@ Chat command (e.g. showall 1)
|
||||||
Unregister protocol and file extensions
|
Unregister protocol and file extensions
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Extras
|
Extras
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -290,9 +290,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Speler land:
|
== Speler land:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Speler opties
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Spelers
|
== Spelers
|
||||||
|
|
||||||
|
@ -663,9 +660,6 @@ Connecting dummy
|
||||||
Connect Dummy
|
Connect Dummy
|
||||||
== Verbind Dummy
|
== Verbind Dummy
|
||||||
|
|
||||||
Reload
|
|
||||||
== Herladen
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== Deactiveren
|
== Deactiveren
|
||||||
|
|
||||||
|
@ -1243,9 +1237,18 @@ Could not initialize the given graphics backend, reverting to the default backen
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1584,6 +1587,12 @@ Unable to delete the demo '%s'
|
||||||
Unable to delete the folder '%s'. Make sure it's empty first.
|
Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Loading…
|
Loading…
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1709,7 +1718,7 @@ Show local time always
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
==
|
==
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
|
@ -1850,6 +1859,39 @@ Entities background color
|
||||||
Unregister protocol and file extensions
|
Unregister protocol and file extensions
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Extras
|
Extras
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -300,9 +300,6 @@ Kill
|
||||||
Pause
|
Pause
|
||||||
== Paŭzi
|
== Paŭzi
|
||||||
|
|
||||||
Player options
|
|
||||||
== Ludantaj agordoj
|
|
||||||
|
|
||||||
Player
|
Player
|
||||||
== Ludanto
|
== Ludanto
|
||||||
|
|
||||||
|
@ -565,9 +562,18 @@ Could not initialize the given graphics backend, reverting to the default backen
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1053,6 +1059,12 @@ Unable to delete the demo '%s'
|
||||||
Unable to delete the folder '%s'. Make sure it's empty first.
|
Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Stop record
|
Stop record
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1481,7 +1493,7 @@ Show votes window after voting
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
==
|
==
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
|
@ -1724,9 +1736,6 @@ Regular background color
|
||||||
Entities background color
|
Entities background color
|
||||||
==
|
==
|
||||||
|
|
||||||
Reload
|
|
||||||
==
|
|
||||||
|
|
||||||
Use current map as background
|
Use current map as background
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1751,6 +1760,39 @@ DDNet Client updated!
|
||||||
No updates available
|
No updates available
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Emoticons
|
Emoticons
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -281,9 +281,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Mängija maa:
|
== Mängija maa:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Mängija sätted
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Mängijad
|
== Mängijad
|
||||||
|
|
||||||
|
@ -710,9 +707,6 @@ Kill
|
||||||
Pause
|
Pause
|
||||||
== Paus
|
== Paus
|
||||||
|
|
||||||
Reload
|
|
||||||
== Lae uuesti
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== Deaktiveeri
|
== Deaktiveeri
|
||||||
|
|
||||||
|
@ -1605,9 +1599,6 @@ Show local time always
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== DDRace HUD
|
== DDRace HUD
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Näita kliendi ID-eid tulemustabelis
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== Näita DDRace HUD-i
|
== Näita DDRace HUD-i
|
||||||
|
|
||||||
|
@ -1872,5 +1863,56 @@ Round %d/%d
|
||||||
Team %d (%d/%d)
|
Team %d (%d/%d)
|
||||||
== Tiim %d (%d/%d)
|
== Tiim %d (%d/%d)
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
https://wiki.ddnet.org/wiki/Mapping
|
https://wiki.ddnet.org/wiki/Mapping
|
||||||
==
|
==
|
||||||
|
|
|
@ -280,9 +280,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Pelaajan maa:
|
== Pelaajan maa:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Pelaajavalinnat
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Pelaajat
|
== Pelaajat
|
||||||
|
|
||||||
|
@ -709,9 +706,6 @@ Kill
|
||||||
Pause
|
Pause
|
||||||
== Pysäytä
|
== Pysäytä
|
||||||
|
|
||||||
Reload
|
|
||||||
== Päivitä
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== Deaktivoi
|
== Deaktivoi
|
||||||
|
|
||||||
|
@ -1634,9 +1628,6 @@ Show local time always
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== DDrace-HUD
|
== DDrace-HUD
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Näytä asiakas-ID:t pistetaulukossa
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== Näytä DDRace-HUD
|
== Näytä DDRace-HUD
|
||||||
|
|
||||||
|
@ -1832,6 +1823,15 @@ Loading sound files
|
||||||
Moved ingame
|
Moved ingame
|
||||||
== Liikui pelissä
|
== Liikui pelissä
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
[Spectating]
|
[Spectating]
|
||||||
Following %s
|
Following %s
|
||||||
==
|
==
|
||||||
|
@ -1842,15 +1842,57 @@ Following %s
|
||||||
Example of usage
|
Example of usage
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Converse
|
Converse
|
||||||
==
|
==
|
||||||
|
|
||||||
Tee
|
Tee
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
==
|
||||||
|
|
||||||
Show only chat messages from team members
|
Show only chat messages from team members
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Round %d/%d
|
Round %d/%d
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -302,9 +302,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Origine des Tees:
|
== Origine des Tees:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Options des joueurs
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Joueurs
|
== Joueurs
|
||||||
|
|
||||||
|
@ -610,9 +607,6 @@ AntiPing: predict other players
|
||||||
Are you sure that you want to disconnect your dummy?
|
Are you sure that you want to disconnect your dummy?
|
||||||
== Êtes vous sûrs de vouloir déconnecter votre dummy ?
|
== Êtes vous sûrs de vouloir déconnecter votre dummy ?
|
||||||
|
|
||||||
Reload
|
|
||||||
== Recharger
|
|
||||||
|
|
||||||
Server best:
|
Server best:
|
||||||
== Meilleur score du serveur
|
== Meilleur score du serveur
|
||||||
|
|
||||||
|
@ -1390,9 +1384,6 @@ Name Plate
|
||||||
Hook Collisions
|
Hook Collisions
|
||||||
== Collisions du grappin
|
== Collisions du grappin
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Afficher les IDs des clients dans le tableau des scores
|
|
||||||
|
|
||||||
Hook collision line width
|
Hook collision line width
|
||||||
== Largeur de la ligne de collision du grappin
|
== Largeur de la ligne de collision du grappin
|
||||||
|
|
||||||
|
@ -1874,6 +1865,15 @@ Entities background color
|
||||||
Moved ingame
|
Moved ingame
|
||||||
== Déplacé en jeu
|
== Déplacé en jeu
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
[Spectating]
|
[Spectating]
|
||||||
Following %s
|
Following %s
|
||||||
==
|
==
|
||||||
|
@ -1881,6 +1881,48 @@ Following %s
|
||||||
Example of usage
|
Example of usage
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Round %d/%d
|
Round %d/%d
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -280,9 +280,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== País do xogador
|
== País do xogador
|
||||||
|
|
||||||
Player options
|
|
||||||
== Opcións de xogador
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Xogadores
|
== Xogadores
|
||||||
|
|
||||||
|
@ -652,9 +649,6 @@ Connecting dummy
|
||||||
Connect Dummy
|
Connect Dummy
|
||||||
== Conectar Dummy
|
== Conectar Dummy
|
||||||
|
|
||||||
Reload
|
|
||||||
== Recargar
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== Desactivar
|
== Desactivar
|
||||||
|
|
||||||
|
@ -1358,9 +1352,6 @@ Show health, shields and ammo
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== HUD DDRace
|
== HUD DDRace
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Mostrar IDs de cliente na táboa de puntuación
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== Mostrar o HUD DDRace
|
== Mostrar o HUD DDRace
|
||||||
|
|
||||||
|
@ -1571,6 +1562,15 @@ Relative
|
||||||
Absolute
|
Absolute
|
||||||
== Absoluto
|
== Absoluto
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1767,6 +1767,12 @@ Delete folder
|
||||||
Unable to delete the folder '%s'. Make sure it's empty first.
|
Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Loading…
|
Loading…
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1797,6 +1803,9 @@ Info Messages
|
||||||
Show local time always
|
Show local time always
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
==
|
||||||
|
|
||||||
Always show chat
|
Always show chat
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1851,6 +1860,39 @@ Regular background color
|
||||||
Entities background color
|
Entities background color
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Round %d/%d
|
Round %d/%d
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -299,9 +299,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Spielerland:
|
== Spielerland:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Spieleroptionen
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Spieler
|
== Spieler
|
||||||
|
|
||||||
|
@ -365,9 +362,6 @@ Shotgun
|
||||||
Show chat
|
Show chat
|
||||||
== Chat anzeigen
|
== Chat anzeigen
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Client-IDs in der Punktetafel anzeigen
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== DDRace-HUD anzeigen
|
== DDRace-HUD anzeigen
|
||||||
|
|
||||||
|
@ -815,9 +809,6 @@ Skin prefix
|
||||||
Show HUD
|
Show HUD
|
||||||
== HUD zeigen
|
== HUD zeigen
|
||||||
|
|
||||||
Reload
|
|
||||||
== Neu laden
|
|
||||||
|
|
||||||
9+ new mentions
|
9+ new mentions
|
||||||
== 9+ Erwähnungen
|
== 9+ Erwähnungen
|
||||||
|
|
||||||
|
@ -1887,5 +1878,56 @@ Round %d/%d
|
||||||
Team %d (%d/%d)
|
Team %d (%d/%d)
|
||||||
== Team %d (%d/%d)
|
== Team %d (%d/%d)
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
== Konnte Verbindungsadresse '%s' nicht auflösen, siehe lokale Konsole für Details.
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
== Fehler in Verbindungsadresse
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
== Konnte Dummy nicht verbinden
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
== Dummy ist auf diesem Server nicht erlaubt
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
== Bitte warten…
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
== Client-IDs anzeigen (Punktetafel, Chat, Beobachter)
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
== Normal:
|
||||||
|
|
||||||
|
Team:
|
||||||
|
== Team:
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
== Dummy-Einstellungen
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
== Zu Dummy-Einstellungen wechseln
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
== Randomisieren
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
== Bist du sicher dass du '%s' löschen willst?
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
== Skin löschen
|
||||||
|
|
||||||
|
Basic
|
||||||
|
== Einfach
|
||||||
|
|
||||||
|
Custom
|
||||||
|
== Individuell
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
== Kann Skin nicht löschen
|
||||||
|
|
||||||
|
Customize
|
||||||
|
== Anpassen
|
||||||
|
|
||||||
https://wiki.ddnet.org/wiki/Mapping
|
https://wiki.ddnet.org/wiki/Mapping
|
||||||
==
|
==
|
||||||
|
|
|
@ -280,9 +280,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Χώρα παίκτη:
|
== Χώρα παίκτη:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Επιλογές παίκτη
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Παίκτες
|
== Παίκτες
|
||||||
|
|
||||||
|
@ -555,9 +552,18 @@ Could not initialize the given graphics backend, reverting to the default backen
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1100,6 +1106,12 @@ Are you sure that you want to disconnect?
|
||||||
Connect Dummy
|
Connect Dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Connecting dummy
|
Connecting dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1444,7 +1456,7 @@ Show votes window after voting
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
==
|
==
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
|
@ -1693,9 +1705,6 @@ Regular background color
|
||||||
Entities background color
|
Entities background color
|
||||||
==
|
==
|
||||||
|
|
||||||
Reload
|
|
||||||
==
|
|
||||||
|
|
||||||
Use current map as background
|
Use current map as background
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1732,6 +1741,39 @@ No updates available
|
||||||
Check now
|
Check now
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Emoticons
|
Emoticons
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -270,9 +270,6 @@ Pistol
|
||||||
Player
|
Player
|
||||||
== Játékos
|
== Játékos
|
||||||
|
|
||||||
Player options
|
|
||||||
== Játékosok kezelése
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Játékosok
|
== Játékosok
|
||||||
|
|
||||||
|
@ -789,9 +786,6 @@ Show DDNet map finishes in server browser
|
||||||
transmits your player name to info.ddnet.org
|
transmits your player name to info.ddnet.org
|
||||||
== továbbítja a játékosnevedet az info.ddnet.org oldalra
|
== továbbítja a játékosnevedet az info.ddnet.org oldalra
|
||||||
|
|
||||||
Reload
|
|
||||||
== Újratöltés
|
|
||||||
|
|
||||||
Hammerfly dummy
|
Hammerfly dummy
|
||||||
== Másolat kalapácsolás
|
== Másolat kalapácsolás
|
||||||
|
|
||||||
|
@ -1060,9 +1054,6 @@ Auto
|
||||||
Replay
|
Replay
|
||||||
== Visszajátszás
|
== Visszajátszás
|
||||||
|
|
||||||
The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs.
|
|
||||||
== Ennek a Textúrának szélessége, vagy magassága (%s) nem megfelelően osztható el ezzel a számmal: (%d), ami vizuális hibákhoz vezethet. (Méretek máshogyan fognak kinézni és a teljesítményt is ronthatja.)
|
|
||||||
|
|
||||||
Getting server list from master server
|
Getting server list from master server
|
||||||
== Szerverlista lekérése a fő szerverekről
|
== Szerverlista lekérése a fő szerverekről
|
||||||
|
|
||||||
|
@ -1338,9 +1329,6 @@ Show health, shields and ammo
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== DDRace HUD
|
== DDRace HUD
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Mutassa a kliensek ID-ét a pontszámtáblán
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== Mutassa a DDRace HUD-ot (Speciális HUD)
|
== Mutassa a DDRace HUD-ot (Speciális HUD)
|
||||||
|
|
||||||
|
@ -1551,6 +1539,15 @@ Unregister protocol and file extensions
|
||||||
Open the directory to add custom assets
|
Open the directory to add custom assets
|
||||||
== Megnyitni az egyedi Képek helyét
|
== Megnyitni az egyedi Képek helyét
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1563,6 +1560,9 @@ Saving settings to '%s' failed
|
||||||
Error saving settings
|
Error saving settings
|
||||||
==
|
==
|
||||||
|
|
||||||
|
The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs.
|
||||||
|
==
|
||||||
|
|
||||||
Loading demo file from storage
|
Loading demo file from storage
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1772,6 +1772,12 @@ Delete folder
|
||||||
Unable to delete the folder '%s'. Make sure it's empty first.
|
Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Loading…
|
Loading…
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1802,6 +1808,9 @@ Info Messages
|
||||||
Show local time always
|
Show local time always
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
==
|
||||||
|
|
||||||
Always show chat
|
Always show chat
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1853,6 +1862,39 @@ Regular background color
|
||||||
Entities background color
|
Entities background color
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Round %d/%d
|
Round %d/%d
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -284,9 +284,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Filtra per paese:
|
== Filtra per paese:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Opzioni giocatore
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Giocatori
|
== Giocatori
|
||||||
|
|
||||||
|
@ -709,9 +706,6 @@ Kill
|
||||||
Pause
|
Pause
|
||||||
== Pausa
|
== Pausa
|
||||||
|
|
||||||
Reload
|
|
||||||
== Ricarica
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== Disattiva
|
== Disattiva
|
||||||
|
|
||||||
|
@ -1180,7 +1174,7 @@ No server selected
|
||||||
== Nessun server selezionato
|
== Nessun server selezionato
|
||||||
|
|
||||||
Online clanmates (%d)
|
Online clanmates (%d)
|
||||||
== Compagni di clan online
|
== Compagni di clan online (%d)
|
||||||
|
|
||||||
Click to select server. Double click to join your friend.
|
Click to select server. Double click to join your friend.
|
||||||
== Fare click per selezionare il server. Fai doppio click per unirti al tuo amico.
|
== Fare click per selezionare il server. Fai doppio click per unirti al tuo amico.
|
||||||
|
@ -1273,9 +1267,6 @@ Hook Collisions
|
||||||
Show health, shields and ammo
|
Show health, shields and ammo
|
||||||
== Mostra vita, scudi e munizioni
|
== Mostra vita, scudi e munizioni
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Mostra gli ID clienti nella scoreboard
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== Mostra l'HUD DDRace
|
== Mostra l'HUD DDRace
|
||||||
|
|
||||||
|
@ -1411,9 +1402,18 @@ Could not initialize the given graphics backend, reverting to the default backen
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1680,6 +1680,12 @@ Unable to delete the demo '%s'
|
||||||
Unable to delete the folder '%s'. Make sure it's empty first.
|
Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Loading…
|
Loading…
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1783,6 +1789,9 @@ Show local time always
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
==
|
||||||
|
|
||||||
Always show chat
|
Always show chat
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1873,6 +1882,39 @@ Regular background color
|
||||||
Entities background color
|
Entities background color
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Extras
|
Extras
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -274,9 +274,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== 所在地:
|
== 所在地:
|
||||||
|
|
||||||
Player options
|
|
||||||
== プレイヤー設定
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== プレーヤー
|
== プレーヤー
|
||||||
|
|
||||||
|
@ -684,9 +681,6 @@ Kill
|
||||||
Pause
|
Pause
|
||||||
== 観察
|
== 観察
|
||||||
|
|
||||||
Reload
|
|
||||||
== 更新
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== 無効にする
|
== 無効にする
|
||||||
|
|
||||||
|
@ -1135,9 +1129,18 @@ Could not initialize the given graphics backend, reverting to the default backen
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1512,6 +1515,12 @@ Unable to delete the demo '%s'
|
||||||
Unable to delete the folder '%s'. Make sure it's empty first.
|
Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Loading…
|
Loading…
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1664,7 +1673,7 @@ Show local time always
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
==
|
==
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
|
@ -1829,6 +1838,39 @@ Chat command (e.g. showall 1)
|
||||||
Unregister protocol and file extensions
|
Unregister protocol and file extensions
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Extras
|
Extras
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -280,9 +280,6 @@ Pistol
|
||||||
Player
|
Player
|
||||||
== 플레이어
|
== 플레이어
|
||||||
|
|
||||||
Player options
|
|
||||||
== 플레이어 옵션
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== 플레이어
|
== 플레이어
|
||||||
|
|
||||||
|
@ -534,9 +531,6 @@ Successfully saved the replay!
|
||||||
Replay feature is disabled!
|
Replay feature is disabled!
|
||||||
== 리플레이 기능을 비활성화했습니다!
|
== 리플레이 기능을 비활성화했습니다!
|
||||||
|
|
||||||
The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs.
|
|
||||||
== 텍스처 %s 의 너비 또는 높이를 %d 으로 나눌 수 없습니다. 이는 시각적 오류를 발생시킬 수 있습니다.
|
|
||||||
|
|
||||||
Warning
|
Warning
|
||||||
== 주의
|
== 주의
|
||||||
|
|
||||||
|
@ -702,9 +696,6 @@ Pause
|
||||||
Time
|
Time
|
||||||
== 시간
|
== 시간
|
||||||
|
|
||||||
Reload
|
|
||||||
== 새로고침
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== 비활성화
|
== 비활성화
|
||||||
|
|
||||||
|
@ -1359,9 +1350,6 @@ Show health, shields and ammo
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== DDRace HUD
|
== DDRace HUD
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== 점수판에 클라이언트 ID 표시
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== DDRace HUD 표시
|
== DDRace HUD 표시
|
||||||
|
|
||||||
|
@ -1563,6 +1551,15 @@ Copy info
|
||||||
Create a random skin
|
Create a random skin
|
||||||
== 무작위 스킨 생성
|
== 무작위 스킨 생성
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1575,6 +1572,9 @@ Saving settings to '%s' failed
|
||||||
Error saving settings
|
Error saving settings
|
||||||
==
|
==
|
||||||
|
|
||||||
|
The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs.
|
||||||
|
==
|
||||||
|
|
||||||
Loading demo file from storage
|
Loading demo file from storage
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1784,6 +1784,12 @@ Delete folder
|
||||||
Unable to delete the folder '%s'. Make sure it's empty first.
|
Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Loading…
|
Loading…
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1814,6 +1820,9 @@ Info Messages
|
||||||
Show local time always
|
Show local time always
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
==
|
||||||
|
|
||||||
Always show chat
|
Always show chat
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1865,6 +1874,39 @@ Regular background color
|
||||||
Entities background color
|
Entities background color
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Round %d/%d
|
Round %d/%d
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -309,9 +309,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Өлкөсү:
|
== Өлкөсү:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Оюнчу опциялары
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Оюнчулар
|
== Оюнчулар
|
||||||
|
|
||||||
|
@ -546,9 +543,18 @@ Could not initialize the given graphics backend, reverting to the default backen
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1091,6 +1097,12 @@ Are you sure that you want to disconnect?
|
||||||
Connect Dummy
|
Connect Dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Connecting dummy
|
Connecting dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1435,7 +1447,7 @@ Show votes window after voting
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
==
|
==
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
|
@ -1684,9 +1696,6 @@ Regular background color
|
||||||
Entities background color
|
Entities background color
|
||||||
==
|
==
|
||||||
|
|
||||||
Reload
|
|
||||||
==
|
|
||||||
|
|
||||||
Use current map as background
|
Use current map as background
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1723,6 +1732,39 @@ No updates available
|
||||||
Check now
|
Check now
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Emoticons
|
Emoticons
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -279,9 +279,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Spillerland:
|
== Spillerland:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Spillerinstillinger
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Spillere
|
== Spillere
|
||||||
|
|
||||||
|
@ -653,9 +650,6 @@ Connecting dummy
|
||||||
Connect Dummy
|
Connect Dummy
|
||||||
== Koble til dummy
|
== Koble til dummy
|
||||||
|
|
||||||
Reload
|
|
||||||
== Last på nytt
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== Deaktiver
|
== Deaktiver
|
||||||
|
|
||||||
|
@ -1101,9 +1095,18 @@ Could not initialize the given graphics backend, reverting to the default backen
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1487,6 +1490,12 @@ Unable to delete the demo '%s'
|
||||||
Unable to delete the folder '%s'. Make sure it's empty first.
|
Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Loading…
|
Loading…
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1654,7 +1663,7 @@ Show local time always
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
==
|
==
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
|
@ -1825,6 +1834,39 @@ Chat command (e.g. showall 1)
|
||||||
Unregister protocol and file extensions
|
Unregister protocol and file extensions
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Extras
|
Extras
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -519,9 +519,6 @@ Kill
|
||||||
Pause
|
Pause
|
||||||
== ﺚﮑﻣ ﺖﻟﺎﺣ
|
== ﺚﮑﻣ ﺖﻟﺎﺣ
|
||||||
|
|
||||||
Player options
|
|
||||||
== ﻦﮑﯾﺯﺎﺑ ﺕﺎﻤﯿﻈﻨﺗ
|
|
||||||
|
|
||||||
Player
|
Player
|
||||||
== ﻦﮑﯾﺯﺎﺑ
|
== ﻦﮑﯾﺯﺎﺑ
|
||||||
|
|
||||||
|
@ -543,9 +540,6 @@ Vote command:
|
||||||
Time
|
Time
|
||||||
== ﻥﺎﻣﺯ
|
== ﻥﺎﻣﺯ
|
||||||
|
|
||||||
Reload
|
|
||||||
== ﻩﺭﺎﺑﻭﺩ ﯼﺮﯿﮔﺭﺎﺑ
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== ﻥﺩﺮﮐ ﻝﺎﻌﻓﺮﯿﻏ
|
== ﻥﺩﺮﮐ ﻝﺎﻌﻓﺮﯿﻏ
|
||||||
|
|
||||||
|
@ -1225,9 +1219,6 @@ Show votes window after voting
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== DDRace HUD
|
== DDRace HUD
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== ﺯﺎﯿﺘﻣﺍ ﯼﻮﻠﺑﺎﺗ ﺭﺩ ﺖﻨﯾﻼﮐ ID ﺶﯾﺎﻤﻧ
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== DDRace HUD ﺶﯾﺎﻤﻧ
|
== DDRace HUD ﺶﯾﺎﻤﻧ
|
||||||
|
|
||||||
|
@ -1518,9 +1509,18 @@ Could not initialize the given graphics backend, reverting to the default backen
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1754,6 +1754,12 @@ Delete folder
|
||||||
Unable to delete the folder '%s'. Make sure it's empty first.
|
Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Loading…
|
Loading…
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1787,6 +1793,9 @@ Info Messages
|
||||||
Show local time always
|
Show local time always
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
==
|
||||||
|
|
||||||
Always show chat
|
Always show chat
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1841,6 +1850,39 @@ Entities background color
|
||||||
Unregister protocol and file extensions
|
Unregister protocol and file extensions
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Round %d/%d
|
Round %d/%d
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -282,9 +282,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Narodowość:
|
== Narodowość:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Opcje gracza
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Gracze
|
== Gracze
|
||||||
|
|
||||||
|
@ -683,9 +680,6 @@ Enable replays
|
||||||
Automatically create statboard csv
|
Automatically create statboard csv
|
||||||
== Automatycznie stwórz plik csv z tabelą wyników
|
== Automatycznie stwórz plik csv z tabelą wyników
|
||||||
|
|
||||||
Reload
|
|
||||||
== Przeładuj
|
|
||||||
|
|
||||||
Replay feature is disabled!
|
Replay feature is disabled!
|
||||||
== Funkcja odtwarzania jest wyłączona!
|
== Funkcja odtwarzania jest wyłączona!
|
||||||
|
|
||||||
|
@ -1639,9 +1633,6 @@ Show health, shields and ammo
|
||||||
Show local time always
|
Show local time always
|
||||||
== Pokazuj czas lokalny
|
== Pokazuj czas lokalny
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Pokazuj ID klienta w tabeli wyników
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== Pokazuj HUD DDRace
|
== Pokazuj HUD DDRace
|
||||||
|
|
||||||
|
@ -1808,6 +1799,15 @@ Submitting the render commands failed. Try to update your GPU drivers.
|
||||||
Failed to swap framebuffers. Try to update your GPU drivers.
|
Failed to swap framebuffers. Try to update your GPU drivers.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Match %d of %d
|
Match %d of %d
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1840,6 +1840,12 @@ Folder Link
|
||||||
map not included
|
map not included
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Aim bind
|
Aim bind
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1855,9 +1861,45 @@ Tee
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
==
|
||||||
|
|
||||||
Show only chat messages from team members
|
Show only chat messages from team members
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Round %d/%d
|
Round %d/%d
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -290,9 +290,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== País do jogador
|
== País do jogador
|
||||||
|
|
||||||
Player options
|
|
||||||
== Opções do jogador
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Jogadores
|
== Jogadores
|
||||||
|
|
||||||
|
@ -773,9 +770,6 @@ Connect Dummy
|
||||||
Time
|
Time
|
||||||
== Tempo
|
== Tempo
|
||||||
|
|
||||||
Reload
|
|
||||||
== Recarregar
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== Desativar
|
== Desativar
|
||||||
|
|
||||||
|
@ -890,9 +884,18 @@ Could not initialize the given graphics backend, reverting to the default backen
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1330,6 +1333,12 @@ Unable to delete the demo '%s'
|
||||||
Unable to delete the folder '%s'. Make sure it's empty first.
|
Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Kill
|
Kill
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1563,7 +1572,7 @@ Show local time always
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
==
|
==
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
|
@ -1767,6 +1776,39 @@ Chat command (e.g. showall 1)
|
||||||
Unregister protocol and file extensions
|
Unregister protocol and file extensions
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Emoticons
|
Emoticons
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -286,9 +286,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Țara jucătorului:
|
== Țara jucătorului:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Opțiuni jucător
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Jucători
|
== Jucători
|
||||||
|
|
||||||
|
@ -561,9 +558,18 @@ Could not initialize the given graphics backend, reverting to the default backen
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1106,6 +1112,12 @@ Are you sure that you want to disconnect?
|
||||||
Connect Dummy
|
Connect Dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Connecting dummy
|
Connecting dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1450,7 +1462,7 @@ Show votes window after voting
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
==
|
==
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
|
@ -1699,9 +1711,6 @@ Regular background color
|
||||||
Entities background color
|
Entities background color
|
||||||
==
|
==
|
||||||
|
|
||||||
Reload
|
|
||||||
==
|
|
||||||
|
|
||||||
Use current map as background
|
Use current map as background
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1738,6 +1747,39 @@ No updates available
|
||||||
Check now
|
Check now
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Emoticons
|
Emoticons
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -294,9 +294,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Страна игрока:
|
== Страна игрока:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Опции игрока
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Игроки
|
== Игроки
|
||||||
|
|
||||||
|
@ -634,7 +631,7 @@ Loading DDNet Client
|
||||||
== Загрузка DDNet Client
|
== Загрузка DDNet Client
|
||||||
|
|
||||||
Normal message
|
Normal message
|
||||||
== Обычное с.
|
== Обычное
|
||||||
|
|
||||||
Connecting dummy
|
Connecting dummy
|
||||||
== Подключение дамми
|
== Подключение дамми
|
||||||
|
@ -646,10 +643,10 @@ Save ghost
|
||||||
== Сохранять тень
|
== Сохранять тень
|
||||||
|
|
||||||
DDNet Client updated!
|
DDNet Client updated!
|
||||||
== DDNet Client обновлён!
|
== DDNet клиент обновлён!
|
||||||
|
|
||||||
Highlighted message
|
Highlighted message
|
||||||
== Выделенное с.
|
== Выделенное
|
||||||
|
|
||||||
Demo
|
Demo
|
||||||
== Демо
|
== Демо
|
||||||
|
@ -727,7 +724,7 @@ Downloading %s:
|
||||||
== Скачивание %s:
|
== Скачивание %s:
|
||||||
|
|
||||||
Update failed! Check log…
|
Update failed! Check log…
|
||||||
== Ошибка. Проверьте логи…
|
== Не удалось обновиться! Подробности в логах…
|
||||||
|
|
||||||
Restart
|
Restart
|
||||||
== Рестарт
|
== Рестарт
|
||||||
|
@ -750,9 +747,6 @@ Fetch Info
|
||||||
Connect Dummy
|
Connect Dummy
|
||||||
== Подключить дамми
|
== Подключить дамми
|
||||||
|
|
||||||
Reload
|
|
||||||
== Перезагрузить
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== Выключить
|
== Выключить
|
||||||
|
|
||||||
|
@ -805,7 +799,7 @@ Toggle dyncam
|
||||||
== Смена дин. камеры
|
== Смена дин. камеры
|
||||||
|
|
||||||
Toggle dummy
|
Toggle dummy
|
||||||
== Смена Tee
|
== Переключение дамми
|
||||||
|
|
||||||
Toggle ghost
|
Toggle ghost
|
||||||
== Переключить тень
|
== Переключить тень
|
||||||
|
@ -850,7 +844,7 @@ DDNet
|
||||||
== DDNet
|
== DDNet
|
||||||
|
|
||||||
Friend message
|
Friend message
|
||||||
== Дружеское с.
|
== Дружеское
|
||||||
|
|
||||||
Save the best demo of each race
|
Save the best demo of each race
|
||||||
== Сохранять лучшее демо каждой карты
|
== Сохранять лучшее демо каждой карты
|
||||||
|
@ -922,10 +916,10 @@ Ratio
|
||||||
== Соотношение
|
== Соотношение
|
||||||
|
|
||||||
Net
|
Net
|
||||||
== Сеть
|
== Сальдо
|
||||||
|
|
||||||
FPM
|
FPM
|
||||||
== FPM
|
== У/мин
|
||||||
|
|
||||||
Spree
|
Spree
|
||||||
== Серия
|
== Серия
|
||||||
|
@ -946,7 +940,7 @@ Grabs
|
||||||
== 9+ упоминаний
|
== 9+ упоминаний
|
||||||
|
|
||||||
Client message
|
Client message
|
||||||
== Клиентское с.
|
== Клиентское
|
||||||
|
|
||||||
Warning
|
Warning
|
||||||
== Предупреждение
|
== Предупреждение
|
||||||
|
@ -979,7 +973,7 @@ Run server
|
||||||
== Запустить сервер
|
== Запустить сервер
|
||||||
|
|
||||||
Server executable not found, can't run server
|
Server executable not found, can't run server
|
||||||
== Файл сервера не найден, невозможно запустить
|
== Файл сервера не найден, не удалось запустить сервер
|
||||||
|
|
||||||
Editor
|
Editor
|
||||||
== Редактор
|
== Редактор
|
||||||
|
@ -1362,9 +1356,6 @@ Show health, shields and ammo
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== DDRace HUD
|
== DDRace HUD
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Показывать ид. игроков
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== Показывать DDRace HUD
|
== Показывать DDRace HUD
|
||||||
|
|
||||||
|
@ -1835,10 +1826,10 @@ No login required
|
||||||
== Без логина
|
== Без логина
|
||||||
|
|
||||||
Player info change cooldown
|
Player info change cooldown
|
||||||
== Задержка смены информации об игроке
|
== Кулдаун смены данных об игроке
|
||||||
|
|
||||||
Tee
|
Tee
|
||||||
== Ти
|
== Тии
|
||||||
|
|
||||||
Always show chat
|
Always show chat
|
||||||
== Всегда показывать чат
|
== Всегда показывать чат
|
||||||
|
@ -1887,3 +1878,54 @@ Team %d (%d/%d)
|
||||||
|
|
||||||
https://wiki.ddnet.org/wiki/Mapping
|
https://wiki.ddnet.org/wiki/Mapping
|
||||||
== https://wiki.ddnet.org/wiki/Mapping/ru
|
== https://wiki.ddnet.org/wiki/Mapping/ru
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
== Не удалось определить адрес подключения '%s'. Подробности в локальной консоли.
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
== Ошибка адреса подключения
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
== Невозможно подключить дамми
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
== Дамми не разрешен на этом сервере
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
== Пожалуйста, подождите…
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
== Показывать ID клиента (табло, чат, наблюдатель)
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
== Обычный:
|
||||||
|
|
||||||
|
Team:
|
||||||
|
== В команде:
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
== Настройки дамми
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
== Нажмите, чтобы изменить настройки дамми
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
== Случайный
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
== Вы уверены, что хотите удалить '%s'?
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
== Удалить скин
|
||||||
|
|
||||||
|
Basic
|
||||||
|
== Пресеты
|
||||||
|
|
||||||
|
Custom
|
||||||
|
== Кастомизация
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
== Невозможно удалить скин
|
||||||
|
|
||||||
|
Customize
|
||||||
|
== Кастомизировать
|
||||||
|
|
|
@ -281,9 +281,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Država igrača
|
== Država igrača
|
||||||
|
|
||||||
Player options
|
|
||||||
== Podešavanja igrača
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Igrači
|
== Igrači
|
||||||
|
|
||||||
|
@ -685,9 +682,6 @@ Kill
|
||||||
Pause
|
Pause
|
||||||
== Pauza
|
== Pauza
|
||||||
|
|
||||||
Reload
|
|
||||||
== Osveži
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== Deaktiviraj
|
== Deaktiviraj
|
||||||
|
|
||||||
|
@ -1264,9 +1258,6 @@ Show health, shields and ammo
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== DDRace Prikaz
|
== DDRace Prikaz
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Prikaži identitete na tabli rezultata
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== Prikaži DDRace Prikaz
|
== Prikaži DDRace Prikaz
|
||||||
|
|
||||||
|
@ -1649,6 +1640,15 @@ Could not initialize the given graphics backend, reverting to the default backen
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1785,6 +1785,12 @@ Netversion
|
||||||
map not included
|
map not included
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Loading…
|
Loading…
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1809,6 +1815,9 @@ Info Messages
|
||||||
Show local time always
|
Show local time always
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
==
|
||||||
|
|
||||||
Always show chat
|
Always show chat
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1860,6 +1869,39 @@ Regular background color
|
||||||
Entities background color
|
Entities background color
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Round %d/%d
|
Round %d/%d
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -277,9 +277,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Држава играча
|
== Држава играча
|
||||||
|
|
||||||
Player options
|
|
||||||
== Подешавања играча
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Играчи
|
== Играчи
|
||||||
|
|
||||||
|
@ -684,9 +681,6 @@ Kill
|
||||||
Pause
|
Pause
|
||||||
== Пауза
|
== Пауза
|
||||||
|
|
||||||
Reload
|
|
||||||
== Освежи
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== Деактивирај
|
== Деактивирај
|
||||||
|
|
||||||
|
@ -1263,9 +1257,6 @@ Show health, shields and ammo
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== DDRace Приказ
|
== DDRace Приказ
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Прикажи идентитете на табли резултата
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== Прикажи DDRace Приказ
|
== Прикажи DDRace Приказ
|
||||||
|
|
||||||
|
@ -1422,9 +1413,18 @@ Could not initialize the given graphics backend, reverting to the default backen
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
==
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
==
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
==
|
||||||
|
|
||||||
Error playing demo
|
Error playing demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1703,6 +1703,12 @@ Unable to delete the demo '%s'
|
||||||
Unable to delete the folder '%s'. Make sure it's empty first.
|
Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
==
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
==
|
||||||
|
|
||||||
Loading…
|
Loading…
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1766,6 +1772,9 @@ Info Messages
|
||||||
Show local time always
|
Show local time always
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
==
|
||||||
|
|
||||||
Always show chat
|
Always show chat
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1850,6 +1859,39 @@ Entities background color
|
||||||
Unregister protocol and file extensions
|
Unregister protocol and file extensions
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
==
|
||||||
|
|
||||||
|
Team:
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Basic
|
||||||
|
==
|
||||||
|
|
||||||
|
Custom
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
==
|
||||||
|
|
||||||
|
Customize
|
||||||
|
==
|
||||||
|
|
||||||
Open the directory to add custom assets
|
Open the directory to add custom assets
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
# 2024-04-21 By
|
# 2024-04-21 By
|
||||||
# 2024-06-10 By
|
# 2024-06-10 By
|
||||||
# 2024-07-21 By
|
# 2024-07-21 By
|
||||||
|
# 2024-08-29 Pioooooo
|
||||||
##### /authors #####
|
##### /authors #####
|
||||||
|
|
||||||
##### translated strings #####
|
##### translated strings #####
|
||||||
|
@ -342,9 +343,6 @@ HUD
|
||||||
Player country:
|
Player country:
|
||||||
== 玩家国家 / 地区:
|
== 玩家国家 / 地区:
|
||||||
|
|
||||||
Player options
|
|
||||||
== 玩家选项
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== 玩家
|
== 玩家
|
||||||
|
|
||||||
|
@ -831,9 +829,6 @@ Show DDNet map finishes in server browser
|
||||||
transmits your player name to info.ddnet.org
|
transmits your player name to info.ddnet.org
|
||||||
== 将会发送你的玩家昵称到 info.ddnet.org
|
== 将会发送你的玩家昵称到 info.ddnet.org
|
||||||
|
|
||||||
Reload
|
|
||||||
== 刷新
|
|
||||||
|
|
||||||
Enable replays
|
Enable replays
|
||||||
== 启用短时回放
|
== 启用短时回放
|
||||||
|
|
||||||
|
@ -1389,9 +1384,6 @@ Show health, shields and ammo
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== DDRace HUD
|
== DDRace HUD
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== 显示客户端 IDs (计分板中)
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== 显示 DDRace HUD
|
== 显示 DDRace HUD
|
||||||
|
|
||||||
|
@ -1523,7 +1515,7 @@ Are you sure that you want to reset the controls to their defaults?
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Failed during initialization. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
Failed during initialization. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
||||||
== 初始化失败。请尝试打开配置目录中的设置文件(settings_ddnet.cfg)并将“gfx_backend OpenGL”修改为“gfx_backend Vulkan”(若没有前者则可直接输入后者)再重试。
|
== 初始化失败。请尝试打开配置目录中的设置文件(settings_ddnet.cfg)并将 “gfx_backend” 设置为 “gfx_backend OpenGL” 或 “gfx_backend Vulkan” 再重试。
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Out of VRAM. Try removing custom assets (skins, entities, etc.), especially those with high resolution.
|
Out of VRAM. Try removing custom assets (skins, entities, etc.), especially those with high resolution.
|
||||||
|
@ -1547,7 +1539,7 @@ Failed to swap framebuffers. Try to update your GPU drivers.
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Unknown error. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
Unknown error. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
||||||
== 未知错误。请尝试打开配置目录中的设置文件(settings_ddnet.cfg)并将“gfx_backend OpenGL”修改为“gfx_backend Vulkan”(若没有前者则可直接输入后者)再重试。
|
== 未知错误。请尝试打开配置目录中的设置文件(settings_ddnet.cfg)并将 “gfx_backend” 设置为 “gfx_backend OpenGL” 或 “gfx_backend Vulkan” 再重试。
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Could not initialize the given graphics backend, reverting to the default backend now.
|
Could not initialize the given graphics backend, reverting to the default backend now.
|
||||||
|
@ -1575,7 +1567,7 @@ No controller found. Plug in a controller.
|
||||||
== 未检测到任何控制器。请尝试重新连接控制器。
|
== 未检测到任何控制器。请尝试重新连接控制器。
|
||||||
|
|
||||||
Unregister protocol and file extensions
|
Unregister protocol and file extensions
|
||||||
== 未注册的协议与扩充文件
|
== 清除协议与文件类型关联
|
||||||
|
|
||||||
Open the directory to add custom assets
|
Open the directory to add custom assets
|
||||||
== 打开用以添加自定义资源的文件夹路径
|
== 打开用以添加自定义资源的文件夹路径
|
||||||
|
@ -1914,3 +1906,54 @@ Team %d (%d/%d)
|
||||||
|
|
||||||
https://wiki.ddnet.org/wiki/Mapping
|
https://wiki.ddnet.org/wiki/Mapping
|
||||||
== https://wiki.ddnet.org/index.php?title=Mapping/zh&variant=zh-hans
|
== https://wiki.ddnet.org/index.php?title=Mapping/zh&variant=zh-hans
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
== 无法解析连接地址 '%s'。检查本地控制台以获取详情。
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
== 连接地址错误
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
== 无法连接分身
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
== 此服务器禁止使用分身
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
== 请稍等…
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
== 显示客户端 ID(计分板、聊天、观战者)
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
== 正常:
|
||||||
|
|
||||||
|
Team:
|
||||||
|
== 队伍:
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
== 分身设置
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
== 切换以编辑分身设置
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
== 随机
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
== 你确定要删除'%s'吗?
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
== 删除皮肤
|
||||||
|
|
||||||
|
Basic
|
||||||
|
== 基本
|
||||||
|
|
||||||
|
Custom
|
||||||
|
== 自定义
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
== 无法删除皮肤
|
||||||
|
|
||||||
|
Customize
|
||||||
|
== 自定义
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
# Limit and Petr
|
# Limit and Petr
|
||||||
#modified by:
|
#modified by:
|
||||||
# LimiT 2011-07-02 20:24:44
|
# LimiT 2011-07-02 20:24:44
|
||||||
# dobrykafe 2024-06-09 00:00:00
|
# dobrykafe 2024-08-30 00:00:00
|
||||||
##### /authors #####
|
##### /authors #####
|
||||||
|
|
||||||
##### translated strings #####
|
##### translated strings #####
|
||||||
|
@ -278,9 +278,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Filter krajín:
|
== Filter krajín:
|
||||||
|
|
||||||
Player options
|
|
||||||
== Nastavenia hráča
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Hráči
|
== Hráči
|
||||||
|
|
||||||
|
@ -1420,9 +1417,6 @@ Show votes window after voting
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== DDRace HUD
|
== DDRace HUD
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Zobraziť ID klientov vo výsledkovej tabuľke
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== Zobraziť DDRace HUD
|
== Zobraziť DDRace HUD
|
||||||
|
|
||||||
|
@ -1648,9 +1642,6 @@ Regular background color
|
||||||
Entities background color
|
Entities background color
|
||||||
== Farba pozadia entít
|
== Farba pozadia entít
|
||||||
|
|
||||||
Reload
|
|
||||||
== Znovu načítať
|
|
||||||
|
|
||||||
Use current map as background
|
Use current map as background
|
||||||
== Použiť aktuálnu mapu ako pozadie
|
== Použiť aktuálnu mapu ako pozadie
|
||||||
|
|
||||||
|
@ -1850,26 +1841,77 @@ Tee
|
||||||
Show only chat messages from team members
|
Show only chat messages from team members
|
||||||
== Zobraziť iba správy od členov tímu
|
== Zobraziť iba správy od členov tímu
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
== Nie je možné získať adresu na pripojenie '%s'. Podrobnosti nájdete v miestnej konzole.
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
== Chyba v adrese na pripojenie
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
== Nepodarilo sa pripojiť dummyho
|
||||||
|
|
||||||
[Spectating]
|
[Spectating]
|
||||||
Following %s
|
Following %s
|
||||||
==
|
== Sledujete %s
|
||||||
|
|
||||||
Example of usage
|
Example of usage
|
||||||
==
|
== Príklad použitia
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
== Dummy nie je na tomto serveri povolený
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
== Čakajte prosím…
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
== Zobraziť ID klientov (výsledková tabuľka, chat, divák)
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
== Normálny:
|
||||||
|
|
||||||
|
Team:
|
||||||
|
== Tím:
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
== Nastavenie dummyho
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
== Prepnutím upravíte nastavenie dummyho
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
== Randomizovať
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
== Ste si istí, že chcete zmazať '%s'?
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
== Odstrániť skin
|
||||||
|
|
||||||
|
Basic
|
||||||
|
== Základné
|
||||||
|
|
||||||
|
Custom
|
||||||
|
== Vlastné
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
== Nedá sa odstrániť skin
|
||||||
|
|
||||||
|
Customize
|
||||||
|
== Prispôsobiť
|
||||||
|
|
||||||
Round %d/%d
|
Round %d/%d
|
||||||
==
|
== Kolo %d/%d
|
||||||
|
|
||||||
[Spectators]
|
[Spectators]
|
||||||
%d others…
|
%d others…
|
||||||
==
|
== %d ďalších…
|
||||||
|
|
||||||
[Team and size]
|
[Team and size]
|
||||||
%d\n(%d/%d)
|
%d\n(%d/%d)
|
||||||
==
|
== %d\n(%d/%d)
|
||||||
|
|
||||||
Team %d (%d/%d)
|
Team %d (%d/%d)
|
||||||
==
|
== Tím %d (%d/%d)
|
||||||
|
|
||||||
https://wiki.ddnet.org/wiki/Mapping
|
https://wiki.ddnet.org/wiki/Mapping
|
||||||
==
|
== https://wiki.ddnet.org/wiki/Mapping
|
||||||
|
|
|
@ -299,9 +299,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== País del jugador
|
== País del jugador
|
||||||
|
|
||||||
Player options
|
|
||||||
== Opciones de jugador
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Jugadores
|
== Jugadores
|
||||||
|
|
||||||
|
@ -626,7 +623,7 @@ Types
|
||||||
== Tipos
|
== Tipos
|
||||||
|
|
||||||
DDNet %s is out!
|
DDNet %s is out!
|
||||||
== ¡DDNet %s ya esta disponible!
|
== ¡DDNet %s ya está disponible!
|
||||||
|
|
||||||
Downloading %s:
|
Downloading %s:
|
||||||
== Descargando %s:
|
== Descargando %s:
|
||||||
|
@ -673,9 +670,6 @@ Connecting dummy
|
||||||
Connect Dummy
|
Connect Dummy
|
||||||
== Conectar Dummy
|
== Conectar Dummy
|
||||||
|
|
||||||
Reload
|
|
||||||
== Recargar
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== Desactivar
|
== Desactivar
|
||||||
|
|
||||||
|
@ -1390,9 +1384,6 @@ Show health, shields and ammo
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== HUD DDRace
|
== HUD DDRace
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Mostrar IDs de cliente en la tabla de puntuación
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== Mostrar el HUD DDRace
|
== Mostrar el HUD DDRace
|
||||||
|
|
||||||
|
@ -1891,3 +1882,54 @@ Team %d (%d/%d)
|
||||||
|
|
||||||
https://wiki.ddnet.org/wiki/Mapping
|
https://wiki.ddnet.org/wiki/Mapping
|
||||||
== https://wiki.ddnet.org/wiki/Mapping/es
|
== https://wiki.ddnet.org/wiki/Mapping/es
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
== No se pudo resolver la dirección de conexión '%s'. Ver la consola local para más detalles.
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
== Error de dirección de conexión
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
== No se pudo conectar tu dummy
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
== No se permiten dummys en este servidor
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
== Espera por favor…
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
== Mostrar IDs de cliente (scoreboard, chat, espectador)
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
== Normal:
|
||||||
|
|
||||||
|
Team:
|
||||||
|
== Equipo:
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
== Configuración del dummy
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
== Actívalo para configurar tu dummy
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
== Aleatorizar
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
== ¿Estás seguro de que quieres eliminar '%s'?
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
== Eliminar skin
|
||||||
|
|
||||||
|
Basic
|
||||||
|
== Básico
|
||||||
|
|
||||||
|
Custom
|
||||||
|
== Personalizado
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
== No se pudo borrar la skin
|
||||||
|
|
||||||
|
Customize
|
||||||
|
== Personalizar
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
# 3edcxzaq1 2020-06-25 00:00:00
|
# 3edcxzaq1 2020-06-25 00:00:00
|
||||||
# cur.ie 2020-09-28 00:00:00
|
# cur.ie 2020-09-28 00:00:00
|
||||||
# simpygirl 2022-02-20 00:00:00
|
# simpygirl 2022-02-20 00:00:00
|
||||||
# furo 2024-07-17 00:00:00
|
# furo 2024-08-29 00:00:00
|
||||||
##### /authors #####
|
##### /authors #####
|
||||||
|
|
||||||
##### translated strings #####
|
##### translated strings #####
|
||||||
|
@ -282,9 +282,6 @@ Player
|
||||||
Player country:
|
Player country:
|
||||||
== Land
|
== Land
|
||||||
|
|
||||||
Player options
|
|
||||||
== Spelaralternativ
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Spelare
|
== Spelare
|
||||||
|
|
||||||
|
@ -900,9 +897,6 @@ Show HUD
|
||||||
Pause
|
Pause
|
||||||
== Pausa
|
== Pausa
|
||||||
|
|
||||||
Reload
|
|
||||||
== Ladda om
|
|
||||||
|
|
||||||
Spree
|
Spree
|
||||||
== Spree
|
== Spree
|
||||||
|
|
||||||
|
@ -1516,9 +1510,6 @@ Show health, shields and ammo
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== DDRace HUD
|
== DDRace HUD
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Visa klient ID i poänglista
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== Visa DDRace HUD
|
== Visa DDRace HUD
|
||||||
|
|
||||||
|
@ -1875,3 +1866,54 @@ Team %d (%d/%d)
|
||||||
|
|
||||||
https://wiki.ddnet.org/wiki/Mapping
|
https://wiki.ddnet.org/wiki/Mapping
|
||||||
== https://wiki.ddnet.org/wiki/Mapping
|
== https://wiki.ddnet.org/wiki/Mapping
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
== Kunde inte förstå anslutnings adress '%s'. Se den lokala konsolen för detaljer.
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
== Anslutnings problem
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
== Kunde inte ansluta dummy
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
== Dummy är inte tillåten på denna server
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
== Vänligen vänta…
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
== Visa klient IDen (poänglistan, chatt, åskadarmeny)
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
== Normal:
|
||||||
|
|
||||||
|
Team:
|
||||||
|
== Lag:
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
== Dummy inställningar
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
== Växla för att ändra dina dummy inställningar
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
== Slumpa
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
== Är du säker att du vill ta bort '%s'?
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
== Ta bort skin
|
||||||
|
|
||||||
|
Basic
|
||||||
|
== Enkel
|
||||||
|
|
||||||
|
Custom
|
||||||
|
== Anpassa
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
== Kunde inte ta bort skin
|
||||||
|
|
||||||
|
Customize
|
||||||
|
== Ändra
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
# 2024-04-21 By
|
# 2024-04-21 By
|
||||||
# 2024-06-10 By
|
# 2024-06-10 By
|
||||||
# 2024-07-21 By
|
# 2024-07-21 By
|
||||||
|
# 2024-08-29 Pioooooo
|
||||||
##### /authors #####
|
##### /authors #####
|
||||||
|
|
||||||
##### translated strings #####
|
##### translated strings #####
|
||||||
|
@ -331,9 +332,6 @@ HUD
|
||||||
Player country:
|
Player country:
|
||||||
== 玩家國家/地區:
|
== 玩家國家/地區:
|
||||||
|
|
||||||
Player options
|
|
||||||
== 玩家選項
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== 玩家
|
== 玩家
|
||||||
|
|
||||||
|
@ -820,9 +818,6 @@ Show DDNet map finishes in server browser
|
||||||
transmits your player name to info.ddnet.org
|
transmits your player name to info.ddnet.org
|
||||||
== 將會發送你的玩家名稱到 info.ddnet.org
|
== 將會發送你的玩家名稱到 info.ddnet.org
|
||||||
|
|
||||||
Reload
|
|
||||||
== 重新整理
|
|
||||||
|
|
||||||
Enable replays
|
Enable replays
|
||||||
== 啟用短時回放
|
== 啟用短時回放
|
||||||
|
|
||||||
|
@ -1378,9 +1373,6 @@ Show health, shields and ammo
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== DDRace HUD
|
== DDRace HUD
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== 顯示客戶端 IDs (計分板中)
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== 顯示 DDRace HUD
|
== 顯示 DDRace HUD
|
||||||
|
|
||||||
|
@ -1512,7 +1504,7 @@ Are you sure that you want to reset the controls to their defaults?
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Failed during initialization. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
Failed during initialization. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
||||||
== 初始化失敗。請嘗試打開配置目錄中的設定檔案 (settings_ddnet.cfg) 并將“gfx_backend OpenGL”修改為“gfx_backend Vulkan” (若沒有前者則可直接輸入後者) 再重試。
|
== 初始化失敗。請嘗試打開配置目錄中的設定檔案 (settings_ddnet.cfg) 并將 “gfx_backend” 設定為 “gfx_backend OpenGL” 或 “gfx_backend Vulkan” 再重試。
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Out of VRAM. Try removing custom assets (skins, entities, etc.), especially those with high resolution.
|
Out of VRAM. Try removing custom assets (skins, entities, etc.), especially those with high resolution.
|
||||||
|
@ -1536,7 +1528,7 @@ Failed to swap framebuffers. Try to update your GPU drivers.
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Unknown error. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
Unknown error. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
||||||
== 未知錯誤。請嘗試打開配置目錄中的設定檔案 (settings_ddnet.cfg) 并將“gfx_backend OpenGL”修改為“gfx_backend Vulkan” (若沒有前者則可直接輸入後者) 再重試。
|
== 未知錯誤。請嘗試打開配置目錄中的設定檔案 (settings_ddnet.cfg) 并將 “gfx_backend” 設定為 “gfx_backend OpenGL” 或 “gfx_backend Vulkan” 再重試。
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Could not initialize the given graphics backend, reverting to the default backend now.
|
Could not initialize the given graphics backend, reverting to the default backend now.
|
||||||
|
@ -1564,7 +1556,7 @@ No controller found. Plug in a controller.
|
||||||
== 未檢測到任何控制器。請嘗試重新連接控制器。
|
== 未檢測到任何控制器。請嘗試重新連接控制器。
|
||||||
|
|
||||||
Unregister protocol and file extensions
|
Unregister protocol and file extensions
|
||||||
== 未注冊的協議與擴充檔案
|
== 清除連結與檔案類型關聯
|
||||||
|
|
||||||
Open the directory to add custom assets
|
Open the directory to add custom assets
|
||||||
== 打開用以新增自定義材質的資料夾路徑
|
== 打開用以新增自定義材質的資料夾路徑
|
||||||
|
@ -1903,3 +1895,54 @@ Team %d (%d/%d)
|
||||||
|
|
||||||
https://wiki.ddnet.org/wiki/Mapping
|
https://wiki.ddnet.org/wiki/Mapping
|
||||||
== https://wiki.ddnet.org/index.php?title=Mapping/zh&variant=zh-hant
|
== https://wiki.ddnet.org/index.php?title=Mapping/zh&variant=zh-hant
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
== 無法解析連線地址 '%s'。檢查本機控制台以取得詳情。
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
== 連線地址錯誤
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
== 無法連線分身
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
== 此服務器禁止使用分身
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
== 請稍等…
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
== 顯示客戶端 ID(計分板、聊天、旁觀者)
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
== 正常:
|
||||||
|
|
||||||
|
Team:
|
||||||
|
== 隊伍:
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
== 分身設定
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
== 切換以編輯分身設定
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
== 隨機
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
== 你確定要刪除'%s'嗎?
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
== 刪除外觀
|
||||||
|
|
||||||
|
Basic
|
||||||
|
== 基本
|
||||||
|
|
||||||
|
Custom
|
||||||
|
== 自定義
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
== 無法刪除外觀
|
||||||
|
|
||||||
|
Customize
|
||||||
|
== 自定義
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
# Gokturk 2024-04-24 03:01:50
|
# Gokturk 2024-04-24 03:01:50
|
||||||
# Gokturk 2024-06-09 12:00:50
|
# Gokturk 2024-06-09 12:00:50
|
||||||
# Gokturk 2024-07-17 02:24:00
|
# Gokturk 2024-07-17 02:24:00
|
||||||
|
# Gokturk 2024-08-29 23:31:00
|
||||||
##### /authors #####
|
##### /authors #####
|
||||||
|
|
||||||
##### translated strings #####
|
##### translated strings #####
|
||||||
|
@ -287,9 +288,6 @@ Play background music
|
||||||
Player
|
Player
|
||||||
== Oyuncu
|
== Oyuncu
|
||||||
|
|
||||||
Player options
|
|
||||||
== Oyuncu ayarları
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Oyuncular
|
== Oyuncular
|
||||||
|
|
||||||
|
@ -665,9 +663,6 @@ Connecting dummy
|
||||||
Connect Dummy
|
Connect Dummy
|
||||||
== Dummy Katıl
|
== Dummy Katıl
|
||||||
|
|
||||||
Reload
|
|
||||||
== Yenile
|
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== Devre dışı bırak
|
== Devre dışı bırak
|
||||||
|
|
||||||
|
@ -1463,9 +1458,6 @@ Show health, shields and ammo
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
== DDRace arayüzü
|
== DDRace arayüzü
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
|
||||||
== Skor tablosunda ki istemci ID'lerini göster
|
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
== DDRace arayüzünü göster
|
== DDRace arayüzünü göster
|
||||||
|
|
||||||
|
@ -1883,3 +1875,54 @@ Team %d (%d/%d)
|
||||||
|
|
||||||
https://wiki.ddnet.org/wiki/Mapping
|
https://wiki.ddnet.org/wiki/Mapping
|
||||||
== https://wiki.ddnet.org/wiki/Mapping/tr
|
== https://wiki.ddnet.org/wiki/Mapping/tr
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
== '%s' Bağlantı adresi çözümlenemedi. Detaylar için yerel konsola bakın
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
== Bağlantı adresi hatası
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
== Dummy bağlanamadı
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
== Bu sunucuda dummy izin verilmiyor
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
== Lütfen bekleyin…
|
||||||
|
|
||||||
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
|
== İstemci ID'sini göster (skor tablosu, sohbet, izleyici)
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
== Normal:
|
||||||
|
|
||||||
|
Team:
|
||||||
|
== Takım:
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
== Dummy ayarları
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
== Dummy ayarlarını düzenlemek için açın
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
== Rastgele
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
== '%s' bunu silmek istediğine emin misin?
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
== Skini sil
|
||||||
|
|
||||||
|
Basic
|
||||||
|
== Basit
|
||||||
|
|
||||||
|
Custom
|
||||||
|
== Özel
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
== Skin silinemiyor
|
||||||
|
|
||||||
|
Customize
|
||||||
|
== Özelleştir
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#modified by:
|
#modified by:
|
||||||
# 404_not_found 2011-07-30 19:50:58
|
# 404_not_found 2011-07-30 19:50:58
|
||||||
# EGYT5453 (15.05.2024-04.06.2024)
|
# EGYT5453 (15.05.2024-04.06.2024)
|
||||||
|
# veydzh3r (31.08.2024-01.09.2024)
|
||||||
##### /authors #####
|
##### /authors #####
|
||||||
|
|
||||||
##### translated strings #####
|
##### translated strings #####
|
||||||
|
@ -32,10 +33,10 @@
|
||||||
== ще %d…
|
== ще %d…
|
||||||
|
|
||||||
%d player
|
%d player
|
||||||
== Гравців: %d
|
== Гравці: %d
|
||||||
|
|
||||||
%d players
|
%d players
|
||||||
== Гравців: %d
|
== Гравці: %d
|
||||||
|
|
||||||
[Demo player duration]
|
[Demo player duration]
|
||||||
%d sec.
|
%d sec.
|
||||||
|
@ -76,10 +77,10 @@
|
||||||
== Нових згадок: 9+
|
== Нових згадок: 9+
|
||||||
|
|
||||||
A demo with this name already exists
|
A demo with this name already exists
|
||||||
== Демо з цією назвою вже існує
|
== Демо з цією назвою уже існує
|
||||||
|
|
||||||
A folder with this name already exists
|
A folder with this name already exists
|
||||||
== Тека з цією назвою вже існує
|
== Тека з цією назвою уже існує
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
A render command failed. Try to update your GPU drivers.
|
A render command failed. Try to update your GPU drivers.
|
||||||
|
@ -120,7 +121,7 @@ AFR
|
||||||
== АФР
|
== АФР
|
||||||
|
|
||||||
Aim bind
|
Aim bind
|
||||||
== Прив'язка
|
== Прив’язка
|
||||||
|
|
||||||
All
|
All
|
||||||
== Усі
|
== Усі
|
||||||
|
@ -165,6 +166,9 @@ AntiPing: predict weapons
|
||||||
Appearance
|
Appearance
|
||||||
== Вигляд
|
== Вигляд
|
||||||
|
|
||||||
|
Are you sure that you want to delete '%s'?
|
||||||
|
== Ви дійсно хочете видалити '%s'?
|
||||||
|
|
||||||
Are you sure that you want to delete the demo '%s'?
|
Are you sure that you want to delete the demo '%s'?
|
||||||
== Ви дійсно хочете видалити демо '%s'?
|
== Ви дійсно хочете видалити демо '%s'?
|
||||||
|
|
||||||
|
@ -172,13 +176,13 @@ Are you sure that you want to delete the folder '%s'?
|
||||||
== Ви дійсно хочете видалити теку '%s'?
|
== Ви дійсно хочете видалити теку '%s'?
|
||||||
|
|
||||||
Are you sure that you want to disconnect?
|
Are you sure that you want to disconnect?
|
||||||
== Ви дійсно хочете від'єднатися?
|
== Ви дійсно хочете від’єднатися?
|
||||||
|
|
||||||
Are you sure that you want to disconnect and switch to a different server?
|
Are you sure that you want to disconnect and switch to a different server?
|
||||||
== Ви дійсно хочете від'єднатися й приєднатися до іншого сервера?
|
== Ви дійсно хочете від’єднатися й приєднатися до іншого сервера?
|
||||||
|
|
||||||
Are you sure that you want to disconnect your dummy?
|
Are you sure that you want to disconnect your dummy?
|
||||||
== Ви дійсно хочете від'єднати свого даммі?
|
== Ви дійсно хочете від’єднати свого даммі?
|
||||||
|
|
||||||
Are you sure that you want to quit?
|
Are you sure that you want to quit?
|
||||||
== Ви дійсно хочете вийти?
|
== Ви дійсно хочете вийти?
|
||||||
|
@ -190,7 +194,7 @@ Are you sure that you want to remove the player '%s' from your friends list?
|
||||||
== Ви дійсно хочете прибрати гравця '%s' зі списку друзів?
|
== Ви дійсно хочете прибрати гравця '%s' зі списку друзів?
|
||||||
|
|
||||||
Are you sure that you want to reset the controls to their defaults?
|
Are you sure that you want to reset the controls to their defaults?
|
||||||
== Ви дійсно хочете скинути налаштування керування до значень за замовчуванням?
|
== Ви дійсно хочете скинути налаштування керувань до початкових значень?
|
||||||
|
|
||||||
Are you sure that you want to restart?
|
Are you sure that you want to restart?
|
||||||
== Ви дійсно хочете перезапустити?
|
== Ви дійсно хочете перезапустити?
|
||||||
|
@ -208,7 +212,7 @@ AUS
|
||||||
== АВС
|
== АВС
|
||||||
|
|
||||||
Authed name color in scoreboard
|
Authed name color in scoreboard
|
||||||
== Колір авторизованих у таблі
|
== Колір авторизованих у таблиці
|
||||||
|
|
||||||
Auto
|
Auto
|
||||||
== Авто
|
== Авто
|
||||||
|
@ -217,7 +221,7 @@ auto
|
||||||
== автоматично
|
== автоматично
|
||||||
|
|
||||||
Automatically create statboard csv
|
Automatically create statboard csv
|
||||||
== Автоматично зберігати статистику у CSV-файл
|
== Автоматично зберігати статистику у файл CSV
|
||||||
|
|
||||||
Automatically record demos
|
Automatically record demos
|
||||||
== Автоматично записувати демо
|
== Автоматично записувати демо
|
||||||
|
@ -232,11 +236,14 @@ Axis
|
||||||
== Осі
|
== Осі
|
||||||
|
|
||||||
Background
|
Background
|
||||||
== Фон
|
== Тло
|
||||||
|
|
||||||
Background music volume
|
Background music volume
|
||||||
== Гучність фонової музики
|
== Гучність фонової музики
|
||||||
|
|
||||||
|
Basic
|
||||||
|
== Базовий
|
||||||
|
|
||||||
Best
|
Best
|
||||||
== НКом
|
== НКом
|
||||||
|
|
||||||
|
@ -256,7 +263,7 @@ Call vote
|
||||||
== Голосувати
|
== Голосувати
|
||||||
|
|
||||||
Can't find a Tutorial server
|
Can't find a Tutorial server
|
||||||
== Не вдалося знайти сервер-посібник
|
== Не вдається знайти навчальний сервер
|
||||||
|
|
||||||
Cancel
|
Cancel
|
||||||
== Скасувати
|
== Скасувати
|
||||||
|
@ -289,13 +296,13 @@ Check now
|
||||||
== Перевірити
|
== Перевірити
|
||||||
|
|
||||||
Checking for existing player with your name
|
Checking for existing player with your name
|
||||||
== Перевіряємо Ваш нікнейм на доступність
|
== Перевірка на наявність гравця з вашим ім’ям
|
||||||
|
|
||||||
CHN
|
CHN
|
||||||
== КИТ
|
== КИТ
|
||||||
|
|
||||||
Choose default eyes when joining a server
|
Choose default eyes when joining a server
|
||||||
== Очі, які відображатимуться за замовчуванням
|
== Типові очі під час приєднання до сервера
|
||||||
|
|
||||||
Clan
|
Clan
|
||||||
== Клан
|
== Клан
|
||||||
|
@ -322,7 +329,7 @@ Close the demo player
|
||||||
== Закрити програвач демо
|
== Закрити програвач демо
|
||||||
|
|
||||||
Colors of the hook collision line, in case of a possible collision with:
|
Colors of the hook collision line, in case of a possible collision with:
|
||||||
== Кольори лінії зіткнення гака, якщо він може зіштовхнутися з:
|
== Кольори лінії зіткнення гака, в разі можливого зіткнення з:
|
||||||
|
|
||||||
Communities
|
Communities
|
||||||
== Спільноти
|
== Спільноти
|
||||||
|
@ -330,26 +337,29 @@ Communities
|
||||||
Config directory
|
Config directory
|
||||||
== Тека налаштувань
|
== Тека налаштувань
|
||||||
|
|
||||||
|
Connect address error
|
||||||
|
== Помилка адреси з’єднання
|
||||||
|
|
||||||
Connect Dummy
|
Connect Dummy
|
||||||
== Приєднати даммі
|
== Під’єднати даммі
|
||||||
|
|
||||||
Connected
|
Connected
|
||||||
== Приєднано
|
== Під’єднано
|
||||||
|
|
||||||
Connecting dummy
|
Connecting dummy
|
||||||
== Приєднуємо даммі
|
== Під’єднання даммі
|
||||||
|
|
||||||
Connecting to
|
Connecting to
|
||||||
== Приєднуємося до
|
== Під’єднання до
|
||||||
|
|
||||||
Connection Problems…
|
Connection Problems…
|
||||||
== Проблеми зі з'єднанням…
|
== Проблеми зі з’єднанням…
|
||||||
|
|
||||||
Console
|
Console
|
||||||
== Консоль
|
== Консоль
|
||||||
|
|
||||||
Continue anyway?
|
Continue anyway?
|
||||||
== Все одно продовжити?
|
== Усе одно продовжити?
|
||||||
|
|
||||||
Controller
|
Controller
|
||||||
== Контролер
|
== Контролер
|
||||||
|
@ -366,19 +376,25 @@ Converse
|
||||||
Copy info
|
Copy info
|
||||||
== Скопіювати
|
== Скопіювати
|
||||||
|
|
||||||
|
Could not connect dummy
|
||||||
|
== Не вдалося під’єднати даммі
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Could not initialize the given graphics backend, reverting to the default backend now.
|
Could not initialize the given graphics backend, reverting to the default backend now.
|
||||||
== Не вдалося ініціалізувати заданий графічний рушій, повертаємося до рушія за замовчуванням.
|
== Не вдалося ініціалізувати заданий графічний рушій, повернення до тпового рушія.
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
== Не вдалося ініціалізувати заданий графічний рушій, можливо тому що ви не встановили драйвери на вбудовану відеокарту.
|
== Не вдалося ініціалізувати заданий графічний рушій, імовірно, ви не встановили драйвери на вбудовану відеокарту.
|
||||||
|
|
||||||
|
Could not resolve connect address '%s'. See local console for details.
|
||||||
|
== Не вдалося визначити адресу з’єднання '%s'. Див. локальну консоль для подробиць.
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
== Не вдалося зберегти завантажену мапу. Спробуйте самостійно видалити цей файл: %s
|
== Не вдалося зберегти завантажену мапу. Спробуйте самостійно видалити цей файл: %s
|
||||||
|
|
||||||
Count players only
|
Count players only
|
||||||
== Рахувати тільки гравців
|
== Рахувати лише гравців
|
||||||
|
|
||||||
Countries
|
Countries
|
||||||
== Країни
|
== Країни
|
||||||
|
@ -395,9 +411,15 @@ Current
|
||||||
custom
|
custom
|
||||||
== власний
|
== власний
|
||||||
|
|
||||||
|
Custom
|
||||||
|
== Власний
|
||||||
|
|
||||||
Custom colors
|
Custom colors
|
||||||
== Власні кольори
|
== Власні кольори
|
||||||
|
|
||||||
|
Customize
|
||||||
|
== Налаштувати
|
||||||
|
|
||||||
Cut interval
|
Cut interval
|
||||||
== Інтервал
|
== Інтервал
|
||||||
|
|
||||||
|
@ -417,7 +439,7 @@ DDNet %s is out!
|
||||||
== Вийшов DDNet %s!
|
== Вийшов DDNet %s!
|
||||||
|
|
||||||
DDNet Client needs to be restarted to complete update!
|
DDNet Client needs to be restarted to complete update!
|
||||||
== Потрібно перезапустити клієнт DDNet, щоб завершити оновлення!
|
== Потрібно перезапустити клієнт DDNet для завершення оновлення!
|
||||||
|
|
||||||
DDNet Client updated!
|
DDNet Client updated!
|
||||||
== Клієнт DDNet оновлено!
|
== Клієнт DDNet оновлено!
|
||||||
|
@ -426,22 +448,22 @@ DDRace HUD
|
||||||
== HUD DDRace
|
== HUD DDRace
|
||||||
|
|
||||||
DDraceNetwork is a cooperative online game where the goal is for you and your group of tees to reach the finish line of the map. As a newcomer you should start on Novice servers, which host the easiest maps. Consider the ping to choose a server close to you.
|
DDraceNetwork is a cooperative online game where the goal is for you and your group of tees to reach the finish line of the map. As a newcomer you should start on Novice servers, which host the easiest maps. Consider the ping to choose a server close to you.
|
||||||
== DDraceNetwork — кооперативна мережева гра, ціль якої — дістатися разом зі своєю групою тії до фінішної прямої. Новачкам варто почати із серверів "Для новачків" (Novice), на яких є найпростіші мапи. Зважайте на затримку, коли вибираєте сервер.
|
== DDraceNetwork — кооперативна мережева гра, ціль якої — дістатися разом зі своєю групою тії до фінішної прямої. Новачкам варто почати із серверів «Для новачків» (Novice), на яких є найпростіші мапи. Зважайте на затримку, коли вибираєте сервер.
|
||||||
|
|
||||||
Deactivate
|
Deactivate
|
||||||
== Деактивувати
|
== Деактивувати
|
||||||
|
|
||||||
Deactivate all
|
Deactivate all
|
||||||
== Деактивувати усіх
|
== Деактивувати всіх
|
||||||
|
|
||||||
Deaths
|
Deaths
|
||||||
== С
|
== Смерті
|
||||||
|
|
||||||
Debug mode enabled. Press Ctrl+Shift+D to disable debug mode.
|
Debug mode enabled. Press Ctrl+Shift+D to disable debug mode.
|
||||||
== Увімкнено режим налагодження. Натисніть Ctrl+Shift+D, щоб його вимкнути.
|
== Увімкнено режим налагодження. Натисніть Ctrl+Shift+D, щоб його вимкнути.
|
||||||
|
|
||||||
default
|
default
|
||||||
== за замовчуванням
|
== типово
|
||||||
|
|
||||||
Default length
|
Default length
|
||||||
== Звичайна тривалість
|
== Звичайна тривалість
|
||||||
|
@ -458,6 +480,9 @@ Delete demo
|
||||||
Delete folder
|
Delete folder
|
||||||
== Видалити теку
|
== Видалити теку
|
||||||
|
|
||||||
|
Delete skin
|
||||||
|
== Видалити скін
|
||||||
|
|
||||||
Demo
|
Demo
|
||||||
== Демо
|
== Демо
|
||||||
|
|
||||||
|
@ -471,16 +496,16 @@ Demos directory
|
||||||
== Тека демо
|
== Тека демо
|
||||||
|
|
||||||
Desktop fullscreen
|
Desktop fullscreen
|
||||||
== Стільничний повноекранний
|
== Робочий стіл на весь екран
|
||||||
|
|
||||||
Disconnect
|
Disconnect
|
||||||
== Від'єднатися
|
== Від’єднатися
|
||||||
|
|
||||||
Disconnect Dummy
|
Disconnect Dummy
|
||||||
== Від'єднати даммі
|
== Від’єднати даммі
|
||||||
|
|
||||||
Disconnected
|
Disconnected
|
||||||
== Від'єднано
|
== Від’єднано
|
||||||
|
|
||||||
Discord
|
Discord
|
||||||
== Discord
|
== Discord
|
||||||
|
@ -498,10 +523,10 @@ Download skins
|
||||||
== Завантажувати скіни
|
== Завантажувати скіни
|
||||||
|
|
||||||
Downloading %s:
|
Downloading %s:
|
||||||
== Завантажуємо %s:
|
== Завантаження %s:
|
||||||
|
|
||||||
Downloading map
|
Downloading map
|
||||||
== Завантажуємо мапу
|
== Завантаження мапи
|
||||||
|
|
||||||
Draw!
|
Draw!
|
||||||
== Нічия!
|
== Нічия!
|
||||||
|
@ -512,8 +537,14 @@ Dummy
|
||||||
Dummy copy
|
Dummy copy
|
||||||
== Повторювати рухи
|
== Повторювати рухи
|
||||||
|
|
||||||
|
Dummy is not allowed on this server
|
||||||
|
== Використання даммі заборонене на цьому сервері
|
||||||
|
|
||||||
|
Dummy settings
|
||||||
|
== Налаштування даммі
|
||||||
|
|
||||||
Dynamic Camera
|
Dynamic Camera
|
||||||
== Рухома камера
|
== Динамічна камера
|
||||||
|
|
||||||
Editor
|
Editor
|
||||||
== Редактор
|
== Редактор
|
||||||
|
@ -546,7 +577,7 @@ Enable regular chat sound
|
||||||
== Звук звичайного повідомлення
|
== Звук звичайного повідомлення
|
||||||
|
|
||||||
Enable replays
|
Enable replays
|
||||||
== Повтори
|
== Увімкнути повтори
|
||||||
|
|
||||||
Enable server message sound
|
Enable server message sound
|
||||||
== Звук повідомлення сервера
|
== Звук повідомлення сервера
|
||||||
|
@ -558,13 +589,13 @@ Enter Password
|
||||||
== Введіть пароль
|
== Введіть пароль
|
||||||
|
|
||||||
Enter Username
|
Enter Username
|
||||||
== Введіть логін
|
== Введіть ім’я користувача
|
||||||
|
|
||||||
Entities
|
Entities
|
||||||
== Сутності
|
== Сутності
|
||||||
|
|
||||||
Entities background color
|
Entities background color
|
||||||
== Колір фону сутностей
|
== Колір тла сутностей
|
||||||
|
|
||||||
Error
|
Error
|
||||||
== Помилка
|
== Помилка
|
||||||
|
@ -582,13 +613,13 @@ EUR
|
||||||
== ЄВР
|
== ЄВР
|
||||||
|
|
||||||
Example of usage
|
Example of usage
|
||||||
== Наприклад
|
== Приклад використання
|
||||||
|
|
||||||
Exclude
|
Exclude
|
||||||
== Виключити
|
== Виключити
|
||||||
|
|
||||||
Existing Player
|
Existing Player
|
||||||
== Гравець вже існує
|
== Гравець уже існує
|
||||||
|
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
== Експортувати фрагмент як окреме демо
|
== Експортувати фрагмент як окреме демо
|
||||||
|
@ -651,7 +682,7 @@ Following
|
||||||
|
|
||||||
[Spectating]
|
[Spectating]
|
||||||
Following %s
|
Following %s
|
||||||
== Слідуємо за %s
|
== Cпостерігання за %s
|
||||||
|
|
||||||
Force vote
|
Force vote
|
||||||
== Форсувати
|
== Форсувати
|
||||||
|
@ -681,7 +712,7 @@ FSAA samples
|
||||||
== Вибірка FSAA
|
== Вибірка FSAA
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Повноекранний
|
== На весь екран
|
||||||
|
|
||||||
Game
|
Game
|
||||||
== Гра
|
== Гра
|
||||||
|
@ -708,13 +739,13 @@ Gameplay
|
||||||
== Ігролад
|
== Ігролад
|
||||||
|
|
||||||
General
|
General
|
||||||
== Загальне
|
== Загальні
|
||||||
|
|
||||||
Getting game info
|
Getting game info
|
||||||
== Отримуємо інформацію про гру
|
== Отримання інформації про гру
|
||||||
|
|
||||||
Getting server list from master server
|
Getting server list from master server
|
||||||
== Отримуємо список серверів з головного сервера
|
== Отримання списку серверів з головного сервера
|
||||||
|
|
||||||
Ghost
|
Ghost
|
||||||
== Привид
|
== Привид
|
||||||
|
@ -726,7 +757,7 @@ Go back one marker
|
||||||
== Перемотати до попередньої мітки
|
== Перемотати до попередньої мітки
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
== Перемотати вперед на один тік
|
== Перемотати вперед на один такт
|
||||||
|
|
||||||
Go back the specified duration
|
Go back the specified duration
|
||||||
== Перемотати назад
|
== Перемотати назад
|
||||||
|
@ -735,7 +766,7 @@ Go forward one marker
|
||||||
== Перемотати до наступної мітки
|
== Перемотати до наступної мітки
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
== Перемотати назад на один тік
|
== Перемотати вперед на один такт
|
||||||
|
|
||||||
Go forward the specified duration
|
Go forward the specified duration
|
||||||
== Перемотати вперед
|
== Перемотати вперед
|
||||||
|
@ -801,31 +832,31 @@ HUD
|
||||||
== HUD
|
== HUD
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Тон
|
== Відтінок
|
||||||
|
|
||||||
Indicate map finish
|
Indicate map finish
|
||||||
== Позначати пройдені мапи
|
== Позначати пройдені мапи
|
||||||
|
|
||||||
Info Messages
|
Info Messages
|
||||||
== Інфо-повідомлення
|
== Інфо. повідомлення
|
||||||
|
|
||||||
Ingame controller mode
|
Ingame controller mode
|
||||||
== Режим контролера у грі
|
== Режим контролера у грі
|
||||||
|
|
||||||
Ingame controller sens.
|
Ingame controller sens.
|
||||||
== Чутл. у грі
|
== Чутливість у грі
|
||||||
|
|
||||||
Ingame mouse sens.
|
Ingame mouse sens.
|
||||||
== Чутл. у грі
|
== Чутливість у грі
|
||||||
|
|
||||||
Initializing assets
|
Initializing assets
|
||||||
== Ініціалізуємо текстури
|
== Ініціалізація текстур
|
||||||
|
|
||||||
Initializing components
|
Initializing components
|
||||||
== Ініціалізуємо компоненти
|
== Ініціалізація компонентів
|
||||||
|
|
||||||
Initializing map logic
|
Initializing map logic
|
||||||
== Ініціалізуємо логіку мапи
|
== Ініціалізація логіки мапи
|
||||||
|
|
||||||
Internet
|
Internet
|
||||||
== Інтернет
|
== Інтернет
|
||||||
|
@ -834,7 +865,7 @@ Invalid Demo
|
||||||
== Недійсне демо
|
== Недійсне демо
|
||||||
|
|
||||||
It's recommended that you check the settings to adjust them to your liking before joining a server.
|
It's recommended that you check the settings to adjust them to your liking before joining a server.
|
||||||
== Перед тим як приєднатися до сервера, рекомендуємо змінити налаштування до ваших уподобань.
|
== Перед тим, як приєднатися до сервера, рекомендуємо змінити налаштування до ваших уподобань.
|
||||||
|
|
||||||
Join blue
|
Join blue
|
||||||
== До синіх
|
== До синіх
|
||||||
|
@ -846,7 +877,7 @@ Join red
|
||||||
== До червоних
|
== До червоних
|
||||||
|
|
||||||
Join Tutorial Server
|
Join Tutorial Server
|
||||||
== Приєднатися до сервера-посібника
|
== Приєднатися до навчального сервера
|
||||||
|
|
||||||
Jump
|
Jump
|
||||||
== Стрибок
|
== Стрибок
|
||||||
|
@ -885,52 +916,52 @@ Loading…
|
||||||
== Завантаження…
|
== Завантаження…
|
||||||
|
|
||||||
Loading assets
|
Loading assets
|
||||||
== Завантажуємо текстури
|
== Завантаження текстур
|
||||||
|
|
||||||
Loading commands…
|
Loading commands…
|
||||||
== Завантажуємо команди…
|
== Завантаження команд…
|
||||||
|
|
||||||
Loading DDNet Client
|
Loading DDNet Client
|
||||||
== Завантажуємо клієнт DDNet
|
== Завантаження клієнта DDNet
|
||||||
|
|
||||||
Loading demo file from storage
|
Loading demo file from storage
|
||||||
== Завантажуємо демо-файл зі сховища
|
== Завантаження демо-файлу зі сховища
|
||||||
|
|
||||||
Loading demo files
|
Loading demo files
|
||||||
== Завантажуємо демо-файли
|
== Завантаження демо-файлів
|
||||||
|
|
||||||
Loading ghost files
|
Loading ghost files
|
||||||
== Завантажуємо файли привида
|
== Завантаження файлів привида
|
||||||
|
|
||||||
Loading map file from storage
|
Loading map file from storage
|
||||||
== Завантажуємо файл мапи зі сховища
|
== Завантаження файлу мапи зі сховища
|
||||||
|
|
||||||
Loading menu images
|
Loading menu images
|
||||||
== Завантажуємо зображення меню
|
== Завантаження зображень меню
|
||||||
|
|
||||||
Loading menu themes
|
Loading menu themes
|
||||||
== Завантажуємо теми меню
|
== Завантаження тем меню
|
||||||
|
|
||||||
Loading race demo files
|
Loading race demo files
|
||||||
== Завантажуємо демо-файли забігів
|
== Завантаження демо-файлів забігів
|
||||||
|
|
||||||
Loading skin files
|
Loading skin files
|
||||||
== Завантажуємо файли скінів
|
== Завантаження файлів скінів
|
||||||
|
|
||||||
Loading sound files
|
Loading sound files
|
||||||
== Завантажуємо звукові файли
|
== Завантаження звукових файлів
|
||||||
|
|
||||||
Lock team
|
Lock team
|
||||||
== Замкнути команду
|
== Замкнути команду
|
||||||
|
|
||||||
Locked
|
Locked
|
||||||
== Заблоковано
|
== Замкнено
|
||||||
|
|
||||||
Main menu
|
Main menu
|
||||||
== Головне меню
|
== Головне меню
|
||||||
|
|
||||||
Manual
|
Manual
|
||||||
== Вручну
|
== Уручну
|
||||||
|
|
||||||
Map
|
Map
|
||||||
== Мапа
|
== Мапа
|
||||||
|
@ -940,7 +971,7 @@ map not included
|
||||||
== мапу не включено
|
== мапу не включено
|
||||||
|
|
||||||
Map sound volume
|
Map sound volume
|
||||||
== Гучність мапи
|
== Гучність звуків мапи
|
||||||
|
|
||||||
Mark the beginning of a cut (right click to reset)
|
Mark the beginning of a cut (right click to reset)
|
||||||
== Позначити початок фрагмента (права кнопка миші, щоб скинути)
|
== Позначити початок фрагмента (права кнопка миші, щоб скинути)
|
||||||
|
@ -955,13 +986,13 @@ Match %d of %d
|
||||||
== Збіг %d з %d
|
== Збіг %d з %d
|
||||||
|
|
||||||
Max CSVs
|
Max CSVs
|
||||||
== Найбільше CSV-файлів
|
== Макс. кількість файлів CSV
|
||||||
|
|
||||||
Max demos
|
Max demos
|
||||||
== Найбільше демо-файлів
|
== Макс. кількість демо-файлів
|
||||||
|
|
||||||
Max Screenshots
|
Max Screenshots
|
||||||
== Найбільше знімків екрана
|
== Макс. кількість знімків екрана
|
||||||
|
|
||||||
may cause delay
|
may cause delay
|
||||||
== може спричинити затримку
|
== може спричинити затримку
|
||||||
|
@ -985,7 +1016,7 @@ Move left
|
||||||
== Вліво
|
== Вліво
|
||||||
|
|
||||||
Move player to spectators
|
Move player to spectators
|
||||||
== Зробити гравця спостерігачем
|
== Зробити гравця глядачем
|
||||||
|
|
||||||
Move right
|
Move right
|
||||||
== Вправо
|
== Вправо
|
||||||
|
@ -1000,7 +1031,7 @@ Multi-View
|
||||||
== Мульти-камера
|
== Мульти-камера
|
||||||
|
|
||||||
Mute when not active
|
Mute when not active
|
||||||
== Приглушувати, якщо вікно неактивне
|
== Приглушувати звук поза грою
|
||||||
|
|
||||||
NA
|
NA
|
||||||
== ПНА
|
== ПНА
|
||||||
|
@ -1021,7 +1052,7 @@ Netversion
|
||||||
== Версія
|
== Версія
|
||||||
|
|
||||||
New name:
|
New name:
|
||||||
== Нова назва
|
== Нова назва:
|
||||||
|
|
||||||
New random timeout code
|
New random timeout code
|
||||||
== Новий випадковий код тайм-ауту
|
== Новий випадковий код тайм-ауту
|
||||||
|
@ -1033,16 +1064,16 @@ Next weapon
|
||||||
== Наст. зброя
|
== Наст. зброя
|
||||||
|
|
||||||
Nickname
|
Nickname
|
||||||
== Нікнейм
|
== Псевдонім
|
||||||
|
|
||||||
No
|
No
|
||||||
== Ні
|
== Ні
|
||||||
|
|
||||||
No answer from server yet.
|
No answer from server yet.
|
||||||
== Сервер ще не відповів.
|
== Поки що немає відповіді від сервера.
|
||||||
|
|
||||||
No controller found. Plug in a controller.
|
No controller found. Plug in a controller.
|
||||||
== Жодного контролера не знайдено. Підключіть контролер.
|
== Жодного контролера не знайдено. Під’єднайте контролер.
|
||||||
|
|
||||||
No demo selected
|
No demo selected
|
||||||
== Жодного демо не вибрано
|
== Жодного демо не вибрано
|
||||||
|
@ -1071,6 +1102,9 @@ No updates available
|
||||||
None
|
None
|
||||||
== Немає
|
== Немає
|
||||||
|
|
||||||
|
Normal:
|
||||||
|
== Звичайний:
|
||||||
|
|
||||||
Normal Color
|
Normal Color
|
||||||
== Колір звичайних повідомлень
|
== Колір звичайних повідомлень
|
||||||
|
|
||||||
|
@ -1078,23 +1112,23 @@ Normal message
|
||||||
== Звичайні повідомлення
|
== Звичайні повідомлення
|
||||||
|
|
||||||
NOT CONNECTED
|
NOT CONNECTED
|
||||||
== НЕ ПРИЄДНАНО
|
== НЕ ПІД’ЄДНАНО
|
||||||
|
|
||||||
Nothing hookable
|
Nothing hookable
|
||||||
== нічим, за що можна зачепитися
|
== нічим, за що можна зачепитися
|
||||||
|
|
||||||
[friends (server browser)]
|
[friends (server browser)]
|
||||||
Offline (%d)
|
Offline (%d)
|
||||||
== Офлайн (%d)
|
== Не в мережі (%d)
|
||||||
|
|
||||||
Ok
|
Ok
|
||||||
== Гаразд
|
== Гаразд
|
||||||
|
|
||||||
Online clanmates (%d)
|
Online clanmates (%d)
|
||||||
== Онлайн клановці (%d)
|
== Співклановці в мережі (%d)
|
||||||
|
|
||||||
Online players (%d)
|
Online players (%d)
|
||||||
== Онлайн гравці (%d)
|
== Гравці в мережі (%d)
|
||||||
|
|
||||||
Only save improvements
|
Only save improvements
|
||||||
== Зберігати лише покращення
|
== Зберігати лише покращення
|
||||||
|
@ -1125,7 +1159,7 @@ Open the settings file
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Out of VRAM. Try removing custom assets (skins, entities, etc.), especially those with high resolution.
|
Out of VRAM. Try removing custom assets (skins, entities, etc.), especially those with high resolution.
|
||||||
== Недостатньо відеопам'яті. Спробуйте видалити власні текстури (скіни, сутності і т.п.), особливо ті, що мають високу роздільну здатність.
|
== Недостатньо відеопам’яті. Спробуйте видалити власні текстури (скіни, сутності і т.д.), особливо ті, що мають високу роздільність.
|
||||||
|
|
||||||
Overlay entities
|
Overlay entities
|
||||||
== Накладати сутності
|
== Накладати сутності
|
||||||
|
@ -1134,7 +1168,7 @@ Parent Folder
|
||||||
== Батьківська тека
|
== Батьківська тека
|
||||||
|
|
||||||
Particles
|
Particles
|
||||||
== Часточки
|
== Частинки
|
||||||
|
|
||||||
Pause
|
Pause
|
||||||
== Пауза
|
== Пауза
|
||||||
|
@ -1176,9 +1210,6 @@ Player country:
|
||||||
Player info change cooldown
|
Player info change cooldown
|
||||||
== Затримка зміни інформації про гравця
|
== Затримка зміни інформації про гравця
|
||||||
|
|
||||||
Player options
|
|
||||||
== Налаштування гравців
|
|
||||||
|
|
||||||
Players
|
Players
|
||||||
== Гравці
|
== Гравці
|
||||||
|
|
||||||
|
@ -1191,11 +1222,14 @@ Please enter your nickname below.
|
||||||
Please use a different filename
|
Please use a different filename
|
||||||
== Будь ласка, назвіть файл по-іншому
|
== Будь ласка, назвіть файл по-іншому
|
||||||
|
|
||||||
|
Please wait…
|
||||||
|
== Будь ласка, зачекайте…
|
||||||
|
|
||||||
Position:
|
Position:
|
||||||
== Позиція:
|
== Позиція:
|
||||||
|
|
||||||
Preparing demo playback
|
Preparing demo playback
|
||||||
== Підготовлюємо відтворення демо
|
== Підготовлення відтворення демо
|
||||||
|
|
||||||
Press a key…
|
Press a key…
|
||||||
== Натисніть клавішу…
|
== Натисніть клавішу…
|
||||||
|
@ -1210,7 +1244,7 @@ Quads are used for background decoration
|
||||||
== Квади використовуються для декорацій
|
== Квади використовуються для декорацій
|
||||||
|
|
||||||
Quit
|
Quit
|
||||||
== Вихід
|
== Вийти
|
||||||
|
|
||||||
Quitting. Please wait…
|
Quitting. Please wait…
|
||||||
== Вихід. Будь ласка, зачекайте…
|
== Вихід. Будь ласка, зачекайте…
|
||||||
|
@ -1218,6 +1252,9 @@ Quitting. Please wait…
|
||||||
Race
|
Race
|
||||||
== Забіг
|
== Забіг
|
||||||
|
|
||||||
|
Randomize
|
||||||
|
== Навмання
|
||||||
|
|
||||||
Ratio
|
Ratio
|
||||||
== У/С
|
== У/С
|
||||||
|
|
||||||
|
@ -1225,7 +1262,7 @@ Reason:
|
||||||
== Причина:
|
== Причина:
|
||||||
|
|
||||||
Reconnect in %d sec
|
Reconnect in %d sec
|
||||||
== Переприєднання через %dс
|
== Повторне під’єднання за %dс
|
||||||
|
|
||||||
Record demo
|
Record demo
|
||||||
== Запис демо
|
== Запис демо
|
||||||
|
@ -1240,15 +1277,12 @@ Refresh Rate
|
||||||
== Частота кадрів
|
== Частота кадрів
|
||||||
|
|
||||||
Regular background color
|
Regular background color
|
||||||
== Колір звичайного фону
|
== Колір звичайного тла
|
||||||
|
|
||||||
[Ingame controller mode]
|
[Ingame controller mode]
|
||||||
Relative
|
Relative
|
||||||
== Відносний
|
== Відносний
|
||||||
|
|
||||||
Reload
|
|
||||||
== Оновити
|
|
||||||
|
|
||||||
Remote console
|
Remote console
|
||||||
== Віддалена консоль
|
== Віддалена консоль
|
||||||
|
|
||||||
|
@ -1286,10 +1320,10 @@ Replay
|
||||||
== Повтор
|
== Повтор
|
||||||
|
|
||||||
Replay feature is disabled!
|
Replay feature is disabled!
|
||||||
== Повтори відключено!
|
== Повтори вимкнено!
|
||||||
|
|
||||||
Requesting to join the game
|
Requesting to join the game
|
||||||
== Запитуємо приєднання до гри
|
== Запит на приєднання до гри
|
||||||
|
|
||||||
Reset
|
Reset
|
||||||
== Скинути
|
== Скинути
|
||||||
|
@ -1301,7 +1335,7 @@ Reset filter
|
||||||
== Скинути фільтр
|
== Скинути фільтр
|
||||||
|
|
||||||
Reset to defaults
|
Reset to defaults
|
||||||
== Скинути
|
== Скинути до типових
|
||||||
|
|
||||||
Restart
|
Restart
|
||||||
== Перезапустити
|
== Перезапустити
|
||||||
|
@ -1328,7 +1362,7 @@ SA
|
||||||
== ПДА
|
== ПДА
|
||||||
|
|
||||||
Same clan color in scoreboard
|
Same clan color in scoreboard
|
||||||
== Колір співклановців у таблі
|
== Колір співклановців у таблиці
|
||||||
|
|
||||||
Sat.
|
Sat.
|
||||||
== Насич.
|
== Насич.
|
||||||
|
@ -1340,7 +1374,7 @@ Save ghost
|
||||||
== Зберігати привида
|
== Зберігати привида
|
||||||
|
|
||||||
Save power by lowering refresh rate (higher input latency)
|
Save power by lowering refresh rate (higher input latency)
|
||||||
== Зберігати енергію зниженням частоти кадрів (вища затримка вводу)
|
== Економити енергію шляхом зниження частоти кадрів (вища затримка введення)
|
||||||
|
|
||||||
Save the best demo of each race
|
Save the best demo of each race
|
||||||
== Зберігати найкраще демо кожного забігу
|
== Зберігати найкраще демо кожного забігу
|
||||||
|
@ -1355,7 +1389,7 @@ Score limit
|
||||||
== Гра до
|
== Гра до
|
||||||
|
|
||||||
Scoreboard
|
Scoreboard
|
||||||
== Табло
|
== Таблиця
|
||||||
|
|
||||||
Screen
|
Screen
|
||||||
== Екран
|
== Екран
|
||||||
|
@ -1367,10 +1401,10 @@ Search
|
||||||
== Пошук
|
== Пошук
|
||||||
|
|
||||||
Searching
|
Searching
|
||||||
== Шукаємо
|
== Пошук
|
||||||
|
|
||||||
Sending initial client info
|
Sending initial client info
|
||||||
== Надсилаємо початкові дані клієнта
|
== Надсилання початкових даних клієнта
|
||||||
|
|
||||||
Server address:
|
Server address:
|
||||||
== Адреса сервера:
|
== Адреса сервера:
|
||||||
|
@ -1391,7 +1425,7 @@ Server not full
|
||||||
== Неповний сервер
|
== Неповний сервер
|
||||||
|
|
||||||
Set all to Rifle
|
Set all to Rifle
|
||||||
== Встановити так, як у гвинтівки
|
== Установити так, як у гвинтівки
|
||||||
|
|
||||||
Settings
|
Settings
|
||||||
== Налаштування
|
== Налаштування
|
||||||
|
@ -1417,8 +1451,8 @@ Show chat
|
||||||
Show clan above name plates
|
Show clan above name plates
|
||||||
== Показувати клан над ніками
|
== Показувати клан над ніками
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
Show client IDs (scoreboard, chat, spectator)
|
||||||
== Показувати ID клієнта в таблі
|
== Показувати ID клієнта (таблиця, чат, глядачі)
|
||||||
|
|
||||||
Show DDNet map finishes in server browser
|
Show DDNet map finishes in server browser
|
||||||
== Показувати пройдені мапи DDNet у браузері серверів
|
== Показувати пройдені мапи DDNet у браузері серверів
|
||||||
|
@ -1430,7 +1464,7 @@ Show dummy actions
|
||||||
== Показувати дії з даммі
|
== Показувати дії з даммі
|
||||||
|
|
||||||
Show entities
|
Show entities
|
||||||
== Сутності
|
== Показ сутностей
|
||||||
|
|
||||||
Show finish messages
|
Show finish messages
|
||||||
== Показувати повідомлення про фініші
|
== Показувати повідомлення про фініші
|
||||||
|
@ -1439,7 +1473,7 @@ Show freeze bars
|
||||||
== Показувати смугу заморозки
|
== Показувати смугу заморозки
|
||||||
|
|
||||||
Show friend mark (♥) in name plates
|
Show friend mark (♥) in name plates
|
||||||
== Показувати позначку друга (♥) біля ніків
|
== Показувати позначку друга (♥) біля псевдонімів
|
||||||
|
|
||||||
Show friends only
|
Show friends only
|
||||||
== Показувати лише з друзями
|
== Показувати лише з друзями
|
||||||
|
@ -1448,10 +1482,10 @@ Show ghost
|
||||||
== Показувати привида
|
== Показувати привида
|
||||||
|
|
||||||
Show health, shields and ammo
|
Show health, shields and ammo
|
||||||
== Показувати здоров'я, щити й набої
|
== Показувати здоров’я, захист і набої
|
||||||
|
|
||||||
Show hook strength icon indicator
|
Show hook strength icon indicator
|
||||||
== Показувати графічний індикатор сили гака
|
== Показувати іконку індикатора сили гака
|
||||||
|
|
||||||
Show hook strength number indicator
|
Show hook strength number indicator
|
||||||
== Показувати числовий індикатор сили гака
|
== Показувати числовий індикатор сили гака
|
||||||
|
@ -1475,10 +1509,10 @@ Show local time always
|
||||||
== Завжди показувати місцевий час
|
== Завжди показувати місцевий час
|
||||||
|
|
||||||
Show name plates
|
Show name plates
|
||||||
== Показувати ніки
|
== Показувати псевдоніми
|
||||||
|
|
||||||
Show names in chat in team colors
|
Show names in chat in team colors
|
||||||
== Фарбувати ніки в чаті в кольори команд
|
== Показувати імена в чаті в кольорах команди
|
||||||
|
|
||||||
Show only chat messages from friends
|
Show only chat messages from friends
|
||||||
== Показувати лише повідомлення від друзів
|
== Показувати лише повідомлення від друзів
|
||||||
|
@ -1517,7 +1551,7 @@ Show text entities
|
||||||
== Текстові сутності
|
== Текстові сутності
|
||||||
|
|
||||||
Show tiles layers from BG map
|
Show tiles layers from BG map
|
||||||
== Показувати тайли з мапи фону
|
== Показувати плитки з мапи фону
|
||||||
|
|
||||||
Show quads
|
Show quads
|
||||||
== Показувати квади
|
== Показувати квади
|
||||||
|
@ -1547,13 +1581,13 @@ Slow down the demo
|
||||||
== Сповільнити
|
== Сповільнити
|
||||||
|
|
||||||
Smooth Dynamic Camera
|
Smooth Dynamic Camera
|
||||||
== Гладка рухома камера
|
== Гладка динамічна камера
|
||||||
|
|
||||||
Some map images could not be loaded. Check the local console for details.
|
Some map images could not be loaded. Check the local console for details.
|
||||||
== Деякі зображення мапи не завантажилися. Деталі у локальній консолі.
|
== Деякі зображення мапи не завантажилися. Див. локальну консоль для подробиць.
|
||||||
|
|
||||||
Some map sounds could not be loaded. Check the local console for details.
|
Some map sounds could not be loaded. Check the local console for details.
|
||||||
== Деякі звуки мапи не завантажилися. Деталі у локальній консолі.
|
== Деякі звуки мапи не завантажилися. Див. локальну консоль для подробиць.
|
||||||
|
|
||||||
Something hookable
|
Something hookable
|
||||||
== чимось, за що можна зачепитися
|
== чимось, за що можна зачепитися
|
||||||
|
@ -1577,10 +1611,10 @@ Spectate previous
|
||||||
== Попер. гравець
|
== Попер. гравець
|
||||||
|
|
||||||
Spectator mode
|
Spectator mode
|
||||||
== Режим спостерігача
|
== Режим глядача
|
||||||
|
|
||||||
Spectators
|
Spectators
|
||||||
== Спостерігачі
|
== Глядачі
|
||||||
|
|
||||||
Speed
|
Speed
|
||||||
== Швидкість
|
== Швидкість
|
||||||
|
@ -1632,7 +1666,7 @@ Switch weapon on pickup
|
||||||
== Змінювати зброю при підхопленні
|
== Змінювати зброю при підхопленні
|
||||||
|
|
||||||
Switch weapon when out of ammo
|
Switch weapon when out of ammo
|
||||||
== Змінювати зброю коли закінчуються набої
|
== Змінювати зброю при закінченні набоїв
|
||||||
|
|
||||||
System message
|
System message
|
||||||
== Повідомлення системи
|
== Повідомлення системи
|
||||||
|
@ -1640,6 +1674,9 @@ System message
|
||||||
Team
|
Team
|
||||||
== Команда
|
== Команда
|
||||||
|
|
||||||
|
Team:
|
||||||
|
== Командний:
|
||||||
|
|
||||||
Team %d
|
Team %d
|
||||||
== Команда %d
|
== Команда %d
|
||||||
|
|
||||||
|
@ -1695,7 +1732,10 @@ Toggle ghost
|
||||||
== Привид
|
== Привид
|
||||||
|
|
||||||
Toggle keyboard shortcuts
|
Toggle keyboard shortcuts
|
||||||
== Перемкнути скорочення
|
== Перемкнути сполучення
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
== Перемкніть, щоб змінити налаштування даммі
|
||||||
|
|
||||||
transmits your player name to info.ddnet.org
|
transmits your player name to info.ddnet.org
|
||||||
== передає ваш нікнейм до info.ddnet.org
|
== передає ваш нікнейм до info.ddnet.org
|
||||||
|
@ -1707,7 +1747,7 @@ Try again
|
||||||
== Спробувати ще раз
|
== Спробувати ще раз
|
||||||
|
|
||||||
Trying to determine UDP connectivity…
|
Trying to determine UDP connectivity…
|
||||||
== Намагаємося визначити UDP-з'єднання…
|
== Спроба визначити UDP-з’єднання…
|
||||||
|
|
||||||
Tutorial
|
Tutorial
|
||||||
== Посібник
|
== Посібник
|
||||||
|
@ -1728,10 +1768,13 @@ UI Color
|
||||||
== Колір інтерфейсу
|
== Колір інтерфейсу
|
||||||
|
|
||||||
UI controller sens.
|
UI controller sens.
|
||||||
== Чутл. у інтерфейсі
|
== Чутл. в інтерфейсі
|
||||||
|
|
||||||
UI mouse sens.
|
UI mouse sens.
|
||||||
== Чутл. у інтерфейсі
|
== Чутл. в інтерфейсі
|
||||||
|
|
||||||
|
Unable to delete skin
|
||||||
|
== Не вдалося видалити скін
|
||||||
|
|
||||||
Unable to delete the demo '%s'
|
Unable to delete the demo '%s'
|
||||||
== Не вдалося видалити демо '%s'
|
== Не вдалося видалити демо '%s'
|
||||||
|
@ -1756,25 +1799,25 @@ Unregister protocol and file extensions
|
||||||
== Розреєструвати протокол і розширення файлів
|
== Розреєструвати протокол і розширення файлів
|
||||||
|
|
||||||
Update failed! Check log…
|
Update failed! Check log…
|
||||||
== Оновлення не вдалося! Перевірте журнал…
|
== Помилка оновлення! Перевірте журнал…
|
||||||
|
|
||||||
Update now
|
Update now
|
||||||
== Оновити
|
== Оновити
|
||||||
|
|
||||||
Updating…
|
Updating…
|
||||||
== Оновлюємо…
|
== Оновлення…
|
||||||
|
|
||||||
Uploading map data to GPU
|
Uploading map data to GPU
|
||||||
== Вивантажуємо дані мапи до відеокарти
|
== Вивантаження даних мапи до відеокарти
|
||||||
|
|
||||||
Use current map as background
|
Use current map as background
|
||||||
== Використовувати поточну мапу як фон
|
== Використовувати поточну мапу як тло
|
||||||
|
|
||||||
Use high DPI
|
Use high DPI
|
||||||
== Високий DPI
|
== Високий DPI
|
||||||
|
|
||||||
Use k key to kill (restart), q to pause and watch other players. See settings for other key binds.
|
Use k key to kill (restart), q to pause and watch other players. See settings for other key binds.
|
||||||
== Натисніть "k", щоб умерти (почати спочатку), "q", щоб спостерігати за іншими гравцями. Інші скорочення дивіться у налаштуваннях.
|
== Натисніть «k», щоб умерти (почати спочатку), «q», щоб спостерігати за іншими гравцями. Інші призначення клавіш дивіться у налаштуваннях.
|
||||||
|
|
||||||
Use old chat style
|
Use old chat style
|
||||||
== Старий стиль чату
|
== Старий стиль чату
|
||||||
|
@ -1798,7 +1841,7 @@ Video name:
|
||||||
== Назва відео:
|
== Назва відео:
|
||||||
|
|
||||||
Video was saved to '%s'
|
Video was saved to '%s'
|
||||||
== Відео було збережено до '%s'
|
== Відео збережено до '%s'
|
||||||
|
|
||||||
Videos directory
|
Videos directory
|
||||||
== Тека відео
|
== Тека відео
|
||||||
|
@ -1843,13 +1886,13 @@ Why are you slowmo replaying to read this?
|
||||||
== Чому ви переглядаєте це у повторі?
|
== Чому ви переглядаєте це у повторі?
|
||||||
|
|
||||||
Windowed
|
Windowed
|
||||||
== Віконний
|
== У вікні
|
||||||
|
|
||||||
Windowed borderless
|
Windowed borderless
|
||||||
== Віконний без рамок
|
== Вікно без рамок
|
||||||
|
|
||||||
Windowed fullscreen
|
Windowed fullscreen
|
||||||
== Віконний повноекранний
|
== Вікно на весь екран
|
||||||
|
|
||||||
Yes
|
Yes
|
||||||
== Так
|
== Так
|
||||||
|
@ -1858,10 +1901,10 @@ Your movements are not taken into account when calculating the line colors
|
||||||
== Ваші рухи не враховуються при розранку кольору лінії
|
== Ваші рухи не враховуються при розранку кольору лінії
|
||||||
|
|
||||||
You must restart the game for all settings to take effect.
|
You must restart the game for all settings to take effect.
|
||||||
== Щоб налаштування набрали чинності, перезапустіть гру.
|
== Щоб налаштування набули чинності, перезапустіть гру.
|
||||||
|
|
||||||
Your nickname '%s' is already used (%d points). Do you still want to use it?
|
Your nickname '%s' is already used (%d points). Do you still want to use it?
|
||||||
== Нікнейм '%s' вже зайнято (%d балів). Все ще хочете використовувати його?
|
== Ваш псевдонім «%s» вже зайнято (%d балів). Усе ще хочете використовувати його?
|
||||||
|
|
||||||
Your skin
|
Your skin
|
||||||
== Ваш скін
|
== Ваш скін
|
||||||
|
|
BIN
data/mapres/ddnet_grass.png
Normal file
BIN
data/mapres/ddnet_grass.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 170 KiB |
Binary file not shown.
Before Width: | Height: | Size: 170 KiB After Width: | Height: | Size: 194 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.6 KiB |
|
@ -115,6 +115,8 @@ public:
|
||||||
const char *FailedObjOn() const;
|
const char *FailedObjOn() const;
|
||||||
|
|
||||||
const char *GetMsgName(int Type) const;
|
const char *GetMsgName(int Type) const;
|
||||||
|
void DebugDumpSnapshot(const class CSnapshot *pSnap) const;
|
||||||
|
int DumpObj(int Type, const void *pData, int Size) const;
|
||||||
void *SecureUnpackMsg(int Type, CUnpacker *pUnpacker);
|
void *SecureUnpackMsg(int Type, CUnpacker *pUnpacker);
|
||||||
bool TeeHistorianRecordMsg(int Type);
|
bool TeeHistorianRecordMsg(int Type);
|
||||||
const char *FailedMsgOn() const;
|
const char *FailedMsgOn() const;
|
||||||
|
@ -133,7 +135,9 @@ def gen_network_source():
|
||||||
#include <engine/shared/packer.h>
|
#include <engine/shared/packer.h>
|
||||||
#include <engine/shared/protocol.h>
|
#include <engine/shared/protocol.h>
|
||||||
#include <engine/shared/uuid_manager.h>
|
#include <engine/shared/uuid_manager.h>
|
||||||
|
#include <engine/shared/snapshot.h>
|
||||||
|
|
||||||
|
#include <game/gamecore.h>
|
||||||
#include <game/mapitems_ex.h>
|
#include <game/mapitems_ex.h>
|
||||||
|
|
||||||
CNetObjHandler::CNetObjHandler()
|
CNetObjHandler::CNetObjHandler()
|
||||||
|
@ -245,8 +249,47 @@ const char *CNetObjHandler::GetMsgName(int Type) const
|
||||||
}
|
}
|
||||||
return "(out of range)";
|
return "(out of range)";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CNetObjHandler::DebugDumpSnapshot(const CSnapshot *pSnap) const
|
||||||
|
{
|
||||||
|
dbg_msg("snapshot", "data_size=%d num_items=%d", pSnap->DataSize(), pSnap->NumItems());
|
||||||
|
for(int i = 0; i < pSnap->NumItems(); i++)
|
||||||
|
{
|
||||||
|
const CSnapshotItem *pItem = pSnap->GetItem(i);
|
||||||
|
int Size = pSnap->GetItemSize(i);
|
||||||
|
int Type = pSnap->GetItemType(i);
|
||||||
|
const char *pName = GetObjName(pItem->Type());
|
||||||
|
if(Type > OFFSET_UUID && Type < g_UuidManager.NumUuids() + OFFSET_UUID)
|
||||||
|
pName = g_UuidManager.GetName(Type);
|
||||||
|
dbg_msg("snapshot", "\\t%s type=%d id=%d size=%d", pName, pItem->Type(), pItem->Id(), Size);
|
||||||
|
if(!DumpObj(Type, pItem->Data(), Size))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for(size_t b = 0; b < Size / sizeof(int32_t); b++)
|
||||||
|
dbg_msg("snapshot", "\\t\\t%3d %12d\\t%08x", (int)b, pItem->Data()[b], pItem->Data()[b]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
lines = []
|
||||||
|
lines += ['int CNetObjHandler::DumpObj(int Type, const void *pData, int Size) const']
|
||||||
|
lines += ['{']
|
||||||
|
lines += ["\tchar aRawData[512];"]
|
||||||
|
lines += ['\tswitch(Type)']
|
||||||
|
lines += ['\t{']
|
||||||
|
|
||||||
|
for item in network.Objects:
|
||||||
|
for line in item.emit_dump(network.Objects):
|
||||||
|
lines += ["\t" + line]
|
||||||
|
lines += ['\t']
|
||||||
|
lines += ['\t}']
|
||||||
|
lines += ['\treturn -1;']
|
||||||
|
lines += ['};']
|
||||||
|
lines += ['']
|
||||||
|
for line in lines:
|
||||||
|
print(line)
|
||||||
|
|
||||||
lines = []
|
lines = []
|
||||||
lines += ["""\
|
lines += ["""\
|
||||||
void *CNetObjHandler::SecureUnpackObj(int Type, CUnpacker *pUnpacker)
|
void *CNetObjHandler::SecureUnpackObj(int Type, CUnpacker *pUnpacker)
|
||||||
|
|
|
@ -233,6 +233,15 @@ class NetObject:
|
||||||
lines += ["};"]
|
lines += ["};"]
|
||||||
return lines
|
return lines
|
||||||
|
|
||||||
|
def members_from_this_and_parents(self, objects):
|
||||||
|
variables = self.variables
|
||||||
|
next_base_name = self.base
|
||||||
|
while next_base_name is not None:
|
||||||
|
base_item = only([i for i in objects if i.name == next_base_name])
|
||||||
|
variables = base_item.variables + variables
|
||||||
|
next_base_name = base_item.base
|
||||||
|
return variables
|
||||||
|
|
||||||
def emit_uncompressed_unpack_and_validate(self, objects):
|
def emit_uncompressed_unpack_and_validate(self, objects):
|
||||||
lines = []
|
lines = []
|
||||||
lines += [f"case {self.enum_name}:"]
|
lines += [f"case {self.enum_name}:"]
|
||||||
|
@ -240,12 +249,7 @@ class NetObject:
|
||||||
lines += [f"\t{self.struct_name} *pData = ({self.struct_name} *)m_aUnpackedData;"]
|
lines += [f"\t{self.struct_name} *pData = ({self.struct_name} *)m_aUnpackedData;"]
|
||||||
unpack_lines = []
|
unpack_lines = []
|
||||||
|
|
||||||
variables = self.variables
|
variables = self.members_from_this_and_parents(objects)
|
||||||
next_base_name = self.base
|
|
||||||
while next_base_name is not None:
|
|
||||||
base_item = only([i for i in objects if i.name == next_base_name])
|
|
||||||
variables = base_item.variables + variables
|
|
||||||
next_base_name = base_item.base
|
|
||||||
for v in variables:
|
for v in variables:
|
||||||
if not self.validate_size and v.default is None:
|
if not self.validate_size and v.default is None:
|
||||||
raise ValueError(f"{v.name} in {self.name} has no default value. Member variables that do not have a default value cannot be used in a structure whose size is not validated.")
|
raise ValueError(f"{v.name} in {self.name} has no default value. Member variables that do not have a default value cannot be used in a structure whose size is not validated.")
|
||||||
|
@ -260,6 +264,26 @@ class NetObject:
|
||||||
lines += ["} break;"]
|
lines += ["} break;"]
|
||||||
return lines
|
return lines
|
||||||
|
|
||||||
|
def emit_dump(self, objects):
|
||||||
|
lines = []
|
||||||
|
lines += [f"case {self.enum_name}:"]
|
||||||
|
lines += ["{"]
|
||||||
|
lines += [f"\t{self.struct_name} *pObj = ({self.struct_name} *)pData;"]
|
||||||
|
unpack_lines = []
|
||||||
|
variables = self.members_from_this_and_parents(objects)
|
||||||
|
offset = 0
|
||||||
|
for v in variables:
|
||||||
|
unpack_lines += ["\t"+line for line in v.emit_dump(offset)]
|
||||||
|
offset += 1
|
||||||
|
|
||||||
|
if len(unpack_lines) > 0:
|
||||||
|
lines += unpack_lines
|
||||||
|
else:
|
||||||
|
lines += ["\t(void)pData;"]
|
||||||
|
lines += ["return 0;"]
|
||||||
|
lines += ["};"]
|
||||||
|
return lines
|
||||||
|
|
||||||
class NetEvent(NetObject):
|
class NetEvent(NetObject):
|
||||||
def __init__(self, name, variables, ex=None):
|
def __init__(self, name, variables, ex=None):
|
||||||
NetObject.__init__(self, name, variables, ex=ex)
|
NetObject.__init__(self, name, variables, ex=ex)
|
||||||
|
@ -340,6 +364,8 @@ class NetVariable:
|
||||||
return []
|
return []
|
||||||
def emit_unpack_msg_check(self):
|
def emit_unpack_msg_check(self):
|
||||||
return []
|
return []
|
||||||
|
def emit_dump(self, offset):
|
||||||
|
return [f"str_format(aRawData, sizeof(aRawData), \"\\t\\t%3d %12d\\t%08x\", {offset}, ((const int *)pData)[{offset}], ((const int *)pData)[{offset}]);"]
|
||||||
|
|
||||||
class NetString(NetVariable):
|
class NetString(NetVariable):
|
||||||
def emit_declaration(self):
|
def emit_declaration(self):
|
||||||
|
@ -384,6 +410,16 @@ class NetIntAny(NetVariable):
|
||||||
return [f"pData->{self.name} = pUnpacker->GetIntOrDefault({self.default});"]
|
return [f"pData->{self.name} = pUnpacker->GetIntOrDefault({self.default});"]
|
||||||
def emit_pack(self):
|
def emit_pack(self):
|
||||||
return [f"pPacker->AddInt({self.name});"]
|
return [f"pPacker->AddInt({self.name});"]
|
||||||
|
def emit_dump(self, offset):
|
||||||
|
return NetVariable(self.name).emit_dump(offset) + \
|
||||||
|
[f"dbg_msg(\"snapshot\", \"%s\\t{self.name}=%d\", aRawData, pObj->{self.name});"]
|
||||||
|
|
||||||
|
class NetTwIntString(NetIntAny):
|
||||||
|
def emit_dump(self, offset):
|
||||||
|
return NetVariable(self.name).emit_dump(offset) + \
|
||||||
|
[f"aInts[0] = pObj->{self.name};"] + \
|
||||||
|
["IntsToStr(aInts, std::size(aInts), aStr, std::size(aStr));"] + \
|
||||||
|
[f"dbg_msg(\"snapshot\", \"%s\\t{self.name}=%d\\tIntToStr: %s\", aRawData, pObj->{self.name}, aStr);"]
|
||||||
|
|
||||||
class NetIntRange(NetIntAny):
|
class NetIntRange(NetIntAny):
|
||||||
def __init__(self, name, min_val, max_val, default=None):
|
def __init__(self, name, min_val, max_val, default=None):
|
||||||
|
@ -394,6 +430,23 @@ class NetIntRange(NetIntAny):
|
||||||
return [f"pData->{self.name} = ClampInt(\"{self.name}\", pData->{self.name}, {self.min}, {self.max});"]
|
return [f"pData->{self.name} = ClampInt(\"{self.name}\", pData->{self.name}, {self.min}, {self.max});"]
|
||||||
def emit_unpack_msg_check(self):
|
def emit_unpack_msg_check(self):
|
||||||
return [f"if(pData->{self.name} < {self.min} || pData->{self.name} > {self.max}) {{ m_pMsgFailedOn = \"{self.name}\"; break; }}"]
|
return [f"if(pData->{self.name} < {self.min} || pData->{self.name} > {self.max}) {{ m_pMsgFailedOn = \"{self.name}\"; break; }}"]
|
||||||
|
def emit_dump(self, offset):
|
||||||
|
min_fmt=f"min={self.min}"
|
||||||
|
min_arg = ''
|
||||||
|
try:
|
||||||
|
int(self.min)
|
||||||
|
except ValueError:
|
||||||
|
min_fmt = f"min={self.min}(%d)"
|
||||||
|
min_arg = f", (int){self.min}"
|
||||||
|
max_fmt=f"max={self.max}"
|
||||||
|
max_arg = ''
|
||||||
|
try:
|
||||||
|
int(self.max)
|
||||||
|
except ValueError:
|
||||||
|
max_fmt = f"max={self.max}(%d)"
|
||||||
|
max_arg = f", (int){self.max}"
|
||||||
|
return NetVariable(self.name).emit_dump(offset) + \
|
||||||
|
[f"dbg_msg(\"snapshot\", \"%s\\t{self.name}=%d ({min_fmt} {max_fmt})\", aRawData, pObj->{self.name}{min_arg}{max_arg});"]
|
||||||
|
|
||||||
class NetBool(NetIntRange):
|
class NetBool(NetIntRange):
|
||||||
def __init__(self, name, default=None):
|
def __init__(self, name, default=None):
|
||||||
|
@ -403,6 +456,9 @@ class NetBool(NetIntRange):
|
||||||
class NetTick(NetIntAny):
|
class NetTick(NetIntAny):
|
||||||
def __init__(self, name, default=None):
|
def __init__(self, name, default=None):
|
||||||
NetIntAny.__init__(self,name,default=default)
|
NetIntAny.__init__(self,name,default=default)
|
||||||
|
def emit_dump(self, offset):
|
||||||
|
return NetVariable(self.name).emit_dump(offset) + \
|
||||||
|
[f"dbg_msg(\"snapshot\", \"%s\\t{self.name}=%d (NetTick)\", aRawData, pObj->{self.name});"]
|
||||||
|
|
||||||
class NetArray(NetVariable):
|
class NetArray(NetVariable):
|
||||||
def __init__(self, var, size):
|
def __init__(self, var, size):
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
# pylint: skip-file
|
# pylint: skip-file
|
||||||
# See https://github.com/ddnet/ddnet/issues/3507
|
# See https://github.com/ddnet/ddnet/issues/3507
|
||||||
|
|
||||||
from datatypes import Enum, Flags, NetArray, NetBool, NetEvent, NetEventEx, NetIntAny, NetIntRange, NetMessage, NetMessageEx, NetObject, NetObjectEx, NetString, NetStringHalfStrict, NetStringStrict, NetTick
|
from datatypes import Enum, Flags, NetArray, NetBool, NetEvent, NetEventEx, NetIntAny, NetTwIntString, NetIntRange
|
||||||
|
from datatypes import NetMessage, NetMessageEx, NetObject, NetObjectEx, NetString, NetStringHalfStrict, NetStringStrict, NetTick
|
||||||
|
|
||||||
Emotes = ["NORMAL", "PAIN", "HAPPY", "SURPRISE", "ANGRY", "BLINK"]
|
Emotes = ["NORMAL", "PAIN", "HAPPY", "SURPRISE", "ANGRY", "BLINK"]
|
||||||
PlayerFlags = ["PLAYING", "IN_MENU", "CHATTING", "SCOREBOARD", "AIM"]
|
PlayerFlags = ["PLAYING", "IN_MENU", "CHATTING", "SCOREBOARD", "AIM"]
|
||||||
|
@ -215,17 +216,15 @@ Objects = [
|
||||||
|
|
||||||
NetObject("ClientInfo", [
|
NetObject("ClientInfo", [
|
||||||
# 4*4 = 16 characters
|
# 4*4 = 16 characters
|
||||||
NetIntAny("m_Name0"), NetIntAny("m_Name1"), NetIntAny("m_Name2"),
|
NetArray(NetTwIntString("m_aName"), 4),
|
||||||
NetIntAny("m_Name3"),
|
|
||||||
|
|
||||||
# 4*3 = 12 characters
|
# 4*3 = 12 characters
|
||||||
NetIntAny("m_Clan0"), NetIntAny("m_Clan1"), NetIntAny("m_Clan2"),
|
NetArray(NetTwIntString("m_aClan"), 3),
|
||||||
|
|
||||||
NetIntAny("m_Country"),
|
NetIntAny("m_Country"),
|
||||||
|
|
||||||
# 4*6 = 24 characters
|
# 4*6 = 24 characters
|
||||||
NetIntAny("m_Skin0"), NetIntAny("m_Skin1"), NetIntAny("m_Skin2"),
|
NetArray(NetTwIntString("m_aSkin"), 6),
|
||||||
NetIntAny("m_Skin3"), NetIntAny("m_Skin4"), NetIntAny("m_Skin5"),
|
|
||||||
|
|
||||||
NetIntRange("m_UseCustomColor", 0, 1),
|
NetIntRange("m_UseCustomColor", 0, 1),
|
||||||
|
|
||||||
|
|
|
@ -87,6 +87,7 @@ def main():
|
||||||
print("#ifndef GAME_GENERATED_PROTOCOL7_H")
|
print("#ifndef GAME_GENERATED_PROTOCOL7_H")
|
||||||
print("#define GAME_GENERATED_PROTOCOL7_H")
|
print("#define GAME_GENERATED_PROTOCOL7_H")
|
||||||
print("class CUnpacker;")
|
print("class CUnpacker;")
|
||||||
|
print("class CSnapshot;")
|
||||||
print("#include <engine/message.h>")
|
print("#include <engine/message.h>")
|
||||||
print("namespace protocol7 {")
|
print("namespace protocol7 {")
|
||||||
print(network.RawHeader)
|
print(network.RawHeader)
|
||||||
|
@ -150,6 +151,8 @@ def main():
|
||||||
CNetObjHandler();
|
CNetObjHandler();
|
||||||
|
|
||||||
int ValidateObj(int Type, const void *pData, int Size);
|
int ValidateObj(int Type, const void *pData, int Size);
|
||||||
|
void DebugDumpSnapshot(const CSnapshot *pSnap) const;
|
||||||
|
int DumpObj(int Type, const void *pData, int Size) const;
|
||||||
const char *GetObjName(int Type) const;
|
const char *GetObjName(int Type) const;
|
||||||
int GetObjSize(int Type) const;
|
int GetObjSize(int Type) const;
|
||||||
const char *FailedObjOn() const;
|
const char *FailedObjOn() const;
|
||||||
|
@ -174,6 +177,7 @@ def main():
|
||||||
lines += ['#include <base/system.h>']
|
lines += ['#include <base/system.h>']
|
||||||
lines += ['#include <engine/shared/packer.h>']
|
lines += ['#include <engine/shared/packer.h>']
|
||||||
lines += ['#include <engine/shared/protocol.h>']
|
lines += ['#include <engine/shared/protocol.h>']
|
||||||
|
lines += ['#include <engine/shared/snapshot.h>']
|
||||||
|
|
||||||
lines += ['namespace protocol7 {']
|
lines += ['namespace protocol7 {']
|
||||||
|
|
||||||
|
@ -269,6 +273,46 @@ def main():
|
||||||
lines += ['};']
|
lines += ['};']
|
||||||
lines += ['']
|
lines += ['']
|
||||||
|
|
||||||
|
for l in lines:
|
||||||
|
print(l)
|
||||||
|
|
||||||
|
print("""\
|
||||||
|
void CNetObjHandler::DebugDumpSnapshot(const ::CSnapshot *pSnap) const
|
||||||
|
{
|
||||||
|
dbg_msg("snapshot", "data_size=%d num_items=%d", pSnap->DataSize(), pSnap->NumItems());
|
||||||
|
for(int i = 0; i < pSnap->NumItems(); i++)
|
||||||
|
{
|
||||||
|
const CSnapshotItem *pItem = pSnap->GetItem(i);
|
||||||
|
int Size = pSnap->GetItemSize(i);
|
||||||
|
int Type = pSnap->GetItemType(i);
|
||||||
|
const char *pName = GetObjName(pItem->Type());
|
||||||
|
if(Type > OFFSET_UUID && Type < g_UuidManager.NumUuids() + OFFSET_UUID)
|
||||||
|
pName = g_UuidManager.GetName(Type);
|
||||||
|
dbg_msg("snapshot", "\\t%s type=%d id=%d size=%d", pName, pItem->Type(), pItem->Id(), Size);
|
||||||
|
if(!DumpObj(Type, pItem->Data(), Size))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for(size_t b = 0; b < Size / sizeof(int32_t); b++)
|
||||||
|
dbg_msg("snapshot", "\\t\\t%3d %12d\\t%08x", (int)b, pItem->Data()[b], pItem->Data()[b]);
|
||||||
|
}
|
||||||
|
}\n""")
|
||||||
|
|
||||||
|
lines = []
|
||||||
|
lines += ['int CNetObjHandler::DumpObj(int Type, const void *pData, int Size) const']
|
||||||
|
lines += ['{']
|
||||||
|
lines += ["\tchar aRawData[512];"]
|
||||||
|
lines += ['\tswitch(Type)']
|
||||||
|
lines += ['\t{']
|
||||||
|
|
||||||
|
for item in network.Objects:
|
||||||
|
for line in item.emit_dump(network.Objects):
|
||||||
|
lines += ["\t" + line]
|
||||||
|
lines += ['\t']
|
||||||
|
lines += ['\t}']
|
||||||
|
lines += ['\treturn -1;']
|
||||||
|
lines += ['};']
|
||||||
|
lines += ['']
|
||||||
|
|
||||||
lines += ['void *CNetObjHandler::SecureUnpackMsg(int Type, CUnpacker *pUnpacker)']
|
lines += ['void *CNetObjHandler::SecureUnpackMsg(int Type, CUnpacker *pUnpacker)']
|
||||||
lines += ['{']
|
lines += ['{']
|
||||||
lines += ['\tm_pMsgFailedOn = 0;']
|
lines += ['\tm_pMsgFailedOn = 0;']
|
||||||
|
|
|
@ -234,24 +234,38 @@ class NetObject:
|
||||||
lines += ["\t"+line for line in v.emit_declaration()]
|
lines += ["\t"+line for line in v.emit_declaration()]
|
||||||
lines += ["};"]
|
lines += ["};"]
|
||||||
return lines
|
return lines
|
||||||
def emit_validate(self, objects):
|
def members_from_this_and_parents(self, objects):
|
||||||
lines = [f"case {self.enum_name}:"]
|
|
||||||
lines += ["{"]
|
|
||||||
lines += [f"\t{self.struct_name} *pObj = ({self.struct_name} *)pData;"]
|
|
||||||
lines += ["\tif(sizeof(*pObj) != Size) return -1;"]
|
|
||||||
|
|
||||||
variables = self.variables
|
variables = self.variables
|
||||||
next_base_name = self.base
|
next_base_name = self.base
|
||||||
while next_base_name is not None:
|
while next_base_name is not None:
|
||||||
base_item = only([i for i in objects if i.name == next_base_name])
|
base_item = only([i for i in objects if i.name == next_base_name])
|
||||||
variables = base_item.variables + variables
|
variables = base_item.variables + variables
|
||||||
next_base_name = base_item.base
|
next_base_name = base_item.base
|
||||||
|
return variables
|
||||||
|
def emit_validate(self, objects):
|
||||||
|
lines = [f"case {self.enum_name}:"]
|
||||||
|
lines += ["{"]
|
||||||
|
lines += [f"\t{self.struct_name} *pObj = ({self.struct_name} *)pData;"]
|
||||||
|
lines += ["\tif(sizeof(*pObj) != Size) return -1;"]
|
||||||
|
variables = self.members_from_this_and_parents(objects)
|
||||||
for v in variables:
|
for v in variables:
|
||||||
lines += ["\t"+line for line in v.emit_validate()]
|
lines += ["\t"+line for line in v.emit_validate()]
|
||||||
lines += ["\treturn 0;"]
|
lines += ["\treturn 0;"]
|
||||||
lines += ["}"]
|
lines += ["}"]
|
||||||
return lines
|
return lines
|
||||||
|
def emit_dump(self, objects):
|
||||||
|
lines = [f"case {self.enum_name}:"]
|
||||||
|
lines += ["{"]
|
||||||
|
lines += [f"\t{self.struct_name} *pObj = ({self.struct_name} *)pData;"]
|
||||||
|
lines += ["\tif(sizeof(*pObj) != Size) return -1;"]
|
||||||
|
variables = self.members_from_this_and_parents(objects)
|
||||||
|
offset = 0
|
||||||
|
for v in variables:
|
||||||
|
lines += ["\t"+line for line in v.emit_dump(offset)]
|
||||||
|
offset += 1
|
||||||
|
lines += ["\treturn 0;"]
|
||||||
|
lines += ["}"]
|
||||||
|
return lines
|
||||||
|
|
||||||
|
|
||||||
class NetEvent(NetObject):
|
class NetEvent(NetObject):
|
||||||
|
@ -312,6 +326,8 @@ class NetVariable:
|
||||||
return []
|
return []
|
||||||
def emit_unpack_check(self):
|
def emit_unpack_check(self):
|
||||||
return []
|
return []
|
||||||
|
def emit_dump(self, offset):
|
||||||
|
return [f"str_format(aRawData, sizeof(aRawData), \"\\t\\t%3d %12d\\t%08x\", {offset}, ((const int *)pData)[{offset}], ((const int *)pData)[{offset}]);"]
|
||||||
|
|
||||||
class NetString(NetVariable):
|
class NetString(NetVariable):
|
||||||
def emit_declaration(self):
|
def emit_declaration(self):
|
||||||
|
@ -338,6 +354,9 @@ class NetIntAny(NetVariable):
|
||||||
return [f"pMsg->{self.name} = pUnpacker->GetIntOrDefault({self.default});"]
|
return [f"pMsg->{self.name} = pUnpacker->GetIntOrDefault({self.default});"]
|
||||||
def emit_pack(self):
|
def emit_pack(self):
|
||||||
return [f"pPacker->AddInt({self.name});"]
|
return [f"pPacker->AddInt({self.name});"]
|
||||||
|
def emit_dump(self, offset):
|
||||||
|
return NetVariable(self.name).emit_dump(offset) + \
|
||||||
|
[f"dbg_msg(\"snapshot\", \"%s\\t{self.name}=%d\", aRawData, pObj->{self.name});"]
|
||||||
|
|
||||||
class NetIntRange(NetIntAny):
|
class NetIntRange(NetIntAny):
|
||||||
def __init__(self, name, min_val, max_val, default=None):
|
def __init__(self, name, min_val, max_val, default=None):
|
||||||
|
@ -348,6 +367,23 @@ class NetIntRange(NetIntAny):
|
||||||
return [f"if(!CheckInt(\"{self.name}\", pObj->{self.name}, {self.min}, {self.max})) return -1;"]
|
return [f"if(!CheckInt(\"{self.name}\", pObj->{self.name}, {self.min}, {self.max})) return -1;"]
|
||||||
def emit_unpack_check(self):
|
def emit_unpack_check(self):
|
||||||
return [f"if(!CheckInt(\"{self.name}\", pMsg->{self.name}, {self.min}, {self.max})) break;"]
|
return [f"if(!CheckInt(\"{self.name}\", pMsg->{self.name}, {self.min}, {self.max})) break;"]
|
||||||
|
def emit_dump(self, offset):
|
||||||
|
min_fmt=f"min={self.min}"
|
||||||
|
min_arg = ''
|
||||||
|
try:
|
||||||
|
int(self.min)
|
||||||
|
except ValueError:
|
||||||
|
min_fmt = f"min={self.min}(%d)"
|
||||||
|
min_arg = f", (int){self.min}"
|
||||||
|
max_fmt=f"max={self.max}"
|
||||||
|
max_arg = ''
|
||||||
|
try:
|
||||||
|
int(self.max)
|
||||||
|
except ValueError:
|
||||||
|
max_fmt = f"max={self.max}(%d)"
|
||||||
|
max_arg = f", (int){self.max}"
|
||||||
|
return NetVariable(self.name).emit_dump(offset) + \
|
||||||
|
[f"dbg_msg(\"snapshot\", \"%s\\t{self.name}=%d ({min_fmt} {max_fmt})\", aRawData, pObj->{self.name}{min_arg}{max_arg});"]
|
||||||
|
|
||||||
class NetEnum(NetIntRange):
|
class NetEnum(NetIntRange):
|
||||||
def __init__(self, name, enum):
|
def __init__(self, name, enum):
|
||||||
|
@ -366,6 +402,9 @@ class NetFlag(NetIntAny):
|
||||||
return [f"if(!CheckFlag(\"{self.name}\", pObj->{self.name}, {self.mask})) return -1;"]
|
return [f"if(!CheckFlag(\"{self.name}\", pObj->{self.name}, {self.mask})) return -1;"]
|
||||||
def emit_unpack_check(self):
|
def emit_unpack_check(self):
|
||||||
return [f"if(!CheckFlag(\"{self.name}\", pMsg->{self.name}, {self.mask})) break;"]
|
return [f"if(!CheckFlag(\"{self.name}\", pMsg->{self.name}, {self.mask})) break;"]
|
||||||
|
def emit_dump(self, offset):
|
||||||
|
return NetVariable(self.name).emit_dump(offset) + \
|
||||||
|
[f"dbg_msg(\"snapshot\", \"%s\\t{self.name}=%d (mask=%d)\", aRawData, pObj->{self.name}, {self.mask});"]
|
||||||
|
|
||||||
class NetBool(NetIntRange):
|
class NetBool(NetIntRange):
|
||||||
def __init__(self, name, default=None):
|
def __init__(self, name, default=None):
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit d5f0cd9194936d1ab5bd19952645b8dffe9ae06c
|
Subproject commit e78f350e7898fc6b0702cdc3b7ce6ee347c97d49
|
|
@ -4,6 +4,7 @@ Requirements for building for Android
|
||||||
- At least 10-15 GiB of free disk space.
|
- At least 10-15 GiB of free disk space.
|
||||||
- First follow the general instructions for setting up https://github.com/ddnet/ddnet for building on Linux.
|
- First follow the general instructions for setting up https://github.com/ddnet/ddnet for building on Linux.
|
||||||
This guide has only been tested on Linux.
|
This guide has only been tested on Linux.
|
||||||
|
- Note: Use a stable version of Rust. Using the nightly version results in linking errors.
|
||||||
- Install the Android NDK (version 26) in the same location
|
- Install the Android NDK (version 26) in the same location
|
||||||
where Android Studio would unpack it (`~/Android/Sdk/ndk/`):
|
where Android Studio would unpack it (`~/Android/Sdk/ndk/`):
|
||||||
```shell
|
```shell
|
||||||
|
|
|
@ -7,8 +7,6 @@ export MAKEFLAGS
|
||||||
|
|
||||||
ANDROID_NDK_VERSION="$(cd "$ANDROID_HOME/ndk" && find . -maxdepth 1 | sort -n | tail -1)"
|
ANDROID_NDK_VERSION="$(cd "$ANDROID_HOME/ndk" && find . -maxdepth 1 | sort -n | tail -1)"
|
||||||
ANDROID_NDK_VERSION="${ANDROID_NDK_VERSION:2}"
|
ANDROID_NDK_VERSION="${ANDROID_NDK_VERSION:2}"
|
||||||
# ANDROID_NDK_VERSION must be exported for build.sh step
|
|
||||||
export ANDROID_NDK_VERSION
|
|
||||||
# ANDROID_NDK_HOME must be exported for cargo-ndk
|
# ANDROID_NDK_HOME must be exported for cargo-ndk
|
||||||
export ANDROID_NDK_HOME="$ANDROID_HOME/ndk/$ANDROID_NDK_VERSION"
|
export ANDROID_NDK_HOME="$ANDROID_HOME/ndk/$ANDROID_NDK_VERSION"
|
||||||
|
|
||||||
|
@ -197,6 +195,7 @@ cd "${BUILD_FOLDER}" || exit 1
|
||||||
|
|
||||||
mkdir -p src/main
|
mkdir -p src/main
|
||||||
mkdir -p src/main/res/values
|
mkdir -p src/main/res/values
|
||||||
|
mkdir -p src/main/res/xml
|
||||||
mkdir -p src/main/res/mipmap
|
mkdir -p src/main/res/mipmap
|
||||||
|
|
||||||
function copy_dummy_files() {
|
function copy_dummy_files() {
|
||||||
|
@ -213,6 +212,7 @@ copy_dummy_files scripts/android/files/proguard-rules.pro proguard-rules.pro
|
||||||
copy_dummy_files scripts/android/files/settings.gradle settings.gradle
|
copy_dummy_files scripts/android/files/settings.gradle settings.gradle
|
||||||
copy_dummy_files scripts/android/files/AndroidManifest.xml src/main/AndroidManifest.xml
|
copy_dummy_files scripts/android/files/AndroidManifest.xml src/main/AndroidManifest.xml
|
||||||
copy_dummy_files scripts/android/files/res/values/strings.xml src/main/res/values/strings.xml
|
copy_dummy_files scripts/android/files/res/values/strings.xml src/main/res/values/strings.xml
|
||||||
|
copy_dummy_files scripts/android/files/res/xml/shortcuts.xml src/main/res/xml/shortcuts.xml
|
||||||
copy_dummy_files other/icons/DDNet_256x256x32.png src/main/res/mipmap/ic_launcher.png
|
copy_dummy_files other/icons/DDNet_256x256x32.png src/main/res/mipmap/ic_launcher.png
|
||||||
copy_dummy_files other/icons/DDNet_256x256x32.png src/main/res/mipmap/ic_launcher_round.png
|
copy_dummy_files other/icons/DDNet_256x256x32.png src/main/res/mipmap/ic_launcher_round.png
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,8 @@
|
||||||
android:name="org.ddnet.client.NativeMain"
|
android:name="org.ddnet.client.NativeMain"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
|
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
|
||||||
android:screenOrientation="landscape">
|
android:screenOrientation="landscape"
|
||||||
|
android:launchMode="singleInstance">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
@ -38,6 +39,9 @@
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="android.app.lib_name"
|
android:name="android.app.lib_name"
|
||||||
android:value="DDNet" />
|
android:value="DDNet" />
|
||||||
|
<meta-data
|
||||||
|
android:name="android.app.shortcuts"
|
||||||
|
android:resource="@xml/shortcuts" />
|
||||||
</activity>
|
</activity>
|
||||||
</application>
|
</application>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|
|
@ -18,7 +18,6 @@ java {
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 34
|
compileSdkVersion 34
|
||||||
ndkVersion "TW_NDK_VERSION"
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "org.ddnet.client"
|
applicationId "org.ddnet.client"
|
||||||
namespace("org.ddnet.client")
|
namespace("org.ddnet.client")
|
||||||
|
@ -43,6 +42,7 @@ android {
|
||||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
}
|
}
|
||||||
debug {
|
debug {
|
||||||
|
debuggable true
|
||||||
minifyEnabled false
|
minifyEnabled false
|
||||||
shrinkResources false
|
shrinkResources false
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,12 +45,13 @@ sed -i "s/TW_KEY_NAME/${TW_KEY_NAME_ESCAPED}/g" build.gradle
|
||||||
sed -i "s/TW_KEY_PW/${TW_KEY_PW_ESCAPED}/g" build.gradle
|
sed -i "s/TW_KEY_PW/${TW_KEY_PW_ESCAPED}/g" build.gradle
|
||||||
sed -i "s/TW_KEY_ALIAS/${TW_KEY_ALIAS_ESCAPED}/g" build.gradle
|
sed -i "s/TW_KEY_ALIAS/${TW_KEY_ALIAS_ESCAPED}/g" build.gradle
|
||||||
|
|
||||||
sed -i "s/TW_NDK_VERSION/${ANDROID_NDK_VERSION}/g" build.gradle
|
|
||||||
sed -i "s/TW_VERSION_CODE/${TW_VERSION_CODE}/g" build.gradle
|
sed -i "s/TW_VERSION_CODE/${TW_VERSION_CODE}/g" build.gradle
|
||||||
sed -i "s/TW_VERSION_NAME/${TW_VERSION_NAME}/g" build.gradle
|
sed -i "s/TW_VERSION_NAME/${TW_VERSION_NAME}/g" build.gradle
|
||||||
|
|
||||||
sed -i "s/DDNet/${APK_BASENAME}/g" src/main/res/values/strings.xml
|
sed -i "s/DDNet/${APK_BASENAME}/g" src/main/res/values/strings.xml
|
||||||
|
|
||||||
|
sed -i "s/org.ddnet.client/${APK_PACKAGE_NAME}/g" src/main/res/xml/shortcuts.xml
|
||||||
|
|
||||||
sed -i "s/\"DDNet\"/\"${APK_BASENAME}\"/g" src/main/AndroidManifest.xml
|
sed -i "s/\"DDNet\"/\"${APK_BASENAME}\"/g" src/main/AndroidManifest.xml
|
||||||
sed -i "s/org.ddnet.client/${APK_PACKAGE_NAME}/g" src/main/AndroidManifest.xml
|
sed -i "s/org.ddnet.client/${APK_PACKAGE_NAME}/g" src/main/AndroidManifest.xml
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,8 @@ public class NativeMain extends SDLActivity {
|
||||||
|
|
||||||
private static final int COMMAND_RESTART_APP = SDLActivity.COMMAND_USER + 1;
|
private static final int COMMAND_RESTART_APP = SDLActivity.COMMAND_USER + 1;
|
||||||
|
|
||||||
|
private String[] launchArguments = new String[0];
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String[] getLibraries() {
|
protected String[] getLibraries() {
|
||||||
return new String[] {
|
return new String[] {
|
||||||
|
@ -20,9 +22,27 @@ public class NativeMain extends SDLActivity {
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle SavedInstanceState) {
|
public void onCreate(Bundle SavedInstanceState) {
|
||||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
||||||
|
|
||||||
|
Intent intent = getIntent();
|
||||||
|
if(intent != null) {
|
||||||
|
String gfxBackend = intent.getStringExtra("gfx-backend");
|
||||||
|
if(gfxBackend != null) {
|
||||||
|
if(gfxBackend.equals("Vulkan")) {
|
||||||
|
launchArguments = new String[] {"gfx_backend Vulkan"};
|
||||||
|
} else if(gfxBackend.equals("OpenGL")) {
|
||||||
|
launchArguments = new String[] {"gfx_backend OpenGL"};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
super.onCreate(SavedInstanceState);
|
super.onCreate(SavedInstanceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String[] getArguments() {
|
||||||
|
return launchArguments;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean onUnhandledMessage(int command, Object param) {
|
protected boolean onUnhandledMessage(int command, Object param) {
|
||||||
if(command == COMMAND_RESTART_APP) {
|
if(command == COMMAND_RESTART_APP) {
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_name">DDNet</string>
|
<string name="app_name">DDNet</string>
|
||||||
|
<string name="shortcut_play_vulkan_short">Play (Vulkan)</string>
|
||||||
|
<string name="shortcut_play_opengl_short">Play (OpenGL)</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
30
scripts/android/files/res/xml/shortcuts.xml
Normal file
30
scripts/android/files/res/xml/shortcuts.xml
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<shortcut
|
||||||
|
android:shortcutId="play-vulkan"
|
||||||
|
android:enabled="true"
|
||||||
|
android:icon="@mipmap/ic_launcher"
|
||||||
|
android:shortcutShortLabel="@string/shortcut_play_vulkan_short">
|
||||||
|
<intent
|
||||||
|
android:action="android.intent.action.VIEW"
|
||||||
|
android:targetPackage="org.ddnet.client"
|
||||||
|
android:targetClass="org.ddnet.client.NativeMain">
|
||||||
|
<extra
|
||||||
|
android:name="gfx-backend"
|
||||||
|
android:value="Vulkan" />
|
||||||
|
</intent>
|
||||||
|
</shortcut>
|
||||||
|
<shortcut
|
||||||
|
android:shortcutId="play-opengl"
|
||||||
|
android:enabled="true"
|
||||||
|
android:icon="@mipmap/ic_launcher"
|
||||||
|
android:shortcutShortLabel="@string/shortcut_play_opengl_short">
|
||||||
|
<intent
|
||||||
|
android:action="android.intent.action.VIEW"
|
||||||
|
android:targetPackage="org.ddnet.client"
|
||||||
|
android:targetClass="org.ddnet.client.NativeMain">
|
||||||
|
<extra
|
||||||
|
android:name="gfx-backend"
|
||||||
|
android:value="OpenGL" />
|
||||||
|
</intent>
|
||||||
|
</shortcut>
|
||||||
|
</shortcuts>
|
|
@ -80,7 +80,7 @@ cd compile_libs || exit 1
|
||||||
|
|
||||||
build_cmake_lib zlib https://github.com/madler/zlib
|
build_cmake_lib zlib https://github.com/madler/zlib
|
||||||
build_cmake_lib png https://github.com/glennrp/libpng
|
build_cmake_lib png https://github.com/glennrp/libpng
|
||||||
build_cmake_lib curl https://github.com/curl/curl
|
build_cmake_lib curl https://github.com/curl/curl "curl-8_8_0"
|
||||||
build_cmake_lib freetype2 https://gitlab.freedesktop.org/freetype/freetype
|
build_cmake_lib freetype2 https://gitlab.freedesktop.org/freetype/freetype
|
||||||
build_cmake_lib sdl https://github.com/libsdl-org/SDL SDL2
|
build_cmake_lib sdl https://github.com/libsdl-org/SDL SDL2
|
||||||
build_cmake_lib ogg https://github.com/xiph/ogg
|
build_cmake_lib ogg https://github.com/xiph/ogg
|
||||||
|
|
|
@ -7,22 +7,6 @@ class LanguageDecodeError(Exception):
|
||||||
error = f"File \"{filename}\", line {line+1}: {message}"
|
error = f"File \"{filename}\", line {line+1}: {message}"
|
||||||
super().__init__(error)
|
super().__init__(error)
|
||||||
|
|
||||||
|
|
||||||
# Taken from https://stackoverflow.com/questions/30011379/how-can-i-parse-a-c-format-string-in-python
|
|
||||||
cfmt = r'''\
|
|
||||||
( # start of capture group 1
|
|
||||||
% # literal "%"
|
|
||||||
(?: # first option
|
|
||||||
(?:[-+0 #]{0,5}) # optional flags
|
|
||||||
(?:\d+|\*)? # width
|
|
||||||
(?:\.(?:\d+|\*))? # precision
|
|
||||||
(?:h|l|ll|w|I|I32|I64)? # size
|
|
||||||
[cCdiouxXeEfgGaAnpsSZ] # type
|
|
||||||
) | # OR
|
|
||||||
%%) # literal "%%"
|
|
||||||
'''
|
|
||||||
|
|
||||||
|
|
||||||
def decode(fileobj, elements_per_key):
|
def decode(fileobj, elements_per_key):
|
||||||
data = {}
|
data = {}
|
||||||
current_context = ""
|
current_context = ""
|
||||||
|
@ -45,10 +29,7 @@ def decode(fileobj, elements_per_key):
|
||||||
if len(data[current_key]) >= 1+elements_per_key:
|
if len(data[current_key]) >= 1+elements_per_key:
|
||||||
raise LanguageDecodeError("Wrong number of elements per key", fileobj.name, index)
|
raise LanguageDecodeError("Wrong number of elements per key", fileobj.name, index)
|
||||||
if current_key:
|
if current_key:
|
||||||
original = current_key[0] # pylint: disable=unsubscriptable-object
|
|
||||||
translation = line[3:]
|
translation = line[3:]
|
||||||
if translation and [m.group(1) for m in re.finditer(cfmt, original, flags=re.X)] != [m.group(1) for m in re.finditer(cfmt, translation, flags=re.X)]:
|
|
||||||
raise LanguageDecodeError("Non-matching formatting string", fileobj.name, index)
|
|
||||||
data[current_key].extend([translation])
|
data[current_key].extend([translation])
|
||||||
else:
|
else:
|
||||||
raise LanguageDecodeError("Element before key given", fileobj.name, index)
|
raise LanguageDecodeError("Element before key given", fileobj.name, index)
|
||||||
|
@ -56,7 +37,7 @@ def decode(fileobj, elements_per_key):
|
||||||
if current_key:
|
if current_key:
|
||||||
if len(data[current_key]) != 1+elements_per_key:
|
if len(data[current_key]) != 1+elements_per_key:
|
||||||
raise LanguageDecodeError("Wrong number of elements per key", fileobj.name, index)
|
raise LanguageDecodeError("Wrong number of elements per key", fileobj.name, index)
|
||||||
data[current_key].append(index)
|
data[current_key].append(index - 1 if current_context else index)
|
||||||
if line in data:
|
if line in data:
|
||||||
raise LanguageDecodeError("Key defined multiple times: " + line, fileobj.name, index)
|
raise LanguageDecodeError("Key defined multiple times: " + line, fileobj.name, index)
|
||||||
data[(line, current_context)] = [index - 1 if current_context else index]
|
data[(line, current_context)] = [index - 1 if current_context else index]
|
||||||
|
|
54
scripts/languages/validate.py
Executable file
54
scripts/languages/validate.py
Executable file
|
@ -0,0 +1,54 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
import twlang
|
||||||
|
|
||||||
|
os.chdir(os.path.dirname(__file__) + "/../..")
|
||||||
|
|
||||||
|
# Taken from https://stackoverflow.com/questions/30011379/how-can-i-parse-a-c-format-string-in-python
|
||||||
|
cfmt = '''
|
||||||
|
( # start of capture group 1
|
||||||
|
% # literal "%"
|
||||||
|
(?: # first option
|
||||||
|
(?:[-+0 #]{0,5}) # optional flags
|
||||||
|
(?:\\d+|\\*)? # width
|
||||||
|
(?:\\.(?:\\d+|\\*))? # precision
|
||||||
|
(?:h|l|ll|w|I|I32|I64)? # size
|
||||||
|
[cCdiouxXeEfgGaAnpsSZ] # type
|
||||||
|
) | # OR
|
||||||
|
%%) # literal "%%"
|
||||||
|
'''
|
||||||
|
|
||||||
|
total_errors = 0
|
||||||
|
|
||||||
|
def print_validation_error(error, filename, error_line):
|
||||||
|
print(f"Invalid: {translated}")
|
||||||
|
print(f"- {error} in {filename}:{error_line + 1}\n")
|
||||||
|
global total_errors
|
||||||
|
total_errors += 1
|
||||||
|
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
languages = sys.argv[1:]
|
||||||
|
else:
|
||||||
|
languages = twlang.languages()
|
||||||
|
local = twlang.localizes()
|
||||||
|
|
||||||
|
for language in languages:
|
||||||
|
translations = twlang.translations(language)
|
||||||
|
|
||||||
|
for (english, _), (line, translated, _) in translations.items():
|
||||||
|
if not translated:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Validate c format strings. Strings that move the formatters are not validated.
|
||||||
|
if re.findall(cfmt, english, flags=re.X) != re.findall(cfmt, translated, flags=re.X) and not "1$" in translated:
|
||||||
|
print_validation_error("Non-matching formatting", language, line)
|
||||||
|
|
||||||
|
# Check for elipisis
|
||||||
|
if "…" in english and "..." in translated:
|
||||||
|
print_validation_error("Usage of ... instead of the … character", language, line)
|
||||||
|
|
||||||
|
if total_errors:
|
||||||
|
print(f"Found {total_errors} {'error' if total_errors == 1 else 'errors'} ")
|
||||||
|
sys.exit(1)
|
|
@ -171,7 +171,7 @@
|
||||||
#define CONF_ARCH_ENDIAN_LITTLE 1
|
#define CONF_ARCH_ENDIAN_LITTLE 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__aarch64__) || defined(__arm64__)
|
#if defined(__aarch64__) || defined(__arm64__) || defined(__ARM_ARCH)
|
||||||
#define CONF_ARCH_ARM64 1
|
#define CONF_ARCH_ARM64 1
|
||||||
#define CONF_ARCH_STRING "arm64"
|
#define CONF_ARCH_STRING "arm64"
|
||||||
#define CONF_ARCH_ENDIAN_LITTLE 1
|
#define CONF_ARCH_ENDIAN_LITTLE 1
|
||||||
|
|
|
@ -867,10 +867,15 @@ void sphore_destroy(SEMAPHORE *sem)
|
||||||
#elif defined(CONF_PLATFORM_MACOS)
|
#elif defined(CONF_PLATFORM_MACOS)
|
||||||
void sphore_init(SEMAPHORE *sem)
|
void sphore_init(SEMAPHORE *sem)
|
||||||
{
|
{
|
||||||
char aBuf[32];
|
char aBuf[64];
|
||||||
str_format(aBuf, sizeof(aBuf), "%p", (void *)sem);
|
str_format(aBuf, sizeof(aBuf), "/%d.%p", pid(), (void *)sem);
|
||||||
*sem = sem_open(aBuf, O_CREAT | O_EXCL, S_IRWXU | S_IRWXG, 0);
|
*sem = sem_open(aBuf, O_CREAT | O_EXCL, S_IRWXU | S_IRWXG, 0);
|
||||||
dbg_assert(*sem != SEM_FAILED, "sem_open failure");
|
if(*sem == SEM_FAILED)
|
||||||
|
{
|
||||||
|
char aError[128];
|
||||||
|
str_format(aError, sizeof(aError), "sem_open failure, errno=%d, name='%s'", errno, aBuf);
|
||||||
|
dbg_assert(false, aError);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void sphore_wait(SEMAPHORE *sem)
|
void sphore_wait(SEMAPHORE *sem)
|
||||||
{
|
{
|
||||||
|
@ -888,8 +893,8 @@ void sphore_signal(SEMAPHORE *sem)
|
||||||
void sphore_destroy(SEMAPHORE *sem)
|
void sphore_destroy(SEMAPHORE *sem)
|
||||||
{
|
{
|
||||||
dbg_assert(sem_close(*sem) == 0, "sem_close failure");
|
dbg_assert(sem_close(*sem) == 0, "sem_close failure");
|
||||||
char aBuf[32];
|
char aBuf[64];
|
||||||
str_format(aBuf, sizeof(aBuf), "%p", (void *)sem);
|
str_format(aBuf, sizeof(aBuf), "/%d.%p", pid(), (void *)sem);
|
||||||
dbg_assert(sem_unlink(aBuf) == 0, "sem_unlink failure");
|
dbg_assert(sem_unlink(aBuf) == 0, "sem_unlink failure");
|
||||||
}
|
}
|
||||||
#elif defined(CONF_FAMILY_UNIX)
|
#elif defined(CONF_FAMILY_UNIX)
|
||||||
|
@ -1130,22 +1135,6 @@ bool net_addr_str(const NETADDR *addr, char *string, int max_length, int add_por
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void net_addr_url_str(const NETADDR *addr, char *string, int max_length, int add_port)
|
|
||||||
{
|
|
||||||
char ipaddr[512];
|
|
||||||
if(!net_addr_str(addr, ipaddr, sizeof(ipaddr), add_port))
|
|
||||||
{
|
|
||||||
str_copy(string, ipaddr, max_length);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
str_format(
|
|
||||||
string,
|
|
||||||
max_length,
|
|
||||||
"tw-%s+udp://%s",
|
|
||||||
addr->type & NETTYPE_TW7 ? "0.7" : "0.6",
|
|
||||||
ipaddr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int priv_net_extract(const char *hostname, char *host, int max_host, int *port)
|
static int priv_net_extract(const char *hostname, char *host, int max_host, int *port)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -818,23 +818,6 @@ int net_addr_comp_noport(const NETADDR *a, const NETADDR *b);
|
||||||
*/
|
*/
|
||||||
bool net_addr_str(const NETADDR *addr, char *string, int max_length, int add_port);
|
bool net_addr_str(const NETADDR *addr, char *string, int max_length, int add_port);
|
||||||
|
|
||||||
/**
|
|
||||||
* Turns a network address into a url string.
|
|
||||||
* Examples:
|
|
||||||
* tw-0.6+udp://127.0.0.1:8303
|
|
||||||
* tw-0.7+udp://127.0.0.1
|
|
||||||
*
|
|
||||||
* @ingroup Network-General
|
|
||||||
*
|
|
||||||
* @param addr Address to turn into a string.
|
|
||||||
* @param string Buffer to fill with the url string.
|
|
||||||
* @param max_length Maximum size of the url string.
|
|
||||||
* @param add_port add port to url string or not
|
|
||||||
*
|
|
||||||
* @remark The string will always be zero terminated
|
|
||||||
*/
|
|
||||||
void net_addr_url_str(const NETADDR *addr, char *string, int max_length, int add_port);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Turns url string into a network address struct.
|
* Turns url string into a network address struct.
|
||||||
* The url format is tw-0.6+udp://{ipaddr}[:{port}]
|
* The url format is tw-0.6+udp://{ipaddr}[:{port}]
|
||||||
|
@ -1253,6 +1236,7 @@ int str_format_int(char *buffer, size_t buffer_size, int value);
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
int str_format_opt(char *buffer, int buffer_size, const char *format, Args... args)
|
int str_format_opt(char *buffer, int buffer_size, const char *format, Args... args)
|
||||||
{
|
{
|
||||||
|
static_assert(sizeof...(args) > 0, "Use str_copy instead of str_format without format arguments");
|
||||||
return str_format(buffer, buffer_size, format, args...);
|
return str_format(buffer, buffer_size, format, args...);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -217,6 +217,7 @@ public:
|
||||||
|
|
||||||
// server info
|
// server info
|
||||||
virtual void GetServerInfo(class CServerInfo *pServerInfo) const = 0;
|
virtual void GetServerInfo(class CServerInfo *pServerInfo) const = 0;
|
||||||
|
virtual bool ServerCapAnyPlayerFlag() const = 0;
|
||||||
|
|
||||||
virtual int GetPredictionTime() = 0;
|
virtual int GetPredictionTime() = 0;
|
||||||
|
|
||||||
|
|
|
@ -443,7 +443,9 @@ static bool BackendInitGlew(EBackendType BackendType, int &GlewMajor, int &GlewM
|
||||||
#ifdef CONF_GLEW_HAS_CONTEXT_INIT
|
#ifdef CONF_GLEW_HAS_CONTEXT_INIT
|
||||||
if(GLEW_OK != glewContextInit())
|
if(GLEW_OK != glewContextInit())
|
||||||
#else
|
#else
|
||||||
if(GLEW_OK != glewInit())
|
GLenum InitResult = glewInit();
|
||||||
|
const char *pVideoDriver = SDL_GetCurrentVideoDriver();
|
||||||
|
if(GLEW_OK != InitResult && pVideoDriver && !str_comp(pVideoDriver, "wayland") && GLEW_ERROR_NO_GLX_DISPLAY != InitResult)
|
||||||
#endif
|
#endif
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -1019,6 +1021,13 @@ int CGraphicsBackend_SDL_GL::Init(const char *pName, int *pScreen, int *pWidth,
|
||||||
SDL_GetVersion(&Linked);
|
SDL_GetVersion(&Linked);
|
||||||
dbg_msg("sdl", "SDL version %d.%d.%d (compiled = %d.%d.%d)", Linked.major, Linked.minor, Linked.patch,
|
dbg_msg("sdl", "SDL version %d.%d.%d (compiled = %d.%d.%d)", Linked.major, Linked.minor, Linked.patch,
|
||||||
Compiled.major, Compiled.minor, Compiled.patch);
|
Compiled.major, Compiled.minor, Compiled.patch);
|
||||||
|
|
||||||
|
#if CONF_PLATFORM_LINUX && SDL_VERSION_ATLEAST(2, 0, 22)
|
||||||
|
// needed to workaround SDL from forcing exclusively X11 if linking against the GLX flavour of GLEW instead of the EGL one
|
||||||
|
// w/o this on Wayland systems (no XWayland support) SDL's Video subsystem will fail to load (starting from SDL2.30+)
|
||||||
|
if(Linked.major == 2 && Linked.minor >= 30)
|
||||||
|
SDL_SetHint(SDL_HINT_VIDEODRIVER, "x11,wayland");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!SDL_WasInit(SDL_INIT_VIDEO))
|
if(!SDL_WasInit(SDL_INIT_VIDEO))
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include <base/hash.h>
|
#include <base/hash.h>
|
||||||
#include <base/hash_ctxt.h>
|
#include <base/hash_ctxt.h>
|
||||||
|
#include <base/log.h>
|
||||||
#include <base/logger.h>
|
#include <base/logger.h>
|
||||||
#include <base/math.h>
|
#include <base/math.h>
|
||||||
#include <base/system.h>
|
#include <base/system.h>
|
||||||
|
@ -246,11 +247,7 @@ void CClient::SendReady(int Conn)
|
||||||
|
|
||||||
void CClient::SendMapRequest()
|
void CClient::SendMapRequest()
|
||||||
{
|
{
|
||||||
if(m_MapdownloadFileTemp)
|
dbg_assert(!m_MapdownloadFileTemp, "Map download already in progress");
|
||||||
{
|
|
||||||
io_close(m_MapdownloadFileTemp);
|
|
||||||
Storage()->RemoveFile(m_aMapdownloadFilenameTemp, IStorage::TYPE_SAVE);
|
|
||||||
}
|
|
||||||
m_MapdownloadFileTemp = Storage()->OpenFile(m_aMapdownloadFilenameTemp, IOFLAG_WRITE, IStorage::TYPE_SAVE);
|
m_MapdownloadFileTemp = Storage()->OpenFile(m_aMapdownloadFilenameTemp, IOFLAG_WRITE, IStorage::TYPE_SAVE);
|
||||||
if(IsSixup())
|
if(IsSixup())
|
||||||
{
|
{
|
||||||
|
@ -655,6 +652,7 @@ void CClient::DisconnectWithReason(const char *pReason)
|
||||||
m_aRconAuthed[0] = 0;
|
m_aRconAuthed[0] = 0;
|
||||||
mem_zero(m_aRconUsername, sizeof(m_aRconUsername));
|
mem_zero(m_aRconUsername, sizeof(m_aRconUsername));
|
||||||
mem_zero(m_aRconPassword, sizeof(m_aRconPassword));
|
mem_zero(m_aRconPassword, sizeof(m_aRconPassword));
|
||||||
|
m_MapDetailsPresent = false;
|
||||||
m_ServerSentCapabilities = false;
|
m_ServerSentCapabilities = false;
|
||||||
m_UseTempRconCommands = 0;
|
m_UseTempRconCommands = 0;
|
||||||
m_ExpectedRconCommands = -1;
|
m_ExpectedRconCommands = -1;
|
||||||
|
@ -670,22 +668,7 @@ void CClient::DisconnectWithReason(const char *pReason)
|
||||||
m_CurrentServerCurrentPingTime = -1;
|
m_CurrentServerCurrentPingTime = -1;
|
||||||
m_CurrentServerNextPingTime = -1;
|
m_CurrentServerNextPingTime = -1;
|
||||||
|
|
||||||
// disable all downloads
|
ResetMapDownload(true);
|
||||||
m_MapdownloadChunk = 0;
|
|
||||||
if(m_pMapdownloadTask)
|
|
||||||
m_pMapdownloadTask->Abort();
|
|
||||||
if(m_MapdownloadFileTemp)
|
|
||||||
{
|
|
||||||
io_close(m_MapdownloadFileTemp);
|
|
||||||
Storage()->RemoveFile(m_aMapdownloadFilenameTemp, IStorage::TYPE_SAVE);
|
|
||||||
}
|
|
||||||
m_MapdownloadFileTemp = 0;
|
|
||||||
m_MapdownloadSha256Present = false;
|
|
||||||
m_MapdownloadSha256 = SHA256_ZEROED;
|
|
||||||
m_MapdownloadCrc = 0;
|
|
||||||
m_MapdownloadTotalsize = -1;
|
|
||||||
m_MapdownloadAmount = 0;
|
|
||||||
m_MapDetailsPresent = false;
|
|
||||||
|
|
||||||
// clear the current server info
|
// clear the current server info
|
||||||
mem_zero(&m_CurrentServerInfo, sizeof(m_CurrentServerInfo));
|
mem_zero(&m_CurrentServerInfo, sizeof(m_CurrentServerInfo));
|
||||||
|
@ -1391,7 +1374,7 @@ void CClient::ProcessServerInfo(int RawType, NETADDR *pFrom, const void *pData,
|
||||||
#undef GET_INT
|
#undef GET_INT
|
||||||
}
|
}
|
||||||
|
|
||||||
static CServerCapabilities GetServerCapabilities(int Version, int Flags)
|
static CServerCapabilities GetServerCapabilities(int Version, int Flags, bool Sixup)
|
||||||
{
|
{
|
||||||
CServerCapabilities Result;
|
CServerCapabilities Result;
|
||||||
bool DDNet = false;
|
bool DDNet = false;
|
||||||
|
@ -1400,7 +1383,7 @@ static CServerCapabilities GetServerCapabilities(int Version, int Flags)
|
||||||
DDNet = Flags & SERVERCAPFLAG_DDNET;
|
DDNet = Flags & SERVERCAPFLAG_DDNET;
|
||||||
}
|
}
|
||||||
Result.m_ChatTimeoutCode = DDNet;
|
Result.m_ChatTimeoutCode = DDNet;
|
||||||
Result.m_AnyPlayerFlag = DDNet;
|
Result.m_AnyPlayerFlag = !Sixup;
|
||||||
Result.m_PingEx = false;
|
Result.m_PingEx = false;
|
||||||
Result.m_AllowDummy = true;
|
Result.m_AllowDummy = true;
|
||||||
Result.m_SyncWeaponInput = false;
|
Result.m_SyncWeaponInput = false;
|
||||||
|
@ -1501,7 +1484,7 @@ void CClient::ProcessServerPacket(CNetChunk *pPacket, int Conn, bool Dummy)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_ServerCapabilities = GetServerCapabilities(Version, Flags);
|
m_ServerCapabilities = GetServerCapabilities(Version, Flags, IsSixup());
|
||||||
m_CanReceiveServerCapabilities = false;
|
m_CanReceiveServerCapabilities = false;
|
||||||
m_ServerSentCapabilities = true;
|
m_ServerSentCapabilities = true;
|
||||||
}
|
}
|
||||||
|
@ -1509,7 +1492,7 @@ void CClient::ProcessServerPacket(CNetChunk *pPacket, int Conn, bool Dummy)
|
||||||
{
|
{
|
||||||
if(m_CanReceiveServerCapabilities)
|
if(m_CanReceiveServerCapabilities)
|
||||||
{
|
{
|
||||||
m_ServerCapabilities = GetServerCapabilities(0, 0);
|
m_ServerCapabilities = GetServerCapabilities(0, 0, IsSixup());
|
||||||
m_CanReceiveServerCapabilities = false;
|
m_CanReceiveServerCapabilities = false;
|
||||||
}
|
}
|
||||||
bool MapDetailsWerePresent = m_MapDetailsPresent;
|
bool MapDetailsWerePresent = m_MapDetailsPresent;
|
||||||
|
@ -1542,6 +1525,8 @@ void CClient::ProcessServerPacket(CNetChunk *pPacket, int Conn, bool Dummy)
|
||||||
DummyDisconnect(0);
|
DummyDisconnect(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ResetMapDownload(true);
|
||||||
|
|
||||||
SHA256_DIGEST *pMapSha256 = nullptr;
|
SHA256_DIGEST *pMapSha256 = nullptr;
|
||||||
const char *pMapUrl = nullptr;
|
const char *pMapUrl = nullptr;
|
||||||
if(MapDetailsWerePresent && str_comp(m_aMapDetailsName, pMap) == 0 && m_MapDetailsCrc == MapCrc)
|
if(MapDetailsWerePresent && str_comp(m_aMapDetailsName, pMap) == 0 && m_MapDetailsCrc == MapCrc)
|
||||||
|
@ -1558,12 +1543,6 @@ void CClient::ProcessServerPacket(CNetChunk *pPacket, int Conn, bool Dummy)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(m_MapdownloadFileTemp)
|
|
||||||
{
|
|
||||||
io_close(m_MapdownloadFileTemp);
|
|
||||||
Storage()->RemoveFile(m_aMapdownloadFilenameTemp, IStorage::TYPE_SAVE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// start map download
|
// start map download
|
||||||
FormatMapDownloadFilename(pMap, pMapSha256, MapCrc, false, m_aMapdownloadFilename, sizeof(m_aMapdownloadFilename));
|
FormatMapDownloadFilename(pMap, pMapSha256, MapCrc, false, m_aMapdownloadFilename, sizeof(m_aMapdownloadFilename));
|
||||||
FormatMapDownloadFilename(pMap, pMapSha256, MapCrc, true, m_aMapdownloadFilenameTemp, sizeof(m_aMapdownloadFilenameTemp));
|
FormatMapDownloadFilename(pMap, pMapSha256, MapCrc, true, m_aMapdownloadFilenameTemp, sizeof(m_aMapdownloadFilenameTemp));
|
||||||
|
@ -1572,16 +1551,11 @@ void CClient::ProcessServerPacket(CNetChunk *pPacket, int Conn, bool Dummy)
|
||||||
str_format(aBuf, sizeof(aBuf), "starting to download map to '%s'", m_aMapdownloadFilenameTemp);
|
str_format(aBuf, sizeof(aBuf), "starting to download map to '%s'", m_aMapdownloadFilenameTemp);
|
||||||
m_pConsole->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "client/network", aBuf);
|
m_pConsole->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "client/network", aBuf);
|
||||||
|
|
||||||
m_MapdownloadChunk = 0;
|
|
||||||
str_copy(m_aMapdownloadName, pMap);
|
str_copy(m_aMapdownloadName, pMap);
|
||||||
|
|
||||||
m_MapdownloadSha256Present = (bool)pMapSha256;
|
m_MapdownloadSha256Present = (bool)pMapSha256;
|
||||||
m_MapdownloadSha256 = pMapSha256 ? *pMapSha256 : SHA256_ZEROED;
|
m_MapdownloadSha256 = pMapSha256 ? *pMapSha256 : SHA256_ZEROED;
|
||||||
m_MapdownloadCrc = MapCrc;
|
m_MapdownloadCrc = MapCrc;
|
||||||
m_MapdownloadTotalsize = MapSize;
|
m_MapdownloadTotalsize = MapSize;
|
||||||
m_MapdownloadAmount = 0;
|
|
||||||
|
|
||||||
ResetMapDownload();
|
|
||||||
|
|
||||||
if(pMapSha256)
|
if(pMapSha256)
|
||||||
{
|
{
|
||||||
|
@ -1947,13 +1921,8 @@ void CClient::ProcessServerPacket(CNetChunk *pPacket, int Conn, bool Dummy)
|
||||||
|
|
||||||
if(Msg != NETMSG_SNAPEMPTY && pTmpBuffer3->Crc() != Crc)
|
if(Msg != NETMSG_SNAPEMPTY && pTmpBuffer3->Crc() != Crc)
|
||||||
{
|
{
|
||||||
if(g_Config.m_Debug)
|
log_error("client", "snapshot crc error #%d - tick=%d wantedcrc=%d gotcrc=%d compressed_size=%d delta_tick=%d",
|
||||||
{
|
|
||||||
char aBuf[256];
|
|
||||||
str_format(aBuf, sizeof(aBuf), "snapshot crc error #%d - tick=%d wantedcrc=%d gotcrc=%d compressed_size=%d delta_tick=%d",
|
|
||||||
m_SnapCrcErrors, GameTick, Crc, pTmpBuffer3->Crc(), m_aSnapshotIncomingDataSize[Conn], DeltaTick);
|
m_SnapCrcErrors, GameTick, Crc, pTmpBuffer3->Crc(), m_aSnapshotIncomingDataSize[Conn], DeltaTick);
|
||||||
m_pConsole->Print(IConsole::OUTPUT_LEVEL_DEBUG, "client", aBuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_SnapCrcErrors++;
|
m_SnapCrcErrors++;
|
||||||
if(m_SnapCrcErrors > 10)
|
if(m_SnapCrcErrors > 10)
|
||||||
|
@ -2224,24 +2193,44 @@ int CClient::UnpackAndValidateSnapshot(CSnapshot *pFrom, CSnapshot *pTo)
|
||||||
return Builder.Finish(pTo);
|
return Builder.Finish(pTo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CClient::ResetMapDownload()
|
void CClient::ResetMapDownload(bool ResetActive)
|
||||||
{
|
{
|
||||||
if(m_pMapdownloadTask)
|
if(m_pMapdownloadTask)
|
||||||
{
|
{
|
||||||
m_pMapdownloadTask->Abort();
|
m_pMapdownloadTask->Abort();
|
||||||
m_pMapdownloadTask = NULL;
|
m_pMapdownloadTask = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(m_MapdownloadFileTemp)
|
||||||
|
{
|
||||||
|
io_close(m_MapdownloadFileTemp);
|
||||||
m_MapdownloadFileTemp = 0;
|
m_MapdownloadFileTemp = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Storage()->FileExists(m_aMapdownloadFilenameTemp, IStorage::TYPE_SAVE))
|
||||||
|
{
|
||||||
|
Storage()->RemoveFile(m_aMapdownloadFilenameTemp, IStorage::TYPE_SAVE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ResetActive)
|
||||||
|
{
|
||||||
|
m_MapdownloadChunk = 0;
|
||||||
|
m_MapdownloadSha256Present = false;
|
||||||
|
m_MapdownloadSha256 = SHA256_ZEROED;
|
||||||
|
m_MapdownloadCrc = 0;
|
||||||
|
m_MapdownloadTotalsize = -1;
|
||||||
m_MapdownloadAmount = 0;
|
m_MapdownloadAmount = 0;
|
||||||
|
m_aMapdownloadFilename[0] = '\0';
|
||||||
|
m_aMapdownloadFilenameTemp[0] = '\0';
|
||||||
|
m_aMapdownloadName[0] = '\0';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CClient::FinishMapDownload()
|
void CClient::FinishMapDownload()
|
||||||
{
|
{
|
||||||
m_pConsole->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "client/network", "download complete, loading map");
|
m_pConsole->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "client/network", "download complete, loading map");
|
||||||
|
|
||||||
int Prev = m_MapdownloadTotalsize;
|
SHA256_DIGEST *pSha256 = m_MapdownloadSha256Present ? &m_MapdownloadSha256 : nullptr;
|
||||||
m_MapdownloadTotalsize = -1;
|
|
||||||
SHA256_DIGEST *pSha256 = m_MapdownloadSha256Present ? &m_MapdownloadSha256 : 0;
|
|
||||||
|
|
||||||
bool FileSuccess = true;
|
bool FileSuccess = true;
|
||||||
if(Storage()->FileExists(m_aMapdownloadFilename, IStorage::TYPE_SAVE))
|
if(Storage()->FileExists(m_aMapdownloadFilename, IStorage::TYPE_SAVE))
|
||||||
|
@ -2249,36 +2238,26 @@ void CClient::FinishMapDownload()
|
||||||
FileSuccess &= Storage()->RenameFile(m_aMapdownloadFilenameTemp, m_aMapdownloadFilename, IStorage::TYPE_SAVE);
|
FileSuccess &= Storage()->RenameFile(m_aMapdownloadFilenameTemp, m_aMapdownloadFilename, IStorage::TYPE_SAVE);
|
||||||
if(!FileSuccess)
|
if(!FileSuccess)
|
||||||
{
|
{
|
||||||
ResetMapDownload();
|
|
||||||
char aError[128 + IO_MAX_PATH_LENGTH];
|
char aError[128 + IO_MAX_PATH_LENGTH];
|
||||||
str_format(aError, sizeof(aError), Localize("Could not save downloaded map. Try manually deleting this file: %s"), m_aMapdownloadFilename);
|
str_format(aError, sizeof(aError), Localize("Could not save downloaded map. Try manually deleting this file: %s"), m_aMapdownloadFilename);
|
||||||
DisconnectWithReason(aError);
|
DisconnectWithReason(aError);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// load map
|
|
||||||
const char *pError = LoadMap(m_aMapdownloadName, m_aMapdownloadFilename, pSha256, m_MapdownloadCrc);
|
const char *pError = LoadMap(m_aMapdownloadName, m_aMapdownloadFilename, pSha256, m_MapdownloadCrc);
|
||||||
if(!pError)
|
if(!pError)
|
||||||
{
|
{
|
||||||
ResetMapDownload();
|
ResetMapDownload(true);
|
||||||
m_pConsole->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "client/network", "loading done");
|
m_pConsole->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "client/network", "loading done");
|
||||||
SendReady(CONN_MAIN);
|
SendReady(CONN_MAIN);
|
||||||
}
|
}
|
||||||
else if(m_pMapdownloadTask) // fallback
|
else if(m_pMapdownloadTask) // fallback
|
||||||
{
|
{
|
||||||
ResetMapDownload();
|
ResetMapDownload(false);
|
||||||
m_MapdownloadTotalsize = Prev;
|
|
||||||
SendMapRequest();
|
SendMapRequest();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(m_MapdownloadFileTemp)
|
|
||||||
{
|
|
||||||
io_close(m_MapdownloadFileTemp);
|
|
||||||
m_MapdownloadFileTemp = 0;
|
|
||||||
Storage()->RemoveFile(m_aMapdownloadFilenameTemp, IStorage::TYPE_SAVE);
|
|
||||||
}
|
|
||||||
ResetMapDownload();
|
|
||||||
DisconnectWithReason(pError);
|
DisconnectWithReason(pError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2804,7 +2783,7 @@ void CClient::Update()
|
||||||
else if(m_pMapdownloadTask->State() == EHttpState::ERROR || m_pMapdownloadTask->State() == EHttpState::ABORTED)
|
else if(m_pMapdownloadTask->State() == EHttpState::ERROR || m_pMapdownloadTask->State() == EHttpState::ABORTED)
|
||||||
{
|
{
|
||||||
dbg_msg("webdl", "http failed, falling back to gameserver");
|
dbg_msg("webdl", "http failed, falling back to gameserver");
|
||||||
ResetMapDownload();
|
ResetMapDownload(false);
|
||||||
SendMapRequest();
|
SendMapRequest();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3337,7 +3316,7 @@ bool CClient::InitNetworkClient(char *pError, size_t ErrorSize)
|
||||||
if(g_Config.m_Bindaddr[0])
|
if(g_Config.m_Bindaddr[0])
|
||||||
str_format(pError, ErrorSize, "Could not open the network client, try changing or unsetting the bindaddr '%s'.", g_Config.m_Bindaddr);
|
str_format(pError, ErrorSize, "Could not open the network client, try changing or unsetting the bindaddr '%s'.", g_Config.m_Bindaddr);
|
||||||
else
|
else
|
||||||
str_format(pError, ErrorSize, "Could not open the network client.");
|
str_copy(pError, "Could not open the network client.", ErrorSize);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3795,8 +3774,7 @@ const char *CClient::DemoPlayer_Play(const char *pFilename, int StorageType)
|
||||||
return m_DemoPlayer.ErrorMessage();
|
return m_DemoPlayer.ErrorMessage();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_Sixup = str_startswith(m_DemoPlayer.Info()->m_Header.m_aNetversion, "0.7");
|
m_Sixup = m_DemoPlayer.IsSixup();
|
||||||
m_DemoPlayer.SetSixup(m_Sixup);
|
|
||||||
|
|
||||||
// load map
|
// load map
|
||||||
const CMapInfo *pMapInfo = m_DemoPlayer.GetMapInfo();
|
const CMapInfo *pMapInfo = m_DemoPlayer.GetMapInfo();
|
||||||
|
@ -4379,8 +4357,20 @@ void CClient::RegisterCommands()
|
||||||
|
|
||||||
// used for server browser update
|
// used for server browser update
|
||||||
m_pConsole->Chain("br_filter_string", ConchainServerBrowserUpdate, this);
|
m_pConsole->Chain("br_filter_string", ConchainServerBrowserUpdate, this);
|
||||||
|
m_pConsole->Chain("br_exclude_string", ConchainServerBrowserUpdate, this);
|
||||||
|
m_pConsole->Chain("br_filter_full", ConchainServerBrowserUpdate, this);
|
||||||
|
m_pConsole->Chain("br_filter_empty", ConchainServerBrowserUpdate, this);
|
||||||
|
m_pConsole->Chain("br_filter_spectators", ConchainServerBrowserUpdate, this);
|
||||||
|
m_pConsole->Chain("br_filter_friends", ConchainServerBrowserUpdate, this);
|
||||||
|
m_pConsole->Chain("br_filter_country", ConchainServerBrowserUpdate, this);
|
||||||
|
m_pConsole->Chain("br_filter_country_index", ConchainServerBrowserUpdate, this);
|
||||||
|
m_pConsole->Chain("br_filter_pw", ConchainServerBrowserUpdate, this);
|
||||||
m_pConsole->Chain("br_filter_gametype", ConchainServerBrowserUpdate, this);
|
m_pConsole->Chain("br_filter_gametype", ConchainServerBrowserUpdate, this);
|
||||||
|
m_pConsole->Chain("br_filter_gametype_strict", ConchainServerBrowserUpdate, this);
|
||||||
|
m_pConsole->Chain("br_filter_connecting_players", ConchainServerBrowserUpdate, this);
|
||||||
m_pConsole->Chain("br_filter_serveraddress", ConchainServerBrowserUpdate, this);
|
m_pConsole->Chain("br_filter_serveraddress", ConchainServerBrowserUpdate, this);
|
||||||
|
m_pConsole->Chain("br_filter_unfinished_map", ConchainServerBrowserUpdate, this);
|
||||||
|
m_pConsole->Chain("br_filter_login", ConchainServerBrowserUpdate, this);
|
||||||
m_pConsole->Chain("add_favorite", ConchainServerBrowserUpdate, this);
|
m_pConsole->Chain("add_favorite", ConchainServerBrowserUpdate, this);
|
||||||
m_pConsole->Chain("remove_favorite", ConchainServerBrowserUpdate, this);
|
m_pConsole->Chain("remove_favorite", ConchainServerBrowserUpdate, this);
|
||||||
m_pConsole->Chain("end_favorite_group", ConchainServerBrowserUpdate, this);
|
m_pConsole->Chain("end_favorite_group", ConchainServerBrowserUpdate, this);
|
||||||
|
|
|
@ -208,6 +208,8 @@ class CClient : public IClient, public CDemoPlayer::IListener
|
||||||
bool m_ServerSentCapabilities = false;
|
bool m_ServerSentCapabilities = false;
|
||||||
CServerCapabilities m_ServerCapabilities;
|
CServerCapabilities m_ServerCapabilities;
|
||||||
|
|
||||||
|
bool ServerCapAnyPlayerFlag() const override { return m_ServerCapabilities.m_AnyPlayerFlag; }
|
||||||
|
|
||||||
CServerInfo m_CurrentServerInfo;
|
CServerInfo m_CurrentServerInfo;
|
||||||
int64_t m_CurrentServerInfoRequestTime = -1; // >= 0 should request, == -1 got info
|
int64_t m_CurrentServerInfoRequestTime = -1; // >= 0 should request, == -1 got info
|
||||||
|
|
||||||
|
@ -358,7 +360,7 @@ public:
|
||||||
|
|
||||||
int UnpackAndValidateSnapshot(CSnapshot *pFrom, CSnapshot *pTo);
|
int UnpackAndValidateSnapshot(CSnapshot *pFrom, CSnapshot *pTo);
|
||||||
|
|
||||||
void ResetMapDownload();
|
void ResetMapDownload(bool ResetActive);
|
||||||
void FinishMapDownload();
|
void FinishMapDownload();
|
||||||
|
|
||||||
void RequestDDNetInfo() override;
|
void RequestDDNetInfo() override;
|
||||||
|
|
|
@ -68,8 +68,6 @@ CInput::CInput()
|
||||||
|
|
||||||
m_MouseFocus = true;
|
m_MouseFocus = true;
|
||||||
|
|
||||||
m_pClipboardText = nullptr;
|
|
||||||
|
|
||||||
m_CompositionCursor = 0;
|
m_CompositionCursor = 0;
|
||||||
m_CandidateSelectedIndex = -1;
|
m_CandidateSelectedIndex = -1;
|
||||||
|
|
||||||
|
@ -90,7 +88,6 @@ void CInput::Init()
|
||||||
|
|
||||||
void CInput::Shutdown()
|
void CInput::Shutdown()
|
||||||
{
|
{
|
||||||
SDL_free(m_pClipboardText);
|
|
||||||
CloseJoysticks();
|
CloseJoysticks();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -303,11 +300,12 @@ const std::vector<IInput::CTouchFingerState> &CInput::TouchFingerStates() const
|
||||||
return m_vTouchFingerStates;
|
return m_vTouchFingerStates;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *CInput::GetClipboardText()
|
std::string CInput::GetClipboardText()
|
||||||
{
|
{
|
||||||
SDL_free(m_pClipboardText);
|
char *pClipboardText = SDL_GetClipboardText();
|
||||||
m_pClipboardText = SDL_GetClipboardText();
|
std::string ClipboardText = pClipboardText;
|
||||||
return m_pClipboardText;
|
SDL_free(pClipboardText);
|
||||||
|
return ClipboardText;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CInput::SetClipboardText(const char *pText)
|
void CInput::SetClipboardText(const char *pText)
|
||||||
|
@ -714,35 +712,9 @@ int CInput::Update()
|
||||||
|
|
||||||
// handle keys
|
// handle keys
|
||||||
case SDL_KEYDOWN:
|
case SDL_KEYDOWN:
|
||||||
#if defined(CONF_PLATFORM_ANDROID)
|
|
||||||
if(Event.key.keysym.scancode == KEY_AC_BACK && m_BackButtonReleased)
|
|
||||||
{
|
|
||||||
if(m_LastBackPress == -1 || (Now - m_LastBackPress) / (float)time_freq() > 1.0f)
|
|
||||||
{
|
|
||||||
m_NumBackPresses = 1;
|
|
||||||
m_LastBackPress = Now;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_NumBackPresses++;
|
|
||||||
if(m_NumBackPresses >= 3)
|
|
||||||
{
|
|
||||||
// Quit if the Android back-button was pressed 3 times within 1 second
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
m_BackButtonReleased = false;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
Scancode = TranslateScancode(Event.key);
|
Scancode = TranslateScancode(Event.key);
|
||||||
break;
|
break;
|
||||||
case SDL_KEYUP:
|
case SDL_KEYUP:
|
||||||
#if defined(CONF_PLATFORM_ANDROID)
|
|
||||||
if(Event.key.keysym.scancode == KEY_AC_BACK && !m_BackButtonReleased)
|
|
||||||
{
|
|
||||||
m_BackButtonReleased = true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
Action = IInput::FLAG_RELEASE;
|
Action = IInput::FLAG_RELEASE;
|
||||||
Scancode = TranslateScancode(Event.key);
|
Scancode = TranslateScancode(Event.key);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -74,14 +74,8 @@ private:
|
||||||
float GetJoystickDeadzone();
|
float GetJoystickDeadzone();
|
||||||
|
|
||||||
bool m_InputGrabbed;
|
bool m_InputGrabbed;
|
||||||
char *m_pClipboardText;
|
|
||||||
|
|
||||||
bool m_MouseFocus;
|
bool m_MouseFocus;
|
||||||
#if defined(CONF_PLATFORM_ANDROID)
|
|
||||||
int m_NumBackPresses = 0;
|
|
||||||
bool m_BackButtonReleased = true;
|
|
||||||
int64_t m_LastBackPress = -1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// IME support
|
// IME support
|
||||||
std::string m_CompositionString;
|
std::string m_CompositionString;
|
||||||
|
@ -151,7 +145,7 @@ public:
|
||||||
|
|
||||||
const std::vector<CTouchFingerState> &TouchFingerStates() const override;
|
const std::vector<CTouchFingerState> &TouchFingerStates() const override;
|
||||||
|
|
||||||
const char *GetClipboardText() override;
|
std::string GetClipboardText() override;
|
||||||
void SetClipboardText(const char *pText) override;
|
void SetClipboardText(const char *pText) override;
|
||||||
|
|
||||||
void StartTextInput() override;
|
void StartTextInput() override;
|
||||||
|
|
|
@ -27,9 +27,6 @@
|
||||||
#include <engine/http.h>
|
#include <engine/http.h>
|
||||||
#include <engine/storage.h>
|
#include <engine/storage.h>
|
||||||
|
|
||||||
static constexpr const char *COMMUNITY_COUNTRY_NONE = "none";
|
|
||||||
static constexpr const char *COMMUNITY_TYPE_NONE = "None";
|
|
||||||
|
|
||||||
class CSortWrap
|
class CSortWrap
|
||||||
{
|
{
|
||||||
typedef bool (CServerBrowser::*SortFunc)(int, int) const;
|
typedef bool (CServerBrowser::*SortFunc)(int, int) const;
|
||||||
|
@ -704,7 +701,22 @@ void ServerBrowserFormatAddresses(char *pBuffer, int BufferSize, NETADDR *pAddrs
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
net_addr_url_str(&pAddrs[i], pBuffer, BufferSize, true);
|
char aIpAddr[512];
|
||||||
|
if(!net_addr_str(&pAddrs[i], aIpAddr, sizeof(aIpAddr), true))
|
||||||
|
{
|
||||||
|
str_copy(pBuffer, aIpAddr, BufferSize);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(pAddrs[i].type & NETTYPE_TW7)
|
||||||
|
{
|
||||||
|
str_format(
|
||||||
|
pBuffer,
|
||||||
|
BufferSize,
|
||||||
|
"tw-0.7+udp://%s",
|
||||||
|
aIpAddr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
str_copy(pBuffer, aIpAddr, BufferSize);
|
||||||
int Length = str_length(pBuffer);
|
int Length = str_length(pBuffer);
|
||||||
pBuffer += Length;
|
pBuffer += Length;
|
||||||
BufferSize -= Length;
|
BufferSize -= Length;
|
||||||
|
|
|
@ -234,18 +234,6 @@ public:
|
||||||
class CServerBrowser : public IServerBrowser
|
class CServerBrowser : public IServerBrowser
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
class CServerEntry
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
int64_t m_RequestTime;
|
|
||||||
bool m_RequestIgnoreInfo;
|
|
||||||
int m_GotInfo;
|
|
||||||
CServerInfo m_Info;
|
|
||||||
|
|
||||||
CServerEntry *m_pPrevReq; // request list
|
|
||||||
CServerEntry *m_pNextReq;
|
|
||||||
};
|
|
||||||
|
|
||||||
CServerBrowser();
|
CServerBrowser();
|
||||||
virtual ~CServerBrowser();
|
virtual ~CServerBrowser();
|
||||||
|
|
||||||
|
@ -307,7 +295,7 @@ public:
|
||||||
void OnInit();
|
void OnInit();
|
||||||
|
|
||||||
void QueueRequest(CServerEntry *pEntry);
|
void QueueRequest(CServerEntry *pEntry);
|
||||||
CServerEntry *Find(const NETADDR &Addr);
|
CServerEntry *Find(const NETADDR &Addr) override;
|
||||||
int GetCurrentType() override { return m_ServerlistType; }
|
int GetCurrentType() override { return m_ServerlistType; }
|
||||||
bool IsRegistered(const NETADDR &Addr);
|
bool IsRegistered(const NETADDR &Addr);
|
||||||
|
|
||||||
|
|
|
@ -472,6 +472,7 @@ bool CServerBrowserHttp::Parse(json_value *pJson, std::vector<CServerInfo> *pvSe
|
||||||
CServerInfo SetInfo = ParsedInfo;
|
CServerInfo SetInfo = ParsedInfo;
|
||||||
SetInfo.m_Location = ParsedLocation;
|
SetInfo.m_Location = ParsedLocation;
|
||||||
SetInfo.m_NumAddresses = 0;
|
SetInfo.m_NumAddresses = 0;
|
||||||
|
bool GotVersion6 = false;
|
||||||
for(unsigned int a = 0; a < Addresses.u.array.length; a++)
|
for(unsigned int a = 0; a < Addresses.u.array.length; a++)
|
||||||
{
|
{
|
||||||
const json_value &Address = Addresses[a];
|
const json_value &Address = Addresses[a];
|
||||||
|
@ -479,6 +480,23 @@ bool CServerBrowserHttp::Parse(json_value *pJson, std::vector<CServerInfo> *pvSe
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
if(str_startswith(Addresses[a], "tw-0.6+udp://"))
|
||||||
|
{
|
||||||
|
GotVersion6 = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(unsigned int a = 0; a < Addresses.u.array.length; a++)
|
||||||
|
{
|
||||||
|
const json_value &Address = Addresses[a];
|
||||||
|
if(Address.type != json_string)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(GotVersion6 && str_startswith(Addresses[a], "tw-0.7+udp://"))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
NETADDR ParsedAddr;
|
NETADDR ParsedAddr;
|
||||||
if(ServerbrowserParseUrl(&ParsedAddr, Addresses[a]))
|
if(ServerbrowserParseUrl(&ParsedAddr, Addresses[a]))
|
||||||
{
|
{
|
||||||
|
|
|
@ -228,10 +228,8 @@ int CSound::Init()
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_MixingRate = g_Config.m_SndRate;
|
|
||||||
|
|
||||||
SDL_AudioSpec Format, FormatOut;
|
SDL_AudioSpec Format, FormatOut;
|
||||||
Format.freq = m_MixingRate;
|
Format.freq = g_Config.m_SndRate;
|
||||||
Format.format = AUDIO_S16;
|
Format.format = AUDIO_S16;
|
||||||
Format.channels = 2;
|
Format.channels = 2;
|
||||||
Format.samples = g_Config.m_SndBufferSize;
|
Format.samples = g_Config.m_SndBufferSize;
|
||||||
|
@ -239,7 +237,7 @@ int CSound::Init()
|
||||||
Format.userdata = this;
|
Format.userdata = this;
|
||||||
|
|
||||||
// Open the audio device and start playing sound!
|
// Open the audio device and start playing sound!
|
||||||
m_Device = SDL_OpenAudioDevice(nullptr, 0, &Format, &FormatOut, 0);
|
m_Device = SDL_OpenAudioDevice(nullptr, 0, &Format, &FormatOut, SDL_AUDIO_ALLOW_FREQUENCY_CHANGE);
|
||||||
if(m_Device == 0)
|
if(m_Device == 0)
|
||||||
{
|
{
|
||||||
dbg_msg("sound", "unable to open audio: %s", SDL_GetError());
|
dbg_msg("sound", "unable to open audio: %s", SDL_GetError());
|
||||||
|
@ -248,6 +246,7 @@ int CSound::Init()
|
||||||
else
|
else
|
||||||
dbg_msg("sound", "sound init successful using audio driver '%s'", SDL_GetCurrentAudioDriver());
|
dbg_msg("sound", "sound init successful using audio driver '%s'", SDL_GetCurrentAudioDriver());
|
||||||
|
|
||||||
|
m_MixingRate = FormatOut.freq;
|
||||||
m_MaxFrames = FormatOut.samples * 2;
|
m_MaxFrames = FormatOut.samples * 2;
|
||||||
#if defined(CONF_VIDEORECORDER)
|
#if defined(CONF_VIDEORECORDER)
|
||||||
m_MaxFrames = maximum<uint32_t>(m_MaxFrames, 1024 * 2); // make the buffer bigger just in case
|
m_MaxFrames = maximum<uint32_t>(m_MaxFrames, 1024 * 2); // make the buffer bigger just in case
|
||||||
|
|
|
@ -30,7 +30,7 @@ public:
|
||||||
ACCESS_LEVEL_HELPER,
|
ACCESS_LEVEL_HELPER,
|
||||||
ACCESS_LEVEL_USER,
|
ACCESS_LEVEL_USER,
|
||||||
|
|
||||||
TEMPCMD_NAME_LENGTH = 32,
|
TEMPCMD_NAME_LENGTH = 64,
|
||||||
TEMPCMD_HELP_LENGTH = 192,
|
TEMPCMD_HELP_LENGTH = 192,
|
||||||
TEMPCMD_PARAMS_LENGTH = 96,
|
TEMPCMD_PARAMS_LENGTH = 96,
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ public:
|
||||||
virtual int GetInteger(unsigned Index) const = 0;
|
virtual int GetInteger(unsigned Index) const = 0;
|
||||||
virtual float GetFloat(unsigned Index) const = 0;
|
virtual float GetFloat(unsigned Index) const = 0;
|
||||||
virtual const char *GetString(unsigned Index) const = 0;
|
virtual const char *GetString(unsigned Index) const = 0;
|
||||||
virtual ColorHSLA GetColor(unsigned Index, bool Light) const = 0;
|
virtual std::optional<ColorHSLA> GetColor(unsigned Index, bool Light) const = 0;
|
||||||
|
|
||||||
virtual void RemoveArgument(unsigned Index) = 0;
|
virtual void RemoveArgument(unsigned Index) = 0;
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
const int g_MaxKeys = 512;
|
const int g_MaxKeys = 512;
|
||||||
|
@ -138,7 +139,7 @@ public:
|
||||||
virtual const std::vector<CTouchFingerState> &TouchFingerStates() const = 0;
|
virtual const std::vector<CTouchFingerState> &TouchFingerStates() const = 0;
|
||||||
|
|
||||||
// clipboard
|
// clipboard
|
||||||
virtual const char *GetClipboardText() = 0;
|
virtual std::string GetClipboardText() = 0;
|
||||||
virtual void SetClipboardText(const char *pText) = 0;
|
virtual void SetClipboardText(const char *pText) = 0;
|
||||||
|
|
||||||
// text editing
|
// text editing
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
#include "kernel.h"
|
#include "kernel.h"
|
||||||
#include "message.h"
|
#include "message.h"
|
||||||
|
#include <engine/shared/jsonwriter.h>
|
||||||
#include <engine/shared/protocol.h>
|
#include <engine/shared/protocol.h>
|
||||||
#include <game/generated/protocol.h>
|
#include <game/generated/protocol.h>
|
||||||
#include <game/generated/protocol7.h>
|
#include <game/generated/protocol7.h>
|
||||||
|
@ -250,9 +251,10 @@ public:
|
||||||
virtual int GetAuthedState(int ClientId) const = 0;
|
virtual int GetAuthedState(int ClientId) const = 0;
|
||||||
virtual const char *GetAuthName(int ClientId) const = 0;
|
virtual const char *GetAuthName(int ClientId) const = 0;
|
||||||
virtual void Kick(int ClientId, const char *pReason) = 0;
|
virtual void Kick(int ClientId, const char *pReason) = 0;
|
||||||
virtual void Ban(int ClientId, int Seconds, const char *pReason, bool DisplayTime) = 0;
|
virtual void Ban(int ClientId, int Seconds, const char *pReason, bool VerbatimReason) = 0;
|
||||||
virtual void RedirectClient(int ClientId, int Port, bool Verbose = false) = 0;
|
virtual void RedirectClient(int ClientId, int Port, bool Verbose = false) = 0;
|
||||||
virtual void ChangeMap(const char *pMap) = 0;
|
virtual void ChangeMap(const char *pMap) = 0;
|
||||||
|
virtual void ReloadMap() = 0;
|
||||||
|
|
||||||
virtual void DemoRecorder_HandleAutoStart() = 0;
|
virtual void DemoRecorder_HandleAutoStart() = 0;
|
||||||
|
|
||||||
|
@ -345,6 +347,9 @@ public:
|
||||||
virtual const char *Version() const = 0;
|
virtual const char *Version() const = 0;
|
||||||
virtual const char *NetVersion() const = 0;
|
virtual const char *NetVersion() const = 0;
|
||||||
|
|
||||||
|
virtual CNetObjHandler *GetNetObjHandler() = 0;
|
||||||
|
virtual protocol7::CNetObjHandler *GetNetObjHandler7() = 0;
|
||||||
|
|
||||||
// DDRace
|
// DDRace
|
||||||
|
|
||||||
virtual void OnPreTickTeehistorian() = 0;
|
virtual void OnPreTickTeehistorian() = 0;
|
||||||
|
@ -365,10 +370,10 @@ public:
|
||||||
/**
|
/**
|
||||||
* Used to report custom player info to master servers.
|
* Used to report custom player info to master servers.
|
||||||
*
|
*
|
||||||
* @param aBuf Should be the json key values to add, starting with a ',' beforehand, like: ',"skin": "default", "team": 1'
|
* @param pJsonWriter A pointer to a CJsonStringWriter which the custom data will be added to.
|
||||||
* @param i The client id.
|
* @param i The client id.
|
||||||
*/
|
*/
|
||||||
virtual void OnUpdatePlayerServerInfo(char *aBuf, int BufSize, int Id) = 0;
|
virtual void OnUpdatePlayerServerInfo(CJsonStringWriter *pJSonWriter, int Id) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern IGameServer *CreateGameServer();
|
extern IGameServer *CreateGameServer();
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include <engine/shared/host_lookup.h>
|
#include <engine/shared/host_lookup.h>
|
||||||
#include <engine/shared/http.h>
|
#include <engine/shared/http.h>
|
||||||
#include <engine/shared/json.h>
|
#include <engine/shared/json.h>
|
||||||
|
#include <engine/shared/jsonwriter.h>
|
||||||
#include <engine/shared/masterserver.h>
|
#include <engine/shared/masterserver.h>
|
||||||
#include <engine/shared/netban.h>
|
#include <engine/shared/netban.h>
|
||||||
#include <engine/shared/network.h>
|
#include <engine/shared/network.h>
|
||||||
|
@ -60,7 +61,7 @@ void CServerBan::InitServerBan(IConsole *pConsole, IStorage *pStorage, CServer *
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
int CServerBan::BanExt(T *pBanPool, const typename T::CDataType *pData, int Seconds, const char *pReason, bool DisplayTime)
|
int CServerBan::BanExt(T *pBanPool, const typename T::CDataType *pData, int Seconds, const char *pReason, bool VerbatimReason)
|
||||||
{
|
{
|
||||||
// validate address
|
// validate address
|
||||||
if(Server()->m_RconClientId >= 0 && Server()->m_RconClientId < MAX_CLIENTS &&
|
if(Server()->m_RconClientId >= 0 && Server()->m_RconClientId < MAX_CLIENTS &&
|
||||||
|
@ -99,7 +100,7 @@ int CServerBan::BanExt(T *pBanPool, const typename T::CDataType *pData, int Seco
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int Result = Ban(pBanPool, pData, Seconds, pReason, DisplayTime);
|
int Result = Ban(pBanPool, pData, Seconds, pReason, VerbatimReason);
|
||||||
if(Result != 0)
|
if(Result != 0)
|
||||||
return Result;
|
return Result;
|
||||||
|
|
||||||
|
@ -122,9 +123,9 @@ int CServerBan::BanExt(T *pBanPool, const typename T::CDataType *pData, int Seco
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CServerBan::BanAddr(const NETADDR *pAddr, int Seconds, const char *pReason, bool DisplayTime)
|
int CServerBan::BanAddr(const NETADDR *pAddr, int Seconds, const char *pReason, bool VerbatimReason)
|
||||||
{
|
{
|
||||||
return BanExt(&m_BanAddrPool, pAddr, Seconds, pReason, DisplayTime);
|
return BanExt(&m_BanAddrPool, pAddr, Seconds, pReason, VerbatimReason);
|
||||||
}
|
}
|
||||||
|
|
||||||
int CServerBan::BanRange(const CNetRange *pRange, int Seconds, const char *pReason)
|
int CServerBan::BanRange(const CNetRange *pRange, int Seconds, const char *pReason)
|
||||||
|
@ -150,7 +151,7 @@ void CServerBan::ConBanExt(IConsole::IResult *pResult, void *pUser)
|
||||||
if(ClientId < 0 || ClientId >= MAX_CLIENTS || pThis->Server()->m_aClients[ClientId].m_State == CServer::CClient::STATE_EMPTY)
|
if(ClientId < 0 || ClientId >= MAX_CLIENTS || pThis->Server()->m_aClients[ClientId].m_State == CServer::CClient::STATE_EMPTY)
|
||||||
pThis->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "net_ban", "ban error (invalid client id)");
|
pThis->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "net_ban", "ban error (invalid client id)");
|
||||||
else
|
else
|
||||||
pThis->BanAddr(pThis->Server()->m_NetServer.ClientAddr(ClientId), Minutes * 60, pReason, true);
|
pThis->BanAddr(pThis->Server()->m_NetServer.ClientAddr(ClientId), Minutes * 60, pReason, false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ConBan(pResult, pUser);
|
ConBan(pResult, pUser);
|
||||||
|
@ -473,11 +474,11 @@ void CServer::Kick(int ClientId, const char *pReason)
|
||||||
m_NetServer.Drop(ClientId, pReason);
|
m_NetServer.Drop(ClientId, pReason);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CServer::Ban(int ClientId, int Seconds, const char *pReason, bool DisplayTime)
|
void CServer::Ban(int ClientId, int Seconds, const char *pReason, bool VerbatimReason)
|
||||||
{
|
{
|
||||||
NETADDR Addr;
|
NETADDR Addr;
|
||||||
GetClientAddr(ClientId, &Addr);
|
GetClientAddr(ClientId, &Addr);
|
||||||
m_NetServer.NetBan()->BanAddr(&Addr, Seconds, pReason, DisplayTime);
|
m_NetServer.NetBan()->BanAddr(&Addr, Seconds, pReason, VerbatimReason);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CServer::RedirectClient(int ClientId, int Port, bool Verbose)
|
void CServer::RedirectClient(int ClientId, int Port, bool Verbose)
|
||||||
|
@ -1459,7 +1460,7 @@ void CServer::ProcessClientPacket(CNetChunk *pPacket)
|
||||||
|
|
||||||
if(m_aClients[ClientId].m_Traffic > Limit)
|
if(m_aClients[ClientId].m_Traffic > Limit)
|
||||||
{
|
{
|
||||||
m_NetServer.NetBan()->BanAddr(&pPacket->m_Address, 600, "Stressing network", true);
|
m_NetServer.NetBan()->BanAddr(&pPacket->m_Address, 600, "Stressing network", false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(Diff > 100)
|
if(Diff > 100)
|
||||||
|
@ -1825,7 +1826,7 @@ void CServer::ProcessClientPacket(CNetChunk *pPacket)
|
||||||
if(!Config()->m_SvRconBantime)
|
if(!Config()->m_SvRconBantime)
|
||||||
m_NetServer.Drop(ClientId, "Too many remote console authentication tries");
|
m_NetServer.Drop(ClientId, "Too many remote console authentication tries");
|
||||||
else
|
else
|
||||||
m_ServerBan.BanAddr(m_NetServer.ClientAddr(ClientId), Config()->m_SvRconBantime * 60, "Too many remote console authentication tries", true);
|
m_ServerBan.BanAddr(m_NetServer.ClientAddr(ClientId), Config()->m_SvRconBantime * 60, "Too many remote console authentication tries", false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2315,77 +2316,81 @@ void CServer::UpdateRegisterServerInfo()
|
||||||
|
|
||||||
int MaxPlayers = maximum(m_NetServer.MaxClients() - maximum(g_Config.m_SvSpectatorSlots, g_Config.m_SvReservedSlots), PlayerCount);
|
int MaxPlayers = maximum(m_NetServer.MaxClients() - maximum(g_Config.m_SvSpectatorSlots, g_Config.m_SvReservedSlots), PlayerCount);
|
||||||
int MaxClients = maximum(m_NetServer.MaxClients() - g_Config.m_SvReservedSlots, ClientCount);
|
int MaxClients = maximum(m_NetServer.MaxClients() - g_Config.m_SvReservedSlots, ClientCount);
|
||||||
char aName[256];
|
|
||||||
char aGameType[32];
|
|
||||||
char aMapName[64];
|
|
||||||
char aVersion[64];
|
|
||||||
char aMapSha256[SHA256_MAXSTRSIZE];
|
char aMapSha256[SHA256_MAXSTRSIZE];
|
||||||
|
|
||||||
sha256_str(m_aCurrentMapSha256[MAP_TYPE_SIX], aMapSha256, sizeof(aMapSha256));
|
sha256_str(m_aCurrentMapSha256[MAP_TYPE_SIX], aMapSha256, sizeof(aMapSha256));
|
||||||
|
|
||||||
char aInfo[16384];
|
CJsonStringWriter JsonWriter;
|
||||||
str_format(aInfo, sizeof(aInfo),
|
|
||||||
"{"
|
JsonWriter.BeginObject();
|
||||||
"\"max_clients\":%d,"
|
JsonWriter.WriteAttribute("max_clients");
|
||||||
"\"max_players\":%d,"
|
JsonWriter.WriteIntValue(MaxClients);
|
||||||
"\"passworded\":%s,"
|
|
||||||
"\"game_type\":\"%s\","
|
JsonWriter.WriteAttribute("max_players");
|
||||||
"\"name\":\"%s\","
|
JsonWriter.WriteIntValue(MaxPlayers);
|
||||||
"\"map\":{"
|
|
||||||
"\"name\":\"%s\","
|
JsonWriter.WriteAttribute("passworded");
|
||||||
"\"sha256\":\"%s\","
|
JsonWriter.WriteBoolValue(g_Config.m_Password[0]);
|
||||||
"\"size\":%d"
|
|
||||||
"},"
|
JsonWriter.WriteAttribute("game_type");
|
||||||
"\"version\":\"%s\","
|
JsonWriter.WriteStrValue(GameServer()->GameType());
|
||||||
"\"client_score_kind\":\"time\","
|
|
||||||
"\"requires_login\":false,"
|
JsonWriter.WriteAttribute("name");
|
||||||
"\"clients\":[",
|
JsonWriter.WriteStrValue(g_Config.m_SvName);
|
||||||
MaxClients,
|
|
||||||
MaxPlayers,
|
JsonWriter.WriteAttribute("map");
|
||||||
JsonBool(g_Config.m_Password[0]),
|
JsonWriter.BeginObject();
|
||||||
EscapeJson(aGameType, sizeof(aGameType), GameServer()->GameType()),
|
JsonWriter.WriteAttribute("name");
|
||||||
EscapeJson(aName, sizeof(aName), g_Config.m_SvName),
|
JsonWriter.WriteStrValue(GetMapName());
|
||||||
EscapeJson(aMapName, sizeof(aMapName), m_aCurrentMap),
|
JsonWriter.WriteAttribute("sha256");
|
||||||
aMapSha256,
|
JsonWriter.WriteStrValue(aMapSha256);
|
||||||
m_aCurrentMapSize[MAP_TYPE_SIX],
|
JsonWriter.WriteAttribute("size");
|
||||||
EscapeJson(aVersion, sizeof(aVersion), GameServer()->Version()));
|
JsonWriter.WriteIntValue(m_aCurrentMapSize[MAP_TYPE_SIX]);
|
||||||
|
JsonWriter.EndObject();
|
||||||
|
|
||||||
|
JsonWriter.WriteAttribute("version");
|
||||||
|
JsonWriter.WriteStrValue(GameServer()->Version());
|
||||||
|
|
||||||
|
JsonWriter.WriteAttribute("client_score_kind");
|
||||||
|
JsonWriter.WriteStrValue("time"); // "points" or "time"
|
||||||
|
|
||||||
|
JsonWriter.WriteAttribute("requires_login");
|
||||||
|
JsonWriter.WriteBoolValue(false);
|
||||||
|
|
||||||
|
JsonWriter.WriteAttribute("clients");
|
||||||
|
JsonWriter.BeginArray();
|
||||||
|
|
||||||
bool FirstPlayer = true;
|
|
||||||
for(int i = 0; i < MAX_CLIENTS; i++)
|
for(int i = 0; i < MAX_CLIENTS; i++)
|
||||||
{
|
{
|
||||||
if(m_aClients[i].IncludedInServerInfo())
|
if(m_aClients[i].IncludedInServerInfo())
|
||||||
{
|
{
|
||||||
char aCName[32];
|
JsonWriter.BeginObject();
|
||||||
char aCClan[32];
|
|
||||||
|
|
||||||
char aExtraPlayerInfo[512];
|
JsonWriter.WriteAttribute("name");
|
||||||
GameServer()->OnUpdatePlayerServerInfo(aExtraPlayerInfo, sizeof(aExtraPlayerInfo), i);
|
JsonWriter.WriteStrValue(ClientName(i));
|
||||||
|
|
||||||
char aClientInfo[1024];
|
JsonWriter.WriteAttribute("clan");
|
||||||
str_format(aClientInfo, sizeof(aClientInfo),
|
JsonWriter.WriteStrValue(ClientClan(i));
|
||||||
"%s{"
|
|
||||||
"\"name\":\"%s\","
|
JsonWriter.WriteAttribute("country");
|
||||||
"\"clan\":\"%s\","
|
JsonWriter.WriteIntValue(m_aClients[i].m_Country);
|
||||||
"\"country\":%d,"
|
|
||||||
"\"score\":%d,"
|
JsonWriter.WriteAttribute("score");
|
||||||
"\"is_player\":%s"
|
JsonWriter.WriteIntValue(m_aClients[i].m_Score.value_or(-9999));
|
||||||
"%s"
|
|
||||||
"}",
|
JsonWriter.WriteAttribute("is_player");
|
||||||
!FirstPlayer ? "," : "",
|
JsonWriter.WriteBoolValue(GameServer()->IsClientPlayer(i));
|
||||||
EscapeJson(aCName, sizeof(aCName), ClientName(i)),
|
|
||||||
EscapeJson(aCClan, sizeof(aCClan), ClientClan(i)),
|
GameServer()->OnUpdatePlayerServerInfo(&JsonWriter, i);
|
||||||
m_aClients[i].m_Country,
|
|
||||||
m_aClients[i].m_Score.value_or(-9999),
|
JsonWriter.EndObject();
|
||||||
JsonBool(GameServer()->IsClientPlayer(i)),
|
|
||||||
aExtraPlayerInfo);
|
|
||||||
str_append(aInfo, aClientInfo);
|
|
||||||
FirstPlayer = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
str_append(aInfo, "]}");
|
JsonWriter.EndArray();
|
||||||
|
JsonWriter.EndObject();
|
||||||
|
|
||||||
m_pRegister->OnNewInfo(aInfo);
|
m_pRegister->OnNewInfo(JsonWriter.GetOutputString().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CServer::UpdateServerInfo(bool Resend)
|
void CServer::UpdateServerInfo(bool Resend)
|
||||||
|
@ -2546,6 +2551,11 @@ void CServer::ChangeMap(const char *pMap)
|
||||||
m_MapReload = str_comp(Config()->m_SvMap, m_aCurrentMap) != 0;
|
m_MapReload = str_comp(Config()->m_SvMap, m_aCurrentMap) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CServer::ReloadMap()
|
||||||
|
{
|
||||||
|
m_MapReload = true;
|
||||||
|
}
|
||||||
|
|
||||||
int CServer::LoadMap(const char *pMapName)
|
int CServer::LoadMap(const char *pMapName)
|
||||||
{
|
{
|
||||||
m_MapReload = false;
|
m_MapReload = false;
|
||||||
|
@ -2970,7 +2980,7 @@ int CServer::Run()
|
||||||
|
|
||||||
if(Config()->m_SvDnsblBan)
|
if(Config()->m_SvDnsblBan)
|
||||||
{
|
{
|
||||||
m_NetServer.NetBan()->BanAddr(m_NetServer.ClientAddr(ClientId), 60, Config()->m_SvDnsblBanReason, false);
|
m_NetServer.NetBan()->BanAddr(m_NetServer.ClientAddr(ClientId), 60, Config()->m_SvDnsblBanReason, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,14 +46,14 @@ class CServerBan : public CNetBan
|
||||||
class CServer *m_pServer;
|
class CServer *m_pServer;
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
int BanExt(T *pBanPool, const typename T::CDataType *pData, int Seconds, const char *pReason, bool DisplayTime);
|
int BanExt(T *pBanPool, const typename T::CDataType *pData, int Seconds, const char *pReason, bool VerbatimReason);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
class CServer *Server() const { return m_pServer; }
|
class CServer *Server() const { return m_pServer; }
|
||||||
|
|
||||||
void InitServerBan(class IConsole *pConsole, class IStorage *pStorage, class CServer *pServer);
|
void InitServerBan(class IConsole *pConsole, class IStorage *pStorage, class CServer *pServer);
|
||||||
|
|
||||||
int BanAddr(const NETADDR *pAddr, int Seconds, const char *pReason, bool DisplayTime) override;
|
int BanAddr(const NETADDR *pAddr, int Seconds, const char *pReason, bool VerbatimReason) override;
|
||||||
int BanRange(const CNetRange *pRange, int Seconds, const char *pReason) override;
|
int BanRange(const CNetRange *pRange, int Seconds, const char *pReason) override;
|
||||||
|
|
||||||
static void ConBanExt(class IConsole::IResult *pResult, void *pUser);
|
static void ConBanExt(class IConsole::IResult *pResult, void *pUser);
|
||||||
|
@ -279,7 +279,7 @@ public:
|
||||||
void SetClientFlags(int ClientId, int Flags) override;
|
void SetClientFlags(int ClientId, int Flags) override;
|
||||||
|
|
||||||
void Kick(int ClientId, const char *pReason) override;
|
void Kick(int ClientId, const char *pReason) override;
|
||||||
void Ban(int ClientId, int Seconds, const char *pReason, bool DisplayTime) override;
|
void Ban(int ClientId, int Seconds, const char *pReason, bool VerbatimReason) override;
|
||||||
void RedirectClient(int ClientId, int Port, bool Verbose = false) override;
|
void RedirectClient(int ClientId, int Port, bool Verbose = false) override;
|
||||||
|
|
||||||
void DemoRecorder_HandleAutoStart() override;
|
void DemoRecorder_HandleAutoStart() override;
|
||||||
|
@ -379,6 +379,7 @@ public:
|
||||||
|
|
||||||
void ChangeMap(const char *pMap) override;
|
void ChangeMap(const char *pMap) override;
|
||||||
const char *GetMapName() const override;
|
const char *GetMapName() const override;
|
||||||
|
void ReloadMap() override;
|
||||||
int LoadMap(const char *pMapName);
|
int LoadMap(const char *pMapName);
|
||||||
|
|
||||||
void SaveDemo(int ClientId, float Time) override;
|
void SaveDemo(int ClientId, float Time) override;
|
||||||
|
|
|
@ -295,8 +295,23 @@ public:
|
||||||
NUM_TYPES,
|
NUM_TYPES,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class CServerEntry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int64_t m_RequestTime;
|
||||||
|
bool m_RequestIgnoreInfo;
|
||||||
|
int m_GotInfo;
|
||||||
|
CServerInfo m_Info;
|
||||||
|
|
||||||
|
CServerEntry *m_pPrevReq; // request list
|
||||||
|
CServerEntry *m_pNextReq;
|
||||||
|
};
|
||||||
|
|
||||||
static constexpr const char *COMMUNITY_DDNET = "ddnet";
|
static constexpr const char *COMMUNITY_DDNET = "ddnet";
|
||||||
static constexpr const char *COMMUNITY_NONE = "none";
|
static constexpr const char *COMMUNITY_NONE = "none";
|
||||||
|
|
||||||
|
static constexpr const char *COMMUNITY_COUNTRY_NONE = "none";
|
||||||
|
static constexpr const char *COMMUNITY_TYPE_NONE = "None";
|
||||||
/**
|
/**
|
||||||
* Special community value for country/type filters that
|
* Special community value for country/type filters that
|
||||||
* affect all communities.
|
* affect all communities.
|
||||||
|
@ -341,6 +356,7 @@ public:
|
||||||
virtual const IFilterList &TypesFilter() const = 0;
|
virtual const IFilterList &TypesFilter() const = 0;
|
||||||
virtual void CleanFilters() = 0;
|
virtual void CleanFilters() = 0;
|
||||||
|
|
||||||
|
virtual CServerEntry *Find(const NETADDR &Addr) = 0;
|
||||||
virtual int GetCurrentType() = 0;
|
virtual int GetCurrentType() = 0;
|
||||||
virtual const char *GetTutorialServer() = 0;
|
virtual const char *GetTutorialServer() = 0;
|
||||||
};
|
};
|
||||||
|
|
|
@ -111,14 +111,16 @@ void SIntConfigVariable::ResetToOld()
|
||||||
void SColorConfigVariable::CommandCallback(IConsole::IResult *pResult, void *pUserData)
|
void SColorConfigVariable::CommandCallback(IConsole::IResult *pResult, void *pUserData)
|
||||||
{
|
{
|
||||||
SColorConfigVariable *pData = static_cast<SColorConfigVariable *>(pUserData);
|
SColorConfigVariable *pData = static_cast<SColorConfigVariable *>(pUserData);
|
||||||
|
char aBuf[IConsole::CMDLINE_LENGTH + 64];
|
||||||
if(pResult->NumArguments())
|
if(pResult->NumArguments())
|
||||||
{
|
{
|
||||||
if(pData->CheckReadOnly())
|
if(pData->CheckReadOnly())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const ColorHSLA Color = pResult->GetColor(0, pData->m_Light);
|
const auto Color = pResult->GetColor(0, pData->m_Light);
|
||||||
const unsigned Value = Color.Pack(pData->m_Light ? 0.5f : 0.0f, pData->m_Alpha);
|
if(Color)
|
||||||
|
{
|
||||||
|
const unsigned Value = Color->Pack(pData->m_Light ? 0.5f : 0.0f, pData->m_Alpha);
|
||||||
|
|
||||||
*pData->m_pVariable = Value;
|
*pData->m_pVariable = Value;
|
||||||
if(pResult->m_ClientId != IConsole::CLIENT_ID_GAME)
|
if(pResult->m_ClientId != IConsole::CLIENT_ID_GAME)
|
||||||
|
@ -126,7 +128,12 @@ void SColorConfigVariable::CommandCallback(IConsole::IResult *pResult, void *pUs
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char aBuf[256];
|
str_format(aBuf, sizeof(aBuf), "%s is not a valid color.", pResult->GetString(0));
|
||||||
|
pData->m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "config", aBuf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
str_format(aBuf, sizeof(aBuf), "Value: %u", *pData->m_pVariable);
|
str_format(aBuf, sizeof(aBuf), "Value: %u", *pData->m_pVariable);
|
||||||
pData->m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "config", aBuf);
|
pData->m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "config", aBuf);
|
||||||
|
|
||||||
|
@ -493,8 +500,8 @@ void CConfigManager::Con_Toggle(IConsole::IResult *pResult, void *pUserData)
|
||||||
{
|
{
|
||||||
SColorConfigVariable *pColorVariable = static_cast<SColorConfigVariable *>(pVariable);
|
SColorConfigVariable *pColorVariable = static_cast<SColorConfigVariable *>(pVariable);
|
||||||
const float Darkest = pColorVariable->m_Light ? 0.5f : 0.0f;
|
const float Darkest = pColorVariable->m_Light ? 0.5f : 0.0f;
|
||||||
const ColorHSLA Value = *pColorVariable->m_pVariable == pResult->GetColor(1, pColorVariable->m_Light).Pack(Darkest, pColorVariable->m_Alpha) ? pResult->GetColor(2, pColorVariable->m_Light) : pResult->GetColor(1, pColorVariable->m_Light);
|
const std::optional<ColorHSLA> Value = *pColorVariable->m_pVariable == pResult->GetColor(1, pColorVariable->m_Light).value_or(ColorHSLA(0, 0, 0)).Pack(Darkest, pColorVariable->m_Alpha) ? pResult->GetColor(2, pColorVariable->m_Light) : pResult->GetColor(1, pColorVariable->m_Light);
|
||||||
pColorVariable->SetValue(Value.Pack(Darkest, pColorVariable->m_Alpha));
|
pColorVariable->SetValue(Value.value_or(ColorHSLA(0, 0, 0)).Pack(Darkest, pColorVariable->m_Alpha));
|
||||||
}
|
}
|
||||||
else if(pVariable->m_Type == SConfigVariable::VAR_STRING)
|
else if(pVariable->m_Type == SConfigVariable::VAR_STRING)
|
||||||
{
|
{
|
||||||
|
|
|
@ -105,6 +105,7 @@ MACRO_CONFIG_INT(EdZoomTarget, ed_zoom_target, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG
|
||||||
MACRO_CONFIG_INT(EdShowkeys, ed_showkeys, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Show pressed keys")
|
MACRO_CONFIG_INT(EdShowkeys, ed_showkeys, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Show pressed keys")
|
||||||
MACRO_CONFIG_INT(EdAlignQuads, ed_align_quads, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Enable/disable quad alignment. When enabled, red lines appear to show how quad/points are aligned and snapped to other quads/points when moving them")
|
MACRO_CONFIG_INT(EdAlignQuads, ed_align_quads, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Enable/disable quad alignment. When enabled, red lines appear to show how quad/points are aligned and snapped to other quads/points when moving them")
|
||||||
MACRO_CONFIG_INT(EdShowQuadsRect, ed_show_quads_rect, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Show the bounds of the selected quad. In case of multiple quads, it shows the bounds of the englobing rect. Can be helpful when aligning a group of quads")
|
MACRO_CONFIG_INT(EdShowQuadsRect, ed_show_quads_rect, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Show the bounds of the selected quad. In case of multiple quads, it shows the bounds of the englobing rect. Can be helpful when aligning a group of quads")
|
||||||
|
MACRO_CONFIG_INT(EdAutoMapReload, ed_auto_map_reload, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Run 'hot_reload' on the local server while rcon authed on map save")
|
||||||
|
|
||||||
MACRO_CONFIG_INT(ClShowWelcome, cl_show_welcome, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Show welcome message indicating the first launch of the client")
|
MACRO_CONFIG_INT(ClShowWelcome, cl_show_welcome, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Show welcome message indicating the first launch of the client")
|
||||||
MACRO_CONFIG_INT(ClMotdTime, cl_motd_time, 10, 0, 100, CFGFLAG_CLIENT | CFGFLAG_SAVE, "How long to show the server message of the day")
|
MACRO_CONFIG_INT(ClMotdTime, cl_motd_time, 10, 0, 100, CFGFLAG_CLIENT | CFGFLAG_SAVE, "How long to show the server message of the day")
|
||||||
|
@ -139,7 +140,7 @@ MACRO_CONFIG_INT(ClFatSkins, cl_fat_skins, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAV
|
||||||
MACRO_CONFIG_COL(ClPlayer7ColorBody, player7_color_body, 0x1B6F74, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Player body color")
|
MACRO_CONFIG_COL(ClPlayer7ColorBody, player7_color_body, 0x1B6F74, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Player body color")
|
||||||
MACRO_CONFIG_COL(ClPlayer7ColorFeet, player7_color_feet, 0x1C873E, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Player feet color")
|
MACRO_CONFIG_COL(ClPlayer7ColorFeet, player7_color_feet, 0x1C873E, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Player feet color")
|
||||||
|
|
||||||
MACRO_CONFIG_INT(ClPlayer7ColorMarking, player7_color_marking, 0xFF0000FF, 0, 0, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_INSENSITIVE, "Player marking color")
|
MACRO_CONFIG_COL(ClPlayer7ColorMarking, player7_color_marking, 0xFF0000FF, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_COLALPHA | CFGFLAG_INSENSITIVE, "Player marking color")
|
||||||
MACRO_CONFIG_COL(ClPlayer7ColorDecoration, player7_color_decoration, 0x1B6F74, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Player decoration color")
|
MACRO_CONFIG_COL(ClPlayer7ColorDecoration, player7_color_decoration, 0x1B6F74, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Player decoration color")
|
||||||
MACRO_CONFIG_COL(ClPlayer7ColorHands, player7_color_hands, 0x1B759E, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Player hands color")
|
MACRO_CONFIG_COL(ClPlayer7ColorHands, player7_color_hands, 0x1B759E, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Player hands color")
|
||||||
MACRO_CONFIG_COL(ClPlayer7ColorEyes, player7_color_eyes, 0x0000FF, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Player eyes color")
|
MACRO_CONFIG_COL(ClPlayer7ColorEyes, player7_color_eyes, 0x0000FF, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Player eyes color")
|
||||||
|
@ -160,7 +161,7 @@ MACRO_CONFIG_STR(ClPlayer7SkinEyes, player7_skin_eyes, protocol7::MAX_SKIN_ARRAY
|
||||||
MACRO_CONFIG_COL(ClDummy7ColorBody, dummy7_color_body, 0x1B6F74, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Dummy body color")
|
MACRO_CONFIG_COL(ClDummy7ColorBody, dummy7_color_body, 0x1B6F74, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Dummy body color")
|
||||||
MACRO_CONFIG_COL(ClDummy7ColorFeet, dummy7_color_feet, 0x1C873E, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Dummy feet color")
|
MACRO_CONFIG_COL(ClDummy7ColorFeet, dummy7_color_feet, 0x1C873E, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Dummy feet color")
|
||||||
|
|
||||||
MACRO_CONFIG_COL(ClDummy7ColorMarking, dummy7_color_marking, 0, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Dummy marking color")
|
MACRO_CONFIG_COL(ClDummy7ColorMarking, dummy7_color_marking, 0xFF0000FF, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_COLALPHA | CFGFLAG_INSENSITIVE, "Dummy marking color")
|
||||||
MACRO_CONFIG_COL(ClDummy7ColorDecoration, dummy7_color_decoration, 0x1B6F74, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Dummy decoration color")
|
MACRO_CONFIG_COL(ClDummy7ColorDecoration, dummy7_color_decoration, 0x1B6F74, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Dummy decoration color")
|
||||||
MACRO_CONFIG_COL(ClDummy7ColorHands, dummy7_color_hands, 0x1B759E, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Dummy hands color")
|
MACRO_CONFIG_COL(ClDummy7ColorHands, dummy7_color_hands, 0x1B759E, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Dummy hands color")
|
||||||
MACRO_CONFIG_COL(ClDummy7ColorEyes, dummy7_color_eyes, 0x0000FF, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Dummy eyes color")
|
MACRO_CONFIG_COL(ClDummy7ColorEyes, dummy7_color_eyes, 0x0000FF, CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_COLLIGHT | CFGFLAG_INSENSITIVE, "Dummy eyes color")
|
||||||
|
@ -343,6 +344,9 @@ MACRO_CONFIG_INT(BrDemoSort, br_demo_sort, 0, 0, 2, CFGFLAG_SAVE | CFGFLAG_CLIEN
|
||||||
MACRO_CONFIG_INT(BrDemoSortOrder, br_demo_sort_order, 0, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Sorting order in demo browser")
|
MACRO_CONFIG_INT(BrDemoSortOrder, br_demo_sort_order, 0, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Sorting order in demo browser")
|
||||||
MACRO_CONFIG_INT(BrDemoFetchInfo, br_demo_fetch_info, 0, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Whether to auto fetch demo infos on refresh")
|
MACRO_CONFIG_INT(BrDemoFetchInfo, br_demo_fetch_info, 0, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Whether to auto fetch demo infos on refresh")
|
||||||
|
|
||||||
|
MACRO_CONFIG_INT(GhSort, gh_sort, 1, 0, 2, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Sorting column in ghost list")
|
||||||
|
MACRO_CONFIG_INT(GhSortOrder, gh_sort_order, 0, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Sorting order in ghost list")
|
||||||
|
|
||||||
MACRO_CONFIG_INT(SndBufferSize, snd_buffer_size, 512, 128, 32768, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Sound buffer size (may cause delay if large)")
|
MACRO_CONFIG_INT(SndBufferSize, snd_buffer_size, 512, 128, 32768, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Sound buffer size (may cause delay if large)")
|
||||||
MACRO_CONFIG_INT(SndRate, snd_rate, 48000, 5512, 384000, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Sound mixing rate")
|
MACRO_CONFIG_INT(SndRate, snd_rate, 48000, 5512, 384000, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Sound mixing rate")
|
||||||
MACRO_CONFIG_INT(SndEnable, snd_enable, 1, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Sound enable")
|
MACRO_CONFIG_INT(SndEnable, snd_enable, 1, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Sound enable")
|
||||||
|
@ -599,7 +603,7 @@ MACRO_CONFIG_INT(ClOverlayEntities, cl_overlay_entities, 0, 0, 100, CFGFLAG_CLIE
|
||||||
MACRO_CONFIG_INT(ClShowQuads, cl_showquads, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Show quads (only interesting for mappers, or if your system has extremely bad performance)")
|
MACRO_CONFIG_INT(ClShowQuads, cl_showquads, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Show quads (only interesting for mappers, or if your system has extremely bad performance)")
|
||||||
MACRO_CONFIG_COL(ClBackgroundColor, cl_background_color, 128, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Background color") // 0 0 128
|
MACRO_CONFIG_COL(ClBackgroundColor, cl_background_color, 128, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Background color") // 0 0 128
|
||||||
MACRO_CONFIG_COL(ClBackgroundEntitiesColor, cl_background_entities_color, 128, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Background (entities) color") // 0 0 128
|
MACRO_CONFIG_COL(ClBackgroundEntitiesColor, cl_background_entities_color, 128, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Background (entities) color") // 0 0 128
|
||||||
MACRO_CONFIG_STR(ClBackgroundEntities, cl_background_entities, 100, "", CFGFLAG_CLIENT | CFGFLAG_SAVE, "Background (entities)")
|
MACRO_CONFIG_STR(ClBackgroundEntities, cl_background_entities, IO_MAX_PATH_LENGTH, "", CFGFLAG_CLIENT | CFGFLAG_SAVE, "Background (entities)")
|
||||||
MACRO_CONFIG_STR(ClRunOnJoin, cl_run_on_join, 100, "", CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_INSENSITIVE, "Command to run when joining a server")
|
MACRO_CONFIG_STR(ClRunOnJoin, cl_run_on_join, 100, "", CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_INSENSITIVE, "Command to run when joining a server")
|
||||||
|
|
||||||
// menu background map
|
// menu background map
|
||||||
|
|
|
@ -40,22 +40,29 @@ float CConsole::CResult::GetFloat(unsigned Index) const
|
||||||
return str_tofloat(m_apArgs[Index]);
|
return str_tofloat(m_apArgs[Index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
ColorHSLA CConsole::CResult::GetColor(unsigned Index, bool Light) const
|
std::optional<ColorHSLA> CConsole::CResult::GetColor(unsigned Index, bool Light) const
|
||||||
{
|
{
|
||||||
if(Index >= m_NumArgs)
|
if(Index >= m_NumArgs)
|
||||||
return ColorHSLA(0, 0, 0);
|
return std::nullopt;
|
||||||
|
|
||||||
const char *pStr = m_apArgs[Index];
|
const char *pStr = m_apArgs[Index];
|
||||||
if(str_isallnum(pStr) || ((pStr[0] == '-' || pStr[0] == '+') && str_isallnum(pStr + 1))) // Teeworlds Color (Packed HSL)
|
if(str_isallnum(pStr) || ((pStr[0] == '-' || pStr[0] == '+') && str_isallnum(pStr + 1))) // Teeworlds Color (Packed HSL)
|
||||||
{
|
{
|
||||||
const ColorHSLA Hsla = ColorHSLA(str_toulong_base(pStr, 10), true);
|
unsigned long Value = str_toulong_base(pStr, 10);
|
||||||
|
if(Value == std::numeric_limits<unsigned long>::max())
|
||||||
|
return std::nullopt;
|
||||||
|
const ColorHSLA Hsla = ColorHSLA(Value, true);
|
||||||
if(Light)
|
if(Light)
|
||||||
return Hsla.UnclampLighting();
|
return Hsla.UnclampLighting();
|
||||||
return Hsla;
|
return Hsla;
|
||||||
}
|
}
|
||||||
else if(*pStr == '$') // Hex RGB/RGBA
|
else if(*pStr == '$') // Hex RGB/RGBA
|
||||||
{
|
{
|
||||||
return color_cast<ColorHSLA>(color_parse<ColorRGBA>(pStr + 1).value_or(ColorRGBA(0.0f, 0.0f, 0.0f, 1.0f)));
|
auto ParsedColor = color_parse<ColorRGBA>(pStr + 1);
|
||||||
|
if(ParsedColor)
|
||||||
|
return color_cast<ColorHSLA>(ParsedColor.value());
|
||||||
|
else
|
||||||
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
else if(!str_comp_nocase(pStr, "red"))
|
else if(!str_comp_nocase(pStr, "red"))
|
||||||
return ColorHSLA(0.0f / 6.0f, 1, .5f);
|
return ColorHSLA(0.0f / 6.0f, 1, .5f);
|
||||||
|
@ -76,7 +83,7 @@ ColorHSLA CConsole::CResult::GetColor(unsigned Index, bool Light) const
|
||||||
else if(!str_comp_nocase(pStr, "black"))
|
else if(!str_comp_nocase(pStr, "black"))
|
||||||
return ColorHSLA(0, 0, 0);
|
return ColorHSLA(0, 0, 0);
|
||||||
|
|
||||||
return ColorHSLA(0, 0, 0);
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
const IConsole::CCommandInfo *CConsole::CCommand::NextCommandInfo(int AccessLevel, int FlagMask) const
|
const IConsole::CCommandInfo *CConsole::CCommand::NextCommandInfo(int AccessLevel, int FlagMask) const
|
||||||
|
@ -129,12 +136,12 @@ int CConsole::ParseStart(CResult *pResult, const char *pString, int Length)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CConsole::ParseArgs(CResult *pResult, const char *pFormat)
|
int CConsole::ParseArgs(CResult *pResult, const char *pFormat, bool IsColor)
|
||||||
{
|
{
|
||||||
char Command = *pFormat;
|
char Command = *pFormat;
|
||||||
char *pStr;
|
char *pStr;
|
||||||
int Optional = 0;
|
int Optional = 0;
|
||||||
int Error = 0;
|
int Error = PARSEARGS_OK;
|
||||||
|
|
||||||
pResult->ResetVictim();
|
pResult->ResetVictim();
|
||||||
|
|
||||||
|
@ -155,7 +162,7 @@ int CConsole::ParseArgs(CResult *pResult, const char *pFormat)
|
||||||
{
|
{
|
||||||
if(!Optional)
|
if(!Optional)
|
||||||
{
|
{
|
||||||
Error = 1;
|
Error = PARSEARGS_MISSING_VALUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -191,7 +198,7 @@ int CConsole::ParseArgs(CResult *pResult, const char *pFormat)
|
||||||
pStr++; // skip due to escape
|
pStr++; // skip due to escape
|
||||||
}
|
}
|
||||||
else if(pStr[0] == 0)
|
else if(pStr[0] == 0)
|
||||||
return 1; // return error
|
return PARSEARGS_MISSING_VALUE; // return error
|
||||||
|
|
||||||
*pDst = *pStr;
|
*pDst = *pStr;
|
||||||
pDst++;
|
pDst++;
|
||||||
|
@ -215,13 +222,7 @@ int CConsole::ParseArgs(CResult *pResult, const char *pFormat)
|
||||||
|
|
||||||
if(Command == 'r') // rest of the string
|
if(Command == 'r') // rest of the string
|
||||||
break;
|
break;
|
||||||
else if(Command == 'v') // validate victim
|
else if(Command == 'v' || Command == 'i' || Command == 'f' || Command == 's')
|
||||||
pStr = str_skip_to_whitespace(pStr);
|
|
||||||
else if(Command == 'i') // validate int
|
|
||||||
pStr = str_skip_to_whitespace(pStr);
|
|
||||||
else if(Command == 'f') // validate float
|
|
||||||
pStr = str_skip_to_whitespace(pStr);
|
|
||||||
else if(Command == 's') // validate string
|
|
||||||
pStr = str_skip_to_whitespace(pStr);
|
pStr = str_skip_to_whitespace(pStr);
|
||||||
|
|
||||||
if(pStr[0] != 0) // check for end of string
|
if(pStr[0] != 0) // check for end of string
|
||||||
|
@ -230,6 +231,32 @@ int CConsole::ParseArgs(CResult *pResult, const char *pFormat)
|
||||||
pStr++;
|
pStr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// validate args
|
||||||
|
if(Command == 'i')
|
||||||
|
{
|
||||||
|
// don't validate colors here
|
||||||
|
if(!IsColor)
|
||||||
|
{
|
||||||
|
int Value;
|
||||||
|
if(!str_toint(pResult->GetString(pResult->NumArguments() - 1), &Value) ||
|
||||||
|
Value == std::numeric_limits<int>::max() || Value == std::numeric_limits<int>::min())
|
||||||
|
{
|
||||||
|
Error = PARSEARGS_INVALID_INTEGER;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(Command == 'f')
|
||||||
|
{
|
||||||
|
float Value;
|
||||||
|
if(!str_tofloat(pResult->GetString(pResult->NumArguments() - 1), &Value) ||
|
||||||
|
Value == std::numeric_limits<float>::max() || Value == std::numeric_limits<float>::min())
|
||||||
|
{
|
||||||
|
Error = PARSEARGS_INVALID_FLOAT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(pVictim)
|
if(pVictim)
|
||||||
{
|
{
|
||||||
pResult->SetVictim(pVictim);
|
pResult->SetVictim(pVictim);
|
||||||
|
@ -487,9 +514,14 @@ void CConsole::ExecuteLineStroked(int Stroke, const char *pStr, int ClientId, bo
|
||||||
|
|
||||||
if(Stroke || IsStrokeCommand)
|
if(Stroke || IsStrokeCommand)
|
||||||
{
|
{
|
||||||
if(ParseArgs(&Result, pCommand->m_pParams))
|
if(int Error = ParseArgs(&Result, pCommand->m_pParams, pCommand->m_pfnCallback == &SColorConfigVariable::CommandCallback))
|
||||||
{
|
{
|
||||||
char aBuf[TEMPCMD_NAME_LENGTH + TEMPCMD_PARAMS_LENGTH + 32];
|
char aBuf[CMDLINE_LENGTH + 64];
|
||||||
|
if(Error == PARSEARGS_INVALID_INTEGER)
|
||||||
|
str_format(aBuf, sizeof(aBuf), "%s is not a valid integer.", Result.GetString(Result.NumArguments() - 1));
|
||||||
|
else if(Error == PARSEARGS_INVALID_FLOAT)
|
||||||
|
str_format(aBuf, sizeof(aBuf), "%s is not a valid decimal number.", Result.GetString(Result.NumArguments() - 1));
|
||||||
|
else
|
||||||
str_format(aBuf, sizeof(aBuf), "Invalid arguments. Usage: %s %s", pCommand->m_pName, pCommand->m_pParams);
|
str_format(aBuf, sizeof(aBuf), "Invalid arguments. Usage: %s %s", pCommand->m_pName, pCommand->m_pParams);
|
||||||
Print(OUTPUT_LEVEL_STANDARD, "chatresp", aBuf);
|
Print(OUTPUT_LEVEL_STANDARD, "chatresp", aBuf);
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,7 +115,7 @@ class CConsole : public IConsole
|
||||||
const char *GetString(unsigned Index) const override;
|
const char *GetString(unsigned Index) const override;
|
||||||
int GetInteger(unsigned Index) const override;
|
int GetInteger(unsigned Index) const override;
|
||||||
float GetFloat(unsigned Index) const override;
|
float GetFloat(unsigned Index) const override;
|
||||||
ColorHSLA GetColor(unsigned Index, bool Light) const override;
|
std::optional<ColorHSLA> GetColor(unsigned Index, bool Light) const override;
|
||||||
|
|
||||||
void RemoveArgument(unsigned Index) override
|
void RemoveArgument(unsigned Index) override
|
||||||
{
|
{
|
||||||
|
@ -144,7 +144,16 @@ class CConsole : public IConsole
|
||||||
};
|
};
|
||||||
|
|
||||||
int ParseStart(CResult *pResult, const char *pString, int Length);
|
int ParseStart(CResult *pResult, const char *pString, int Length);
|
||||||
int ParseArgs(CResult *pResult, const char *pFormat);
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
PARSEARGS_OK = 0,
|
||||||
|
PARSEARGS_MISSING_VALUE,
|
||||||
|
PARSEARGS_INVALID_INTEGER,
|
||||||
|
PARSEARGS_INVALID_FLOAT,
|
||||||
|
};
|
||||||
|
|
||||||
|
int ParseArgs(CResult *pResult, const char *pFormat, bool IsColor = false);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
this function will set pFormat to the next parameter (i,s,r,v,?) it contains and
|
this function will set pFormat to the next parameter (i,s,r,v,?) it contains and
|
||||||
|
|
|
@ -805,6 +805,7 @@ int CDemoPlayer::Load(class IStorage *pStorage, class IConsole *pConsole, const
|
||||||
str_copy(m_aFilename, "");
|
str_copy(m_aFilename, "");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
m_Sixup = str_startswith(m_Info.m_Header.m_aNetversion, "0.7");
|
||||||
|
|
||||||
// save byte offset of map for later use
|
// save byte offset of map for later use
|
||||||
m_MapOffset = io_tell(m_File);
|
m_MapOffset = io_tell(m_File);
|
||||||
|
|
|
@ -178,7 +178,6 @@ public:
|
||||||
|
|
||||||
int Update(bool RealTime = true);
|
int Update(bool RealTime = true);
|
||||||
bool IsSixup() const { return m_Sixup; }
|
bool IsSixup() const { return m_Sixup; }
|
||||||
void SetSixup(bool Sixup) { m_Sixup = Sixup; }
|
|
||||||
|
|
||||||
const CPlaybackInfo *Info() const { return &m_Info; }
|
const CPlaybackInfo *Info() const { return &m_Info; }
|
||||||
bool IsPlaying() const override { return m_File != nullptr; }
|
bool IsPlaying() const override { return m_File != nullptr; }
|
||||||
|
|
|
@ -130,7 +130,7 @@ void CEcon::Update()
|
||||||
if(!g_Config.m_EcBantime)
|
if(!g_Config.m_EcBantime)
|
||||||
m_NetConsole.Drop(ClientId, "Too many authentication tries");
|
m_NetConsole.Drop(ClientId, "Too many authentication tries");
|
||||||
else
|
else
|
||||||
m_NetConsole.NetBan()->BanAddr(m_NetConsole.ClientAddr(ClientId), g_Config.m_EcBantime * 60, "Too many authentication tries", true);
|
m_NetConsole.NetBan()->BanAddr(m_NetConsole.ClientAddr(ClientId), g_Config.m_EcBantime * 60, "Too many authentication tries", false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -208,7 +208,7 @@ typename CNetBan::CBan<T> *CNetBan::CBanPool<T, HashCount>::Get(int Index) const
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
int CNetBan::Ban(T *pBanPool, const typename T::CDataType *pData, int Seconds, const char *pReason, bool DisplayTime)
|
int CNetBan::Ban(T *pBanPool, const typename T::CDataType *pData, int Seconds, const char *pReason, bool VerbatimReason)
|
||||||
{
|
{
|
||||||
// do not ban localhost
|
// do not ban localhost
|
||||||
if(NetMatch(pData, &m_LocalhostIpV4) || NetMatch(pData, &m_LocalhostIpV6))
|
if(NetMatch(pData, &m_LocalhostIpV4) || NetMatch(pData, &m_LocalhostIpV6))
|
||||||
|
@ -222,7 +222,7 @@ int CNetBan::Ban(T *pBanPool, const typename T::CDataType *pData, int Seconds, c
|
||||||
// set up info
|
// set up info
|
||||||
CBanInfo Info = {0};
|
CBanInfo Info = {0};
|
||||||
Info.m_Expires = Stamp;
|
Info.m_Expires = Stamp;
|
||||||
Info.m_DisplayTime = DisplayTime;
|
Info.m_VerbatimReason = VerbatimReason;
|
||||||
str_copy(Info.m_aReason, pReason);
|
str_copy(Info.m_aReason, pReason);
|
||||||
|
|
||||||
// check if it already exists
|
// check if it already exists
|
||||||
|
@ -309,15 +309,15 @@ void CNetBan::Update()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int CNetBan::BanAddr(const NETADDR *pAddr, int Seconds, const char *pReason, bool DisplayTime)
|
int CNetBan::BanAddr(const NETADDR *pAddr, int Seconds, const char *pReason, bool VerbatimReason)
|
||||||
{
|
{
|
||||||
return Ban(&m_BanAddrPool, pAddr, Seconds, pReason, DisplayTime);
|
return Ban(&m_BanAddrPool, pAddr, Seconds, pReason, VerbatimReason);
|
||||||
}
|
}
|
||||||
|
|
||||||
int CNetBan::BanRange(const CNetRange *pRange, int Seconds, const char *pReason)
|
int CNetBan::BanRange(const CNetRange *pRange, int Seconds, const char *pReason)
|
||||||
{
|
{
|
||||||
if(pRange->IsValid())
|
if(pRange->IsValid())
|
||||||
return Ban(&m_BanRangePool, pRange, Seconds, pReason, true);
|
return Ban(&m_BanRangePool, pRange, Seconds, pReason, false);
|
||||||
|
|
||||||
Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "net_ban", "ban failed (invalid range)");
|
Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "net_ban", "ban failed (invalid range)");
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -415,7 +415,7 @@ void CNetBan::ConBan(IConsole::IResult *pResult, void *pUser)
|
||||||
|
|
||||||
NETADDR Addr;
|
NETADDR Addr;
|
||||||
if(net_addr_from_str(&Addr, pStr) == 0)
|
if(net_addr_from_str(&Addr, pStr) == 0)
|
||||||
pThis->BanAddr(&Addr, Minutes * 60, pReason, true);
|
pThis->BanAddr(&Addr, Minutes * 60, pReason, false);
|
||||||
else
|
else
|
||||||
pThis->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "net_ban", "ban error (invalid network address)");
|
pThis->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "net_ban", "ban error (invalid network address)");
|
||||||
}
|
}
|
||||||
|
@ -490,8 +490,7 @@ void CNetBan::ConBans(IConsole::IResult *pResult, void *pUser)
|
||||||
|
|
||||||
if(NumBans == 0)
|
if(NumBans == 0)
|
||||||
{
|
{
|
||||||
str_format(aMsg, sizeof(aMsg), "The ban list is empty.");
|
pThis->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "net_ban", "The ban list is empty.");
|
||||||
pThis->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "net_ban", aMsg);
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,7 @@ protected:
|
||||||
};
|
};
|
||||||
int64_t m_Expires;
|
int64_t m_Expires;
|
||||||
char m_aReason[REASON_LENGTH];
|
char m_aReason[REASON_LENGTH];
|
||||||
bool m_DisplayTime;
|
bool m_VerbatimReason;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
|
@ -151,7 +151,7 @@ protected:
|
||||||
template<class T>
|
template<class T>
|
||||||
void MakeBanInfo(const CBan<T> *pBan, char *pBuf, unsigned BuffSize, int Type) const;
|
void MakeBanInfo(const CBan<T> *pBan, char *pBuf, unsigned BuffSize, int Type) const;
|
||||||
template<class T>
|
template<class T>
|
||||||
int Ban(T *pBanPool, const typename T::CDataType *pData, int Seconds, const char *pReason, bool DisplayTime);
|
int Ban(T *pBanPool, const typename T::CDataType *pData, int Seconds, const char *pReason, bool VerbatimReason);
|
||||||
template<class T>
|
template<class T>
|
||||||
int Unban(T *pBanPool, const typename T::CDataType *pData);
|
int Unban(T *pBanPool, const typename T::CDataType *pData);
|
||||||
|
|
||||||
|
@ -177,7 +177,7 @@ public:
|
||||||
void Init(class IConsole *pConsole, class IStorage *pStorage);
|
void Init(class IConsole *pConsole, class IStorage *pStorage);
|
||||||
void Update();
|
void Update();
|
||||||
|
|
||||||
virtual int BanAddr(const NETADDR *pAddr, int Seconds, const char *pReason, bool DisplayTime);
|
virtual int BanAddr(const NETADDR *pAddr, int Seconds, const char *pReason, bool VerbatimReason);
|
||||||
virtual int BanRange(const CNetRange *pRange, int Seconds, const char *pReason);
|
virtual int BanRange(const CNetRange *pRange, int Seconds, const char *pReason);
|
||||||
int UnbanByAddr(const NETADDR *pAddr);
|
int UnbanByAddr(const NETADDR *pAddr);
|
||||||
int UnbanByRange(const CNetRange *pRange);
|
int UnbanByRange(const CNetRange *pRange);
|
||||||
|
@ -228,7 +228,7 @@ void CNetBan::MakeBanInfo(const CBan<T> *pBan, char *pBuf, unsigned BuffSize, in
|
||||||
}
|
}
|
||||||
|
|
||||||
// add info part
|
// add info part
|
||||||
if(pBan->m_Info.m_DisplayTime && pBan->m_Info.m_Expires != CBanInfo::EXPIRES_NEVER)
|
if(!pBan->m_Info.m_VerbatimReason && pBan->m_Info.m_Expires != CBanInfo::EXPIRES_NEVER)
|
||||||
{
|
{
|
||||||
int Mins = ((pBan->m_Info.m_Expires - time_timestamp()) + 59) / 60;
|
int Mins = ((pBan->m_Info.m_Expires - time_timestamp()) + 59) / 60;
|
||||||
if(Mins <= 1)
|
if(Mins <= 1)
|
||||||
|
|
|
@ -4,6 +4,16 @@
|
||||||
|
|
||||||
#include "protocolglue.h"
|
#include "protocolglue.h"
|
||||||
|
|
||||||
|
int GameFlags_ClampToSix(int Flags)
|
||||||
|
{
|
||||||
|
int Six = 0;
|
||||||
|
if(Flags & GAMEFLAG_TEAMS)
|
||||||
|
Six |= GAMEFLAG_TEAMS;
|
||||||
|
if(Flags & GAMEFLAG_FLAGS)
|
||||||
|
Six |= GAMEFLAG_FLAGS;
|
||||||
|
return Six;
|
||||||
|
}
|
||||||
|
|
||||||
int PlayerFlags_SevenToSix(int Flags)
|
int PlayerFlags_SevenToSix(int Flags)
|
||||||
{
|
{
|
||||||
int Six = 0;
|
int Six = 0;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#ifndef ENGINE_SHARED_PROTOCOLGLUE_H
|
#ifndef ENGINE_SHARED_PROTOCOLGLUE_H
|
||||||
#define ENGINE_SHARED_PROTOCOLGLUE_H
|
#define ENGINE_SHARED_PROTOCOLGLUE_H
|
||||||
|
|
||||||
|
int GameFlags_ClampToSix(int Flags);
|
||||||
int PlayerFlags_SevenToSix(int Flags);
|
int PlayerFlags_SevenToSix(int Flags);
|
||||||
int PlayerFlags_SixToSeven(int Flags);
|
int PlayerFlags_SixToSeven(int Flags);
|
||||||
void PickupType_SevenToSix(int Type7, int &Type6, int &SubType6);
|
void PickupType_SevenToSix(int Type7, int &Type6, int &SubType6);
|
||||||
|
|
|
@ -53,6 +53,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
int NumItems() const { return m_NumItems; }
|
int NumItems() const { return m_NumItems; }
|
||||||
|
int DataSize() const { return m_DataSize; }
|
||||||
const CSnapshotItem *GetItem(int Index) const;
|
const CSnapshotItem *GetItem(int Index) const;
|
||||||
int GetItemSize(int Index) const;
|
int GetItemSize(int Index) const;
|
||||||
int GetItemIndex(int Key) const;
|
int GetItemIndex(int Key) const;
|
||||||
|
@ -62,6 +63,9 @@ public:
|
||||||
const void *FindItem(int Type, int Id) const;
|
const void *FindItem(int Type, int Id) const;
|
||||||
|
|
||||||
unsigned Crc() const;
|
unsigned Crc() const;
|
||||||
|
// Prints the raw snapshot data showing item and int boundaries.
|
||||||
|
// See also `CNetObjHandler::DebugDumpSnapshot(const CSnapshot *pSnap)`
|
||||||
|
// For more detailed annotations of the data.
|
||||||
void DebugDump() const;
|
void DebugDump() const;
|
||||||
bool IsValid(size_t ActualSize) const;
|
bool IsValid(size_t ActualSize) const;
|
||||||
|
|
||||||
|
|
|
@ -96,6 +96,7 @@ public:
|
||||||
CreateFolder("mapres", TYPE_SAVE);
|
CreateFolder("mapres", TYPE_SAVE);
|
||||||
CreateFolder("downloadedmaps", TYPE_SAVE);
|
CreateFolder("downloadedmaps", TYPE_SAVE);
|
||||||
CreateFolder("skins", TYPE_SAVE);
|
CreateFolder("skins", TYPE_SAVE);
|
||||||
|
CreateFolder("skins7", TYPE_SAVE);
|
||||||
CreateFolder("downloadedskins", TYPE_SAVE);
|
CreateFolder("downloadedskins", TYPE_SAVE);
|
||||||
CreateFolder("themes", TYPE_SAVE);
|
CreateFolder("themes", TYPE_SAVE);
|
||||||
CreateFolder("communityicons", TYPE_SAVE);
|
CreateFolder("communityicons", TYPE_SAVE);
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue