diff --git a/.efrocachemap b/.efrocachemap index dcae0fe6..1f4b457e 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -4004,50 +4004,50 @@ "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", "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/02/50/7fd361fc7503bd6511dafe947737", - "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/cd/f1/fc3ad4cb576876298e3da037baed", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/5d/f4/c7c37b0ed8386fc204d5321e0ab9", - "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a7/a8/4768f13ef21d2d3b384e806f06f6", - "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/63/38/bef42b4c6a1f742f0c9e63a9b16d", - "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/f3/b3b46212ab0b146938a20990d800", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/1b/29/79f4ebdcb096ad83aaf752fb3701", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/02/f8/23419184457a183af712403a1352", - "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/f8/e7/fdb608da459208f4e6fc8372106b", - "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/03/9e/8144ef6cd3db9fc5e71ee75371e5", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/9b/a9/57eda2e68544bd0c36fa13cffd2b", - "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d3/1e/f9ef9e2189ca84d24df7322ca220", - "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/50/6e/aefb6451ab6f7fa2851297011cba", - "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/a1/c9/6d07587d3b2e8c1862dccfef4e94", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ab/4e/91d2d27cf15792c17829549580ca", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a1/f9/12bf33e3b52202e6853adacba2a7", - "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/e7/44/52c8c2ab2abd417b568ccab82898", - "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/18/37/f7817784360e6c7b093c296a60b6", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/13/db/2af6ebf94790575c036a051c5b20", - "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/42/c3/cbeba6007e0a326abd9731bcb9fe", - "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a2/9d/285cd73953e62fdb7945c09fb83c", - "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/22/2d/3df4908dfdcdebe772bf3df0daee", - "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/2a/74/763faee36da963364e94996429d5", - "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/87/9f/4408f47d293436f420ff9338dca6", - "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/4f/e8/2518fd177b5c51f89ef0795b1264", - "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/77/b1/41befd66869830590f00bff7ba97", - "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/92/a2/8d6f01537d722803aab60cb67e6d", - "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fc/be/0e1af48000395cdbe72179dba90a", - "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/20/7a/b31ec8c47d67b7fd23ed2510aae7", - "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a0/b5/b4ffd9769f3b703226e744423a58", - "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/3b/02/9e8f15c68ca328a7549846d53a8f", - "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a0/74/b61b74ada26b41f421563b535dd0", - "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ec/5c/08c171db06bd4492a2b414c77488", - "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/2f/8a/0384cc905ba23bd45afdfcacb882", - "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/63/6f/e6ba3560e0a8e404bb592405de27", - "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6e/14/c4f70a74e2111e3adb096dfbd215", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/7c/1c/09d20642216c867d8a0adfddff95", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/a7/ff/e4d363b28c753ed796fff546b9fb", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/77/e9/f62f482ec7efe2b758b2f541b841", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/5e/fb/52723ebc5ba87a95ae3342826d2c", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/11/be/7dcecaa97f8eac0183307c5b0e7d", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/50/79/eb8f282ab42ca5fc6c9c088d87a6", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/74/08/8f1403844c6a9562ae076a4451a3", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/96/52/846ce7853177655441ec7085113c", + "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/1c/91/7ae1b68a23982fea887522f1c190", + "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/0a/85/df9814b9bf896f4abea28768e92b", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b4/a1/7f03feb7a85d24245f1f6684032e", + "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/9c/6a/8653f666ea158628c486ea54e4e2", + "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/d6/e2/ca77c216625adc6b4e8af0d388b1", + "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/d4/bb/a88afebc39bf026b31abaf08d9d4", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/01/a0/1a3b24b2a41563594b26eb4fb948", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/74/57/115e41be4d58896035abf97ce344", + "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/73/16/fc91ce4346f1f47f6f2ca7851c74", + "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/29/d5/b4104b2bdcd5313599442f67422b", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ec/73/9d05a319bcc76428d29e3449b9cc", + "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ea/f7/f86d1d668e67254333b774b2d8c1", + "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/f7/75/ee906782bf6cda84349bd2a12ede", + "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/50/0b/f57762d8bb07d039441f6f4d05c2", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a2/17/d025c0947448310b4efbf6553bca", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/c0/a7/febd382d01d7a6671f50b45cf7b7", + "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/36/6b/6a1baa6b91487ab4f156a720e875", + "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/ff/e7/63d4866736010ebeb01ded394cac", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/72/6a/d6e87def1a6e663f0eed36a05779", + "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/09/ac/34a441b000c510d46c4fda7036fb", + "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/1b/47/d6384f65f8b4a3fc1c63c69a1c8c", + "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b6/4c/14bc1088021461969748f0555d64", + "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ef/08/deb368b8fa5f12eaadc63b1388dc", + "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/30/78/1069cc823a81fad93339bc791a11", + "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e3/9f/2fd0cdf791782b9cf887fdee5eee", + "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d2/24/459b6854f0a8fae959b9ff37ed4c", + "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ce/27/104a5dca1fa570cd41faedf6973e", + "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/93/1c/259af37062fb8fe2a50bcaad8c1a", + "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7b/63/2430e689d0e1980c3f40d113db6e", + "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/34/a7/484b831c51c83c692e8c59dcd11c", + "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8b/ce/8136e2adf01ee38b1d419553464f", + "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/0d/90/2c695a05575e73c42969917f2d3a", + "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d2/fd/ceb1eb357d0b36852d88899356e8", + "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/09/15/a8daaff2ebe63f85987937692152", + "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/23/f9/ab5c5f9b0bb754034881ab82afe5", + "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/34/16/dbc9386010f6074dc548a081e7cd", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/b7/06/ce8858ccf49e1ccdb71e15d25ead", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/b2/25/2203b80ba9adea38dbb152bc665e", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/4a/29/908997a9aa377f2a13053e591c16", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/27/c9/46e170eb44a7cccb92cfd6b382a2", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/6c/29/06e3a7db44446f381ffcf4f79c99", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/02/9b/66ce0f85f69e71549b2aab5b4fca", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/23/7d/15c3fe7a60284323da4d4f199845", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/32/e5/faff7cbc87f94743f2176bd7efef", "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/25/77/8093dfffddaa80cd513ddaa61867", "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" diff --git a/CHANGELOG.md b/CHANGELOG.md index fe05359f..9d6d6d87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,11 @@ -### 1.7.16 (build 20963, api 7, 2022-12-08) +### 1.7.16 (build 20966, api 7, 2022-12-15) - Fixed a bug where profile names encased in curly brackets could cause harmless error messages. - Android will no longer log errors on ba.open_url() calls if a browser is not available (it still just falls back to the in-app dialog in that case). - The 'Upgrade' button for device accounts now signs you out and closes the upgrade window to hopefully make it more clear that you need to sign in with your newly created/upgraded BombSquad account. - Fixed a bug where the remote app could not connect for the first 5 seconds after launching the app. - Added Malay language. Ick; apparently its been sitting done for a while and I hadn't realized it wasn't added to the game yet. Apologies!. And thanks to all contributors! +- Added 'enable_queue' server config setting. This defaults to True but can be turned off as a workaround for server owners targeted by queue spam attacks. +- The public party list no longer sorts servers without queues at the end of the list. This sorting was put there long ago to prioritize fancy new queue-supporting servers but now it would just make the few that opt out of queues hard to find. Doh. So opting out of queues is probably not a great idea until this build is widespread. ### 1.7.15 (build 20960, api 7, 2022-12-04) - The cancel button on the 'Sign in with a Bombsquad Account' popup no longer respond to system cancel buttons (escape key, android back button, etc). Turns out some Android people were pressing back repeatedly to come back from a browser after signing in and immediately canceling their sign in attempts in the game before they completed. Hopefully this will avoid some frustration. diff --git a/assets/src/ba_data/python/._ba_sources_hash b/assets/src/ba_data/python/._ba_sources_hash index 121cc8c6..f3c0eaa2 100644 --- a/assets/src/ba_data/python/._ba_sources_hash +++ b/assets/src/ba_data/python/._ba_sources_hash @@ -1 +1 @@ -313825873705357186590048512620581045590 \ No newline at end of file +307626381968915875246137499583097815878 \ No newline at end of file diff --git a/assets/src/ba_data/python/_ba.py b/assets/src/ba_data/python/_ba.py index f4a79295..eb4a7c75 100644 --- a/assets/src/ba_data/python/_ba.py +++ b/assets/src/ba_data/python/_ba.py @@ -3025,6 +3025,12 @@ def set_public_party_name(name: str) -> None: return None +def set_public_party_queue_enabled(max_size: bool) -> None: + + """(internal)""" + return None + + def set_public_party_stats_url(url: str | None) -> None: """(internal)""" diff --git a/assets/src/ba_data/python/ba/_bootstrap.py b/assets/src/ba_data/python/ba/_bootstrap.py index 0f5821ec..882de6c2 100644 --- a/assets/src/ba_data/python/ba/_bootstrap.py +++ b/assets/src/ba_data/python/ba/_bootstrap.py @@ -47,7 +47,7 @@ def bootstrap() -> None: # Give a soft warning if we're being used with a different binary # version than we expect. - expected_build = 20963 + expected_build = 20966 running_build: int = env['build_number'] if running_build != expected_build: print( diff --git a/assets/src/ba_data/python/ba/_servermode.py b/assets/src/ba_data/python/ba/_servermode.py index f5a40551..52f433fa 100644 --- a/assets/src/ba_data/python/ba/_servermode.py +++ b/assets/src/ba_data/python/ba/_servermode.py @@ -418,6 +418,7 @@ class ServerController: # Call set-enabled last (will push state to the cloud). _ba.set_public_party_max_size(self._config.max_party_size) + _ba.set_public_party_queue_enabled(self._config.enable_queue) _ba.set_public_party_name(self._config.party_name) _ba.set_public_party_stats_url(self._config.stats_url) _ba.set_public_party_enabled(self._config.party_is_public) diff --git a/assets/src/ba_data/python/ba/internal.py b/assets/src/ba_data/python/ba/internal.py index c688faf1..7cf9a06e 100644 --- a/assets/src/ba_data/python/ba/internal.py +++ b/assets/src/ba_data/python/ba/internal.py @@ -40,6 +40,7 @@ from _ba import ( get_public_party_max_size, set_public_party_name, set_public_party_max_size, + set_public_party_queue_enabled, set_authenticate_clients, set_public_party_enabled, reset_random_player_names, @@ -213,6 +214,7 @@ __all__ = [ 'get_public_party_max_size', 'set_public_party_name', 'set_public_party_max_size', + 'set_public_party_queue_enabled', 'set_authenticate_clients', 'set_public_party_enabled', 'reset_random_player_names', diff --git a/assets/src/ba_data/python/bastd/ui/account/settings.py b/assets/src/ba_data/python/bastd/ui/account/settings.py index 04d17a36..149e89d0 100644 --- a/assets/src/ba_data/python/bastd/ui/account/settings.py +++ b/assets/src/ba_data/python/bastd/ui/account/settings.py @@ -17,10 +17,9 @@ import ba.internal if TYPE_CHECKING: from ba.internal import LoginAdapter -# We only show v1 linking controls when directly signed in with -# V1 accounts. Generally V2 accounts should use the web ui for linking. -# However we have an escape-hatch here if someone needs to access -# V1 linking for the V1 portion of their V2 account. +# These days we're directing people to the web based account settings +# for V2 account linking and trying to get them to disconnect remaining +# V1 links, but leaving this escape hatch here in case needed. FORCE_ENABLE_V1_LINKING = False diff --git a/assets/src/ba_data/python/bastd/ui/gather/publictab.py b/assets/src/ba_data/python/bastd/ui/gather/publictab.py index fafd19b4..e874af6b 100644 --- a/assets/src/ba_data/python/bastd/ui/gather/publictab.py +++ b/assets/src/ba_data/python/bastd/ui/gather/publictab.py @@ -1094,7 +1094,6 @@ class PublicGatherTab(GatherTab): self._parties_sorted.sort( key=lambda p: ( - p[1].queue is None, # Show non-queued last. p[1].ping if p[1].ping is not None else 999999.0, p[1].index, ) diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc index 6455dac7..fb6052c0 100644 --- a/src/ballistica/ballistica.cc +++ b/src/ballistica/ballistica.cc @@ -32,7 +32,7 @@ namespace ballistica { // These are set automatically via script; don't modify them here. -const int kAppBuildNumber = 20963; +const int kAppBuildNumber = 20966; const char* kAppVersion = "1.7.16"; // Our standalone globals. diff --git a/src/ballistica/logic/logic.cc b/src/ballistica/logic/logic.cc index 8ac784af..4ebe931d 100644 --- a/src/ballistica/logic/logic.cc +++ b/src/ballistica/logic/logic.cc @@ -2108,6 +2108,20 @@ void Logic::SetPublicPartySize(int count) { } } +auto Logic::SetPublicPartyQueueEnabled(bool enabled) -> void { + assert(InLogicThread()); + if (enabled == public_party_queue_enabled_) { + return; + } + public_party_queue_enabled_ = enabled; + + // Push our new state to the server *ONLY* if public-party is turned on + // (wasteful otherwise). + if (public_party_enabled_) { + g_app_internal->PushPublicPartyState(); + } +} + void Logic::SetPublicPartyMaxSize(int count) { assert(InLogicThread()); if (count == public_party_max_size_) { diff --git a/src/ballistica/logic/logic.h b/src/ballistica/logic/logic.h index 1baa65d0..7ba31f1d 100644 --- a/src/ballistica/logic/logic.h +++ b/src/ballistica/logic/logic.h @@ -214,6 +214,10 @@ class Logic { auto public_party_size() const { return public_party_size_; } auto SetPublicPartySize(int count) -> void; auto public_party_max_size() const { return public_party_max_size_; } + auto SetPublicPartyQueueEnabled(bool enabled) -> void; + auto public_party_queue_enabled() const { + return public_party_queue_enabled_; + } auto public_party_max_player_count() const { return public_party_max_player_count_; } @@ -322,6 +326,7 @@ class Logic { bool public_party_enabled_{}; int public_party_size_{1}; // Always count ourself (is that what we want?). int public_party_max_size_{8}; + bool public_party_queue_enabled_{true}; int public_party_player_count_{0}; int public_party_max_player_count_{8}; std::string public_party_name_; diff --git a/src/ballistica/python/methods/python_methods_networking.cc b/src/ballistica/python/methods/python_methods_networking.cc index 6c5a4d6e..bd59b102 100644 --- a/src/ballistica/python/methods/python_methods_networking.cc +++ b/src/ballistica/python/methods/python_methods_networking.cc @@ -114,6 +114,21 @@ auto PySetPublicPartyMaxSize(PyObject* self, PyObject* args, PyObject* keywds) BA_PYTHON_CATCH; } +auto PySetPublicPartyQueueEnabled(PyObject* self, PyObject* args, + PyObject* keywds) -> PyObject* { + BA_PYTHON_TRY; + int enabled; + static const char* kwlist[] = {"enabled", nullptr}; + if (!PyArg_ParseTupleAndKeywords(args, keywds, "p", + const_cast(kwlist), &enabled)) { + return nullptr; + } + assert(g_python); + g_logic->SetPublicPartyQueueEnabled(enabled); + Py_RETURN_NONE; + BA_PYTHON_CATCH; +} + auto PySetAuthenticateClients(PyObject* self, PyObject* args, PyObject* keywds) -> PyObject* { BA_PYTHON_TRY; @@ -498,6 +513,13 @@ auto PythonMethodsNetworking::GetMethods() -> std::vector { METH_VARARGS | METH_KEYWORDS, "set_public_party_max_size(max_size: int) -> None\n" "\n" + + "(internal)"}, + + {"set_public_party_queue_enabled", + (PyCFunction)PySetPublicPartyQueueEnabled, METH_VARARGS | METH_KEYWORDS, + "set_public_party_queue_enabled(max_size: bool) -> None\n" + "\n" "(internal)"}, {"get_public_party_max_size", (PyCFunction)PyGetPublicPartyMaxSize, diff --git a/tools/bacommon/servermanager.py b/tools/bacommon/servermanager.py index e21b1d1f..7c13910a 100644 --- a/tools/bacommon/servermanager.py +++ b/tools/bacommon/servermanager.py @@ -138,6 +138,11 @@ class ServerConfig: tuple[float, float, float], tuple[float, float, float] ] | None = None + # Whether to enable the queue where players can line up before entering + # your server. Disabling this can be used as a workaround to deal with + # queue spamming attacks. + enable_queue: bool = True + # (internal) stress-testing mode. stress_test_players: int | None = None diff --git a/tools/efro/call.py b/tools/efro/call.py index 7013f3dd..8e811e50 100644 --- a/tools/efro/call.py +++ b/tools/efro/call.py @@ -274,6 +274,44 @@ if TYPE_CHECKING: ) -> _CallNoArgs[OutT]: ... + # 4 arg call; 3 args bundled. + # noinspection PyPep8Naming + @overload + def Call( + call: Callable[[In1T, In2T, In3T, In4T], OutT], + arg1: In1T, + arg2: In2T, + arg3: In3T, + ) -> _Call1Arg[In4T, OutT]: + ... + + # 4 arg call; 2 args bundled. + # noinspection PyPep8Naming + @overload + def Call( + call: Callable[[In1T, In2T, In3T, In4T], OutT], + arg1: In1T, + arg2: In2T, + ) -> _Call2Args[In3T, In4T, OutT]: + ... + + # 4 arg call; 1 arg bundled. + # noinspection PyPep8Naming + @overload + def Call( + call: Callable[[In1T, In2T, In3T, In4T], OutT], + arg1: In1T, + ) -> _Call3Args[In2T, In3T, In4T, OutT]: + ... + + # 4 arg call; no args bundled. + # noinspection PyPep8Naming + @overload + def Call( + call: Callable[[In1T, In2T, In3T, In4T], OutT], + ) -> _Call4Args[In1T, In2T, In3T, In4T, OutT]: + ... + # 5 arg call; 5 args bundled. # noinspection PyPep8Naming @overload diff --git a/tools/efro/util.py b/tools/efro/util.py index 553120f0..2c0ab72a 100644 --- a/tools/efro/util.py +++ b/tools/efro/util.py @@ -39,6 +39,7 @@ class _EmptyObj: pass +# TODO: kill this and just use efro.call.tpartial if TYPE_CHECKING: Call = Call else: