mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-01-19 13:25:31 +08:00
lang testing works again
This commit is contained in:
parent
57e59fb859
commit
121a8c5ae6
158
.efrocachemap
generated
158
.efrocachemap
generated
@ -421,43 +421,43 @@
|
||||
"build/assets/ba_data/audio/zoeOw.ogg": "74befe45a8417e95b6a2233c51992a26",
|
||||
"build/assets/ba_data/audio/zoePickup01.ogg": "48ab8cddfcde36a750856f3f81dd20c8",
|
||||
"build/assets/ba_data/audio/zoeScream01.ogg": "2b468aedfa8741090247f04eb9e6df55",
|
||||
"build/assets/ba_data/data/langdata.json": "a49e8187178effbd077426d31f7d92ff",
|
||||
"build/assets/ba_data/data/langdata.json": "99ad02cbe90ab3e46168ddf277633c68",
|
||||
"build/assets/ba_data/data/languages/arabic.json": "dcb913b3d89fe665adbf35e697d2e5d0",
|
||||
"build/assets/ba_data/data/languages/belarussian.json": "3d5523d0004293aa2df02f3f6f3b84f8",
|
||||
"build/assets/ba_data/data/languages/chinese.json": "2c0105deead2412543323564bbbca749",
|
||||
"build/assets/ba_data/data/languages/chinese.json": "d4a89bf007a0624c6852c512d1d38cdc",
|
||||
"build/assets/ba_data/data/languages/chinesetraditional.json": "319565f8a15667488f48dbce59278e39",
|
||||
"build/assets/ba_data/data/languages/croatian.json": "e671b9d0c012be1a30f9c15eb1b81860",
|
||||
"build/assets/ba_data/data/languages/czech.json": "74219f9b06ff098387b40f85a5b0124e",
|
||||
"build/assets/ba_data/data/languages/croatian.json": "b23619cb396ac16640c47458f884b16a",
|
||||
"build/assets/ba_data/data/languages/czech.json": "61bcfce75c0d53d2f2af709cee42187a",
|
||||
"build/assets/ba_data/data/languages/danish.json": "8e57db30c5250df2abff14a822f83ea7",
|
||||
"build/assets/ba_data/data/languages/dutch.json": "b0900d572c9141897d53d6574c471343",
|
||||
"build/assets/ba_data/data/languages/english.json": "b88cb9e8035e238ccf327d62bde1d190",
|
||||
"build/assets/ba_data/data/languages/english.json": "eae3a17af2efc2388f96c1e05c024455",
|
||||
"build/assets/ba_data/data/languages/esperanto.json": "0e397cfa5f3fb8cef5f4a64f21cda880",
|
||||
"build/assets/ba_data/data/languages/filipino.json": "f8d101b436fcf8f92f20a9983fb9fdee",
|
||||
"build/assets/ba_data/data/languages/filipino.json": "fabaedeefc28cf02ec365ef37046ec0b",
|
||||
"build/assets/ba_data/data/languages/french.json": "b7d11199756f0eb4f1a745ceee652b2a",
|
||||
"build/assets/ba_data/data/languages/german.json": "198b9860c5b9df7b8e3e30b03d8755cb",
|
||||
"build/assets/ba_data/data/languages/gibberish.json": "becbb2e96a0d85661c1af9ebbf6bb2fb",
|
||||
"build/assets/ba_data/data/languages/gibberish.json": "085f438ccdb7553bbb7cf5d68e9cd300",
|
||||
"build/assets/ba_data/data/languages/greek.json": "ad3c0d38f34d809824892d6f22808dbf",
|
||||
"build/assets/ba_data/data/languages/hindi.json": "e56f0ffb57321660aa415e97c2dacfc2",
|
||||
"build/assets/ba_data/data/languages/hungarian.json": "6b08fea24b72cc805ed0dc59e11c4cd6",
|
||||
"build/assets/ba_data/data/languages/hindi.json": "54cd56bade6922b40989a8ac5e0c17f6",
|
||||
"build/assets/ba_data/data/languages/hungarian.json": "0cf994bf9fedf004c9a1011bee179a07",
|
||||
"build/assets/ba_data/data/languages/indonesian.json": "ed9038bf4b9216f93eb73e753e162706",
|
||||
"build/assets/ba_data/data/languages/italian.json": "017f2b20584838d9f5ad88822a4caf62",
|
||||
"build/assets/ba_data/data/languages/korean.json": "4e3524327a0174250aff5e1ef4c0c597",
|
||||
"build/assets/ba_data/data/languages/malay.json": "f6ce0426d03a62612e3e436ed5d1be1f",
|
||||
"build/assets/ba_data/data/languages/persian.json": "8e3a88cbb729570ffc8e0b06b3337a8f",
|
||||
"build/assets/ba_data/data/languages/polish.json": "6585f57b1a389b8331b06f610bd8cc6f",
|
||||
"build/assets/ba_data/data/languages/portuguese.json": "615a59bd03f84659158d9f2608a4ab21",
|
||||
"build/assets/ba_data/data/languages/persian.json": "87f9dfc085f0ff715b17a8082fc79483",
|
||||
"build/assets/ba_data/data/languages/polish.json": "3ce5635118b34ea89d6e0f83c8c7e9df",
|
||||
"build/assets/ba_data/data/languages/portuguese.json": "0accd9462f0acbc5f869f33a2a7a24cd",
|
||||
"build/assets/ba_data/data/languages/romanian.json": "ef68520f749cf3641d4e4225a6166349",
|
||||
"build/assets/ba_data/data/languages/russian.json": "64f0b7347af86f8c4bec8ba8e781378d",
|
||||
"build/assets/ba_data/data/languages/russian.json": "e7b90ce1eee8247e164ed7d1470f76bd",
|
||||
"build/assets/ba_data/data/languages/serbian.json": "d7452dd72ac0e51680cb39b5ebaa1c69",
|
||||
"build/assets/ba_data/data/languages/slovak.json": "3c08c748c96c71bd9e1d7291fb8817b6",
|
||||
"build/assets/ba_data/data/languages/spanish.json": "63f80b2c37a1d8092304db1a10ecf789",
|
||||
"build/assets/ba_data/data/languages/swedish.json": "5142a96597d17d8344be96a603da64ac",
|
||||
"build/assets/ba_data/data/languages/tamil.json": "b9fcc523639f55e05c7f4e7914f3321a",
|
||||
"build/assets/ba_data/data/languages/thai.json": "1d665629361f302693dead39de8fa945",
|
||||
"build/assets/ba_data/data/languages/turkish.json": "babd1ea2ac160cc9253e836c41674fff",
|
||||
"build/assets/ba_data/data/languages/ukrainian.json": "3f9ee9567a068b760bbf25433177db89",
|
||||
"build/assets/ba_data/data/languages/turkish.json": "60691e93b58e1612901e8558b967697b",
|
||||
"build/assets/ba_data/data/languages/ukrainian.json": "6207f0e4048f9391526321d879a5d61e",
|
||||
"build/assets/ba_data/data/languages/venetian.json": "9bb01eea11d1627c0ceb876d26d86d0c",
|
||||
"build/assets/ba_data/data/languages/vietnamese.json": "0b3bcd0be6d0a138316ad1a1d2553962",
|
||||
"build/assets/ba_data/data/languages/vietnamese.json": "4bc1ba96ef291fed6d6409ad8cf7357f",
|
||||
"build/assets/ba_data/data/maps/big_g.json": "1dd301d490643088a435ce75df971054",
|
||||
"build/assets/ba_data/data/maps/bridgit.json": "6aea74805f4880cc11237c5734a24422",
|
||||
"build/assets/ba_data/data/maps/courtyard.json": "4b836554c8949bcd2ae382f5e3c1a9cc",
|
||||
@ -945,11 +945,45 @@
|
||||
"build/assets/ba_data/meshes/zoeTorso.bob": "26a1007e98902178d8c62fd7069d5da5",
|
||||
"build/assets/ba_data/meshes/zoeUpperArm.bob": "a8a881010ac1ee9ec5ca872d5c5e853a",
|
||||
"build/assets/ba_data/meshes/zoeUpperLeg.bob": "95b2502f74c70f934927f67cd505c3ad",
|
||||
"build/assets/ba_data/python-site-packages/certifi/__init__.py": "c935c5aee4052f1c76954ace35723dfe",
|
||||
"build/assets/ba_data/python-site-packages/certifi/__init__.py": "8133ab2f7828219b186d4cecb2d5443b",
|
||||
"build/assets/ba_data/python-site-packages/certifi/__main__.py": "ef02e73f8581609df189a9f61aca365b",
|
||||
"build/assets/ba_data/python-site-packages/certifi/cacert.pem": "47f35c87a8abc6ace093db7c215f1eab",
|
||||
"build/assets/ba_data/python-site-packages/certifi/cacert.pem": "072b2f0da8254144432a91d068fa6fb1",
|
||||
"build/assets/ba_data/python-site-packages/certifi/core.py": "c1b8c102093ea26587619677c7ec6016",
|
||||
"build/assets/ba_data/python-site-packages/typing_extensions.py": "1f6b4db70adb7ca05dff2b74f6cde8aa",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/__init__.py": "06cffcf88c8024218069f628c9938c50",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/_base_connection.py": "4404e529dbd3db128d9a2e60c6ed9243",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/_collections.py": "14963d7d43c0e51e777851c0e2868928",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/_request_methods.py": "87d6a7a77db1324e81d02f919c134f1a",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/_version.py": "46e3fbaaf7d02c2e55fcecc98deb5af8",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/connection.py": "3b49efceb61dfab0587286686e0e5ada",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/connectionpool.py": "e891fe6cdff0c03a3b670e225c0c4d88",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/contrib/__init__.py": "340c83beff7dcff8f5c7b87cd43cedaf",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/contrib/emscripten/__init__.py": "33531b60d1ff8b9073567240f2a1745f",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/contrib/emscripten/connection.py": "e9474e964b3feb3a523ccfab2b4b8f70",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/contrib/emscripten/fetch.py": "be8618e1c9a004108bf9f82f706503d7",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/contrib/emscripten/request.py": "da01c66ef924f2a2875d46adb87d7507",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/contrib/emscripten/response.py": "11208e765d5e9a1d481ded597e58c7d3",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/contrib/pyopenssl.py": "7a14ef1c58c55511581043ed25aebba3",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/contrib/socks.py": "bd5fed33c678f750ad9d1c754a26faf0",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/exceptions.py": "c346a13d762dcdff2f9cccc1d06c92d6",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/fields.py": "e24ef9e64962ca25322c0216cc4bc923",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/filepost.py": "d0a96fd7614fcaa368b26d8a769ff848",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/http2.py": "c307bd4c486d10070770c320145eb33c",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/poolmanager.py": "6dd72a45419efb9a2ab4e58c527d84d5",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/response.py": "f9f74417b5c2b4e5812b473435e3f455",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/util/__init__.py": "3ef2c56aa3ccfc25f466dc767f191b2c",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/util/connection.py": "888aa8c2f0a4a76749e6c3fd0df597e2",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/util/proxy.py": "2de685261596886eb8e2655e1af9ce7b",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/util/request.py": "a1fb665c16fa443eef15db73c5e29917",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/util/response.py": "e6a942417aa97215e358ae97b53bafe6",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/util/retry.py": "4eeffe54c7d400c4af731f02ef3fb074",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/util/ssl_.py": "c1b929bdfba831479f4b2d1538954536",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/util/ssl_match_hostname.py": "cbb28520c901282629d47375af2dd717",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/util/ssltransport.py": "0a51cd95ce75673b6c1117cb22da18b1",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/util/timeout.py": "e3bc037067fd6aaed823955be6f1792d",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/util/url.py": "6a37bafe6598aecba9e034be2085f583",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/util/util.py": "95e6d2fa1b0f310a991612421f1a29a1",
|
||||
"build/assets/ba_data/python-site-packages/urllib3/util/wait.py": "0fe73d2b5515a9c1ff2d43a83d5a419a",
|
||||
"build/assets/ba_data/textures/achievementBoxer.dds": "5b5c461e67f3a92105b56fe264a7dd28",
|
||||
"build/assets/ba_data/textures/achievementBoxer.ktx": "1055e009423ea1d0bc3b172f9d7328bb",
|
||||
"build/assets/ba_data/textures/achievementBoxer.pvr": "48f212189a6d83d29be410613b4f0005",
|
||||
@ -4062,50 +4096,50 @@
|
||||
"build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1",
|
||||
"build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae",
|
||||
"build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599",
|
||||
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "221f834ebd057ef663585d6ceef6806d",
|
||||
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "a2d8de14f13d4c3685fcaa317a7b27dc",
|
||||
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "39882077657944b36cf5491d43689329",
|
||||
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "7b0fd21a0cba86a1edfc41fa7f5b0336",
|
||||
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "e652b60f054852cf0dd7efcafea4998d",
|
||||
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "5deab4167830ac91daac9146c3768e04",
|
||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "53171f039acbcb69a64983bc78cc3af9",
|
||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "bc906b8824309daab45cfdd64f4f75cc",
|
||||
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "c9d66aa3f870b4820ccb00ad87edd30e",
|
||||
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "d99eeb561df547c8228110d66a90fbee",
|
||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "663c7ebd76302a57eeef8574f2244a70",
|
||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "e73ac0a48a7921d5407cbabaa005a03a",
|
||||
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "bf05c75c4991e13b9246d7638b6a276a",
|
||||
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "0edc9540a699d9b7af0916e0d8b286b3",
|
||||
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "15e24928603d9b31bfdabdcb1129535c",
|
||||
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "a15e467a1d7a9a080952ee02194a85f9",
|
||||
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "f09896f99981cd6af58257e4bfbffa73",
|
||||
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "deb4cdf43592b785f417d9e3992803ad",
|
||||
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "a46ba814582aef26306eb0811cd22d3f",
|
||||
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "2352638cf37627c0cf9d11f8686194b7",
|
||||
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "ffe8631c0ccc03751b4346fcf52d70ca",
|
||||
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "4241e93e1ea18414ee900046d1a62517",
|
||||
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "ffe8631c0ccc03751b4346fcf52d70ca",
|
||||
"build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "4241e93e1ea18414ee900046d1a62517",
|
||||
"build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "cd90771128eda8880ac3f9d8d9fc530b",
|
||||
"build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "093ec692aa3c6039ccc322d74f2d4448",
|
||||
"build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "cd90771128eda8880ac3f9d8d9fc530b",
|
||||
"build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "093ec692aa3c6039ccc322d74f2d4448",
|
||||
"build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "40f3006295c57114c2b5c467f463dd79",
|
||||
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "9049a93c01002bea0e6a580a106939c3",
|
||||
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "40f3006295c57114c2b5c467f463dd79",
|
||||
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "9049a93c01002bea0e6a580a106939c3",
|
||||
"build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "07ee17e424c0ea754fd4ec9844063460",
|
||||
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "0f34f852bf368c787f41533230767b3a",
|
||||
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "1dcd03f0cfc75a53c3e682a3a46c96a0",
|
||||
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "0f34f852bf368c787f41533230767b3a",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "67f48c2af7ec20dc98e6423d3ff24d67",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "0b0319aa1bbf146e14fe8103abb23bd3",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "9102b512eaf6bcf21d1dbcb9c597dbe4",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "5dbc7599675f5cae378fcc24b8908e20",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "eab27e872b8c3950b6bf9044fa3a42a2",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "d9b13c6efc258a4dabf158df63673b22",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "27050ecb092d111cf013a561cfbb8c05",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "a4d3c5812734e5780859e21c7398844a",
|
||||
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "f3045ecce09d6b02aa1143a63379f376",
|
||||
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "b2b23e2c86a0d8855047d39e4ce100f2",
|
||||
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "b0f07ceab1293255ba793bfcd8d9ce68",
|
||||
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "bf6c4be5753337a3a0ed32eac9081a41",
|
||||
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "a2b3ed524a6355287303b5775ff11334",
|
||||
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "4b90056bfa99a1816a56f9b53de33832",
|
||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "ca006356e178979499ce55f53c273218",
|
||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "dcf0f076fd0ea67540f43b4bd41e3060",
|
||||
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "b9cf3cacf64f9539c97ccdd08c6d9211",
|
||||
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "698c12289c1906613169297872b1e552",
|
||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "6ff0e52c7467d0f62bbee293fbb0ac65",
|
||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "c1bf97907381bd2e82d3c0290dfcbda1",
|
||||
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "e0874cef443a76f7fc7b33ab7801838a",
|
||||
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "c4542ae04345c472aeef9fa411cad2c1",
|
||||
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "d6bf17052772c041dda3a7d0048f5804",
|
||||
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "e0018525599f2e5b0ce9d3091799b6da",
|
||||
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "175db7f5d22fe1d8f1c80fef4f7679e9",
|
||||
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "d1817c7e638914e0362d598527fd0a04",
|
||||
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "2779fdf6b5968e55a2c056427dbce007",
|
||||
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "952860758eb4ccc9422b911a69ad9f7b",
|
||||
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "273ffd46a618fe347a570e6bd01d54a4",
|
||||
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "fa659b5d6119acba6570c92ce4d35ae2",
|
||||
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "273ffd46a618fe347a570e6bd01d54a4",
|
||||
"build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "fa659b5d6119acba6570c92ce4d35ae2",
|
||||
"build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "712db7e1fcd065a3a22faddc0def8670",
|
||||
"build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "4a4c19120f810ff5b4c7afbf11c23cf6",
|
||||
"build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "712db7e1fcd065a3a22faddc0def8670",
|
||||
"build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "4a4c19120f810ff5b4c7afbf11c23cf6",
|
||||
"build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "bbee8acd115ca24fc14146a9fc47c676",
|
||||
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "8b68b56dda9a9f421823e653b752445a",
|
||||
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "bbee8acd115ca24fc14146a9fc47c676",
|
||||
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "8b68b56dda9a9f421823e653b752445a",
|
||||
"build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "3108eb4d3a41bde33702e22fb893b218",
|
||||
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "3e5c5fd0a09f55ba7b05ce1e2ec7171e",
|
||||
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "1659535e95e3047fda529543e265ac97",
|
||||
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "3e5c5fd0a09f55ba7b05ce1e2ec7171e",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "7d60528bda9b3e6abc046462da6e3e96",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "bbbb1509630e43ed6d9f15a003369427",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "4f0d8de7fcc754e2443a1b52b476e5f7",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "448b0ef8b5b27a87f5993e9f75e93efa",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "130605828f3d97c90e195cccce392d4d",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "d548df51f78261788404040a1a2921b9",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "96fc6408bd113f219a2289c1f2829a8a",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "c57f7d3676b8c4abe9ee887dbbb0cc21",
|
||||
"src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c",
|
||||
"src/assets/ba_data/python/babase/_mgen/enums.py": "cb299985623bbcc86015cb103a424ae6",
|
||||
"src/ballistica/base/mgen/pyembed/binding_base.inc": "efa61468cf098f77cc6a234461d8b86d",
|
||||
|
||||
15
CHANGELOG.md
15
CHANGELOG.md
@ -1,5 +1,16 @@
|
||||
### 1.7.37 (build 21945, api 8, 2024-07-27)
|
||||
|
||||
### 1.7.37 (build 21947, api 8, 2024-07-31)
|
||||
- Finally got things updated so language testing works again, and made it a bit
|
||||
spiffier while at it. You now simply point the game at your test language and
|
||||
it will update dynamically as you make edits; no need to download any files.
|
||||
Example: if you are editing PirateSpeak, you should see an id such as
|
||||
'PirateSpeak_2248' in the website url. You can then go to the game and run
|
||||
`import babase; babase.app.lang.testlanguage('PirateSpeak_2248')` and you
|
||||
should instantly see some lovely pirate-speak. Also, any changes you make on
|
||||
the website should show up in the game within a few seconds. Enjoy!
|
||||
- Added `urllib3` to our bundled third party Python modules. The engine will be
|
||||
doing more heavy downloading with Asset Packages coming online so its time to
|
||||
upgrade to a more modern web client library than Python's basic built in
|
||||
urllib stuff.
|
||||
### 1.7.36 (build 21944, api 8, 2024-07-26)
|
||||
- Wired up Tokens, BombSquad's new purchasable currency. The first thing these
|
||||
can be used for is storage packs on ballistica.net, but this will expand to
|
||||
|
||||
@ -2,7 +2,7 @@ cpplint==1.6.1
|
||||
dmgbuild==1.6.1
|
||||
filelock==3.15.4
|
||||
furo==2024.7.18
|
||||
mypy==1.11.0
|
||||
mypy==1.11.1
|
||||
pbxproj==4.2.0
|
||||
pdoc==14.6.0
|
||||
pur==7.3.2
|
||||
@ -19,3 +19,4 @@ types-certifi==2021.10.8.3
|
||||
types-filelock==3.2.7
|
||||
types-requests==2.32.0.20240712
|
||||
typing_extensions==4.12.2
|
||||
urllib3==2.2.2
|
||||
|
||||
@ -953,6 +953,74 @@
|
||||
"ba_data/python-site-packages/certifi/cacert.pem",
|
||||
"ba_data/python-site-packages/certifi/core.py",
|
||||
"ba_data/python-site-packages/typing_extensions.py",
|
||||
"ba_data/python-site-packages/urllib3/__init__.py",
|
||||
"ba_data/python-site-packages/urllib3/__pycache__/__init__.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/__pycache__/_base_connection.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/__pycache__/_collections.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/__pycache__/_request_methods.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/__pycache__/_version.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/__pycache__/connection.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/__pycache__/connectionpool.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/__pycache__/exceptions.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/__pycache__/fields.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/__pycache__/filepost.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/__pycache__/http2.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/__pycache__/poolmanager.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/__pycache__/response.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/_base_connection.py",
|
||||
"ba_data/python-site-packages/urllib3/_collections.py",
|
||||
"ba_data/python-site-packages/urllib3/_request_methods.py",
|
||||
"ba_data/python-site-packages/urllib3/_version.py",
|
||||
"ba_data/python-site-packages/urllib3/connection.py",
|
||||
"ba_data/python-site-packages/urllib3/connectionpool.py",
|
||||
"ba_data/python-site-packages/urllib3/contrib/__init__.py",
|
||||
"ba_data/python-site-packages/urllib3/contrib/__pycache__/__init__.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/contrib/__pycache__/pyopenssl.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/contrib/__pycache__/socks.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/contrib/emscripten/__init__.py",
|
||||
"ba_data/python-site-packages/urllib3/contrib/emscripten/__pycache__/__init__.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/contrib/emscripten/__pycache__/connection.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/contrib/emscripten/__pycache__/fetch.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/contrib/emscripten/__pycache__/request.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/contrib/emscripten/__pycache__/response.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/contrib/emscripten/connection.py",
|
||||
"ba_data/python-site-packages/urllib3/contrib/emscripten/fetch.py",
|
||||
"ba_data/python-site-packages/urllib3/contrib/emscripten/request.py",
|
||||
"ba_data/python-site-packages/urllib3/contrib/emscripten/response.py",
|
||||
"ba_data/python-site-packages/urllib3/contrib/pyopenssl.py",
|
||||
"ba_data/python-site-packages/urllib3/contrib/socks.py",
|
||||
"ba_data/python-site-packages/urllib3/exceptions.py",
|
||||
"ba_data/python-site-packages/urllib3/fields.py",
|
||||
"ba_data/python-site-packages/urllib3/filepost.py",
|
||||
"ba_data/python-site-packages/urllib3/http2.py",
|
||||
"ba_data/python-site-packages/urllib3/poolmanager.py",
|
||||
"ba_data/python-site-packages/urllib3/response.py",
|
||||
"ba_data/python-site-packages/urllib3/util/__init__.py",
|
||||
"ba_data/python-site-packages/urllib3/util/__pycache__/__init__.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/util/__pycache__/connection.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/util/__pycache__/proxy.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/util/__pycache__/request.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/util/__pycache__/response.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/util/__pycache__/retry.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/util/__pycache__/ssl_.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/util/__pycache__/ssltransport.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/util/__pycache__/timeout.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/util/__pycache__/url.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/util/__pycache__/util.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/util/__pycache__/wait.cpython-312.opt-1.pyc",
|
||||
"ba_data/python-site-packages/urllib3/util/connection.py",
|
||||
"ba_data/python-site-packages/urllib3/util/proxy.py",
|
||||
"ba_data/python-site-packages/urllib3/util/request.py",
|
||||
"ba_data/python-site-packages/urllib3/util/response.py",
|
||||
"ba_data/python-site-packages/urllib3/util/retry.py",
|
||||
"ba_data/python-site-packages/urllib3/util/ssl_.py",
|
||||
"ba_data/python-site-packages/urllib3/util/ssl_match_hostname.py",
|
||||
"ba_data/python-site-packages/urllib3/util/ssltransport.py",
|
||||
"ba_data/python-site-packages/urllib3/util/timeout.py",
|
||||
"ba_data/python-site-packages/urllib3/util/url.py",
|
||||
"ba_data/python-site-packages/urllib3/util/util.py",
|
||||
"ba_data/python-site-packages/urllib3/util/wait.py",
|
||||
"ba_data/textures/achievementBoxer.dds",
|
||||
"ba_data/textures/achievementBoxer.ktx",
|
||||
"ba_data/textures/achievementBoxer.pvr",
|
||||
|
||||
@ -2706,6 +2706,40 @@ SCRIPT_TARGETS_PY_PRIVATE_COMMON = \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/certifi/__main__.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/certifi/core.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/typing_extensions.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/__init__.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/_base_connection.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/_collections.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/_request_methods.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/_version.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/connection.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/connectionpool.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/contrib/__init__.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/contrib/emscripten/__init__.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/contrib/emscripten/connection.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/contrib/emscripten/fetch.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/contrib/emscripten/request.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/contrib/emscripten/response.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/contrib/pyopenssl.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/contrib/socks.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/exceptions.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/fields.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/filepost.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/http2.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/poolmanager.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/response.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/__init__.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/connection.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/proxy.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/request.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/response.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/retry.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/ssl_.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/ssl_match_hostname.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/ssltransport.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/timeout.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/url.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/util.py \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/wait.py \
|
||||
$(BUILD_DIR)/sphinx/static/conf.py
|
||||
|
||||
SCRIPT_TARGETS_PYC_PRIVATE_COMMON = \
|
||||
@ -2713,6 +2747,40 @@ SCRIPT_TARGETS_PYC_PRIVATE_COMMON = \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/certifi/__pycache__/__main__.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/certifi/__pycache__/core.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/__pycache__/typing_extensions.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/__pycache__/__init__.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/__pycache__/_base_connection.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/__pycache__/_collections.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/__pycache__/_request_methods.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/__pycache__/_version.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/__pycache__/connection.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/__pycache__/connectionpool.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/contrib/__pycache__/__init__.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/contrib/emscripten/__pycache__/__init__.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/contrib/emscripten/__pycache__/connection.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/contrib/emscripten/__pycache__/fetch.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/contrib/emscripten/__pycache__/request.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/contrib/emscripten/__pycache__/response.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/contrib/__pycache__/pyopenssl.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/contrib/__pycache__/socks.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/__pycache__/exceptions.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/__pycache__/fields.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/__pycache__/filepost.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/__pycache__/http2.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/__pycache__/poolmanager.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/__pycache__/response.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/__pycache__/__init__.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/__pycache__/connection.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/__pycache__/proxy.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/__pycache__/request.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/__pycache__/response.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/__pycache__/retry.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/__pycache__/ssl_.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/__pycache__/ssltransport.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/__pycache__/timeout.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/__pycache__/url.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/__pycache__/util.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/ba_data/python-site-packages/urllib3/util/__pycache__/wait.cpython-312.opt-1.pyc \
|
||||
$(BUILD_DIR)/sphinx/static/__pycache__/conf.cpython-312.opt-1.pyc
|
||||
|
||||
# Rule to copy src asset scripts to dst.
|
||||
|
||||
@ -6,6 +6,7 @@ from __future__ import annotations
|
||||
import os
|
||||
import json
|
||||
import logging
|
||||
from functools import partial
|
||||
from typing import TYPE_CHECKING, overload, override
|
||||
|
||||
import _babase
|
||||
@ -32,6 +33,7 @@ class LanguageSubsystem(AppSubsystem):
|
||||
self._language: str | None = None
|
||||
self._language_target: AttrDict | None = None
|
||||
self._language_merged: AttrDict | None = None
|
||||
self._test_timer: babase.AppTimer | None = None
|
||||
|
||||
@property
|
||||
def locale(self) -> str:
|
||||
@ -93,9 +95,44 @@ class LanguageSubsystem(AppSubsystem):
|
||||
name for name in names if self._can_display_language(name)
|
||||
)
|
||||
|
||||
def testlanguage(self, langid: str) -> None:
|
||||
"""Set the app to test an in-progress language.
|
||||
|
||||
Pass a language id from the translation editor website as 'langid';
|
||||
something like 'Gibberish_3263'. Once set to testing, the engine
|
||||
will repeatedly download and apply that same test language, so
|
||||
changes can be made to it and observed live.
|
||||
"""
|
||||
print(
|
||||
f'Language test mode enabled.'
|
||||
f' Will fetch and apply \'{langid}\' every 5 seconds,'
|
||||
f' so you can see your changes live.'
|
||||
)
|
||||
self._test_timer = _babase.AppTimer(
|
||||
5.0, partial(self._update_test_language, langid), repeat=True
|
||||
)
|
||||
self._update_test_language(langid)
|
||||
|
||||
def _on_test_lang_response(
|
||||
self, langid: str, response: None | dict[str, Any]
|
||||
) -> None:
|
||||
if response is None:
|
||||
return
|
||||
self.setlanguage(response)
|
||||
print(f'Fetched and applied {langid}.')
|
||||
|
||||
def _update_test_language(self, langid: str) -> None:
|
||||
if _babase.app.classic is None:
|
||||
raise RuntimeError('This requires classic.')
|
||||
_babase.app.classic.master_server_v1_get(
|
||||
'bsLangGet',
|
||||
{'lang': langid, 'format': 'json'},
|
||||
partial(self._on_test_lang_response, langid),
|
||||
)
|
||||
|
||||
def setlanguage(
|
||||
self,
|
||||
language: str | None,
|
||||
language: str | dict | None,
|
||||
print_change: bool = True,
|
||||
store_to_config: bool = True,
|
||||
) -> None:
|
||||
@ -110,18 +147,6 @@ class LanguageSubsystem(AppSubsystem):
|
||||
cfg = _babase.app.config
|
||||
cur_language = cfg.get('Lang', None)
|
||||
|
||||
# Store this in the config if its changing.
|
||||
if language != cur_language and store_to_config:
|
||||
if language is None:
|
||||
if 'Lang' in cfg:
|
||||
del cfg['Lang'] # Clear it out for default.
|
||||
else:
|
||||
cfg['Lang'] = language
|
||||
cfg.commit()
|
||||
switched = True
|
||||
else:
|
||||
switched = False
|
||||
|
||||
with open(
|
||||
os.path.join(
|
||||
_babase.app.env.data_directory,
|
||||
@ -134,32 +159,55 @@ class LanguageSubsystem(AppSubsystem):
|
||||
) as infile:
|
||||
lenglishvalues = json.loads(infile.read())
|
||||
|
||||
# None implies default.
|
||||
if language is None:
|
||||
language = self.default_language
|
||||
try:
|
||||
if language == 'English':
|
||||
lmodvalues = None
|
||||
else:
|
||||
lmodfile = os.path.join(
|
||||
_babase.app.env.data_directory,
|
||||
'ba_data',
|
||||
'data',
|
||||
'languages',
|
||||
language.lower() + '.json',
|
||||
)
|
||||
with open(lmodfile, encoding='utf-8') as infile:
|
||||
lmodvalues = json.loads(infile.read())
|
||||
except Exception:
|
||||
logging.exception("Error importing language '%s'.", language)
|
||||
_babase.screenmessage(
|
||||
f"Error setting language to '{language}'; see log for details.",
|
||||
color=(1, 0, 0),
|
||||
)
|
||||
# Special case - passing a complete dict for testing.
|
||||
if isinstance(language, dict):
|
||||
self._language = 'Custom'
|
||||
lmodvalues = language
|
||||
switched = False
|
||||
lmodvalues = None
|
||||
print_change = False
|
||||
store_to_config = False
|
||||
else:
|
||||
# Ok, we're setting a real language.
|
||||
|
||||
self._language = language
|
||||
# Store this in the config if its changing.
|
||||
if language != cur_language and store_to_config:
|
||||
if language is None:
|
||||
if 'Lang' in cfg:
|
||||
del cfg['Lang'] # Clear it out for default.
|
||||
else:
|
||||
cfg['Lang'] = language
|
||||
cfg.commit()
|
||||
switched = True
|
||||
else:
|
||||
switched = False
|
||||
|
||||
# None implies default.
|
||||
if language is None:
|
||||
language = self.default_language
|
||||
try:
|
||||
if language == 'English':
|
||||
lmodvalues = None
|
||||
else:
|
||||
lmodfile = os.path.join(
|
||||
_babase.app.env.data_directory,
|
||||
'ba_data',
|
||||
'data',
|
||||
'languages',
|
||||
language.lower() + '.json',
|
||||
)
|
||||
with open(lmodfile, encoding='utf-8') as infile:
|
||||
lmodvalues = json.loads(infile.read())
|
||||
except Exception:
|
||||
logging.exception("Error importing language '%s'.", language)
|
||||
_babase.screenmessage(
|
||||
f"Error setting language to '{language}';"
|
||||
f' see log for details.',
|
||||
color=(1, 0, 0),
|
||||
)
|
||||
switched = False
|
||||
lmodvalues = None
|
||||
|
||||
self._language = language
|
||||
|
||||
# Create an attrdict of *just* our target language.
|
||||
self._language_target = AttrDict()
|
||||
@ -207,6 +255,7 @@ class LanguageSubsystem(AppSubsystem):
|
||||
random_names = [n for n in random_names if n != '']
|
||||
_babase.set_internal_language_keys(internal_vals, random_names)
|
||||
if switched and print_change:
|
||||
assert isinstance(language, str)
|
||||
_babase.screenmessage(
|
||||
Lstr(
|
||||
resource='languageSetText',
|
||||
|
||||
@ -4,11 +4,13 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import ssl
|
||||
import socket
|
||||
import threading
|
||||
import ipaddress
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
import socket
|
||||
pass
|
||||
|
||||
# Timeout for standard functions talking to the master-server/etc.
|
||||
DEFAULT_REQUEST_TIMEOUT_SECONDS = 60
|
||||
@ -18,6 +20,10 @@ class NetworkSubsystem:
|
||||
"""Network related app subsystem."""
|
||||
|
||||
def __init__(self) -> None:
|
||||
# Our shared SSL context. Creating these can be expensive so we
|
||||
# create it here once and recycle for our various connections.
|
||||
self.sslcontext = ssl.create_default_context()
|
||||
|
||||
# Anyone accessing/modifying zone_pings should hold this lock,
|
||||
# as it is updated by a background thread.
|
||||
self.zone_pings_lock = threading.Lock()
|
||||
@ -27,8 +33,6 @@ class NetworkSubsystem:
|
||||
# that a nearby server has been pinged.
|
||||
self.zone_pings: dict[str, float] = {}
|
||||
|
||||
self._sslcontext: ssl.SSLContext | None = None
|
||||
|
||||
# For debugging.
|
||||
self.v1_test_log: str = ''
|
||||
self.v1_ctest_results: dict[int, str] = {}
|
||||
@ -36,42 +40,12 @@ class NetworkSubsystem:
|
||||
self.transport_state = 'uninited'
|
||||
self.server_time_offset_hours: float | None = None
|
||||
|
||||
@property
|
||||
def sslcontext(self) -> ssl.SSLContext:
|
||||
"""Create/return our shared SSLContext.
|
||||
|
||||
This can be reused for all standard urllib requests/etc.
|
||||
"""
|
||||
# Note: I've run into older Android devices taking upwards of 1 second
|
||||
# to put together a default SSLContext, so recycling one can definitely
|
||||
# be a worthwhile optimization. This was suggested to me in this
|
||||
# thread by one of Python's SSL maintainers:
|
||||
# https://github.com/python/cpython/issues/94637
|
||||
if self._sslcontext is None:
|
||||
self._sslcontext = ssl.create_default_context()
|
||||
return self._sslcontext
|
||||
|
||||
|
||||
def get_ip_address_type(addr: str) -> socket.AddressFamily:
|
||||
"""Return socket.AF_INET6 or socket.AF_INET4 for the provided address."""
|
||||
import socket
|
||||
|
||||
socket_type = None
|
||||
|
||||
# First try it as an ipv4 address.
|
||||
try:
|
||||
socket.inet_pton(socket.AF_INET, addr)
|
||||
socket_type = socket.AF_INET
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
# Hmm apparently not ipv4; try ipv6.
|
||||
if socket_type is None:
|
||||
try:
|
||||
socket.inet_pton(socket.AF_INET6, addr)
|
||||
socket_type = socket.AF_INET6
|
||||
except OSError:
|
||||
pass
|
||||
if socket_type is None:
|
||||
raise ValueError(f'addr seems to be neither v4 or v6: {addr}')
|
||||
return socket_type
|
||||
version = ipaddress.ip_address(addr).version
|
||||
if version == 4:
|
||||
return socket.AF_INET
|
||||
assert version == 6
|
||||
return socket.AF_INET6
|
||||
|
||||
@ -96,13 +96,9 @@ class MasterServerV1CallThread(threading.Thread):
|
||||
self._data = babase.utf8_all(self._data)
|
||||
babase.set_thread_name('BA_ServerCallThread')
|
||||
if self._request_type == 'get':
|
||||
url = (
|
||||
plus.get_master_server_address()
|
||||
+ '/'
|
||||
+ self._request
|
||||
+ '?'
|
||||
+ urllib.parse.urlencode(self._data)
|
||||
)
|
||||
msaddr = plus.get_master_server_address()
|
||||
dataenc = urllib.parse.urlencode(self._data)
|
||||
url = f'{msaddr}/{self._request}?{dataenc}'
|
||||
assert url is not None
|
||||
response = urllib.request.urlopen(
|
||||
urllib.request.Request(
|
||||
@ -114,7 +110,7 @@ class MasterServerV1CallThread(threading.Thread):
|
||||
timeout=babase.DEFAULT_REQUEST_TIMEOUT_SECONDS,
|
||||
)
|
||||
elif self._request_type == 'post':
|
||||
url = plus.get_master_server_address() + '/' + self._request
|
||||
url = f'{plus.get_master_server_address()}/{self._request}'
|
||||
assert url is not None
|
||||
response = urllib.request.urlopen(
|
||||
urllib.request.Request(
|
||||
|
||||
@ -52,7 +52,7 @@ if TYPE_CHECKING:
|
||||
|
||||
# Build number and version of the ballistica binary we expect to be
|
||||
# using.
|
||||
TARGET_BALLISTICA_BUILD = 21945
|
||||
TARGET_BALLISTICA_BUILD = 21947
|
||||
TARGET_BALLISTICA_VERSION = '1.7.37'
|
||||
|
||||
|
||||
|
||||
@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int {
|
||||
namespace ballistica {
|
||||
|
||||
// These are set automatically via script; don't modify them here.
|
||||
const int kEngineBuildNumber = 21945;
|
||||
const int kEngineBuildNumber = 21947;
|
||||
const char* kEngineVersion = "1.7.37";
|
||||
const int kEngineApiVersion = 8;
|
||||
|
||||
|
||||
@ -40,3 +40,15 @@ class LoginType(Enum):
|
||||
return 'Google Play Games'
|
||||
case cls.GAME_CENTER:
|
||||
return 'Game Center'
|
||||
|
||||
@property
|
||||
def displaynameshort(self) -> str:
|
||||
"""Human readable name for this value."""
|
||||
cls = type(self)
|
||||
match self:
|
||||
case cls.EMAIL:
|
||||
return 'Email'
|
||||
case cls.GPGS:
|
||||
return 'GPGS'
|
||||
case cls.GAME_CENTER:
|
||||
return 'Game Center'
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user