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
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
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()
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])