コード例 #1
0
def box_callback(playerdata: PlayerData, args):
    from bastd.actor.playerspaz import PlayerSpaz

    def do_box(player):
        if player.actor and isinstance(player.actor,
                                       PlayerSpaz) and player.actor.node:
            player.actor.node.torso_model = ba.getmodel('tnt')
            player.actor.node.color_mask_texture = ba.gettexture('tnt')
            player.actor.node.color_texture = ba.gettexture('tnt')
            player.actor.node.highlight = (1, 1, 1)
            player.actor.node.color = (1, 1, 1)
            player.actor.node.head_model = None
            player.actor.node.style = 'cyborg'

    activity = ba.getactivity()
    if len(args) < 2:
        chatmessage(get_locale('chat_command_not_args_error'))
    elif args[1] == 'all' and playerdata.status == Status.ADMIN:
        for iplayer in activity.players:
            do_box(iplayer)
    else:
        try:
            iplayer = activity.players[int(args[1])]
            do_box(iplayer)
        except (IndexError, ValueError):
            chatmessage(get_locale('not_player_error'))
コード例 #2
0
def commands(acc_id, msg):
    global whitelist
    global whitelist_on
    global spectators
    cmnd = msg.split(" ")[0]

    args = msg.split(" ")[1:]
    if cmnd == '/add' and args != []:

        gg = _ba.get_game_roster()
        for clt in gg:
            if clt['client_id'] == int(args[0]):

                addToWhitelist(clt['account_id'], clt['display_string'])
                f = open("loggs.txt", 'a+')
                f.write(acc_id + " added " + clt['account_id'] + "\n")
                f.close()
                _ba.chatmessage(clt['display_string'] + " whitelisted")
    if cmnd == '/whitelist':
        whitelist_on = whitelist_on == False
        if whitelist_on:
            _ba.chatmessage("WhiteList turned on")
        else:
            _ba.chatmessage("whitelist turned off")
    if cmnd == '/spectators':
        spectators = spectators == False
        if spectators:
            _ba.chatmessage("Spectators can watch now")
        else:
            _ba.chatmessage("Spectators will be kicked")
コード例 #3
0
def reflections_callback(playerdata: PlayerData, args):
    activity = ba.getactivity()
    assert isinstance(activity, ba.GameActivity)
    try:
        rs = [int(args[2])]
        ref_type = 'soft' if int(args[1]) == 0 else 'powerup'
    except (ValueError, IndexError):
        chatmessage(get_locale('chat_command_not_args_error'))
        return

    activity.map.node.reflection = ref_type
    activity.map.node.reflection_scale = rs

    try:
        activity.map.bg.reflection = ref_type
        activity.map.bg.reflection_scale = rs
    except AttributeError:
        pass

    try:
        activity.map.floor.reflection = ref_type
        activity.map.floor.reflection_scale = rs
    except AttributeError:
        pass

    try:
        activity.map.center.reflection = ref_type
        activity.map.center.reflection_scale = rs
    except AttributeError:
        pass
コード例 #4
0
def remove_callback(playerdata: PlayerData, args):
    activity = ba.getactivity()
    if len(args) < 2:
        chatmessage(get_locale('chat_command_not_args_error'))
    elif args[1] == 'all' and playerdata.status == Status.ADMIN:
        for player in activity.players:
            player.sessionplayer.remove_from_game()
    else:
        activity.players[int(args[1])].sessionplayer.remove_from_game()
コード例 #5
0
def change_lobby_check_time(arguments):
    try:
        argument = int(arguments[0])
    except:
        _ba.chatmessage("must type numbe to change lobby check time")
    settings = setting.get_settings_data()
    settings["white_list"]["lobbychecktime"] = argument
    setting.commit(settings)
    _ba.chatmessage(f"lobby check time is {arg} now")
コード例 #6
0
def changeplaylist(arguments):
    if len(arguments) == 0:
        _ba.chatmessage("enter list code or name")
    else:
        if arguments[0] == 'coop':
            serverdata.coopmode = True
        else:
            serverdata.coopmode = False
        playlist.setPlaylist(arguments[0])
    return
コード例 #7
0
def set_playlist(content):
    if content is None:
        return
    _playlists_var = "{} Playlists".format(content["playlistType"])
    playlists = _ba.app.config[_playlists_var]
    playlist = playlists[content["playlistName"]]
    _ba.chatmessage("Fetched playlist:" + content["playlistName"])
    typename = ('teams' if content['playlistType'] == 'Team Tournament' else
                'ffa' if content['playlistType'] == 'Free-for-All' else '??')
    return set_playlist_inline(playlist, typename)
コード例 #8
0
def spectators(arguments):

    if arguments[0] in ['on', 'off']:
        settings = setting.get_settings_data()

        if arguments[0] == 'on':
            settings["white_list"]["spectators"] = True
            setting.commit(settings)
            _ba.chatmessage("spectators on")

        elif arguments[0] == 'off':
            settings["white_list"]["spectators"] = False
            setting.commit(settings)
            _ba.chatmessage("spectators off")
コード例 #9
0
def shatter_callback(playerdata: PlayerData, args):
    activity = ba.getactivity()
    if len(args) < 3 or not args[2].isdigit():
        chatmessage(get_locale('chat_command_not_args_error'))
    else:
        level = int(args[2])
        if args[1] == 'all' and playerdata.status == Status.ADMIN:
            for i in activity.players:
                i.actor.node.shattered = level
        else:
            try:
                activity.players[int(args[0])].actor.node.shattered = level
            except (ValueError, IndexError):
                chatmessage(get_locale('not_player_error'))
コード例 #10
0
def setPlaylist(para):
    if para.isdigit():
        playlist(para)
    elif para == "coop":
        _thread.start_new_thread(withDelay, (
            CoopSession,
            None,
        ))

    elif para in settings["playlists"]:
        playlist(settings["playlists"][para])
    else:
        _ba.chatmessage("Available Playlist")
        for play in settings["playlists"]:
            _ba.chatmessage(play)
コード例 #11
0
def heal_callback(playerdata: PlayerData, args):
    activity = ba.getactivity()
    if len(args) < 2:
        chatmessage(get_locale('chat_command_not_args_error'))
    elif args[1] == 'all':
        for i in activity.players:
            if i.actor and hasattr(i.actor, 'node'):
                assert isinstance(i.actor.node, ba.Node)
                i.actor.node.handlemessage(
                    ba.PowerupMessage(poweruptype='health'))
    else:
        player = activity.players[int(args[0])]
        if player.actor and hasattr(player.actor, 'node'):
            assert isinstance(player.actor.node, ba.Node)
            player.actor.node.handlemessage(
                ba.PowerupMessage(poweruptype='health'))
コード例 #12
0
def _cmd(command_data: bytes) -> None:
    """Handle commands coming in from our server manager parent process."""
    import pickle
    command = pickle.loads(command_data)
    assert isinstance(command, ServerCommand)

    if isinstance(command, StartServerModeCommand):
        assert _ba.app.server is None
        _ba.app.server = ServerController(command.config)
        return

    if isinstance(command, ShutdownCommand):
        assert _ba.app.server is not None
        _ba.app.server.shutdown(reason=command.reason,
                                immediate=command.immediate)
        return

    if isinstance(command, ChatMessageCommand):
        assert _ba.app.server is not None
        _ba.chatmessage(command.message, clients=command.clients)
        return

    if isinstance(command, ScreenMessageCommand):
        assert _ba.app.server is not None

        # Note: we have to do transient messages if
        # clients is specified, so they won't show up
        # in replays.
        _ba.screenmessage(command.message,
                          color=command.color,
                          clients=command.clients,
                          transient=command.clients is not None)
        return

    if isinstance(command, ClientListCommand):
        assert _ba.app.server is not None
        _ba.app.server.print_client_list()
        return

    if isinstance(command, KickCommand):
        assert _ba.app.server is not None
        _ba.app.server.kick(client_id=command.client_id,
                            ban_time=command.ban_time)
        return

    print(f'{Clr.SRED}ERROR: server process'
          f' got unknown command: {type(command)}{Clr.RST}')
コード例 #13
0
def sleep_callback(playerdata: PlayerData, args):
    activity = ba.getactivity()
    if not args:
        chatmessage(get_locale('chat_command_not_args_error'))
    elif args[1] == 'all' and playerdata.status == Status.ADMIN:
        for i in activity.players:
            try:
                i.actor.node.handlemessage('knockout', 5000)
            except AttributeError:
                pass
    else:
        try:
            activity.players[int(args[1])].actor.node.handlemessage(
                'knockout', 5000)
        except (ValueError, IndexError):
            chatmessage(get_locale('not_player_error'))
        except AttributeError:
            pass
コード例 #14
0
def _notify_handlers(cmd: str, playerdata: PlayerData):
    args = cmd.split()
    for handler in _handlers:
        if args[0] in handler.commands and playerdata.status in handler.statuses:
            if _lastrun.get(playerdata.id, {}).get(
                    args[0], 0) + handler.statuses[playerdata.status] < int(
                        datetime.now().timestamp()):
                try:
                    with ba.Context(get_foreground_host_activity()):
                        handler.callback(playerdata, args)
                except Exception:
                    ba.print_exception(
                        f'Error while processing command {cmd} from {playerdata.id}'
                    )
                    chatmessage(get_locale('command_some_error'))
                lastrun = _lastrun.get(playerdata.id, {})
                lastrun[args[0]] = int(datetime.now().timestamp())
                _lastrun[playerdata.id] = lastrun
            else:
                chatmessage(get_locale('commands_too_many'))
コード例 #15
0
def gp_callback(playerdata: PlayerData, args):
    activity = ba.getactivity()
    if len(args) < 2:
        chatmessage(get_locale('chat_command_not_args_error'))
    else:
        chatmessage(get_locale('player_profiles_text'))
        try:
            inputdevice = activity.players[int(
                args[1])].sessionplayer.inputdevice
        except (IndexError, ValueError):
            chatmessage(get_locale('not_player_error'))
            return
        profiles = inputdevice.get_player_profiles()

        for profile in profiles:
            if profile == '__account__':
                profile = inputdevice.get_account_name(False)
            chatmessage(profile)

        chatmessage(get_locale('dividing_strip_text'))
コード例 #16
0
def fly_callback(playerdata: PlayerData, args):
    from bastd.actor.playerspaz import PlayerSpaz
    activity = ba.getactivity()
    if not args:
        chatmessage(get_locale('chat_command_not_args_error'))
    elif args[1] == 'all' and playerdata.status == Status.ADMIN:
        for player in activity.players:
            if player.actor and isinstance(player.actor, PlayerSpaz):
                player.actor.node.fly = True
    else:
        try:
            player = activity.players[int(args[1])]
        except (IndexError, ValueError):
            chatmessage(get_locale('not_player_error'))
            return
        if player.actor and hasattr(player.actor, 'node'):
            if not player.actor.node.fly:
                player.actor.node.fly = True
            else:
                player.actor.node.fly = False
コード例 #17
0
def kick_callback(playerdata: PlayerData, args):
    if len(args) < 2 or (not args[1].isdigit() and args[1] != '-1'):
        chatmessage(get_locale('chat_command_not_args_error'))
    elif args[1] == '-1':
        chatmessage(get_locale('kick_host_error'))
    else:
        ban_time = 300
        clients_ids = [player['client_id'] for player in _ba.get_game_roster()]
        if len(args) > 1 and playerdata.status == Status.ADMIN:
            ban_time = int(args[1])
        elif len(args) > 1 and playerdata.status != Status.ADMIN:
            chatmessage(get_locale('time_arg_access_error'))

        if int(args[1]) in clients_ids:
            target = get_player_by('client_id', int(args[1]))
            if target.status == Status.ADMIN:
                chatmessage(get_locale('kick_admin_error'))
            else:
                _ba.disconnect_client(int(args[1]), ban_time=ban_time)
        else:
            chatmessage(get_locale('not_player_error'))
コード例 #18
0
def tint_callback(playerdata: PlayerData, args):
    if len(args) < 2 or (len(args) < 4 and args[1] != 'r'):
        chatmessage(get_locale('chat_command_not_args_error'))
    elif args[1] == 'r':
        m = 1.30 if len(args) < 3 else float(args[2])
        s = 1000 if len(args) < 4 else float(args[3])
        if m > 3 and playerdata.status != Status.ADMIN:
            chatmessage(get_locale('too_big_arg_error'))
            return
        tint = {
            s * 0: (m, 0, 0),
            s * 1: (0, m, 0),
            s * 2: (0, 0, m),
            s * 3: (m, 0, 0),
        }

        ba.animate_array(ba.getactivity().globalsnode,
                         'tint',
                         3,
                         tint,
                         True,
                         suppress_format_warning=True,
                         timeformat=ba.TimeFormat.MILLISECONDS)
    else:
        color = (float(args[1]), float(args[2]), float(args[3]))
        if max(map(abs, color)) > 3 and playerdata.status != Status.ADMIN:
            chatmessage(get_locale('too_big_arg_error'))
            return
        ba.getactivity().globalsnode.tint = color
コード例 #19
0
def hug_callback(playerdata: PlayerData, args):
    def do_hug(p1: ba.Player, p2: ba.Player):
        from bastd.actor.playerspaz import PlayerSpaz
        if (p1.actor.is_alive() and isinstance(p1.actor, PlayerSpaz)
                and p2.actor.is_alive() and isinstance(p2.actor, PlayerSpaz)):
            p1.actor.node.hold_node = p2.actor.node
            p2.actor.node.hold_node = p1.actor.node

    activity = ba.getactivity()
    if len(args) == 1:
        alives = []
        for i in range(len(activity.players)):
            if activity.players[i]:
                alives.append(i)
        count = len(alives) // 2
        for i in range(count):
            do_hug(activity.players[alives[i]],
                   activity.players[alives[count + i]])
    elif len(args) == 3:
        try:
            do_hug(activity.players[int(args[1])],
                   activity.players[int(args[2])])
        except (IndexError, ValueError):
            chatmessage(get_locale('not_player_error'))
コード例 #20
0
def ac_callback(playerdata: PlayerData, args):
    if not args:
        chatmessage(get_locale('chat_command_not_args_error'))
    elif args[1] == 'r':
        m = 1.30 if len(args) < 3 else float(args[2])
        s = 1000 if len(args) < 4 else float(args[3])
        ambient_color = {
            s * 0: (m, 0, 0),
            s * 1: (0, m, 0),
            s * 2: (0, 0, m),
            s * 3: (m, 0, 0)
        }

        ba.animate_array(ba.getactivity().globalsnode,
                         'ambient_color',
                         3,
                         ambient_color,
                         True,
                         suppress_format_warning=True,
                         timeformat=ba.TimeFormat.MILLISECONDS)
    else:
        ba.getactivity().globalsnode.ambientColor = (float(args[1]),
                                                     float(args[2]),
                                                     float(args[3]))
コード例 #21
0
def rainbow_callback(playerdata: PlayerData, args):
    color = {0: (0, 0, 3), 0.5: (0, 3, 0), 1: (3, 0, 0), 1.5: (0, 0, 3)}

    highlight = {0: (3, 0, 0), 0.5: (0, 0, 0), 1: (0, 0, 3), 1.5: (3, 0, 0)}

    def do_rainbow(player):
        if player and player.actor and player.actor.node:
            ba.animate_array(player.actor.node, 'color', 3, color, True)
            ba.animate_array(player.actor.node, 'highlight', 3, highlight,
                             True)
            player.actor.node.handlemessage('celebrate', 6000)

    activity = ba.getactivity()

    if len(args) < 1:
        chatmessage(get_locale('chat_command_not_args_error'))
    elif args[1] == 'all':
        for i in activity.players:
            do_rainbow(i)
    else:
        try:
            do_rainbow(activity.players[int(args[1])])
        except (IndexError, ValueError):
            chatmessage(get_locale('not_player_error'))
コード例 #22
0
def list_callback(playerdata: PlayerData, args):
    client_ids = [
        (i['players'][0]['name_full'] if i['players'] else i['displayString'],
         str(i['client_id'])) for i in _ba.get_game_roster()
    ]

    chatmessage(get_locale('player_ids_text'))
    activity = _ba.get_foreground_host_activity()
    for i in range(len(activity.players)):
        p = activity.players[i]
        chatmessage('{} | {} | {}'.format(
            i,
            p.getname().ljust(15), p.sessionplayer.inputdevice.client_id))
    chatmessage(get_locale('dividing_strip_text'))
コード例 #23
0
def help_callback(playerdata: PlayerData, args):
    for handler in _handlers:
        chatmessage("{} - {}".format(
            handler.commands[0],
            get_locale('command_help').get(
                handler.commands[0], get_locale('command_help_not_found'))))
コード例 #24
0
def play_sound_callback(playerdata: PlayerData, args):
    if len(args) < 2:
        chatmessage(get_locale('chat_command_not_args_error'))
    else:
        ba.playsound(ba.getsound(str(args[0])), volume=2)
コード例 #25
0
def changepartysize(arguments):
    if len(arguments) == 0:
        _ba.chatmessage("enter number")
    else:
        _ba.set_public_party_max_size(int(arguments[0]))
コード例 #26
0
ファイル: party.py プロジェクト: snow-1711/ballistica
 def _send_chat_message(self) -> None:
     _ba.chatmessage(cast(str, ba.textwidget(query=self._text_field)))
     ba.textwidget(edit=self._text_field, text='')
コード例 #27
0
def send(msg, clientid):
    """Shortcut To Send Private Msg To Client"""

    _ba.chatmessage(str(msg), clients=[clientid])
    _ba.screenmessage(str(msg), transient=True, clients=[clientid])