예제 #1
0
 def __accumulateTracks(self):
     tracks = []
     for gagId in base.localAvatar.attacks.keys():
         trackId = GagGlobals.getTrackOfGag(gagId, getId=True)
         if trackId not in tracks:
             tracks.append(trackId)
     tracks.sort()
     return tracks
예제 #2
0
 def __getGagEffectOnMe(self, avId, gagName, gagData, damageInfo, isPlayer):
     """ Returns the base damage and the damage offset a specified gag name used by "avId" has on this Cog """
     weaknessFactor = self.suitPlan.getGagWeaknesses().get(gagName, 1.0)
     classWeakness = self.suitPlan.getCogClassAttrs().getGagDmgRamp(GagGlobals.getTrackOfGag(gagName, isAI = True))
     if isPlayer:
         baseDmg = GagGlobals.calculateDamage(avId, gagName, gagData)
     else:
         baseDmg = damageInfo.damageAmount
     dmgOffset = int(math.ceil(baseDmg * weaknessFactor * classWeakness)) - baseDmg
     return baseDmg, dmgOffset
예제 #3
0
    def update(self):
        plyr = base.localAvatar

        if not base.localAvatar.hasAttacks():
            return

        gagId = -1
        if self.getCurrentOrNextState() == 'Idle':
            gagId = plyr.getEquippedAttack()
        elif self.getCurrentOrNextState() == 'Select' and self.currentGag:
            gagId = self.currentGag.gagId

        if gagId != -1:
            self.ammoFrame.showThrough()
            if plyr.hasAttackId(gagId):
                self.ammoText.setText(
                    '%i/%i' %
                    (plyr.getAttackAmmo(gagId), plyr.getAttackMaxAmmo(gagId)))
            else:
                self.ammoText.setText('')
            col = GagGlobals.TrackColorByName[GagGlobals.getTrackOfGag(gagId)]
            self.ammoFrame['image_color'] = (col[0], col[1], col[2], 1.0)
        else:
            self.ammoFrame.hide()
예제 #4
0
    def takeDamage(self, damageInfo):  #, gagId, distance):
        gagId = damageInfo.attackID
        distance = damageInfo.damageDistance
        avId = damageInfo.damager.doId
        avatar = damageInfo.damager
        gagName = self.air.attackMgr.getAttackName(gagId)

        dataRef = GagGlobals.getGagData(gagName)
        if dataRef:
            data = dict(dataRef)
        else:
            data = {}
        data['distance'] = distance
        track = GagGlobals.getTrackOfGag(gagId, getId=True, isAI=True)

        isPlayer = hasattr(avatar, "trackExperience")

        if self.canGetHit():
            damage = self.__handleTacticalAttacks(avatar.doId, gagName, data,
                                                  damageInfo, isPlayer)

            self.setDamageConditions(damage)

            if isPlayer and self.battleZone:
                # We only want to award credit when Toons use gags that are less than or at the level of the Cog
                # they're using them on.
                gagLevel = GagGlobals.TrackGagNamesByTrackName.get(
                    data.get('track')).index(gagName)

                if gagLevel <= self.level:
                    self.battleZone.handleGagUse(gagId, avId)

            if isPlayer and not avId in self.damagers:
                self.damagers.append(avId)

            if self.isDead():
                self.stopStun()

                #if self.firstTimeDead:
                #    self.sendUpdate('doStunEffect')

                deathAnim = self.__getAnimForGag(track, gagName)
                #self.b_setAnimState(deathAnim, 0)

                #self.stopAI()

                # Let's give everyone credit who damaged me.
                if self.battleZone:
                    for damager in self.damagers:
                        self.battleZone.handleCogDeath(self, damager)

                self.firstTimeDead = False

            elif gagName in GagGlobals.Stunnables and not self.stunned:
                # We have been stunned.
                self.clearTrack()

                animName = self.__getAnimForGag(track, gagName)
                animB4Stun = SuitGlobals.getAnimIdByName(animName)
                self.sendUpdate('stun', [animB4Stun])

                baseStunTime = 6.0
                stunTime = (baseStunTime /
                            self.suitPlan.getCogClassAttrs().dmgMod) * (
                                damage / 95.0)
                taskMgr.doMethodLater(stunTime, self.__stunTask,
                                      self.taskName('stunTask'))

                self.stunned = True

            else:
                # Sound will wake me up.
                if self.stunned and track == GagType.SOUND:
                    self.stopStun(restart=True)

            # Do appropriate gag effects.
            flags = 0
            if gagName == GagGlobals.TNT:
                flags |= GagEffects.GEAsh
            if flags != 0:
                self.sendUpdate('doGagEffect', [flags])