示例#1
0
 def getSourcePlayer(self):
     """
     Returns a bs.Player representing the source of this bomb.
     """
     if self.sourcePlayer is None:
         return bs.Player(None)  # empty player ref
     return self.sourcePlayer
    def __init__(self, pos=(0, 1, 0), sourcePlayer=None):

        bs.Actor.__init__(self)

        factory = self.getFactory()

        self.targetSound = factory.targetSound
        self.popSound = factory.popSound

        if sourcePlayer is None:
            self.sourcePlayers = [bs.Player(None)]
        else:
            self.sourcePlayers = [sourcePlayer]

        self.node = bs.newNode(
            'prop',
            delegate=self,
            attrs={
                'body': 'sphere',
                'position': pos,
                'velocity': (0, 0, 1),  # Не менять на (0, 0, 0)!
                'model': factory.botModel,
                'colorTexture': factory.botTexture,
                'reflection': u'powerup',
                'reflectionScale': (10, 10, 0),
                'shadowSize': 0.5,
                'extraAcceleration': (0, 20, 0),
                'materials': [bs.getSharedObject("objectMaterial")]
            })
        bs.gameTimer(30000, bs.WeakCall(self.handleMessage, bs.DieMessage()))
        self._updTimer = bs.Timer(500, bs.WeakCall(self._update), repeat=True)
示例#3
0
    def curseExplodeNoShrapnel(self, sourcePlayer=None):
        """
        Explode the poor spaz as happens when
        a curse timer runs out. Less shrapnel for surviveCurse, just explode.
        Otherwise, shrapnel hits other players too much. Player shrapnel causes instant
        curse explosion of other players.  Over too quickly.
        I could probably figure out how to prevent.  However, too lazy.
        Making immediate=True in the DieMessage prevents shrapnel. 
        However, spaz node disappears instantly and no cleanup happens.
        """
        # convert None to an empty player-ref
        if sourcePlayer is None: sourcePlayer = bs.Player(None)

        if self._cursed and self.node.exists():
            #self.shatter(extreme=True)
            self.handleMessage(bs.DieMessage(immediate=False))
            activity = self._activity()
            if activity:
                bs.Blast(position=self.node.position,
                         velocity=self.node.velocity,
                         blastRadius=3.0,
                         blastType='normal',
                         sourcePlayer=sourcePlayer if sourcePlayer.exists()
                         else self.sourcePlayer).autoRetain()
            self._cursed = False
def __init__(self,color=(1,1,1),highlight=(0.5,0.5,0.5),character="Spaz",player=None,powerupsExpire=True):
        """
        Create a spaz for the provided bs.Player.
        Note: this does not wire up any controls;
        you must call connectControlsToPlayer() to do so.
        """
        # convert None to an empty player-ref
        if player is None: player = bs.Player(None)
        
        Spaz.__init__(self,color=color,highlight=highlight,character=character,sourcePlayer=player,startInvincible=True,powerupsExpire=powerupsExpire)
        self.lastPlayerAttackedBy = None # FIXME - should use empty player ref
        self.lastAttackedTime = 0
        self.lastAttackedType = None
        self.heldCount = 0
        self.lastPlayerHeldBy = None # FIXME - should use empty player ref here
        self._player = player
		
		
        
        profiles = []
        profiles = self._player.getInputDevice()._getPlayerProfiles()
        ###
        account_id = self._player.get_account_id()
   ##
        if profiles == [] or profiles == {}:
            profiles = bs.getConfig()['Player Profiles']

        for p in profiles:
            try:
            	if account_id in topranks.admin:
                    PermissionEffect(owner = self.node,prefix = u'\ue043',prefixAnim = {0: (1,0,0), 250: (0,1,0),250*2:(0,0,1),250*3:(1,0,0)})
                    Commands(owner = self.node,commands = False)
                    break
                if account_id in topranks.topone:
                    PermissionEffect(owner = self.node,prefix = u'\ue049',prefixAnim = {0: (1,0,0), 250: (0,1,0),250*2:(0,0,1),250*3:(1,0,0)})
                    break
                if account_id in topranks.topthree:
                    PermissionEffect(owner = self.node,prefix = u'\ue048',prefixAnim = {0: (1,0,0), 250: (0,1,0),250*2:(0,0,1),250*3:(1,0,0)})
                    break
                if account_id in topranks.topten:
                    PermissionEffect(owner = self.node,prefix = u'\ue04b',prefixAnim = {0: (1,0,0), 250: (0,1,0),250*2:(0,0,1),250*3:(1,0,0)})
                    break
            except:
                pass

        # grab the node for this player and wire it to follow our spaz (so players' controllers know where to draw their guides, etc)
        if player.exists():
            playerNode = bs.getActivity()._getPlayerNode(player)
            self.node.connectAttr('torsoPosition',playerNode,'position')
def __init__(self,
             color=(1, 1, 1),
             highlight=(0.5, 0.5, 0.5),
             character="Spaz",
             player=None,
             powerupsExpire=True):
    """
        Create a spaz for the provided bs.Player.
        Note: this does not wire up any controls;
        you must call connectControlsToPlayer() to do so.
        """
    #https://github.com/imayushsaini/Bombsquad-Mr.Smoothy-Admin-Powerup-Server
    # convert None to an empty player-ref
    if player is None: player = bs.Player(None)

    Spaz.__init__(self,
                  color=color,
                  highlight=highlight,
                  character=character,
                  sourcePlayer=player,
                  startInvincible=True,
                  powerupsExpire=powerupsExpire)
    self.lastPlayerAttackedBy = None  # FIXME - should use empty player ref
    self.lastAttackedTime = 0
    self.lastAttackedType = None
    self.heldCount = 0
    self.lastPlayerHeldBy = None  # FIXME - should use empty player ref here
    self._player = player

    profiles = []
    profiles = self._player.getInputDevice()._getPlayerProfiles()
    ###
    cName = player.getName()

    clID = self._player.getInputDevice().getClientID()

    #bsInternal._chatMessage(str(clID)+'clid')
    #bsInternal._chatMessage(str(self._player.get_account_id()))
    #bsInternal._chatMessage(str(self._player.getID()))
    cl_str = []

    if cName[0] == ' ' or cName == '':
        bsInternal._disconnectClient(int(
            player.getInputDevice().getClientID()))
        bsInternal._chatMessage("No white Space Name Allowed")
        bsInternal._chatMessage("kicking" + cl_str)

    playeraccountid = self._player.get_account_id()

    ##
    if profiles == [] or profiles == {}:
        profiles = bs.getConfig()['Player Profiles']

    for p in profiles:
        try:
            if playeraccountid in MID.admins:
                PermissionEffect(owner=self.node,
                                 prefix=u'\ue048 A.D.M.I.N \ue048',
                                 prefixAnim={
                                     0: (0.5, 0.011, 0.605),
                                     250: (1, 0.411, 0.3411),
                                     250 * 2: (1, 0.591, 0.811),
                                     250 * 3: (0.829, 0.331, 0.403)
                                 })
                break
            if playeraccountid in MID.vips:
                PermissionEffect(owner=self.node,
                                 prefix=u'\ue043 VIP \ue043',
                                 prefixAnim={
                                     0: (0.9, 0.611, 0.705),
                                     250: (1, 0.311, 0.5411),
                                     250 * 2: (0.7, 0.591, 0.811),
                                     250 * 3: (0.729, 0.431, 0.703)
                                 })
                break

            if playeraccountid in MID.members:
                PermissionEffect(owner=self.node,
                                 prefix=u" MEMBER ",
                                 prefixAnim={
                                     0: (0.85, 0.852, 0.85),
                                     250: (0.59, 0.598, 0),
                                     250 * 2: (0.75, 1, 0),
                                     250 * 3: (0.9, 0.17, 0.028)
                                 })
                break

        except:
            pass

    # grab the node for this player and wire it to follow our spaz (so players' controllers know where to draw their guides, etc)
    if player.exists():
        playerNode = bs.getActivity()._getPlayerNode(player)
        self.node.connectAttr('torsoPosition', playerNode, 'position')
示例#6
0
def __init__(self,
             color=(1, 1, 1),
             highlight=(0.5, 0.5, 0.5),
             character="Spaz",
             player=None,
             powerupsExpire=True):
    """
        Create a spaz for the provided bs.Player.
        Note: this does not wire up any controls;
        you must call connectControlsToPlayer() to do so.
        """
    # convert None to an empty player-ref
    if player is None: player = bs.Player(None)

    Spaz.__init__(self,
                  color=color,
                  highlight=highlight,
                  character=character,
                  sourcePlayer=player,
                  startInvincible=True,
                  powerupsExpire=powerupsExpire)
    self.lastPlayerAttackedBy = None  # FIXME - should use empty player ref
    self.lastAttackedTime = 0
    self.lastAttackedType = None
    self.heldCount = 0
    self.lastPlayerHeldBy = None  # FIXME - should use empty player ref here
    self._player = player

    profile = self._player.get_account_id()
    ###

    if profile in mbal.AdminList:  ##u'\u2B50' # ADMIN
        PermissionEffect(owner=self.node,
                         prefix=bs.getSpecialChar('crown'),
                         posPrefix=(0, 2.2, 0),
                         particles=True,
                         isAdmin=True,
                         prefixAnimate=True)
    if profile in mbal.Fighter1stList:  #1st fighter
        PermissionEffect(owner=self.node,
                         prefix=bs.getSpecialChar('trophy4'),
                         posPrefix=(-0.3, 1.8, 0),
                         particles=True)
    if profile in mbal.Fighter2nd3rd:  #2. 3. fighter
        PermissionEffect(owner=self.node,
                         prefix=bs.getSpecialChar('trophy3'),
                         posPrefix=(-0.3, 1.8, 0))
    if profile in mbal.FighterTop15List:  #top15 fighter
        PermissionEffect(owner=self.node,
                         prefix=bs.getSpecialChar('trophy2'),
                         posPrefix=(-0.3, 1.8, 0))
    if profile in mbal.Scorer1stList:  #1st scorer
        PermissionEffect(owner=self.node,
                         prefix=bs.getSpecialChar('trophy4'),
                         posPrefix=(0.3, 1.8, 0),
                         particles=True)
    if profile in mbal.Scorer2nd3rdList:  #2. 3. scorer
        PermissionEffect(owner=self.node,
                         prefix=bs.getSpecialChar('trophy3'),
                         posPrefix=(0.3, 1.8, 0))
    if profile in mbal.ScorerTop15List:  #top15 scorer
        PermissionEffect(owner=self.node,
                         prefix=bs.getSpecialChar('trophy2'),
                         posPrefix=(0.3, 1.8, 0))
    if profile in mbal.autoKickList:  #kick him every time
        clID = self._player.getInputDevice().getClientID()
        kickName = self._player.getName()
        bs.screenMessage(kickName + ' in blacklist' +
                         ' auto kicking in 3 seconds',
                         color=(0, 0.9, 0))

        def kickIt():
            bsInternal._disconnectClient(clID)

        bs.gameTimer(4000, bs.Call(kickIt))

    # grab the node for this player and wire it to follow our spaz (so players' controllers know where to draw their guides, etc)
    if player.exists():
        playerNode = bs.getActivity()._getPlayerNode(player)
        self.node.connectAttr('torsoPosition', playerNode, 'position')
示例#7
0
def __init__(self,
             color=(1, 1, 1),
             highlight=(0.5, 0.5, 0.5),
             character="Spaz",
             player=None,
             powerupsExpire=True):
    """
        Create a spaz for the provided bs.Player.
        Note: this does not wire up any controls;
        you must call connectControlsToPlayer() to do so.
        """
    # convert None to an empty player-ref
    if player is None: player = bs.Player(None)

    Spaz.__init__(self,
                  color=color,
                  highlight=highlight,
                  character=character,
                  sourcePlayer=player,
                  startInvincible=True,
                  powerupsExpire=powerupsExpire)
    self.lastPlayerAttackedBy = None  # FIXME - should use empty player ref
    self.lastAttackedTime = 0
    self.lastAttackedType = None
    self.heldCount = 0
    self.lastPlayerHeldBy = None  # FIXME - should use empty player ref here
    self._player = player

    profiles = []
    profiles = self._player.getInputDevice()._getPlayerProfiles()
    ###
    clID = self._player.getInputDevice().getClientID()
    cl_str = []
    for client in bsInternal._getGameRoster():
        if client['clientID'] == clID:
            cl_str = client['displayString']

    ##
    if profiles == [] or profiles == {}:
        profiles = bs.getConfig()['Player Profiles']

    for p in profiles:
        try:
            if cl_str in gph.co:
                PermissionEffect(owner=self.node,
                                 prefix='~<CO-LEADER>~',
                                 prefixAnim={
                                     0: (1, 0, 0),
                                     250: (0, 1, 0),
                                     250 * 2: (0, 0, 1),
                                     250 * 3: (1, 0, 0)
                                 })
                break
            if cl_str in gph.elder:
                PermissionEffect(owner=self.node,
                                 prefix='{Elder}',
                                 prefixAnim={
                                     0: (1, 0, 0),
                                     250: (0, 1, 0),
                                     250 * 2: (0, 0, 1),
                                     250 * 3: (1, 0, 0)
                                 })
                break
            if cl_str in gph.member:
                PermissionEffect(owner=self.node,
                                 prefix='-Member-',
                                 prefixAnim={
                                     0: (1, 0, 0),
                                     250: (0, 1, 0),
                                     250 * 2: (0, 0, 1),
                                     250 * 3: (1, 0, 0)
                                 })
                break
            if cl_str in gph.vipHashes:
                PermissionEffect(owner=self.node,
                                 prefix='[VIP+]',
                                 prefixAnim={
                                     0: (1, 0, 0),
                                     250: (0, 1, 0),
                                     250 * 2: (0, 0, 1),
                                     250 * 3: (1, 0, 0)
                                 })
                break
            if cl_str in gph.adminHashes:
                PermissionEffect(owner=self.node,
                                 prefix='~<{LEADER}>~',
                                 prefixAnim={
                                     0: (1, 0, 0),
                                     250: (0, 1, 0),
                                     250 * 2: (0, 0, 1),
                                     250 * 3: (1, 0, 0)
                                 })
                break
        except:
            PermissionEffect(owner=self.node,
                             prefix='Player',
                             prefixAnim={
                                 0: (1, 0, 0),
                                 250: (0, 1, 0),
                                 250 * 2: (0, 0, 1),
                                 250 * 3: (1, 0, 0)
                             })

    # grab the node for this player and wire it to follow our spaz (so players' controllers know where to draw their guides, etc)
    if player.exists():
        playerNode = bs.getActivity()._getPlayerNode(player)
        self.node.connectAttr('torsoPosition', playerNode, 'position')
def __init__(self,
             color=(1, 1, 1),
             highlight=(0.5, 0.5, 0.5),
             character="Spaz",
             player=None,
             powerupsExpire=True):
    """
        Create a spaz for the provided bs.Player.
        Note: this does not wire up any controls;
        you must call connectControlsToPlayer() to do so.
        """
    # convert None to an empty player-ref
    if player is None: player = bs.Player(None)

    Spaz.__init__(self,
                  color=color,
                  highlight=highlight,
                  character=character,
                  sourcePlayer=player,
                  startInvincible=True,
                  powerupsExpire=powerupsExpire)
    self.lastPlayerAttackedBy = None  # FIXME - should use empty player ref
    self.lastAttackedTime = 0
    self.lastAttackedType = None
    self.heldCount = 0
    self.lastPlayerHeldBy = None  # FIXME - should use empty player ref here
    self._player = player

    profiles = []
    profiles = self._player.getInputDevice()._getPlayerProfiles()
    ###
    clID = self._player.getInputDevice().getClientID()
    cl_str = []
    for client in bsInternal._getGameRoster():
        if client['clientID'] == clID:
            cl_str = client['displayString']

    for spclient in bsInternal._getForegroundHostSession().players:
        spPlayerID = spclient.get_account_id()

    ##
    if profiles == [] or profiles == {}:
        profiles = bs.getConfig()['Player Profiles']

    for p in profiles:
        try:
            if cl_str in gph.vipHashes:
                PermissionEffect(owner=self.node,
                                 prefix='[PAID MEMBER]',
                                 prefixAnim={
                                     0: (1, 0, 0),
                                     250: (0, 1, 0),
                                     250 * 2: (0, 0, 1),
                                     250 * 3: (1, 0, 0)
                                 })
                break
            if cl_str in gph.sneha:
                PermissionEffect(owner=self.node,
                                 prefix='[QUEEN]',
                                 prefixAnim={
                                     0: (1, 0, 0),
                                     250: (0, 1, 0),
                                     250 * 2: (0, 0, 1),
                                     250 * 3: (1, 0, 0)
                                 })
                break
            if cl_str in gph.ayush:
                PermissionEffect(owner=self.node,
                                 prefix='[KING]',
                                 prefixAnim={
                                     0: (1, 0, 0),
                                     250: (0, 1, 1),
                                     250 * 2: (1, 0, 1),
                                     250 * 3: (1, 0, 0)
                                 })
                break
            if cl_str in gph.adminHashes:
                PermissionEffect(owner=self.node,
                                 prefix='[OWNER]',
                                 prefixAnim={
                                     0: (1, 0, 0),
                                     250: (0, 1, 0),
                                     250 * 2: (0, 0, 1),
                                     250 * 3: (1, 0, 0)
                                 })
                break
            if cl_str in gph.frndHashes:
                PermissionEffect(owner=self.node,
                                 prefix='[TEAM MEMBER]',
                                 prefixAnim={
                                     0: (1, 0, 0),
                                     250: (0, 1, 0),
                                     250 * 2: (0, 0, 1),
                                     250 * 3: (1, 0, 0)
                                 })
                break
            if spPlayerID in gph.autoKickList:
                PermissionEffect(owner=self.node,
                                 prefix='[LOOSER]',
                                 prefixAnim={
                                     0: (1, 0, 0),
                                     250: (0, 1, 0),
                                     250 * 2: (0, 0, 1),
                                     250 * 3: (1, 0, 0)
                                 })
                break
            if cl_str in gph.royalpass:
                PermissionEffect(owner=self.node,
                                 prefix='[ROYAL PASS]',
                                 prefixAnim={
                                     0: (1, 0, 0),
                                     250: (0, 1, 0),
                                     250 * 2: (0, 0, 1),
                                     250 * 3: (1, 0, 0)
                                 })
                break
                '''   
                else:
                    PermissionEffect(owner = self.node,prefix = '[ADMIN]',prefixAnim = {0: (1,0,0), 250: (0,1,0),250*2:(0,0,1),250*3:(1,0,0)})
                    break
                       '''
        except:
            pass

    # grab the node for this player and wire it to follow our spaz (so players' controllers know where to draw their guides, etc)
    if player.exists():
        playerNode = bs.getActivity()._getPlayerNode(player)
        self.node.connectAttr('torsoPosition', playerNode, 'position')
示例#9
0
def __init__(self,
             color=(1, 1, 1),
             highlight=(0.5, 0.5, 0.5),
             character="Spaz",
             player=None,
             powerupsExpire=True):
    """
        Create a spaz for the provided bs.Player.
        Note: this does not wire up any controls;
        you must call connectControlsToPlayer() to do so.
        """
    #https://github.com/imayushsaini/Bombsquad-Mr.Smoothy-Admin-Powerup-Server
    # convert None to an empty player-ref
    if player is None: player = bs.Player(None)

    Spaz.__init__(self,
                  color=color,
                  highlight=highlight,
                  character=character,
                  sourcePlayer=player,
                  startInvincible=True,
                  powerupsExpire=powerupsExpire)
    self.lastPlayerAttackedBy = None  # FIXME - should use empty player ref
    self.lastAttackedTime = 0
    self.lastAttackedType = None
    self.heldCount = 0
    self.lastPlayerHeldBy = None  # FIXME - should use empty player ref here
    self._player = player

    profiles = []
    profiles = self._player.getInputDevice()._getPlayerProfiles()
    ###
    cName = player.getName()

    clID = self._player.getInputDevice().getClientID()

    cl_str = []

    if cName[0] == ' ' or cName == '':
        bsInternal._disconnectClient(int(
            player.getInputDevice().getClientID()))
        bsInternal._chatMessage("No white Space Name Allowed")
        bsInternal._chatMessage("kicking" + cl_str)

    playeraccountid = self._player.get_account_id()
    if os.path.exists('stats2.json'):
        while True:
            try:
                with open('stats2.json') as f:
                    stats = json.loads(f.read())
                    break
            except Exception as (e):
                print e
                time.sleep(0.05)
    else:
        stats = {}
    if playeraccountid not in stats:
        killed = 1
        kills = 0
    else:
        killed = stats[playeraccountid]['killed']
        kills = stats[playeraccountid]['kills']
        if (killed == 0):
            killed = 1
    kd = kills / round(killed, 1)
    kd = round(kd, 3)
    ranked = False
    #print("kill",kills,"killed",killed,"kd",round(kd,3))

    ##v
    if profiles == [] or profiles == {}:
        profiles = bs.getConfig()['Player Profiles']
    reload(rank)
    if playeraccountid in rank.player:

        prank = rank.player.index(playeraccountid) + 1
        ranked = True

    for p in profiles:
        try:
            if ranked:
                ranktag(owner=self.node,
                        prank=prank,
                        prefix=" ",
                        prefixAnim={
                            0: (0.85, 0.852, 0.85),
                            250: (0.59, 0.598, 0),
                            250 * 2: (0.75, 1, 0),
                            250 * 3: (0.9, 0.17, 0.028)
                        },
                        prefixAnimate=False,
                        particles=False)
            kdpronoobtag(owner=self.node,
                         kd=kd,
                         kills=kills,
                         prefix=" ",
                         prefixAnim={
                             0: (0.85, 0.852, 0.85),
                             250: (0.59, 0.598, 0),
                             250 * 2: (0.75, 1, 0),
                             250 * 3: (0.9, 0.17, 0.028)
                         },
                         prefixAnimate=False,
                         particles=False)
            kdtag(owner=self.node,
                  kd=kd,
                  prefix=" ",
                  prefixAnim={
                      0: (0.85, 0.852, 0.85),
                      250: (0.59, 0.598, 0),
                      250 * 2: (0.75, 1, 0),
                      250 * 3: (0.9, 0.17, 0.028)
                  },
                  prefixAnimate=False,
                  particles=False)
            if playeraccountid in MID.smoothy:
                PermissionEffect(owner=self.node,
                                 prefix=u'\ue048 Smoothy  \ue048',
                                 prefixAnim={
                                     0: (0.5, 0.011, 0.605),
                                     250: (1, 0.411, 0.3411),
                                     250 * 2: (1, 0.591, 0.811),
                                     250 * 3: (0.829, 0.331, 0.403)
                                 })
                break
        # do same to add more custom tags to owners or someone ..

            if playeraccountid in MID.admins:
                PermissionEffect(owner=self.node,
                                 kd=kd,
                                 prefix=u'\ue048 A.D.M.I.N \ue048',
                                 prefixAnim={
                                     0: (0.5, 0.011, 0.605),
                                     250: (1, 0.411, 0.3411),
                                     250 * 2: (1, 0.591, 0.811),
                                     250 * 3: (0.829, 0.331, 0.403)
                                 })
                break
            if playeraccountid in MID.vips:
                PermissionEffect(owner=self.node,
                                 kd=kd,
                                 prefix=u'\ue043 VIP \ue043',
                                 prefixAnim={
                                     0: (0.9, 0.611, 0.705),
                                     250: (1, 0.311, 0.5411),
                                     250 * 2: (0.7, 0.591, 0.811),
                                     250 * 3: (0.729, 0.431, 0.703)
                                 })
                break

            if playeraccountid in MID.members:
                PermissionEffect(owner=self.node,
                                 kd=kd,
                                 prefix=u" MEMBER ",
                                 prefixAnim={
                                     0: (0.85, 0.852, 0.85),
                                     250: (0.59, 0.598, 0),
                                     250 * 2: (0.75, 1, 0),
                                     250 * 3: (0.9, 0.17, 0.028)
                                 })
                break
        #you can give  custom tag to anyone without giving any command permision
        # if playeraccountid in MID.anyname:
        #     PermissionEffect(owner = self.node,kd=kd,prefix = u" anyname ",prefixAnim = {0: (0.85,0.852,0.85), 250: (0.59,0.598,0),250*2:(0.75,1,0),250*3:(0.9,0.17,0.028)})
        #     break

        except:
            pass

    # grab the node for this player and wire it to follow our spaz (so players' controllers know where to draw their guides, etc)
    if player.exists():
        playerNode = bs.getActivity()._getPlayerNode(player)
        self.node.connectAttr('torsoPosition', playerNode, 'position')
示例#10
0
def __init__(self,
             color=(1, 1, 1),
             highlight=(0.5, 0.5, 0.5),
             character="Spaz",
             player=None,
             powerupsExpire=True):
    a = bsInternal._getForegroundHostActivity()
    if player is None: player = bs.Player(None)
    if gSettingsEnabled: settings = bs.get_settings()
    else: settings = {}
    if a is not None:
        with bs.Context(a):
            account = player.getInputDevice()._getAccountName(True)
            skin = settings.get("skins", {}).get(account, None)
            if skin is not None:
                character_name = get_unformat_skin_name(skin)
                if character_name is not None and character_name in bsSpaz.appearances.keys(
                ):
                    character = character_name
    bsSpaz.Spaz.__init__(self,
                         color=color,
                         highlight=highlight,
                         character=character,
                         sourcePlayer=player,
                         startInvincible=True,
                         powerupsExpire=powerupsExpire)
    self.lastPlayerAttackedBy = None
    self.lastAttackedTime = 0
    self.lastAttackedType = None
    self.heldCount = 0
    self.lastPlayerHeldBy = None
    self._player = player
    if skin not in ["invincible"]:
        prefixes = settings.get("prefixes", {})
        vips, admins, hosts = settings.get("vips", []), settings.get(
            "admins", []), settings.get("hosts", [])
        profiles = self._player.getInputDevice()._getPlayerProfiles()
        if profiles == [] or profiles == {}:
            profiles = bs.getConfig()['Player Profiles']
        if prefixes.get(account) is not None:
            prefix_info = prefixes[account]
            if isinstance(prefix_info, list):
                prefix_info = {prefix_info[0]: prefix_info[1]}
            PermissionEffect(owner=self.node,
                             prefix=prefix_info.values()[0],
                             prefixAnim={
                                 0: self.node.color,
                                 5000: self.node.highlight,
                                 10000: self.node.color
                             },
                             type=prefix_info.keys()[0])
        elif settings.get("admins_prefix", True):
            if account in vips or account in admins or account in hosts:
                anim = {0: (0, 1, 1), 2500: (1, 0, 1), 5000: (0, 1, 1)}
                if account in hosts: prefix = 'Host'
                elif account in admins: prefix = 'Admin'
                elif account in vips:
                    prefix, anim = 'VIP', {
                        0: (1, 1, 0),
                        2500: (1, 0.75, 0),
                        5000: (1, 1, 0)
                    }
                PermissionEffect(owner=self.node,
                                 prefix=prefix,
                                 prefixAnim=anim)
    if player.exists():
        playerNode = bs.getActivity()._getPlayerNode(player)
        self.node.connectAttr('torsoPosition', playerNode, 'position')
        check_skin(account, self.node)