示例#1
0
文件: Pick.py 项目: Esie-Eyen/BSMods
 def handleMessage(self, m):
     if isinstance(m, bs.PlayerSpazDeathMessage):
         player = m.spaz.getPlayer()
         self.respawnPlayer(player)
     if isinstance(m, bs.FlagPickedUpMessage):
         if m.flag is self.red:
             if self._red:
                 self.pickFlag()
                 self._score()
                 m.node.handleMessage(bs.DieMessage())
             if not self._red: m.node.handleMessage(bs.FreezeMessage())
         elif m.flag is self.green:
             if self._green:
                 self.pickFlag()
                 self._score()
                 m.node.handleMessage(bs.DieMessage())
             if not self._green: m.node.handleMessage(bs.FreezeMessage())
         elif m.flag is self.blue:
             if self._blue:
                 self.pickFlag()
                 self._score()
                 m.node.handleMessage(bs.DieMessage())
             if not self._blue: m.node.handleMessage(bs.FreezeMessage())
         if any(team.gameData['score'] >= self._scoreToWin
                for team in self.teams):
             bs.gameTimer(500, self.endGame)
示例#2
0
    def handleMessage(self, msg):
        self._handleMessageSanityCheck()
        
        if isinstance(msg, bs.DieMessage):
            self.node.delete()

        elif isinstance(msg, ExplodeHitMessage):
            node = bs.getCollisionInfo("opposingNode")
            if node is not None and node.exists():
                t = self.node.position

                # new
                mag = 2000.0
                if self.blastType == 'ice': mag *= 0.7
                elif self.blastType == 'landMine': mag *= 1.5
                elif self.blastType == 'tnt': mag *= 2.6

                node.handleMessage(bs.HitMessage(pos=t,
                                                 velocity=(0,0.1,0),
                                                 magnitude=mag,
                                                 hitType=self.hitType,
                                                 hitSubType=self.hitSubType,
                                                 radius=self.radius,
                                                 sourcePlayer=self.sourcePlayer))
                if self.blastType == "ice":
                    bs.playSound(Bomb.getFactory().freezeSound, 10, position=t)
                    node.handleMessage(bs.FreezeMessage())

        else:
            bs.Actor.handleMessage(self, msg)
    def getMaterial(self, i):
        self.materialHealth = bs.Material()
        self.materialFreeze = bs.Material()
        self.materialCurse = bs.Material()

        # Setup Health
        self.materialHealth.addActions(
            conditions=((('theyAreOlderThan', 100), 'and',
                         ('theyHaveMaterial',
                          bs.getSharedObject('playerMaterial')))),
            actions=('message', 'theirNode', 'atConnect',
                     bs.PowerupMessage('health')))
        # Setup Freeze
        self.materialFreeze.addActions(
            conditions=((('theyAreOlderThan', 100), 'and',
                         ('theyHaveMaterial',
                          bs.getSharedObject('playerMaterial')))),
            actions=('message', 'theirNode', 'atConnect', bs.FreezeMessage()))
        # Setup Curse
        self.materialCurse.addActions(
            conditions=((('theyAreOlderThan', 100), 'and',
                         ('theyHaveMaterial',
                          bs.getSharedObject('playerMaterial')))),
            actions=('message', 'theirNode', 'atConnect',
                     bs.PowerupMessage('curse')))
        self.materials = [
            self.materialHealth, self.materialFreeze, self.materialCurse
        ]
        return self.materials[i]
    def handleMessage(self, msg):
        self._handleMessageSanityCheck()
        
        if isinstance(msg, bs.DieMessage):
            self.node.delete()

        elif isinstance(msg, ExplodeHitMessage):
            node = bs.getCollisionInfo("opposingNode")
            if node is not None and node.exists():
                t = self.node.position

                # new
                mag = 2000.0
                if self.blastType == 'ice': mag *= 0.5
                elif self.blastType == 'landMine': mag *= 2.5
                elif self.blastType == 'tnt': mag *= 2.0
                elif self.blastType == 'tbomb': mag *= 0.0
                elif self.blastType == 'weedbomb': mag *= 0.0
                elif self.blastType == 'gluebomb': mag *= 0.01

                node.handleMessage(bs.HitMessage(
                    pos=t,
                    velocity=(0,0,0),
                    magnitude=mag,
                    hitType=self.hitType,
                    hitSubType=self.hitSubType,
                    radius=self.radius,
                    sourcePlayer=self.sourcePlayer))
                if self.blastType == "ice":
                    bs.playSound(Bomb.getFactory().freezeSound, 10, position=t)
                    node.handleMessage(bs.FreezeMessage())
                node = bs.getCollisionInfo("opposingNode")
                if self.blastType == "weedbomb" and not node.getNodeType() != 'spaz':
                    bs.playSound(Bomb.getFactory().hissSound, 9, position=t)
                    def weed():
                	    node.handleMessage("knockout",10000)
                    bs.gameTimer(2000,bs.Call(weed)) #delay (forgot about the epic)
                    bs.gameTimer(5500,bs.Call(weed))
                    bs.gameTimer(8500,bs.Call(weed))
                    def hiccups():
                    	bs.emitBGDynamics(position=(node.position[0],node.position[1]-1.2,node.position[2]), velocity=(0,0.05,0), count=random.randrange(100,270), scale=1+random.random(), spread=0.71, chunkType='sweat') #reminds me of tom and jerry
                    bs.gameTimer(1000,bs.Call(hiccups))
                    bs.gameTimer(2500,bs.Call(hiccups)) #showing we are alive
                    bs.gameTimer(5000,bs.Call(hiccups))
                    bs.gameTimer(7500,bs.Call(hiccups))
                    def look():
                    	bubble = bsUtils.PopupText("o",color=(2.55,1.53,1.02), scale=0.7, randomOffset=0.2, offset=(0,-1,0), position=(node.position[0],node.position[1]-1.2,node.position[2])).autoRetain()
                    bs.gameTimer(1500,bs.Call(look))
                    bs.gameTimer(3000,bs.Call(look))
                    bs.gameTimer(8000,bs.Call(look))
                    def look():
                    	text = bsUtils.PopupText("O",color=(2.55, 1.48, 0.77), scale=0.75, randomOffset=0.2, offset=(0,-1,0), position=(node.position[0],node.position[1]-1.2,node.position[2])).autoRetain()
                    bs.gameTimer(1460,bs.Call(look))
                    bs.gameTimer(2960,bs.Call(look))
                    bs.gameTimer(5460,bs.Call(look))
                    bs.gameTimer(7960,bs.Call(look))
        else:
            bs.Actor.handleMessage(self, msg)
 def handleMessage(self, m):
     if isinstance(m, _PunchHitMessage):
         node = bs.getCollisionInfo("opposingNode")
         try:
             node.handleMessage(bs.FreezeMessage())
         except Exception:
             print('Cant freeze')
         bs.playSound(bs.getSound('freeze'))
         super(self.__class__, self).handleMessage(m)
     else:
         super(self.__class__, self).handleMessage(m)
示例#6
0
    def __init__(self):
        """
        Instantiate a SnoBallFactory.
        You shouldn't need to do this; call snoBallz.snoBall.getFactory() to get a shared instance.
        """

        self.texSno = bs.getTexture("bunnyColor")
        self.snoModel = bs.getModel("shield")
        self.ballMaterial = bs.Material()
        self.impactSound = bs.getSound('impactMedium')
        #First condition keeps balls from damaging originating player by preventing collisions immediately after they appear.
        #Time is very short due to balls move fast.
        self.ballMaterial.addActions(
            conditions=((('weAreYoungerThan',5),'or',('theyAreYoungerThan',100)),
                        'and',('theyHaveMaterial',bs.getSharedObject('objectMaterial'))),
            actions=(('modifyNodeCollision','collide',False)))
               
        self.ballMaterial.addActions(
            conditions=((('theyAreOlderThan', 100),
                         'and', ('theyHaveMaterial',
                                 bs.getSharedObject('playerMaterial')))),
            actions=('message', 'theirNode','atConnect', bs.FreezeMessage()))
                        
        # we want pickup materials to always hit us even if we're currently not
        # colliding with their node (generally due to the above rule)
        self.ballMaterial.addActions(
            conditions=('theyHaveMaterial',bs.getSharedObject('pickupMaterial')),
            actions=(('modifyPartCollision','useNodeCollide',False)))
        self.ballMaterial.addActions(actions=('modifyPartCollision','friction',0.3))
        #This action disables default physics when the ball hits a spaz. Sends a snoMessage to 
        #itself so that it can try to damage spazzes.
        self.ballMaterial.addActions(conditions=('theyHaveMaterial', bs.getSharedObject('playerMaterial')), actions=(('modifyPartCollision','physical',False),('message', 'ourNode', 'atConnect', snoMessage())))
        #This message sends a different message to our ball just to see if it should bust or not
        self.ballMaterial.addActions(conditions=(
                                                ('theyDontHaveMaterial', bs.getSharedObject('playerMaterial')), 'and',
                                                ('theyHaveMaterial', bs.getSharedObject('objectMaterial')), 'or',
                                                ('theyHaveMaterial', bs.getSharedObject('footingMaterial'))),
                                                actions=('message', 'ourNode', 'atConnect', otherHitMessage()))
        #The below can be changed after the factory is created
        self.defaultBallTimeout = 300
        self._ballsMelt = True
        self._ballsBust = True
        self._powerExpire = True
        self._powerLife = 20000
    def handleMessage(self, m):
        if isinstance(m, bs.FlagPickedUpMessage):
            bs.screenMessage(str(len(self.flags)))
            self.numPickedUp += 1
            m.node.getDelegate().getPlayer().gameData['done'] = True
            l = bs.newNode('light',
                           owner=None,
                           attrs={
                               'color': m.node.color,
                               'position': (m.node.positionCenter),
                               'intensity': 1
                           })
            self.nodes.append(l)
            m.flag.handleMessage(bs.DieMessage())
            m.node.handleMessage(bs.DieMessage())
            m.node.delete()
            if self.numPickedUp == len(self.flags):
                for player in self.spawned:
                    if not player.gameData['done']:
                        bs.screenMessage(player.getName())
                        player.gameData['survived'] = False
                        spaz = player.actor.node.getDelegate()
                        spaz.handleMessage(bs.StandMessage((0, 3, -2)))
                        bs.gameTimer(
                            100, bs.Call(spaz.handleMessage,
                                         bs.FreezeMessage()))
                        bs.gameTimer(
                            2500,
                            bs.Call(spaz.handleMessage,
                                    bs.ShouldShatterMessage()))
                bs.gameTimer(3000, self.killRound)
                bs.gameTimer(3050, self.makeRound)
            bs.screenMessage(str(len(self.flags)))

        if isinstance(m, bs.PlayerSpazDeathMessage):
            if m.how == 'fall': self.spawnPlayerSpaz(m.spaz.getPlayer())
            self.checkEnd()
    def handleMessage(self, m):

        if isinstance(m, bs.DieMessage):
            self.body.delete()
            self.loc.delete()
            self.spawner = None
            activity = self._activity()
            if activity and not m.immediate:
                activity.handleMessage(BaseDestroyedMessage())

        elif isinstance(m, bs.OutOfBoundsMessage):
            self.body.delete()
            self.loc.delete()

        elif isinstance(m, bs.FreezeMessage):
            if not self.body.exists(): return
            if not self.frozen:
                self.frozen = True
                bs.gameTimer(10000,
                             bs.WeakCall(self.handleMessage, bs.ThawMessage()))

        elif isinstance(m, bs.ThawMessage):
            if self.frozen and self.body.exists():
                self.frozen = False

        elif isinstance(m, bs.HitMessage):
            if not self.body.exists(): return
            if m.flatDamage: damage = m.flatDamage
            if m.hitType == 'punch':
                damage = randint(1, 3) * 150
                #bs.screenMessage('hitted')
            elif m.hitSubType in ('normal', 'tnt', 'block', 'landMine',
                                  'sticky', 'impact', 'cineticTrap'):
                damage = randint(1, 3) * 300
                #bs.screenMessage('exploded')
            elif m.hitSubType in ('ice', 'iceImpact'):
                damage = randint(1, 3) * 100
                #bs.screenMessage('freezed')
                self.handleMessage(bs.FreezeMessage())
            else:
                bs.playSound(self.errorSound)
                bs.screenMessage('Unknown hit: ' + m.hitSubType)
                damage = 200

            self._onPunched(damage)
            bs.emitBGDynamics(position=self.position,
                              velocity=(0, 0, 0),
                              count=35,
                              scale=0.7,
                              chunkType='spark',
                              emitType='stickers')
            bs.playSound(bs.getSound('punch01'), 1.0, position=self.position)

            # if damage was significant, lets show it
            if damage > 350:
                bs.playSound(bs.getSound('punchStrong01'),
                             1.0,
                             position=self.position)
                bsUtils.showDamageCount('-' + str(int(damage / 10)) + "%",
                                        m.pos, m.forceDirection)

        else:
            bs.Actor.handleMessage(self, m)
    def opt(self, nick, msg):
        if self.checkDevice(nick):
            m = msg.split(' ')[0]  # command
            a = msg.split(' ', 1)[1:]  # arguments

            activity = bsInternal._getForegroundHostActivity()
            with bs.Context(activity):
                if m == '/kick':  #just remove from the game
                    if a == []:
                        bsInternal._chatMessage("MUST USE KICK ID")
                    else:
                        try:
                            kickedPlayerID = int(a[0])
                        except Exception:
                            bsInternal._chatMessage("PLAYER NOT FOUND")
                        else:
                            if not kickedPlayerID == -1:
                                bsInternal._disconnectClient(kickedPlayerID)
                                bsInternal._chatMessage(
                                    bs.getSpecialChar('logoFlat'))
                            else:
                                bsInternal._chatMessage("CANT KICK HOST")

                elif m == '/list':  #list of current players id
                    bsInternal._chatMessage(
                        "==========PLAYER KICK IDS==========")
                    for i in bsInternal._getGameRoster():
                        try:
                            bsInternal._chatMessage(
                                i['players'][0]['nameFull'] + "     kick ID " +
                                str(i['clientID']))
                        except Exception:
                            pass
                    bsInternal._chatMessage(
                        "==========PLAYER IDS=============")
                    for s in bsInternal._getForegroundHostSession().players:
                        bsInternal._chatMessage(
                            s.getName() + "  ID = " +
                            str(bsInternal._getForegroundHostSession().players.
                                index(s)))

                elif m == '/ban':  # add id to banlist=autokick list
                    if a == []:
                        bsInternal._chatMessage(
                            "MUST USE PLAYER ID OR NICK"
                        )  #also FIX this every time bsInternal ChatMessage thing!! for stop loops "update-FIXED"
                    else:  #firstly try nick if nick len is more then 2 else try as player id FIX ME
                        if len(a[0]) > 2:
                            for i in bs.getActivity().players:
                                try:
                                    if (i.getName()).encode('utf-8') == (a[0]):
                                        bannedClient = i.getInputDevice(
                                        ).getClientID()
                                        bannedName = i.getName().encode(
                                            'utf-8')
                                        bannedPlayerID = i.get_account_id()
                                        foolist = []
                                        foolist = mbal.autoKickList
                                        if bannedPlayerID not in foolist:
                                            foolist.append(bannedPlayerID)
                                            bsInternal._chatMessage(
                                                str(bannedName) + " Banned")
                                            i.removeFromGame()
                                        else:
                                            bsInternal._chatMessage(
                                                str(bannedName) +
                                                " Already Banned")
                                        with open(
                                                bs.getEnvironment()
                                            ['systemScriptsDirectory'] +
                                                "/MythBAdminList.py") as file:
                                            s = [row for row in file]
                                            s[7] = 'autoKickList = ' + str(
                                                foolist) + '\n'
                                            f = open(
                                                bs.getEnvironment()
                                                ['systemScriptsDirectory'] +
                                                "/MythBAdminList.py", 'w')
                                            for i in s:
                                                f.write(i)
                                            f.close()
                                            reload(mbal)
                                except Exception:
                                    pass
                            bsInternal._chatMessage(
                                bs.getSpecialChar('logoFlat'))
                        else:
                            try:
                                bannedClient = bsInternal._getForegroundHostSession(
                                ).players[int(a[0])]
                            except Exception:
                                bsInternal._chatMessage("PLAYER NOT FOUND")
                            else:
                                foolist = []
                                foolist = mbal.autoKickList
                                bannedPlayerID = bannedClient.get_account_id()
                                if bannedPlayerID not in foolist:
                                    foolist.append(bannedPlayerID)
                                    bsInternal._chatMessage(
                                        str(bannedClient) + " Banned")
                                    bannedClient.removeFromGame()
                                else:
                                    bsInternal._chatMessage(
                                        str(bannedClient) + " Already Banned")
                                with open(bs.getEnvironment()
                                          ['systemScriptsDirectory'] +
                                          "/MythBAdminList.py") as file:
                                    s = [row for row in file]
                                    s[7] = 'autoKickList = ' + str(
                                        foolist) + '\n'
                                    f = open(
                                        bs.getEnvironment()
                                        ['systemScriptsDirectory'] +
                                        "/MythBAdminList.py", 'w')
                                    for i in s:
                                        f.write(i)
                                    f.close()
                                    reload(mbal)

                elif m == '/unban':  # remove id from banlist=autokick list
                    if a == []:
                        bsInternal._chatMessage("MUST USE PLAYER ID OR NICK")
                    else:
                        if len(a[0]) > 2:
                            for i in bs.getActivity().players:
                                try:
                                    if (i.getName()).encode('utf-8') == (a[0]):
                                        bannedClient = i.getInputDevice(
                                        ).getClientID()
                                        bannedName = i.getName().encode(
                                            'utf-8')
                                        bannedPlayerID = i.get_account_id()
                                        foolist = []
                                        foolist = mbal.autoKickList
                                        if bannedPlayerID in foolist:
                                            foolist.remove(bannedPlayerID)
                                            bsInternal._chatMessage(
                                                str(bannedName) +
                                                " be free now!")
                                        else:
                                            bsInternal._chatMessage(
                                                str(bannedName) +
                                                " Already Not Banned")
                                        with open(
                                                bs.getEnvironment()
                                            ['systemScriptsDirectory'] +
                                                "/MythBAdminList.py") as file:
                                            s = [row for row in file]
                                            s[7] = 'autoKickList = ' + str(
                                                foolist) + '\n'
                                            f = open(
                                                bs.getEnvironment()
                                                ['systemScriptsDirectory'] +
                                                "/MythBAdminList.py", 'w')
                                            for i in s:
                                                f.write(i)
                                            f.close()
                                            reload(mbal)
                                except Exception:
                                    pass
                            bsInternal._chatMessage(
                                bs.getSpecialChar('logoFlat'))
                        else:
                            try:
                                bannedClient = bsInternal._getForegroundHostSession(
                                ).players[int(a[0])]
                            except Exception:
                                bsInternal._chatMessage("PLAYER NOT FOUND")
                            else:
                                foolist = []
                                foolist = mbal.autoKickList
                                bannedPlayerID = bannedClient.get_account_id()
                                if bannedPlayerID in foolist:
                                    foolist.remove(bannedPlayerID)
                                    bsInternal._chatMessage(
                                        str(bannedClient) + " be free now!")
                                else:
                                    bsInternal._chatMessage(
                                        str(bannedClient) +
                                        " Already Not Banned")
                                with open(bs.getEnvironment()
                                          ['systemScriptsDirectory'] +
                                          "/MythBAdminList.py") as file:
                                    s = [row for row in file]
                                    s[7] = 'autoKickList = ' + str(
                                        foolist) + '\n'
                                    f = open(
                                        bs.getEnvironment()
                                        ['systemScriptsDirectory'] +
                                        "/MythBAdminList.py", 'w')
                                    for i in s:
                                        f.write(i)
                                    f.close()
                                    reload(mbal)

                elif m == '/amnesty':  # reset blacklist
                    foolist = []
                    bsInternal._chatMessage(
                        "==========FREEDOM TO ALL==========")
                    bsInternal._chatMessage(
                        "=========BLACKLİST WIPED=========")
                    with open(bs.getEnvironment()['systemScriptsDirectory'] +
                              "/MythBAdminList.py") as file:
                        s = [row for row in file]
                        s[7] = 'autoKickList = ' + str(foolist) + '\n'
                        f = open(
                            bs.getEnvironment()['systemScriptsDirectory'] +
                            "/MythBAdminList.py", 'w')
                        for i in s:
                            f.write(i)
                        f.close()
                        reload(mbal)

                elif m == '/camera':  #change camera mode
                    bsInternal._chatMessage(bs.getSpecialChar('logoFlat'))
                    try:
                        if bs.getSharedObject(
                                'globals').cameraMode == 'follow':
                            bs.getSharedObject('globals').cameraMode = 'rotate'
                        else:
                            bs.getSharedObject('globals').cameraMode = 'follow'
                    except Exception:
                        bsInternal._chatMessage('AN ERROR OCCURED')

                elif m == '/maxplayers':  #set maxplayers limit
                    if a == []:
                        bsInternal._chatMessage('MUST USE NUMBERS')
                    else:
                        try:
                            bsInternal._getForegroundHostSession(
                            )._maxPlayers = int(a[0])
                            bsInternal._setPublicPartyMaxSize(int(a[0]))
                            bsInternal._chatMessage('MaxPlayers = ' +
                                                    str(int(a[0])))
                        except Exception:
                            bsInternal._chatMessage('AN ERROR OCCURED')

                elif m == '/help':  #show help
                    bsInternal._chatMessage(
                        "=====================COMMANDS=====================")
                    bsInternal._chatMessage(
                        "list-kick-remove-ban-unban-amnesty-kill-curse-end-heal"
                    )
                    bsInternal._chatMessage(
                        "freeze-thaw-headless-shield-punch-maxplayers-headlessall"
                    )
                    bsInternal._chatMessage(
                        "killall-freezeall-shieldall-punchall-camera-slow")

                elif m == '/remove':  #remove from game
                    if a == []:
                        bsInternal._chatMessage('MUST USE PLAYER ID OR NICK')
                    else:
                        if len(a[0]) > 2:
                            for i in bs.getActivity().players:
                                try:
                                    if (i.getName()).encode('utf-8') == (a[0]):
                                        i.removeFromGame()
                                except Exception:
                                    pass
                            bsInternal._chatMessage(
                                bs.getSpecialChar('logoFlat'))
                        else:
                            try:
                                bs.getActivity().players[int(
                                    a[0])].removeFromGame()
                                bsInternal._chatMessage(
                                    bs.getSpecialChar('logoFlat'))
                            except Exception:
                                bsInternal._chatMessage('PLAYER NOT FOUND')

                elif m == '/curse':  #curse
                    if a == []:
                        bsInternal._chatMessage('MUST USE PLAYER ID OR NICK')
                    else:
                        if len(a[0]) > 2:
                            for i in bs.getActivity().players:
                                try:
                                    if (i.getName()).encode('utf-8') == (a[0]):
                                        if i.actor.exists():
                                            i.actor.curse()
                                except Exception:
                                    pass
                            bsInternal._chatMessage(
                                bs.getSpecialChar('logoFlat'))
                        else:
                            try:
                                bs.getActivity().players[int(
                                    a[0])].actor.curse()
                                bsInternal._chatMessage(
                                    bs.getSpecialChar('logoFlat'))
                            except Exception:
                                bsInternal._chatMessage('PLAYER NOT FOUND')

                elif m == '/curseall':  #curse all
                    for i in bs.getActivity().players:
                        try:
                            if i.actor.exists():
                                i.actor.curse()
                        except Exception:
                            pass
                    bsInternal._chatMessage(bs.getSpecialChar('logoFlat'))

                elif m == '/kill':  #kill
                    if a == []:
                        bsInternal._chatMessage('MUST USE PLAYER ID OR NICK')
                    else:
                        if len(a[0]) > 2:
                            for i in bs.getActivity().players:
                                try:
                                    if (i.getName()).encode('utf-8') == (a[0]):
                                        if i.actor.exists():
                                            i.actor.node.handleMessage(
                                                bs.DieMessage())
                                except Exception:
                                    pass
                            bsInternal._chatMessage(
                                bs.getSpecialChar('logoFlat'))
                        else:
                            try:
                                bs.getActivity().players[int(
                                    a[0])].actor.node.handleMessage(
                                        bs.DieMessage())
                                bsInternal._chatMessage(
                                    bs.getSpecialChar('logoFlat'))
                            except Exception:
                                bsInternal._chatMessage('PLAYER NOT FOUND')

                elif m == '/killall':  #kill all
                    for i in bs.getActivity().players:
                        try:
                            if i.actor.exists():
                                i.actor.node.handleMessage(bs.DieMessage())
                        except Exception:
                            pass
                    bsInternal._chatMessage(bs.getSpecialChar('logoFlat'))

                elif m == '/freeze':  #freeze
                    if a == []:
                        bsInternal._chatMessage('MUST USE PLAYER ID OR NICK')
                    else:
                        if len(a[0]) > 2:
                            for i in bs.getActivity().players:
                                try:
                                    if (i.getName()).encode('utf-8') == (a[0]):
                                        if i.actor.exists():
                                            i.actor.node.handleMessage(
                                                bs.FreezeMessage())
                                except Exception:
                                    pass
                            bsInternal._chatMessage(
                                bs.getSpecialChar('logoFlat'))
                        else:
                            try:
                                bs.getActivity().players[int(
                                    a[0])].actor.node.handleMessage(
                                        bs.FreezeMessage())
                                bsInternal._chatMessage(
                                    bs.getSpecialChar('logoFlat'))
                            except Exception:
                                bsInternal._chatMessage('PLAYER NOT FOUND')

                elif m == '/freezeall':  #freeze all
                    for i in bs.getActivity().players:
                        try:
                            if i.actor.exists():
                                i.actor.node.handleMessage(bs.FreezeMessage())
                        except Exception:
                            pass
                    bsInternal._chatMessage(bs.getSpecialChar('logoFlat'))

                elif m == '/thaw':  #thaw
                    if a == []:
                        bsInternal._chatMessage('MUST USE PLAYER ID OR NICK')
                    else:
                        if len(a[0]) > 2:
                            for i in bs.getActivity().players:
                                try:
                                    if (i.getName()).encode('utf-8') == (a[0]):
                                        if i.actor.exists():
                                            i.actor.node.handleMessage(
                                                bs.ThawMessage())
                                except Exception:
                                    pass
                            bsInternal._chatMessage(
                                bs.getSpecialChar('logoFlat'))
                        else:
                            try:
                                bs.getActivity().players[int(
                                    a[0])].actor.node.handleMessage(
                                        bs.ThawMessage())
                                bsInternal._chatMessage(
                                    bs.getSpecialChar('logoFlat'))
                            except Exception:
                                bsInternal._chatMessage('PLAYER NOT FOUND')

                elif m == '/thawall':  #thaw all
                    for i in bs.getActivity().players:
                        try:
                            if i.actor.exists():
                                i.actor.node.handleMessage(bs.ThawMessage())
                        except Exception:
                            pass
                    bsInternal._chatMessage(bs.getSpecialChar('logoFlat'))

                elif m == '/headless':  #headless
                    if a == []:
                        bsInternal._chatMessage('MUST USE PLAYER ID OR NICK')
                    else:
                        if len(a[0]) > 2:
                            for i in bs.getActivity().players:
                                try:
                                    if (i.getName()).encode('utf-8') == (a[0]):
                                        if i.actor.exists():
                                            i.actor.node.headModel = None
                                            i.actor.node.style = "cyborg"
                                except Exception:
                                    pass
                            bsInternal._chatMessage(
                                bs.getSpecialChar('logoFlat'))
                        else:
                            try:
                                bs.getActivity().players[int(
                                    a[0])].actor.node.headModel = None
                                bs.getActivity().players[int(
                                    a[0])].actor.node.style = "cyborg"
                                bsInternal._chatMessage(
                                    bs.getSpecialChar('logoFlat'))
                            except Exception:
                                bsInternal._chatMessage('PLAYER NOT FOUND')

                elif m == '/headlessall':  #headless all
                    for i in bs.getActivity().players:
                        try:
                            if i.actor.exists():
                                i.actor.node.headModel = None
                                i.actor.node.style = "cyborg"
                        except Exception:
                            pass
                    bsInternal._chatMessage(bs.getSpecialChar('logoFlat'))

                elif m == '/heal':  #heal
                    if a == []:
                        bsInternal._chatMessage('MUST USE PLAYER ID OR NICK')
                    else:
                        if len(a[0]) > 2:
                            for i in bs.getActivity().players:
                                try:
                                    if (i.getName()).encode('utf-8') == (a[0]):
                                        if i.actor.exists():
                                            i.actor.node.handleMessage(
                                                bs.PowerupMessage(
                                                    powerupType='health'))
                                except Exception:
                                    pass
                            bsInternal._chatMessage(
                                bs.getSpecialChar('logoFlat'))
                        else:
                            try:
                                bs.getActivity().players[int(
                                    a[0])].actor.node.handleMessage(
                                        bs.PowerupMessage(
                                            powerupType='health'))
                                bsInternal._chatMessage(
                                    bs.getSpecialChar('logoFlat'))
                            except Exception:
                                bsInternal._chatMessage('PLAYER NOT FOUND')

                elif m == '/healall':  #heal all
                    for i in bs.getActivity().players:
                        try:
                            if i.actor.exists():
                                i.actor.node.handleMessage(
                                    bs.PowerupMessage(powerupType='health'))
                        except Exception:
                            pass
                    bsInternal._chatMessage(bs.getSpecialChar('logoFlat'))

                elif m == '/shield':  #shield
                    if a == []:
                        bsInternal._chatMessage('MUST USE PLAYER ID OR NICK')
                    else:
                        if len(a[0]) > 2:
                            for i in bs.getActivity().players:
                                try:
                                    if (i.getName()).encode('utf-8') == (a[0]):
                                        if i.actor.exists():
                                            i.actor.node.handleMessage(
                                                bs.PowerupMessage(
                                                    powerupType='shield'))
                                except Exception:
                                    pass
                            bsInternal._chatMessage(
                                bs.getSpecialChar('logoFlat'))
                        else:
                            try:
                                bs.getActivity().players[int(
                                    a[0])].actor.node.handleMessage(
                                        bs.PowerupMessage(
                                            powerupType='shield'))
                                bsInternal._chatMessage(
                                    bs.getSpecialChar('logoFlat'))
                            except Exception:
                                bsInternal._chatMessage('PLAYER NOT FOUND')

                elif m == '/shieldall':  #shield all
                    for i in bs.getActivity().players:
                        try:
                            if i.actor.exists():
                                i.actor.node.handleMessage(
                                    bs.PowerupMessage(powerupType='shield'))
                        except Exception:
                            pass
                    bsInternal._chatMessage(bs.getSpecialChar('logoFlat'))

                elif m == '/punch':  #punch
                    if a == []:
                        bsInternal._chatMessage('MUST USE PLAYER ID OR NICK')
                    else:
                        if len(a[0]) > 2:
                            for i in bs.getActivity().players:
                                try:
                                    if (i.getName()).encode('utf-8') == (a[0]):
                                        if i.actor.exists():
                                            i.actor.node.handleMessage(
                                                bs.PowerupMessage(
                                                    powerupType='punch'))
                                except Exception:
                                    pass
                            bsInternal._chatMessage(
                                bs.getSpecialChar('logoFlat'))
                        else:
                            try:
                                bs.getActivity().players[int(
                                    a[0])].actor.node.handleMessage(
                                        bs.PowerupMessage(powerupType='punch'))
                                bsInternal._chatMessage(
                                    bs.getSpecialChar('logoFlat'))
                            except Exception:
                                bsInternal._chatMessage('PLAYER NOT FOUND')

                elif m == '/punchall':  #punch all
                    for i in bs.getActivity().players:
                        try:
                            if i.actor.exists():
                                i.actor.node.handleMessage(
                                    bs.PowerupMessage(powerupType='punch'))
                        except Exception:
                            pass
                    bsInternal._chatMessage(bs.getSpecialChar('logoFlat'))

                elif m == '/knock':  #knock him
                    if a == []:
                        bsInternal._chatMessage('MUST USE PLAYER ID OR NICK')
                    else:
                        if len(a[0]) > 2:
                            for i in bs.getActivity().players:
                                try:
                                    if (i.getName()).encode('utf-8') == (a[0]):
                                        if i.actor.exists():
                                            i.actor.node.handleMessage(
                                                "knockout", 5000)
                                except Exception:
                                    pass
                            bsInternal._chatMessage(
                                bs.getSpecialChar('logoFlat'))
                        else:
                            try:
                                bs.getActivity().players[int(
                                    a[0])].actor.node.handleMessage(
                                        "knockout", 5000)
                                bsInternal._chatMessage(
                                    bs.getSpecialChar('logoFlat'))
                            except Exception:
                                bsInternal._chatMessage('PLAYER NOT FOUND')

                elif m == '/knockall':  #knock all
                    for i in bs.getActivity().players:
                        try:
                            if i.actor.exists():
                                i.actor.node.handleMessage("knockout", 5000)
                        except Exception:
                            pass
                    bsInternal._chatMessage(bs.getSpecialChar('logoFlat'))

                elif m == '/celebrate':  #celebrate him
                    if a == []:
                        bsInternal._chatMessage('MUST USE PLAYER ID OR NICK')
                    else:
                        if len(a[0]) > 2:
                            for i in bs.getActivity().players:
                                try:
                                    if (i.getName()).encode('utf-8') == (a[0]):
                                        if i.actor.exists():
                                            i.actor.node.handleMessage(
                                                'celebrate', 30000)
                                except Exception:
                                    pass
                            bsInternal._chatMessage(
                                bs.getSpecialChar('logoFlat'))
                        else:
                            try:
                                bs.getActivity().players[int(
                                    a[0])].actor.node.handleMessage(
                                        'celebrate', 30000)
                                bsInternal._chatMessage(
                                    bs.getSpecialChar('logoFlat'))
                            except Exception:
                                bsInternal._chatMessage('PLAYER NOT FOUND')

                elif m == '/celebrateall':  #celebrate
                    for i in bs.getActivity().players:
                        try:
                            if i.actor.exists():
                                i.actor.node.handleMessage('celebrate', 30000)
                        except Exception:
                            pass
                    bsInternal._chatMessage(bs.getSpecialChar('logoFlat'))

                elif m == '/slow':  # slow-mo
                    bsInternal._chatMessage(bs.getSpecialChar('logoFlat'))
                    try:
                        if bs.getSharedObject('globals').slowMotion == True:
                            bs.getSharedObject('globals').slowMotion = False
                        else:
                            bs.getSharedObject('globals').slowMotion = True
                    except Exception:
                        bsInternal._chatMessage('AN ERROR OCCURED')

                elif m == '/end':  # just end game
                    try:
                        bsInternal._getForegroundHostActivity().endGame()
                        bsInternal._chatMessage('THE END')
                    except Exception:
                        bsInternal._chatMessage('AN ERROR OCCURED')
示例#10
0
    def handleMessage(self, m):
        super(self.__class__, self).handleMessage(m)
        if isinstance(m, TouchedToAnything):
            node = bs.getCollisionInfo('opposingNode')
            if node is not None and node.exists():
                v = self.node.velocity
                t = self.node.position
                hitDir = self.node.velocity
                m = self.node
                node.handleMessage(
                    bs.HitMessage(
                        pos=t,
                        velocity=v,
                        magnitude=bsVector.Vector(*v).length() * 40,
                        velocityMagnitude=bsVector.Vector(*v).length() * 40,
                        radius=0,
                        srcNode=self.node,
                        sourcePlayer=self.sourcePlayer,
                        forceDirection=hitDir))

            self.node.handleMessage(bs.DieMessage())

        elif isinstance(m, bs.DieMessage):
            if self.node.exists():
                velocity = self.node.velocity
                explosion = bs.newNode('explosion',
                                       attrs={
                                           'position':
                                           self.node.position,
                                           'velocity':
                                           (velocity[0],
                                            max(-1.0,
                                                velocity[1]), velocity[2]),
                                           'radius':
                                           1,
                                           'big':
                                           False
                                       })

                bs.playSound(sound=bs.getSound(
                    random.choice(['impactHard', 'impactHard2',
                                   'impactHard3'])),
                             position=self.node.position)

                self.node.delete()
                self.lightNode.delete()
                self._emit = None

        elif isinstance(m, bs.OutOfBoundsMessage):
            self.handleMessage(bs.DieMessage())

        elif isinstance(m, bs.HitMessage):
            self.node.handleMessage('impulse', m.pos[0], m.pos[1], m.pos[2],
                                    m.velocity[0], m.velocity[1],
                                    m.velocity[2], 1.0 * m.magnitude,
                                    1.0 * m.velocityMagnitude, m.radius, 0,
                                    m.forceDirection[0], m.forceDirection[1],
                                    m.forceDirection[2])

        elif isinstance(m, TouchedToSpaz):
            node = bs.getCollisionInfo('opposingNode')
            try:
                if node is not None and node.exists() and node != self.owner \
                        and node.getDelegate().getPlayer().getTeam() != self.owner.getTeam():
                    node.handleMessage(bs.FreezeMessage())
                    v = self.node.velocity
                    t = self.node.position
                    hitDir = self.node.velocity

                    node.handleMessage(
                        bs.HitMessage(pos=t,
                                      velocity=(10, 10, 10),
                                      magnitude=50,
                                      velocityMagnitude=50,
                                      radius=0,
                                      srcNode=self.node,
                                      sourcePlayer=self.sourcePlayer,
                                      forceDirection=hitDir))

                self.node.handleMessage(bs.DieMessage())
            except:
                pass

        elif isinstance(m, TouchedToFootingMaterial):
            bs.playSound(sound=bs.getSound('blip'),
                         position=self.node.position)
示例#11
0
def f(a):
    try:
        bs.getSession().players[int(a)].actor.node.handleMessage(
            bs.FreezeMessage())
    except:
        pass
示例#12
0
def freezeall():
    for i in bs.getSession().players:
        try:
            i.actor.node.handleMessage(bs.FreezeMessage())
        except:
            pass
    def opt(self, nick, msg):
        if self.checkDevice(nick):
            m = msg.split(' ')[0]  # command
            a = msg.split(' ')[1:]  # arguments

            activity = bsInternal._getForegroundHostActivity()
            with bs.Context(activity):
                if m == '/kick':
                    if a == []:
                        bsInternal._chatMessage(
                            'Using: /kick name or clientID')
                    else:
                        if len(a[0]) > 3:
                            self.kickByNick(a[0])
                            bsInternal._chatMessage('Player Kicked By Admin')
                        else:
                            try:
                                s = int(a[0])
                                bsInternal._chatMessage(
                                    'Player Kicked By Admin')
                                bsInternal._disconnectClient(int(a[0]))
                            except:
                                self.kickByNick(a[0])
                elif m == '/admin':
                    clID = int(a[0])
                    for client in bsInternal._getGameRoster():
                        if client['clientID'] == clID:
                            if a[1] == 'add':
                                newadmin = client['displayString']
                                updated_admins = gph.adminHashes.append(
                                    newadmin)
                            elif a[1] == 'remove':
                                newadmin = client['displayString']
                                if newadmin in gph.adminHashes:
                                    updated_admins = gph.adminHashes.remove(
                                        newadmin)

                    with open(bs.getEnvironment()['systemScriptsDirectory'] +
                              "/getPermissionsHashes.py") as file:
                        s = [row for row in file]
                        s[0] = 'vipHashes = []' + '\n'
                        s[1] = 'adminHashes = ' + updated_admins + '\n'
                        f = open(
                            bs.getEnvironment()['systemScriptsDirectory'] +
                            "/getPermissionsHashes.py", 'w')
                        for i in s:
                            f.write(i)
                        f.close()
                elif m == '/ban':
                    clID = int(a[0])
                    for client in bsInternal._getGameRoster():
                        if client['clientID'] == clID:
                            if a[1] == 'add':
                                ban = client['displayString']
                                updated_ban = gph.ban.append(ban)
                                bs.screenMessage('Banning...')
                            elif a[1] == 'remove':
                                ban = client['displayString']
                                if ban in gph.ban:
                                    updated_ban = gph.ban.remove(ban)

                    with open(bs.getEnvironment()['systemScriptsDirectory'] +
                              "/getPermissionsHashes.py") as file:
                        s = [row for row in file]
                        s[0] = 'vipHashes = []' + '\n'
                        s[1] = 'admin = []' + '\n'
                        s[2] = 'ass = []' + '\n'
                        s[3] = 'ban = ' + updated_ban + '\n'
                        f = open(
                            bs.getEnvironment()['systemScriptsDirectory'] +
                            "/getPermissionsHashes.py", 'w')
                        for i in s:
                            f.write(i)
                        f.close()
                elif m == '/ass':
                    clID = int(a[0])
                    for client in bsInternal._getGameRoster():
                        if client['clientID'] == clID:
                            if a[1] == 'add':
                                ass = client['displayString']
                                updated_ass = gph.ass.append(ass)
                            elif a[1] == 'remove':
                                ass = client['displayString']
                                if ass in gph.ass:
                                    updated_ass = gph.ass.remove(ass)

                    with open(bs.getEnvironment()['systemScriptsDirectory'] +
                              "/getPermissionsHashes.py") as file:
                        s = [row for row in file]
                        s[0] = 'vipHashes = []' + '\n'
                        s[1] = 'admin= []' + '\n'
                        s[2] = 'ass = ' + updated_admins + '\n'
                        f = open(
                            bs.getEnvironment()['systemScriptsDirectory'] +
                            "/getPermissionsHashes.py", 'w')
                        for i in s:
                            f.write(i)
                        f.close()
                elif m == '/vip':
                    clID = int(a[0])
                    for client in bsInternal._getGameRoster():
                        if client['clientID'] == clID:
                            if a[1] == 'add':
                                vip = client['displayString']
                                updated_vip = gph.vip.append(vip)
                            elif a[1] == 'remove':
                                vip = client['displayString']
                                if vip in gph.vip:
                                    updated_vip = gph.vip.remove(vip)

                    with open(bs.getEnvironment()['systemScriptsDirectory'] +
                              "/getPermissionsHashes.py") as file:
                        s = [row for row in file]
                        s[0] = 'vip = ' + updated_admins + '\n'
                        f = open(
                            bs.getEnvironment()['systemScriptsDirectory'] +
                            "/getPermissionsHashes.py", 'w')
                        for i in s:
                            f.write(i)
                        f.close()

                elif m == '/list':
                    bsInternal._chatMessage(
                        "======== FOR /kick ONLY: ========")
                    for i in bsInternal._getGameRoster():
                        try:
                            bsInternal._chatMessage(
                                i['players'][0]['nameFull'] + "     (/kick " +
                                str(i['clientID']) + ")")
                        except:
                            pass
                    bsInternal._chatMessage(
                        "==================================")
                    bsInternal._chatMessage(
                        "======= For other commands: =======")
                    for s in bsInternal._getForegroundHostSession().players:
                        bsInternal._chatMessage(
                            s.getName() +
                            "     " + str(bsInternal._getForegroundHostSession(
                            ).players.index(s)))
                elif m == '/ooh':
                    if a is not None and len(a) > 0:
                        s = int(a[0])

                        def oohRecurce(c):
                            bs.playSound(bs.getSound('ooh'), volume=2)
                            c -= 1
                            if c > 0:
                                bs.gameTimer(
                                    int(a[1]) if len(a) > 1
                                    and a[1] is not None else 1000,
                                    bs.Call(oohRecurce, c=c))

                        oohRecurce(c=s)
                    else:
                        bs.playSound(bs.getSound('ooh'), volume=2)
                elif m == '/playSound':
                    if a is not None and len(a) > 1:
                        s = int(a[1])

                        def oohRecurce(c):
                            bs.playSound(bs.getSound(str(a[0])), volume=2)
                            c -= 1
                            if c > 0:
                                bs.gameTimer(
                                    int(a[2]) if len(a) > 2
                                    and a[2] is not None else 1000,
                                    bs.Call(oohRecurce, c=c))

                        oohRecurce(c=s)
                    else:
                        bs.playSound(bs.getSound(str(a[0])), volume=2)
                elif m == '/quit':
                    bsInternal.quit()
                elif m == '/nv':
                    if self.tint is None:
                        self.tint = bs.getSharedObject('globals').tint
                    bs.getSharedObject('globals').tint = (
                        0.5, 0.7,
                        1) if a == [] or not a[0] == u'off' else self.tint
                elif m == '/freeze':
                    if a == []:
                        bsInternal._chatMessage(
                            'Using: /freeze all or number of list')
                    else:
                        if a[0] == 'all':
                            for i in bs.getSession().players:
                                try:
                                    i.actor.node.handleMessage(
                                        bs.FreezeMessage())
                                except:
                                    pass
                        else:
                            bs.getSession().players[int(
                                a[0])].actor.node.handleMessage(
                                    bs.FreezeMessage())
                elif m == '/thaw':
                    if a == []:
                        bsInternal._chatMessage(
                            'Using: /thaw all or number of list')
                    else:
                        if a[0] == 'all':
                            for i in bs.getSession().players:
                                try:
                                    i.actor.node.handleMessage(
                                        bs.ThawMessage())
                                except:
                                    pass
                        else:
                            bs.getSession().players[int(
                                a[0])].actor.node.handleMessage(
                                    bs.ThawMessage())
                elif m == '/sleep':
                    if a == []:
                        bsInternal._chatMessage('Using: number of list')
                    else:
                        if a[0] == 'all':
                            for i in bs.getSession().players:
                                try:
                                    i.actor.node.handleMessage(
                                        "knockout", 5000)
                                except:
                                    pass
                        else:
                            bs.getSession().players[int(
                                a[0])].actor.node.handleMessage(
                                    "knockout", 5000)

                elif m == '/kill':
                    if a == []:
                        bsInternal._chatMessage(
                            'Using: /kill all or number of list')
                    else:
                        if a[0] == 'all':
                            for i in bs.getSession().players:
                                try:
                                    i.actor.node.handleMessage(bs.DieMessage())
                                except:
                                    pass
                        else:
                            bs.getSession().players[int(
                                a[0])].actor.node.handleMessage(
                                    bs.DieMessage())
                elif m == '/curse':
                    if a == []:
                        bsInternal._chatMessage(
                            'Using: /curse all or number of list')
                    else:
                        if a[0] == 'all':
                            for i in bs.getSession().players:
                                try:
                                    i.actor.curse()
                                except:
                                    pass
                        else:
                            bs.getSession().players[int(a[0])].actor.curse()
                elif m == '/box':
                    if a == []:
                        bsInternal._chatMessage(
                            'Using: /box all or number of list')
                    else:
                        try:
                            if a[0] == 'all':
                                for i in bs.getSession().players:
                                    try:
                                        i.actor.node.torsoModel = bs.getModel(
                                            "tnt")
                                    except:
                                        print 'error'
                                for i in bs.getSession().players:
                                    try:
                                        i.actor.node.colorMaskTexture = bs.getTexture(
                                            "tnt")
                                    except:
                                        print 'error'
                                for i in bs.getSession().players:
                                    try:
                                        i.actor.node.colorTexture = bs.getTexture(
                                            "tnt")
                                    except:
                                        print 'error'
                                for i in bs.getSession().players:
                                    try:
                                        i.actor.node.highlight = (1, 1, 1)
                                    except:
                                        print 'error'
                                for i in bs.getSession().players:
                                    try:
                                        i.actor.node.color = (1, 1, 1)
                                    except:
                                        print 'error'
                                for i in bs.getSession().players:
                                    try:
                                        i.actor.node.headModel = None
                                    except:
                                        print 'error'
                                for i in bs.getSession().players:
                                    try:
                                        i.actor.node.style = "cyborg"
                                    except:
                                        print 'error'
                            else:
                                n = int(a[0])
                                bs.getSession().players[
                                    n].actor.node.torsoModel = bs.getModel(
                                        "tnt")
                                bs.getSession().players[
                                    n].actor.node.colorMaskTexture = bs.getTexture(
                                        "tnt")
                                bs.getSession().players[
                                    n].actor.node.colorTexture = bs.getTexture(
                                        "tnt")
                                bs.getSession(
                                ).players[n].actor.node.highlight = (1, 1, 1)
                                bs.getSession().players[n].actor.node.color = (
                                    1, 1, 1)
                                bs.getSession(
                                ).players[n].actor.node.headModel = None
                                bs.getSession(
                                ).players[n].actor.node.style = "cyborg"
                        except:
                            bs.screenMessage('Ошибка!', color=(1, 0, 0))
                elif m == '/spaz':
                    if a == []:
                        bsInternal._chatMessage(
                            'Using: /spaz all or number of list')
                    else:
                        try:
                            if a[0] == 'all':
                                for i in bs.getSession().players:
                                    t = i.actor.node
                                    try:

                                        t.colorTexture = bs.getTexture(a[1] +
                                                                       "Color")
                                        t.colorMaskTexture = bs.getTexture(
                                            a[1] + "ColorMask")

                                        t.headModel = bs.getModel(a[1] +
                                                                  "Head")
                                        t.torsoModel = bs.getModel(a[1] +
                                                                   "Torso")
                                        t.pelvisModel = bs.getModel(a[1] +
                                                                    "Pelvis")
                                        t.upperArmModel = bs.getModel(
                                            a[1] + "UpperArm")
                                        t.foreArmModel = bs.getModel(a[1] +
                                                                     "ForeArm")
                                        t.handModel = bs.getModel(a[1] +
                                                                  "Hand")
                                        t.upperLegModel = bs.getModel(
                                            a[1] + "UpperLeg")
                                        t.lowerLegModel = bs.getModel(
                                            a[1] + "LowerLeg")
                                        t.toesModel = bs.getModel(a[1] +
                                                                  "Toes")
                                        t.style = a[1]
                                    except:
                                        print 'error'
                            else:
                                n = int(a[0])
                                t = bs.getSession().players[n].actor.node
                                t.colorTexture = bs.getTexture(a[1] + "Color")
                                t.colorMaskTexture = bs.getTexture(a[1] +
                                                                   "ColorMask")

                                t.headModel = bs.getModel(a[1] + "Head")
                                t.torsoModel = bs.getModel(a[1] + "Torso")
                                t.pelvisModel = bs.getModel(a[1] + "Pelvis")
                                t.upperArmModel = bs.getModel(a[1] +
                                                              "UpperArm")
                                t.foreArmModel = bs.getModel(a[1] + "ForeArm")
                                t.handModel = bs.getModel(a[1] + "Hand")
                                t.upperLegModel = bs.getModel(a[1] +
                                                              "UpperLeg")
                                t.lowerLegModel = bs.getModel(a[1] +
                                                              "LowerLeg")
                                t.toesModel = bs.getModel(a[1] + "Toes")
                                t.style = a[1]
                        except:
                            bs.screenMessage('error', color=(1, 0, 0))
                elif m == '/inv':
                    if a == []:
                        bsInternal._chatMessage(
                            'Using: /spaz all or number of list')
                    else:
                        try:
                            if a[0] == 'all':
                                for i in bs.getSession().players:
                                    t = i.actor.node
                                    try:

                                        t.headModel = None
                                        t.torsoModel = None
                                        t.pelvisModel = None
                                        t.upperArmModel = None
                                        t.foreArmModel = None
                                        t.handModel = None
                                        t.upperLegModel = None
                                        t.lowerLegModel = None
                                        t.toesModel = None
                                        t.style = "cyborg"
                                    except:
                                        print 'error'
                            else:
                                n = int(a[0])
                                t = bs.getSession().players[n].actor.node

                                t.headModel = None
                                t.torsoModel = None
                                t.pelvisModel = None
                                t.upperArmModel = None
                                t.foreArmModel = None
                                t.handModel = None
                                t.upperLegModel = None
                                t.lowerLegModel = None
                                t.toesModel = None
                                t.style = "cyborg"
                        except:
                            bs.screenMessage('error', color=(1, 0, 0))

                elif m == '/tex':
                    if a == []:
                        bsInternal._chatMessage(
                            'Using: /tex all or number of list')
                    else:
                        try:
                            if a[0] == 'all':
                                for i in bs.getSession().players:
                                    try:
                                        i.actor.node.colorMaskTexture = bs.getTexture(
                                            "egg1")
                                    except:
                                        print 'error'
                                for i in bs.getSession().players:
                                    try:
                                        i.actor.node.colorTexture = bs.getTexture(
                                            "egg1")
                                    except:
                                        print 'error'
                            else:
                                n = int(a[0])
                                bs.getSession().players[
                                    n].actor.node.colorMaskTexture = bs.getTexture(
                                        "egg1")
                                bs.getSession().players[
                                    n].actor.node.colorTexture = bs.getTexture(
                                        "egg1")
                        except:
                            bs.screenMessage('Ошибка!', color=(1, 0, 0))

                elif m == '/remove':
                    if a == []:
                        bsInternal._chatMessage(
                            'Using: /remove all or number of list')
                    else:
                        if a[0] == 'all':
                            for i in bs.getSession().players:
                                try:
                                    i.removeFromGame()
                                except:
                                    pass
                        else:
                            bs.getSession().players[int(a[0])].removeFromGame()
                elif m == '/end':
                    try:
                        bsInternal._getForegroundHostActivity().endGame()
                    except:
                        pass
                elif m == '/hug':
                    if a == []:
                        bsInternal._chatMessage(
                            'Using: /hug all or number of list')
                    else:
                        try:
                            if a[0] == 'all':
                                try:
                                    bsInternal._getForegroundHostActivity(
                                    ).players[
                                        0].actor.node.holdNode = bsInternal._getForegroundHostActivity(
                                        ).players[1].actor.node
                                except:
                                    pass
                                try:
                                    bsInternal._getForegroundHostActivity(
                                    ).players[
                                        1].actor.node.holdNode = bsInternal._getForegroundHostActivity(
                                        ).players[0].actor.node
                                except:
                                    pass
                                try:
                                    bsInternal._getForegroundHostActivity(
                                    ).players[
                                        3].actor.node.holdNode = bsInternal._getForegroundHostActivity(
                                        ).players[2].actor.node
                                except:
                                    pass
                                try:
                                    bsInternal._getForegroundHostActivity(
                                    ).players[
                                        4].actor.node.holdNode = bsInternal._getForegroundHostActivity(
                                        ).players[3].actor.node
                                except:
                                    pass
                                try:
                                    bsInternal._getForegroundHostActivity(
                                    ).players[
                                        5].actor.node.holdNode = bsInternal._getForegroundHostActivity(
                                        ).players[6].actor.node
                                except:
                                    pass
                                try:
                                    bsInternal._getForegroundHostActivity(
                                    ).players[
                                        6].actor.node.holdNode = bsInternal._getForegroundHostActivity(
                                        ).players[7].actor.node
                                except:
                                    pass
                            else:
                                bsInternal._getForegroundHostActivity(
                                ).players[int(
                                    a[0]
                                )].actor.node.holdNode = bsInternal._getForegroundHostActivity(
                                ).players[int(a[1])].actor.node
                        except:
                            bs.screenMessage('Ошибка!', color=(1, 0, 0))
                elif m == '/gm':
                    if a == []:
                        for i in range(len(activity.players)):
                            if activity.players[i].getName().encode(
                                    'utf-8').find(
                                        nick.encode('utf-8').replace(
                                            '...', '').replace(':', '')) != -1:
                                activity.players[
                                    i].actor.node.hockey = activity.players[
                                        i].actor.node.hockey == False
                                activity.players[
                                    i].actor.node.invincible = activity.players[
                                        i].actor.node.invincible == False
                                activity.players[
                                    i].actor._punchPowerScale = 5 if activity.players[
                                        i].actor._punchPowerScale == 1.2 else 1.2
                    else:
                        activity.players[int(
                            a[0])].actor.node.hockey = activity.players[int(
                                a[0])].actor.node.hockey == False
                        activity.players[int(
                            a[0])].actor.node.invincible = activity.players[
                                int(a[0])].actor.node.invincible == False
                        activity.players[int(
                            a[0]
                        )].actor._punchPowerScale = 5 if activity.players[int(
                            a[0])].actor._punchPowerScale == 1.2 else 1.2
                elif m == '/tint':
                    if a == []:
                        bsInternal._chatMessage('Using: /tint R G B')
                        bsInternal._chatMessage('OR')
                        bsInternal._chatMessage('Using: /tint r bright speed')
                    else:
                        if a[0] == 'r':
                            m = 1.3 if a[1] is None else float(a[1])
                            s = 1000 if a[2] is None else float(a[2])
                            bsUtils.animateArray(
                                bs.getSharedObject('globals'), 'tint', 3, {
                                    0: (1 * m, 0, 0),
                                    s: (0, 1 * m, 0),
                                    s * 2: (0, 0, 1 * m),
                                    s * 3: (1 * m, 0, 0)
                                }, True)
                        else:
                            try:
                                if a[1] is not None:
                                    bs.getSharedObject('globals').tint = (
                                        float(a[0]), float(a[1]), float(a[2]))
                                else:
                                    bs.screenMessage('Error!', color=(1, 0, 0))
                            except:
                                bs.screenMessage('Error!', color=(1, 0, 0))
                elif m == 'pause':
                    bs.getSharedObject('globals').paused = bs.getSharedObject(
                        'globals').paused == False
                elif m == '/sm':
                    bs.getSharedObject(
                        'globals').slowMotion = bs.getSharedObject(
                            'globals').slowMotion == False
                elif m == '/bunny':
                    if a == []:
                        bsInternal._chatMessage(
                            'Using: /bunny count owner(number of list)')
                    import BuddyBunny
                    for i in range(int(a[0])):
                        p = bs.getSession().players[int(a[1])]
                        if not 'bunnies' in p.gameData:
                            p.gameData['bunnies'] = BuddyBunny.BunnyBotSet(p)
                        p.gameData['bunnies'].doBunny()
                elif m == '/cameraMode':
                    try:
                        if bs.getSharedObject(
                                'globals').cameraMode == 'follow':
                            bs.getSharedObject('globals').cameraMode = 'rotate'
                        else:
                            bs.getSharedObject('globals').cameraMode = 'follow'
                    except:
                        pass
                elif m == '/lm':
                    arr = []
                    for i in range(100):
                        try:
                            arr.append(bsInternal._getChatMessages()[-1 - i])
                        except:
                            pass
                    arr.reverse()
                    for i in arr:
                        bsInternal._chatMessage(i)
                elif m == '/gp':
                    if a == []:
                        bsInternal._chatMessage('Using: /gp number of list')
                    else:
                        s = bsInternal._getForegroundHostSession()
                        for i in s.players[int(
                                a[0])].getInputDevice()._getPlayerProfiles():
                            try:
                                bsInternal._chatMessage(i)
                            except:
                                pass
                elif m == '/icy':
                    bsInternal._getForegroundHostActivity().players[int(
                        a[0]
                    )].actor.node = bsInternal._getForegroundHostActivity(
                    ).players[int(a[1])].actor.node
                elif m == '/fly':
                    if a == []:
                        bsInternal._chatMessage(
                            'Using: /fly all or number of list')
                    else:
                        if a[0] == 'all':
                            for i in bsInternal._getForegroundHostActivity(
                            ).players:
                                i.actor.node.fly = True
                        else:
                            bsInternal._getForegroundHostActivity(
                            ).players[int(
                                a[0]
                            )].actor.node.fly = bsInternal._getForegroundHostActivity(
                            ).players[int(a[0])].actor.node.fly == False
                elif m == '/floorReflection':
                    bs.getSharedObject(
                        'globals').floorReflection = bs.getSharedObject(
                            'globals').floorReflection == False
                elif m == '/ac':
                    if a == []:
                        bsInternal._chatMessage('Using: /ac R G B')
                        bsInternal._chatMessage('OR')
                        bsInternal._chatMessage('Using: /ac r bright speed')
                    else:
                        if a[0] == 'r':
                            m = 1.3 if a[1] is None else float(a[1])
                            s = 1000 if a[2] is None else float(a[2])
                            bsUtils.animateArray(
                                bs.getSharedObject('globals'), 'ambientColor',
                                3, {
                                    0: (1 * m, 0, 0),
                                    s: (0, 1 * m, 0),
                                    s * 2: (0, 0, 1 * m),
                                    s * 3: (1 * m, 0, 0)
                                }, True)
                        else:
                            try:
                                if a[1] is not None:
                                    bs.getSharedObject(
                                        'globals').ambientColor = (float(a[0]),
                                                                   float(a[1]),
                                                                   float(a[2]))
                                else:
                                    bs.screenMessage('Error!', color=(1, 0, 0))
                            except:
                                bs.screenMessage('Error!', color=(1, 0, 0))
                elif m == '/iceOff':
                    try:
                        activity.getMap().node.materials = [
                            bs.getSharedObject('footingMaterial')
                        ]
                        activity.getMap().isHockey = False
                    except:
                        pass
                    try:
                        activity.getMap().floor.materials = [
                            bs.getSharedObject('footingMaterial')
                        ]
                        activity.getMap().isHockey = False
                    except:
                        pass
                    for i in activity.players:
                        i.actor.node.hockey = False
                elif m == '/maxPlayers':
                    if a == []:
                        bsInternal._chatMessage(
                            'Using: /maxPlayers count of players')
                    else:
                        try:
                            bsInternal._getForegroundHostSession(
                            )._maxPlayers = int(a[0])
                            bsInternal._setPublicPartyMaxSize(int(a[0]))
                            bsInternal._chatMessage('Players limit set to ' +
                                                    str(int(a[0])))
                        except:
                            bs.screenMessage('Error!', color=(1, 0, 0))
                elif m == '/heal':
                    if a == []:
                        bsInternal._chatMessage(
                            'Using: /heal all or number of list')
                    else:
                        try:
                            bsInternal._getForegroundHostActivity().players[
                                int(a[0])].actor.node.handleMessage(
                                    bs.PowerupMessage(powerupType='health'))
                        except:
                            bs.screenMessage('Error!', color=(1, 0, 0))
                elif m == '/reflections':
                    if a == [] or len(a) < 2:
                        bsInternal._chatMessage(
                            'Using: /reflections type(1/0) scale')
                    rs = [int(a[1])]
                    type = 'soft' if int(a[0]) == 0 else 'powerup'
                    try:
                        bsInternal._getForegroundHostActivity().getMap(
                        ).node.reflection = type
                        bsInternal._getForegroundHostActivity().getMap(
                        ).node.reflectionScale = rs
                    except:
                        pass
                    try:
                        bsInternal._getForegroundHostActivity().getMap(
                        ).bg.reflection = type
                        bsInternal._getForegroundHostActivity().getMap(
                        ).bg.reflectionScale = rs
                    except:
                        pass
                    try:
                        bsInternal._getForegroundHostActivity().getMap(
                        ).floor.reflection = type
                        bsInternal._getForegroundHostActivity().getMap(
                        ).floor.reflectionScale = rs
                    except:
                        pass
                    try:
                        bsInternal._getForegroundHostActivity().getMap(
                        ).center.reflection = type
                        bsInternal._getForegroundHostActivity().getMap(
                        ).center.reflectionScale = rs
                    except:
                        pass
                elif m == '/shatter':
                    if a == []:
                        bsInternal._chatMessage(
                            'Using: /shatter all or number of list')
                    else:
                        if a[0] == 'all':
                            for i in bsInternal._getForegroundHostActivity(
                            ).players:
                                i.actor.node.shattered = int(a[1])
                        else:
                            bsInternal._getForegroundHostActivity().players[
                                int(a[0])].actor.node.shattered = int(a[1])
                elif m == '/cm':
                    if a == []:
                        time = 8000
                    else:
                        time = int(a[0])

                        op = 0.08
                        std = bs.getSharedObject('globals').vignetteOuter
                        bsUtils.animateArray(
                            bs.getSharedObject('globals'), 'vignetteOuter', 3,
                            {
                                0: bs.getSharedObject('globals').vignetteOuter,
                                17000: (0, 1, 0)
                            })

                    try:
                        bsInternal._getForegroundHostActivity().getMap(
                        ).node.opacity = op
                    except:
                        pass
                    try:
                        bsInternal._getForegroundHostActivity().getMap(
                        ).bg.opacity = op
                    except:
                        pass
                    try:
                        bsInternal._getForegroundHostActivity().getMap(
                        ).bg.node.opacity = op
                    except:
                        pass
                    try:
                        bsInternal._getForegroundHostActivity().getMap(
                        ).node1.opacity = op
                    except:
                        pass
                    try:
                        bsInternal._getForegroundHostActivity().getMap(
                        ).node2.opacity = op
                    except:
                        pass
                    try:
                        bsInternal._getForegroundHostActivity().getMap(
                        ).node3.opacity = op
                    except:
                        pass
                    try:
                        bsInternal._getForegroundHostActivity().getMap(
                        ).steps.opacity = op
                    except:
                        pass
                    try:
                        bsInternal._getForegroundHostActivity().getMap(
                        ).floor.opacity = op
                    except:
                        pass
                    try:
                        bsInternal._getForegroundHostActivity().getMap(
                        ).center.opacity = op
                    except:
                        pass

                    def off():
                        op = 1
                        try:
                            bsInternal._getForegroundHostActivity().getMap(
                            ).node.opacity = op
                        except:
                            pass
                        try:
                            bsInternal._getForegroundHostActivity().getMap(
                            ).bg.opacity = op
                        except:
                            pass
                        try:
                            bsInternal._getForegroundHostActivity().getMap(
                            ).bg.node.opacity = op
                        except:
                            pass
                        try:
                            bsInternal._getForegroundHostActivity().getMap(
                            ).node1.opacity = op
                        except:
                            pass
                        try:
                            bsInternal._getForegroundHostActivity().getMap(
                            ).node2.opacity = op
                        except:
                            pass
                        try:
                            bsInternal._getForegroundHostActivity().getMap(
                            ).node3.opacity = op
                        except:
                            pass
                        try:
                            bsInternal._getForegroundHostActivity().getMap(
                            ).steps.opacity = op
                        except:
                            pass
                        try:
                            bsInternal._getForegroundHostActivity().getMap(
                            ).floor.opacity = op
                        except:
                            pass
                        try:
                            bsInternal._getForegroundHostActivity().getMap(
                            ).center.opacity = op
                        except:
                            pass
                        bsUtils.animateArray(
                            bs.getSharedObject('globals'), 'vignetteOuter', 3,
                            {
                                0: bs.getSharedObject('globals').vignetteOuter,
                                100: std
                            })

                    bs.gameTimer(time, bs.Call(off))

                elif m == 'help':
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help1').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help2').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help3').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help4').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help5').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help6').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help7').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help8').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help9').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help10').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help11').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help12').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help13').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help14').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help15').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help16').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help17').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help18').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help19').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help20').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help21').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help22').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help23').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help24').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help25').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help26').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help27').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help28').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help29').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help30').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help31').evaluate())
                    bsInternal._chatMessage(
                        bs.Lstr(resource='help32').evaluate())
示例#14
0
    def handleMessage(self, msg):
        self._handleMessageSanityCheck()

        if isinstance(msg, bs.DieMessage):
            self.node.delete()

        elif isinstance(msg, DirtBombOutMessage):
            node = bs.getCollisionInfo("opposingNode")
            if node is not None and node.exists(): 
                if node in getattr(self, 'dirt_nodes', []): self.dirt_nodes.remove(node)
                node.handleMessage(DirtBombOutMessage())

        elif isinstance(msg, ExplodeHitMessage):
            node = bs.getCollisionInfo("opposingNode")
            if node is not None and node.exists():
                t = self.node.position

                # new
                mag = 2000.0
                if self.blastType == 'ice': mag *= 0.5
                elif self.blastType == 'landMine': mag *= 2.5
                elif self.blastType == 'firework': mag *= 0.2
                elif self.blastType == 'tp': mag *= 0.65
                elif self.blastType == 'qq': mag *= 0.65
                elif self.blastType == 'killLaKill': mag *= 1.75
                elif self.blastType == 'tnt': mag *= 2.0
                elif self.blastType == 'poison': mag *= 0.4
                elif self.blastType == 'boss': mag *= 5.0

                
                if self.blastType not in ['dirt']:
                    node.handleMessage(bs.HitMessage(
                        pos=t,
                        velocity=(0,0,0),
                        magnitude=mag,
                        hitType=self.hitType,
                        hitSubType=self.hitSubType,
                        radius=self.radius,
                        sourcePlayer=self.sourcePlayer, 
                        kickBack = 0))
                if self.blastType == "ice":
                    bs.playSound(Bomb.getFactory().freezeSound, 10, position=t)
                    node.handleMessage(bs.FreezeMessage())
                elif self.blastType == "firework":
                    node.handleMessage(FireworkBombHitMessage())
                elif self.blastType == "poison":
                    node.handleMessage(PoisonBombHitMessage())
                elif self.blastType == "qq":
                    node.handleMessage("knockout", 110.0)
                elif self.blastType == "tp":
                    node.handleMessage(TeleportBombHitMessage())
                    node.handleMessage("knockout", 45.0)
                elif self.blastType == "boss":
                    node.handleMessage("knockout", 100.0)
                elif self.blastType == "dirt" and node.getNodeType() == "spaz":
                    bs.playSound(Bomb.getFactory().splatterSound, 10, position=t)
                    node.handleMessage(bs.SlowMoveMessage())
                    if not hasattr(self, 'dirt_nodes'): self.dirt_nodes=[node]
                    elif node not in self.dirt_nodes: self.dirt_nodes.append(node)
        else:
            bs.Actor.handleMessage(self, msg)
示例#15
0
    def handleMessage(self, msg):
        self._handleMessageSanityCheck()

        if isinstance(msg, PowerupAcceptMessage):
            factory = self.getFactory()
            if self.powerupType == 'health':
                bs.playSound(factory.healthPowerupSound,
                             3,
                             position=self.node.position)
            bs.playSound(factory.powerupSound, 3, position=self.node.position)
            self._powersGiven = True
            self.handleMessage(bs.DieMessage())

        elif isinstance(msg, _TouchedMessage):
            if not self._powersGiven:
                node = bs.getCollisionInfo("opposingNode")
                if node is not None and node.exists():
                    if self.powerupType == "sloMo":
                        bs.getSharedObject(
                            'globals').slowMotion = bs.getSharedObject(
                                'globals').slowMotion == False
                        self._powersGiven = True
                        self.handleMessage(bs.DieMessage())
                        bsUtils.PopupText(
                            "SloMo",
                            color=(1, 2, 1),
                            scale=1.5,
                            position=self.node.position).autoRetain()
                    elif self.powerupType == "TNT":
                        p = node.positionForward
                        self._powersGiven = True
                        self.handleMessage(bs.DieMessage())
                        bs.Bomb((p[0] + 0.43, p[1] + 4, p[2] - 0.25),
                                velocity=(0, -6, 0),
                                bombType='tnt').autoRetain()
                        bsUtils.PopupText(
                            "TNT",
                            color=(1, 2, 1),
                            scale=1.5,
                            position=self.node.position).autoRetain()
                    elif self.powerupType == "strongICE":
                        p = node.positionForward
                        self._powersGiven = True
                        self.handleMessage(bs.DieMessage())
                        bs.Bomb((p[0] + 0.43, p[1] + 4, p[2] - 0.25),
                                velocity=(0, -6, 0),
                                bombType='ice').autoRetain()
                        bs.Bomb((p[0] + 0.43, p[1] + 4, p[2] - 0.25),
                                velocity=(0, -6, 0),
                                bombType='ice').autoRetain()
                        bs.Bomb((p[0] + 0.43, p[1] + 4, p[2] - 0.25),
                                velocity=(0, -6, 0),
                                bombType='ice').autoRetain()
                        bsUtils.PopupText(
                            "ICY",
                            color=(1, 2, 1),
                            scale=1.5,
                            position=self.node.position).autoRetain()
                    elif self.powerupType == "speedBoots":
                        self._powersGiven = True
                        self.handleMessage(bs.DieMessage())
                        node.hockey = True
                        bsUtils.PopupText(
                            "Speed away",
                            color=(1, 2, 1),
                            scale=1.5,
                            position=self.node.position).autoRetain()
                    elif self.powerupType == "invisible":
                        self._powersGiven = True
                        self.handleMessage(bs.DieMessage())
                        node.name = ' '
                        node.style = 'agent'
                        node.headModel = None
                        node.torsoModel = None
                        node.pelvisModel = None
                        node.upperArmModel = None
                        node.foreArmModel = None
                        node.handModel = None
                        node.upperLegModel = None
                        node.lowerLegModel = None
                        node.toesModel = None
                        bsUtils.PopupText(
                            "Invisible",
                            color=(1, 2, 1),
                            scale=1.5,
                            position=self.node.position).autoRetain()
                    elif self.powerupType == "character":
                        self._powersGiven = True
                        self.handleMessage(bs.DieMessage())
                        testingEvent = 0

                        event = random.randint(
                            1, 6) if testingEvent == 0 else testingEvent
                        print 'Patron And Oore282 <3: ' + str(event)

                        if event in [1]:
                            node.colorTexture = bs.getTexture('frostyColor')
                            node.colorMaskTexture = bs.getTexture(
                                'frostyColorMask')
                            node.headModel = bs.getModel('frostyHead')
                            node.upperArmModel = bs.getModel('kronkUpperArm')
                            node.torsoModel = bs.getModel('frostyTorso')
                            node.pelvisModel = bs.getModel('frostyPelvis')
                            node.foreArmModel = bs.getModel('frostyForeArm')
                            node.handModel = bs.getModel('frostyHand')
                            node.upperLegModel = bs.getModel('frostyUpperLeg')
                            node.lowerLegModel = bs.getModel('frostyLowerLeg')
                            node.toesModel = bs.getModel('frostyToes')
                            node.style = 'frosty'
                            bsUtils.PopupText(
                                "Frosty The Snowman",
                                color=(1, 2, 1),
                                scale=1.5,
                                position=self.node.position).autoRetain()
                        elif event in [2]:
                            node.colorTexture = bs.getTexture('santaColor')
                            node.colorMaskTexture = bs.getTexture(
                                'santaColorMask')
                            node.headModel = bs.getModel('santaHead')
                            node.upperArmModel = bs.getModel('santaUpperArm')
                            node.torsoModel = bs.getModel('santaTorso')
                            node.pelvisModel = bs.getModel('kronkPelvis')
                            node.foreArmModel = bs.getModel('santaForeArm')
                            node.handModel = bs.getModel('santaHand')
                            node.upperLegModel = bs.getModel('santaUpperLeg')
                            node.lowerLegModel = bs.getModel('santaLowerLeg')
                            node.toesModel = bs.getModel('santaToes')
                            node.style = 'santa'
                            bsUtils.PopupText(
                                "SANTA",
                                color=(1, 2, 1),
                                scale=1.5,
                                position=self.node.position).autoRetain()
                        elif event in [3]:
                            node.colorTexture = bs.getTexture('wizardColor')
                            node.colorMaskTexture = bs.getTexture(
                                'wizardColorMask')
                            node.headModel = bs.getModel('wizardHead')
                            node.upperArmModel = bs.getModel('wizardUpperArm')
                            node.torsoModel = bs.getModel('wizardTorso')
                            node.pelvisModel = bs.getModel('wizardPelvis')
                            node.foreArmModel = bs.getModel('wizardForeArm')
                            node.handModel = bs.getModel('wizardHand')
                            node.upperLegModel = bs.getModel('wizardUpperLeg')
                            node.lowerLegModel = bs.getModel('wizardLowerLeg')
                            node.toesModel = bs.getModel('wizardToes')
                            node.style = 'wizard'
                            bsUtils.PopupText(
                                "EVIL SCEPTER WIZARD MAN",
                                color=(1, 2, 1),
                                scale=1.5,
                                position=self.node.position).autoRetain()
                        elif event in [4]:
                            node.colorTexture = bs.getTexture('pixieColor')
                            node.colorMaskTexture = bs.getTexture(
                                'pixieColorMask')
                            node.headModel = bs.getModel('pixieHead')
                            node.upperArmModel = bs.getModel('pixieUpperArm')
                            node.torsoModel = bs.getModel('pixieTorso')
                            node.pelvisModel = bs.getModel('pixiePelvis')
                            node.foreArmModel = bs.getModel('pixieForeArm')
                            node.handModel = bs.getModel('pixieHand')
                            node.upperLegModel = bs.getModel('pixieUpperLeg')
                            node.lowerLegModel = bs.getModel('pixieLowerLeg')
                            node.toesModel = bs.getModel('pixieToes')
                            node.style = 'pixie'
                            bsUtils.PopupText(
                                "PIXIEL-ATED",
                                color=(1, 2, 1),
                                scale=1.5,
                                position=self.node.position).autoRetain()
                        elif event in [5]:
                            node.colorTexture = bs.getTexture('cyborgColor')
                            node.colorMaskTexture = bs.getTexture(
                                'cyborgColorMask')
                            node.headModel = bs.getModel('cyborgHead')
                            node.upperArmModel = bs.getModel('cyborgUpperArm')
                            node.torsoModel = bs.getModel('cyborgTorso')
                            node.pelvisModel = bs.getModel('cyborgPelvis')
                            node.foreArmModel = bs.getModel('cyborgForeArm')
                            node.handModel = bs.getModel('cyborgHand')
                            node.upperLegModel = bs.getModel('cyborgUpperLeg')
                            node.lowerLegModel = bs.getModel('cyborgLowerLeg')
                            node.toesModel = bs.getModel('cyborgToes')
                            node.style = 'cyborg'
                            bsUtils.PopupText(
                                "The Robo",
                                color=(1, 2, 1),
                                scale=1.5,
                                position=self.node.position).autoRetain()
                        elif event in [6]:
                            node.colorTexture = bs.getTexture('ninjaColor')
                            node.colorMaskTexture = bs.getTexture(
                                'ninjaColorMask')
                            node.headModel = bs.getModel('ninjaHead')
                            node.upperArmModel = bs.getModel('ninjaUpperArm')
                            node.torsoModel = bs.getModel('ninjaTorso')
                            node.pelvisModel = bs.getModel('ninjaPelvis')
                            node.foreArmModel = bs.getModel('ninjaForeArm')
                            node.handModel = bs.getModel('ninjaHand')
                            node.upperLegModel = bs.getModel('ninjaUpperLeg')
                            node.lowerLegModel = bs.getModel('ninjaLowerLeg')
                            node.toesModel = bs.getModel('ninjaToes')
                            node.style = 'ninja'
                            node.nameColor = (0, 0, 0)
                            node.color = (0, 0, 0)
                            node.highlight = (0, 0, 0)
                            bsUtils.PopupText(
                                "PC||Modder",
                                color=(1, 2, 1),
                                scale=1.5,
                                position=self.node.position).autoRetain()
                    elif self.powerupType == "spazColor":
                        self._powersGiven = True
                        self.handleMessage(bs.DieMessage())
                        node.color = ((0 + random.random() * 6.5),
                                      (0 + random.random() * 6.5),
                                      (0 + random.random() * 6.5))
                        node.highlight = ((0 + random.random() * 6.5),
                                          (0 + random.random() * 6.5),
                                          (0 + random.random() * 6.5))
                        node.nameColor = ((0 + random.random() * 1.5),
                                          (0 + random.random() * 1.5),
                                          (0 + random.random() * 1.5))
                        node.name += random.choice([
                            '\nTHE BOSS', '\nNOOB', '\nPRO', '\nKill Me',
                            '\nNooby'
                        ])
                        bsUtils.PopupText(
                            "PC||Modder",
                            color=(1, 2, 1),
                            scale=1.5,
                            position=self.node.position).autoRetain()
                    elif self.powerupType == "troll":
                        self._powersGiven = True
                        self.handleMessage(bs.DieMessage())
                        node.handleMessage(bs.FreezeMessage())
                        node.handleMessage(bs.FreezeMessage())
                        node.handleMessage(
                            bs.PowerupMessage(powerupType='curse'))
                        bsUtils.PopupText(
                            "TRoLL",
                            color=(1, 2, 1),
                            scale=1.5,
                            position=self.node.position).autoRetain()
                    elif self.powerupType == "champ":
                        self._powersGiven = True
                        self.handleMessage(bs.DieMessage())
                        node.handleMessage(
                            bs.PowerupMessage(powerupType='punch'))
                        node.handleMessage(
                            bs.PowerupMessage(powerupType='shield'))
                        bsUtils.PopupText(
                            "Champ",
                            color=(1, 2, 1),
                            scale=1.5,
                            position=self.node.position).autoRetain()
                    else:
                        node.handleMessage(
                            PowerupMessage(self.powerupType,
                                           sourceNode=self.node))

        elif isinstance(msg, bs.DieMessage):
            if self.node.exists():
                if (msg.immediate):
                    self.node.delete()
                else:
                    curve = bs.animate(self.node, "modelScale", {0: 1, 100: 0})
                    bs.gameTimer(100, self.node.delete)
                    bs.gameTimer(100, self.nodeLight.delete)

        elif isinstance(msg, bs.OutOfBoundsMessage):
            self.handleMessage(bs.DieMessage())

        elif isinstance(msg, bs.HitMessage):
            # dont die on punches (thats annoying)
            if msg.hitType != 'punch':
                self.handleMessage(bs.DieMessage())
        else:
            bs.Actor.handleMessage(self, msg)