tidying up recent PRs

This commit is contained in:
Eric 2023-01-18 15:23:10 -08:00
parent 126eac2910
commit 135d318228
No known key found for this signature in database
GPG Key ID: 89C93F0F8D6D5A98
11 changed files with 97 additions and 81 deletions

View File

@ -420,10 +420,10 @@
"assets/build/ba_data/audio/zoeOw.ogg": "https://files.ballistica.net/cache/ba1/60/ad/38269b7f1c7dc20cb9a506cd0681", "assets/build/ba_data/audio/zoeOw.ogg": "https://files.ballistica.net/cache/ba1/60/ad/38269b7f1c7dc20cb9a506cd0681",
"assets/build/ba_data/audio/zoePickup01.ogg": "https://files.ballistica.net/cache/ba1/72/85/d6fc4d16b7081d91fba2850b5b10", "assets/build/ba_data/audio/zoePickup01.ogg": "https://files.ballistica.net/cache/ba1/72/85/d6fc4d16b7081d91fba2850b5b10",
"assets/build/ba_data/audio/zoeScream01.ogg": "https://files.ballistica.net/cache/ba1/e9/ae/1d674d0c086eaa0bd1c3b1db0505", "assets/build/ba_data/audio/zoeScream01.ogg": "https://files.ballistica.net/cache/ba1/e9/ae/1d674d0c086eaa0bd1c3b1db0505",
"assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/9b/ec/d11f3e0238ff648bce3657fe5d50", "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/95/9e/acc4a6b7b5cd457e4756ee399eb5",
"assets/build/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/92/43/36b34307575f6d6219bdf4898e18", "assets/build/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/92/43/36b34307575f6d6219bdf4898e18",
"assets/build/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/61/03/89070ca765e06da3a419a579f503", "assets/build/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/61/03/89070ca765e06da3a419a579f503",
"assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/96/96/1390940b8457b477113194acbb41", "assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/f5/32/293ca14171b8e7e7d38f377e87fb",
"assets/build/ba_data/data/languages/chinesetraditional.json": "https://files.ballistica.net/cache/ba1/f7/b0/191439142c6d6da4a056edc98b38", "assets/build/ba_data/data/languages/chinesetraditional.json": "https://files.ballistica.net/cache/ba1/f7/b0/191439142c6d6da4a056edc98b38",
"assets/build/ba_data/data/languages/croatian.json": "https://files.ballistica.net/cache/ba1/c9/73/01a1343af814131b1ee96af0b687", "assets/build/ba_data/data/languages/croatian.json": "https://files.ballistica.net/cache/ba1/c9/73/01a1343af814131b1ee96af0b687",
"assets/build/ba_data/data/languages/czech.json": "https://files.ballistica.net/cache/ba1/4e/8c/72ddb584856a15dfb11df95f9283", "assets/build/ba_data/data/languages/czech.json": "https://files.ballistica.net/cache/ba1/4e/8c/72ddb584856a15dfb11df95f9283",
@ -443,17 +443,17 @@
"assets/build/ba_data/data/languages/korean.json": "https://files.ballistica.net/cache/ba1/32/97/4c61425d7c200a5c4c9ae3a94a0e", "assets/build/ba_data/data/languages/korean.json": "https://files.ballistica.net/cache/ba1/32/97/4c61425d7c200a5c4c9ae3a94a0e",
"assets/build/ba_data/data/languages/malay.json": "https://files.ballistica.net/cache/ba1/b4/02/f686ce008312e74d5953a511c8b2", "assets/build/ba_data/data/languages/malay.json": "https://files.ballistica.net/cache/ba1/b4/02/f686ce008312e74d5953a511c8b2",
"assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/70/07/7864c07c7177dd751780ccc85b34", "assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/70/07/7864c07c7177dd751780ccc85b34",
"assets/build/ba_data/data/languages/polish.json": "https://files.ballistica.net/cache/ba1/38/31/fd930431c7612d0ab0e73e6bc74f", "assets/build/ba_data/data/languages/polish.json": "https://files.ballistica.net/cache/ba1/83/71/27beb2a7a9d7036e142d48278888",
"assets/build/ba_data/data/languages/portuguese.json": "https://files.ballistica.net/cache/ba1/cb/96/86bb139f20e126593f7fdba9e9e1", "assets/build/ba_data/data/languages/portuguese.json": "https://files.ballistica.net/cache/ba1/e3/e5/9bc33069464b08ba7ad6712de4be",
"assets/build/ba_data/data/languages/romanian.json": "https://files.ballistica.net/cache/ba1/d7/06/9d70642d0a4d1e3b1c2149d7a17c", "assets/build/ba_data/data/languages/romanian.json": "https://files.ballistica.net/cache/ba1/d7/06/9d70642d0a4d1e3b1c2149d7a17c",
"assets/build/ba_data/data/languages/russian.json": "https://files.ballistica.net/cache/ba1/6c/62/06869ed55a656b6e51b4d22e6fa8", "assets/build/ba_data/data/languages/russian.json": "https://files.ballistica.net/cache/ba1/6c/62/06869ed55a656b6e51b4d22e6fa8",
"assets/build/ba_data/data/languages/serbian.json": "https://files.ballistica.net/cache/ba1/4e/91/6f2a9a3ce733908e91377a6ddb9a", "assets/build/ba_data/data/languages/serbian.json": "https://files.ballistica.net/cache/ba1/4e/91/6f2a9a3ce733908e91377a6ddb9a",
"assets/build/ba_data/data/languages/slovak.json": "https://files.ballistica.net/cache/ba1/20/a9/163d189884edf802636bf291e432", "assets/build/ba_data/data/languages/slovak.json": "https://files.ballistica.net/cache/ba1/20/a9/163d189884edf802636bf291e432",
"assets/build/ba_data/data/languages/spanish.json": "https://files.ballistica.net/cache/ba1/0b/21/a4d09ca1fea8bbf347ed7091c8a2", "assets/build/ba_data/data/languages/spanish.json": "https://files.ballistica.net/cache/ba1/03/a9/0dad2892ceb7fded276235c4576a",
"assets/build/ba_data/data/languages/swedish.json": "https://files.ballistica.net/cache/ba1/3b/9f/d40c1423d260784970fd7364ca30", "assets/build/ba_data/data/languages/swedish.json": "https://files.ballistica.net/cache/ba1/3b/9f/d40c1423d260784970fd7364ca30",
"assets/build/ba_data/data/languages/tamil.json": "https://files.ballistica.net/cache/ba1/3d/83/e1bb0a664d1c14c41b1a083acf0d", "assets/build/ba_data/data/languages/tamil.json": "https://files.ballistica.net/cache/ba1/3d/83/e1bb0a664d1c14c41b1a083acf0d",
"assets/build/ba_data/data/languages/thai.json": "https://files.ballistica.net/cache/ba1/d6/16/523c643358880b03b233ed88e557", "assets/build/ba_data/data/languages/thai.json": "https://files.ballistica.net/cache/ba1/d6/16/523c643358880b03b233ed88e557",
"assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/63/c8/6cfbfd6702c80aa9df490e4629d7", "assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/4b/28/b62e4c928ee4ddb4120303cc5f62",
"assets/build/ba_data/data/languages/ukrainian.json": "https://files.ballistica.net/cache/ba1/3e/b6/052f1faed0264bf7135feb5c4cc3", "assets/build/ba_data/data/languages/ukrainian.json": "https://files.ballistica.net/cache/ba1/3e/b6/052f1faed0264bf7135feb5c4cc3",
"assets/build/ba_data/data/languages/venetian.json": "https://files.ballistica.net/cache/ba1/a6/ed/416638d46950c9ab4f6155b9c334", "assets/build/ba_data/data/languages/venetian.json": "https://files.ballistica.net/cache/ba1/a6/ed/416638d46950c9ab4f6155b9c334",
"assets/build/ba_data/data/languages/vietnamese.json": "https://files.ballistica.net/cache/ba1/1f/ae/abe3f105b3c4b51f6b7942773305", "assets/build/ba_data/data/languages/vietnamese.json": "https://files.ballistica.net/cache/ba1/1f/ae/abe3f105b3c4b51f6b7942773305",
@ -4008,26 +4008,26 @@
"assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e", "assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e",
"assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/1c/77/ac670a5118abdf8a7687af0e159b", "assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/1c/77/ac670a5118abdf8a7687af0e159b",
"ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a", "ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a",
"build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/70/b7/3a20b7191d324711434f30fd9b02", "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/8c/ba/e3fed2ce4cee676e9e9f33071661",
"build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/06/97/a3e4cc8402d604a2fc162bf5e6d6", "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/53/2d/036a8e5802ba3b302803831dd5c2",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/fb/2f/42d0109886a121a7afc5d39fefa2", "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a5/35/bb43a9c30ced38c754ac16857b64",
"build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/7b/89/5dfaee14cdb96d023556e6bfb400", "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/5b/c9/1a742859dec04635826c66171892",
"build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/04/fa/752e4447eba1ad78bda278d0f5b0", "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/56/8b/1d95aba7586a0ad21b9507cac404",
"build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/5e/eb/a505aa3a5a64aaa121648cde5ef2", "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/a2/cf/6eee63abf3c21d7a73ac5cf85a63",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/01/b6/f4d23b0f064245f44baa111f7275", "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/bc/6b/39c82a58c924b6d8a2e2e5ce5e06",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/9a/f5/a82d1fc4b5feaee3262c65afba92", "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d1/79/cbe53392837c8bcef76bb8e61c49",
"build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/a8/cd/0fe7195e99c956a4ec2021fa1706", "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/9a/fd/61e4a477d5c444f25dcf1caad24b",
"build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/02/81/5d11c0e3406184a7f34155efef9a", "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/d6/93/a7d6d7e042c27d5a0e6482fc078e",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b1/cb/c74fc5c22e94d7ddbe103d267d95", "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/65/03/fe128d70d565a3d3d41b31ed843d",
"build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6c/16/b3321c2d7f201c0292e78b765415", "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a4/61/8fa37aad1a0690fbff373c4028ae",
"build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/51/7f/d82ef0ecf2ff3c385d9a6384c1b5", "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/4e/90/e8a2fdf75bb4450e7ba7e2a4339b",
"build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/ef/2d/2f1ed47bd3b0fc402ebf55f0749b", "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/07/d5/28b51d35fde79940ae364b5734c5",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ef/7e/c0c486eccf17619be6a8fc3b0a18", "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/0d/88/f5012674b1418dc9453fdcd32433",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e6/e4/93021ae27bb96d34f8d6e6a6b7e3", "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ca/2a/43bb057c80d37fa6ce833bfab9c9",
"build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/54/e1/fdb3d600adc946d8d0995b68ddea", "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/0c/35/1431c88890c0a4150ed15aa39f08",
"build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/4c/0e/5d3cf72812c890870ef95365f47e", "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/6c/26/b290f9ae9979a5036b7f29d8d67c",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/d0/82/8feea3b851f2039445032af42386", "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/db/e1/1e7210e97930a6c5e606cbc8ef33",
"build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/1e/49/c5f7b924a1952633b9b3c80bec8a", "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/36/c6/8eadaeb0f5b7d96e020f9d09c190",
"build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/cb/3b/83e6150eebf4fa7b5e8a7b863219", "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/cb/3b/83e6150eebf4fa7b5e8a7b863219",
"build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/44/70/2878a73f2d55849cd6a75e401575", "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/44/70/2878a73f2d55849cd6a75e401575",
"build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/24/49/4baca475df5c7f87e6ed17d46696", "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/24/49/4baca475df5c7f87e6ed17d46696",
@ -4044,14 +4044,14 @@
"build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b2/ee/b908410d85c763d5bca09a3bc893", "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b2/ee/b908410d85c763d5bca09a3bc893",
"build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fd/24/8c51e5752064d4b487dff42a7ffa", "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fd/24/8c51e5752064d4b487dff42a7ffa",
"build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/93/c6/40e9e47dd33c88646510212ff321", "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/93/c6/40e9e47dd33c88646510212ff321",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/ef/a2/14e74872b374012688990c193535", "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/55/f8/b524f3c1e9b46be1174943e6d002",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/ef/f3/e7b36179c280d0a4c66e08992119", "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/66/dd/c62b06140a9f57679f49e73bd7ad",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/20/a2/0bdab30629cb762ef6cf3dd044c1", "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/84/19/12a6ea442e0a512f1a70aeaf8088",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/bc/67/2c0feb94abe56912519b420f2f8e", "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/3d/7e/269c583db498f613266e0b248fb0",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/8c/e8/7944feddd9ed00e1b27a81319681", "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/2d/ba/a09314ca4a238b58c79f481b4bf1",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/b7/97/90305c2ed5347c4e88faf4b61066", "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/2b/5f/4ff300c943e2d218e66ea98fc159",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/66/46/f6247f24e169407f0f4dd38f938f", "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/32/0a/f5586c9a6bf15ea5ed63d6775347",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/fa/b2/e1531030804f539d1ad173c0ce4a", "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/49/88/abf208e619fd9d61e521e367ac32",
"src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/23/ce/68396b1b7ec6d2f8425902148140", "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/23/ce/68396b1b7ec6d2f8425902148140",
"src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/2d/4f/f4fe67827f36cd59cd5193333a02", "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/2d/4f/f4fe67827f36cd59cd5193333a02",
"src/ballistica/generated/python_embedded/bootstrap_monolithic.inc": "https://files.ballistica.net/cache/ba1/ef/c1/aa5f1aa10af89f5c0b1e616355fd" "src/ballistica/generated/python_embedded/bootstrap_monolithic.inc": "https://files.ballistica.net/cache/ba1/ef/c1/aa5f1aa10af89f5c0b1e616355fd"

View File

@ -1,8 +1,10 @@
### 1.7.19 (build 20993, api 7, 2023-01-17) ### 1.7.19 (build 20995, api 7, 2023-01-18)
- Fixes an issue where repeated curses could use incorrect countdown times (Thanks EraOSBeta!). - Fixes an issue where repeated curses could use incorrect countdown times (Thanks EraOSBeta!).
- Last manual party connect port is now saved. Previously, it always assumed the port to be 43210 (Thanks ritiek!). - Last manual party connect port is now saved. Previously, it always assumed the port to be 43210 (Thanks ritiek!).
- Added a plugin-settings window under the plugins UI for enabling/disabling, and setting whether plugins are auto-enabled (Thanks vishal332008!). - Added a plugin-settings window under the plugins UI for enabling/disabling, and setting whether plugins are auto-enabled (Thanks vishal332008!).
- Missing maps are now cleanly filtered out of playlists instead of causing errors/hangs (Thanks imayushsaini!). - Missing maps are now cleanly filtered out of playlists instead of causing errors/hangs (Thanks imayushsaini!).
- Added in-game-ping option under advanced settings (Thanks imayushsaini!).
- `BA_DEVICE_NAME` environment variable can now be used to change the name the local device shows up as. Handy if running multiple servers so you can tell them apart in cloud-console/etc. (Thanks imayushsaini!).
### 1.7.18 (build 20989, api 7, 2023-01-16) ### 1.7.18 (build 20989, api 7, 2023-01-16)
- Reworked some low level asynchronous messaging functionality in efro.message and efro.rpc. Previously these were a little *too* asynchronous which could lead to messages being received in a different order than they were sent, which is not desirable. - Reworked some low level asynchronous messaging functionality in efro.message and efro.rpc. Previously these were a little *too* asynchronous which could lead to messages being received in a different order than they were sent, which is not desirable.

View File

@ -47,7 +47,7 @@ def bootstrap() -> None:
# Give a soft warning if we're being used with a different binary # Give a soft warning if we're being used with a different binary
# version than we expect. # version than we expect.
expected_build = 20993 expected_build = 20995
running_build: int = env['build_number'] running_build: int = env['build_number']
if running_build != expected_build: if running_build != expected_build:
print( print(

View File

@ -192,9 +192,8 @@ def filter_playlist(
'Import failed while scanning playlist \'%s\': %s', name, exc 'Import failed while scanning playlist \'%s\': %s', name, exc
) )
except Exception: except Exception:
from ba import _error logging.exception('Error in filter_playlist.')
_error.print_exception()
return goodlist return goodlist

View File

@ -134,7 +134,7 @@ class AdvancedSettingsWindow(ba.Window):
parent=self._root_widget, parent=self._root_widget,
position=(0, self._height - 52), position=(0, self._height - 52),
size=(self._width, 25), size=(self._width, 25),
text=ba.Lstr(resource=self._r + '.titleText'), text=ba.Lstr(resource=f'{self._r}.titleText'),
color=app.ui.title_color, color=app.ui.title_color,
h_align='center', h_align='center',
v_align='top', v_align='top',
@ -203,10 +203,10 @@ class AdvancedSettingsWindow(ba.Window):
text='' text=''
if ba.app.lang.language == 'Test' if ba.app.lang.language == 'Test'
else ba.Lstr( else ba.Lstr(
resource=self._r + '.translationNoUpdateNeededText' resource=f'{self._r}.translationNoUpdateNeededText'
) )
if up_to_date if up_to_date
else ba.Lstr(resource=self._r + '.translationUpdateNeededText'), else ba.Lstr(resource=f'{self._r}.translationUpdateNeededText'),
color=(0.2, 1.0, 0.2, 0.8) color=(0.2, 1.0, 0.2, 0.8)
if up_to_date if up_to_date
else (1.0, 0.2, 0.2, 0.8), else (1.0, 0.2, 0.2, 0.8),
@ -214,10 +214,10 @@ class AdvancedSettingsWindow(ba.Window):
else: else:
ba.textwidget( ba.textwidget(
edit=self._lang_status_text, edit=self._lang_status_text,
text=ba.Lstr(resource=self._r + '.translationFetchErrorText') text=ba.Lstr(resource=f'{self._r}.translationFetchErrorText')
if self._complete_langs_error if self._complete_langs_error
else ba.Lstr( else ba.Lstr(
resource=self._r + '.translationFetchingStatusText' resource=f'{self._r}.translationFetchingStatusText'
), ),
color=(1.0, 0.5, 0.2) color=(1.0, 0.5, 0.2)
if self._complete_langs_error if self._complete_langs_error
@ -267,7 +267,7 @@ class AdvancedSettingsWindow(ba.Window):
) )
ba.textwidget( ba.textwidget(
edit=self._title_text, text=ba.Lstr(resource=self._r + '.titleText') edit=self._title_text, text=ba.Lstr(resource=f'{self._r}.titleText')
) )
this_button_width = 410 this_button_width = 410
@ -277,7 +277,7 @@ class AdvancedSettingsWindow(ba.Window):
position=(self._sub_width / 2 - this_button_width / 2, v - 14), position=(self._sub_width / 2 - this_button_width / 2, v - 14),
size=(this_button_width, 60), size=(this_button_width, 60),
autoselect=True, autoselect=True,
label=ba.Lstr(resource=self._r + '.enterPromoCodeText'), label=ba.Lstr(resource=f'{self._r}.enterPromoCodeText'),
text_scale=1.0, text_scale=1.0,
on_activate_call=self._on_promo_code_press, on_activate_call=self._on_promo_code_press,
) )
@ -293,7 +293,7 @@ class AdvancedSettingsWindow(ba.Window):
parent=self._subcontainer, parent=self._subcontainer,
position=(200, v + 10), position=(200, v + 10),
size=(0, 0), size=(0, 0),
text=ba.Lstr(resource=self._r + '.languageText'), text=ba.Lstr(resource=f'{self._r}.languageText'),
maxwidth=150, maxwidth=150,
scale=0.95, scale=0.95,
color=ba.app.ui.title_color, color=ba.app.ui.title_color,
@ -371,7 +371,7 @@ class AdvancedSettingsWindow(ba.Window):
position=(self._sub_width * 0.5, v + 10), position=(self._sub_width * 0.5, v + 10),
size=(0, 0), size=(0, 0),
text=ba.Lstr( text=ba.Lstr(
resource=self._r + '.helpTranslateText', resource=f'{self._r}.helpTranslateText',
subs=[('${APP_NAME}', ba.Lstr(resource='titleText'))], subs=[('${APP_NAME}', ba.Lstr(resource='titleText'))],
), ),
maxwidth=self._sub_width * 0.9, maxwidth=self._sub_width * 0.9,
@ -389,7 +389,7 @@ class AdvancedSettingsWindow(ba.Window):
position=(self._sub_width / 2 - this_button_width / 2, v - 24), position=(self._sub_width / 2 - this_button_width / 2, v - 24),
size=(this_button_width, 60), size=(this_button_width, 60),
label=ba.Lstr( label=ba.Lstr(
resource=self._r + '.translationEditorButtonText', resource=f'{self._r}.translationEditorButtonText',
subs=[('${APP_NAME}', ba.Lstr(resource='titleText'))], subs=[('${APP_NAME}', ba.Lstr(resource='titleText'))],
), ),
autoselect=True, autoselect=True,
@ -422,7 +422,7 @@ class AdvancedSettingsWindow(ba.Window):
maxwidth=430, maxwidth=430,
textcolor=(0.8, 0.8, 0.8), textcolor=(0.8, 0.8, 0.8),
value=lang_inform, value=lang_inform,
text=ba.Lstr(resource=self._r + '.translationInformMe'), text=ba.Lstr(resource=f'{self._r}.translationInformMe'),
on_value_change_call=ba.WeakCall(self._on_lang_inform_value_change), on_value_change_call=ba.WeakCall(self._on_lang_inform_value_change),
) )
@ -439,7 +439,7 @@ class AdvancedSettingsWindow(ba.Window):
position=(50, v), position=(50, v),
size=(self._sub_width - 100, 30), size=(self._sub_width - 100, 30),
configkey='Kick Idle Players', configkey='Kick Idle Players',
displayname=ba.Lstr(resource=self._r + '.kickIdlePlayersText'), displayname=ba.Lstr(resource=f'{self._r}.kickIdlePlayersText'),
scale=1.0, scale=1.0,
maxwidth=430, maxwidth=430,
) )
@ -450,7 +450,7 @@ class AdvancedSettingsWindow(ba.Window):
position=(50, v), position=(50, v),
size=(self._sub_width - 100, 30), size=(self._sub_width - 100, 30),
configkey='Show Ping', configkey='Show Ping',
displayname=ba.Lstr(value='Show InGame Ping'), displayname=ba.Lstr(resource=f'{self._r}.showInGamePingText'),
scale=1.0, scale=1.0,
maxwidth=430, maxwidth=430,
) )
@ -461,7 +461,7 @@ class AdvancedSettingsWindow(ba.Window):
position=(50, v), position=(50, v),
size=(self._sub_width - 100, 30), size=(self._sub_width - 100, 30),
configkey='Disable Camera Shake', configkey='Disable Camera Shake',
displayname=ba.Lstr(resource=self._r + '.disableCameraShakeText'), displayname=ba.Lstr(resource=f'{self._r}.disableCameraShakeText'),
scale=1.0, scale=1.0,
maxwidth=430, maxwidth=430,
) )
@ -475,7 +475,7 @@ class AdvancedSettingsWindow(ba.Window):
size=(self._sub_width - 100, 30), size=(self._sub_width - 100, 30),
configkey='Disable Camera Gyro', configkey='Disable Camera Gyro',
displayname=ba.Lstr( displayname=ba.Lstr(
resource=self._r + '.disableCameraGyroscopeMotionText' resource=f'{self._r}.disableCameraGyroscopeMotionText'
), ),
scale=1.0, scale=1.0,
maxwidth=430, maxwidth=430,
@ -491,7 +491,7 @@ class AdvancedSettingsWindow(ba.Window):
configkey='Always Use Internal Keyboard', configkey='Always Use Internal Keyboard',
autoselect=True, autoselect=True,
displayname=ba.Lstr( displayname=ba.Lstr(
resource=self._r + '.alwaysUseInternalKeyboardText' resource=f'{self._r}.alwaysUseInternalKeyboardText'
), ),
scale=1.0, scale=1.0,
maxwidth=430, maxwidth=430,
@ -501,8 +501,9 @@ class AdvancedSettingsWindow(ba.Window):
position=(90, v - 10), position=(90, v - 10),
size=(0, 0), size=(0, 0),
text=ba.Lstr( text=ba.Lstr(
resource=self._r resource=(
+ '.alwaysUseInternalKeyboardDescriptionText' f'{self._r}.alwaysUseInternalKeyboardDescriptionText'
)
), ),
maxwidth=400, maxwidth=400,
flatness=1.0, flatness=1.0,
@ -523,7 +524,7 @@ class AdvancedSettingsWindow(ba.Window):
position=(self._sub_width / 2 - this_button_width / 2, v - 10), position=(self._sub_width / 2 - this_button_width / 2, v - 10),
size=(this_button_width, 60), size=(this_button_width, 60),
autoselect=True, autoselect=True,
label=ba.Lstr(resource=self._r + '.moddingGuideText'), label=ba.Lstr(resource=f'{self._r}.moddingGuideText'),
text_scale=1.0, text_scale=1.0,
on_activate_call=ba.Call( on_activate_call=ba.Call(
ba.open_url, 'https://ballistica.net/wiki/modding-guide' ba.open_url, 'https://ballistica.net/wiki/modding-guide'
@ -556,7 +557,7 @@ class AdvancedSettingsWindow(ba.Window):
position=(self._sub_width / 2 - this_button_width / 2, v - 10), position=(self._sub_width / 2 - this_button_width / 2, v - 10),
size=(this_button_width, 60), size=(this_button_width, 60),
autoselect=True, autoselect=True,
label=ba.Lstr(resource=self._r + '.showUserModsText'), label=ba.Lstr(resource=f'{self._r}.showUserModsText'),
text_scale=1.0, text_scale=1.0,
on_activate_call=show_user_scripts, on_activate_call=show_user_scripts,
) )
@ -583,7 +584,7 @@ class AdvancedSettingsWindow(ba.Window):
position=(self._sub_width / 2 - this_button_width / 2, v - 14), position=(self._sub_width / 2 - this_button_width / 2, v - 14),
size=(this_button_width, 60), size=(this_button_width, 60),
autoselect=True, autoselect=True,
label=ba.Lstr(resource=self._r + '.vrTestingText'), label=ba.Lstr(resource=f'{self._r}.vrTestingText'),
text_scale=1.0, text_scale=1.0,
on_activate_call=self._on_vr_test_press, on_activate_call=self._on_vr_test_press,
) )
@ -598,7 +599,7 @@ class AdvancedSettingsWindow(ba.Window):
position=(self._sub_width / 2 - this_button_width / 2, v - 14), position=(self._sub_width / 2 - this_button_width / 2, v - 14),
size=(this_button_width, 60), size=(this_button_width, 60),
autoselect=True, autoselect=True,
label=ba.Lstr(resource=self._r + '.netTestingText'), label=ba.Lstr(resource=f'{self._r}.netTestingText'),
text_scale=1.0, text_scale=1.0,
on_activate_call=self._on_net_test_press, on_activate_call=self._on_net_test_press,
) )
@ -611,7 +612,7 @@ class AdvancedSettingsWindow(ba.Window):
position=(self._sub_width / 2 - this_button_width / 2, v - 14), position=(self._sub_width / 2 - this_button_width / 2, v - 14),
size=(this_button_width, 60), size=(this_button_width, 60),
autoselect=True, autoselect=True,
label=ba.Lstr(resource=self._r + '.benchmarksText'), label=ba.Lstr(resource=f'{self._r}.benchmarksText'),
text_scale=1.0, text_scale=1.0,
on_activate_call=self._on_benchmark_press, on_activate_call=self._on_benchmark_press,
) )
@ -633,7 +634,7 @@ class AdvancedSettingsWindow(ba.Window):
def _show_restart_needed(self, value: Any) -> None: def _show_restart_needed(self, value: Any) -> None:
del value # Unused. del value # Unused.
ba.screenmessage( ba.screenmessage(
ba.Lstr(resource=self._r + '.mustRestartText'), color=(1, 1, 0) ba.Lstr(resource=f'{self._r}.mustRestartText'), color=(1, 1, 0)
) )
def _on_lang_inform_value_change(self, val: bool) -> None: def _on_lang_inform_value_change(self, val: bool) -> None:

View File

@ -32,7 +32,7 @@
namespace ballistica { namespace ballistica {
// These are set automatically via script; don't modify them here. // These are set automatically via script; don't modify them here.
const int kAppBuildNumber = 20993; const int kAppBuildNumber = 20995;
const char* kAppVersion = "1.7.19"; const char* kAppVersion = "1.7.19";
// Our standalone globals. // Our standalone globals.

View File

@ -24,8 +24,8 @@ const int kPacketPruneTime = 10000;
// How long to go between pruning our packets. // How long to go between pruning our packets.
const int kPacketPruneInterval = 1000; const int kPacketPruneInterval = 1000;
// How long to go between updating current ping. // How long to go between updating our ping measurement.
const int kPingUpdateInterval = 2000; const int kPingMeasureInterval = 2000;
Connection::Connection() { Connection::Connection() {
// NOLINTNEXTLINE(cppcoreguidelines-prefer-member-initializer) // NOLINTNEXTLINE(cppcoreguidelines-prefer-member-initializer)
@ -80,17 +80,16 @@ void Connection::HandleResends(millisecs_t real_time,
// (prevents some un-necessary re-sending) // (prevents some un-necessary re-sending)
uint8_t extra_bits = data[offset + 2]; uint8_t extra_bits = data[offset + 2];
// Get a rough ping by looking at the previous packet and measuring its // Ack packets and take the opportunity to measure ping.
// round-trip time if it has not yet been ack'ed.
auto test_num = static_cast<uint16_t>(their_next_in - 1u); auto test_num = static_cast<uint16_t>(their_next_in - 1u);
auto j = out_messages_.find(test_num); auto j = out_messages_.find(test_num);
if (j != out_messages_.end()) { if (j != out_messages_.end()) {
ReliableMessageOut& msg(j->second); ReliableMessageOut& msg(j->second);
if (!msg.acked) { if (!msg.acked) {
// Dont update too fast. // Periodically use this opportunity to measure ping.
if (real_time - last_ping_update_time_ > kPingUpdateInterval) { if (real_time - last_ping_measure_time_ > kPingMeasureInterval) {
current_ping_ = static_cast<float>(real_time - msg.first_send_time); current_ping_ = static_cast<float>(real_time - msg.first_send_time);
last_ping_update_time_ = real_time; last_ping_measure_time_ = real_time;
} }
} }
msg.acked = true; msg.acked = true;
@ -388,15 +387,6 @@ void Connection::Update() {
SendGamePacket(data); SendGamePacket(data);
} }
if (can_communicate()
&& real_time - last_ping_update_time_ > kPingUpdateInterval + 1000) {
// Send a reliable message if ping not updated in a while.
std::vector<uint8_t> data(1);
data[0] = BA_PACKET_SIMPLE_PING;
SendReliableMessage(data);
}
// Occasionally prune our in and out messages. // Occasionally prune our in and out messages.
if (real_time - last_prune_time_ > kPacketPruneInterval) { if (real_time - last_prune_time_ > kPacketPruneInterval) {
last_prune_time_ = real_time; last_prune_time_ = real_time;
@ -451,6 +441,9 @@ void Connection::HandleMessagePacket(const std::vector<uint8_t>& buffer) {
} }
break; break;
} }
case BA_MESSAGE_NULL:
// An empty message that can get thrown around for ping purposes.
break;
default: { default: {
// Let's silently ignore these since we may be adding various // Let's silently ignore these since we may be adding various
// messages mid-protocol in a backwards-compatible way. // messages mid-protocol in a backwards-compatible way.

View File

@ -132,7 +132,7 @@ class Connection : public Object {
bool errored_{}; bool errored_{};
millisecs_t last_prune_time_{}; millisecs_t last_prune_time_{};
millisecs_t last_ack_send_time_{}; millisecs_t last_ack_send_time_{};
millisecs_t last_ping_update_time_{}; millisecs_t last_ping_measure_time_{};
// These are explicitly 16 bit values. // These are explicitly 16 bit values.
uint16_t next_out_message_num_ = kFirstConnectionStateNum; uint16_t next_out_message_num_ = kFirstConnectionStateNum;
uint16_t next_out_unreliable_message_num_{}; uint16_t next_out_unreliable_message_num_{};

View File

@ -18,6 +18,9 @@
namespace ballistica { namespace ballistica {
// How long to go between sending out null packets for pings.
const int kPingSendInterval = 2000;
ConnectionToHost::ConnectionToHost() = default; ConnectionToHost::ConnectionToHost() = default;
auto ConnectionToHost::GetAsUDP() -> ConnectionToHostUDP* { return nullptr; } auto ConnectionToHost::GetAsUDP() -> ConnectionToHostUDP* { return nullptr; }
@ -47,7 +50,23 @@ ConnectionToHost::~ConnectionToHost() {
} }
} }
void ConnectionToHost::Update() { Connection::Update(); } void ConnectionToHost::Update() {
millisecs_t real_time = GetRealTime();
// Send out null messages occasionally for ping measurement purposes.
// Note that we currently only do this from the client since we might not
// be sending things otherwise. The server on the other hand should be
// sending lots of messages to clients so no need to add to the load there.
if (can_communicate()
&& real_time - last_ping_send_time_ > kPingSendInterval) {
std::vector<uint8_t> data(1);
data[0] = BA_MESSAGE_NULL;
SendReliableMessage(data);
last_ping_send_time_ = real_time;
}
Connection::Update();
}
// Seems we get a false alarm here. // Seems we get a false alarm here.
#pragma clang diagnostic push #pragma clang diagnostic push

View File

@ -38,6 +38,7 @@ class ConnectionToHost : public Connection {
bool got_host_info_ = false; bool got_host_info_ = false;
// can remove once back-compat protocol is > 29 // can remove once back-compat protocol is > 29
bool ignore_old_attach_remote_player_packets_ = false; bool ignore_old_attach_remote_player_packets_ = false;
millisecs_t last_ping_send_time_{};
// the client-session that we're driving // the client-session that we're driving
Object::WeakRef<ClientSession> client_session_; Object::WeakRef<ClientSession> client_session_;
}; };

View File

@ -74,6 +74,7 @@ namespace ballistica {
#define BA_MESSAGE_SESSION_RESET 0 #define BA_MESSAGE_SESSION_RESET 0
#define BA_MESSAGE_SESSION_COMMANDS 1 #define BA_MESSAGE_SESSION_COMMANDS 1
#define BA_MESSAGE_SESSION_DYNAMICS_CORRECTION 2 #define BA_MESSAGE_SESSION_DYNAMICS_CORRECTION 2
#define BA_MESSAGE_NULL 3
#define BA_MESSAGE_REQUEST_REMOTE_PLAYER 4 #define BA_MESSAGE_REQUEST_REMOTE_PLAYER 4
#define BA_MESSAGE_ATTACH_REMOTE_PLAYER 5 // OBSOLETE (use the _2 version) #define BA_MESSAGE_ATTACH_REMOTE_PLAYER 5 // OBSOLETE (use the _2 version)
#define BA_MESSAGE_DETACH_REMOTE_PLAYER 6 #define BA_MESSAGE_DETACH_REMOTE_PLAYER 6