Пример #1
0
 def resetFlags(self):
     #remake the flags
     self._flag1 = bs.Flag(position=(0, 3, 1),
                           touchable=True,
                           color=(0, 0, 1))
     self._flag2 = bs.Flag(position=(0, 3, -5),
                           touchable=True,
                           color=(1, 0, 0))
     self._flag3 = bs.Flag(position=(3, 3, -2),
                           touchable=True,
                           color=(0, 1, 0))
     self._flag4 = bs.Flag(position=(-3, 3, -2),
                           touchable=True,
                           color=(1, 1, 1))
     self._flag5 = bs.Flag(position=(1.8, 3, .2),
                           touchable=True,
                           color=(0, 1, 1))
     self._flag6 = bs.Flag(position=(-1.8, 3, .2),
                           touchable=True,
                           color=(1, 0, 1))
     self._flag7 = bs.Flag(position=(1.8, 3, -3.8),
                           touchable=True,
                           color=(1, 1, 0))
     self._flag8 = bs.Flag(position=(-1.8, 3, -3.8),
                           touchable=True,
                           color=(0, 0, 0))
Пример #2
0
    def onBegin(self):
        bs.TeamGameActivity.onBegin(self)
        self.setupStandardTimeLimit(self.settings['Time Limit'])
        # self.setupStandardPowerupDrops() #no powerups due to boxing
        self._flagPos = self.getMap().getFlagPosition(None)
        bs.gameTimer(1000, self._tick, repeat=True)
        self._flagState = self.FLAG_NEW
        self.projectFlagStand(self._flagPos)

        self._flag = bs.Flag(position=self._flagPos,
                             touchable=False,
                             color=(1, 1, 1))
        self._flagLight = bs.newNode('light',
                                     attrs={
                                         'position': self._flagPos,
                                         'intensity': 0.2,
                                         'heightAttenuated': False,
                                         'radius': 0.4,
                                         'color': (0.2, 0.2, 0.2)
                                     })

        # flag region
        bs.newNode('region',
                   attrs={
                       'position':
                       self._flagPos,
                       'scale': (1.8, 1.8, 1.8),
                       'type':
                       'sphere',
                       'materials': [
                           self._flagRegionMaterial,
                           bs.getSharedObject('regionMaterial')
                       ]
                   })
        self._updateFlagState()
Пример #3
0
    def onBegin(self):
        bs.TeamGameActivity.onBegin(self)
        self.setupStandardTimeLimit(self.settings['Time Limit'])
        self.setupStandardPowerupDrops()
        if len(self.teams) > 0:
            self._scoreToWin = self.settings['Capsules to Collect'] * max(1,max(len(t.players) for t in self.teams))
        else: self._scoreToWin = self.settings['Capsules to Collect']
        self._updateScoreBoard()
        self._dingSound = bs.getSound('dingSmall')
        if isinstance(bs.getActivity().getSession(),bs.FreeForAllSession):
            self._flagNumber = random.randint(0,1)
            self._flagPos = self.getMap().getFlagPosition(self._flagNumber)
        else: self._flagPos = self.getMap().getFlagPosition(None)
        bs.gameTimer(1000,self._tick,repeat=True)
        self._flagState = self.FLAG_NEW
        self.projectFlagStand(self._flagPos)

        self._flag = bs.Flag(position=self._flagPos,
                             touchable=False,
                             color=(1,1,1))
        self._flagLight = bs.newNode('light',
                                     attrs={'position':self._flagPos,
                                            'intensity':0.2,
                                            'heightAttenuated':False,
                                            'radius':0.4,
                                            'color':(0.2,0.2,0.2)})

        # flag region
        bs.newNode('region',
                   attrs={'position':self._flagPos,
                          'scale': (1.8,1.8,1.8),
                          'type': 'sphere',
                          'materials':[self._flagRegionMaterial,bs.getSharedObject('regionMaterial')]})
        self._updateFlagState()
    def makeRound(self):
        for player in self.players:
            if player.gameData['survived']: player.gameData['score'] += 10
        self.roundNum += 1
        self.flags = []
        self.spawned = []
        angle = random.randint(0, 359)
        c = 0
        for player in self.players:
            if player.gameData['survived']: c += 1
        spacing = 10
        for player in self.players:
            player.gameData['done'] = False
            if player.gameData['survived']:
                self.spawnPlayerSpaz(player, (.5, 5, -4))
                self.spawned.append(player)
        try:
            spacing = 360 // (c)
        except:
            self.checkEnd()
        colors = [(1, 0, 0), (0, 1, 0), (0, 0, 1), (1, 1, 0), (1, 0, 1),
                  (0, 1, 1), (0, 0, 0)]

        for i in range(c - 1):
            angle += spacing
            angle %= 360
            x = 6 * sin(degrees(angle))
            z = 6 * cos(degrees(angle))
            flag = bs.Flag(position=(x + .5, 5, z - 4),
                           color=colors[i]).autoRetain()
            self.flags.append(flag)
Пример #5
0
 def _spawnFlag(self):
     bs.playSound(self._swipSound)
     self._flashFlagSpawn()
     self._flag = bs.Flag(droppedTimeout=20, position=self._flagSpawnPos)
     self._flagState = self.FLAG_NEW
     self._flag.light = bs.newNode('light',
                                   owner=self._flag.node,
                                   attrs={
                                       'intensity': 0.2,
                                       'radius': 0.3,
                                       'color': (0.2, 0.2, 0.2)
                                   })
     self._flag.node.connectAttr('position', self._flag.light, 'position')
     self._updateFlagState()
Пример #6
0
    def onBegin(self):
        bs.TeamGameActivity.onBegin(self)

        self.setupStandardTimeLimit(self.settings['Time Limit'])
        self.setupStandardPowerupDrops()

        self._baseRegionMaterials = {}
        for team in self.teams:
            m = self._baseRegionMaterials[team.getID()] = bs.Material()
            m.addActions(conditions=('theyHaveMaterial',
                                     bs.getSharedObject('playerMaterial')),
                         actions=(('modifyPartCollision', 'collide', True),
                                  ('modifyPartCollision', 'physical', False),
                                  ('call', 'atConnect',
                                   bs.Call(self._handleBaseCollide, team))))

        # create a score region and flag for each team
        for team in self.teams:
            team.gameData['basePos'] = self.getMap().getFlagPosition(
                team.getID())

            bs.newNode('light',
                       attrs={
                           'position': team.gameData['basePos'],
                           'intensity': 0.6,
                           'heightAttenuated': False,
                           'volumeIntensityScale': 0.1,
                           'radius': 0.1,
                           'color': team.color
                       })

            self.projectFlagStand(team.gameData['basePos'])

            team.gameData['flag'] = bs.Flag(touchable=False,
                                            position=team.gameData['basePos'],
                                            color=team.color)
            p = team.gameData['basePos']
            region = bs.newNode('region',
                                owner=team.gameData['flag'].node,
                                attrs={
                                    'position': (p[0], p[1] + 0.75, p[2]),
                                    'scale': (0.5, 0.5, 0.5),
                                    'type':
                                    'sphere',
                                    'materials':
                                    [self._baseRegionMaterials[team.getID()]]
                                })
Пример #7
0
 def __init__(self, settings):
     bs.TeamGameActivity.__init__(self, settings)
     self._puckMaterial = bs.Material()
     self._puckMaterial.addActions(actions=(("modifyPartCollision",
                                             "friction", 100000)))
     self._puckMaterial.addActions(
         conditions=("theyHaveMaterial",
                     bs.getSharedObject('pickupMaterial')),
         actions=(("modifyPartCollision", "collide", False)))
     self._puckMaterial.addActions(
         conditions=(("weAreYoungerThan", 100), 'and',
                     ("theyHaveMaterial",
                      bs.getSharedObject('objectMaterial'))),
         actions=(("modifyNodeCollision", "collide", False)))
     self.pucks = []
     self.flag = bs.Flag(color=(1, 1, 1),
                         position=(0, 1, -2),
                         touchable=True)
Пример #8
0
    def _setChosenOnePlayer(self,player):
        try:
            for p in self.players: p.gameData['chosenLight'] = None
            bs.playSound(self._swipSound)
            if player is None or not player.exists():
                self._flag = bs.Flag(color=(1,0.9,0.2),
                                     position=self._flagSpawnPos,
                                     touchable=False)
                self._chosenOnePlayer = None

                l = bs.newNode('light',
                               owner=self._flag.node,
                               attrs={'position': self._flagSpawnPos,
                                      'intensity':0.6,
                                      'heightAttenuated':False,
                                      'volumeIntensityScale':0.1,
                                      'radius':0.1,
                                      'color': (1.2,1.2,0.4)})

                self._flashFlagSpawn()
            else:
                if player.actor is not None:
                    self._flag = None
                    self._chosenOnePlayer = player

                    if player.actor.node.exists():
                        if self.settings['Chosen One Gets Shield']: player.actor.handleMessage(bs.PowerupMessage('shield'))
                        if self.settings['Chosen One Gets Gloves']: player.actor.handleMessage(bs.PowerupMessage('punch'))
                        # use a color that's partway between their team color and white
                        color = [0.3+c*0.7 for c in bs.getNormalizedColor(player.getTeam().color)]
                        l = player.gameData['chosenLight'] = bs.NodeActor(bs.newNode('light',
                                                                                     attrs={"intensity":0.6,
                                                                                            "heightAttenuated":False,
                                                                                            "volumeIntensityScale":0.1,
                                                                                            "radius":0.13,
                                                                                            "color": color}))

                        bs.animate(l.node,'intensity',{0:1.0, 200:0.4, 400:1.0},loop=True)
                        player.actor.node.connectAttr('position',l.node,'position')
        except Exception,e:
            import traceback
            print 'EXC in _setChosenOnePlayer'
            traceback.print_exc(e)
            traceback,print_stack()
Пример #9
0
 def _spawnFlag(self):
     bs.playSound(self._swipSound)
     bs.playSound(self._whistleSound)
     self._flashFlagSpawn()
     self._flag = bs.Flag(position=self._flagSpawnPos,
                          droppedTimeout=20,
                          color=(1, 1, 0.3))
     self._flag.scored = False
     self._flag.heldCount = 0
     self._flag.lastHoldingPlayer = None
     self._flag.light = bs.newNode("light",
                                   owner=self._flag.node,
                                   attrs={
                                       "intensity": 0.25,
                                       "heightAttenuated": False,
                                       "radius": 0.2,
                                       "color": (0.9, 0.7, 0.0)
                                   })
     self._flag.node.connectAttr('position', self._flag.light, 'position')
Пример #10
0
 def _spawnFlag(self):
     bs.playSound(self._swipSound)
     bs.playSound(self._whistleSound)
     self._flashFlagSpawn()
     self._flag = bs.Flag(position=self._flagSpawnPos,
                          droppedTimeout=20,
                          color=(1, 1, 0.3))
     self._flag.node.isAreaOfInterest = True
     self._flag.respawnTimer = None
     self._flag.scored = False
     self._flag.heldCount = 0
     self._flag.light = bs.newNode('light',
                                   owner=self._flag.node,
                                   attrs={
                                       'intensity': 0.25,
                                       'heightAttenuated': False,
                                       'radius': 0.1,
                                       'color': (0.9, 0.7, 0.0)
                                   })
     self._flag.node.connectAttr('position', self._flag.light, 'position')
Пример #11
0
    def onBegin(self):
        bs.TeamGameActivity.onBegin(self)
        self.setupStandardTimeLimit(self.settings['Time Limit'])
        # self.setupStandardPowerupDrops() #no powerups due to boxing
        self._flagPos = self.getMap().getFlagPosition(None)
        bs.gameTimer(1000, self._tick, repeat=True)
        self._flagState = self.FLAG_NEW
        self.projectFlagStand(self._flagPos)

        self._flag = bs.Flag(position=self._flagPos,
                             touchable=False,
                             color=(1, 1, 1))
        self._flagLight = bs.newNode('light',
                                     attrs={
                                         'position': self._flagPos,
                                         'intensity': 0.2,
                                         'heightAttenuated': False,
                                         'radius': 0.4,
                                         'color': (0.2, 0.2, 0.2)
                                     })

        # flag region
        bs.newNode('region',
                   attrs={
                       'position':
                       self._flagPos,
                       'scale': (1.8, 1.8, 1.8),
                       'type':
                       'sphere',
                       'materials': [
                           self._flagRegionMaterial,
                           bs.getSharedObject('regionMaterial')
                       ]
                   })
        self._updateFlagState()
        if self.settings["Change day to night"]:
            bs.getActivity().autoTint = True
            tint = bs.getSharedObject('globals').tint
            c = bs.newNode("combine",
                           attrs={
                               'input0': tint[0],
                               'input1': tint[1],
                               'input2': tint[2],
                               'size': 3
                           })
            if self._isSlowMotion == False:
                bs.animate(c,
                           'input0', {
                               0:
                               tint[0],
                               60000:
                               0.6,
                               120000:
                               0.5 if bs.getEnvironment()['platform']
                               == 'android' else 0.2,
                               180000:
                               0.6,
                               240000:
                               tint[0]
                           },
                           loop=True)
                bs.animate(c,
                           'input1', {
                               0:
                               tint[1],
                               60000:
                               0.3,
                               120000:
                               0.7 if bs.getEnvironment()['platform']
                               == 'android' else 0.2,
                               180000:
                               0.3,
                               240000:
                               tint[1]
                           },
                           loop=True)
                bs.animate(c,
                           'input2', {
                               0:
                               tint[2],
                               60000:
                               0.3,
                               120000:
                               1 if bs.getEnvironment()['platform']
                               == 'android' else 0.6,
                               180000:
                               0.3,
                               240000:
                               tint[2]
                           },
                           loop=True)
            else:
                bs.animate(c,
                           'input0', {
                               0:
                               tint[0],
                               30000:
                               0.6,
                               60000:
                               0.5 if bs.getEnvironment()['platform']
                               == 'android' else 0.2,
                               90000:
                               0.6,
                               120000:
                               tint[0]
                           },
                           loop=True)
                bs.animate(c,
                           'input1', {
                               0:
                               tint[1],
                               30000:
                               0.3,
                               60000:
                               0.7 if bs.getEnvironment()['platform']
                               == 'android' else 0.2,
                               90000:
                               0.3,
                               120000:
                               tint[1]
                           },
                           loop=True)
                bs.animate(c,
                           'input2', {
                               0:
                               tint[2],
                               30000:
                               0.3,
                               60000:
                               1 if bs.getEnvironment()['platform']
                               == 'android' else 0.6,
                               90000:
                               0.3,
                               120000:
                               tint[2]
                           },
                           loop=True)

            def superkostil():
                bs.getActivity().stdTint = bs.getSharedObject('globals').tint
                if bs.getActivity().autoTint == True:
                    c.connectAttr('output', bs.getSharedObject('globals'),
                                  'tint')

            self.updateTimer = bs.gameTimer(10, superkostil, repeat=True)
Пример #12
0
 def blueFlag(self):
     self.green = None
     self.blue = bs.Flag(position=(0.3, 5, -4.3),
                         touchable=True,
                         color=(0.5, 0.5, 2))
     bs.gameTimer(100, self.loopFlag)
Пример #13
0
 def greenFlag(self):
     self.red = None
     self.green = bs.Flag(position=(0.3, 5, -4.3),
                          touchable=True,
                          color=(0.5, 2, 0.5))
     bs.gameTimer(100, self.blueFlag)
Пример #14
0
 def redFlag(self):
     self.red = bs.Flag(position=(0.3, 5, -4.3),
                        touchable=True,
                        color=(2, 0.5, 0.5))
     bs.gameTimer(100, self.greenFlag)
Пример #15
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)