Example #1
0
 def _fetchNews(self):
     try: launchCount = bs.getConfig()['launchCount']
     except Exception: launchCount = None
     global gLastNewsFetchTime
     gLastNewsFetchTime = time.time()
     
     # UPDATE - we now just pull news from MRVs
     news = bsInternal._getAccountMiscReadVal('n', None)
     if news is not None:
         self._gotNews(news)
Example #2
0
 def getPowerRankingValue(self):
     'Return the power-ranking award value for this achievement'
     return bsInternal._getAccountMiscReadVal(
         'achLeaguePoints.' + self._name, self._award)
Example #3
0
 def getAwardTicketValue(self, includeProBonus=False):
     'Return the ticket award value for this achievement'
     return bsInternal._getAccountMiscReadVal(
         'achAward.' + self._name,
         self._award) * _getAchMult(includeProBonus)
Example #4
0
def _getAchMult(includeProBonus=False):
    val = bsInternal._getAccountMiscReadVal('achAwardMult', 5)
    if includeProBonus and bsUtils._havePro(): val *= 2
    return val
Example #5
0
 def _getCustomLogoTexName(self):
     if bsInternal._getAccountMiscReadVal('easter',False):
         return 'logoEaster'
     else:
         return None
Example #6
0
 def __init__(self, transition='inRight', originWidget=None):
     if originWidget is not None:
         self._transitionOut = 'outScale'
         scaleOrigin = originWidget.getScreenSpaceCenter()
         transition = 'inScale'
     else:
         self._transitionOut = 'outRight'
         scaleOrigin = None
         transition = 'inRight'
     bgColor = (0.4, 0.4, 0.5)
     self._width = 540
     self._height = 330
     baseScale = 2.0 if bsUI.gSmallUI else 1.6 if bsUI.gMedUI else 1.1
     self._rootWidget = bs.containerWidget(
         size=(self._width, self._height),
         transition=transition,
         scale=baseScale,
         scaleOriginStackOffset=scaleOrigin,
         stackOffset=(0, -10) if bsUI.gSmallUI else (0, 0))
     self._cancelButton = bs.buttonWidget(parent=self._rootWidget,
                                          position=(50, self._height - 30),
                                          size=(50, 50),
                                          scale=0.5,
                                          label='',
                                          color=bgColor,
                                          onActivateCall=self._cancel,
                                          autoSelect=True,
                                          icon=bs.getTexture('crossOut'),
                                          iconScale=1.2)
     bs.textWidget(
         parent=self._rootWidget,
         position=(self._width * 0.5, self._height * 0.57),
         size=(0, 0),
         text=bs.Lstr(
             resource='accountSettingsWindow.linkAccountsInstructionsText',
             subs=[('${COUNT}',
                    str(
                        bsInternal._getAccountMiscReadVal(
                            'maxLinkAccounts', 5)))]),
         maxWidth=self._width * 0.9,
         color=bsUI.gInfoTextColor,
         maxHeight=self._height * 0.6,
         hAlign='center',
         vAlign='center')
     bs.containerWidget(edit=self._rootWidget,
                        cancelButton=self._cancelButton)
     bs.buttonWidget(
         parent=self._rootWidget,
         position=(40, 30),
         size=(200, 60),
         label=bs.Lstr(
             resource='accountSettingsWindow.linkAccountsGenerateCodeText'),
         autoSelect=True,
         onActivateCall=self._generatePress)
     self._enterCodeButton = bs.buttonWidget(
         parent=self._rootWidget,
         position=(self._width - 240, 30),
         size=(200, 60),
         label=bs.Lstr(
             resource='accountSettingsWindow.linkAccountsEnterCodeText'),
         autoSelect=True,
         onActivateCall=self._enterCodePress)
Example #7
0
    def opt(self, clientID=None, msg=""):
        global gEvent, admins, vips, settings
        global banned, prefixes
        if gSettingsEnabled: 
            settings = bs.get_settings()
            admins, vips, banned, prefixes = settings.get("admins", []), settings.get("vips", []), \
                settings.get("banned", []), settings.get("prefixes", {})
        a = bsInternal._getForegroundHostActivity()
        roster = bsInternal._getGameRoster()
        if gEvent is None: gEvent = bsInternal._getAccountMiscReadVal('easter', False)
        def format_message(msg=''):
            msg = msg.replace("/", "")
            mg = msg.split(" ")
            command = mg[0].lower()
            if len(mg) > 1: 
                arg = mg[1:]
                for i in range(len(arg)):
                    key = arg[i]
                    c = is_account(key, True)
                    if c is not None: arg[i] = c
                    else: arg[i] = key.lower()
            else: arg = []
            if self.player is not None and self.player.exists() and command in ['s', 'summon'] and hasattr(self.player.actor.node, 'position'):
                if ('~' in arg) or ('^' in arg):
                    rng = (2, 5)
                    if len(arg) > 0:
                        if arg[0] in ['f','flag']: rng = (1, 4)
                    for i in range(rng[0], rng[1]):
                        if len(arg) > i and arg[i] in ["~", "^"]: arg[i] = self.player.actor.node.position[i-rng[0]]
            return msg, command, arg
        def check_player():
            global admins
            self.is_vip = self.is_admin = self.is_host = False
            self.player = None
            host = get_account_string(arg=bsInternal._getAccountDisplayString(True))
            if gSettingsEnabled:
                hosts = bs.get_setting("hosts", [])
                if host not in hosts: 
                    hosts.append(host)
                    bs.set_setting("hosts", hosts)
            else: hosts = []
            if len(roster) > 0:
                account = None
                for i in roster: 
                    if i['clientID'] == clientID: 
                        account = i['displayString'].decode('utf-8')
                        break
                if account is not None:
                    if account in vips: self.is_vip = True
                    if account in admins: self.is_vip = self.is_admin = True
                    if account == host or (account != host and account in hosts): self.is_host = self.is_admin = self.is_vip = True
                    for i in a.players:
                        if i.exists():
                            id = i.getInputDevice().getClientID()
                            if id == clientID: self.player = i
            else:
                self.is_host = self.is_admin = self.is_vip = True
                if len(a.players) > 0: self.player = a.players[0]
        check_player()
        msg, command, arg = format_message(msg=msg)
        if a is not None:
            with bs.Context(a):
                if command in ["h", "help"] and self.is_vip:
                    commands, num = {1: []}, 1
                    def add_commands(cmds=[], commands={1: []}, num=1):
                        for i in cmds:
                            if len(commands[num]) < 30: commands[num].append(i)
                            else:
                                num += 1
                                commands[num] = []
                                commands[num].append(i)
                        return commands, num
                    commands, num = add_commands(["help - помощь", "time - установить время", \
                        "skin - изменить облик", "kick - выгнать из игры", \
                        "end - закончить игру", "sm - замедленный режим игры", \
                        "rise - возродить", "frozen - заморозить", "shatter - разделить на части"], 
                        commands=commands, num=num)
                    if self.is_admin: 
                        commands, num = add_commands(['summon - вызвать объект', 'vip - выдать права vip-пользователя', \
                            'punch - сила удара', 'hitpoints - очки жизни', 'prefix - выдать префикс', \
                            'ban - забанить', 'mp - максимальное кол-во игроков', \
                            'pause - остановить/продолжить игру', \
                            'sleep - усыпить', 'head - ребят я черешня', \
                            'nodes - список всех типов объектов на карте', 'connect - а это че', \
                            'curse - проклятие'], commands=commands, num=num)
                    if gEvent:
                        commands, num = add_commands(['flex - хайпово флексить'], commands=commands, num=num)
                        if self.is_admin:
                            commands, num = add_commands(['dance - станцевать брейк', 'dance2 - станцевать лезгинку', 'party - устроить вечеринку'], commands=commands, num=num)
                    if self.is_host:
                        commands, num = add_commands(['default - отобрать права пользователя', \
                            'admin - выдать права администратора'], commands=commands, num=num)
                    commands, num = add_commands(['help [номер страницы] - следующий список команд', \
                        'команды могут выполняться через спец-символ ;', 'pause;/pause(перед каждой командой /)'], commands=commands, num=num)
                    num = 1
                    if len(arg) > 0 and bigger_than_zero(arg[0]): num=int(arg[0])
                    commands = commands.get(num, [])
                    for i in commands: send_message(i)

                elif command in ["l", "list"] and self.is_vip:
                    if len(roster) > 0:
                        players = []
                        for i in [[c["id"] for c in k["players"]] for k in roster]:
                            for d in i: players.append(d)
                        players.sort()
                        for i in roster:
                            data = [(", ").join([r["nameFull"] for r in i["players"]]) if len(i["players"]) > 0 else " - ", (", ").join([str(players.index(r)) for r in [c["id"] for c in i["players"]]]) if len(i["players"]) > 0 else " - "]
                            bsInternal._chatMessage(i["displayString"] + " : "+ data[0] + " : " + data[1])
                    else:
                        if len(a.players) > 0:
                            for i in a.players:
                                bsInternal._chatMessage(i.getInputDevice().getPlayer().getName(True) + " : " + str(a.players.index(i)))
                        else: send_message(" - ")

                elif command in ['timeset', 'time'] and self.is_vip:
                    if len(arg) > 0:
                        tint = get_tint()
                        self.time.update({"normal": get_normal_tint()})
                        for i in self.time:
                            if arg[0] == i:
                                bs.getSharedObject("globals").tint = tint = self.time[i]
                                break
                        if arg[0] == 'cycle': bs.getSharedObject('globals').tint = tint = get_normal_tint()
                        set_tint(tint=tint)
                    else:
                        for i in ['time [normal|sunrise|day|noon|sunset|night|cycle]', \
                            'timeset cycle - дневной цикл(плавная смена времени)', \
                            'timeset noon - середина дня', 'timeset sunset - закат']: send_message(i)
    
                elif command in ['summon','s'] and self.is_admin:
                    if len(arg) > 0:
                        if arg[0] in ['bomb','b']:
                            if len(arg) > 1:
                                bombs = [i.lower() for i in gBombs]
                                bombType, pos, count = 'normal', [0, 5, 0], 1
                                bombType = gBombs[bombs.index(arg[1].lower())] if arg[1].lower() in bombs else 'normal'
                                if len(arg) > 5: count = min(30, int(arg[5])) if bigger_than_zero(arg[5]) else 1
                                for i in range(2, 5):
                                    if len(arg) > i and is_num(arg[i]): pos[i-2] = float(arg[i])
                                for i in range(count):
                                    bs.Bomb(position=tuple(pos), bombType=bombType).autoRetain()
                            else:
                                mg = bs.text_split(words=gBombs)
                                mg += "s bomb [название] [позиция(3 числа)] [кол-во]\ns bomb normal 0 5 0 1"
                                for i in mg.split('\n'): send_message(i)
                        elif arg[0] in ['bot']:
                            if len(arg) > 1:
                                bots = [i.lower() for i in gBots]
                                botType, pos, count = 'BomberBot', [0, 5, 0], 1
                                botType = gBots[bots.index(arg[1].lower())] if arg[1].lower() in bots else 'BomberBot'
                                if len(arg) > 5: count = min(30, int(arg[5])) if bigger_than_zero(arg[5]) else 1
                                for i in range(2, 5):
                                    if len(arg) > i and is_num(arg[i]): pos[i-2] = float(arg[i])
                                if hasattr(bsSpaz, botType):
                                    bot = eval("bsSpaz."+botType)
                                    if not hasattr(self, "_bots") or (hasattr(self, "_bots") and self._bots is None): self._bots = bs.BotSet()
                                    for i in range(count):
                                        self._bots.spawnBot(bot, pos=tuple(pos), spawnTime=0, onSpawnCall=self._on_spawn)
                            else:
                                mg = bs.text_split(words=gBots, words_count=3)
                                mg += "s bot [название] [позиция(3 числа)] [кол-во]\ns bot BomberBot 0 5 0 1"
                                for i in mg.split('\n'): send_message(i)
                        elif arg[0] in ['flag','f']:
                            if len(arg) > 1:
                                pos, count, time_out, color = [0, 5, 0], 1, 20, [1, 1, 0]
                                if len(arg) > 4: count = min(30, int(arg[4])) if bigger_than_zero(arg[4]) else 1
                                if len(arg) > 5: time_out = int(arg[5]) if bigger_than_zero(arg[5]) else 20
                                for i in range(1, 4):
                                    if len(arg) > i and is_num(arg[i]): pos[i-1] = float(arg[i])
                                for i in range(6, 9):
                                    if len(arg) > i and is_num(arg[i]): color[i-6] = float(arg[i])
                                for i in range(count):
                                    bs.Flag(position=tuple(pos), droppedTimeout=time_out, color=color).autoRetain()
                            else:
                                for i in ["s flag [позиция(3 числа)] [кол-во] [тайм-аут] [цвет(3 числа)]", \
                                    "s flag 0 5 0", "s flag ~ ~ ~ 10 999 1 0 0"]: send_message(i)
                        elif arg[0] in ['powerup','p']:
                            if len(arg) > 1:
                                powerups = [i.lower() for i in gPowerups]
                                powerupType, pos, count = 'punch', [0, 5, 0], 1
                                powerupType = gPowerups[powerups.index(arg[1].lower())] if arg[1].lower() in powerups else 'punch'
                                if len(arg) > 5: count = min(30, int(arg[5])) if bigger_than_zero(arg[5]) else 1
                                for i in range(2, 5):
                                    if len(arg) > i and is_num(arg[i]): pos[i-2] = float(arg[i])
                                for i in range(count):
                                    bs.Powerup(position=tuple(pos),powerupType=powerupType).autoRetain()
                            else:
                                mg = bs.text_split(words=gPowerups)
                                mg += "s p [название] [позиция(3 числа)] [кол-во]\ns p punch 0 5 0 1"
                                for i in mg.split('\n'): send_message(i)
                        elif arg[0] in ['box']:
                            if len(arg) > 1:
                                boxTypes = ['s','small','big','b']
                                boxType, pos, count = 'small', [0, 5, 0], 1
                                boxType = arg[1].lower() if arg[1].lower() in boxTypes else 'small'
                                if len(arg) > 5: count = min(30, int(arg[5])) if bigger_than_zero(arg[5]) else 1
                                for i in range(2, 5):
                                    if len(arg) > i and is_num(arg[i]): pos[i-2] = float(arg[i])
                                for i in range(count):
                                    Box(pos=tuple(pos), scale=1 if boxType in ["s","small"] else 1.38, owner=None).autoRetain()
                            else:
                                for i in ["s box [small|big] [позиция] [кол-во]", \
                                    "s box small 0 5 0", "s box big ~ ~ ~ 5"]: send_message(i)
                    else:
                        for i in ["summon [bomb|powerup|bot|box|flag]", "bomb - вызвать бомбу.", "powerup - вызвать усилитель.", "bot - вызвать бота.", "box - вызвать коробку."]: send_message(i)

                elif command in ['skin'] and self.is_vip:
                    if len(arg) > 0:
                        if len(arg) < 2: arg.append(get_account_string(self.player))
                        if arg[0] in gSkins or arg[0] == 'delete':
                            account = is_account(arg[1], True)
                            if arg[1] == "all": 
                                if arg[0] == 'delete':
                                    for i in a.players: skins.delete_skin(i)
                                else: skins.change_skin(skin=arg[0], players=[a.players])
                            elif account is not None: 
                                if arg[0] == 'delete': skins.delete_skin(account)
                                else: skins.change_skin(skin=arg[0], players=[account])
                            elif is_num(arg[1]):
                                if len(a.players) > int(arg[1]) and int(arg[1]) >= 0: 
                                    if arg[0] == 'delete': skins.delete_skin(int(arg[1]))
                                    else: skins.change_skin(skin=arg[0], players=[int(arg[1])])
                            
                    else:
                        mg = bs.text_split(words=gSkins)
                        mg += "skin [название] [номер игрока]\nskin bunny 0\nskin pixie"
                        for i in mg.split('\n'): send_message(i)

                elif command in ['ph','punch','hp','hitpoints'] and self.is_admin:
                    if len(arg) > 0 and len(a.players) > 0:
                        if len(arg) < 2: player = [self.player]
                        if len(arg) > 1:
                            if is_num(arg[1]) and len(a.players) > int(arg[1]) and int(arg[1]) >= 0: player = [a.players[int(arg[1])]]
                            elif arg[1] == "all": player = a.players
                        if player is not None:
                            if bigger_than_zero(arg[0]):
                                arg[0] = int(arg[0])
                                if command in ["punch", "ph"] and arg[0] > 10: arg[0] = 10
                                for i in player:
                                    if i.exists():
                                        if command in ["punch", "ph"]: i.actor._punchPowerScale = arg[0]
                                        else: i.actor.hitPointsMax = i.actor.hitPoints = arg[0]
                    else:
                        for i in [command+" [число] [номер игрока | all]", \
                            command+" 1000 0", command+" 10 all"]: send_message(i)
    
                elif (command in ['vip'] and self.is_admin) or (command in ['admin'] and self.is_host):
                    if len(arg) > 0: self.add_admin(True if command == "admin" else False, get_account_string(arg[0]))
                    else:
                        for i in [command+" [номер игрока|имя аккаунта]", \
                            command+" 0", command+u" \ue030PC123456"]: send_message(i)
                        
                elif command in ['df','default'] and self.is_host:
                    if len(arg) > 0: self.del_admin(get_account_string(arg[0]))
                    else:
                        for i in [command+" [номер игрока|имя аккаунта]", \
                            command+" 0", command+u" \ue030PC123456"]: send_message(i)

                elif command in ['prefix'] and self.is_admin:
                    global prefixes
                    if len(arg) > 0:
                        type = arg[1] if len(arg) > 1 else "spark"
                        prefix = "prefix" if len(arg) < 3 else (" ").join(msg.split(" ")[3:])
                        if arg[0] == 'delete' and len(arg) > 1: account = get_account_string(arg[1])
                        elif arg[0] != 'delete': account = get_account_string(arg[0])
                        else: account = None
                        if arg[0] == 'delete': 
                            if account is not None and account in prefixes:
                                prefixes.pop(account)
                                if gSettingsEnabled: bs.set_setting("prefixes", prefixes)
                        else: self.set_prefix(account=account, prefix=prefix, type=type)
                    else:
                        for i in ["prefix [номер игрока | имя аккаунта] [slime|ice|spark|rock|metal] [префикс]", \
                            "prefix 0 spark клоун сбежал"]: send_message(i)

                elif command in ['kick'] and self.is_vip:
                    if len(arg) > 0:
                        account = get_account_string(arg[0])
                        if account is not None and len(roster) > 0:
                            id = None
                            for i in roster:
                                if i['displayString'].decode('utf-8') == account:
                                    id = i['clientID']
                                    break
                            if id is not None: bsInternal._disconnectClient(id, 300)
                    else:
                        for i in [command+" [номер игрока|имя аккаунта]", \
                            command+" 0", command+u" \ue030PC123456"]: send_message(i)
    
                elif command in ['ban'] and self.is_admin:
                    if len(arg) > 0: self.ban(account=get_account_string(arg[0]))
                    else:
                        for i in [command+" [номер игрока|имя аккаунта]", \
                            command+" 0", command+u" \ue030PC123456"]: send_message(i)
                    
                elif command in ['end'] and self.is_vip:
                    if hasattr(a, "endGame"): a.endGame()
                    else: send_message("Сейчас это недоступно")
                                   
                elif command in ['party','pt'] and self.is_admin:
                    if hasattr(a, 'cameraFlash') and gEvent:
                        time = 1000
                        def run(time=1000):
                            color = tuple([random.randrange(1,2) for i in range(3)])
                            a.cameraFlash(duration=time, color=color)
                        if hasattr(a, "_partyFlash") and a._partyFlash is not None: 
                            a._partyFlash = None
                            a._cameraFlash = []
                        else: 
                            run(time=time)
                            a._partyFlash = bs.Timer(time, bs.Call(run, time), True)
                    else: send_message("Сейчас это недоступно")

                elif command in ['sm'] and self.is_vip:
                    bs.getSharedObject("globals").slowMotion = motion = bs.getSharedObject("globals").slowMotion == False
                    set_motion(motion=motion)
                    
                elif command in ['pause'] and self.is_admin:
                    bs.getSharedObject("globals").paused = bs.getSharedObject("globals").paused == False

                elif command in ['max_players', 'mp'] and self.is_admin:
                    if bigger_than_zero(arg[0]): bsInternal._setPublicPartyMaxSize(int(arg[0]))
                    else:
                        for i in ["mp [кол-во игроков]", "mp 8", "максимальное кол-во игроков сейчас: "+str(bsInternal._getPublicPartyMaxSize())]: send_message(i)
                        
                elif command in ['shatter', 'sh'] and self.is_vip:
                    if len(arg) > 0:
                        def shatter(player=None, shatterMultiple=1): 
                            if player is not None and player.exists() and player.isAlive():
                                player.actor.node.shattered = shatterMultiple
                                player.actor.shattered = True if shatterMultiple > 0 else False
                        if bigger_than_zero(arg[0]):
                            if len(arg) > 1:
                                if is_num(arg[1]) and int(arg[1]) < len(a.players): shatter(a.players[int(arg[1])], int(arg[0]))
                                elif arg[1] == "all":
                                    for i in a.players: shatter(i, int(arg[0])) 
                            elif self.player is not None: shatter(self.player, int(arg[0]))
                    else: 
                        for i in [command+" [число] [номер игрока | all]", command+" 2 0", command+" 10"]: send_message(i)
                        
                elif command in ['frozen', 'fr'] and self.is_vip:
                    if len(arg) > 0:
                        def frozen(player=None):
                            if player is not None and player.exists() and player.isAlive():
                                player.actor.node.frozen = player.actor.node.frozen == 0
                                player.actor.frozen = player.actor.frozen == False
                        if is_num(arg[0]) and int(arg[0]) < len(a.players): frozen(a.players[int(arg[0])])
                        elif arg[0] == "all":
                            for i in a.players: frozen(i)
                        elif self.player is not None: frozen(self.player)
                    else:
                        for i in [command+" [номер игрока | all]", command+" 2", \
                            command+" me", "введи команду повторно, чтобы её отменить"]: send_message(i)
                        
                elif command in ['sleep','sl'] and self.is_admin:
                    if len(arg) > 0:
                        def sleep(player=None, sleepTime=5000):
                            def work(player=None, sleepTime=5000): 
                                if player is not None and player.exists() and player.isAlive():
                                    player.actor.node.handleMessage('knockout', sleepTime)
                                    if not hasattr(player.actor, 'sleepTime') or (hasattr(player.actor, 'sleepTime') and player.actor.sleepTime is None): 
                                        player.actor.sleepTime = sleepTime
                                    else: 
                                        player.actor.sleepTime -= 500
                                        if player.actor.sleepTime <= 0: 
                                            player.actor._sleep = player.actor.sleepTime = None
                            if player is not None and player.exists() and player.isAlive():
                                if sleepTime > 500:
                                    if hasattr(player.actor, '_sleep') and player.actor._sleep is not None: player.actor._sleep = None
                                    else: 
                                        player.actor._sleep = bs.Timer(500, bs.Call(work, player, sleepTime), repeat=True)
                                        work(player=player, sleepTime=sleepTime)
                                else: work(player=player, sleepTime=sleepTime)
                        if bigger_than_zero(arg[0]):
                            if len(arg) > 1:
                                if is_num(arg[1]) and int(arg[1]) < len(a.players): sleep(a.players[int(arg[1])], int(arg[0]))
                                elif arg[1] == "all":
                                    for i in a.players: sleep(i, int(arg[0]))
                            elif self.player is not None: sleep(self.player, int(arg[0]))
                    else:
                        for i in [command+" [число] [номер игрока | all]", command+" 2000 0", \
                            command+" 5000", "введи команду повторно, чтобы её отменить"]: send_message(i)
                    
                elif command in ['curse','cr'] and self.is_admin:
                    if len(arg) > 0:
                        def curse(player=None):
                            if player is not None and player.exists() and player.isAlive():
                                if hasattr(player.actor, 'curse'): player.actor.curse()
                        if is_num(arg[0]) and int(arg[0]) < len(a.players): curse(a.players[int(arg[0])])
                        elif arg[0] == "all":
                            for i in a.players: curse(i)
                        elif self.player is not None: curse(self.player)
                    else:
                        for i in [command+" [номер игрока | all]", command+" 2", command+" me"]: send_message(i)
                    
                elif command in ['nodes'] and self.is_admin:
                    if len(arg) > 0:
                        if arg[0] == 'types': nodes = list(set([i.getNodeType() for i in bsInternal.getNodes() if hasattr(i, "getNodeType")]))
                        if arg[0] == 'names': nodes = [i.getName() for i in bsInternal.getNodes() if hasattr(i, 'getName')]
                        if len(arg) > 1: nodes = [i for i in nodes if arg[1].lower() in i.lower()]
                        for i in bs.text_split(words=nodes, stroke_on_end=False).split('\n'): send_message(i)
                    else: 
                        for i in [command+' types spaz', command+' types', command+' names']: send_message(i)

                elif command in ['connect'] and self.is_admin:
                    def connect(node=None, connected_node=None, type='position'):
                        if node is not None and node.exists():
                            if connected_node is not None and connected_node.exists(): 
                                try: node.connectAttr(type, connected_node, type)
                                except: pass
                    if len(arg) > 0:
                        node = [i for i in bsInternal.getNodes() if hasattr(i, 'getName') and i.getName().lower() == arg[0].lower()]
                        if len(node) > 0: 
                            node = node[0]
                            if len(arg) < 3: arg[2] = 'position'
                            if is_num(arg[1]) and int(arg[1]) < len(a.players): 
                                player = a.players[int(arg[1])]
                                if player.exists(): connect(player.actor.node, node, arg[2])
                            elif arg[1] == "all":
                                for i in a.players: 
                                    if i.exists(): connect(i.actor.node, node, arg[2])
                            elif self.player is not None and self.player.exists(): connect(self.player.actor.node, node, arg[2])
                    else:
                        for i in [command+' [имя объекта (/nodes names)] [номер игрока | all] [тип присоединения]', \
                            command+' [email protected]:259 all position']: send_message(i)
                    
                        
                elif command in ['head'] and self.is_admin:
                    if len(arg) > 0:
                        def head(player=None):
                            if player is not None and player.exists() and player.isAlive():
                                player.actor.node.holdNode = player.actor.node
                        if is_num(arg[0]) and int(arg[0]) < len(a.players): head(a.players[int(arg[0])])
                        elif arg[0] == "all":
                            for i in a.players: head(i)
                        elif self.player is not None: head(self.player)
                    else:
                        for i in [command+" [номер игрока | all]", command+" 2", command+" me"]: send_message(i)

                elif command in ['rise', 'rs'] and self.is_vip:
                    if len(arg) > 0:
                        def respawn(player=None):
                            if player is not None and player.exists() and not player.isAlive():
                                player.gameData['respawnTimer'] = player.gameData['respawnIcon'] = None
                                with bs.Context(a): a.spawnPlayer(player=player)
                        if is_num(arg[0]) and int(arg[0]) < len(a.players): respawn(a.players[int(arg[0])])
                        elif arg[0] == "all":
                            for i in a.players: respawn(i)
                        elif self.player is not None: respawn(self.player)
                    else:
                        for i in [command+" [номер игрока | all]", command+" 2", command+" me"]: send_message(i)
                        
                elif command in ['flex','fl'] and self.is_vip:
                    if not gEvent:
                        send_message("Сейчас это недоступно")
                        return 
                    if len(arg) > 0:
                        def flex(actor=None):
                            def work(node=None):
                                if node is not None and node.exists(): node.handleMessage('celebrate', 1000)
                            if actor is not None and actor.exists():
                                if not hasattr(actor, '_flex') or (hasattr(actor, '_flex') and actor._flex is None):
                                    actor._flex = bs.Timer(1000, bs.Call(work, actor.node), repeat=True)
                                    work(node=actor.node)
                                else: actor._flex = None
                        if is_num(arg[0]) and int(arg[0]) < len(a.players): flex(a.players[int(arg[0])].actor)
                        elif arg[0] == 'all':
                            for i in find_players_and_bots(): flex(i)
                        elif self.player is not None and self.player.exists(): flex(self.player.actor)
                    else:
                        for i in [command+" [номер игрока|all]", command+" 0", command+" me", "введи команду повторно, чтобы её отменить"]: send_message(i)
                        
                elif command in ['dn', 'dance'] and self.is_admin:
                    if not gEvent:
                        send_message("Сейчас это недоступно")
                        return 
                    if len(arg) > 0:
                        def dance(actor=None):
                            def work(node=None):
                                if node is not None and node.exists():
                                    pos = (node.position[0], node.position[1] + 0.5, node.position[2])
                                    node.handleMessage("impulse", pos[0], pos[1], pos[2], 0, -2, 0, 2000, 0, 1, 0, 0, -2, 0)
                            if actor is not None and actor.exists(): 
                                if not hasattr(actor, '_dance') or (hasattr(actor, '_dance') and actor._dance is None):
                                    actor._dance = bs.Timer(100, bs.Call(work, actor.node), repeat=True)
                                    work(node=actor.node)
                                else: actor._dance = None
                        if is_num(arg[0]) and int(arg[0]) < len(a.players): dance(a.players[int(arg[0])].actor)
                        elif arg[0] == 'all':
                            for i in find_players_and_bots(): dance(i)
                        elif self.player is not None and self.player.exists(): dance(self.player.actor)
                    else:
                        for i in [command+" [номер игрока|all]", command+" 0", command+" me", "введи команду повторно, чтобы её отменить"]: send_message(i)
                        
                elif command in ['dn2', 'dance2'] and self.is_admin:
                    if not gEvent:
                        send_message("Сейчас это недоступно")
                        return 
                    if len(arg) > 0:
                        def dance2(actor=None):
                            def work(node=None):
                                if node is not None and node.exists():
                                    node.jumpPressed = True
                                    node.jumpPressed = False
                            if actor is not None and actor.exists(): 
                                if not hasattr(actor, '_dance2') or (hasattr(actor, '_dance2') and actor._dance2 is None):
                                    actor._dance2 = bs.Timer(500, bs.Call(work, actor.node), repeat=True)
                                    work(node=actor.node)
                                else: actor._dance2 = None
                        if is_num(arg[0]) and int(arg[0]) < len(a.players): dance2(a.players[int(arg[0])].actor)
                        elif arg[0] == 'all':
                            for i in find_players_and_bots(): dance2(i)
                        elif self.player is not None and self.player.exists(): dance2(self.player.actor)
                    else:
                        for i in [command+" [номер игрока|all]", command+" 0", command+" me", "введи команду повторно, чтобы её отменить"]: send_message(i)