def __generateSOS(self, difficulty): g = lambda : random.choice(NPCToons.FOnpcFriends.keys()) v = g() getStars = lambda x: NPCToons.getNPCTrackLevelHpRarity(x)[-1] maxStars = min(2, int(math.ceil(difficulty / 5.0))) minStars = max(0, maxStars - 1) while not minStars <= getStars(v) <= maxStars: v = g() return v
def __generateSOS(self, difficulty): g = lambda: random.choice(NPCToons.FOnpcFriends.keys()) v = g() getStars = lambda x: NPCToons.getNPCTrackLevelHpRarity(x)[-1] maxStars = min(2, int(math.ceil(difficulty / 5.0))) minStars = max(0, maxStars - 1) while not minStars <= getStars(v) <= maxStars: v = g() return v
def __generateSOS(self, difficulty): g = lambda: random.choice(NPCToons.FOnpcFriends.keys()) v = g() getStars = lambda x: NPCToons.getNPCTrackLevelHpRarity(x)[-1] maxStars = min(2, int(math.ceil(difficulty / 5.))) minStars = max(0, maxStars - 1) while not (minStars <= getStars(v) <= maxStars): v = g() self.notify.info('selected SOS %s (stars = %s)' % (v, getStars(v))) return v
def update(self, NPCID, count = 0, fCallable = 0): oldNPCID = self['NPCID'] self['NPCID'] = NPCID if NPCID != oldNPCID: if self.NPCHead: self.NPCHead.detachNode() self.NPCHead.delete() if NPCID is None: self.showBack() return self.front.show() self.back.hide() self.NPCName['text'] = TTLocalizer.NPCToonNames[NPCID] self.NPCHead = self.createNPCToonHead(NPCID, dimension=self.NPCHeadDim) self.NPCHead.reparentTo(self.front) self.NPCHead.setZ(self.NPCHeadPosZ) track, level, hp, rarity = NPCToons.getNPCTrackLevelHpRarity(NPCID) if track == 100: sosText = TTLocalizer.InventoryFire else: sosText = self.sosTracks[track] if track == ToontownBattleGlobals.NPC_RESTOCK_GAGS: if level == -1: sosText += ' All' else: sosText += ' ' + self.sosTracks[level] sosText = TextEncoder.upper(sosText) self.sosTypeInfo['text'] = sosText for i in xrange(self.maxRarity): if i < rarity: self.rarityStars[i].show() else: self.rarityStars[i].hide() if fCallable: self.sosCallButton.show() self.sosCountInfo.setPos(-0.4, 0, self.sosCountInfoPosZ) self.sosCountInfo['text_scale'] = self.sosCountInfoScale self.sosCountInfo['text_align'] = TextNode.ALeft else: self.sosCallButton.hide() self.sosCountInfo.setPos(0, 0, self.sosCountInfo2PosZ) self.sosCountInfo['text_scale'] = self.sosCountInfo2Scale self.sosCountInfo['text_align'] = TextNode.ACenter if count > 0: countText = TTLocalizer.NPCFriendPanelRemaining % count self.sosCallButton['state'] = DGG.NORMAL else: countText = 'Unavailable' self.sosCallButton['state'] = DGG.DISABLED self.sosCountInfo['text'] = countText
def npcFriendsMaxStars(stars): return [ id for id in NPCToons.npcFriends.keys() if NPCToons.getNPCTrackLevelHpRarity(id)[3] <= stars ]
def setValues(self, index, track, level = None, numTargets = None, targetIndex = None, localNum = None): self.notify.debug('Toon Panel setValues: index=%s track=%s level=%s numTargets=%s targetIndex=%s localNum=%s' % (index, track, level, numTargets, targetIndex, localNum)) self.undecidedText.hide() self.sosText.hide() self.fireText.hide() self.gagNode.hide() self.whichText.hide() self.passNode.hide() self.cleanupSosHead() self.hoverButton.unbind(DGG.ENTER) if self.hasGag: self.gag.removeNode() self.hasGag = 0 if track == BattleBase.NO_ATTACK or track == BattleBase.UN_ATTACK: self.undecidedText.show() elif track == BattleBase.PASS_ATTACK: self.passNode.show() elif track == BattleBase.FIRE: self.fireText.show() self.whichText.show() self.whichText['text'] = self.determineWhichText(numTargets, targetIndex, localNum, index) elif track == BattleBase.NPCSOS: self.sosHead = createNPCToonHead(targetIndex) self.sosHead.reparentTo(self) self.sosHead.setPos(0.1, 0, 0.045) self.sosHead.setScale(0.24) track, level, hp, rarity = NPCToons.getNPCTrackLevelHpRarity(targetIndex) sosType = self.sosTracks[track] if track == NPC_RESTOCK_GAGS: if level == -1: sosType += ' All' else: sosType += ' ' + self.sosTracks[level] if hp: hpString = TTLocalizer.BattleSOSPopupHP % (TTLocalizer.BattleSOSPopupHeal if track == HEAL_TRACK else TTLocalizer.BattleSOSPopupHarm, hp) sosType = TextEncoder.upper(sosType) count = max(0, self.avatar.getNPCFriendCount(targetIndex) - 1) info = TTLocalizer.BattleSOSPopup % (sosType, NPCToons.getNPCName(targetIndex), hpString if hp else '', rarity, count) self.hoverButton.bind(DGG.ENTER, self.battle.showRolloverFrame, extraArgs=[self, TTLocalizer.BattleHoverSos, info]) elif track == BattleBase.SOS or track == BattleBase.PETSOS: self.sosText.show() elif track >= MIN_TRACK_INDEX and track <= MAX_TRACK_INDEX: self.undecidedText.hide() self.passNode.hide() self.gagNode.show() invButton = base.localAvatar.inventory.buttonLookup(track, level) self.gag = invButton.instanceUnderNode(self.gagNode, 'gag') self.gag.setScale(0.8) self.gag.setPos(0, 0, 0.02) self.hasGag = 1 if self.avatar: curExp, nextExp = self.avatar.inventory.getCurAndNextExpValues(track) organic = self.avatar.checkGagBonus(track, level) damage = int(getAvPropDamage(track, level, curExp, organic)) numItems = max(0, self.avatar.inventory.numItem(track, level) - 1) info = TTLocalizer.BattleGagPopup % (self.avatar.inventory.getToonupDmgStr(track, 0), damage, numItems) self.hoverButton.bind(DGG.ENTER, self.battle.showRolloverFrame, extraArgs=[self, TTLocalizer.BattleHoverGag, info]) if self.avatar.checkGagBonus(track, level): self.gag.setColor((1, 0, 0, 1) if track == 1 and level == 5 else (0, 1, 0, 1)) if numTargets is not None and targetIndex is not None and localNum is not None: self.whichText.show() self.whichText['text'] = self.determineWhichText(numTargets, targetIndex, localNum, index) else: self.notify.error('Bad track value: %s' % track)
def setValues(self, index, track, level=None, numTargets=None, targetIndex=None, localNum=None): self.notify.debug( 'Toon Panel setValues: index=%s track=%s level=%s numTargets=%s targetIndex=%s localNum=%s' % (index, track, level, numTargets, targetIndex, localNum)) self.undecidedText.hide() self.sosText.hide() self.fireText.hide() self.gagNode.hide() self.whichText.hide() self.passNode.hide() self.cleanupSosHead() self.hoverButton.unbind(DGG.ENTER) if self.hasGag: self.gag.removeNode() self.hasGag = 0 if track == BattleBase.NO_ATTACK or track == BattleBase.UN_ATTACK: self.undecidedText.show() elif track == BattleBase.PASS_ATTACK: self.passNode.show() elif track == BattleBase.FIRE: self.fireText.show() self.whichText.show() self.whichText['text'] = self.determineWhichText( numTargets, targetIndex, localNum, index) elif track == BattleBase.NPCSOS: self.sosHead = createNPCToonHead(targetIndex) self.sosHead.reparentTo(self) self.sosHead.setPos(0.1, 0, 0.045) self.sosHead.setScale(0.24) track, level, hp, rarity = NPCToons.getNPCTrackLevelHpRarity( targetIndex) sosType = self.sosTracks[track] if track == NPC_RESTOCK_GAGS: if level == -1: sosType += ' All' else: sosType += ' ' + self.sosTracks[level] if hp: hpString = TTLocalizer.BattleSOSPopupHP % ( TTLocalizer.BattleSOSPopupHeal if track == HEAL_TRACK else TTLocalizer.BattleSOSPopupHarm, hp) sosType = TextEncoder.upper(sosType) count = max(0, self.avatar.getNPCFriendCount(targetIndex) - 1) info = TTLocalizer.BattleSOSPopup % ( sosType, NPCToons.getNPCName(targetIndex), hpString if hp else '', rarity, count) self.hoverButton.bind( DGG.ENTER, self.battle.showRolloverFrame, extraArgs=[self, TTLocalizer.BattleHoverSos, info]) elif track == BattleBase.SOS or track == BattleBase.PETSOS: self.sosText.show() elif track >= MIN_TRACK_INDEX and track <= MAX_TRACK_INDEX: self.undecidedText.hide() self.passNode.hide() self.gagNode.show() invButton = base.localAvatar.inventory.buttonLookup(track, level) self.gag = invButton.instanceUnderNode(self.gagNode, 'gag') self.gag.setScale(0.8) self.gag.setPos(0, 0, 0.02) self.hasGag = 1 if self.avatar: curExp, nextExp = self.avatar.inventory.getCurAndNextExpValues( track) organic = self.avatar.checkGagBonus(track, level) damage = int(getAvPropDamage(track, level, curExp, organic)) numItems = max(0, self.avatar.inventory.numItem(track, level) - 1) info = TTLocalizer.BattleGagPopup % ( self.avatar.inventory.getToonupDmgStr(track, 0), damage, numItems) self.hoverButton.bind( DGG.ENTER, self.battle.showRolloverFrame, extraArgs=[self, TTLocalizer.BattleHoverGag, info]) if self.avatar.checkGagBonus(track, level): self.gag.setColor(( 1, 0, 0, 1) if track == 1 and level == 5 else (0, 1, 0, 1)) if numTargets is not None and targetIndex is not None and localNum is not None: self.whichText.show() self.whichText['text'] = self.determineWhichText( numTargets, targetIndex, localNum, index) else: self.notify.error('Bad track value: %s' % track)