Merge pull request #115 from imayushsaini/api9

Api9
This commit is contained in:
Ayush Saini 2025-04-13 12:20:14 +05:30 committed by GitHub
commit dc5a16f744
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 1595 additions and 1188 deletions

44
config.json Normal file
View file

@ -0,0 +1,44 @@
{
"party_name":"BombSquad Community Server",
"party_is_public":true,
"authenticate_clients":true,
"admins":[
"pb-yOuRAccOuNtIdHErE",
"pb-aNdMayBeAnotherHeRE"
],
"enable_default_kick_voting":true,
"port":43210,
"max_party_size":6,
"session_max_players_override":8,
"session_type":"ffa",
"playlist_code":12345,
"playlist_shuffle":true,
"auto_balance_teams":true,
"enable_telnet":false,
"teams_series_length":7,
"ffa_series_length":24,
"stats_url":"https://discord.gg/ucyaesh",
"clean_exit_minutes":60,
"unclean_exit_minutes":90,
"idle_exit_minutes":20,
"show_tutorial":false,
"team_names":[
"ladoo",
"barfi"
],
"team_colors":[
[
0.8,
0.0,
0.6
],
[
0,
1,
0.8
]
],
"enable_queue":true,
"protocol_version":35,
"player_rejoin_cooldown":10.0
}

View file

@ -1,175 +0,0 @@
# To configure your server, create a config.toml file in the same directory
# as the ballisticakit_server script. The config_template.toml file can be
# copied or renamed as a convenient starting point.
# Uncomment any of these values to override defaults.
# Name of our server in the public parties list.
party_name = "BombSquad Community Server"
# If true, your party will show up in the global public party list
# Otherwise it will still be joinable via LAN or connecting by IP
# address.
#party_is_public = true
# If true, all connecting clients will be authenticated through the
# master server to screen for fake account info. Generally this
# should always be enabled unless you are hosting on a LAN with no
# internet connection.
#authenticate_clients = true
# IDs of server admins. Server admins are not kickable through the
# default kick vote system and they are able to kick players without
# a vote. To get your account id, enter 'getaccountid' in
# settings->advanced->enter-code.
#admins = ["pb-yOuRAccOuNtIdHErE", "pb-aNdMayBeAnotherHeRE"]
# Whether the default kick-voting system is enabled.
#enable_default_kick_voting = true
# To be included in the public server list, your server MUST be
# accessible via an ipv4 address. By default, the master server will
# try to use the address your server contacts it from, but this may
# be an ipv6 address these days so you may need to provide an ipv4
# address explicitly.
#public_ipv4_address = "123.123.123.123"
# You can optionally provide an ipv6 address for your server for the
# public server list. Unlike ipv4, a server is not required to have
# an ipv6 address to appear in the list, but is still good to
# provide when available since more and more devices are using ipv6
# these days. Your server's ipv6 address will be autodetected if
# your server uses ipv6 when communicating with the master server. You
# can pass an empty string here to explicitly disable the ipv6
# address.
#public_ipv6_address = "123A::A123:23A1:A312:12A3:A213:2A13"
# UDP port to host on. Change this to work around firewalls or run
# multiple servers on one machine.
#
# 43210 is the default and the only port that will show up in the
# LAN browser tab.
#port = 43210
# Max devices in the party. Note that this does *NOT* mean max
# players. Any device in the party can have more than one player on
# it if they have multiple controllers. Also, this number currently
# includes the server so generally make it 1 bigger than you need.
#max_party_size = 6
# Max players that can join a session. If present this will override
# the session's preferred max_players. if a value below 0 is given
# player limit will be removed.
#session_max_players_override = 8
# Options here are 'ffa' (free-for-all), 'teams' and 'coop'
# (cooperative) This value is ignored if you supply a playlist_code
# (see below).
#session_type = "ffa"
# Playlist-code for teams or free-for-all mode sessions. To host
# your own custom playlists, use the 'share' functionality in the
# playlist editor in the regular version of the game. This will give
# you a numeric code you can enter here to host that playlist.
#playlist_code = 12345
# Alternately, you can embed playlist data here instead of using
# codes. Make sure to set session_type to the correct type for the
# data here.
#playlist_inline = []
# Whether to shuffle the playlist or play its games in designated
# order.
#playlist_shuffle = true
# If true, keeps team sizes equal by disallowing joining the largest
# team (teams mode only).
#auto_balance_teams = true
# The campaign used when in co-op session mode. Do
# print(ba.app.campaigns) to see available campaign names.
#coop_campaign = "Easy"
# The level name within the campaign used in co-op session mode. For
# campaign name FOO, do print(ba.app.campaigns['FOO'].levels) to see
# available level names.
#coop_level = "Onslaught Training"
# Whether to enable telnet access.
#
# IMPORTANT: This option is no longer available, as it was being
# used for exploits. Live access to the running server is still
# possible through the mgr.cmd() function in the server script. Run
# your server through tools such as 'screen' or 'tmux' and you can
# reconnect to it remotely over a secure ssh connection.
#enable_telnet = false
# Series length in teams mode (7 == 'best-of-7' series; a team must
# get 4 wins)
#teams_series_length = 7
# Points to win in free-for-all mode (Points are awarded per game
# based on performance)
#ffa_series_length = 24
# If you have a custom stats webpage for your server, you can use
# this to provide a convenient in-game link to it in the
# server-browser alongside the server name.
#
# if ${ACCOUNT} is present in the string, it will be replaced by the
# currently-signed-in account's id. To fetch info about an account,
# your back-end server can use the following url:
# https://legacy.ballistica.net/accountquery?id=ACCOUNT_ID_HERE
stats_url = "https://discord.gg/ucyaesh"
# If present, the server subprocess will attempt to gracefully exit
# after this amount of time. A graceful exit can occur at the end of
# a series or other opportune time. Server-managers set to
# auto-restart (the default) will then spin up a fresh subprocess.
# This mechanism can be useful to clear out any memory leaks or
# other accumulated bad state in the server subprocess.
#clean_exit_minutes = 60
# If present, the server subprocess will shut down immediately after
# this amount of time. This can be useful as a fallback for
# clean_exit_time. The server manager will then spin up a fresh
# server subprocess if auto-restart is enabled (the default).
#unclean_exit_minutes = 90
# If present, the server subprocess will shut down immediately if
# this amount of time passes with no activity from any players. The
# server manager will then spin up a fresh server subprocess if
# auto-restart is enabled (the default).
#idle_exit_minutes = 20
# Should the tutorial be shown at the beginning of games?
#show_tutorial = false
# Team names (teams mode only).
team_names = ["ladoo", "barfi"]
# Team colors (teams mode only).
team_colors = [[0.8, 0.0, 0.6], [0, 1, 0.8]]
# 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 = true
# Protocol version we host with. Currently the default is 33 which
# still allows older 1.4 game clients to connect. Explicitly setting
# to 35 no longer allows those clients but adds/fixes a few things
# such as making camera shake properly work in net games.
#protocol_version = 35
# How many seconds individual players from a given account must wait
# before rejoining the game. This can help suppress exploits
# involving leaving and rejoining or switching teams rapidly.
#player_rejoin_cooldown = 10.0
# Log levels for particular loggers, overriding the engine's
# defaults. Valid values are NOTSET, DEBUG, INFO, WARNING, ERROR, or
# CRITICAL.
#[log_levels]
#"ba.lifecycle" = "INFO"
#"ba.assets" = "INFO"

View file

@ -381,7 +381,19 @@ def on_player_request(func) -> bool:
Session.on_player_request = on_player_request(Session.on_player_request)
ServerController._access_check_response = servercontroller._access_check_response
def on_access_check_response(self, data):
if data is not None:
addr = data['address']
port = data['port']
if settings["ballistica_web"]["enable"]:
bs.set_public_party_stats_url(
f'https://bombsquad-community.web.app/server-manager/?host={addr}&port={port}')
servercontroller._access_check_response(self, data)
ServerController._access_check_response = on_access_check_response
def wrap_player_spaz_init(original_class):

View file

@ -10,13 +10,13 @@ party_name = "BombSquad Community Server"
# If true, your party will show up in the global public party list
# Otherwise it will still be joinable via LAN or connecting by IP
# address.
#party_is_public = true
party_is_public = true
# If true, all connecting clients will be authenticated through the
# master server to screen for fake account info. Generally this
# should always be enabled unless you are hosting on a LAN with no
# internet connection.
#authenticate_clients = true
authenticate_clients = true
# IDs of server admins. Server admins are not kickable through the default
# kick vote system and they are able to kick players without a vote. To get
@ -24,7 +24,7 @@ party_name = "BombSquad Community Server"
admins = ["pb-yOuRAccOuNtIdHErE", "pb-aNdMayBeAnotherHeRE"]
# Whether the default kick-voting system is enabled.
#enable_default_kick_voting = true
enable_default_kick_voting = true
# To be included in the public server list, your server MUST be
# accessible via an ipv4 address. By default, the master server will
@ -48,23 +48,23 @@ admins = ["pb-yOuRAccOuNtIdHErE", "pb-aNdMayBeAnotherHeRE"]
#
# 43210 is the default and the only port that will show up in the
# LAN browser tab.
#port = 43210
port = 43210
# Max devices in the party. Note that this does *NOT* mean max
# players. Any device in the party can have more than one player on
# it if they have multiple controllers. Also, this number currently
# includes the server so generally make it 1 bigger than you need.
#max_party_size = 6
max_party_size = 6
# Max players that can join a session. If present this will override
# the session's preferred max_players. if a value below 0 is given
# player limit will be removed.
#session_max_players_override = 8
session_max_players_override = 8
# Options here are 'ffa' (free-for-all), 'teams' and 'coop'
# (cooperative) This value is ignored if you supply a playlist_code
# (see below).
#session_type = "ffa"
session_type = "ffa"
# Playlist-code for teams or free-for-all mode sessions.
# To host your own custom playlists, use the 'share' functionality in the
@ -80,11 +80,11 @@ playlist_code = 12345
# Whether to shuffle the playlist or play its games in designated
# order.
#playlist_shuffle = true
playlist_shuffle = true
# If true, keeps team sizes equal by disallowing joining the largest
# team (teams mode only).
#auto_balance_teams = true
auto_balance_teams = true
# The campaign used when in co-op session mode. Do
# print(ba.app.campaigns) to see available campaign names.
@ -102,7 +102,7 @@ playlist_code = 12345
# possible through the mgr.cmd() function in the server script. Run
# your server through tools such as 'screen' or 'tmux' and you can
# reconnect to it remotely over a secure ssh connection.
#enable_telnet = false
enable_telnet = false
# Series length in teams mode (7 == 'best-of-7' series; a team must
# get 4 wins)
@ -128,22 +128,22 @@ stats_url = "https://discord.gg/ucyaesh"
# auto-restart (the default) will then spin up a fresh subprocess.
# This mechanism can be useful to clear out any memory leaks or
# other accumulated bad state in the server subprocess.
#clean_exit_minutes = 60
clean_exit_minutes = 60
# If present, the server subprocess will shut down immediately after
# this amount of time. This can be useful as a fallback for
# clean_exit_time. The server manager will then spin up a fresh
# server subprocess if auto-restart is enabled (the default).
#unclean_exit_minutes = 90
unclean_exit_minutes = 90
# If present, the server subprocess will shut down immediately if
# this amount of time passes with no activity from any players. The
# server manager will then spin up a fresh server subprocess if
# auto-restart is enabled (the default).
#idle_exit_minutes = 20
idle_exit_minutes = 20
# Should the tutorial be shown at the beginning of games?
#show_tutorial = false
show_tutorial = false
# Team names (teams mode only).
team_names = ["ladoo", "barfi"]
@ -154,15 +154,15 @@ team_colors = [[0.8, 0.0, 0.6], [0, 1, 0.8]]
# 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 = true
enable_queue = true
# Protocol version we host with. Currently the default is 33 which
# still allows older 1.4 game clients to connect. Explicitly setting
# to 35 no longer allows those clients but adds/fixes a few things
# such as making camera shake properly work in net games.
#protocol_version = 35
protocol_version = 35
# How many seconds individual players from a given account must wait
# before rejoining the game. This can help suppress exploits
# involving leaving and rejoining or switching teams rapidly.
#player_rejoin_cooldown = 10.0
player_rejoin_cooldown = 10.0

View file

@ -15,7 +15,7 @@ cLastIdle = 0
class checkIdle(object):
def start(self):
self.t1 = bs.timer(2, babase.Call(self.check), repeat=True)
self.t1 = bs.AppTimer(2, babase.Call(self.check), repeat=True)
self.lobbies = {}
def check(self):

View file

@ -3,6 +3,7 @@
import time
import _babase
import _bascenev1
import bascenev1 as bs
@ -81,11 +82,11 @@ def vote(pb_id, client_id, vote_type):
except:
pass
elif vote_type == "nv":
_babase.chatmessage("/nv")
_bascenev1.chatmessage("/nv")
elif vote_type == "dv":
_babase.chatmessage("/dv")
_bascenev1.chatmessage("/dv")
elif vote_type == "sm":
_babase.chatmessage("/sm")
_bascenev1.chatmessage("/sm")
def reset_votes():

View file

@ -16,6 +16,7 @@ from typing import Type
import babase
import bascenev1 as bs
from tools import servercheck, logger, notification_manager
from tools.file_handle import OpenJson
stats = {}
leaderboard = {}
@ -29,7 +30,7 @@ class BsDataThread(object):
global stats
stats["name"] = _babase.app.classic.server._config.party_name
stats["discord"] = get_server_settings(
)["ballistica_web"]["server_password"]
)["ballistica_web"]["discord_link"]
stats["vapidKey"] = notification_manager.get_vapid_keys()["public_key"]
self.refresh_stats_cache_timer = bs.AppTimer(8, babase.Call(
@ -117,7 +118,7 @@ class BsDataThread(object):
return data
v = bs.AppTimer(5, babase.Call(
v = bs.AppTimer(8, babase.Call(
BsDataThread))
@ -273,10 +274,10 @@ def get_server_config():
def update_server_config(config):
current_dir = os.getcwd()
file_path = os.path.join(current_dir, '..', 'config.yaml')
file_path = os.path.join(current_dir, '..', 'config.json')
with open(file_path, "w") as f:
f.write(yaml.dump(config))
with OpenJson(file_path) as f:
f.dump(config, indent=4)
def do_action(action, value):

View file

@ -1,4 +1,4 @@
# ba_meta require api 8
# ba_meta require api 9
'''
Character Chooser by Mr.Smoothy
@ -36,7 +36,6 @@ from typing import TYPE_CHECKING
import babase
import bauiv1 as bui
from babase._error import print_error
from babase._language import Lstr
if TYPE_CHECKING:
@ -248,11 +247,11 @@ def handlemessage(self, msg: Any) -> Any:
# If we've been removed from the lobby, ignore this stuff.
if self._dead:
print_error('chooser got ChangeMessage after dying')
print('chooser got ChangeMessage after dying')
return
if not self._text_node:
print_error('got ChangeMessage after nodes died')
print('got ChangeMessage after nodes died')
return
if msg.what == 'characterchooser':
self._click_sound.play()

File diff suppressed because it is too large Load diff

View file

@ -27,6 +27,8 @@ NOTE: This file was autogenerated by batools.dummymodule; do not edit by hand.
# pylint: disable=redefined-outer-name
# pylint: disable=invalid-name
# pylint: disable=no-value-for-parameter
# pylint: disable=unused-import
# pylint: disable=too-many-positional-arguments
from __future__ import annotations
@ -45,10 +47,129 @@ def _uninferrable() -> Any:
return _not_a_real_variable # type: ignore
def animate_root_ui_chest_unlock_time(
*,
chestid: str,
duration: float,
startvalue: float,
endvalue: float,
) -> None:
"""Animate the unlock time on a chest."""
# This is a dummy stub; the actual implementation is native code.
return None
def animate_root_ui_tickets(
*,
duration: float,
startvalue: int,
endvalue: int,
) -> None:
"""Animate the displayed tickets value."""
# This is a dummy stub; the actual implementation is native code.
return None
def animate_root_ui_tokens(
*,
duration: float,
startvalue: int,
endvalue: int,
) -> None:
"""Animate the displayed tokens value."""
# This is a dummy stub; the actual implementation is native code.
return None
def classic_app_mode_activate() -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
def classic_app_mode_deactivate() -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
def classic_app_mode_handle_app_intent_default() -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
def classic_app_mode_handle_app_intent_exec(command: str) -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
def get_account_display_state() -> Any:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return _uninferrable()
def set_account_display_state(vals: dict) -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
def set_have_live_account_values(have: bool) -> None:
"""Inform the native layer whether we are being fed with live account
values from the server.
"""
# This is a dummy stub; the actual implementation is native code.
return None
def set_root_ui_account_values(
*,
tickets: int,
tokens: int,
league_type: str,
league_number: int,
league_rank: int,
achievements_percent_text: str,
level_text: str,
xp_text: str,
inbox_count: int,
inbox_count_is_max: bool,
inbox_announce_text: str,
gold_pass: bool,
chest_0_appearance: str,
chest_1_appearance: str,
chest_2_appearance: str,
chest_3_appearance: str,
chest_0_create_time: float,
chest_1_create_time: float,
chest_2_create_time: float,
chest_3_create_time: float,
chest_0_unlock_time: float,
chest_1_unlock_time: float,
chest_2_unlock_time: float,
chest_3_unlock_time: float,
chest_0_unlock_tokens: int,
chest_1_unlock_tokens: int,
chest_2_unlock_tokens: int,
chest_3_unlock_tokens: int,
chest_0_ad_allow_time: float,
chest_1_ad_allow_time: float,
chest_2_ad_allow_time: float,
chest_3_ad_allow_time: float,
) -> None:
"""Pass values to the native layer for use in the root UI or elsewhere."""
# This is a dummy stub; the actual implementation is native code.
return None
def set_stress_testing(
testing: bool, player_count: int, attract_mode: bool
) -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
@ -56,4 +177,5 @@ def value_test(
arg: str, change: float | None = None, absolute: float | None = None
) -> float:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return float()

View file

@ -27,6 +27,8 @@ NOTE: This file was autogenerated by batools.dummymodule; do not edit by hand.
# pylint: disable=redefined-outer-name
# pylint: disable=invalid-name
# pylint: disable=no-value-for-parameter
# pylint: disable=unused-import
# pylint: disable=too-many-positional-arguments
from __future__ import annotations
@ -49,11 +51,13 @@ def add_v1_account_transaction(
transaction: dict, callback: Callable | None = None
) -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
def can_show_ad() -> bool:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return bool()
@ -63,74 +67,88 @@ def game_service_has_leaderboard(game: str, config: str) -> bool:
Given a game and config string, returns whether there is a leaderboard
for it on the game service.
"""
# This is a dummy stub; the actual implementation is native code.
return bool()
def get_classic_news_show() -> str:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return str()
def get_master_server_address(source: int = -1, version: int = 1) -> str:
"""(internal)
Return the address of the master server.
"""
return str()
def get_news_show() -> str:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return str()
def get_price(item: str) -> str | None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return ''
def get_purchased(item: str) -> bool:
"""(internal)"""
return bool()
def get_purchases_state() -> int:
"""(internal)"""
return int()
def get_v1_account_display_string(full: bool = True) -> str:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return str()
def get_v1_account_misc_read_val(name: str, default_value: Any) -> Any:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return _uninferrable()
def get_v1_account_misc_read_val_2(name: str, default_value: Any) -> Any:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return _uninferrable()
def get_v1_account_misc_val(name: str, default_value: Any) -> Any:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return _uninferrable()
def get_v1_account_name() -> str:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return str()
def get_v1_account_product_purchased(item: str) -> bool:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return bool()
def get_v1_account_product_purchases_state() -> int:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return int()
def get_v1_account_public_login_id() -> str | None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return ''
def get_v1_account_state() -> str:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return str()
def get_v1_account_state_num() -> int:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return int()
@ -139,84 +157,97 @@ def get_v1_account_ticket_count() -> int:
Returns the number of tickets for the current account.
"""
# This is a dummy stub; the actual implementation is native code.
return int()
def get_v1_account_type() -> str:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return str()
def get_v2_fleet() -> str:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return str()
def has_video_ads() -> bool:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return bool()
def have_incentivized_ad() -> bool:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return bool()
def have_outstanding_v1_account_transactions() -> bool:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return bool()
def in_game_purchase(item: str, price: int) -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
def is_blessed() -> bool:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return bool()
def mark_config_dirty() -> None:
"""(internal)
Category: General Utility Functions
"""
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
def on_app_loading() -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
def power_ranking_query(callback: Callable, season: Any = None) -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
def purchase(item: str) -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
def report_achievement(achievement: str, pass_to_account: bool = True) -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
def reset_achievements() -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
def restore_purchases() -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
def run_v1_account_transactions() -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
@ -224,6 +255,7 @@ def show_ad(
purpose: str, on_completion_call: Callable[[], None] | None = None
) -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
@ -231,6 +263,7 @@ def show_ad_2(
purpose: str, on_completion_call: Callable[[bool], None] | None = None
) -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
@ -240,22 +273,19 @@ def show_game_service_ui(
game_version: str | None = None,
) -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
def sign_in_v1(account_type: str) -> None:
"""(internal)
Category: General Utility Functions
"""
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
def sign_out_v1(v2_embedded: bool = False) -> None:
"""(internal)
Category: General Utility Functions
"""
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
@ -278,11 +308,19 @@ def submit_score(
to devote my time to improving the game instead of trying to make the
score server more mischief-proof.
"""
# This is a dummy stub; the actual implementation is native code.
return None
def supports_purchases() -> bool:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return bool()
def tournament_query(
callback: Callable[[dict | None], None], args: dict
) -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None

File diff suppressed because it is too large Load diff

View file

@ -27,6 +27,8 @@ NOTE: This file was autogenerated by batools.dummymodule; do not edit by hand.
# pylint: disable=redefined-outer-name
# pylint: disable=invalid-name
# pylint: disable=no-value-for-parameter
# pylint: disable=unused-import
# pylint: disable=too-many-positional-arguments
from __future__ import annotations
@ -50,9 +52,11 @@ class Hello:
def testmethod(self, val: int = 0) -> None:
"""Just testing."""
# This is a dummy stub; the actual implementation is native code.
return None
def hello_again_world() -> None:
"""Another hello world print."""
# This is a dummy stub; the actual implementation is native code.
return None

View file

@ -27,6 +27,8 @@ NOTE: This file was autogenerated by batools.dummymodule; do not edit by hand.
# pylint: disable=redefined-outer-name
# pylint: disable=invalid-name
# pylint: disable=no-value-for-parameter
# pylint: disable=unused-import
# pylint: disable=too-many-positional-arguments
from __future__ import annotations
@ -48,25 +50,27 @@ def _uninferrable() -> Any:
class Mesh:
"""Category: **User Interface Classes**"""
"""Mesh asset for local user interface purposes."""
pass
class Sound:
"""Category: **User Interface Classes**"""
"""Sound asset for local user interface purposes."""
def play(self) -> None:
def play(self, volume: float = 1.0) -> None:
"""Play the sound locally."""
# This is a dummy stub; the actual implementation is native code.
return None
def stop(self) -> None:
"""Stop the sound if it is playing."""
# This is a dummy stub; the actual implementation is native code.
return None
class Texture:
"""Category: **User Interface Classes**"""
"""Texture asset for local user interface purposes."""
pass
@ -74,8 +78,6 @@ class Texture:
class Widget:
"""Internal type for low level UI elements; buttons, windows, etc.
Category: **User Interface Classes**
This class represents a weak reference to a widget object
in the internal C++ layer. Currently, functions such as
bauiv1.buttonwidget() must be used to instantiate or edit these.
@ -94,16 +96,19 @@ class Widget:
def activate(self) -> None:
"""Activates a widget; the same as if it had been clicked."""
# This is a dummy stub; the actual implementation is native code.
return None
def add_delete_callback(self, call: Callable) -> None:
"""Add a call to be run immediately after this widget is destroyed."""
# This is a dummy stub; the actual implementation is native code.
return None
def delete(self, ignore_missing: bool = True) -> None:
"""Delete the Widget. Ignores already-deleted Widgets if ignore_missing
is True; otherwise an Exception is thrown.
"""
# This is a dummy stub; the actual implementation is native code.
return None
def exists(self) -> bool:
@ -114,10 +119,12 @@ class Widget:
functionality, so a statement such as "if mywidget" will do
the right thing both for Widget objects and values of None.
"""
# This is a dummy stub; the actual implementation is native code.
return bool()
def get_children(self) -> list[bauiv1.Widget]:
"""Returns any child Widgets of this Widget."""
# This is a dummy stub; the actual implementation is native code.
import bauiv1
return [bauiv1.Widget()]
@ -127,10 +134,12 @@ class Widget:
of the screen. This can be useful for placing pop-up windows and other
special cases.
"""
# This is a dummy stub; the actual implementation is native code.
return (0.0, 0.0)
def get_selected_child(self) -> bauiv1.Widget | None:
"""Returns the selected child Widget or None if nothing is selected."""
# This is a dummy stub; the actual implementation is native code.
import bauiv1
return bauiv1.Widget()
@ -140,17 +149,15 @@ class Widget:
is different from the Python bauiv1.Widget type, which is the same for
all widgets.
"""
# This is a dummy stub; the actual implementation is native code.
return str()
def back_press() -> None:
"""(internal)"""
return None
def buttonwidget(
*,
edit: bauiv1.Widget | None = None,
parent: bauiv1.Widget | None = None,
id: str | None = None,
size: Sequence[float] | None = None,
position: Sequence[float] | None = None,
on_activate_call: Callable | None = None,
@ -189,18 +196,18 @@ def buttonwidget(
) -> bauiv1.Widget:
"""Create or edit a button widget.
Category: **User Interface Functions**
Pass a valid existing bauiv1.Widget as 'edit' to modify it; otherwise
a new one is created and returned. Arguments that are not set to None
are applied to the Widget.
"""
# This is a dummy stub; the actual implementation is native code.
import bauiv1 # pylint: disable=cyclic-import
return bauiv1.Widget()
def checkboxwidget(
*,
edit: bauiv1.Widget | None = None,
parent: bauiv1.Widget | None = None,
size: Sequence[float] | None = None,
@ -219,18 +226,18 @@ def checkboxwidget(
) -> bauiv1.Widget:
"""Create or edit a check-box widget.
Category: **User Interface Functions**
Pass a valid existing bauiv1.Widget as 'edit' to modify it; otherwise
a new one is created and returned. Arguments that are not set to None
are applied to the Widget.
"""
# This is a dummy stub; the actual implementation is native code.
import bauiv1 # pylint: disable=cyclic-import
return bauiv1.Widget()
def columnwidget(
*,
edit: bauiv1.Widget | None = None,
parent: bauiv1.Widget | None = None,
size: Sequence[float] | None = None,
@ -247,24 +254,24 @@ def columnwidget(
border: float | None = None,
margin: float | None = None,
claims_left_right: bool | None = None,
claims_tab: bool | None = None,
) -> bauiv1.Widget:
"""Create or edit a column widget.
Category: **User Interface Functions**
Pass a valid existing bauiv1.Widget as 'edit' to modify it; otherwise
a new one is created and returned. Arguments that are not set to None
are applied to the Widget.
"""
# This is a dummy stub; the actual implementation is native code.
import bauiv1 # pylint: disable=cyclic-import
return bauiv1.Widget()
def containerwidget(
*,
edit: bauiv1.Widget | None = None,
parent: bauiv1.Widget | None = None,
id: str | None = None,
size: Sequence[float] | None = None,
position: Sequence[float] | None = None,
background: bool | None = None,
@ -275,7 +282,6 @@ def containerwidget(
root_selectable: bool | None = None,
on_activate_call: Callable[[], None] | None = None,
claims_left_right: bool | None = None,
claims_tab: bool | None = None,
selection_loops: bool | None = None,
selection_loops_to_parent: bool | None = None,
scale: float | None = None,
@ -290,19 +296,33 @@ def containerwidget(
always_highlight: bool | None = None,
selectable: bool | None = None,
scale_origin_stack_offset: Sequence[float] | None = None,
toolbar_visibility: str | None = None,
toolbar_visibility: (
Literal[
'menu_minimal',
'menu_minimal_no_back',
'menu_full',
'menu_full_no_back',
'menu_store',
'menu_store_no_back',
'menu_in_game',
'menu_tokens',
'get_tokens',
'no_menu_minimal',
'inherit',
]
| None
) = None,
on_select_call: Callable[[], None] | None = None,
claim_outside_clicks: bool | None = None,
claims_up_down: bool | None = None,
) -> bauiv1.Widget:
"""Create or edit a container widget.
Category: **User Interface Functions**
Pass a valid existing bauiv1.Widget as 'edit' to modify it; otherwise
a new one is created and returned. Arguments that are not set to None
are applied to the Widget.
"""
# This is a dummy stub; the actual implementation is native code.
import bauiv1 # pylint: disable=cyclic-import
return bauiv1.Widget()
@ -313,13 +333,36 @@ def get_qrcode_texture(url: str) -> bauiv1.Texture:
The provided url must be 64 bytes or less.
"""
# This is a dummy stub; the actual implementation is native code.
import bauiv1 # pylint: disable=cyclic-import
return bauiv1.Texture()
def get_special_widget(name: str) -> bauiv1.Widget:
def get_special_widget(
name: Literal[
'squad_button',
'back_button',
'account_button',
'achievements_button',
'settings_button',
'inbox_button',
'store_button',
'get_tokens_button',
'inventory_button',
'tickets_meter',
'tokens_meter',
'trophy_meter',
'level_meter',
'overlay_stack',
'chest_0_button',
'chest_1_button',
'chest_2_button',
'chest_3_button',
],
) -> bauiv1.Widget:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
import bauiv1 # pylint: disable=cyclic-import
return bauiv1.Widget()
@ -327,6 +370,7 @@ def get_special_widget(name: str) -> bauiv1.Widget:
def getmesh(name: str) -> bauiv1.Mesh:
"""Load a mesh for use solely in the local user interface."""
# This is a dummy stub; the actual implementation is native code.
import bauiv1 # pylint: disable=cyclic-import
return bauiv1.Mesh()
@ -334,6 +378,7 @@ def getmesh(name: str) -> bauiv1.Mesh:
def getsound(name: str) -> bauiv1.Sound:
"""Load a sound for use in the ui."""
# This is a dummy stub; the actual implementation is native code.
import bauiv1 # pylint: disable=cyclic-import
return bauiv1.Sound()
@ -341,12 +386,14 @@ def getsound(name: str) -> bauiv1.Sound:
def gettexture(name: str) -> bauiv1.Texture:
"""Load a texture for use in the ui."""
# This is a dummy stub; the actual implementation is native code.
import bauiv1 # pylint: disable=cyclic-import
return bauiv1.Texture()
def hscrollwidget(
*,
edit: bauiv1.Widget | None = None,
parent: bauiv1.Widget | None = None,
size: Sequence[float] | None = None,
@ -362,22 +409,21 @@ def hscrollwidget(
simple_culling_h: float | None = None,
claims_left_right: bool | None = None,
claims_up_down: bool | None = None,
claims_tab: bool | None = None,
) -> bauiv1.Widget:
"""Create or edit a horizontal scroll widget.
Category: **User Interface Functions**
Pass a valid existing bauiv1.Widget as 'edit' to modify it; otherwise
a new one is created and returned. Arguments that are not set to None
are applied to the Widget.
"""
# This is a dummy stub; the actual implementation is native code.
import bauiv1 # pylint: disable=cyclic-import
return bauiv1.Widget()
def imagewidget(
*,
edit: bauiv1.Widget | None = None,
parent: bauiv1.Widget | None = None,
size: Sequence[float] | None = None,
@ -396,15 +442,15 @@ def imagewidget(
tilt_scale: float | None = None,
mask_texture: bauiv1.Texture | None = None,
radial_amount: float | None = None,
draw_controller_mult: float | None = None,
) -> bauiv1.Widget:
"""Create or edit an image widget.
Category: **User Interface Functions**
Pass a valid existing bauiv1.Widget as 'edit' to modify it; otherwise
a new one is created and returned. Arguments that are not set to None
are applied to the Widget.
"""
# This is a dummy stub; the actual implementation is native code.
import bauiv1 # pylint: disable=cyclic-import
return bauiv1.Widget()
@ -412,12 +458,35 @@ def imagewidget(
def is_available() -> bool:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return bool()
def is_party_icon_visible() -> bool:
def on_ui_scale_change() -> None:
"""(internal)"""
return bool()
# This is a dummy stub; the actual implementation is native code.
return None
def root_ui_back_press() -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
def root_ui_pause_updates() -> None:
"""Temporarily pause updates to the root ui for animation purposes.
Make sure that each call to this is matched by a call to
root_ui_resume_updates().
"""
# This is a dummy stub; the actual implementation is native code.
return None
def root_ui_resume_updates() -> None:
"""Resume paused updates to the root ui for animation purposes."""
# This is a dummy stub; the actual implementation is native code.
return None
def rowwidget(
@ -429,23 +498,22 @@ def rowwidget(
selected_child: bauiv1.Widget | None = None,
visible_child: bauiv1.Widget | None = None,
claims_left_right: bool | None = None,
claims_tab: bool | None = None,
selection_loops_to_parent: bool | None = None,
) -> bauiv1.Widget:
"""Create or edit a row widget.
Category: **User Interface Functions**
Pass a valid existing bauiv1.Widget as 'edit' to modify it; otherwise
a new one is created and returned. Arguments that are not set to None
are applied to the Widget.
"""
# This is a dummy stub; the actual implementation is native code.
import bauiv1 # pylint: disable=cyclic-import
return bauiv1.Widget()
def scrollwidget(
*,
edit: bauiv1.Widget | None = None,
parent: bauiv1.Widget | None = None,
size: Sequence[float] | None = None,
@ -455,6 +523,7 @@ def scrollwidget(
capture_arrows: bool = False,
on_select_call: Callable | None = None,
center_small_content: bool | None = None,
center_small_content_horizontally: bool | None = None,
color: Sequence[float] | None = None,
highlight: bool | None = None,
border_opacity: float | None = None,
@ -462,33 +531,49 @@ def scrollwidget(
selection_loops_to_parent: bool | None = None,
claims_left_right: bool | None = None,
claims_up_down: bool | None = None,
claims_tab: bool | None = None,
autoselect: bool | None = None,
) -> bauiv1.Widget:
"""Create or edit a scroll widget.
Category: **User Interface Functions**
Pass a valid existing bauiv1.Widget as 'edit' to modify it; otherwise
a new one is created and returned. Arguments that are not set to None
are applied to the Widget.
"""
# This is a dummy stub; the actual implementation is native code.
import bauiv1 # pylint: disable=cyclic-import
return bauiv1.Widget()
def set_party_icon_always_visible(value: bool) -> None:
"""(internal)"""
return None
def set_party_window_open(value: bool) -> None:
"""(internal)"""
# This is a dummy stub; the actual implementation is native code.
return None
def spinnerwidget(
*,
edit: bauiv1.Widget | None = None,
parent: bauiv1.Widget | None = None,
size: float | None = None,
position: Sequence[float] | None = None,
style: Literal['bomb', 'simple'] | None = None,
visible: bool | None = None,
) -> bauiv1.Widget:
"""Create or edit a spinner widget.
Pass a valid existing bauiv1.Widget as 'edit' to modify it; otherwise
a new one is created and returned. Arguments that are not set to None
are applied to the Widget.
"""
# This is a dummy stub; the actual implementation is native code.
import bauiv1 # pylint: disable=cyclic-import
return bauiv1.Widget()
def textwidget(
*,
edit: bauiv1.Widget | None = None,
parent: bauiv1.Widget | None = None,
size: Sequence[float] | None = None,
@ -532,22 +617,16 @@ def textwidget(
) -> bauiv1.Widget:
"""Create or edit a text widget.
Category: **User Interface Functions**
Pass a valid existing bauiv1.Widget as 'edit' to modify it; otherwise
a new one is created and returned. Arguments that are not set to None
are applied to the Widget.
"""
# This is a dummy stub; the actual implementation is native code.
import bauiv1 # pylint: disable=cyclic-import
return bauiv1.Widget()
def toolbar_test() -> bool:
"""(internal)"""
return bool()
def uibounds() -> tuple[float, float, float, float]:
"""(internal)
@ -556,11 +635,13 @@ def uibounds() -> tuple[float, float, float, float]:
bauiv1.ContainerWidget's stack_offset value while guaranteeing that its
center remains onscreen.
"""
# This is a dummy stub; the actual implementation is native code.
return (0.0, 0.0, 0.0, 0.0)
def widget(
edit: bauiv1.Widget | None = None,
*,
edit: bauiv1.Widget,
up_widget: bauiv1.Widget | None = None,
down_widget: bauiv1.Widget | None = None,
left_widget: bauiv1.Widget | None = None,
@ -569,12 +650,12 @@ def widget(
show_buffer_bottom: float | None = None,
show_buffer_left: float | None = None,
show_buffer_right: float | None = None,
depth_range: tuple[float, float] | None = None,
autoselect: bool | None = None,
) -> None:
"""Edit common attributes of any widget.
Category: **User Interface Functions**
Unlike other UI calls, this can only be used to edit, not to create.
"""
# This is a dummy stub; the actual implementation is native code.
return None